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