データはROMに初期値がありそれをコピーしている。
https://computerarcheology.com/Arcade/SpaceInvaders/Code.html#CopyRAMMirror
CopyRAMMirror: ; Block copy ROM mirror 1B00-1BBF to initialize RAM at 2000-20BF. ; 01E4: 06 C0 LD B,$C0 ; Number of bytes 01E6: 11 00 1B LD DE,$1B00 ; RAM mirror in ROM 01E9: 21 00 20 LD HL,$2000 ; Start of RAM 01EC: C3 32 1A JP BlockCopy ; Copy [DE]->[HL] and return
0x1B00(ROM)から0xC0(192)バイトを0x2000(RAM)からにコピーしている。
元となるデータはこちらで0x1B10から0x1B6Fまでは16バイトが一組になっていて自機やビームなどのキャラクターを表すデータになっている様だ。
0x1B700x1BA0以降もコピーされるが文字列やキャラクターのビットパターンになっていて本来はコピーする必要はない様だ。
0x20?3と0x20?4は処理ルーチンへのジャンプアドレスになっていてキャラ毎の処理に飛ばしている。
0x20?0はフラグになっている様でループ処理で0xFFが出たら終了と判断している。つまり0x2060に達したらループを終了している。
;-------------------------- RAM initialization ----------------------------- ; Coppied to RAM (2000) C0 bytes as initialization. ; See the description of RAM at the top of this file for the details on this data. 1B00: 01 00 00 10 00 00 00 00 02 78 38 78 38 00 F8 00 ; -> 0x2000 1B10: 00 80 00 8E 02 FF 05 0C 60 1C 20 30 10 01 00 00 ; -> 0x2010 1B20: 00 00 00 BB 03 00 10 90 1C 28 30 01 04 00 FF FF ; -> 0x2020 1B30: 00 00 02 76 04 00 00 00 00 00 04 EE 1C 00 00 03 ; -> 0x2030 1B40: 00 00 00 B6 04 00 00 01 00 1D 04 E2 1C 00 00 03 ; -> 0x2040 1B50: 00 00 00 82 06 00 00 01 06 1D 04 D0 1C 00 00 03 ; -> 0x2050 1B60: FF 00 C0 1C 00 00 10 21 01 00 30 00 12 00 00 00 ; -> 0x2060 ; These don't need to be copied over to RAM (see 1BA0 below). MesssageP1: ; "PLAY PLAYER<1>" 1B70: 0F 0B 00 18 26 0F 0B 00 18 04 11 24 1B 25 FC ; -> 0x2070 1B7F: 00 1B80: 01 FF FF 00 00 00 20 64 1D D0 29 18 02 54 1D 00 ; -> 0x2080 1B90: 08 00 06 00 00 01 40 00 01 00 00 10 9E 00 20 1C ; -> 0x2090