Print Decimal, Hex and Binary routines#
00010 .LI OFF 00020 * 00030 * 00040 * 00050 * 00060 * 00070 * 00080 ------------------------------ 00090 * DEZ0: 00100 * Ausgabe einer 16-Bit Zahl mit 00110 * fuehrenden Nullen. 00120 * 00130 * DEZSP: 00140 * Ausgabe einer 16-Bit Zahl 00150 * Ohne fuehrende Nullen. 00160 * 00170 * <A> Register: LO-Byte der Zahl 00180 * <X> Register: HI-Byte der Zahl 00190 * 00200 ------------------------------ 00210 * 00220 * 00230 DEZ0 STA WERT Zahl in 00240 STX WERT+1 Hilfregister 00250 LDA #0 "Null"-Flag 00260 STA FLAG setzen 00270 JMP NUM Ausgabe 00280 * 00290 DEZSP STA WERT Zahl in 00300 STX WERT+1 Hilfsregister 00310 LDA #$80 keine Nullen 00320 STA FLAG 00330 * 00340 NUM LDX #8 5 Stellen 00350 .1 LDA #0 Ziffer=0 00360 STA DIGIT 00370 .2 LDA WERT Zahl- 00380 SEC entsprechender 00390 SBC NTAB,X Zehner- 00400 TAY potenz 00410 LDA WERT+1 00420 SBC NTAB+1,X ist Subtraktion erfolgreich 00430 BCC .3 Nein\^_\^_\^_ 00440 STA WERT+1 Differenz 00450 STY WERT speichern 00460 INC DIGIT Ziffer hochzaehlen 00470 JMP .2 Noch ein Versuch 00480 * 00490 .3 LDA DIGIT Ist Ziffer 00500 BNE .4 ungleich Null, Ja\^_\^_\^_ 00510 CPX #0 Einerstelle erreicht 00520 BEQ .4 Ja, dann Ausgabe 00530 BIT FLAG "Null"-Flag 00540 BMI .5 testen. Negativ, dann Null nicht ausgeben. 00550 .4 ASL FLAG "Null"-Flag aus Ausgabe schieben 00560 ORA #$30 +ASCII "0" 00570 STX HOLD <X> retten 00580 JSR CHAROUT Ziffer ausgeben 00590 LDX HOLD <X> holen 00600 .5 DEX naechste 00610 DEX Ziffer 00620 BPL .1 00630 RTS 00640 * 00650 NTAB .DA 1,10,100,1000,10000 00660 * 00670 ------------------------------ 00680 * 00690 * HEX16: 00700 * Ausgabe einer 16-Bit Zahl in 00710 * hexadezimaler Form. 00720 * 00730 * HEX8: 00740 * Ausgabe einer 8-Bit Zahl in 00750 * hexadezimaler Form. 00760 * 00770 * <A> Register: LO-Byte der Zahl 00780 * <X> Register: HI-Byte der Zahl 00790 * 00800 ------------------------------ 00810 * 00820 HEX16 PHA LO-Byte retten 00830 TXA HI-Byte zuerst ausgeben 00840 JSR HEX8 00850 PLA dann LO-Byte 00860 * 00870 HEX8 PHA Wert retten 00880 LSR erst HI-Nibble 00890 LSR 00900 LSR 00910 LSR 00920 JSR HEX ausgeben 00930 PLA dann 00940 AND #$F LO-Nibble 00950 * 00960 HEX CMP #10 Zahl>=10 00970 BCC .1 Nein\^_\^_\^_ 00980 CLC +7 fuer "A"-"F" 00990 ADC #7 01000 .1 ADC #$30 +ASCII "0" 01010 JMP CHAROUT Ausgebe 01020 * 01030 ------------------------------ 01040 * 01050 * BIN: 01060 * Gibt die Zahl im <A> Regis- 01070 * ter in dualer (binaerer) 01080 * Form aus. 01090 ------------------------------ 01100 * 01110 BIN STA WERT Wert retten 01120 LDA #8 8 Bits 01130 STA HOLD 01140 * 01150 .1 ASL WERT Bit ins Carry schieben 01160 LDA #$18 <A>=ASCII "0" /2 01170 ROL Carry ins <A> Register schieben 01180 JSR CHAROUT und ausgeben 01190 DEC HOLD naechstes 01200 LDA HOLD Bit 01210 BNE .1 wiederholen 01220 RTS 01230 * 01240 ------------------------------ 01250 * 01260 * ZEICHENAUSGABEROUTINE 01270 * 01280 ------------------------------ 01290 * 01300 CHAROUT TAX 01310 LDA $E407 01320 PHA 01330 LDA $E406 01340 PHA 01350 TXA 01360 RTS 01370 * 01380 ------------------------------ 01390 * 01400 * Arbeitsregister 01410 * 01420 ------------------------------ 01430 * 01440 WERT .HX 0000 01450 HOLD .HX 00 01460 FLAG .HX 00 01470 DIGIT .HX 00