; Orange programmer module v3.3
; (c) 2004 CnCLab
; GI I2C:
; CHIP=PCD8582,256x8

SOCKET=1 ;"I2C"

PING=SCL,0
PING=SDA,1
PINO=PTC,2
PINO=A0, 3
PINO=A1, 4
PINO=A2, 5


TESTMASK=11111100  ;7 pin not present

CDELAY = 5 ; mks one bit delay

[_START]
SDA=1,SCL=1,SDA=0,SCL=0               ; Start  10

[_STOP]
SDA=0,SCL=1,SDA=1,SCL=0               ; Stop   01

[INIT]
A0=0,A1=0,A2=0


[READ]
_START
R0=0xA
LOOP=(3,0) {SDA=R0[I],SCL=1,SCL=0}    ; out 4 bits DeviceAdr
LOOP=(10,8){SDA=ADR[I],SCL=1,SCL=0}   ; out 3 bits Hi(Adr)
SDA=0,SCL=1,SCL=0                     ; out 1 bit, 0=Write Mode
SDA=1,SCL=1,SDA?0,SCL=0               ; ACKN check
                                      ; end  out  DeviceAdr, Hi(Adr), Mode

LOOP=(7,0) {SDA=ADR[I],SCL=1,SCL=0}   ; out 8 bits Lo(Adr)
SDA=1,SCL=1,SDA?0,SCL=0               ; ACKN check
                                      ; end  out   Lo(Adr)

_START
R0=0xA
LOOP=(3,0) {SDA=R0[I],SCL=1,SCL=0}    ; out 4 bits DeviceAdr
LOOP=(10,8) {SDA=ADR[I],SCL=1,SCL=0}  ; out 3 bits Hi(Adr)
SDA=1,SCL=1,SCL=0                     ; out 1 bit, 1=Read Mode
SDA=1,SCL=1,SDA?0,SCL=0               ; ACKN  check
                                      ; end  out  DeviceSelect

LOOP=(7,0) {SCL=1,DATA[I]=SDA,SCL=0}  ; read byte Data
SDA=1,SCL=1,SCL=0                     ; out  master  NO_ACKN

_STOP


[WRITE]
_START
R0=0xA
LOOP=(3,0) {SDA=R0[I],SCL=1,SCL=0}    ; out 4 bits DeviceAdr
LOOP=(10,8) {SDA=ADR[I],SCL=1,SCL=0}  ; out 3 bits Hi(Adr)
SDA=0,SCL=1,SCL=0                     ; out 1 bit, 0=Write Mode
SDA=1,SCL=1,SDA?0,SCL=0               ; ACKN check
                                      ; end  out DeviceAdr, Hi(Adr), Mode

LOOP=(7,0) {SDA=ADR[I],SCL=1,SCL=0}   ; out 8 bits Lo(Adr)
SDA=1,SCL=1,SDA?0,SCL=0               ; ACKN check
                                      ; end  out   Lo(Adr)

LOOP=(7,0) {SDA=DATA[I],SCL=1,SCL=0}  ; out byte Data
SDA=1,SCL=1,SDA?0,SCL=0               ; ACKN  check
                                      ; end out Data

_STOP

;LOOP=(258,0) {PTC=1,P=2,PTC=0,P=2}    ; PTC CLOCK TIMING (min 257 loops)
;LOOP(2){
;PTC=1,P=100000
;PTC=0,P=100000
;}
PTC=1,P=200000