First commit
This commit is contained in:
commit
64af61ba12
1008
.build/main.asm
Normal file
1008
.build/main.asm
Normal file
File diff suppressed because it is too large
Load Diff
1023
.build/main.lst
Normal file
1023
.build/main.lst
Normal file
File diff suppressed because it is too large
Load Diff
516
.build/main.rel
Normal file
516
.build/main.rel
Normal file
|
@ -0,0 +1,516 @@
|
|||
XL2
|
||||
H 9 areas 15 global symbols
|
||||
M main
|
||||
O -mz80
|
||||
S .__.ABS. Def0000
|
||||
S _random Ref0000
|
||||
S _put_string Ref0000
|
||||
A _CODE size 550 flags 0 addr 0
|
||||
S _main Def0532
|
||||
S _draw Def0320
|
||||
S _does_piece_fit Def0168
|
||||
S _new_shape Def0225
|
||||
S _loop Def03BA
|
||||
S _render Def0236
|
||||
S _construct_shapes Def0000
|
||||
S _rotate Def00A2
|
||||
S _initialize_field Def00FD
|
||||
A _DATA size 1BF flags 0 addr 0
|
||||
S _tetromino Def0000
|
||||
S _seed Def01BE
|
||||
S _screen Def00E6
|
||||
S _field Def000E
|
||||
A _INITIALIZED size 5 flags 0 addr 0
|
||||
S _current_shape Def0000
|
||||
S _counter Def0004
|
||||
S _current_rotation Def0001
|
||||
S _current_x Def0002
|
||||
S _current_y Def0003
|
||||
A _DABS size 0 flags 8 addr 0
|
||||
A _HOME size 0 flags 0 addr 0
|
||||
A _GSINIT size 0 flags 0 addr 0
|
||||
A _GSFINAL size 0 flags 0 addr 0
|
||||
A _INITIALIZER size 5 flags 0 addr 0
|
||||
A _CABS size 0 flags 8 addr 0
|
||||
T 00 00
|
||||
R 00 00 01 00
|
||||
T 00 00
|
||||
R 00 00 01 00
|
||||
T 0E 00
|
||||
R 00 00 01 00
|
||||
T 0E 00
|
||||
R 00 00 01 00
|
||||
T E6 00
|
||||
R 00 00 01 00
|
||||
T E6 00
|
||||
R 00 00 01 00
|
||||
T BE 01
|
||||
R 00 00 01 00
|
||||
T BE 01
|
||||
R 00 00 01 00
|
||||
T 00 00
|
||||
R 00 00 02 00
|
||||
T 00 00
|
||||
R 00 00 02 00
|
||||
T 01 00
|
||||
R 00 00 02 00
|
||||
T 01 00
|
||||
R 00 00 02 00
|
||||
T 02 00
|
||||
R 00 00 02 00
|
||||
T 02 00
|
||||
R 00 00 02 00
|
||||
T 03 00
|
||||
R 00 00 02 00
|
||||
T 03 00
|
||||
R 00 00 02 00
|
||||
T 04 00
|
||||
R 00 00 02 00
|
||||
T 04 00
|
||||
R 00 00 02 00
|
||||
T 00 00
|
||||
R 00 00 00 00
|
||||
T 00 00 21 2B 00 22 00 00 21 3C 00 22
|
||||
R 00 00 00 00 00 03 00 00 00 06 01 00 00 09 00 00
|
||||
T 0A 00 02 00 21 4D 00 22 04 00 21
|
||||
R 00 00 00 00 00 02 01 00 00 05 00 00 00 08 01 00
|
||||
T 13 00 5E 00 22 06 00 21 6F 00 22
|
||||
R 00 00 00 00 00 02 00 00 00 05 01 00 00 08 00 00
|
||||
T 1C 00 08 00 21 80 00 22 0A 00 21
|
||||
R 00 00 00 00 00 02 01 00 00 05 00 00 00 08 01 00
|
||||
T 25 00 91 00 22 0C 00 C9
|
||||
R 00 00 00 00 00 02 00 00 00 05 01 00
|
||||
T 2B 00
|
||||
R 00 00 00 00
|
||||
T 2B 00 2E 2E 58 2E 2E 2E 58 2E 2E 2E 58 2E 2E 2E
|
||||
R 00 00 00 00
|
||||
T 39 00 58 2E 00
|
||||
R 00 00 00 00
|
||||
T 3C 00
|
||||
R 00 00 00 00
|
||||
T 3C 00 2E 2E 58 2E 2E 58 58 2E 2E 58 2E 2E 2E 2E
|
||||
R 00 00 00 00
|
||||
T 4A 00 2E 2E 00
|
||||
R 00 00 00 00
|
||||
T 4D 00
|
||||
R 00 00 00 00
|
||||
T 4D 00 2E 58 2E 2E 2E 58 58 2E 2E 2E 58 2E 2E 2E
|
||||
R 00 00 00 00
|
||||
T 5B 00 2E 2E 00
|
||||
R 00 00 00 00
|
||||
T 5E 00
|
||||
R 00 00 00 00
|
||||
T 5E 00 2E 2E 58 2E 2E 2E 58 2E 2E 58 58 2E 2E 2E
|
||||
R 00 00 00 00
|
||||
T 6C 00 2E 2E 00
|
||||
R 00 00 00 00
|
||||
T 6F 00
|
||||
R 00 00 00 00
|
||||
T 6F 00 2E 58 2E 2E 2E 58 2E 2E 2E 58 58 2E 2E 2E
|
||||
R 00 00 00 00
|
||||
T 7D 00 2E 2E 00
|
||||
R 00 00 00 00
|
||||
T 80 00
|
||||
R 00 00 00 00
|
||||
T 80 00 2E 2E 58 2E 2E 58 58 2E 2E 2E 58 2E 2E 2E
|
||||
R 00 00 00 00
|
||||
T 8E 00 2E 2E 00
|
||||
R 00 00 00 00
|
||||
T 91 00
|
||||
R 00 00 00 00
|
||||
T 91 00 2E 2E 2E 2E 2E 58 58 2E 2E 58 58 2E 2E 2E
|
||||
R 00 00 00 00
|
||||
T 9F 00 2E 2E 00
|
||||
R 00 00 00 00
|
||||
T A2 00
|
||||
R 00 00 00 00
|
||||
T A2 00 DD E5 DD 21 00 00 DD 39 3B DD 7E 05 DD 4E
|
||||
R 00 00 00 00
|
||||
T B0 00 04 87 87 6F DD 7E 06 B7 28 21 DD 5E 05 DD
|
||||
R 00 00 00 00
|
||||
T BE 00 7E 04 87 87 DD 77 FF DD 7E 06 3D 28 13 DD
|
||||
R 00 00 00 00
|
||||
T CC 00 7E 06 D6 02 28 15 DD 7E 06 D6 03 28 15 18
|
||||
R 00 00 00 00
|
||||
T DA 00 1C
|
||||
R 00 00 00 00
|
||||
T DB 00
|
||||
R 00 00 00 00
|
||||
T DB 00 09 18 1B
|
||||
R 00 00 00 00
|
||||
T DE 00
|
||||
R 00 00 00 00
|
||||
T DE 00 7B C6 0C DD 96 FF 6F 18 12
|
||||
R 00 00 00 00
|
||||
T E7 00
|
||||
R 00 00 00 00
|
||||
T E7 00 3E 0F 95 91 6F 18 0B
|
||||
R 00 00 00 00
|
||||
T EE 00
|
||||
R 00 00 00 00
|
||||
T EE 00 3E 03 93 DD 86 FF 6F 18 02
|
||||
R 00 00 00 00
|
||||
T F7 00
|
||||
R 00 00 00 00
|
||||
T F7 00 2E 00
|
||||
R 00 00 00 00
|
||||
T F9 00
|
||||
R 00 00 00 00
|
||||
T F9 00 33 DD E1 C9
|
||||
R 00 00 00 00
|
||||
T FD 00
|
||||
R 00 00 00 00
|
||||
T FD 00 DD E5 DD 21 00 00 DD 39 F5 3B 0E 00
|
||||
R 00 00 00 00
|
||||
T 09 01
|
||||
R 00 00 00 00
|
||||
T 09 01 79 FE 12 30 55 D6 11 3E 01 28 01 AF
|
||||
R 00 00 00 00
|
||||
T 15 01
|
||||
R 00 00 00 00
|
||||
T 15 01 DD 77 FD 1E 00
|
||||
R 00 00 00 00
|
||||
T 1A 01
|
||||
R 00 00 00 00
|
||||
T 1A 01 7B D6 0C 30 41 69 26 00 D5 5D 54 29 19 29
|
||||
R 00 00 00 00
|
||||
T 28 01 29 D1 7B 16 00 85 6F 7A 8C 67 7D C6 0E 00
|
||||
R 00 00 00 00 09 0E 01 00
|
||||
T 35 01 DD 77 FE 7C CE 0E 00 DD 77 FF 7B B7 28 0B
|
||||
R 00 00 00 00 89 07 01 00
|
||||
T 42 01 7B D6 0B 28 06 DD CB FD 46 28 05
|
||||
R 00 00 00 00
|
||||
T 4D 01
|
||||
R 00 00 00 00
|
||||
T 4D 01 21 09 00 18 03
|
||||
R 00 00 00 00
|
||||
T 52 01
|
||||
R 00 00 00 00
|
||||
T 52 01 21 00 00
|
||||
R 00 00 00 00
|
||||
T 55 01
|
||||
R 00 00 00 00
|
||||
T 55 01 7D DD 6E FE DD 66 FF 77 1C 18 BA
|
||||
R 00 00 00 00
|
||||
T 60 01
|
||||
R 00 00 00 00
|
||||
T 60 01 0C 18 A6
|
||||
R 00 00 00 00
|
||||
T 63 01
|
||||
R 00 00 00 00
|
||||
T 63 01 DD F9 DD E1 C9
|
||||
R 00 00 00 00
|
||||
T 68 01
|
||||
R 00 00 00 00
|
||||
T 68 01 DD E5 DD 21 00 00 DD 39 F5 F5 0E 00
|
||||
R 00 00 00 00
|
||||
T 74 01
|
||||
R 00 00 00 00
|
||||
T 74 01 79 D6 04 D2 1E 02 DD 7E 07 81 DD 77 FC AF
|
||||
R 00 00 00 00 00 06 00 00
|
||||
T 82 01 DD 77 FF
|
||||
R 00 00 00 00
|
||||
T 85 01
|
||||
R 00 00 00 00
|
||||
T 85 01 DD 7E FF D6 04 D2 1A 02 C5 DD 46 05 C5 DD
|
||||
R 00 00 00 00 00 08 00 00
|
||||
T 93 01 7E FF F5 33 CD A2 00 F1 33 C1 DD 75 FD DD
|
||||
R 00 00 00 00 00 07 00 00
|
||||
T A1 01 7E FC 5F 87 83 87 87 DD 46 06 80 DD 46 FF
|
||||
R 00 00 00 00
|
||||
T AF 01 80 DD 77 FE DD 5E 06 16 00 DD 6E FF 26 00
|
||||
R 00 00 00 00
|
||||
T BD 01 19 CB 7C 20 52 11 0C 80 29 3F CB 1C CB 1D
|
||||
R 00 00 00 00
|
||||
T CB 01 ED 52 30 45 DD 5E 07 16 00 69 26 00 19 CB
|
||||
R 00 00 00 00
|
||||
T D9 01 7C 20 38 11 12 80 29 3F CB 1C CB 1D ED 52
|
||||
R 00 00 00 00
|
||||
T E7 01 30 2B DD 6E 04 26 00 29 11 00 00 19 5E 23
|
||||
R 00 00 00 00 00 0B 01 00
|
||||
T F5 01 56 DD 6E FD 26 00 19 7E D6 58 20 13 DD 7E
|
||||
R 00 00 00 00
|
||||
T 03 02 FE C6 0E 00 5F 3E 00 CE 0E 00 57 1A B7 28
|
||||
R 00 00 00 00 09 04 01 00 89 0A 01 00
|
||||
T 0F 02 04 2E 00 18 0C
|
||||
R 00 00 00 00
|
||||
T 14 02
|
||||
R 00 00 00 00
|
||||
T 14 02 DD 34 FF C3 85 01
|
||||
R 00 00 00 00 00 06 00 00
|
||||
T 1A 02
|
||||
R 00 00 00 00
|
||||
T 1A 02 0C C3 74 01
|
||||
R 00 00 00 00 00 04 00 00
|
||||
T 1E 02
|
||||
R 00 00 00 00
|
||||
T 1E 02 2E 01
|
||||
R 00 00 00 00
|
||||
T 20 02
|
||||
R 00 00 00 00
|
||||
T 20 02 DD F9 DD E1 C9
|
||||
R 00 00 00 00
|
||||
T 25 02
|
||||
R 00 00 00 00
|
||||
T 25 02
|
||||
R 00 00 00 00
|
||||
T 25 02 CD 00 00 7D E6 07 32 00 00 3A 00 00 D6 07
|
||||
R 00 00 00 00 02 03 01 00 00 09 02 00 00 0C 02 00
|
||||
T 33 02 28 F0 C9
|
||||
R 00 00 00 00
|
||||
T 36 02
|
||||
R 00 00 00 00
|
||||
T 36 02 DD E5 DD 21 00 00 DD 39 F5 F5 01 E6 00 11
|
||||
R 00 00 00 00 00 0D 01 00
|
||||
T 44 02 0E 00 AF DD 77 FF
|
||||
R 00 00 00 00 00 02 01 00
|
||||
T 4A 02
|
||||
R 00 00 00 00
|
||||
T 4A 02 DD 7E FF D6 D8 30 20 79 DD 86 FF DD 77 FD
|
||||
R 00 00 00 00
|
||||
T 58 02 78 CE 00 DD 77 FE DD 6E FF 26 00 19 7E DD
|
||||
R 00 00 00 00
|
||||
T 66 02 6E FD DD 66 FE 77 DD 34 FF 18 D9
|
||||
R 00 00 00 00
|
||||
T 71 02
|
||||
R 00 00 00 00
|
||||
T 71 02 1E 00
|
||||
R 00 00 00 00
|
||||
T 73 02
|
||||
R 00 00 00 00
|
||||
T 73 02 7B D6 04 D2 1B 03 16 00
|
||||
R 00 00 00 00 00 06 00 00
|
||||
T 7B 02
|
||||
R 00 00 00 00
|
||||
T 7B 02 7A D6 04 D2 17 03 FD 21 00 00 FD 6E 00 26
|
||||
R 00 00 00 00 00 06 00 00 00 0A 02 00
|
||||
T 89 02 00 29 3E 00 00 85 6F 3E 00 00 8C 67 7E DD
|
||||
R 00 00 00 00 09 05 01 00 89 0A 01 00
|
||||
T 95 02 77 FE 23 7E DD 77 FF C5 D5 3A 01 00 F5 33
|
||||
R 00 00 00 00 00 0C 02 00
|
||||
T A3 02 7B F5 33 D5 33 CD A2 00 F1 33 7D D1 C1 DD
|
||||
R 00 00 00 00 00 08 00 00
|
||||
T B1 02 86 FE 6F 3E 00 DD 8E FF 67 7E D6 58 20 54
|
||||
R 00 00 00 00
|
||||
T BF 02 FD 21 03 00 FD 6E 00 26 00 DD 73 FE AF DD
|
||||
R 00 00 00 00 00 04 02 00
|
||||
T CD 02 77 FF DD 7E FE 85 6F DD 7E FF 8C 67 D5 5D
|
||||
R 00 00 00 00
|
||||
T DB 02 54 29 19 29 29 D1 E3 3A 02 00 26 00 DD 86
|
||||
R 00 00 00 00 00 0A 02 00
|
||||
T E9 02 FC DD 77 FE 7C DD 8E FD DD 77 FF 6A 26 00
|
||||
R 00 00 00 00
|
||||
T F7 02 7D DD 86 FE 6F 7C DD 8E FF 67 09 DD 75 FE
|
||||
R 00 00 00 00
|
||||
T 05 03 DD 74 FF 3A 00 00 3C DD 6E FE DD 66 FF 77
|
||||
R 00 00 00 00 00 06 02 00
|
||||
T 13 03
|
||||
R 00 00 00 00
|
||||
T 13 03 14 C3 7B 02
|
||||
R 00 00 00 00 00 04 00 00
|
||||
T 17 03
|
||||
R 00 00 00 00
|
||||
T 17 03 1C C3 73 02
|
||||
R 00 00 00 00 00 04 00 00
|
||||
T 1B 03
|
||||
R 00 00 00 00
|
||||
T 1B 03 DD F9 DD E1 C9
|
||||
R 00 00 00 00
|
||||
T 20 03
|
||||
R 00 00 00 00
|
||||
T 20 03 DD E5 DD 21 00 00 DD 39 3B 21 B3 03 E5 CD
|
||||
R 00 00 00 00 00 0C 00 00
|
||||
T 2E 03 00 00 F1 0E 00
|
||||
R 00 00 00 00 02 02 02 00
|
||||
T 33 03
|
||||
R 00 00 00 00
|
||||
T 33 03 79 D6 12 30 6C AF DD 77 FF
|
||||
R 00 00 00 00
|
||||
T 3C 03
|
||||
R 00 00 00 00
|
||||
T 3C 03 DD 7E FF D6 0C 30 52 59 16 00 6B 62 29 19
|
||||
R 00 00 00 00
|
||||
T 4A 03 29 29 DD 5E FF 16 00 19 11 E6 00 19 5E 7B
|
||||
R 00 00 00 00 00 0B 01 00
|
||||
T 58 03 D6 08 38 12 3E 1B D3 02 3E 5B D3 02 3E 30
|
||||
R 00 00 00 00
|
||||
T 66 03 D3 02 3E 6D D3 02 18 19
|
||||
R 00 00 00 00
|
||||
T 6E 03
|
||||
R 00 00 00 00
|
||||
T 6E 03 7B B7 28 15 3E 1B D3 02 3E 5B D3 02 3E 33
|
||||
R 00 00 00 00
|
||||
T 7C 03 D3 02 7B C6 30 D3 02 3E 6D D3 02
|
||||
R 00 00 00 00
|
||||
T 87 03
|
||||
R 00 00 00 00
|
||||
T 87 03 21 A8 03 16 00 19 7E D3 02 DD 34 FF 18 A7
|
||||
R 00 00 00 00 00 03 00 00
|
||||
T 95 03
|
||||
R 00 00 00 00
|
||||
T 95 03 3E 0A D3 02 3E 0D D3 02 3E 20 D3 02 0C 18
|
||||
R 00 00 00 00
|
||||
T A3 03 8F
|
||||
R 00 00 00 00
|
||||
T A4 03
|
||||
R 00 00 00 00
|
||||
T A4 03 33 DD E1 C9
|
||||
R 00 00 00 00
|
||||
T A8 03
|
||||
R 00 00 00 00
|
||||
T A8 03 20 52 47 4F 42 4D 43 57 3D 23 00
|
||||
R 00 00 00 00
|
||||
T B3 03
|
||||
R 00 00 00 00
|
||||
T B3 03 1B 5B 32 3B 32 48 00
|
||||
R 00 00 00 00
|
||||
T BA 03
|
||||
R 00 00 00 00
|
||||
T BA 03 DD E5 DD 21 00 00 DD 39 F5 DB 1F 0F D2
|
||||
R 00 00 00 00
|
||||
T C7 03 6C 04 3A 02 00 DD 77 FE 21 03 00 4E 3A
|
||||
R 00 00 00 00 00 02 00 00 00 05 02 00 00 0B 02 00
|
||||
T D4 03 01 00 DD 77 FF DB 1E FE 03 28 16 FE 61 28
|
||||
R 00 00 00 00 00 02 02 00
|
||||
T E2 03 1F FE 64 28 20 FE 72 28 21 FE 73 28 2D D6
|
||||
R 00 00 00 00
|
||||
T F0 03 77 28 30 18 4D
|
||||
R 00 00 00 00
|
||||
T F5 03
|
||||
R 00 00 00 00
|
||||
T F5 03 21 2A 05 E5 CD 00 00 F1 2E 00 C3 25 05
|
||||
R 00 00 00 00 00 03 00 00 02 07 02 00 00 0D 00 00
|
||||
T 02 04
|
||||
R 00 00 00 00
|
||||
T 02 04 DD 35 FE 18 3B
|
||||
R 00 00 00 00
|
||||
T 07 04
|
||||
R 00 00 00 00
|
||||
T 07 04 DD 34 FE 18 36
|
||||
R 00 00 00 00
|
||||
T 0C 04
|
||||
R 00 00 00 00
|
||||
T 0C 04 DD 34 FF DD 7E FF D6 04 20 2C AF DD 77 FF
|
||||
R 00 00 00 00
|
||||
T 1A 04 18 26
|
||||
R 00 00 00 00
|
||||
T 1C 04
|
||||
R 00 00 00 00
|
||||
T 1C 04 21 04 00 36 00 18 1F
|
||||
R 00 00 00 00 00 03 02 00
|
||||
T 23 04
|
||||
R 00 00 00 00
|
||||
T 23 04
|
||||
R 00 00 00 00
|
||||
T 23 04 0C 79 3C C5 F5 33 3A 02 00 F5 33 3A 01 00
|
||||
R 00 00 00 00 00 09 02 00 00 0E 02 00
|
||||
T 31 04 F5 33 3A 00 00 F5 33 CD 68 01 F1 F1 7D C1
|
||||
R 00 00 00 00 00 05 02 00 00 0A 00 00
|
||||
T 3F 04 B7 20 E1
|
||||
R 00 00 00 00
|
||||
T 42 04
|
||||
R 00 00 00 00
|
||||
T 42 04 C5 79 F5 33 DD 66 FE DD 6E FF E5 3A 00 00
|
||||
R 00 00 00 00 00 0E 02 00
|
||||
T 50 04 F5 33 CD 68 01 F1 F1 7D C1 B7 28 10 DD 7E
|
||||
R 00 00 00 00 00 05 00 00
|
||||
T 5E 04 FE 32 02 00 21 03 00 71 DD 7E FF 32 01 00
|
||||
R 00 00 00 00 00 04 02 00 00 07 02 00 00 0E 02 00
|
||||
T 6C 04
|
||||
R 00 00 00 00
|
||||
T 6C 04 3A 04 00 B7 C2 19 05 3A 03 00 3C F5 33 3A
|
||||
R 00 00 00 00 00 03 02 00 00 07 00 00 00 0A 02 00
|
||||
T 7A 04 02 00 F5 33 3A 01 00 F5 33 3A 00 00 F5 33
|
||||
R 00 00 00 00 00 02 02 00 00 07 02 00 00 0C 02 00
|
||||
T 88 04 CD 68 01 F1 F1 7D B7 28 07 21 03 00 34 C3
|
||||
R 00 00 00 00 00 03 00 00 00 0C 02 00
|
||||
T 96 04 14 05
|
||||
R 00 00 00 00 00 02 00 00
|
||||
T 98 04
|
||||
R 00 00 00 00
|
||||
T 98 04 0E 00
|
||||
R 00 00 00 00
|
||||
T 9A 04
|
||||
R 00 00 00 00
|
||||
T 9A 04 79 D6 04 30 63 06 00
|
||||
R 00 00 00 00
|
||||
T A1 04
|
||||
R 00 00 00 00
|
||||
T A1 04 78 D6 04 30 59 FD 21 00 00 FD 6E 00 26 00
|
||||
R 00 00 00 00 00 09 02 00
|
||||
T AF 04 29 11 00 00 19 5E 23 56 C5 D5 3A 01 00 F5
|
||||
R 00 00 00 00 00 04 01 00 00 0D 02 00
|
||||
T BD 04 33 79 F5 33 C5 33 CD A2 00 F1 33 D1 C1 26
|
||||
R 00 00 00 00 00 09 00 00
|
||||
T CB 04 00 19 7E D6 58 20 2A 21 03 00 5E 16 00 69
|
||||
R 00 00 00 00 00 0A 02 00
|
||||
T D9 04 26 00 19 5D 54 29 19 29 29 EB FD 21 02 00
|
||||
R 00 00 00 00 00 0E 02 00
|
||||
T E7 04 FD 6E 00 26 00 19 58 16 00 19 EB 21 0E 00
|
||||
R 00 00 00 00 00 0E 01 00
|
||||
T F5 04 19 EB 3A 00 00 3C 12
|
||||
R 00 00 00 00 00 05 02 00
|
||||
T FC 04
|
||||
R 00 00 00 00
|
||||
T FC 04 04 18 A2
|
||||
R 00 00 00 00
|
||||
T FF 04
|
||||
R 00 00 00 00
|
||||
T FF 04 0C 18 98
|
||||
R 00 00 00 00
|
||||
T 02 05
|
||||
R 00 00 00 00
|
||||
T 02 05 CD 25 02 21 03 00 36 00 21 02 00 36 06 21
|
||||
R 00 00 00 00 00 03 00 00 00 06 02 00 00 0B 02 00
|
||||
T 10 05 01 00 36 00
|
||||
R 00 00 00 00 00 02 02 00
|
||||
T 14 05
|
||||
R 00 00 00 00
|
||||
T 14 05 21 04 00 36 02
|
||||
R 00 00 00 00 00 03 02 00
|
||||
T 19 05
|
||||
R 00 00 00 00
|
||||
T 19 05 21 04 00 35 CD 36 02 CD 20 03 2E 01
|
||||
R 00 00 00 00 00 03 02 00 00 07 00 00 00 0A 00 00
|
||||
T 25 05
|
||||
R 00 00 00 00
|
||||
T 25 05 DD F9 DD E1 C9
|
||||
R 00 00 00 00
|
||||
T 2A 05
|
||||
R 00 00 00 00
|
||||
T 2A 05 45 78 69 74 21 0A 0D 00
|
||||
R 00 00 00 00
|
||||
T 32 05
|
||||
R 00 00 00 00
|
||||
T 32 05 CD 00 00 CD FD 00 CD 25 02 21
|
||||
R 00 00 00 00 00 03 00 00 00 06 00 00 00 09 00 00
|
||||
T 3C 05 4B 05 E5 CD 00 00 F1
|
||||
R 00 00 00 00 00 02 00 00 02 06 02 00
|
||||
T 43 05
|
||||
R 00 00 00 00
|
||||
T 43 05 CD BA 03 7D B7 20 F9 C9
|
||||
R 00 00 00 00 00 03 00 00
|
||||
T 4B 05
|
||||
R 00 00 00 00
|
||||
T 4B 05 1B 5B 32 4A 00
|
||||
R 00 00 00 00
|
||||
T 00 00
|
||||
R 00 00 07 00
|
||||
T 00 00 00
|
||||
R 00 00 07 00
|
||||
T 01 00
|
||||
R 00 00 07 00
|
||||
T 01 00 00
|
||||
R 00 00 07 00
|
||||
T 02 00
|
||||
R 00 00 07 00
|
||||
T 02 00 06
|
||||
R 00 00 07 00
|
||||
T 03 00
|
||||
R 00 00 07 00
|
||||
T 03 00 00
|
||||
R 00 00 07 00
|
||||
T 04 00
|
||||
R 00 00 07 00
|
||||
T 04 00 02
|
||||
R 00 00 07 00
|
65
.build/main.sym
Normal file
65
.build/main.sym
Normal file
|
@ -0,0 +1,65 @@
|
|||
ASxxxx Assembler V02.00 + NoICE + SDCC mods (Zilog Z80 / Hitachi HD64180 / ZX-Next / eZ80), page 1.
|
||||
Hexadecimal [16-Bits]
|
||||
|
||||
Symbol Table
|
||||
|
||||
.__.$$$. = 2710 L
|
||||
.__.ABS. = 0000 G
|
||||
.__.CPU. = 0000 L
|
||||
.__.H$L. = 0000 L
|
||||
0 ___str_0 002B R
|
||||
0 ___str_1 003C R
|
||||
0 ___str_10 054B R
|
||||
0 ___str_2 004D R
|
||||
0 ___str_3 005E R
|
||||
0 ___str_4 006F R
|
||||
0 ___str_5 0080 R
|
||||
0 ___str_6 0091 R
|
||||
0 ___str_7 03A8 R
|
||||
0 ___str_8 03B3 R
|
||||
0 ___str_9 052A R
|
||||
7 __xinit__counter 0004 R
|
||||
7 __xinit__current_rotation 0001 R
|
||||
7 __xinit__current_shape 0000 R
|
||||
7 __xinit__current_x 0002 R
|
||||
7 __xinit__current_y 0003 R
|
||||
0 _construct_shapes 0000 GR
|
||||
2 _counter 0004 GR
|
||||
_cout = 0002
|
||||
2 _current_rotation 0001 GR
|
||||
2 _current_shape 0000 GR
|
||||
2 _current_x 0002 GR
|
||||
2 _current_y 0003 GR
|
||||
0 _does_piece_fit 0168 GR
|
||||
0 _draw 0320 GR
|
||||
1 _field 000E GR
|
||||
0 _initialize_field 00FD GR
|
||||
_key = 001E
|
||||
0 _loop 03BA GR
|
||||
0 _main 0532 GR
|
||||
0 _new_shape 0225 GR
|
||||
_put_string **** GX
|
||||
_random **** GX
|
||||
0 _render 0236 GR
|
||||
0 _rotate 00A2 GR
|
||||
1 _screen 00E6 GR
|
||||
1 _seed 01BE GR
|
||||
_status = 001F
|
||||
1 _tetromino 0000 GR
|
||||
|
||||
|
||||
ASxxxx Assembler V02.00 + NoICE + SDCC mods (Zilog Z80 / Hitachi HD64180 / ZX-Next / eZ80), page 2.
|
||||
Hexadecimal [16-Bits]
|
||||
|
||||
Area Table
|
||||
|
||||
0 _CODE size 550 flags 0
|
||||
1 _DATA size 1BF flags 0
|
||||
2 _INITIALIZED size 5 flags 0
|
||||
3 _DABS size 0 flags 8
|
||||
4 _HOME size 0 flags 0
|
||||
5 _GSINIT size 0 flags 0
|
||||
6 _GSFINAL size 0 flags 0
|
||||
7 _INITIALIZER size 5 flags 0
|
||||
8 _CABS size 0 flags 8
|
||||
|
BIN
.build/tetris.com
Normal file
BIN
.build/tetris.com
Normal file
Binary file not shown.
49
.build/tetris.ihx
Normal file
49
.build/tetris.ihx
Normal file
|
@ -0,0 +1,49 @@
|
|||
:0E010000317A09CDA606CD83060E00CD05008E
|
||||
:1006A60001050078B1280811750821A106EDB0C929
|
||||
:20010E002A0100856FD2170124E93E06CD0E016FC9FD210200FD39FD4E003E09CD0E01C9D6
|
||||
:20012E00D1C1C5D50AB7C8C5F533CD1F0133C10318F23A7408470F0F0FEE1F80DEFF3274E7
|
||||
:03014E00086FC96E
|
||||
:20015100217C0122B606218D0122B806219E0122BA0621AF0122BC0621C00122BE0621D172
|
||||
:200171000122C00621E20122C206C92E2E582E2E2E582E2E2E582E2E2E582E002E2E582E64
|
||||
:200191002E58582E2E582E2E2E2E2E2E002E582E2E2E58582E2E2E582E2E2E2E2E002E2EC4
|
||||
:2001B100582E2E2E582E2E58582E2E2E2E2E002E582E2E2E582E2E2E58582E2E2E2E2E007A
|
||||
:2001D1002E2E582E2E58582E2E2E582E2E2E2E2E002E2E2E2E2E58582E2E58582E2E2E2E2C
|
||||
:2001F1002E00DDE5DD210000DD393BDD7E05DD4E0487876FDD7E06B72821DD5E05DD7E04A3
|
||||
:200211008787DD77FFDD7E063D2813DD7E06D6022815DD7E06D6032815181C09181B7BC6F5
|
||||
:200231000CDD96FF6F18123E0F95916F180B3E0393DD86FF6F18022E0033DDE1C9DDE5DD4B
|
||||
:20025100210000DD39F53B0E0079FE123055D6113E012801AFDD77FD1E007BD60C30416966
|
||||
:200271002600D55D5429192929D17B1600856F7A8C677DC6C4DD77FE7CCE06DD77FF7BB73C
|
||||
:20029100280B7BD60B2806DDCBFD46280521090018032100007DDD6EFEDD66FF771C18BAA5
|
||||
:2002B1000C18A6DDF9DDE1C9DDE5DD210000DD39F5F50E0079D604D26F03DD7E0781DD776A
|
||||
:2002D100FCAFDD77FFDD7EFFD604D26B03C5DD4605C5DD7EFFF533CDF301F133C1DD75FD72
|
||||
:2002F100DD7EFC5F87838787DD460680DD46FF80DD77FEDD5E061600DD6EFF260019CB7C5B
|
||||
:200311002052110C80293FCB1CCB1DED523045DD5E07160069260019CB7C20381112802967
|
||||
:200331003FCB1CCB1DED52302BDD6E0426002911B606195E2356DD6EFD2600197ED6582056
|
||||
:2003510013DD7EFEC6C45F3E00CE06571AB728042E00180CDD34FFC3D6020CC3C5022E010F
|
||||
:20037100DDF9DDE1C9CD40017DE6073275083A7508D60728F0C9DDE5DD210000DD39F5F5B3
|
||||
:20039100019C0711C406AFDD77FFDD7EFFD6D8302079DD86FFDD77FD78CE00DD77FEDD6E64
|
||||
:2003B100FF2600197EDD6EFDDD66FE77DD34FF18D91E007BD604D26C0416007AD604D26816
|
||||
:2003D10004FD217508FD6E002600293EB6856F3E068C677EDD77FE237EDD77FFC5D53A7686
|
||||
:2003F10008F5337BF533D533CDF301F1337DD1C1DD86FE6F3E00DD8EFF677ED6582054FD21
|
||||
:20041100217808FD6E002600DD73FEAFDD77FFDD7EFE856FDD7EFF8C67D55D542919292995
|
||||
:20043100D1E33A77082600DD86FCDD77FE7CDD8EFDDD77FF6A26007DDD86FE6F7CDD8EFF6D
|
||||
:200451006709DD75FEDD74FF3A75083CDD6EFEDD66FF7714C3CC031CC3C403DDF9DDE1C9DD
|
||||
:20047100DDE5DD210000DD393B210405E5CD2E01F10E0079D612306CAFDD77FFDD7EFFD621
|
||||
:200491000C30525916006B6229192929DD5EFF160019119C07195E7BD60838123E1BD30288
|
||||
:2004B1003E5BD3023E30D3023E6DD30218197BB728153E1BD3023E5BD3023E33D3027BC637
|
||||
:2004D10030D3023E6DD30221F9041600197ED302DD34FF18A73E0AD3023E0DD3023E20D3A9
|
||||
:2004F100020C188F33DDE1C92052474F424D43573D23001B5B323B324800DDE5DD210000CE
|
||||
:20051100DD39F5DB1F0FD2BD053A7708DD77FE2178084E3A7608DD77FFDB1EFE032816FEE7
|
||||
:2005310061281FFE642820FE722821FE73282DD6772830184D217B06E5CD2E01F12E00C36A
|
||||
:200551007606DD35FE183BDD34FE1836DD34FFDD7EFFD604202CAFDD77FF182621790836A6
|
||||
:2005710000181F0C793CC5F5333A7708F5333A7608F5333A7508F533CDB902F1F17DC1B786
|
||||
:2005910020E1C579F533DD66FEDD6EFFE53A7508F533CDB902F1F17DC1B72810DD7EFE3272
|
||||
:2005B100770821780871DD7EFF3276083A7908B7C26A063A78083CF5333A7708F5333A763C
|
||||
:2005D10008F5333A7508F533CDB902F1F17DB7280721780834C365060E0079D60430630631
|
||||
:2005F1000078D6043059FD217508FD6E0026002911B606195E2356C5D53A7608F53379F515
|
||||
:2006110033C533CDF301F133D1C12600197ED658202A2178085E1600692600195D54291942
|
||||
:200631002929EBFD217708FD6E0026001958160019EB21C40619EB3A75083C120418A20CF5
|
||||
:200651001898CD7603217808360021770836062176083600217908360221790835CD870303
|
||||
:20067100CD71042E01DDF9DDE1C945786974210A0D00CD5101CD4E02CD7603219C06E5CDD2
|
||||
:150691002E01F1CD0B057DB720F9C91B5B324A00000006000247
|
||||
:00000001FF
|
44
Makefile
Normal file
44
Makefile
Normal file
|
@ -0,0 +1,44 @@
|
|||
AS = sdasz80
|
||||
CC = sdcc
|
||||
AR = sdar
|
||||
LD = sdldz80
|
||||
OBJCOPY = sdobjcopy
|
||||
|
||||
BUILD = .build
|
||||
|
||||
TARGET = tetris
|
||||
OPT = s
|
||||
|
||||
CFLAGS = -mz80 -D__SDCC__ -Iinclude -I../crt/include
|
||||
ASFLAGS = -plosff
|
||||
|
||||
SRC = \
|
||||
src/main.c \
|
||||
|
||||
OBJ_1 = $(notdir $(SRC:.c=.rel))
|
||||
OBJ_2 = $(notdir $(OBJ_1:.s=.rel))
|
||||
OBJ = $(addprefix $(BUILD)/, $(OBJ_2))
|
||||
vpath %.c $(sort $(dir $(SRC)))
|
||||
vpath %.s $(sort $(dir $(SRC)))
|
||||
|
||||
.PHONY: all clean
|
||||
|
||||
all: $(BUILD) $(BUILD)/$(TARGET).com
|
||||
|
||||
$(BUILD)/%.rel: %.c Makefile | $(BUILD)
|
||||
$(CC) -c $(CFLAGS) $< -o $@
|
||||
|
||||
$(BUILD)/%.rel: %.s Makefile | $(BUILD)
|
||||
$(AS) $(ASFLAGS) $@ $<
|
||||
|
||||
$(BUILD)/$(TARGET).ihx: ../crt/.build/crt.a $(OBJ)
|
||||
$(LD) -i $@ ../crt/.build/crt.a $(OBJ)
|
||||
|
||||
%.com: %.ihx
|
||||
$(OBJCOPY) -I ihex -O binary $< $@
|
||||
|
||||
$(BUILD):
|
||||
mkdir $@
|
||||
|
||||
clean:
|
||||
rm -fr $(BUILD)
|
247
src/main.c
Normal file
247
src/main.c
Normal file
|
@ -0,0 +1,247 @@
|
|||
#include "console.h"
|
||||
#include "random.h"
|
||||
|
||||
const char* tetromino[7];
|
||||
#define WIDTH 12
|
||||
#define HEIGHT 18
|
||||
#define SCALE 1
|
||||
|
||||
uint8_t field[WIDTH*HEIGHT];
|
||||
uint8_t screen[WIDTH*HEIGHT];
|
||||
|
||||
void construct_shapes() {
|
||||
tetromino[0] = "..X."
|
||||
"..X."
|
||||
"..X."
|
||||
"..X.";
|
||||
|
||||
tetromino[1] = "..X."
|
||||
".XX."
|
||||
".X.."
|
||||
"....";
|
||||
|
||||
tetromino[2] = ".X.."
|
||||
".XX."
|
||||
"..X."
|
||||
"....";
|
||||
|
||||
tetromino[3] = "..X."
|
||||
"..X."
|
||||
".XX."
|
||||
"....";
|
||||
|
||||
tetromino[4] = ".X.."
|
||||
".X.."
|
||||
".XX."
|
||||
"....";
|
||||
|
||||
tetromino[5] = "..X."
|
||||
".XX."
|
||||
"..X."
|
||||
"....";
|
||||
|
||||
tetromino[6] = "...."
|
||||
".XX."
|
||||
".XX."
|
||||
"....";
|
||||
}
|
||||
|
||||
uint8_t rotate(uint8_t x, uint8_t y, uint8_t r) {
|
||||
switch (r) {
|
||||
case 0:
|
||||
return y*4+x;
|
||||
case 1:
|
||||
return 12 + y - x*4;
|
||||
case 2:
|
||||
return 15 - y*4 - x;
|
||||
case 3:
|
||||
return 3 - y + x*4;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void initialize_field() {
|
||||
for (uint8_t y = 0; y < HEIGHT; ++y) {
|
||||
for (uint8_t x = 0; x < WIDTH; ++x) {
|
||||
field[y*WIDTH + x] = (x == 0 || x == WIDTH - 1 || y == HEIGHT-1) ? 9 : 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t does_piece_fit(uint8_t shape, uint8_t rotation, uint8_t px, uint8_t py) {
|
||||
for (uint8_t y = 0; y < 4; ++y) {
|
||||
for (uint8_t x = 0; x < 4; ++x) {
|
||||
// Index in piece
|
||||
uint8_t pi = rotate(x, y, rotation);
|
||||
|
||||
// Index in field
|
||||
uint8_t fi = (py + y) * WIDTH + px + x;
|
||||
|
||||
if (px + x >= 0 && px + x < WIDTH) {
|
||||
if (py + y >= 0 && py + y < HEIGHT) {
|
||||
// Check for collision
|
||||
if (tetromino[shape][pi] == 'X' && field[fi] != 0) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
uint8_t current_shape = 0;
|
||||
uint8_t current_rotation = 0;
|
||||
uint8_t current_x = WIDTH/2;
|
||||
uint8_t current_y = 0;
|
||||
|
||||
void new_shape() {
|
||||
do {
|
||||
current_shape = random() & 0x07;
|
||||
} while (current_shape == 7);
|
||||
}
|
||||
|
||||
void render() {
|
||||
// Copy current state of the field
|
||||
for (uint8_t i = 0; i < WIDTH*HEIGHT; ++i) {
|
||||
screen[i] = field[i];
|
||||
}
|
||||
|
||||
// Copy current piece to the screen
|
||||
for (uint8_t y = 0; y < 4; ++y) {
|
||||
for (uint8_t x = 0; x < 4; ++x) {
|
||||
if (tetromino[current_shape][rotate(x, y, current_rotation)] == 'X') {
|
||||
screen[(current_y+y)*WIDTH + current_x + x] = current_shape + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
__sfr __at (0x02) cout;
|
||||
void draw() {
|
||||
// Draw the screen
|
||||
put_string("\033[2;2H");
|
||||
for (uint8_t y = 0; y < HEIGHT*SCALE; ++y) {
|
||||
for (uint8_t x = 0; x < WIDTH*SCALE; ++x) {
|
||||
uint8_t i = screen[y/SCALE*WIDTH + x/SCALE];
|
||||
if (i >= 8) {
|
||||
cout = '\033';
|
||||
cout = '[';
|
||||
cout = '0';
|
||||
cout = 'm';
|
||||
} else if (i > 0) {
|
||||
cout = '\033';
|
||||
cout = '[';
|
||||
cout = '3';
|
||||
cout = 48+i;
|
||||
cout = 'm';
|
||||
}
|
||||
char c = " RGOBMCW=#"[i];
|
||||
cout = c;
|
||||
}
|
||||
cout = '\n';
|
||||
cout = '\r';
|
||||
cout = ' ';
|
||||
}
|
||||
}
|
||||
|
||||
#define SPEED 2
|
||||
uint8_t counter = SPEED;
|
||||
|
||||
__sfr __at (0x1F) status;
|
||||
__sfr __at (0x1E) key;
|
||||
uint8_t loop() {
|
||||
// Check if a key has been pressed
|
||||
if (status & 1) {
|
||||
uint8_t nx = current_x;
|
||||
uint8_t ny = current_y;
|
||||
uint8_t nr = current_rotation;
|
||||
// End program on ctrl-c
|
||||
switch (key) {
|
||||
case 0x03:
|
||||
put_string("Exit!\n\r");
|
||||
return 0;
|
||||
|
||||
// Move to the left
|
||||
case 'a':
|
||||
nx--;
|
||||
break;
|
||||
|
||||
// Move to the right
|
||||
case 'd':
|
||||
nx++;
|
||||
break;
|
||||
|
||||
// Rotate
|
||||
case 'r':
|
||||
nr++;
|
||||
if (nr == 4) {
|
||||
nr = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
// Move down faster
|
||||
case 's':
|
||||
counter = 0;
|
||||
break;
|
||||
|
||||
// Drop the piece
|
||||
case 'w':
|
||||
while (does_piece_fit(current_shape, current_rotation, current_x, ++ny + 1));
|
||||
break;
|
||||
}
|
||||
|
||||
if (does_piece_fit(current_shape, nr, nx, ny)) {
|
||||
current_x = nx;
|
||||
current_y = ny;
|
||||
current_rotation = nr;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (counter == 0) {
|
||||
if (does_piece_fit(current_shape, current_rotation, current_x, current_y+1)) {
|
||||
current_y++;
|
||||
} else {
|
||||
// Copy piece to field
|
||||
for (uint8_t y = 0; y < 4; ++y) {
|
||||
for (uint8_t x = 0; x < 4; ++x) {
|
||||
if (tetromino[current_shape][rotate(x, y, current_rotation)] == 'X') {
|
||||
field[(current_y+y)*WIDTH + current_x + x] = current_shape + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
new_shape();
|
||||
current_y = 0;
|
||||
current_x = WIDTH/2;
|
||||
current_rotation = 0;
|
||||
}
|
||||
counter = SPEED;
|
||||
}
|
||||
|
||||
counter--;
|
||||
|
||||
render();
|
||||
draw();
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
uint8_t seed;
|
||||
|
||||
void main() {
|
||||
construct_shapes();
|
||||
initialize_field();
|
||||
|
||||
// Set initial shape
|
||||
new_shape();
|
||||
|
||||
// Clear the screen
|
||||
put_string("\033[2J");
|
||||
|
||||
// @todo We need to be able to turn the cursor on/off
|
||||
|
||||
while (loop());
|
||||
}
|
Loading…
Reference in New Issue
Block a user