; Orange programmer module v1.6
; (c) 2003-2012 CnCLab
; CHIP=S29630,2Kx16,S29630.HPL

; primary tested

SOCKET=2 ;"MW"

PINO=CLK,0
PINO=DI,1
PINO=CS,2
PINO=ORG,3
PINO=NC,4
PINI=DO,1

CDELAY=4 ; one set delay

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

[INIT]
ORG=1,NC=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=(11,0){DI=ADR[I],CLK=P}    ; out adr
DI=1
LOOP=(15,0){CLK=P,DATA[I]=DO}  ; read data word
CS=0

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

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