?? 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 + -