summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian A. Weber <chris@gna.ch>2020-06-30 04:10:52 +0200
committerChristian A. Weber <chris@gna.ch>2020-06-30 04:10:52 +0200
commit2e2ecb17a3117030ac2596dbfe2cf0b51885ddc0 (patch)
tree5de651f7e5c81c25e9301f3bb77a232a6ed255ad
parent7df3729cd47dd5d0b0eb3b1a29c8be615e29145a (diff)
downloadgameexec-2e2ecb17a3117030ac2596dbfe2cf0b51885ddc0.tar.gz
gameexec-2e2ecb17a3117030ac2596dbfe2cf0b51885ddc0.tar.bz2
gameexec-2e2ecb17a3117030ac2596dbfe2cf0b51885ddc0.zip
%u und %lu implementiert
-rw-r--r--RawDoFmt.S34
1 files changed, 24 insertions, 10 deletions
diff --git a/RawDoFmt.S b/RawDoFmt.S
index 3b2487c..0a4818e 100644
--- a/RawDoFmt.S
+++ b/RawDoFmt.S
@@ -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