; 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) }