home *** CD-ROM | disk | FTP | other *** search
/ Strange Invasion 1994 February / Strange_Invasion_1994_02_Lausberg_Stefan_Side_D.atr / prtnum.lst < prev    next >
File List  |  2023-02-26  |  7KB  |  1 lines

  1. ¢00010 BASE10_TABLE¢00020          .HX 01000000 1¢00030          .HX 0A000000 10¢00040          .HX 64000000 100¢00050          .HX E8030000 1000¢00060          .HX 10270000 10000¢00070          .HX A0860100 100000¢00080          .HX 40420F00 1000000¢00090          .HX 80969800 10000000¢00100          .HX 00E1F505 100000000¢00110          .HX 00CA9A3B 1000000000¢00120 ------------------------------¢00130 PRTNUM        .HX 00000000 Die auszugebende Zahl¢00140               .HX 00       evtl.ein Minuszeichen¢00150 PRTNUM_ASCII  .BL 15       Zahl als ASCII-String¢00160 PRTNUM_LENGTH .HX 00       Laenge des Strings¢00170 PRTNUM_DIGIT  .HX 00       Eine Ziffer (Hilfsvariable)¢00180 ------------------------------¢00190 ; Tabelle der Eintraege in BASE10_TABLE¢00200 TABLE_ENTRIES .HX 0004080C10¢00210               .HX 14181C2024¢00220 ------------------------------¢00230 PRTNUM_MAIN¢00240          LDA #0            Voreinstellungen¢00250          STA PRTNUM_LENGTH¢00260          LDA #'0¢00270          STA PRTNUM_DIGIT¢00280 .10¢00290 ; Zahl von 10er Potenz abziehen und auf Stack sichern:¢00300          SEC¢00310          LDA PRTNUM¢00320          SBC BASE10_TABLE,Y¢00330          PHA¢00340          LDA PRTNUM+1¢00350          SBC BASE10_TABLE+1,Y¢00360          PHA¢00370          LDA PRTNUM+2¢00380          SBC BASE10_TABLE+2,Y¢00390          PHA¢00400          LDA PRTNUM+3¢00410          SBC BASE10_TABLE+3,Y¢00420          BCC .2            -> Zahl kleiner als 10er Potenz¢00430          STA PRTNUM+3      sonst Zahl uebernehmen¢00440          PLA¢00450          STA PRTNUM+2¢00460          PLA¢00470          STA PRTNUM+1¢00480          PLA¢00490          STA PRTNUM¢00500          INC PRTNUM_DIGIT  und Ziffer um 1 erhoehen¢00510          JMP .10¢00520 .2¢00530          PLA         Zahl vom Stack holen¢00540          PLA¢00550          PLA¢00560          LDA PRTNUM_DIGIT¢00570          CMP #'0          ist die Ziffer eine Null?¢00580          BNE .5           -> Nein¢00590          LDX PRTNUM_LENGTH¢00600          BEQ .6           -> eine fuehrende Null!¢00610 .5¢00620          LDX PRTNUM_LENGTH  sonst Ziffer an Zahl anfuegen¢00630          STA PRTNUM_ASCII,X¢00640          INC PRTNUM_LENGTH¢00650 .6¢00660          LDA #'0            Ziffer neu initialisieren¢00670          STA PRTNUM_DIGIT¢00680          DEY                naechstkleinere 10er Potenz¢00690          DEY¢00700          DEY¢00710          DEY¢00720          BPL .10            sind alle Potenzen durch?¢00730          LDA PRTNUM_LENGTH  ist die Zahl eine 0?¢00740          BNE .3             -> Nein¢00750          LDA #'0            sonst '0' als ASCIIstring¢00760          STA PRTNUM_ASCII¢00770          INC PRTNUM_LENGTH¢00780 .3¢00790          RTS¢00800 ------------------------------¢00810 ; eine positive Zahl ausgeben:¢00820 PRTNUM_POSITIV¢00830          JSR PRTNUM_MAIN    Zahl wandeln¢00840          LDA #PRTNUM_ASCII  Zahl ausgeben¢00850          LDX /PRTNUM_ASCII¢00860          LDY PRTNUM_LENGTH¢00870          STY PRINT_LENGTH¢00880          LDY #0¢00890          STY PRINT_LENGTH+1¢00900          JSR PRINT¢00910          RTS¢00920 ------------------------------¢00930 ; eine negative Zahl ausgeben:¢00940 PRTNUM_NEGATIV¢00950          CLC                2er Komplement der Zahl bilden¢00960          LDA PRTNUM¢00970          EOR #$FF¢00980          ADC #1¢00990          STA PRTNUM¢01000          LDA PRTNUM+1¢01010          EOR #$FF¢01020          ADC #0¢01030          STA PRTNUM+1¢01040          LDA PRTNUM+2¢01050          EOR #$FF¢01060          ADC #0¢01070          STA PRTNUM+2¢01080          LDA PRTNUM+3¢01090          EOR #$FF¢01100          ADC #0¢01110          STA PRTNUM+3¢01120          JSR PRTNUM_MAIN     Zahl wandeln¢01130          LDA #'-             Minuszeichen davor¢01140          STA PRTNUM_ASCII-1¢01150          LDA #PRTNUM_ASCII-1 Zahl samt Minuszeichen ausgeben¢01160          LDX /PRTNUM_ASCII-1¢01170          LDY PRTNUM_LENGTH¢01180          INY¢01190          STY PRINT_LENGTH¢01200          LDY #0¢01210          STY PRINT_LENGTH+1¢01220          JSR PRINT¢01230          RTS¢01240 ------------------------------¢01250 PRTNUM8¢01260          STA PRTNUM          1 Byte gilt¢01270          LDA #0              alle anderen sind Nullen¢01280          STA PRTNUM+1¢01290          STA PRTNUM+2¢01300          STA PRTNUM+3¢01310          LDY TABLE_ENTRIES+2 ab 10^2=100¢01320          JMP PRTNUM_POSITIV  Zahl ist nach Definition positiv¢01330 ------------------------------¢01340 PRTNUM8S¢01350          CMP #$80            Ist Zahl negativ?¢01360          BCS .1              -> Ja!¢01370          JMP PRTNUM8         Sonst die normale Routine verwenden¢01380 .1¢01390          STA PRTNUM¢01400          LDA #$FF            Die 3 anderen Bytes auf $FF setzen¢01410          STA PRTNUM+1¢01420          STA PRTNUM+2¢01430          STA PRTNUM+3¢01440          LDY TABLE_ENTRIES+2¢01450          JMP PRTNUM_NEGATIV¢01460 ------------------------------¢01470 PRTNUM16¢01480          STA PRTNUM       Dasselbe (fast) nochmal¢01490          STX PRTNUM+1     aber diesmal 2 geltende Bytes¢01500          LDA #0¢01510          STA PRTNUM+2¢01520          STA PRTNUM+3¢01530          LDY TABLE_ENTRIES+4 ab 10^4 = 10000¢01540          JMP PRTNUM_POSITIV¢01550 ------------------------------¢01560 PRTNUM16S¢01570          CPX #$80         alles nochmal von vorne¢01580          BCS .1¢01590          JMP PRTNUM16¢01600 .1¢01610          STA PRTNUM¢01620          STX PRTNUM+1¢01630          LDA #$FF¢01640          STA PRTNUM+2¢01650          STA PRTNUM+3¢01660          LDY TABLE_ENTRIES+4¢01670          JMP PRTNUM_NEGATIV¢01680 ------------------------------¢01690 PRTNUM24¢01700          STA PRTNUM       3 geltende Bytes¢01710          STX PRTNUM+1¢01720          STY PRTNUM+2¢01730          LDA #0¢01740          STA PRTNUM+3¢01750          LDY TABLE_ENTRIES+7 ab 10^7 = 10000000¢01760          JMP PRTNUM_POSITIV¢01770 ------------------------------¢01780 PRTNUM24S¢01790          CPY #$80¢01800          BCS .1¢01810          JMP PRTNUM24¢01820 .1¢01830          STA PRTNUM¢01840          STX PRTNUM+1¢01850          STY PRTNUM+2¢01860          LDA #$FF¢01870          STA PRTNUM+3¢01880          LDY TABLE_ENTRIES+7¢01890          JMP PRTNUM_NEGATIV¢01900 ------------------------------¢01910 ; alle 4 Bytes liegen schon in PRTNUM vor:¢01920 PRTNUM32¢01930          LDY TABLE_ENTRIES+9 ab 10^9 = 1000000000¢01940          JMP PRTNUM_POSITIV¢01950 ------------------------------¢01960 PRTNUM32S¢01970          LDY TABLE_ENTRIES+9¢01980          BIT PRTNUM+3¢01990          BMI .1¢02000          JMP PRTNUM_POSITIV¢02010 .1¢02020          JMP PRTNUM_NEGATIV¢02030 ------------------------------¢