修补nc3000的lvm的crc16函数源码
SIZE EQU $80SRC EQU $84
VALUE EQU $86
CRCHI EQU $BBBA
CRCLO EQU $BABA
.ORG $BA07
JSR $8AC4
JSR $8B3D
LDA #$00
STA VALUE
STA VALUE+1
LDY #$00
LOOP:
LDA SIZE
BNE LOOPA
LDA SIZE+1
BEQ END
LOOPA:
LDA (SRC),Y
EOR VALUE+1
TAX
LDA CRCHI,X
EOR VALUE
STA VALUE+1
LDA CRCLO,X
STA VALUE
INC SRC
BNE ADDA
INC SRC+1
ADDA:
LDA SIZE
BEQ DECSIZE
DEC SIZE
JMP LOOP
DECSIZE:
DEC SIZE
LDA SIZE+1
BEQ END
DEC SIZE+1
JMP LOOP
END:
LDA VALUE
STA $80
LDA VALUE+1
STA $81
LDA #$00
STA $82
STA $83
JMP $8B03
用6502sdk.lav编译后覆盖LAVA.bin的3b07处~
覆盖后调用系统的CRC16函数就正常了~ 貌似只需要改个地方就可以了。 crc16有错?
什么错误? 这是反NC3000的GVmaker.bin的Crc16的一段代码
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
code_be:;Crc16
jsr Popto80
jsr PopStackTo84
ldy #$00
sty $86
sty $87
lda $81
beq qba31
qba17:
lda $87
eor ($84),y
tax
lda Lbbba,x
eor $86
sta $87
lda Lbaba,x
sta $86
iny
bne qba17
inc $85
dec $81
bne qba17
qba31:
lda $80
beq qba4b
lda $87
eor ($84),y
tax
lda Lbbba,x
eor $86
sta $87
lda Lbaba,x
sta $86
iny
dec $80
bne qba17;应该改为bne qba31
qba4b:
lda $86
sta $80
lda $87
sta $81
lda #$00
sta $82
sta $83
jmp PushFrom80
[ 本帖最后由 yan 于 2008-4-4 15:29 编辑 ]
页:
[1]