; Orange programmer module v2.4
; (c) 1999-2003 Alex Plusov
; I2C chips with invert wp
; CHIP=BAW574252 128x8

SOCKET=1 ;"I2C"

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


CDELAY = 5 ; one set delay

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

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

[INIT]
A0=0,A1=0,A2=0
WP=0
R0=0xA0   ; write I2C address const
R1=0xA1   ; read I2C address const
SCL=0,SDA=1
LOOP=(7,0) {SCL=1,SCL=0} ; out dummy 
P=1000

[READ]
_START
LOOP=(7,0) {SDA=R0[I],SCL=1,SCL=0}  ; out 8 bits 0xA0
SDA=0,SDA=1,SCL=1,SDA?0             ; ack check
SCL=0,SDA=0

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

_START
LOOP=(7,0){SDA=R1[I],SCL=1,SCL=0}    ; out 8 bits 0xA1
SDA=0,SDA=1,SCL=1,SDA?0              ; ack check
SCL=0

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

_STOP

[WRITEINIT]
WP=1,P=500


[_WRITEB]
_START
LOOP=(7,0) {SDA=R0[I],SCL=1,SCL=0} ; out 8 bits 0xA0
SDA=0,SDA=1,SCL=1,SDA?0             ; ack check
SCL=0,SDA=0

LOOP=(7,0){SDA=ADR[I],SCL=1,SCL=0}   ; out 8 bits address
SDA=0,SDA=1,SCL=1,SDA?0             ; ack check
SCL=0,SDA=0

LOOP=(7,0){SDA=R2[I],SCL=1,SCL=0}   ; out 8 bits data from R2
SDA=0,SDA=1,SCL=1,SDA?0             ; 0 - ack check?
SCL=0,SDA=0
_STOP
P=15000

[WRITE]
R2=0xFF,_WRITEB				   ; erase as write FF
R2=DATA,_WRITEB
R2=DATA,_WRITEB
R2=DATA,_WRITEB