📄 sphe82checksum.bas
字号:
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -