📄 grun_24.hpl
字号:
; Orange programmer module v3.2
; (c) 2000 Alex Plusov, Valery Fomin
; CHIP=Grundig Car Radio with 24C01 (128x8) or 24C02 (256x8) SEEPROM
; For model with code 1999 limit!
SOCKET=1
PINO=SCL,0
PINO=SDA,1
PINO=WP, 2
PINI=SDA,1
CDELAY = 4 ; one set delay
;R8=CRC,H
R9=Code,D
[INIT]
R0=0xA0 ; write I2C address const
R1=0xA1 ; read I2C address const
[READ]
SDA=1,SCL=1,SDA=0,SCL=0 ;start
LOOP=(7,0) {SDA=R0[I],SCL=1,SCL=0} ; out 8 bits 0xA0
SDA=0,SDA=1,SCL=1,SDA?0 ; ack check
SCL=0,SDA=0
LOOP=(7,0) {SDA=ADR[I],SCL=1,SCL=0} ; out 8 bits
SDA=0,SDA=1,SCL=1,SDA?0 ; ack check
SCL=0,SDA=0
SDA=1,SCL=1,SDA=0,SCL=0 ;start
LOOP=(7,0){SDA=R1[I],SCL=1,SCL=0} ; out 8 bits 0xA1
SDA=0,SDA=1,SCL=1,SDA?0 ; ack check
SCL=0
SDA=1
LOOP=(7,0){SCL=1,DATA[I]=SDA,SCL=0} ;read byte
SDA=1,SCL=1,SCL=0,SDA=0 ;master not asked
SCL=0,SCL=1,SDA=1 ;stop
[WRITE]
WP=0
P=10
SDA=1,SCL=1,SDA=0,SCL=0 ;start
LOOP=(7,0) {SDA=R0[I],SCL=1,SCL=0} ; out 8 bits 0xA0
SDA=0,SDA=1,SCL=1,SDA?0 ; ack check
SCL=0,SDA=0
LOOP=(7,0){SDA=ADR[I],SCL=1,SCL=0} ; out 8 bits address
SDA=0,SDA=1,SCL=1,SDA?0 ; ack check
SCL=0,SDA=0
LOOP=(7,0){SDA=DATA[I],SCL=1,SCL=0} ; out 8 bits data
SDA=0,SDA=1,SCL=1,SDA?0 ; 0 - ack check?
SCL=0,SDA=0
SCL=0,SCL=1,SDA=1 ;stop
P=25000
[_CALCULATE]
R4=R0,R4=/16 ;>>4
R5=R1,R5=/16 ;>>4
R4=^R5
R4=^0FH
R4=&7 ;C1
R5=R0,R5=/16 ;>>4 ;C2
R6=R0,R6=&0FH
R5=^R6
R6=R1,R6=/16 ;>>4 ;C3
R6=^R5
R9=R6
R5=<<4,R9=|R5
R4=<<8,R9=|R4
PRINT=("Code: %04lu",R9)
[CalcCode] ;from buffer
R9=0
ADR=00H,R0=DATA
ADR=01H,R1=DATA
ADR=02H,R2=DATA
ADR=03H,R3=DATA
R8=R0,R8=^R2
R5=R1,R5=^R3,R5=<<8
R8=|R5
R8?3412H{R8=R0,R0=R1,R1=R8,R8=R2,R2=R3,R3=R8,R8=1234H} ;Swapped bytes?
R8?1234H{ ;Check CRC
_CALCULATE
EXIT
}
PRINT=("Dump broken!")
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -