Print Decimal, Hex and Binary

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