; Orange programmer module v1.6
; (c) 1999 Alex Plusov
; CHIP=93C56 (128x16),93C66 (256x16)
; chips w/o WP & ORG

;FM93C66

SOCKET=2 ;"MW"
TESTMASK=11110000


PINO=CLK,0
PINO=DI,1
PINO=CS,2
PINO=NC1,3
PINO=NC2,4
PINI=DO,1

CDELAY=4 ; one set delay

[_WAITWR]
LOOP=(0,10000){
DO?1{BREAK}
P=10
}



[INIT]
NC1=0,NC2=0

[READ]
CS=0
CLK=0
CS=1
DI=1,CLK=P    ; start bit
DI=1,CLK=P    ; \ read instruction
DI=0,CLK=P    ; /
LOOP=(7,0){DI=ADR[I],CLK=P}    ; out adr
DI=1,P=1
DO?1{PRINT=A("Chip not respond at %04lX, continue?",ADR),RA?0{EXIT}} 
LOOP=(15,0){CLK=P,DATA[I]=DO}  ; read data word
CS=0

[WRITEINIT]
CS=0
CLK=0
CS=1
R0=10011000000b
LOOP=(10,0){DI=R0[I],CLK=P}    ; out EWEN
CS=0


[WRITE]
CS=0
CLK=0
CS=1
DI=1,CLK=P    ; start bit
DI=0,CLK=P    ; \ write instruction
DI=1,CLK=P    ; /
LOOP=(7,0){DI=ADR[I],CLK=P}    ; out adr
LOOP=(15,0){DI=DATA[I],CLK=P}  ; write data word
CS=0,DI=1,CS=1      ; check status
P=10000
_WAITWR
DO?1
CS=0

[Erase]
CS=0
CLK=0
CS=1

CS=1
R0=10011000000b
LOOP=(10,0){DI=R0[I],CLK=P}    ; out EWEN
CS=0

CS=1
R0=10010000000b
LOOP=(10,0){DI=R0[I],CLK=P}    ; out ERAL
CS=0

P=20000
_WAITWR