; Orange programmer module v3.5
; (c) 2000-2003 CnCLab
; CHIP=M58659,32x16

; Use ER1400 modified adaper, external power 35V
; For Orange-2-4 Only!
; Tested


SOCKET=0
ALLPINS=14
INFO="ER1400 Adapter M/T"

PINO=CLK,0,6
PING=DO,1,12
PINO=DI,2,12
PINO=C1,3,7
PINO=C2,4,8
PINO=C3,5,9

CDELAY = 1 ; 14kHz Max (for CLK used BIG delay )


[INIT]
C1=0,C2=0,C3=0 ;StandBy
CLK=0,DI=0,P=100
DO=Z
P=1000

[END]
C1=0,C2=0,C3=0 ;StandBy
CLK=1,DI=1


[_CLKPULSE]
CLK=1,P=100,CLK=0,P=100     ; 14kHz Max

[READ]
R0=ADR  ; копируем адрес
DI=1
C1=0,C2=0,C3=0,_CLKPULSE ;StandBy

C1=0,C2=1,C3=1              ; Accept address Mode

R1=0                        ; fill address word
R2=R0,R2=/8                 ; Hi
R1[R2]=1                    ; reset bit
LOOP=(3,0){DI=R1[I],_CLKPULSE} ; send Hi word

R1=0                        ; fill address word
R2=R0,R2=%8                 ; Lo
R1[R2]=1                    ; reset bit
LOOP=(7,0){DI=R1[I],_CLKPULSE} ; send Lo word

C1=0,C2=0,C3=0,_CLKPULSE ;StandBy

C1=1,C2=0,C3=0,_CLKPULSE ; Read Mode

C1=0,C2=0,C3=0,_CLKPULSE ;StandBy

DI=1 
C1=1,C2=0,C3=1           ; Shift data output Mode
P=200
LOOP=(0,15){DATA[I]=DO,CLK=1,P=100,CLK=0,P=100}

C1=0,C2=0,C3=0,_CLKPULSE ;StandBy


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


[WRITE]
R0=ADR       ; копируем адрес
DI=1
C1=0,C2=0,C3=0,_CLKPULSE ;StandBy

C1=0,C2=1,C3=1              ; Accept address Mode

R1=0                        ; fill address word
R2=R0,R2=/8                 ; Hi
R1[R2]=1                    ; reset bit
LOOP=(3,0){DI=R1[I],_CLKPULSE} ; send Hi word

R1=0                        ; fill address word
R2=R0,R2=%8                 ; Lo
R1[R2]=1                    ; reset bit
LOOP=(7,0){DI=R1[I],_CLKPULSE} ; send Lo word

C1=0,C2=0,C3=0,_CLKPULSE ;StandBy

C1=0,C2=1,C3=0,_CLKPULSE ;Erase
LOOP=(0,250){CLK=1,P=100,CLK=0,P=100}

C1=0,C2=0,C3=0,_CLKPULSE ;StandBy
;_CLKPULSE,_CLKPULSE

C1=1,C2=1,C3=1           ;DATA
LOOP=(0,15){DI=DATA[I],_CLKPULSE}

C1=0,C2=0,C3=0,_CLKPULSE ;StandBy
;_CLKPULSE,_CLKPULSE

C1=1,C2=1,C3=0,_CLKPULSE ; write
LOOP=(0,250){CLK=1,P=100,CLK=0,P=100}

C1=0,C2=0,C3=0,_CLKPULSE ;StandBy


[Erase]
ADR=0
R9=1
LOOP=(R9,RF){
R0=ADR       ; копируем адрес
DI=1
C1=0,C2=0,C3=0,_CLKPULSE ;StandBy

C1=0,C2=1,C3=1              ; Accept address Mode


R1=0                        ; fill address word
R2=R0,R2=/8                 ; Hi
R1[R2]=1                    ; reset bit
LOOP=(3,0){DI=R1[I],_CLKPULSE} ; send Hi word

R1=0                        ; fill address word
R2=R0,R2=%8                 ; Lo
R1[R2]=1                    ; reset bit
LOOP=(7,0){DI=R1[I],_CLKPULSE} ; send Lo word

C1=0,C2=0,C3=0,_CLKPULSE ;StandBy

C1=0,C2=1,C3=0,_CLKPULSE ;Erase
LOOP=(0,250){CLK=1,P=100,CLK=0,P=100}

C1=0,C2=0,C3=0,_CLKPULSE ;StandBy
ADR=+1
PRINT=S("Erase: %lu",ADR)
}