diff options
-rw-r--r-- | RawDoFmt.S | 34 |
1 files changed, 24 insertions, 10 deletions
@@ -11,6 +11,7 @@ ** 01-May-89 CHW Created this file from CHH's HdExec.S ** ** 01-May-89 CHW Binary String Conversion added, code cleaned up ** ** 25-Nov-89 CHW Linksize changed from 34 to 64 (Paranoia?) ** +** 29-Jul-20 CHW Unsigned decimal (%u and %lu) added ** ** ** *************************************************************************** @@ -23,6 +24,7 @@ RB_LEFTALIGNED: EQU 0 ; Flag-Definitionen RB_ZEROFILL: EQU 1 RB_LONGARG: EQU 2 +RB_UNSIGNED: EQU 4 LINKSIZE: EQU 64 ; Jaja, binär wird lang... @@ -76,12 +78,17 @@ DoFormat: lea -LINKSIZE(a6),a5 ; Start des Puffers addq.w #1,a4 ; Formatzeiger vorrücken 4$: move.b (a4)+,d0 ; Nächstes Zeichen - cmpi.b #'d',d0 ; 'd': Dezimaldarstellung ? + cmpi.b #'u',d0 ; 'u': Dezimal ohne Vorzeichen ? bne.s 5$ ; nein ---> - bsr.s GetData ; Daten nach D4 + bset #RB_UNSIGNED,d3 +.dec: + bsr GetData ; Daten nach D4 bsr D4ToDez ; und in String verwandeln bra.s AusgAbschl 5$: + cmpi.b #'d',d0 ; 'd': Dezimal mit Vorzeichen ? + beq.s .dec ; ja ---> + cmpi.b #'x',d0 ; 'x': Hex-Darstellung ? bne.s 6$ ; nein ---> bsr.s GetData ; Daten nach D4 @@ -137,22 +144,27 @@ AusgAbschl2: move.l a5,a0 bsr Filler ; sonst auffüllen bra MainLoop ; ---> + ************************************************************************** *** Ausgabedaten nach D4 holen -GetData: move.l 4(a7),a1 ; Argument-Array +GetData: clr.l d4 ; löschen für %u (UWORD) + move.l 4(a7),a1 ; Argument-Array btst #RB_LONGARG,d3 ; LONG-Argument ? - bne.s 1$ ; ja ---> + bne.s 2$ ; ja ---> move.w (a1)+,d4 ; Datenwort holen move.l a1,4(a7) ; Neues A1 zurückschreiben - ext.l d4 ; Wort auf LONG erweitern - rts -1$: - move.l (a1)+,d4 ; Datenlangwort holen + btst #RB_UNSIGNED,d3 + bne.s 1$ + ext.l d4 ; WORD auf LONG erweitern +1$: rts + +2$: move.l (a1)+,d4 ; Datenlangwort holen move.l a1,4(a7) ; Neues A1 zurückschreiben rts + *************************************************************************** *** Stringlänge von (a0) nach D2 @@ -192,9 +204,11 @@ DecimalConvert: clr.l d0 D4ToDez: tst.l d4 ; Zahl testen beq.s D4To_End ; == 0 ---> bmi.s 1$ ; < 0 ---> - neg.l d4 ; Zahl negieren +0$: neg.l d4 ; Zahl negieren bra.s 2$ ; ---> -1$: move.b #'-',(a5)+ ; Minuszeichen +1$: btst #RB_UNSIGNED,d3 + bne.s 0$ + move.b #'-',(a5)+ ; Minuszeichen 2$: lea ZehnerPotenzen(PC),a0 st d1 ; Anfangsnullenflag setzen |