; Orange programmer module v1.1 ; (c) 1999 Alex Plusov ; CHIP=KM93C06 (16x16),KM93C46 (64x16) w/o auto erase ; (Samsung etc...) SOCKET=2 ;"MW" PINO=CLK,0 PINO=DI,1 PINO=CS,2 PINO=ORG,3 PINI=DO,1 CDELAY=5 ; one set delay TESTMASK=11110000 [READ] ORG=1 CS=0 CLK=0 CS=1 DI=1,CLK=1,CLK=0 ; start bit DI=1,CLK=1,CLK=0 ; \ read instruction DI=0,CLK=1,CLK=0 ; / LOOP=(5,0){DI=ADR[I],CLK=1,CLK=0} ; out adr DI=1 LOOP=(15,0){CLK=1,CLK=0,DATA[I]=DO} ; read data word CS=0 [WRITEINIT] ORG=1 CS=0 CLK=0 CS=1 DI=1,CLK=1,CLK=0 ; start bit R0=0x30 LOOP=(7,0){DI=R0[I],CLK=1,CLK=0} ; out EWEN CS=0 [WRITE] CS=0 CLK=0 CS=1 DI=1,CLK=1,CLK=0 ; start bit DI=1,CLK=1,CLK=0 ; \ erase instruction DI=1,CLK=1,CLK=0 ; / LOOP=(5,0){DI=ADR[I],CLK=1,CLK=0} ; out adr CS=0,DI=1,CS=1 P=10000 CS=0 CS=1 DI=1,CLK=1,CLK=0 ; start bit DI=0,CLK=1,CLK=0 ; \ write instruction DI=1,CLK=1,CLK=0 ; / LOOP=(5,0){DI=ADR[I],CLK=1,CLK=0} ; out adr LOOP=(15,0){DI=DATA[I],CLK=1,CLK=0} ; write data word CS=0,DI=1,CS=1 P=10000 DO?1 ; verify CS=0 [Erase] ORG=1 CS=0 CLK=0 CS=1 DI=1,CLK=1,CLK=0 ; start bit R0=0x30 LOOP=(7,0){DI=R0[I],CLK=1,CLK=0} ; out EWEN CS=0 CS=1 DI=1,CLK=1,CLK=0 ; start bit R0=0x20 LOOP=(7,0){DI=R0[I],CLK=1,CLK=0} ; out ERAL CS=0 P=10000