В общем
генерация контрольной суммы не нужна!
GB вроде бы ее не проверяет
проверяется только $0134-$014D
и логотип nintendo
все что нужно для запуска своего кода
Код:
; ---------------------------------------------------------------------------
org $0100
nop
jp start
; ---------------------------------------------------------------------------
org $0104
db $CE,$ED,$66,$66,$CC,$0D,$00,$0B,$03,$73,$00,$83,$00,$0C,$00,$0D ;nintendo logo
db $00,$08,$11,$1F,$88,$89,$00,$0E,$DC,$CC,$6E,$E6,$DD,$DD,$D9,$99 ;do not change !!!
db $BB,$BB,$67,$63,$6E,$0E,$EC,$CC,$DD,$DC,$99,$9F,$BB,$B9,$33,$3E ;!!!
check
db "CHCK_SUM_TEZT! " ;rom name
db 00 ;
db 00,00 ;
db 00 ;
db 00 ;
db 00 ;
db 00 ;
db 00 ;
db 00 ;
db 00 ;
checksum_cnt = 0
checksum = 0
dup 25
checksum = checksum + ({b check + checksum_cnt})
checksum_cnt = checksum_cnt + 1
edup
checksum = checksum + 25
db low (256 - checksum)
db $00,$00 ;rom check sum (who cares?)
; ---------------------------------------------------------------------------
- - - Добавлено - - -
Если что
могу проверить
действительно ли контральтовая сумма не имеет значения
на железном dmg-01
- - - Добавлено - - -
но для правильной работы эмуляторов и flash картриджей
придется наверно все таки прописывать
тип картриджа
количество банок ПЗУ \ ОЗУ
да и может есть тупые эмуляторы которые откажутся запускать без совпадения общей контрольной суммы
- - - Добавлено - - -
расчет не нужной контрольной суммы для 32К rom-а
(помещать в конце исходника перед сохранением)
Код:
;rom_00_check_sum
full_checksum_cnt = 0
full_checksum = 0
dup $14E
full_checksum = full_checksum + ({b full_checksum_cnt})
full_checksum_cnt = full_checksum_cnt + 1
edup
full_checksum_cnt = $150
dup $3EB0
full_checksum = full_checksum + ({b full_checksum_cnt})
full_checksum_cnt = full_checksum_cnt + 1
edup
;rom_01_check_sum
full_checksum_cnt = $4000
dup $4000
full_checksum = full_checksum + ({b full_checksum_cnt})
full_checksum_cnt = full_checksum_cnt + 1
edup
org $014E
db high full_checksum
db low full_checksum
SAVEBIN "teZt.gb",$0000,$8000
для больших картриджей
скорей всего просто щелкать страницами
(такой вариант я не проверял)
Код:
slot 0
page 0
;rom_00_check_sum
slot 1
page 1
;rom_01_check_sum
slot 1
page 2
;rom_01_check_sum (COPY)
slot 1
page 3
;rom_01_check_sum (COPY)
slot 1
page 4
;rom_01_check_sum (COPY)
...
...
org $014E
db high full_checksum
db low full_checksum