; Orange programmer module v1.8 ; (c) 2012 CnCLab & pavel-pervomaysk ; BR93H76 (512x16) ; BR93H86 (1024x16) tested chip ! SOCKET=2 ;"MW" PINO=CLK,0 PINO=DI,1 PINO=CS,2 PINO=TEST,3 PINI=DO,1 CDELAY=3 ; one set delay [_WAITWR] LOOP=(0,10000){ DO?1{BREAK} P=10 } [!#SETUP] $WDELAY=10000 [INIT] TEST=0 CS=1,P=10 CLK=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=(9,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 [_READBLOCK] CS=0 CLK=0 CS=1 DI=1,CLK=P ; start bit DI=1,CLK=P ; \ read instruction DI=0,CLK=P ; / LOOP=(9,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($BLOCKSIZE){ LOOP=(15,0){CLK=P,DATA[I]=DO} ; read data word ADR=+1 } CS=0 [WRITEINIT] CS=0 CLK=0 CS=1 R0=1001100000000b LOOP=(12,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=(9,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=$WDELAY _WAITWR DO?1 CS=0