; 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 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 20A4: 20 06 10 - JSR $1006 ; $A000 relocated code ; $B000 relocated code ; ... 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 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 ; ... 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 ; ... ; 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 ; ... ; a 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 BA51: 06 - DB $06 ; #pages to load BA52: 10 00 - DW $0010 ; memory page $001000 BA53: 00 - DB $00 ; stop ; ... BFB0: AD 19 C0 - LDA $C019 BFB3: A0 FB - BPL $BFB0 ; wait for VBL BFB5: 60 - RTS