玄狼剑 发表于 2008-4-2 19:29:24

修补nc3000的lvm的crc16函数源码

SIZE EQU $80
SRC 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函数就正常了~

yan 发表于 2008-4-3 12:40:10

貌似只需要改个地方就可以了。

leesoft 发表于 2008-4-4 13:31:21

crc16有错?
什么错误?

yan 发表于 2008-4-4 15:28:47

这是反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]
查看完整版本: 修补nc3000的lvm的crc16函数源码