TETRIS¶
机器码¶
TETRIS 俄罗斯方块游戏 Chip8 的 rom 的二进制机器指令内容为:
|addr | 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
|------------------------------------------------------
| 000 | A2 B4 23 E6 22 B6 70 01 D0 11 30 25 12 06 71 FF
| 010 | D0 11 60 1A D0 11 60 25 31 00 12 0E C4 70 44 70
| 020 | 12 1C C3 03 60 1E 61 03 22 5C F5 15 D0 14 3F 01
| 030 | 12 3C D0 14 71 FF D0 14 23 40 12 1C E7 A1 22 72
| 040 | E8 A1 22 84 E9 A1 22 96 E2 9E 12 50 66 00 F6 15
| 050 | F6 07 36 00 12 3C D0 14 71 01 12 2A A2 C4 F4 1E
| 060 | 66 00 43 01 66 04 43 02 66 08 43 03 66 0C F6 1E
| 070 | 00 EE D0 14 70 FF 23 34 3F 01 00 EE D0 14 70 01
| 080 | 23 34 00 EE D0 14 70 01 23 34 3F 01 00 EE D0 14
| 090 | 70 FF 23 34 00 EE D0 14 73 01 43 04 63 00 22 5C
| 0a0 | 23 34 3F 01 00 EE D0 14 73 FF 43 FF 63 03 22 5C
| 0b0 | 23 34 00 EE 80 00 67 05 68 06 69 04 61 1F 65 10
| 0c0 | 62 07 00 EE 40 E0 00 00 40 C0 40 00 00 E0 40 00
| 0d0 | 40 60 40 00 40 40 60 00 20 E0 00 00 C0 40 40 00
| 0e0 | 00 E0 80 00 40 40 C0 00 00 E0 20 00 60 40 40 00
| 0f0 | 80 E0 00 00 40 C0 80 00 C0 60 00 00 40 C0 80 00
| 100 | C0 60 00 00 80 C0 40 00 00 60 C0 00 80 C0 40 00
| 110 | 00 60 C0 00 C0 C0 00 00 C0 C0 00 00 C0 C0 00 00
| 120 | C0 C0 00 00 40 40 40 40 00 F0 00 00 40 40 40 40
| 130 | 00 F0 00 00 D0 14 66 35 76 FF 36 00 13 38 00 EE
| 140 | A2 B4 8C 10 3C 1E 7C 01 3C 1E 7C 01 3C 1E 7C 01
| 150 | 23 5E 4B 0A 23 72 91 C0 00 EE 71 01 13 50 60 1B
| 160 | 6B 00 D0 11 3F 00 7B 01 D0 11 70 01 30 25 13 62
| 170 | 00 EE 60 1B D0 11 70 01 30 25 13 74 8E 10 8D E0
| 180 | 7E FF 60 1B 6B 00 D0 E1 3F 00 13 90 D0 E1 13 94
| 190 | D0 D1 7B 01 70 01 30 25 13 86 4B 00 13 A6 7D FF
| 1a0 | 7E FF 3D 01 13 82 23 C0 3F 01 23 C0 7A 01 23 C0
| 1b0 | 80 A0 6D 07 80 D2 40 04 75 FE 45 02 65 04 00 EE
| 1c0 | A7 00 F2 55 A8 04 FA 33 F2 65 F0 29 6D 32 6E 00
| 1d0 | DD E5 7D 05 F1 29 DD E5 7D 05 F2 29 DD E5 A7 00
| 1e0 | F2 65 A2 B4 00 EE 6A 00 60 19 00 EE 37 23
汇编码¶
;----------------------------------------------------
; ROM Name: ../../roms/TETRIS
; ROM Size: 494 Bytes
;----------------------------------------------------
LD I, L2B4 ; 0xA2B4
CALL L3E6 ; 0x23E6
CALL L2B6 ; 0x22B6
L206:
ADD V0, #01 ; 0x7001
DRW V0, V1, #01 ; 0xD011
SE V0, #25 ; 0x3025
JP L206 ; 0x1206
L20E:
ADD V1, #FF ; 0x71FF
DRW V0, V1, #01 ; 0xD011
LD V0, #1A ; 0x601A
DRW V0, V1, #01 ; 0xD011
LD V0, #25 ; 0x6025
SE V1, #00 ; 0x3100
JP L20E ; 0x120E
L21C:
RND V4, 0x70 ; 0xC470
SNE V4, #70 ; 0x4470
JP L21C ; 0x121C
RND V3, 0x03 ; 0xC303
LD V0, #1E ; 0x601E
LD V1, #03 ; 0x6103
CALL L25C ; 0x225C
L22A:
LD DT, V5 ; 0xF515
DRW V0, V1, #04 ; 0xD014
SE V15, #01 ; 0x3F01
JP L23C ; 0x123C
DRW V0, V1, #04 ; 0xD014
ADD V1, #FF ; 0x71FF
DRW V0, V1, #04 ; 0xD014
CALL L340 ; 0x2340
JP L21C ; 0x121C
L23C:
SKNP V7 ; 0xE7A1
CALL L272 ; 0x2272
SKNP V8 ; 0xE8A1
CALL L284 ; 0x2284
SKNP V9 ; 0xE9A1
CALL L296 ; 0x2296
SKP V2 ; 0xE29E
JP L250 ; 0x1250
LD V6, #00 ; 0x6600
LD DT, V6 ; 0xF615
L250:
LD V6, DT ; 0xF607
SE V6, #00 ; 0x3600
JP L23C ; 0x123C
DRW V0, V1, #04 ; 0xD014
ADD V1, #01 ; 0x7101
JP L22A ; 0x122A
L25C:
LD I, L2C4 ; 0xA2C4
ADD I, V4 ; 0xF41E
LD V6, #00 ; 0x6600
SNE V3, #01 ; 0x4301
LD V6, #04 ; 0x6604
SNE V3, #02 ; 0x4302
LD V6, #08 ; 0x6608
SNE V3, #03 ; 0x4303
LD V6, #0C ; 0x660C
ADD I, V6 ; 0xF61E
RET ; 0x00EE
L272:
DRW V0, V1, #04 ; 0xD014
ADD V0, #FF ; 0x70FF
CALL L334 ; 0x2334
SE V15, #01 ; 0x3F01
RET ; 0x00EE
DRW V0, V1, #04 ; 0xD014
ADD V0, #01 ; 0x7001
CALL L334 ; 0x2334
RET ; 0x00EE
L284:
DRW V0, V1, #04 ; 0xD014
ADD V0, #01 ; 0x7001
CALL L334 ; 0x2334
SE V15, #01 ; 0x3F01
RET ; 0x00EE
DRW V0, V1, #04 ; 0xD014
ADD V0, #FF ; 0x70FF
CALL L334 ; 0x2334
RET ; 0x00EE
L296:
DRW V0, V1, #04 ; 0xD014
ADD V3, #01 ; 0x7301
SNE V3, #04 ; 0x4304
LD V3, #00 ; 0x6300
CALL L25C ; 0x225C
CALL L334 ; 0x2334
SE V15, #01 ; 0x3F01
RET ; 0x00EE
DRW V0, V1, #04 ; 0xD014
ADD V3, #FF ; 0x73FF
SNE V3, #FF ; 0x43FF
LD V3, #03 ; 0x6303
CALL L25C ; 0x225C
CALL L334 ; 0x2334
RET ; 0x00EE
L2B4:
DB #80, #00
L2B6:
LD V7, #05 ; 0x6705
LD V8, #06 ; 0x6806
LD V9, #04 ; 0x6904
LD V1, #1F ; 0x611F
LD V5, #10 ; 0x6510
LD V2, #07 ; 0x6207
RET ; 0x00EE
L2C4:
DB #40, #E0, #00, #00
DB #40, #C0, #40, #00
DB #00, #E0, #40, #00
DB #40, #60, #40, #00
DB #40, #40, #60, #00
DB #20, #E0, #00, #00
DB #C0, #40, #40, #00
DB #00, #E0, #80, #00
DB #40, #40, #C0, #00
DB #00, #E0, #20, #00
DB #60, #40, #40, #00
DB #80, #E0, #00, #00
DB #40, #C0, #80, #00
DB #C0, #60, #00, #00
DB #40, #C0, #80, #00
DB #C0, #60, #00, #00
DB #80, #C0, #40, #00
DB #00, #60, #C0, #00
DB #80, #C0, #40, #00
DB #00, #60, #C0, #00
DB #C0, #C0, #00, #00
DB #C0, #C0, #00, #00
DB #C0, #C0, #00, #00
DB #C0, #C0, #00, #00
DB #40, #40, #40, #40
DB #00, #F0, #00, #00
DB #40, #40, #40, #40
DB #00, #F0, #00, #00
L334:
DRW V0, V1, #04 ; 0xD014
LD V6, #35 ; 0x6635
L338:
ADD V6, #FF ; 0x76FF
SE V6, #00 ; 0x3600
JP L338 ; 0x1338
RET ; 0x00EE
L340:
LD I, L2B4 ; 0xA2B4
(0x8C10) ; 0x8C10
SE V12, #1E ; 0x3C1E
ADD V12, #01 ; 0x7C01
SE V12, #1E ; 0x3C1E
ADD V12, #01 ; 0x7C01
SE V12, #1E ; 0x3C1E
ADD V12, #01 ; 0x7C01
L350:
CALL L35E ; 0x235E
SNE V11, #0A ; 0x4B0A
CALL L372 ; 0x2372
SNE V1, V12 ; 0x91C0
RET ; 0x00EE
ADD V1, #01 ; 0x7101
JP L350 ; 0x1350
L35E:
LD V0, #1B ; 0x601B
LD V11, #00 ; 0x6B00
L362:
DRW V0, V1, #01 ; 0xD011
SE V15, #00 ; 0x3F00
ADD V11, #01 ; 0x7B01
DRW V0, V1, #01 ; 0xD011
ADD V0, #01 ; 0x7001
SE V0, #25 ; 0x3025
JP L362 ; 0x1362
RET ; 0x00EE
L372:
LD V0, #1B ; 0x601B
L374:
DRW V0, V1, #01 ; 0xD011
ADD V0, #01 ; 0x7001
SE V0, #25 ; 0x3025
JP L374 ; 0x1374
(0x8E10) ; 0x8E10
(0x8DE0) ; 0x8DE0
ADD V14, #FF ; 0x7EFF
L382:
LD V0, #1B ; 0x601B
LD V11, #00 ; 0x6B00
L386:
DRW V0, V14, #01 ; 0xD0E1
SE V15, #00 ; 0x3F00
JP L390 ; 0x1390
DRW V0, V14, #01 ; 0xD0E1
JP L394 ; 0x1394
L390:
DRW V0, V13, #01 ; 0xD0D1
ADD V11, #01 ; 0x7B01
L394:
ADD V0, #01 ; 0x7001
SE V0, #25 ; 0x3025
JP L386 ; 0x1386
SNE V11, #00 ; 0x4B00
JP L3A6 ; 0x13A6
ADD V13, #FF ; 0x7DFF
ADD V14, #FF ; 0x7EFF
SE V13, #01 ; 0x3D01
JP L382 ; 0x1382
L3A6:
CALL L3C0 ; 0x23C0
SE V15, #01 ; 0x3F01
CALL L3C0 ; 0x23C0
ADD V10, #01 ; 0x7A01
CALL L3C0 ; 0x23C0
(0x80A0) ; 0x80A0
LD V13, #07 ; 0x6D07
AND V0, V13 ; 0x80D2
SNE V0, #04 ; 0x4004
ADD V5, #FE ; 0x75FE
SNE V5, #02 ; 0x4502
LD V5, #04 ; 0x6504
RET ; 0x00EE
L3C0:
LD I, L700 ; 0xA700
LD [I], V2 ; 0xF255
LD I, L804 ; 0xA804
LD B, V10 ; 0xFA33
LD V2, [I] ; 0xF265
LD F, V0 ; 0xF029
LD V13, #32 ; 0x6D32
LD V14, #00 ; 0x6E00
DRW V13, V14, #05 ; 0xDDE5
ADD V13, #05 ; 0x7D05
LD F, V1 ; 0xF129
DRW V13, V14, #05 ; 0xDDE5
ADD V13, #05 ; 0x7D05
LD F, V2 ; 0xF229
DRW V13, V14, #05 ; 0xDDE5
LD I, L700 ; 0xA700
LD V2, [I] ; 0xF265
LD I, L2B4 ; 0xA2B4
RET ; 0x00EE
L3E6:
LD V10, #00 ; 0x6A00
LD V0, #19 ; 0x6019
RET ; 0x00EE
DB #37, #23
指令解释¶
TODO