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

From Public Wiki
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()