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 + -
显示快捷键?