diff options
author | Christian A. Weber <chris@gna.ch> | 2020-07-12 12:38:10 +0200 |
---|---|---|
committer | Christian A. Weber <chris@gna.ch> | 2020-07-12 12:38:10 +0200 |
commit | 6708de4d29b0133645aa15c6b3e5009a15bb017d (patch) | |
tree | ba246d0863e78fc22903d9389280b4d3b96ab2a7 | |
parent | 34991abc68e41ce2b33bf2729891256955295365 (diff) | |
download | gameexec-6708de4d29b0133645aa15c6b3e5009a15bb017d.tar.gz gameexec-6708de4d29b0133645aa15c6b3e5009a15bb017d.tar.bz2 gameexec-6708de4d29b0133645aa15c6b3e5009a15bb017d.zip |
_RawPrintfFunc optimiert und besser dokumentiert
-rw-r--r-- | RawDoFmt.S | 51 |
1 files changed, 29 insertions, 22 deletions
@@ -19,6 +19,9 @@ SECTION text,CODE + INCLUDE "relcustom.i" + + XDEF RawDoFmtFunc,_RawPrintfFunc RB_LEFTALIGNED: EQU 0 ; Flag-Definitionen @@ -42,7 +45,7 @@ MainLoop: move.b (a4)+,d0 ; Nächstes Zeichen beq.s Ende ; fertig ---> cmpi.b #'%',d0 beq.s DoFormat -DirectOut: jsr (a2) ; Zeichen direkt ausgeben +DirectOut: jsr (a2) ; Zeichen direkt ausgeben (schrottet d1) bra.s MainLoop ; ---> Ende: jsr (a2) ; Endzeichen ausgeben @@ -327,38 +330,42 @@ Filler: move.b #' ',d2 ; Füllcode: Space * This function may be called at any time, including * interrupts. * -* Bryce Nesbitt, 02-24-89 +* Bryce Nesbitt, 02-24-89, enhanced by CHW! * ************************************************************************* XDEF _RawPrintfFunc -_RawPrintfFunc: movem.l a0/a1,-(SP) - move.l 4*3(SP),A0 ;grab format string - lea.l 4*4(SP),A1 ;grab stack address of parameters - movem.l A2/A3/D0/D1,-(SP) - lea.l PSCODE(pc),a2 - suba.l a3,a3 +_RawPrintfFunc: movem.l d0-d1/a0-a3,-(SP) + move.l 4*7(SP),a0 ; grab format string + lea 4*8(SP),a1 ; grab stack address of parameters + lea serputchar(pc),a2 + lea custom,a3 ; will be available in serputchar bsr RawDoFmtFunc - movem.l (SP)+,D0/D1/A2/A3 - movem.l (SP)+,a0/a1 + movem.l (SP)+,d0-d1/a0-a3 rts + *** called by RawDoFmt, d0=char to write, a3=custom + +serputchar: tst.b d0 + beq.s .ignore + +.wait: move.w serdatr(a3),d1 ; serdatr + btst #13,d1 ; transmit buffer empty? + beq.s .wait ; not yet ---> wait -PSCODE: tst.b d0 - beq.s ignore -1$ move.w $DFF018,d1 ;_serdatr - btst #13,d1 ;TBE bit - beq.s 1$ and.b #$7f,d1 - cmp.b #$18,d1 ;Check for CAN (^X) - beq.s ignore - cmp.b #$13,d1 ;Check for Xoff - beq.s 1$ + cmp.b #$18,d1 ; Check for CAN (^X) + beq.s .ignore + cmp.b #$13,d1 ; Check for Xoff + beq.s .wait ; --> wait + and.w #$ff,d0 - or.w #$100,d0 - move.w d0,$DFF030 ;_serdat -ignore: rts + or.w #$100,d0 ; add stop bit + move.w d0,serdat(a3) +.ignore: + rts + ***************************************************************************** |