===== Classic BBC Elite Disk docked code ======= Code authors Ian Bell and David Braben, Sep 1984. Commentary (and any errors in understanding) Paul Brink, Sep 2014. Code Block info (All memory address hexadecimal numbers prefixed by &) T.CODE 0011E3 0011E3 004E1D 10B Over-writes Loader or Flight code from &11E3 onwards. Docked code includes docked ships data so file ends at &6000, at start of screen memory. Labels based on Tape version or 2nd Processor source, or guessed as needed. Earliest code written on Acorn Atom, hence assembly labels use fixed array names, AAtoZZ1to255. Docked code below has been unscrambled so 'scramble' code shouldn't be run on this version of the bytes. Format is BBC BASIC's raw bytes 6502 assembler \ labels \ comments \******* T.CODE ******* Called when Docked. It does *RUN D.CODE to call flight code .x11E3 \ -> &11E3 3C 1B 12 JMP &121B \ DOENTRY \ After Docking .x11E6 4C FB 11 JMP &11FB \ DOBEGIN \ call from Loader starts here for first time .x11E9 4C 56 1D JMP &1D56 \ CHPR \ character print .x11EC 4B 11 EQUW &114B \ IRQ1 screen interrupt .x11EE 4C EQUB &4C \ JMP .BRKV D5 11 EQUW BRBR \ BRBR = &11D5 brk vector e.g. msg at (&FD) .INBAY \ -> &11F1 \ Reset into Bay A2 00 LDX #0 A0 00 LDY #0 20 88 88 JSR &8888 \ ? .DEATH2 \ -> &11F8 \ after Death in flight 4C 9D 12 JMP &129D \ SCRAM \ scramble and reset stack .DOBEGIN \ -> &11FB \ from Loader code 20 01 12 JSR &1201 \ scramble \ reload title. 4C 75 38 JMP &3875 \ BEGIN \ Reset toggles, fall into TT170. .scramble \ -> &1201 \ and set break vector to BRBR A0 00 LDY #0 84 07 STY &07 \ SC \ lo byte of pointer A2 13 LDX #&13 \ pages above &13 scrambled .scrl \ counter X,Y 86 08 STX &08 \ SC+1 \ hi byte of pointer 98 TYA 51 07 EOR (&07),Y \ (SC),Y 49 33 EOR #&33 \ '#' unscramble rest of dock T.CODE 91 07 STA (&07),Y \ (SC),Y 88 DEY D0 F4 BNE scrl \ inner loop Y E8 INX \ next page X E0 60 CPX #&60 \ all the way up to page #&5F for docked code D0 EF BNE scrl \ outer loop X 4C A6 12 JMP &12A6 \ BRKBKA \ Set break vector to BRBR routine that reloads Title .DOENTRY \ -> &121B \ After Docking 20 01 12 JSR &1201 \ scramble is above 20 97 36 JSR &3697 \ RES2 \ reset2 20 5B 21 JSR &215B \ Hanger launch rings 20 BD 1F JSR &1FBD \ HALL \ show some ships A0 2C LDY #44 \ Yreg loaded with length of delay 20 9C 25 JSR &259C \ DELAY AD 58 03 LDA &0358 \ TP \ mission 29 03 AND #3 \ bits 0,1 D0 0E BNE EN1 \ mission 1 already started AD A0 03 LDA &03A0 \ TALLY+1 F0 62 BEQ EN4 \ jump to bay AD 67 03 LDA &0367 \ GCNT \ galaxy count 4A LSR A \ If Galaxy > 2 then D0 5C BNE EN4 \ jump to bay else 4C 78 24 JMP &2478 \ BRIEF \ The Constrictor mission start, set bit0. .EN1 \ mission 1 already started C9 03 CMP #3 D0 03 BNE EN2 \ other missions else 4C 64 24 JMP &2464 \ DEBRIEF \ Constrictor was killed, both bits set. .EN2 \ other missions AD 58 03 LDA &0358 \ TP 29 0F AND #&0F \ only using lower 4 bits C9 02 CMP #2 \ only Mission 1 finished? D0 11 BNE EN3 \ Other missions AD A0 03 LDA &03A0 \ TALLY+1 C9 05 CMP #5 \ 1280 is half-way to Dangerous 90 42 BCC EN4 \ else jump to bay AD 67 03 LDA &0367 \ GCNT C9 02 CMP #2 \ Galaxy 3 D0 3B BNE EN4 \ jump to bay 4C 32 24 JMP &2432 \ BRIEF2 \ Start Thargoid mission will set bit2 .EN3 \ Other missions C9 06 CMP #6 \ 0110 is only first Thargoid briefing done D0 18 BNE EN5 \ check next briefing option AD 67 03 LDA &0367 \ GCNT C9 02 CMP #2 \ Galaxy 3 again D0 2D BNE EN4 \ jump to bay AD 59 03 LDA &0359 \ QQ0 \ present chart C9 D7 CMP #&D7 \ x-coord correct? D0 26 BNE EN4 \ jump to bay AD 5A 03 LDA &035A \ QQ1 \ present chart y-coord C9 54 CMP #&54 \ Ceerdi else D0 1F BNE EN4 \ jump to bay 4C 42 24 JMP &2442 \ BRIEF3 \ Second Thargoid briefing will only set bits 3,1 .EN5 \ After first Thargoid briefing C9 0A CMP #&0A \ 1010 else Thargoid mission after 2nd briefing D0 18 BNE EN4 \ jump to bay AD 67 03 LDA &0367 \ GCNT C9 02 CMP #2 \ Galaxy 3 again D0 11 BNE EN4 \ jump to bay AD 59 03 LDA &0359 \ QQ0 C9 3F CMP #&3F \ xcoord D0 0A BNE EN4 \ jump to bay AD 5A 03 LDA &035A \ QQ1 C9 48 CMP #&48 \ Birera D0 03 BNE EN4 \ jump to bay 4C 50 24 JMP &2450 \ DEBRIEF2 \ awarded Navy energy unit, set bit 2,3 .EN4 \ jump to bay 4C B0 38 JMP &38B0 \ BAY \ Start in Docking Bay .SCRAM \ -> &129D \ scramble and reset stack 20 01 12 JSR &1201 \ scramble \ scramble above 20 97 36 JSR &3697 \ RES2 \ reset2 4C 82 38 JMP &3882 \ TT170 \ reset stack and onto break1 .BRKBKA \ -> &12A6 \ Set break vector to BRBR routine that reloads Title A9 6D LDA #&6D \ #(BRBR MOD256) 8D EF 11 STA &11EF \ BRKV \ BRK vector lo A9 38 LDA #&38 \ #(BRBR DIV256) 8D F0 11 STA &11F0 \ BRKV+1 \ BRK vector hi 60 RTS .MT27 \ -> &12B1 \ x1b Add galaxy to token #&D9 A9 D9 LDA #&D9 \ = Curruthers 2C EQUB &2C \ bit2, skip next 2 bytes .MT28 \ -> &12B4 \ x1c Add galaxy to token #&DC A9 DC LDA #&DC \ token = was last seen at Reesdice/jumped to this galaxy 18 CLC \ add galaxy 6D 67 03 ADC &0367 \ GCNT D0 12 BNE DETOK \ guaranteed, use TKN1 docked tokens. .DETOK3 \ -> &12BC \ use RU mission tokens 48 PHA \ protect token AA TAX \ X = token counter 98 TYA 48 PHA \ Y saved A5 22 LDA &22 \ V \ text pointer lo 48 PHA A5 23 LDA &23 \ V+1 \ text pointer hi 48 PHA A9 6B LDA #&6B \ #(RUTOK MOD256) RUTOK = &536B 85 22 STA &22 \ V \ lo A9 53 LDA #&53 \ #(RUTOK DIV256) D0 10 BNE DTEN \ guaranteed down .DETOK \ -> &12CE \ Use TKN1 docked tokens, first visit can look at all. 48 PHA \ protect token AA TAX \ X = token counter 98 TYA 48 PHA \ protect Y reg A5 22 LDA &22 \ V \ protect lo text pointer 48 PHA A5 23 LDA &23 \ V+1 \ protect hi text pointer 48 PHA A9 1B LDA #&1B \ #(TKN1 MOD256) TKN1 = &481B 85 22 STA &22 \ V \ lo A9 48 LDA #&48 \ #(TKN1 DIV256) .DTEN \ also DETOK3 85 23 STA &23 \ V+1 \ hi A0 00 LDY #0 .DTL1 \ counter Y B1 22 LDA (&22),Y \ (V),Y 49 57 EOR #&57 \ unscramble #VE out of tokens D0 03 BNE DT1 \ walk through token CA DEX \ next token F0 07 BEQ DTL2 \ found token .DT1 \ walk through token C8 INY D0 F4 BNE DTL1 \ loop Y E6 23 INC &23 \ V+1 \ hi D0 F0 BNE DTL1 \ loop hi .DTL2 \ -> &12F2 \ found token C8 INY D0 02 BNE P%+4 \ skip hi E6 23 INC &23 \ V+1 \ hi B1 22 LDA (&22),Y \ (V),Y 49 57 EOR #&57 \ unscramble #VE F0 06 BEQ DTEX \ exit 20 0D 13 JSR &130D \ DETOK2 \ Process token found \ ** 11D + 11E3 = &1300 from here on unscrambled ** 4C F2 12 JMP &12F2 \ DTL2 \ loop next token .DTEX \ exit 68 PLA \ restore hi 85 23 STA &23 \ V+1 68 PLA \ restore lo 85 22 STA &22 \ V 68 PLA \ restore A8 TAY \ Y reg 68 PLA \ restore Acc 60 RTS .DETOK2 \ -> &130D \ Process token found C9 20 CMP #&20 \ Acc < #&20 90 48 BCC DT3 \ Format table 2C 85 1C BIT &1C85 \ DTW3 \ bit7 clear flag DTW3 10 10 BPL DT8 \ clear is Docked tokens AA TAX \ X = flight token 98 TYA 48 PHA \ protect Y reg A5 22 LDA &22 \ V \ protect lo 48 PHA A5 23 LDA &23 \ V+1 \ protect hi 48 PHA 8A TXA \ restore flight token 20 AC 31 JSR &31AC \ TT27 \ process flight token 4C 76 13 JMP &1376 \ DT7 \ TT27 Multitoken \ their comment. exit .DT8 \ Docked token, flag DTW3 flag clear C9 5B CMP #&5B \ after 'Z' 90 18 BCC DTS \ prepare Char C9 81 CMP #&81 \ #129 90 51 BCC DT6 \ far down, 5-choices 5Bto7F C9 D7 CMP #&D7 \ 80toD6 docked tokens 90 9C BCC DETOK \ use TKN1 docked tokens E9 D7 SBC #&D7 \ docked digram 0A ASL A \ index 48 PHA \ copy AA TAX \ first letter BD 87 14 LDA &1487,X \ TKN2,X \ names for description 20 42 13 JSR &1342 \ DTS \ prepare Char 68 PLA \ index AA TAX \ second letter BD 88 14 LDA &1488,X \ TKN2+1,X \letter pair \ their comment .DTS \ -> &1342 \ prepare Char, making planet name-ian arrives here from MT18 C9 41 CMP #&41 \ 'A' 90 10 BCC DT9 \ less than, TT26 print 2C 88 1C BIT &1C88 \ DTW6 30 05 BMI DT10 \ bit7 set flag DTW6 mask set to Lower 2C 84 1C BIT &1C84 \ DTW2 30 03 BMI DT5 \ bit7 set flag DTW2 mask set to Upper .DT10 \ bit7 set flag DTW6 0D 83 1C ORA &1C83 \ DTW1 \ mask set to Lower .DT5 \ bit7 set flag DTW2 2D 89 1C AND &1C89 \ DTW8 \ mask clear to Upper .DT9 \ also < 'A' 4C 8F 1C JMP &1C8F \ TT26 \ print character .DT3 \ A <= #28 Format table AA TAX \ store low token 98 TYA 48 PHA A5 22 LDA &22 \ V \ store text pointer lo 48 PHA A5 23 LDA &23 \ V+1 \Magic \ their comment 48 PHA 8A TXA \ restore low token 0A ASL A \ Xindex set to A*2 AA TAX BD 45 14 LDA &1445,X \ JMTB-2,X 8D 74 13 STA &1374 \ DTM+1 \ over-write from table BD 46 14 LDA &1446,X \ JMTB-1,X 8D 75 13 STA &1375 \ DTM+2 8A TXA 4A LSR A \ restore token as might need &0A etc. .DTM \ -> &1373 \ print subroutine address changed by JMTB magic choice above 20 8F 1C JSR &1C8F \ TT26 \ print subroutine .DT7 \ -> &1376 \ multitoken from DETOK2 exit 68 PLA \ restore text pointer hi 85 23 STA &23 \ V+1 68 PLA 85 22 STA &22 \ V 68 PLA A8 TAY \ restore Y reg 60 RTS .DT6 \ 5-choices 5Bto7F in steps of 5 85 07 STA &07 \ SC \ protect token base 98 TYA 48 PHA A5 22 LDA &22 \ V 48 PHA A5 23 LDA &23 \ V+1 48 PHA 20 36 37 JSR &3736 \ DORND \ do random number AA TAX \ X rnd A9 00 LDA #0 \ planet description 5 choices E0 33 CPX #&33 69 00 ADC #0 E0 66 CPX #&66 69 00 ADC #0 E0 99 CPX #&99 69 00 ADC #0 E0 CC CPX #&CC \ A = 0to4 A6 07 LDX &07 \ SC \ token base for (MTIN-&5B,original A)+0to4 7D 65 55 ADC &5565,X \ MTIN-&5B,X .MTIN = &55C0 0-4+ 20 CE 12 JSR &12CE \ DETOK \ use TKN1 docked tokens 4C 76 13 JMP &1376 \ DT7 \Multitoken \ their comment. exit up .MT1 \ -> &13A8 \ x01 Leave docked tokens Upper case A9 00 LDA #0 \ mask for Lower cleared, leave tokens upper case. 2C EQUB &2C \ bit2 skip load .MT2 \ -> &13AB \ x02 Prepare to lower case but flag not set yet. A9 20 LDA #&20 \ mask set to Lower 8D 83 1C STA &1C83 \ DTW1 A9 00 LDA #0 \ clear flag DTW6 don't use Lower mask 8D 88 1C STA &1C88 \ DTW6 60 RTS .MT8 \ -> &13B6 \ x08 Indent, set flag to use Upper mask A9 06 LDA #6 \ indent 85 2C STA &2C \ XC \ text xcursor A9 FF LDA #&FF \ Set flag DTW2 to use Upper mask 8D 84 1C STA &1C84 \ DTW2 60 RTS .MT9 \ -> &13C0 \ x09 Start new Box A9 01 LDA #1 85 2C STA &2C \ XC 4C 37 25 JMP &2537 \ TT66 \ box border with QQ11 menu id set to Acc .MT13 \ -> &13C7 \ x0d all Docked tokens Lower case A9 80 LDA #&80 \ Set flag DTW6 use Lower mask 8D 88 1C STA &1C88 \ DTW6 A9 20 LDA #&20 \ mask set to Lower 8D 83 1C STA &1C83 \ DTW1 60 RTS .MT6 \ -> &13D2 \ x06 Switch to Flight tokens A9 80 LDA #&80 \ start with capital letter 85 72 STA &72 \ QQ17 A9 FF LDA #&FF \ flag DTW3 set is flight token 2C EQUB &2C \ bit2 skip load .MT5 \ -> &13D9 \ x05 Back to Docked tokens A9 00 LDA #0 \ flag DTW3 clear is Docked token 8D 85 1C STA &1C85 \ DTW3 60 RTS .MT14 \ -> &13DF \ x0e Store Acc in flushed buffer (called by each loop of find planet) A9 80 LDA #&80 \ Acc to buffer 2C EQUB &2C \ bit2 skip load .MT15 \ -> &13E2 \ x0f Clear buffer, print to screen from now on. A9 00 LDA #0 \ Acc to screen 8D 86 1C STA &1C86 \ DTW4 0A ASL A \ =0 for both cases 8D 87 1C STA &1C87 \ DTW5 \ index to BUF 60 RTS .MT17 \ -> &13EC \x11 Current planet name-ian A5 72 LDA &72 \ QQ17 \ flag flight token capital letter 29 BF AND #&BF \ clear bit 6 of QQ17 85 72 STA &72 \ QQ17 A9 03 LDA #3 \ Acc=3 gives current planet name 20 AC 31 JSR &31AC \ TT27 process flight token AE 87 1C LDX &1C87 \ DTW5 \ buffer index BD 00 0E LDA &0E00,X \ BUF-1,X 20 2F 14 JSR &142F \ VOWEL 90 03 BCC MT171 \ if Acc is vowel, A,E,I,O,U, then C not cleared CE 87 1C DEC &1C87 \ DTW5 \ buffer index-1 to remove vowel .MT171 \ append IAN A9 99 LDA #&99 \ = token IAN -ian ending 4C CE 12 JMP &12CE \ DETOK \ use TKN1 docked tokens .MT18 \ -> &140A \x12 Random name 8 chars 20 29 14 JSR &1429 \ MT19 \ x13 is Upper case for one letter. 20 36 37 JSR &3736 \ DORND \ rnd Acc 29 03 AND #3 \ 0-3 for 2-8 chars A8 TAY \ counter .MT18L \ counter Y 20 36 37 JSR &3736 \ DORND \ rnd Acc 29 3E AND #&3E \ 32 digrams for planet description AA TAX \ index BD 89 14 LDA &1489,X \ TKN2+2,X \ docked diagram 20 42 13 JSR &1342 \ DTS \ prepare Char BD 8A 14 LDA &148A,X \ TKN2+3,X \ next letter of diagram 20 42 13 JSR &1342 \ DTS \ prepare Char 88 DEY 10 EB BPL MT18L \ loop Y 60 RTS .MT19 \ -> &1429 \x13 Upper case for one letter. A9 DF LDA #&DF \ clear bit 5 8D 89 1C STA &1C89 \ DTW8 \ mask clear to Upper 60 RTS .VOWEL \ -> &142F \ find for 'ian' 09 20 ORA #&20 \ to lower case C9 61 CMP #&61 \'a' F0 11 BEQ VRTS \ carry set C9 65 CMP #&65 \ 'e' F0 0D BEQ VRTS C9 69 CMP #&69 \ 'i' F0 09 BEQ VRTS C9 6F CMP #&6F \ 'o' F0 05 BEQ VRTS C9 75 CMP #&75 \ 'u' F0 01 BEQ VRTS 18 CLC \ else carry clear if vowel not found .VRTS 60 RTS .JMTB \ -> &1447 \ Jump to subroutine Table where JMTB-2,X -> DTM+1 for DETOK2 with token Acc < #&20 A8 13 EQUW MT1 \ -> &13A8 \ x01 - Leave docked tokens Upper case AB 13 EQUW MT2 \ -> &13AB \ x02 - Prepare to lower case but flag not set yet. AC 31 EQUW TT27 \ process flight token, \ x03 will become planet name AC 31 EQUW TT27 \ process flight token, \ x04 will become Commander name D9 13 EQUW MT5 \ -> &13D9 \ x05 - Back to Docked tokens D2 13 EQUW MT6 \ -> &13D2 \ x06 - switch back to flight tokens 8F 1C EQUW TT26 \ print character, \ x07 is Bell B6 13 EQUW MT8 \ -> &13B6 \ x08 - Indent, set flag to use Upper mask C0 13 EQUW MT9 \ -> &13C0 \ x09 - Start new text box 8F 1C EQUW TT26 \ print character, \ x0A is down to next row F5 18 EQUW NLIN4 \ x0B - draw horizontal line at Y = #19 8F 1C EQUW TT26 \ print character, \ x0C is start next row C7 13 EQUW MT13 \ -> &13C7 \ x0d - all Docked tokens Lower case DF 13 EQUW MT14 \ -> &13DF \ x0e - Store Acc in flushed buffer E2 13 EQUW MT15 \ -> &13E2 \ x0f - Clear buffer, print to screen from now on 8D 1C EQUW MT16 \ -> &1C8D \ x10 - DTW7 into TT26 print character EC 13 EQUW MT17 \ -> &13EC \ x11 - Current planet name-ian current planet-ian = small token 17 0A 14 EQUW MT18 \ -> &140A \ x12 - Random name 8 chars 29 14 EQUW MT19 \ -> &1429 \ x13 - Upper case for one letter 8F 1C EQUW TT26 \ print character \ x14 A3 25 EQUW CLYNS \ x15 - Clear bottom screen lines D7 24 EQUW PAUSE \ x16 - wait for key press ED 24 EQUW MT23 \ x17 - set YC = #10 docked tokens lower case 0E 25 EQUW PAUSE2 \ x18 - wait for key presses, CD 24 EQUW BRIS \ x19 - Briefing Start (incoming message etc.) CC 39 EQUW MT26 \ x1a - Receive string, update Y flag B1 12 EQUW MT27 \ x1b - add galaxy to token #&D9 Curruthers B4 12 EQUW MT28 \ x1c - add galaxy to token #&DC was last seen at Reesdice/jumped to this galaxy F0 24 EQUW MT29 \ -> &24F0 \ x1d set YC = #6 Docked tokens lower case 8F 1C EQUW TT26 \ print character \ x1e 8F 1C EQUW TT26 \ print character \ x1f 8F 1C EQUW TT26 \ print character \ x20 is white space .TKN2 \ -> &1487 \ Docked digrams for planet description 0C 0A EQUW &0A0C \ start new row, down next row. \-> TKN2+2 41 42 4F 55 53 45 49 54 49 4C 45 54 53 54 4F 4E 4C 4F 4E 55 54 48 4E 4F EQUS "ABOUSEITILETSTONLONUTHNO" \ 12 digrams for docked random names .QQ16 \ -> &14A1 \ onto regular planet name flight diagrams 41 4C 4C 45 58 45 47 45 5A 41 43 45 42 49 53 4F 55 53 45 53 41 52 4D 41 49 4E 44 49 52 45 41 3F 45 52 41 54 45 4E 42 45 52 41 4C 41 56 45 54 49 45 44 4F 52 51 55 41 4E 54 45 49 53 52 49 4F 4E EQUS "ALLEXEGEZACEBISOUSESARMAINDIREA?ERATENBERALAVETIEDORQUANTEISRION" \ 32 diagrams .MVEIT \ -> &14E1 \ Move It, data in INWK and hull XXX0 A5 65 LDA &65 \ INWK+31 \ exploding/display state|missiles 29 20 AND #&20 \ bit5 D0 0B BNE MV30 \ in explosion, skip tidy. A5 8A LDA &8A \ MCNT \ move count 45 84 EOR &84 \ XSAV \ nearby ship slot 29 0F AND #&0F \ only tidy ship if slot survives D0 03 BNE MV30 \ else skip tidy 20 06 3E JSR &3E06 \ TIDY \ re-orthogonalize rotation matrix .MV30 \ skipped tidy A0 09 LDY #9 \ select row 20 19 16 JSR &1619 \ MVS4 \ moveship4 \ pitch&roll update to coordinates A0 0F LDY #15 \ select row 20 19 16 JSR &1619 \ MVS4 \ moveship4 \ pitch&roll update to coordinates A0 15 LDY #21 \ select row 20 19 16 JSR &1619 \ MVS4 \ moveship4 \ pitch&roll update to coordinates A5 64 LDA &64 \ INWK+30 \ rotz counter 29 80 AND #&80 \ rotz sign 85 9A STA &9A \ RAT2 A5 64 LDA &64 \ INWK+30 29 7F AND #&7F \ pitch mag lower 7bits F0 1D BEQ MV8 \ rotz=0, Other rotation. C9 7F CMP #&7F \ C set if equal, no damping of pitch E9 00 SBC #0 \ reduce z pitch, rotz 05 9A ORA &9A \ RAT2 \ reinclude rotz sign 85 64 STA &64 \ INWK+30 \ rotz counter A2 0F LDX #15 \ select column A0 09 LDY #9 \ select row 20 80 16 JSR &1680 \ MVS5 \ moveship5, small rotation in matrix A2 11 LDX #17 A0 0B LDY #11 20 80 16 JSR &1680 \ MVS5 A2 13 LDX #19 A0 0D LDY #13 20 80 16 JSR &1680 \ MVS5 .MV8 \ Other rotation, roll. A5 63 LDA &63 \ INWK+29 \ rotx counter 29 80 AND #&80 \ rotx sign 85 9A STA &9A \ RAT2 A5 63 LDA &63 \ INWK+29 \ rotx counter 29 7F AND #&7F \ roll mag lower 7 bits F0 1D BEQ MV5 \ rotations done C9 7F CMP #&7F \ C set if equal, no damping of x roll E9 00 SBC #0 \ reduce x roll 05 9A ORA &9A \ RAT2 \ reinclude sign 85 63 STA &63 \ INWK+29 \ rotx counter A2 0F LDX #15 \ select column A0 15 LDY #21 \ select row 20 80 16 JSR &1680 \ MVS5 \ moveship5, small rotation in matrix A2 11 LDX #17 A0 17 LDY #23 20 80 16 JSR &1680 \ MVS5 A2 13 LDX #19 A0 19 LDY #25 20 80 16 JSR &1680 \ MVS5 .MV5 \ rotations Done A5 65 LDA &65 \ INWK+31 \ display explosion state|missiles 29 20 AND #&20 \ not #&A0 as in flight code D0 06 BNE MVD1 \ end explosion A5 65 LDA &65 \ INWK+31 09 10 ORA #&10 \ else keep visible on scanner, set bit4. 85 65 STA &65 \ INWK+31 \ flight code jumps to scanner here .MVD1 \ end explosion A5 65 LDA &65 \ INWK+31 29 EF AND #&EF \ clear bit4, now invisible. 85 65 STA &65 \ INWK+31 60 RTS \ MVT1-2 \ x=0,3,6 for x,y,z coord 29 80 AND #&80 \ use Abit7 for x+=R .MVT1 \ -> &1568 \ Add R|sgnA to inwk,x+0to2 ship translation 0A ASL A \ bit7 into carry 85 83 STA &83 \ S \ A6to0 A9 00 LDA #0 6A ROR A \ sign bit from Acc 85 D1 STA &D1 \ T 46 83 LSR &83 \ S \ A6to0 55 48 EOR &48,X \ INWK+2,X 30 15 BMI MV10 \ -ve sg eor T A5 82 LDA &82 \ R \ lo 75 46 ADC &46,X \ INWK+0,X 95 46 STA &46,X \ INWK+0,X A5 83 LDA &83 \ S \ A6to0 \ hi 75 47 ADC &47,X \ INWK+1,X 95 47 STA &47,X \ INWK+1,X B5 48 LDA &48,X \ INWK+2,X 69 00 ADC #0 \ sign bit from Acc 05 D1 ORA &D1 \ T 95 48 STA &48,X \ INWK+2,X 60 RTS .MV10 \ -ve sg eor T B5 46 LDA &46,X \ INWK+0,X 38 SEC \ lo sub E5 82 SBC &82 \ R 95 46 STA &46,X \ INWK+0,X B5 47 LDA &47,X \ INWK+1,X E5 83 SBC &83 \ S \ sub A6to0 \ hi 95 47 STA &47,X \ INWK+1,X B5 48 LDA &48,X \ INWK+2,X 29 7F AND #&7F \ keep far E9 00 SBC #0 \ any carry 09 80 ORA #&80 \ sign 45 D1 EOR &D1 \ T 95 48 STA &48,X \ INWK+2,X B0 16 BCS MV11 \ rts A9 01 LDA #1 \ else need to flip sign F5 46 SBC &46,X \ INWK+0,X 95 46 STA &46,X \ INWK+0,X A9 00 LDA #0 \ hi F5 47 SBC &47,X \ INWK+1,X 95 47 STA &47,X \ INWK+1,X A9 00 LDA #0 \ sg F5 48 SBC &48,X \ INWK+2,X 29 7F AND #&7F \ keep far 05 D1 ORA &D1 \ T 95 48 STA &48,X \ INWK+2,X .MV11 60 RTS \ MVT1 done .MVT3 \ -> &15BD \ add INWK(0to2+X) to K(1to3) X = 0, 3, 6 A5 43 LDA &43 \ K+3 85 83 STA &83 \ S 29 80 AND #&80 \ sign only 85 D1 STA &D1 \ T 55 48 EOR &48,X \ INWK+2,X 30 18 BMI MV13 \ sg -ve A5 41 LDA &41 \ K+1 18 CLC \ add lo 75 46 ADC &46,X \ INWK+0,X 85 41 STA &41 \ K+1 A5 42 LDA &42 \ K+2 \ hi 75 47 ADC &47,X \ INWK+1,X 85 42 STA &42 \ K+2 A5 43 LDA &43 \ K+3 \ sg 75 48 ADC &48,X \ INWK+2,X 29 7F AND #&7F 05 D1 ORA &D1 \ T \ sign only 85 43 STA &43 \ K+3 60 RTS .MV13 \ sg -ve A5 83 LDA &83 \ S 29 7F AND #&7F \ keep 7 bits 85 83 STA &83 \ S B5 46 LDA &46,X \ INWK+0,X 38 SEC \ sub lo E5 41 SBC &41 \ K+1 85 41 STA &41 \ K+1 B5 47 LDA &47,X \ INWK+1,X E5 42 SBC &42 \ K+2 \ hi 85 42 STA &42 \ K+2 B5 48 LDA &48,X \ INWK+2,X 29 7F AND #&7F E5 83 SBC &83 \ S 09 80 ORA #&80 \ set bit7 45 D1 EOR &D1 \ T \ sign only 85 43 STA &43 \ K+3 \ sg B0 16 BCS MV14 \ rts A9 01 LDA #1 \ else need to flip sign E5 41 SBC &41 \ K+1 \ lo 85 41 STA &41 \ K+1 A9 00 LDA #0 \ hi E5 42 SBC &42 \ K+2 85 42 STA &42 \ K+2 A9 00 LDA #0 \ sg E5 43 SBC &43 \ K+3 29 7F AND #&7F 05 D1 ORA &D1 \ T \ sign only 85 43 STA &43 \ K+3 .MV14 \ rts 60 RTS \ MVT3 done \ roll alpha=a pitch beta=b, z in direction of travel, y is vertical. \ [ ca sa 0 ] [ 1 a 0] [x] [x + ay ] \ [ -sa.cb ca.cb -sb ] -> [- a 1 -b] so [y] -> [y - ax -bz ] \ [ -sa.sb ca.sb cb ] [-ab b 1] [z] [z + b(y - ax)] .MVS4 \ -> &1619 \ Moveship4, Y is matrix row, pitch&roll update to coordinates A5 8D LDA &8D \ ALPHA 85 81 STA &81 \ Q \ player ship's roll B6 48 LDX &48,Y \ INWK+2,Y 86 82 STX &82 \ R \ lo B6 49 LDX &49,Y \ INWK+3,Y 86 83 STX &83 \ S \ hi B6 46 LDX &46,Y \ INWK+0,Y 86 1B STX &1B \ P \ over-written B9 47 00 LDA &0047,Y \ INWK+1,Y 49 80 EOR #&80 \ flip sign 20 AD 22 JSR &22AD \ MAD \ X.A = alpha*INWK+1,Y + INWK+2to3,Y 99 49 00 STA &0049,Y \ INWK+3,Y \ hi 96 48 STX &48,Y \ INWK+2,Y \ Y=Y-aX \ their comment 86 1B STX &1B \ P B6 46 LDX &46,Y \ INWK+0,Y 86 82 STX &82 \ R \ lo B6 47 LDX &47,Y \ INWK+1,Y 86 83 STX &83 \ S \ hi B9 49 00 LDA &0049,Y \ INWK+3,Y 20 AD 22 JSR &22AD \ MAD \ X.A = alpha*INWK+3,Y + INWK+0to1,Y 99 47 00 STA &0047,Y \ INWK+1,Y \ hi 96 46 STX &46,Y \ INWK+0,Y \ X=X+aY \ their comment 86 1B STX &1B \ P A5 2A LDA &2A \ BETA 85 81 STA &81 \ Q \ player ship's pitch B6 48 LDX &48,Y \ INWK+2,Y 86 82 STX &82 \ R \ lo B6 49 LDX &49,Y \ INWK+3,Y 86 83 STX &83 \ S \ hi B6 4A LDX &4A,Y \ INWK+4,Y 86 1B STX &1B \ P \ lo B9 4B 00 LDA &004B,Y \ INWK+5,Y 49 80 EOR #&80 \ flip sign hi 20 AD 22 JSR &22AD \ MAD \ X.A =-beta*INWK+5,Y + INWK+2to3,Y 99 49 00 STA &0049,Y \ INWK+3,Y \ hi 96 48 STX &48,Y \ INWK+2,Y \ Y=Y-bZ \ their comment 86 1B STX &1B \ P B6 4A LDX &4A,Y \ INWK+4,Y 86 82 STX &82 \ R \ lo B6 4B LDX &4B,Y \ INWK+5,Y 86 83 STX &83 \ S \ hi B9 49 00 LDA &0049,Y \ INWK+3,Y 20 AD 22 JSR &22AD \ MAD \ X.A = beta*INWK+3,Y + INWK+4,5,Y 99 4B 00 STA &004B,Y \ INWK+5,Y \ hi 96 4A STX &4A,Y \ INWK+4,Y \ Z=Z+bY \ their comment 60 RTS \ MVS4 done .MVS5 \ -> &1680 \ Moveship5, small rotation in matrix (1-1/2/256 = cos 1/16 = sine) B5 47 LDA &47,X \ INWK+1,X 29 7F AND #&7F \ hi7 4A LSR A \ hi7/2 85 D1 STA &D1 \ T B5 46 LDA &46,X \ INWK+0,X 38 SEC \ lo E5 D1 SBC &D1 \ T 85 82 STA &82 \ R \ Xindex one is 1-1/512 B5 47 LDA &47,X \ INWK+1,X E9 00 SBC #0 \ hi 85 83 STA &83 \ S B9 46 00 LDA &0046,Y \ INWK+0,Y 85 1B STA &1B \ P \ Prepare to divide Yindex one by 16 B9 47 00 LDA &0047,Y \ INWK+1,Y 29 80 AND #&80 \ sign bit 85 D1 STA &D1 \ T B9 47 00 LDA &0047,Y \ INWK+1,Y 29 7F AND #&7F \ hi7 4A LSR A \ hi7/2 66 1B ROR &1B \ P \ lo 4A LSR A 66 1B ROR &1B \ P 4A LSR A 66 1B ROR &1B \ P 4A LSR A 66 1B ROR &1B \ P \ divided by 16 05 D1 ORA &D1 \ T \ sign bit 45 9A EOR &9A \ RAT2 \ rot sign 86 81 STX &81 \ Q \ protect Xindex 20 B0 22 JSR &22B0 \ ADD \ X.A = P.A + R.S 85 41 STA &41 \ K+1 \ hi 86 40 STX &40 \ K+0 \ lo, save for later A6 81 LDX &81 \ Q \ restore Xindex B9 47 00 LDA &0047,Y \ INWK+1,Y 29 7F AND #&7F \ hi7 4A LSR A \ hi7/2 85 D1 STA &D1 \ T B9 46 00 LDA &0046,Y \ INWK+0,Y 38 SEC \ sub lo E5 D1 SBC &D1 \ T 85 82 STA &82 \ R \ Yindex one is 1-1/512 B9 47 00 LDA &0047,Y \ INWK+1,Y E9 00 SBC #0 \ sub hi 85 83 STA &83 \ S B5 46 LDA &46,X \ INWK+0,X 85 1B STA &1B \ P \ Prepare to divide Xindex one by 16 B5 47 LDA &47,X \ INWK+1,X 29 80 AND #&80 \ sign bit 85 D1 STA &D1 \ T B5 47 LDA &47,X \ INWK+1,X 29 7F AND #&7F \ hi7 4A LSR A 66 1B ROR &1B \ P 4A LSR A 66 1B ROR &1B \ P 4A LSR A 66 1B ROR &1B \ P 4A LSR A 66 1B ROR &1B \ P \ divided by 16 05 D1 ORA &D1 \ T \ sign bit 49 80 EOR #&80 \ flip sign 45 9A EOR &9A \ RAT2 \ rot sign 86 81 STX &81 \ Q \ protect Xindex 20 B0 22 JSR &22B0 \ ADD \ X.A = P.A + R.S 99 47 00 STA &0047,Y \ INWK+1,Y 96 46 STX &46,Y \ INWK+0,Y \ Yindex one now updated by 1/16th of a radian rotation A6 81 LDX &81 \ Q \ restore Xindex A5 40 LDA &40 \ K \ restore Xindex one lo 95 46 STA &46,X \ INWK+0,X A5 41 LDA &41 \ K+1 \ Xindex one now updated by 1/16th of a radian rotation 95 47 STA &47,X \ INWK+1,X 60 RTS \ MVS5 done .MVT6 \ -> &170D \ P(1,2) += inwk,x (Asg is protected but with new sign) A8 TAY \ Yreg = sg 55 48 EOR &48,X \ INWK+2,X 30 0F BMI MV50 \ sg -ve A5 1C LDA &1C \ P+1 18 CLC \ add lo 75 46 ADC &46,X \ INWK+0,X 85 1C STA &1C \ P+1 A5 1D LDA &1D \ P+2 \ hi 75 47 ADC &47,X \ INWK+1,X 85 1D STA &1D \ P+2 98 TYA \ restore old sg ok 60 RTS .MV50 \ sg -ve B5 46 LDA &46,X \ INWK+0,X 38 SEC \ sub lo E5 1C SBC &1C \ P+1 85 1C STA &1C \ P+1 B5 47 LDA &47,X \ INWK+1,X E5 1D SBC &1D \ P+2 \ hi 85 1D STA &1D \ P+2 90 04 BCC MV51 \ fix -ve 98 TYA \ restore Asg 49 80 EOR #&80 \ but flip sign 60 RTS .MV51 \ fix -ve A9 01 LDA #1 \ carry was clear E5 1C SBC &1C \ P+1 85 1C STA &1C \ P+1 A9 00 LDA #0 \ sub hi E5 1D SBC &1D \ P+2 85 1D STA &1D \ P+2 98 TYA \ old Asg ok 60 RTS \ MVT6 done. \ --======== end of Block A === onto Block B ======----- .UNIV \ -> &1741 \ address pointers for 13 ships INF on pages &9. 37 bytes each. 00 09 EQUW page9+37* 0 \ copied to inner worskpace INWK on zero-page when needed 25 09 EQUW page9+37* 1 4A 09 EQUW page9+37* 2 6F 09 EQUW page9+37* 3 94 09 EQUW page9+37* 4 B9 09 EQUW page9+37* 5 DE 09 EQUW page9+37* 6 03 0A EQUW page9+37* 7 28 0A EQUW page9+37* 8 4D 0A EQUW page9+37* 9 72 0A EQUW page9+37*10 97 0A EQUW page9+37*11 BC 0A EQUW page9+37*12 \ allwk up to &0ABC while heap for edges working down from &CFF. .TWOS \ -> &175B \ Mode 4 single pixel 80 40 20 10 EQUD &10204080 08 04 02 01 EQUD &01020408 .TWOS2 \ -> &1763 \ Mode 4 double-width pixel, approx as contained in one char C0 60 30 18 EQUD &183060C0 0C 06 03 03 EQUD &0303060C .CTWOS \ -> &176B \ Mode 5, coloured single pixel 88 44 22 11 EQUD &11224488 \ (last flight byte not done EQUB &88) .LL30 \ draw line using (X1,Y1) , (X2,Y2) .LOIN \ -> &176F 84 85 STY &85 \ YSAV \ will be restored at the end A9 80 LDA #&80 \ set bit7 85 83 STA &83 \ S 0A ASL A \ = 0 85 90 STA &90 \ SWAP A5 36 LDA &36 \ X2 E5 34 SBC &34 \ X1 B0 05 BCS LI1 \ deltaX 49 FF EOR #&FF \ else negate 69 01 ADC #1 38 SEC .LI1 \ deltaX 85 1B STA &1B \ P \ delta-X A5 37 LDA &37 \ Y2 E5 35 SBC &35 \ Y1 B0 04 BCS LI2 \ deltaY 49 FF EOR #&FF \ else negate 69 01 ADC #1 .LI2 \ deltaY 85 81 STA &81 \ Q \ delta-Y C5 1B CMP &1B \ P \ is Q < P ? 90 03 BCC STPX \ if yes will Step along x 4C 42 18 JMP &1842 \ STPY \ else will step along y .STPX \ Step along x for line A6 34 LDX &34 \ X1 E4 36 CPX &36 \ X2 90 11 BCC LI3 \ is X1 < X2 ? hop down, order correct C6 90 DEC &90 \ SWAP \ set flag A5 36 LDA &36 \ X2 85 34 STA &34 \ X1 86 36 STX &36 \ X2 AA TAX A5 37 LDA &37 \ Y2 A4 35 LDY &35 \ Y1 85 35 STA &35 \ Y1 84 37 STY &37 \ Y2 .LI3 \ order now correct Xreg = X1 A5 35 LDA &35 \ Y1 4A LSR A \ build screen index 4A LSR A 4A LSR A 09 60 ORA #&60 \ high byte of screen memory set to page &60+ Y1/8 85 08 STA &08 \ SC+1 A5 35 LDA &35 \ Y1 29 07 AND #7 \ build low A8 TAY \ row in char 8A TXA \ X1 29 F8 AND #&F8 \ keep upper 5 bits 85 07 STA &07 \ SC \ screen lo 8A TXA \ X1 29 07 AND #7 \ keep lower 3 bits AA TAX \ index mask BD 5B 17 LDA &175B,X \ TWOS,X \ Mode 4 single pixel 85 82 STA &82 \ R \ mask byte A5 81 LDA &81 \ Q \ delta-Y A2 FE LDX #&FE \ roll counter 86 81 STX &81 \ Q .LIL1 \ roll Q 0A ASL A \ highest bit of delta-Y B0 04 BCS LI4 \ steep C5 1B CMP &1B \ P \ delta-X 90 03 BCC LI5 \ shallow .LI4 \ steep E5 1B SBC &1B \ P 38 SEC .LI5 \ shallow 26 81 ROL &81 \ Q \ #&FE B0 F2 BCS LIL1 \ loop Q, end with some low bits in Q A6 1B LDX &1B \ P E8 INX \ Xreg is width A5 37 LDA &37 \ Y2 E5 35 SBC &35 \ Y1 B0 2C BCS DOWN \ draw line to the right and down A5 90 LDA &90 \ SWAP D0 07 BNE LI6 \ else Xreg was correct after all, no need to update R CA DEX .LIL2 \ counter X width A5 82 LDA &82 \ R \ mask byte 51 07 EOR (&07),Y \ (SC),Y \ eor can be replaced by direct OR 91 07 STA (&07),Y \ (SC),Y \ in docking hall .LI6 \ Xreg correct 46 82 LSR &82 \ R \ mask byte 90 08 BCC LI7 \ else moving to next column to right. Bring carry in back 66 82 ROR &82 \ R A5 07 LDA &07 \ SC 69 08 ADC #8 \ next column 85 07 STA &07 \ SC .LI7 \ S += Q. this is like an overflow monitor to update Y A5 83 LDA &83 \ S 65 81 ADC &81 \ Q \ some low bits 85 83 STA &83 \ S 90 07 BCC LIC2 \ skip Y adjustment 88 DEY 10 04 BPL LIC2 \ skip Y adjustment C6 08 DEC &08 \ SC+1 A0 07 LDY #7 .LIC2 \ skip Y adjustment CA DEX D0 DC BNE LIL2 \ loop X width A4 85 LDY &85 \ YSAV \ restore Yreg 60 RTS .DOWN \ Line is going to the right and down A5 90 LDA &90 \ SWAP F0 07 BEQ LI9 \ no swap CA DEX .LIL3 \ counter X width A5 82 LDA &82 \ R \ mask byte 51 07 EOR (&07),Y \ (SC),Y 91 07 STA (&07),Y \ (SC),Y .LI9 \ no swap 46 82 LSR &82 \ R 90 08 BCC LI10 \ still in correct column, hop 66 82 ROR &82 \ R A5 07 LDA &07 \ SC 69 08 ADC #8 \ next column 85 07 STA &07 \ SC .LI10 \ this is like an overflow monitor to update Y A5 83 LDA &83 \ S 65 81 ADC &81 \ Q 85 83 STA &83 \ S 90 09 BCC LIC3 \ skip Y adjustment C8 INY C0 08 CPY #8 D0 04 BNE LIC3 \ have not reached bottom byte of char, hop E6 08 INC &08 \ SC+1 A0 00 LDY #0 .LIC3 \ skipped Y adjustment CA DEX D0 DA BNE LIL3 \ loop X width A4 85 LDY &85 \ YSAV \ restore Yreg 60 RTS .STPY \ -> &1842 \ Step along y for line, goes down and to right A4 35 LDY &35 \ Y1 98 TYA A6 34 LDX &34 \ X1 C4 37 CPY &37 \ Y2 B0 10 BCS LI15 \ skip swap if Y1 >= Y2 C6 90 DEC &90 \ SWAP A5 36 LDA &36 \ X2 85 34 STA &34 \ X1 86 36 STX &36 \ X2 AA TAX A5 37 LDA &37 \ Y2 85 35 STA &35 \ Y1 84 37 STY &37 \ Y2 A8 TAY .LI15 \ Y1 Y2 order is now correct 4A LSR A 4A LSR A 4A LSR A 09 60 ORA #&60 85 08 STA &08 \ SC+1 \ screen hi 8A TXA \ X1 29 F8 AND #&F8 85 07 STA &07 \ SC \ screen lo 8A TXA 29 07 AND #7 \ mask index AA TAX BD 5B 17 LDA &175B,X \ TWOS,X \ Mode4 single pixel 85 82 STA &82 \ R \ mask A5 35 LDA &35 \ Y1 29 07 AND #7 A8 TAY A5 1B LDA &1B \ P \ delta-X A2 01 LDX #1 \ roll counter 86 1B STX &1B \ P .LIL4 \ roll P 0A ASL A B0 04 BCS LI13 \ do subraction C5 81 CMP &81 \ Q \ delta-Y 90 03 BCC LI14 \ less than Q .LI13 \ do subtraction E5 81 SBC &81 \ Q 38 SEC .LI14 \ less than Q 26 1B ROL &1B \ P 90 F2 BCC LIL4 \ loop P, end with some low bits in P A6 81 LDX &81 \ Q E8 INX \ adjust height A5 36 LDA &36 \ X2 E5 34 SBC &34 \ X1 90 2D BCC LFT \ if C cleared then line moving to the left - hop down 18 CLC A5 90 LDA &90 \ SWAP F0 07 BEQ LI17 \ skip first point CA DEX .LIL5 \ skipped first point, counter X A5 82 LDA &82 \ R \ mask 51 07 EOR (&07),Y \ (SC),Y 91 07 STA (&07),Y \ (SC),Y .LI17 \ skipped first point 88 DEY 10 04 BPL LI16 \ skip hi adjust C6 08 DEC &08 \ SC+1 A0 07 LDY #7 \ new char .LI16 \ skipped hi adjust A5 83 LDA &83 \ S 65 1B ADC &1B \ P 85 83 STA &83 \ S 90 0C BCC LIC5 \ skip, still in same column 46 82 LSR &82 \ R \ mask 90 08 BCC LIC5 \ no mask bit hop 66 82 ROR &82 \ R \ else moved over to next column, reset mask A5 07 LDA &07 \ SC \ screen lo 69 08 ADC #8 \ next char below 85 07 STA &07 \ SC .LIC5 \ same column CA DEX D0 DC BNE LIL5 \ loop X height A4 85 LDY &85 \ YSAV \ restore Yreg 60 RTS .LFT \ going Left A5 90 LDA &90 \ SWAP F0 07 BEQ LI18 \ skip first point CA DEX \ reduce height .LIL6 \ counter X height A5 82 LDA &82 \ R \ mask 51 07 EOR (&07),Y \ (SC),Y \ eor can be changed 91 07 STA (&07),Y \ (SC),Y .LI18 88 DEY 10 04 BPL LI19 \ skip hi adjust C6 08 DEC &08 \ SC+1 A0 07 LDY #7 \ rest char row .LI19 \ skipped hi adjust A5 83 LDA &83 \ S 65 1B ADC &1B \ P \ some low bits 85 83 STA &83 \ S 90 0D BCC LIC6 \ no overflow 06 82 ASL &82 \ R \ else move byte mask to the left 90 09 BCC LIC6 \ no overflow 26 82 ROL &82 \ R A5 07 LDA &07 \ SC E9 07 SBC #7 \ down 1 char 85 07 STA &07 \ SC 18 CLC .LIC6 \ no overflow CA DEX \ height D0 DB BNE LIL6 \ loop X A4 85 LDY &85 \ YSAV \ restore Yreg .HL6 60 RTS \ end Line drawing .FLKB \ -> &18EC \ Flush keyboard A9 0F LDA #&0F \ flush input buffer AA TAX 4C F4 FF JMP &FFF4 \ OSBYTE .NLIN3 \ -> &18F2 \ Title string and draw line underneath 20 AC 31 JSR &31AC \ TT27 \ process flight token .NLIN4 \ -> &18F5 \ draw Line at Y = #19 A9 13 LDA #19 D0 04 BNE NLIN2 \ guaranteed next horizontal line drawn at Y1=19. .NLIN \ Horizontal line A9 17 LDA #23 \ at Y1 = 23. E6 2D INC &2D \ YC \ Y text cursor .NLIN2 \ Horizontal line at height Acc 85 35 STA &35 \ Y1 A2 02 LDX #2 \ left edge 86 34 STX &34 \ X1 A2 FE LDX #&FE \ right edge 86 36 STX &36 \ X2 D0 0A BNE HLOIN \ guaranteed, horizontal line only uses X1,Y1,X2. .HLOIN2 \ -> &1909 \ Horizontal line X1,X2 using YY as mid-point, Acc is half-wdith. 20 86 35 JSR &3586 \ EDGES \ Clips Horizontal lines 84 35 STY &35 \ Y1 A9 00 LDA #0 \ flag in line buffer solar at height Y1 99 00 0E STA &0E00,Y \ LSO,Y .HLOIN \ -> &1913 \ Draw a horizontal lines that only needs X1,Y1,X2 84 85 STY &85 \ YSAV \ protect Yreg A6 34 LDX &34 \ X1 E4 36 CPX &36 \ X2 F0 D0 BEQ HL6 \ no line rts 90 07 BCC HL5 \ no swap needed A5 36 LDA &36 \ X2 85 34 STA &34 \ X1 86 36 STX &36 \ X2 AA TAX \ Xreg=X1 .HL5 \ no swap needed C6 36 DEC &36 \ X2 A5 35 LDA &35 \ Y1 4A LSR A \ build screen hi 4A LSR A 4A LSR A 09 60 ORA #&60 85 08 STA &08 \ SC+1 A5 35 LDA &35 \ Y1 29 07 AND #7 85 07 STA &07 \ SC \ screen lo 8A TXA \ X1 29 F8 AND #&F8 A8 TAY \ upper 5 bits of X1 .HL1 8A TXA \ X1 29 F8 AND #&F8 85 D1 STA &D1 \ T A5 36 LDA &36 \ X2 29 F8 AND #&F8 38 SEC E5 D1 SBC &D1 \ T F0 37 BEQ HL2 \ within one column 4A LSR A 4A LSR A 4A LSR A 85 82 STA &82 \ R \ wide count A5 34 LDA &34 \ X1 29 07 AND #7 AA TAX \ mask index BD A0 19 LDA &19A0,X \ TWFR,X \ right mask 51 07 EOR (&07),Y \ (SC),Y 91 07 STA (&07),Y \ (SC),Y 98 TYA 69 08 ADC #8 A8 TAY \ next column A6 82 LDX &82 \ R \ wide count CA DEX F0 0E BEQ HL3 \ approaching end 18 CLC .HLL1 \ counter X wide count A9 FF LDA #&FF \ mask full line 51 07 EOR (&07),Y \ (SC),Y 91 07 STA (&07),Y \ (SC),Y 98 TYA 69 08 ADC #8 \ next column A8 TAY CA DEX D0 F3 BNE HLL1 \ loop X wide .HL3 \ approaching end R =1 in HL1 A5 36 LDA &36 \ X2 29 07 AND #7 AA TAX \ mask index BD 99 19 LDA &1999,X \ TWFL,X \ left mask 51 07 EOR (&07),Y \ (SC),Y 91 07 STA (&07),Y \ (SC),Y A4 85 LDY &85 \ YSAV \ restore Yreg 60 RTS .HL2 \ wide done, X1 and X2 within 1 column A5 34 LDA &34 \ X1 29 07 AND #7 AA TAX \ mask index BD A0 19 LDA &19A0,X \ TWFR,X \ right mask 85 D1 STA &D1 \ T \ temp mask A5 36 LDA &36 \ X2 29 07 AND #7 AA TAX \ mask index BD 99 19 LDA &1999,X \ TWFL,X \ left mask 25 D1 AND &D1 \ T \ temp mask 51 07 EOR (&07),Y \ (SC),Y 91 07 STA (&07),Y \ (SC),Y A4 85 LDY &85 \ YSAV \ restore Yreg 60 RTS .TWFL \ -> &1999 \ mask left of horizontal line. 80 C0 E0 F0 EQUD &F0E0C080 F8 FC FE EQUW &FCF8: EQUB &FE .TWFR \ -> &19A0 \ mask right of horizontal line. FF 7F 3F 1F EQUD &1F3F7FFF 0F 07 03 01 EQUD &0103070F .PX3 \ Draw 1 pixel for the case ZZ >= &90 BD 5B 17 LDA &175B,X \ TWOS,X \ Mode 4 single pixel 51 07 EOR (&07),Y \ (SC),Y 91 07 STA (&07),Y \ (SC),Y A4 06 LDY &06 \ T1 \ restore Yreg 60 RTS .PIX1 \ dust Pixel, Acc has ALPHA or BETA in it 20 B0 22 JSR &22B0 \ ADD \ X.A = P.A + R.S 85 27 STA &27 \ YY+1 \ hi 8A TXA \ lo 99 95 0F STA &0F95,Y \ SYL,Y \ dust ylo .PIXEL2 \ -> &19BB \ dust (X1,Y1) from middle A5 34 LDA &34 \ X1 \ xscreen 10 05 BPL PX1 \ +ve X dust 49 7F EOR #&7F \ else negate 18 CLC 69 01 ADC #1 .PX1 \ +ve X dust 49 80 EOR #&80 \ flip bit7 of X1 AA TAX \ xscreen A5 35 LDA &35 \ Y1 29 7F AND #&7F C9 60 CMP #&60 \ #Y screen half height B0 46 BCS PX4 \ too high, rts A5 35 LDA &35 \ Y1 10 04 BPL PX2 \ +ve Y dust 49 7F EOR #&7F \ else negate 69 01 ADC #1 .PX2 \ +ve Y dust 85 D1 STA &D1 \ T \ signed Yoffset A9 61 LDA #&61 \ #Y+1 above mid-point E5 D1 SBC &D1 \ T .PIXEL \ at (X,A) ZZ away. Yreg protected 84 06 STY &06 \ T1 \ save Yreg A8 TAY \ copy of ycoord 4A LSR A 4A LSR A 4A LSR A 09 60 ORA #&60 85 08 STA &08 \ SC+1 \ hi screen 8A TXA \ xscreen 29 F8 AND #&F8 \ column given by upper 5 bits of X 85 07 STA &07 \ SC \ screen lo 98 TYA \ copy of ycoord 29 07 AND #7 \ char row is lower 3 bits of Yreg A8 TAY 8A TXA 29 07 AND #7 AA TAX \ mask index is lower 3 bits of Xreg A5 88 LDA &88 \ ZZ \ pixel distance C9 90 CMP #&90 \ Bigger number is further away B0 AE BCS PX3 \ for the case ZZ >= &90. Draw 1 pixel BD 63 17 LDA &1763,X \ TWOS2,X \ Mode 4 double-width pixel 51 07 EOR (&07),Y \ (SC),Y 91 07 STA (&07),Y \ (SC),Y A5 88 LDA &88 \ ZZ C9 50 CMP #&50 B0 0C BCS PX13 \ middle distance pixel ended 88 DEY \ char row below 10 02 BPL PX14 \ double-size A0 01 LDY #1 \ add row above not below .PX14 \ double size BD 63 17 LDA &1763,X \ TWOS2,X \ double-sized pixel 51 07 EOR (&07),Y \ (SC),Y 91 07 STA (&07),Y \ (SC),Y .PX13 \ middle distance pixel ended A4 06 LDY &06 \ T1 \ restore Yreg .PX4 \ rts 60 RTS \ end Pixel .BLINE \ -> &1A16 \ Ball line for Circle2 uses (X.T) as next y offset for arc 8A TXA 65 E0 ADC &E0 \ K4 \ y0 offset from circle2 is (X,T) 85 78 STA &78 \ K6+2 \ y2 lo = X + K4 lo A5 E1 LDA &E1 \ K4+1 65 D1 ADC &D1 \ T 85 79 STA &79 \ K6+3 \ y2 hi = T + K4 hi A5 92 LDA &92 \ FLAG \ set to #FF at beginning of CIRCLE2 F0 12 BEQ BL1 \ flag 0 E6 92 INC &92 \ FLAG .BL5 \ counter LSP supplied and updated A4 6B LDY &6B \ LSP A9 FF LDA #&FF D9 0D 0F CMP &0F0D,Y \ LSY2-1,Y F0 68 BEQ BL7 \ end, move K6 to K5 99 0E 0F STA &0F0E,Y \ LSY2,Y E6 6B INC &6B \ LSP D0 61 BNE BL7 \ end, move K6 to K5 .BL1 \ flag 0 \ Prepare to clip A5 72 LDA &72 \ K5 85 34 STA &34 \ XX15+0 \ x1 lo A5 73 LDA &73 \ K5+1 85 35 STA &35 \ XX15+1 \ x1 hi A5 74 LDA &74 \ K5+2 85 36 STA &36 \ XX15+2 \ y1 lo A5 75 LDA &75 \ K5+3 85 37 STA &37 \ XX15+3 \ y1 hi A5 76 LDA &76 \ K6 85 38 STA &38 \ XX15+4 \ x2 lo A5 77 LDA &77 \ K6+1 85 39 STA &39 \ XX15+5 \ x2 hi A5 78 LDA &78 \ K6+2 85 3A STA &3A \ XX12 \ y2 lo A5 79 LDA &79 \ K6+3 85 3B STA &3B \ XX12+1 \ y2 hi 20 94 45 JSR &4594 \ LL145 \ Clip XX15 XX12 vector B0 CB BCS BL5 \ no line visible, loop LSP A5 90 LDA &90 \ SWAP F0 10 BEQ BL9 \ skip swap A5 34 LDA &34 \ X1 A4 36 LDY &36 \ X2 85 36 STA &36 \ X2 84 34 STY &34 \ X1 A5 35 LDA &35 \ Y1 A4 37 LDY &37 \ Y2 85 37 STA &37 \ Y2 84 35 STY &35 \ Y1 .BL9 \ swap done A4 6B LDY &6B \ LSP B9 0D 0F LDA &0F0D,Y \ LSY2-1,Y C9 FF CMP #&FF D0 0B BNE BL8 \ skip stores to line buffers A5 34 LDA &34 \ X1 99 C0 0E STA &0EC0,Y \ LSX2,Y A5 35 LDA &35 \ Y1 99 0E 0F STA &0F0E,Y \ LSY2,Y C8 INY \ LSP+1 other end of line segment .BL8 \ skipped stores A5 36 LDA &36 \ X2 99 C0 0E STA &0EC0,Y \ LSX2,Y A5 37 LDA &37 \ Y2 99 0E 0F STA &0F0E,Y \ LSY2,Y C8 INY \ next LSP 84 6B STY &6B \ LSP 20 6F 17 JSR &176F \ LOIN \ draw line using (X1,Y1), (X2,Y2) A5 89 LDA &89 \ XX13 \ flag from clip D0 8F BNE BL5 \ loop LSP as XX13 clip .BL7 \ end, move K6 to K5, cnt+=stp A5 76 LDA &76 \ K6 85 72 STA &72 \ K5 A5 77 LDA &77 \ K6+1 85 73 STA &73 \ K5+1 A5 78 LDA &78 \ K6+2 85 74 STA &74 \ K5+2 A5 79 LDA &79 \ K6+3 85 75 STA &75 \ K5+3 A5 93 LDA &93 \ CNT \ count 18 CLC \ cnt += step 65 95 ADC &95 \ STP \ step for ring 85 93 STA &93 \ CNT 60 RTS \ ball line done. .FLIP \ switch dusty and dustx AC C3 03 LDY &03C3 \ NOSTM \ number of dust particles .FLL1 \ counter Y BE 82 0F LDX &0F82,Y \ SY,Y \ dusty B9 5C 0F LDA &0F5C,Y \ SX,Y \ dustx 85 35 STA &35 \ Y1 99 82 0F STA &0F82,Y \ SY,Y \ dusty 8A TXA \ old dusty 85 34 STA &34 \ X1 99 5C 0F STA &0F5C,Y \ SX,Y B9 A8 0F LDA &0FA8,Y \ SZ,Y 85 88 STA &88 \ ZZ \ dust distance 20 BB 19 JSR &19BB \ PIXEL2 \ dust (X1,Y1) from middle 88 DEY \ next buffer entry D0 E4 BNE FLL1 \ loop Y 60 RTS .PRXS \ -> &1AD0 \ Equipment prices 01 00 EQUW 1 \ PRXS(0) used for 2*fuel_needed, max 140 2C 01 EQUW 300 \ Missile 30.0 Cr A0 0F EQUW 4000 \ Large Cargo Bay 400.0 Cr 70 17 EQUW 6000 \ E.C.M. System (item 4) 600.0 Cr A0 0F EQUW 4000 \ Extra Pulse Lasers 400.0 Cr 10 27 EQUW 10000 \ Extra Beam Lasers 1000.0 Cr 82 14 EQUW 5250 \ Fuel Scoops (item 7) 525.0 Cr 10 27 EQUW 10000 \ Escape Pod 1000.0 Cr 28 23 EQUW 9000 \ Energy Bomb 900.0 Cr 98 3A EQUW 15000 \ Energy Unit 1500.0 Cr 10 27 EQUW 10000 \ Docking Computer 1000.0 Cr 50 C3 EQUW 50000 \ Galactic Hyperspace 5000.0 Cr 60 EA EQUW 60000 \ Military Laser (item 13) 6000.0 Cr 40 1F EQUW 8000 \ Mining Laster (item 14) 800.0 Cr .st4 \ tally high of Status code A2 09 LDX #9 \ Elite 9 C9 19 CMP #25 \ 256*25=6400 kills B0 4D BCS st3 \ Xreg = 9 Elite CA DEX \ Deadly 8 C9 0A CMP #10 \ 256*10=2560 kills B0 48 BCS st3 \ Xreg = 8 Deadly CA DEX \ Dangerous 7 C9 02 CMP #2 \ 256*2= 512 kills B0 43 BCS st3 \ Xreg = 7 Dangerous CA DEX \ else Xreg = 6 Competent D0 40 BNE st3 \ guaranteed down, tally continue .STATUS \ Status screen Start #f8 red key A9 08 LDA #8 \ menu i.d. used by equipment list in plf2 20 37 25 JSR &2537 \ TT66 \ box border with QQ11 set to Acc 20 33 2C JSR &2C33 \ TT111 \ closest to QQ9,10 target system A9 07 LDA #7 \ indent 85 2C STA &2C \ XC \ X text cursor A9 7E LDA #&7E \ token = COMMANDER .....PRESENT SYSTEM...HYPERSPACE SYSTEM...CONDITION 20 F2 18 JSR &18F2 \ NLIN3 \ Title string and draw line underneath A9 CD LDA #&CD \ token = DOCKED 20 CE 12 JSR &12CE \ DETOK \ use TKN1 docked tokens 20 83 26 JSR &2683 \ TT67 \ Next row A9 7D LDA #&7D \ token = LEGAL STATUS: 20 90 26 JSR &2690 \ spc \ Acc to TT27 process flight token, followed by white space A9 13 LDA #&13 \ token = CLEAN AC 8C 03 LDY &038C \ FIST \ Fugitive/Innocent legal status F0 04 BEQ st5 \ clean C0 32 CPY #50 \ if legal status >= #50 then C is set 69 01 ADC #1 \ token = OFFENDER or FUGITIVE .st5 \ clean 20 A1 31 JSR &31A1 \ plf \ TT27 process flight token followed by rtn A9 10 LDA #&10 \ token = RATING: 20 90 26 JSR &2690 \ spc \ Acc to TT27 process flight token, followed by white space AD A0 03 LDA &03A0 \ TALLY+1 D0 B7 BNE st4 \ tally high, >= Competent, up AA TAX \ else less than 256 kills, set Xreg = 0 AD 9F 03 LDA &039F \ TALLY \ the number of kills lo byte 4A LSR A 4A LSR A \ /= 4 so keep upper 6 bits .st5L \ roll kills lo/4 highest bit 54321 E8 INX 4A LSR A \ roll out tally lo bits D0 FC BNE st5L \ loop, max Xreg =5 .st3 \ tally continue, also arrive from st4 tally hi 8A TXA \ tally status Xreg = 0 to 9 18 CLC 69 15 ADC #21 \ Acc = 30 is Elite 20 A1 31 JSR &31A1 \ plf \ TT27 process flight token followed by rtn A9 12 LDA #&12 \ token = 0x0c SHIP : 20 B4 1B JSR &1BB4 \ plf2 \ process flight token then rts then tab AD 6E 03 LDA &036E \ CRGO \ cargo bay size C9 1A CMP #26 \ < 25 tonnes? 90 05 BCC P%+7 \ onto fuel scoop A9 6B LDA #&6B \ token = Large Cargo Bay 20 B4 1B JSR &1BB4 \ plf2 \ process flight token then rts then tab AD 81 03 LDA &0381 \ BST \ Barrel status, fuel scoops F0 05 BEQ P%+7 \ not present, onto e.c.m. A9 6F LDA #&6F \ token = FUEL SCOOPS 20 B4 1B JSR &1BB4 \ plf2 \ process flight token then rts then tab AD 80 03 LDA &0380 \ ECM \ have an ecm? F0 05 BEQ P%+7 \ not present, onto other equipment A9 6C LDA #&6C \ token = E.C.M.SYSTEM 20 B4 1B JSR &1BB4 \ plf2 \ process flight token then rts then tabb A9 71 LDA #&71 \ start other equipment 85 96 STA &96 \ XX4 \ equip start token .stEL \ counter XX4 A8 TAY \ equipment token BE 11 03 LDX &0311,Y \ equipstart =#&382-#&71,Y F0 03 BEQ P%+5 \ equip not present, skip item 20 B4 1B JSR &1BB4 \ plf2 \ process flight token then rts then tab E6 96 INC &96 \ XX4 A5 96 LDA &96 \ XX4 C9 75 CMP #&75 \ end equip list 90 EF BCC stEL \ loop XX4 A2 00 LDX #0 \ onto listing lasers .stQL \ counter X 86 93 STX &93 \ CNT \ laser view counter BC 68 03 LDY &0368,X \ LASER,X F0 23 BEQ stQC \ hop as no laser 8A TXA \ laser view 18 CLC 69 60 ADC #&60 \ token = FRONT .. 20 90 26 JSR &2690 \ spc \ Acc to TT27 process flight token, followed by white space A9 67 LDA #&67 \ token = PULSE LASER A6 93 LDX &93 \ CNT BC 68 03 LDY &0368,X \ LASER,X \ laser type C0 8F CPY #&8F \ #128+POW = beam? D0 02 BNE P%+4 \ skip token update A9 68 LDA #&68 \ token = BEAM LASER C0 97 CPY #&97 \ #Armlas = military? D0 02 BNE P%+4 \ skip token update A9 75 LDA #&75 \ token = MILITARY LASER C0 32 CPY #&32 \ #Mlas = mining? D0 02 BNE P%+4 \ skip token update A9 76 LDA #&76 \ token = MINING LASER 20 B4 1B JSR &1BB4 \ plf2 \ process text token then rts then tab .stQC \ hopped as no laser A6 93 LDX &93 \ CNT E8 INX \ next laser view E0 04 CPX #4 \ 4 views max for lasers 90 CF BCC stQL \ loop X 60 RTS .plf2 \ -> &1BB4 \ process flight text token then rts then tab 20 A1 31 JSR &31A1 \ plf \ TT27 flight token followed by rtn A2 06 LDX #6 \ indent for next item 86 2C STX &2C \ XC 60 RTS .TENS \ -> &1BBC \ print decimal data 48 76 E8 00 EQUD &E87648 \ TENS(0-3) \ 100Billion = 0x17 4876E800 => highest S=23 .pr2 \ -> &1BC0 \ number Xreg to printable characters, include decimal if carry set A9 03 LDA #3 \ number of digits A0 00 LDY #0 \ hi byte = 0 .TT11 \ -> &1BC4 \ Print Xlo.Yhi, C set will make decimal point. 85 80 STA &80 \ U \ number of digits A9 00 LDA #0 85 40 STA &40 \ K \ 4-byte Big-endian buffer 85 41 STA &41 \ K+1 84 42 STY &42 \ K+2 86 43 STX &43 \ K+3 \ lsb .BPRNT \ -> &1BD0 \ Buffer K print (for cash, A=U=9 cash stored in K buffer) A2 0B LDX #11 \ maximum text width 86 D1 STX &D1 \ T 08 PHP \ copy of Carry flag for decimal point 90 04 BCC TT30 \ no decimal point for galaxy or equipment item C6 D1 DEC &D1 \ T C6 80 DEC &80 \ U \ number of digits .TT30 \ no decimal point A9 0B LDA #11 \ text width 38 SEC \ prepare subtraction 85 86 STA &86 \ XX17 E5 80 SBC &80 \ U 85 80 STA &80 \ U E6 80 INC &80 \ U A0 00 LDY #0 84 83 STY &83 \ S \ highest byte for buffer overflow 4C 2C 1C JMP &1C2C \ TT36 \ skip *10 down into loop .TT35 \ -> &1BED \ another *10 06 43 ASL &43 \ K+3 26 42 ROL &42 \ K+2 26 41 ROL &41 \ K+1 26 40 ROL &40 \ K+0 26 83 ROL &83 \ S \ msb A2 03 LDX #3 \ use 5-byte buffer XX15 .tt35 \ counter X move K*2 to XX15 B5 40 LDA &40,X \ K,X 95 34 STA &34,X \ XX15,X CA DEX 10 F9 BPL tt35 \ loop X A5 83 LDA &83 \ S \ msb 85 38 STA &38 \ XX15+4 \ overflow byte 06 43 ASL &43 \ K+3 26 42 ROL &42 \ K+2 26 41 ROL &41 \ K+1 26 40 ROL &40 \ K+0 26 83 ROL &83 \ S 06 43 ASL &43 \ K+3 26 42 ROL &42 \ K+2 26 41 ROL &41 \ K+1 26 40 ROL &40 \ K+0 26 83 ROL &83 \ S 18 CLC \ K*=4 done A2 03 LDX #3 \ build K*8+K*2 .tt36 \ counter X K=K*8+K*2 B5 40 LDA &40,X \ K,X 75 34 ADC &34,X \ XX15,X 95 40 STA &40,X \ K,X CA DEX 10 F7 BPL tt36 \ loop X A5 38 LDA &38 \ XX15+4 \ overflow byte 65 83 ADC &83 \ S 85 83 STA &83 \ S A0 00 LDY #0 \ K*10 to get next column's digit .TT36 \ -> &1C2C \ counter Y, skipped *10 enter A2 03 LDX #3 \ 4 bytes 38 SEC .tt37 \ counter X, subtract tens off. B5 40 LDA &40,X \ K,X FD BC 1B SBC &1BBC,X \ TENS,X \ 100 Billion = & 17 48 76 E8 00 95 34 STA &34,X \ XX15,X CA DEX \ load XX15(3,2,1,0) with K(3,2,1,0) but with 'tens' subtracted off 10 F6 BPL tt37 \ loop X A5 83 LDA &83 \ S E9 17 SBC #23 \ if reached 100 Billion C is still set. 85 38 STA &38 \ XX15+4 \ overflow byte 90 11 BCC TT37 \ exit, subtractions took Y loops A2 03 LDX #3 \ 4 bytes .tt38 \ counter X, copy XX15(3,2,1,0) back to K(3,2,1,0) B5 34 LDA &34,X \ XX15,X 95 40 STA &40,X \ K,X CA DEX 10 F9 BPL tt38 \ loop X A5 38 LDA &38 \ XX15+4 \ overflow byte 85 83 STA &83 \ S \ XX15(4), with a '23' lopped off of it C8 INY \ counter Y, build digit. 4C 2C 1C JMP &1C2C \ TT36 \ loop Y *10 done, up .TT37 \ subtractions took Y loops 98 TYA \ loop count is digit D0 0C BNE TT32 \ number Acc to ascii A5 D1 LDA &D1 \ T \ (T=10 for fuel) F0 08 BEQ TT32 \ =0 is digit Acc to ascii C6 80 DEC &80 \ U 10 0E BPL TT34 \ U +ve with U =8 or 9 (for fuel) A9 20 LDA #&20 \ white space, no leading zeros. D0 07 BNE tt34 \ guaranteed TT26 print character .TT32 \ digit Acc to ascii A0 00 LDY #0 84 D1 STY &D1 \ T \ = 0 18 CLC \ add ascii '0' 69 30 ADC #&30 \ base B .tt34 \ print character 20 8F 1C JSR &1C8F \ TT26 \ print character .TT34 \ U +ve C6 D1 DEC &D1 \ T 10 02 BPL P%+4 \ skip inc E6 D1 INC &D1 \ T \ min 0 C6 86 DEC &86 \ XX17 \ text width 30 0D BMI rT10 \ rts D0 08 BNE P%+10 \ jmp to TT35 *10 again 28 PLP \ recall carry flag, if clear, no decimal point. 90 05 BCC P%+7 \ jmp to TT35 *10 again A9 2E LDA #&2E \ char '.' is decimal point 20 8F 1C JSR &1C8F \ TT26 \ print character 4C ED 1B JMP &1BED \ TT35 \ multiply K(0:3) S, by (another) *10. .rT10 60 RTS \ end of printing digits \ Onto formatting flags for Detok .DTW1 \ -> &1C83 20 EQUB &20 \ mask set bits lower .DTW2 \ -> &1C84 FF EQUB &FF \ flag to use DTW8 Upper .DTW3 \ -> &1C85 00 BRK \ flag set is flight token, clear is docked token .DTW4 \ -> &1C86 00 BRK \ flag send to buffer .DTW5 \ -> &1C87 00 BRK \ index to BUF .DTW6 \ -> &1C88 00 BRK \ flag to use DTW1 lower .DTW8 \ -> &1C89 FF EQUB &FF \ mask clear bits Upper .FEED \ -> &1C8A \ line feed into TT26 A9 0C LDA #&0C \ new row 2C EQUB &2C \ bit2 skip to TT26 print character .MT16 \ -> &1C8D \ DTW7 into TT26 print character A9 EQUB &A9 \ LDA opcode .DTW7 \ -> &1C8E \ MT16 gives DTW7 byte to TT26 41 EQUB &41 \ char 'A' over-writable .TT26 \ -> &1C8F \ PRINT character, also some cases Acc= 11to15. Allows right-justified text 86 07 STX &07 \ SC \ store Xreg A2 FF LDX #&FF \ reset 8E 89 1C STX &1C89 \ DTW8 \ mask to clear Upper bits C9 2E CMP #&2E \ dot F0 11 BEQ DA8 \ some Xreg=&FF C9 3A CMP #&3A \ colon F0 0D BEQ DA8 \ some Xreg=&FF C9 0A CMP #&0A \ begin line F0 09 BEQ DA8 \ some Xreg=&FF C9 0C CMP #&0C \ next row F0 05 BEQ DA8 \ some Xreg=&FF C9 20 CMP #&20 \ space F0 01 BEQ DA8 \ some Xreg=&FF E8 INX \ else other chars set Xreg = 0 .DA8 \ some Xreg=&FF 8E 84 1C STX &1C84 \ DTW2 \ flag to use DTW8 Upper A6 07 LDX &07 \ SC \ restore Xreg 2C 86 1C BIT &1C86 \ DTW4 \ flag send to buffer 30 03 BMI P%+5 \ skip print 4C 56 1D JMP &1D56 \ CHPR \ character print C9 0C CMP #&0C \ using buffer, is Acc new line? F0 0D BEQ DA1 \ Acc = #&0C newline, flush buffer. AE 87 1C LDX &1C87 \ DTW5 \ index into buffer to store Acc 9D 01 0E STA &0E01,X \ BUF,X A6 07 LDX &07 \ SC \ restore Xreg if buffer not flushed EE 87 1C INC &1C87 \ DTW5 18 CLC 60 RTS .DA1 \ Acc = #&0C newline, flush buffer 8A TXA 48 PHA 98 TYA 48 PHA \ push XY .DA5 \ flush (again) AE 87 1C LDX &1C87 \ DTW5 \ buffer index F0 78 BEQ DA6+3 \ far down skip JSR E0 1F CPX #&1F \ #(LL+1) 90 71 BCC DA6 \ X < buffer length 46 08 LSR &08 \ SC+1 \ lines full .DA11 \ reset Yreg to end of buffer A5 08 LDA &08 \ SC+1 30 04 BMI P%+6 \ skip to DAL1 A9 40 LDA #&40 \ set 6lines 85 08 STA &08 \ SC+1 A0 1D LDY #&1D \ #(LL-1) .DAL1 \ counter DTW5 AD 1F 0E LDA &0E1F \ BUF+LL \ last one in buffer C9 20 CMP #&20 \ white space? F0 2D BEQ DA2 \ Exit, last is spc .DAL2 \ counter Y find spc 88 DEY 30 EC BMI DA11 \ reset Yreg to end of buffer F0 EA BEQ DA11 \ reset Yreg to end of buffer B9 01 0E LDA &0E01,Y \ BUF,Y C9 20 CMP #&20 \ white space? D0 F4 BNE DAL2 \ loop Y 06 08 ASL &08 \ SC+1 \ fill line7 30 F0 BMI DAL2 \ loop Y 84 07 STY &07 \ SC \ max index AC 87 1C LDY &1C87 \ DTW5 \ index .DAL6 \ counter Y , shuffle buffer to make room B9 01 0E LDA &0E01,Y \ BUF+0,Y 99 02 0E STA &0E02,Y \ BUF+1,Y 88 DEY C4 07 CPY &07 \ SC \ max index B0 F5 BCS DAL6 \ loop Y EE 87 1C INC &1C87 \ DTW5 \ index .DAL3 \ counter Y D9 01 0E CMP &0E01,Y \ BUF,Y D0 D1 BNE DAL1 \ outer loop DTW5 88 DEY \ look for match 10 F8 BPL DAL3 \ loop Y 30 C2 BMI DA11 \ guaranteed reset Yreg to end of buffer .DA2 \ Exit, last is spc A2 1E LDX #&1E \ #LL buffer max 20 3A 1D JSR &1D3A \ DAS1 \ print out first X members of buffer A9 0C LDA #&0C \ new line 20 56 1D JSR &1D56 \ CHPR \ character print AD 87 1C LDA &1C87 \ DTW5 \ index E9 1E SBC #&1E \ #LL 8D 87 1C STA &1C87 \ DTW5 AA TAX \ buffer empty? F0 1F BEQ DA6+3 \ far down skip jsr A0 00 LDY #0 E8 INX \ remaining count .DAL4 \ counter X,Y, move from upper LL to lower B9 20 0E LDA &0E20,Y \ BUF+LL+1 99 01 0E STA &0E01,Y \ BUF,Y C8 INY CA DEX D0 F6 BNE DAL4 \ loop X F0 93 BEQ DA5 \ guaranteed up, flush again. .DAS1 \ -> &1D3A \ print out first X members of buffer A0 00 LDY #0 .DAL5 \ counter X B9 01 0E LDA &0E01,Y \ BUF,Y 20 56 1D JSR &1D56 \ CHPR \ character print C8 INY CA DEX D0 F6 BNE DAL5 \ loop X .rT9 60 RTS .DA6 \ X < buffer length 20 3A 1D JSR &1D3A \ DAS1 \ print out first X members of buffer, skipped if X=0 8E 87 1C STX &1C87 \ DTW5 \ buffer index, zero index arrives here 68 PLA A8 TAY 68 PLA AA TAX A9 0C LDA #&0C \ new line .DA7 2C EQUB &2C \ bit2 skip bell .BELL \ -> &1D54 \ VDU 7 sound A9 07 LDA #7 .CHPR \ -> &1D56 \ PRINT character, also some cases Acc= 11to15. 85 D2 STA &D2 \ K3 \ character 8C 4F 03 STY &034F \ YSAV2 \ store Yreg 8E 4E 03 STX &034E \ XSAV2 \ store Xreg .RRNEW \ visits here from below if New screen A4 72 LDY &72 \ QQ17 \ printing flag, if 128 start Capital. C8 INY \ print nothing F0 72 BEQ RR4 \ #&0D end, as QQ17 was #&FF A8 TAY \ Yreg = ascii char F0 6F BEQ RR4 \ #&0D end, as 0 30 6D BMI RR4 \ #&0D end, as char > ascii C9 07 CMP #7 \ bell? F0 73 BEQ R5 \ further down, beep, restore. C9 20 CMP #&20 \ is Acc >= #32? B0 10 BCS RR1 \ render this ascii character C9 0A CMP #&0A \ down to line F0 08 BEQ RRX1 \ #&0A A2 01 LDX #1 \ others including #&0C to 86 2C STX &2C \ XC \ beginning of line C9 0D CMP #&0D \ #&0D end F0 59 BEQ RR4 \ prepare to exit .RRX1 \ down line E6 2D INC &2D \ YC \ next Y cursor line D0 55 BNE RR4 \ prepare to exit .RR1 \ >= #&20, render char >= 32 ascii A2 BF LDX #&BF \ first font page in ROM 0A ASL A 0A ASL A 90 02 BCC P%+4 \ bit6 clear hop page #&C1 A2 C1 LDX #&C1 \ font page 0A ASL A 90 01 BCC P%+3 \ if bit5 clear skip inx E8 INX 85 1C STA &1C \ P+1 \ font pointer lo 86 1D STX &1D \ P+2 \ font pointer hi A5 2C LDA &2C \ XC AE CF 03 LDX &03CF \ CATF \ Disk catalog fail flag F0 08 BEQ RR5 \ CATF =0 C0 20 CPY #&20 \ char is spc? D0 04 BNE RR5 \ CATF =0 C9 11 CMP #17 \ XC = 17 already? F0 36 BEQ RR4 \ prepare to exit .RR5 \ CATF =0 0A ASL A 0A ASL A 0A ASL A \ XC*8 is screen lo 85 07 STA &07 \ SC A5 2D LDA &2D \ YC C0 7F CPY #&7F \ char is delete? D0 0C BNE RR2 \ not delete C6 2C DEC &2C \ XC \ cursor back one 69 5E ADC #&5E \ Acc = YC + $&5E AA TAX \ Xreg = screen page of interest A0 F8 LDY #&F8 \ clear last char 20 03 3A JSR &3A03 \ ZES2 \ zero Page X from Y to top F0 1F BEQ RR4 \ guaranteed, prepare to exit .RR2 \ not delete, Acc=YC, Yreg = ascii next char E6 2C INC &2C \ XC C9 18 CMP #24 \ Acc = YC has reached bottom? 90 0A BCC RR3 \ text on this screen 48 PHA \ not needed 20 39 25 JSR &2539 \ TTX66 \ else new box border 68 PLA \ pull A5 D2 LDA &D2 \ K3 \ restore full token 4C 5E 1D JMP &1D5E \ RRNEW \ loop new screen to display text on .RR3 \ text on this screen 09 60 ORA #&60 \ screen hi byte .RREN \ -> &1DC8 \ Acc has destination page for 8 bytes from (P+1) 85 08 STA &08 \ SC+1 \ screen hi A0 07 LDY #7 \ get 8 bytes of font char .RRL1 \ counter Y B1 1C LDA (&1C),Y \ (P+1),Y \ font 11 07 ORA (&07),Y \ (SC),Y \ text not EOR when docked 91 07 STA (&07),Y \ (SC),Y 88 DEY \ next byte 10 F7 BPL RRL1 \ loop Y .RR4 \ -> &1DD5 \ #&0D end, prepare to exit. AC 4F 03 LDY &034F \ YSAV2 AE 4E 03 LDX &034E \ XSAV2 A5 D2 LDA &D2 \ K3 \ restore these earlier values. 18 CLC .rT9 60 RTS .R5 \ beep, restore. 20 43 3C JSR &3C43 \ BEEP 4C D5 1D JMP &1DD5 \ RR4 \ prepare to exit .DIALS \ -> &1DE5 \ update displayed Dials A9 D0 LDA #&D0 \ screen lo 85 07 STA &07 \ SC \ bottom console (SC) = &78D0 A9 78 LDA #&78 \ screen hi 85 08 STA &08 \ SC+1 20 A6 1E JSR &1EA6 \ PZW \ flashing X.A = F0.0F or F0.0? 86 41 STX &41 \ K+1 85 40 STA &40 \ K A9 0E LDA #14 \ threshold to change colour 85 06 STA &06 \ T1 A5 7D LDA &7D \ DELTA \ player ship's speed 20 B9 1E JSR &1EB9 \ DIL-1 \ only /2 A9 00 LDA #0 85 82 STA &82 \ R \ lo 85 1B STA &1B \ P \ lo A9 08 LDA #8 \ center indicator 85 83 STA &83 \ S \ = 8 hi A5 31 LDA &31 \ ALP1 \ roll magnitude 4A LSR A 4A LSR A 05 32 ORA &32 \ ALP2 \ roll sign 49 80 EOR #&80 \ flipped 20 B0 22 JSR &22B0 \ ADD \ X.A = P.A + R.S 20 0D 1F JSR &1F0D \ DIL2 \ roll/pitch indicator takes X.A A5 2A LDA &2A \ BETA \ pitch A6 2B LDX &2B \ BET1 \ pitch sign F0 02 BEQ P%+4 \ skip sbc #1 E9 01 SBC #1 \ will add S=8 to Acc to center 20 B0 22 JSR &22B0 \ ADD \ X.A = P.A + R.S 20 0D 1F JSR &1F0D \ DIL2 \ roll/pitch indicator takes X.A A5 8A LDA &8A \ MCNT \ movecount 29 03 AND #3 \ only 1in4 times D0 B5 BNE rT9 \ continue, else rts A0 00 LDY #0 20 A6 1E JSR &1EA6 \ PZW \ flashing X.A = F0.0F or F0.0? 86 40 STX &40 \ K 85 41 STA &41 \ K+1 A2 03 LDX #3 \ 4 energy banks 86 06 STX &06 \ T1 \ threshold .DLL23 \ counter X 94 3A STY &3A,X \ XX12,X CA DEX \ energy bank 10 FB BPL DLL23 \ loop X A2 03 LDX #3 \ player's energy AD A7 03 LDA &03A7 \ ENERGY 4A LSR A 4A LSR A \ ENERGY/4 85 81 STA &81 \ Q .DLL24 \ counter X 38 SEC E9 10 SBC #16 \ each bank 90 0D BCC DLL26 \ exit subtraction with valid Q, X 85 81 STA &81 \ Q \ bank fraction A9 10 LDA #16 \ full bank 95 3A STA &3A,X \ XX12,X A5 81 LDA &81 \ Q CA DEX \ next energy bank, 0 will be top one. 10 F0 BPL DLL24 \ loop X 30 04 BMI DLL9 \ guaranteed hop, all full. .DLL26 \ exit subtraction with valid Q, X A5 81 LDA &81 \ Q \ bank fraction 95 3A STA &3A,X \ XX12,X .DLL9 \ all full, counter Y B9 3A 00 LDA &003A,Y \ XX12,Y 84 1B STY &1B \ P \ store Y 20 BA 1E JSR &1EBA \ DIL \ indicator A4 1B LDY &1B \ P \ restore Y C8 INY C0 04 CPY #4 \ reached last energy bank? D0 F1 BNE DLL9 \ loop Y A9 78 LDA #&78 \ move to top left row 85 08 STA &08 \ SC+1 A9 10 LDA #16 \ some comment about in range 0to80, shield range 85 07 STA &07 \ SC AD A5 03 LDA &03A5 \ FSH \ front shield 20 B6 1E JSR &1EB6 \ DILX \ shield bar AD A6 03 LDA &03A6 \ ASH \ aft shield 20 B6 1E JSR &1EB6 \ DILX \ shield bar AD 65 03 LDA &0365 \ QQ14 \ ship fuel #70 = #&46 20 B8 1E JSR &1EB8 \ DILX+2 \ /8 not /16 bar 20 A6 1E JSR &1EA6 \ PZW \ flashing X.A = F0.0F or F0.0 86 41 STX &41 \ K+1 85 40 STA &40 \ K A2 0B LDX #11 \ ambient cabin temperature 86 06 STX &06 \ T1 \ threshold to change bar colour AD 42 03 LDA &0342 \ CABTMP \ cabin temperature 20 B6 1E JSR &1EB6 \ DILX \ shield bar AD 47 03 LDA &0347 \ GNTMP \ laser temperature 20 B6 1E JSR &1EB6 \ DILX \ shield bar A9 F0 LDA #&F0 \ high altitude 85 06 STA &06 \ T1 \ threshold to change bar colour 85 41 STA &41 \ K+1 AD D1 0F LDA &0FD1 \ ALTIT \ Altimeter 4C B6 1E JMP &1EB6 \ DILX \ end, no need for compass update. .PZW \ Flashing X.A = F0.0F or F0.0? A2 F0 LDX #&F0 \ yellow A5 8A LDA &8A \ MCNT \ movecount 29 08 AND #8 2D CA 03 AND &03CA \ FLH \ flash toggle F0 02 BEQ P%+4 \ if zero default to lda #&0F 8A TXA \ else return A = X 2C EQUB &2C \ bit2 skip load A9 0F LDA #&0F \ red 60 RTS .DILX \ shield bar 4A LSR A \ /= 2 4A LSR A \ /=4 4A LSR A \ DILX+2 4A LSR A \ DIL-1 .DIL \ energy bank 85 81 STA &81 \ Q \ bar value 0to15 A2 FF LDX #&FF \ mask 86 82 STX &82 \ R C5 06 CMP &06 \ T1 \ threshold to change bar colour B0 04 BCS DL30 \ Acc >= threshold colour will be K A5 41 LDA &41 \ K+1 \ other colour D0 02 BNE DL31 \ skip lda K .DL30 \ threshold colour will be K A5 40 LDA &40 \ K .DL31 85 91 STA &91 \ COL \ the colour A0 02 LDY #2 \ height offset A2 03 LDX #3 \ height of bar-1 .DL1 \ counter X height A5 81 LDA &81 \ Q \ bar value 0to15 C9 04 CMP #4 90 1A BCC DL2 \ exit, Q < 4 E9 04 SBC #4 85 81 STA &81 \ Q A5 82 LDA &82 \ R \ mask .DL5 \ up mask loop 25 91 AND &91 \ COL 91 07 STA (&07),Y \ (SC),Y C8 INY 91 07 STA (&07),Y \ (SC),Y C8 INY 91 07 STA (&07),Y \ (SC),Y 98 TYA \ step to next char 18 CLC 69 06 ADC #6 \ += 6 A8 TAY CA DEX \ reduce height 30 1C BMI DL6 \ ended, next bar. 10 E0 BPL DL1 \ else guaranteed loop X height .DL2 \ exited, Q < 4 49 03 EOR #3 \ counter 85 81 STA &81 \ Q A5 82 LDA &82 \ R \ load up mask colour byte = &FF .DL3 \ counter small Q 0A ASL A \ empty out mask 29 EF AND #&EF C6 81 DEC &81 \ Q 10 F9 BPL DL3 \ loop Q 48 PHA \ store mask A9 00 LDA #0 \ black 85 82 STA &82 \ R A9 63 LDA #99 \ into Q 85 81 STA &81 \ Q 68 PLA \ restore mask 4C DC 1E JMP &1EDC \ DL5 \ up, loop mask .DL6 \ next bar E6 08 INC &08 \ SC+1 .DL9 60 RTS .DIL2 \ -> &1F0D \ roll/pitch indicator takes X.A A0 01 LDY #1 \ counter Y = 1 85 81 STA &81 \ Q \ xpos .DLL10 \ counter Y til #30 38 SEC A5 81 LDA &81 \ Q \ xpos E9 04 SBC #4 \ xpos-4 B0 0E BCS DLL11 \ blank A9 FF LDA #&FF \ else indicator A6 81 LDX &81 \ Q \ palette index 85 81 STA &81 \ Q \ = #&FF BD 6B 17 LDA &176B,X \ CTWOS,X 29 F0 AND #&F0 \ Mode5 colour yellow 4C 2A 1F JMP &1F2A \ DLL12 \ fill .DLL11 \ blank 85 81 STA &81 \ Q \ new xpos A9 00 LDA #0 .DLL12 \ -> &1F2A \ fill 91 07 STA (&07),Y \ (SC),Y C8 INY 91 07 STA (&07),Y \ (SC),Y C8 INY 91 07 STA (&07),Y \ (SC),Y C8 INY 91 07 STA (&07),Y \ (SC),Y 98 TYA \ step to next char 18 CLC 69 05 ADC #5 A8 TAY \ Y updated to next char C0 1E CPY #30 90 D3 BCC DLL10 \ loop Y E6 08 INC &08 \ SC+1 \ next row, at end. 60 RTS .HME2 \ -> &1F41 \ Find Planet (cant find planet whilst in flight) A9 0E LDA #&0E \ token = PLANET' NAME?, 20 CE 12 JSR &12CE \ DETOK \ x1a puts request into INWK+5 onwards 20 23 2B JSR &2B23 \ TT103 \ erase small cross hairs at target hyperspace system 20 28 2C JSR &2C28 \ TT81 \ QQ15 loaded with rolled planet seed A9 00 LDA #0 85 97 STA &97 \ XX20 \ counter for planet id. starts at 0 .HME3 \ counter XX20 20 DF 13 JSR &13DF \ MT14 \ Store Acc in flushed buffer 20 19 31 JSR &3119 \ cpl \ Planet name for seed QQ15 AE 87 1C LDX &1C87 \ DTW5 \ buffer index at end of candidate B5 4B LDA &4B,X \ INWK+5,X \ compare to stored query string C9 0D CMP #&0D \ last letter of query D0 0D BNE HME6 \ go through other planets to find name .HME4 \ counter X CA DEX \ matching letters to B5 4B LDA &4B,X \ INWK+5,X \ query string 09 20 ORA #&20 \ to lower case DD 01 0E CMP &0E01,X \ BUF,X \ compared to candidate name F0 F6 BEQ HME4 \ loop X while matched 8A TXA \ Acc is final index 30 17 BMI HME5 \ Found planet requested else .HME6 \ go through other planets to find name +5 20 31 26 JSR &2631 \ TT20 \ twist operation on QQ15's E6 97 INC &97 \ XX20 \ candidate id counter D0 DD BNE HME3 \ loop XX20 20 33 2C JSR &2C33 \ TT111 \ not found, use closest to QQ9,10. 20 23 2B JSR &2B23 \ TT103 \ draw small cross hairs at target hyperspace system A9 28 LDA #40 \ warning as not found 20 6C 3C JSR &3C6C \ NOISE \ Sound low beep A9 D7 LDA #&D7 \ token = x0FUNKNOWN PLANET 4C CE 12 JMP &12CE \ DETOK \ Not found their comment .HME5 \ Found planet requested A5 6F LDA &6F \ QQ15+3 \ candidate Xcoord 8D C1 03 STA &03C1 \ QQ9 \ update target planet X A5 6D LDA &6D \ QQ15+1 \ candidate Ycoord 8D C2 03 STA &03C2 \ QQ10 \ update target planet Y 20 33 2C JSR &2C33 \ TT111 \ closest to QQ9,10 20 23 2B JSR &2B23 \ TT103 \ draw small cross hairs at target hyperspace system 20 E2 13 JSR &13E2 \ MT15 \ x0F Clear buffer, print to screen from now on 4C 45 38 JMP &3845 \ T95 \ Planet name, distance. \ ---======== end block B == onto block C =====-------- .HATB \ -> &1F99 \ Ship,X,Z(low bit=sgn X) \ their comment, location in docking bay. \ first is XX15+2 is hull count, used 50% \ second is XX15+1 is xlo, lowest bit is +1 or +2 for zhi far away \ third is XX15+0 is zlo, lowest bit is +/- xsg 02 54 3B EQUB 2: EQUW &3B54 \ 2 = shuttle 03 82 B0 EQUB 3: EQUW &B082 \ 3 = transporter 00 00 00 EQUB 0: EQUW 0 01 50 11 EQUB 1: EQUW &1150 \ 1 = cargo 01 D1 28 EQUB 1: EQUW &28D1 \ 1 = cargo 01 40 06 EQUB 1: EQUW &0640 \ 1 = cargo 03 60 90 EQUB 3: EQUW &9060 \ 3 = transporter 04 10 D1 EQUB 4: EQUW &D110 \ 4 = Cobra Mk3 00 00 00 EQUB 0: EQUW 0 \ (Python 1in7 max option) 06 51 F8 EQUB 6: EQUW &F851 \ 6 = viper 07 60 75 EQUB 7: EQUW &7560 \ 7 = krait 00 00 00 EQUB 0: EQUW 0 .HALL \ scene after docking 20 18 21 JSR &2118 \ UNWISE \ swap EOR/ORA of line plotting A9 00 LDA #0 \ = front view 20 37 25 JSR &2537 \ TT66 \ box border 20 36 37 JSR &3736 \ DORND \ random Acc, X is previous Acc 10 29 BPL HA7 \ 50% One random hull 29 03 AND #3 \ else pick one table option 85 D1 STA &D1 \ T 0A ASL A \ 0to3 * 2 0A ASL A 0A ASL A \ *=8 65 D1 ADC &D1 \ T \ 0 9 18 27 AA TAX \ Xreg = Hall table index base A0 03 LDY #3 84 94 STY &94 \ CNT2 .HAL8 \ counter CNT2, hulls A0 02 LDY #2 .HAL9 \ counter Y BD 99 1F LDA &1F99,X \ HATB,X \ table above 99 34 00 STA &0034,Y \ XX15,Y \ order reversed E8 INX 88 DEY \ 3 entries 10 F6 BPL HAL9 \ loop Y 8A TXA \ Base for 48 PHA \ next Hull 20 79 20 JSR &2079 \ HAS1 \ Hall ship, X2=XX15+2 is hull count 68 PLA AA TAX \ next Hull C6 94 DEC &94 \ CNT2 D0 E9 BNE HAL8 \ loop CNT2, next hull. A0 80 LDY #&80 \ mid floor line option D0 14 BNE HA9 \ guaranteed, both cases. .HA7 \ 50% One random hull 4A LSR A \ Arnd +ve/2 85 35 STA &35 \ XX15+1 \ xlo max64 20 36 37 JSR &3736 \ DORND \ random Acc 85 34 STA &34 \ XX15+0 \ zlo, lowest bit is +/- xsg 20 36 37 JSR &3736 \ DORND \ random Acc 29 07 AND #7 85 36 STA &36 \ XX15+2 \ hull count 20 79 20 JSR &2079 \ HAS1 \ Hall ship, X2=XX15+2 is hull count A0 00 LDY #0 \ no mid-floor line .HA9 \ both cases 84 85 STY &85 \ YSAV \ extra line option 20 18 21 JSR &2118 \ UNWISE \ swap EOR/ORA of line plotting .HANGER \ Draw floor and walls A2 02 LDX #2 \ nearest floor line .HAL1 \ counter XSAV floor lines 86 84 STX &84 \ XSAV \ store counter A9 82 LDA #130 \ numerator A6 84 LDX &84 \ XSAV 86 81 STX &81 \ Q 20 16 23 JSR &2316 \ DVID4 \ P.R = 130/XSAV unsigned A5 1B LDA &1B \ P \ offset for horizontal lines, 75to10 18 CLC \ of hanger floor. 69 60 ADC #96 \ Add #Y = 96 half-way up screen to offset 4A LSR A \ build screen hi 4A LSR A 4A LSR A 09 60 ORA #&60 \ screen hi row 85 08 STA &08 \ SC+1 A5 1B LDA &1B \ P \ offset builds 29 07 AND #7 \ screen lo row 85 07 STA &07 \ SC A0 00 LDY #0 20 E8 20 JSR &20E8 \ HAS2 \ horizontal line from left A9 04 LDA #4 \ mask A0 F8 LDY #&F8 \ screen row to start at 20 01 21 JSR &2101 \ HAS3 \ horizontal line from right A4 85 LDY &85 \ YSAV F0 0A BEQ HA2 \ extra line option not needed, hop. 20 E8 20 JSR &20E8 \ HAS2 \ line from YSAV heads right with mask #&20 A0 80 LDY #&80 \ back to mid-point A9 40 LDA #&40 \ mask 20 01 21 JSR &2101 \ HAS3 \ horizontal line heads left .HA2 A6 84 LDX &84 \ XSAV E8 INX \ next floor line E0 0D CPX #13 \ < 13 ? 90 C2 BCC HAL1 \ loop XSAV A9 10 LDA #&10 \ column far wall .HAL6 \ counter XSAV column A2 60 LDX #&60 \ top of screen 86 08 STX &08 \ SC+1 85 84 STA &84 \ XSAV \ starts at &10 column for far wall 29 F8 AND #&F8 85 07 STA &07 \ SC A2 80 LDX #&80 \ fixed pillar mask A0 01 LDY #1 \ start pillar wall .HAL7 \ loop counter Y for row 8A TXA \ pillar mask 31 07 AND (&07),Y \ (SC),Y D0 10 BNE HA6 \ hop, bottom of column as pixels already present 8A TXA \ pillar mask 11 07 ORA (&07),Y \ (SC),Y 91 07 STA (&07),Y \ (SC),Y C8 INY C0 08 CPY #8 \ filled char D0 F1 BNE HAL7 \ loop Y for row E6 08 INC &08 \ SC+1 A0 00 LDY #0 F0 EB BEQ HAL7 \ guaranteed loop Y for row .HA6 \ next pillar A5 84 LDA &84 \ XSAV 18 CLC 69 10 ADC #&10 \ column for far wall counter D0 D6 BNE HAL6 \ loop XSAV column 60 RTS .HAS1 \ Hall ship, XX15 already set up. 20 D8 36 JSR &36D8 \ ZINF \ zero information A5 34 LDA &34 \ XX15+0 85 4C STA &4C \ INWK+6 \ z lo 4A LSR A \ xsign from bit0 66 48 ROR &48 \ INWK+2 \ x sg A5 35 LDA &35 \ XX15+1 85 46 STA &46 \ INWK+0 \ x lo 4A LSR A \ carry = 0 or 1 A9 01 LDA #1 69 00 ADC #0 \ Acc = 1 or 2 85 4D STA &4D \ INWK+7 \ z hi A9 80 LDA #&80 \ -ve 85 4B STA &4B \ INWK+5 \ ysg 85 9A STA &9A \ RAT2 \ rotation A9 0B LDA #&0B \ ship lines heap hi 85 68 STA &68 \ XX19+1 20 36 37 JSR &3736 \ DORND \ random Acc, X is previous A. 85 84 STA &84 \ XSAV \ random rotation .HAL5 \ counter XSAV for small yaw rotations A2 15 LDX #21 \ select row A0 09 LDY #9 \ select column 20 80 16 JSR &1680 \ MVS5 \ moveship5 rotation A2 17 LDX #23 \ select row A0 0B LDY #11 \ select column 20 80 16 JSR &1680 \ MVS5 \ moveship5 rotation A2 19 LDX #25 \ select row A0 0D LDY #13 \ select column 20 80 16 JSR &1680 \ MVS5 \ moveship5 rotation C6 84 DEC &84 \ XSAV \ next yaw rotation D0 E7 BNE HAL5 \ loop XSAV A4 36 LDY &36 \ XX15+2 \ ship count F0 7E BEQ HA1 \ rts, else A2 04 LDX #4 \ start at hull type 2 .hloop \ look for non-null ship pointer E8 INX E8 INX \ next hull pointer BD FE 55 LDA &55FE,X \ XX21-2,X 85 1E STA &1E \ XX0 \ hull pointer lo BD FF 55 LDA &55FF,X \ XX21-1,X 85 1F STA &1F \ XX0+1 \ pointer hi F0 F2 BEQ hloop \ no hull at this Xreg 88 DEY \ reduce ship count D0 EF BNE hloop \ havent found Yth ship request. A0 01 LDY #1 \ get hull area lo B1 1E LDA (&1E),Y \ (XX0),Y 85 81 STA &81 \ Q C8 INY \ hull area hi B1 1E LDA (&1E),Y \ (XX0),Y 85 82 STA &82 \ R 20 3E 3F JSR &3F3E \ LL5 \ 2 Byte SQRT Q = SQR(Q,R) A9 64 LDA #100 \ height above floor set by size of ship E5 81 SBC &81 \ Q 4A LSR A \ halve height 85 49 STA &49 \ INWK+3 \ y lo 20 06 3E JSR &3E06 \ TIDY \ re-orthogonalize rotation matrix 4C 0F 40 JMP &400F \ LL9 \ Object entry .HAS2 \ horizontal line from left A9 20 LDA #&20 \ bits to write to screen .HAL2 \ counter write mask AA TAX \ mask copy 31 07 AND (&07),Y \ (SC),Y D0 11 BNE HA3 \ rts 8A TXA \ else pixel not occupied 11 07 ORA (&07),Y \ (SC),Y 91 07 STA (&07),Y \ (SC),Y 8A TXA \ mask 4A LSR A \ slide mask 90 F2 BCC HAL2 \ loop mask left 98 TYA \ else next column 69 07 ADC #7 \ carry set => Y+=8 A8 TAY \ new column A9 80 LDA #&80 \ new mask 90 EA BCC HAL2 \ loop mask while Y < 256 .HA3 60 RTS .HAS3 \ horizontal line from right, counter write mask AA TAX \ mask copy 31 07 AND (&07),Y \ (SC),Y D0 FA BNE HA3 \ rts 8A TXA \ else pixel not occupied 11 07 ORA (&07),Y \ (SC),Y 91 07 STA (&07),Y \ (SC),Y 8A TXA \ mask 0A ASL A \ slide mask 90 F2 BCC HAS3 \ loop mask right 98 TYA \ else next column E9 08 SBC #8 \ Y -=8 A8 TAY \ new column A9 01 LDA #1 \ new mask B0 EA BCS HAS3 \ loop mask while Y >=0 60 RTS .UNWISE \ -> &2118 \ swap line EOR/ORA AD EF 17 LDA &17EF \ LIL2+2 49 40 EOR #&40 \ eor toggled to ora 8D EF 17 STA &17EF \ LIL2+2 AD 1B 18 LDA &181B \ LIL3+2 49 40 EOR #&40 \ eor toggled to ora 8D 1B 18 STA &181B \ LIL3+2 AD 9A 18 LDA &189A \ LIL5+2 49 40 EOR #&40 \ eor toggled to ora 8D 9A 18 STA &189A \ LIL5+2 AD C6 18 LDA &18C6 \ LIL6+2 49 40 EOR #&40 \ eor toggled to ora 8D C6 18 STA &18C6 \ LIL6+2 .HA1 60 RTS \ tell LL30 swap EOR/ORA their comment .LL164 \ hyperspace tunnel in flight A9 38 LDA #56 \ Hyperspace noise 20 6C 3C JSR &3C6C \ NOISE A9 01 LDA #1 \ hyperspace colours Mode 5 8D 48 03 STA &0348 \ HFX A9 04 LDA #4 \ finer circles 20 53 21 JSR &2153 \ HFS2 \ circles for tunnel CE 48 03 DEC &0348 \ HFX \ hyperspace effects back to 0 60 RTS .LAUN \ launch Rings from space station A9 30 LDA #48 \ Launch 20 6C 3C JSR &3C6C \ NOISE \ Sound A9 08 LDA #8 \ Octagon rings .HFS2 \ -> &2153 \ circles for tunnel 85 95 STA &95 \ STP \ step for ring .HFS1 \ rings of STP 20 39 25 JSR &2539 \ TTX66 \ new box 20 5B 21 JSR &215B \ P%+3 \ do twice \ HFS1+6 \ -> &215B \ Hanger launch rings A2 80 LDX #&80 \ half of xscreen 86 D2 STX &D2 \ K3 A2 60 LDX #96 \ #Y = half of yscreen 86 E0 STX &E0 \ K4 A2 00 LDX #0 \ counter 86 96 STX &96 \ XX4 86 D3 STX &D3 \ K3+1 86 E1 STX &E1 \ K4+1 .HFL5 \ counter XX4, 8 rings 20 77 21 JSR &2177 \ HFL1 \ One ring E6 96 INC &96 \ XX4 A6 96 LDX &96 \ XX4 E0 08 CPX #8 \ 8th ring? D0 F5 BNE HFL5 \ loop 8 rings 60 RTS .HFL1 \ -> &2177 \ One ring A5 96 LDA &96 \ XX4 \ counter 29 07 AND #7 18 CLC 69 08 ADC #8 \ expand out 85 40 STA &40 \ K \ ring radius 8..15 .HFL2 \ roll K radius A9 01 LDA #1 \ arc counter 85 6B STA &6B \ LSP 20 00 35 JSR &3500 \ CIRCLE2 06 40 ASL &40 \ K \ double radius B0 06 BCS HF8 \ exit rts A5 40 LDA &40 \ K C9 A0 CMP #&A0 \ radius < 160? 90 EF BCC HFL2 \ loop K radius .HF8 60 RTS 8C E7 8D ED \ junk ? -> &2192 Only need SQUA onwards? 8A E6 C1 C8 \ sine table ? C8 8B E0 8A E6 D6 C5 C6 C1 CA 95 9D 9C 97 .MU5 \ -> &21A8 \ load Acc into K(0to3) 85 40 STA &40 \ K+0 85 41 STA &41 \ K+1 85 42 STA &42 \ K+2 85 43 STA &43 \ K+3 18 CLC 60 RTS .MLS2 \ -> &21B2 \ assign R.S = XX(0to1), and P.A = A*alp1 (alp1+<32) A6 24 LDX &24 \ XX 86 82 STX &82 \ R \ lo A6 25 LDX &25 \ XX+1 86 83 STX &83 \ S \ hi .MLS1 \ -> &21BA \ P.A = A*alp1 (alp1+<32) A6 31 LDX &31 \ ALP1 \ roll magnitude 86 1B STX &1B \ P \ Fragment as P over-written, \ onwwards .. .SQUA \ -> &21BE \ AP=A*ApresQ \ P.A =A7*A7 29 7F AND #&7F .SQUA2 \ -> &21C0 \ AP=A*A unsigned 85 1B STA &1B \ P AA TAX \ is 0? D0 12 BNE MU11 \ X*A will be done .MU1 \ else P = Acc = Xreg 18 CLC 86 1B STX &1B \ P 8A TXA \ Acc = Xreg 60 RTS .MLU1 \ Y1 = SY,Y and P.A = Y1 7bit * Q B9 82 0F LDA &0F82,Y \ SY,Y 85 35 STA &35 \ Y1 \ dusty .MLU2 \ P.A = A7*Q 29 7F AND #&7F 85 1B STA &1B \ P .MULTU \ AP=P*Qunsg A6 81 LDX &81 \ Q F0 EE BEQ MU1 \ up, P = Acc = Xreg = 0 .MU11 \ P*X will be done CA DEX \ Q-1 as carry will be set for addition 86 D1 STX &D1 \ T A9 00 LDA #0 A2 08 LDX #8 \ counter unwind? 46 1B LSR &1B \ P .MUL6 \ counter X 90 02 BCC P%+4 \ low bit of P lo clear 65 D1 ADC &D1 \ T \ += Q as carry set 6A ROR A \ hi 66 1B ROR &1B \ P CA DEX D0 F6 BNE MUL6 \ loop X unwind? 60 RTS \ Xreg = 0 .MU6 \ set Plo.Phi = Acc 85 1C STA &1C \ P+1 85 1B STA &1B \ P 60 RTS .FMLTU2 \ -> &21F0 \ for CIRCLE2, A=K*sin(X)/256unsg 29 1F AND #&1F \ table max #31 AA TAX \ sine table index BD C0 07 LDA &07C0,X \ SNE,X 85 81 STA &81 \ Q \ 0to255 for sine(0to pi) A5 40 LDA &40 \ K \ the radius .FMLTU \ -> &21FA \ A=A*Q/256unsg Fast multiply 49 FF EOR #&FF 38 SEC 6A ROR A \ bring a carry into bit7 85 1B STA &1B \ P \ slide counter A9 00 LDA #0 .MUL3 \ roll P B0 08 BCS MU7 \ carry set, don't add Q 65 81 ADC &81 \ Q \ maybe a carry 6A ROR A 46 1B LSR &1B \ P D0 F7 BNE MUL3 \ loop P 60 RTS .MU7 \ carry set, don't add Q 4A LSR A \ not ROR A 46 1B LSR &1B \ P D0 F1 BNE MUL3 \ loop P 60 RTS \ MULTU_repeated version A6 81 LDX &81 \ Q F0 AF BEQ MU1 \ up, P = Acc = Xreg = 0 \ MU11_repeated version CA DEX 86 D1 STX &D1 \ T \ = Q-1 as carry will be set for addition A9 00 LDA #0 A2 08 LDX #8 \ counter 46 1B LSR &1B \ P \ MUL6_repeated \ counter X 90 02 BCC P%+4 \ low bit of P lo clear 65 D1 ADC &D1 \ T \ +=Q as carry set 6A ROR A \ hi 66 1B ROR &1B \ P CA DEX D0 F6 BNE MUL6 \ loop X to MUL6_repeated 60 RTS \ Repeat no needed \ MLTU2-2 \ AP(2)= AP* Xunsg(EOR P) 86 81 STX &81 \ Q .MLTU2 \ AP(2)=AP*Qunsg(EORP) 49 FF EOR #&FF \ use 2 bytes of P and A for result 4A LSR A \ hi 85 1C STA &1C \ P+1 A9 00 LDA #0 A2 10 LDX #16 \ 2 bytes 66 1B ROR &1B \ P \ lo .MUL7 \ counter X B0 0B BCS MU21 \ carry set, don't add Q 65 81 ADC &81 \ Q 6A ROR A \ 3 byte result 66 1C ROR &1C \ P+1 66 1B ROR &1B \ P CA DEX D0 F4 BNE MUL7 \ loop X 60 RTS .MU21 \ carry set, don't add Q 4A LSR A \ not ROR A 66 1C ROR &1C \ P+1 66 1B ROR &1B \ P CA DEX D0 EB BNE MUL7 \ loop X 60 RTS .MUT3 \ -> &224D \ R.S = XX(2), A.P=A*Q A6 31 LDX &31 \ ALP1 \ roll magnitude 86 1B STX &1B \ P \ over-written .MUT2 \ R.S = XX(2), A.P=A*Q A6 25 LDX &25 \ XX+1 86 83 STX &83 \ S \ hi .MUT1 \ Rlo = XX, A.P=Q*A A6 24 LDX &24 \ XX 86 82 STX &82 \ R \ lo .MULT1 \ -> &2259 \ A.P=Q*A first part of MAD, multiply and add, protects Yreg AA TAX \ Acc in 29 7F AND #&7F 4A LSR A 85 1B STA &1B \ P 8A TXA \ Acc in 45 81 EOR &81 \ Q 29 80 AND #&80 \ extract sign 85 D1 STA &D1 \ T A5 81 LDA &81 \ Q 29 7F AND #&7F F0 18 BEQ mu10 \ if zero down AA TAX \ Q7 CA DEX \ Q7-1 as carry will be set for addition 86 06 STX &06 \ T1 A9 00 LDA #0 A2 07 LDX #7 \ counter X .MUL4 \ Could unroll this loop 90 02 BCC P%+4 \ skip add 65 06 ADC &06 \ T1 \ Q7-1 as carry set 6A ROR A \ both arrive 66 1B ROR &1B \ P CA DEX D0 F6 BNE MUL4 \ loop X 4A LSR A \ hi 66 1B ROR &1B \ P 05 D1 ORA &D1 \ T \ sign 60 RTS .mu10 \ zero down 85 1B STA &1B \ P 60 RTS .MULT12 \ -> &2287 \ R.S = Q * A \ visited quite often 20 59 22 JSR &2259 \ MULT1 \ visit above, (P,A)= Q * A 85 83 STA &83 \ S \ hi A5 1B LDA &1B \ P 85 82 STA &82 \ R \ lo 60 RTS .TAS3 \ -> &2291 \ returns XX15.inwk,y dot product. B6 46 LDX &46,Y \ INWK+0,Y 86 81 STX &81 \ Q A5 34 LDA &34 \ XX15+0 \ xunit 20 87 22 JSR &2287 \ MULT12 \ R.S = inwk*xx15 B6 48 LDX &48,Y \ INWK+2,Y 86 81 STX &81 \ Q A5 35 LDA &35 \ XX15+1 \ yunit 20 AD 22 JSR &22AD \ MAD \ X.A = inwk*xx15 + R.S 85 83 STA &83 \ S 86 82 STX &82 \ R B6 4A LDX &4A,Y \ INWK+4,Y 86 81 STX &81 \ Q A5 36 LDA &36 \ XX15+2 \ zunit .MAD \ -> &22AD \ Multiply and Add X.A = Q*A + R.S 20 59 22 JSR &2259 \ MULT1 \ AP=Q * A, protects Y. .ADD \ X.A = P.A + R.S 85 06 STA &06 \ T1 \ store hi 29 80 AND #&80 \ extract sign 85 D1 STA &D1 \ T 45 83 EOR &83 \ S 30 0D BMI MU8 \ different signs A5 82 LDA &82 \ R \ lo 18 CLC \ add lo 65 1B ADC &1B \ P AA TAX \ Xreg=lo A5 83 LDA &83 \ S \ hi 65 06 ADC &06 \ T1 \ stored hi 05 D1 ORA &D1 \ T \ sign 60 RTS .MU8 \ different signs A5 83 LDA &83 \ S \ hi 29 7F AND #&7F \ hi S7 85 80 STA &80 \ U A5 1B LDA &1B \ P \ lo 38 SEC \ sub E5 82 SBC &82 \ R AA TAX \ Xreg=lo A5 06 LDA &06 \ T1 \ restore hi 29 7F AND #&7F \ hi T17 E5 80 SBC &80 \ U \ hi S7 B0 0E BCS MU9 \ sign ok 85 80 STA &80 \ U 8A TXA \ lo 49 FF EOR #&FF \ flip 69 01 ADC #1 AA TAX \ negated lo A9 00 LDA #0 \ negate hi E5 80 SBC &80 \ U 09 80 ORA #&80 \ set sign .MU9 \ sign ok 45 D1 EOR &D1 \ T 60 RTS .TIS1 \ -> &22EC \ Tidy subroutine 1 X.A = (-X*A + (R.S))/96 86 81 STX &81 \ Q 49 80 EOR #&80 \ flip sign of Acc 20 AD 22 JSR &22AD \ MAD \ multiply and add (X,A) = -X*A + (R,S) .DVID96 \ Their comment A=A/96: answer is A*255/96 AA TAX 29 80 AND #&80 \ hi sign 85 D1 STA &D1 \ T 8A TXA 29 7F AND #&7F \ hi A7 A2 FE LDX #&FE \ slide counter 86 06 STX &06 \ T1 .DVL3 \ roll T1 clamp Acc to #96 for rotation matrix unity 0A ASL A C9 60 CMP #&60 \ max 96 90 02 BCC DV4 \ skip subtraction E9 60 SBC #&60 .DV4 \ skip subtraction 26 06 ROL &06 \ T1 B0 F5 BCS DVL3 \ loop T1 A5 06 LDA &06 \ T1 05 D1 ORA &D1 \ T \ hi sign 60 RTS .DV42 \ travel step of dust particle front/rear B9 A8 0F LDA &0FA8,Y \ SZ,Y \ dutstz .DV41 \ P.R = speed/ (ZZ/8) dust left/right 85 81 STA &81 \ Q A5 7D LDA &7D \ DELTA \ speed, how far has dust moved based on its z-coord. .DVID4 \ P-R=A/Qunsg \P.R = A/Q unsigned called by Hall A2 08 LDX #8 \ counter 0A ASL A 85 1B STA &1B \ P A9 00 LDA #0 .DVL4 \ counter X 2A ROL A B0 04 BCS DV8 \ Acc carried C5 81 CMP &81 \ Q 90 03 BCC DV5 \ skip subtraction .DV8 \ Acc carried E5 81 SBC &81 \ Q 38 SEC \ carry gets set .DV5 \ skipped subtraction 26 1B ROL &1B \ P \ hi CA DEX D0 F1 BNE DVL4 \ loop X, hi left in P. 4C 79 3F JMP &3F79 \ LL28+4 \ Block G remainder R for AofQ *256/Q .DVID3B2 \ Divide 3 bytes by 2, K = P.A/INWK_z, for planet radius, Xreg protected. 85 1D STA &1D \ P+2 \ num sg A5 4C LDA &4C \ INWK+6 \ z coord lo 85 81 STA &81 \ Q A5 4D LDA &4D \ INWK+7 \ z coord hi 85 82 STA &82 \ R A5 4E LDA &4E \ INWK+8 \ z coord sg 85 83 STA &83 \ S .DVID3B \ K (3bytes)=P(3bytes)/S.R.Q approx Acc equiv K(0). A5 1B LDA &1B \ P \ num lo 09 01 ORA #1 \ avoid 0 85 1B STA &1B \ P A5 1D LDA &1D \ P+2 \ num sg 45 83 EOR &83 \ S \ zsg 29 80 AND #&80 \ extract sign 85 D1 STA &D1 \ T A0 00 LDY #0 \ counter A5 1D LDA &1D \ P+2 \ num sg 29 7F AND #&7F \ will look at lower 7 bits of Acc in. .DVL9 \ counter Y up C9 40 CMP #&40 \ object very far away? B0 08 BCS DV14 \ scaled, exit Ycount 06 1B ASL &1B \ P 26 1C ROL &1C \ P+1 2A ROL A \ 3 bytes C8 INY D0 F4 BNE DVL9 \ loop Y .DV14 \ scaled, exited Ycount 85 1D STA &1D \ P+2 \ big numerator A5 83 LDA &83 \ S \ zsg 29 7F AND #&7F \ denom sg7 30 08 BMI DV9 \ can't happen .DVL6 \ counter Y back down, roll S. 88 DEY \ scale Y back 06 81 ASL &81 \ Q \ denom lo 26 82 ROL &82 \ R 2A ROL A \ hi S 10 F8 BPL DVL6 \ loop roll S until Abit7 set. .DV9 \ bmi cant happen? 85 81 STA &81 \ Q \ mostly empty so now reuse as hi denom A9 FE LDA #&FE \ Xreg protected so can't LL28+4 85 82 STA &82 \ R A5 1D LDA &1D \ P+2 \ big numerator 20 7D 3F JSR &3F7D \ LL31\ R now =A*256/Q A9 00 LDA #0 \ K1to3 = 0 85 41 STA &41 \ K+1 85 42 STA &42 \ K+2 85 43 STA &43 \ K+3 98 TYA \ Y counter for scale 10 1E BPL DV12 \ Ycount +ve A5 82 LDA &82 \ R \ else Y count is -ve, Acc = remainder. .DVL8 \ counter Y up 0A ASL A \ boost up 26 41 ROL &41 \ K+1 26 42 ROL &42 \ K+2 26 43 ROL &43 \ K+3 C8 INY D0 F6 BNE DVL8 \ loop Y 85 40 STA &40 \ K \ lo A5 43 LDA &43 \ K+3 \ sign 05 D1 ORA &D1 \ T 85 43 STA &43 \ K+3 60 RTS .DV13 \ Ycount zero \ K(1to2) already = 0 A5 82 LDA &82 \ R \ already correct 85 40 STA &40 \ K \ lo A5 D1 LDA &D1 \ T \ sign 85 43 STA &43 \ K+3 60 RTS .DV12 \ Ycount +ve F0 F5 BEQ DV13 \ Ycount zero, up. A5 82 LDA &82 \ R \ else reduce remainder .DVL10 \ counter Y reduce 4A LSR A 88 DEY D0 FC BNE DVL10 \ loop Y reduce 85 40 STA &40 \ K \ lo A5 D1 LDA &D1 \ T \ sign 85 43 STA &43 \ K+3 60 RTS .cntr \ Center ship indicators AD C7 03 LDA &03C7 \ DAMP \ damping toggle D0 0C BNE RE1 \ rts .cnt2 8A TXA 10 03 BPL BUMP \ nudge up CA DEX 30 06 BMI RE1 \ rts .BUMP \ counter X nudge up E8 INX D0 03 BNE RE1 \ rts .REDU \ reduce, nudge down. CA DEX F0 FA BEQ BUMP \ nudge up .RE1 \ rts 60 RTS .BUMP2 \ increase X by A 85 D1 STA &D1 \ T 8A TXA 18 CLC 65 D1 ADC &D1 \ T AA TAX \ sum of A and X that BUMP2 was called with 90 02 BCC RE2 \ not sat A2 FF LDX #&FF \ else sat .RE2 \ not sat 10 10 BPL RE3+2 \ if +ve, lda djd A5 D1 LDA &D1 \ T \ restore \ RE2+2 \ finish REDU2 60 RTS .REDU2 \ reduce X by A 85 D1 STA &D1 \ T 8A TXA 38 SEC E5 D1 SBC &D1 \ T AA TAX \ subtracted B0 02 BCS RE3 \ no underflow A2 01 LDX #1 \ else minimum .RE3 \ no underflow 10 F0 BPL RE2+2 \ not negative, up finish. AD C8 03 LDA &03C8 \ DJD \ Toggle Keyboard auto re-centering D0 EB BNE RE2+2 \ no centering, finish. A2 80 LDX #&80 \ middle 30 E7 BMI RE2+2 \ guaranteed, up finish. .PDESC \ -> &23E8 pink volcanoes \ their comment, planet description AD BF 03 LDA &03BF \ QQ8 \ distance lo 0D C0 03 ORA &03C0 \ QQ8+1 \ distance hi D0 34 BNE PD1 \ if distance not zero A0 19 LDY #25 \ #NRU% = 25, number of RU tokens as looking at home planet .PDL1 \ counter Y B9 38 53 LDA &5338,Y \ RUPLA-1,Y \ planet i.d. C5 88 CMP &88 \ ZZ D0 28 BNE PD2 \ trY next B9 51 53 LDA &5351,Y \ RUGAL-1,Y \ galaxy 29 7F AND #&7F \ ignore bit7 CD 67 03 CMP &0367 \ GCNT \ present galaxy D0 1E BNE PD2 \ trY next B9 51 53 LDA &5351,Y \ RUGAL-1,Y \ restore bit7 of galaxy 30 0C BMI PD3 \ -ve galaxy matched AD 58 03 LDA &0358 \ TP \ else at possible mission planet 4A LSR A 90 16 BCC PD1 \ TP \ Do planet description, else .SHOUT \ Yreg correct for mission 20 DF 13 JSR &13DF \ MT14 \ store A in flushed buffer A9 01 LDA #1 \ MT1 keep docked tokens Upper case 2C EQUB &2C \ bit2 skip load .PD3 \ -ve galaxy matched A9 B0 LDA #&B0 \ x0dx0ex13 begin=first letter uppercase use buffer 20 0D 13 JSR &130D \ DETOK2 \ Process docked token 98 TYA \ tokenY id 20 BC 12 JSR &12BC \ DETOK3 \ RUTOK token Y A9 B1 LDA #&B1 \ exit, .x0cx0f end=new line, print buffer D0 0E BNE PD4 \ guaranteed, final token .PD2 \ trY next 88 DEY \ next RU token D0 CE BNE PDL1 \ loop Y .PD1 \ also arrive if QQ8 >0 , Y=0 or mission even. A2 03 LDX #3 \ Do planet description .PDL1 \ counter X B5 6E LDA &6E,X \ QQ15+2,X \ take 4 of the galaxy seeds 95 00 STA &00,X \ RAND,X \ as goat seeds CA DEX \ loop X 10 F9 BPL PDL1 \ set DORND seed - their comment A9 05 LDA #5 \ token = 'x6d' IS 'x6e' .PD4 \ final token 4C CE 12 JMP &12CE \ DETOK \ use TKN1 docked token .BRIEF2 \ Start Thargoid AD 58 03 LDA &0358 \ TP \ mission flag 09 04 ORA #4 \ set bit2 8D 58 03 STA &0358 \ TP A9 0B LDA #&0B \ token = ..services again, ..Ceerdi .. .BRP \ end briefing 20 CE 12 JSR &12CE \ DETOK \ use TKN1 docked token 4C B0 38 JMP &38B0 \ BAY \ start in Docking Bay .BRIEF3 \ 2nd briefing at Ceerdi Gal3 AD 58 03 LDA &0358 \ TP \ mission flag 29 F0 AND #&F0 \ clear lower bits 09 0A ORA #&0A \ set bits 3 (Thargoid) and 1 (Constrictor finished) 8D 58 03 STA &0358 \ TP A9 DE LDA #&DE \ token = ..the beetles.. Birera.. D0 EC BNE BRP \ guaranteed, end briefing. .DEBRIEF2 \ Navy energy unit AD 58 03 LDA &0358 \ TP \ mission flag 09 04 ORA #4 \ set bit 2 8D 58 03 STA &0358 \ TP A9 02 LDA #2 \ increase energy unit recharge rate 8D 83 03 STA &0383 \ ENGY EE A0 03 INC &03A0 \ TALLY+1 \ kill rating += 256. A9 DF LDA #&DF \ token = ..navy energy unit.. D0 D8 BNE BRP \ guaranteed, Thargoid mission done. .DEBRIEF \ Mission 1 finished, TP = 3 4E 58 03 LSR &0358 \ TP 0E 58 03 ASL &0358 \ TP \ clear bit0 EE A0 03 INC &03A0 \ TALLY+1 A2 50 LDX #&50 \ 5,000.0 Cr MOD 256 A0 C3 LDY #&C3 \ 5,000.0 Cr DIV 256 20 CE 2E JSR &2ECE \ MCASH \ add XloYhi to cash A9 0F LDA #&0F \ token = ..sooner than you think.. .BRPS \ branch step for cases below D0 C4 BNE BRP \ guaranteed end briefing .BRIEF \ -> &2478 \ The Constrictor 4E 58 03 LSR &0358 \ TP 38 SEC \ bit0 set 2E 58 03 ROL &0358 \ TP 20 CD 24 JSR &24CD \ BRIS \ Briefing Start 20 D8 36 JSR &36D8 \ ZINF \ zero information A9 1F LDA #&1F \ #CON = the constrictor 85 8C STA &8C \ TYPE \ of ship 20 FB 32 JSR &32FB \ NWSHP \ new ship of TYPE A9 01 LDA #1 \ text first column 85 2C STA &2C \ XC 85 4D STA &4D \ INWK+7 \ zhi 20 37 25 JSR &2537 \ TT66 \ box border with QQ11 set to 1 (no view title) A9 40 LDA #&40 \ move count for spinning ship 85 8A STA &8A \ MCNT .BRL1 \ counter MCNT A2 7F LDX #&7F \ no damping of rotations 86 63 STX &63 \ INWK+29 \ rotx counter roll 86 64 STX &64 \ INWK+30 \ rotz counter pitch 20 0F 40 JSR &400F \ LL9 \ object entry 20 E1 14 JSR &14E1 \ MVEIT \ move it C6 8A DEC &8A \ MCNT D0 F0 BNE BRL1 \ loop move count .BRL2 \ -> &24A9 \ move Constrictor up and away 46 46 LSR &46 \ INWK \ xlo /2, keep zero E6 4C INC &4C \ INWK+6 \ zlo, moved further away F0 18 BEQ BR2 \ exit move E6 4C INC &4C \ INWK+6 \ zlo further away F0 14 BEQ BR2 \ exit move A6 49 LDX &49 \ INWK+3 \ ylo E8 INX \ constrictor moves up screen E0 70 CPX #112 \ saturate at 112 90 02 BCC P%+4 \ skip to stx A2 70 LDX #112 \ else saturate y-lo 86 49 STX &49 \ INWK+3 \ ylo 20 0F 40 JSR &400F \ LL9 \ object entry 20 E1 14 JSR &14E1 \ MVEIT \ move it 4C A9 24 JMP &24A9 \ BRL2 \ loop up and away .BR2 \ exited move E6 4D INC &4D \ INWK+7 \ zhi A9 0A LDA #&0A \ token = ..from our ship yard on Xeer.. D0 A9 BNE BRPS \ guaranteed end briefing .BRIS \ x19 (MT25) Briefing Start A9 D8 LDA #&D8 \ token = Incoming message 20 CE 12 JSR &12CE \ DETOK \ use TKN1 docked token A0 64 LDY #100 \ long delay 4C 9C 25 JMP &259C \ DELAY .PAUSE \ -> &24D7 \ x16 (MT22) repeat 20 F7 24 JSR &24F7 \ PAS1 \ ship middle D0 FB BNE PAUSE \ again if keyboard not? hit .PAL1 \ repeat 20 F7 24 JSR &24F7 \ PAS1 \ ship middle F0 FB BEQ PAL1 \ again A9 00 LDA #0 \ clear exploding/display state|missiles 85 65 STA &65 \ INWK+31 A9 01 LDA #1 \ no view title 20 37 25 JSR &2537 \ TT66 \ box border with QQ11 set to 1 20 0F 40 JSR &400F \ LL9 \ object entry .MT23 \ x17 set YC = #10 and docked tokens lower case A9 0A LDA #10 2C EQUB &2C \ bit skip load .MT29 \ -> &24F0 \ x1d set YC = #6 and docked tokens lower case A9 06 LDA #6 \ rows down for text 85 2D STA &2D \ YC 4C C7 13 JMP &13C7 \ MT13 \ x0d all Docked tokens Lower case .PAS1 \ ship middle (during Constrictor briefing) A9 70 LDA #112 \ ylo 85 49 STA &49 \ INWK+3 A9 00 LDA #0 \ xlo 85 46 STA &46 \ INWK 85 4C STA &4C \ INWK+6 \ zlo A9 02 LDA #2 85 4D STA &4D \ INWK+7 \ zhi 20 0F 40 JSR &400F \ LL9 \ object entry 20 E1 14 JSR &14E1 \ MVEIT \ move it 4C 20 3C JMP &3C20 \ RDKEY \ read keyboard .PAUSE2 \ -> &250E \ x18 (MT24) repeat 20 20 3C JSR &3C20 \ RDKEY D0 FB BNE PAUSE2 \ again 20 20 3C JSR &3C20 \ RDKEY F0 F6 BEQ PAUSE2 \ again 60 RTS .SIGHT \ -> &2519 \ Laser cross-hairs AC 45 03 LDY &0345 \ VIEW B9 68 03 LDA &0368,Y \ LASER,X F0 2D BEQ BOL1-1 \ an rts, naughty. A9 80 LDA #&80 \ xscreen mid 85 73 STA &73 \ QQ19 A9 48 LDA #71 \ #Y-24 yscreen mid 85 74 STA &74 \ QQ19+1 A9 14 LDA #20 \ size of cross hair 85 75 STA &75 \ QQ19+2 20 5D 28 JSR &285D \ TT15 \ the cross hair using QQ19(0to2) A9 0A LDA #10 \ size of cross hair 85 75 STA &75 \ QQ19+2 4C 5D 28 JMP &285D \ TT15 \ again, negate out small cross-hairs. .TT66 \ -> &2537 \ Box border with QQ11 set to Acc 85 87 STA &87 \ QQ11 \ menu id, zero is a titled space view. .TTX66 \ New box 20 AB 13 JSR &13AB \ MT2 \ make lower case A9 80 LDA #&80 \ set bit7 One uppercase letter 85 72 STA &72 \ QQ17 \ flag for flight tokens 8D 84 1C STA &1C84 \ DTW2 \ flag to use DTW8 Upper 0A ASL A \ Acc = 0 8D 46 03 STA &0346 \ LASCT 8D 4A 03 STA &034A \ DLY \ delay 8D 4B 03 STA &034B \ de \ message flag for item + destroyed A2 60 LDX #&60 \ screen hi page start .BOL1 \ box loop 1, counter X 20 FF 39 JSR &39FF \ ZES1 \ zero page X E8 INX \ next page E0 78 CPX #&78 \ last screen page D0 F8 BNE BOL1 \ loop X .BOX \ front view box but no title if menu id > 0 A0 01 LDY #1 \ Y text cursor to top 84 2D STY &2D \ YC A5 87 LDA &87 \ QQ11 \ menu id D0 14 BNE tt66 \ if not zero then no view title A0 0B LDY #11 \ X text cursor set 84 2C STY &2C \ XC AD 45 03 LDA &0345 \ VIEW 09 60 ORA #&60 \ build token = front rear 20 AC 31 JSR &31AC \ TT27 \ process flight text token 20 05 2E JSR &2E05 \ TT162 \ white space A9 AF LDA #&AF \ token = VIEW 20 AC 31 JSR &31AC \ TT27 .tt66 \ no view title A2 00 LDX #0 \ top horizontal line 86 34 STX &34 \ X1 86 35 STX &35 \ Y1 86 72 STX &72 \ QQ17 \ printing flag all Upper case CA DEX \ #255 86 36 STX &36 \ X2 20 13 19 JSR &1913 \ HLOIN \ horizontal line X1,X2,Y1. Yreg protected. A9 02 LDA #2 \ 2 then 1, 0, 255, 254. 85 34 STA &34 \ X1 85 36 STA &36 \ X2 20 8A 25 JSR &258A \ BOS2 \ do twice .BOS2 \ -> &258A 20 8D 25 JSR &258D \ BOS1 \ do twice .BOS1 \ -> &258D A9 00 LDA #0 \ bottom of screen 85 35 STA &35 \ Y1 A9 BF LDA #&BF \ #(2*Y-1) is top of screen 85 37 STA &37 \ Y2 C6 34 DEC &34 \ X1 C6 36 DEC &36 \ X2 4C 6F 17 JMP &176F \ LOIN \ line using (X1,Y1), (X2,Y2) Yreg protected. .DELAY \ -> &259C \ Yreg loaded with length of delay counter 20 0B 26 JSR &260B \ WSCAN \ wait for line scan, ie whole frame completed. 88 DEY D0 FA BNE DELAY \ loop Y 60 RTS .CLYNS \ -> &25A3 \ Clear screen rows, Yreg set to 0. A9 FF LDA #&FF \ Set flag DTW2 to use DTW8 Upper mask 8D 84 1C STA &1C84 \ DTW2 A9 14 LDA #20 \ Y text cursor set few lines from bottom 85 2D STA &2D \ YC 20 83 26 JSR &2683 \ TT67 \ Next row A9 75 LDA #&75 \ page near bottom of screen 85 08 STA &08 \ SC+1 A9 07 LDA #7 \ screen lo 85 07 STA &07 \ SC A9 00 LDA #0 \ most of bytes on Row set to Acc 20 C6 25 JSR &25C6 \ LYN \ Row 1 E6 08 INC &08 \ SC+1 20 C6 25 JSR &25C6 \ LYN \ Row 2 E6 08 INC &08 \ SC+1 C8 INY \ X text cursor = 1 84 2C STY &2C \ XC .LYN \ -> &25C6 \ most of bytes on Row (3) set to Acc. A0 E9 LDY #233 \ start near end of row .EE2 \ counter Y 233to0 91 07 STA (&07),Y \ (SC),Y 88 DEY \ next column to left D0 FB BNE EE2 \ loop Y .SC5 60 RTS \ Yreg = 0 .CPIX4 \ Mode 5 wide pixel at height Y1 20 D3 25 JSR &25D3 \ CPIX2 \ two visits Y1 then Y1-1 twice as thick C6 35 DEC &35 \ Y1 \ next bar .CPIX2 \ -> &25D3 A5 35 LDA &35 \ Y1 \ yscreen A8 TAY \ build screen page 4A LSR A 4A LSR A \ upper 5 bits 4A LSR A \ Y1/8 09 60 ORA #&60 \ screen hi 85 08 STA &08 \ SC+1 A5 34 LDA &34 \ X1 \ xscreen 29 F8 AND #&F8 \ upper 5 bits 85 07 STA &07 \ SC 98 TYA \ yscreen 29 07 AND #7 \ lower 3 bits A8 TAY \ byte row set A5 34 LDA &34 \ X1 29 06 AND #6 \ build mask index bits 2,1 4A LSR A \ /=2, carry cleared. AA TAX \ color mask index for Mode 5, coloured. BD 6B 17 LDA &176B,X \ CTWOS,X 25 91 AND &91 \ COL \ the colour 51 07 EOR (&07),Y \ (SC),Y 91 07 STA (&07),Y \ (SC),Y BD 6C 17 LDA &176C,X \ CTWOS+1,X 10 09 BPL CP1 \ same column A5 07 LDA &07 \ SC 69 08 ADC #8 \ next screen column 85 07 STA &07 \ SC BD 6C 17 LDA &176C,X \ CTWOS+1,X .CP1 \ same column 25 91 AND &91 \ COL \ the colour 51 07 EOR (&07),Y \ (SC),Y 91 07 STA (&07),Y \ (SC),Y 60 RTS .WSCAN \ Wait for line scan A9 00 LDA #0 \ updated by interrupt routine 85 8B STA &8B \ DL .WSCNL \ repeat if DL = 0 A5 8B LDA &8B \ DL F0 FC BEQ WSCNL \ loop DL 60 RTS \ -----==== end of block C ==== onto blockD ====------- .tnpr \ -> &2614 \ ton count for Item QQ29 48 PHA \ Acc was present cargo sum, 0 A2 0C LDX #12 \ above minerals treated as kg EC AD 03 CPX &03AD \ QQ29 \ market item of interest 90 0B BCC kg \ else tonnes .Tml \ Count tonnes, counter X start at 12 7D 6F 03 ADC &036F,X \ QQ20,X \ cargo tonnes added to Acc initial CA DEX 10 FA BPL Tml \ loop X CD 6E 03 CMP &036E \ CRGO \ max cargo, carry set is too much. 68 PLA \ restore Acc start 60 RTS .kg \ market item > 12 AC AD 03 LDY &03AD \ QQ29 \ the cargo item of interest, 0to16 79 6F 03 ADC &036F,Y \ QQ20,Y C9 C8 CMP #200 \ 199 kg max, carry set is too much. 68 PLA \ restore Acc start 60 RTS .TT20 \ -> &2631 \ TWIST on QQ15 to next system 20 34 26 JSR &2634 \ P%+3 \ do four times 20 37 26 JSR &2637 \ TT54 \ do twice .TT54 \ -> &2637 \ Twist seed for next digram in QQ15 A5 6C LDA &6C \ QQ15+0 18 CLC 65 6E ADC &6E \ QQ15+2 AA TAX \ partial sum lo A5 6D LDA &6D \ QQ15+1 65 6F ADC &6F \ QQ15+3 A8 TAY \ partial sum hi A5 6E LDA &6E \ QQ15+2 85 6C STA &6C \ QQ15+0 A5 6F LDA &6F \ QQ15+3 85 6D STA &6D \ QQ15+1 A5 71 LDA &71 \ QQ15+5 85 6F STA &6F \ QQ15+3 A5 70 LDA &70 \ QQ15+4 85 6E STA &6E \ QQ15+2 18 CLC 8A TXA \ sum lo will be new w2_l 65 6E ADC &6E \ QQ15+2 85 70 STA &70 \ QQ15+4 98 TYA \ sum hi will be new w2_h 65 6F ADC &6F \ QQ15+3 85 71 STA &71 \ QQ15+5 60 RTS .TT146 \ -> &265E \ Distance in Light years AD BF 03 LDA &03BF \ QQ8 \ distance in 0.1 LY units 0D C0 03 ORA &03C0 \ QQ8+1 D0 03 BNE TT63 \ if not zero, Distance in Light years E6 2D INC &2D \ YC \ else just new text line 60 RTS .TT63 \ Distance in Light years A9 BF LDA #&BF \ token = DISTANCE 20 A7 31 JSR &31A7 \ TT68 \ process token followed by colon AE BF 03 LDX &03BF \ QQ8 AC C0 03 LDY &03C0 \ QQ8+1 38 SEC \ with decimal point 20 7D 2D JSR &2D7D \ pr5 \ print 4 digits of XloYhi A9 C3 LDA #&C3 \ token = LIGHT YEARS .TT60 \ process TT27 flight token then next row 20 AC 31 JSR &31AC \ TT27 \ process text token .TTX69 \ -> &267D \ next Row E6 2D INC &2D \ YC .TT69 \ next Row with QQ17 set A9 80 LDA #&80 \ set bit7 for Upper case 85 72 STA &72 \ QQ17 .TT67 \ -> &2683 \ next Row A9 0C LDA #&0C 4C AC 31 JMP &31AC \ TT27 \ process text token .TT70 \ Economy is mainly.. A9 AD LDA #&AD \ token for Economy = 'Mainly' 20 AC 31 JSR &31AC \ TT27 \ process text token 4C C7 26 JMP &26C7 \ TT72 \ back down to work out if Ind or Agr .spc \ Acc to TT27, followed by white space 20 AC 31 JSR &31AC \ TT27 \ process text token 4C 05 2E JMP &2E05 \ TT162 \ then visit TT27 again but with A=#32, print white space. .TT25 \ -> &2696 \ display DATA on system A9 01 LDA #1 \ menu id not space view 20 37 25 JSR &2537 \ TT66 \ box border with QQ11 set to Acc A9 09 LDA #9 \ indent text xcursor 85 2C STA &2C \ XC A9 A3 LDA #&A3 \ token = DATA ON .. 20 F2 18 JSR &18F2 \ NLIN3 \ finish title string and draw line underneath 20 7D 26 JSR &267D \ TTX69 \ next row then tab 20 5E 26 JSR &265E \ TT146 \ Distance in Light year A9 C2 LDA #&C2 \ token = ECONOMY 20 A7 31 JSR &31A7 \ TT68 \ process token followed by colon AD B8 03 LDA &03B8 \ QQ3 \ Economy of target system 18 CLC 69 01 ADC #1 \ Economy+1 4A LSR A C9 02 CMP #2 \ is Economy 'mainly..' ? F0 CE BEQ TT70 \ hop up several lines then down to TT72 AD B8 03 LDA &03B8 \ QQ3 \ else reload Economy 90 03 BCC TT71 \ hop over sbc if QQ3 was <4, Industrial E9 05 SBC #5 \ else Agricultural 18 CLC .TT71 69 AA ADC #&AA \ #170 to #172 token = Rich Average Poor 20 AC 31 JSR &31AC \ TT27 \ process flight text token .TT72 \ -> &26C7 Ind or Agr AD B8 03 LDA &03B8 \ QQ3 4A LSR A 4A LSR A \ Economy/4 18 CLC 69 A8 ADC #&A8 \ token = Ind..Agr 20 7A 26 JSR &267A \ TT60 \ TT27 token then next row A9 A2 LDA #&A2 \ token = GOVERNMENT 20 A7 31 JSR &31A7 \ TT68 \ process token followed by colon AD B9 03 LDA &03B9 \ QQ4 \ Government, 0 is Anarchy. 18 CLC 69 B1 ADC #&B1 \ token = Anarchy..Corporate State 20 7A 26 JSR &267A \ TT60 \ TT27 token then next row A9 C4 LDA #&C4 \ token = TECH.LEVEL 20 A7 31 JSR &31A7 \ TT68 \ process token followed by colon AE BA 03 LDX &03BA \ QQ5 \ TechLevel-1 E8 INX \ displayed tech level is 1 higher 18 CLC \ no decimal point 20 C0 1B JSR &1BC0 \ pr2 \ number X to printable characters 20 7D 26 JSR &267D \ TTX69 \ next row then tab A9 C0 LDA #&C0 \ token = POPULATION 20 A7 31 JSR &31A7 \ TT68 \ process token followed by colon 38 SEC \ decimal point AE BB 03 LDX &03BB \ QQ6 \ population*10 20 C0 1B JSR &1BC0 \ pr2 \ number X to printable characters A9 C6 LDA #&C6 \ token = BILLION 20 7A 26 JSR &267A \ TT60 \ process TT27 token then next row A9 28 LDA #&28 \ ascii '(' 20 AC 31 JSR &31AC \ TT27 \ process text token A5 70 LDA &70 \ QQ15+4 \ seed w2_l for species type 30 08 BMI TT75 \ bit7 set is Other species A9 BC LDA #&BC \ else token = HUMAN COLONIAL 20 AC 31 JSR &31AC \ TT27 \ process text token 4C 4E 27 JMP &274E \ TT76 \ jump over Other to Both species .TT75 \ bit7 set, Other species A5 71 LDA &71 \ QQ15+5 \ seed w2 hsb for Other species 4A LSR A 4A LSR A \ bits 8,9 dropped, 48 PHA \ upper 6 onto stack. 29 07 AND #7 C9 03 CMP #3 \ >=3 ? B0 05 BCS TT205 \ skip first adjective 69 E3 ADC #&E3 \ else 0=Large, 1=Fierce, 2=Small -> 227,228,229 20 90 26 JSR &2690 \ spc \ Acc to TT27 followed by white space .TT205 \ skipped first adjective 68 PLA \ restore upper 6 bits of w2 hsb 4A LSR A 4A LSR A 4A LSR A \ throw 3 used bits away C9 06 CMP #6 \ >=6? B0 05 BCS TT206 \ skip second adjective 69 E6 ADC #&E6 \ else Green=0, Red=1, Yellow=2, Blue=3, Black=4, Harmless=5 20 90 26 JSR &2690 \ spc \ Acc to TT27 followed by white space .TT206 \ skipped second adjective A5 6F LDA &6F \ QQ15+3 45 6D EOR &6D \ QQ15+1 29 07 AND #7 85 73 STA &73 \ QQ19 \ temp C9 06 CMP #6 \ >=6? B0 05 BCS TT207 \ skip third adjective 69 EC ADC #&EC \ else Slimy=0, Bug-Eyed=1, 2=Horned, 3=Bony, 4=Fat, 5=Furry 20 90 26 JSR &2690 \ spc \ Acc to TT27 followed by white space .TT207 \ skipped third adjective A5 71 LDA &71 \ QQ15+5 \ seed w2_h 29 03 AND #3 18 CLC 65 73 ADC &73 \ QQ19 \ temp 0to7 29 07 AND #7 \ some adjective combinations not allowed 69 F2 ADC #&F2 \ 0=Rodents 1=Frogs 2=Lizards 3=Lobsters 4=Birds 5=Humanoids 6=Felines 7=Insects 20 AC 31 JSR &31AC \ TT27 \ process flight text token .TT76 \ -> &274E \ Both species options arrive here A9 53 LDA #&53 \ ascii 'S' 20 AC 31 JSR &31AC \ TT27 \ process text token A9 29 LDA #&29 \ ascii ')' 20 7A 26 JSR &267A \ TT60 \ TT27 token then next row A9 C1 LDA #&C1 \ token = GROSS PRODUCTIVITY 20 A7 31 JSR &31A7 \ TT68 \ process token followed by colon AE BD 03 LDX &03BD \ QQ7 \ productivity lo AC BE 03 LDY &03BE \ QQ7+1 \ productivity hi 20 7C 2D JSR &2D7C \ pr6 \ 5 digits of XloYhi, no decimal point. 20 05 2E JSR &2E05 \ TT162 \ white space A9 00 LDA #0 \ clear 85 72 STA &72 \ QQ17 \ for all Upper Case A9 4D LDA #&4D \ ascii 'M' 20 AC 31 JSR &31AC \ TT27 \ process text token A9 E2 LDA #&E2 \ token = ' CR' 20 7A 26 JSR &267A \ TT60 \ TT27 then next row A9 FA LDA #&FA \ token = AVERAGE RADIUS 20 A7 31 JSR &31A7 \ TT68 \ process token followed by colon A5 71 LDA &71 \ QQ15+5 \ seed w2_h A6 6F LDX &6F \ QQ15+3 \ seed w2_l radius lo also = xcoord 29 0F AND #&0F \ lower 4 bits of w2_h determine planet radius hi 18 CLC 69 0B ADC #11 \ radius min = 256*11 = 2816 km A8 TAY \ radius hi 20 7D 2D JSR &2D7D \ pr5 \ 4 digits of radius Xlo.Yhi 20 05 2E JSR &2E05 \ TT162 \ white space A9 6B LDA #&6B \ ascii 'k' 20 8F 1C JSR &1C8F \ TT26 \ print character A9 6D LDA #&6D \ ascii 'm' 20 8F 1C JSR &1C8F \ TT26 \ print character 20 7D 26 JSR &267D \ TTX69 \ next row then tab 4C E8 23 JMP &23E8 \ PDESC \ planet description, e.g. pink volcanoes. \ -> &279C ? junk A6 88 LDX &88 \ ZZ 60 RTS .TT24 \ Calculate System Data A5 6D LDA &6D \ QQ15+1 \ seed w0_h 29 07 AND #7 \ Economy build 8D B8 03 STA &03B8 \ QQ3 \ 0 is Rich Industrial. A5 6E LDA &6E \ QQ15+2 \ seed w1_l 4A LSR A \ Gov build 4A LSR A 4A LSR A \ w1_l/=8 29 07 AND #7 8D B9 03 STA &03B9 \ QQ4 \ Government, 0 is Anarchy 4A LSR A D0 08 BNE TT77 \ above Feudal, economy can be a Rich. AD B8 03 LDA &03B8 \ QQ3 \ else reload economy build 09 02 ORA #2 \ Adjust Eco for Anarchy and Feudal, set bit 1. 8D B8 03 STA &03B8 \ QQ3 .TT77 \ above Feudal, can be a Rich. AD B8 03 LDA &03B8 \ QQ3 \ Economy of target system 49 07 EOR #7 \ flip economy so Rich is now 7 18 CLC \ onto tech level 8D BA 03 STA &03BA \ QQ5 \ Flipped Eco, EcoEOR7, Rich Ind = 7 A5 6F LDA &6F \ QQ15+3 \ seed w1_h 29 03 AND #3 \ add flipped eco 6D BA 03 ADC &03BA \ QQ5 8D BA 03 STA &03BA \ QQ5 AD B9 03 LDA &03B9 \ QQ4 \ Government, 0 is Anarchy 4A LSR A \ gov/2 6D BA 03 ADC &03BA \ QQ5 8D BA 03 STA &03BA \ QQ5 \ Techlevel-1 = 0to14 0A ASL A \ Onto Population 0A ASL A \ (TL-1)*= 4 6D B8 03 ADC &03B8 \ QQ3 \ TechLevel*4 + Eco 7-56 6D B9 03 ADC &03B9 \ QQ4 \ Government, 0 is Anarchy 69 01 ADC #1 \ +1 = population*10 8D BB 03 STA &03BB \ QQ6 AD B8 03 LDA &03B8 \ QQ3 \ Economy 49 07 EOR #7 \ Onto productivity 69 03 ADC #3 \ (Flipped eco +3) 85 1B STA &1B \ P AD B9 03 LDA &03B9 \ QQ4 \ Government, 0 is Anarchy 69 04 ADC #4 \ (Gov +4) 85 81 STA &81 \ Q 20 D3 21 JSR &21D3 \ MULTU \ P.A = P*Q, Productivity part 1. has hsb in A, lsb in P AD BB 03 LDA &03BB \ QQ6 \ population*10 85 81 STA &81 \ Q \ Population, P retains (3to10)*(4to11) = 110 max 20 D3 21 JSR &21D3 \ MULTU \ P.A = P*Q = Productivity part 1 * Population 06 1B ASL &1B \ P 2A ROL A \ hi *=2 06 1B ASL &1B \ P 2A ROL A 06 1B ASL &1B \ P 2A ROL A \ hi *= 8 8D BE 03 STA &03BE \ QQ7+1 \ have to use 2 bytes for Productivity, max 7041 A5 1B LDA &1B \ P 8D BD 03 STA &03BD \ QQ7+0 \ 8*(P.A) = Productivity (768to56320) M Cr 60 RTS .TT22 \ -> &2812 \ Lng Sc \ their comment, Long range galactic chart. A9 40 LDA #&40 \ bit6 set for menu i.d. 20 37 25 JSR &2537 \ TT66 \ box border with QQ11 set to Acc A9 07 LDA #7 \ indent 85 2C STA &2C \ XC 20 28 2C JSR &2C28 \ TT81 \ QQ15 loaded with rolled planet seed A9 C7 LDA #&C7 \ token = GALACTIC CHART. 20 AC 31 JSR &31AC \ TT27 \ process text token 20 F9 18 JSR &18F9 \ NLIN \ Horizontal line at Y1 = 23. A9 98 LDA #152 \ second horizontal line 20 FD 18 JSR &18FD \ NLIN2 \ horizontal line drawn at A = #152 20 C8 28 JSR &28C8 \ TT14 \ Circle with a cross hair A2 00 LDX #0 .TT83 \ counter X 256 systems 86 84 STX &84 \ XSAV \ store counter A6 6F LDX &6F \ QQ15+3 \ seed w1_h is Xcoord of star A4 70 LDY &70 \ QQ15+4 \ seed w2_l is star size 98 TYA 09 50 ORA #&50 \ minimum distance away 85 88 STA &88 \ ZZ \ pixel distance sets star size A5 6D LDA &6D \ QQ15+1 \ seed w0_h is Ycoord*2 4A LSR A \ /2=Ycoord 18 CLC \ add offset to 69 18 ADC #&18 \ Ycoord of star 85 35 STA &35 \ Y1 20 DD 19 JSR &19DD \ PIXEL \ at (X,Y) ZZ away, Yreg protected. 20 31 26 JSR &2631 \ TT20 \ TWIST operation on QQ15(0to5) A6 84 LDX &84 \ XSAV \ restore counter E8 INX \ next system D0 E2 BNE TT83 \ loop X, 256 systems AD C1 03 LDA &03C1 \ QQ9 \ target planet X 85 73 STA &73 \ QQ19 \ xorg for cross-hair AD C2 03 LDA &03C2 \ QQ10 \ target planet Y 4A LSR A \ /= 2 org for cross-hair 85 74 STA &74 \ QQ19+1 \ Y1 calculated again with this A9 04 LDA #4 \ target cross-hair size 85 75 STA &75 \ QQ19+2 .TT15 \ -> &285D \ cross hair using QQ19(0to2) for laser or chart A9 18 LDA #24 \ default cross size A6 87 LDX &87 \ QQ11 \ menu i.d. 10 02 BPL TT178 \ if bit7 clear hop over lda #0 A9 00 LDA #0 \ else Short range chart .TT178 85 78 STA &78 \ QQ19+5 \ Ycross could be #24 A5 73 LDA &73 \ QQ19 \ Xorg 38 SEC E5 75 SBC &75 \ QQ19+2 \ cross-hair size B0 02 BCS TT84 \ Xorg-cross-hair ok A9 00 LDA #0 .TT84 \ Xorg-cross-hair ok 85 34 STA &34 \ X1 \ left A5 73 LDA &73 \ QQ19 \ Xorg 18 CLC \ Xorg+cross-hair size 65 75 ADC &75 \ QQ19+2 90 02 BCC TT85 \ no X overflow A9 FF LDA #&FF \ else right edge .TT85 \ No X overflow 85 36 STA &36 \ X2 \ right A5 74 LDA &74 \ QQ19+1 18 CLC \ Yorg + Ycross 65 78 ADC &78 \ QQ19+5 \ could be #24 85 35 STA &35 \ Y1 \ Yorg + Ycross 20 13 19 JSR &1913 \ HLOIN \ horizontal line X1,Y1,X2 Yreg protected. A5 74 LDA &74 \ QQ19+1 38 SEC \ Yorg - cross-hair size E5 75 SBC &75 \ QQ19+2 B0 02 BCS TT86 \ Yorg-cross-hair ok A9 00 LDA #0 .TT86 \ Yorg-cross-hair ok 18 CLC 65 78 ADC &78 \ QQ19+5 \ could be #24 85 35 STA &35 \ Y1 \ the top-most extent A5 74 LDA &74 \ QQ19+1 \ Yorg 18 CLC 65 75 ADC &75 \ QQ19+2 \ cross-hair size 65 78 ADC &78 \ QQ19+5 \ could be #24 C9 98 CMP #152 \ Ytop 90 06 BCC TT87 \ Yscreen sum ok A6 87 LDX &87 \ QQ11 \ menu id = short range chart? 30 02 BMI TT87 \ Yscreen sum ok A9 97 LDA #151 \ else ymax .TT87 \ Yscreen sum ok 85 37 STA &37 \ Y2 \ Y cross top A5 73 LDA &73 \ QQ19 \ Xorg 85 34 STA &34 \ X1 85 36 STA &36 \ X2 4C 6F 17 JMP &176F \ LOIN \ draw vertical line using (X1,Y1), (X2,Y2) .TT126 \ default Circle with a cross-hair A9 68 LDA #104 \ Xorg 85 73 STA &73 \ QQ19 A9 5A LDA #90 \ Yorg 85 74 STA &74 \ QQ19+1 A9 10 LDA #16 \ cross-hair size 85 75 STA &75 \ QQ19+2 20 5D 28 JSR &285D \ TT15 \ the cross hair using QQ19(0to2) AD 65 03 LDA &0365 \ QQ14 \ ship fuel #70 = #&46 85 40 STA &40 \ K \ radius 4C EC 28 JMP &28EC \ TT128 \ below. QQ19(0,1) and K for circle .TT14 \ -> &28C8 \ Crcl/+ Circle with a cross hair A5 87 LDA &87 \ QQ11 \ menu i.d. 30 E5 BMI TT126 \ if bit7 set up, Short range chart default. AD 65 03 LDA &0365 \ QQ14 \ else ship fuel #70 = #&46 4A LSR A \ Long range chart uses 4A LSR A \ /=4 85 40 STA &40 \ K \ radius AD 59 03 LDA &0359 \ QQ0 \ present X 85 73 STA &73 \ QQ19 \ Xorg AD 5A 03 LDA &035A \ QQ1 \ present Y 4A LSR A \ Y /=2 85 74 STA &74 \ QQ19+1 \ Yorg A9 07 LDA #7 \ cross-hair size 85 75 STA &75 \ QQ19+2 20 5D 28 JSR &285D \ TT15 \ present cross hair using QQ19 A5 74 LDA &74 \ QQ19+1 \ Yorg 18 CLC 69 18 ADC #24 85 74 STA &74 \ QQ19+1 \ Ytop .TT128 \ -> &28EC \ QQ19(0,1) and K for circle A5 73 LDA &73 \ QQ19 85 D2 STA &D2 \ K3 \ Xorg A5 74 LDA &74 \ QQ19+1 85 E0 STA &E0 \ K4 \ Yorg A2 00 LDX #0 \ hi 86 E1 STX &E1 \ K4+1 86 D3 STX &D3 \ K3+1 E8 INX \ step size for circle = 1 86 6B STX &6B \ LSP A2 02 LDX #2 \ load step =2, fairly big circle with small step size. 86 95 STX &95 \ STP 4C 00 35 JMP &3500 \ CIRCLE2 .TT219 \ -> &2904 \ Buy cargo (#f1) A9 02 LDA #2 \ set menu i.d. 20 37 25 JSR &2537 \ TT66 \ box border with QQ11 set to Acc 20 1B 2E JSR &2E1B \ TT163 \ headings for market place A9 80 LDA #&80 \ bit7 set for Capital letter 85 72 STA &72 \ QQ17 20 EC 18 JSR &18EC \ FLKB \ flush keyboard A9 00 LDA #0 \ item of interest 8D AD 03 STA &03AD \ QQ29 .TT220 \ -> &2918 \ List items, counter QQ29 20 8C 2D JSR &2D8C \ TT151 \ Pmk-A display the line for one market item AD AB 03 LDA &03AB \ QQ25 D0 0F BNE TT224 \ Quantity of item not zero 4C 91 29 JMP &2991 \ TT222 \ else skip item .TQ4 \ try Quantity again A0 B0 LDY #&B0 \ token = QUANTITY .Tc \ white space, Y token then question mark 20 05 2E JSR &2E05 \ TT162 \ white space 98 TYA \ Y token 20 84 2D JSR &2D84 \ prq \ print Yreg then question mark. .TTX224 20 6E 30 JSR &306E \ dn2 \ beep, delay. .TT224 \ also Quantity not zero 20 A3 25 JSR &25A3 \ CLYNS \ clear some rows A9 CC LDA #&CC \ token = QUANTITY OF 20 AC 31 JSR &31AC \ TT27 \ process flight token AD AD 03 LDA &03AD \ QQ29 \ item of interest 18 CLC 69 D0 ADC #&D0 \ token = FOOD .. GEM-STONES 20 AC 31 JSR &31AC \ TT27 A9 2F LDA #&2F \ ascii '/' 20 AC 31 JSR &31AC \ TT27 20 F8 2D JSR &2DF8 \ TT152 \ t kg g from QQ19+1 A9 3F LDA #&3F \ ascii '?' 20 AC 31 JSR &31AC \ TT27 20 83 26 JSR &2683 \ TT67 \ next Row A2 00 LDX #0 \ input result returned (also done by gnum) 86 82 STX &82 \ R A2 0C LDX #12 \ counter max 86 06 STX &06 \ T1 .TT223 \ -> &2958 \ correct? 20 AF 29 JSR &29AF \ gnum \ get number for purchase, max quantity QQ25 B0 C6 BCS TQ4 \ error up, try Quantity again 85 1B STA &1B \ P \ else valid quantity 20 14 26 JSR &2614 \ tnpr \ ton purchase check A0 CE LDY #&CE \ token = CARGO B0 BF BCS Tc \ no space, cargo? AD AA 03 LDA &03AA \ QQ24 \ price 85 81 STA &81 \ Q 20 EF 2E JSR &2EEF \ GCASH \ cargo * price 20 A7 2E JSR &2EA7 \ LCASH \ less cash, XloYhi = P*Q*4 A0 C5 LDY #&C5 \ token = CASH 90 B0 BCC Tc \ not enough cash? AC AD 03 LDY &03AD \ QQ29 \ cargo item of interest as index A5 82 LDA &82 \ R \ number of items purchased 48 PHA \ copy number of items purchased 18 CLC \ add to cargo of that kind in ship count 79 6F 03 ADC &036F,Y \ QQ20,Y 99 6F 03 STA &036F,Y \ QQ20,Y B9 8D 03 LDA &038D,Y \ AVL,Y 38 SEC \ Market availability updated E5 82 SBC &82 \ R \ number of items purchased 99 8D 03 STA &038D,Y \ AVL,Y 68 PLA \ number of items purchased F0 03 BEQ TT222 \ if none skip item, else 20 66 30 JSR &3066 \ dn \ else display remaining cash .TT222 \ -> &2991 \ skipped item AD AD 03 LDA &03AD \ QQ29 \ cargo item of interest 18 CLC \ Y text cursor 69 05 ADC #5 \ move to correct row 85 2D STA &2D \ YC A9 00 LDA #0 \ X text cursor 85 2C STA &2C \ XC EE AD 03 INC &03AD \ QQ29 \ next item AD AD 03 LDA &03AD \ QQ29 C9 11 CMP #17 \ max+1 items can purchase B0 03 BCS BAY2 \ exit, all items done 4C 18 29 JMP &2918 \ TT220 \ loop up next item QQ29 .BAY2 \ -> &29AA \ all items done, Back to A9 77 LDA #&77 \ red key #f9 Inventory page 4C A3 37 JMP &37A3 \ FRCE \ forced to enter Main loop .gnum \ -> &29AF \ get number R for purchase, max quantity QQ25 A2 00 LDX #0 \ result returned 86 82 STX &82 \ R A2 0C LDX #12 \ counter max 86 06 STX &06 \ T1 .TT22L \ counter T1 20 5F 3D JSR &3D5F \ TT217 \ get ascii from keyboard, store in X and A A6 82 LDX &82 \ R D0 08 BNE NWDAV2 \ partial result exists in R C9 79 CMP #&79 \ 'y' F0 35 BEQ NWDAV1 \ hit 'y' C9 6E CMP #&6E \ 'n' F0 3A BEQ NWDAV3 \ hit 'n' else other key, a number .NWDAV2 \ partial result exists in R 85 81 STA &81 \ Q \ ascii accepted 38 SEC \ was hit key a digit E9 30 SBC #&30 \ below ascii '0' ? 90 27 BCC OUT \ exit, take R. C9 0A CMP #10 \ digit >= 10 ? B0 D9 BCS BAY2 \ above valid digit, inventory screen. 85 83 STA &83 \ S \ new digit 0to9 A5 82 LDA &82 \ R \ partial result C9 1A CMP #26 \ >= 26 will *10 then exceeds 256. B0 1B BCS OUT \ exit, take R. 0A ASL A \ *=2 85 D1 STA &D1 \ T 0A ASL A 0A ASL A \ *=8 65 D1 ADC &D1 \ T \ Acc = 2*R + 8*R 65 83 ADC &83 \ S \ new digit 0to9 85 82 STA &82 \ R \ new partial result = 10*R + S CD AB 03 CMP &03AB \ QQ25 \ max quantity allowed F0 02 BEQ TT226 \ accept key Q B0 09 BCS OUT \ if R > QQ25, exit .TT226 \ accept key Q A5 81 LDA &81 \ Q \ ascii accepted 20 8F 1C JSR &1C8F \ TT26 \ print character C6 06 DEC &06 \ loop T1 D0 C3 BNE TT22L \ 12 times max. .OUT \ exit A5 82 LDA &82 \ R \ return result R 60 RTS .NWDAV1 \ hit 'y' 20 8F 1C JSR &1C8F \ TT26 \ print Y AD AB 03 LDA &03AB \ QQ25 \ return max allowed QQ25 85 82 STA &82 \ R 60 RTS .NWDAV3 \ hit 'n' 20 8F 1C JSR &1C8F \ TT26 \ print character A9 00 LDA #0 \ return result = 0 85 82 STA &82 \ R 60 RTS .NWDAV4 \ quantity Sell error 20 83 26 JSR &2683 \ TT67 \ next Row A9 B0 LDA #&B0 \ token = QUANTITY 20 84 2D JSR &2D84 \ prq \ print Acc then question mark 20 6E 30 JSR &306E \ dn2 \ beep, delay. AC AD 03 LDY &03AD \ QQ29 \ item 4C 37 2A JMP &2A37 \ NWDAVxx \ down, back into sell list. .TT208 \ -> &2A19 \ Sell cargo (#f2) A9 04 LDA #4 \ menu i.d. = 4 20 37 25 JSR &2537 \ TT66 \ box border with QQ11 set to Acc A9 0A LDA #10 \ indent 85 2C STA &2C \ XC 20 EC 18 JSR &18EC \ FLKB \ flush keyboard A9 CD LDA #&CD \ token = SELL 20 AC 31 JSR &31AC \ TT27 \ process text token A9 CE LDA #&CE \ token = CARGO 20 F2 18 JSR &18F2 \ NLIN3 \ finish title string and draw line underneath 20 83 26 JSR &2683 \ TT67 \ next Row .TT210 \ Cargo list Inventory (inc sell cargo loop) A0 00 LDY #0 .TT211 \ counter Y = QQ29 for items 8C AD 03 STY &03AD \ QQ29 .NWDAVxx \ -> &2A37 \ in sell list, Yreg = QQ29 is item index BE 6F 03 LDX &036F,Y \ QQ20,Y \ ship cargo count F0 67 BEQ TT212 \ skip cargo item 98 TYA \ build index base 0A ASL A 0A ASL A \ Y*4 A8 TAY \ build index base Y*4 B9 A7 3D LDA &3DA7,Y \ QQ23+1,Y \ Prxs 85 74 STA &74 \ QQ19+1 \ byte1 of Market Prxs info 8A TXA \ ship cargo count 48 PHA \ store 20 7F 26 JSR &267F \ TT69 \ next Row with QQ17 set 18 CLC \ item index used to build token AD AD 03 LDA &03AD \ QQ29 69 D0 ADC #&D0 \ token = FOOD .. GEM-STONES 20 AC 31 JSR &31AC \ TT27 \ process flight text token A9 0E LDA #14 \ indent 85 2C STA &2C \ XC 68 PLA \ restore AA TAX \ ship cargo count 8D AB 03 STA &03AB \ QQ25 18 CLC \ no decimal point 20 C0 1B JSR &1BC0 \ pr2 \ number X to printable characters 20 F8 2D JSR &2DF8 \ TT152 \ t kg g from QQ19+1 byte1 A5 87 LDA &87 \ QQ11 \ menu i.d. C9 04 CMP #4 \ are we selling or just listing cargo? D0 3A BNE TT212 \ skip sell item A9 CD LDA #&CD \ token = SELL 20 AC 31 JSR &31AC \ TT27 A9 CE LDA #&CE \ docked token = x01 (Y/N)? 20 CE 12 JSR &12CE \ DETOK \ use TKN1 docked token 20 AF 29 JSR &29AF \ gnum \ get number, max quantity QQ25 is ship cargo count F0 2B BEQ TT212 \ if 0 skip sell item B0 8E BCS NWDAV4 \ quantity Sell error, up AD AD 03 LDA &03AD \ QQ29 \ item index A2 FF LDX #&FF \ partial print 86 72 STX &72 \ QQ17 20 8C 2D JSR &2D8C \ TT151 \ Pmk-A display the line for one market item AC AD 03 LDY &03AD \ QQ29 B9 6F 03 LDA &036F,Y \ QQ20,Y \ cargo count 38 SEC E5 82 SBC &82 \ R \ sold amount 99 6F 03 STA &036F,Y \ QQ20,Y \ ship cargo count A5 82 LDA &82 \ R 85 1B STA &1B \ P \ amount AD AA 03 LDA &03AA \ QQ24 \ price 85 81 STA &81 \ Q 20 EF 2E JSR &2EEF \ GCASH \ amount * price \ XloYhi = P*Q*4 20 CE 2E JSR &2ECE \ MCASH \ add Xlo.Yhi to cash A9 00 LDA #0 \ All upper case 85 72 STA &72 \ QQ17 .TT212 \ skipped (sell) item AC AD 03 LDY &03AD \ QQ29 \ market item index C8 INY \ next market item C0 11 CPY #17 \ last cargo type? 90 89 BCC TT211 \ loop, next QQ29 A5 87 LDA &87 \ QQ11 \ menu i.d. C9 04 CMP #4 \ are we selling or just listing cargo? D0 06 BNE TT213-1 \ rts else 20 6E 30 JSR &306E \ dn2 \ All sells done - beep, delay. 4C AA 29 JMP &29AA \ BAY2 \ Inventory screen. 60 RTS \ needed TT213-1 .TT213 \ -> &2AB8 \ Invntry Inventory A9 08 LDA #8 \ menu i.d. 20 37 25 JSR &2537 \ TT66 \ box border with QQ11 set to A A9 0B LDA #11 \ indent 85 2C STA &2C \ XC A9 A4 LDA #&A4 \ token = INVENTORY 20 7A 26 JSR &267A \ TT60 \ TT27 then next row 20 F5 18 JSR &18F5 \ NLIN4 \ draw line at Y = #19 20 78 31 JSR &3178 \ fwl \ fuel and cash AD 6E 03 LDA &036E \ CRGO C9 1A CMP #26 \ size of cargo bay? 90 05 BCC P%+7 \ jmp TT210 list Cargo A9 6B LDA #&6B \ token = Large cargo bay 20 AC 31 JSR &31AC \ TT27 \ process flight text token 4C 32 2A JMP &2A32 \ TT210 \ list Cargo, up. .TT221 \ -> &2ADB \ called by anyone? token Acc Y/N ? 20 AC 31 JSR &31AC \ TT27 A9 CE LDA #&CE \ token = x01 (Y/N)? 20 CE 12 JSR &12CE \ DETOK \ use TKN1 docked token 20 5F 3D JSR &3D5F \ TT217 \ get ascii from keyboard, store in X and A 09 20 ORA #&20 \ to lower case C9 79 CMP #&79 \ ascii 'y' F0 05 BEQ TT218 \ yes, set carry A9 6E LDA #&6E \ ascii 'n' 4C 8F 1C JMP &1C8F \ TT26 \ print character .TT218 \ yes, set carry 20 8F 1C JSR &1C8F \ TT26 \ print character 38 SEC \ set carry 60 RTS .TT16 \ -> &2AF6 \ Arrive with X and Y values to shift cross-hairs on charts by 8A TXA 48 PHA \ Xinc 88 DEY \ negate Yinc 98 TYA 49 FF EOR #&FF 48 PHA \ negate Yinc 20 0B 26 JSR &260B \ WSCAN \ wait for line scan, ie whole frame completed. 20 23 2B JSR &2B23 \ TT103 \ erase small cross hairs at target hyperspace system 68 PLA \ negated Yinc 85 76 STA &76 \ QQ19+3 \ inc AD C2 03 LDA &03C2 \ QQ10 \ target y 20 39 2B JSR &2B39 \ TT123 \ coordinate update, fix overflow A5 77 LDA &77 \ QQ19+4 \ result 8D C2 03 STA &03C2 \ QQ10 \ target y 85 74 STA &74 \ QQ19+1 \ new Y 68 PLA \ Xinc 85 76 STA &76 \ QQ19+3 \ inc AD C1 03 LDA &03C1 \ QQ9 \ target x 20 39 2B JSR &2B39 \ TT123 \ coordinate update, fix overflows A5 77 LDA &77 \ QQ19+4 \ result 8D C1 03 STA &03C1 \ QQ9 \ target x 85 73 STA &73 \ QQ19 \ new X .TT103 \ -> &2B23 \ Draw small cross hairs at target hyperspace system. A5 87 LDA &87 \ QQ11 \ menu i.d. 30 23 BMI TT105 \ bit7 set is Short range chart cross-hair clip AD C1 03 LDA &03C1 \ QQ9 \ target x 85 73 STA &73 \ QQ19 AD C2 03 LDA &03C2 \ QQ10 \ target y 4A LSR A \ Y /=2 85 74 STA &74 \ QQ19+1 A9 04 LDA #4 \ small cross hair 85 75 STA &75 \ QQ19+2 4C 5D 28 JMP &285D \ TT15 \ cross hairs for laser or chart .TT123 \ -> &2B39 \ coordinate update, fix overflow 85 77 STA &77 \ QQ19+4 \ coordinate to update 18 CLC \ add inc 65 76 ADC &76 \ QQ19+3 A6 76 LDX &76 \ QQ19+3 30 03 BMI TT124 \ shift was -ve 90 03 BCC TT125 \ else update went o.k. 60 RTS .TT124 \ shift was -ve 90 02 BCC TT180 \ shift was -ve, rts. .TT125 \ update ok 85 77 STA &77 \ QQ19+4 \ updated coordinate .TT180 \ rts 60 RTS .TT105 \ Short range chart cross-hair clip AD C1 03 LDA &03C1 \ QQ9 \ target X 38 SEC ED 59 03 SBC &0359 \ QQ0 \ present X C9 26 CMP #&26 90 04 BCC TT179 \ targetX-presentX, X is close C9 E6 CMP #&E6 90 F0 BCC TT180 \ rts .TT179 \ X is close 0A ASL A 0A ASL A \ X*4 18 CLC 69 68 ADC #&68 \ cross X 85 73 STA &73 \ QQ19 AD C2 03 LDA &03C2 \ QQ10 \ target Y 38 SEC ED 5A 03 SBC &035A \ QQ1 \ present Y C9 26 CMP #&26 90 04 BCC P%+6 \ targetY-presentY, Y is close C9 DC CMP #&DC 90 DA BCC TT180 \ rts 0A ASL A \ Y*2 18 CLC 69 5A ADC #&5A \ cross Y 85 74 STA &74 \ QQ19+1 A9 08 LDA #8 \ big cross 85 75 STA &75 \ QQ19+2 4C 5D 28 JMP &285D \ TT15 \ the cross hair using QQ19(0to2) .TT23 \ -> &2B7C \ ShrtSc Short range chart A9 80 LDA #&80 \ Set bit7 of menu i.d. 20 37 25 JSR &2537 \ TT66 \ box border with QQ11 set to A A9 07 LDA #7 \ indent 85 2C STA &2C \ XC A9 BE LDA #&BE \ token = SHORT RANGE CHART 20 F2 18 JSR &18F2 \ NLIN3 \ Title string and draw line underneath 20 C8 28 JSR &28C8 \ TT14 \ Circle+cross hair, small cross at target 20 23 2B JSR &2B23 \ TT103 \ draw small cross hairs at target hyperspace system 20 28 2C JSR &2C28 \ TT81 \ QQ15 loaded with rolled planet seed A9 00 LDA #0 \ future counter 85 97 STA &97 \ XX20 A2 18 LDX #14 \ Clear 24 rows to label stars .EE3 \ counter X 95 46 STA &46,X \ INWK,X CA DEX 10 FB BPL EE3 \ loop X .TT182 \ -> &2B9E \ Counter XX20 through 256 stars A5 6F LDA &6F \ QQ15+3 38 SEC \ Xcoord of star ED 59 03 SBC &0359 \ QQ0 \ Xpresent B0 04 BCS TT184 \ xsubtracted 49 FF EOR #&FF \ else negate 69 01 ADC #1 .TT184 \ xsubtracted C9 14 CMP #20 \ x distance close? B0 70 BCS TT187 \ skip star plotting A5 6D LDA &6D \ QQ15+1 38 SEC \ Ycoord of star ED 5A 03 SBC &035A \ QQ1 \ Ypresent B0 04 BCS TT186 \ ysubtracted 49 FF EOR #&FF \ else negate 69 01 ADC #1 .TT186 \ ysubtracted C9 26 CMP #38 \ y distance close? B0 60 BCS TT187 \ skip star plotting A5 6F LDA &6F \ QQ15+3 38 SEC \ X coord of star ED 59 03 SBC &0359 \ QQ0 0A ASL A \ X present 0A ASL A \ *=4 69 68 ADC #104 \ xplot 85 3A STA &3A \ XX12 4A LSR A 4A LSR A \ x text cursor 4A LSR A 85 2C STA &2C \ XC E6 2C INC &2C \ XC A5 6D LDA &6D \ QQ15+1 38 SEC \ Y coord of star ED 5A 03 SBC &035A \ QQ1 0A ASL A \ Y present 69 5A ADC #90 \ yplot 85 E0 STA &E0 \ K4 4A LSR A 4A LSR A 4A LSR A A8 TAY \ y text cursor B6 46 LDX &46,Y \ INWK,Y F0 0B BEQ EE4 \ empty label row C8 INY \ else try row above B6 46 LDX &46,Y \ INWK,Y F0 06 BEQ EE4 \ empty label row 88 DEY \ else try row below 88 DEY B6 46 LDX &46,Y \ INWK,Y D0 12 BNE ee1 \ no label, just the star. .EE4 \ found empty label row 84 2D STY &2D \ YC C0 03 CPY #3 \ < 3rd row? 90 29 BCC TT187 \ skip star plotting A9 FF LDA #&FF \ row now occupied by label 99 46 00 STA &0046,Y \ INWK,Y A9 80 LDA #&80 \ First label letter capital 85 72 STA &72 \ QQ17 20 19 31 JSR &3119 \ cpl \ Planet name for seed QQ15 .ee1 \bigstars \ no label, just the star. A9 00 LDA #0 \ hi = 0 85 D3 STA &D3 \ K3+1 85 E1 STA &E1 \ K4+1 85 41 STA &41 \ K+1 A5 3A LDA &3A \ XX12 \ xplot for star 85 D2 STA &D2 \ K3 A5 71 LDA &71 \ QQ15+5 \ seed w2_h 29 01 AND #1 \ use lowest bit of w2_h for star size, lowest 4 did planet radius 69 02 ADC #2 \ sun radius 85 40 STA &40 \ K 20 B0 32 JSR &32B0 \ FLFLLS \ clear array 20 CB 33 JSR &33CB \ SUN 20 B0 32 JSR &32B0 \ FLFLLS .TT187 \ skipped star plotting 20 31 26 JSR &2631 \ TT20 \ Twist galaxy seed E6 97 INC &97 \ XX20 F0 0D BEQ TT111-1 \ all 256 done, rts 4C 9E 2B JMP &2B9E \ TT182 \ loop XX20 next star .TT81 \ -> &2C28 \ QQ15 loaded with galaxy seeds A2 05 LDX #5 \ Galaxy root seeds, counter X. BD 5B 03 LDA &035B,X \ QQ21,X 95 6C STA &6C,X \ QQ15,X CA DEX \ to planet seeds to twist 10 F8 BPL TT81+2 \ loop X 60 RTS .TT111 \ -> &2C33 \ rectangle Closest to QQ9,10. Could be arriving in new galaxy with initial (96,96) 20 28 2C JSR &2C28 \ TT81 \ QQ15 loaded with galaxy seeds A0 7F LDY #&7F \ distance tracker, starts at half of screen width. 84 D1 STY &D1 \ T A9 00 LDA #0 \ trial system id starts at 0 85 80 STA &80 \ U .TT130 \ counter U, visit each trial system. A5 6F LDA &6F \ QQ15+3 38 SEC \ Xsystem ED C1 03 SBC &03C1 \ QQ9 B0 04 BCS TT132 \ skip xnegate 49 FF EOR #&FF 69 01 ADC #1 .TT132 \ skip xnegate 4A LSR A \ halve this x-distance 85 83 STA &83 \ S A5 6D LDA &6D \ QQ15+1 38 SEC \ Ysystem ED C2 03 SBC &03C2 \ QQ10 B0 04 BCS TT134 \ skip ynegate 49 FF EOR #&FF 69 01 ADC #1 .TT134 \ skip ynegate 4A LSR A \ halve y distance, 18 CLC \ so total mag will fit in 1 byte 65 83 ADC &83 \ S \ sum of abs(delta_x/2) + abs(delta_y/4) C5 D1 CMP &D1 \ T \ distance tracker B0 0F BCS TT135 \ not close, else update distance tracker 85 D1 STA &D1 \ T A2 05 LDX #5 \ and new best seeds update .TT136 \ counter X B5 6C LDA &6C,X \ QQ15,X 95 73 STA &73,X \ QQ19,X CA DEX \ present best system seed values 10 F9 BPL TT136 \ loop X for 6 bytes A5 80 LDA &80 \ U 85 88 STA &88 \ ZZ \ closest id so far .TT135 \ not close 20 31 26 JSR &2631 \ TT20 \ Twist galaxy seed E6 80 INC &80 \ U D0 C7 BNE TT130 \ loop U next sys id, not 256 yet. A2 05 LDX #5 \ finished .TT137 \ counter X, copy out closest seeds to QQ15 B5 73 LDA &73,X \ QQ19,X 95 6C STA &6C,X \ QQ15,X CA DEX 10 F9 BPL TT137 \ loop X .TT138 \ use QQ15 to QQ9,10 to set distance QQ8 A5 6D LDA &6D \ QQ15+1 8D C2 03 STA &03C2 \ QQ10 \ target y-coordinate updated to closest system A5 6F LDA &6F \ QQ15+3 8D C1 03 STA &03C1 \ QQ9 \ target x-coordinate updated to closest system 38 SEC \ present X ED 59 03 SBC &0359 \ QQ0 B0 04 BCS TT139 \ x dist-org 49 FF EOR #&FF \ else negate 69 01 ADC #1 .TT139 \ x dist-org 20 C0 21 JSR &21C0 \ SQUA2 \ (P,A) = A*A 85 41 STA &41 \ K+1 A5 1B LDA &1B \ P \ xlo 85 40 STA &40 \ K AD C2 03 LDA &03C2 \ QQ10 38 SEC \ Y subtracted ED 5A 03 SBC &035A \ QQ1 B0 04 BCS TT141 \ y dist-org 49 FF EOR #&FF \ else negate 69 01 ADC #1 .TT141 \ y dist-org 4A LSR A \ Acc = abs(delta_y)/2 20 C0 21 JSR &21C0 \ SQUA2 \ (P,A) = A*A 48 PHA \ highest bytes for delta_y ^2 A5 1B LDA &1B \ P 18 CLC \ y lo 65 40 ADC &40 \ K 85 81 STA &81 \ Q \ sum of lowest bytes. \ r^2 lo 68 PLA \ highest bytes for delta_y ^2 65 41 ADC &41 \ K+1 85 82 STA &82 \ R \ sum of higher two bytes \ r^2 hi 20 3E 3F JSR &3F3E \ LL5 \ SQRT Q = SQR(Qlo.Rhi) A5 81 LDA &81 \ Q 0A ASL A \ distance lo *=2 A2 00 LDX #0 \ distance hi 8E C0 03 STX &03C0 \ QQ8+1 2E C0 03 ROL &03C0 \ QQ8+1 0A ASL A 2E C0 03 ROL &03C0 \ QQ8+1 8D BF 03 STA &03BF \ QQ8 \ QQ8(0,1) is 4*distance in x-units 4C 9F 27 JMP &279F \ TT24 \ Calculate System Data from QQ15(0to5). .hyp \ hyperspace start, key H hit relic? A5 2F LDA &2F \ QQ22+1 \ hyp countdown hi 05 8E ORA &8E \ QQ12 \ hyp countdown lo D0 75 BNE zZ+1 \ rts! as countdown already going on 20 91 3C JSR &3C91 \ CTRL \ scan from ctrl key upwards on keyboard 30 49 BMI Ghy \ Galactic hyperdrive for ctrl-H A5 87 LDA &87 \ QQ11 \ menu i.d. 0 is space view. F0 3F BEQ TTC111 \ check H range 29 C0 AND #&C0 \ short or long range chart? F0 68 BEQ zZ+1 \ rts! 20 D8 30 JSR &30D8 \ hm \ move hyperspace cross on chart .TTX111 \ -> &2CE9 \ check range, all. AD BF 03 LDA &03BF \ QQ8 \ distance in 0.1 LY units 0D C0 03 ORA &03C0 \ QQ8+1 \ zero? F0 5D BEQ zZ+1 \ rts! A9 07 LDA #7 \ indent 85 2C STA &2C \ XC A9 16 LDA #22 \ near bottom row for hyperspace message 85 2D STA &2D \ YC A9 00 LDA #0 \ All upper case 85 72 STA &72 \ QQ17 A9 BD LDA #&BD \ token = HYPERSPACE 20 AC 31 JSR &31AC \ TT27 \ process flight text token AD C0 03 LDA &03C0 \ QQ8+1 \ distance hi D0 7B BNE TT147 \ hyperspace range too far AD 65 03 LDA &0365 \ QQ14 \ ship fuel #70 = #&46 CD BF 03 CMP &03BF \ QQ8 \ distance lo 90 73 BCC TT147 \ hyperspace too far A9 2D LDA #&2D \ ascii '-' in "HYPERSPACE -ISINOR" 20 AC 31 JSR &31AC \ TT27 20 19 31 JSR &3119 \ cpl \ Planet name for seed QQ15 .wW \ -> &2D17 \ Also Galactic hyperdrive countdown starting A9 0F LDA #15 \ counter for outer and inner hyperspace countdown loops 85 2F STA &2F \ QQ22+1 85 2E STA &2E \ QQ22 \ inner hyperspace countdown AA TAX \ starts at 15 4C 75 2D JMP &2D75 \ ee3 \ digit in top left hand corner, using Xreg. .TTC111 \ check H range 20 33 2C JSR &2C33 \ TT111 \ closest to QQ9,10 4C E9 2C JMP &2CE9 \ TTX111 \ check range, all. .Ghy \ Galactic hyperdrive for ctrl-H AE 85 03 LDX &0385 \ GHYP \ possess galactic hyperdrive? F0 48 BEQ ee3-1 \ rts E8 INX \ Xreg = 0 8E 85 03 STX &0385 \ GHYP \ works once 8E 8C 03 STX &038C \ FIST \ clean Fugitive/Innocent status 20 17 2D JSR &2D17 \ wW \ start countdown A2 05 LDX #5 \ 6 seeds EE 67 03 INC &0367 \ GCNT \ next galaxy AD 67 03 LDA &0367 \ GCNT 29 07 AND #7 \ round count to just 8 8D 67 03 STA &0367 \ GCNT .G1 \ counter X ROLL galaxy seeds BD 5B 03 LDA &035B,X \ QQ21,X \ Galaxy seeds, 6 bytes 0A ASL A \ to get carry to load back into bit 0 3E 5B 03 ROL &035B,X \ QQ21,X \ rolled galaxy seeds CA DEX 10 F6 BPL G1 \ loop X .zZ \ Arrive closest to (96,96) A9 60 LDA #&60 \ zZ+1 is an rts (!) 8D C1 03 STA &03C1 \ QQ9 8D C2 03 STA &03C2 \ QQ10 20 92 2E JSR &2E92 \ Start Flight code (?) 20 33 2C JSR &2C33 \ TT111 \ Closest to QQ9,10 A2 00 LDX #0 \ distance to system 8E BF 03 STX &03BF \ QQ8 8E C0 03 STX &03C0 \ QQ8+1 A9 74 LDA #&74 \ token = Galactic Hyperspace 20 82 3D JSR &3D82 \ MESS \ message .jmp \ -> &2D68 \ move target coordinates to become new present AD C1 03 LDA &03C1 \ QQ9 8D 59 03 STA &0359 \ QQ0 AD C2 03 LDA &03C2 \ QQ10 8D 5A 03 STA &035A \ QQ1 60 RTS \ ee3-1 .ee3 \ -> &2D75 \ digit in top left hand corner, using Xreg. A0 01 LDY #1 \ top left 84 2C STY &2C \ XC 84 2D STY &2D \ YC 88 DEY \ Yhi = 0 .pr6 \ -> &2D7C \ 5 digits of Xlo.Yhi, no decimal point. 18 CLC .pr5 \ -> &2D7D \ 5 digits A9 05 LDA #5 4C C4 1B JMP &1BC4 \ TT11 \ print Xlo.Yhi, carry set will make decimal point. .TT147 \ hyperspace too far A9 CA LDA #&CA \ token = (HYPERSPACE) 'RANGE' (?) .prq \ -> &2D84 \ print Acc then question mark 20 AC 31 JSR &31AC \ TT27 \ process text token A9 3F LDA #&3F \ ascii '?' 4C AC 31 JMP &31AC \ TT27 .TT151 \ -> &2D8C \ Pmk-A \ Market prices on one item 48 PHA \ index for item 85 77 STA &77 \ QQ19+4 0A ASL A \ build index for QQ23 tqble 0A ASL A \ item*4 85 73 STA &73 \ QQ19 A9 01 LDA #1 \ left 85 2C STA &2C \ XC 68 PLA \ restore item 69 D0 ADC #&D0 \ token = FOOD..GEM-STONES 20 AC 31 JSR &31AC \ TT27 \ process flight text token A9 0E LDA #14 \ next column 85 2C STA &2C \ XC A6 73 LDX &73 \ QQ19 \ item*4 index for QQ23 table BD A7 3D LDA &3DA7,X \ QQ23+1,X \ Prxs Market prices info 85 74 STA &74 \ QQ19+1 \ byte1 AD 9E 03 LDA &039E \ QQ26 \ random for each system visit 3D A9 3D AND &3DA9,X \ QQ23+3,X \ byte3 Market mask 18 CLC 7D A6 3D ADC &3DA6,X \ QQ23+0,X \ byte0 Market base 8D AA 03 STA &03AA \ QQ24 \ price 20 F8 2D JSR &2DF8 \ TT152 \ t kg g from QQ19+1 20 51 2E JSR &2E51 \ var \ slope QQ19+3 = economy * gradient A5 74 LDA &74 \ QQ19+1 \ byte1 30 08 BMI TT155 \ subtract QQ19,3 from QQ24 AD AA 03 LDA &03AA \ QQ24 \ price, else add 65 76 ADC &76 \ QQ19+3 \ economy * gradient 4C CD 2D JMP &2DCD \ TT156 \ both prices .TT155 \ subtract QQ19,3 from QQ24 AD AA 03 LDA &03AA \ QQ24 \ price 38 SEC E5 76 SBC &76 \ QQ19+3 \ economy * gradient .TT156 \ -> &2DCD \ both price cases 8D AA 03 STA &03AA \ QQ24 \ price 85 1B STA &1B \ P \ price_lo A9 00 LDA #0 20 F2 2E JSR &2EF2 \ GC2 \ get cash Xlo.Yhi = P.A *=4 max 1024 38 SEC \ decimal point in max 102.4 20 7D 2D JSR &2D7D \ pr5 \ 4 digits of XloYhi A4 77 LDY &77 \ QQ19+4 \ index for item A9 05 LDA #5 \ 5 digits BE 8D 03 LDX &038D,Y \ AVL,Y \ availability 8E AB 03 STX &03AB \ QQ25 \ max available 18 CLC F0 06 BEQ TT172 \ tab '-' as none available 20 C2 1B JSR &1BC2 \ pr2+2 \ else print available Xreg to 5 places 4C F8 2D JMP &2DF8 \ TT152 \ t kg g from QQ19+1 .TT172 \ tab '-' as none available A5 2C LDA &2C \ XC 69 04 ADC #4 \ move by 4 85 2C STA &2C \ XC A9 2D LDA #&2D \ ascii '-' D0 0F BNE TT162+2 \ guaranteed jmp TT27 .TT152 \ -> &2DF8 \ t kg g from QQ19+1 A5 74 LDA &74 \ QQ19+1 \ byte1 29 60 AND #&60 \ mask info, no bits set? F0 0C BEQ TT160 \ 't' for tonne C9 20 CMP #&20 \ mask info, bit5 set? F0 0F BEQ T161 \ 'kg' 20 16 2E JSR &2E16 \ TT16a \ else 'g' for gram .TT162 \ white space A9 20 LDA #&20 \ ascii ' ' 4C AC 31 JMP &31AC \ TT27 \ process flight text token \ TT162+2 .TT160 \ 't ' for tonne A9 74 LDA #&74 \ ascii 't' for tonne 20 8F 1C JSR &1C8F \ TT26 \ print character lower case 90 F4 BCC TT162 \ guaranteed up, trailing space. .TT161 \ 'kg' A9 6B LDA #&6B \ ascii 'k' 20 8F 1C JSR &1C8F \ TT26 \ print character lower case .TT16a \ -> &2E16 \ 'g' for gram A9 67 LDA #&67 \ ascii 'g' 4C 8F 1C JMP &1C8F \ TT26 \ print character lower case .TT163 \ -> &2E1B \ table Headings for market place A9 11 LDA #17 \ indent 85 2C STA &2C \ XC A9 FF LDA #&FF \ token = unit quantity product unit price for sale D0 E4 BNE TT162+2 \ jmp tt27 guaranteed .TT167 \ -> &2E23 \ MktP Market place menu screen A9 10 LDA #&10 \ menu i.d. bit4 set 20 37 25 JSR &2537 \ TT66 \ box border with QQ11 set to A A9 05 LDA #5 \ indent 85 2C STA &2C \ XC A9 A7 LDA #&A7 \ token = MARKET PRICES 20 F2 18 JSR &18F2 \ NLIN3 \ title and draw line underneath A9 03 LDA #3 \ few lines down 85 2D STA &2D \ YC 20 1B 2E JSR &2E1B \ TT163 \ table Headings for market place, up A9 00 LDA #0 \ counter 8D AD 03 STA &03AD \ QQ29 .TT168 \ counter QQ29 market items A2 80 LDX #&80 \ set bit7, first letter Upper case. 86 72 STX &72 \ QQ17 20 8C 2D JSR &2D8C \ TT151 \ Pmk-A display the line for one market item E6 2D INC &2D \ YC EE AD 03 INC &03AD \ QQ29 AD AD 03 LDA &03AD \ QQ29 C9 11 CMP #17 \ still <17 items? 90 ED BCC TT168 \ loop QQ29 60 RTS .var \ -> &2E51 \ market price slope QQ19+3 = economy * gradient A5 74 LDA &74 \ QQ19+1 \ byte1 gradient info bits. 29 1F AND #&1F \ gradient 0to31. AC AC 03 LDY &03AC \ QQ28 \ the economy byte of present system (0 is Rich Ind.) 85 75 STA &75 \ QQ19+2 \ gradient 0to31. 18 CLC \ build product A9 00 LDA #0 \ availability of Alien items 8D 9D 03 STA &039D \ AVL+16 .TT153 \ -> &2E60 \ counter Y, eco 88 DEY \ Take economy byte down by 1 30 05 BMI TT154 \ exit product maybe = 0 65 75 ADC &75 \ QQ19+2 \ gradient 0to31 4C 60 2E JMP &2E60 \ TT153 \ guaranteed loop Y to build product .TT154 \ exit product 85 76 STA &76 \ QQ19+3 \ economy * gradient 60 RTS .hyp1 \ Arrive in system 20 33 2C JSR &2C33 \ TT111 \ closest to QQ9,10 20 68 2D JSR &2D68 \ jmp \ move target coordinates to present A2 05 LDX #5 \ 6 bytes .TT112 \ counter X B5 6C LDA &6C,X \ QQ15,X \ safehouse,X target seeds 9D B2 03 STA &03B2,X \ QQ2,X \ copied over to home seeds CA DEX \ next seed 10 F8 BPL TT112 \ loop X E8 INX \ X = 0 8E 49 03 STX &0349 \ EV \ 0 extra vessels AD B8 03 LDA &03B8 \ QQ3 \ economy of target system 8D AC 03 STA &03AC \ QQ28 \ economy of present system AD BA 03 LDA &03BA \ QQ5 \ Tech 8D AF 03 STA &03AF \ tek \ techlevel-1 of present system AD B9 03 LDA &03B9 \ QQ4 \ Government, 0 is Anarchy 8D AE 03 STA &03AE \ gov \ gov of present system 60 RTS .Flight \ -> &2E92 \ Start loading Flight code as key #f0 hit A2 3F LDX #63 \ Copy flight tokens down .eny1 \ counter X BD A1 14 LDA &14A1,X \ QQ16,X 9D 80 08 STA &0880,X \ EQUS "ALLEXEGEZACEBISOUSESARMAINDIREA?ER etc. CA DEX 10 F7 BPL eny1 \ loop X 20 7A 0D JSR &0D7A \ reload disc cat A2 FC LDX #&FC \ #RDLI MOD 256 A0 2E LDY #&2E \ #RDLI DIV 256 \ &2EFC 4C F7 FF JMP &FFF7 \ OSCLI command string at RDLI .LCASH \ Less X.Y cash 86 06 STX &06 \ T1 AD 64 03 LDA &0364 \ CASH+3 38 SEC \ subtract Xlo from CASH(3) E5 06 SBC &06 \ T1 8D 64 03 STA &0364 \ CASH+3 84 06 STY &06 \ T1 AD 63 03 LDA &0363 \ CASH+2 E5 06 SBC &06 \ T1 8D 63 03 STA &0363 \ CASH+2 AD 62 03 LDA &0362 \ CASH+1 E9 00 SBC #0 \ subtracted Yhi from CASH(2) 8D 62 03 STA &0362 \ CASH+1 AD 61 03 LDA &0361 \ CASH+0 E9 00 SBC #0 \ (big-endian) 8D 61 03 STA &0361 \ CASH+0 B0 20 BCS TT113 \ rts if no debt with carry set \ else roll on to carry clear and restore cash .MCASH \ More cash, add Xlo.Yhi 8A TXA \ lo 18 CLC \ add Xlo to CASH(3) 6D 64 03 ADC &0364 \ CASH+3 8D 64 03 STA &0364 \ CASH+3 98 TYA \ hi 6D 63 03 ADC &0363 \ CASH+2 8D 63 03 STA &0363 \ CASH+2 AD 62 03 LDA &0362 \ CASH+1 69 00 ADC #0 \ added Yhi to CASH(2) 8D 62 03 STA &0362 \ CASH+1 AD 61 03 LDA &0361 \ CASH+0 69 00 ADC #0 \ (big-endian) 8D 61 03 STA &0361 \ CASH+0 18 CLC \ carry clear also means LCASH failed .TT113 60 RTS .GCASH \ -> &2EEF Xlo.Yhi = P*Q*4 20 D3 21 JSR &21D3 \ MULTU \ P.A = P*Q, lsb in P. .GC2 \ -> &2EF2 Xlo.Yhi = P.A *=4 06 1B ASL &1B \ P 2A ROL A \ hi 06 1B ASL &1B \ P 2A ROL A .GC3 \ X.Y = P.A A8 TAY \ Y hi A6 1B LDX &1B \ P \ X lo 60 RTS .RDLI \ -> &2EFC \ command string 52 2E 44 2E 43 4F 44 45 0D EQUS "R.D.CODE": EQUB &0D \ load and run fight code .bay \ -> &2F05 \ error, back to Bay 4C B0 38 JMP &38B0 \ BAY \ Start in Docking Bay .EQSHP \ -> &2F08 \ (#f3) Equip Ship A9 20 LDA #&20 \ bit5 set 20 37 25 JSR &2537 \ TT66 \ box border with QQ11 set to A 20 EC 18 JSR &18EC \ FLKB \ flush keyboard A9 0C LDA #12 \ indent 85 2C STA &2C \ XC A9 CF LDA #&CF \ token = EQUIP 20 90 26 JSR &2690 \ spc \ Acc to TT27 followed by white space A9 B9 LDA #&B9 \ token = SHIP 20 F2 18 JSR &18F2 \ NLIN3 \ finish title and draw line underneath A9 80 LDA #&80 \ First letter capital 85 72 STA &72 \ QQ17 E6 2D INC &2D \ YC AD AF 03 LDA &03AF \ tek \ techlevel of present system 18 CLC \ build max equipment 69 03 ADC #3 C9 0C CMP #12 90 02 BCC P%+4 \ is TechLevel+3 < 12 A9 0E LDA #14 \ else max list is 14 85 81 STA &81 \ Q 8D AB 03 STA &03AB \ QQ25 \ max gnum range E6 81 INC &81 \ Q \ count max A9 46 LDA #70 \ 7.0 LYr. of fuel max 38 SEC \ subtract present ship fuel ED 65 03 SBC &0365 \ QQ14 0A ASL A \ *=2 is the fuel price, 14.0 Cr max. 8D D0 1A STA &1AD0 \ PRXS \ first entry in prices list A2 01 LDX #1 \ equip counter .EQL1 \ counter X 86 89 STX &89 \ XX13 20 83 26 JSR &2683 \ TT67 \ next Row with QQ17 set A6 89 LDX &89 \ XX13 18 CLC \ no decimal point 20 C0 1B JSR &1BC0 \ pr2 \ number X 20 05 2E JSR &2E05 \ TT162 \ white space A5 89 LDA &89 \ XX13 \ equip counter 18 CLC \ build equip token 69 68 ADC #&68 \ token = fuel.. 20 AC 31 JSR &31AC \ TT27 \ process text token A5 89 LDA &89 \ XX13 \ equip counter 20 86 30 JSR &3086 \ prx-3 \ return price in (X,Y) for item Acc-1 38 SEC \ with decimal point A9 19 LDA #25 \ right column 85 2C STA &2C \ XC A9 06 LDA #6 \ 6 digits 20 C4 1B JSR &1BC4 \ TT11 \ print Xlo.Yhi, carry set will make decimal point. A6 89 LDX &89 \ XX13 \ equip counter E8 INX \ next equipment item E4 81 CPX &81 \ Q \ count max 90 D4 BCC EQL1 \ loop X 20 A3 25 JSR &25A3 \ CLYNS \ clear screen lines A9 7F LDA #&7F \ token = ITEM 20 84 2D JSR &2D84 \ prq \ print Acc then question mark 20 AF 29 JSR &29AF \ gnum \ get number F0 89 BEQ bay \ none, back to Bay B0 87 BCS bay \ exceeded QQ25 max E9 00 SBC #0 \ Acc = equipment chosen -1 A2 02 LDX #2 \ small indent, next row. 86 2C STX &2C \ XC E6 2D INC &2D \ YC 48 PHA \ store equipment chosen -1 20 76 30 JSR &3076 \ eq \ reduce cash for item chosen Acc if enough 68 PLA \ equipment chosen -1 D0 05 BNE et0 \ not fuel, onto Missile A2 46 LDX #70 \ refuel max 8E 65 03 STX &0365 \ QQ14 \ ship fuel. Acc=0 so rattle through .. .et0 \ Missile C9 01 CMP #1 \ item missile? D0 10 BNE et1 \ else Large cargo bay AE 8B 03 LDX &038B \ NOMSL \ number of missiles E8 INX \ increased A0 7C LDY #&7C \ token = ALL (missiles) PRESENT E0 05 CPX #5 \ max number of missiles allowed +1 B0 48 BCS pres \ error, Token in Y is already 'present' on ship 8E 8B 03 STX &038B \ NOMSL \ update number of missiles 20 ED 36 JSR &36ED \ msblob \ draw all missile blocks .et1 \ Large cargo bay A0 6B LDY #&6B \ token = Large cargo bay C9 02 CMP #2 \ item Large cargo bay? D0 0A BNE et2 \ else E.C.M. A2 25 LDX #37 \ already large cargo bay? EC 6E 03 CPX &036E \ CRGO F0 35 BEQ pres \ error, Token in Y is already 'present' on ship 8E 6E 03 STX &036E \ CRGO .et2 \ E.C.M. C9 03 CMP #3 \ item E.C.M. D0 09 BNE et3 \ else extra Pulse C8 INY \ token = E.C.C.system AE 80 03 LDX &0380 \ ECM \ already have ? D0 28 BNE pres \ Token in Y is already 'present' on ship CE 80 03 DEC &0380 \ ECM \ #&FF = ECM now present et3 \ extra Pulse C9 04 CMP #4 \ item extra pulse laser D0 0A BNE et4 \ else extra Beam 20 93 30 JSR &3093 \ qv \ query view, new mount in X A9 0F LDA #&0F \ pulse laser power 20 E9 30 JSR &30E9 \ refund \ Acc has power requested A9 04 LDA #4 \ to allow rattle through .et4 \ extra Beam C9 05 CMP #5 \ item extra beam laser D0 08 BNE et5 \ else Fuel scoop 20 93 30 JSR &3093 \ qv \ query view, new mount in X A9 8F LDA #&8F \ beam laser power 20 E9 30 JSR &30E9 \ refund \ Acc has power requested .et5 \ Fuel scoop A0 6F LDY #&6F \ token = FUEL SCOOPS C9 06 CMP #6 \ item fuel scoop D0 20 BNE et6 \ else Escape pod AE 81 03 LDX &0381 \ BST \ barrel status, fuel scoops present F0 18 BEQ ed9 \ empty so Fuel scoop awarded .pres \ -> &2FE8 \ error, Token in Yreg is already 'present' on ship 84 40 STY &40 \ K \ store equipment already present token 20 89 30 JSR &3089 \ prx \ return price in (X,Y) for item Acc 20 CE 2E JSR &2ECE \ MCASH \ add XloYhi to cash A5 40 LDA &40 \ K \ equipment present token 20 90 26 JSR &2690 \ spc \ Acc to TT27 followed by white space A9 1F LDA #&1F \ token = PRESENT 20 AC 31 JSR &31AC \ TT27 \ process text token .err \ -> &2FFA \ Also other errors 20 6E 30 JSR &306E \ dn2 \ beep and wait 4C B0 38 JMP &38B0 \ BAY \ start in Docking Bay .ed9 \ Fuel scoop awarded CE 81 03 DEC &0381 \ BST \ #&FF = fuel scoops awarded .et6 \ Escape pod C8 INY \ token = escape pod C9 07 CMP #7 \ item Escape pod D0 08 BNE et7 \ else Energy bomb AE 86 03 LDX &0386 \ ESCP \ escape capsule D0 DB BNE pres \ error, Token in Y is already 'present' on ship CE 86 03 DEC &0386 \ ESCP \ #&FF = escape pod awarded .et7 \ Energy bomb C8 INY \ token = energy bomb C9 08 CMP #8 \ item Energy bomb D0 0A BNE et8 \ Energy recharge unit AE 82 03 LDX &0382 \ BOMB \ random hyperspace unit in Elite-A D0 CE BNE pres \ error, Token in Y is already 'present' on ship A2 7F LDX #&7F \ #&7F Unused energy bomb awarded 8E 82 03 STX &0382 \ BOMB \ random hyperspace unit in Elite-A .et8 \ Energy recharge unit C8 INY \ token = energy unit C9 09 CMP #9 \ item Energy unit D0 08 BNE etA \ else Docking computer AE 83 03 LDX &0383 \ ENGY \ extra energy unit/ recharge rate D0 BF BNE pres \ error, Token in Y is already 'present' on ship EE 83 03 INC &0383 \ ENGY \ increase extra energy unit/ recharge rate .etA \ Docking computer C8 INY \ token = docking computer C9 0A CMP #10 \ item docking computer D0 08 BNE etB \ else Galactic hyperdrive AE 84 03 LDX &0384 \ DKCMP \ docking computer D0 B2 BNE pres \ error, Token in Y is already 'present' on ship CE 84 03 DEC &0384 \ DKCMP \ #&FF = docking computer awarded .etB \ Galactic hyperdrive C8 INY \ token = galactic hyperdrive C9 0B CMP #11 \ item galactic hyperdrive D0 08 BNE et9 \ else Military laser AE 85 03 LDX &0385 \ GHYP \ galactic hyperdrive D0 A5 BNE pres \ error, Token in Y is already 'present' on ship CE 85 03 DEC &0385 \ GHYP \ #&FF = galactic hyperdrive awarded .et9 \ Military laser C8 INY \ token = military laser C9 0C CMP #12 \ item military laser D0 08 BNE et10 \ else Mining laser 20 93 30 JSR &3093 \ qv \ query view, new mount in X A9 97 LDA #&97 \ military laser power 20 E9 30 JSR &30E9 \ refund \ Acc has power requested .et10 \ Mining laser C8 INY \ token = mining laser C9 0D CMP #13 \ item mining laser D0 08 BNE et11 \ else display cash and Loop 20 93 30 JSR &3093 \ qv \ query view, new mount in X A9 32 LDA #&32 \ mining laser power 20 E9 30 JSR &30E9 \ refund \ Acc has power requested .et11 \ display cash and Loop 20 66 30 JSR &3066 \ dn \ display cash 4C 08 2F JMP &2F08 \ EQSHP \ equip ship, new menu screen .dn \ -> &3066 \ display cash 20 05 2E JSR &2E05 \ TT162 \ white space A9 77 LDA #&77 \ token = CASH 0x00 20 90 26 JSR &2690 \ spc \ Acc to TT27 followed by white space .dn2 \ -> &306E \ beep, delay. 20 43 3C JSR &3C43 \ BEEP A0 32 LDY #50 \ moderate delay 4C 9C 25 JMP &259C \ DELAY \ Yreg is length of delay counter .eq \ -> &3076 \ reduce cash for item Acc if enough 20 89 30 JSR &3089 \ prx \ return price in (X,Y) for item Acc 20 A7 2E JSR &2EA7 \ LCASH \ less cash B0 14 BCS prts \ rts if ok, else not enough A9 C5 LDA #&C5 \ token = CASH .eq2 \ err msg A then question mark 20 84 2D JSR &2D84 \ prq \ print Acc then question mark 4C FA 2F JMP &2FFA \ err \ err msg for eqshp \ prx-3 \ return price in (X,Y) for item Acc-1 38 SEC E9 01 SBC #1 .prx \ -> &3089 \ return price in (X,Y) for item Acc 0A ASL A A8 TAY \ build index BE D0 1A LDX &1AD0,Y \ PRXS,Y \ equipment price lo B9 D1 1A LDA &1AD1,Y \ PRXS+1,Y \ equipment price hi A8 TAY .prts 60 RTS .qv \ -> &3093 \ query which view for laser mount, returned in Xreg. AD AF 03 LDA &03AF \ tek \ techlevel of present system C9 08 CMP #8 \ TL < 9? 90 05 BCC qv0 \ same screen A9 20 LDA #&20 \ else tech level high enough that new screen needed 20 37 25 JSR &2537 \ TT66 \ box border with QQ11 set to Acc, bit5 set. .qv0 \ same screen A0 10 LDY #16 \ view options listed mid screen 84 2D STY &2D \ YC .qv1 \ counter YC A2 0C LDX #12 \ indent 86 2C STX &2C \ XC 98 TYA \ view counter based on YC 18 CLC 69 20 ADC #&20 \ start at ascii '0' 20 90 26 JSR &2690 \ spc \ Acc to TT27 followed by white space A5 2D LDA &2D \ YC 18 CLC \ token based on YC 69 50 ADC #&50 \ start at token #&60 = FRONT 20 AC 31 JSR &31AC \ TT27 \ process text token E6 2D INC &2D \ YC A4 2D LDY &2D \ YC C0 14 CPY #&14 \ 4th view done 90 E5 BCC qv1 \ loop Y .qv3 20 A3 25 JSR &25A3 \ CLYNS \ clear screen lines .qv2 \ -> &30C1 \ repeat until valid A9 AF LDA #&AF \ token = VIEW 20 84 2D JSR &2D84 \ prq \ print Acc then question mark 20 5F 3D JSR &3D5F \ TT217 \ get ascii from keyboard, store in X and A 38 SEC E9 30 SBC #&30 \ convert to number C9 04 CMP #4 \ max laser mounts 90 06 BCC qv4 \ exit valid input < max view 20 A3 25 JSR &25A3 \ CLYNS \ clear screen lines 4C C1 30 JMP &30C1 \ qv2 \ loop again .qv4 \ exit valid input < max view AA TAX \ Xreg has valid mount 60 RTS .hm \ -> &30D8 \ move hyperspace cross-hairs to QQ9,10 target 20 23 2B JSR &2B23 \ TT103 \ erase small cross hairs at target hyperspace system 20 33 2C JSR &2C33 \ TT111 \ closest to QQ9,10 20 23 2B JSR &2B23 \ TT103 \ draw small cross hairs at target hyperspace system 4C A3 25 JMP &25A3 \ CLYNS \ clear some screen lines .ed7 \ same laser already present A0 BB LDY #&BB \ token = ' 'laser 4C E8 2F JMP &2FE8 \ pres \ Token in Y is already present on ship .refund \ -> &30E9 \ get new laser and refund on any old laser. Acc has new power. 85 06 STA &06 \ T1 \ new laser power BD 68 03 LDA &0368,X \ LASER,X F0 23 BEQ ed4 \ empty laser mount, install new laser. C5 06 CMP &06 \ T1 F0 F0 BEQ ed7 \ same power laser already present A0 04 LDY #4 \ 4th item on equipment list, pulse. C9 0F CMP #&0F \ already installed is pulse F0 0E BEQ ed6 \ found present item Y A0 05 LDY #5 \ 5th item on equipment list, beam. C9 8F CMP #&8F \ already installed is beam F0 08 BEQ ed6 \ found present item Y A0 0C LDY #12 \ 12th item on equipment list, military C9 97 CMP #&97 \ already installed is military F0 02 BEQ ed6 \ found present item Y A0 0D LDY #13 \ 13th item on equipment list, mining .ed6 \ found present item Y 86 88 STX &88 \ ZZ \ store view 98 TYA \ equipment item of interest for refund 20 89 30 JSR &3089 \ prx \ return price in (X,Y) for item Acc 20 CE 2E JSR &2ECE \ MCASH \ add Xlo.Yhi to cash A6 88 LDX &88 \ ZZ \ restore view .ed4 \ empty laser mount, install new laser. A5 06 LDA &06 \ T1 \ laser power 9D 68 03 STA &0368,X \ LASER,X 60 RTS \ ---======= end of block D ====== onto block E =====------- .cpl \ -> &3119 \ print Planet name for seed QQ15. Acc == 3 A2 05 LDX #5 \ 6 seeds .TT53 \ counter X B5 6C LDA &6C,X \ QQ15,X \ system seeds 95 73 STA &73,X \ QQ19,X \ temp store CA DEX \ next seed 10 F9 BPL TT53 \ loop X A0 03 LDY #3 \ 4 pairs 24 6C BIT &6C \ QQ15 70 01 BVS P%+3 \ 6th bit of w0_l set is all 4 pairs wanted. 88 DEY \ else 3 pairs 84 D1 STY &D1 \ T .TT55 \ counter T digrams A5 71 LDA &71 \ QQ15+5 29 1F AND #&1F \ keep bottom 5 bits of w2_h (planet name) F0 05 BEQ P%+7 \ lose 2 chars, twist. 09 80 ORA #&80 \ flight digram ..LA.. 20 AC 31 JSR &31AC \ TT27 \ process text token 20 37 26 JSR &2637 \ TT54 \ twist seed for next digram in QQ15 C6 D1 DEC &D1 \ T \ next digram 10 EE BPL TT55 \ loop T A2 05 LDX #5 \ 6 seeds .TT56 \ counter X B5 73 LDA &73,X \ QQ19,X \ restore 95 6C STA &6C,X \ QQ15,X \ system seeds CA DEX \ next seed 10 F9 BPL TT56 \ loop X 60 RTS .cmn \ commander name Acc == 4 20 29 14 JSR &1429 \ MT19 \x13 Upper case for one letter. A0 00 LDY #0 .QUL4 \ counter Y B9 81 11 LDA &1181,Y \ NA%,Y \ current commander name C9 0D CMP #&0D \ end of string F0 06 BEQ ypl-1 \ found, rts. 20 8F 1C JSR &1C8F \ TT26 \ else print character C8 INY \ next char D0 F3 BNE QUL4 \ loop Y 60 RTS \ ypl-1 .ypl \ present, your, planet name Acc == 2 20 60 31 JSR &3160 \ TT62 \ swop present QQ2 seeds into QQ15 20 19 31 JSR &3119 \ cpl \ Planet name for seed QQ15 .TT62 \ -> &3160 \ QQ2 present seeds swopped with QQ15 A2 05 LDX #5 \ 6 bytes .TT78 \ counter X B5 6C LDA &6C,X \ QQ15,X \ planet seeds 6 bytes BC B2 03 LDY &03B2,X \ QQ2,X \ seeds for present system (6 bytes) 9D B2 03 STA &03B2,X \ QQ2,X 94 6C STY &6C,X \ QQ15,X CA DEX \ next seed 10 F3 BPL TT78 \ loop X .ypl16 \ rts 60 RTS .tal \ print Galaxy number Acc == 1 18 CLC \ no decimal point AE 67 03 LDX &0367 \ GCNT \ galaxy count E8 INX \ X is Galaxy number+1 4C C0 1B JMP &1BC0 \ pr2 \ number X to printable characters .fwl \ fuel and cash Acc == 5 A9 69 LDA #&69 \ token = FUEL 20 A7 31 JSR &31A7 \ TT68 \ process token followed by colon AE 65 03 LDX &0365 \ QQ14 38 SEC \ light years with decimal point 20 C0 1B JSR &1BC0 \ pr2 \ number X to printable characters A9 C3 LDA #&C3 \ token = LIGHT YEARS 20 A1 31 JSR &31A1 \ plf \ TT27 text token followed by rtn then .PCASH \ print Cash A9 77 LDA #&77 \ token = CASH colon D0 1F BNE TT27 \ guaranteed hop to process text token .csh \ Cash, 'Cr' and return. Acc == 0 A2 03 LDX #3 \ 4 bytes .pc1 \ Counter X \ big endian BD 61 03 LDA &0361,X \ CASH,X 95 40 STA &40,X \ K,X CA DEX \ Cash to Kbuffer to print 10 F8 BPL pc1 \ loop X A9 09 LDA #9 \ print K, 9 sig figs. 85 80 STA &80 \ U 38 SEC \ carry set for decimal point 20 D0 1B JSR &1BD0 \ BPRNT \ Buffer print (4 bytes of K) A9 E2 LDA #&E2 \ token = ' CR' .plf \ -> &31A1 \ TT27 process flight text token then linefeed 20 AC 31 JSR &31AC \ TT27 \ process text token 4C 83 26 JMP &2683 \ TT67 \ next Row .TT68 \ -> &31A7 \ process token followed by Colon 20 AC 31 JSR &31AC \ TT27 \ process text token .TT73 \ print Colon A9 3A LDA #&3A \ ascii ':' .TT27 \ -> &31AC \ process flight text Token in Acc AA TAX \ copy token to count down F0 DE BEQ csh \ Acc = 0, up to Cash 30 74 BMI TT43 \ if token is > 127 down, page4 token or digram CA DEX F0 BC BEQ tal \ Acc == 1, up, print Galaxy number CA DEX F0 A3 BEQ ypl \ Acc == 2, up, present planet in QQ2. CA DEX D0 03 BNE P%+5 \ hop over, else X == 0 4C 19 31 JMP &3119 \ cpl \ Acc == 3 print Planet name for seed QQ15 CA DEX F0 87 BEQ cmn \ Acc == 4, up, commander name. CA DEX F0 B5 BEQ fwl \ Acc == 5, up, fuel followed by cash. CA DEX D0 05 BNE P%+7 \ hop over, else X == 0 A9 80 LDA #&80 \ Acc == 6, set bit7 TT27m 85 72 STA &72 \ QQ17 60 RTS CA DEX \ skip Acc = 7 CA DEX D0 03 BNE P%+5 \ hop over to continue Acc 9to127 86 72 STX &72 \ QQ17 \ else Acc ==8, QQ17 set to X = 0 60 RTS CA DEX \ continue 9to127 tokens F0 38 BEQ crlf \ Acc == 9, down, colon on right. C9 60 CMP #&60 \ discard X, look at Acc = token >= 96 B0 66 BCS ex \ extra >= #&60, far down C9 0E CMP #14 \ < 14 ? 90 04 BCC P%+6 \ goes to Token < 14 or > 31 C9 20 CMP #32 \ < 31 ? 90 28 BCC qw \ 14 <= token A < 32 becomes 128to145 page4 digram .TT27o \ 10 <= token A < 14 or 32to&5F A6 72 LDX &72 \ QQ17 F0 3D BEQ TT74 \ if QQ17 = 0 Upper case, jmp TT26, print character. 30 11 BMI TT41 \ if bit7 set 24 72 BIT &72 \ QQ17 has bit6 set too 70 30 BVS TT46 \ If only bit6 set, clear bit6 and print as Upper .TT42 \ Uppercase to lowercase C9 41 CMP #&41 \ < ascii 'A' 90 06 BCC TT44 \ jmp TT26, print character C9 5B CMP #&5B \ >= ascii 'Z'+1 B0 02 BCS TT44 \ jmp TT26, print character 69 20 ADC #&20 \ else Upper to lowercase .TT44 \ print character as is with TT26 4C 8F 1C JMP &1C8F \ TT26 \ print character .TT41 \ QQ17 bit7 set 24 72 BIT &72 \ QQ17 70 17 BVS TT45 \ bit6 set too, Nothing or lower. C9 41 CMP #&41 \ < ascii 'A' 90 22 BCC TT74 \ print as is using TT26 48 PHA \ else store token Acc 8A TXA \ QQ17 copy 09 40 ORA #&40 \ set bit6 in QQ17 so subsequent ones lower 85 72 STA &72 \ QQ17 68 PLA \ restore token D0 EC BNE TT44 \ guaranteed up, print as Uppercase with TT26. .qw \ Acc = 14to31 becomes 128to145 page4 digram 69 72 ADC #&72 \ A+=114 becomes 128to145 page4 digram D0 32 BNE ex \ guaranteed down, extra. .crlf \ Acc == 9, colon on right A9 15 LDA #21 \ on right 85 2C STA &2C \ XC D0 97 BNE TT73 \ guaranteed up, print colon. .TT45 \ QQ17 bits 7,6 set. Nothing or lower. E0 FF CPX #&FF \ if QQ17 = #&FF F0 63 BEQ TT48 \ rts C9 41 CMP #&41 \ >= ascii 'A' ? B0 D0 BCS TT42 \ Uppercase to lowercase, up. .TT46 \ clear bit6 QQ17 and print as is using TT26 48 PHA \ push token 8A TXA \ QQ17 copy 29 BF AND #&BF \ clear bit6 85 72 STA &72 \ QQ17 68 PLA \ pull token .TT74 \ TT26, print character. 4C 8F 1C JMP &1C8F \ TT26 .TT43 \ Token > 127 page4 token or planet digram. C9 A0 CMP #&A0 \ >= #160 ? B0 14 BCS TT47 \ more page4, subtract #160 29 7F AND #&7F \ else token 128to159 -> 0 to 31 0A ASL A \ *= 2 A8 TAY \ digram index = 0to62 B9 A1 14 LDA &14A1,Y \ QQ16,Y \ ALLEXEGEZACEBISOUSESARMAINDIREA?ER etc. 20 AC 31 JSR &31AC \ TT27 \ process text token B9 A2 14 LDA &14A2,Y \ QQ16+1,Y \ 2nd character of diagram C9 3F CMP #&3F \ is second letter '?' F0 40 BEQ TT48 \ rts, name has odd-number of letters. 4C AC 31 JMP &31AC \ TT27 \ process flight text token .TT47 \ more page4, subtract #160 E9 A0 SBC #&A0 \ -= 160 .ex \ extra, token >= 96 or Acc = 128to145 or -=160 AA TAX \ copy of word index A9 00 LDA #0 \ page 4 words lo #QQ18 MOD 256 85 22 STA &22 \ V A9 04 LDA #4 \ page 4 words hi #QQ18 DIV 256 85 23 STA &23 \ V+1 A0 00 LDY #0 8A TXA \ token = word index F0 13 BEQ TT50 \ if X=0 then Y offset to word correct .TT51 \ counters Y letter, X token B1 22 LDA (&22),Y \ (V),Y F0 07 BEQ TT49 \ exit as word ended C8 INY \ letter count D0 F9 BNE TT51 \ loop Y E6 23 INC &23 \ V+1 \ next page as Y reached 256 D0 F5 BNE TT51 \ guaranteed, loop Y letter .TT49 \ word ended C8 INY D0 02 BNE TT59 \ next word E6 23 INC &23 \ V+1 \ next page as Y reached 256 .TT59 \ next word CA DEX \ token count D0 ED BNE TT51 \ loop X token .TT50 \ token X = 0, counter Y offset to word correct 98 TYA 48 PHA \ store Yindex A5 23 LDA &23 \ V+1 48 PHA \ correct pointer hi B1 22 LDA (&22),Y \ (V),Y 49 23 EOR #&23 \ decode '#' 20 AC 31 JSR &31AC \ TT27 \ process text token to next depth 68 PLA \ restore this depth's Vhi 85 23 STA &23 \ V+1 68 PLA A8 TAY \ restore this depth's Yindex C8 INY \ next letter D0 02 BNE P%+4 \ not zero so skip next page E6 23 INC &23 \ V+1 B1 22 LDA (&22),Y \ (V),Y D0 E6 BNE TT50 \ loop Y for next letter of page4 token .TT48 \ rts 60 RTS \ end of flight token printing TT27 .EX2 \ -> &327B \ ready to remove - Explosion Code A5 65 LDA &65 \ INWK+31 \ exploding/display state|missiles 09 A0 ORA #&A0 \ bit7 to kill it, bit5 finished exploding. 85 65 STA &65 \ INWK+31 60 RTS \ WPSHPS-1 \ -> &3282 \ arrived at by LL9 object entry. 60 RTS \ Becomes Do explosion in Flight code .WPSHPS \ -> &3283 \ Wipe Ships on scanner A2 00 LDX #0 .WSL1 \ outer counter X BD 11 03 LDA &0311,X \ FRIN,X \ the Type for each of the 12 ships allowed F0 1E BEQ WS2 \ exit as Nothing 30 19 BMI WS1 \ loop as Planet or Sun 20 ED 32 JSR &32ED \ GINF \ Get info on ship X, update INF pointer A0 1F LDY #31 \ load some INWK from (INF) .WSL2 \ inner counter Y B1 20 LDA (&20),Y \ (INF),Y 99 46 00 STA &0046,Y \ INWK,Y 88 DEY \ next byte of univ inf to inwk 10 F8 BPL WSL2 \ inner loop Y 86 84 STX &84 \ XSAV A6 84 LDX &84 \ XSAV \ scan inbetween of flight code deleted A0 1F LDY #31 \ need to adjust INF display state B1 20 LDA (&20),Y \ (INF),Y 29 A7 AND #&A7 \ clear bits 6,4,3 (explode,invisible,dot) 91 20 STA (&20),Y \ (INF),Y \ keep bits 7,5,2,1,0 (kill,explode,missiles) .WS1 \ loop as Planet or Sun E8 INX \ next nearby slot D0 DD BNE WSL1 \ outer loop X .WS2 \ exit as Nothing A2 FF LDX #&FF \ clear line buffers 8E C0 0E STX &0EC0 \ LSX2 \ lines X2 8E 0E 0F STX &0F0E \ LSY2 \ lines Y2 .FLFLLS \ -> &2F71 \ New Flood-Filled Sun, ends with Acc=0 A0 BF LDY #191 \ 2*#Y-1 is top of Yscreen A9 00 LDA #0 \ clear each line .SAL6 \ counter Y 99 00 0E STA &0E00,Y \ LSO,Y \ line buffer solar 88 DEY \ fill next line with zeros D0 FA BNE SAL6 \ loop Y 88 DEY \ Yreg = #&FF 8C 00 0E STY &0E00 \ LSX \ overlaps with LSO vector 60 RTS .DET1 \ Death with X = 24 text rows A9 06 LDA #6 \ R6 number of displayed Character rows 78 SEI \ disable other interrupts 8D 00 FE STA &FE00 \ 6845 register 8E 01 FE STX &FE01 \ 6845 data 58 CLI \ enable interrupts 60 RTS CA DEX \ cap Shield = #&FF \ SHD-2 60 RTS .SHD \ let Shield X recharge E8 INX \ recharge shield F0 FB BEQ SHD-2 \ cap Shield up = #&FF if too big else .DENGY \ Drain player's Energy CE A7 03 DEC &03A7 \ ENERGY 08 PHP \ push dec flag D0 03 BNE P%+5 \ skip inc, else underflowing EE A7 03 INC &03A7 \ ENERGY \ energy set back to 1 28 PLP \ pull dec flag 60 RTS .SPL1 \ -> &32DA \ move Page9 INF for planet +1to2,X to K3+0to3,X BD 01 09 LDA &0901,X \ planet hi K%+1,X 95 D2 STA &D2,X \ K3+0,X BD 02 09 LDA &0902,X \ planet sg K%+2,X A8 TAY \ save sign byte of coordinate 29 7F AND #&7F \ lower 7 bits 95 D3 STA &D3,X \ K3+1,X 98 TYA \ restore sign byte 29 80 AND #&80 \ bit7 sign bit 95 D4 STA &D4,X \ K3+2,X 60 RTS .GINF \ -> &32ED \ Get ship Info pointer for nearby ship slot X 8A TXA \ nearby slot 0A ASL A \ X*2 A8 TAY \ into table at UNIV B9 41 17 LDA &1741,Y \ UNIV,Y 85 20 STA &20 \ INF B9 42 17 LDA &1742,Y \ UNIV+1,Y 85 21 STA &21 \ INF+1 60 RTS .NWSHP \ -> &2F8E \ New Docked Ship type Acc. 85 D1 STA &D1 \ T \ Type stored A2 00 LDX #0 .NWL1 \ while slot occupied, counter X BD 11 03 LDA &0311,X \ FRIN,X F0 07 BEQ NW1 \ if empty, Found room for Xth ship to be added E8 INX \ next slot E0 0C CPX #12 \ #NOSH is max number of ships 90 F6 BCC NWL1 \ loop X .NW3 \ else exited loop with no slot found, so ship not added. 18 CLC \ ship not added 60 RTS .NW1 \ Found FRIN(X) that is still empty. Allowed to add ship, type is in T. 20 ED 32 JSR &32ED \ GINF \ Get INFo pointer for slot X from UNIV A5 D1 LDA &D1 \ T \ the ship type 30 50 BMI NW2 \ planet/sun, hop inner workspace to just store ship type. 0A ASL A \ type*=2 to get A8 TAY \ hull index for table at XX21= &5600 B9 FE 55 LDA &55FE,Y \ XX21-2,Y 85 1E STA &1E \ XX0 \ hull pointer lo B9 FF 55 LDA &55FF,Y \ XX21-1,Y 85 1F STA &1F \ XX0+1 \ hull pointer hi C0 04 CPY #4 \ #2*SST F0 30 BEQ NW6 \ if ship type #SST space station A0 05 LDY #5 \ hull byte5 = maxlines for using ship lines heap B1 1E LDA (&1E),Y \ (XX0),Y 85 06 STA &06 \ T1 AD B0 03 LDA &03B0 \ SLSP \ ship lines pointer 38 SEC \ ship lines pointer - maxlines E5 06 SBC &06 \ T1 \ hull byte#5 85 67 STA &67 \ XX19 \ temp pointer lo for lines AD B1 03 LDA &03B1 \ SLSP+1 E9 00 SBC #0 \ hi 85 68 STA &68 \ XX19+1 A5 67 LDA &67 \ XX19 E5 20 SBC &20 \ INF \ info pointer gives present top of all workspace heap A8 TAY \ compare later to number of bytes, 37, needed for ship workspace A5 68 LDA &68 \ XX19+1 E5 21 SBC &21 \ INF+1 90 C8 BCC NW3+1 \ rts if too low, not enough space. D0 04 BNE NW4 \ enough space, else if hi match C0 25 CPY #&25 \ NI% = #37 ship workspace size 90 C2 BCC NW3+1 \ rts if too low, not enough space .NW4 \ enough space for lines, carry set A5 67 LDA &67 \ XX19 \ temp pointer lo for lines 8D B0 03 STA &03B0 \ SLSP \ new ship lines pointer A5 68 LDA &68 \ XX19+1 8D B1 03 STA &03B1 \ SLSP+1 .NW6 \ New Space Station #SST also arrived here A0 0E LDY #14 \ Hull byte#14 = energy B1 1E LDA (&1E),Y \ (XX0),Y 85 69 STA &69 \ INWK+35 \ energy A0 13 LDY #19 \ Hull byte#19 = laser|missile info B1 1E LDA (&1E),Y \ (XX0),Y 29 07 AND #7 \ only lower 3 bits are number of missiles 85 65 STA &65 \ INWK+31 \ exploding/display state|missiles A5 D1 LDA &D1 \ T \ reload ship Type .NW2 \ also planet/sun store Acc = ship type 9D 11 03 STA &0311,X \ FRIN,X AA TAX \ slot info lost, X is now ship type. 30 03 BMI NW8 \ hop over as Planet, else increase ships of type X FE 1E 03 INC &031E,X \ MANY,X .NW8 \ hopped as Planet/Sun A0 24 LDY #36 \ #(NI%-1) start Y counter for inner workspace .NWL3 \ move workspace out, counter Y B9 46 00 LDA &0046,Y \ INWK,Y 91 20 STA (&20),Y \ (INF),Y 88 DEY 10 F8 BPL NWL3 \ loop Y 38 SEC \ success in creating new ship, carry set. 60 RTS .NwS1 \ -> &3377 \ Flip signs and X+=2 needed by new space station B5 46 LDA &46,X \ INWK,X 49 80 EOR #&80 \ flip sg coordinate 95 46 STA &46,X \ INWK,X E8 INX E8 INX \ Xreg +=2 60 RTS .ABORT \ -> &3380 \ Draw missile block, Unarm missile A2 FF LDX #&FF \ clear target .ABORT2 \ Xreg stored as missile target 86 45 STX &45 \ MSTG \ missile targeted 12 choices AE 8B 03 LDX &038B \ NOMSL \ number of missiles 20 A7 33 JSR &33A7 \ MSBAR \ draw missile bar, returns with Y = 0. 8C 44 03 STY &0344 \ MSAR \ missile armed status 60 RTS .SPBLB \ -> &338E space station bulb A9 C0 LDA #(24*8) \ Screen pointer lo SC on right of row A2 9F LDX #&9F \ #(SPBT MOD 256) \ font source A0 33 LDY #&33 \ #(SPBT DIV 256) \ &339F .BULB 85 07 STA &07 \ SC \ screen lo 86 1C STX &1C \ P+1 \ font pointer lo 84 1D STY &1D \ P+2 \ font pointer hi A9 7D LDA #&7D \ Screen pointer hi SC+1 = &7DC0 4C C8 1D JMP &1DC8 \ RREN \ render 8 bytes from (P+1) .SPBT \ -> &339F \ 'S' displayed in lower console font source E0 E0 80 E0 EQUD &E080E0E0 \ big E0 20 E0 E0 EQUD &E0E020E0 \ 'S' .MSBAR \ -> &33A7 \ draw Missile bar X and Y is strip colour. 8A TXA \ missile i.d. 0A ASL A 0A ASL A 0A ASL A \ X*8 85 D1 STA &D1 \ T \ build missile block offset A9 31 LDA #&31 \ far right E5 D1 SBC &D1 \ T 85 07 STA &07 \ SC \ screen lo in console A9 7E LDA #&7E \ screen hi is bottom row of visible console 85 08 STA &08 \ SC+1 98 TYA \ strip mask colour A0 05 LDY #5 \ 5 strips .MBL1 \ counter Y to build block 91 07 STA (&07),Y \ (SC),Y 88 DEY \ next colour strip D0 FB BNE MBL1 \ loop Y 60 RTS .PLF3 \ flip height for planet/sun fill 8A TXA \ Yscreen height lo 49 FF EOR #&FF \ flip 18 CLC 69 01 ADC #1 AA TAX \ height flipped .PLF17 \ up A = #&FF as Xlo =0 A9 FF LDA #&FF \ fringe flag will run up D0 43 BNE PLF5 \ guaranteed, Xreg = height ready .SUN \ Sun for Short range chart with radius K A9 01 LDA #1 8D 00 0E STA &0E00 \ LSX \ overlaps with LSO vector 20 B7 35 JSR &35B7 \ CHKON \ P+1 set to maxY A9 00 LDA #0 \ fill up Acc bits based on size A6 40 LDX &40 \ K \ radius E0 60 CPX #&60 \ any carry becomes low bit 2A ROL A E0 28 CPX #&28 \ 4 if radius >= 40 2A ROL A E0 10 CPX #&10 \ 2 if radius >= 16 2A ROL A \ extent of fringes set .PLF18 85 93 STA &93 \ CNT \ bits are extent of fringes A9 BF LDA #191 \ 2*#Y-1 is Yscreen A6 1D LDX &1D \ P+2 D0 0A BNE PLF2 \ big height C5 1C CMP &1C \ P+1 \ is Y screen < P+1 90 06 BCC PLF2 \ big height A5 1C LDA &1C \ P+1 \ now Acc = P+1 loaded D0 02 BNE PLF2 \ big height A9 01 LDA #1 \ else Acc=1 is bottom end of Yscreen .PLF2 \ big height 85 8F STA &8F \ TGT \ bottom of screen for Y height, counter end. A9 BF LDA#191 \ 2*#Y-1 is Yscreen 38 SEC \ subtract E5 E0 SBC &E0 \ K4 \ Yorg AA TAX \ Yscreen lo A9 00 LDA #0 \ hi E5 E1 SBC &E1 \ K4+1 30 C0 BMI PLF3 \ flip height then ready to run up D0 08 BNE PLF4 \ if Yscreen hi not zero then height is full radius E8 INX CA DEX \ ysub lo F0 C1 BEQ PLF17 \ if ylo = 0 then ready to run up with A = #&FF E4 40 CPX &40 \ K \ Yscreen lo < radius ? 90 04 BCC PLF5 \ if ylo < radius then ready to run down .PLF4 \ height is full radius A6 40 LDX &40 \ K \ counter V height is radius A9 00 LDA #0 \ fringe flag will run down .PLF5 \ Xreg = height ready, Acc is flag for run direction 86 22 STX &22 \ V \ counter height 85 23 STA &23 \ V+1 \ flag 0 (up) or FF (down) A5 40 LDA &40 \ K 20 C0 21 JSR &21C0 \ SQUA2 \ P.A = A*A 85 9C STA &9C \ K2+1 \ squared 16-bit radius hi A5 1B LDA &1B \ P \ lo 85 9B STA &9B \ K2+0 \ squared 16-bit radius lo A0 BF LDY #&BF \ 2*#Y-1 = #191 Yscreen is counter start A5 28 LDA &28 \ SUNX 85 26 STA &26 \ YY \ old mid-point of horizontal line A5 29 LDA &29 \ SUNX+1 85 27 STA &27 \ YY+1 \ hi .PLFL2 \ counter Y down erase top Disc C4 8F CPY &8F \ TGT \ Yheight top reached? F0 0B BEQ PLFL \ exit to Start, Y height = TGT top. B9 00 0E LDA &0E00,Y \ LSO,Y F0 03 BEQ PLF13 \ if half width zero skip line drawing 20 09 19 JSR &1909 \ HLOIN2 \ line X1,X2 using YY as mid-point, Acc is half-width .PLF13 \ skipped line drawing 88 DEY \ erase top Disc D0 F1 BNE PLFL2 \ loop Y .PLFL \ -> &3436 \ exited as reached Start. Y = TGT, counter V height. Work out extent. A5 22 LDA &22 \ V \ counter height 20 C0 21 JSR &21C0 \ SQUA2 \ P.A = A*A unsigned 85 D1 STA &D1 \ T \ squared height hi A5 9B LDA &9B \ K2 \ squared 16-bit radius lo 38 SEC E5 1B SBC &1B \ P \ height squared lo 85 81 STA &81 \ Q \ radius^2-height^2 lo A5 9C LDA &9C \ K2+1 \ radius^2 hi E5 D1 SBC &D1 \ T \ height squared hii 85 82 STA &82 \ R \ extent^2 hi 84 35 STY &35 \ Y1 \ Y store line height 20 3E 3F JSR &3F3E \ LL5 \ SQRT Q = SQR(Q,R) = sqrt(extent^2) A4 35 LDY &35 \ Y1 \ restore line height 20 36 37 JSR &3736 \ DORND \ do random number 25 93 AND &93 \ CNT \ trim fringe 18 CLC 65 81 ADC &81 \ Q \ new extent 90 02 BCC PLF44 \ not saturated A9 FF LDA #&FF \ fringe max extent .PLF44 \ fringes not saturated BE 00 0E LDX &0E00,Y \ LSO,Y 99 00 0E STA &0E00,Y \ LSO,Y F0 4A BEQ PLF11 \ updated extent, if zero No previous old line A5 28 LDA &28 \ SUNX 85 26 STA &26 \ YY \ Old mid-point of line A5 29 LDA &29 \ SUNX+1 85 27 STA &27 \ YY+1 \ hi 8A TXA \ old lso,y half-width extent 20 86 35 JSR &3586 \ EDGES \ horizontal line old extent clip A5 34 LDA &34 \ X1 85 24 STA &24 \ XX \ old left A5 36 LDA &36 \ X2 85 25 STA &25 \ XX+1 \ old right A5 D2 LDA &D2 \ K3 \ Xcenter 85 26 STA &26 \ YY \ new mid-point A5 D3 LDA &D3 \ K3+1 85 27 STA &27 \ YY+1 \ hi B9 00 0E LDA &0E00,Y \ LSO,Y 20 86 35 JSR &3586 \ EDGES \ horizontal line new extent clip B0 0B BCS PLF23 \ No new line A5 36 LDA &36 \ X2 A6 24 LDX &24 \ XX \ old left 86 36 STX &36 \ X2 85 24 STA &24 \ XX \ swopped old left and new X2 right 20 13 19 JSR &1913 \ HLOIN \ horizontal line X1,Y1,X2 Left fringe .PLF23 \ also No new line A5 24 LDA &24 \ XX \ old left or new right 85 34 STA &34 \ X1 A5 25 LDA &25 \ XX+1 \ old right 85 36 STA &36 \ X2 .PLF16 \ Draw New line, also from PLF11 20 13 19 JSR &1913 \ HLOIN \ horizontal line X1,Y1,X2 Whole old, or new Right fringe. .PLF6 \ tail Next line 88 DEY \ next height Y F0 3F BEQ PLF8 \ Exit Sun fill A5 23 LDA &23 \ V+1 \ if flag already set D0 1D BNE PLF10 \ take height counter V back up to radius K C6 22 DEC &22 \ V \ else counter height down D0 8C BNE PLFL \ loop V, Work out fringe offset. C6 23 DEC &23 \ V+1 \ finished down, set flag to go other way. .PLFLS \ loop back to Work out offset 4C 36 34 JMP &3436 \ PLFL \ loop V back, Work out offset. .PLF11 \ No previous old line at Y1 screen A6 D2 LDX &D2 \ K3 \ Xcenter 86 26 STX &26 \ YY \ new mid-point A6 D3 LDX &D3 \ K3+1 86 27 STX &27 \ YY+1 \ hi 20 86 35 JSR &3586 \ EDGES \ horizontal line X1,Y1,X2 90 E0 BCC PLF16 \ Draw New line, up A9 00 LDA #0 \ else no new line at height Y 99 00 0E STA &0E00,Y \ LSO,Y F0 DC BEQ PLF6 \ guaranteed, tail Next line up .PLF10 \ V flag set to take height back up to radius K A6 22 LDX &22 \ V \ counter height E8 INX \ next 86 22 STX &22 \ V E4 40 CPX &40 \ K \ if height < radius 90 E0 BCC PLFLS \ loop V, Work out extent F0 DE BEQ PLFLS \ if height = radius, loop V, Work out extent A5 28 LDA &28 \ SUNX 85 26 STA &26 \ YY \ Onto remaining erase. Old mid-point of line A5 29 LDA &29 \ SUNX+1 85 27 STA &27 \ YY+1 \ hi .PLFL3 \ rest of counter Y screen line B9 00 0E LDA &0E00,Y \ LSO,Y F0 03 BEQ PLF9 \ no old exent, skip erase line 20 09 19 JSR &1909 \ HLOIN2 \ line X1,X2 using YY as mid-point, Acc is half-width .PLF9 \ skipped erase line 88 DEY \ rest of screen D0 F5 BNE PLFL3 \ loop Y erase bottom Disc .PLF8 \ Exited Sun Fill 18 CLC \ update mid-point of line A5 D2 LDA &D2 \ K3 85 28 STA &28 \ SUNX A5 D3 LDA &D3 \ K3+1 85 29 STA &29 \ SUNX+1 60 RTS \ End of Sun fill .CIRCLE \ -> &34EB \ Circle for planet A9 00 LDA #0 8D C0 0E STA &0EC0 \ LSX2 A6 40 LDX &40 \ K \ radius A9 08 LDA #8 \ set up STP size based on radius E0 08 CPX #8 \ is radius X < 8 ? 90 06 BCC PL89 \ small 4A LSR A \ STP #4 E0 3C CPX #60 90 01 BCC PL89 \ small 4A LSR A \ bigger circles get smaller step .PL89 \ small 85 95 STA &95 \ STP \ step for ring .CIRCLE2 \ -> &3500 \ also on chart at origin (K3,K4) STP already set A2 FF LDX #&FF 86 92 STX &92 \ FLAG E8 INX \ X = 0 86 93 STX &93 \ CNT .PLL3 \ -> &3507 \ counter CNT until = 64 A5 93 LDA &93 \ CNT 20 F0 21 JSR &21F0 \ FMLTU2 \ Get K*sin(CNT) in Acc A2 00 LDX #0 \ hi 86 D1 STX &D1 \ T A6 93 LDX &93 \ CNT \ the count around the circle E0 21 CPX #33 \ <= #32 ? 90 0D BCC PL37 \ right-half of circle 49 FF EOR #&FF \ else Xreg = A lo flipped 69 00 ADC #0 AA TAX \ lo A9 FF LDA #&FF \ hi flipped 69 00 ADC #0 \ any carry 85 D1 STA &D1 \ T 8A TXA \ lo flipped, later moved into K6(0,1) for BLINE x offset 18 CLC .PL37 \ right-half of circle, Acc = xlo 65 D2 ADC &D2 \ K3 \ Xorg 85 76 STA &76 \ K6 \ K3(0) + Acc = lsb of X for bline A5 D3 LDA &D3 \ K3+1 \ hi 65 D1 ADC &D1 \ T \ hi 85 77 STA &77 \ K6+1 \ K3(1) + T + C = hsb of X for bline A5 93 LDA &93 \ CNT 18 CLC \ onto Y 69 10 ADC #16 \ Go ahead a quarter of a quadrant for cosine index 20 F0 21 JSR &21F0 \ FMLTU2 \ Get K*sin(CNT) into A AA TAX \ y lo = K*sin(CNT) A9 00 LDA #0 \ y hi = 0 85 D1 STA &D1 \ T A5 93 LDA &93 \ CNT 69 0F ADC #15 \ count +=15 29 3F AND #&3F \ round within 64 C9 21 CMP #33 \ <= 32 ? 90 0D BCC PL38 \ if true skip Y flip 8A TXA \ Ylo 49 FF EOR #&FF \ flip 69 00 ADC #0 AA TAX \ Ylo flipped A9 FF LDA #&FF \ hi flipped 69 00 ADC #0 \ any carry 85 D1 STA &D1 \ T 18 CLC .PL38 \ skipped Y flip 20 16 1A JSR &1A16 \ BLINE \ ball line uses (Xlo.Thi) as next y C9 41 CMP #65 \ > #64 ? B0 03 BCS P%+5 \ hop to exit 4C 07 35 JMP &3507 \ PLL3 \ loop CNT back 18 CLC 60 RTS \ End Circle .WP1 \ Avoid lines, used by wipe planet code A9 01 LDA #1 85 6B STA &6B \ LSP \ arc counter A9 FF LDA #&FF 8D C0 0E STA &0EC0 \ LSX2 60 RTS .WPLS \ Wipe Sun AD 00 0E LDA &0E00 \ LSO 30 42 BMI ED4 \ clc rts A5 28 LDA &28 \ SUNX 85 26 STA &26 \ YY \ mid-point of line lo A5 29 LDA &29 \ SUNX+1 85 27 STA &27 \ YY+1 \ hi A0 BF LDY #191 \ #2*Y-1 = Yscreen top .WPL2 \ counter Y B9 00 0E LDA &0E00,Y \ LSO,Y F0 03 BEQ P%+5 \ skip hline2 20 09 19 JSR &1909 \ HLOIN2 \ line using YY as mid-point, Acc is half-width. 88 DEY D0 F5 BNE WPL2 \ loop Y 88 DEY \ Yreg = #&FF, solar empty. 8C 00 0E STY &0E00 \ LSO 60 RTS .EDGES \ -> &3586 \ Clip Horizontal line centered on YY to X1 X2 85 D1 STA &D1 \ T 18 CLC \ trial Half width 65 26 ADC &26 \ YY \ add center of line X mid-point 85 36 STA &36 \ X2 \ right A5 27 LDA &27 \ YY+1 \ hi 69 00 ADC #0 \ any carry 30 1D BMI ED1 \ right overflow F0 04 BEQ P%+6 \ no hsb present, hop to LDA YY A9 FE LDA #&FE \ else saturate right 85 36 STA &36 \ X2 A5 26 LDA &26 \ YY \ center of line X mid-point 38 SEC \ subtract trial width E5 D1 SBC &D1 \ T 85 34 STA &34 \ X1 \ left A5 27 LDA &27 \ YY+1 \ hi E9 00 SBC #0 \ any carry D0 02 BNE ED3 \ left underflow 18 CLC \ else, ok draw line 60 RTS \ X1 and X2 now known .ED3 \ left underflow 10 06 BPL ED1 \ X1 left under flow, dont draw. A9 02 LDA #2 \ else saturate left 85 34 STA &34 \ X1 .ED4 \ ok draw line 18 CLC 60 RTS .ED1 \ right overflow, also left dont draw A9 00 LDA #0 \ clear line buffer solar 99 00 0E STA &0E00,Y \ LSO,Y .PL21 \ dont draw 38 SEC \ dont draw 60 RTS \ end of Clipped edges .CHKON \ -> &35B7 \ check extent of circles, P+1 set to maxY, Y protected. A5 D2 LDA &D2 \ K3 \ Xorg 18 CLC 65 40 ADC &40 \ K \ radius A5 D3 LDA &D3 \ K3+1 \ hi 69 00 ADC #0 30 F3 BMI PL21 \ overflow to right, sec rts A5 D2 LDA &D2 \ K3 \ Xorg 38 SEC E5 40 SBC &40 \ K \ radius A5 D3 LDA &D3 \ K3+1 \ hi E9 00 SBC #0 30 02 BMI PL31 \ Xrange ok D0 E6 BNE PL21 \ underflow to left, sec rts .PL31 \ Xrange ok A5 E0 LDA &E0 \ K4 \ Yorg 18 CLC 65 40 ADC &40 \ K \ radius 85 1C STA &1C \ P+1 \ maxY = Yorg+radius A5 E1 LDA &E1 \ K4+1 \ hi 69 00 ADC #0 30 D9 BMI PL21 \ overflow top, sec rts 85 1D STA &1D \ P+2 \ maxY hi A5 E0 LDA &E0 \ K4 \ Yorg 38 SEC E5 40 SBC &40 \ K \ radius AA TAX \ bottom lo A5 E1 LDA &E1 \ K4+1 \ hi E9 00 SBC #0 30 C4 BMI ED4 \ ok, clc rts D0 C9 BNE PL21 \ bottom underflowed, sec rts E0 BF CPX #191 \ #2*Y-1, bottom Ylo >= screen Ytop? 60 RTS .TT17 \ -> &35EF \ returns with X,Y from arrow keys or joystick used 20 F0 3C JSR &3CF0 \ DOKEY \ KL has force key AD CD 03 LDA &03CD \ JSTK \ or joystick used F0 25 BEQ TJ1 \ hop down, Arrows from keyboard, else joystick AD 4C 03 LDA &034C \ JSTX 49 FF EOR #&FF \ flip sign 20 04 36 JSR &3604 \ TJS1 \ Yreg = -2 to +2 for -JSTX 98 TYA \ Acc = -2 to +2 for -JSTX AA TAX \ Xreg = -2 to +2 for -JSTX AD 4D 03 LDA &034D \ JSTY .TJS1 \ -> &3604 \ Acc scaled to -2 to +2 for 0 to FF A8 TAY \ JST X Y A9 00 LDA #0 C0 10 CPY #&10 \ set C if Y>= #&10 E9 00 SBC #0 C0 40 CPY #&40 E9 00 SBC #0 C0 C0 CPY #&C0 69 00 ADC #0 C0 E0 CPY #&E0 69 00 ADC #0 A8 TAY \ Yreg = -2 to +2 AD 00 03 LDA &0300 \ KL \ Acc = keyboard logger 60 RTS .TJ1 \ Arrows from keyboard AD 00 03 LDA &0300 \ KL \ keyboard logger A2 00 LDX #0 A0 00 LDY #0 C9 19 CMP #&19 \ left cursor D0 01 BNE P%+3 \ skip dex CA DEX C9 79 CMP #&79 \ right cursor D0 01 BNE P%+3 \ skip inx E8 INX C9 39 CMP #&39 \ up cursor D0 01 BNE P%+3 \ skip iny C8 INY C9 29 CMP #&29 \ down cursor D0 01 BNE P%+3 \ skip dey 88 DEY 86 D1 STX &D1 \ T \ Docked code can boost cursor moves A2 00 LDX #0 20 93 3C JSR &3C93 \ DKS4 \ keyboard scan returned in X and A 10 08 BPL TJe \ shift key not held, skip *4 boost 06 D1 ASL &D1 \ T 06 D1 ASL &D1 \ T \ = X*4 98 TYA 0A ASL A 0A ASL A A8 TAY \ Y*=4 .TJe \ skipped *4 boost A6 D1 LDX &D1 \ T AD 00 03 LDA &0300 \ KL \ keyboard logger 60 RTS .ping \ -> &364E \ move to home coordinates A2 01 LDX #1 .pl1 \ counter X BD 59 03 LDA &0359,X \ QQ0,X \ present system 9D C1 03 STA &03C1,X \ QQ9,X \ target system CA DEX \ next coord 10 F7 BPL pl1 \ loop X 60 RTS \ ---====== end of block E ===== onto block F =======----- .SFX \ -> &365A \ Sound data 12 01 00 10 EQUD &10000112 \ Laser you fired Flush2 uses Envelope #1 Acc= 0 12 02 2C 08 EQUD &082C0212 \ Laset hit you Flush2 uses Envelope #2 Acc= 4 11 03 F0 18 EQUD &18F00311 \ Death_initial Flush1 uses Envelope #3 Acc= 8 10 F1 07 1A EQUD &1A07F110 \ Death_later or Kill Flush07 Acc=12 03 F1 BC 01 EQUD &01BCF103 \ Beep, high short NoFlush3 Acc=16 13 F4 0C 08 EQUD &080CF413 \ Beep, low long Flush3 Acc=20 10 F1 06 0C EQUD &0C06F110 \ Missile/Launch Flush06 Acc=24 10 02 60 10 EQUD &10600210 \ Hyperspace Flush0 uses Envelope #2 Acc=28 13 04 C2 FF EQUD &FFC20413 \ ECM_ON Flush3 uses Envelope #4 Acc=32 13 00 00 00 EQUD &00000013 \ ECM_OFF Acc=36 .RESET \ -> &3682 \ New player ship, called by TITLE 20 EE 39 JSR &39EE \ ZERO \ zero-out &311-&34B A2 06 LDX #6 .SAL3 \ counter X 95 2A STA &2A,X \ BETA,X CA DEX 10 FB BPL SAL3 \ loop X 8A TXA \ Acc = #&FF 85 8E STA &8E \ QQ12 \ Docked flag A2 02 LDX #2 \ Restore forward, aft shields, and energy .REL5 \ counter X 9D A5 03 STA &03A5,X \ FSH,X \ forward shield CA DEX 10 FA BPL REL5 \ loop X .RES2 \ -> &3697 \ Reset2 A9 12 LDA #18 \ #NOST 8D C3 03 STA &03C3 \ NOSTM \ number of stars, dust. A2 FF LDX #&FF \ bline buffers cleared, 78 bytes. 8E C0 0E STX &0EC0 \ LSX2 8E 0E 0F STX &0F0E \ LSY2 86 45 STX &45 \ MSTG \ missile has no target A9 80 LDA #&80 \ center joysticks 8D 4D 03 STA &034D \ JSTY \ joystick Y 85 32 STA &32 \ ALP2 \ roll sign 85 7B STA &7B \ BET2 \ pitch sign 0A ASL A \ = 0 85 33 STA &33 \ ALP2+1 \ negated roll sign 85 7C STA &7C \ BET2+1 \ negated pitch sign 85 8A STA &8A \ MCNT \ move count A9 03 LDA #3 \ keep ship distance fixed on title screen 85 7D STA &7D \ DELTA \ bpl -2 inserted here to stall from title code if byte check fails 85 8D STA &8D \ ALPHA \ gentle roll to player for ship on title screen 85 31 STA &31 \ ALP1 \ roll magnitude A5 30 LDA &30 \ ECMA \ E.C.M. active F0 03 BEQ yu \ hop over as ECM not on 20 2F 3C JSR &3C2F \ ECMOF \ silence E.C.M. sound .yu \ -> &36C5 \ ECM not on 20 83 32 JSR &3283 \ WPSHPS \ wipe ships on scanner 20 EE 39 JSR &39EE \ ZERO \ zero-out &311-&34B A9 FF LDA #&FF \ #(LS% MOD 256) 8D B0 03 STA &03B0 \ SLSP \ ship lines pointer reset to top LS% = &0CFF A9 0C LDA #&0C \ #(LS% DIV 256) 8D B1 03 STA &03B1 \ SLSP+1 \ hi 20 E5 1D JSR &1DE5 \ DIALS \ update flight console .ZINF \ -> &36D8 \ Zero Information, ends with Acc = #&E0 A0 24 LDY #36 \ #NI%-1 = NI%=37 is size of inner working space A9 00 LDA #0 .ZI1 \ counter Y 99 46 00 STA &0046,Y \ INWK,Y 88 DEY 10 FA BPL ZI1 \ loop Y A9 60 LDA #&60 \ unity in rotation matrix 85 58 STA &58 \ INWK+18 \ rotmat1y hi 85 5C STA &5C \ INWK+22 \ rotmat2x hi 09 80 ORA #&80 \ -ve unity = #&E0 85 54 STA &54 \ INWK+14 \ rotmat0z hi = -1 60 RTS .msblob \ -> &36ED \ update Missile blocks on console A2 04 LDX #4 \ number of missile blocks .ss \ counter X EC 8B 03 CPX &038B \ NOMSL \ compare Xreg to number of missiles F0 09 BEQ SAL8 \ remaining missiles are green A0 00 LDY #0 \ else black strip 20 A7 33 JSR &33A7 \ MSBAR \ draw missile block Xreg CA DEX \ next missile D0 F3 BNE ss \ loop X 60 RTS .SAL8 \ remaining missiles are green, counter X A0 EE LDY #&EE \ green strip 20 A7 33 JSR &33A7 \ MSBAR \ draw missile block Xreg CA DEX \ next missile D0 F8 BNE SAL8 \ loop X 60 RTS .me2 \ -> &3706 \ erase message from TT100 AD A4 03 LDA &03A4 \ MCH \ message id 20 82 3D JSR &3D82 \ MESS \ message A9 00 LDA #0 8D 4A 03 STA &034A \ DLY \ delay reset to 0 4C 54 37 JMP &3754 \ me3 \ back to TT100 .Ze \ Zero ship and set coordinates, ends with dornd. 20 D8 36 JSR &36D8 \ ZINF \ zero information 20 36 37 JSR &3736 \ DORND \ do random, new A, X. 85 06 STA &06 \ T1 29 80 AND #&80 \ keep bit7 sign 85 48 STA &48 \ INWK+2 \ xsg left/right 8A TXA \ Xrnd = old rnd 29 80 AND #&80 \ keep bit7 sign 85 4B STA &4B \ INWK+5 \ ysg up/down A9 19 LDA #25 \ distance away 85 47 STA &47 \ INWK+1 \ xhi 85 4A STA &4A \ INWK+4 \ yhi 85 4D STA &4D \ INWK+7 \ zhi 8A TXA \ Xrnd bit7 already used C9 F5 CMP #245 \ carry set rarely 2A ROL A \ and goes into bit0, has ecm. 09 C0 ORA #&C0 \ set AI active and turn to attack > 50% probability 85 66 STA &66 \ INWK+32 \ ai_attack_univ_ecm .DORND2 \ Restricted for explosion dust. 18 CLC \ leave bit0 of RAND+2 at 0. .DORND \ -> &3736 Do Random Number A5 00 LDA &00 \ RAND \ seed 0 2A ROL A AA TAX \ double lo 65 02 ADC &02 \ RAND+2 85 00 STA &00 \ RAND 86 02 STX &02 \ RAND+2 \ dornd2 would leave bit0 of RAND+2 at 0. A5 01 LDA &01 \ RAND+1 AA TAX \ store hi 65 03 ADC &03 \ RAND+3 \ bvs will see bit6 set here 85 01 STA &01 \ RAND+1 \ A rnd 86 03 STX &03 \ RAND+3 \ Xrnd = old A rnd 60 RTS .TT100 \ -> &374A \ Start of Main loop and check messages CE 4A 03 DEC &034A \ DLY \ reduce delay F0 B7 BEQ me2 \ if 0 erase message, up 10 03 BPL me3 \ skip inc EE 4A 03 INC &034A \ DLY \ else undershot, set to 0. .me3 \ also arrive back from me2 C6 8A DEC &8A \ MCNT F0 03 BEQ P%+5 \ move count reached zero .ytq \ a lot of this not needed while docked 4C 89 37 JMP &3789 \ MLOOP \ usually jump down to main loop AD 41 03 LDA &0341 \ MJ \ if mis-jump to witchspace occurred D0 F8 BNE ytq \ up then jump down to main loop 20 36 37 JSR &3736 \ DORND \ else spawning, do random number C9 23 CMP #51 \ usually B0 22 BCS MLOOP \ down to main loop AD 25 03 LDA &0325 \ MANY+7 \ number of asteroids C9 03 CMP #3 \ if more than 2 B0 1B BCS MLOOP \ down to main loop 20 D8 36 JSR &36D8 \ ZINF \ else spawning, Zero information A9 26 LDA #38 \ set distance 85 4D STA &4D \ INWK+7 \ zhi 20 36 37 JSR &3736 \ DORND \ do random number 85 46 STA &46 \ INWK \ xlo is Arnd 86 49 STX &49 \ INWK+3 \ ylo is Xrnd 29 80 AND #&80 \ keep sign 85 48 STA &48 \ INWK+2 \ xsg 8A TXA \ Xrnd 29 80 AND #&80 \ keep sign 85 4B STA &4B \ INWK+5 \ ysg 26 47 ROL &47 \ INWK+1 \ xhi brings in bit from dornd 26 47 ROL &47 \ INWK+1 \ *=4 .MLOOP \ -> &3789 \ MAIN Loop ending A2 FF LDX #&FF \ Clear Stack 9A TXS \ to Stack AE 47 03 LDX &0347 \ GNTMP \ gun temperature F0 03 BEQ EE20 \ cold laser CE 47 03 DEC &0347 \ GNTMP .EE20 \ cold laser 20 E5 1D JSR &1DE5 \ DIAL \ update flight console A5 87 LDA &87 \ QQ11 \ menu i.d. F0 05 BEQ P%+7 \ if space view skip small delay A0 02 LDY #2 \ small length of delay counter 20 9C 25 JSR &259C \ DELAY 20 EF 35 JSR &35EF \ TT17 \ returns with X,Y from arrow keys or joystick used .FRCE \ -> &37A3 \ Forced Key entry into main loop 20 AD 37 JSR &37AD \ TT102 \ Switchyard for Red keys A5 8E LDA &8E \ QQ12 \ Docked flag D0 DF BNE MLOOP \ back up to main loop 4C 4A 37 JMP &374A \ TT100 \ Check flight messages before main loop .TT102 \ -> &37AD \ Switchyard for Red keys C9 76 CMP #&76 \ red key #f8 D0 03 BNE P%+5 \ commander 4C FF 1A JMP &1AFF \ STATUS C9 14 CMP #&14 \ red key #f4 D0 03 BNE P%+5 \ Long range galactic chart 4C 12 28 JMP &2812 \ TT22 C9 74 CMP #&74 \ red key #f5 D0 03 BNE P%+5 \ Short range chart 4C 7C 2B JMP &2B7C \ TT23 C9 75 CMP #&75 \ red key #f6 D0 06 BNE TT92 \ switchyard continue 20 33 2C JSR &2C33 \ TT111 \ closest to QQ9,10 then 4C 96 26 JMP &2696 \ TT25 \ DATA on system .TT92 \ switchyard continue C9 77 CMP #&77 \ red key #f9 D0 03 BNE P%+5 \ Inventory 4C B8 2A JMP &2AB8 \ TT213 C9 16 CMP #&16 \ red key #f7 D0 03 BNE P%+5 \ MktP Market place menu screen 4C 23 2E JMP &2E23 \ TT167 C9 20 CMP #&20 \ red key #f0 D0 03 BNE fvw \ forward view not 4C 92 2E JMP &2E92 \ Flight .fvw \ forward view not C9 73 CMP #&73 \ red key #f3 D0 03 BNE P%+5 \ equip ship 4C 08 2F JMP &2F08 \ EQSHP C9 71 CMP #&71 \ red key #f1 D0 03 BNE P%+5 \ Buy cargo 4C 04 29 JMP &2904 \ TT219 C9 47 CMP #&47 \ key '@' D0 0B BNE nosave \ Disc service 20 86 3A JSR &3A86 \ SVE 90 03 BCC P%+5 \ failed back to Docking Bay 4C 9D 38 JMP &389D \ QU5 \ Disc service success, onwards. 4C B0 38 JMP &38B0 \ BAY .nosave C9 72 CMP #&72 \ red key #f2 D0 03 BNE P%+5 \ Sell cargo 4C 19 2A JMP &2A19 \ TT208 C9 54 CMP #&54 \ key 'H' D0 0C BNE NWDAV5 \ not H else can't hyperspace whilst docked 20 A3 25 JSR &25A3 \ CLYNS \ clear screen lines A9 0F LDA #15 \ indent 85 2C STA &2C \ XC A9 CD LDA #&CD \ token = 'DOCKED' 4C CE 12 JMP &12CE \ DETOK \ use TKN1 docked token .NWDAV5 \ not H C9 32 CMP #&32 \ key 'D' F0 2C BEQ T95 \ Distance to system C9 43 CMP #&43 \ key 'F' D0 09 BNE HME1 \ not F, else find planet (docked) A5 87 LDA &87 \ QQ11 \ menu i.d. 29 C0 AND #&C0 \ short or long range chart? F0 21 BEQ t95 \ no, rts 4C 41 1F JMP &1F41 \ HME2 \ else find planet .HME1 \ not F 85 06 STA &06 \ T1 \ protect Acc key A5 87 LDA &87 \ QQ11 29 C0 AND #&C0 \ short or long range chart F0 16 BEQ t95 \ no, rts A5 2F LDA &2F \ QQ22+1 \ hyperspace outer countdown D0 12 BNE t95 \ if running, rts A5 06 LDA &06 \ T1 \ restore Acc key C9 36 CMP #&36 \ key 'O' D0 09 BNE ee2 \ not O, else recenter cursor 20 23 2B JSR &2B23 \ TT103 \ erase small cross hairs at target hyperspace system 20 4E 36 JSR &364E \ ping \ move to home coordinates 20 23 2B JSR &2B23 \ TT103 \ draw small cross hairs at target hyperspace system .ee2 \ not O 20 F6 2A JSR &2AF6 \ TT16 \ Xreg and Yreg values used to shift cross-hairs on charts by .t95 60 RTS .T95 \ 'D' pressed, Distance to system A5 87 LDA &87 \ QQ11 29 C0 AND #&C0 \ short or long range chart? F0 F9 BEQ t95 \ no, rts 20 D8 30 JSR &30D8 \ hm \ move hyperspace cross-hairs to QQ9,10 target 85 72 STA &72 \ QQ17 \ All letters Uppercase 20 19 31 JSR &3119 \ cpl \ Planet name for seed QQ15 A9 80 LDA #&80 \ Only first letter Uppercase 85 72 STA &72 \ QQ17 A9 01 LDA #1 \ left 85 2C STA &2C \ XC E6 2D INC &2D \ YC \ next row 4C 5E 26 JMP &265E \ TT146 \ Distance in Light years .BAD \ Legal status from Cargo scan AD 72 03 LDA &0372 \ QQ20+3 \ cargo slaves 18 CLC 6D 75 03 ADC &0375 \ QQ20+6 \ narcotics 0A ASL A \ slaves and narcotics penalty doubled 6D 79 03 ADC &0379 \ QQ20+10 \ add firearms 60 RTS \ FIST = 64 is cop-killer. Same as 32 tons of Slave or Narcotics. .brkd \ -> &386C \ break flag 00 BRK \ byte =0 .BRBR \ -> &386D \ brk vector arrives CE 6C 38 DEC &386C \ brkd \ true for MOS break D0 13 BNE BR1 \ break1 Soft, dont reset stack, Reload Title. 20 97 36 JSR &3697 \ RES2 \ reset2 .BEGIN \ -> &3875 \ also Loader Code arrives here 20 A6 12 JSR &12A6 \ BRKBKA \ Set break vector to BRBR routine up A2 0A LDX #10 \ #(CATF-COMC) 10 bytes of toggle flags A9 00 LDA #0 \ clear toggles .BEL1 \ counter X 9D C5 03 STA &03C5,X \ COMC,X CA DEX \ next toggle 10 FA BPL BEL1 \ loop X .TT170 \ -> &3882 \ reset stack and Reload Title. After Death in flight arrives Here. A2 FF LDX #&FF \ Reset stack 9A TXS .BR1 \ -> &3885 \ break1 Soft, stack not reset, Reload Title. Frozen escape key arrives. A2 03 LDX #3 \ small indent and complete reset 86 2C STX &2C \ XC 20 84 3B JSR &3B84 \ FX200 \ MOS *FX200,Xreg A2 0B LDX #11 \ ship type #11 = #CYL cylon Cobra Mk3 A9 06 LDA #6 \ token = LOAD NEW COMMANDER (Y/N)?x02x 20 E1 38 JSR &38E1 \ TITLE \ Xreg is type of ship, Acc is last token it will show C9 44 CMP #&44 \ inkey 'Y' D0 06 BNE QU5 \ skip disc service 20 B9 38 JSR &38B9 \ DFAULT \ commander from page &11 to page &3 20 86 3A JSR &3A86 \ SVE \ service disk, if load chosen then Page &B to Page &11 .QU5 \ Also Disc service success, onwards. 20 B9 38 JSR &38B9 \ DFAULT \ commander from page &11 to page &3 20 ED 36 JSR &36ED \ msblob \ update missile blocks on console A9 07 LDA #7 \ token = PRESS SPACE OR FIRE,\13COMMANDER. A2 13 LDX #19 \ ship type #19 = Krait 20 E1 38 JSR &38E1 \ TITLE \ Xreg is type of ship, Acc is last token it will show 20 4E 36 JSR &364E \ ping \ move to present coordinates 20 6B 2E JSR &2E6B \ hyp1 \ arrive in system .BAY \ -> &38B0 \ In Docking Bay also after errors A9 FF LDA #&FF 85 8E STA &8E \ QQ12 \ Docked flag A9 76 LDA #&76 \ red key #f8 = Status 4C A3 37 JMP &37A3 \ FRCE \ Forced to enter main loop .DFAULT \ -> &38B9 \ commander from page &11 to page &3 A2 53 LDX #&53 \ #NT%+8 \ all bytes of commander file .QUL1 \ counter X BD 80 11 LDA &1180,X \ NA%-1,X \ from page &11 9D 4F 03 STA &034F,X \ NAME-1,X \ to page &3 CA DEX \ next commander byte D0 F7 BNE QUL1 \ loop X 86 87 STX &87 \ QQ11 \ menu id, 0 = space view .ckag \ check again 20 84 39 JSR &3984 \ CHECK \ Acc gets check byte CD D4 11 CMP &11D4 \ CHK \ commander file corruption check D0 F8 BNE ckag \ check again loop 49 A9 EOR #&A9 \ ok AA TAX \ other check EOR #&A9 AD 66 03 LDA &0366 \ COK \ Acc = competition EC D3 11 CPX &11D3 \ CHK2 \ Xreg has version eor #&A9 F0 02 BEQ tZ \ check2 matched 09 80 ORA #&80 \ else set bit7 of COK .tZ \ check2 matched 09 04 ORA #4 \ both choices set bit 2 of COK, not #2 of tape. 8D 66 03 STA &0366 \ COK \ competition byte affected by checks 60 RTS .TITLE \ -> &38E1 \ Xreg is type of ship, Acc is last token shown 48 PHA \ push token 86 8C STX &8C \ TYPE \ of ship to display 20 82 36 JSR &3682 \ RESET \ Total reset, New ship. A9 01 LDA #1 \ menu id QQ11 will be set to #1 20 37 25 JSR &2537 \ TT66 \ box border with QQ11 set to A C6 87 DEC &87 \ QQ11 \ menu id = #0 A9 60 LDA #&60 \ rotation unity 85 54 STA &54 \ INWK+14 A5 9F LDA &9F \ POINT \ compass target in Elite-A C9 DB CMP #&DB \ looking for DB check code? F0 0A BEQ tiwe \ matched, hop over stall A9 10 LDA #&10 \ OpCode BPL 8D B8 36 STA &36B8 \ replace STA DELTA A9 FE LDA #&FE \ branch -2 8D B9 36 STA &36B9 \ with BPL -2 to stall code .tiwe 85 4D STA &4D \ INWK+7 \ zhi set to #&DB A2 7F LDX #&7F \ no damping of rotation 86 63 STX &63 \ INWK+29 \ rotx counter 86 64 STX &64 \ INWK+30 \ rotz counter E8 INX \ Xreg = #&80 86 72 STX &72 \ QQ17 \ first token Uppercase A5 8C LDA &8C \ TYPE \ of ship 20 FB 32 JSR &32FB \ NWSHP \ new ship A0 06 LDY #6 \ indent 84 2C STY &2C \ XC A9 1E LDA #&1E \ token = ---- E L I T E ---- 20 A1 31 JSR &31A1 \ plf \ TT27 text token followed by rtn A0 06 LDY #6 \ indent 84 2C STY &2C \ XC E6 2D INC &2D \ YC AD C9 03 LDA &03C9 \ PATG \ toggle startup message display F0 05 BEQ awe \ skip credits A9 0D LDA #&0D \ token = BY D.BRABEN & I.BELL 20 CE 12 JSR &12CE \ DETOK \ use TKN1 docked token .awe \ skipped credits AD 6C 38 LDA &386C \ brkd \ break flag F0 15 BEQ BRBR2 \ not MOS break, down. EE 6C 38 INC &386C \ brkd A9 07 LDA #7 \ indent as MOS break 85 2C STA &2C \ XC A9 0A LDA #10 \ middle of screen 85 2D STA &2D \ YC A0 00 LDY #0 \ error message .awl \ counter Y 20 EE FF JSR &FFEE \ OSWRCH C8 INY \ next letter B1 FD LDA (&FD),Y \ error message D0 F8 BNE awl \ loop Y .BRBR2 \ not MOS break arrives 20 A3 25 JSR &25A3 \ CLYNS \ clear some screen lines 84 7D STY &7D \ DELTA \ Yreg = 0 8C CD 03 STY &03CD \ JSTK \ Joystick not active 68 PLA \ last token that was sent to TITLE 20 CE 12 JSR &12CE \ DETOK \ use TKN1 docked token A9 0C LDA #&0C \ token = (C) ACORNSOFT 1984 A2 07 LDX #7 \ indent 86 2C STX &2C \ XC 20 CE 12 JSR &12CE \ DETOK \ use TKN1 docked token .TLL2 \ Repeat key read A5 4D LDA &4D \ INWK+7 \ zhi C9 01 CMP #1 \ ship is now F0 02 BEQ TL1 \ close enough C6 4D DEC &4D \ INWK+7 .TL1 \ close enough 20 E1 14 JSR &14E1 \ MVEIT \ move it A9 80 LDA #&80 \ half hi 85 4C STA &4C \ INWK+6 \ zlo 0A ASL A \ Acc = 0 for center of screen 85 46 STA &46 \ INWK+0 \ xlo 85 49 STA &49 \ INWK+3 \ ylo 20 0F 40 JSR &400F \ LL9 \ object entry C6 8A DEC &8A \ MCNT \ move count AD 40 FE LDA &FE40 \ User VIA Output Register B 29 10 AND #&10 \ pull out PB4 = Joystick 1 fire button, F0 06 BEQ TL2 \ changes to zero when button pressed. 20 20 3C JSR &3C20 \ RDKEY \ If key hit was DELETE ( #00), else got #&7F F0 DB BEQ TLL2 \ Until key read 60 RTS .TL2 \ joystick fire button pressed CE CD 03 DEC &03CD \ JSTK \ joystick active .TL3 60 RTS .CHECK \ -> &3984 \ Acc gets check byte A2 49 LDX #&49 \ #NT%-2 18 CLC \ Elite-A uses sec 8A TXA \ used as start .QUL2 \ counter X 7D 88 11 ADC &1188,X \ NA%+7,X 5D 89 11 EOR &1189,X \ NA%+8,X CA DEX \ next commander file byte D0 F7 BNE QUL2 \ loop X 60 RTS .TRNME \ -> &3992 \ Transfer commander name to page &11 and &3 A2 07 LDX #7 \ 8 chars max .GTL1 \ counter X B5 4B LDA &4B,X \ INWK+5,X 9D 81 11 STA &1181,X \ NA%,X CA DEX \ next char 10 F8 BPL GTL1 \ loop X .TR1 \ reset name from NA% to INWK+5 but not flight's page &3 A2 07 LDX #7 \ 8 chars max .GTL2 \ counter X BD 81 11 LDA &1181,X \ NA%,X 95 4B STA &4B,X \ INWK+5,X CA DEX 10 F8 BPL GTL2 \ loop X 60 RTS .GTNMEW \ -> &39A7 \ Get name wait A0 08 LDY #8 \ moderate 20 9C 25 JSR &259C \ DELAY \ with Y = #8 .GTNME \ -> &39AC \ Get Commander Name A2 04 LDX #4 \ Set up drive .GTL3 \ counter X BD 7C 11 LDA &117C,X \ NA%-5,X 95 46 STA &46,X \ INWK,X CA DEX \ next drive/directory char 10 F8 BPL GTL3 \ loop X A9 07 LDA #7 \ maximum allowed string length 8D EB 39 STA &39EB \ RLINE+2 A9 08 LDA #8 \ token = \13COMMANDER'S' NAME? ' 20 CE 12 JSR &12CE \ DETOK \ use TKN1 docked token 20 CC 39 JSR &39CC \ MT26 \ receive string at INWK+5, update Y flag A9 09 LDA #9 \ restore full string length 8D EB 39 STA &39EB \ RLINE+2 98 TYA \ accepted string length F0 D1 BEQ TR1 \ if 0 reset name from NA% to INWK+5 60 RTS .MT26 \ -> &39CC \x1a Receive string, update Yreg A9 81 LDA #&81 8D 4E FE STA &FE4E \ VIA+&E 20 EC 18 JSR &18EC \ FLKB \ flush keyboard A2 E9 LDX #&E9 \ RLINE MOD 256 A0 39 LDY #&39 \ RLINE DIV 256 A9 00 LDA #0 \ RLINE at &39E9 for OSWORD = 0 20 F1 FF JSR &FFF1 \ OSWORD \ read input string 90 02 BCC P%+4 \ else carry set if escape hit A0 00 LDY #0 \ Y has string length including cr. A9 01 LDA #1 \ both continue 8D 4E FE STA &FE4E \ VIA+&E 4C 8A 1C JMP &1C8A \ FEED \ line feed into TT26 .RLINE \ -> &39E9 \ OSWORD block for gtnme 4B 00 EQUW INWK+5 \ +0 where to store string 09 EQUB 9 \ +2 is maximum length 21 EQUB &21 \ +3 min ascii 7B EQUB &7B \ +4 max ascii .ZERO \ -> &39EE \ Zero-out &311-&34B A2 3A LDX #&3A \ #(de-FRIN) \ de = &34B A9 00 LDA #0 \ zero-out .ZEL2 \ counter X 9D 11 03 STA &0311,X \ FRIN,X CA DEX \ the slot for each ship and onwards 10 FA BPL ZEL2 \ loop X 60 RTS .ZEBC \ -> &39F9 \ Zero Pages &B,&C A2 0C LDX #&0C \ Start at Page &0C 20 FF 39 JSR &39FF \ ZES1 CA DEX \ Next Xreg = Page &0B .ZES1 \ -> &39FF \ Zero Page X A0 00 LDY #0 \ pointer lo 84 07 STY &07 \ SC .ZES2 \ -> &3A03 \ zero Yto255 bytes on page SC.Xhi A9 00 LDA #0 86 08 STX &08 \ SC+1 \ pointer hi .ZEL1 \ counter Y 91 07 STA (&07),Y \ (SC),Y C8 INY \ next byte D0 FB BNE ZEL1 \ loop Y 60 RTS .CTLI \ -> &3A0D \ disc catalogue info 2E 30 0D EQUS ".0" : EQUB &0D \ missing colon in .:0 but o.k. .DELI \ -> &3A10 \ missing L. for delete drive 0 dir E commanders 44 45 2E 3A 30 2E 45 2E 31 32 33 34 35 36 37 0D : EQUS "DE.:0.E.1234567": EQUB &0D .CATS \ -> &3A20 \ Catalogues on disc drive 20 2F 3B JSR &3B2F \ GTDRV \ get drive number, carry set if not valid B0 1D BCS DELT-1 \ rts 8D 0E 3A STA &3A0E \ CTLI+1 \ else update drive number 8D 8E 1C STA &1C8E \ DTW7 \ MT16b so MT16 gives byte to TT26 A9 04 LDA #4 \ token = x09x0bx01x08'DRIVE 'MT16=printsDTW7 CATALOGUEx0cx0a 20 CE 12 JSR &12CE \ DETOK \ use TKN1 docked token A9 01 LDA #1 \ flag catalogue display 8D CF 03 STA &03CF \ CATF 85 2C STA &2C \ XC \ indent A2 0D LDX #&0D \ #(CTLI MOD256) \ CTLI = &3A0D A0 3A LDY #&3A \ #(CTLI DIV256) 20 F7 FF JSR &FFF7 \ OSCLI \ catalogue info CE CF 03 DEC &03CF \ CATF \ now 0 18 CLC 60 RTS \ DELT-1 .DELT \ Delete commander 20 20 3A JSR &3A20 \ CATS \ Catalogue, above B0 3E BCS SVE \ service disk AD 0E 3A LDA &3A0E \ CTLI+1 \ drive number 8D 14 3A STA &3A14 \ DELI+4 \ update drive number for delete info A9 09 LDA #9 \ token = x15FILE' TO 'DELETE? 20 CE 12 JSR &12CE \ DETOK \ use TKN1 docked token 20 CC 39 JSR &39CC \ MT26 \ receive string, update Yreg 98 TYA \ valid line length F0 2D BEQ SVE \ if 0 service disk A2 09 LDX #9 \ else delete commander .DELL1 \ counter X B5 4A LDA &4A,X \ INWK+4,X \ dir.name to delete 9D 15 3A STA &3A15,X \ DELI+5,X \ "E.1234567" CA DEX \ doesn't do X = 0 D0 F8 BNE DELL1 \ loop X A2 10 LDX #&10 \ #(DELI MOD 256) \ DELI = &3A10 A0 3A LDY #&3A \ #(DELI DIV 256) 20 F7 FF JSR &FFF7 \ OSCLI \ delete info 4C 86 3A JMP &3A86 \ SVE \ disc service .stack \ -> &3A6D \ store stack pointer here 00 BRK .MEBRK \ -> &3A6E \ message brk AE 6D 3A LDX &3A6D \ stack pointer stored 9A TXS \ set stack back A0 00 LDY #0 A9 07 LDA #7 \ start with vdu7 = beep .MEBRKL \ message brk loop, counter Y 20 EE FF JSR &FFEE \ OSWRCH \ OS print character C8 INY \ next char B1 FD LDA (&FD),Y \ error text D0 F8 BNE MEBRKL \ loop Y F0 03 BEQ retry \ guaranteed, disc service again .CAT \ Catalogue then ask for option again 20 20 3A JSR &3A20 \ CATS \ catalogues on disc drive, above .retry \ get disc service option 20 61 3D JSR &3D61 \ t \ wait for key hit .SVE \ Disc service entry as key @ hit 20 F9 39 JSR &39F9 \ ZEBC \ zero pages &B,&C BA TSX \ get stack pointer 8E 6D 3A STX &3A6D \ stack \ and save for MEBRK A9 6E LDA #&6E \ #(MEBRK MOD 256) \ MEBRK = &3A6E 8D EF 11 STA &11EF \ BRKV A9 3A LDA #&3A \ #(MEBRK DIV 256) \ hi 8D F0 11 STA &11F0 \ BRKV+1 A9 01 LDA #1 \ token = DISK ACCESS MENU and list 5 options 20 CE 12 JSR &12CE \ DETOK \ use TKN1 docked token 20 61 3D JSR &3D61 \ t \ wait for key hit C9 31 CMP #&31 \ 1. LOAD' NEW 'x13COMMANDER 90 71 BCC SVEX \ service exit C9 34 CMP #&34 \ 4. DELETE' A 'FILE x0c x0a F0 9C BEQ DELT \ Delete commander B0 6B BCS SVEX \ service exit C9 32 CMP #&32 \ 2. SAVE \13COMMANDER B0 0C BCS SV1 \ 2,3 save, catalogue 20 A7 39 JSR &39A7 \ GTNMEW \ Get name wait 20 48 3B JSR &3B48 \ LOD \ Load commander file, name from Page &B to Page &11 20 92 39 JSR &3992 \ TRNME \ Transfer commander name to Page &11 38 SEC B0 5C BCS SVEX+1 \ guaranteed, success, jmp BRKBKA .SV1 \ 2,3 save, catalogue D0 C5 BNE CAT \ 3. catalogue then ask for option again 20 A7 39 JSR &39A7 \ GTNMEW \ else save, Get name wait 20 92 39 JSR &3992 \ TRNME \ Transfer commander name 4E A1 03 LSR &03A1 \ COMP \ competition/=2 restored A9 03 LDA #3 \ token = COMPETITION NUMBER' 20 CE 12 JSR &12CE \ DETOK \ use TKN1 docked token A2 4B LDX #&4B \ #NT% = \ #&4B .SVL1 \ counter X BD 58 03 LDA &0358,X \ NAME+8,X \ TP,X from Page &3 to 9D 00 0B STA &0B00,X \ Page &0B 9D 89 11 STA &1189,X \ NA%+8,X \ Page &11 CA DEX 10 F4 BPL SVL1 \ loop X 20 84 39 JSR &3984 \ CHECK \ Acc gets check byte 8D D4 11 STA &11D4 \ CHK 48 PHA \ push check byte 09 80 ORA #&80 \ build competition info for bbc disk 85 40 STA &40 \ K 4D 66 03 EOR &0366 \ COK \ file check competition 85 42 STA &42 \ K+2 4D 63 03 EOR &0363 \ CASH+2 85 41 STA &41 \ K+1 49 5A EOR #&5A \ 'Z' 4D A0 03 EOR &03A0 \ TALLY+1 \ kills/256 85 43 STA &43 \ K+3 18 CLC \ no decimal point 20 D0 1B JSR &1BD0 \ BPRNT \ Buffer print ( 4 bytes of K) 20 83 26 JSR &2683 \ TT67 \ next Row 68 PLA \ pull check byte 8D 4B 0B STA &0B4B \ &B00+NT% 49 A9 EOR #&A9 \ check code2 8D D3 11 STA &11D3 \ CHK2 8D 4A 0B STA &0B4A \ &B00+NT%-1 A0 0B LDY #&0B 8C 0B 0C STY &0C0B \ &0B00 is start address of data to save C8 INY \ #&0C 8C 0F 0C STY &0C0F \ &0C00 is end address of data to save A9 00 LDA #0 \ Save using block &0C00 20 18 3B JSR &3B18 \ QUS1 \ File Ops, valid drive is carry clear. .SVEX \ service exit 18 CLC 4C A6 12 JMP &12A6 \ BRKBKA \ Set break vector to BRBR routine that reloads Title .QUS1 \ -> &3B18 \ File Ops, Acc=OSFILE in, valid drive is carry clear. 48 PHA \ store Acc=OSFILE in 20 2F 3B JSR &3B2F \ GTDRV \ get drive number, carry set if not valid 85 47 STA &47 \ INWK+1 68 PLA \ restore Acc OSFILE in B0 0D BCS QUR \ rts A2 46 LDX #&46 \ #INWK 8E 00 0C STX &0C00 \ pointer to filename string A2 00 LDX #0 \ lo A0 0C LDY #&0C \ &0C00 20 DD FF JSR &FFDD \ OSFILE \ block &0C00 18 CLC \ success File op. .QUR \ rts 60 RTS .GTDRV \ -> &3B2F \ Get drive number, carry set if not valid A9 02 LDA #2 \ token = WHICH DRIVE? 20 CE 12 JSR &12CE \ DETOK \ use TKN1 docked token 20 61 3D JSR &3D61 \ t \ wait for key hit 09 10 ORA #&10 \ boost to ascii 20 56 1D JSR &1D56 \ CHPR \ character print 48 PHA \ ascii drive 20 8A 1C JSR &1C8A \ FEED \ line feed into TT26 68 PLA \ ascii drive C9 30 CMP #&30 \ < drive 0 ? 90 25 BCC LOR \ invalid is sec, rts C9 34 CMP #&34 \ sec if >=4 60 RTS .LOD \ -> &3B48 \ Load commander file then Page &B to Page &11, else carry set if invalid drive 20 F9 39 JSR &39F9 \ ZEBC \ zero pages &B,&C A0 0B LDY #&0B 8C 03 0C STY &0C03 \ load address is &0B00 EE 0B 0C INC &0C0B \ length of file incremented A9 FF LDA #&FF \ Load file 20 18 3B JSR &3B18 \ QUS1 \ File Ops B0 10 BCS LOR \ if failed, sec rts AD 00 0B LDA &0B00 \ look at data, first byte is TP mission bits 30 0D BMI ELT2F \ bit7 set is Not ELITE II file A2 4B LDX #&4B \ #NT% .LOL1 \ counter X \ copy &B00 onwards to NA%+8 onwards BD 00 0B LDA &0B00,X \ page &B 9D 89 11 STA &1189,X \ NA%+8,X CA DEX 10 F7 BPL LOL1 \ loop X .LOR 38 SEC 60 RTS .ELT2F \ -> &3B6C \ brk goes to message fail 00 49 BRK: EQUB &49 \ = 'I' 49 6C 6C 65 67 61 6C 20 45 4C 49 54 45 20 49 49 20 66 69 6C 65 00 EQUS("Illegal ELITE II file") : BRK .FX200 \ -> &3B84 \ MOS *FX200,Xreg (or something else like 2),0 A0 00 LDY #0 \ Break/Escape action is xor Xreg. A9 C8 LDA #200 \ 3=>0 = Normal. 2=>1 MOS ESCAPE disabled 4C F4 FF JMP &FFF4 \ OSBYTE \ ? -> 3B8B \ get name 20 AC 39 JSR &39AC \ GTNME \ Get Commander Name 60 RTS .SPS1 \ -> &3B8F \ XX15 vector to target X slot (planet for compass) A2 00 LDX #0 \ Xcoord hi 20 DA 32 JSR &32DA \ SPL1 \ move K%+1to2,X to K3+0to3,X A2 03 LDX #3 \ Ycoord hi 20 DA 32 JSR &32DA \ SPL1 \ move K%+1to2,X to K3+0to3,X A2 06 LDX #6 \ Zcoord hi 20 DA 32 JSR &32DA \ SPL1 \ move K%+1to2,X to K3+0to3,X A5 D2 LDA &D2 \ K3+0 \ xhi 05 D5 ORA &D5 \ K3+3 \ yhi 05 D8 ORA &D8 \ K3+6 \ zhi 09 01 ORA #1 \ min hi = 1 85 DB STA &DB \ K3+9 \ hi or'd max A5 D3 LDA &D3 \ K3+1 \ xfa 05 D6 ORA &D6 \ K3+4 \ yfa 05 D9 ORA &D9 \ K3+7 \ zfa Acc = far'ord .TAL2 \ roll Acc = xyz hi 06 DB ASL &DB \ K3+9 \ hi or'd max *2 2A ROL A \ far or'd max *2 B0 0E BCS TA2 \ exit when xyz *2 overflows 06 D2 ASL &D2 \ K3+0 26 D3 ROL &D3 \ K3+1 \ xfa*=2 06 D5 ASL &D5 \ K3+3 26 D6 ROL &D6 \ K3+4 \ yfa*=2 06 D8 ASL &D8 \ K3+6 26 D9 ROL &D9 \ K3+7 \ zfa*=2 90 ED BCC TAL2 \ loop roll Acc xyz hi .TA2 \ exited, Build XX15(0to2) from (raw) K3(1to8) A5 D3 LDA &D3 \ K3+1 \ xfa 4A LSR A \ clear bit7 sign 05 D4 ORA &D4 \ K3+2 \ xsg 85 34 STA &34 \ XX15+0 \ xunit, bit7 is xsign A5 D6 LDA &D6 \ K3+4 \ yhi 4A LSR A 05 D7 ORA &D7 \ K3+5 \ ysg 85 35 STA &35 \ XX15+1 \ yunit, bit7 is ysign A5 D9 LDA &D9 \ K3+7 \ zhi 4A LSR A 05 DA ORA &DA \ K3+8 \ zsg 85 36 STA &36 \ XX15+2 \ zunit, bit7 is zsign .NORM \ -> &3BD6 \ Normalize 3-vector length of XX15 A5 34 LDA &34 \ XX15+0 20 BE 21 JSR &21BE \ SQUA \ P.A =A7*A7 x^2 85 82 STA &82 \ R \ hi sum A5 1B LDA &1B \ P \ lo 85 81 STA &81 \ Q \ lo sum A5 35 LDA &35 \ XX15+1 20 BE 21 JSR &21BE \ SQUA \ P.A =A7*A7 y^2 85 D1 STA &D1 \ T \ temp hi A5 1B LDA &1B \ P \ lo 65 81 ADC &81 \ Q 85 81 STA &81 \ Q A5 D1 LDA &D1 \ T 65 82 ADC &82 \ R 85 82 STA &82 \ R A5 36 LDA &36 \ ZZ15+2 20 BE 21 JSR &21BE \ SQUA \ P.A =A7*A7 z^2 85 D1 STA &D1 \ T A5 1B LDA &1B \ P 65 81 ADC &81 \ Q 85 81 STA &81 \ Q \ xlo2 + ylo2 + zlo2 A5 D1 LDA &D1 \ T \ temp hi 65 82 ADC &82 \ R 85 82 STA &82 \ R 20 3E 3F JSR &3F3E \ LL5 \ Q = SQR(Qlo.Rhi) Q <~127 A5 34 LDA &34 \ XX15+0 20 8C 3E JSR &3E8C \ TIS2 \ *96/Q 85 34 STA &34 \ XX15+0 \ xunit A5 35 LDA &35 \ XX15+1 20 8C 3E JSR &3E8C \ TIS2 85 35 STA &35 \ XX15+1 \ yunit A5 36 LDA &36 \ XX15+2 20 8C 3E JSR &3E8C \ TIS2 85 36 STA &36 \ XX15+2 \ zunit .NO1 60 RTS \ end of norm .RDKEY \ -> &3C20 \ read Key from #16 upwards A2 10 LDX #16 \ Keyboard Scan will start from #16, Q,3,4 etc. .Rd1 \ counter X 20 93 3C JSR &3C93 \ DKS4 \ keyboard scan from X, returned in X and A. 30 04 BMI Rd2 \ -ve Acc key found, Drop to Rd2 E8 INX \ =0? 10 F8 BPL Rd1 \ loop X else 8A TXA \ #&FF if nothing found .Rd2 \ -ve Acc key 49 80 EOR #&80 \ #&7F is nothing found AA TAX \ Xreg is key for storing in KL 60 RTS .ECMOF \ -> &3C2F \ Sound of ECM system off A9 00 LDA #0 \ not active 85 30 STA &30 \ ECMA 8D 40 03 STA &0340 \ ECMP \ player's not on A9 48 LDA #72 \ becomes noise Yindex = 39 D0 32 BNE NOISE \ guaranteed hop .EXNO3 \ called when DEATH occurs. Ominous noises, two noises, A=16,24 A9 10 LDA #16 \ becomes Yindex = 11 20 6C 3C JSR &3C6C \ NOISE A9 18 LDA #24 \ becomes Yindex = 15 rumble D0 29 BNE NOISE \ guaranteed hop .BEEP \ -> &3C43 A9 20 LDA #&20 \ becomes Y = 19 D0 25 BNE NOISE \ guaranteed hop .EXNO2 \ faint death noise, player killed ship. EE 9F 03 INC &039F \ TALLY \ kills lo D0 08 BNE EXNO-2 \ no carry hop to ldx #7 EE A0 03 INC &03A0 \ TALLY+1 \ kills hi A9 65 LDA #&65 \ token = right on commander ! 20 82 3D JSR &3D82 \ MESS \ message A2 07 LDX #7 \ mask for sound distance .EXNO \ Explosion noise distance X 86 D1 STX &D1 \ T \ distance A9 18 LDA #24 \ Rumble later becomes Yindex = 15 20 7D 3C JSR &3C7D \ NOS1 \ build sound y index A5 4D LDA &4D \ INWK+7 \ zhi 4A LSR A \ /=2 4A LSR A \ #&3F max 25 D1 AND &D1 \ T \ could be #7 09 F1 ORA #&F1 \ adjust sound amplitude by distance away 85 0B STA &0B \ XX16+2 20 6F 3C JSR &3C6F \ NO3 \ Sound block ready A9 10 LDA #16 \ becomes Yindex = 11 .NOISE \ -> &3C6C \ Sound based on Acc 20 7D 3C JSR &3C7D \ NOS1 \ build sound y index .NO3 \ -> &3C6F \ Sound block ready AE C6 03 LDX &03C6 \ DNOIZ \ sound toggle D0 AB BNE NO1 \ rts A2 09 LDX #9 \ #(XX16 MOD 256) A0 00 LDY #0 \ #(XX16 DIV 256) on zero page A9 07 LDA #7 \ SOUND 4C F1 FF JMP &FFF1 \ OSWORD .NOS1 \ -> &3C7D \ build sound y index 4A LSR A \ /2 and carry cleared 69 03 ADC #3 \ +=3 top of block A8 TAY \ Yindex = last byte needed from group of A2 07 LDX #7 \ 4 words .NOL1 \ counters X,Y A9 00 LDA #0 \ upper byte 95 09 STA &09,X \ XX16,X CA DEX \ Sound parameter block B9 5A 36 LDA &365A,Y \ SFX,Y \ lower byte 95 09 STA &09,X \ XX16,X 88 DEY \ next lo CA DEX \ next byte 10 F2 BPL NOL1 \ loop Y,X, then fall into below .CTRL \ -> &3C91 \ Scan all keys from Ctrl upwards A2 01 LDX #1 \ scan starts from ctrl key .DKS4 \ -> &3C93 \ Keyboard scan from X upwards, returned in X and A. A9 03 LDA #3 78 SEI \ set interrupt 8D 40 FE STA &FE40 \ keyboard write enable A9 7F LDA #&7F 8D 43 FE STA &FE43 \ set write to 7 lines of DDRA 8E 4F FE STX &FE4F \ send #1 (CTRL (scan from 1)) or #16 (Q,3,4 (scan from 16))) or >&80 to ORA AE 4F FE LDX &FE4F \ read whole IRA, A searched key found gives -ve. Otherwise get the key hit. Or #&FF for nothing. A9 0B LDA #&0B \ Send 1 to bit3 as latch bit 8D 40 FE STA &FE40 \ to ORB so keyboard write disable. 58 CLI \ clear interrupt 8A TXA \ Acc = -ve if key hit 60 RTS .DKS2 \ -> &3CAC \ Joystick *FX 128 channel X A9 80 LDA #&80 \ return 16bit ADC value X-low Y-high (all filled ADC 10 bit) 20 F4 FF JSR &FFF4 \ OSBYTE #&80 98 TYA \ if 1-4 ADVAL channels will return 16bit ADC value X-low Y-high (all filled ADC 10 bit) 4D CC 03 EOR &03CC \ JSTE \ move Y to A then EOR A with JSTE if flip toggle needed 60 RTS .DKS3 \ -> &3CB6 \ Toggle Damping key Y whilst game frozen 84 D1 STY &D1 \ T \ store Y to compare to key hit X E4 D1 CPX &D1 \ T \ test against CAPS-LOCK, A, X, F, Y, J, K. D0 10 BNE Dk3 \ rts BD 87 03 LDA &0387,X \ DAMP-&40,X 49 FF EOR #&FF \ flip toggle 9D 87 03 STA &0387,X \ DAMP-&40,X 20 54 1D JSR &1D54 \ BELL \ vdu 7 20 9C 25 JSR &259C \ DELAY \ with large Y = #40 to #48 A4 D1 LDY &D1 \ T \ restore key .Dk3 60 RTS \ #&46 Does K toggle keyboard/joystick control - certainly makes keyboard not work anymore. \ #&45 Does J reverse both joystick channels \ #&44 Does Y reverse joystick Y channel \ #&43 Does F toggle flashing information \ #&42 Does X toggle startup message display ? PATG? \ #&41 Does A toggle keyboard auto-recentering ? \ #&40 Caps-lock toggles keyboard flight damping .BS1 \ Bitstick. Below not used, repeated in DOKEY AD 40 FE LDA &FE40 \ ORB. PB4,5 Joystick 1,2 fire buttons, to zero when button pressed. AA TAX \ not used? 29 10 AND #&10 \ bit4 49 10 EOR #&10 \ flipped 8D 07 03 STA &0307 \ KL+7 \ keyboard logger A2 01 LDX #1 \ Joystick *FX #&80 channel 1 20 AC 3C JSR &3CAC \ DKS2 09 01 ORA #1 \ hi is at least 1 8D 4C 03 STA &034C \ JSTX \ joystick X A2 02 LDX #2 \ Joystick *FX #&80 channel 2 20 AC 3C JSR &3CAC \ DKS2 4D CB 03 EOR &03CB \ JSTGY \ Y reverse joystick Y channel 8D 4D 03 STA &034D \ JSTY \ joystick Y 4C 0A 3D JMP &3D0A \ DK4 \ done pitch & roll, keys need to be scanned. .DOKEY \ -> &3CF0 \ return with X,Y from arrow keys or joystick used. KL has force key. AD CD 03 LDA &03CD \ JSTK \ K toggle keyboard/joystick F0 65 BEQ DK9 \ set bstk to 0 then dk4 scan keys A2 01 LDX #1 20 AC 3C JSR &3CAC \ DKS2 \ *FX #&80,1 ADC channel 1 09 01 ORA #1 8D 4C 03 STA &034C \ JSTX \ joystick X A2 02 LDX #2 20 AC 3C JSR &3CAC \ DKS2 \ *FX #&80,1 ADC channel 2 4D CB 03 EOR &03CB \ JSTGY \ Y reverse joystick Y channel 8D 4D 03 STA &034D \ JSTY \ joystick Y .DK4 \ -> &3D0A \ also Other keys need to be scanned 20 20 3C JSR &3C20 \ RDKEY \ read key from #16 upwards 8E 00 03 STX &0300 \ KL \ store X in keyboard logger E0 69 CPX #&69 \ key 'COPY', the freeze game key D0 3D BNE DK2 \ if no freeze requested Skip over .FREEZE \ start loop while game frozen, key X not 'DELETE' 20 0B 26 JSR &260B \ WSCAN \ wait for line scan 20 20 3C JSR &3C20 \ RDKEY \ read key from #16 upwards E0 51 CPX #&51 \ key 'S' D0 05 BNE DK6 \ not S A9 00 LDA #0 \ if non-zero will end noise 8D C6 03 STA &03C6 \ DNOIZ \ toggle .DK6 \ not S A0 40 LDY #&40 \ key CAPS-LOCK .DKL4 \ counter Y toggle 20 B6 3C JSR &3CB6 \ DKS3 \ Toggle Damping key Y whilst game frozen C8 INY \ Counter Y increments through inkeys of A, X, F, Y, J, K C0 47 CPY #&47 \ until in-key value '@' D0 F8 BNE DKL4 \ loop Y, fall through afterwards .DK55 E0 10 CPX #&10 \ key 'Q' quiet D0 03 BNE DK7 \ not Q 8E C6 03 STX &03C6 \ DNOIZ \ if non-zero will end noise .DK7 \ not Q E0 70 CPX #&70 \ key 'ESCAPE' D0 03 BNE P%+5 \ Hop over break1 4C 85 38 JMP &3885 \ BR1 \ break1 Soft, stack not reset, Reload Title E0 64 CPX #&64 \ key 'B' D0 0E BNE nobit \ not bit stick AD CE 03 LDA &03CE \ BSTK 49 FF EOR #&FF \ flip 8D CE 03 STA &03CE \ BSTK 8D CD 03 STA &03CD \ JSTK \ K toggle keyboard/joystick 8D CC 03 STA &03CC \ JSTE \ Joystick eor .nobit \ not bitstick E0 59 CPX #&59 \ 'DELETE' was hit to un-freeze D0 C3 BNE FREEZE \ loop key X .DK2 \ else freeze Skipped over A5 87 LDA &87 \ QQ11 \ menu i.d D0 21 BNE out \ not space view rts A0 10 LDY #16 \ Space view. Y = Top of logged keys A9 FF LDA #&FF \ flag for keyboard logger 60 RTS .DK9 \ -> &3D5A \ K toggle keyboard/joystick was 0, set bstk to 0 then dk4 scan keys 8D CE 03 STA &03CE \ BSTK \ set to 0 from DOKEY F0 AB BEQ DK4 \ guaranteed, Other keys need to be scanned, up. .TT217 \ -> &3D5F \ get ascii from keyboard, store in X and A 84 85 STY &85 \ YSAV \ store .t \ wait for key hit A0 02 LDY #2 \ short 20 9C 25 JSR &259C \ DELAY \ with Y = #2 20 20 3C JSR &3C20 \ RDKEY \ read key from #16 upwards D0 F6 BNE t \ loop, roll on .t2 \ wait for second key hit 20 20 3C JSR &3C20 \ RDKEY \ read key from #16 upwards F0 FB BEQ t2 \ loop A8 TAY \ Yreg is internal inkey hit B1 04 LDA (&04),Y \ Acc = ascii keyboard (TRTB%),Y A4 85 LDY &85 \ YSAV \ restore AA TAX \ Xreg = Acc = ascii key hit .out \ rts 60 RTS .me1 \ onto new message 8E 4A 03 STX &034A \ DLY \ delay set to 0 48 PHA \ store new token AD A4 03 LDA &03A4 \ MCH \ old message to erase 20 99 3D JSR &3D99 \ mes9 \ message output now 68 PLA \ restore new token .MESS \ -> &3D82 \ Message start A2 00 LDX #0 \ all capital letters 86 72 STX &72 \ QQ17 A0 09 LDY #9 \ indent 84 2C STY &2C \ XC A0 16 LDY #22 \ near bottom row 84 2D STY &2D \ YC EC 4A 03 CPX &034A \ DLY \ is delay printing zero? D0 E4 BNE me1 \ up, onto new message 8C 4A 03 STY &034A \ DLY \ new delay set to 22 8D A4 03 STA &03A4 \ MCH \ copy of token to erase .mes9 \ -> &3D99 \ also message to erase 20 AC 31 JSR &31AC \ TT27 \ process flight token 4E 4B 03 LSR &034B \ de \ message flag for item + destroyed F0 D5 BEQ out \ rts, else append A9 FD LDA #&FD \ token = ' DESTROYED' 4C AC 31 JMP &31AC \ TT27 .QQ23 \Prxs -> &3DA6 \ Market prices info \ base_price, gradient sign+5bits, base_quantity, mask, units 2bits 13 82 06 01 EQUD &01068213 \ Food 14 81 0A 03 EQUD &030A8114 \ Textiles 41 83 02 07 EQUD &07028341 \ Radioactives 28 85 E2 1F EQUD &1FE28528 \ Slaves 53 85 FB 0F EQUD &0FFB8553 \ Liquor/Wines C4 08 36 03 EQUD &033608C4 \ Luxuries EB 1D 08 78 EQUD &78081DEB \ Narcotics 9A 0E 38 03 EQUD &03380E9A \ Computers 75 06 28 07 EQUD &07280675 \ Machinery 4E 01 11 1F EQUD &1F11014E \ Alloys 7C 0D 1D 07 EQUD &071D0D7C \ Firearms B0 89 DC 3F EQUD &3FDC89B0 \ Furs 20 81 35 03 EQUD &03358120 \ Minerals 61 A1 42 07 EQUD &0742A161 \ Gold AB A2 37 1F EQUD &1F37A2AB \ Platinum 2D C1 FA 0F EQUD &0FFAC12D \ Gem-Stones 35 0F C0 07 EQUD &07C00F35 \ Alien Items .TI2 \ Tidy2 \ yunit small, used to renormalize rotation matrix Xreg = index1 = 0 98 TYA \ Acc index3 = 4 A0 02 LDY #2 \ Yreg index2 = 2 20 B9 3E JSR &3EB9 \ TIS3 \ below, denom is z 85 5A STA &5A \ INWK+20 \ Uz=-(FxUx+FyUy)/Fz Their comment \ rotmat1z hi 4C 32 3E JMP &3E32 \ TI3 \ Tidy3 .TI1 \ Tidy1 \ xunit small, with Y = 4 AA TAX \ Xreg = index1 = 0 A5 35 LDA &35 \ XX15+1 29 60 AND #&60 \ is yunit vector small F0 EE BEQ TI2 \ up, Tidy2 Y = 4 A9 02 LDA #2 \ else index2 = 4, index3 = 2 20 B9 3E JSR &3EB9 \ TIS3 \ below, denom is y 85 58 STA &58 \ INWK+18 \ Uy = -(FxUx+FzUz)/Fy \ rotmat1 hi 4C 32 3E JMP &3E32 \ TI3 \ Tidy3 \ returns INWK(16,18,20) = INWK(12*18+14*20, 10*16+14*20, 10*16+12*18) / INWK(10,12,14) \ Ux,Uy,Uz = -(FyUy+FzUz, FxUx+FzUz, FxUx+FyUy)/ Fx,Fy,Fz .TIDY \ -> &3E06 \ Orthogonalize rotation matrix that uses 0x60 as unity A5 50 LDA &50 \ INWK+10 \ rotmat0x hi 85 34 STA &34 \ XX15+0 \ XX15(0,1,2) = Fx,Fy,Fz A5 52 LDA &52 \ INWK+12 \ rotmat0y hi 85 35 STA &35 \ XX15+1 A5 54 LDA &54 \ INWK+14 \ rotmat0z hi 85 36 STA &36 \ XX15+2 20 D6 3B JSR &3BD6 \ NORM \ normalize F= Rotmat0 A5 34 LDA &34 \ XX15+0 85 50 STA &50 \ INWK+10 \ rotmat0x hi A5 35 LDA &35 \ XX15+1 85 52 STA &52 \ INWK+12 \ rotmat0y hi A5 36 LDA &36 \ XX15+2 85 54 STA &54 \ INWK+14 \ rotmat0z hi A0 04 LDY #4 \ Y=#4 A5 34 LDA &34 \ XX15+0 29 60 AND #&60 \ is xunit small? F0 CC BEQ TI1 \ up to Tidy1 with Y=#4 A2 02 LDX #2 \ index1 = 2 A9 00 LDA #0 \ index3 = 0 20 B9 3E JSR &3EB9 \ TIS3 \ below with Yreg = index2 = 4, denom = x 85 56 STA &56 \ INWK+16 \ rotmat1x hi .TI3 \ -> &3E32 \ Tidy3 \ All 3 choices continue with rotmat1? updated A5 56 LDA &56 \ INWK+16 \ rotmat1x hi 85 34 STA &34 \ XX15+0 A5 58 LDA &58 \ INWK+18 \ rotmat1y hi 85 35 STA &35 \ XX15+1 A5 5A LDA &5A \ INWK+20 \ rotmat1z hi 85 36 STA &36 \ XX15+2 \ XX15(0,1,2) = Ux,Uy,Uz 20 D6 3B JSR &3BD6 \ NORM \ normalize U Rotmat1 A5 34 LDA &34 \ XX15+0 85 56 STA &56 \ INWK+16 \ rotmat1x hi A5 35 LDA &35 \ XX15+1 85 58 STA &58 \ INWK+18 \ rotmat1y hi A5 36 LDA &36 \ XX15+2 85 5A STA &5A \ INWK+20 \ rotmat1z hi A5 52 LDA &52 \ INWK+12 \ rotmat0y hi 85 81 STA &81 \ Q \ = Fy A5 5A LDA &5A \ INWK+20 \ = Uz \ rotmat1z hi 20 87 22 JSR &2287 \ MULT12 \ R.S = P.A = Q * A = FyUz A6 54 LDX &54 \ INWK+14 \ = Fz \ rotmat0z hi A5 58 LDA &58 \ INWK+18 \ = Uy \ rotmat1y hi 20 EC 22 JSR &22EC \ TIS1 \ X.A = -X*A + (R.S)/96 49 80 EOR #&80 \ flip 85 5C STA &5C \ INWK+22 \ hsb(FzUy-FyUz)/96*255 \ rotmat2x hi A5 56 LDA &56 \ INWK+16 \ = Ux \ rotmat1x hi 20 87 22 JSR &2287 \ MULT12 \ R.S = Q * A = FyUz A6 50 LDX &50 \ INWK+10 \ = Fx \ rotmat0x hi A5 5A LDA &5A \ INWK+20 \ = Uz \ rotmat1z hi 20 EC 22 JSR &22EC \ TIS1 \ X.A = -X*A + (R.S)/96 49 80 EOR #&80 \ flip 85 5E STA &5E \ INWK+24 \ rotmat2y hi A5 58 LDA &58 \ INWK+18 \ = Uy \ rotmat1y hi 20 87 22 JSR &2287 \ MULT12 \ R.S = Q * A = FyUz A6 52 LDX &52 \ INWK+12 \ = Fy \ rotmat0y hi A5 56 LDA &56 \ INWK+16 \ = Ux \ rotmat1x hi 20 EC 22 JSR &22EC \ TIS1 \ X.A = -X*A + (R.S)/96 49 80 EOR #&80 \ flip 85 60 STA &60 \ INWK+26 \ rotmat2z hi A9 00 LDA #0 \ clear matrix lo's A2 0E LDX #14 \ except 2z's .TIL1 \ counter X 95 4F STA &4F,X \ INWK+9,X CA DEX \ +23 and down CA DEX \ skip hi's 10 FA BPL TIL1 \ loop X 60 RTS .TIS2 \ -> &3E8C \ Reduce Acc in NORM routine i.e. *96/Q A8 TAY \ copy of Acc 29 7F AND #&7F \ ignore sign C5 81 CMP &81 \ Q B0 20 BCS TI4 \ clean to +/- unity A2 FE LDX #&FE \ division roll 86 D1 STX &D1 \ T .TIL2 \ roll T 0A ASL A C5 81 CMP &81 \ Q 90 02 BCC P%+4 \ skip sbc E5 81 SBC &81 \ Q 26 D1 ROL &D1 \ T B0 F5 BCS TIL2 \ loop T A5 D1 LDA &D1 \ T 4A LSR A 4A LSR A \ result/4 85 D1 STA &D1 \ T 4A LSR A \ result/8 65 D1 ADC &D1 \ T 85 D1 STA &D1 \ T = 3/8*Acc (max = 96) 98 TYA \ copy of Acc 29 80 AND #&80 \ sign 05 D1 ORA &D1 \ T 60 RTS .TI4 \ clean to +/- unity 98 TYA \ copy of Acc 29 80 AND #&80 \ sign 09 60 ORA #&60 \ +/- unity 60 RTS .TIS3 \ -> &3EB9 \ visited by TI1,TI2 \ A = INWK(12*18+14*20, 10*16+14*20, 10*16+12*18) / INWK(10,12,14) \ Ux,Uy,Uz = -(FyUy+FzUz, FxUx+FzUz, FxUx+FyUy)/ Fx,Fy,Fz \ Xreg = index1, Yreg = index2, Acc = index3 85 1D STA &1D \ P+2 \ store index3 B5 50 LDA &50,X \ INWK+10,X \ rotmat0x,X hi 85 81 STA &81 \ Q B5 56 LDA &56,X \ INWK+16,X \ rotmat1x,X hi 20 87 22 JSR &2287 \ MULT12 \ R.S = Q * rotmat1x B6 50 LDX &50,Y \ INWK+10,Y \ rotmat0x,Y hi 86 81 STX &81 \ Q B9 56 00 LDA &0056,Y \ INWK+16,Y \ rotmat1x,Y hi 20 AD 22 JSR &22AD \ MAD \ X.A = rotmat0x*rotmat1y + R.S 86 1B STX &1B \ P \ num lo A4 1D LDY &1D \ P+2 \ index3 B6 50 LDX &50,Y \ INWK+10,Y \ rotmat0x,A hi 86 81 STX &81 \ Q \ is denominator 49 80 EOR #&80 \ num -hi .DVIDT \ A=AP/Q \ their comment. A = (P,A)/Q 85 1C STA &1C \ P+1 \ num hi 45 81 EOR &81 \ Q 29 80 AND #&80 \ sign bit 85 D1 STA &D1 \ T A9 00 LDA #0 A2 10 LDX #16 \ counter 2 bytes 06 1B ASL &1B \ P \ num lo 26 1C ROL &1C \ P+1 \ num hi 06 81 ASL &81 \ Q \ denom 46 81 LSR &81 \ Q \ lose sign bit, clear carry .DVL2 \ counter X 2A ROL A C5 81 CMP &81 \ Q 90 02 BCC P%+4 \ skip sbc E5 81 SBC &81 \ Q 26 1B ROL &1B \ P \ result 26 1C ROL &1C \ P+1 CA DEX D0 F2 BNE DVL2 \ loop X A5 1B LDA &1B \ P 05 D1 ORA &D1 \ T \ sign bit 60 RTS \ -- end of TIDY \ ---==== end of block F ===== onto block G =====--- &3EFF .SHPPT \ -> &3EFF \ ship plot as point from LL10 20 59 40 JSR &4059 \ EE51 \ if bit3 set draw to erase lines in XX19 heap A9 60 LDA #&60 \ #Y Ymiddle not K4 when docked C9 BE CMP #&BE \ #Y*2-2 96*2-2 screen height B0 1B BCS nono \ off top of screen A0 02 LDY #2 \ index for edge heap 20 2A 3F JSR &3F2A \ Shpt \ Ship is point, could end if nono-2 A0 06 LDY #6 \ index for edge heap A9 60 LDA #&60 \ #Y 69 01 ADC #1 \ 1 pixel uo 20 2A 3F JSR &3F2A \ Shpt \ Ship is point, could end if nono-2 A9 08 LDA #8 \ set bit3 (to erase later) and plot as Dot 05 65 ORA &65 \ INWK+31 \ display/exploding state|missiles 85 65 STA &65 \ INWK+31 A9 08 LDA #8 \ Dot uses #8 not U 4C EF 46 JMP &46EF \ LL81+2 \ skip first two edges on XX19 heap 68 PLA \ nono-2 \ Changing return address 68 PLA \ ending routine early .nono \ clear bit3 nothing to erase in next round, no draw. A9 F7 LDA #&F7 \ clear bit3 25 65 AND &65 \ INWK+31 \ display/exploding state|missiles 85 65 STA &65 \ INWK+31 60 RTS .Shpt \ ship is point at screen center 91 67 STA (&67),Y \ (XX19),Y \ Ymid to Edges heap C8 INY C8 INY \ next Y coord 91 67 STA (&67),Y \ (XX19),Y A9 80 LDA #&80 \ Xscreen-mid, not K3 when docked 88 DEY \ 2nd X coord 91 67 STA (&67),Y \ (XX19),Y 69 03 ADC #3 \ 1st X coord B0 E8 BCS nono-2 \ overflowed to right, remove 2 from stack and clear bit 3 88 DEY 88 DEY \ first entry in group of 4 added to ship line heap 91 67 STA (&67),Y \ (XX19),Y 60 RTS .LL5 \ -> &3F3E \ 2BSQRT Q=SQR(RQ) two-byte square root, R is hi, Q is lo. A4 82 LDY &82 \ R \ hi A5 81 LDA &81 \ Q 85 83 STA &83 \ S \ lo A2 00 LDX #0 \ result 86 81 STX &81 \ Q A9 08 LDA #8 \ counter 85 D1 STA &D1 \ T .LL6 \ counter T E4 81 CPX &81 \ Q 90 0E BCC LL7 \ no carry D0 04 BNE LL8 \ hop ne C0 40 CPY #&40 \ hi 90 08 BCC LL7 \ no carry .LL8 \ hop ne 98 TYA E9 40 SBC #&40 A8 TAY \ new hi 8A TXA E5 81 SBC &81 \ Q AA TAX \ maybe carry into .LL7 \ no carry 26 81 ROL &81 \ Q \ result 06 83 ASL &83 \ S \ maybe carry into Yreg 98 TYA 2A ROL A A8 TAY \ Yhi *2 8A TXA 2A ROL A AA TAX \ Xlo *2 06 83 ASL &83 \ S \ maybe carry into Yreg 98 TYA 2A ROL A A8 TAY \ Yhi *2 8A TXA 2A ROL A AA TAX \ Xlo *2 C6 D1 DEC &D1 \ T D0 D8 BNE LL6 \ loop T 60 RTS \ Q left with root .LL28 \ -> &3F75 \ BFRDIV R=A*256/Q byte from remainder of division C5 81 CMP &81 \ Q \ is A >= Q ? B0 1A BCS LL2 \ if yes, answer too big for 1 byte, R=#&FF A2 FE LDX #&FE \ else C is clear \ LL28+4 \ remainder R for AofQ *256/Q 86 82 STX &82 \ R \ div roll counter .LL31 \ roll R 0A ASL A B0 0B BCS LL29 \ hop to Reduce C5 81 CMP &81 \ Q 90 02 BCC P%+4 \ skip sbc E5 81 SBC &81 \ Q 26 82 ROL &82 \ R B0 F3 BCS LL31 \ loop R 60 RTS \ R left with remainder of division .LL29 \ Reduce E5 81 SBC &81 \ Q 38 SEC 26 82 ROL &82 \ R B0 EB BCS LL31 \ loop R 60 RTS \ R left with remainder of division .LL2 \ answer too big for 1 byte, R=#&FF A9 FF LDA #&FF 85 82 STA &82 \ R 60 RTS .LL38 \ -> &3F98 \ BADD(S)A=R+Q(SA) \ byte add (subtract) (Sign S)A = R + Q*(Sign from A^S) 45 83 EOR &83 \ S \ sign of operator is A xor S 30 06 BMI LL39 \ 1 byte subtraction A5 81 LDA &81 \ Q \ else addition, S already correct 18 CLC 65 82 ADC &82 \ R 60 RTS .LL39 \ 1 byte subtraction (S)A = R-Q A5 82 LDA &82 \ R 38 SEC E5 81 SBC &81 \ Q 90 02 BCC P%+4 \ sign of S needs correcting, hop over rts 18 CLC 60 RTS 48 PHA \ store subtraction result A5 83 LDA &83 \ S 49 80 EOR #&80 \ flip 85 83 STA &83 \ S 68 PLA \ restore subtraction result 49 FF EOR #&FF 69 01 ADC #1 \ negate 60 RTS .LL51 \ -> &3FB8 \ XX12=XX15.XX16 each vector is 16-bit x,y,z A2 00 LDX #0 A0 00 LDY #0 \XX16_hsb[ 1 3 5 highest XX16 done below is 5, then X taken up by 6, Y taken up by 2. \ 7 9 11 \ 13 15 17=0 ?] .ll51 \ counter X+=6 < 17 Y+=2 A5 34 LDA &34 \ XX15+0 \ xmag 85 81 STA &81 \ Q B5 09 LDA &09,X \ XX16,X 20 FA 21 JSR &21FA \ FMLTU \ Acc= XX15 *XX16 /256 assume unsigned 85 D1 STA &D1 \ T A5 35 LDA &35 \ XX15+1 55 0A EOR &0A,X \ XX16+1,X 85 83 STA &83 \ S \ xsign A5 36 LDA &36 \ XX15+2 \ ymag 85 81 STA &81 \ Q B5 0B LDA &0B,X \ XX16+2,X 20 FA 21 JSR &21FA \ FMLTU \ Acc= XX15 *XX16 /256 assume unsigned 85 81 STA &81 \ Q A5 D1 LDA &D1 \ T 85 82 STA &82 \ R \ move T to R A5 37 LDA &37 \ XX15+3 \ ysign 55 0C EOR &0C,X \ XX16+3,X 20 98 3F JSR &3F98 \ LL38 \ BADD(S)A=R+Q(SA) \ 1byte add (subtract) 85 D1 STA &D1 \ T A5 38 LDA &38 \ XX15+4 \ zmag 85 81 STA &81 \ Q B5 0D LDA &0D,X \ XX16+4,X 20 FA 21 JSR &21FA \ FMLTU \ Acc= XX15 *XX16 /256 assume unsigned 85 81 STA &81 \ Q A5 D1 LDA &D1 \ T 85 82 STA &82 \ R \ move T to R A5 39 LDA &39 \ XX15+5 \ zsign 55 0E EOR &0E,X \ XX16+5,X 20 98 3F JSR &3F98 \ LL38 \ BADD(S)A=R+Q(SA) \ 1byte add (subtract) 99 3A 00 STA &003A,Y \ XX12,Y A5 83 LDA &83 \ S \ result sign 99 3B 00 STA &003B,Y \ XX12+1,Y C8 INY C8 INY \ Y +=2 8A TXA 18 CLC 69 06 ADC #6 AA TAX \ X +=6 C9 11 CMP #17 \ X finished? 90 AE BCC ll51 \ loop for second half of matrix 60 RTS .LL9 \ -> &400F \ object ENTRY for displaying, including debris. A9 1F LDA #&1F \ max visibility 85 96 STA &96 \ XX4 A9 20 LDA #&20 \ mask for bit 5, exploding 24 65 BIT &65 \ INWK+31 \ display explosion state|missiles D0 2D BNE EE28 \ bit5 set, explosion ongoing 10 2B BPL EE28 \ bit7 clear, else Start blowing up! 05 65 ORA &65 \ INWK+31 29 3F AND #&3F \ clear bit7,6 85 65 STA &65 \ INWK+31 A9 00 LDA #0 \ acceleration & pitch zeroed. A0 1C LDY #28 \ byte #28 accel 91 20 STA (&20),Y \ (INF),Y A0 1E LDY #30 \ byte #30 rotz counter 91 20 STA (&20),Y \ (INF),Y 20 59 40 JSR &4059 \ EE51 \ if bit3 set erase old lines in XX19 heap A0 01 LDY #1 \ edge heap byte1 A9 12 LDA #18 \ counter for explosion radius 91 67 STA (&67),Y \ (XX19),Y A0 07 LDY #7 \ Hull byte#7 explosion of ship type e.g. &2A B1 1E LDA (&1E),Y \ (XX0),Y A0 02 LDY #2 \ edge heap byte2 91 67 STA (&67),Y \ (XX19),Y .EE55 \ counter Y, 4 rnd bytes to edge heap C8 INY \ #3 start 20 36 37 JSR &3736 \ DORND 91 67 STA (&67),Y \ (XX19),Y C0 06 CPY #6 \ bytes 3to6 = random bytes for seed D0 F6 BNE EE55 \ loop Y .EE28 \ bit5 set do explosion, or bit7 clear, dont kill. A5 4E LDA &4E \ INWK+8 \ sign of Z coord .EE49 \ In view? 10 1D BPL LL10 \ hop over as object in front .LL14 \ Test to remove object A5 65 LDA &65 \ INWK+31 \ display explosion state|missiles 29 20 AND #&20 \ bit5 do explosion? F0 09 BEQ EE51 \ if no then if bit3 set erase old lines in XX19 heap A5 65 LDA &65 \ INWK+31 \ else exploding 29 F7 AND #&F7 \ clear bit3 85 65 STA &65 \ INWK+31 4C 82 32 JMP &3282 \ WPSHPS-1 \ rts when docked .EE51 \ -> &4059 \ if bit3 set draw lines in XX19 heap A9 08 LDA #8 \ mask for bit 3 24 65 BIT &65 \ INWK+31 \ exploding/display state|missiles F0 07 BEQ LL10-1 \ if bit3 clear, just rts 45 65 EOR &65 \ INWK+31 \ else toggle bit3 to allow lines 85 65 STA &65 \ INWK+31 4C F3 46 JMP &46F3 \ LL155 \ clear LINEstr. Draw lines in XX19 heap. 60 RTS \ needed by beq \ LL10-1 .LL10 \ object in front of you A5 4D LDA &4D \ INWK+7 \ zhi C9 C0 CMP #&C0 \ far in front B0 DD BCS LL14 \ test to remove object A5 46 LDA &46 \ INWK+0 \ xlo C5 4C CMP &4C \ INWK+6 \ zlo A5 47 LDA &47 \ INWK+1 \ xhi E5 4D SBC &4D \ INWK+7 \ zhi, gives angle to object B0 D3 BCS LL14 \ test to remove object A5 49 LDA &49 \ INWK+3 \ ylo C5 4C CMP &4C \ INWK+6 \ zlo A5 4A LDA &4A \ INWK+4 \ yhi E5 4D SBC &4D \ INWK+7 \ zhi B0 C9 BCS LL14 \ test to remove object A0 06 LDY #6 \ Hull byte6, node gun*4 B1 1E LDA (&1E),Y \ (XX0),Y AA TAX \ node heap index A9 FF LDA #&FF \ flag on node heap at gun 9D 00 01 STA &0100,X \ XX3+0,X 9D 01 01 STA &0101,X \ XX3+1,X A5 4C LDA &4C \ INWK+6 \ zlo 85 D1 STA &D1 \ T A5 4D LDA &4D \ INWK+7 \ zhi 4A LSR A 66 D1 ROR &D1 \ T 4A LSR A 66 D1 ROR &D1 \ T 4A LSR A 66 D1 ROR &D1 \ T 4A LSR A D0 0A BNE LL13 \ hop as far A5 D1 LDA &D1 \ T 6A ROR A \ bring in hi bit0 4A LSR A 4A LSR A \ small zlo 4A LSR A \ updated visibility 85 96 STA &96 \ XX4 10 11 BPL LL17 \ guaranteed hop to Draw wireframe .LL13 \ hopped to as far A0 0D LDY #&0D \ Hull byte#13, distance point at which ship becomes a dot B1 1E LDA (&1E),Y \ (XX0),Y C5 4D CMP &4D \ INWK+7 \ dot_distance >= z_hi will leave carry set B0 09 BCS LL17 \ hop over to draw Wireframe A9 20 LDA #&20 \ mask bit5 exploding 25 65 AND &65 \ INWK+31 \ exploding/display state|missiles D0 03 BNE LL17 \ hop over to Draw wireframe or exploding 4C FF 3E JMP &3EFF \ SHPPT \ else ship plot point, up. .LL17 \ draw Wireframe (including nodes exploding) A2 05 LDX #5 \ load rotmat into XX16 .LL15 \ counter X B5 5B LDA &5B,X \ INWK+21,X 95 09 STA &09,X \ XX16,X B5 55 LDA &55,X \ INWK+15,X 95 0F STA &0F,X \ XX16+6,X B5 4F LDA &4F,X \ INWK+9,X 95 15 STA &15,X \ XX16+12,X CA DEX 10 F1 BPL LL15 \ loop X A9 C5 LDA #197 \ comment here about NORM 85 81 STA &81 \ Q A0 10 LDY #16 .LL21 \ counter Y -=2 B9 09 00 LDA &0009,Y \ XX16+0,Y 0A ASL A \ get carry, only once. B9 0A 00 LDA &000A,Y \ XX16+1,Y 2A ROL A 20 75 3F JSR &3F75 \ LL28 \ BFRDIV R=A*256/197 A6 82 LDX &82 \ R 96 09 STX &09,Y \ XX16,Y 88 DEY 88 DEY \ Y -=2 10 ED BPL LL21 \ loop Y A2 08 LDX #8 \ load craft coords into XX18 .ll91 \ counter X B5 46 LDA &46,X \ INWK,X 95 72 STA &72,X \ XX18,X CA DEX 10 F9 BPL ll91 \ loop X A9 FF LDA #&FF \ last normal is always visible 85 E1 STA &E1 \ XX2+15 A0 0C LDY #12 \ Hull byte 12 = normals*4 A5 65 LDA &65 \ INWK+31 29 20 AND #&20 \ mask bit5 exploding F0 12 BEQ EE29 \ no, only Some visible B1 1E LDA (&1E),Y \ (XX0),Y 4A LSR A \ else do explosion needs all vertices 4A LSR A \ /=4 AA TAX \ Xreg = number of normals, faces A9 FF LDA #&FF \ all faces visible .EE30 \ counter X for each face 95 D2 STA &D2,X \ XX2,X CA DEX 10 FB BPL EE30 \ loop X E8 INX \ X = 0 86 96 STX &96 \ XX4 \ visiblility = 0 .LL41 \ visibilities now set in XX2,X Transpose matrix. 4C 7F 42 JMP &427F \ LL42 \ jump to transpose matrix .EE29 \ only Some visible Yreg =Hull byte12, normals*4 B1 1E LDA (&1E),Y \ (XX0),Y F0 F9 BEQ LL41 \ if no normals, visibilities now set in XX2,X Transpose matrix. 85 97 STA &97 \ XX20 \ normals*4 A0 12 LDY #18 \ Hull byte #18 normals scaled by 2^Q% \DtProd^XX2 their comment Dot product gives normals' visibility in XX2 B1 1E LDA (&1E),Y \ (XX0),Y AA TAX \ normals scaled by 2^X plus A5 79 LDA &79 \ XX18+7 \ z_hi .LL90 \ scaling object distance A8 TAY \ z_hi F0 0F BEQ LL91 \ object close/small, hop E8 INX \ LL90+3 \ repeat INWK z brought closer, take X up 46 76 LSR &76 \ XX18+4 \ yhi 66 75 ROR &75 \ XX18+3 \ ylo 46 73 LSR &73 \ XX18+1 \ xhi 66 72 ROR &72 \ XX18+0 \ xlo 4A LSR A \ z_hi/=2 66 78 ROR &78 \ XX18+6 \ z_lo A8 TAY \ z_hi D0 F1 BNE LL90+3 \ again as z_hi too big .LL91 \ object close/small 86 86 STX &86 \ XX17 \ keep Scale required A5 7A LDA &7A \ XX18+8 \ last member of INWK copied over 85 39 STA &39 \ XX15+5 \ zsign, 6 members A5 72 LDA &72 \ XX18 85 34 STA &34 \ XX15+0 \ xscaled A5 74 LDA &74 \ XX18+2 85 35 STA &35 \ XX15+1 \ xsign A5 75 LDA &75 \ XX18+3 85 36 STA &36 \ XX15+2 \ yscaled A5 77 LDA &77 \ XX18+5 85 37 STA &37 \ XX15+3 \ ysign A5 78 LDA &78 \ XX18+6 85 38 STA &38 \ XX15+4 \ zscaled 20 B8 3F JSR &3FB8 \ LL51 \ XX12=XX15.XX16 each vector is 16-bit x,y,z A5 3A LDA &3A \ XX12+0 85 72 STA &72 \ XX18+0 \ load result back A5 3B LDA &3B \ XX12+1 85 74 STA &74 \ XX18+2 \ xsg A5 3C LDA &3C \ XX12+2 85 75 STA &75 \ XX18+3 A5 3D LDA &3D \ XX12+3 85 77 STA &77 \ XX18+5 \ ysg A5 3E LDA &3E \ XX12+4 85 78 STA &78 \ XX18+6 A5 3F LDA &3F \ XX12+5 85 7A STA &7A \ XX18+8 \ zsg A0 04 LDY #4 \ Hull byte#4 = lsb of data offset to normals B1 1E LDA (&1E),Y \ (XX0),Y 18 CLC \ lo 65 1E ADC &1E \ XX0 85 22 STA &22 \ V \ will point to start of normals A0 11 LDY #17 \ Hull byte#17 = hsb of offset to normals B1 1E LDA (&1E),Y \ (XX0),Y 65 1F ADC &1F \ XX0+1 85 23 STA &23 \ V+1 \ hi of pointer to normals data A0 00 LDY #0 \ byte#0 of normal .LL86 \ -> &4173 \ counter Y/4 go through all normals B1 22 LDA (&22),Y \ (V),Y 85 3B STA &3B \ XX12+1 \ byte#0 29 1F AND #&1F \ lower 5 bits are face visibility C5 96 CMP &96 \ XX4 B0 0F BCS LL87 \ >= XX4 visibility, skip over jump LL88 98 TYA \ face*4 count 4A LSR A \ else visible 4A LSR A \ counter/4 AA TAX \ Xreg is normal count A9 FF LDA #&FF \ visible face 95 D2 STA &D2,X \ XX2,X 98 TYA \ next face*4 69 04 ADC #4 \ +=4 A8 TAY \ Yreg +=4 is next normal 4C 78 42 JMP &4278 \ LL88 \ to near end of normal's visibility loop .LL87 \ normal visibility>= XX4 A5 3B LDA &3B \ XX12+1 \ byte#0 of normal 0A ASL A \ get sign y 85 3D STA &3D \ XX12+3 0A ASL A \ get sign z 85 3F STA &3F \ XX12+5 C8 INY \ byte#1 of normal B1 22 LDA (&22),Y \ (V),Y 85 3A STA &3A \ XX12+0 \ xnormal lo C8 INY \ byte#2 of normal B1 22 LDA (&22),Y \ (V),Y 85 3C STA &3C \ XX12+2 \ ynormal lo C8 INY \ byte#3 of normal B1 22 LDA (&22),Y \ (V),Y 85 3E STA &3E \ XX12+4 \ znormal lo A6 86 LDX &86 \ XX17 \ kept Scale required E0 04 CPX #4 \ is XX17 < 4 ? 90 23 BCC LL92 \ scale required is Quite close .LL143 \Face offset< &422A \ START also arrive from LL143 Face offset< &4278 \ near end of normals visibility loop C4 97 CPY &97 \ XX20 \ number of normals*4 B0 03 BCS LL42 \ If Y >= XX20 all normals' visibilities set, onto Transpose. 4C 73 41 JMP &4173 \ LL86 \ loop normals visibility Y \ -- All normals' visibilities now set in XX2,X .LL42 \ -> &427F \ DO nodeX-Ycoords their comment \ TrnspMat A4 0B LDY &0B \ XX16+2 \ Transpose Matrix A6 0C LDX &0C \ XX16+3 A5 0F LDA &0F \ XX16+6 85 0B STA &0B \ XX16+2 A5 10 LDA &10 \ XX16+7 85 0C STA &0C \ XX16+3 84 0F STY &0F \ XX16+6 86 10 STX &10 \ XX16+7 A4 0D LDY &0D \ XX16+4 A6 0E LDX &0E \ XX16+5 A5 15 LDA &15 \ XX16+12 85 0D STA &0D \ XX16+4 A5 16 LDA &16 \ XX16+13 85 0E STA &0E \ XX16+5 84 15 STY &15 \ XX16+12 86 16 STX &16 \ XX16+13 A4 13 LDY &13 \ XX16+10 A6 14 LDX &14 \ XX16+11 A5 17 LDA &17 \ XX16+14 85 13 STA &13 \ XX16+10 A5 18 LDA &18 \ XX16+15 85 14 STA &14 \ XX16+11 84 17 STY &17 \ XX16+14 86 18 STX &18 \ XX16+15 \XX16 got INWK 9..21..26 up at LL15 . The ROTMAT has 18 bytes, for 3x3 matrix \XX16_lsb[ 0 2 4 highest XX16 done below is 5, then X taken up by 6, Y taken up by 2. \ 6 8 10 \ 12 14 16=0 ?] A0 08 LDY #8 \ Hull byte#8 = number of vertices *6 B1 1E LDA (&1E),Y \ (XX0),Y 85 97 STA &97 \ XX20 A5 1E LDA &1E \ XX0 \ pointer to ship type data 18 CLC \ build 69 14 ADC #20 \ vertex data fixed offset 85 22 STA &22 \ V \ pointer to start of hull vertices A5 1F LDA &1F \ XX0+1 69 00 ADC #0 \ any carry 85 23 STA &23 \ V+1 A0 00 LDY #0 \ index for XX3 heap 84 93 STY &93 \ CNT .LL48 \ -> &42C6 \ Start loop on Nodes for visibility, each node has 4 faces associated with it. 84 86 STY &86 \ XX17 \ vertex*6 counter B1 22 LDA (&22),Y \ (V),Y 85 34 STA &34 \ XX15 \ xlo C8 INY \ vertex byte#1 B1 22 LDA (&22),Y \ (V),Y 85 36 STA &36 \ XX15+2 C8 INY \ vertex byte#2 B1 22 LDA (&22),Y \ (V),Y 85 38 STA &38 \ XX15+4 C8 INY \ vertex byte#3 B1 22 LDA (&22),Y \ (V),Y 85 D1 STA &D1 \ T \ sign bits of vertex 29 1F AND #&1F \ visibility C5 96 CMP &96 \ XX4 90 2E BCC LL49-3 \ if yes jmp LL50, next vertex. C8 INY \ vertex byte#4, first 2 faces B1 22 LDA (&22),Y \ (V),Y 85 1B STA &1B \ P \ two 4-bit indices 0:15 into XX2 for 2 of the 4 normals 29 0F AND #&0F \ face 1 AA TAX \ face visibility index B5 D2 LDA &D2,X \ XX2,X D0 25 BNE LL49 \ vertex is visible A5 1B LDA &1B \ P \ restore 4A LSR A 4A LSR A 4A LSR A 4A LSR A \ hi nibble AA TAX \ face 2 B5 D2 LDA &D2,X \ XX2,X D0 1A BNE LL49 \ vertex is visible C8 INY \ vertex byte#5, other 2 faces B1 22 LDA (&22),Y \ (V),Y 85 1B STA &1B \ P \ two 4-bit indices 0:15 into XX2 29 0F AND #&0F \ face 3 AA TAX \ face visibility index B5 D2 LDA &D2,X \ XX2,X D0 0E BNE LL49 \ vertex is visible A5 1B LDA &1B \ P \ restore 4A LSR A 4A LSR A 4A LSR A 4A LSR A \ hi nibble AA TAX \ face 4 B5 D2 LDA &D2,X \ XX2,X D0 03 BNE LL49 \ vertex is visible 4C 87 44 JMP &4487 \ LL50 \ both arrive here \ LL49-3 \ next vertex. \ This jump can only happen if got 4 zeros from XX2 normals visibility. .LL49 \ Else vertex is visible, update info on XX3 node heap. A5 D1 LDA &D1 \ T \ 4th byte read for vertex, sign bits. 85 35 STA &35 \ XX15+1 0A ASL A \ y sgn 85 37 STA &37 \ XX15+3 0A ASL A \ z sgn 85 39 STA &39 \ XX15+5 20 B8 3F JSR &3FB8 \ LL51 \ XX12=XX15.XX16 Rotated. A5 48 LDA &48 \ INWK+2 \ x-sign 85 36 STA &36 \ XX15+2 45 3B EOR &3B \ XX12+1 \ rotated xnode hi 30 10 BMI LL52 \ hop as -ve x sign 18 CLC \ else x +ve A5 3A LDA &3A \ XX12 \ rotated xnode lo 65 46 ADC &46 \ INWK+0 \ xorg lo 85 34 STA &34 \ XX15+0 \ new xlo A5 47 LDA &47 \ INWK+1 69 00 ADC #0 \ hi x 85 35 STA &35 \ XX15+1 4C 5A 43 JMP &435A \ LL53 \ Onto y .LL52 \ -ve x sign A5 46 LDA &46 \ INWK+0 \ xorg lo 38 SEC E5 3A SBC &3A \ XX12 \ rotated xnode lo 85 34 STA &34 \ XX15+0 \ new xlo A5 47 LDA &47 \ INWK+1 E9 00 SBC #0 \ hi x 85 35 STA &35 \ XX15+1 B0 14 BCS LL53 \ usually ok Onto y 49 FF EOR #&FF \ else fix x negative 85 35 STA &35 \ XX15+1 A9 01 LDA #1 \ negate E5 34 SBC &34 \ XX15 85 34 STA &34 \ XX15 90 02 BCC P%+4 \ skip x hi E6 35 INC &35 \ XX15+1 A5 36 LDA &36 \ XX15+2 49 80 EOR #&80 \ flip xsg 85 36 STA &36 \ XX15+2 .LL53 \ -> &435A \ Both x signs arrive here, Onto y A5 4B LDA &4B \ INWK+5 \ y-sign 85 39 STA &39 \ XX15+5 45 3D EOR &3D \ XX12+3 \ rotated ynode hi 30 10 BMI LL54 \ hop as -ve y sign 18 CLC \ else y +ve A5 3C LDA &3C \ XX12+2 \ rotated ynode lo 65 49 ADC &49 \ INWK+3 \ yorg lo 85 37 STA &37 \ XX15+3 \ new ylo A5 4A LDA &4A \ INWK+4 69 00 ADC #0 \ hi y 85 38 STA &38 \ XX15+4 4C 97 43 JMP &4397 \ LL55 \ Onto z .LL54 \ -ve y sign A5 49 LDA &49 \ INWK+3 \ yorg lo 38 SEC E5 3C SBC &3C \ XX12+2 \ rotated ynode lo 85 37 STA &37 \ XX15+3 \ new ylo A5 4A LDA &4A \ INWK+4 E9 00 SBC #0 \ hi y 85 38 STA &38 \ XX15+4 B0 16 BCS LL55 \ usually ok Onto z 49 FF EOR #&FF \ else fix y negative 85 38 STA &38 \ XX15+4 A5 37 LDA &37 \ XX15+3 49 FF EOR #&FF \ negate y lo 69 01 ADC #1 85 37 STA &37 \ XX15+3 A5 39 LDA &39 \ XX15+5 49 80 EOR #&80 \ flip ysg 85 39 STA &39 \ XX15+5 90 02 BCC LL55 \ Onto z E6 38 INC &38 \ XX15+4 .LL55 \ -> &4397 \ Both y signs arrive here, Onto z A5 3F LDA &3F \ XX12+5 \ rotated znode hi 30 4A BMI LL56 \ -ve Z node A5 3E LDA &3E \ XX12+4 \ rotated znode lo 18 CLC 65 4C ADC &4C \ INWK+6 \ zorg lo 85 D1 STA &D1 \ T \ new zlo A5 4D LDA &4D \ INWK+7 69 00 ADC #0 \ hi 85 80 STA &80 \ U \ z new hi 4C 04 44 JMP &4404 \ LL57 \ Node additions done, z = U.T case \ Doing additions and scalings for each visible node around here .LL61 \ -> &43AB \ Handling division R=A/Q for case further down A6 81 LDX &81 \ Q F0 1C BEQ LL84 \ div by zero div error A2 00 LDX #0 .LL63 \ roll Acc count Xreg 4A LSR A E8 INX \ counts required will be stored in S C5 81 CMP &81 \ Q B0 FA BCS LL63 \ loop back if Acc >= Q 86 83 STX &83 \ S 20 75 3F JSR &3F75 \ LL28 \ BFRDIV R=A*256/Q byte for remainder of division A6 83 LDX &83 \ S \ restore Xcount A5 82 LDA &82 \ R \ remainder .LL64 \ counter Xreg 0A ASL A \ lo boost 26 80 ROL &80 \ U \ hi 30 06 BMI LL84 \ bit7 set, overflowed, div error CA DEX \ bring X back down D0 F8 BNE LL64 \ loop X 85 82 STA &82 \ R \ remainder 60 RTS .LL84 \ div error R=U=#50 A9 32 LDA #50 85 82 STA &82 \ R 85 80 STA &80 \ U 60 RTS .LL62 \ Arrive from LL65 just below, screen for -ve RU onto XX3 heap, index X=CNT A9 80 LDA #&80 \ x-screen mid-point 38 SEC \ xcoord lo E5 82 SBC &82 \ R 9D 00 01 STA &0100,X \ XX3,X E8 INX \ hi A9 00 LDA #0 \ xcoord hi E5 80 SBC &80 \ U 9D 00 01 STA &0100,X \ XX3,X 4C 44 44 JMP &4444 \ LL66 \ xccord shoved, go back down .LL56 \ Enter XX12+5 -ve Z node case from above A5 4C LDA &4C \ INWK+6 \ z org lo 38 SEC E5 3E SBC &3E \ XX12+4 \ rotated z node lo 85 D1 STA &D1 \ T A5 4D LDA &4D \ INWK+7 \ z hi E9 00 SBC #0 85 80 STA &80 \ U 90 08 BCC LL140 \ underflow, make node close D0 0E BNE LL57 \ Enter Node additions done, UT=z A5 D1 LDA &D1 \ T \ restore z lo C9 04 CMP #4 \ >=4 ? B0 08 BCS LL57 \ zlo big enough, Enter Node additions done. .LL140 \ else make node close A9 00 LDA #0 \ hi 85 80 STA &80 \ U A9 04 LDA #4 \ lo 85 D1 STA &D1 \ T .LL57 \ -> &4404 \ Enter Node additions done, z=T.U set up from LL55 A5 80 LDA &80 \ U \ z hi 05 35 ORA &35 \ XX15+1 \ x hi 05 38 ORA &38 \ XX15+4 \ y hi F0 0F BEQ LL60 \ exit loop down once hi U rolled to 0 46 35 LSR &35 \ XX15+1 66 34 ROR &34 \ XX15+0 46 38 LSR &38 \ XX15+4 66 37 ROR &37 \ XX15+3 46 80 LSR &80 \ U \ z hi 66 D1 ROR &D1 \ T \ z lo 4C 04 44 JMP &4404 \ LL57 \ loop U .LL60 \ hi U rolled to 0, exited loop above. A5 D1 LDA &D1 \ T 85 81 STA &81 \ Q \ zdist lo A5 34 LDA &34 \ XX15 \ rolled x lo C5 81 CMP &81 \ Q 90 06 BCC LL69 \ if xdist < zdist hop over jmp to small x angle 20 AB 43 JSR &43AB \ LL61 \ visit up R = A/Q = x/z 4C 2E 44 JMP &442E \ LL65 \ hop over small x angle .LL69 \ small x angle 20 75 3F JSR &3F75 \ LL28 \ BFRDIV R=A*256/Q byte for remainder of division .LL65 \ -> &442E \ both continue for scaling based on z A6 93 LDX &93 \ CNT \ index for XX3 heap A5 36 LDA &36 \ XX15+2 \ sign of X dist 30 9E BMI LL62 \ up, -ve Xdist, RU screen onto XX3 heap A5 82 LDA &82 \ R \ xscaled 18 CLC \ xcoord lo to XX3 heap 69 80 ADC #&80 \ x screen mid-point 9D 00 01 STA &0100,X \ XX3,X E8 INX \ x hi onto node heap A5 80 LDA &80 \ U 69 00 ADC #0 \ any carry to hi 9D 00 01 STA &0100,X \ XX3,X .LL66 \ -> &4444 \ also from LL62, XX3 node heap has xscreen node so far. 8A TXA \ Onto y coord 48 PHA \ push XX3 heap pointer A9 00 LDA #0 \ y hi = 0 85 80 STA &80 \ U A5 D1 LDA &D1 \ T 85 81 STA &81 \ Q \ zdist lo A5 37 LDA &37 \ XX15+3 \ rolled y low C5 81 CMP &81 \ Q 90 19 BCC LL67 \ if ydist < zdist hop to small yangle 20 AB 43 JSR &43AB \ LL61 \ else visit up R = XX15+3/Q = y/z 4C 70 44 JMP &4470 \ LL68 \ hop over small y yangle .LL70 \ arrive from below, Yscreen for -ve RU onto XX3 node heap, index X=CNT A9 60 LDA #&60 \ #Y = #96 mid Yscreen \ also rts at LL70+1 18 CLC \ ycoord lo to XX3 node heap. 65 82 ADC &82 \ R \ yscaled 9D 00 01 STA &0100,X \ XX3,X E8 INX \ y hi to node heap A9 00 LDA #0 \ any carry to y hi 65 80 ADC &80 \ U 9D 00 01 STA &0100,X \ XX3,X 4C 87 44 JMP &4487 \ LL50 \ down XX3 heap has yscreen node .LL67 \ Arrive from LL66 above if XX15+3 < Q \ small yangle 20 75 3F JSR &3F75 \ LL28 \ BFRDIV R=A*256/Q byte for remainder of division .LL68 \ -> &4470 \ both carry on, also arrive from LL66, scaling y based on z. 68 PLA \ restore AA TAX \ XX3 heap index E8 INX \ take XX3 heap index up A5 39 LDA &39 \ XX15+5 \ rolled Ydist sign 30 E3 BMI LL70 \ up, -ve RU onto XX3 heap A9 60 LDA #&60 \ #Y = #96 mid Yscreen 38 SEC \ subtract yscaled and store on heap E5 82 SBC &82 \ R 9D 00 01 STA &0100,X \ XX3,X E8 INX \ y screen hi A9 00 LDA #0 \ any carry E5 80 SBC &80 \ U 9D 00 01 STA &0100,X \ XX3,X .LL50 \ -> &4487 \ also from LL70, Also from LL49-3. XX3 heap has yscreen, Next vertex. 18 CLC \ reload XX3 heap index base A5 93 LDA &93 \ CNT 69 04 ADC #4 \ +=4, next 16bit xcoord,ycoord pair on XX3 heap 85 93 STA &93 \ CNT A5 86 LDA &86 \ XX17 \ vertex*6 count 69 06 ADC #6 \ +=6 A8 TAY \ Y taken up to next vertex data B0 07 BCS LL72 \ down Loaded if maxed out number of vertices (42) C5 97 CMP &97 \ XX20 \ number of vertices*6 B0 03 BCS LL72 \ done Loaded if all vertices done, exit loop 4C C6 42 JMP &42C6 \ LL48 \ loop Y back to next vertex at transpose matrix .LL72 \ XX3 node heap already Loaded with all 16bit xy screen A5 65 LDA &65 \ INWK+31 \ display/exploding state|missiles 29 20 AND #&20 \ bit5 of mask F0 09 BEQ EE31 \ if zero no explosion A5 65 LDA &65 \ INWK+31 09 08 ORA #8 \ else set bit3 to erase old lines 85 65 STA &65 \ INWK+31 4C 82 32 JMP &3282 \ WPSHPS-1 \ rts when docked .EE31 \ no explosion A9 08 LDA #8 \ mask bit 3 set of 24 65 BIT &65 \ INWK+31 \ exploding/display state|missiles F0 05 BEQ LL74 \ clear is hop to do New lines 20 F3 46 JSR &46F3 \ LL155 \ else erase lines in XX19 heap at LINEstr down A9 08 LDA #8 \ set bit3, as new lines .LL74 \ do New lines 05 65 ORA &65 \ INWK+31 85 65 STA &65 \ INWK+31 A0 09 LDY #9 \ Hull byte#9, number of edges B1 1E LDA (&1E),Y \ (XX0),Y 85 97 STA &97 \ XX20 \ number of edges A0 00 LDY #0 \ ship lines heap offset to 0 for XX19 84 80 STY &80 \ U 84 86 STY &86 \ XX17 \ edge counter E6 80 INC &80 \ U \ ship lines heap offset = 1 24 65 BIT &65 \ INWK+31 50 54 BVC LL170 \ bit6 of display state clear (laser not firing) \ Calculate new lines A5 65 LDA &65 \ INWK+31 29 BF AND #&BF \ else laser is firing, clear bit6. 85 65 STA &65 \ INWK+31 A0 06 LDY #6 \ Hull byte#6, gun vertex*4 B1 1E LDA (&1E),Y \ (XX0),Y A8 TAY \ index to gun on XX3 heap BE 00 01 LDX &0100,Y \ XX3,Y 86 34 STX &34 \ XX15+0 \ x1 lo E8 INX \ was heap entry updated from #255? F0 41 BEQ LL170 \ skip the rest (laser node not visible) BE 01 01 LDX &0101,Y \ XX3+1,Y 86 35 STX &35 \ XX15+1 \ x1 hi E8 INX \ was heap entry updated from #255? F0 39 BEQ LL170 \ skip the rest (laser node not visible) BE 02 01 LDX &0102,Y \ XX3+2,Y 86 36 STX &36 \ XX15+2 \ y1 lo BE 03 01 LDX &0103,Y \ XX3+3,Y 86 37 STX &37 \ XX15+3 \ y1 hi A9 00 LDA #0 \ x2 lo.hi = 0 85 38 STA &38 \ XX15+4 85 39 STA &39 \ XX15+5 85 3B STA &3B \ XX12+1 \ y2 high = 0 A5 4C LDA &4C \ INWK+6 \ z ship lo 85 3A STA &3A \ XX12 \ y2 low = z-lo A5 48 LDA &48 \ INWK+2 \ xship-sgn 10 02 BPL P%+4 \ skip dec C6 38 DEC &38 \ XX15+4 \ else x2 lo =#255 to right across screen 20 94 45 JSR &4594 \ LL145 \ clip test on XX15 XX12 vector B0 18 BCS LL170 \ if carry set skip the rest (laser not firing) A4 80 LDY &80 \ U \ ship lines heap offset A5 34 LDA &34 \ X1 \ push (now clipped) to clipped lines ship heap 91 67 STA (&67),Y \ (XX19),Y C8 INY A5 35 LDA &35 \ Y1 91 67 STA (&67),Y \ (XX19),Y C8 INY A5 36 LDA &36 \ X2 91 67 STA (&67),Y \ (XX19),Y C8 INY A5 37 LDA &37 \ Y2 91 67 STA (&67),Y \ (XX19),Y C8 INY 84 80 STY &80 \ U \ ship lines heap offset updated .LL170 \ (laser not firing) \ Calculate new lines \ their comment A0 03 LDY #3 \ Hull byte#3 edges lo 18 CLC \ build data pointer B1 1E LDA (&1E),Y \ (XX0),Y 65 1E ADC &1E \ XX0 85 22 STA &22 \ V \ is pointer to where edges data start A0 10 LDY #16 \ Hull byte #16 edges hi B1 1E LDA (&1E),Y \ (XX0),Y 65 1F ADC &1F \ XX0+1 85 23 STA &23 \ V+1 A0 05 LDY #5 \ Hull byte#5 is 4*MAXLI + 1, for ship lines stack B1 1E LDA (&1E),Y \ (XX0),Y 85 06 STA &06 \ T1 \ 4*MAXLI + 1, edge counter limit. A4 86 LDY &86 \ XX17 \ edge counter .LL75 \ -> &4539 \ count Visible edges B1 22 LDA (&22),Y \ (V),Y \ edge data byte#0 C5 96 CMP &96 \ XX4 \ visibility 90 18 BCC LLx78 \ edge not visible C8 INY B1 22 LDA (&22),Y \ (V),Y \ edge data byte#1 C8 INY \ Y = 2 85 1B STA &1B \ P \ store byte#1 29 0F AND #&0F AA TAX \ lower 4 bits are face1 B5 D2 LDA &D2,X \ XX2,X \ face visibility D0 0E BNE LL79 \ hop down to Visible edge A5 1B LDA &1B \ P \ restore byte#1 4A LSR A 4A LSR A 4A LSR A 4A LSR A \ /=16 upper nibble AA TAX \ upper 4 bits are face2 B5 D2 LDA &D2,X \ XX2,X \ face visibility D0 03 BNE LL79 \ Visible edge, else .LLx78 \ edge not visible 4C D6 46 JMP &46D6 \ LL78 \ edge not visible .LL79 \ Visible edge B1 22 LDA (&22),Y \ (V),Y \ edge data byte#2 AA TAX \ index into node heap for first node of edge C8 INY \ Y = 3 B1 22 LDA (&22),Y \ (V),Y \ edge data byte#3 85 81 STA &81 \ Q \ index into node heap for other node of edge BD 01 01 LDA &0101,X \ XX3+1,X 85 35 STA &35 \ XX15+1 \ x1 hi BD 00 01 LDA &0100,X \ XX3+0,X 85 34 STA &34 \ XX15 \ x1 lo BD 02 01 LDA &0102,X \ XX3+2,X 85 36 STA &36 \ XX15+2 \ y1 lo BD 03 01 LDA &0103,X \ XX3+3,X 85 37 STA &37 \ XX15+3 \ y1 hi A6 81 LDX &81 \ Q \ other index into node heap for second node BD 00 01 LDA &0100,X \ XX3+0,X 85 38 STA &38 \ XX15+4 \ x2 lo BD 03 01 LDA &0103,X \ XX3+3,X 85 3B STA &3B \ XX12+1 \ y2 hi BD 02 01 LDA &0102,X \ XX3+2,X 85 3A STA &3A \ XX12+0 \ y2 lo BD 01 01 LDA &0101,X \ XX3+1,X 85 39 STA &39 \ XX15+5 \ x2 hi 20 9A 45 JSR &459A \ LL147 \ CLIP2, take care of swop and clips B0 C6 BCS LLx78 \ jmp LL78 edge not visible 4C BA 46 JMP &46BA \ LL80 \ else continue down to Shove visible edge onto \ (XX19) heap, loop next data edge .LL145 \ -> &4594 \ CLIP XX15 XX12 line \ also called by BLINE, waiting for (X1,Y1), (X2,Y2) to draw a line. \ Before clipping, XX15(0,1) was x1. XX15(2,3) was y1. XX15(4,5) was x2. XX12(0,1) was y2. A9 00 LDA #0 85 90 STA &90 \ SWAP A5 39 LDA &39 \ XX15+5 \ x2 hi .LL147 \ -> &459A \ CLIP2 arrives here from LL79 to do swop and clip A2 BF LDX #&BF \ #Y*2-1 yClip = screen height 05 3B ORA &3B \ XX12+1 \ y2 hi D0 06 BNE LL107 \ skip yClip E4 3A CPX &3A \ XX12+0 \ is screen hight < y2 lo ? 90 02 BCC LL107 \ if yes, skip yClip A2 00 LDX #0 \ else yClip = 0 .LL107 \ skipped yClip 86 89 STX &89 \ XX13 \ yClip A5 35 LDA &35 \ XX15+1 \ x1 hi 05 37 ORA &37 \ XX15+3 \ y1 hi D0 1C BNE LL83 \ no hi bits in coord 1 present A9 BF LDA #&BF \ #Y*2-1 screen height C5 36 CMP &36 \ XX15+2 \ y1 lo 90 16 BCC LL83 \ if screen height < y1 lo skip A top A5 89 LDA &89 \ XX13 \ yClip D0 10 BNE LL108 \ hop down, yClip not zero .LL146 \ -> &45B8 \ Finished clipping, Shuffle XX15 down to (X1,Y1) (X2,Y2) A5 36 LDA &36 \ XX15+2 \ y1 lo 85 35 STA &35 \ XX15+1 \ new Y1 A5 38 LDA &38 \ XX15+4 \ x2 lo 85 36 STA &36 \ XX15+2 \ new X2 A5 3A LDA &3A \ XX12+0 \ y2 lo 85 37 STA &37 \ XX15+3 \ new Y2 18 CLC \ valid to plot is in XX15(0to3) 60 RTS \ 2nd pro different, it swops based on swop flag around here. .LL109 \ clipped line Not visible 38 SEC 60 RTS .LL108 \ arrived as yClip not zero in LL107 clipping 46 89 LSR &89 \ XX13 \ yClip = Ymid .LL83 \ also arrive from LL107, bits in hi present or y1_lo > screen height, Acc top A5 89 LDA &89 \ XX13 \ yClip 10 2F BPL LL115 \ yClip < 128 A5 35 LDA &35 \ XX15+1 \ x1 hi 25 39 AND &39 \ XX15+5 \ x2 hi 30 F2 BMI LL109 \ clipped line Not visible A5 37 LDA &37 \ XX15+3 \ y1 hi 25 3B AND &3B \ XX12+1 \ y2 hi 30 EC BMI LL109 \ clipped line Not visible A6 35 LDX &35 \ XX15+1 \ x1 hi CA DEX 8A TXA \ Acc = x1 hi -1 A6 39 LDX &39 \ XX15+5 \ x2 hi CA DEX 86 3C STX &3C \ XX12+2 \ x2 hi -- 05 3C ORA &3C \ XX12+2 \ (x1 hi -1) or (x2 hi -1) 10 DF BPL LL109 \ clipped line Not visible A5 36 LDA &36 \ XX15+2 \ y1 lo C9 C0 CMP #&C0 \ #Y*2 screen height, maybe carry set A5 37 LDA &37 \ XX15+3 \ y1 hi E9 00 SBC #0 \ any carry 85 3C STA &3C \ XX12+2 \ y1 hi-- A5 3A LDA &3A \ XX12 \ y2 lo C9 C0 CMP #&C0 \ #Y*2 screen height, maybe carry set A5 3B LDA &3B \ XX12+1 \ y2 hi E9 00 SBC #0 \ any carry 05 3C ORA &3C \ XX12+2 \ (y1 hi -1) or (y2 hi -1) 10 C9 BPL LL109 \ clipped line Not visible .LL115 \ also arrive from LL83 with yClip < 128 need to trim. 98 TYA \ index for edge data 48 PHA \ protect offset A5 38 LDA &38 \ XX15+4 \ x2 lo 38 SEC E5 34 SBC &34 \ XX15 \ x1 lo 85 3C STA &3C \ XX12+2 \ delta_x lo A5 39 LDA &39 \ XX15+5 \ x2 hi E5 35 SBC &35 \ XX15+1 \ x1 hi 85 3D STA &3D \ XX12+3 \ delta_x hi A5 3A LDA &3A \ XX12+0 \ y2 lo 38 SEC E5 36 SBC &36 \ XX15+2 \ y1 lo 85 3E STA &3E \ XX12+4 \ delta_y lo A5 3B LDA &3B \ XX12+1 \ y2 hi E5 37 SBC &37 \ XX15+3 \ y1 hi 85 3F STA &3F \ XX12+5 \ delta_y hi 45 3D EOR &3D \ XX12+3 \ delta_x hi 85 83 STA &83 \ S \ quadrant relationship for gradient A5 3F LDA &3F \ XX12+5 \ delta_y hi 10 0D BPL LL110 \ hop down if delta_y positive A9 00 LDA #0 \ else flip sign of delta_y 38 SEC \ delta_y lo E5 3E SBC &3E \ XX12+4 85 3E STA &3E \ XX12+4 A9 00 LDA #0 \ delta_y hi E5 3F SBC &3F \ XX12+5 85 3F STA &3F \ XX12+5 .LL110 \ delta_y positive A5 3D LDA &3D \ XX12+3 \ delta_x hi 10 0B BPL LL111 \ hop down if positive to GETgrad 38 SEC \ else flip sign of delta_x A9 00 LDA #0 \ delta_x lo E5 3C SBC &3C \ XX12+2 85 3C STA &3C \ XX12+2 A9 00 LDA #0 \ Acc will have delta_x hi +ve E5 3D SBC &3D \ XX12+3 \GETgrad \ get Gradient for trimming .LL111 \ -> &463D \ roll Acc delta_x hi AA TAX \ delta_x hi D0 04 BNE LL112 \ skip if delta_x hi not zero A6 3F LDX &3F \ XX12+5 \ delta_y hi F0 0A BEQ LL113 \ Exit when both delta hi zero .LL112 \ skipped as delta_x hi not zero 4A LSR A \ delta_x hi/=2 66 3C ROR &3C \ XX12+2 \ delta_x lo/=2 46 3F LSR &3F \ XX12+5 \ delta_y hi/=2 66 3E ROR &3E \ XX12+4 \ delta_y lo/=2 4C 3D 46 JMP &463D \ LL111 \ loop GETgrad .LL113 \ Exited as both delta hi zero for trimming 86 D1 STX &D1 \ T \ delta_y hi = 0 A5 3C LDA &3C \ XX12+2 \ delta_x lo C5 3E CMP &3E \ XX12+4 \ delta_y lo 90 0A BCC LL114 \ hop to STEEP as x < y 85 81 STA &81 \ Q \ else shallow, Q = delta_x lo A5 3E LDA &3E \ XX12+4 \ delta_y lo 20 75 3F JSR &3F75 \ LL28 \ BFRDIV R=A*256/Q = delta_y / delta_x \ Use Y/X grad. \ as not steep 4C 6B 46 JMP &466B \ LL116 \ gradient now known, go a few lines down .LL114 \ else STEEP A5 3E LDA &3E \ XX12+4 \ delta_y lo 85 81 STA &81 \ Q A5 3C LDA &3C \ XX12+2 \ delta_x lo 20 75 3F JSR &3F75 \ LL28 \ BFRDIV R=A*256/Q = delta_x / delta_y \ Use X/Y grad. C6 D1 DEC &D1 \ T \ steep toggle updated T = #&FF .LL116 \ -> &466B \ arrive here for both options with known gradient A5 82 LDA &82 \ R \ gradient 85 3C STA &3C \ XX12+2 A5 83 LDA &83 \ S \ quadrant info 85 3D STA &3D \ XX12+3 A5 89 LDA &89 \ XX13 F0 02 BEQ LL138 \ yClip = 0 or 191?, skip bpl 10 13 BPL LLX117 \ yClip+ve, swop nodes .LL138 \ yClip = 0 or or >127 need to fit x1,y1 into bounding box 20 1A 47 JSR &471A \ LL118 \ Trim XX15,XX15+2 to screen grad=XX12+2 A5 89 LDA &89 \ XX13 10 31 BPL LL124 \ yClip+ve, finish clip .LL117 \ yClip > 127 A5 35 LDA &35 \ XX15+1 \ x1 hi 05 37 ORA &37 \ XX15+3 \ y1 hi D0 30 BNE LL137 \ some hi bits present, no line. A5 36 LDA &36 \ XX15+2 \ y1 lo C9 C0 CMP #&C0 \ #Y*2 Yscreen full height B0 2A BCS LL137 \ if y1 lo >= Yscreen, no line. .LLX117 \ yClip+ve from LL116, swop nodes then trim nodes, XX12+2 = gradient, XX12+3 = quadrant info. A6 34 LDX &34 \ XX15+0 \ x1 lo A5 38 LDA &38 \ XX15+4 \ x2 lo 85 34 STA &34 \ XX15+0 86 38 STX &38 \ XX15+4 A5 39 LDA &39 \ XX15+5 \ x2 hi A6 35 LDX &35 \ XX15+1 \ x1 hi 86 39 STX &39 \ XX15+5 85 35 STA &35 \ XX15+1 A6 36 LDX &36 \ XX15+2 \ y1 lo \ Onto swopping y A5 3A LDA &3A \ XX12+0 \ y2 lo 85 36 STA &36 \ XX15+2 86 3A STX &3A \ XX12+0 A5 3B LDA &3B \ XX12+1 \ y2 hi A6 37 LDX &37 \ XX15+3 \ y1 hi 86 3B STX &3B \ XX12+1 85 37 STA &37 \ XX15+3 \ finished swop of (x1 y1) and (x2 y2) 20 1A 47 JSR &471A \ LL118 \ Trim XX15,XX15+2 to screen grad=XX12+2 C6 90 DEC &90 \ SWAP .LL124 \ also yClip+ve from LL138, finish clip 68 PLA \ restore ship edge index A8 TAY 4C B8 45 JMP &45B8 \ LL146 \ up, Finished clipping, Shuffle XX15 down to (x1,y1) (x2,y2) .LL137 \ no line 68 PLA \ restore offset to ship edge data index A8 TAY 38 SEC \ not visible 60 RTS \ -- Finished clipping \ Back to edges (visible) loop .LL80 \ -> &46BA \ Shove visible edge onto XX19 ship lines heap counter U A4 80 LDY &80 \ U \ clipped ship lines heap index A5 34 LDA &34 \ X1 91 67 STA (&67),Y \ (XX19),Y C8 INY A5 35 LDA &35 \ Y1 91 67 STA (&67),Y \ (XX19),Y C8 INY A5 36 LDA &36 \ X2 91 67 STA (&67),Y \ (XX19),Y C8 INY A5 37 LDA &37 \ Y2 91 67 STA (&67),Y \ (XX19),Y C8 INY 84 80 STY &80 \ U \ clipped ship lines heap index C4 06 CPY &06 \ T1 \ >= 4*MAXLI + 1 counter limit B0 17 BCS LL81 \ hop over jmp to Exit edge data loop .LL78 \ -> &46D6 \ also arrive here if Edge not visible, loop next data edge. E6 86 INC &86 \ XX17 \ edge counter A4 86 LDY &86 \ XX17 C4 97 CPY &97 \ XX20 \ number of edges B0 0F BCS LL81 \ hop over jmp to Exit edge data loop A0 00 LDY #0 \ else next edge A5 22 LDA &22 \ V 69 04 ADC #4 \ take edge data pointer up to next edge 85 22 STA &22 \ V 90 02 BCC ll81 \ skip inc hi E6 23 INC &23 \ V+1 .ll81 \ skip inc hi 4C 39 45 JMP &4539 \ LL75 \ Loop Next Edge .LL81 \ -> &46ED \ Exited edge data loop A5 80 LDA &80 \ U \ clipped ship lines heap index for (XX19),Y \ LL81+2 -> &46EF \ SHPPT ship is a point arrives here with Acc=8, bottom entry in heap A0 00 LDY #0 \ first entry in ship edges heap is number of bytes 91 67 STA (&67),Y \ (XX19),Y .LL155 \ -> &46F3 \ CLEAR LINEstr visited by EE31 when XX3 heap ready to draw/erase lines in XX19 heap. A0 00 LDY #0 \ number of bytes B1 67 LDA (&67),Y \ (XX19),Y 85 97 STA &97 \ XX20 \ valid length of heap XX19 C9 04 CMP #4 \ if < 4 then 90 1C BCC LL118-1 \ rts C8 INY \ #1 .LL27 \ counter Y, Draw clipped lines in XX19 ship lines heap B1 67 LDA (&67),Y \ (XX19),Y 85 34 STA &34 \ X1 C8 INY B1 67 LDA (&67),Y \ (XX19),Y 85 35 STA &35 \ Y1 C8 INY B1 67 LDA (&67),Y \ (XX19),Y 85 36 STA &36 \ X2 C8 INY B1 67 LDA (&67),Y \ (XX19),Y 85 37 STA &37 \ Y2 20 6F 17 JSR &176F \ LOIN \ draw line using (X1,Y1), (X2,Y2) C8 INY \ +=4 C4 97 CPY &97 \ XX20 \ valid number of edges in heap XX19 90 E5 BCC LL27 \ loop Y 60 RTS \ --- Wireframe end \ LL118-1 .LL118 \ -> &471A \ Trim XX15,XX15+2 to screen grad=XX12+2 for CLIP A5 35 LDA &35 \ XX15+1 \ x1 hi 10 17 BPL LL119 \ x1 hi+ve skip down 85 83 STA &83 \ S \ else x1 hi -ve 20 94 47 JSR &4794 \ LL120 \ X1<0 their comment \ X.Y = x1_lo.S * M/256 8A TXA \ step Y1 lo 18 CLC 65 36 ADC &36 \ XX15+2 \ Y1 lo 85 36 STA &36 \ XX15+2 98 TYA \ step Y1 hi 65 37 ADC &37 \ XX15+3 \ Y1 hi 85 37 STA &37 \ XX15+3 A9 00 LDA #0 \ xleft min 85 34 STA &34 \ XX15+0 \ X1 lo 85 35 STA &35 \ XX15+1 \ X1 = 0 AA TAX \ Xreg = 0, will skip to Ytrim .LL119 \ x1 hi +ve from LL118 F0 19 BEQ LL134 \ if x1 hi = 0 skip to Ytrim 85 83 STA &83 \ S \ else x1 hi > 0 C6 83 DEC &83 \ S \ x1 hi-1 20 94 47 JSR &4794 \ LL120 \ X1>255 their comment \ X.Y = x1lo.S * M/256 8A TXA \ step Y1 lo 18 CLC 65 36 ADC &36 \ XX15+2 \ Y1 lo 85 36 STA &36 \ XX15+2 98 TYA \ step Y1 hi 65 37 ADC &37 \ XX15+3 \ Y1 hi 85 37 STA &37 \ XX15+3 A2 FF LDX #&FF \ xright max 86 34 STX &34 \ XX15+0 \ X1 lo = 255 E8 INX \ = 0 86 35 STX &35 \ XX15+1 \ X1 hi .LL134 \ Ytrim A5 37 LDA &37 \ XX15+3 \ y1 hi 10 1A BPL LL135 \ y1 hi +ve 85 83 STA &83 \ S \ else y1 hi -ve A5 36 LDA &36 \ XX15+2 \ y1 lo 85 82 STA &82 \ R \ Y1<0 their comment 20 C3 47 JSR &47C3 \ LL123 \ X.Y=R.S*256/M (M=grad.) \where 256/M is gradient 8A TXA \ step X1 lo 18 CLC 65 34 ADC &34 \ XX15+0 \ X1 lo 85 34 STA &34 \ XX15+0 98 TYA \ step X1 hi 65 35 ADC &35 \ XX15+1 \ X1 hi 85 35 STA &35 \ XX15+1 A9 00 LDA #0 \ Y bottom min 85 36 STA &36 \ XX15+2 \ Y1 lo 85 37 STA &37 \ XX15+3 \ Y1 hi = 0 .LL135 \ y1 hi +ve from LL134 A5 36 LDA &36 \ XX15+2 \ Y1 lo 38 SEC E9 C0 SBC #&C0 \ #Y*2 screen y height 85 82 STA &82 \ R \ Y1>191 their comment A5 37 LDA &37 \ XX15+3 \ Y1 hi E9 00 SBC #0 85 83 STA &83 \ S 90 16 BCC LL136 \ failed, rts .LL139 20 C3 47 JSR &47C3 \ LL123 \ X.Y=R.S*256/M (M=grad.) \where 256/M is gradient 8A TXA \ step X1 lo 18 CLC 65 34 ADC &34 \ XX15+0 \ X1 lo 85 34 STA &34 \ XX15+0 98 TYA \ step X1 hi 65 35 ADC &35 \ XX15+1 \ X1 hi 85 35 STA &35 \ XX15+1 A9 BF LDA #&BF \ #Y*2-1 = y top max 85 36 STA &36 \ XX15+2 \ Y1 lo A9 00 LDA #0 \ Y1 hi = 0 85 37 STA &37 \ XX15+3 \ Y1 = 191 .LL136 \ rts 60 RTS \ -- trim for CLIP done .LL120 \ -> &4794 \ X.Y=x1lo.S*M/256 \ where M/256 is gradient A5 34 LDA &34 \ XX15+0 \ x1 lo 85 82 STA &82 \ R 20 FF 47 JSR &47FF \ LL129 \ RS = abs(x1=RS) and return with 48 PHA \ store Acc = hsb x1 EOR quadrant_info, Q = (1/)gradient A6 D1 LDX &D1 \ T \ steep toggle = 0 or FF for steep/shallow down D0 2B BNE LL121 \ down Steep .LL122 \ else Shallow return step, also arrive from LL123 for steep stepX A9 00 LDA #0 AA TAX A8 TAY \ all = 0 at start 46 83 LSR &83 \ S \ hi /=2 66 82 ROR &82 \ R \ lo /=2 06 81 ASL &81 \ Q \ double 1/gradient 90 09 BCC LL126 \ hop first half of loop .LL125 \ roll Q up 8A TXA \ increase step 18 CLC 65 82 ADC &82 \ R AA TAX \ lo 98 TYA \ hi 65 83 ADC &83 \ S A8 TAY \ hi .LL126 \ first half of loop done 46 83 LSR &83 \ S \ hi /=2 66 82 ROR &82 \ R \ lo /=2 06 81 ASL &81 \ Q \ double 1/gradient B0 EF BCS LL125 \ if gradient not too small, loop Q D0 F6 BNE LL126 \ half loop as Q not emptied yet. 68 PLA \ restore quadrant info 10 30 BPL LL133 \ flip XY sign 60 RTS .LL123 \ -> &47C3 \ X.Y=R.S*256/M (M=grad.) \ where 256/M is gradient 20 FF 47 JSR &47FF \ LL129 \ RS = abs(y1=RS) and return with 48 PHA \ store Acc = hsb x1 EOR hi, Q = (1/)gradient A6 D1 LDX &D1 \ T \ steep toggle = 0 or FF for steep/shallow up D0 D5 BNE LL122 \ up Shallow .LL121 \ T=#&FF for Steep return stepY, shallow stepX A9 FF LDA #&FF A8 TAY 0A ASL A \ #&FE AA TAX \ Step X.Y= &FFFE at start .LL130 \ roll Y 06 82 ASL &82 \ R \ lo *=2 26 83 ROL &83 \ S \ hi *=2 A5 83 LDA &83 \ S B0 04 BCS LL131 \ if S overflowed skip Q test and do subtractions C5 81 CMP &81 \ Q 90 0B BCC LL132 \ if S < Q = 256/gradient skip subtractions .LL131 \ skipped Q test E5 81 SBC &81 \ Q 85 83 STA &83 \ S \ lo A5 82 LDA &82 \ R E9 00 SBC #0 \ hi 85 82 STA &82 \ R 38 SEC .LL132 \ skipped subtractions 8A TXA \ increase step 2A ROL A AA TAX \ stepX lo 98 TYA 2A ROL A A8 TAY \ stepX hi B0 E1 BCS LL130 \ loop Y if bit fell out of Y 68 PLA \ restore quadrant info 30 0C BMI LL128 \ down rts .LL133 \ flip XY sign, quadrant info +ve in LL120 arrives here too 8A TXA 49 FF EOR #&FF 69 01 ADC #1 AA TAX \ flip sign of x 98 TYA 49 FF EOR #&FF 69 00 ADC #0 A8 TAY \ flip sign of y .LL128 60 RTS .LL129 \ -> &47FF \ RS = abs(RS) and return with Acc = hsb x1 EOR hi, Q = (1/)gradient A6 3C LDX &3C \ XX12+2 \ gradient 86 81 STX &81 \ Q A5 83 LDA &83 \ S \ hi 10 11 BPL LL127 \ hop to eor A9 00 LDA #0 \ else flip sign of R 38 SEC E5 82 SBC &82 \ R 85 82 STA &82 \ R A5 83 LDA &83 \ S 48 PHA \ push old S 49 FF EOR #&FF \ flip S 69 00 ADC #0 85 83 STA &83 \ S 68 PLA \ pull old S for eor .LL127 45 3D EOR &3D \ XX12+3 \ Acc ^= quadrant info 60 RTS \ --- CLIP, bounding box is now done, \ ----===== end of Docking Block G ============----- \ ----===== Dock Block J tokens ===============----- .TKN1 \ -> &481B \ Used by DETOK of block A 57 EQUB #&57 \ #VE is what is EOR'd with all below 00 \ 2nd rows will be eor'd with #&57, the unencrypted Docked tokens \ printf('%02X ',bitxor(sscanf(instring,'%x'),0x57));printf('\n') 5E 5C 56 5F 77 A6 04 1C 77 16 14 BE 04 04 77 1A 12 B6 80 5D 55 09 0B 01 08 20 F1 53 4B 20 41 43 E9 53 53 20 4D 45 E1 D7 0A 02 \ x09x0bx01x08 DISK ACCESS MENU x0cx0a x0ax02 66 79 77 C2 80 31 2E 20 95 D7 \ 1. LOAD' NEW 'x13 COMMANDER x0cx0a 65 79 77 04 16 AD 77 CD 77 53 80 32 2E 20 53 41 FA 20 9A 20 04 D7 \ 2. SAVE x13 COMMANDER x04=cmn x0cx0a 64 79 77 14 A2 16 B7 10 02 12 80 33 2E 20 43 F5 41 E0 47 55 45 D7 \ 3. CATALOGUE x0cx0a 63 79 77 13 12 1B 8A 12 87 11 1E B2 80 34 2E 20 44 45 4C DD 45 D0 46 49 E5 D7 \ 4. DELETE' A 'FILE x0cx0a 62 79 77 12 0F 8C 80 57 35 2E 20 45 58 DB D7 00 \ 5. EXIT x0cx0a // 01 first token 5B 00 1F 1E 14 1F 77 C0 68 57 0C 57 48 49 43 48 20 97 3F 00 \ x0c WHICH DRIVE? // 02 second token 14 18 1A 07 12 AC AC 88 77 B6 1A 15 A3 6D 57 \ Elite-A says: are you sure? 43 4F 4D 50 45 FB FB DF 20 E1 4D 42 F4 3A 00 \ COMPETITI'ON' 'NU'MB'ER': // 03 C1 C0 77 47 CF 80 57 96 97 20 10 98 D7 00 \ x09x0bx01x08'DRIVE ' x10=MT16=printsDTW7 'CATALOGUE' x0cx0a // 04 E7 3A 9D 39 E6 57 \ Planet description string is fifth token = x6d is x6e B0 6D CA 6E B1 00 \ x0dx0ex13 x6d' IS 'x6e .x0cx0f // 05 77 77 C2 77 56 7F 0E 78 19 7E 68 55 5B 5B 57 20 20 95 20 01 28 59 2F 4E 29 3F 02 0C 0C 00 \ LOAD NEW COMMANDER x01(Y/N)? x02x0cx0c // 06 07 A5 04 04 77 04 07 16 BE 77 AA 77 11 1E A5 7B 50 F2 53 53 20 53 50 41 E9 20 FD 20 46 49 F2 2C \ PRESS SPACE OR FIRE, CD 79 5B 5B 57 9A 2E 0C 0C 00 \ x13 COMMANDER. x0cx0c // 07 CD 70 04 9F 57 9A 27 53 C8 00 \ x13 COMMANDER'S' NAME? ' // 08 42 11 1E B2 9E 13 12 1B 8A 12 68 57 15 46 49 E5 C9 44 45 4C DD 45 3F 00 \ x15 FILE' TO 'DELETE? // 09 nineth token 40 59 55 10 A5 8A A7 10 04 82 17 0E 02 47 F2 DD F0 47 53 D5 \ x17 x0e x02 GREETINGS x13 COMMANDER x04, I x0d AM x02 CAPTAIN x1b x0 OF HER MAJESTY'S SPACE NAVY E5 44 1E 77 A0 10 87 1A 18 1A A1 03 77 18 11 77 E4 05 77 01 B3 02 8F B2 77 AC 1A 12 9B B2 13 49 20 F7 47 D0 4D 4F 4D F6 54 20 4F 46 20 B3 52 20 56 E4 55 D8 E5 20 FB 4D 45 CC \ ' AND 'x13 I BEG' A 'MOMENT OF YOU'R VALUABLE TIME .x0c x13 00 12 77 00 8E 1B 13 77 1B 1E 1C 12 77 E4 9E 13 18 87 1B 8C 03 B2 77 1D 18 15 77 11 AA 77 BB 9B 57 45 20 57 D9 4C 44 20 4C 49 4B 45 20 B3 C9 44 4F D0 4C DB 54 E5 20 4A 4F 42 20 46 FD 20 EC CC \ WE WOULD LIKE YOU TO 'DO' A 'LITTLE JOB FOR US.x0c x13 C4 98 77 E4 77 8D 12 77 1F 12 A5 9D 16 85 1A 18 13 12 1B 7B 77 C4 44 14 88 89 05 1E 14 03 AA 7B 93 CF 20 B3 20 DA 45 20 48 45 F2 CA 41 D2 4D 4F 44 45 4C 2C 20 93 13 43 DF DE 52 49 43 54 FD 2C \ 'THE 'SHIP' YOU' SEE HERE' IS 'A NEW 'MODEL, 'THE 'x13CONSTRICTOR, 77 12 A9 1E 07 93 00 1E B5 87 03 18 07 77 8D 14 05 8A 85 04 1F 1E 12 1B 13 77 10 A1 A3 A2 AA 20 45 FE 49 50 C4 57 49 E2 D0 54 4F 50 20 DA 43 52 DD D2 53 48 49 45 4C 44 20 47 F6 F4 F5 FD \ EQUIP'ED 'WITH' A 'TOP SECRET' NEW 'SHIELD GENERATOR 9B 02 19 11 AA 03 02 19 A2 12 1B 0E 77 8C 70 04 77 A0 A1 77 89 18 1B A1 CC 55 4E 46 FD 54 55 4E F5 45 4C 59 20 DB 27 53 20 F7 F6 20 DE 4F 4C F6 \ .x0c x13 UNFORTUNATELY IT'S BEEN STOLEN 9B 41 8C 77 00 A1 03 77 1A 1E 04 04 94 11 05 18 1A 77 8E 05 77 98 77 0E B9 13 77 88 77 CC 16 DB 20 57 F6 54 20 4D 49 53 53 C3 46 52 4F 4D 20 D9 52 20 CF 20 59 EE 44 20 DF 20 \ .x0c x13 x16IT WENT MISS'ING 'FROM OUR SHIP YARD ON \ x16 = PAUSE 44 B1 A3 77 11 1E AD 77 1A 88 B5 04 77 16 10 18 E5 4B 9B E4 05 77 1A 1E 04 04 1E 88 7B 13 E6 F4 20 46 49 FA 20 4D DF E2 53 20 41 47 4F B2 1C CC B3 52 20 4D 49 53 53 49 DF 2C \x13XEER FIVE MONTHS AGO' AND 'x1c.x0c x13 'YOU'R MISSION, \ x1c = was last seen at Reesdice/jumped to this galaxy 77 04 1F 8E 1B 13 77 E4 77 13 12 14 1E 13 12 9E 16 14 BE 07 03 77 8C 7B 77 1E 04 9E 8D 12 1C 20 53 48 D9 4C 44 20 B3 20 44 45 43 49 44 45 C9 41 43 E9 50 54 20 DB 2C 20 49 53 C9 DA 45 4B \SHOULD' YOU 'DECIDE' TO 'ACCEPT IT, IS' TO 'SEEK E5 13 BA 03 05 18 0E 77 C3 98 9B E4 77 16 A5 77 14 16 02 AC 88 93 B5 A2 77 88 1B 0E B2 44 ED 54 52 4F 59 20 94 CF CC B3 20 41 F2 20 43 41 55 FB DF C4 E2 F5 20 DF 4C 59 \' AND 'DESTROY' THIS 'SHIP.x0c x13'YOU 'ARE CAUTION'ED 'THAT ONLY 77 51 22 52 04 77 00 8B 1B 77 07 A1 8A AF 03 12 77 C4 19 12 00 77 04 1F 1E 12 1B 13 04 E5 B5 A2 77 C4 20 06 75 05 53 20 57 DC 4C 20 50 F6 DD F8 54 45 20 93 4E 45 57 20 53 48 49 45 4C 44 53 B2 E2 F5 20 93 \ x06x75x05S military lasers WILL PENETRATE' THE 'NEW SHIELDS' AND 'THAT 'THE ' 44 14 88 89 05 1E 14 03 AA 9D 11 8C 03 93 00 1E B5 77 A8 13 43 DF DE 52 49 43 54 FD CA 46 DB 54 C4 57 49 E2 20 FF \ x13CONSTRICTOR' IS 'FITT'ED 'WITH AN 77 51 3B 52 E6 55 5F 10 18 18 13 77 1B 02 14 1C 7B 77 CD 83 41 57 20 06 6C 05 B1 02 08 47 4F 4F 44 20 4C 55 43 4B 2C 20 9A D4 16 00 \ x06x6cx05 e.c.m.system.x0cx0fx02x08 GOOD LUCK,x13COMMANDER .x0cx0fx08x01 MESSAGE ENDSx16 // 0A tenth token 4E 5E 40 59 55 77 77 A2 03 A1 AC 88 82 79 77 44 19 09 17 0E 02 20 20 F5 54 F6 FB DF D5 2E 20 13 \ x19x09x17x0ex02 ATTENTIONx13COMMANDER x04, Ix0dAMx02 CAPTAINx1b x0OF HER MAJESTY'S SPACE NAVY.x13 00 12 77 1F 16 AD 77 19 12 93 18 11 77 E4 05 77 8D 05 01 1E 14 BA 77 16 10 16 A7 57 45 20 48 41 FA 20 4E 45 C4 4F 46 20 B3 52 20 DA 52 56 49 43 ED 20 41 47 41 F0 \ WE HAVE NE'ED 'OF 'YOU'R SERVICES AGAIN 9B 1E 11 77 E4 77 00 8E 1B 13 77 A0 77 BC 77 10 18 18 13 77 16 04 9E 10 18 9E CC 49 46 20 B3 20 57 D9 4C 44 20 F7 20 EB 20 47 4F 4F 44 20 41 53 C9 47 4F C9 \.x0c x13 IF 'YOU' WOULD BE SO GOOD AS' TO 'GO ' TO 44 BE A3 A6 77 E4 77 00 8B 1B 77 A0 77 15 05 1E 12 11 AB 9B 1E 11 77 04 02 14 BE 04 04 11 02 1B 7B 13 E9 F4 F1 20 B3 20 57 DC 4C 20 F7 20 42 52 49 45 46 FC CC 49 46 20 53 55 43 E9 53 53 46 55 4C 2C \'x13 CEERDI 'YOU 'WILL BE BRIEFED.x0c x13. IF SUCCESSFUL, 77 E4 77 00 8B 1B 77 A0 77 00 12 1B 1B 77 A5 00 B9 13 AB 83 4F 57 20 B3 20 57 DC 4C 20 F7 20 57 45 4C 4C 20 F2 57 EE 44 FC D4 18 00 \' YOU 'WILL BE WELL REWARDED.x0cx0fx08x01 MESSAGE ENDSx18 // 0B 7F 44 14 7E 77 16 14 AA 19 BC 11 03 77 66 6E 6F 63 57 28 13 43 29 20 41 43 FD 4E EB 46 54 20 31 39 38 34 00 \ (x13C) ACORNSOFT 1984 // 0C 15 0E 77 13 79 15 AF A0 19 77 71 77 1E 79 A0 1B 1B 57 42 59 20 44 2E 42 F8 F7 4E 20 26 20 49 2E F7 4C 4C 00 \ BY D.BRABEN & I.BELL // 0D 42 C6 9F 4D 57 15 91 C8 1A 00 \ x15 PLANET' NAME? x1A = MT26 string input // 0E 4E 5E 40 59 55 77 77 14 88 10 AF 03 02 AE AC 88 04 77 CD 76 5B 5B B5 A3 12 19 09 17 0E 02 20 20 43 DF 47 F8 54 55 F9 FB DF 53 20 9A 21 0C 0C E2 F4 45 \x19x09x17x0e x02 CONGRATULATIONS x13 COMMANDER! x0c x0c THERE 5A 77 00 8B 1B 77 B3 00 16 0E 04 77 A0 87 07 AE BE 77 11 AA 77 E4 77 A7 84 0D 20 57 DC 4C 20 E4 57 41 59 53 20 F7 D0 50 F9 E9 20 46 FD 20 B3 20 F0 D3 \x0d WILL ALWAYS BE ' A 'PLACE FOR 'YOU' IN HER MAJESTY'S SPACE NAVY 9B A8 13 77 B8 0E A0 77 BC 88 A3 77 B5 A8 77 E4 77 B5 A7 1C 79 79 83 4F 57 CC FF 44 20 EF 59 F7 20 EB DF F4 20 E2 FF 20 B3 20 E2 F0 4B 2E 2E D4 18 00 \.x0c x13 AND MAYBE SOONER THAN YOU' THINK.. .x0c x0f x08 x01 MESSAGE ENDS x18=PAUSE2 // 0F fifteenth token 11 8F B2 13 57 \ X5b Hex81 46 D8 E5 44 00 \ FABLED // 10 = sixteenth token B4 03 8F B2 57 E3 54 D8 E5 00 \ NOTABLE // 11 00 12 1B 1B 77 1C B4 00 19 57 57 45 4C 4C 20 4B E3 57 4E 00 \ WELL KNOWN // 12 11 16 1A 18 BB 57 46 41 4D 4F EC 00 \ FAMOUS // 13 B4 03 AB 57 \ fifth choice of X5b E3 54 FC 00 \ NOTED // 14 AD 05 0E 57 \ X5c Hex82 FA 52 59 00 \ VERY // 15 1A 8B 13 1B 0E 57 4D DC 44 4C 59 00 \ MILDLY // 16 1A 18 89 57 4D 4F DE 00 \ MOST // 17 A5 16 04 88 8F 1B 0E 57 F2 41 53 DF D8 4C 59 00 \ REASONABLY // 18 57 \ fifth choice of X5c = null 00 \ BRK // 19 F2 57 \ X5d Hex83 geographical adjectives A5 00 \ ANCIENT // 1A 25 57 72 00 \ x72 = wierd choices // 1B 10 A5 A2 57 47 F2 F5 00 \ GREAT // 1C 01 16 89 57 56 41 DE 00 \ VAST // 1D 07 A7 1C 57 \ fifth choice of X5d 50 F0 4B 00 \ PINK // 1E 55 20 77 21 5A 77 EE 16 AC 88 04 57 \ X5e geographical feature 02 77 20 76 0D 20 B9 41 FB DF 53 00 \x02 x77 x76 x13 = e.g PLANTATIONS // 1F CB 04 57 9C 53 00 \ MOUNTAIN S // 20 22 57 \ // 21 75 00 \ x75 = parking meters..volcanoes D7 77 11 AA BA 03 04 57 \ // 22 80 20 46 FD ED 54 53 00 \ x80 = types of forest FORESTS 18 BE A8 04 57 \ fifth choice of X5e 4F E9 FF 53 00 \ OCEANS // 23 04 1F 0E 19 BA 04 57 \ X63 Hex85 characteristic of inhabitants 53 48 59 4E ED 53 00 \ SHYNESS // 24 04 8B 1B A7 BA 04 57 53 DC 4C F0 ED 53 00 \ SILLINESS // 25 B8 03 94 03 AF A6 AC 88 04 57 EF 54 C3 54 F8 F1 FB DF 53 00 \ MAT'ING 'TRADITIONS // 26 B7 A2 1F 94 18 11 77 33 57 E0 F5 48 C3 4F 46 20 64 00 \ LOATH'ING 'OF x64 // 27 B7 AD 77 11 AA 77 33 57 \ fifth choice of X63 E0 FA 20 46 FD 20 64 00 \ LOVE FOR x64 // 28 11 18 18 13 77 15 B2 19 13 A3 04 57 \ X64 Hex86 46 4F 4F 44 20 42 E5 4E 44 F4 53 00 \ FOOD BLENDERS // 29 03 8E 05 1E 89 04 57 54 D9 52 49 DE 53 00 \ TOURISTS // 2A 07 18 8A 05 0E 57 50 4F DD 52 59 00 \ POETRY // 2B A6 04 14 18 04 57 F1 53 43 4F 53 00 \ DISCOS // 2C 3B 57 // 2D 6C 00 \ x6c = cuisine etc. 00 B3 1C 94 C9 57 \ X61 Hex87 animal'OID 57 E4 4B C3 9E 00 \WALK'ING 'TREE // 2E not talking 14 AF 15 57 43 F8 42 00 \ CRAB // 2F 15 A2 57 42 F5 00 \ BAT // 30 B7 15 89 57 E0 42 DE 00 \ LOBST // 31 45 57 // 32 12 00 \ x12=random name A0 04 8A 57 \ X66 Hex88 F7 53 DD 00 \ BESET // 33 07 AE 10 02 AB 57 50 F9 47 55 FC 00 \ PLAGUED // 34 AF 01 16 10 AB 57 F8 56 41 47 FC 00 \ RAVAGED // 35 14 02 05 04 AB 57 43 55 52 53 FC 00 \ CURSED // 36 04 14 8E 05 10 AB 57 \ fifth choice of X66 53 43 D9 52 47 FC 00 \ SCOURGED // 37 26 77 14 1E 01 8B 77 00 B9 57 \ X67 Hex89 71 20 43 49 56 DC 20 57 EE 00 \x71 CIVIL WAR // 38 3F 77 08 77 37 04 57 x5f=strange animals, x60 = strange animal/drink 68 20 5F 20 60 53 00 \x68 x5f x60S // 39 16 77 3F 77 A6 8D 16 8D 57 41 20 68 20 F1 DA 41 DA 00 \x68 = life-threatening adjective \A x68 DISEASE // 3A 26 77 12 B9 B5 A9 16 1C BA 57 \x71 = adjectives for calamity 71 20 45 EE E2 FE 41 4B ED 00 \x71 EARTHQUAKES // 3B 26 77 BC AE 05 77 16 14 AC 01 8C 0E 57 \ fifth choice of X67 71 20 EB F9 52 20 41 43 FB 56 DB 59 00 \x71 SOLAR ACTIVITY // 3C F8 0A 77 09 57 \ X65 Hex8A = its .. AF 5D 20 5E 00 \'ITS 'x5d x5e // 3D x5e = geographical feature C4 46 77 08 77 37 57 =x11 planet name-ian, x5f=strange animals 93 11 20 5F 20 60 00 \'THE 'x11 x5f x60 // 3E F8 96 04 70 77 35 77 34 57 \ x62 = ingrained etc, x63 = characteristic of inhabitants AF C1 53 27 20 62 20 63 00 \'ITS 'INHABITANTS' x62 x63 // 3F 55 2D 5A 57 // 40 02 7A 0D 00 \ x02 x7a= near top-level aspect of planet x0d F8 3C 77 3B 57 // 41 AF 6B 20 6C 00 \ ITS x6b x6c = cuisine etc. 1D 02 1E BE 57 \ X69 Hex8B drinks 4A 55 49 E9 00 \ JUICE // 42 15 AF 19 13 0E 57 42 F8 4E 44 59 00 \ BRANDY // 43 0 A2 A3 57 57 F5 F4 00 \ WATER // 44 15 A5 00 57 42 F2 57 00 \ BREW // 45 10 B9 10 B2 77 15 AE 89 A3 04 57 47 EE 47 E5 20 42 F9 DE F4 53 00 \ GARGLE BLASTERS // 46 45 57 \ X6a Hex8C creature/drinks adjectives 12 00 \ x12 = random name // 47 46 77 37 57 x60 = strange animal/drink 11 20 60 00 \x11 x60 // 48 46 77 45 57 x12 = random name 11 20 12 00 \x11 x12 // 49 46 77 3F 57 x11 = planet name-ian 11 20 68 00 \x11 x68 // 4A 3F 77 45 57 x68 = life-threatening adjective, x12 = random name 68 20 12 00 \x68 x12 // 4B 11 8F 02 B7 BB 57 \ X6b Hex8D adjective for social activity or animal 46 D8 55 E0 EC 00 \ FABULOUS // 4C 12 0F 18 AC 14 57 45 58 4F FB 43 00 \ EXOTIC // 4D 1F 18 18 07 0E 57 48 4F 4F 50 59 00 \ HOOPY // 4E 02 B6 04 02 B3 57 55 E1 53 55 E4 00 \ UNUSUAL // 4F 12 0F 14 8C A7 10 57 \ fifth choice of X6b 45 58 43 DB F0 47 00 \ EXCITING // 50 14 02 1E 04 A7 12 57 \ X6c Hex8E love/loathing 43 55 49 53 F0 45 00 \ CUISINE // 51 19 1E 10 1F 03 77 1B 1E 11 12 57 4E 49 47 48 54 20 4C 49 46 45 00 \ NIGHT LIFE // 52 14 16 04 1E B4 04 57 43 41 53 49 E3 53 00 \ CASINOS // 53 04 8C 77 14 18 1A 04 57 53 DB 20 43 4F 4D 53 00 \ SIT COMS // 54 55 2D 5A 57 \ fifth choice of X6c 02 7A 0D 00 \ x02x7ax0d // 55 x7a= near top-level aspect of planet 54 57 \ X6d Hex8F [First half of string 03 00 \ x03 // 56 C4 C6 77 54 57 \x03 planet name 93 91 20 03 00 \ 'THE 'PLANET x03 // 57 C4 C5 77 54 57 93 92 20 03 00 \ 'THE 'WORLD x03 // 58 C3 C6 57 94 91 00 \ 'THIS 'PLANET // 59 C3 C5 57 \ fifth choice of X6d 94 92 00 \ 'THIS 'WORLD // 5A 04 88 77 18 11 87 15 8C 14 1F 57 \ X73 5 rouge chocies 53 DF 20 4F 46 D0 42 DB 43 48 00 \ SON OF' A 'BITCH // 5B 04 14 8E 19 13 A5 1B 57 53 43 D9 4E 44 F2 4C 00 \ SCOUNDREL // 5C 15 AE 14 1C 10 02 B9 13 57 42 F9 43 4B 47 55 EE 44 00 \ BLACKGUARD // 5D 05 18 10 02 12 57 52 4F 47 55 45 00 \ ROGUE // 5E 00 1F AA BA 88 77 A0 8A B2 77 1F 12 16 13 57 48 FD ED DF 20 F7 DD E5 20 48 45 41 44 \ WHORESON BEETLE HEAD \ fifth choice of X73 91 11 AE 07 77 12 B9 70 13 77 1C 19 16 AD 57 \ xC6 = 00 C6 46 F9 50 20 45 EE 27 44 20 4B 4E 41 FA 00 \ not used? \xc6 FLAP EAR'D KNAVE \ // 5F 19 77 02 19 A5 B8 05 1C 8F B2 57 \ X6f Hex90 'A' planet adjective choices 4E 20 55 4E F2 EF 52 4B D8 E5 00 N UNREMARKABLE // 60 77 15 AA A7 10 57 20 42 FD F0 47 00 BORING // 61 77 13 02 1B 1B 57 20 44 55 4C 4C 00 DULL // 62 77 03 12 A6 18 BB 57 20 54 45 F1 4F EC 00 TEDIOUS // 63 77 A5 01 18 1B 03 A7 10 57 \ fifth choice of X6f 20 F2 56 4F 4C 54 F0 47 00 REVOLTING // 64 C6 57 \ X70 Hex91 planet noun, 2nd half 91 00 PLANET // 65 C5 57 \ x92 92 00 WORLD // 66 07 AE BE 57 50 F9 E9 00 PLACE // 67 1B 8C 03 B2 77 C6 57 4C DB 54 E5 20 91 00 LITTLE PLANET // 68 13 02 1A 07 57 \ fifth choice of X70 44 55 4D 50 00 DUMP // 69 1E 77 1F 12 B9 87 25 77 B7 18 1C 94 98 77 16 07 07 12 B9 93 A2 86 57 \ X74 Errius 5 choices 49 20 48 45 EE D0 72 20 E0 4F 4B C3 CF 20 41 50 50 45 EE C4 F5 D1 00 \ I HEAR' A 'x72 LOOKING 'SHIP APPEAR'ED 'AT' ERRIUS' // 6A \ x72 = wierd choices 0E 12 16 1F 7B 77 1E 77 1F 12 B9 87 25 77 98 77 B2 11 03 86 59 45 41 48 2C 20 49 20 48 45 EE D0 72 20 CF 20 E5 46 54 D1 \ YEAH, I HEAR' A 'x72' SHIP' LEFT' ERRIUS \ x72 = wierd choices 87 77 00 1F 1E B2 77 15 16 14 1C 57 D0 20 57 48 49 E5 20 42 41 43 4B 00 \ A' WHILE BACK // 6B 10 8A 77 E4 05 77 1E 05 88 77 16 04 04 77 18 01 A3 77 03 18 86 57 47 DD 20 B3 52 20 49 52 DF 20 41 53 53 20 4F 56 F4 20 54 4F D1 00 \ GET 'YOU'R IRON ASS OVER TO' ERRIUS ' // 6C BC 1A 12 77 24 85 98 77 00 16 04 77 8D A1 77 A2 86 57 EB 4D 45 20 73 D2 CF 20 57 41 53 20 DA F6 20 F5 D1 00 \ SOME x73' NEW 'SHIP WAS SEEN AT' ERRIUS ' // 6D \ x73 = 5 rouge choices 03 05 0E 86 57 \ fifth choice of X74 54 52 59 D1 00 TRY' ERRIUS ' // 6E 57 57 57 57 \ Elite-A uses 3 of these for special cargo and modified credit. 00 00 00 00 BRK: BRK: BRK: BRK 00 16 04 07 57 \ X7e Hex 92 small animal, creatures v) 57 41 53 50 00 WASP // 73 1A 18 B5 57 4D 4F E2 00 MOTH // 74 10 05 02 15 57 47 52 55 42 00 GRUB // 75 A8 03 57 FF 54 00 ANT // 76 45 57 \ fifth choice of X7e x12 = HexB2 random name 12 00 x12 // 77 07 18 8A 57 \ X7f Hex93 strange animals iv) 50 4F DD 00 POET // 78 B9 03 04 77 10 AF 13 02 A2 12 57 EE 54 53 20 47 F8 44 55 F5 45 00 ARTS GRADUATE // 79 0E 16 1C 57 59 41 4B 00 YAK // 7A 04 19 16 8B 57 53 4E 41 DC 00 SNAIL // 7B 04 1B 02 10 57 \ fifth choice of X7f 53 4C 55 47 00 SLUG // 7C 03 05 18 07 1E 14 B3 57 \ X80 Hex94 types of forest 54 52 4F 50 49 43 E4 00 TROPICAL // 7D 13 A1 8D 57 44 F6 DA 00 DENSE // 7E AF A7 57 F8 F0 00 RAIN // 7F 1E 1A 07 A1 8A AF 15 B2 57 49 4D 50 F6 DD F8 42 E5 00 IMPENETRABLE // 80 12 0F 02 A0 AF 19 03 57 \ fifth choice of X80 last block added 45 58 55 F7 F8 4E 54 00 EXUBERANT // 81 11 02 19 19 0E 57 \ X72 Hex95 adjective for geography/inhabitants/constrictor 46 55 4E 4E 59 00 FUNNY // 82 00 1E A3 13 57 \ oops 57 49 F4 44 00 WIERD // 83 02 B6 04 02 B3 57 55 E1 53 55 E4 00 UNUSUAL // 84 89 AF 19 B0 57 DE F8 4E E7 00 STRANGE // 85 07 12 14 02 1B 1E B9 57 \ fifth choice of X72 50 45 43 55 4C 49 EE 00 PECULIAR // 86 11 A5 A9 A1 03 57 \ X71 Hex96 adjectives for calamity 46 F2 FE F6 54 00 FREQUENT // 87 18 14 14 16 04 1E 88 B3 57 4F 43 43 41 53 49 DF E4 00 OCCASIONAL // 88 02 19 07 A5 A6 14 03 8F B2 57 55 4E 50 F2 F1 43 54 D8 E5 00 UNPREDICTABLE // 89 13 A5 16 13 11 02 1B 57 44 F2 41 44 46 55 4C 00 DREADFUL // 8A FC 57 \ fifth choice of X71 AB 00 DEADLY // 8B 0B 77 0C 77 11 AA 77 32 57 \ X6e Hex97 Second half of string 5C 20 5B 20 46 FD 20 65 00 x5c x5b FOR x65 // 8C DB E5 32 57 \ above and something else 8C B2 65 00 x8c' AND 'x65 // 8D 31 77 15 0E 77 30 57 \ beset by civil 66 20 42 59 20 67 00 x66 BY x67 // 8E DB 77 15 02 03 77 D9 57 \ two above 8C 20 42 55 54 20 8E 00 x8c BUT x8e // 8F 77 16 38 77 27 57 \ fifth choice of x6F,70 = ..n remarkable dump 20 41 6F 20 70 00 ' A'x6F x70 // 90 07 1B A8 8A 57 \ entries used in x6d, first half 50 4C FF DD 00 PLANET // 91 00 AA 1B 13 57 57 FD 4C 44 00 WORLD // 92 B5 12 77 57 E2 45 20 00 'THE ' // 93 B5 1E 04 77 57 E2 49 53 20 00 'THIS ' // 94 B7 16 13 85 CD 57 /=5 E0 41 44 D2 9A 00 LOAD' NEW 'x13COMMANDER // 95 5E 5C 56 5F 57 09 0B 01 08 00 x09 x0b x01 x08 // 96 = new window, nlin4, captital, indent 13 05 1E AD 57 44 52 49 FA 00 DRIVE // 97 77 14 A2 16 B7 10 02 12 57 20 43 F5 41 E0 47 55 45 00 CATALOGUE // 98 1E A8 57 \ -ian ending 49 FF 00 IAN // 99 44 14 18 1A 1A A8 13 A3 57 /=5 13 43 4F 4D 4D FF 44 F4 00 x13 COMMANDER // 9A 3F 57 \ X5f Hex98 animal adjective 68 00 x6 =threatening // 9B 1A 8E 19 03 16 A7 57 4D D9 4E 54 41 F0 00 MOUNTAIN // 9C AB 1E 15 B2 57 FC 49 42 E5 00 EDIBLE // 9D 03 A5 12 57 54 F2 45 00 TREE // 9E 04 07 18 03 03 AB 57 \ fifth choice of X5F 53 50 4F 54 54 FC 00 SPOTTED // 9F 2F 57 \ X60 Hex99 creatures 1 78 00 x78 // A0 \ strange creature noun 1 2E 57 79 00 x79 // A1 \ strange creature noun 2 36 18 1E 13 57 61 4F 49 44 00 x61OID // A2 \ ?OID creature 28 57 \ (poet..) 7F 00 x7f // A3 \ strange animals iv) 29 57 \ fifth choice of X60 again (wasp..) 7E 00 x7e // A4 \ small animal, creatures v) A8 14 1E A1 03 57 \ X62 Hex9A ingrained etc. FF 43 49 F6 54 00 ANCIENT // A5 12 0F BE 07 AC 88 B3 57 45 58 E9 50 FB DF E4 00 EXCEPTIONAL // A6 12 14 BE 19 03 05 1E 14 57 45 43 E9 4E 54 52 49 43 00 ECCENTRIC // A7 A7 10 AF A7 AB 57 F0 47 F8 F0 FC 00 INGRAINED // A8 25 57 \ fifth choice of X62 72 00 x72 // A9 1C 8B 1B A3 57 \ X68 Hex9B life-threatening adjective 4B DC 4C F4 00 KILLER // AA 13 12 16 13 1B 0E 57 44 45 41 44 4C 59 00 DEADLY // AB 12 01 8B 57 45 56 DC 00 EVIL // AC B2 B5 B3 57 E5 E2 E4 00 LETHAL // AD 01 1E 14 1E 18 BB 57 \ fifth choice of X68 56 49 43 49 4F EC 00 VICIOUS // AE 8C 04 77 57 /=1 DB 53 20 00 ITS ' // AF 5A 59 44 57 0D 0E 13 00 x0d x0 ex13 // B0 begin, start buffer, only first letter capital 79 5B 58 57 2E 0C 0F 00 .x0c x0f // B1 end sentence, flush buffer. 77 A8 13 77 57 20 FF 44 20 00 ' AND ' // B2 0E 8E 57 /=5 59 D9 00 'YOU' // B3 07 B9 1C 94 1A 8A A3 04 57 \ X75 Hex9C geographic feature 50 EE 4B C3 4D DD F4 53 00 PARK'ING 'METERS// B4 13 BB 03 77 14 B7 02 13 04 57 44 EC 54 20 43 E0 55 44 53 00 DUST CLOUDS // B5 1E BE 77 A0 05 10 04 57 49 E9 20 F7 52 47 53 00 ICE BERGS // B6 05 18 14 1C 77 11 AA B8 AC 88 04 57 52 4F 43 4B 20 46 FD EF FB DF 53 00 ROCK FORMATIONS // B7 01 18 1B 14 16 B4 BA 57 \ fifth choice of X75 56 4F 4C 43 41 E3 ED 00 VOLCANOES // B8 07 1B A8 03 57 \ X76 Hex9D plantation adjective part2 50 4C FF 54 00 PLANT // B9 03 02 1B 1E 07 57 54 55 4C 49 50 00 TULIP // BA 15 A8 A8 16 57 42 FF FF 41 00 BANANA // BB 14 AA 19 57 43 FD 4E 00 CORN // BC 45 00 12 AB 57 \ fifth choice of X76 12 57 45 FC 00 x12= HexB2 random name WEED // BD 45 57 \ X77 Hex9E plantation adjective part1 12 00 x12 // BE 46 77 45 57 \ x11 = HexB1 planet name-ian x12 = HexB2 random name 11 20 12 00 x11 x12 // BF 46 77 3F 57 \ x68=Hex9B life-threatening adjective 11 20 68 00 x11 x68 // C0 A7 1F 16 BD 03 A8 03 57 F0 48 41 EA 54 FF 54 00 INHABITANT // C1 E8 57 \ fifth choice of X77 BF 00 x11 x12 // C2 A7 10 77 57 F0 47 20 00 'ING ' // C3 AB 77 57 FC 20 00 'ED ' // C4 57 57 57 00 00 00 \ BRK: BRK: BRK // C5 C6 C7 77 19 16 1A 12 68 77 57 20 4E 41 4D 45 3F 20 00 ' NAME? ' // C8 77 03 18 77 57 20 54 4F 20 00 ' TO ' // C9 77 1E 04 77 57 20 49 53 20 00 ' IS ' // CA 00 16 04 77 AE 89 77 8D A1 77 A2 77 44 57 57 41 53 20 F9 DE 20 DA F6 20 F5 20 13 00 \'WAS LAST SEEN AT 'x13 // CB 79 5B 77 44 57 2E 0C 20 13 00 .x0c x13 // CC end one sentence, start next one on next line 13 18 14 1C AB 57 44 4F 43 4B FC 00 DOCKED // CD 56 7F 0E 78 19 7E 68 57 01 28 59 2F 4E 29 3F 00 x01 (Y/N)? // CE 04 1F 1E 07 57 53 48 49 50 00 SHIP // CF 77 16 77 57 20 41 20 00 ' A ' // D0 77 A3 05 1E BB 57 20 F4 52 49 EC 00 ' ERRIUS' // D1 77 19 12 00 77 57 20 4E 45 57 20 00 ' NEW ' // D2 55 77 1F A3 77 B8 1D BA 03 0E 70 04 77 04 07 16 BE 77 19 16 01 0E 5A 57 02 20 48 F4 20 EF 4A ED 54 59 27 53 20 53 50 41 E9 20 4E 41 56 59 0D 00 \ x02 HER MAJESTY'S SPACE NAVY x0d // D3 E6 5F 56 77 77 1A BA 04 16 B0 77 A1 13 04 57 B1 08 01 20 20 4D ED 53 41 E7 20 F6 44 53 00 \ .x0c x0f=flush x08=indent x01 MESSAGE ENDS // D4 77 CD 77 53 7B 77 1E 77 5A 16 1A 20 9A 20 04 2C 20 49 20 0D 41 4D \ x13 COMMANDER x04=cmn, I x0d=lowercase AM 55 77 14 16 07 03 16 A7 77 4C 77 5A 18 11 84 57 02 20 43 41 50 54 41 F0 20 1B 20 0D 4F 46 D3 00 \ x02 CAPTAIN x1b=MT27 x0d OF HER MAJESTY'S SPACE NAVY // D5 57 00 BRK // D6 58 77 02 19 1C B4 00 19 77 C6 57 0F 20 55 4E 4B E3 57 4E 20 91 00 \ x0F UNKNOWN PLANET // D7 / error used on first visit to DETOK / otherwise 2 lines, x0c x0a first TKN2 digram 5E 5F 40 56 A7 14 18 1A 94 1A BA 04 16 B0 57 09 08 17 01 F0 43 4F 4D C3 4D ED 53 41 E7 00 \ x09x08x17x01 INCOM'ING 'MESSAGE // D8 'AB' 14 02 05 05 02 B5 A3 04 57 43 55 52 52 55 E2 F4 53 00 \ CURRUTHERS // D9 'OU' 11 18 04 13 0E 1C 12 77 04 1A 0E B5 12 57 46 4F 53 44 59 4B 45 20 53 4D 59 E2 45 00 \ FOSDYKE SMYTHE // DA 'SE' 11 AA 03 BA A9 12 57 46 FD 54 ED FE 45 00 \ FORTESQUE // DB 'IT' 9C A5 BA A6 BE 57 CB F2 ED F1 E9 00 \ 'WAS LAST SEEN AT 'REESDICE // DC 'IL' 1E 04 77 A0 1B 1E 12 01 AB 9E 1F 16 AD 77 1D 02 1A 07 AB 9E C3 10 B3 16 0F 0E 57 49 53 20 F7 4C 49 45 56 FC C9 48 41 FA 20 4A 55 4D 50 FC C9 94 47 E4 41 58 59 00 \ IS BELIEVED' TO 'HAVE JUMPED 'TO ''THIS 'GALAXY // DD 'ET' 4E 5E 4A 59 55 10 18 18 13 77 13 16 0E 77 CD 77 53 9B 1E 5A 77 16 1A 77 44 16 10 A1 03 77 19 09 1D 0E 02 47 4F 4F 44 20 44 41 59 20 9A 20 04 CC 49 0D 20 41 4D 20 13 41 47 F6 54 20 \ x19 x09 x1d=MT29 x0e x02 GOOD DAY x13 COMMANDER x04=cmn .x0c x13 I x0d AM x13 AGENT 44 15 AE 1C 12 77 18 11 77 44 19 16 01 16 1B 77 44 A7 03 12 1B B2 10 A1 BE 9B 16 04 77 E4 77 1C B4 00 7B 77 C4 13 42 F9 4B 45 20 4F 46 20 13 4E 41 56 41 4C 20 13 F0 54 45 4C E5 47 F6 E9 CC 41 53 20 B3 20 4B E3 57 2C 20 93 \ x13 BLAKE OF x13 NAVAL x13 INTELLEGENCE.x0c x13 AS' YOU' KNOW,' THE 'x13 44 19 16 01 0E 77 1F 16 AD 77 A0 A1 77 1C 12 12 07 94 C4 13 4E 41 56 59 20 48 41 FA 20 F7 F6 20 4B 45 45 50 C3 93 \x13 NAVY HAVE BEEN KEEP'ING ''THE 44 B5 B9 10 18 1E 13 04 77 18 11 11 77 E4 05 77 16 04 04 77 8E 03 77 A7 13 E2 EE 47 4F 49 44 53 20 4F 46 46 20 B3 52 20 41 53 53 20 D9 54 20 F0 \x13 THARGOIDS OFF 'YOU'R ASS OUT IN 77 13 12 12 07 77 04 07 16 BE 77 11 AA 77 B8 19 0E 77 0E 12 B9 04 77 B4 00 79 20 44 45 45 50 20 53 50 41 E9 20 46 FD 20 EF 4E 59 20 59 45 EE 53 20 E3 57 2E \ DEEP SPACE FOR MANY YEARS NOW 77 44 00 12 1B 1B 77 C4 04 8C 02 16 AC 88 77 1F 16 04 77 14 1F A8 10 AB 20 13 57 45 4C 4C 20 93 53 DB 55 41 FB DF 20 48 41 53 20 43 48 FF 47 FC \ x13 WELL' THE 'SITUATION HAS CHANGED 9B 8E 05 77 15 18 0E 04 77 B9 12 77 A5 16 13 0E 77 11 AA 87 07 02 04 1F CC D9 52 20 42 4F 59 53 20 EE 45 20 F2 41 44 59 20 46 FD D0 50 55 53 48 \ .x0c x13 OUR BOYS ARE READY FOR' A 'PUSH 77 05 1E 10 1F 03 9E C4 1F 18 1A 12 77 04 0E 04 03 12 1A 77 18 11 77 B5 18 8D 77 1A 18 B5 A3 04 20 52 49 47 48 54 C9 93 48 4F 4D 45 20 53 59 53 54 45 4D 20 4F 46 20 E2 4F DA 20 4D 4F E2 F4 53 \ RIGHT' TO ''THE 'HOME SYSTEM OF THOSE MOTHERS 9B 4F 5E 4A 1E 5A 77 1F 16 AD 77 18 15 03 16 A7 93 C4 13 12 11 A1 BE CC 18 09 1D 49 0D 20 48 41 FA 20 4F 42 54 41 F0 C4 93 44 45 46 F6 E9 \ .x0c x13 x18=pause2 x09 x1d=MT29=indent, I x0d HAVE OBTAIN'ED ''THE 'DEFENCE 77 07 AE 19 04 77 11 AA 77 B5 12 1E 05 77 44 1F 1E AD 77 44 00 AA 1B 13 04 20 50 F9 4E 53 20 46 FD 20 E2 45 49 52 20 13 48 49 FA 20 13 57 FD 4C 44 53 \ PLANS FOR THEIR x13 HIVE x13 WORLDS 9B C4 A0 8A B2 04 77 1C B4 00 77 00 12 70 AD 77 10 18 03 77 BC 1A 12 B5 94 15 02 03 77 B4 03 77 00 1F A2 CC 93 F7 DD E5 53 20 4B E3 57 20 57 45 27 FA 20 47 4F 54 20 EB 4D 45 E2 C3 42 55 54 20 E3 54 20 57 48 F5 \ .x0c x13 'THE 'BEETLES KNOW WE'VE GOT SOMETH'ING 'BUT NOT WHAT 9B 1E 11 77 44 1E 77 03 AF 19 04 1A 8C 77 C4 07 AE 19 04 9E 8E 05 77 15 16 8D 77 88 77 44 CC 49 46 20 13 49 20 54 F8 4E 53 4D DB 20 93 50 F9 4E 53 C9 D9 52 20 42 41 DA 20 DF 20 13 \ .x0C x13 IF x13 I TRANSMIT 'THE 'PLANS' TO 'OUR BASE ON x13 BD A5 AF 77 B5 12 0E 70 1B 1B 77 A7 03 A3 BE 07 03 77 C4 03 05 A8 04 1A 1E 04 04 1E 88 79 77 44 EA F2 F8 20 E2 45 59 27 4C 4C 20 F0 54 F4 E9 50 54 20 93 54 52 FF 53 4D 49 53 53 49 DF 2E 20 13 \ BIRERA THEY'LL INTERCEPT 'THE 'TRANSMISSION. x13 1E 77 19 12 AB 87 98 9E B8 1C 12 77 C4 05 02 19 9B E4 70 A5 77 12 B2 14 03 AB 49 20 4E 45 FC D0 CF C9 EF 4B 45 20 93 52 55 4E CC B3 27 F2 20 45 E5 43 54 FC \ I NEED' A ''SHIP'' TO 'MAKE 'THE 'RUN.x0C x13 YOU'RE ELECTED 9B C4 07 AE 19 04 77 16 A5 77 02 19 1E 07 02 1B 8D 77 14 18 13 93 00 1E B5 A7 CC 93 50 F9 4E 53 20 41 F2 20 55 4E 49 50 55 4C DA 20 43 4F 44 C4 57 49 E2 F0 \.x0C x13'THE 'PLANS ARE UNIPULSE COD'ED 'WITHIN 77 C3 03 05 A8 04 1A 1E 04 04 1E 88 9B 5F E4 77 00 8B 1B 77 A0 77 07 16 1E 13 20 94 54 52 FF 53 4D 49 53 53 49 DF CC 08 B3 20 57 DC 4C 20 F7 20 50 41 49 44 \ THIS TRANSMISSION.x0C x13x08 'YOU' WILL BE PAID 9B 77 77 77 77 44 10 18 18 13 77 1B 02 14 1C 77 CD 83 4F 57 CC 20 20 20 20 13 47 4F 4F 44 20 4C 55 43 4B 20 9A D4 18 00 \.x0C x13 ' ' x13 GOOD LUCK x13 COMMANDER MESSAGE ENDS x18 = pause2 // DE token on later visits 'ST' 4E 5E 4A 5F 59 5A 44 00 12 1B 1B 77 13 88 12 77 CD 19 09 1D 08 0E 0D 13 57 45 4C 4C 20 44 DF 45 20 9A \ x0e=buffer x0d x13 WELL DONE x13 COMMANDER 9B E4 77 1F 16 AD 77 8D 05 01 93 02 04 77 00 12 1B 1B E5 00 12 77 04 1F B3 1B 77 A5 1A 12 1A 15 A3 CC B3 20 48 41 FA 20 DA 52 56 C4 55 53 20 57 45 4C 4C B2 57 45 20 53 48 E4 4C 20 F2 4D 45 4D 42 F4 \.x0C x13 'YOU' HAVE SERV'ED 'US WELL' AND 'WE SHALL REMEMBER 9B 00 12 77 13 1E 13 77 B4 03 77 12 0F 07 12 14 03 77 C4 44 B5 B9 10 18 1E 13 04 9E 11 A7 13 CC 57 45 20 44 49 44 20 E3 54 20 45 58 50 45 43 54 20 93 13 E2 EE 47 4F 49 44 53 C9 46 F0 44 \.x0C x13 WE DID NOT EXPECT 'THE 'x13 THARGOIDS' TO 'FIND 77 8E 03 77 16 15 8E 03 77 E4 9B 11 AA 77 C4 1A 18 1A A1 03 77 07 B2 16 8D 77 16 14 BE 07 03 77 20 D9 54 20 41 42 D9 54 20 B3 CC 46 FD 20 93 4D 4F 4D F6 54 20 50 E5 41 DA 20 41 43 E9 50 54 20 \ 41 42 -> D8 \ OUT ABOUT 'YOU'.x0C x13 FOR 'THE 'MOMENT PLEASE ACCEPT C3 44 19 16 01 0E 77 51 25 52 77 16 04 77 07 16 0E 1A A1 03 83 4F 57 94 13 4E 41 56 59 20 06 72 05 20 41 53 20 50 41 59 4D F6 54 D4 18 00 \' THIS 'x13 NAVY x6 energy unit x5 AS PAYMENT. MESSAGE ENDS x18 = PAUSE2 // DF token on later visits 'ON' 57 00 BRK // E0 'LO' 04 1F A5 00 57 \ X78 Hex9F strange creature noun 1 53 48 F2 57 00 SHREW // E1 'NU' A0 16 89 57 F7 41 DE 00 BEAST // E2 'TH' 15 1E 04 88 57 42 49 53 DF 00 BISON // E3 'NO' end 42 49 -> EA 04 19 16 1C 12 57 53 4E 41 4B 45 00 SNAKE // E4 'AL' start 00 18 1B 11 57 \ fifth choice of X78 57 4F 4C 46 00 WOLF // E5 'LE' B2 18 07 B9 13 57 \ X79 HexA0 strange creature noun 2 E5 4F 50 EE 44 00 LEOPARD // E6 'XE' 14 A2 57 43 F5 00 CAT // E7 'GE' 1A 88 1C 12 0E 57 4D DF 4B 45 59 00 MONKEY // E8 'ZA' 10 18 A2 57 47 4F F5 00 GOAT // E9 'CE' 11 1E 04 1F 57 \ fifth choice of x79 46 49 53 48 00 FISH // EA 'BI' 3D 77 3E 57 \ X7a HexA1 near top-level aspect of planet. drinks. 6A 20 69 00 x6a x69 // EB 'SO' 46 77 2F 77 2C 57 \ x11 = HexB1 planet name-ian animal food 11 20 78 20 7B 00 x11 x78 x7b // EC 'US' F8 3C 77 2E 77 2C 57 \ strange creature food AF 6B 20 79 20 7B 00 'ITS 'x6b x79 x7b // ED 'ES' its fabulous its 2B 77 2A 57 \ mud cricket 7C 20 7D 00 x7c x7d // EE 'AR' 3D 77 3E 57 \ fifth choice of X7a drinks again 6A 20 69 00 x6a x69 // EF 'MA' 1A 12 A2 57 \ X7b HexA2 food 4D 45 F5 00 MEAT // F0 'IN' 14 02 03 1B 8A 57 43 55 54 4C DD 00 CUTLET // F1 'DI' 89 12 16 1C 57 DE 45 41 4B 00 STEAK // F2 'RE' 15 02 05 10 A3 04 57 42 55 52 47 F4 53 00 BURGERS // F3 'A?' BC 02 07 57 \ fifth choice of X7b EB 55 50 00 SOUP // F4 'ER' 1E BE 57 \ X7c HexA3 sport adjective 49 E9 00 ICE // F5 'AT' 1A 02 13 57 4D 55 44 00 MUD // F6 'EN' 0D A3 18 7A 44 10 57 \ x13= MT19=Upper case for one letter 5A F4 4F 2D 13 47 00 ZERO-x13G // F7 'BE' 01 16 14 02 02 1A 57 56 41 43 55 55 4D 00 VACUUM // F8 'RA' 46 77 02 1B 03 AF 57 \ fifth choice of X7c 11 20 55 4C 54 F8 00 x11 ULTRA // F9 'LA' 1F 18 14 1C 12 0E 57 \ X7d HexA4 sport noun 48 4F 43 4B 45 59 00 HOCKEY // FA 'VE' 14 05 1E 14 1C 8A 57 43 52 49 43 4B DD 00 CRICKET // FB 'TI' 1C B9 A2 12 57 4B EE F5 45 00 KARATE // FC 'ED' 07 18 B7 57 50 4F E0 00 POLO // FD 'OR' 03 A1 19 1E 04 57 \ fifth choice of X7d 54 F6 4E 49 53 00 TENNIS // FE 'QU' 57 \ #VE \ last TKN1 token 00 \ used for EOR above. // FF 255 'AN' \ +++++ Onto the running mission tokens ++++++ .RUPLA \ -> &5339 \ 25 planet numbers, 25 galaxies numbers, then 25 strings. Start check at 25-1 D3 96 24 1C \ planet #211 [Teorge] cloning, #150 [Xeer], #36 [Reesdice], #28 [Arexe] FD 4F 35 76 64 \ .. planet #100 elite II 20 44 A4 DC 6A 10 A2 03 6B 1A C0 B8 05 65 \ .. planet #101 too far C1 29 \ .. planet #41 aviator. Last is RUPLA,24 .RUGAL \ -> &5352 \ 25 galaxies bit7 set doesn't need mission running 80 00 00 00 \ Cloning galaxy 1, Constrictor Galaxy 1. 01 01 01 01 82 \ Contrictor in galaxy 2, Galaxy 3 coming soon. 01 01 01 01 01 01 01 01 \ Galaxy 2 01 01 01 01 01 02 \ .. Galaxy 3 too far for mission 01 82 \ .. Galaxy 3 aviator .RUTOK \ -> &536B \ RU tokens 57 \ #VE 00 \ used for EOR below C4 14 18 B7 19 1E 89 04 77 1F 12 A5 77 1F 16 AD 77 01 1E 18 1B A2 AB 55 93 43 4F E0 4E 49 DE 53 20 48 45 F2 20 48 41 FA 20 56 49 4F 4C F5 FC 02 \'THE 'COLONISTS HERE HAVE VIOLATED x02 77 A7 03 A3 10 B3 16 14 AC 14 77 14 B7 19 94 07 05 18 03 18 14 18 1B 5A 20 F0 54 F4 47 E4 41 43 FB 43 20 43 E0 4E C3 50 52 4F 54 4F 43 4F 4C 0D \INTERGALACTIC CLON'ING 'PROTOCOL x0d = all lower case E5 04 1F 8E 1B 13 77 A0 77 16 01 18 1E 13 AB 57 B2 53 48 D9 4C 44 20 F7 20 41 56 4F 49 44 FC 00 \ ' AND 'SHOULD BE AVOIDED // RU 1 of 25 @Teorge C4 14 88 89 05 1E 14 03 AA 77 9C A5 BA A6 BE 7B 77 CD 57 93 43 DF DE 52 49 43 54 FD 20 CB F2 ED F1 E9 2C 20 9A 00 \'THE 'CONSTRICTOR 'WAS LAST SEEN AT 'REESDICE,x13COMMANDER // RU 2 of 25 @Xeer 16 77 25 77 B7 18 1C 94 98 77 B2 11 03 77 1F 12 A5 87 00 1F 1E B2 77 15 16 14 1C 79 41 20 72 20 E0 4F 4B C3 CF 20 E5 46 54 20 48 45 F2 D0 57 48 49 E5 20 42 41 43 4B 2E \A x72=wierd choices LOOK'ING ''SHIP 'LEFT HERE' A 'WHILE BACK. 77 1B 18 18 1C 93 15 8E 19 13 77 11 AA 77 B9 12 B1 57 20 4C 4F 4F 4B C4 42 D9 4E 44 20 46 FD 20 EE 45 E6 00 / 4C 4F -> E0 \ LOOK'ED 'BOUND FOR AREXE // RU 3 of 25 @Reesdice 0E 12 07 7B 87 25 85 98 77 1F 16 13 87 10 B3 16 14 AC 14 77 1F 0E 07 A3 13 05 1E AD 59 45 50 2C D0 72 D2 CF 20 48 41 44 D0 47 E4 41 43 FB 43 20 48 59 50 F4 44 52 49 FA \YEP,' A 'x72=wierd choice ' NEW ''SHIP 'HAD' A 'GALACTIC HYPERDRIVE 77 11 8C 03 93 1F 12 A5 79 77 BB 93 8C 77 03 18 18 57 20 46 DB 54 C4 48 45 F2 2E 20 EC C4 DB 20 54 4F 4F 00 \ FITT'ED 'HERE. US'ED 'IT TOO // RU 4 of 25 @Arexe C3 77 25 77 98 77 13 12 1F 0E 07 93 1F 12 A5 77 11 05 18 1A 77 B4 00 1F 12 A5 7B 94 20 72 20 CF 20 44 45 48 59 50 C4 48 45 F2 20 46 52 4F 4D 20 E3 57 48 45 F2 2C \'THIS 'x72=wierd choice 'SHIP 'DEHYP'ED 'HERE FROM NOWHERE, 77 04 02 19 77 04 1C 1E 1A 1A AB E5 1D 02 1A 07 AB 79 77 1E 77 1F 12 B9 77 8C 77 00 A1 03 9E A7 BD A0 57 20 53 55 4E 20 53 4B 49 4D 4D FC B2 4A 55 4D 50 FC 2E 20 49 20 48 45 EE 20 DB 20 57 F6 54 C9 F0 EA F7 00 \ SUN SKIMMED' AND 'JUMPED. I HEAR IT WENT ' TO 'INBIBE // RU 5 of 25 now in Gal2 24 77 98 77 00 A1 03 77 11 AA 77 1A 12 77 A2 77 16 BB B9 79 77 1A 0E 77 AE 04 A3 04 73 20 CF 20 57 F6 54 20 46 FD 20 4D 45 20 F5 20 41 EC EE 2E 20 4D 59 20 F9 53 F4 53 \x73=rouge choice 'SHIP 'WENT FOR ME AT AUSAR. MY LASERS 77 13 1E 13 19 70 03 77 12 01 A1 77 04 14 AF 03 14 1F 77 C4 24 57 20 44 49 44 4E 27 54 20 45 56 F6 20 53 43 F8 54 43 48 20 93 73 00 / 44 49 -> F1 in Elite-A \ DIDN'T .. SCRATCH' THE 'x73=rouge choices // RU 6 of 25 @Errius in Gal2 18 1F 77 13 12 B9 77 1A 12 77 0E BA 79 87 11 05 1E 10 1F 03 11 02 1B 77 05 18 10 02 12 77 00 1E B5 77 00 1F A2 77 1E 4F 48 20 44 45 EE 20 4D 45 20 59 ED 2E D0 46 52 49 47 48 54 46 55 4C 20 52 4F 47 55 45 20 57 49 E2 20 57 48 F5 20 49 \OH DEAR ME YES.' A 'FRIGHTFUL ROGUE WITH WHAT I 77 A0 1B 1E 12 AD 77 E4 77 07 12 18 07 B2 77 14 B3 1B 87 B2 16 13 77 07 18 89 A3 1E AA 77 04 1F 18 03 77 02 07 77 B7 03 04 20 F7 4C 49 45 FA 20 B3 20 50 45 4F 50 E5 20 43 E4 4C D0 E5 41 44 20 50 4F DE F4 49 FD 20 53 48 4F 54 20 55 50 20 E0 54 53 \ BELIEVE' YOU 'PEOPLE CALL' A 'LEAD POSTERIOR SHOT UP LOTS 77 18 11 77 B5 18 8D 77 A0 16 89 1B 0E 77 07 1E AF 03 BA E5 00 A1 03 9E BB B2 05 1E 57 20 4F 46 20 E2 4F DA 20 F7 41 DE 4C 59 20 50 49 F8 54 ED B2 57 F6 54 C9 EC E5 52 49 00 \ OF THOSE BEASTLY PIRATES' AND 'WENT ' TO ' USLERI // RU 7 of 25 @Inbibe in Gal2 E4 77 14 A8 77 03 16 14 1C B2 77 C4 3F 77 24 77 1E 11 77 E4 77 1B 1E 1C 12 79 77 B3 20 43 FF 20 54 41 43 4B E5 20 93 68 20 73 20 49 46 20 B3 20 4C 49 4B 45 2E 20 \ 'YOU' CAN TACKLE 'THE 'x68 x73 IF 'YOU' LIKE. / x68=life-threatening choices x73=rouge choices 1F 12 70 04 77 A2 77 AA B9 AF 57 48 45 27 53 20 F5 20 FD EE F8 00 \ HE'S AT ORARRA // RU 8 of 25 @Ausar in Gal2 56 14 18 1A 94 BC 88 6D 77 12 1B 8C 12 77 1E 1E 57 01 43 4F 4D C3 EB DF 3A 20 45 4C DB 45 20 49 49 00 // RU 9 of 25 in Gal3 \ x01 COM'ING 'SOON: ELITE II 23 57 23 57 23 57 23 57 23 57 23 57 23 57 23 57 23 57 23 57 23 57 23 57 23 57 74 00 74 00 74 00 74 00 74 00 74 00 74 00 74 00 74 00 74 00 74 00 74 00 74 00 \ 13 places to give 1of5 x74= try ERRIUS choices in Galaxy 2 (32,1) // RU 10 to RU 22 of 25 15 18 0E 77 16 A5 77 E4 77 A7 77 C4 00 05 88 10 77 10 B3 16 0F 0E 76 57 42 4F 59 20 41 F2 20 B3 20 F0 20 93 57 52 DF 47 20 47 E4 41 58 59 21 00 / too far \ BOY ARE 'YOU' IN 'THE 'WRONG GALAXY! // RU 23 of 25 Gal3 B5 A3 12 70 04 87 A5 B3 77 24 77 07 1E AF 03 12 77 8E 03 77 B5 A3 12 57 E2 F4 45 27 53 D0 F2 E4 20 73 20 50 49 F8 54 45 20 D9 54 20 E2 F4 45 00 // RU 24 of 25 @Orrara in Gal2 \ THERE'S' A 'REAL x73= 5rouge choices PIRATE OUT THERE C4 96 04 77 18 11 77 3A 77 16 A5 77 BC 77 16 B8 0D A7 10 1B 0E 93 C1 53 20 4F 46 20 6D 20 41 F2 20 EB 20 41 EF 5A F0 47 4C 59 \ THE 'INHABITANTS OF x6d= planet choice for this planet name ARE SO AMAZINGLY 77 07 05 1E 1A 1E AC AD 77 B5 A2 77 B5 12 0E 77 89 8B 1B 77 B5 A7 1C 20 50 52 49 4D 49 FB FA 20 E2 F5 20 E2 45 59 20 DE DC 4C 20 E2 F0 4B \ PRIMITIVE THAT THEY STILL THINK 77 44 16 7D 7D 7D 7D 7D 05 9D 16 77 07 A5 03 03 0E 77 19 12 A2 77 10 16 1A 12 57 / aviator 20 13 41 2A 2A 2A 2A 2A 52 CA 41 20 50 F2 54 54 59 20 4E 45 F5 20 47 41 4D 45 00 // RU 25 of 25 in Gal3 \ x13A*****R' IS 'A PRETTY NEAT GAME \ ++ All Tokens done. No need for eor'd with #&57 anymore ++ \ (MTIN-&5B,original A)+0to4 \ lowest hex block is 5B (ie Z is 5A) .MTIN \ -> &55C0 in block A. Table used for 5choices. 10 15 1A 1F 9B A0 2E A5 build offsets in steps in 5 \5B 5C 5D 5E 5F 60 61 62 called with these indicies, tokens above 'Z'. 24 29 3D 33 38 AA 42 47 build offsets in steps in 5 \63 64 65 66 67 68 69 6A called with these indicies, tokens above 'Z'. 4C 51 56 8C 60 65 87 82 build offsets in steps in 5 \6B 6C 6D 6E 6F 70 71 72 called with these indicies, tokens above 'Z'. 5B 6A B4 B9 BE E1 E6 EB build offsets in steps in 5 \73 74 75 76 77 78 79 7A called with these indicies, tokens above 'Z'. F0 F5 FA 73 78 7D build offsets in steps in 5 \7B 7C 7D 7E 7F 80 called with these indicies, tokens above 'Z'. 45 4E 44 2D 45 4E 44 2D 45 4E 44 EQUS "END-END-END" 8E 13 1C 00 00 73 56 52 49 53 00 8E 13 34 B3 \ ++++++++++++++ Elite BBC Disc Docked has its own set of Ship hulls for hanger scene and title pages ++++ .XX21 \ -> &5600 \ Hull Data start 00 7F \ EQUW &7F00 \ type 1 is #MSL, pointer is last page below screen RAM. 00 00 \ EQUW 0 \ type 2 is #SST, space station not present. 00 00 \ EQUW 0 \ type 3 is #ESC, pod not present 00 00 \ EQUW 0 5D 56 \ EQUW &565D \ type 5 is #OIL, pointer to after NEWB array 00 00 \ EQUW 0 \ type 6 00 00 \ EQUW 0 \ type 7 is #AST, asteroid not present 00 00 \ EQUW 0 05 57 \ EQUW &5705 \ type 9 is #SHU, shuttle NEWB = &21 (inno, trader) 37 58 \ EQUW &5837 \ type 10 is Transporter (this and above (except SST) cant get angry) NEWB &61 19 5A \ EQUW &5A19 \ type 11 is #CYL, Cobra Mk3 NEWB = &A0 (escpod, inno) A1 5B \ EQUW &5BA1 \ type 12 is Python NEWB = &A0 00 00 \ EQUW 0 00 00 \ EQUW 0 00 00 \ EQUW 0 93 5C \ EQUW &5C93 \ type 16 is #COPS,Police ship Viper NEWB = &C2 (escpod,cop,hunter) 00 00 \ EQUW 0 00 00 \ EQUW 0 6D 5D \ EQUW &5D6D \ type 19 is #KRA, Krait. 2nd ship NEWB = &8C (escpod,pirate,angry) 00 00 \ EQUW 0 \ type 20 is #ADA, Adder 00 00 \ EQUW 0 \ type 21 00 00 \ EQUW 0 00 00 \ EQUW 0 00 00 \ EQUW 0 \ type 24 is #CYL2,Cobra Mk3 Last strong pirate 00 00 \ EQUW 0 \ type 25 is #ASP, Asp Mk II 00 00 \ EQUW 0 \ type 26 is #FER, Fer de Lance 00 00 \ EQUW 0 00 00 \ EQUW 0 \ type 28 is Last of three bounty hunters 00 00 \ EQUW 0 \ type 29 is #THG, Thargoid 00 00 \ EQUW 0 \ type 30 is #TGL, Thargon 53 5E \ EQUW &5E53 \ type 31 is #CON, Constrictor is present for mission briefing .E% \ -> &563E \ Hull NEWB bits are escpod, cop, inno, ?, pirate, angry, hunter, trader. 00 00 00 00 \ EQUD 0 \ 1 2 3 4 for NEWB 00 00 00 00 \ EQUD 0 \ 5 6 7 8 for NEWB 21 61 A0 A0 \ EQUD &A0A06121 \ 9 10 11 12 for NEWB 00 00 00 C2 \ EQUD &C2000000 \ 13 14 15 16 for NEWB 00 00 8C 00 \ EQUD &008C0000 \ 17 18 19 20 for NEWB 00 00 00 00 \ EQUD 0 \ 21 22 23 24 for NEWB 00 00 00 00 \ EQUD 0 \ 25 26 27 28 for NEWB 00 00 8C \ EQUW 0: EQUB &8C \ 29 30 31 for NEWB \ -> &565D \ Start Hull Data. For each hull, first 20 bytes give header info. \ hull byte#0 high nibble is scoop info, lower nibble is debris spin info \ hull byte#1-2 area for missile lock, lo, hi \ hull byte#3 edges data info offset lo \ hull byte#4 faces data info offset lo \ hull byte#5 4*maxlines+1 for ship lines stack \ hull byte#6 gun vertex*4 \ hull byte#7 explosion count e.g. &2A = 4*n+6 \ hull byte#8 vertices*6 \ hull bytes#10-11 bounty lo hi \ hull byte#12 faces*4 \ hull byte#13 dot beyond distance \ hull byte#14 energy \ hull byte#15 speed (end of 4th row) \ hull byte#16 edges offset hi (goes -ve to use other's edge net). \ hull byte#17 faces offset hi \ hull byte#18 Q% scaling of normals to make large objects' normals flare out further away \ hull bute#19 laser|missile(=lower 3 bits) \ -> &565D \ Cargo cannister = Type 5 00 90 01 50 \ Cargo Cannister hull data header info 8C 31 00 12 3C 0F 00 00 \ 10 vertices 6*10=&3C 15 edges, bounty = 0 (when docked) 1C 0C 11 0F 00 00 02 00 \ cargo vertices data 18 10 00 1F 10 55 18 05 0F 1F 10 22 18 0D 09 5F 20 33 18 0D 09 7F 30 44 18 05 0F 3F 40 55 \ end of left pentagon 18 10 00 9F 51 66 \ start of right pentagon 18 05 0F 9F 21 66 18 0D 09 DF 32 66 18 0D 09 FF 43 66 18 05 0F BF 54 66 \ cargo edges data 1F 10 00 04 1F 20 04 08 1F 30 08 0C 1F 40 0C 10 1F 50 00 10 1F 51 00 14 1F 21 04 18 1F 32 08 1C 1F 43 0C 20 1F 54 10 24 1F 61 14 18 1F 62 18 1C 1F 63 1C 20 1F 64 20 24 1F 65 24 14 \ cargo normals data 1F 60 00 00 1F 00 29 1E 5F 00 12 30 5F 00 33 00 7F 00 12 30 3F 00 29 1E 9F 60 00 00 \ end Cargo cannister \ -> &5705 \ Shuttle = Type 9 0F C4 09 86 \ Shuttle hull data header info FE 6D 00 26 72 1E 00 00 \ 19 vertices 6*19 = &72 34 16 20 08 00 00 02 00 \ Shuttle vertices data 00 23 2F 5F FF FF 23 00 2F 9F FF FF 00 23 2F 1F FF FF 23 00 2F 1F FF FF 28 28 35 FF 12 39 28 28 35 BF 34 59 28 28 35 3F 56 79 28 28 35 7F 17 89 0A 00 35 30 99 99 00 05 35 70 99 99 0A 00 35 A8 99 99 00 05 35 28 99 99 00 11 47 50 0A BC 05 02 3D 46 FF 02 07 17 31 07 01 F4 15 09 31 07 A1 3F 05 02 3D C6 6B 23 07 17 31 87 F8 C0 15 09 31 87 4F 18 \ Shuttle edges and face data 1F 02 00 04 1F 4A 04 08 1F 6B 08 0C 1F 8C 00 0C 1F 18 00 1C 18 12 00 10 1F 23 04 10 18 34 04 14 1F 45 08 14 0C 56 08 18 1F 67 0C 18 18 78 0C 1C 1F 39 10 14 1F 59 14 18 1F 79 18 1C 1F 19 10 1C 10 0C 00 30 10 0A 04 30 10 AB 08 30 10 BC 0C 30 10 99 20 24 06 99 24 28 08 99 28 2C 06 99 20 2C 04 BB 34 38 07 BB 38 3C 06 BB 34 3C 04 AA 40 44 07 AA 44 48 06 AA 40 48 DF 6E 6E 50 5F 00 95 07 DF 66 66 2E 9F 95 00 07 9F 66 66 2E 1F 00 95 07 1F 66 66 2E 1F 95 00 07 5F 66 66 2E 3F 00 00 D5 9F 51 51 B1 1F 51 51 B1 5F 6E 6E 50 \ End of shuttle \ -> &5837 \ Transport = Type 10 00 C4 09 F2 \ Transporter hull data header info AA 91 30 1A DE 2E 00 00 \ 37 vertices 6*37 = &DE 38 10 20 0A 00 01 01 00 \ Transport vertices data 00 13 33 3F 06 77 33 07 33 BF 01 77 39 07 33 FF 01 22 33 11 33 FF 02 33 33 11 33 7F 03 44 39 07 33 7F 04 55 33 07 33 3F 05 66 00 0C 18 12 FF FF 3C 02 18 DF 17 89 42 11 18 DF 12 39 42 11 18 5F 34 5A 3C 02 18 5F 56 AB 16 05 3D DF 89 CD 1B 11 3D DF 39 DD 1B 11 3D 5F 3A DD 16 05 3D 5F AB CD 0A 0B 05 86 77 77 24 05 05 86 77 77 0A 0D 0E A6 77 77 24 07 0E A6 77 77 17 0C 1D A6 77 77 17 0A 0E A6 77 77 0A 0F 1D 26 66 66 24 09 1D 26 66 66 17 0A 0E 26 66 66 0A 0C 06 26 66 66 24 06 06 26 66 66 17 07 10 06 66 66 17 09 06 26 66 66 21 11 1A E5 33 33 21 11 21 C5 33 33 21 11 1A 65 33 33 21 11 21 45 33 33 19 06 33 E7 00 00 1A 06 33 67 00 00 11 06 33 24 00 00 11 06 33 A4 00 00 \ Transporter edges and faces data 1F 07 00 04 1F 01 04 08 1F 02 08 0C 1F 03 0C 10 1F 04 10 14 1F 05 14 18 1F 06 00 18 0F 67 00 1C 1F 17 04 20 0A 12 08 24 1F 23 0C 24 1F 34 10 28 0A 45 14 28 1F 56 18 2C 10 78 1C 20 10 19 20 24 10 5A 28 2C 10 6B 1C 2C 12 BC 1C 3C 12 8C 1C 30 10 89 20 30 1F 39 24 34 1F 3A 28 38 10 AB 2C 3C 1F 9D 30 34 1F 3D 34 38 1F AD 38 3C 1F CD 30 3C 06 77 40 44 06 77 48 4C \ I.B. on roof 06 77 4C 50 06 77 48 50 06 77 50 54 06 66 58 5C 06 66 5C 60 06 66 60 58 \ D.B. on roof 06 66 64 68 06 66 68 6C 06 66 64 6C 06 66 6C 70 05 33 74 78 05 33 7C 80 \ skids 07 00 84 88 04 00 88 8C \ thruster 04 00 8C 90 04 00 90 84 \ end of transporter edges 3F 00 00 67 BF 6F 30 07 FF 69 3F 15 5F 00 22 00 7F 69 3F 15 3F 6F 30 07 1F 08 20 03 9F 08 20 03 92 08 22 0B 9F 4B 20 4F 1F 4B 20 4F 12 08 22 0B 1F 00 26 11 1F 00 00 79 \ end of Transporter \ -> &5A19 \ Cobra Mk 3 = Type 11 03 41 23 BC \ Cobra Mk3 hull data header info 54 99 54 2A A8 26 00 00 \ 28 vertices 6*28 = &A8, bounty = 0 34 32 96 1C 00 01 01 13 \ missiles = 3 \ Cobra Mk3 vertices data 20 00 4C 1F FF FF 20 00 4C 9F FF FF 00 1A 18 1F FF FF 78 03 08 FF 73 AA 78 03 08 7F 84 CC 58 10 28 BF FF FF 58 10 28 3F FF FF 80 08 28 7F 98 CC 80 08 28 FF 97 AA 00 1A 28 3F 65 99 20 18 28 FF A9 BB 20 18 28 7F B9 CC 24 08 28 B4 99 99 08 0C 28 B4 99 99 08 0C 28 34 99 99 24 08 28 34 99 99 24 0C 28 74 99 99 08 10 28 74 99 99 08 10 28 F4 99 99 24 0C 28 F4 99 99 00 00 4C 06 B0 BB 00 00 5A 1F B0 BB 50 06 28 E8 99 99 50 06 28 A8 99 99 58 00 28 A6 99 99 50 06 28 28 99 99 58 00 28 26 99 99 50 06 28 68 99 99 \ Cobra Mk3 edges data 1F B0 00 04 1F C4 00 10 1F A3 04 0C 1F A7 0C 20 1F C8 10 1C 1F 98 18 1C 1F 96 18 24 1F 95 14 24 1F 97 14 20 1F 51 08 14 1F 62 08 18 1F 73 0C 14 1F 84 10 18 1F 10 04 08 1F 20 00 08 1F A9 20 28 1F B9 28 2C 1F C9 1C 2C 1F BA 04 28 1F CB 00 2C 1D 31 04 14 1D 42 00 18 06 B0 50 54 14 99 30 34 14 99 48 4C 14 99 38 3C 14 99 40 44 13 99 3C 40 11 99 38 44 13 99 34 48 13 99 30 4C 1E 65 08 24 06 99 58 60 06 99 5C 60 08 99 58 5C 06 99 64 68 06 99 68 6C 08 99 64 6C \ Cobra M3 faces data 1F 00 3E 1F 9F 12 37 10 \ start normals #0 = top front plate of Cobra Mk III 1F 12 37 10 9F 10 34 0E 1F 10 34 0E 9F 0E 2F 00 1F 0E 2F 00 9F 3D 66 00 1F 3D 66 00 3F 00 00 50 DF 07 2A 09 5F 00 1E 06 5F 07 2A 09 \ end of Cobra Mk III \ -> &5BA1 \ Python = Type 12 05 00 19 56 \ Python hull data header info BE 55 00 2A 42 1A 00 00 \ 11 vertices 6*11 = &42 34 28 FA 14 00 00 00 1B \ 00011 011 3 missiles \ Python vertices data 00 00 E0 1F 10 32 00 30 30 1E 10 54 60 00 10 3F FF FF 60 00 10 BF FF FF 00 30 20 3E 54 98 00 18 70 3F 89 CC 30 00 70 BF B8 CC 30 00 70 3F A9 CC 00 30 30 5E 32 76 00 30 20 7E 76 BA 00 18 70 7E BA CC \ Python edges and face data 1E 32 00 20 1F 20 00 0C 1F 31 00 08 1E 10 00 04 1D 59 08 10 1D 51 04 08 1D 37 08 20 1D 40 04 0C 1D 62 0C 20 1D A7 08 24 1D 84 0C 10 1D B6 0C 24 05 88 0C 14 05 BB 0C 28 05 99 08 14 05 AA 08 28 1F A9 08 1C 1F B8 0C 18 1F C8 14 18 1F C9 14 1C 1D AC 1C 28 1D CB 18 28 1D 98 10 14 1D BA 24 28 1D 54 04 10 1D 76 20 24 9E 1B 28 0B 1E 1B 28 0B DE 1B 28 0B 5E 1B 28 0B 9E 13 26 00 1E 13 26 00 DE 13 26 00 5E 13 26 00 BE 19 25 0B 3E 19 25 0B 7E 19 25 0B FE 19 25 0B 3E 00 00 70 \ end of Python \ -> &5C93 \ Viper = Type 16 00 F9 15 6E \ Viper hull data header info BE 4D 00 2A 5A 14 00 00 \ 15 vertices 6*15 = &5A 1C 17 64 20 00 00 01 11 \ Viper vertices data 00 00 48 1F 21 43 00 10 18 1E 10 22 00 10 18 5E 43 55 30 00 18 3F 42 66 30 00 18 BF 31 66 18 10 18 7E 54 66 18 10 18 FE 35 66 18 10 18 3F 20 66 18 10 18 BF 10 66 20 00 18 B3 66 66 20 00 18 33 66 66 08 08 18 33 66 66 08 08 18 B3 66 66 08 08 18 F2 66 66 08 08 18 72 66 66 \ Viper edges and face data 1F 42 00 0C 1E 21 00 04 1E 43 00 08 1F 31 00 10 1E 20 04 1C 1E 10 04 20 1E 54 08 14 1E 53 08 18 1F 60 1C 20 1E 65 14 18 1F 61 10 20 1E 63 10 18 1F 62 0C 1C 1E 46 0C 14 13 66 24 30 12 66 24 34 13 66 28 2C 12 66 28 38 10 66 2C 38 10 66 30 34 1F 00 20 00 9F 16 21 0B 1F 16 21 0B DF 16 21 0B 5F 16 21 0B 5F 00 20 00 3F 00 00 30 \ end of Viper \ -> &5D6D \ Krait = Type 19 01 10 0E 7A \ Krait hull data header info CE 55 00 12 66 15 64 00 \ 17 vertices 6*17 = &66 18 14 50 1E 00 00 02 10 \ Q% different, normals different to Elite-A \ Krait vertices data 00 00 60 1F 01 23 00 12 30 3F 03 45 00 12 30 7F 12 45 5A 00 03 3F 01 44 5A 00 03 BF 23 55 5A 00 57 1C 01 11 5A 00 57 9C 23 33 00 05 35 09 00 33 00 07 26 06 00 33 12 07 13 89 33 33 12 07 13 09 00 00 12 0B 27 28 44 44 12 0B 27 68 44 44 24 00 1E 28 44 44 12 0B 27 A8 55 55 12 0B 27 E8 55 55 24 00 1E A8 55 55 \ Krait edges and face data 1F 03 00 04 1F 12 00 08 1F 01 00 0C 1F 23 00 10 1F 35 04 10 1F 25 10 08 1F 14 08 0C 1F 04 0C 04 1C 01 0C 14 1C 23 10 18 05 45 04 08 09 00 1C 28 06 00 20 28 09 33 1C 24 06 33 20 24 08 44 2C 34 08 44 34 30 07 44 30 2C 07 55 38 3C 08 55 3C 40 08 55 40 38 1F 07 30 06 5F 07 30 06 DF 07 30 06 9F 07 30 06 3F 4D 00 9A BF 4D 00 9A \ end of Krait \ -> &5E53 \ Constrictor = Type 31 F3 49 26 7A \ Constrictor hull data header info DA 4D 00 2E 66 18 00 00 \ 17 vertices 6*17 = &66 28 2D C8 37 00 00 02 2F \ Constrictor vertices data 14 07 50 5F 02 99 14 07 50 DF 01 99 36 07 28 DF 14 99 36 07 28 FF 45 89 14 0D 28 BF 56 88 14 0D 28 3F 67 88 36 07 28 7F 37 89 36 07 28 5F 23 99 14 0D 05 1F FF FF 14 0D 05 9F FF FF 14 07 3E 52 99 99 14 07 3E D2 99 99 19 07 19 72 99 99 19 07 19 F2 99 99 0F 07 0F 6A 99 99 0F 07 0F EA 99 99 00 07 00 40 9F 01 \ Constrictor edges and face data 1F 09 00 04 1F 19 04 08 1F 01 04 24 1F 02 00 20 1F 29 00 1C 1F 23 1C 20 1F 14 08 24 1F 49 08 0C 1F 39 18 1C 1F 37 18 20 1F 67 14 20 1F 56 10 24 1F 45 0C 24 1F 58 0C 10 1F 68 10 14 1F 78 14 18 1F 89 0C 18 1F 06 20 24 12 99 28 30 05 99 30 38 0A 99 38 28 0A 99 2C 3C 05 99 34 3C 12 99 2C 34 1F 00 37 0F 9F 18 4B 14 1F 18 4B 14 1F 2C 4B 00 9F 2C 4B 00 9F 2C 4B 00 1F 00 35 00 1F 2C 4B 00 3F 00 00 A0 5F 00 1B 00 \ end of Constrictor &5F55 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 \ End of BBC disc docked = T.CODE \ Page &60 is start of screen \ Page &7F is missile hull data from loader code \ ==============================================================================================\