Star Strike by Kevin Dixon for the Commodore 64 Compute Gazette June 1991

From Public Wiki
Revision as of 21:30, 7 October 2023 by Legg (talk | contribs) (→‎1CD3 - Main Loop)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

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()