; Orange programmer module v3.3
; (c) 2000 Alex Plusov, Victor Makcimov
; CHIP=Rohm BR90X0 series
; CHIP=BR9010,64x16;BR9020,128x16;BR9040,256x16

; tested BR9020F

SOCKET=2

PINO=CS,2          ;1
PINO=CLK,0         ;2
PINO=DI,1          ;3
PINO=WC,3          ;6
PINO=RBI,4          ;7 input - not used
PINI=DO,1          ;4

CDELAY=2 ; one set delay (1 MHz Max!)

[INIT]
WC=1,RBI=1,CS=1,CLK=0

[READ]
CS=0
R0=10101000B
LOOP=(7,0){DI=R0[I],CLK=P}  	; start+READ opcode

LOOP=(0,7){DI=ADR[I],CLK=P}    	; out adr
DI=1
LOOP=(0,15){CLK=1,DATA[I]=DO,CLK=0}  	; read data word
CS=1

[WRITEINIT]
WC=0 					;enable write
CS=0
R0=10100011B
LOOP=(7,0){DI=R0[I],CLK=P}  	; EWEN opcode
LOOP=(7,0){CLK=P}  		; empty
CS=1

[WRITE]
CS=0
R0=10100100B
LOOP=(7,0){DI=R0[I],CLK=P}    	; start+WRITE opcode

LOOP=(0,7){DI=ADR[I],CLK=P}    	; out adr
LOOP=(0,15){DI=DATA[I],CLK=P}  	; write data word

P=10000					; tE/W 10 ms max
CS=1

[WRITEEND]
CS=0
R0=10100000B
LOOP=(7,0){DI=R0[I],CLK=P}  	; EWDS opcode
LOOP=(7,0){CLK=P}  		; empty
CS=1
WC=1