Main points: lots of block loading tables at $A000 lots of John Brooks DOS routines at $B000 .. look at the 14 functions at $B000 for everything you need to know about how the loader works scanline interrupts keep the music playing, which is why it switches to text mode so often (to stop the music while things load) ; Alien Mind boot0 (Disk Block 0) ; (F.U.C.K. crack screen) ; 0800: 01 - DB $01 0801: EE F4 03 - INC $03F4 ; corrupt $03F4; reset will reboot ; ALT: EA EA EA 0804: 20 58 FC - JSR $FC58 ; clear screen 0807: 9C 34 C0 - STZ $C034 ; black border 080A: A9 10 - LDA #$10 080C: 8D 22 C0 - STA $C022 ; TODO what text/background colors are these? 080F: 8D 0C C0 - STA $C00C ; 80col off 0812: 20 1E 09 - JSR $091E ; wait for a vblank 0815: A9 41 - LDA #$41 0817: 8D 29 C0 - STA $C029 ; VGC mode: text 081A: 20 62 09 - JSR $0962 ; 16-bit mode ; fill $14 - $5E with $6B18 - this stomps on a lot of vectors - see http://www.kreativekorp.com/miscpages/a2info/zeropage.shtml ; and prevents further debugging 081D: A2 00 00 - LDX #$0000 0820: A9 18 6B - LDA #$6B18 0823: 9D 14 00 - STA $0014,X ; ALT: EA EA EA 0826: E8 - INX 0827: E8 - INX 0828: E0 4A 00 - CPX #$004A 082B: 90 F6 - BCC $823 ; play with toolbox dispatcher vector? ; in ROM 01, this is 5C AF 00 FE - JMP $FE00AF ; in ROM 03, this is 5C C5 00 FE - JMP $FE00C5 ; this code changes it to 5C AF 00 FE - JMP $FE00AF (same as rom01) ; which screws with ROM 03 pretty badly and appears to be the source of ; "Alien Mind only works on ROM 03 with original disks" ; NOPing this out works for me 082D: A9 5C AF - LDA #$AF5C 0830: 8F 00 00 E1 - STAL $E10000 ; ALT: EA EA EA EA 0834: A9 00 FE - LDA #$FE00 0837: 8F 02 00 E1 - STAL $E10002 ; ALT: EA EA EA EA 083B: A2 01 00 - LDX #$0001 ; block #1 083E: A0 0A 00 - LDY #$000A ; dest address $00/0A00 0841: A9 02 00 - LDA #$0002 ; just 1 block 0844: 20 24 09 - JSR $0924 ; load it 0847: A9 00 00 - LDA #$0000 084A: 8D 95 0A - STA $0A95 084D: A9 1E 00 - LDA #$001E 0850: 8D 97 0A - STA $0A97 ; load a _PackBytes SHR screen starting at block $0605 into RAM at $072000 0853: A2 05 06 - LDX #$0605 ; block #$0605 0856: A0 20 07 - LDY #$0720 ; dest address $07/2000 0859: A9 30 00 - LDA #$0030 ; 48 pages = 24 blocks 085C: 20 24 09 - JSR $0924 ; load it ; unpack SHR data at $072000 directly to SHR screen 085F: A9 20 E1 - LDA #$E120 0862: 8D 37 0A - STA $0A37 ; destination address: $E12000 0865: A9 00 80 - LDA #$8000 0868: 8D 3A 0A - STA $0A3A ; destination size: $8000 086B: 20 0F 0A - JSR $0A0F ; unpack with _UnPackBytes 086E: 8B - PHB 086F: A2 00 9E - LDX #$9E00 ; src address 0872: A0 00 A0 - LDY #$A000 ; dest address 0875: A9 20 00 - LDA #$0020 ; copy $21 bytes 0878: 54 00 E1 - MVN $00,$E1 ; copy 087B: A2 00 9E - LDX #$9E00 ; src address 087E: A0 20 A0 - LDY #$A020 ; dest address 0881: A9 20 00 - LDA #$0020 0884: 54 00 E1 - MVN $00,$E1 ; copy 0887: A2 00 9E - LDX #$9E00 ; src address 088A: A0 20 9E - LDY #$9E20 ; dest address 088D: A9 20 00 - LDA #$0020 0890: 54 E1 E1 - MVN $E1,$E1 ; copy 0893: AB - PLB 0894: 20 D9 09 - JSR $09D9 ; palettes to black? 0897: 20 67 09 - JSR $0967 ; 8-bit mode 089A: 20 1E 09 - JSR $091E ; wait for a vblank 089D: A9 A1 - LDA #$A1 089F: 8D 29 C0 - STA $C029 ; VGC mode: SHR graphics 08A2: 20 62 09 - JSR $0962 ; 16-bit mode 08A5: 20 FC 09 - JSR $09FC ; init palette fade? 08A8: 20 6C 09 - JSR $096C ; palette fade 08AB: A9 01 01 - LDA #$0101 08AE: A2 08 00 - LDX #$0008 08B1: 9F 85 9D E1 - STAL $E19D85,X 08B5: CA - DEX 08B6: 10 F9 - BPL $09B1 08B8: A2 02 00 - LDX #$0002 08BB: DA - PHX 08BC: A9 28 00 - LDA #$0028 08BF: 8D 95 0A - STA $0A95 08C2: 8D 97 0A - STA $0A97 08C5: 20 E9 09 - JSR $09E9 08C8: 20 6C 09 - JSR $096C ; palette fade 08CB: 20 FC 09 - JSR $09FC 08CE: 20 6C 09 - JSR $096C ; palette fade 08D1: FA - PLX 08D2: CA - DEX 08D3: D0 E6 - BNE $08BB 08D5: 9C 95 0A - STZ $0A95 08D8: A9 1E 00 - LDA #$001E 08DB: 8D 97 0A - STA $0A97 08DE: A9 00 00 - LDA #$0000 08E1: A2 08 00 - LDX #$0008 08E4: 9F 85 9D E1 - STAL $E19D85,X 08E8: CA - DEX 08E9: 10 F9 - BPL $08E4 08EB: A2 05 00 - LDX #$0005 ; starting block: $0005 08EE: A0 20 07 - LDY #$0720 ; load at $07200 08F1: A9 14 00 - LDA #$0014 ; 7 blocks / 14 pages 08F4: 20 24 09 - JSR $0924 ; load blocks from disk 08F7: 20 73 0A - JSR $0A73 08FA: 20 3C 0A - JSR $0A3C ; wait for some kind of user input? 08FD: 20 3C 0A - JSR $0A3C 0900: 20 E9 09 - JSR $09E9 0903: 20 6C 09 - JSR $096C ; palette fade 0906: A9 00 20 - LDA #$2000 0909: 8D 36 0A - STA $0A36 090C: A9 00 00 - LDA #$0000 090F: 8D 38 0A - STA $0A38 ; dest address: $002000 0912: A9 00 60 - LDA #$6000 0915: 8D 3A 0A - STA $0A3A ; dest size: $6000 0918: 20 0F 0A - JSR $0A0F ; unpack with _UnPackBytes 091B: 4C 00 20 - JMP $2000 ; jump into what we just unpacked ; ALT: 00 00 20 - BRK $2000 ; so we can examine unpacked stuff at $002000 ; wait for a vblank 091E: AD 19 C0 - LDA $C019 0921: 10 FB - BPL $091E 0923: 60 - RTS ; load a group of blocks from disk 0924: 20 62 09 - JSR $0962 ; 16-bit mode 0927: 8E 5D 09 - STX $095D ; X = blk number 092A: 8C 5A 09 - STY $095A ; Y = bank + page number 092D: 1A - INC 092E: 4A - LSR ; A = #pages to load 092F: 20 3F 09 - JSR $093F 0932: EE 5D 09 - INC $095D ; inc block number 0935: EE 5A 09 - INC $095A 0938: EE 5A 09 - INC $095A ; inc page number twice because $200 per block 093B: 3A - DEC 093C: 10 F1 - BPL $092F 093E: 60 - RTS ; read one block from disk 093F: 5A - PHY 0940: DA - PHX 0941: 48 - PHA 0942: 38 - SEC 0943: FB - XCE 0944: E2 30 - SEP $30 0946: 20 0D C5 - JSR $C50D 0949: 41 - DB $41 ; command $41 (extended read) 094A: 57 09 00 00 - ADRL $000957 094E: B0 F6 - BCS $0946 0950: FB - XCE 0951: C2 30 - REP #$30 0953: 68 - PLA 0954: FA - PLX 0955: 7A - PLY 0956: 60 - RTS ; smartport parameters 0957: 03 01 - DB $03,$01 0959: 00 20 00 00 - ADRL $002000 ; long ptr to data buffer 095D: 00 00 00 00 - ADRL $000000 ; long blk number 0961: 00 - DB $00 ; 16-bit mode 0962: 18 - CLC 0963: FB - XCE 0964: C2 30 - REP $30 0966: 60 - RTS ; 8-bit mode 0967: E2 30 - SEP $30 0969: 38 - SEC 096A: FB - XCE 096B: 60 - RTS ; looks like a palette fade? 096C: A0 00 00 - LDY #$0000 096F: AE 97 A0 - LDX $0A97 0972: BD 00 A0 - LDA $A000,X 0975: 29 0F 00 - AND #$000F 0978: 8D 9B 0A - STA $0A9B 097B: CC 9B 0A - CPY $0A9B 097E: B0 0C - BCS $098C 0980: BF 00 9E E1 - LDAL $E19E00,X 0984: 18 - CLC 0985: 6D 9D 0A - ADC $0A9D 0988: 9F 00 9E E1 - STAL $E19E00,X 098C: BD 00 A0 - LDA $A000,X 098F: EB - XBA 0990: 29 0F 00 - AND #$000F 0993: 8D 9B 0A - STA $0A9B 0996: CC 9B 0A - CPY $0A9B 0999: B0 0C - BCS $09A7 099B: BF 00 9E E1 - LDAL $E19E00,X 099F: 18 - CLC 09A0: 6D A1 0A - ADC $0AA1 09A3: 9F 00 9E E1 - STAL $E19E00,X 09A7: BD 00 A0 - LDA $A000,X 09AA: 4A - LSR 09AB: 4A - LSR 09AC: 4A - LSR 09AD: 4A - LSR 09AE: 29 0F 00 - AND #$000F 09B1: 8D 9B 0A - STA $0A9B 09B4: CC 9B 0A - CPY $0A9B 09B7: B0 0C - BCS $09C5 09B9: BF 00 9E E1 - LDAL $E19E00,X 09BD: 18 - CLC 09BE: 6D 9F 0A - ADC $0A9F 09C1: 9F 00 9E E1 - STAL $E19E00,X 09C5: CA - DEX 09C6: CA - DEX 09C7: EC 95 0A - CPX $0A95 09CA: 10 A6 - BPL $0972 09CC: AD 91 0A - LDA $0A91 09CF: 3A - DEC 09D0: D0 FD - BNE $09CF 09D2: C8 - INY 09D3: CC A7 0A - CPY $0AA7 09D6: D0 97 - BNE $096F 09D8: 60 - RTS ; palettes to black? 09D9: A2 00 00 - LDX #$0000 09DC: 8A - TXA 09DD: 9F 00 9E E1 - STAL $E19E00,X 09E1: E8 - INX 09E2: E8 - INX 09E3: E0 20 00 - CPX #$0020 09E6: 90 F5 - BCC $09DD 09E8: 60 - RTS 09E9: A9 FF FF - LDA #$FFFF 09EC: 8D 9D 0A - STA $0A9D 09EF: A9 F0 FF - LDA #$FFF0 09F2: 8D 9F 0A - STA $0A9F 09F5: A9 00 FF - LDA #$FF00 09F8: 8D A1 0A - STA $0AA1 09FB: 60 - RTS 09FC: A9 01 00 - LDA #$0001 09FF: 8D 9D 0A - STA $0A9D ; disk block 1 @ $00/0A00 ; 0A02: A9 10 00 - LDA #$0010 0A05: 8D 9F 0A - STA $0A9F 0A08: A9 00 01 - LDA #$0100 0A0B: 8D A1 0A - STA $0AA1 0A0E: 60 - RTS ; unpack something with _PackBytes 0A0F: 20 62 09 - JSR $0962 ; 16-bit mode 0A12: F4 00 00 - PEA $0000 ; space for result 0A15: F4 07 00 - PEA $0007 0A18: F4 00 20 - PEA $2000 ; packed data at $072000 0A1B: F4 00 40 - PEA $4000 ; packed data size $4000 0A1E: F4 00 00 - PEA $0000 0A21: F4 36 0A - PEA $0A36 ; $00/0A36 contains long dest addr 0A24: F4 00 00 - PEA $0000 0A27: FA 3A 0A - PEA $0A3A ; $00/0A3A contains dest size 0A2A: A2 03 27 - LDX #$2703 ; _UnPackBytes (Misc Tools) 0A2D: 22 00 00 E1 - JSL $E10000 0A31: 68 - PLA 0A32: 8D 00 03 - STA $0300 ; save #bytes unpacked 0A35: 60 - RTS 0A36: 00 20 E1 00 - ADRL $E12000 ; _UnPackBytes dest ptr 0A3A: 00 80 - DW $8000 ; _UnPackBytes dest size ; wait for some kind of user input? 0A3C: 20 67 09 - JSR $0967 ; 8-bit mode 0A3F: 2C 10 C0 - BIT $C010 0A42: AD 00 C0 - LDA $C000 0A45: 30 13 - BMI $0A5A 0A47: AD 61 C0 - LDA $C061 ; open-apple 0A4A: 30 0E - BMI $0A5A 0A4C: AD 62 C0 - LDA $C062 ; closed-apple 0A4F: 30 09 - BMI $0A5A 0A51: AD 27 C0 - LDA $C027 0A54: 89 80 - BIT #$80 ; ADB status: mouse event? 0A56: D0 06 - BNE $0A5E 0A58: 80 E8 - BRA $0A42 0A5A: 20 62 09 - JSR $0962 ; 16-bit mode 0A5D: 60 - RTS 0A5E: 89 01 - BIT #$01 0A60: F0 05 - BEQ $0A67 0A62: AD 24 C0 - LDA $C024 ; mouse data 0A65: 80 DB - BRA $0A42 0A67: AD 24 C0 - LDA $C024 0A6A: AD 24 C0 - LDA $C024 0A6D: 89 80 - BIT #$80 0A6F: D0 D1 - BNE $0A42 0A71: 80 E7 - BRA $0A5A 0A73: AD 00 03 - LDA $0300 0A76: 4D A3 0A - EOR $0AA3 0A79: F0 06 - BEQ $0A81 0A7B: EE 82 0A - INC $0A82 0A7E: EE 83 0A - INC $0A83 0A81: AD 99 0A - LDA $0A99 0A84: 48 - PHA 0A85: AB - PLB 0A86: AB - PLB 0A87: CE 77 24 - DEC $2477 0A8A: A9 00 00 - LDA #$0000 0A8D: 48 - PHA 0A8E: AB - PLB 0A8F: AB - PLB 0A90: 60 - RTS ; rest of block is zeroes and misc data ; Disk blocks $0005,$0006,$0007,$0008,$0009,$000A,$000B ; Unpacked at $002000 with _UnPackBytes 2000: 18 - CLC 2001: FB - XCE 2002: C2 30 - REP #$30 2004: A9 00 00 - LDA #0000 2007: 5B - TCD ; stomp on more vectors, sure why not 2008: A2 00 00 - LDX #0000 200B: A9 18 6B - LDA #6B18 200E: 9F 14 00 E1 - STA $E10014,X 2012: E8 - INX 2013: E8 - INX 2014: E0 4A 00 - CPX #$004A 2017: 90 F5 - BCC $200E ; relocate $20DC-$30DC to $B000 ; relocate $3092-$4092 to $A000 2019: A2 00 00 - LDX #$0000 201C: BD DC 20 - LDA $20DC,X 201F: 9D 00 B0 - STA $B000,X 2022: BD 92 30 - LDA $3092,X 2025: 9D 00 A0 - STA $A000,X 2028: E8 - INX 2029: E8 - INX 202A: E0 00 10 - CPX #$1000 202D: 90 ED - BCC $201C 202F: A9 4B BA - LDA #$BA4B 2032: 8D FE AF - STA $AFFE 2035: 38 - SEC 2036: FB - XCE 2037: 20 B0 BF - JSR $BFB0 ; wait for VBL 203A: A9 41 - LDA #$41 203C: 8D 29 C0 - STA $C029 ; VGC mode: text 203F: 9C 22 C0 - STZ $C022 ; black text, black background 2042: 9C 34 C0 - STZ $C034 ; black border 2045: 8D 0C C0 - STA $C00C 2048: EE F4 03 - INC $03F4 ; corrupt $03F4; reset will reboot ; memory check for 512KB 204B: A9 05 - LDA #$05 204D: 8F 00 00 02 - STAL $020000 2051: CF 00 00 02 - CMP $020000 2055: D0 0B - BNE $2062 2057: 1A - INC 2058: 8F 00 00 02 - STAL $020000 205C: CF 00 00 02 - CMP $020000 2060: F0 3F - BEQ $20A1 ; failed memory check 2062: A9 10 - LDA #$10 2064: 8D 22 C0 - STA $C022 ; text/background colors 2067: A9 41 - LDA #$41 2069: 8D 29 C0 - STA $C029 ; VGC mode: text 206C: 8D 0C C0 - STA $C00C 206F: A2 00 - LDX #00 2071: BD 7C 20 - LDA $207C,X 2074: F0 FE - BEQ $2074 ; lock up once we finish printin this string 2076: 9D 00 04 - STA $0400,X 2079: E8 - INX 207A: 80 F5 - BRA $2071 207C: - STR 'Requires 512k ' 20A0: 00 - DB $00 20A1: 20 7A B1 - JSR $B17A ; load a table of disk blocks from BA4B (shr pic, $00/1000 code) 20A4: 20 06 10 - JSR $1006 ; fade-in PBI Software screen 20A7: 18 - CLC 20A8: FB - XCE 20A9: C2 30 - REP #$30 20AB: AF 10 00 E1 - LDA $E10010 20AF: 8D F0 AF - STA $AFF0 20B2: AF 12 00 E1 - LDA $E10012 20B6: 8D F2 AF - STA $AFF2 20B9: A9 55 BA - LDA #$BA55 20BC: 8D FE AF - STA $AFFE 20BF: 20 7A B1 - JSR $B17A ; load second table of disk blocks 20C2: 20 09 10 - JSR $1009 20C5: 18 - CLC 20C6: FB - XCE 20C7: C2 30 - REP #$30 20C9: AF CA 00 E1 - LDA $E100CA ; system volume 20CD: 09 F0 FF - ORA #$FFF0 20D0: 49 FF FF - EOR #$FFFF 20D3: 4A - LSR 20D4: 85 22 - STA $22 20D6: 20 00 80 - JSR $8000 20D9: 4C 00 10 - JMP $1000 ; the rest runs relocated ; $A000 relocated code ; another table of disk tables A000: 6A A0 - DW $A06A A002: 96 A0 - DW $A096 A004: C3 A0 - DW $A0C3 A006: F0 A0 - DW $A0F0 A008: 1D A1 - DW $A11D A00A: 4A A1 - DW $A14A A00C: 77 A1 - DW $A177 A00E: A4 A1 - DW $A1A4 ; table of disk tables per level A010: 00 00 - DW $0000 A012: 8F A0 - DW $A08F A014: BC A0 - DW $A0BC A016: E9 A0 - DW $A0E9 A018: 16 A1 - DW $A116 A01A: 43 A1 - DW $A143 A01C: 70 A1 - DW $A170 A01E: 9D A1 - DW $A19D ; table of disk #s per level A020: 00 00 - DW $0000 A022: 00 00 - DW $0000 A024: 00 01 - DW $0001 A026: 00 01 - DW $0001 A028: 00 01 - DW $0001 A02A: 00 01 - DW $0001 A02C: 00 01 - DW $0001 A01E: 00 02 - DW $0002 ; a disk block loading table - Main Game A030: D0 02 - DW $02D0 ; block #$02D0 A032: 00 - DB $00 A033: 04 - DB $04 ; #pages to load ($2 blocks) A034: 00 02 - DW $0200 ; memory page $020000 A036: 02 - DB $02 ; #pages to load ($2 blocks) A037: FE 05 - DW $05FE ; memory page $05FE00 A039: 05 - DB $05 ; #pages to load ($3 blocks) A03A: 31 03 - DW $0331 ; memory page $033100 (from block $02D3) A03C: 21 - DB $21 ; #pages to load A03D: 00 03 - DW $0300 ; memory page $030000 A03F: 07 - DB $07 ; #pages to load A040: 09 02 - DW $0209 ; memory page $020900 A042: 06 - DB $06 ; #pages to load A043: 08 01 - DW $0108 ; memory page $010800 A045: 01 - DB $01 ; #pages to load A046: 02 01 - DW $0102 ; memory page $010200 A048: 7E - DB $7E ; #pages to load A049: 20 01 - DW $0120 ; memory page $012000 - SHR pic asset: main game screen A04B: 13 - DB $13 ; #pages to load A04C: D0 01 - DW $01D0 ; memory page $01D000 - code asset: SHR scroll left/right A04E: 06 - DB $06 ; #pages to load A04F: 50 00 - DW $0050 ; memory page $005000 - code asset A051: 0A - DB $0A ; #pages to load A052: 56 00 - DW $0056 ; memory page $005600 - code asset A054: 04 - DB $04 ; #pages to load A055: 80 00 - DW $0080 ; memory page $008000 - code asset A057: 09 - DB $09 ; #pages to load A058: 88 00 - DW $0088 ; memory page $008800 A05A: 28 - DB $28 ; #pages to load A05B: 50 02 - DW $0250 ; memory page $025000 A05D: 38 - DB $38 ; #pages to load A05E: 18 00 - DW $0018 ; memory page $001800 A060: 55 - DB $55 ; #pages to load A061: AB 04 - DW $04AB ; memory page $04AB00 A063: 70 - DB $70 ; #pages to load A064: 00 05 - DW $0500 ; memory page $050000 A066: 20 - DB $20 ; #pages to load A067: 80 05 - DW $0580 ; memory page $058000 A069: 00 - DB $00 ; stop ; a disk block loading table (level 1) A06A: EA 03 - DW $03EA ; block $03EA A06C: 00 - DB $00 A06D: 10 - DB $10 ; #pages to load ($8 blocks) A06E: 40 03 - DW $0340 ; memory page $034000 A070: 20 - DB $20 ; #pages to load ($10 blocks) A071: 7A 03 - DW $037A ; memory page $037A00 A073: A8 - DB $A8 ; #pages to load A074: 00 04 - DW $0400 ; memory page $040000 A076: 01 - DB $01 ; #pages to load A077: 60 03 - DW $0360 ; memory page $036000 A079: 10 - DB $10 ; #pages to load A07A: 30 02 - DW $0230 ; memory page $023000 A07C: 01 - DB $01 ; #pages to load A07D: 0F 02 - DW $020F ; memory page $020F00 A07F: 10 - DB $10 ; #pages to load A080: B0 01 - DW $01B0 ; memory page $01B000 A082: 63 - DB $63 ; #pages to load A083: 9D 03 - DW $039D ; memory page $039D00 A085: 01 - DB $01 ; #pages to load A086: 03 00 - DW $0003 ; memory page $000300 A088: 10 - DB $10 ; #pages to load A089: 08 00 - DW $0800 ; memory page $000800 A08B: 14 - DB $14 ; #pages to load A08C: 60 00 - DW $0060 ; memory page $006000 A08E: 00 - DB $00 ; stop ; a disk block loading table (level 2) A08F: FA 04 - DW $04FA ; block $04FA A091: 00 - DB $00 A092: 80 - DB $80 ; #pages to load A093: 20 E1 - DW $E120 ; memory page $E12000 - shr image asset A095: 00 - DB $00 ; stop ; a disk block loading table (level 2) A096: 3A 05 - DW $053A ; block $053A A098: 06 - DB $06 A099: 10 - DB $10 ; #pages to load A09A: 40 03 - DW $0340 A09C: 23 - DB $23 ; #pages to load A09D: 77 03 - DW $0377 A09F: A8 - DB $A8 ; #pages to load A0A0: 00 04 - DW $0400 A0A2: 01 - DB $01 ; #pages to load A0A3: 60 03 - DW $0360 A0A5: 10 - DB $10 ; #pages to load A0A6: 30 02 - DW $0230 A0A8: 01 - DB $01 ; #pages to load A0A9: 0F 02 - DW $020F A0AB: 10 - DB $10 ; #pages to load A0AC: B0 01 - DW $01B0 A0AE: 63 - DB $63 ; #pages to load A0AF: 9D 03 - DW $039D A0B1: 01 - DB $01 ; #pages to load A0B2: 03 00 - DW $0003 A0B4: 10 - DB $10 ; #pages to load A0B5: 08 00 - DW $0008 A0B7: 1A - DB $1A ; #pages to load A0B8: 60 00 - DW $0060 A0BA: 00 - DB $00 ; stop ; a disk block loading table (level 3) ON DISK 2 A0BC: 01 00 - DW $0001 ; block $0001 A0BE: 00 - DB $00 A0BF: 80 - DB $80 ; #pages to load A0C0: 20 E1 - DW $E120 ; memory page $E12000 - shr image asset A0C2: 00 - DB $00 ; stop ; a disk block loading table (level 3) ON DISK 2 A0C3: 41 00 - DW $0041 ; block $0041 A0C5: 0B - DB $0B A0C6: 10 - DB $10 ; #pages to load A0C7: 40 03 - DW $0340 A0C9: 26 - DB $26 ; #pages to load A0CA: 74 03 - DW $0374 A0CC: A8 - DB $A8 ; #pages to load A0CD: 00 04 - DW $0400 A0CF: 01 - DB $01 ; #pages to load A0D0: 60 03 - DW $0360 A0D2: 10 - DB $10 ; #pages to load A0D3: 30 02 - DW $0230 A0D5: 01 - DB $01 ; #pages to load A0D6: 0F 02 - DW $020F A0D8: 10 - DB $10 ; #pages to load A0D9: B0 01 - DW $01B0 A0DB: 63 - DB $63 ; #pages to load A0DC: 9D 03 - DW $039D A0DE: 01 - DB $01 ; #pages to load A0DF: 03 00 - DW $0003 A0E1: 10 - DB $10 ; #pages to load A0E2: 08 00 - DW $0008 A0E4: 16 - DB $16 ; #pages to load A0E5: 60 00 - DW $0060 A0E7: 00 - DB $00 ; stop ; a disk block loading table (level 4) ON DISK 2 A0E9: 08 01 - DW $0108 ; block $0108 A0EB: 00 - DB $00 A0EC: 80 - DB $80 ; #pages to load A0ED: 20 E1 - DW $E120 ; memory page $E12000 - shr image asset A0EF: 00 - DB $00 ; stop ; a disk block loading table (level 4) ON DISK 2 A0F0: 48 01 - DW $0148 ; block $0148 A0F2: 10 - DB $10 A0F3: 10 - DB $10 ; #pages to load A0F4: 40 03 - DW $0340 A0F6: 20 - DB $20 ; #pages to load A0F7: 7A 03 - DW $037A A0F9: A8 - DB $A8 ; #pages to load A0FA: 00 04 - DW $0400 A0FC: 01 - DB $01 ; #pages to load A0FD: 60 03 - DW $0630 A0FF: 10 - DB $10 ; #pages to load A100: 30 02 - DW $0230 A102: 01 - DB $01 ; #pages to load A103: 0F 02 - DW $020F A105: 10 - DB $10 ; #pages to load A106: B0 01 - DW $01B0 A108: 63 - DB $63 ; #pages to load A109: 9D 03 - DW $039D A10B: 01 - DB $01 ; #pages to load A10C: 03 00 - DW $0003 A10E: 10 - DB $10 ; #pages to load A10F: 08 00 - DW $0008 A111: 1C - DB $1C ; #pages to load A112: 60 00 - DW $0060 A114: 00 - DB $00 ; stop ; a disk block loading table (level 5) ON DISK 2 A116: 0F 02 - DW $020F ; block $020F A118: 00 - DB $00 A119: 80 - DB $80 ; #pages to load A11A: 20 E1 - DW $E120 ; memory page $E12000 - shr image asset A11C: 00 - DB $00 ; stop ; a disk block loading table (level 5) ON DISK 2 A11D: 4F 02 - DW $024F ; block $024F A11F: 15 - DB $15 A120: 01 - DB $01 ; #pages to load A121: 0F 02 - DW $020F A123: 63 - DB $63 ; #pages to load A124: 9D 03 - DW $039D A126: 10 - DB $10 ; #pages to load A127: 08 00 - DW $0008 A129: 10 - DB $10 ; #pages to load A12A: 40 03 - DW $0340 A12C: 23 - DB $23 ; #pages to load A12D: 77 03 - DW $0377 A12F: A8 - DB $A8 ; #pages to load A130: 00 04 - DW $0400 A132: 01 - DB $01 ; #pages to load A133: 60 03 - DW $0360 A135: 10 - DB $10 ; #pages to load A136: 30 02 - DW $0230 A138: 10 - DB $10 ; #pages to load A139: B0 01 - DW $01B0 A13B: 01 - DB $01 ; #pages to load A13C: 03 00 - DW $0003 A13E: 1B - DB $1B ; #pages to load A13F: 60 00 - DW $0060 A141: 00 - DB $00 ; stop ; a disk block loading table (level 6) ON DISK 2 A143: 18 03 - DW $0318 ; block $0318 A145: 00 - DB $00 A146: 80 - DB $80 ; #pages to load A147: 20 E1 - DW $E120 ; memory page $E12000 - shr image asset A149: 00 - DB $00 ; stop ; a disk block loading table (level 6) ON DISK 2 A14A: 58 03 - DW $0358 ; block $0358 A14C: 1A - DB $1A A14D: 10 - DB $10 ; #pages to load A14E: 40 03 - DW $0340 A150: 25 - DB $25 ; #pages to load A151: 75 03 - DW $0375 A153: A8 - DB $A8 ; #pages to load A154: 00 04 - DW $0400 A156: 01 - DB $01 ; #pages to load A157: 60 03 - DW $0360 A159: 10 - DB $10 ; #pages to load A15A: 30 02 - DW $0230 A15C: 01 - DB $01 ; #pages to load A15D: 0F 02 - DW $020F A15F: 10 - DB $10 ; #pages to load A160: B0 01 - DW $01B0 A162: 63 - DB $63 ; #pages to load A163: 9D 03 - DW $039D A165: 01 - DB $01 ; #pages to load A166: 03 00 - DW $0003 A168: 10 - DB $10 ; #pages to load A169: 08 00 - DW $0008 A16B: 17 - DB $17 ; #pages to load A16C: 60 00 - DW $0060 A16E: 00 - DB $00 ; stop ; a disk block loading table (level 7) ON DISK 2 A170: 20 04 - DW $0420 ; block $0420 A171: 00 - DB $00 A172: 80 - DB $80 ; #pages to load A173: 20 E1 - DW $E120 ; memory page $E12000 - shr image asset ; a disk block loading table (level 7) ON DISK 2 A177: 60 04 - DW $0460 ; block $0460 A179: 1F - DB $1F A17A: 10 - DB $10 ; #pages to load A17B: 40 03 - DW $0340 A17D: 23 - DB $23 ; #pages to load A17E: 77 03 - DW $0377 A180: A8 - DB $A8 ; #pages to load A181: 00 04 - DW $0400 A183: 01 - DB $01 ; #pages to load A184: 60 03 - DW $0360 A186: 10 - DB $10 ; #pages to load A187: 30 02 - DW $0230 A189: 01 - DB $01 ; #pages to load A18A: 0F 02 - DW $020F A18C: 10 - DB $10 ; #pages to load A18D: B0 01 - DW $01B0 A18F: 63 - DB $63 ; #pages to load A190: 9D 03 - DW $039D A192: 01 - DB $01 ; #pages to load A193: 03 00 - DW $0003 A195: 10 - DB $10 ; #pages to load A196: 08 00 - DW $0800 A198: 1F - DB $1F ; #pages to load A199: 60 00 - DW $0060 A19B: 00 - DB $00 ; stop ; a disk block loading table (level 8) ON DISK 3 A19D: 01 00 - DW $0001 ; block $0001 A19F: 00 - DB $00 A1A0: 80 - DB $80 ; #pages to load A1A1: 20 E1 - DW $E120 ; memory page $E12000 - shr image asset A1A3: 00 - DB $00 ; stop ; a disk block loading table (level 8) ON DISK 3 A1A4: 41 00 - DW $0041 ; block $0041 A1A6: 24 - DB $24 A1A7: 10 - DB $10 ; #pages to load A1A8: 40 03 - DW $0340 A1AA: 23 - DB $23 ; #pages to load A1AB: 77 03 - DW $0377 A1AD: A8 - DB $A8 ; #pages to load A1AE: 00 04 - DW $0400 A1B0: 01 - DB $01 ; #pages to load A1B1: 60 03 - DW $0360 A1B3: 10 - DB $10 ; #pages to load A1B4: 30 02 - DW $0230 A1B6: 01 - DB $01 ; #pages to load A1B7: 0F 02 - DW $020F A1B9: 10 - DB $10 ; #pages to load A1BA: B0 01 - DW $01B0 A1BC: 63 - DB $63 ; #pages to load A1BE: 9D 03 - DW $039D A1BF: 01 - DB $01 ; #pages to load A1C0: 03 00 - DW $0003 A1C2: 10 - DB $10 ; #pages to load A2C3: 08 00 - DW $0008 A2C5: 14 - DB $14 ; #pages to load A2C6: 60 00 - DW $0060 A2C7: 00 - DB $00 ; stop ; a disk block loading table ON DISK 3 A1CA: 06 01 - DW $0106 ; block $0106 A1CC: 00 - DB $00 A1CD: 80 - DB $80 ; #pages to load A1CE: 20 E1 - DW $E120 ; memory page $E12000 - shr image asset A1D0: 00 - DB $00 ; stop ; a disk block loading table ON DISK 3 A1D1: 7E 01 - DW $017E ; block $017E A1D3: 00 - DB $00 A1D4: 01 - DB $01 ; #pages to load A1D5: 0F 02 - DW $020F ; memory page $020F00 - code asset? A1D7: 63 - DB $63 ; #pages to load A1D8: 9D 03 - DW $039D ; memory page $039D00 - code asset? A1DA: 00 - DB $00 ; stop ; a disk block loading table ON DISK 3 A1DB: B1 01 - DW $01B1 ; block $01B1 A1DD: 29 - DB $20 A1DE: 01 - DB $01 ; #pages to load A1DF: 03 00 - DW $0003 ; memory page $000300 - code asset? A1E1: 33 - DB $33 ; #pages to load A1E2: 00 04 - DW $0400 ; memory page $040000 - code asset? A1E4: 10 - DB $10 ; #pages to load A1E5: 08 00 - DW $0008 ; memory page $000800 - code asset? A1E7: 00 - DB $00 ; stop ; a disk block loading table ON DISK 3 A1E8: 46 01 - DW $0146 ; block $0146 A1EA: 00 - DB $00 A1EB: 6F - DB $6F ; #pages to load A1EC: 00 04 - DW $0400 ; memory page $040000 - code asset?? A1EE: 00 - DB $00 ; stop ; a disk block loading table - Main Menu A1EF: 43 01 - DW $0143 ; block $0143 A1F1: 00 - DB $00 A1F2: 07 - DB $07 ; #pages to load A1F3: 09 02 - DW $0209 ; memory page $020900 - image assets - looks like the font A1F5: 80 - DB $80 ; #pages to load A1F6: 20 03 - DW $0320 ; memory page $032000 - shr image asset - High Scores page A1F8: 80 - DB $80 ; #pages to load A1F9: 20 01 - DW $0120 ; memory page $012000 - shr image asset - main menu (start game/resume game/etc) A1FB: 0B - DB $0B ; #pages to load A1FC: 80 00 - DW $0080 ; memory page $008000 - main menu code A1FE: 07 - DB $07 ; #pages to load A1FF: 08 00 - DW $0008 ; memory page $000800 A200: 00 - DB $00 ; stop ; a disk block loading table - About Matt and Rob A202: D1 01 - DW $01D1 ; block $01D1 A204: 00 - DB $00 A205: 80 - DB $80 ; #pages to load A206: 00 04 - DW $0400 ; memory page $040000 - shr image asset - Artist Matt / Programmer Rob A208: 7D - DB $7D ; #pages to load A209: 80 04 - DW $0480 ; memory page $048000 - shr image asset - about Bob and Matt biographical A20B: 7D - DB $7D ; #pages to load A20C: 00 05 - DW $0500 ; memory page $050000 - shr image asset A20E: 7D - DB $7D ; #pages to load A20F: 7D 05 - DW $057D ; memory page $057D00 A211: 00 - DB $00 ; stop ; a disk block loading table A212: AD 04 - DW $04AD ; block $04AD A214: 01 - DB $01 ; Z=1 A215: 9A - DB $9A ; #pages to load A216: 00 05 - DW $0500 ; memory page $050000 A218: 00 - DB $00 ; stop ; a disk block loading table - level 2 SHR asset A26D: 00 02 - DW $0200 ; block #$200 (512) A26F: 00 - DB $00 ; Z=0 A270: 80 - DB $80 ; #pages to load ($40 blocks) A271: 20 E1 - DW $E120 ; memory page $E12000 - shr image asset A273: 00 - DB $00 ; stop ; a disk block loading table - thanks etc A274: 40 02 - DW $0240 ; block #$0240 A276: 00 - DB $00 A277: 7E - DB $7E ; #pages to load ($3F blocks) A278: 20 E1 - DW $E120 ; memory page $E12000 - shr image asset: thanks to Todd Daugherty and Rob's parents A27A: 02 - DB $02 ; #pages to load (1 block) A27B: 9F E1 - DW $E19F ; memory page $E19F00 A27D: 80 - DB $80 ; #pages to load ($40 blocks) A27E: 20 01 - DW $0120 ; memory page $012000 A280: 00 - DB $00 ; stop A284: 00 - DB $00 A285: - STR ' PLEASE INSERT GAME DISK 1 IN DRIVE 1' A2AB: - STR ' PRESS ANY KEY ' ; show 'Please Wait' and jump to $B000 (load disk blocks) A325: E2 30 - SEP #$30 A327: A2 00 - LDX #$00 A329: BD 35 A3 - LDA $A335,X A32C: F0 13 - BEQ $A341 A32E: 9F 37 05 E0 - STA $E00537,X ; copy 'PLEASE WAIT' message to $E00537 A332: E8 - INX A333: 80 F4 - BRA $A329 A335: - STR 'PLEASE WAIT' A340: 00 - DB $00 ; show 'Please Wait' and jump to $BB8A A341: A9 10 - LDA #$10 A343: 8D 22 C0 - STA $C022 A346: 4C 00 B0 - JMP $B000 ; main game entry point? A349: E2 30 - SEP #$30 A34B: A2 00 - LDX #$00 A34D: BD 59 A3 - LDA $A359,X A350: F0 13 - BEQ $A365 A352: 9F 37 05 E0 - STA $E00537,X ; copy 'PLEASE WAIT' message to $E00537 A356: E8 - INX A357: 80 F4 - BRA $A34D A359: - STR 'PLEASE WAIT' A364: 00 - DB $00 A365: A9 00 - LDA #$00 A367: 8D 22 C0 - STA $C022 A36A: 4C 8A BB - JMP $BB8A A36D: 60 - RTS A36E: 20 4A AA - JSR $AA4A A371: 99 80 02 - STA $0280,Y A374: C8 - INY A389: A2 00 - LDX #$00 A38B: A0 00 - LDY #$00 A38D: 20 4A AA - JSR $AA4A ; $B000 relocated code B000: 4C 7A B1 - JMP $B17A ; load table of disk blocks B003: 4C D5 BA - JMP $BAD5 ; start main game from beginning B006: 4C 75 BD - JMP $BD75 ; start Main Menu B009: 4C 8A BB - JMP $BB8A B00C: 4C 44 B3 - JMP $B344 ; request for user to insert disk # in A B00F: 4C C6 BD - JMP $BDC6 B012: 4C A2 BE - JMP $BEA2 ; TODO show some images B015: 4C 28 B1 - JMP $B128 ; read block $02CE (high scores) to $00/1000 B018: 4C 3D B1 - JMP $B13D ; write $00/1000 to block $02CE (high scores) B01B: 4C 9A B0 - JMP $B09A ; start main game, A=savegame number B01E: 4C 35 B0 - JMP $B035 ; write two blocks to disk (A=savegame number) from memory address $05/F800 B021: 4C 90 B0 - JMP $B090 ; read (and attempt to write) block $063F on disk and set $AF1C B024: 4C 86 B0 - JMP $B086 ; read (and attempt to write) block $063F on disk and set $AF1C B027: 4C D4 B3 - JMP $B3D4 ; format player disk and write $063F from $09/0000? B02A: C0 84 - DW $84C0 B02C: 41 19 - DW $1941 B02E: FA 00 - DW $00FA B030: 41 00 - DW $0041 B032: 80 08 - DW $0880 B034: 00 - DB $00 ; write game number in A B035: 38 - SEC B036: FB - XCE B037: E2 30 - SEP #$30 B039: A2 42 - LDX #$42 B03B: 8E D8 B2 - STX $B2D8 ; make this a write operation B03E: 20 51 B0 - JSR $B051 B041: 38 - SEC B042: FB - XCE B043: A9 41 - LDA #$41 B045: 8D D8 B2 - STA $B2D8 ; change it back to read operation B048: 18 - CLC B049: FB - XCE B04A: 60 - RTS ; read game number in A B051: 18 - CLC B052: FB - XCE B053: C2 30 - REP #$30 B055: 29 FF 00 - AND #$00FF B058: 0A - ASL B059: 0A - ASL B05A: 8D 06 B3 - STA $B306 ; set block number B05D: A9 F8 05 - LDA #$05F8 B060: 8D 03 B3 - STA $B303 ; set memory page to $05/F800 B063: 20 D0 B2 - JSR $B2D0 ; read block from disk and increment blk/memory addr B066: 20 D0 B2 - JSR $B2D0 ; read block from disk and increment blk/memory addr B069: 18 - CLC B06A: FB - XCE B06B: C2 30 - REP #$30 B06D: 20 F9 B3 - JSR $B3F9 B070: 60 - RTS B086: 38 - SEC B087: FB - XCE B088: E2 30 - SEP #$30 B08A: E2 30 - LDX #$00 B08C: 4C 54 B4 - JMP $B454 B090: 38 - SEC B091: FB - XCE B092: E2 30 - SEP #$30 B094: A2 00 - LDX #$00 B096: 4C A0 B4 - JMP $B4A0 B09A: E2 30 - SEP #$30 B09C: 48 - PHA B09D: A9 41 - LDA #$41 B09F: 8D 29 C0 - STA $C029 B0A2: A9 00 - LDA #$00 B0A4: 8F C7 9D E1 - STA $E19DC7 B0A8: 68 - PLA B0A9: EA - NOP B0AA: 18 - CLC B0AB: FB - XCE B0AC: C2 30 - REP #$30 B0AE: 29 FF 00 - AND #$00FF B0B1: 20 51 B0 - JSR $B051 ; load the saved game B0B4: E2 30 - SEP #$30 B0B6: AF 22 F8 05 - LDA $05F822 B0BA: 8F FF FF 05 - STA $05FFFF B0BE: C9 01 - CMP #$01 B0C0: D0 03 - BNE $B0C5 B0C2: 4C D5 BA - JMP $BAD5 ; if $01, start the game from the beginning B0C5: A9 01 - LDA #$01 B0C7: 85 2E - STA $2E B0C9: A9 01 - LDA #$01 B0CB: EB - XBA B0CC: A9 FF - LDA #$FF B0CE: 1B - TCS ; whack the stack back to $01FF B0CF: A9 00 - LDA #$00 B0D1: 20 0C B0 - JSR $B00C ; require/prompt user to insert disk 1 B0D4: E2 30 - SEP #$30 B0D6: AD 81 C0 - LDA $C081 B0D9: AD 83 C0 - LDA $C083 B0DC: AD 83 C0 - LDA $C083 B0DF: 18 - CLC B0E0: FB - XCE B0E1: C2 30 - REP #$30 B0E3: A9 30 A0 - LDA #$A030 B0E6: 8F FE AF 00 - STA $00AFFE ; most of the main game code B0EA: 20 25 A3 - JSR $A325 B0ED: 18 - CLC B0EE: FB - XCE B0EF: C2 30 - REP #$30 B0F1: 22 00 02 - JSL $020000 B0F5: 4B - PHK B0F6: AB - PLB B0F7: 18 - CLC B0F8: FB - XCE B0F9: C2 30 - REP #$30 B0FB: A9 12 A2 - LDA #$A212 ; load more of the main game code B0FE: 8F FE AF 00 - STA $00AFFE B102: 20 00 B0 - JSR $B000 B105: E2 30 - SEP #$30 B107: AF 22 F8 05 - LDA $05F822 B10B: 8F FF FF 05 - STA $05FFFF B10F: 18 - CLC B110: FB - XCE B111: C2 30 - REP #$30 B113: A2 00 00 - LDX #$0000 B116: BF 00 20 01 - LDA $012000,X B11A: 9F 00 20 E1 - STA $E12000,X B11E: E8 - INX B11F: E8 - INX B120: E0 00 80 - CPX #$8000 B123: 90 F1 - BCC $B116 B125: 4C 49 A3 - JMP $A349 B128: 0B - PHD B129: F4 00 AF - PEA $AF00 B12C: 2B - PLD B12D: E2 30 - SEP #$30 B12F: 20 20 B3 - JSR $B320 B132: 2B - PLD B133: 18 - CLC B134: 60 - RTS B13D: 38 - SEC B13E: FB - XCE B13F: E2 30 - SEP #$30 B141: 48 - PHA B142: A9 42 - LDA #$42 B144: 8D D8 B2 - STA $B2D8 ; smartport command $42: write B147: 68 - PLA B148: 20 28 B1 - JSR $B128 ; write $00/1000 to block $02CE B14B: A9 41 - LDA #$41 B14D: 8D D8 B2 - STA $B2D8 ; restore smartport command $41: read B150: 38 - SEC B151: FB - XCE B152: E2 30 - SEP #$30 B154: 18 - CLC B155: 60 - RTS B17A: 0B - PHD B17B: F4 00 AF - PEA $AF00 B17E: 2B - PLD ; direct page is now $AF00 B17F: 18 - CLC B180: FB - XCE B181: E2 30 - SEP #$30 B183: A9 2F - LDA #$2F B185: 0C 35 C0 - TSB $C035 ; shadow register B188: 20 67 B6 - JSR $B667 ; load a table of disk blocks B18B: 38 - SEC B18C: FB - XCE B18D: E2 30 - SEP #$30 B18F: 2B - PLD B190: 18 - CLC B191: 60 - RTS ; ... ; load blocks from disk based on parameters at ($FE) using smartport calls B1C4: 80 1E - BRA $B1E4 B1C6: 00 00 00 00 - DB $00,$00,$00,$00 B1CA: 00 00 00 00 - DB $00,$00,$00,$00 B1CE: 00 00 00 00 - DB $00,$00,$00,$00 B1D2: 00 00 00 00 - DB $00,$00,$00,$00 B1D6: 00 00 00 00 - DB $00,$00,$00,$00 B1DA: 00 00 00 00 - DB $00,$00,$00,$00 B1DE: 00 00 00 00 - DB $00,$00,$00,$00 B1E2: EA - NOP B1E3: 60 - RTS B1E4: A0 03 - LDY #$03 B1E6: B1 EF - LDA ($FE),Y ; ie $80, #pages to load B1E8: C9 00 - CMP #$00 B1EA: F0 F7 - BEQ $B1E3 B1EC: AA - TAX B1ED: C8 - INY B1EE: 18 - CLC B1EF: FB - XCE B1F0: C2 30 - REP #$30 B1F2: B1 FE - LDA ($FE),Y B1F4: 8D 03 B3 - STA $B303 ; memory location B1F7: E2 30 - SEP #$30 B1F9: E0 01 - CPX #$01 B1FB: F0 37 - BEQ $B234 ; use $B234 to copy-in an odd page without overwriting the second page B1FD: 20 D0 B2 - JSR $B2D0 ; read a block from disk with smartport calls B200: CA - DEX B201: CA - DEX ; decrement #pages to load in X B202: D0 F3 - BNE $B1F7 B204: C8 - INY B205: C8 - INY B206: 80 DE - BRA $B1E6 B208: 00 00 00 00 - DB $00,$00,$00,$00 ; ... ; read one page from disk without clobbering the page after it ; (ie read it into $090000 then copy $100 bytes into destination at $B303) B234: 18 - CLC B235: FB - XCE B236: C2 30 - REP #$30 B238: AD 03 B3 - LDA $B303 B23B: 8D 55 B2 - STA $B255 ; preserve original destination address in relocator B23E: A9 00 09 - LDA #$0900 B241: 8D 03 B3 - STA $B303 ; destination address $09/0000 B244: 20 D0 B2 - JSR $B2D0 ; read a block from disk B247: 18 - CLC B248: FB - XCE B249: C2 30 - REP #$30 B24B: EA - NOP B24C: A2 FE 00 - LDX #$00FE B24F: BF 00 00 09 - LDAL $090000,X B253: 9F 00 FF FF - STAL $FFFF00,X ; this gets rewritten with proper page number B257: CA - DEX B258: 10 F5 - BPL $B24F B25A: E2 30 - SEP #$30 B25C: 82 A5 FF - BRL $B204 ; read a block from disk with smartport calls B2D0: EA - NOP B2D1: 38 - SEC B2D2: FB - XCE B2D3: 5A - PHY B2D4: DA - PHX B2D5: 20 0D C5 - JSR $C50D B2D8: 41 - DB $41 ; cmd: $41 (extended read) B2D9: 00 B3 00 00 - ADRL $00B300 ; params at $B300 B2DD: B0 12 - BCS $B2F1 B2DF: 18 - CLC B2E0: FB - XCE B2E1: C2 30 - REP #$30 B2E3: EE 03 B3 - INC $B303 B2E6: EE 03 B3 - INC $B303 ; increment destination pointer by two pages B2E9: EE 06 B3 - INC $B306 ; increment block number by one B2EC: E2 30 - SEP #$30 B2EE: FA - PLX B2EF: 7A - PLY B2F0: 60 - RTS B2F1: C9 2B - CMP #$2B B2F3: F0 EA - BEQ $B2DF B2F5: 80 DE - BRA $B2D5 ; ... B300: 03 01 - DB $03,$01 B302: 00 00 00 00 - ADRL $000000 B306: 00 00 00 00 - ADRL $000000 ; ... ; special block table for reading high scores B310: FF 00 - DW $00FF ; block #$00FF (doesn't matter what it is) B312: 00 - DB $00 B313: 04 - DB $04 ; #pages to load (2 blocks / $400 bytes) B314: 10 00 - DB $0010 ; memory page $001000 B316: 00 - DB $00 ; stop B320: C9 00 - CMP #$00 B322: D0 17 - BNE $B33B B324: A9 CE - LDA #$CE BE26: 8D 06 B3 - STA $B306 B329: A9 02 - LDA #$02 B32B: 8D 07 B3 - STA $B307 ; set block number to $02CE B32E: A9 10 - LDA #$10 B330: 8D FE AF - STA $AFFE B333: A9 B3 - LDA #$B3 B335: 8D FF AF - STA $AFFF ; set $AFFE for block table at $B310 B338: 4C C4 B1 - JMP $B1C4 ; read blocks B344: E2 30 - SEP #$30 B346: 1A - INC B347: A8 - TAY B348: 18 - CLC B349: FB - XCE B34A: C2 30 - REP #$30 B34C: A9 3F 06 - LDA #$063F B34F: 8D 06 B3 - STA $B306 ; set block number to $06EF (disk ID block) B352: A9 00 09 - LDA #$0900 B355: 8D 03 B3 - STA $B303 ; set memory page to $09/0000 B358: 38 - SEC B359: FB - XCE B35A: E2 30 - SEP #$30 B35C: 20 D0 B2 - JSR $B2D0 ; read one block from disk B35F: 98 - TYA B360: CF 00 00 09 - CMP $090000 ; do we have the requested disk? B364: D0 01 - BNE $B367 B366: 60 - RTS B367: AE 29 C0 - LDX $C029 B36A: DA - PHX B36B: A9 41 - LDA #$41 B36D: 8D 29 C0 - STA $C029 B370: A9 10 - LDA #$10 B372: 8D 22 C0 - STA $C022 B375: 98 - TYA B376: 18 - CLC B377: 69 B0 - ADC #$B0 ; translate requested disk number to ASCII B379: 8D 9F A2 - STA $A29F ; copy it into 'INSERT GAME DISK NUMBER...' string B37C: A2 27 - LDX #$27 B37E: BD 85 A2 - LDA $A285,X B381: 9F 28 05 00 - STA $000528,X B385: 9F 28 05 E0 - STA $E00528,X B389: BD AD A2 - LDA $A2AD,X B38C: 9F 28 06 00 - STA $000628,X B390: 9F 28 06 E0 - STA $E00628,X B394: CA - DEX B395: 10 E7 - BPL $B37E B397: 2C 10 C0 - BIT $C010 B39A: AD 00 C0 - LDA $C000 B39D: 10 FB - BPL $B39A B39F: 68 - PLA B3A0: 8D 29 C0 - STA $C029 B3A3: 9C 22 C0 - STZ $C022 B3A6: A2 27 - LDX #$27 B3A8: A9 A0 - LDA #$A0 B3AA: 9F 28 05 00 - STA $000528,X B3AE: 9F 28 05 E0 - STA $E00528,X B3B2: 9F 28 06 00 - STA $000628,X B3B6: 9F 28 06 E0 - STA $E00628,X B3BA: CA - DEX B3BB: 10 ED - BPL $B3AA B3BD: 82 88 FF - BRL $B348 B3D4: 38 - SEC B3D5: FB - XCE B3D6: E2 30 - SEP #$30 B3D8: 20 0D C5 - JSR $C50D B3DB: 03 - DB $03 ; cmd $03 = format disk B3DC: 24 B4 - DW $B424 B3DE: EA - NOP B3DF: A9 04 - LDA #$04 B3E1: 8F 00 00 09 - STA $090000 B3E5: 20 0D C5 - JSR $C50D B3E8: 42 - DB $42 ; cmd $42 = extended write B3E9: 27 B4 00 00 - ADRL $00B427 B3ED: EA - NOP B3EE: B0 01 - BCS $B3F1 B3F0: 60 - RTS B3F1: C9 2B - CMP #$2B B3F3: D0 F0 - BNE $B3E5 B3F5: 80 F9 - BRA $B3F0 B3F9: AF 22 F8 05 - LDA $05F822 B3FD: D0 0E - BNE $B40D B3FF: A9 01 00 - LDA #$0001 B402: 8F 22 F8 05 - STA $05F822 B406: A9 00 00 - LDA #$0000 B409: 8F 00 F8 05 - STA $05F800 B40D: 60 - RTS ; smartport params for $B3D8 (format disk) B424: 01 - DB $01 B425: 01 00 - DW $0001 ; smartport params for $B4A0 B427: 03 - DB $03 B428: 01 - DB $01 B429: 00 00 09 00 - ADRL $090000 ; load at address $09/0000 B42D: 3F 06 00 00 - ADRL $063F ; block #$063F ; read block $063F to $09/0000 and increment X if it isn't the player disk B454: EA - NOP B455: EA - NOP B456: EA - NOP B457: DA - PHX B458: 20 0D C5 - JSR $C50D B45B: 41 - DB $41 ; cmd $41 = extended read B45C: 27 B4 00 00 - ADRL $00B427 B460: EA - NOP B461: B0 2B - BCS $B48E B463: AF 00 00 09 - LDA $090000 B467: F0 0A - BEQ $B473 B469: C9 04 - CMP #$04 ; is disk #04 (player data disk)? B46B: B0 06 - BCS $B473 B46D: EA - NOP B46E: EA - NOP B46F: FA - PLX B470: EA - NOP B471: E8 - INX B472: DA - PHX ; write $09/0000 to $063F - will fail (and increment X twice more) on write-protected game disks B473: 20 0D C5 - JSR $C50D B476: 42 - DB $42 ; cmd $42 = extended write B477: 27 B4 00 00 - ADRL $00B427 B47B: EA - NOP B47C: FA - PLX B47D: 90 02 - BCC $B481 B47F: E8 - INX B480: E8 - INX B481: 18 - CLC B482: FB - XCE B483: C2 30 - REP #$30 B485: 8A - TXA B486: 29 FF 00 - AND #$00FF B489: 8D 1C AF - STA $AF1C B48C: 60 - RTS ; read block $063F to $09/0000 and increment X if it isn't the player disk B4A0: DA - PHX B4A1: 20 0D C5 - JSR $C50D B4A4: 41 - DB $41 ; cmd $41 = extended read B4A5: 27 B4 00 00 - ADRL $00B427 ; block $063F at $09/0000 B4A9: EA - NOP B4AA: B0 12 - BCS $B4BE B4AC: AF 00 00 09 - LDA $090000 B4B0: C9 04 - CMP #$04 ; is disk #04 (player data disk)? B4B2: F0 03 - BEQ $B4B7 B4B4: FA - PLX B4B5: E8 - INX B4B6: DA - PHX B4B7: 82 B9 FF - BRL $B473 B4BE: C9 27 - CMP #$27 B4C0: D0 DF - BNE $B4A1 B4C2: 80 F3 - BRA $B4B7 ; load a table of disk blocks with smartport calls B667: 18 - CLC B668: FB - XCE B669: C2 30 - REP #$30 B66B: B2 FE - LDA ($FE) ; $AFFE (= for example $BA4B) A=$0028 B66D: 8D 06 B3 - STA $B306 ; store at smartport-call block number B670: E2 30 - SEP #$30 B672: A0 02 - LDY #$02 B674: B1 FE - LDA ($FE),Y ; $AFFE (= for example $BA4B) A=$00 B676: F0 18 - BEQ $B690 ; if Z=0 then just load the block B678: A8 - TAY B679: B9 00 B5 - LDA $B500,Y B67C: 8D 2C B0 - STA $B02C B67F: 8D 30 B0 - STA $B030 B682: C2 30 - REP #$30 B684: B9 01 B5 - LDA $B501,Y B687: 8D 32 B0 - STA $B032 B68A: B9 03 B5 - LDA $B503,Y B68D: 8D 52 B4 - STA $B452 B690: E2 30 - SEP #$30 B692: 4C C4 B1 - JMP $B1C4 ; ... ; first disk block loading table BA4B: 28 00 - DW $0028 ; disk block number $28 BA4D: 00 - DB $00 ; Z (nibblization key?) BA4E: 80 - DB $80 ; #pages to load ($40 blocks, so this is $28-$68) BA4F: 20 E1 - DW $E120 ; memory page $E12000 - PBI Software shr page BA51: 06 - DB $06 ; #pages to load BA52: 10 00 - DW $0010 ; memory page $001000 @ $68,$69,$70 BA53: 00 - DB $00 ; stop BA54: 00 - DB $00 ; stop ; second disk block loading table BA55: 6B 00 - DW $006B ; disk block number $6B BA57: 00 - DB $00 ; Z BA58: 80 - DB $80 ; #pages to load ($40 blocks) BA59: 20 03 - DW $0320 ; memory page $032000 - Alien Mind title + credits page BA5B: 80 - DB $80 ; #pages to load ($40 blocks) BA5A: 20 01 - DW $0120 ; memory page $012000 - Alien Mind title page BA5C: 02 - DB $02 ; #pages to load (1 block) BA5D: 00 02 - DW $0200 ; memory page $020000 BA5F: 00 - DB $00 ; stop ; ... ; start game from beginning BAD5: 38 - SEC BAD6: FB - XCE BAD7: AD 81 C0 - LDA $C081 ; read ROM; write RAM bank 2 BADA: AD 83 C0 - LDA $C083 ; read/write RAM bank 2 BADD: AD 83 C0 - LDA $C083 ; read/write RAM bank 2 BAE0: 9C 22 C0 - STZ $C022 BAE3: 20 B0 BF - JSR $BFB0 ; wait for VBL BAE6: A9 41 - LDA #$41 BAE8: 8D 29 C0 - STA $C029 BAEB: A9 00 - LDA #$00 BAED: 20 0C B0 - JSR $B00C ; require/prompt user to insert disk 1 BAF0: 18 - CLC BAF1: FB - XCE BAF2: C2 30 - REP #$30 BAF4: A9 30 A0 - LDA #$A030 BAF7: 8F FE AF 00 - STAL $00AFFE ; most of the main game code? BAFB: 20 00 B0 - JSR $B000 BAFE: 18 - CLC BAFF: FB - XCE BB00: C2 30 - REP #$30 BB02: A9 6A A0 - LDA #$A06A BB05: 8F FE AF 00 - STAL $00AFFE BB09: 20 00 B0 - JSR $B000 BB0C: 18 - CLC BB0D: FB - XCE BB0E: C2 30 - REP #$30 BB10: 22 9C 00 02 - JSL $02009C BB14: 4B - PHK BB15: AB - PLB BB16: 18 - CLC BB17: FB - XCE BB18: C2 30 - REP #$30 BB1A: A9 12 A2 - LDA #$A212 BB1D: 8D FE AF - STA $AFFE BB20: 20 00 B0 - JSR $B000 ; load some disk blocks ; ... BB8A: 18 - CLC BB8B: FB - XCE BB8C: C2 30 - REP #$30 BB8E: A2 00 00 - LDX #$0000 BB91: BF 00 20 E1 - LDA $E12000,X BB95: 9F 00 20 21 - STA $012000,X BB99: E8 - INX BB9A: E8 - INX BB9B: E0 00 7E - CPX #$7E00 BB9E: 90 F1 - BCC $BB91 BBA0: AF FF FF 05 - LDA $05FFFF BBA4: 29 FF 00 - AND #$00FF BBA7: C9 1E 00 - CMP #$001E BBAA: F0 03 - BEQ $BBAF ; jump to Main Menu if $05FFFF == $1E BBAC: 82 9D 00 - BRL $BC4C BBAF: A9 80 00 - LDA #$0080 BBB2: 0C 36 C0 - TSB $C036 BBB5: 22 06 00 02 - JSL $020006 BBB9: 4B - PHK BBBA: AB - PLB BBBB: 22 00 00 05 - JSL $050000 BBBF: 4B - PHK BBC0: AB - PLB BBC1: 38 - SEC BBC2: FB - XCE BBC3: 20 6B BF - JSR $BF6B BBC6: A9 80 - LDA #$80 BBC8: 0C 36 C0 - TSB $C036 BBCB: 18 - CLC BBCC: FB - XCE BBCD: C2 30 - REP #$30 BBCF: A9 00 00 - LDA #$0000 BBD2: 20 0C B0 - JSR $B00C ; require/prompt user to insert disk 1 BBD5: 18 - CLC BBD6: FB - XCE BBD7: C2 30 - REP #$30 BBD9: A9 EF A1 - LDA #$A1EF ; disk blocks: Main Menu BBDC: 8D FE AF - STA $AFFE BBDF: 38 - SEC BBE0: FB - XCE BBE1: 20 B0 BF - JSR $BFB0 BBE4: A9 41 - LDA #$41 BBE6: 8D 29 C0 - STA $C029 BBE9: A2 00 - LDX #$00 BBEB: BD F7 BB - LDA $BBF7,X BBEE: F0 13 - BEQ $BC03 BBF0: 9F 37 05 E0 - STA $E00537,X BBF4: E8 - INX BBF5: 80 F4 - BRA $BBEB ; this gets copied to $E00537 BBF7: - STR 'PLEASE WAIT' BC02: 00 - DB $00 BC03: A9 10 - LDA #$10 BC05: 8D 22 C0 - STA $C022 BC08: 20 00 B0 - JSR $B000 BC0B: 18 - CLC BC0C: FB - XCE BC0D: C2 30 - REP #$30 BC0F: A9 02 A2 - LDA #$A202 ; disk blocks: About Matt and Rob BC12: 8D FE AF - STA $AFFE BC15: 20 00 B0 - JSR $B000 ; load some more disk blocks BC18: 18 - CLC BC19: FB - XCE BC1A: E2 30 - SEP #30 BC1C: A2 00 - LDX #$00 BC1E: BD 2A BC - LDA $BC2A,X BC21: F0 13 - BEQ $BC36 BC23: 9F 37 05 E0 - STA $E00537,X BC27: E8 - INX BC28: 80 F4 - BRA $BC1E BC2A: - STR ' ' BC35: 00 - DB $00 BC36: A9 00 - LDA #$00 BC38: 8D 22 C0 - STA $C022 BC3B: 20 28 B1 - JSR $B128 BC3E: 20 03 08 - JSR $0803 BC41: E2 20 - SEP #$20 BC43: AD 00 C0 - LDA $C000 BC46: 2C 10 C0 - BIT $C010 BC49: 4C 00 80 - JMP $8000 ; jump to the $8000 we just loaded from $A1EF disk table BC4C: C9 09 00 - CMP #$0009 BC4F: D0 5C - BNE $BCAD BC51: C2 30 - REP #$30 BC53: A9 CA A1 - LDA #$A1CA BC56: 8D FE AF - STA $AFFE BC59: A9 02 00 - LDA #$0002 BC5C: 20 0C B0 - JSR $B00C ; require/prompt user to insert disk 3 BC5F: 20 7A B1 - JSR $B17A ; load the blocks from $A1CA table BC62: 20 CE BC - JSR $BCCE BC65: 18 - CLC BC66: FB - XCE BC67: C2 30 - REP #$30 BC69: A9 E1 A1 - LDA #$A1E8 BC6C: 8D FE AF - STA $AFFE BC6F: 20 7A B1 - JSR $B17A ; load the blocks from $A1E8 table BC72: 22 0C 00 02 - JSL $020000C BC76: 4B - PHK BC77: AB - PLB BC78: 18 - CLC BC79: FB - XCE BC7A: C2 30 - REP #$30 BC7C: A9 D1 A1 - LDA #$A1D1 BC7F: 8D FE AF - STA $AFFE BC82: 20 7A B1 - JSR $B17A ; load the blocks from $A1D1 table BC85: 18 - CLC BC86: FB - XCE BC87: C2 30 - REP #$30 BC89: A9 DB A1 - LDA #$A1DB BC8C: 8D FE AF - STA $AFFE BC8F: 20 7A B1 - JSR $B17A ; load the blocks from $A1DB table BCAD: 3A - DEC BCAE: 0A - ASL BCAF: AA - TAX BCB0: BD 10 A0 - LDA $A010,X ; $A010 - table of disk tables for each level? BCB3: 8D FE AF - STA $AFFE BCB6: 38 - SEC BCB7: FB - XCE BCB8: 20 B0 BF - JSR $BFB0 ; wait for VBL BCBB: A9 41 - LDA #$41 BCBD: 8D 29 C0 - STA $C029 BCC0: BD 20 A0 - LDA $A020,X ; $A020 - table of disk numbers for each level? BCC3: 20 0C B0 - JSR $B00C ; require/prompt user for the proper disk BCC6: 20 00 B0 - JSR $B000 ; load blocks from table BCC9: 20 CE BC - JSR $BCCE BCCC: 80 28 - BRA $BCF6 BD04: BD 00 A0 - LDA $A000,X BD07: 8D FE AF - STA $AFFE BD0A: 20 00 B0 - JSR $B000 ; load blocks from table BD0D: 38 - SEC BD0E: FB - XCE BD0F: 20 6B BF - JSR $BF6B ; ... BD75: 18 - CLC BD76: FB - XCE BF77: C2 30 - REP #$30 BD79: A2 00 00 - LDX #$0000 ; loop to clear screen BD7C: A9 A0 A0 - LDA #$A0A0 BD7F: 9F 00 04 00 - STAL $000400,X BD83: 9F 00 04 E0 - STAL $E00400,X BD87: E8 - INX BD88: E8 - INX BD89: E0 00 04 - CPX #$0400 BD8C: 90 F1 - BCC $BD7F BD8E: A9 00 00 - LDA #$0000 BD91: 20 0C B0 - JSR $B00C ; require/prompt user to insert disk 1 BD94: 18 - CLC BD95: FB - XCE BD96: C2 30 - REP #$30 BD98: A9 EF A1 - LDA #$A1EF ; disk blocks: Main Menu BD9B: 8D FE AF - STA $AFFE BD9E: 38 - SEC BD9F: FB - XCE BDA0: 20 B0 BF - JSR $BFB0 ; wait for VBL BDA3: A9 41 - LDA #$41 BDA5: 8D 29 C0 - STA $C029 BDA8: 20 00 B0 - JSR $B000 BDAB: 18 - CLC BDAC: FB - XCE BDAD: C2 30 - REP #$30 BDAF: A9 02 A2 - LDA #$A202 ; disk blocks: About Matt and Rob BDB2: 8D FE AF - STA $AFFE BDB5: 20 00 B0 - JSR $B000 BDB8: 18 - CLC BDB9: FB - XCE BDBA: E2 30 - SEP #$30 BDBC: A9 00 - LDA #$00 BDBE: 20 28 B1 - JSR $B128 BDC1: 38 - SEC BDC2: FB - XCE BDC3: 4C 00 80 - JMP $8000 ; ... BE29: A9 6D A2 - LDA #$A26D BE2C: 8D FE AF - STA $AFFE BE2F: 20 00 B0 - JSR $B000 BEA2: 18 - CLC BEA3: FB - XCE BEA4: E2 30 - SEP #$30 BEA6: 22 03 02 01 - JSL $010203 BEAA: 4B - PHK BEAB: AB - PLB BEAC: 18 - CLC BEAD: FB - XCE BEAE: C2 30 - REP #$30 BEB0: A9 74 A2 - LDA #$A274 BEB3: 8D FE AF - STA $AFFE BEB6: 20 00 B0 - JSR $B000 BF22: 4B - PHK BF23: AB - PLB BF24: 18 - CLC BF25: FB - XCE BF26: C2 30 - REP #$30 BF28: A9 00 00 - LDA #$0000 BF2B: 20 0C B0 - JSR $B00C ; require/prompt user to insert disk 1 BF2E: 18 - CLC BF2F: FB - XCE BF30: C2 30 - REP #$30 BF32: A9 EF A1 - LDA #$A1EF ; disk blocks: Main Menu BF35: 8D FE AF - STA $AFFE BF38: 38 - SEC BFE9: FB - XCE BF3A: 20 B0 BF - JSR $BFB0 BF3D: A9 41 - LDA #$41 BF3F: 8D 29 C0 - STA $C029 BF42: 20 00 B0 - JSR $B000 BF45: 18 - CLC BF46: FB - XCE BF47: C2 30 - REP #$30 BF49: A2 02 A2 - LDA #$A202 ; disk blocks: about Matt and Rob BF4C: 8D FE AF - STA $AFFE BF4F: 20 00 B0 - JSR $B000 BF52: 18 - CLC BF53: FB - XCE BF54: E2 30 - SEP #$30 BF56: A9 00 - LDA #$00 BF58: 20 28 B1 - JSR $B128 ; read High Scores to $00/1000 BF5B: 38 - SEC BF5C: FB - XCE BF5D: 20 03 08 - JSR $0803 BF60: E2 20 - SEP #$20 BF62: AD 00 C0 - LDA $C000 BF65: 2C 10 C0 - BIT $C010 BF68: 4C 00 80 - JMP $8000 BFB0: AD 19 C0 - LDA $C019 BFB3: A0 FB - BPL $BFB0 ; wait for VBL BFB5: 60 - RTS ; $1000 after second-stage boot loader ; block $0068 / 104 1000: 4C 0C 10 - JMP $100C 1003: 4C EE 10 - JMP $10EE 1006: 4C DC 12 - JMP $12DC 1009: 4C 23 13 - JMP $1323 ;... 10EE: A9 00 00 - LDY #$0000 10F1: 90 03 - BCC $10F6 10F3: A0 02 00 - LDY #$0002 10F6: 84 12 - STY $12 10F8: 0A - ASL 10F9: 85 0E - STA $0E 10FB: 8A - TXA 10FC: 0A - ASL 10FD: 0A - ASL 10FE: 0A - ASL 10FF: 0A - ASL 1100: 0A - ASL 1101: 85 1E - STA $1E 1103: 64 14 - STZ $14 1105: 64 16 - STZ $16 1107: A4 0E - LDY $0E 1109: B9 4F 13 - LDA $134F,Y 110C: 85 28 - STA $28 110E: 06 28 - ASL $28 1110: B0 0D - BCS $111F 1112: A5 16 - LDA $16 1114: 0A - ASL 1115: 85 10 - STA $10 1117: 65 1E - ADC $1E 1119: A8 - TAY 111A: A6 12 - LDX $12 111C: FC 4B 13 - JSR (134B,X) 111F: E6 16 - INC $16 1121: A5 16 - LDA $16 1123: C9 10 00 - CMP #$0010 1126: 90 E6 - BCC $110E 1128: 20 E9 11 - JSR $11E9 112B: E6 14 - INC $14 112D: A5 14 - LDA $14 112F: C9 10 00 - CMP #$0010 1132: 90 D1 - BCC $1105 1134: 60 - RTS 1135: 0A - ASL 1136: 0A - ASL 1137: 0A - ASL 1138: 0A - ASL 1139: 0A - ASL 113A: 85 1E - STA $1E 113C: 64 3C - STZ $3C 113E: A6 3C - LDX $3C 1140: BD 5B 13 - LDA $135B,X 1143: F0 10 - BEQ $1155 1145: 3A - DEC 1146: 0A - ASL 1147: 85 10 - STA $10 1149: 65 1E - ADC $1E 114B: A8 - TAY 114C: 20 62 11 - JSR $1162 114F: E6 3C - INC $3C 1151: E6 3C - INC $3C 1153: 80 E9 - BRA $113E 1155: E8 - INX 1156: E8 - INX 1157: BD 5B 13 - LDA $135B,X 115A: F0 05 - BEQ $1161 115C: 20 E9 11 - JSR $11E9 115F: 80 EE - BRA $114F 1161: 60 - RTS 1162: E2 30 - SEP #$30 1164: A6 10 - LDX $10 1166: BD 00 9E E1 - LDA $E19E00,X 116A: 85 0A - STA $0A 116C: 29 0F - AND #$0F 116E: 8D 77 11 - STA $1177 1171: B9 00 90 - LDA $9000,Y 1174: C9 0F - AND #$0F 1176: C9 00 - CMP #$00 1178: F0 02 - BEQ $117C 117A: E6 0A - INC $0A 117C: BF 00 9E E1 - LDA $E19E00,X 1180: 29 F0 - AND #$F0 1182: 8D 8B 11 - STA $118B 1185: B9 00 90 - LDA $9000,Y 1188: 29 F0 - AND #$F0 118A: C9 00 - CMP #$00 118C: F0 07 - BEQ $1195 118E: A5 0A - LDA #$0A 1190: 18 - CLC 1191: 69 10 - ADC #$10 1193: 85 0A - STA $0A 1195: BF 01 9E E1 - LDA $E19E01,X 1199: D9 01 90 - CMP $9001,Y ;... 1201: D0 F4 - BNE $11F7 1203: 24 00 - BIT $00 1205: 50 49 - BVC $1250 1207: E2 20 - SEP #$20 1209: 2C 00 C0 - BIT $C000 120C: 30 12 - BMI $1220 120E: AD 61 C0 - LDA $C061 1211: 0D 62 C0 - ORA $C062 1214: 30 0A - BMI $1220 1216: 2C 27 C0 - BIT $C027 1219: 10 35 - BPL $1250 121B: AD 24 C0 - LDA $C024 121E: 30 30 - BMI $1250 1220: A9 00 8F - LDA #$8F00 1223: C7 9D - CMP [$9D] 1225: E1 2C - SBC (2C,X) 1227: 10 C0 - BPL $11E9 1229: A9 60 8D - LDA #$8D60 122C: 03 12 - ORA $12,S 122E: C2 30 - REP #$30 1230: 38 - SEC 1231: A2 00 00 - LDX #$0000 1234: 8A - TXA 1235: 20 EE 10 - JSR $10EE 1238: A5 E0 - LDA $E0 123A: 8F 10 00 E1 - STA $E10010 123E: A5 E2 - LDA $E2 1240: 8F 12 00 E1 - STA $E10012 1244: 38 - SEC 1245: FB - XCE 1246: AD 82 C0 - LDA $C082 1249: F4 00 00 - PEA $0000 124C: 2B - PLD 124D: 4C 06 B0 - JMP $B006 ; start Main Menu ;... 12DC: 18 - CLC 12DD: FB - XCE 12DE: C2 30 - REP #$30 12E0: 0B - PHD 12E1: A9 00 0D - LDA #$0D00 12E4: 5B - TCD 12E5: A2 1E 00 - LDX #$001E 12E8: BF 00 9E E1 - LDA $E19E00,X 12EC: 9D 00 90 - STA $9000,X 12EF: A9 00 00 - LDA #$0000 12F2: 9F 00 9E E1 - STA $E19E00,X 12F6: CA - DEX 12F7: CA - DEX 12F8: 10 EE - BPL $12E8 12FA: E2 20 - SEP #$20 12FC: AD 03 12 - LDA $1203 12FF: 48 - PHA 1300: A9 C0 - LDA #$60 1302: 8D 03 12 - STA $1203 1305: AD 19 C0 - LDA $C019 1308: 10 FB - BPL $1305 ; wait for VBL 130A: A9 80 - LDA #$80 130C: 0C 29 C0 - TSB $C029 130F: C2 20 - REP #$20 1311: 18 - CLC 1312: A2 00 00 - LDX #$0000 1315: 8A - TXA 1316: 20 EE 10 - JSR $10EE 1319: E2 20 - SEP #$20 131B: 68 - PLA 131C: 8D 03 12 - STA $1203 131F: C2 30 - REP #$30 1321: 2B - PLD 1322: 60 - RTS 1323: 18 - CLC 1324: FB - XCE 1325: C2 30 - REP #$30 1327: 0B - PHD 1328: A0 00 0D - LDA #$0D00 132B: 5B - TCD 132C: E2 20 - SEP #$20 132E: AD 03 12 - LDA $1203 1331: 48 - PHA 1332: A9 60 - LDA #$60 1334: 8D 03 12 - STA $1203 1337: C2 20 - REP #$20 1339: 38 - SEC 133A: A2 00 - LDX #$0000 133D: 8A - TXA 133E: 20 EE 10 - JSR $10EE 1341: E2 20 - SEP #$20 1343: 68 - PLA 1344: 8D 03 12 - STA $1203 1347: C2 30 - REP #$30 1349: 2B - PLD 134A: 60 - RTS 134B: 62 11 - DW $1162 134D: B1 11 - DW $11B1 134F: 00 00 - DW $0000 1351: FF 03 - DW $03FF 3317: - STR ' PLEASE INSERT GAME DISK 1 IN DRIVE 1' 3368: - STR ' PLEASE INSERT GAME DISK 2 IN DRIVE 1' ; block $0120 - loads at $00/8000 8000: 4C 0F 80 - JMP $800F ;... 804E: A9 75 80 - LDA #$8075 8051: 8F 11 00 E1 - STA $E10011 8055: E2 30 - SEP #$30 8057: A9 00 - LDA #$00 8059: 8F 13 00 E1 - STA $E10013 ; E1/0010: JMP $008075 805D: 58 - CLI 805E: AF C7 9D E1 - LDA $E19DC7 8062: 09 40 - ORA #$40 8064: 8F C7 9D E1 - STA $E19DC7 8068: AF 23 C0 E0 - LDA $E0C023 806C: 09 02 - ORA #$02 806E: 8F 23 C0 E0 - STA $E0C023 8072: C2 30 - REP #$30 8074: 60 - RTS ; interrupt vector 8075: 48 - PHA 8076: EB - XBA 8077: 48 - PHA 8078: 18 - CLC 8079: FB - XCE 807A: DA - PHX 807B: 5A - PHY 807C: 08 - PHP 807D: E2 30 - SEP #$30 807F: AF 23 C0 E0 - LDA $E0C023 8083: 29 20 - AND #$20 8085: D0 03 - BNE $808A 8087: 4C D8 80 - JMP $80D8 ;... ; block $01C7 - loads at $00/8000 - Main Menu 8000: 4C 1A 80 - JMP $801A ;... 801A: 18 - CLC 801B: FB - XCE 801C: C2 31 - REP $30 801E: A9 FF 01 - LDA #$01FF 8021: 1B - TCS 8022: A9 00 00 - LDA #$0000 8025: 5B - TCD 8026: 20 2E 83 - JSR $832E 8029: 20 C0 81 - JSR $81C0 802C: C2 30 - REP #$30 802E: AD 07 80 - LDA $8007 8031: F0 F6 - BEQ $8029 8033: 20 62 81 - JSR $8162 8036: AD 11 80 - LDA $8011 8039: 30 10 - BMI $804B 803B: AD 11 80 - LDA $8011 803E: 0A - ASL 803F: AA - TAX 8040: FC 17 8A - JSR ($8A17,X) ; ass-uming this is a jump table for Main Menu actions 80CA: A2 38 89 - LDX #$8938 ; PLEASE INSERT YOUR CHARACTER DISK AND ENTER GAME #... 80CD: A9 20 32 - LDA #$3220 80D0: 20 06 08 - JSR $0806 ; print it 80D3: 20 51 85 - JSR $8551 80D6: 20 E9 84 - JSR $84E9 80D9: 20 BC 86 - JSR $86BC ; game number from keypress stored in $8015 80DC: 90 09 - BCC $80E7 80DE: 20 EE 84 - JSR $84EE 80E1: 20 87 85 - JSR $8587 80E4: 82 33 FF - BRL $801A 80E7: 20 EE 84 - JSR $84EE 80EA: A9 01 00 - LDA #$0100 80EC: 8D EE AF - STA $AFEE 80F0: 20 21 B0 - JSR $B021 ; disk # check 80F3: 18 - CLC 80F4: FB - XCE 80F5: C2 30 - REP #$30 80F7: AD 1C AF - LDA $AF1C 80FA: D0 06 - BNE $8102 ; branch if not player disk 80FC: AD 15 80 - LDA $8015 80FF: 82 19 2F - BRL $B01B ; start main game 8102: C9 02 00 - CMP #$0002 8105: F0 F5 - BEQ $80FC ; not player disk, but write succeeded? 8107: 20 DA 84 - JSR $84DA 810A: A2 94 89 - LDX #$8994 ; YOU CANNOT RESUME A GAME FROM THIS NON-CHARACTER DISK 810D: A9 20 32 - LDA #$3220 8110: 20 06 08 - JSR $0806 ; print message 8113: 20 51 85 - JSR $8551 8116: 20 E9 84 - JSR $84E9 8119: 20 F3 86 - JSR $86F3 ; get keypress, with carry set unless value is $8D (enter?) ; block $01C8 - loads at $00/8200 - Main Menu ; block $01C9 - loads at $00/8400 - Main Menu 843D: A2 00 02 - LDX #$0200 ; wait a bit 8440: DA - PHX 8441: CA - DEX 8442: D0 FD - BNE $8441 8444: FA - PLX 8445: CA - DEX 8446: D0 F8 - BNE $8440 8448: 20 57 84 - JSR $8457 ; black-out palettes (data bank is $E1) 844B: 4B - PHK 844C: AB - PLB 844D: A9 01 00 - LDA #$0001 ; bank number? ($1 would be Main Menu screen) 8450: 8D 03 80 - STA $8003 8453: 38 - SEC 8454: 4C E3 87 - JMP $87E3 ; palette fade in (carry set) or out (carry unset) ; black-out palettes (data bank is $E1) 8457: A2 FE 00 - LDX #$00FE 845A: 9E 00 9D - STZ $9D00,X 845D: CA - DEX 845E: CA - DEX 845F: 10 F9 - BPL $845A 8461: 60 - RTS 8551: 2C 18 C0 - BIT $C018 8554: 30 FB - BMI $8551 8556: 2C 18 C0 - BIT $C018 8559: 10 FB - BPL $8556 855B: 60 - RTS ; restore Main Menu screen 8587: A9 FF 7C - LDA #$7CFF 858A: A2 00 20 - LDX #$2000 858D: 9B - TXY 858E: 54 E1 01 - MVN $E1,$01 8591: 4B - PHK 8592: AB - PLB 8593: 60 - RTS 8594: 20 A1 A6 - JSR $86A1 ; set data bank to $E1 8597: 20 3D 84 - JSR $843D ; fade-in a picture 859A: A9 FF 7C - LDA #$7CFF 859D: A2 00 00 - LDX #$0000 85A0: A0 00 00 - LDY #$0000 85A3: 54 E1 05 - MVN $E1,$05 85A6: 4B - PHK 85A7: AB - PLB 85A8: 20 BC 85 - JSR $85BC ; animate some SHR data? 85AB: 18 - CLC 85AC: 20 BC 87 - JSR $87BC 85AF: 20 0B 87 - JSR $870B 85B2: 38 - SEC 85B3: 20 BC 87 - JSR $87BC 85B6: 20 BC 85 - JSR $85BC ; animate some SHR data? 85B9: 4C 87 85 - JMP $8587 ; restore Main Menu screen and return ; animate some SHR data? 85BC: A2 1E 00 - LDX #$001E 85BF: BC 1D 8A - LDY $8A1D,X 85C2: BD 7D 8A - LDA $8A7D,X 85C5: 9D 1D 8A - STA $8A1D,X 85C8: 98 - TYA 85C9: 9D 7D 8A - STA $8A7D,X 85CC: CA - DEX 85CD: CA - DEX 85CE: 10 EF - BPL $87BF 85D0: 60 - RTS 85D1: 20 A2 86 - JSR $86A1 ; set data bank to $E1 85D4: 20 3D 84 - JSR $843D ; fade-in a picture 85D7: A9 FF 7C - LDA #$7CFF 85DA: A2 00 7D - LDX #$7D00 85DD: A0 00 20 - LDY #$2000 85E0: 54 E1 05 - MVN $E1,$05 85E3: 4B - PHK 85E4: AB - PLB 85E5: 20 F9 85 - JSR $85F9 ; animate some SHR data? 85E8: 18 - CLC 85E9: 20 BC 87 - JSR $87BC 85EC: 20 0B 87 - JSR $870B 85EF: 38 - SEC 85F0: 20 BC 87 - JSR $87BC 85F3: 20 F9 85 - JSR $85F9 ; animate some SHR data? 85F6: 4C 87 85 - JMP $8587 ; restore Main Menu screen and return ; animate some SHR data? 85F9: A2 1E 00 - LDX #$001E 85FC: BC 1D 8A - LDY $8A1D,X 85FF: BD 5D 8A - LDA $8A5D,X ; block $01CA - loads at $00/8600 - Main Menu 8602: 9D 1D 8A - STA $8A1D,X 8605: 98 - TYA 8606: 9D 5D 8A - STA $8A5D,X 8609: CA - DEX 860A: CA - DEX 860B: 10 EF - BPL $85FC 800D: 60 - RTS 860E: 20 A2 86 - JSR $86A1 ; set data bank to $E1 8611: 20 3D 84 - JSR $843D ; fade-in a picture 8614: 20 DA 84 - JSR $84DA 8617: A9 DE 00 - LDA #$DE00 861A: A2 D0 89 - LDX #$89D0 ; 'HI MOM! HI DAVID'...etc string 861D: 20 06 08 - JSR $0806 ; display text string 8620: 20 E9 84 - JSR $84E9 8623: 20 EE 84 - JSR $84EE 8626: A2 08 00 - LDX #$0008 8629: DA - PHX 862A: CA - DEX 862B: D0 FD - BNE $862A 862D: FA - PLX 862E: CA - DEX 862F: D0 F8 - BNE $8629 8631: 20 E9 84 - JSR $84E9 8634: 2C FF BF - BIT $BFFF 8637: 30 02 - BMI $863B 8639: 80 E8 - BRA $8623 ; set data bank to $E1 86A1: F4 E1 E1 - PEA $E1E1 86A4: AB - PLB 86A5: AB - PLB 86A6: 60 - RTS ; palette fade in (carry set) or out (carry unset) 87E3: 08 - PHP 87E4: C2 30 - REP #$30 87E6: A0 0A 88 - LDY #$880A 87E9: 90 03 - BCC $87EE 87EB: A0 58 88 - LDY #$8858 87EE: 8C F8 87 - STY $87F8 87F1: E2 30 - SEP #$30 87F3: A0 00 - LDY #$00 87F5: A2 00 - LDX #$00 87F7: 20 FF FF - JSR $FFFF ; JSR $880A or 8858 87FA: E8 - INX 87FB: E8 - INX 87FC: E0 20 - CPX #$20 98FE: 90 F7 - BCC $8757 ; block $01CB - loads at $00/8800 - Main Menu 88A6: - STR 'MOVE YOUR JOYSTICK TO THE UPPER LEFT\n HAND CORNER AND PRESS BUTTON ONE' 88ED: 00 - DB $00 88EE: - STR 'MOVE YOUR JOYSTICK TO THE LOWER RIGHT\n HAND CORNER AND PRESS BUTTON ZERO' 8937: 00 - DB $00 8938: - STR 'PLEASE INSERT YOUR CHARACTER DISK\nAND ENTER THE GAME NUMBER YOU WOULD\nlike to resume (1-8):' 8993: 00 - DB $00 8994: - STR 'YOU CAN NOT RESUME A GAME FROM\nFROM THIS NON-CHARACTER DISK' 89CF: 00 - DB $00 89D0: - STR 'HI MOM!\n\nHI DAVID\n\n\n\n\nTHIS IS TODD DAUGHERTY' 89FC: 00 - DB $00 ; block $01CC - loads at $00/8A00 - Main Menu 8A17: 94 85 - DW $8594 8A19: D1 85 - DW $85D1 8A1B: 0E 86 - DW $860E ; "HI MOM! HI DAVID" .. easter egg ; block $01CD - loads at $00/0800 0800: 4C 20 08 - JMP $0820 0803: 4C 75 08 - JMP $0875 0806: 4C 08 0B - JMP $0B08 ; display text string 0809: 4C B1 0B - JMP $0BB1 080C: 4C 4E 0B - JMP $0B4E ; TODO 080F: 4C E7 0B - JMP $0BE7 ; TODO 0827: 20 25 0C - JSR $0C25 082A: 20 67 0C - JSR $0C67 0909: 20 18 B0 - JSR $B018 ; write high scores 090C: 18 - CLC 090D: FB - XCE 090E: C2 30 - REP #$30 0910: 4C 27 08 - JMP $0827 ; block $01CE - loads at $00/0A00 ; display text string 0B08: 8D 14 08 - STA $0814 0B0B: 8D 16 08 - STA $0816 0B0E: 8E 15 0B - STX $0B15 0B11: A0 00 00 - LDY #$0000 0B14: B9 FF FF - LDA $FFFF,Y ; overwritten by X register above 0B17: 29 7F 00 - AND #$007F 0B1A: F0 31 - BEQ $0B4D 0B1C: C9 21 00 - CMP #$0021 0B1F: B0 21 - BCS $0B42 ; block $01CF - loads at $00/0C00 0C67: A9 23 46 - LDA #$4623 0C6A: A2 00 10 - LDX #$1000 0C6D: 20 08 0B - JSR $0B08 ; block $01D0 - loads at $00/0E00? ; block $0340 - org $8000 (main game) sets $E1004A ... LDA #$03 STA $03F2 LDA #$80 STA $03F3 EOR #$A5 STA $03F4 ; block $0342 - org $8800 (main game) 88DE: 20 5F 8A - JSR $8A5F 88E1: 20 51 8A - JSR $8A51 88E4: A9 8B 25 - LDA #$258B 88E7: A2 F9 9C - LDX #$8CF9 ; "PLEASE INSERT YOUR CHARACTER DISK\nAND ENTER THE GAME NUMBER THAT\nYOU WOULD LIKE TO SAVE (1-8):" 88EA: 20 C9 8A - JSR $8AC9 88ED: 20 02 8A - JSR $8A02 ; keypress value stored in $880F 88F0: B0 33 - BCS $8925 88F2: 20 21 B0 - JSR $B021 ; check disk id, store in $AF1C 88F5: 20 CF 89 - JSR $89CF 88F8: AD 1C AF - LDA $AF1C 88FB: D0 17 - BNE $8914 88FD: AD 0F 88 - LDA $880F 8900: 20 1E B0 - JSR $B01E ; save game data to disk, A=savegame number 8903: 20 CF 89 - JSR $89CF 8906: A9 06 4B - LDA #$4B06 8909: A2 58 8D - LDX #$8D58 ; "* NOTE:YOUR GAME HAS BEEN SAVED AT\n THE BEGINNING OF THIS LEVEL.\n" etc 890C: 20 C9 8A - JSR $8AC9 890F: 20 39 8A - JSR $8A39 8912: 38 - SEC 8913: 60 - RTS 8914: C9 02 00 - CMP #$0002 8917: F0 0E - BEQ $8927 8919: A9 90 48 - LDA #$4890 891C: A2 08 8B - LDX #$8E08 891F: 20 C9 8A - JSR $8AC9 8922: 20 39 8A - JSR $8A39 8925: 18 - CLC 8926: 60 - RTS 8927: A9 90 48 - LDA #$4890 892A: A2 C5 8F - LDX #$8FC5 ; "THIS DISK IS WRITE PROTECTED" 892D: 20 C9 8A - JSR $8AC9 8930: 20 39 8A - JSR $8A39 8933: 18 - CLC 8934: 60 - RTS 8935: 20 5F 8A - JSR $8A5F 8938: 20 51 8A - JSR $8A51 893B: A9 8A 25 - LDA #$258A 893E: A2 83 8E - LDA #$8E83 ; "PLEASE INSERT YOUR CHARACTER DISK\nAND ENTER THE GAME NUMBER YOU THAT\nWOULD LIKE TO RESUME (1-8):" 8941: 20 C9 8A - JSR $8AC9 8944: 20 02 8A - JSR $8A02 ; keypress value stored in $880F 8947: B0 25 - BCS $896E 8949: 20 21 B0 - JSR $B021 ; check disk id, store it in $AF1C 894C: 20 CF 89 - JSR $89CF 894F: AD 1C AF - LDA $AF1C 8952: D0 09 - BNE $895D 8954: 9C EE AF - STZ $AFEE 8957: AD 0F 88 - LDA $880F 895A: 4C 1B B0 - JMP $B01B ; start main game, A=savegame number 895D: C9 02 00 - CMP #$0002 8960: F0 F2 - BEQ $8954 8962: A9 94 48 - LDA #$4894 8965: A2 E4 4E - LDX #$8EE4 ; "SORRY, THIS IS AN INVALID\nCHARACTER DISK" 8968: 20 C9 8A - JSR $8AC9 896B: 20 39 8A - JSR $8A39 896E: 18 - CLC 896F: 60 - RTS 8970: 20 5F 8A - JSR $8A5F 8973: 20 51 8A - JSR $8A51 8976: A9 47 1F - LDA #$1F47 8979: A2 0D 8F - LDX #$8F0D ; "PLEASE INSERT A BLANK DISK IN DRIVE\nONE AND PRESS RETURN TO CONTINUE" 897C: 20 C9 8A - JSR $8AC9 897F: A9 A9 5A - LDA #$5AA9 8982: A2 5E 8F - LDX #$8F53 ; "* NOTE: THIS WILL DESTROY ALL DATA ON THE DISK" 8985: 20 C9 8A - JSR $8AC9 8988: 20 39 8A - JSR $8A39 ; get keypress 898B: B0 3E - BCS $89CB 898D: 20 24 B0 - JSR $B024 ; get disk id number in $AF1C 8990: 20 CF 89 - JSR $89CF 8993: AD 1C AF - LDA $AF1C 8996: D0 14 - BNE $89AC ; branch if not Disk 4/writeable 8998: 20 27 B0 - JSR $B027 ; format player disk 899B: 20 CF 89 - JSR $89CF 899E: A9 9A 3E - LDA #$3E9A 89A1: A2 A8 8F - LDX #$8F8A ; "CHARACTER DISK FORMATTED" 89A4: 20 C9 8A - JSR $8AC9 89A7: 20 39 8A - JSR $8A39 89AA: 18 - CLC 89AB: 60 - RTS 89AC: C9 02 00 - CMP #$0002 89AF: F0 0E - BEQ $89BF 89B1: A9 8A 3E - LDA #$3E8A 89B4: A2 A3 8F - LDX #$8FA3 ; "YOU MAY NOT FORMAT A PROGRAM DISK" 89B7: 20 C9 8A - JSR $8AC9 89BA: 20 39 8A - JSR $8A39 89BD: 18 - CLC 89BE: 60 - RTS 89BF: A9 95 3E - LDA #$3E95 89C2: A2 C5 8F - LDX #$8FC5 ; "THIS DISK IS WRITE PROTECTED" 89C5: 20 C9 8A - JSR $8AC9 89C8: 20 39 8A - JSR $8A39 89CB: 18 - CLC 89CC: 60 - RTS 89CD: 38 - SEC 89CE: 60 - RTS 89CF: 18 - CLC 89D0: FB - XCE 89D1: C2 31 - REP #$31 89D3: 60 - RTS ; block $0343 - org $8A00 (main game) 8A54: A9 58 10 - LDA #$1058 8A57: A2 98 8C - LDX #$8C98 ; "ALIEN MIND CONTROL PANEL\n%%%%%%%%" etc... the whole menu 8A5A: 20 C9 8A - JSR $8AC9 8A5D: 28 - PLP 8A5E: 60 - RTS ; block $0344 - control panel text ; block $0345 - more control panel text ; ; results of misc block browsing: ; ; block $00EB - looks like sound driver ; block $02CE - high scores + joystick calibration text ; block $02D0 - has a lot of sound code loads at $02/0000 ; block $02D1 - more sound code ; block $02D3 - org $02/3000? ; block $02D6 - stack animation routines? ; block $02E2 ; block $02E5 code to render from $0800 starting at $C2? ; block $02EB - org $00/0800? ; block $02EE - org $xx/0200? ; block $032E - org $xx/D000? ; block $032F - unrolled scrolling loop? ; block $0338 - org $xx/5000? ; block $0339 - org $5200 ; block $033A - org $5400 ; block $033B - org $5600 ; block $03F2 ; block $04A3 ; block $04AD (1197) ; block $0542 (1346) ; block $05F5 (1525)