Disassembly of Master Tube Host Code in Utils ROM with MOS 3.50 =============================================================== UTILS ROM HEADER ================ 8003 4C 8D 9D L.. JMP &9D8D SERVICE HANDLER =============== 9D8D C9 FE I~ CMP #&FE 9D8F 90 56 .V BCC &9DE7 Jump if not Tube call 9D91 D0 14 P. BNE &9DA7 Jump with &FF ServFE - Tube Postinit ---------------------- 9D93 C0 00 @. CPY #&00 Y=0 if no Tube 9D95 F0 50 pP BEQ &9DE7 Exit with no Tube || Character set already exploded Read startup banner from Tube ----------------------------- 9D97 2C E0 FE ,`~ BIT &FEE0 Check Tube Register 1 status 9D9A 10 FB .{ BPL &9D97 Loop until data present 9D9C AD E1 FE -a~ LDA &FEE1 Fetch data from Tube Register 1 9D9F F0 44 pD BEQ &9DE5 Data=0, jump to claim call 9DA1 20 EE FF n. JSR &FFEE Print the character 9DA4 4C 97 9D L.. JMP &9D97 Loop back for another ServFF - Tube Preinit --------------------- 9DA7 A9 82 ). LDA #&82 9DA9 8D 20 02 . . STA &0220 9DAC A9 06 ). LDA #&06 9DAE 8D 21 02 .!. STA &0221 Point EVNTV to &0682 9DB1 A9 16 ). LDA #&16 9DB3 8D 02 02 ... STA &0202 9DB6 A9 00 ). LDA #&00 9DB8 8D 03 02 ... STA &0203 Point BRKV to &0016 9DBB A9 8E ). LDA #&8E 9DBD 8D E0 FE .`~ STA &FEE0 Enable NMI on R1, IRQ on R4, IRQ on R1 9DC0 A0 00 . LDY #&00 Initialise code at &0400-&06FF 9DC2 B9 87 AB 9.+ LDA &AB87,Y by copying code from &AB87-&AC86 9DC5 99 00 04 ... STA &0400,Y 9DC8 B9 7C AC 9|, LDA &AC7C,Y and &AC7C-AE7D 9DCB 99 00 05 ... STA &0500,Y 9DCE B9 7C AD 9|- LDA &AD7C,Y 9DD1 99 00 06 ... STA &0600,Y 9DD4 88 . DEY 9DD5 D0 EB Pk BNE &9DC2 Loop to copy code 9DD7 20 1F 04 .. JSR &041F Set Tube 'free' and no owner 9DDA A2 41 "A LDX #&41 Initialise code at &0016-&0057 9DDC BD 46 AB =F+ LDA &AB46,X by copying from &AB46-&AB81 9DDF 9D 16 00 ... STA &0016,X 9DE2 CA J DEX 9DE3 10 F7 .w BPL &9DDC Loop to copy code 9DE5 A9 00 ). LDA #&00 Claim servic call Continue service handler ------------------------ 9DE7 C9 12 I. CMP #&12 Code at &AB46 copied to &0016 ============================= 0000 EQUS 18 Control block for MOS calls 0012 00 00 .. EQUW &0000 Pointer to Tube transfer block 0014 00 . EQUB &00 Tube status 0015 00 . EQUB &00 Tube owner BRK handler ----------- 0016 A9 FF ). LDA #&FF 0018 20 73 06 s. JSR &0673 Send &FF to R4 to interupt CoPro 001B AD E3 FE -c~ LDA &FEE3 Get ACK byte from CoPro 001E A9 00 ). LDA #&00 0020 20 68 06 h. JSR &0668 Send &00 to R2 to specify ERROR 0023 A8 ( TAY Point Y to start of error block 0024 B1 FD 1} LDA (&FD),Y Get error number 0026 20 68 06 h. JSR &0668 Send via R2 0029 C8 H INY Point to next character 002A B1 FD 1} LDA (&FD),Y Get error string character 002C 20 68 06 h. JSR &0668 Send via R2 002F AA * TAX 0030 D0 F7 Pw BNE &0029 Loop until terminating &00 sent Idle startup ------------ 0032 A2 FF ". LDX #&FF 0034 9A . TXS Clear stack 0035 58 X CLI Enable IRQs Tube idle loop -------------- 0036 2C E0 FE ,`~ BIT &FEE0 Is there character in R1? 0039 10 06 .. BPL &0041 No, check for command in R2 003B AD E1 FE -a~ LDA &FEE1 Get character from R1 003E 20 EE FF n. JSR &FFEE Send to VDU drivers 0041 2C E2 FE ,b~ BIT &FEE2 Is there command in R2? 0044 10 F0 .p BPL &0036 No, loop back 0046 2C E0 FE ,`~ BIT &FEE0 Check again for character in R1 0049 30 F0 0p BMI &003B Jump to catch this character 004B AE E3 FE .c~ LDX &FEE3 Get command from R2 004E 86 51 .Q STX &51 Use as index into &0500 0050 6C 00 05 l.. JMP (&0500) Jump to command routine 0053 00 80 00 00 .... EQUD &00800000 Code at &AB6E-&AC6D and &AC65-&AE64 copied to &0400-&06FF ========================================================= Copy language across the Tube ----------------------------- 0400 4C C1 04 LA. JMP &04C1 Copy Escape state across the Tube --------------------------------- 0403 4C 7C 06 L|. JMP &067C Tube Transfer/Claim/Release --------------------------- 0406 C9 80 I. CMP #&80 Claim/Release/Action via Tube 0408 90 29 .) BCC &0433 If <&80, data transfer action 040A C9 C0 I@ CMP #&C0 Is it claim or release? 040C B0 18 0. BCS &0426 040E 09 40 .@ ORA #&40 0410 C5 15 E. CMP &15 0412 D0 1E P. BNE &0432 0414 08 . PHP 0415 78 x SEI 0416 A9 05 ). LDA #&05 0418 20 73 06 s. JSR &0673 041B 20 71 06 q. JSR &0671 041E 28 ( PLP Clear Tube status and owner --------------------------- 041F A9 80 ). LDA #&80 0421 85 15 .. STA &15 Set Tube ID to 'unclaimed' 0423 85 14 .. STA &14 Set Tube status to 'free' 0425 60 ` RTS Claim Tube ---------- 0426 06 14 .. ASL &14 0428 B0 06 0. BCS &0430 042A C5 15 E. CMP &15 042C F0 04 p. BEQ &0432 042E 18 . CLC 042F 60 ` RTS 0430 85 15 .. STA &15 0432 60 ` RTS Tube data transfer ------------------ 0433 08 . PHP 0434 78 x SEI 0435 84 13 .. STY &13 0437 86 12 .. STX &12 0439 20 73 06 s. JSR &0673 043C AA * TAX 043D A0 03 . LDY #&03 043F 20 71 06 q. JSR &0671 0442 B1 12 1. LDA (&12),Y 0444 20 73 06 s. JSR &0673 0447 88 . DEY 0448 10 F8 .x BPL &0442 044A A0 18 . LDY #&18 044C 8C E0 FE .`~ STY &FEE0 044F BD 18 05 =.. LDA &0518,X 0452 8D E0 FE .`~ STA &FEE0 0455 4A J LSR A 0456 4A J LSR A 0457 90 06 .. BCC &045F 0459 2C E5 FE ,e~ BIT &FEE5 045C 2C E5 FE ,e~ BIT &FEE5 045F 20 73 06 s. JSR &0673 0462 2C E6 FE ,f~ BIT &FEE6 0465 50 FB P{ BVC &0462 0467 B0 0D 0. BCS &0476 0469 E0 04 `. CPX #&04 046B D0 11 P. BNE &047E 046D 20 14 04 .. JSR &0414 0470 20 68 06 h. JSR &0668 0473 4C 32 00 L2. JMP &0032 0476 4A J LSR A 0477 90 05 .. BCC &047E 0479 A0 88 . LDY #&88 047B 8C E0 FE .`~ STY &FEE0 047E 28 ( PLP 047F 60 ` RTS Language entered at BREAK ------------------------- 0480 AE 8D 02 ... LDX &028D | Get last break type 0483 F0 E8 ph BEQ &046D If Soft Break, release Tube, send &80 via R2 and enter Idle loop The current language is not copied across the Tube on soft Break, only on Power-On Break and Hard Break, or when entered explicitly with OSBYTE 142. Language entered with OSBYTE 142, or on Hard Break -------------------------------------------------- 0485 A9 FF ). LDA #&FF 0487 20 06 04 .. JSR &0406 Claim Tube with ID=&3F 048A 90 F9 .y BCC &0485 Loop until Tube available 048C 20 C8 04 H. JSR &04C8 Find address to copy language to 048F 20 FA F9 zy JSR &F9FA Copy one page from ROM to &0700, relocating if needed 0492 08 . PHP | Save IRQ status 0493 78 x SEI | Disable IRQs 0494 A9 07 ). LDA #&07 Start I/O->CoPro transfer 256 bytes 0496 20 BA 04 :. JSR &04BA Use Tube address as &53-&56 0499 A0 00 . LDY #&00 049B B9 00 07 9.. LDA &0700,Y Get byte from transfer buffer 049E 8D E5 FE .e~ STA &FEE5 Send to CoPro via R3 04A1 48 H PHA Delay for a while 04A2 68 h PLA 04A3 C8 H INY 04A4 D0 F5 Pu BNE &049B Loop for 256 byte 04A6 28 ( PLP | Restore IRQs 04A7 E6 54 fT INC &54 Update Tube address 04A9 D0 06 P. BNE &04B1 04AB E6 55 fU INC &55 04AD D0 02 P. BNE &04B1 04AF E6 56 fV INC &56 Update source address 04B1 24 01 $. BIT &01 Check bit 6 of source high byte 04B3 50 DA PZ BVC &048F Loop until source=&C000 04B5 20 02 FB .{ JSR &FB02 Find start address ROM copied to 04B8 A9 04 ). LDA #&04 Execute code in CoPro, finished by sending &80 to Copro in R2 Start a Tube transfer with address block at &0053 ------------------------------------------------- 04BA A0 00 . LDY #&00 04BC A2 53 "S LDX #&53 Point to Tube control block 04BE 4C 06 04 L.. JMP &0406 Jump to do a data transfer Copy language across Tube ------------------------- On entry, A=1 - enter language, CLC=Break, SEC=OSBYTE 142 A=0 - no language found at Break 04C1 58 X CLI 04C2 B0 C1 0A BCS &0485 04C4 D0 BA P: BNE &0480 04C6 80 62 .b BRA &052A Set Tube address to destination to copy language to --------------------------------------------------- Also sets source address at &00/&01 to &80xx 04C8 A9 80 ). LDA #&80 04CA 85 54 .T STA &54 Set Tube address to &xxxx80xx 04CC 85 01 .. STA &01 Set source address to &80xx 04CE A9 20 ) LDA #&20 04D0 2D 06 80 -.. AND &8006 Check relocation bit in ROM type 04D3 A8 ( TAY If no relocation address, A=0, Y=0 04D4 8C 53 00 .S. STY &0053 | Set Tube address to &xxxx8000 04D7 F0 19 p. BEQ &04F2 Jump forward with no relocation 04D9 AE 07 80 ... LDX &8007 Get offset to ROM copyright 04DC E8 h INX 04DD BD 00 80 =.. LDA &8000,X Skip past copyright message 04E0 D0 FA Pz BNE &04DC Loop until terminating zero byte 04E2 BD 01 80 =.. LDA &8001,X Get relocation address from after 04E5 85 53 .S STA &53 copyright message 04E7 BD 02 80 =.. LDA &8002,X 04EA 85 54 .T STA &54 04EC BC 03 80 <.. LDY &8003,X Get two high bytes to Y and A 04EF BD 04 80 =.. LDA &8004,X 04F2 4C 22 FA L"z JMP &FA22 Relocation workspace ----------- 04F5 35 5 04F6 05 . 04F7 89 . 04F8 05 . 04F9 E0 ` 04FA 05 . 04FB F1 q 04FC 05 . 04FD 0D 06 3C ..< ORA &3C06 Tube R2 command entry block --------------------------- 0500 35 05 5. EQUW &0535 RDCH 0502 89 05 .. BIT #&05 0504 E0 05 `. CPX #&05 0506 F1 05 q. SBC (&05),Y 0508 0D 06 3C ..< ORA &3C06 050B 06 59 .Y ASL &59 050D 05 2C ., ORA &2C 050F 05 20 . ORA &20 0510 20 05 . EQUW &0520 BPUT 0512 3F 05 ?. EQUW &053F FIND 0511 05 3F .? ORA &3F 0513 05 B4 .4 ORA &B4 0515 05 9B .. ORA &9B 0517 05 86 .. ORA &86 0519 88 . DEY 051A 96 98 .. STX &98,Y 051C 18 . CLC 051D 18 . CLC 051E 82 . EQUB &82 051F 18 . CLC BPUT ---- 0520 20 A8 06 (. JSR &06A8 0523 A8 ( TAY 0524 20 A8 06 (. JSR &06A8 0527 20 D4 FF T. JSR &FFD4 052A 80 63 .c BRA &058F BGET ---- 052C 20 A8 06 (. JSR &06A8 052F A8 ( TAY 0530 20 D7 FF W. JSR &FFD7 0533 80 03 .. BRA &0538 RDCH ---- 0535 20 E0 FF `. JSR &FFE0 0538 6A j ROR A 0539 20 68 06 h. JSR &0668 053C 2A * ROL A 053D 80 52 .R BRA &0591 FIND ---- 053F 20 A8 06 (. JSR &06A8 0542 F0 0A p. BEQ &054E 0544 48 H PHA 0545 20 75 05 u. JSR &0575 0548 68 h PLA 0549 20 CE FF N. JSR &FFCE 054C 80 43 .C BRA &0591 CLOSE ----- 054E 20 A8 06 (. JSR &06A8 0551 A8 ( TAY 0552 A9 00 ). LDA #&00 0554 20 CE FF N. JSR &FFCE 0557 80 36 .6 BRA &058F ARGS ---- 0559 20 A8 06 (. JSR &06A8 055C A8 ( TAY 055D A2 04 ". LDX #&04 055F 20 9A 06 .. JSR &069A 0562 20 DA FF Z. JSR &FFDA 0565 20 68 06 h. JSR &0668 0568 A2 03 ". LDX #&03 056A BD 00 00 =.. LDA &0000,X 056D 20 68 06 h. JSR &0668 0570 CA J DEX 0571 10 F7 .w BPL &056A 0573 80 24 .$ BRA &0599 Read a string via R2 into string buffer at &0700 ------------------------------------------------ 0575 A2 00 ". LDX #&00 0577 A0 00 . LDY #&00 0579 20 A8 06 (. JSR &06A8 057C 99 00 07 ... STA &0700,Y 057F C8 H INY 0580 F0 04 p. BEQ &0586 0582 C9 0D I. CMP #&0D 0584 D0 F3 Ps BNE &0579 0586 A0 07 . LDY #&07 0588 60 ` RTS CLI --- 0589 20 75 05 u. JSR &0575 Read string to &0700 058C 20 F7 FF w. JSR OSCLI Execute the command If the command returns here, the CoPro will get &7F as an acknowledgement. The CoPro also gets sent a &7F byte if there is no language available on Break. If calling OSCLI results in code being run in the CoPro or a language being copied over and entered, the CoPro will get an &80 acknowledgement elsewhere. Send &7F acknowledgement byte via R2 and return to idle loop ------------------------------------------------------------ 058F A9 7F ). LDA #&7F Send &7F to CoPro Send byte in A via R2 and return to Tube idle loop -------------------------------------------------- 0591 2C E2 FE ,b~ BIT &FEE2 0594 50 FB P{ BVC &0591 0596 8D E3 FE .c~ STA &FEE3 0599 80 53 .S BRA &05EE GBPB ---- 059B A2 0D ". LDX #&0D 059D 20 9A 06 .. JSR &069A 05A0 A0 00 . LDY #&00 05A2 20 D1 FF Q. JSR &FFD1 05A5 48 H PHA 05A6 A2 0C ". LDX #&0C 05A8 BD 00 00 =.. LDA &0000,X 05AB 20 68 06 h. JSR &0668 05AE CA J DEX 05AF 10 F7 .w BPL &05A8 05B1 68 h PLA 05B2 80 84 .. BRA &0538 FILE ---- 05B4 A2 10 ". LDX #&10 05B6 20 A8 06 (. JSR &06A8 05B9 9D 01 00 ... STA &0001,X 05BC CA J DEX 05BD D0 F7 Pw BNE &05B6 05BF 20 75 05 u. JSR &0575 05C2 8E 00 00 ... STX &0000 05C5 8C 01 00 ... STY &0001 05C8 A0 00 . LDY #&00 05CA 20 A8 06 (. JSR &06A8 05CD 20 DD FF ]. JSR &FFDD 05D0 20 68 06 h. JSR &0668 05D3 A2 10 ". LDX #&10 05D5 BD 01 00 =.. LDA &0001,X 05D8 20 68 06 h. JSR &0668 05DB CA J DEX 05DC D0 F7 Pw BNE &05D5 05DE 80 0E .. BRA &05EE BYTELO - OSBYTEs &00-&7F ------------------------ 05E0 20 A4 06 $. JSR &06A4 05E3 20 F4 FF t. JSR &FFF4 05E6 2C E2 FE ,b~ BIT &FEE2 05E9 50 FB P{ BVC &05E6 05EB 8E E3 FE .c~ STX &FEE3 05EE 4C 36 00 L6. JMP &0036 BYTEHI - OSBYTE &80-&FF ----------------------- 05F1 20 A4 06 $. JSR &06A4 05F4 A8 ( TAY 05F5 20 A8 06 (. JSR &06A8 05F8 20 F4 FF t. JSR &FFF4 05FB 49 9D I. EOR #&9D 05FD F0 EF po BEQ &05EE 05FF 6A j ROR A 0600 20 68 06 h. JSR &0668 0603 2C E2 FE ,b~ BIT &FEE2 0606 50 FB P{ BVC &0603 0608 8C E3 FE .c~ STY &FEE3 060B 80 D9 .Y BRA &05E6 WORD ---- 060D 20 A8 06 (. JSR &06A8 0610 A8 ( TAY 0611 20 B1 06 1. JSR &06B1 0614 30 0A 0. BMI &0620 0616 20 A8 06 (. JSR &06A8 0619 9D 28 01 .(. STA &0128,X 061C CA J DEX 061D 10 F7 .w BPL &0616 061F 98 . TYA 0620 A2 28 "( LDX #&28 0622 A0 01 . LDY #&01 0624 20 F1 FF q. JSR &FFF1 0627 20 B1 06 1. JSR &06B1 062A 30 C2 0B BMI &05EE 062C BC 28 01 <(. LDY &0128,X 062F 2C E2 FE ,b~ BIT &FEE2 0632 50 FB P{ BVC &062F 0634 8C E3 FE .c~ STY &FEE3 0637 CA J DEX 0638 10 F2 .r BPL &062C 063A 80 B2 .2 BRA &05EE WORD0 - Read a line ------------------- 063C A2 04 ". LDX #&04 063E 20 A8 06 (. JSR &06A8 0641 9D 00 00 ... STA &0000,X 0644 CA J DEX 0645 10 F7 .w BPL &063E 0647 E8 h INX 0648 8A . TXA 0649 A8 ( TAY 064A 20 F1 FF q. JSR &FFF1 064D 90 05 .. BCC &0654 064F A9 FF ). LDA #&FF 0651 4C 91 05 L.. JMP &0591 0654 A2 00 ". LDX #&00 0656 A9 7F ). LDA #&7F 0658 20 68 06 h. JSR &0668 065B BD 00 07 =.. LDA &0700,X 065E 20 68 06 h. JSR &0668 0661 E8 h INX 0662 C9 0D I. CMP #&0D 0664 D0 F5 Pu BNE &065B 0666 80 D2 .R BRA &063A Send byte in A via R2 --------------------- 0668 2C E2 FE ,b~ BIT &FEE2 066B 50 FB P{ BVC &0668 066D 8D E3 FE .c~ STA &FEE3 0670 60 ` RTS Send Tube ID via R4 ------------------- 0671 A5 15 %. LDA &15 Send byte in A via R4 --------------------- 0673 2C E6 FE ,f~ BIT &FEE6 0676 50 FB P{ BVC &0673 0678 8D E7 FE .g~ STA &FEE7 067B 60 ` RTS Copy Escape state across Tube ----------------------------- 067C A5 FF %. LDA &FF 067E 38 8 SEC 067F 6A j ROR A 0680 80 0F .. BRA &0691 Send event across Tube ---------------------- 0682 48 H PHA 0683 A9 00 ). LDA #&00 0685 20 91 06 .. JSR &0691 0688 98 . TYA 0689 20 91 06 .. JSR &0691 068C 8A . TXA 068D 20 91 06 .. JSR &0691 0690 68 h PLA Send byte in A via R1 --------------------- 0691 2C E0 FE ,`~ BIT &FEE0 0694 50 FB P{ BVC &0691 0696 8D E1 FE .a~ STA &FEE1 0699 60 ` RTS 069A 20 A8 06 (. JSR &06A8 069D 95 FF .. STA &FF,X 069F CA J DEX 06A0 D0 F8 Px BNE &069A 06A2 80 04 .. BRA &06A8 06A4 20 A8 06 (. JSR &06A8 06A7 AA * TAX 06A8 2C E2 FE ,b~ BIT &FEE2 06AB 10 FB .{ BPL &06A8 06AD AD E3 FE -c~ LDA &FEE3 06B0 60 ` RTS Wait for control block length X via R2 -------------------------------------- 06B1 2C E2 FE ,b~ BIT &FEE2 06B4 10 FB .{ BPL &06B1 06B6 AE E3 FE .c~ LDX &FEE3 06B9 CA J DEX 06BA 60 ` RTS Unused space ------------ 06BB 08 . PHP 06BC 5A Z PHY 06BD DA Z PHX 06BE 48 H PHA 06BF C9 04 I. CMP #&04 06C1 F0 0D p. BEQ &06D0 06C3 C9 07 I. CMP #&07 06C5 F0 25 p% BEQ &06EC 06C7 C9 2A I* CMP #&2A 06C9 F0 74 pt BEQ &073F 06CB 68 h PLA 06CC FA z PLX 06CD 7A z PLY 06CE 28 ( PLP 06CF 60 ` RTS 06D0 20 50 B8 P8 JSR &B850 06D3 C9 0B I. CMP #&0B 06D5 D0 F4 Pt BNE &06CB 06D7 68 h PLA 06D8 FA z PLX 06D9 A9 8E ). LDA #&8E 06DB 20 F4 FF t. JSR &FFF4 06DE A2 04 ". LDX #&04 06E0 BD 29 02 =). LDA &0229,X 06E3 DD B0 AE ]0. CMP &AEB0,X 06E6 D0 03 P. BNE &06EB 06E8 CA J DEX 06E9 D0 F5 Pu BNE &06E0 06EB 60 ` RTS 06EC 5A Z PHY 06ED 7A z PLY 06EE D0 DB P[ BNE &06CB 06F0 A5 EF %o LDA &EF 06F2 C9 60 I` CMP #&60 06F4 D0 D5 PU BNE &06CB 06F6 68 h PLA 06F7 5A Z PHY 06F8 78 x SEI 06F9 A5 F0 %p LDA &F0 06FB 30 11 0. BMI &070E 06FD 4A J LSR A 06FE D0 08 P. BNE &0708 String buffer ------------- 0700 EQUS 256 String buffer Copy one page from ROM to &0700, relocating where needed -------------------------------------------------------- F9FA A0 00 . LDY #&00 F9FC 84 00 .. STY &00 F9FE B1 00 1. LDA (&00),Y FA00 AE F9 04 .y. LDX &04F9 No relocation FA03 F0 13 p. BEQ &FA18 FA05 C9 7F I. CMP #&7F FA07 90 0F .. BCC &FA18 FA09 C9 C0 I@ CMP #&C0 FA0B B0 0B 0. BCS &FA18 FA0D 48 H PHA FA0E 20 CE FA Nz JSR &FACE FA11 68 h PLA FA12 90 04 .. BCC &FA18 FA14 18 . CLC FA15 6D F9 04 my. ADC &04F9 FA18 99 00 07 ... STA &0700,Y Store in &0700-&07FF FA1B C8 H INY FA1C D0 E0 P` BNE &F9FE Loop for 256 byte FA1E EE 01 00 n.. INC &0001 FA21 60 ` RTS Continue working out ROM relocation address ------------------------------------------- FA22 8D 56 00 .V. STA &0056 Set Tube address high bytes FA25 8C 55 00 .U. STY &0055 || New code from here FA28 24 F4 $t BIT &F4 Check ROM number FA2A 70 71 pq BVS &FA9D If b6 set, ignore relocation address and table FA2C AD 06 80 -.. LDA &8006 Get ROM type FA2F 29 0D ). AND #&0D Check for type 0 or 2, 6502 code FA31 D0 78 Px BNE &FAAB Not 6502 code, exit with relocation address FA33 AD 56 00 -V. LDA &0056 FA36 8D 03 00 ... STA &0003 FA39 0D 55 00 .U. ORA &0055 FA3C F0 6D pm BEQ &FAAB FA3E AD 55 00 -U. LDA &0055 FA41 8D 02 00 ... STA &0002 FA44 A0 02 . LDY #&02 FA46 B1 02 1. LDA (&02),Y FA48 AA * TAX FA49 88 . DEY FA4A B1 02 1. LDA (&02),Y FA4C A8 ( TAY FA4D B2 02 2. LDA (&02) FA4F 8D 02 00 ... STA &0002 FA52 8C 03 00 ... STY &0003 FA55 AD 54 00 -T. LDA &0054 FA58 38 8 SEC FA59 E9 80 i. SBC #&80 FA5B 8D F9 04 .y. STA &04F9 FA5E 9C 56 00 .V. STZ &0056 FA61 9C 55 00 .U. STZ &0055 FA64 8A . TXA FA65 10 03 .. BPL &FA6A FA67 18 . CLC FA68 65 F4 et ADC &F4 FA6A 29 0F ). AND #&0F FA6C 8D F8 04 .x. STA &04F8 FA6F A6 F4 &t LDX &F4 FA71 DA Z PHX FA72 20 5C E5 \e JSR &E55C FA75 20 AF FA /z JSR &FAAF FA78 49 DE I^ EOR #&DE FA7A D0 1B P. BNE &FA97 FA7C 20 AF FA /z JSR &FAAF FA7F 49 C0 I@ EOR #&C0 FA81 D0 14 P. BNE &FA97 FA83 8D F7 04 .w. STA &04F7 FA86 20 AF FA /z JSR &FAAF FA89 8D F6 04 .v. STA &04F6 FA8C 20 AF FA /z JSR &FAAF FA8F 8D F5 04 .u. STA &04F5 FA92 68 h PLA FA93 20 5C E5 \e JSR &E55C FA96 60 ` RTS FA97 68 h PLA FA98 20 5C E5 \e JSR &E55C FA9B 80 0E .. BRA &FAAB FA9D A9 80 ). LDA #&80 Set transfer address to &00008000 FA9F 8D 54 00 .T. STA &0054 FAA2 9C 53 00 .S. STZ &0053 FAA5 9C 55 00 .U. STZ &0055 FAA8 9C 56 00 .V. STZ &0056 FAAB 9C F9 04 .y. STZ &04F9 FAAE 60 ` RTS FAAF AD 02 00 -.. LDA &0002 FAB2 08 . PHP FAB3 CE 02 00 N.. DEC &0002 FAB6 28 ( PLP FAB7 D0 03 P. BNE &FABC FAB9 CE 03 00 N.. DEC &0003 FABC A5 F4 %t LDA &F4 FABE 48 H PHA FABF AD F8 04 -x. LDA &04F8 FAC2 20 5C E5 \e JSR &E55C FAC5 B2 02 2. LDA (&02) FAC7 AA * TAX FAC8 68 h PLA FAC9 20 5C E5 \e JSR &E55C FACC 8A . TXA FACD 60 ` RTS FACE 0E F7 04 .w. ASL &04F7 FAD1 D0 0A P. BNE &FADD FAD3 20 DE FA ^z JSR &FADE FAD6 18 . CLC FAD7 F0 04 p. BEQ &FADD FAD9 38 8 SEC FADA 2E F7 04 .w. ROL &04F7 FADD 60 ` RTS FADE 20 AF FA /z JSR &FAAF FAE1 8D F7 04 .w. STA &04F7 FAE4 AD F5 04 -u. LDA &04F5 FAE7 08 . PHP FAE8 CE F5 04 Nu. DEC &04F5 FAEB 28 ( PLP FAEC D0 03 P. BNE &FAF1 FAEE CE F6 04 Nv. DEC &04F6 FAF1 AD F6 04 -v. LDA &04F6 FAF4 49 80 I. EOR #&80 FAF6 29 80 ). AND #&80 FAF8 60 ` RTS Select language with b6 set to prevent relocation ------------------------------------------------- FAF9 8A . TXA Transfer ROM number to A FAFA 09 40 .@ ORA #&40 Set bit 6 FAFC AA * TAX Transfer back to X FAFD A9 8E ). LDA #&8E OSBYTE 142 - enter ROM as a language FAFF 4C F4 FF Lt. JMP &FFF4 Find ROM entry address ---------------------- FB02 20 C8 04 H. JSR &04C8 Find ROM entry address FB05 A9 40 )@ LDA #&40 FB07 14 F4 .t TRB &F4 Reset bit 6 of ROM number to prevent skipping FB09 60 ` RTS relocation next time FB0A 08 . PHP FB0B 78 x SEI FB0C AD 5E 02 -^. LDA &025E FB0F 48 H PHA FB10 A9 80 ). LDA #&80 FB12 1C 5E 02 .^. TRB &025E FB15 A9 87 ). LDA #&87 FB17 20 F4 FF t. JSR &FFF4 FB1A 68 h PLA FB1B 8D 5E 02 .^. STA &025E FB1E 28 ( PLP FB1F 8A . TXA FB20 60 ` RTS FB21 FF . EQUB &FF FB22 FF . EQUB &FF FB23 FF . EQUB &FF FB24 FF . EQUB &FF FB25 FF . EQUB &FF FB26 FF . EQUB &FF FB27 FF . EQUB &FF