; Orange programmer module v2.3 ; (c) 1999,2002 Alex Plusov ; CHIP=93CS76 (512x16),93CS86 (1024x16) ; NOT TESTED ! SOCKET=2 ;"MW" PINO=CLK,0 PINO=DI,1 PINO=CS,2 PINO=PE,3 PINO=PRE,4 PINI=DO,1 CDELAY=3 ; one set delay R10=Protect,H R11=ProtFlag,D [_SEND] LOOP=(12,0){DI=R0[I],CLK=1,CLK=0} [READ] PE=1 PRE=0 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=(9,0){DI=ADR[I],CLK=1,CLK=0} ; out adr DI=1,P=1 DO?1{PRINT=A("Chip not respond at %04lX, continue?",ADR),RA?0{EXIT}} LOOP=(15,0){CLK=1,CLK=0,DATA[I]=DO} ; read data word CS=0 [WRITEINIT] PE=1 PRE=0 CS=0 CLK=0 CS=1 _SEND(1001100000000b) ; out EWEN CS=0 [WRITE] CS=1 _SEND(1001100000000b) ; out EWEN CS=0 P=10 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=(9,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 ; check status P=30000 ;DO?1 CS=0 P=10 [WRITEEND] PE=0 [ReadProtect] PE=0 PRE=1 ;!!! CS=0,CLK=0,CS=1 DI=1,CLK=1,CLK=0 ; start bit DI=1,CLK=1,CLK=0 ; \ PrRead instruction DI=0,CLK=0,CLK=0 ; / LOOP=(9,0) {DI=0,CLK=1,CLK=0} ; don't care bits DI=1 R10=0 LOOP=(8,0){CLK=1,CLK=0,R10[I]=DO} ; read protect reg R11=0 CLK=1,CLK=0,R11[0]=DO R1=^1 ;invert flag CS=0 PRE=0 ;!!! GET=("Protect",R10,R11) [WriteProtect] GET=("Protect",R10) RA?0{EXIT} CS=0 CLK=0 PRE=0,PE=1 CS=1 _SEND(1001100000000b) ; out EWEN CS=0 PRE=1,PE=1 CS=1 _SEND(1001100000000b) ; out PREN 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=(7,0){DI=R10[I],CLK=1,CLK=0} ; out reg data CS=0,DI=1,CS=1 ; check status P=20000 ;DO?1 CS=0 PRE=0 [ClearProtect] CS=0 CLK=0 PRE=0,PE=1 CS=1 _SEND(1001100000000b) ; out EWEN CS=0 PRE=1,PE=1 CS=1 _SEND(1001100000000b) ; out PREN CS=0 CS=1 _SEND(1111111111111b) ; out PRCLEAR CS=0 CS=0,DI=1,CS=1 ; check status P=20000 ;DO?1 CS=0