Star Strike by Kevin Dixon for the Commodore 64 Compute Gazette June 1991
Jump to navigation
Jump to search
Contents
- 1 Variants
- 2 Sprite Info
- 3 Sound Info
- 4 Disassembly
- 4.1 0801 - BASIC RAM
- 4.2 0840 - Sprites
- 4.3 0E00 - Initial Jumppoint
- 4.4 0E03 - Variable space
- 4.5 0F80 - Subroutines
- 4.5.1 0F80 - Delay
- 4.5.2 0F8C - FireSirenSound
- 4.5.3 0FD7 - DefineCharsets
- 4.5.4 1023 - Subroutine1023
- 4.5.5 1083 - Hyperspace
- 4.5.6 109C - RotateShipLeft
- 4.5.7 10AA - RotateShipRight
- 4.5.8 10BA -
- 4.5.9 1118 -
- 4.5.10 1118 - Frick
- 4.5.11 1118 - Frack
- 4.5.12 12B6 - Math
- 4.5.13 12D5 -
- 4.5.14 -
- 4.5.15 -
- 4.5.16 1350 - Blankscreen
- 4.5.17 -
- 4.5.18 -
- 4.5.19 -
- 4.5.20 -
- 4.5.21 -
- 4.5.22 147A - GenerateMap
- 4.5.23 14D7 -
- 4.5.24 -
- 4.5.25 -
- 4.5.26 -
- 4.5.27 -
- 4.5.28 -
- 4.5.29 -
- 4.5.30 -
- 4.5.31 -
- 4.5.32 -
- 4.5.33 -
- 4.5.34 177E - FlashYellowDamage
- 4.5.35 -
- 4.5.36 -
- 4.5.37 -
- 4.5.38 18C8 - Reduce E35
- 4.5.39 -
- 4.5.40 -
- 4.5.41 -
- 4.5.42 -
- 4.5.43 -
- 4.5.44 -
- 4.5.45 -
- 4.5.46 -
- 4.5.47 -
- 4.5.48 -
- 4.5.49 1BFE - SetNoiseAllThree
- 4.5.50 -
- 4.5.51 -
- 4.5.52 -
- 4.6 1C54 Main
Variants
There are two known versions that differ substantially. This document describes the "Floppy" variant which has a more complexity that the "Magazine" variant which is 2KiB (2/3 the size) shorter.
Star Strike by Kevin Dixon for the Commodore 64 Compute Gazette June 1991 - Magazine Variant
Sprite Info
Sprite 0 is spacecraft. Sprite 1 is the shot. The missiles have been seen to be 2,3,4,5,6. The generator, asteroids A and B, and the boss are sprite 7.
Sound Info
Voice 1
Voice 2
Voice 3
Disassembly
*=$0801
0801 - BASIC RAM
; 0x0801 is BASIC RAM
0801: 1E 08 ;pointer to 0x081E in BASIC RAM
;0x081E, 0x081F are both 0x00 so that is the
;end of the BASIC program
0803: 0A 00 ;0x000A is BASIC line number 10
0805: 9E ;BASIC Token for SYS
0806: 33 35 38 34;ASCII parameters of 3584 for BASIC SYS call
;This is memory location 0x0E00
080A: 20 42 59 20;" BY "
080E: 4B 45 56 49;"KEVI"
0812: 4E 20 44 49;"N DI"
0816: 58 91 20 31;"X" + BASIC Token for ON + " 1"
;It seems he saved a byte by tricking
;the BASIC decoder into spelling part
;of his name
081A: 39 39 30 00;"990" + End of BASIC line 0x00
081E: 00 ;Empty pointer to indicate
081F: 00 ;the end of a BASIC program
;Not certain why SYS3584 is issued since it immediately calls
;a jump to location 7257. A SYS7257 would have sufficed and saved
;3 bytes of memory.
; vacant, unused memory
0820: 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
0830: 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
0840 - Sprites
; Sprite Storage
; Experimentation reveals that the entire
; reserved sprite memory is being loaded, even if it is the
; invisible/transparent 0x00 character.
; Spacecraft sprite data : Heading EEE
0840: 00 00 00 ; -------- -------- --------
0843: 38 00 00 ; --+++--- -------- --------
0846: 1E 00 00 ; ---++++- -------- --------
0849: 0F 80 00 ; ----++++ +------- --------
084C: 1E 00 00 ; ---++++- -------- --------
084F: 38 00 00 ; --+++--- -------- --------
0852: 00 00 00 ;Line 7
0855: 00 00 00 ;Line 8
0858: 00 00 00 ;Line 9
085B: 00 00 00 ;Line 10
085E: 00 00 00 ;Line 11
0861: 00 00 00 ;Line 12
0864: 00 00 00 ;Line 13
0867: 00 00 00 ;Line 14
086A: 00 00 00 ;Line 15
086D: 00 00 00 ;Line 16
0870: 00 00 00 ;Line 17
0873: 00 00 00 ;Line 18
0876: 00 00 00 ;Line 19
0879: 00 00 00 ;Line 20
087C: 00 00 00 ;Line 21
; Unknown byte
087F: 57
; Spacecraft sprite data : Heading ESE
0880: 08 00 00 ; ----+--- -------- --------
0883: 0C 00 00 ; ----++-- -------- --------
0886: 0E 00 00 ; ----+++- -------- --------
0889: 1F 00 00 ; ---+++++ -------- --------
088C: 3F 80 00 ; --++++++ +------- --------
088F: 00 00 00 ;Line 6
0892: 00 00 00 ;Line 7
0895: 00 00 00 ;Line 8
0898: 00 00 00 ;Line 9
089B: 00 00 00 ;Line 10
089E: 00 00 00 ;Line 11
08A1: 00 00 00 ;Line 12
08A4: 00 00 00 ;Line 13
08A7: 00 00 00 ;Line 14
08AA: 00 00 00 ;Line 15
08AD: 00 00 00 ;Line 16
08B0: 00 00 00 ;Line 17
08B3: 00 00 00 ;Line 18
08B6: 00 00 00 ;Line 19
08B9: 00 00 00 ;Line 20
08BC: 00 00 00 ;Line 21
08BF: 01
; Spacecraft sprite data : Heading SE
08C0: 00 00 00 ; -------- -------- --------
08C3: 0E 00 00 ; ----+++- -------- --------
08C6: 0E 00 00 ; ----+++- -------- --------
08C9: 7F 00 00 ; -+++++++ -------- --------
08CC: 1F 00 00 ; ---+++++ -------- --------
08CF: 03 80 00 ; ------++ +------- --------
08D2: 00 00 00 ;Line 7
08D5: 00 00 00 ;Line 8
08D8: 00 00 00 ;Line 9
08DB: 00 00 00 ;Line 10
08DE: 00 00 00 ;Line 11
08E1: 00 00 00 ;Line 12
08E4: 00 00 00 ;Line 13
08E7: 00 00 00 ;Line 14
08EA: 00 00 00 ;Line 15
08ED: 00 00 00 ;Line 16
08F0: 00 00 00 ;Line 17
08F3: 00 00 00 ;Line 18
08F6: 00 00 00 ;Line 19
08F9: 00 00 00 ;Line 20
08FC: 00 00 00 ;Line 21
08FF: 06
; Spacecraft sprite data : Heading SE
0900: 00 00 00 ; -------- -------- --------
0903: 07 00 00 ; -----+++ -------- --------
0906: 3F 00 00 ; --++++++ -------- --------
0909: 1F 00 00 ; ---+++++ -------- --------
090C: 0F 00 00 ; ----++++ -------- --------
090F: 07 00 00 ; -----+++ -------- --------
0912: 03 00 00 ; ------++ -------- --------
0915: 00 00 00
0918: 00 00 00
091B: 00 00 00
091E: 00 00 00
0921: 00 00 00
0924: 00 00 00
0927: 00 00 00
092A: 00 00 00
092D: 00 00 00
0930: 00 00 00
0933: 00 00 00
0936: 00 00 00
0939: 00 00 00
093C: 00 00 00
093F: F0
; Spacecraft sprite data : Heading SSS
0940: 00 00 00 ; -------- -------- --------
0943: 33 00 00 ; --++--++ -------- --------
0946: 3F 00 00 ; --++++++ -------- --------
0949: 1E 00 00 ; ---++++- -------- --------
094C: 1E 00 00 ; ---++++- -------- --------
094F: 0C 00 00 ; ----++-- -------- --------
0952: 0C 00 00 ; ----++-- -------- --------
0955: 00 00 00
0958: 00 00 00
095B: 00 00 00
095E: 00 00 00
0961: 00 00 00
0964: 00 00 00
0967: 00 00 00
096A: 00 00 00
096D: 00 00 00
0970: 00 00 00
0973: 00 00 00
0976: 00 00 00
0979: 00 00 00
097C: 00 00 00
097F: 21
; Spacecraft sprite data : Heading SSW
0980: 00 00 00 ; -------- -------- --------
0983: 38 00 00 ; --+++--- -------- --------
0986: 3F 00 00 ; --++++++ -------- --------
0989: 3E 00 00 ; --++++++ -------- --------
098C: 3C 00 00 ; --++++-- -------- --------
098F: 38 00 00 ; --+++--- -------- --------
0992: 30 00 00 ; --++---- -------- --------
0995: 00 00 00
0998: 00 00 00
099B: 00 00 00
099E: 00 00 00
09A1: 00 00 00
09A4: 00 00 00
09A7: 00 00 00
09AA: 00 00 00
09AD: 00 00 00
09B0: 00 00 00
09B3: 00 00 00
09B6: 00 00 00
09B9: 00 00 00
09BC: 00 00 00
09BF: 90
; Spacecraft sprite data : Heading SW
09c0: 00 00 00 ; -------- -------- --------
09C3: 1C 00 00 ; ---+++-- -------- --------
09C6: 1C 00 00 ; ---+++-- -------- --------
09C9: 3F 80 00 ; --++++++ +------- --------
09CC: 3E 00 00 ; --+++++- -------- --------
09CF: 70 00 00 ; -+++---- -------- --------
09D2: 00 00 00
09D5: 00 00 00
09D8: 00 00 00
09DB: 00 00 00
09DE: 00 00 00
09E1: 00 00 00
09E4: 00 00 00
09E7: 00 00 00
09EA: 00 00 00
09ED: 00 00 00
09F0: 00 00 00
09F3: 00 00 00
09F6: 00 00 00
09F9: 00 00 00
09FC: 00 00 00
09FF: 20
; Spacecraft sprite data : Heading WSW
0A00: 04 00 00 ; -----+-- -------- --------
0A03: 0C 00 00 ; ----++-- -------- --------
0A06: 1C 00 00 ; ---+++-- -------- --------
0A09: 3E 00 00 ; --+++++- -------- --------
0A0C: 7F 00 00 ; -+++++++ -------- --------
0A0F: 00 00 00
0A12: 00 00 00
0A15: 00 00 00
0A18: 00 00 00
0A1B: 00 00 00
0A1E: 00 00 00
0A21: 00 00 00
0A24: 00 00 00
0A27: 00 00 00
0A2A: 00 00 00
0A2D: 00 00 00
0A30: 00 00 00
0A33: 00 00 00
0A36: 00 00 00
0A39: 00 00 00
0A3C: 00 00 00
0A3F: 58
; Spacecraft sprite data : Heading WWW
0A40: 00 00 00 ; -------- -------- --------
0A43: 00 07 00 ; -----+++ -------- --------
0A46: 00 1E 00 ; ---++++- -------- --------
0A49: 00 7C 00 ; -+++++-- -------- --------
0A4C: 00 1E 00 ; ---++++- -------- --------
0A4F: 00 07 00 ; -----+++ -------- --------
0A52: 00 00 00
0A55: 00 00 00
0A58: 00 00 00
0A5B: 00 00 00
0A5E: 00 00 00
0A61: 00 00 00
0A64: 00 00 00
0A67: 00 00 00
0A6A: 00 00 00
0A6D: 00 00 00
0A70: 00 00 00
0A73: 00 00 00
0A76: 00 00 00
0A79: 00 00 00
0A7C: 00 00 00
0A7F: 4C
; Spacecraft sprite data : Heading WNW
0A80: 00 00 00 ; -------- -------- --------
0A83: 00 00 00 ; -------- -------- --------
0A86: 00 7F 00 ; -+++++++ -------- --------
0A89: 00 3E 00 ; --+++++- -------- --------
0A8C: 00 1C 00 ; ---+++-- -------- --------
0A8F: 00 0C 00 ; ----++-- -------- --------
0A92: 00 04 00 ; -----+-- -------- --------
0A95: 00 00 00
0A98: 00 00 00
0A9B: 00 00 00
0A9E: 00 00 00
0AA1: 00 00 00
0AA4: 00 00 00
0AA7: 00 00 00
0AAA: 00 00 00
0AAD: 00 00 00
0AB0: 00 00 00
0AB3: 00 00 00
0AB6: 00 00 00
0AB9: 00 00 00
0ABC: 00 00 00
0ABF: F7
; Spacecraft sprite data : Heading NW
0AC0: 00 00 00 ; -------- -------- --------
0AC3: 70 00 00 ; -+++---- -------- --------
0AC6: 3E 00 00 ; --+++++- -------- --------
0AC9: 3F 80 00 ; --++++++ +------- --------
0ACC: 1C 00 00 ; ---+++-- -------- --------
0ACF: 1C 00 00 ; ---+++-- -------- --------
0AD2: 00 00 00
0AD5: 00 00 00
0AD8: 00 00 00
0ADB: 00 00 00
0ADE: 00 00 00
0AE1: 00 00 00
0AE4: 00 00 00
0AE7: 00 00 00
0AEA: 00 00 00
0AED: 00 00 00
0AF0: 00 00 00
0AF3: 00 00 00
0AF6: 00 00 00
0AF9: 00 00 00
0AFC: 00 00 00
0AFF: 4C
; Spacecraft sprite data : Heading NNW
0B00: 30 00 00 ; --++---- -------- --------
0B03: 00 38 00 ; --+++--- -------- --------
0B06: 00 3C 00 ; --++++-- -------- --------
0B09: 00 3E 00 ; --+++++- -------- --------
0B0C: 00 3F 00 ; --++++++ -------- --------
0B0F: 00 38 00 ; --+++--- -------- --------
0B12: 00 00 00
0B15: 00 00 00
0B18: 00 00 00
0B1B: 00 00 00
0B1E: 00 00 00
0B21: 00 00 00
0B24: 00 00 00
0B27: 00 00 00
0B2A: 00 00 00
0B2D: 00 00 00
0B30: 00 00 00
0B33: 00 00 00
0B36: 00 00 00
0B39: 00 00 00
0B3C: 00 00 00
0B3F: AC
; Spacecraft sprite data : Heading NNN
0B41: 0C 00 00 ; ----++-- -------- --------
0B43: 0C 00 00 ; ----++-- -------- --------
0B46: 1E 00 00 ; ---++++- -------- --------
0B49: 1E 00 00 ; ---++++- -------- --------
0B4C: 3F 00 00 ; --++++++ -------- --------
0B4F: 33 00 00 ; --++--++ -------- --------
0B52: 00 00 00
0B55: 00 00 00
0B58: 00 00 00
0B5B: 00 00 00
0B5E: 00 00 00
0B61: 00 00 00
0B64: 00 00 00
0B67: 00 00 00
0B6A: 00 00 00
0B6D: 00 00 00
0B70: 00 00 00
0B73: 00 00 00
0B76: 00 00 00
0B79: 00 00 00
0B7C: 00 00 00
0B7F: 85
; Spacecraft sprite data : Heading NNE
0B80: 03 00 00 ; ------++ -------- --------
0B83: 00 07 00 ; -----+++ -------- --------
0B86: 00 0F 00 ; ----++++ -------- --------
0B89: 00 1F 00 ; ---+++++ -------- --------
0B8C: 00 3F 00 ; --++++++ -------- --------
0B8F: 00 07 00 ; -----+++ -------- --------
0B92: 00 00 00
0B95: 00 00 00
0B98: 00 00 00
0B9B: 00 00 00
0B9E: 00 00 00
0BA1: 00 00 00
0BA4: 00 00 00
0BA7: 00 00 00
0BAA: 00 00 00
0BAD: 00 00 00
0BB0: 00 00 00
0BB3: 00 00 00
0BB6: 00 00 00
0BB9: 00 00 00
0BBC: 00 00 00
0BBF: 5D
; Spacecraft sprite data : Heading NE
0BC0: 00 00 00 ; -------- -------- --------
0BC3: 03 80 00 ; ------++ +------- --------
0BC6: 1F 00 00 ; ---+++++ -------- --------
0BC9: 7F 00 00 ; -+++++++ -------- --------
0BCC: 0E 00 00 ; ----+++- -------- --------
0BCF: 0E 00 00 ; ----+++- -------- --------
0BD2: 00 00 00
0BD5: 00 00 00
0BD8: 00 00 00
0BDB: 00 00 00
0BDE: 00 00 00
0BE1: 00 00 00
0BE4: 00 00 00
0BE7: 00 00 00
0BEA: 00 00 00
0BED: 00 00 00
0BF0: 00 00 00
0BF3: 00 00 00
0BF6: 00 00 00
0BF9: 00 00 00
0BFC: 00 00 00
0BFF: 0A
; Spacecraft sprite data : Heading ENE
0C00: 00 00 00 ; -------- -------- --------
0C03: 00 00 00 ; -------- -------- --------
0C06: 3F 80 00 ; --++++++ +------- --------
8C08: 1F 00 00 ; ---+++++ -------- --------
8C0C: 0E 00 00 ; ----+++- -------- --------
8C0F: 0C 00 00 ; ----++-- -------- --------
0C02: 08 00 00 ; ----+--- -------- --------
0C15: 00 00 00
0C18: 00 00 00
0C1B: 00 00 00
0C1E: 00 00 00
0C21: 00 00 00
0C24: 00 00 00
0C27: 00 00 00
0C2A: 00 00 00
0C2D: 00 00 00
0C30: 00 00 00
0C33: 00 00 00
0C36: 00 00 00
0C39: 00 00 00
0C3C: 00 00 00
0C3F: A9
; Sprite Data : Shot, Yellow
0C40: 00 00 00 ; -------- -------- --------
0C43: 00 00 00 ; -------- -------- --------
0C46: 00 0C 00 ; ----++-- -------- --------
0C49: 00 1E 00 ; ---++++- -------- --------
0C4C: 00 0C 00 ; ----++-- -------- --------
0C4F: 00 00 00
0C52: 00 00 00
0C55: 00 00 00
0C58: 00 00 00
0C5B: 00 00 00
0C5E: 00 00 00
0C61: 00 00 00
0C64: 00 00 00
0C67: 00 00 00
0C6A: 00 00 00
0C6D: 00 00 00
0C70: 00 00 00
0C73: 00 00 00
0C76: 00 00 00
0C79: 00 00 00
0C7C: 00 00 00
0C7F: B0
; Sprite Data : Missile
0C80: 00 00 00 ; -------- -------- -------- BBBB BBBB BBBB
0C83: 0C 00 00 ; ----++-- -------- -------- BBGB BBBB BBBB
0C86: 3B 00 00 ; --+++-++ -------- -------- BGRG BBBB BBBB
0C89: EA C0 00 ; +++-+-+- ++------ -------- GRRR GBBB BBBB
0C8C: 3B 00 00 ; --+++-++ -------- -------- BGRG BBBB BBBB
0C8F: 0C 00 00 ; ----++-- -------- -------- BBGB BBBB BBBB
0C92: 00 00 00
0C95: 00 00 00
0C98: 00 00 00
0C9B: 00 00 00
0C9E: 00 00 00
0CA1: 00 00 00
0CA4: 00 00 00
0CA7: 00 00 00
0CAA: 00 00 00
0CAD: 00 00 00
0CB0: 00 00 00
0CB3: 00 00 00
0CB6: 00 00 00
0CB9: 00 00 00
0CBC: 00 00 00
0CBF: 5C
;Sprite Data : Boss +- R -+L ++G
0CC0: 00 30 00 ; -------- --++---- -------- BBBB BGBB BBBB
0CC3: 00 FC 00 ; -------- ++++++-- -------- BBBB GGGB BBBB
0CC6: 03 EF 00 ; ------++ +++-++++ -------- BBBG GRGG BBBB
0CC9: 0F AB C0 ; ----++++ +-+-+-++ ++------ BBGG RRRG GBBB
0CCC: 3E AA F0 ; --+++++- +-+-+-+- ++++---- BGGR RRRR GGBB
0CCF: F5 A9 7C ; ++++-+-+ +-+-+--+ -+++++-- GGLL RRRL LGGB
0CD2: FD 55 FC ; ++++++-+ -+-+-+-+ ++++++-- GGGL LLLL GGGB
0CD5: 1F 57 D0 ; ---+++++ -+-+-+++ ++-+---- BLGG LLLG GLBB
0CD8: 1B FF 90 ; ---++-++ ++++++++ +--+---- BLRG GGGG RLBB
0CDB: 9A FE 98 ; +--++-+- +++++++- +--++--- RLRR GGGR RLRB
0CDE: 9A AA 98 ; +--++-+- +-+-+-+- +--++--- RLRR RRRR RLRB
0CE1: 9A FE 98 ; +--++-+- +++++++- +--++--- RLRR GGGR RLRB
0CE4: 1B FF 90 ; ---++-++ ++++++++ +--+---- BLRG GGGG RLBB
0CE7: 1F 57 D0 ; ---+++++ -+-+-+++ ++-+---- BLGG LLLG GLBB
0CEA: FD 55 FC ; ++++++-+ -+-+-+-+ ++++++-- GGGL LLLL GGGB
0CED: F5 A9 7C ; ++++-+-+ +-+-+--+ -+++++-- GGLL RRRL LGGB
0CF0: 3E AA F0 ; --+++++- +-+-+-+- ++++---- BGGR RRRR GGBB
0CF3: 0F AB C0 ; ----++++ +-+-+-++ ++------ BBGG RRRG GBBB
0CF6: 03 EF 00 ; ------++ +++-++++ -------- BBBG GRGG BBBB
0CF9: 00 FC 00 ; -------- ++++++-- -------- BBBB GGGB BBBB
0CFC: 00 30 00 ; -------- --++---- -------- BBBB BGBB BBBB
0CFF: C6
; Sprite Data : Home base
0D00: 3B 00 00 ; --+++-++ -------- -------- 0323 0000 0000
0D03: 2E 00 00 ; --+-+++- -------- -------- 0232 0000 0000
0D06: 3B 02 00 ; --+++-++ ------+- -------- 0323 0002 0000
0D09: 2E 06 40 ; --+-+++- -----++- -+------ 0232 0012 1000
0D0C: 3B 3D F0 ; --+++-++ --++++-+ ++++---- 0323 0331 3300
0D0F: 2E 2A A0 ; --+-+++- --+++-+- +-+----- 0232 0322 2200
0D12: 08 A9 5C ; ----+--- +-+-+--+ -+-+++-- 0020 2221 1220
0D15: 2A A5 5C ; --+-+-+- +-+--+-+ -+-+++-- 0222 2211 1220
0D18: 5F F5 5C ; -+-+++++ ++++-+-+ -+-+++-- 1133 3311 1220
0D1B: 5F F5 5C ; -+-+++++ ++++-+-+ -+-+++-- 1133 3311 1220
0D1E: 2A A5 5C ; --+-+-+- +-+--+-+ -+-+++-- 0222 2211 1220
0D21: 08 A9 5C ; ----+--- +-+-+--+ -+-+++-- 0020 2221 1220
0D24: 2E 2A A0 ; --+-+++- --+++-+- +-+----- 0232 0322 2200
0D27: 3B 3D F0 ; --+++-++ --++++-+ ++++---- 0323 0331 3300
0D2A: 2E 06 40 ; --+-+++- -----++- -+------ 0232 0012 1000
0D2D: 3B 02 00 ; --+++-++ ------+- -------- 0323 0002 0000
0D30: 2E 00 00 ; --+-+++- -------- -------- 0232 0000 0000
0D33: 3B 00 00 ; --+++-++ -------- -------- 0323 0000 0000
0D36: 00 00 00
0D39: 00 00 00
0D3C: 00 00 00
0D3F: 88
; Sprite Data : Asteroid 1
0D40: 00 FC 00
0D43: 07 96 00
0D46: 19 69 C0
0D49: 3E 99 40
0D4C: 5B A9 50
0D4F: 57 D9 F0
0D52: 69 A7 F0
0D55: F5 6A 7C
0D58: EA A6 68
0D5B: FB 66 B4
0D5E: 2D 55 58
0D61: 1F 79 DD
0D64: 3E 55 95
0D67: 07 AE 95
0D6A: 0E E9 66
0D6D: 01 DD 76
0D70: 00 BF 5F
0D73: 00 DE EC
0D76: 00 0F BC
0D79: 00 02 D8
0D7C: 00 00 B0
0D7F: 7B
; Sprite data : Asteroid 2
0D80: 00 0D 60
0D83: 00 3F 50
0D86: 02 E5 9C
0D89: 03 5E B4
0D8C: 06 59 BB
0D8F: 09 B6 7B
0D92: 0A BA 57
0D95: 36 59 E5
0D98: 3D 5D 5D
0D9B: 16 77 6D
0D9E: DE 57 59
0DA1: D6 7A DF
0DA4: DD EA 64
0DA7: DD E7 64
0DAA: BF 75 B4
0DAD: 2D 56 70
0DB0: 3E B9 E0
0DB3: 05 A5 80
0DB6: 0D 5E 00
0DB9: 03 D5 00
0DBC: 00 B0 00
0DBF: CA
; Sprite data : Generator
0DC0: 00 00 00
0DC3: 00 00 00
0DC6: 00 00 00
0DC9: 00 00 00
0DCC: 00 00 00
0DCF: 00 00 00
0DD2: 00 00 00 ; -------- -------- -------- 000000000000
0DD5: 00 30 00 ; -------- --++---- -------- 000003000000
0DD8: 00 DC 00 ; -------- ++-+++-- -------- 000031300000
0DDB: 03 67 00 ; ------++ -++--+++ -------- 000312130000
0DDE: 0D A9 C0 ; ----++-+ +-+-+--+ ++------ 003122213000
0DE1: 03 67 00 ; ------++ -++--+++ -------- 000312130000
0DE4: 00 DC 00 ; -------- ++-+++-- -------- 000031300000
0DE7: 00 30 00 ; -------- --++---- -------- 000001000000
0DEA: 00 00 00
0DED: 00 00 00
0DF0: 00 00 00
0DF3: 00 00 00
0DF6: 00 00 00
0DF9: 00 00 00
0DFC: 00 00 00
0DFF: 00
0E00 - Initial Jumppoint
0E00: 4C 59 1C JMP $1C59 ;Start of where SYS3584 is called
0E03 - Variable space
0E03 - Dynamic storage
;61 bytes of variable space
0E03: 07 ;constant $07 used in Delay($0E03) at $0F80
0E04: 01 ;appears to rapidly count downwards from $28 or 0d40. Only used in Subroutine 14D7
0E05: 01 ;
0E06: 00 ; rotation
0E07: 00 ;
0E08: 00 00 00 00 00 00 00 ; Array reference point
0E0F: 00 00 00 00 00 00 00 ; Array reference point
0E16: 00 00 00 00 00 00 00 ; Array reference point written to 00000909090909 at 1D7f-1D8B
0E1D: 00
0E1E: 00 ; possible temp variable, widely used. Sprite number that's been shot.
0E1F: 00
0E20: 00
0E21: 00
0E22: 00
0E23: 00 00 00 00 00 00 00; array reference point. Very heavily used (55 appearances). Initialized to 0 at 1D0B
0E2A: 00 ; boss location.
0E2B: 00 ; boss hits. Assigned to C9 at 1CF5, decremented at 19DC, read at 1431, 1798, 18EF, 1994
0E2C: 00 ; Assigned at to 4 at 1CFA, read at 1B82 (as SBC),179D,1436, decremented at 1A47,
0E2D: 00
0E2E: 00
0E2F: 00 ; Assigned to 0 at 1D02, read at 1AC7, 1ADD, 1AF3, 1B09, 1B1E, written 1C0E(1C0B ADC), 1ED7(1ED4 ADC), 1EFE(1EFB ADC)
0E30: 00 ; Assigned to 0 at 1D05, read at 1ACF, 1AE5, 1AFB, 1B11, 1B21 modified 1F06(+5), 1EDF(+0x27)
0E31: 00 ; number of lives, mirrored at 0E2C
0E32: 00 ; energy (major)
0E33: 00 ; energy (minor)
0E34: 00 ; energy (fraction)
0E35: 00
0E36: 00 ; Assigned to 1 at 199B, 0 at 1D08, read at 1DF8, 1ECC
0E37: 00 ; mapgen random number, loop count variable for delay loop starting at $1D5B, general temp variable
0E38: 00
0E39: 00
0E3A: 01
0E3B: 01
0E3C: 01
0E3D: 01
0E3E: 01
0E3F: 01
0E40: 01
0E41: 00 00 00 00 00 00 00 00 ; Number of MOB flashes remaining
0E49: 00
0E4A: 00
0E4B: 00
0E4C: 00
0E4D: 00
0E4E: 00
0E4F: 00
0E50: 00
0E51: 00 00 00 00 00 00 00 00 ; Default colors of sprites 0-7
0E59: 00
0E5A: 00
0E5B: 00
0E5C: 00
0E5D: 00
0E5E: 00 ; Boolean, 1 enables V3 Noise
0E5F: 00 ; ($0f8c) FireSirenSound($0E5F,$0E60, $D401, $D404)
0E60: 00 ; ($0f8c) FireSirenSound($0E5F,$0E60, $D401, $D404)
0E61: 00
0E62: 00
0E63: 00
0E64: 00
0E65: 00
0E66: 00
0E67: 00
0E68: 06
0E69: 02
0E6A: 07
0E6B: 05
0E6C: 03
0E6D: 08
0E6E: 01
0E6F: 04
0E70: FF
0E71: F9
0E72: FD
0E73: F8
0E74: FA
0E75: FC
0E76: F7
0E77: FE
0E78: FB
0E79: FB
0E7A: F7
0E7B: EF
0E7C: DF
0E7D: BF
0E7E - Strings
; Data segment
; string "'white''home' Life: Energy: Sector: xxxx"
0E7E: 05 ; white
0E7F: 13 ; home
0E80: 1D 1D 1D 1D 1D 1D ;Placeholder for score
0E86: 20 ; ' '
0E87: CC ; 'L'
0E88: 49 ; 'i'
0E89: 46 ; 'f'
0E8A :45 ; 'e'
0E8B: 3A ; ':'
0E8C: 1D ; curser right
0E8D: 20 ; ' '
0E8E: C5 ; 'E'
0E8F: 4E ; 'n'
0E90: 45 ; 'e'
0E91: 52 ; 'r'
0E92: 47 ; 'g'
0E93: 59 ; 'y'
0E94: 3A ; ':'
0E95: 1D ; curser right
0E96: 1D ; curser right
0e97: 1D ; curser right
0E98: 1D ; curser right
0E99: 20 ; ' '
0E9A: D3 ; 'S'
0E9B: 45 ; 'e'
0E9C: 43 ; 'c'
0E9D: 54 ; 't'
0E9E: 4F ; 'o'
0E9F: 52 ; 'r'
0EA0: 3A ; ':'
0EA1: 1D ; curser right
0EA2: 1D ; curser right
0EA3: 20 ; ' '
0EA4: 58 ; 'x'
0EA5: 58 ; 'x'
0EA6: 58 ; 'x'
0EA7: 9D ; curser left
0EA8: 94 ; insert
0EA9: 58 ; 'x'
0EAA: 00 ; 'end of string
; string "Game over!"
0EAB: C7 ; 'G'
0EAC: 41 ; 'a'
0EAD: 4D ; 'm'
0EAE: 45 ; 'e'
0EAF: 20 ; ' '
0EB0: 4F ; 'o'
0EB1: 56 ; 'v'
0EB2: 45 ; 'e'
0EB3: 52 ; 'r'
0EB4: 21 ; '!'
0EB5: 00
; string "Congratulations! Mission Accomplished!"
0EB6: C3 ; 'C'
0EB7: 4F ; 'o'
0EB8: 4E ; 'n'
0EB9: 47 ; 'g'
0EBA: 52 ; 'r'
0EBB: 41 ; 'a'
0EBC: 54 ; 't'
0EBD: 55 ; 'u'
0EBE: 4C ; 'l'
0EBF: 41 ; 'a'
0EC0: 54 ; 't'
0EC1: 49 ; 'i'
0EC2: 4F ; 'o'
0EC3: 4E ; 'n'
0EC4: 53 ; 's'
0EC5: 21 ; '!'
0EC6: 20 ; ' '
0EC7: 20 ; ' '
0EC8: CD ; 'M'
0EC9: 49 ; 'i'
0ECA: 53 ; 's'
0ECB: 53 ; 's'
0ECC: 49 ; 'i'
0ECD: 4F ; 'o'
0ECE: 4E ; 'n'
0ECF: 20 ; ' '
0ED0: 41 ; 'A'
0ED1: 43 ; 'c'
0ED2: 43 ; 'c'
0ED3: 4F ; 'o'
0ED4: 4D ; 'm'
0ED5: 50 ; 'p'
0ED6: 4C ; 'l'
0ED7: 49 ; 'i'
0ED8: 53 ; 's'
0ED9: 48 ; 'h'
0EDA: 45 ; 'e'
0EDB: 44 ; 'd'
0EDC: 21 ; '!'
0EDD: 00
; string "'white'STAR STRIKE"
0EDE: 05 ; white
0EDF: D3 ; 'S'
0EE0: D4 ; 'T'
0EE1 :C1 ; 'A'
0EE2: D2 ; 'R'
0EE3: 20 ; ' '
0EE4: 20 ; ' '
0EE5: D3 ; 'S'
0EE6: D4 ; 'T'
0EE7: D2 ; 'R'
0EE8: C9 ; 'I'
0EE9: CB ; 'K'
0EEA: C5 ; 'E'
0EEB: 00
; string "by Kevin Dixon"
0EEC: 42 ; 'b'
0EED: 59 ; 'y'
0EEE: 20 ; ' '
0EEF: CB ; 'K'
0EF0: 45 ; 'e'
0EF1: 56 ; 'v'
0EF2: 49 ; 'i'
0EF3: 4E ; 'n'
0EF4: 20 ; ' '
0EF5: C4 ; 'D'
0EF6: 49 ; 'i'
0EF7: 58 ; 'x'
0EF8: 4F ; 'o'
0EF9: 4E ; 'n'
0EFA: 00
; string "1990"
0EFB: 31 ; '1'
0EFC: 39 ; '9'
0EFD: 39 ; '9'
0EFE: 30 ; '0'
0EFF: 00
;32 byte block
0F00: 09 ; Read from (0x10DB as offset base)
0F01: 00 ; Read from (0x10FA as offset base)
0F02: 09
0F03: 05
0F04: 09
0F05: 09
0F06: 05
0F07: 09
0F08: 00
0F09: 09
0F10: FB
0F0B: 09
0F0C: F7
0F0D: 09
0F0E: F7
0F0F: 05
0F10: F7
0F11: 00
0F12: F7
0F13: FB
0F14: F7
0F15: F7
0F16: FB
0F17: F7
0F18: 00
0F19: F7
0F1A: 05
0F1B: F7
0F1C: 09
0F1D: F7
0F1E: 09
0F1F: FB
;These 32 bytes are custom characters for the starfield
;;Wide Star
0F20: 00 00 00 18 00 00 00 00
;;Narrow Star
0F28: 00 00 00 10 00 00 00 00
;;Constellation A
0F30: 04 20 89 3c 90 04 20 00
;;Constellation B
0F38: 10 84 10 b9 10 42 10 00
;64 byte block
; Read from $1587
0F40: 01 00 ORA ($00,X)
0F42: 01 00 ORA ($00,X)
0F44: 01 02 ORA ($02,X)
0F46: 01 00 ORA ($00,X)
0F48: 01 02 ORA ($02,X)
0F4A: 01 02 ORA ($02,X)
0F4C: 02 JAM
0F4D: 01 02 ORA ($02,X)
0F4F: 00 BRK
0F50: 02 JAM
0F51: 00 BRK
0F52: 02 JAM
0F53: 00 BRK
0F54: 02 JAM
0F55: 03 02 SLO ($02,X)
0F57: 00 BRK
0F58: 02 JAM
0F59: 03 02 SLO ($02,X)
0F5B: 03 03 SLO ($03,X)
0F5D: 02 JAM
0F5E: 03 00 SLO ($00,X)
0F60: 03 00 SLO ($00,X)
0F62: 03 00 SLO ($00,X)
0F64: 03 04 SLO ($04,X)
0F66: 03 00 SLO ($00,X)
0F68: 03 04 SLO ($04,X)
0F6A: 03 04 SLO ($04,X)
0F6C: 04 03 DOP $03
0F6E: 04 00 DOP $00
0F70: 04 00 DOP $00
0F72: 04 00 DOP $00
0F74: 04 01 DOP $01
0F76: 04 00 DOP $00
0F78: 04 01 DOP $01
0F7A: 04 01 DOP $01
0F7C: 01 04 ORA ($04,X)
0F7E: 01 00 ORA ($00,X)
0F80 - Subroutines
0F80 - Delay
This is approximately 10ms.
;Delay($0E03) - Delay some clock cycles
;entry from 1CE8,1D60,1E00,1F1B
0F80: A2 00 LDX #$00
0F82: AC 03 0E LDY $0E03 ; Appears to be a constant = 7
0F85: CA DEX
0F86: D0 FD BNE $0F85
0F88: 88 DEY
0F89: D0 FA BNE $0F85
0F8B: 60 RTS
;end Delay
0F8C - FireSirenSound
; generate sound SAW sound with rapidly dropping pitch $0E60 during repeated calls, set to noise once pitch reaches zero?
; FireSirenSound($0E5F,$0E60, $D401, $D404)
; Entry from 1E9F
; A register is number of sound ticks remaining
; if $0E60 == 0 then RTS
0F8C: AD 60 0E LDA $0E60
0F8F: F0 30 BEQ $0FC1 ;If zero, RTS
; if $0E5F == 0 use noise generator, else saw wave
0F91: AD 5F 0E LDA $0E5F
0F94: F0 08 BEQ $0F9E ;If zero, then Noise Gen, else Saw wave
; saw wave
0F96: A9 21 LDA #$21 ;Voice ON, Saw wave
0F98: 8D 04 D4 STA $D404 ;SID Voice 1 control register
0F9B: 4C A3 0F JMP $0FA3 ;Skip Noise generator code
; noise generator
0F9E: A9 81 LDA #$81 ;Voice ON, Noise generator
0FA0: 8D 04 D4 STA $D404 ;SID Voice 1 control register
; decrease frequency by 4
0FA3: CE 60 0E DEC $0E60
0FA6: CE 60 0E DEC $0E60
0FA9: D0 10 BNE $0FBB ; If $0E60 is nonzero then set highbyte of voice 1 frequency = $0E60 and RTS
; set highbyte of voice 1 frequency to 1
0FAB: A9 01 LDA #$01
0FAD: 8D 01 D4 STA $D401 ; D400(L),D401(H), Voice 1 frequency
; $0E5F = 0
0FB0: A9 00 LDA #$00
0FB2: 8D 5F 0E STA $0E5F
; set voice 1 to noise
0FB5: A9 80 LDA #$80 ;Voice OFF, Noise generator
0FB7: 8D 04 D4 STA $D404 ;SID Voice 1 control register
0FBA: 60 RTS
; set highbyte of voice 1 frequency = $0E60
0FBB: AD 60 0E LDA $0E60 ; Take this nonzero memory byte
0FBE: 8D 01 D4 STA $D401 ; D400(L),D401(H), Voice 1 frequency
0FC1: 60 RTS
;end FireSirenSound
;Subroutine 0FC2
; Entry from $1EA2 only. RTS if $0E61 == 0
0FC2: AD 61 0E LDA $0E61
0FC5: F0 0F BEQ $0FD6 ;If zero, RTS
; set SID Voice 2 control register: voice ON, Noise generator
0FC7: A9 81 LDA #$81 ;Voice ON, Noise generator
0FC9: 8D 0B D4 STA $D40B ;SID Voice 2 control register
; If $0E61 is nonzero RTS
0FCC: CE 61 0E DEC $0E61
0FCF: D0 05 BNE $0FD6 ;If $0E61 is nonzero RTS
; disable noise voice 2, keep switched to noise gen
0FD1: A9 80 LDA #$80 ;else disable noise voice 2, keep switched to noise gen
0FD3: 8D 0B D4 STA $D40B ;SID Voice 2 control register
0FD6: 60 RTS
;end Subroutine 0FC2
0FD7 - DefineCharsets
; Begin DefineCharsets()
; Entry from 0x1C59
0FD7: AD 0E DC LDA $DC0E ; Load CIA-1 Control Timer A flags
0FDA: 29 FE AND #$FE ; Flag to stop Timer A
0FDC: 8D 0E DC STA $DC0E ; CIA 1, Timer A stopped
0FDF: A5 01 LDA $01 ; Zero Page LDA 0x0001, A=0x37
6510 CPU's on-chip port register
0FE1: 29 FB AND #$FB ; Turn off bit 2. This is the CHARGEN flag
0FE3: 85 01 STA $01 ; The character ROM is mapped to address instead of 0xDxxx IO device registers
; 0x00FB-0x00FE zero page bytes reserved for ML
; These seem to be pointers
0FE5: A9 00 LDA #$00 ;
0FE7: 85 FB STA $FB ; 0x00FB = 0x00
0FE9: A9 20 LDA #$20 ;
0FEB: 85 FC STA $FC ; 0x00FC = 0x20
0FED: A9 00 LDA #$00 ;
0FEF: 85 FD STA $FD ; 0x00FD = 0x00
0FF1: A9 D8 LDA #$D8 ;
0FF3: 85 FE STA $FE ; 0x00FE = 0xD8
0FF5: A2 08 LDX #$08 ; X=0x08
0FF7: A0 00 LDY #$00 ; Y=0x00
; 0x00FB: 00 20 00 D8
;copy bytes from 0xD800-0xDFFF
;into 0x2000-0x27FF. These are the chars in Set B
0FF9: B1 FD LDA ($FD),Y ; A=data stored in 0xD800+Y
0FFB: 91 FB STA ($FB),Y ; 0x2000+Y = A
0FFD: 88 DEY ;
0FFE: D0 F9 BNE $0FF9 ; inner loop 256 bytes
; Step ahead to next page of RAM.
1000: E6 FC INC $FC ; Increment value at 0x00FC
1002: E6 FE INC $FE ; Increment value at 0x00FE
1004: CA DEX ;
1005: D0 F0 BNE $0FF7 ; Outer loop 256*8 = 2048 total bytes
1007: A5 01 LDA $01 ; Load 0x0001 into A
1009: 09 04 ORA #$04 ; Turn on bit 2 (CHARGEN). Disable user acces to CHAR ROM.
100B: 85 01 STA $01 ;
100D: AD 0E DC LDA $DC0E ;
1010: 09 01 ORA #$01 ; Restore bit 0
1012: 8D 0E DC STA $DC0E ; CIA 1 Timer A started
; Copy starfield bytes 0x0F20..0x0F3F to 0x2400..0x241F
; Charset 2, 128-132, inverse '@','a','b','c'
1015: A0 00 LDY #$00 ;
1017: B9 20 0F LDA $0F20,Y
101A: 99 00 24 STA $2400,Y
101D: C8 INY ; Increment Y
101E: C0 20 CPY #$20 ; Compare Y with 0x20
1020: D0 F5 BNE $1017 ;If nonzero, then go to A-2
1022: 60 RTS
;end DefineCharsets()
1023 - Subroutine1023
; Subroutine1023
; Entry from 0x1E33
1023: AD 35 0E LDA $0E35
1026: D0 5A BNE $1082 ;If not zero, then RTS
1028: CE 3A 0E DEC $0E3A
102B: D0 55 BNE $1082 ;If not zero, then RTS
102D: A9 00 LDA #$00
102F: 8D 5E 0E STA $0E5E ;Disable V3 Noise channel
1032: A9 04 LDA #$04
1034: 8D 3A 0E STA $0E3A ;$0E3A=4
;Scan Joystick
1037: AD 01 DC LDA $DC01 ;Capture Joystick port
103A: 29 04 AND #$04 ;Left test
103C: D0 03 BNE $1041 ;Left is NOT pressed
103E: 20 9C 10 JSR $109C ;Left is pressed
1041: AD 01 DC LDA $DC01 ;Capture Joystick port
1044: 29 08 AND #$08 ;Right test
1046: D0 03 BNE $104B ;Right is NOT pressed
1048: 20 AA 10 JSR $10AA ;Right is pressed
104B: AD 01 DC LDA $DC01 ;Capture Joystick port
104E: 29 01 AND #$01 ;Test up
1050: D0 03 BNE $1055 ;Up is NOT pressed
1052: 20 BA 10 JSR $10BA ;Up is pressed
1055: AD 01 DC LDA $DC01 ;Capture Joystick port
1058: 29 10 AND #$10 ;Test fire
105A: D0 03 BNE $105F ;Fire is NOT pressed
105C: 20 36 15 JSR $1536 ;Fire is pressed, fire
105F: AD 01 DC LDA $DC01 ;Capture Joystick port
1062: 29 02 AND #$02 ;Test down
1064: D0 03 BNE $1069 ;Down is NOT pressed
1066: 20 83 10 JSR $1083 ;Down is pressed, hyperspace
1069: AD 06 0E LDA $0E06 ;4-bit direction of craft E=$00 ENE=$0F
106C: 18 CLC ;Clear carry, else sprite pointer may be off by one
106D: 69 21 ADC #$21 ;Convert rotation into sprite pointer n-tuple at $0840
;0x40 bytes times 0x21 = $0840
106F: 8D F8 07 STA $07F8 ;Assign pointer for current sprite (MOB 0)
; check $E5E to figure out if Noise, or no noise
1072: AD 5E 0E LDA $0E5E ; V3 Noise memory cell
1075: F0 06 BEQ $107D ; set V3 Noise to fade out 'release'
; output V3 Noise, exit
1077: A9 81 LDA #$81
1079: 8D 12 D4 STA $D412 ; SID Voice 3 Control Register
107C: 60 RTS
; set V3 Noise to fade out 'release'
107D: A9 80 LDA #$80
107F: 8D 12 D4 STA $D412 ;SID Voice 3 Control Register
1082: 60 RTS
;end Subroutine 1023
1083 - Hyperspace
; hyperspace
1083: AD 01 DC LDA $DC01 ;Capture Joystick port
;A is zero only if DOWN or IDLE, but not multiple buttons
;protection for accidental hyperspace while turning
1086: 29 1F AND #$1F
1088: 49 1F EOR #$1F
108A: 29 1D AND #$1D
108C: D0 0D BNE $109B
108E: A9 0A LDA #$0A
1090: 20 B9 1B JSR $1BB9 ;SubractEnergyByA()
1093: A9 C8 LDA #$C8
1095: 8D 62 0E STA $0E62
1098: 20 50 13 JSR $1350 ; Subroutine BlankScreen()
109B: 60 RTS
;end Subroutine hyperspace
109C - RotateShipLeft
;Subroutine 109C
;rotate ship left, enters from 103E
109C: AD 06 0E LDA $0E06
109F: D0 05 BNE $10A6
10A1: A9 10 LDA #$10
10A3: 8D 06 0E STA $0E06
10A6: CE 06 0E DEC $0E06
10A9: 60 RTS
;end Subroutine 109C
10AA - RotateShipRight
;Subroutine 10AA
;rotate ship right, enters from 1048
10AA: AD 06 0E LDA $0E06
10AD: C9 0F CMP #$0F
10AF: D0 05 BNE $10B6
10B1: A9 FF LDA #$FF
10B3: 8D 06 0E STA $0E06
10B6: EE 06 0E INC $0E06
10B9: 60 RTS
;end Subroutine 10AA
10BA -
;Subroutine 10BA
;fire ship thrusters, enters from 1052
10BA: A9 01 LDA #$01
10BC: 8D 5E 0E STA $0E5E ; $0E5E = 1 - enable thrust noise
; every 16 times: decrement and display energy
10BF: CE 34 0E DEC $0E34 ; $0E34 is accessed in exactly two places
10C2: AD 34 0E LDA $0E34
10C5: 29 0F AND #$0F
10C7: D0 03 BNE $10CC
10C9: 20 A0 1B JSR $1BA0
; RTS 3 out of 4 times
10CC: CE 3B 0E DEC $0E3B ; $0E3B is accessed in exactly two places
10CF: D0 46 BNE $1117 ; If not zero, RTS
10D1: A9 03 LDA #$03
10D3: 8D 3B 0E STA $0E3B ; reached 0, set to 3
; y = 2* $0E06
10D6: AD 06 0E LDA $0E06
10D9: 0A ASL A
10DA: A8 TAY
10DB: B9 00 0F LDA $0F00,Y
10DE: 18 CLC
10DF: 69 80 ADC #$80
10E1: 8D 37 0E STA $0E37
10E4: AD 08 0E LDA $0E08
10E7: 18 CLC
10E8: 69 80 ADC #$80
10EA: CD 37 0E CMP $0E37
10ED: F0 0B BEQ $10FA
10EF: 90 06 BCC $10F7
10F1: CE 08 0E DEC $0E08
10F4: 4C FA 10 JMP $10FA
10F7: EE 08 0E INC $0E08
10FA: B9 01 0F LDA $0F01,Y
10FD: 18 CLC
10FE: 69 80 ADC #$80
1100: 8D 37 0E STA $0E37
1103: AD 0F 0E LDA $0E0F
1106: 18 CLC
1107: 69 80 ADC #$80
1109: CD 37 0E CMP $0E37
110C: F0 09 BEQ $1117 ; if $0E37 == #$80 + $0E0F, RTS
110E: 90 04 BCC $1114 ; if carry is clear INC $0E0F and RTS, else DEC $0E0F and RTS
1110: CE 0F 0E DEC $0E0F
1113: 60 RTS ;This is not the end of the subroutine
1114: EE 0F 0E INC $0E0F
1117: 60 RTS
;end Subroutine 10BA
1118 -
;Subroutine 1118
; This is called very frequently and consumes many clock cycles
; JSR from $1C1C, $1E43
1118: 8D 38 0E STA $0E38
111B: 49 FF EOR #$FF
111D: 8D 39 0E STA $0E39
1120: 8E 1E 0E STX $0E1E
1123: E0 00 CPX #$00
1125: D0 07 BNE $112E
1127: AD 35 0E LDA $0E35
112A: F0 02 BEQ $112E
112C: 10 5D BPL $118B ;look at this later
112E: DE 16 0E DEC $0E16,X
1131: BD 08 0E LDA $0E08,X
1134: 30 14 BMI $114A
1136: F0 21 BEQ $1159
1138: BD 16 0E LDA $0E16,X
113B: A8 TAY
113C: B9 67 0E LDA $0E67,Y
113F: DD 08 0E CMP $0E08,X
1142: B0 15 BCS $1159
1144: 20 5B 12 JSR $125B ; Look at this later too
1147: 4C 59 11 JMP $1159
114A: BD 16 0E LDA $0E16,X
114D: A8 TAY
114E: B9 70 0E LDA $0E70,Y
1151: DD 08 0E CMP $0E08,X
1154: 90 03 BCC $1159
1156: 20 04 12 JSR $1204
1159: BD 0F 0E LDA $0E0F,X
115C: 30 14 BMI $1172
115E: F0 21 BEQ $1181
1160: BD 16 0E LDA $0E16,X
1163: A8 TAY
1164: B9 67 0E LDA $0E67,Y
1167: DD 0F 0E CMP $0E0F,X
116A: B0 15 BCS $1181
116C: 20 C7 11 JSR $11C7 ; Look at this later too
116F: 4C 81 11 JMP $1181
1172: BD 16 0E LDA $0E16,X
1175: A8 TAY
1176: B9 70 0E LDA $0E70,Y
1179: DD 0F 0E CMP $0E0F,X
117C: 90 03 BCC $1181
117E: 20 8C 11 JSR $118C
1181: BD 16 0E LDA $0E16,X
1184: D0 05 BNE $118B
1186: A9 09 LDA #$09
1188: 9D 16 0E STA $0E16,X
118B: 60 RTS
;end Subroutine 1118
1118 - Frick
Possibly trajectories up/down
;SubroutineC-PartA
; JSR from $117E, JMP from $11E6
118C: 8A TXA
118D: 0A ASL A
118E: AA TAX
118F: BD 01 D0 LDA $D001,X ; y Coord MOB 0
1192: C9 3A CMP #$3A
1194: D0 2A BNE $11C0
1196: AE 1E 0E LDX $0E1E
1199: BD 23 0E LDA $0E23,X
119C: 29 F0 AND #$F0
119E: D0 0C BNE $11AC
11A0: 38 SEC
11A1: A9 00 LDA #$00
11A3: FD 0F 0E SBC $0E0F,X
11A6: 9D 0F 0E STA $0E0F,X
11A9: 4C C7 11 JMP $11C7 ;XXX JMP outside SR!!! XXX
; BNE from 119E
11AC: BD 23 0E LDA $0E23,X
11AF: 38 SEC
11B0: E9 10 SBC #$10
11B2: 9D 23 0E STA $0E23,X
11B5: 8A TXA
11B6: 0A ASL A
11B7: AA TAX
11B8: A9 F4 LDA #$F4
11BA: 9D 01 D0 STA $D001,X ; y Coord MOB 0
11BD: 20 D0 13 JSR $13D0
11C0: DE 01 D0 DEC $D001,X ; y Coord MOB 0
11C3: AE 1E 0E LDX $0E1E
11C6: 60 RTS
;end SubroutineC-PartA
;SubroutineC-PartB
; JSR from $116C, JMP from $11A9
11C7: 8A TXA
11C8: 0A ASL A
11C9: AA TAX
11CA: BD 01 D0 LDA $D001,X ; y Coord MOB 0
11CD: C9 F4 CMP #$F4
11CF: D0 2C BNE $11FD
11D1: AE 1E 0E LDX $0E1E
11D4: BD 23 0E LDA $0E23,X
11D7: 29 F0 AND #$F0
11D9: C9 70 CMP #$70
11DB: D0 0C BNE $11E9
11DD: 38 SEC
11DE: A9 00 LDA #$00
11E0: FD 0F 0E SBC $0E0F,X
11E3: 9D 0F 0E STA $0E0F,X
11E6: 4C 8C 11 JMP $118C ;XXX Jump outside SR!!! XXX
11E9: BD 23 0E LDA $0E23,X
11EC: 18 CLC
11ED: 69 10 ADC #$10
11EF: 9D 23 0E STA $0E23,X
11F2: 8A TXA
11F3: 0A ASL A
11F4: AA TAX
11F5: A9 3A LDA #$3A
11F7: 9D 01 D0 STA $D001,X ; y Coord MOB 0
11FA: 20 D0 13 JSR $13D0
11FD: FE 01 D0 INC $D001,X ; y Coord MOB 0
1200: AE 1E 0E LDX $0E1E
1203: 60 RTS
;end SubroutineC-PartB
1118 - Frack
Possibly trajectory in left/right
;SubroutineD-PartA
; JMP from $1295 and JSR from $1156
1204: 8A TXA
1205: 0A ASL A
1206: AA TAX
1207: AD 10 D0 LDA $D010 ; MOB 0-7 X-coordinates (bit #8)
120A: 2D 38 0E AND $0E38
120D: F0 11 BEQ $1220
120F: BD 00 D0 LDA $D000,X ; X Coord MOB 0 (lower 8)
1212: D0 40 BNE $1254
1214: AD 10 D0 LDA $D010 ; MOB 0-7 X-coordinates (bit #8)
1217: 2D 39 0E AND $0E39
121A: 8D 10 D0 STA $D010 ; MOB 0-7 X-coordinates (bit #8)
121D: 4C 54 12 JMP $1254
1220: BD 00 D0 LDA $D000,X ; X Coord MOB 0 (lower 8)
1223: C9 18 CMP #$18
1225: D0 2D BNE $1254
1227: AE 1E 0E LDX $0E1E
122A: BD 23 0E LDA $0E23,X
122D: 29 0F AND #$0F
122F: D0 0C BNE $123D
1231: 38 SEC
1232: A9 00 LDA #$00
1234: FD 08 0E SBC $0E08,X
1237: 9D 08 0E STA $0E08,X
123A: 4C 5B 12 JMP $125B ;Jumps outside to next
123D: AD 10 D0 LDA $D010 ; MOB 0-7 X-coordinates (bit #8)
1240: 0D 38 0E ORA $0E38
1243: 8D 10 D0 STA $D010 ; MOB 0-7 X-coordinates (bit #8)
1246: DE 23 0E DEC $0E23,X
1249: 8A TXA
124A: 0A ASL A
124B: AA TAX
124C: A9 50 LDA #$50
124E: 9D 00 D0 STA $D000,X ; X Coord MOB 0 (lower 8)
1251: 20 D0 13 JSR $13D0
1254: DE 00 D0 DEC $D000,X ; X Coord MOB 0 (lower 8)
1257: AE 1E 0E LDX $0E1E
125A: 60 RTS
;end SubroutineD-PartA
;SubroutineD-PartB
;entry from 1144, 123A (as a JMP, not JSR - this will exit the higher subroutine)
;double x
125B: 8A TXA
125C: 0A ASL A
125D: AA TAX
125E: AD 10 D0 LDA $D010 ; MOB 0-7 X-coordinates (bit #8)
1261: 2D 38 0E AND $0E38
1264: D0 13 BNE $1279
1266: BD 00 D0 LDA $D000,X ; X Coord MOB 0 (lower 8)
1269: C9 FF CMP #$FF
126B: D0 42 BNE $12AF
126D: AD 10 D0 LDA $D010 ; MOB 0-7 X-coordinates (bit #8)
1270: 0D 38 0E ORA $0E38
1273: 8D 10 D0 STA $D010 ; MOB 0-7 X-coordinates (bit #8)
1276: 4C AF 12 JMP $12AF
1279: BD 00 D0 LDA $D000,X ; X Coord MOB 0 (lower 8)
127C: C9 50 CMP #$50
127E: D0 2F BNE $12AF
1280: AE 1E 0E LDX $0E1E
1283: BD 23 0E LDA $0E23,X
1286: 29 0F AND #$0F
1288: C9 07 CMP #$07
128A: D0 0C BNE $1298
128C: 38 SEC
128D: A9 00 LDA #$00
128F: FD 08 0E SBC $0E08,X
1292: 9D 08 0E STA $0E08,X
1295: 4C 04 12 JMP $1204 ;Jumps outside to prior
1298: AD 10 D0 LDA $D010 ; MOB 0-7 X-coordinates (bit #8)
129B: 2D 39 0E AND $0E39
129E: 8D 10 D0 STA $D010 ; MOB 0-7 X-coordinates (bit #8)
12A1: FE 23 0E INC $0E23,X
; double x
12A4: 8A TXA
12A5: 0A ASL A
12A6: AA TAX
12A7: A9 18 LDA #$18
12A9: 9D 00 D0 STA $D000,X ; X Coord MOB 0 (lower 8)
12AC: 20 D0 13 JSR $13D0
12AF: FE 00 D0 INC $D000,X ; X Coord MOB 0 (lower 8)
12B2: AE 1E 0E LDX $0E1E
12B5: 60 RTS
;end SubroutineD-PartA
12B6 - Math
Performs calculations on the X,Y screen coordinates of either the ship, shot or missiles.
;Subroutine 12B6
;A : 9th bit of MOB X Coord
;X : X Coord MOB (lower 8)
;Y : Y Coord MOB (8 bits)
; perform mysterious math on x,y and return the result in x,y. a selects what to do
; if a != 0 x = (((x / 2) or #$80) - #$0C) / 4, y = (y - #$2D) / 8
; else x = ((x / 2) - #$0C) / 4, y = (y - #$2D) / 8
; JSR from $1696, $16B3, $171E, $173B, $1880, $189D
12B6: 8D 37 0E STA $0E37 ; save a to $0E37
; substract $2D from y and divide by 8
12B9: 98 TYA
12BA: 38 SEC
12BB: E9 2D SBC #$2D
12BD: 4A LSR A
12BE: 4A LSR A
12BF: 4A LSR A
12C0: A8 TAY
; divide x by 2
12C1: 8A TXA
12C2: 4A LSR A
12C3: AA TAX
; if $0E37 is zero branch to $12CD
12C4: AD 37 0E LDA $0E37
12C7: F0 04 BEQ $12CD
; or x with $80
12C9: 8A TXA
12CA: 09 80 ORA #$80
12CC: AA TAX
; substract $0C from x and divide the result by 4
; BEQ from $12C7
12CD: 8A TXA
12CE: 38 SEC
12CF: E9 0C SBC #$0C ;substract
12D1: 4A LSR A
12D2: 4A LSR A
12D3: AA TAX
12D4: 60 RTS ; ooof, done! find the result in x,y
;end Subroutine 12B6
12D5 -
;Subroutine 12D5
; calculate $FD = (y * #$28) + x, also set $FE = #$04
; JSR from $1326 only
; set $FD to zero
12D5: A9 00 LDA #$00
12D7: 85 FD STA $FD
; set $FE to #$04
12D9: A9 04 LDA #$04
12DB: 85 FE STA $FE
; add y times #$28 to $FD, in the form of a loop
; BEQ to $12F1 if y is $00
12DD: C0 00 CPY #$00 ; is y zero
12DF: F0 10 BEQ $12F1
; add #$28 to $FD,
12E1: 18 CLC
12E2: A9 28 LDA #$28
12E4: 65 FD ADC $FD
12E6: 85 FD STA $FD
; do nothing - add #$00 to $FE
12E8: A9 00 LDA #$00
12EA: 65 FE ADC $FE
12EC: 85 FE STA $FE
; check if loop is done
12EE: 88 DEY ; decrement y
12EF: D0 F0 BNE $12E1 ; goto $12E1 unless y is zero
; add x to $FD
12F1: 18 CLC
12F2: 8A TXA
12F3: 65 FD ADC $FD
12F5: 85 FD STA $FD
; add 0 to $FE
12F7: A9 00 LDA #$00
12F9: 65 FE ADC $FE
12FB: 85 FE STA $FE
12FD: 60 RTS
;end Subroutine 12D5
-
;Subroutine 12FE
; increase $00FE by #$D4
; JSR from 1341 only
12FE: A5 FE LDA $FE
1300: 18 CLC
1301: 69 D4 ADC #$D4
1303: 85 FE STA $FE
1305: 60 RTS
;end Subroutine 12FE
-
; JSR from $1471, $1D0E
; Subroutine 1306
; Called every time a screen changes (start screen or moving to neighbor screen)
1306: 20 AF 13 JSR $13AF ; calculate $0E37, $0E63, $0E64, $0E65, $0E66 as a function of $0E23
1309: 20 50 13 JSR $1350 ; Subroutine BlankScreen()
; $0E1D = #$23
130C: A9 23 LDA #$23
130E: 8D 1D 0E STA $0E1D
1311: 20 8C 13 JSR $138C ; $0E37 = $0E66 + $0E63, $0E66 = $0E65, $0E65 = $0E64, $0E64 = $0E63, $0E63 = $0E37
1314: 29 1F AND #$1F
1316: C9 18 CMP #$18
1318: B0 F7 BCS $1311
131A: A8 TAY
131B: C8 INY
131C: 20 8C 13 JSR $138C ; $0E37 = $0E66 + $0E63, $0E66 = $0E65, $0E65 = $0E64, $0E64 = $0E63, $0E63 = $0E37
131F: 29 3F AND #$3F
1321: C9 28 CMP #$28
1323: B0 F7 BCS $131C
1325: AA TAX
1326: 20 D5 12 JSR $12D5 ; calculate $FD = (y * #$28) + x, also set $FE = #$04
1329: 20 8C 13 JSR $138C ; $0E37 = $0E66 + $0E63, $0E66 = $0E65, $0E65 = $0E64, $0E64 = $0E63, $0E63 = $0E37
132C: AA TAX
132D: AD 1D 0E LDA $0E1D
1330: C9 01 CMP #$01
1332: F0 04 BEQ $1338
1334: 8A TXA
1335: 29 01 AND #$01
1337: AA TAX
1338: 8A TXA
1339: 29 03 AND #$03
133B: 09 80 ORA #$80
133D: A0 00 LDY #$00
133F: 91 FD STA ($FD),Y
1341: 20 FE 12 JSR $12FE ; increase $FE by #$D4
1344: A0 00 LDY #$00
1346: A9 01 LDA #$01
1348: 91 FD STA ($FD),Y
134A: CE 1D 0E DEC $0E1D
134D: D0 C2 BNE $1311
134F: 60 RTS
; end Subroutine 1306
1350 - Blankscreen
; Subroutine BlankScreen()
; write ' ' to the memory from $0428 to $07E7
; Enters from 0x1098, 0x1309
1350: A0 00 LDY #$00
1352: A9 20 LDA #$20 ; ' ' space for starfield background
1354: 99 28 04 STA $0428,Y
1357: 99 28 05 STA $0528,Y
135A: 99 28 06 STA $0628,Y
135D: 99 E8 06 STA $06E8,Y
1360: 88 DEY
1361: D0 F1 BNE $1354
1363: 60 RTS
;end Subroutine BlankScreen()
-
;Subroutine 1364
; enters from 1423 only
; $07ff = #$34
1364: A9 34 LDA #$34
1366: 8D FF 07 STA $07FF
; $D02E = #$0E
1369: A9 0E LDA #$0E
136B: 8D 2E D0 STA $D02E ; Sprite #7 color (only bits #0-#3)
; $0E2D = $D00E + #$1C
136E: AD 0E D0 LDA $D00E ; X Coord MOB 7 (lower 8)
1371: 18 CLC
1372: 69 1C ADC #$1C
1374: 8D 2D 0E STA $0E2D
; $0E2E = $D00F + #$0E
1377: AD 0F D0 LDA $D00F ; Sprite #7 Y-coordinate
137A: 18 CLC
137B: 69 0E ADC #$0E
137D: 8D 2E 0E STA $0E2E
1380: 60 RTS
;end Subroutine 1364
-
;Subroutine 1381
; enters from 143B only
; $07FF = #$33
1381: A9 33 LDA #$33
1383: 8D FF 07 STA $07FF
; $D02E = #$02
1386: A9 02 LDA #$02
1388: 8D 2E D0 STA $D02E ; Sprite #7 color (only bits #0-#3)
138B: 60 RTS
;end Subroutine 1381
-
;Subroutine 138C
; $0E37 = $0E66 + $0E63, $0E66 = $0E65, $0E65 = $0E64, $0E64 = $0E63, $0E63 = $0E37
; JSR from $13C7, $1311, $131C, $1329
; $0E37 = $0E66 + $0E63
; V37 = V63+V66
; V66 = V65
; V65 = V64
; V64 = V63
; V63 = V37
138C: 18 CLC
138D: AD 66 0E LDA $0E66
1390: 6D 63 0E ADC $0E63
1393: 8D 37 0E STA $0E37
; $0E66 = $0E65
1396: AD 65 0E LDA $0E65
1399: 8D 66 0E STA $0E66
; $0E65 = $0E64
139C: AD 64 0E LDA $0E64
139F: 8D 65 0E STA $0E65
; $0E64 = $0E63
13A2: AD 63 0E LDA $0E63
13A5: 8D 64 0E STA $0E64
; $0E63 = $0E37
13A8: AD 37 0E LDA $0E37
13AB: 8D 63 0E STA $0E63
13AE: 60 RTS
;end Subroutine 138C
-
;Subroutine 13AF
; calculate $0E37, $0E63, $0E64, $0E65, $0E66 as a function of $0E23
; JSR from 1306 only
; $0E63 = $0E23
13AF: AE 23 0E LDX $0E23
13B2: 8E 63 0E STX $0E63
; $0E64 = $0E23 + 1
13B5: E8 INX
13B6: 8E 64 0E STX $0E64
; $0E65 = $0E23 + 2
13B9: E8 INX
13BA: 8E 65 0E STX $0E65
; $0E66 = $0E23 + 3
13BD: E8 INX
13BE: 8E 66 0E STX $0E66
; initialize loop counter $0E1D = $0E23
13C1: AD 23 0E LDA $0E23
13C4: 8D 1D 0E STA $0E1D
; loop $0E23 times
13C7: 20 8C 13 JSR $138C ; $0E37 = $0E66 + $0E63, $0E66 = $0E65, $0E65 = $0E64, $0E64 = $0E63, $0E63 = $0E37
13CA: CE 1D 0E DEC $0E1D
13CD: D0 F8 BNE $13C7
13CF: 60 RTS
;end Subroutine 13AF
-
;Subroutine 13D0
;Entry from 11BD, 11FA, 1251, 12AC, 1DE0, 1E17,
13D0: E0 00 CPX #$00
13D2: F0 0C BEQ $13E0
13D4: AD 15 D0 LDA $D015 ; Sprite enable register
13D7: 2D 39 0E AND $0E39
13DA: 8D 15 D0 STA $D015 ; Sprite enable register
13DD: 4C 74 14 JMP $1474
; entry from $13D2
13E0: 20 1D 16 JSR $161D
13E3: 20 60 1B JSR $1B60 ; sector
13E6: A9 00 LDA #$00
13E8: 8D 50 0E STA $0E50
13EB: 8D 2D 0E STA $0E2D
13EE: 8D 2E 0E STA $0E2E
13F1: AD 15 D0 LDA $D015 ; Sprite enable register
13F4: 29 01 AND #$01
13F6: 8D 15 D0 STA $D015 ; Sprite enable register
13F9: A9 09 LDA #$09
13FB: 8D 2E D0 STA $D02E ; Sprite #7 color (only bits #0-#3)
13FE: AC 23 0E LDY $0E23
1401: B9 00 90 LDA $9000,Y
1404: 38 SEC
1405: E9 26 SBC #$26
1407: 8D 0E D0 STA $D00E ; X Coord MOB 7 (lower 8)
140A: B9 08 90 LDA $9008,Y
140D: 38 SEC
140E: E9 40 SBC #$40
1410: 8D 0F D0 STA $D00F ; Sprite #7 Y-coordinate
1413: B9 00 90 LDA $9000,Y
1416: 29 01 AND #$01
1418: 18 CLC
1419: 69 35 ADC #$35
141B: 8D FF 07 STA $07FF
141E: AD 23 0E LDA $0E23
1421: D0 06 BNE $1429
1423: 20 64 13 JSR $1364
1426: 4C 69 14 JMP $1469
1429: AD 23 0E LDA $0E23
142C: CD 2A 0E CMP $0E2A ; boss location
142F: D0 10 BNE $1441
1431: AD 2B 0E LDA $0E2B
1434: F0 0B BEQ $1441
1436: AD 2C 0E LDA $0E2C
1439: D0 06 BNE $1441
143B: 20 81 13 JSR $1381
143E: 4C 57 14 JMP $1457
1441: AC 23 0E LDY $0E23
1444: B9 80 90 LDA $9080,Y
1447: F0 28 BEQ $1471
1449: 29 20 AND #$20
144B: D0 0A BNE $1457
144D: A9 37 LDA #$37
144F: 8D FF 07 STA $07FF
1452: A9 02 LDA #$02
1454: 8D 2E D0 STA $D02E ; Sprite #7 color (only bits #0-#3)
1457: AD 0E D0 LDA $D00E ; X Coord MOB 7 (lower 8)
145A: 18 CLC
145B: 69 12 ADC #$12
145D: 8D 2D 0E STA $0E2D
1460: AD 0F D0 LDA $D00F ; Sprite #7 Y-coordinate
1463: 18 CLC
1464: 69 12 ADC #$12
1466: 8D 2E 0E STA $0E2E
1469: AD 15 D0 LDA $D015 ; Sprite enable register
146C: 09 80 ORA #$80
146E: 8D 15 D0 STA $D015 ; Sprite enable register
1471: 20 06 13 JSR $1306 ; calculate $0E37, $0E63, $0E64, $0E65, $0E66 as a function of $0E23
1474: AD 1E 0E LDA $0E1E
1477: 0A ASL A
1478: AA TAX
1479: 60 RTS
;end Subroutine 13D0
147A - GenerateMap
;begin GenerateMap()
;Orientation of screen objects per sector
; X-coord = 0x9000 + OR(0x9000, 0x0+(0x10*(SX-1))) + SY-1
; Y-coord = 0x9000 + OR(0x9000, 0x8+(0x10*(SX-1))) + SY-1
; expected range is 0x80-0xFF
147A: A0 00 LDY #$00
147C: AD 1B D4 LDA $D41B ; fetch a random number
147F: CD 37 0E CMP $0E37 ; that is different than the prior
1482: F0 F8 BEQ $147C ; else try again
1484: 8D 37 0E STA $0E37 ; then save new random number value
1487: 09 80 ORA #$80 ; set MSB (XY expanded sprites are far offset from graphic center)
1489: 99 00 90 STA $9000,Y
148C: C8 INY ; increment y
148D: C0 80 CPY #$80 ; loop #$80 times
148F: D0 EB BNE $147C
; place boss location
; fetch a random number with the first and fith bit not set and place it in $0E2A
1491: AD 1B D4 LDA $D41B ; fetch random number
1494: 29 77 AND #$77 ; left, right nybble are the x and y
1496: F0 F9 BEQ $1491 ; but, 0,0 is not allowed, try again
1498: 8D 2A 0E STA $0E2A ; store the boss location here
; set 128 bytes to zero starting at $9080 - empty the asteroid map
149B: A0 00 LDY #$00
149D: A9 00 LDA #$00
149F: 99 80 90 STA $9080,Y
14A2: C8 INY
14A3: C0 80 CPY #$80
14A5: D0 F6 BNE $149D
; place 34 asteroids on map, first 4 have generators
14A7: A0 00 LDY #$00
; loop on y
; place random number in x and $0E37, not equal $0E37, $0E2A, first and fith bit not set
14A9: AD 1B D4 LDA $D41B ; fetch random number
14AC: CD 37 0E CMP $0E37 ; and check if the same as the prior one
14AF: F0 F8 BEQ $14A9 ; and if so try again
14B1: 8D 37 0E STA $0E37 ; the store the new number here
14B4: 29 77 AND #$77 ; make this number be nybbles of x and y
14B6: F0 F1 BEQ $14A9 ; but if zero, then try again
14B8: CD 2A 0E CMP $0E2A ; if it's also the boss location
14BB: F0 EC BEQ $14A9 ; then try again
14BD: AA TAX ; transfer random number to x
; fetch a new random position if this position is already taken by an astereoid
14BE: BD 80 90 LDA $9080,X ; If this cell is occupied
14C1: D0 E6 BNE $14A9 ; then try again
; place #$3F at this position
14C3: A9 3F LDA #$3F ; assign as an asteroid
14C5: 9D 80 90 STA $9080,X ; into this memory location
; if y < #$04 place astereoid with generator
14C8: C0 04 CPY #$04 ; but if it's not one of the first 4
14CA: B0 05 BCS $14D1 ; this 3F is good enough
14CC: A9 BF LDA #$BF ; otherwise it can be upgraded to a generator asteroid
14CE: 9D 80 90 STA $9080,X ; stored here
14D1: C8 INY ; increment y
14D2: C0 21 CPY #$21 ; is y == #$21
14D4: D0 D3 BNE $14A9 ; and if not, do this again
14D6: 60 RTS
; end GenerateMap()
14D7 -
;Subroutine 14D7
14D7: AD 2D 0E LDA $0E2D
14DA: D0 08 BNE $14E4
14DC: AD 2E 0E LDA $0E2E
14DF: D0 03 BNE $14E4
14E1: 4C 35 15 JMP $1535
14E4: CE 04 0E DEC $0E04 ; Only modification of 0e04
14E7: D0 4C BNE $1535 ; Only known test of 0e04
14E9: A9 28 LDA #$28
14EB: 8D 04 0E STA $0E04 ; Only assignment of 0e04
14EE: AD 10 D0 LDA $D010 ; MOB 0-7 X-coordinates (bit #8)
14F1: 29 01 AND #$01
14F3: D0 17 BNE $150C
14F5: AD 00 D0 LDA $D000 ; X Coord MOB 0 (lower 8)
14F8: CD 2D 0E CMP $0E2D
14FB: F0 19 BEQ $1516
14FD: B0 0D BCS $150C
14FF: AD 08 0E LDA $0E08
1502: C9 09 CMP #$09
1504: F0 10 BEQ $1516
1506: EE 08 0E INC $0E08
1509: 4C 16 15 JMP $1516
150C: AD 08 0E LDA $0E08
150F: C9 F7 CMP #$F7
1511: F0 03 BEQ $1516
1513: CE 08 0E DEC $0E08
1516: AD 01 D0 LDA $D001 ; y Coord MOB 0
1519: CD 2E 0E CMP $0E2E
151C: F0 17 BEQ $1535
151E: B0 0B BCS $152B
1520: AD 0F 0E LDA $0E0F
1523: C9 09 CMP #$09
1525: F0 0E BEQ $1535
1527: EE 0F 0E INC $0E0F
152A: 60 RTS ;Not the end of subroutine
152B: AD 0F 0E LDA $0E0F
152E: C9 F7 CMP #$F7
1530: F0 03 BEQ $1535
1532: CE 0F 0E DEC $0E0F
1535: 60 RTS
;end Subroutine 14D7
-
;Subroutine 1536
; fire
1536: AD 07 0E LDA $0E07
1539: C9 FF CMP #$FF
153B: D0 41 BNE $157E
153D: AD 5F 0E LDA $0E5F
1540: D0 05 BNE $1547
1542: A9 40 LDA #$40
1544: 8D 60 0E STA $0E60
1547: 20 A0 1B JSR $1BA0
154A: AD 06 0E LDA $0E06
154D: 8D 07 0E STA $0E07
1550: AD 00 D0 LDA $D000 ; X Coord MOB 0 (lower 8)
1553: 8D 02 D0 STA $D002 ; X Coord MOB 1 (lower 8)
1556: AD 01 D0 LDA $D001 ; y Coord MOB 0
1559: 8D 03 D0 STA $D003 ; y Coord MOB 1
155C: AD 10 D0 LDA $D010 ; MOB 0-7 X-coordinates (bit #8)
155F: 29 01 AND #$01
1561: F0 0B BEQ $156E
1563: AD 10 D0 LDA $D010 ; MOB 0-7 X-coordinates (bit #8)
1566: 09 02 ORA #$02
1568: 8D 10 D0 STA $D010 ; MOB 0-7 X-coordinates (bit #8)
156B: 4C 76 15 JMP $1576
156E: AD 10 D0 LDA $D010 ; MOB 0-7 X-coordinates (bit #8)
1571: 29 FD AND #$FD
1573: 8D 10 D0 STA $D010 ; MOB 0-7 X-coordinates (bit #8)
1576: AD 15 D0 LDA $D015 ; Sprite enable register
1579: 09 02 ORA #$02
157B: 8D 15 D0 STA $D015 ; Sprite enable register
157E: 60 RTS
;End Subroutine 1536
-
;Subroutine 157F
157F: AD 07 0E LDA $0E07
1582: 0A ASL A
1583: 0A ASL A
1584: A8 TAY
1585: A2 00 LDX #$00
1587: B9 40 0F LDA $0F40,Y
158A: F0 28 BEQ $15B4
158C: C9 01 CMP #$01
158E: D0 06 BNE $1596
1590: 20 EB 15 JSR $15EB
1593: 4C B4 15 JMP $15B4
1596: C9 02 CMP #$02
1598: D0 06 BNE $15A0
159A: 20 DD 15 JSR $15DD
159D: 4C B4 15 JMP $15B4
15A0: C9 03 CMP #$03
15A2: D0 06 BNE $15AA
15A4: 20 BB 15 JSR $15BB
15A7: 4C B4 15 JMP $15B4
15AA: C9 04 CMP #$04
15AC: D0 06 BNE $15B4
15AE: 20 0F 16 JSR $160F
15B1: 4C B4 15 JMP $15B4
15B4: C8 INY
15B5: E8 INX
15B6: E0 04 CPX #$04
15B8: D0 CD BNE $1587
15BA: 60 RTS
;End Subroutine 157F
-
;Subroutine 15BB
15BB: AD 10 D0 LDA $D010 ; MOB 0-7 X-coordinates (bit #8)
15BE: 29 02 AND #$02
15C0: D0 0A BNE $15CC
15C2: AD 02 D0 LDA $D002 ; X Coord MOB 1 (lower 8)
15C5: C9 18 CMP #$18
15C7: D0 03 BNE $15CC
15C9: 20 1D 16 JSR $161D
15CC: AD 02 D0 LDA $D002 ; X Coord MOB 1 (lower 8)
15CF: D0 08 BNE $15D9
15D1: AD 10 D0 LDA $D010 ; MOB 0-7 X-coordinates (bit #8)
15D4: 29 FD AND #$FD
15D6: 8D 10 D0 STA $D010 ; MOB 0-7 X-coordinates (bit #8)
15D9: CE 02 D0 DEC $D002 ; X Coord MOB 1 (lower 8)
15DC: 60 RTS
;End Subroutine 15BB
-
;Subroutine 15DD
15DD: AD 03 D0 LDA $D003 ; y Coord MOB 1
15E0: C9 F4 CMP #$F4
15E2: D0 03 BNE $15E7
15E4: 20 1D 16 JSR $161D
15E7: EE 03 D0 INC $D003 ; y Coord MOB 1
15EA: 60 RTS
;End Subroutine 15DD
-
;Subroutine 15EB
15EB: AD 10 D0 LDA $D010 ; MOB 0-7 X-coordinates (bit #8)
15EE: 29 02 AND #$02
15F0: F0 0A BEQ $15FC
15F2: AD 02 D0 LDA $D002 ; X Coord MOB 1 (lower 8)
15F5: C9 50 CMP #$50
15F7: D0 03 BNE $15FC
15F9: 20 1D 16 JSR $161D
15FC: AD 02 D0 LDA $D002 ; X Coord MOB 1 (lower 8)
15FF: C9 FF CMP #$FF
1601: D0 08 BNE $160B
1603: AD 10 D0 LDA $D010 ; MOB 0-7 X-coordinates (bit #8)
1606: 09 02 ORA #$02
1608: 8D 10 D0 STA $D010 ; MOB 0-7 X-coordinates (bit #8)
160B: EE 02 D0 INC $D002 ; X Coord MOB 1 (lower 8)
160E: 60 RTS
;end Subroutine 15EB
-
;Entry from 15AE
160F: AD 03 D0 LDA $D003 ; y Coord MOB 1
1612: C9 38 CMP #$38
1614: D0 03 BNE $1619
1616: 20 1D 16 JSR $161D
1619: CE 03 D0 DEC $D003 ; y Coord MOB 1
161C: 60 RTS
-
;Subroutine 161D
;Entry from 13E0, 15C9, 15E4, 15F9, 1616, 1761, 1777, 19D1
161D: A9 FF LDA #$FF
161F: 8D 07 0E STA $0E07
1622: AD 15 D0 LDA $D015 ; Sprite enable register
1625: 29 FD AND #$FD
1627: 8D 15 D0 STA $D015 ; Sprite enable register
162A: 60 RTS
;end Subroutine 161D
-
;Subroutine 162B
;Entry from 1C22
162B: AE 1E 0E LDX $0E1E
162E: BD 57 0E LDA $0E57,X
1631: F0 12 BEQ $1645
1633: BD 23 0E LDA $0E23,X
1636: CD 23 0E CMP $0E23
1639: D0 0A BNE $1645
163B: AD 15 D0 LDA $D015 ; Sprite enable register
163E: 0D 38 0E ORA $0E38
1641: 8D 15 D0 STA $D015 ; Sprite enable register
1644: 60 RTS ; Inside the subroutine
1645: AD 15 D0 LDA $D015 ; Sprite enable register
1648: 2D 39 0E AND $0E39
164B: 8D 15 D0 STA $D015 ; Sprite enable register
164E: 60 RTS
;End Subroutine 162B
-
;Subroutine 164F
;Entry from 1C1F
164F: DE 3A 0E DEC $0E3A,X
1652: F0 03 BEQ $1657
1654: 4C FB 16 JMP $16FB
1657: A9 0A LDA #$0A
1659: 9D 3A 0E STA $0E3A,X
165C: BD 23 0E LDA $0E23,X
165F: CD 23 0E CMP $0E23
1662: F0 27 BEQ $168B
1664: AD 23 0E LDA $0E23
1667: 29 07 AND #$07
1669: 8D 1F 0E STA $0E1F
166C: AD 23 0E LDA $0E23
166F: 29 70 AND #$70
1671: 4A LSR A
1672: 4A LSR A
1673: 4A LSR A
1674: 4A LSR A
1675: 8D 20 0E STA $0E20
1678: BD 23 0E LDA $0E23,X
167B: 29 70 AND #$70
167D: 4A LSR A
167E: 4A LSR A
167F: 4A LSR A
1680: 4A LSR A
1681: A8 TAY
1682: BD 23 0E LDA $0E23,X
1685: 29 07 AND #$07
1687: AA TAX
1688: 4C B6 16 JMP $16B6
168B: AD 10 D0 LDA $D010 ; MOB 0-7 X-coordinates (bit #8)
168E: 29 01 AND #$01
1690: AE 00 D0 LDX $D000 ; X Coord MOB 0 (lower 8)
1693: AC 01 D0 LDY $D001 ; y Coord MOB 0
1696: 20 B6 12 JSR $12B6
1699: 8E 1F 0E STX $0E1F
169C: 8C 20 0E STY $0E20
169F: AE 1E 0E LDX $0E1E
16A2: 8A TXA
16A3: 0A ASL A
16A4: AA TAX
16A5: BD 01 D0 LDA $D001,X ; y Coord MOB 0
16A8: A8 TAY
16A9: BD 00 D0 LDA $D000,X ; X Coord MOB 0 (lower 8)
16AC: AA TAX
16AD: AD 10 D0 LDA $D010 ; MOB 0-7 X-coordinates (bit #8)
16B0: 2D 38 0E AND $0E38
16B3: 20 B6 12 JSR $12B6
16B6: EC 1F 0E CPX $0E1F
16B9: F0 1F BEQ $16DA
16BB: B0 10 BCS $16CD
16BD: AE 1E 0E LDX $0E1E
16C0: BD 08 0E LDA $0E08,X
16C3: C9 09 CMP #$09
16C5: F0 13 BEQ $16DA
16C7: FE 08 0E INC $0E08,X
16CA: 4C DA 16 JMP $16DA
16CD: AE 1E 0E LDX $0E1E
16D0: BD 08 0E LDA $0E08,X
16D3: C9 F7 CMP #$F7
16D5: F0 03 BEQ $16DA
16D7: DE 08 0E DEC $0E08,X
16DA: AE 1E 0E LDX $0E1E
16DD: CC 20 0E CPY $0E20
16E0: F0 19 BEQ $16FB
16E2: B0 0D BCS $16F1
16E4: BD 0F 0E LDA $0E0F,X
16E7: C9 09 CMP #$09
16E9: F0 10 BEQ $16FB
16EB: FE 0F 0E INC $0E0F,X
16EE: 4C FB 16 JMP $16FB
16F1: BD 0F 0E LDA $0E0F,X
16F4: C9 F7 CMP #$F7
16F6: F0 03 BEQ $16FB
16F8: DE 0F 0E DEC $0E0F,X
16FB: 60 RTS
;Subroutine 164F
-
;Subroutine 16FC
;Entry from 1C25
16FC: BD 49 0E LDA $0E49,X
16FF: D0 7C BNE $177D
1701: BD 57 0E LDA $0E57,X
1704: F0 77 BEQ $177D
1706: AD 07 0E LDA $0E07
1709: 30 72 BMI $177D
170B: BD 23 0E LDA $0E23,X
170E: CD 23 0E CMP $0E23
1711: D0 6A BNE $177D
1713: AD 10 D0 LDA $D010 ; MOB 0-7 X-coordinates (bit #8)
1716: 29 02 AND #$02
1718: AE 02 D0 LDX $D002 ; X Coord MOB 1 (lower 8)
171B: AC 03 D0 LDY $D003 ; y Coord MOB 1
171E: 20 B6 12 JSR $12B6
1721: 8E 1F 0E STX $0E1F
1724: 8C 20 0E STY $0E20
1727: AE 1E 0E LDX $0E1E
172A: 8A TXA
172B: 0A ASL A
172C: AA TAX
172D: BD 01 D0 LDA $D001,X ; y Coord MOB 0
1730: A8 TAY
1731: BD 00 D0 LDA $D000,X ; X Coord MOB 0 (lower 8)
1734: AA TAX
1735: AD 10 D0 LDA $D010 ; MOB 0-7 X-coordinates (bit #8)
1738: 2D 38 0E AND $0E38
173B: 20 B6 12 JSR $12B6
173E: EC 1F 0E CPX $0E1F
1741: D0 3A BNE $177D
1743: CC 20 0E CPY $0E20
1746: D0 35 BNE $177D
1748: AE 1E 0E LDX $0E1E
174B: BD 57 0E LDA $0E57,X
174E: C9 01 CMP #$01
1750: F0 18 BEQ $176A
1752: A9 06 LDA #$06
1754: 9D 41 0E STA $0E41,X
1757: A9 0A LDA #$0A
1759: 9D 51 0E STA $0E51,X
175C: A9 11 LDA #$11
175E: 20 0A 1C JSR $1C0A
1761: 20 1D 16 JSR $161D
1764: AE 1E 0E LDX $0E1E
1767: 4C 7A 17 JMP $177A
176A: A9 40 LDA #$40
176C: 9D 49 0E STA $0E49,X
176F: 8D 61 0E STA $0E61
1772: A9 5F LDA #$5F
1774: 20 0A 1C JSR $1C0A
1777: 4C 1D 16 JMP $161D
177A: DE 57 0E DEC $0E57,X
177D: 60 RTS
;End Subroutine 16FC
177E - FlashYellowDamage
177E: AE 1E 0E LDX $0E1E
1781: BD 41 0E LDA $0E41,X
;X contains the MOB number to flash
;A contains the number of flashes to do
;If A=0 then exit without flashing
1784: F0 11 BEQ $1797
1786: DE 41 0E DEC $0E41,X
;if $0e41!=0, then goto $1792
1789: D0 07 BNE $1792 ;TurnYellowMOBX()
; else, restore default color
178B: BD 51 0E LDA $0E51,X
178E: 9D 27 D0 STA $D027,X ; MOB X Color
1791: 60 RTS
;TurnYellowMOBX()
1792: A9 07 LDA #$07 ; Select color 7
1794: 9D 27 D0 STA $D027,X ; MOB X Color
1797: 60 RTS
;End Subroutine 177E
-
;Subroutine 1798
1798: AD 2B 0E LDA $0E2B
179B: F0 60 BEQ $17FD
179D: AD 2C 0E LDA $0E2C
17A0: F0 07 BEQ $17A9
17A2: AD 3A 0E LDA $0E3A
17A5: C9 01 CMP #$01
17A7: D0 54 BNE $17FD
17A9: AD 1B D4 LDA $D41B ; fetch random number
17AC: D0 4F BNE $17FD
17AE: A2 01 LDX #$01
17B0: E8 INX
17B1: E0 07 CPX #$07
17B3: F0 48 BEQ $17FD
17B5: BD 57 0E LDA $0E57,X
17B8: D0 F6 BNE $17B0
17BA: A9 04 LDA #$04
17BC: 9D 57 0E STA $0E57,X
17BF: AD 2A 0E LDA $0E2A ; boss location
17C2: 9D 23 0E STA $0E23,X
17C5: A9 00 LDA #$00
17C7: 9D 08 0E STA $0E08,X
17CA: 9D 0F 0E STA $0E0F,X
17CD: A9 0A LDA #$0A
17CF: 9D 27 D0 STA $D027,X ; MOB 0 Color
17D2: BD 77 0E LDA $0E77,X
17D5: 2D 10 D0 AND $D010 ; MOB 0-7 X-coordinates (bit #8)
17D8: 8D 10 D0 STA $D010 ; MOB 0-7 X-coordinates (bit #8)
17DB: A9 80 LDA #$80
17DD: 8D 60 0E STA $0E60
17E0: 8A TXA
17E1: 0A ASL A
17E2: AA TAX
17E3: A9 01 LDA #$01
17E5: 8D 5F 0E STA $0E5F
17E8: AC 2A 0E LDY $0E2A ; boss location
17EB: B9 00 90 LDA $9000,Y
17EE: 38 SEC
17EF: E9 15 SBC #$15
17F1: 9D 00 D0 STA $D000,X ; X Coord MOB 0 (lower 8)
17F4: B9 08 90 LDA $9008,Y
17F7: 38 SEC
17F8: E9 2C SBC #$2C
17FA: 9D 01 D0 STA $D001,X ; y Coord MOB 0
17FD: 60 RTS
;End Subroutine 1798
-
;Subroutine 17FE
17FE: AE 1E 0E LDX $0E1E
1801: BD 49 0E LDA $0E49,X
1804: F0 54 BEQ $185A
1806: DE 49 0E DEC $0E49,X
1809: D0 4C BNE $1857
180B: E0 00 CPX #$00
180D: F0 0C BEQ $181B
180F: E0 07 CPX #$07
1811: F0 21 BEQ $1834
1813: A9 00 LDA #$00
1815: 9D 57 0E STA $0E57,X
1818: 4C 57 18 JMP $1857
181B: AD 35 0E LDA $0E35
181E: F0 0E BEQ $182E
1820: A9 7F LDA #$7F
1822: 8D 35 0E STA $0E35
1825: AD 15 D0 LDA $D015 ; Sprite enable register
1828: 29 FE AND #$FE
182A: 8D 15 D0 STA $D015 ; Sprite enable register
182D: 60 RTS
182E: A9 01 LDA #$01
1830: 8D 27 D0 STA $D027 ; MOB 0 Color
1833: 60 RTS
1834: AC 23 0E LDY $0E23
1837: B9 80 90 LDA $9080,Y
183A: F0 0B BEQ $1847
183C: A9 37 LDA #$37
183E: 8D FF 07 STA $07FF
1841: A9 02 LDA #$02
1843: 8D 2E D0 STA $D02E ; Sprite #7 color (only bits #0-#3)
1846: 60 RTS
1847: AD 15 D0 LDA $D015 ; Sprite enable register
184A: 29 7F AND #$7F
184C: 8D 15 D0 STA $D015 ; Sprite enable register
184F: A9 00 LDA #$00
1851: 8D 2D 0E STA $0E2D
1854: 8D 2E 0E STA $0E2E
1857: FE 27 D0 INC $D027,X ; MOB 0 Color
185A: 60 RTS
;End Subroutine 17FE
-
;Subroutine 185B
185B: AD 35 0E LDA $0E35
185E: D0 67 BNE $18C7
1860: AE 1E 0E LDX $0E1E
1863: BD 49 0E LDA $0E49,X
1866: D0 5F BNE $18C7
1868: BD 57 0E LDA $0E57,X
186B: F0 5A BEQ $18C7
186D: BD 23 0E LDA $0E23,X
1870: CD 23 0E CMP $0E23
1873: D0 52 BNE $18C7
1875: AD 10 D0 LDA $D010 ; MOB 0-7 X-coordinates (bit #8)
1878: 29 01 AND #$01
187A: AE 00 D0 LDX $D000 ; X Coord MOB 0 (lower 8)
187D: AC 01 D0 LDY $D001 ; y Coord MOB 0
1880: 20 B6 12 JSR $12B6
1883: 8E 1F 0E STX $0E1F
1886: 8C 20 0E STY $0E20
1889: AE 1E 0E LDX $0E1E
188C: 8A TXA
188D: 0A ASL A
188E: AA TAX
188F: BD 01 D0 LDA $D001,X ; y Coord MOB 0
1892: A8 TAY
1893: BD 00 D0 LDA $D000,X ; X Coord MOB 0 (lower 8)
1896: AA TAX
1897: AD 10 D0 LDA $D010 ; MOB 0-7 X-coordinates (bit #8)
189A: 2D 38 0E AND $0E38
189D: 20 B6 12 JSR $12B6
18A0: EC 1F 0E CPX $0E1F
18A3: D0 22 BNE $18C7
18A5: CC 20 0E CPY $0E20
18A8: D0 1D BNE $18C7
18AA: AE 1E 0E LDX $0E1E
18AD: A9 01 LDA #$01
18AF: 9D 57 0E STA $0E57,X
18B2: A9 40 LDA #$40
18B4: 9D 49 0E STA $0E49,X
18B7: 8D 61 0E STA $0E61
18BA: 8D 49 0E STA $0E49
18BD: A9 32 LDA #$32 ;Missle hit -500, verified
18BF: 20 B9 1B JSR $1BB9 ;SubractEnergyByA()
18C2: A9 01 LDA #$01
18C4: 8D 51 0E STA $0E51
18C7: 60 RTS
;End Subroutine 185B
18C8 - Reduce E35
;Subroutine 18C8
18C8: AD 35 0E LDA $0E35
18CB: F0 05 BEQ $18D2
18CD: 30 03 BMI $18D2
18CF: CE 35 0E DEC $0E35
18D2: 60 RTS
;Subroutine 18C8
-
;Subroutine 18D3
18D3: A9 0A LDA #$0A
18D5: 8D 21 0E STA $0E21
18D8: A9 06 LDA #$06
18DA: 8D 22 0E STA $0E22
18DD: AC 23 0E LDY $0E23
18E0: B9 80 90 LDA $9080,Y
18E3: D0 0F BNE $18F4
18E5: AD 23 0E LDA $0E23
18E8: F0 0A BEQ $18F4
18EA: CD 2A 0E CMP $0E2A ; boss location
18ED: D0 5D BNE $194C
18EF: AD 2B 0E LDA $0E2B
18F2: F0 58 BEQ $194C
18F4: AD FF 07 LDA $07FF
18F7: C9 37 CMP #$37
18F9: F0 11 BEQ $190C
18FB: AD FF 07 LDA $07FF
18FE: C9 34 CMP #$34
1900: F0 0A BEQ $190C
1902: A9 12 LDA #$12
1904: 8D 21 0E STA $0E21
1907: A9 10 LDA #$10
1909: 8D 22 0E STA $0E22
190C: AD 1E 0E LDA $0E1E
190F: 0A ASL A
1910: AA TAX
1911: AD 10 D0 LDA $D010 ; MOB 0-7 X-coordinates (bit #8)
1914: 2D 38 0E AND $0E38
1917: D0 33 BNE $194C
1919: AD 2D 0E LDA $0E2D
191C: 38 SEC
191D: ED 21 0E SBC $0E21
1920: DD 00 D0 CMP $D000,X ; X Coord MOB 0 (lower 8)
1923: B0 27 BCS $194C
1925: AD 2D 0E LDA $0E2D
1928: 18 CLC
1929: 6D 21 0E ADC $0E21
192C: DD 00 D0 CMP $D000,X ; X Coord MOB 0 (lower 8)
192F: 90 1B BCC $194C
1931: AD 2E 0E LDA $0E2E
1934: 38 SEC
1935: ED 22 0E SBC $0E22
1938: DD 01 D0 CMP $D001,X ; y Coord MOB 0
193B: B0 0F BCS $194C
193D: AD 2E 0E LDA $0E2E
1940: 18 CLC
1941: 6D 22 0E ADC $0E22
1944: DD 01 D0 CMP $D001,X ; y Coord MOB 0
1947: 90 03 BCC $194C
1949: A9 00 LDA #$00
194B: 60 RTS
194C: A9 01 LDA #$01
194E: 60 RTS
;End Subroutine 18D3
-
;Subroutine 194F
194F: AD 35 0E LDA $0E35
1952: D0 63 BNE $19B7
1954: 20 D3 18 JSR $18D3
1957: D0 5E BNE $19B7
1959: AD 23 0E LDA $0E23
195C: F0 19 BEQ $1977
195E: AD 49 0E LDA $0E49
1961: 29 03 AND #$03
1963: D0 52 BNE $19B7
1965: A9 40 LDA #$40
1967: 8D 49 0E STA $0E49
196A: 8D 61 0E STA $0E61
196D: A9 01 LDA #$01
196F: 8D 51 0E STA $0E51
1972: A9 32 LDA #$32 ;Asteroid collision -500, verified
1974: 4C B9 1B JMP $1BB9 ;SubractEnergyByA()
1977: 20 90 1A JSR $1A90
197A: AD 00 D0 LDA $D000 ; X Coord MOB 0 (lower 8)
197D: CD 2D 0E CMP $0E2D
1980: D0 35 BNE $19B7
1982: AD 01 D0 LDA $D001 ; y Coord MOB 0
1985: CD 2E 0E CMP $0E2E
1988: D0 2D BNE $19B7
198A: AD 08 0E LDA $0E08
198D: D0 28 BNE $19B7
198F: AD 0F 0E LDA $0E0F
1992: D0 23 BNE $19B7
1994: AD 2B 0E LDA $0E2B
1997: D0 05 BNE $199E
1999: A9 01 LDA #$01
199B: 8D 36 0E STA $0E36
199E: AD 3A 0E LDA $0E3A
19A1: C9 01 CMP #$01
19A3: D0 12 BNE $19B7
19A5: AD 32 0E LDA $0E32
19A8: C9 FA CMP #$FA
19AA: F0 0B BEQ $19B7
19AC: A9 00 LDA #$00
19AE: 8D 33 0E STA $0E33
19B1: EE 32 0E INC $0E32
19B4: 20 37 1B JSR $1B37 : energy
19B7: 60 RTS
;End Subroutine 194F
-
;Subroutine 19B8
19B8: AD 07 0E LDA $0E07
19BB: 30 FA BMI $19B7
19BD: AD 48 0E LDA $0E48
19C0: D0 F5 BNE $19B7
19C2: AD 50 0E LDA $0E50
19C5: D0 F0 BNE $19B7
19C7: 20 D3 18 JSR $18D3
19CA: D0 EB BNE $19B7
19CC: AD 23 0E LDA $0E23
19CF: F0 E6 BEQ $19B7
19D1: 20 1D 16 JSR $161D
19D4: AD 23 0E LDA $0E23
19D7: CD 2A 0E CMP $0E2A ; boss location
19DA: D0 17 BNE $19F3
19DC: CE 2B 0E DEC $0E2B
19DF: D0 2D BNE $1A0E
19E1: A9 FF LDA #$FF
19E3: 20 0A 1C JSR $1C0A
19E6: A9 FF LDA #$FF
19E8: 20 0A 1C JSR $1C0A
19EB: A9 FF LDA #$FF
19ED: 20 0A 1C JSR $1C0A
19F0: 4C 5A 1A JMP $1A5A
19F3: AC 23 0E LDY $0E23
19F6: B9 80 90 LDA $9080,Y
19F9: 29 A0 AND #$A0
19FB: F0 19 BEQ $1A16
19FD: B9 80 90 LDA $9080,Y
1A00: 29 1F AND #$1F
1A02: C9 01 CMP #$01
1A04: F0 26 BEQ $1A2C
1A06: 98 TYA
1A07: AA TAX
1A08: DE 80 90 DEC $9080,X ; Asteroid took a hit. Reduce the hits
1A0B: 4C 16 1A JMP $1A16 ;
1A0E: A9 41 LDA #$41
1A10: 20 0A 1C JSR $1C0A ;
1A13: 4C 1B 1A JMP $1A1B ;
1A16: A9 01 LDA #$01
1A18: 20 0A 1C JSR $1C0A ;
1A1B: A9 06 LDA #$06
1A1D: 8D 48 0E STA $0E48
1A20: AD 2E D0 LDA $D02E ; Sprite #7 color (only bits #0-#3)
1A23: 8D 58 0E STA $0E58
1A26: A9 3C LDA #$3C
1A28: 8D 61 0E STA $0E61
1A2B: 60 RTS
1A2C: A9 7D LDA #$7D
1A2E: 20 0A 1C JSR $1C0A
1A31: AC 23 0E LDY $0E23
1A34: B9 80 90 LDA $9080,Y
1A37: 29 20 AND #$20
1A39: F0 0C BEQ $1A47
1A3B: B9 80 90 LDA $9080,Y
1A3E: 29 C0 AND #$C0
1A40: F0 15 BEQ $1A57
1A42: 09 1F ORA #$1F
1A44: 4C 57 1A JMP $1A57
1A47: CE 2C 0E DEC $0E2C
1A4A: 20 7F 1B JSR $1B7F
1A4D: A9 E1 LDA #$E1
1A4F: 20 0A 1C JSR $1C0A
1A52: AC 23 0E LDY $0E23
1A55: A9 00 LDA #$00
1A57: 99 80 90 STA $9080,Y
1A5A: A9 40 LDA #$40
1A5C: 8D 50 0E STA $0E50
1A5F: 8D 61 0E STA $0E61
1A62: 60 RTS
;End Subroutine 19B8
-
;Subroutine 1A63
1A63: 20 D3 18 JSR $18D3
1A66: D0 27 BNE $1A8F
1A68: AE 1E 0E LDX $0E1E
1A6B: BD 49 0E LDA $0E49,X
1A6E: D0 1F BNE $1A8F
1A70: BD 57 0E LDA $0E57,X
1A73: F0 1A BEQ $1A8F
1A75: BD 23 0E LDA $0E23,X
1A78: CD 2A 0E CMP $0E2A ; boss location
1A7B: F0 12 BEQ $1A8F
1A7D: CD 23 0E CMP $0E23
1A80: D0 0D BNE $1A8F
1A82: A9 01 LDA #$01
1A84: 9D 57 0E STA $0E57,X
1A87: A9 40 LDA #$40
1A89: 9D 49 0E STA $0E49,X
1A8C: 8D 61 0E STA $0E61
1A8F: 60 RTS
;End Subroutine 1A63
-
;Subroutine 1A90
1A90: CE 05 0E DEC $0E05
1A93: D0 25 BNE $1ABA
1A95: AD 08 0E LDA $0E08
1A98: 30 08 BMI $1AA2
1A9A: F0 09 BEQ $1AA5
1A9C: CE 08 0E DEC $0E08
1A9F: 4C A5 1A JMP $1AA5
1AA2: EE 08 0E INC $0E08
1AA5: AD 0F 0E LDA $0E0F
1AA8: 30 08 BMI $1AB2
1AAA: F0 09 BEQ $1AB5
1AAC: CE 0F 0E DEC $0E0F
1AAF: 4C B5 1A JMP $1AB5
1AB2: EE 0F 0E INC $0E0F
1AB5: A9 0F LDA #$0F
1AB7: 8D 05 0E STA $0E05
1ABA: 60 RTS
;End Subroutine 1A90
-
; SubroutineD: set cursor to row 0 and column y
SetPrintCursorXY(Y,0) ;Y is column, 0 is row
1ABB: A2 00 LDX #$00
; SubroutineD1: Set Cursor to x and y
SetPrintCursorXY(Y,X) ;Y is column, X is row
1ABD: 18 CLC
1ABE: 4C F0 FF JMP $FFF0 ; Kernal call: 'Plot' called with carry cleared: Set Cursor to row x and column y
; SubroutineD2: Set cursor to row 0 and column 0, calculate and display number of points?
SetPrintCursorXY(0,0) ;0 is column, 0 is row
1AC1: A0 00 LDY #$00
1AC3: 20 BB 1A JSR $1ABB ; set cursor to row 0 and column 0
1AC6: 38 SEC
1AC7: AD 2F 0E LDA $0E2F
1ACA: E9 10 SBC #$10
1ACC: 8D 37 0E STA $0E37
1ACF: AD 30 0E LDA $0E30
1AD2: E9 27 SBC #$27
1AD4: 0D 37 0E ORA $0E37
1AD7: B0 03 BCS $1ADC
1AD9: 20 54 1C JSR $1C54 ;Main()
1ADC: 38 SEC
1ADD: AD 2F 0E LDA $0E2F
1AE0: E9 E8 SBC #$E8
1AE2: 8D 37 0E STA $0E37
1AE5: AD 30 0E LDA $0E30
1AE8: E9 03 SBC #$03
1AEA: 0D 37 0E ORA $0E37
1AED: B0 03 BCS $1AF2
1AEF: 20 54 1C JSR $1C54 ;Main()
1AF2: 38 SEC
1AF3: AD 2F 0E LDA $0E2F
1AF6: E9 64 SBC #$64
1AF8: 8D 37 0E STA $0E37
1AFB: AD 30 0E LDA $0E30
1AFE: E9 00 SBC #$00
1B00: 0D 37 0E ORA $0E37
1B03: B0 03 BCS $1B08
1B05: 20 54 1C JSR $1C54 ;Main()
1B08: 38 SEC
1B09: AD 2F 0E LDA $0E2F
1B0C: E9 0A SBC #$0A
1B0E: 8D 37 0E STA $0E37
1B11: AD 30 0E LDA $0E30
1B14: E9 00 SBC #$00
1B16: 0D 37 0E ORA $0E37
1B19: B0 03 BCS $1B1E
1B1B: 20 54 1C JSR $1C54 ;Main()
1B1E: AE 2F 0E LDX $0E2F
1B21: AD 30 0E LDA $0E30
1B24: 20 CD BD JSR $BDCD ; output positive number in accu/X reg
1B27: 4C 54 1C JMP $1C54 ;Main()
end SubroutineD, D1, D2
-
;(Entry from 1B94,1EF5)
; print the number of lives on the screen
1B2A: A0 0C LDY #$0C
1B2C: 20 BB 1A JSR $1ABB ;SetPrintCursorXY(Y,0) ;Y is column, 0 is row. set cursor to row 0 and column $0C - 'Life'
1B2F: AE 31 0E LDX $0E31 ;low byte
1B32: A9 00 LDA #$00 ;High byte
1B34: 4C CD BD JMP $BDCD ; output positive number in accu/X reg
(Entry from 19B4,1B97,1BB5) and JMP from1BD9
; set cursor to row 0 and column $15 - 'Energy'
1B37: A0 15 LDY #$15 ; first digit of Energy number
1B39: 20 BB 1A JSR $1ABB ; set cursor to row 0 and column y
1B3C: AD 32 0E LDA $0E32
1B3F: C9 64 CMP #$64
1B41: B0 03 BCS $1B46 ; if A>=100, then 1B46
1B43: 20 54 1C JSR $1C54 ;Main()
1B46: AD 32 0E LDA $0E32
1B49: C9 0A CMP #$0A
1B4B: B0 03 BCS $1B50 ; if A>=10, then 1B50
1B4D: 20 54 1C JSR $1C54 ;Main()
1B50: AE 32 0E LDX $0E32
1B53: A9 00 LDA #$00
1B55: 20 CD BD JSR $BDCD ; output positive number in accu/X reg
1B58: AE 33 0E LDX $0E33 ; load the energy minor digit
1B5B: A9 00 LDA #$00 ; high byte
1B5D: 4C CD BD JMP $BDCD ; output positive number in accu/X reg
(Entry from 13E3, 1B9A, 1E2A)
; set cursor to row 0 and column $21 - 'Sector'
1B60: A0 21 LDY #$21
1B62: 20 BB 1A JSR $1ABB ; set cursor to row 0 and column y
1B65: AD 23 0E LDA $0E23
1B68: 29 0F AND #$0F
1B6A: 18 CLC
1B6B: 69 31 ADC #$31
1B6D: 20 D2 FF JSR $FFD2
1B70: AD 23 0E LDA $0E23
1B73: 4A LSR A
1B74: 4A LSR A
1B75: 4A LSR A
1B76: 4A LSR A
1B77: 29 0F AND #$0F
1B79: 18 CLC
1B7A: 69 31 ADC #$31
1B7C: 4C D2 FF JMP $FFD2 ;CHROUT, Output a character
; (Entry from 1A4A) JMP from 1B9D
; JSR from $1A4A, loop JMP from $189D
; check if $0E2C is smaller than 4
1B7F: A9 04 LDA #$04
1B81: 38 SEC
1B82: ED 2C 0E SBC $0E2C
1B85: F0 09 BEQ $1B90
1B87: AA TAX
1B88: A9 98 LDA #$98
1B8A: 9D 23 04 STA $0423,X
1B8D: CA DEX
1B8E: D0 F8 BNE $1B88
1B90: 60 RTS
-
;entry from 1DD3
1B91: 20 C1 1A JSR $1AC1 ; set cursor to row 0 and column 0 - legacy code
1B94: 20 2A 1B JSR $1B2A ; set cursor to row 0 and column $0C - legacy code
1B97: 20 37 1B JSR $1B37 ; energy
1B9A: 20 60 1B JSR $1B60 ; sector
1B9D: 4C 7F 1B JMP $1B7F
;Subroutine 1BA0
Enters from 10C9, 1547
; lowers major energy by one and resets minor energy ???
1BA0: AD 33 0E LDA $0E33
1BA3: D0 0D BNE $1BB2
1BA5: AD 32 0E LDA $0E32
1BA8: F0 0E BEQ $1BB8
1BAA: CE 32 0E DEC $0E32
1BAD: A9 0A LDA #$0A
1BAF: 8D 33 0E STA $0E33
1BB2: CE 33 0E DEC $0E33
1BB5: 20 37 1B JSR $1B37 : energy
1BB8: 60 RTS
;End Subroutine 1BA0
-
;SubractEnergyByA()
1BB9: 8D 37 0E STA $0E37 ; store away the energy cost
1BBC: AD 32 0E LDA $0E32 ; Load Energy major
1BBF: CD 37 0E CMP $0E37 ; If Energy major >= energy cost
1BC2: B0 0B BCS $1BCF ; then survivable
1BC4: A9 00 LDA #$00 ; else
1BC6: 8D 32 0E STA $0E32 ; clear Energy major
1BC9: 8D 33 0E STA $0E33 ; and Energy minor
1BCC: 4C D9 1B JMP $1BD9 ; then go do something about it
1BCF: AD 32 0E LDA $0E32 ; survivable, load energy major
1BD2: 38 SEC ; Set carry flag (not certain why 'borrow' flag is set TODO)
1BD3: ED 37 0E SBC $0E37 ; Subtract energy cost
1BD6: 8D 32 0E STA $0E32 ; store it back to energy major
1BD9: 4C 37 1B JMP $1B37 : energy, go to the huge 1ABB mess.
;SubractEnergyByA()
-
;Subroutine 1BDC
1BDC: AD 35 0E LDA $0E35
1BDF: D0 1C BNE $1BFD ; If 0E35==0, do nothing
1BE1: AD 33 0E LDA $0E33
1BE4: D0 17 BNE $1BFD ; If 0E33==0, do nothing
1BE6: AD 32 0E LDA $0E32
1BE9: D0 12 BNE $1BFD ; If 0E32==0, do nothing
1BEB: A9 FF LDA #$FF
1BED: 8D 35 0E STA $0E35 ; Otherwise, 0E35=0xFF
1BF0: A9 80 LDA #$80
1BF2: 8D 49 0E STA $0E49 ; 0E49 = 0x80
1BF5: 8D 61 0E STA $0E61 ; 0E61 = 0x80
1BF8: A9 80 LDA #$80 ; This is unnecessary
1BFA: 8D 12 D4 STA $D412 ; SID Voice 3 Control Register
1BFD: 60 RTS
;End Subroutine 1BDC
1BFE - SetNoiseAllThree
;Subroutine SetNoiseAllThree;
;Disables all noise, assigns noise bit.
;Entry from $1CDB, $1D4E, $1EC4
1BFE: A9 80 LDA #$80
1C00: 8D 04 D4 STA $D404 ; Voice 1 Wave control - Noise bit on
1C03: 8D 0B D4 STA $D40B ; Voice 2 Wave control - Noise bit on
1C06: 8D 12 D4 STA $D412 ; Voice 3 Wave control - Noise bit on
1C09: 60 RTS
;End Subroutine SetNoiseAllThree
-
;Subroutine 1C0A
1C0A: 18 CLC
1C0B: 6D 2F 0E ADC $0E2F
1C0E: 8D 2F 0E STA $0E2F
1C11: AD 30 0E LDA $0E30
1C14: 69 00 ADC #$00
1C16: 8D 30 0E STA $0E30
1C19: 4C C1 1A JMP $1AC1 ; Enter the 1ABB mess. Set cursor to row 0 and column 0
;End Subroutine 1C0A
-
;Subroutine 1C1C
1C1C: 20 18 11 JSR $1118
1C1F: 20 4F 16 JSR $164F
1C22: 20 2B 16 JSR $162B
1C25: 20 FC 16 JSR $16FC
1C28: 20 7E 17 JSR $177E
1C2B: 20 FE 17 JSR $17FE
1C2E: 20 5B 18 JSR $185B
1C31: 20 63 1A JSR $1A63
1C34: 60 RTS
;End Suboutine 1C1C
-
;Subroutine 1C35
; JSR from 1E03 only
; RTS if Stop key pressed
1C35: 20 E1 FF JSR $FFE1 ; Check STOP key
1C38: D0 19 BNE $1C53 ; Stop pressed
; mute SID
1C3A: A9 00 LDA #$00
1C3C: 8D 18 D4 STA $D418
; wait until stop key is released
1C3F: 20 E1 FF JSR $FFE1 ; Check STOP key
1C42: F0 FB BEQ $1C3F
; wait until stop key is released
1C44: 20 E1 FF JSR $FFE1 ; Check STOP key
1C47: D0 FB BNE $1C44
; wait until stop key is released
1C49: 20 E1 FF JSR $FFE1 ; Check STOP key
1C4C: F0 FB BEQ $1C49
; set SID to max volume
1C4E: A9 0F LDA #$0F
1C50: 8D 18 D4 STA $D418
1C53: 60 RTS
;End Subroutine 1C35
1C54 Main
1C54 Main Setup
;Subroutine Main()
; output '0' to the screen
; //The Main loop entry point from internal JSR
; //The RST in FFD2 balances the stack pointer.
1C54: A9 30 LDA #$30
1C56: 4C D2 FF JMP $FFD2 ; CHROUT Kernal call
; This is a JMP such that the RST is gobbled by the $FFD2 function call
;
; START game loop
; Entry points: 0x0E00 (BASIC SYS call)
; //Initial first-time entry of program.
1C59: 20 D7 0F JSR $0FD7 ; DefineCharsets() 0x2000-0x27FF
; Character Pixel Data is at 0x2000 by (x8)
; Default character screen memory is preserved (1x)
1C5C: A9 18 LDA #$18 ;
1C5E: 8D 18 D0 STA $D018 ; Store 0b00011000 into $D018. Char data at 0x2000, Screen offset it 0x0400
1C61: A9 00 LDA #$00
1C63: 8D 1B D0 STA $D01B ; Store 0x00 into $D01B. All sprites on top layer
1C66: 8D 20 D0 STA $D020 ; Store 0x00 into $D020. Border color is 0 (black)
1C69: 8D 21 D0 STA $D021 ; Store 0x00 into $D021. Background color is 0 (black)
1C6C: A9 11 LDA #$11
;SID
1C6E: 8D 05 D4 STA $D405 ; Voice 1 Attack/decay register V1A=0x1, V1D=0x1
1C71: 8D 0C D4 STA $D40C ; Voice 2 Attack/decay register V1A=0x1, V1D=0x1100
1C74: 8D 13 D4 STA $D413 ; Voice 3 Attack/decay register V1A=0x1, V1D=0x1
1C77: A9 F1 LDA #$F1
1C79: 8D 06 D4 STA $D406 ; Voice 1 Sustain/release register V1S=0xF, V1R=0x1
1C7C: A9 01 LDA #$01
1C7E: 8D 08 D4 STA $D408 ; Voice 2 Pitch Upper Value 0x01
1C81: A9 FB LDA #$FB
1C83: 8D 0D D4 STA $D40D ; Voice 2 Sustain/release register V1S=0xF, V1R=0xB
1C86: A9 F6 LDA #$F6
1C88: 8D 14 D4 STA $D414 ; Voice 3 Sustain/release register V1S=0xF, V1R=0x6
;VIC-II
1C8B: A9 0C LDA #$0C ; Grey 2.
1C8D: 8D 25 D0 STA $D025 ; Low nybble, MOB Multicolor 0
1C90: A9 0B LDA #$0B ; Grey 1.
1C92: 8D 26 D0 STA $D026 ; Low nybble, MOB Multicolor 1
1C95: A9 07 LDA #$07 ; Yellow. Shot
1C97: 8D 28 D0 STA $D028 ; MOB 1 Color
1C9A: A9 0A LDA #$0A ; Light red. Missiles
1C9C: 8D 29 D0 STA $D029 ; MOB 2 Color
1C9F: 8D 2A D0 STA $D02A ; MOB 3 Color
1CA2: 8D 2C D0 STA $D02C ; MOB 5 Color
1CA5: 8D 2B D0 STA $D02B ; MOB 4 Color
1CA8: 8D 2D D0 STA $D02D ; MOB 6 Color
1CAB: A9 80 LDA #$80
1CAD: 8D 17 D0 STA $D017 ; MOB 7 Y-expand
1CB0: 8D 1D D0 STA $D01D ; MOB 7 X-expand
1CB3: A9 FC LDA #$FC ;
1CB5: 8D 1C D0 STA $D01C ; MOB Multicolor Select, MOB 0 and 1 single color, other MOBs multi color
1CB8: A9 31 LDA #$31 ; Memory location of Shot sprite graphic (0x40 * 0x31 = 0x0C40)
1CBA: 8D F9 07 STA $07F9 ;
1CBD: A9 32 LDA #$32 ; Memory location of Missile sprite graphic (0x0C80)
1CBF: 8D FA 07 STA $07FA
1CC2: 8D FB 07 STA $07FB
1CC5: 8D FC 07 STA $07FC
1CC8: 8D FD 07 STA $07FD
1CCB: 8D FE 07 STA $07FE
1CCE: A9 0F LDA #$0F
1CD0: 8D 18 D4 STA $D418 ; Volume control 0xF, filter bits zero, voice 3 enabled
1CD3 - Main Loop
; JMP from $1F39 //This is the main loop
1CD3: A9 FF LDA #$FF
1CD5: 8D 0E D4 STA $D40E ; Voice 3 Pitch Lower Value
1CD8: 8D 0F D4 STA $D40F ; Voice 3 Pitch Upper Value (Approx 4kHz)
1CDB: 20 FE 1B JSR $1BFE ; SetNoiseAllThree()
;clear screen by calling CHAROUT with a value of $93
1CDE: A9 93 LDA #$93 ; chr$(147), inverse lowercase 's', potentially clear screen
1CE0: 20 D2 FF JSR $FFD2 ; Jump to Kernel CHROUT vector
; call the delay at $0F80 40 times to wait for approximately 0.3 seconds
1CE3: A9 40 LDA #$40
1CE5: 8D 37 0E STA $0E37
1CE8: 20 80 0F JSR $0F80 ; Delay($0E03)
1CEB: CE 37 0E DEC $0E37
1CEE: D0 F8 BNE $1CE8
; Generate unique game map. All Asteroids, Generators, Boss and Home are placed.
; Modifies 0xC000-0xC0FF
;
1CF0: 20 7A 14 JSR $147A ; GenerateMap()
1CF3: A9 C9 LDA #$C9
1CF5: 8D 2B 0E STA $0E2B ; 0x0E2B = 0xC9
1CF8: A9 04 LDA #$04 ; set number of lives to 4
1CFA: 8D 2C 0E STA $0E2C ; 0x0E2C = 0x04
1CFD: 8D 31 0E STA $0E31 ; 0x0E31 = 0x04
1D00: A9 00 LDA #$00
1D02: 8D 2F 0E STA $0E2F ;
1D05: 8D 30 0E STA $0E30 ;
1D08: 8D 36 0E STA $0E36 ;
1D0B: 8D 23 0E STA $0E23 ; not fully understood, may be beginning of a float
1D0E: 20 06 13 JSR $1306 ; calculate $0E37, $0E63, $0E64, $0E65, $0E66 as a function of $0E23
1D11: A9 81 LDA #$81
1D13: 8D 0B D4 STA $D40B ; Enable rumble voice
; set Cursor to $09 and $0E
1D16: A0 0E LDY #$0E
1D18: A2 09 LDX #$09
1D1A: 20 BD 1A JSR $1ABD
; print the $00 terminated string located at $0EDE: "'white'STAR STRIKE"
1D1D: A9 DE LDA #$DE
1D1F: A0 0E LDY #$0E
1D21: 20 1E AB JSR $AB1E
; set Cursor to $0C and $0D
1D24: A0 0D LDY #$0D
1D26: A2 0C LDX #$0C
1D28: 20 BD 1A JSR $1ABD
; print the $00 terminated string located at $0EEC: "by Kevin Dixon"
1D2B: A9 EC LDA #$EC
1D2D: A0 0E LDY #$0E
1D2F: 20 1E AB JSR $AB1E
; set Cursor to $0F and $12
1D32: A0 12 LDY #$12
1D34: A2 0F LDX #$0F
1D36: 20 BD 1A JSR $1ABD
; print the $00 terminated string located at $0EFB: "1990"
1D39: A9 FB LDA #$FB
1D3B: A0 0E LDY #$0E
1D3D: 20 1E AB JSR $AB1E
;At this point the title screen is visible and a rocket propulsion sound is audible
;wait for the player to press and release the fire button on joystik 1
1D40: AD 01 DC LDA $DC01 ;Capture Joystick port
1D43: 29 10 AND #$10 ;check fire button
1D45: D0 F9 BNE $1D40 ;loop if not pressed
1D47: AD 01 DC LDA $DC01 ;Capture Joystick port
1D4A: 29 10 AND #$10 ;check fire button
1D4C: F0 F9 BEQ $1D47 ;loop if pressed
;turn off the all sound channels, reset to noise generator.
; entry from $1D4C (beginning of game), $1DF5 (just lost a live)
1D4E: 20 FE 1B JSR $1BFE ;SetNoiseAllThree()
;hide all sprites
1D51: A9 00 LDA #$00
1D53: 8D 15 D0 STA $D015 ; Sprite enable register
;clear screen by calling CHAROUT with a value of $93
1D56: A9 93 LDA #$93
1D58: 20 D2 FF JSR $FFD2
;call the delay at $0F80 40 times to wait for approximately 0.3 seconds
1D5B: A9 40 LDA #$40
1D5D: 8D 37 0E STA $0E37
1D60: 20 80 0F JSR $0F80 ; Delay($0E03)
1D63: CE 37 0E DEC $0E37
1D66: D0 F8 BNE $1D60
; place ship on home base
1D68: AD 00 90 LDA $9000
1D6B: 38 SEC
1D6C: E9 0A SBC #$0A
1D6E: 8D 00 D0 STA $D000 ;X Coord MOB 0 (lower 8)
1D71: AD 08 90 LDA $9008
1D74: 38 SEC
1D75: E9 32 SBC #$32
1D77: 8D 01 D0 STA $D001 ;Y Coord MOB 0
; initialize vareables
1D7A: A9 09 LDA #$09 ; A=0x09
1D7C: 8D 16 0E STA $0E16
1D7F: 8D 1A 0E STA $0E1A
1D82: 8D 18 0E STA $0E18
1D85: 8D 19 0E STA $0E19
1D88: 8D 1B 0E STA $0E1B
1D8B: 8D 1C 0E STA $0E1C
1D8E: A9 FF LDA #$FF ; A=255
1D90: 8D 07 0E STA $0E07
1D93: A9 00 LDA #$00 ; A=0
1D95: 8D 23 0E STA $0E23
1D98: 8D 35 0E STA $0E35
1D9B: 8D 60 0E STA $0E60
1D9E: 8D 61 0E STA $0E61
1DA1: 8D 5F 0E STA $0E5F
1DA4: 8D 08 0E STA $0E08
1DA7: 8D 0F 0E STA $0E0F
1DAA: 8D 10 D0 STA $D010 ; MOB 0-7 X-coordinates (bit #8)
1DAD: 8D 59 0E STA $0E59
1DB0: 8D 5A 0E STA $0E5A
1DB3: 8D 5C 0E STA $0E5C
1DB6: 8D 5D 0E STA $0E5D
1DB9: 8D 5B 0E STA $0E5B
1DBC: 8D 33 0E STA $0E33
1DBF: 8D 62 0E STA $0E62
1DC2: A9 FA LDA #$FA
1DC4: 8D 32 0E STA $0E32
1DC7: A9 08 LDA #$08
1DC9: 8D 06 0E STA $0E06
; print the $00 terminated string located at 0E7E: "'white''home' Life: Energy: Sector: xxxx"
1DCC: A9 7E LDA #$7E
1DCE: A0 0E LDY #$0E
1DD0: 20 1E AB JSR $AB1E ; Output string: Output string, which is indicated by accu/Y reg, until 0 byte or quote is found
1DD3: 20 91 1B JSR $1B91
1DD6: A9 01 LDA #$01 ; White
1DD8: 8D 27 D0 STA $D027 ; MOB 0 Color
1DDB: 8D 15 D0 STA $D015 ; MOB 0 (only) enabled
1DDE: A2 00 LDX #$00
1DE0: 20 D0 13 JSR $13D0
1DE3: AD 35 0E LDA $0E35
1DE6: C9 01 CMP #$01
1DE8: D0 0E BNE $1DF8
; loose a live, JMP to $1EA8 if no lives left to loose, else return to home base $1D4E
1DEA: AD 31 0E LDA $0E31 ; number of lives
1DED: D0 03 BNE $1DF2 ; alive
1DEF: 4C A8 1E JMP $1EA8 ; dead
1DF2: CE 31 0E DEC $0E31 ; loose a live
1DF5: 4C 4E 1D JMP $1D4E ; return to home base
1DF8: AD 36 0E LDA $0E36
1DFB: F0 03 BEQ $1E00 ; not done killing the boss?
1DFD: 4C B6 1E JMP $1EB6 ; boss dead!
1E00: 20 80 0F JSR $0F80 ; Delay($0E03)
1E03: 20 35 1C JSR $1C35
1E06: AD 62 0E LDA $0E62
1E09: F0 25 BEQ $1E30
1E0B: CE 62 0E DEC $0E62
1E0E: D0 0D BNE $1E1D
1E10: A9 01 LDA #$01
1E12: 8D 15 D0 STA $D015 ; Sprite enable register
1E15: A2 00 LDX #$00
1E17: 20 D0 13 JSR $13D0
1E1A: 4C 30 1E JMP $1E30
1E1D: A9 00 LDA #$00
1E1F: 8D 15 D0 STA $D015 ; Sprite enable register
1E22: AD 1B D4 LDA $D41B ; fetch random number
1E25: 29 77 AND #$77
1E27: 8D 23 0E STA $0E23
1E2A: 20 60 1B JSR $1B60 ; sector
1E2D: 4C 9F 1E JMP $1E9F
; JMP from $1E09, $1E1A
1E30: 20 98 17 JSR $1798
1E33: 20 23 10 JSR $1023
1E36: 20 D7 14 JSR $14D7
1E39: 20 7F 15 JSR $157F
1E3C: 20 7F 15 JSR $157F
1E3F: A9 01 LDA #$01
1E41: A2 00 LDX #$00
1E43: 20 18 11 JSR $1118
1E46: 20 7E 17 JSR $177E
1E49: 20 FE 17 JSR $17FE
1E4C: 20 4F 19 JSR $194F
1E4F: A9 02 LDA #$02
1E51: 8D 38 0E STA $0E38
1E54: 49 FF EOR #$FF
1E56: 8D 39 0E STA $0E39
1E59: A2 01 LDX #$01
1E5B: 8E 1E 0E STX $0E1E
1E5E: 20 B8 19 JSR $19B8
1E61: A9 04 LDA #$04
1E63: A2 02 LDX #$02
1E65: 20 1C 1C JSR $1C1C
1E68: A9 08 LDA #$08
1E6A: A2 03 LDX #$03
1E6C: 20 1C 1C JSR $1C1C
1E6F: A9 10 LDA #$10
1E71: A2 04 LDX #$04
1E73: 20 1C 1C JSR $1C1C
1E76: A9 20 LDA #$20
1E78: A2 05 LDX #$05
1E7A: 20 1C 1C JSR $1C1C
1E7D: A9 40 LDA #$40
1E7F: A2 06 LDX #$06
1E81: 20 1C 1C JSR $1C1C
1E84: A9 80 LDA #$80
1E86: 8D 38 0E STA $0E38
1E89: 49 FF EOR #$FF
1E8B: 8D 39 0E STA $0E39
1E8E: A2 07 LDX #$07
1E90: 8E 1E 0E STX $0E1E
1E93: 20 7E 17 JSR $177E
1E96: 20 FE 17 JSR $17FE
1E99: 20 DC 1B JSR $1BDC
1E9C: 20 C8 18 JSR $18C8 ; Reduce E35
1E9F: 20 8C 0F JSR $0F8C ; FireSirenSound($0E5F,$0E60, $D401, $D404)
1EA2: 20 C2 0F JSR $0FC2
1EA5: 4C E3 1D JMP $1DE3
; dead
; JMP from $1DEF only
; set Cursor to $18 and $0F
1EA8: A0 0F LDY #$0F
1EAA: A2 18 LDX #$18
1EAC: 20 BD 1A JSR $1ABD
; prepare to print the string located at $0EAB: "Game over!"
1EAF: A9 AB LDA #$AB
1EB1: A0 0E LDY #$0E
1EB3: 4C C1 1E JMP $1EC1
;The bossmob is dead. Entry point exclusively from $1DFD, not a subroutine!
; set Cursor to $18 and $00
1EB6: A0 00 LDY #$00
1EB8: A2 18 LDX #$18
1EBA: 20 BD 1A JSR $1ABD
; prepare to print the string located at $0EB6: "Congratulations! Mission Accomplished!"
1EBD: A9 B6 LDA #$B6
1EBF: A0 0E LDY #$0E
; print the prepared end of game text
; JMP 1EB3
1EC1: 20 1E AB JSR $AB1E ;Print null terminated string
; reset the game
1EC4: 20 FE 1B JSR $1BFE ;SetNoiseAllThree()
; $D40F = #$08
1EC7: A9 08 LDA #$08
1EC9: 8D 0F D4 STA $D40F; SID FREHI3 Frequency Control High byte
1ECC: AD 36 0E LDA $0E36
1ECF: F0 55 BEQ $1F26 ; End of game via fatality, jump
1ED1: A9 10 LDA #$10 ; else proceed
1ED3: 18 CLC
1ED4: 6D 2F 0E ADC $0E2F
1ED7: 8D 2F 0E STA $0E2F
1EDA: A9 27 LDA #$27
1EDC: 6D 30 0E ADC $0E30
1EDF: 8D 30 0E STA $0E30
1EE2: 20 C1 1A JSR $1AC1 ; set cursor to row 0 and column 0
1EE5: A9 C8 LDA #$C8
1EE7: 8D 37 0E STA $0E37
1EEA: 4C 1B 1F JMP $1F1B
1EED: AD 31 0E LDA $0E31 ; number of lives
1EF0: F0 34 BEQ $1F26 ; If zero, no celebration sounds or bonus
1EF2: CE 31 0E DEC $0E31 ; Countdown lives at winning
1EF5: 20 2A 1B JSR $1B2A ; set cursor to row 0 and column $0C
1EF8: A9 DC LDA #$DC
1EFA: 18 CLC
1EFB: 6D 2F 0E ADC $0E2F
1EFE: 8D 2F 0E STA $0E2F
1F01: A9 05 LDA #$05
1F03: 6D 30 0E ADC $0E30
1F06: 8D 30 0E STA $0E30
1F09: 20 C1 1A JSR $1AC1 ; set cursor to row 0 and column 0
1F0C: A9 21 LDA #$21
1F0E: 8D 12 D4 STA $D412 ; SID Voice 3 Control Register - Bonus point "twang"
1F11: A9 20 LDA #$20
1F13: 8D 12 D4 STA $D412 ; SID Voice 3 Control Register
1F16: A9 50 LDA #$50
1F18: 8D 37 0E STA $0E37
1F1B: 20 80 0F JSR $0F80 ;Delay($0E03)
1F1E: CE 37 0E DEC $0E37
1F21: D0 F8 BNE $1F1B
1F23: 4C ED 1E JMP $1EED
; entry from $1ECF, $1EF0
; wait for the player to be ready
1F26: AD 01 DC LDA $DC01 ;Capture Joystick port
1F29: 29 10 AND #$10 ;fire test
1F2B: D0 F9 BNE $1F26 ; Wait forever for fire button
1F2D: AD 01 DC LDA $DC01 ;Capture Joystick port
1F30: 29 10 AND #$10 ;fire test
1F32: F0 F9 BEQ $1F2D ; Wait forever for fire button to be released
; $D015 = 0 - hide all sprites
1F34: A9 00 LDA #$00
1F36: 8D 15 D0 STA $D015 ; Sprite enable register
1F39: 4C D3 1C JMP $1CD3
;end Subroutine Main()