sphe82checksum.bas

来自「SPHE82XX CRC CALC SOURCE CODE」· BAS 代码 · 共 87 行

BAS
87
字号
REM This program calculates the checksum for a Sunplus ROM.
REM It uses the same algorithm as checksum8200.exe and
REM checksum.exe

REM It sums 16bit words, low byte first, starting from byte
REM offset 0x50 (checksum8200.exe) or 0x20 (checksum.exe)

CLS

OPEN "manta.bin" FOR RANDOM AS #1 LEN = 2

FIELD #1, 1 AS lo$, 1 AS hi$


PRINT "Stored checksum at 0x20 = ";

GET #1, &H11
 lobyt = ASC(lo$)
 hibyt = ASC(hi$)
 xl = lobyt + hibyt * 256
GET #1
 lobyt = ASC(lo$)
 hibyt = ASC(hi$)
 xh = lobyt + hibyt * 256
 l$ = HEX$(xl)
 h$ = HEX$(xh)
PRINT STRING$(4 - LEN(h$), "0"); h$; STRING$(4 - LEN(l$), "0"); l$


PRINT "Stored checksum at 0x14 = ";

GET #1, &HB
 lobyt = ASC(lo$)
 hibyt = ASC(hi$)
 xl = lobyt + hibyt * 256
GET #1
 lobyt = ASC(lo$)
 hibyt = ASC(hi$)
 xh = lobyt + hibyt * 256
 l$ = HEX$(xl)
 h$ = HEX$(xh)
PRINT STRING$(4 - LEN(h$), "0"); h$; STRING$(4 - LEN(l$), "0"); l$


PRINT
PRINT "Start summing ..."
PRINT

suml& = 0: sumh& = 0

GET #1, &H10

FOR i = &H20 TO &H4E STEP 2
 GET #1
 lobyt = ASC(lo$)
 hibyt = ASC(hi$)
 suml& = suml& + lobyt
 sumh& = sumh& + hibyt
NEXT i

sumlo& = 0: sumhi& = 0

WHILE NOT EOF(1)
 GET #1
 IF EOF(1) THEN GOTO 100
 lobyt = ASC(lo$)
 hibyt = ASC(hi$)
 sumlo& = sumlo& + lobyt
 sumhi& = sumhi& + hibyt
100 WEND

CLOSE

hisum& = sumhi& + INT(sumlo& / 256)
x$ = HEX$(sumlo& MOD 256)
PRINT "Computed checksum (offset 0x50) = "; HEX$(hisum&); STRING$(2 - LEN(x$), "0"); x$

sumhi& = sumhi& + sumh&
sumlo& = sumlo& + suml&

hisum& = sumhi& + INT(sumlo& / 256)
x$ = HEX$(sumlo& MOD 256)
PRINT "Computed checksum (offset 0x20) = "; HEX$(hisum&); STRING$(2 - LEN(x$), "0"); x$

END

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?