Blame | Last modification | View Log | Download | RSS feed
; CONOUT.INC;******************************************************************************;* Konsolenausgabe fuer Micro-ICE TLCS900 *;* *;* Routinen CONOUT, PSTR, A_ASC von Oliver Sellke *;* Routine WriteDec von Alfred Arnold, Oktober 1993 *;* 20.11.1993 StrTerm C-konform auf 00h geaendert *;* TXTAUS hinzugefuegt *;* *;* Routine Funktion Eingabe Stack *;* *;* CONOUT Zeichen ausgeben A 1..3 Byte *;* TXTAUS String ausgeben (XHL) *;* PSTR String ausgeben hinter CALL+StrTerm als Ende 6 Byte *;* A_ASC Byte hex ausgeben A 2 Byte *;* WriteDec Wort dez ausgeben WA 6 Byte *;* *;* - Da die Routinen lokale Labels verwenden, ist mindestens AS 1.39 erfor- *;* derlich *;* - Der Prozessor muс sich im Maximum-Modus befinden *;* - Symbol SIODelay setzen, falls langsames Terminal vorhanden *;* - MACROS.INC muс vorher eingebunden werden *;******************************************************************************;------------------------------------------------------------------------------; gemeinsamer Anfang, Definitionensection ConOutpublic StrTermStrTerm equ 0SC0BUF EQU 050HINTES0 EQU 077H;******************************************************************************; (7 bit ASCII) Ausgabe Бber SIO-Kanal 0proc CONOUTPUSH A ;sichernRES 7,A ;MSB ausblenden (nur ASCII!)CONOUT1: BIT 7,(INTES0) ;ist der Buffer frei?JR Z,CONOUT1 ;Wenn nicht, dann weiter pruefenLD (INTES0),0Dh ;Flag ruecksetzenLD (SC0BUF),A ;Zeichen in Transmit-Bufferifdef SIODelayPUSH HL ;sichernLD HL,80H ;VerzЎgerungszeit ladenWAIT: DEC 1,HL ;Zaehler - 1CP HL,0 ;Ist Zaehler = 0?JR NZ,WAIT ;Wenn nicht, dann weiter DECPOP HL ;restaurierenendifPOP A ;restaurierenRET ;Zurueck zum Aufrufendp;******************************************************************************; ASCIIZ-String ab (XHL) ausgeben:proc TXTAUSpush xhl ; Register rettenpush aSchl: ld a,(xhl+) ; ein Zeichen holencp a,StrTerm ; Endemarkierung ?jr eq,Endecall CONOUT ; nein, ausgebenjr Schl ; Go on...Ende: pop a ; Register zurueckpop xhlretendp;******************************************************************************; String der dem Aufruf folgt bis zur Endemarkierung ausgeben; Siehe auch TXTAUS:proc PSTRPUSH XHL ;sichernLD XHL,(XSP+4) ;Datenadresse lesenPUSH F ;sichernPUSH A ;ditoPSTR1: LD A,(XHL) ;Zeichen holenINC 1,C ;Zeichenzaehler + 1INC 1,XHL ;Zeichenzeiger + 1CP A,StrTerm ;Endemarkierung erwischt?JR Z,PSTR2 ;Wenn ja, dann EndeAND A,A ;Null-Zeichen erwischt?JR Z,PSTR1 ;Wenn ja, dann nicht ausgebenCALL CONOUT ;Zeichen ausgebenAND A,A ;War das 8. Bit gesetzt?JR P,PSTR1 ;Wenn nicht, dann naechstes ZeichenPSTR2: POP A ;restaurierenPOP F ;ditoLD (XSP+4),XHL ;Ruecksprungadresse restaurierenPOP XHL ;Ruecksprungadresse abspeichernRET ;Zurueck zum Aufrufendp;******************************************************************************; "A" als ASCII Text ausgebenproc A_ASCPUSH F ;SichernPUSH A ;ditoRR 4,A ;high nibble an die richtigeCALL A_ASC00 ;Stelle und ausgebenPOP A ;restaurieren bzw.POP F ;low nibble ladenA_ASC00: AND A,00FH ;low nibble maskierenCP A,00AH ;eine Zahl ?JR C,A_ASC01 ;jaADD A,007H ;Offset A-FA_ASC01: ADD A,'0' ;Offset ASCIIJP CONOUT ;Ausgabe und Ende UPendp;******************************************************************************; Zahl in WA dezimal ausgeben; C = minimale Stellenzahl; B = FБllzeichen (z.B. ' ', '0')proc WriteDecpush xwa ; Register rettenpush desub de,de ; E zaehlt echte Stellenzahl, D=1 falls NullInLoop: extz xwa ; fuer Division vorbereitendiv xwa,10 ; letzte Stelle ausmaskierenadd qa,'0' ; ASCII-Offsetcp d,1 ; schon im Nullbereich ?jr ne,NormValld qa,b ; ja, dann gewuenschtes LeerzeichenNormVal: push qa ; ein Zeichen mehrinc eor wa,wa ; schon Null ?scc z,djr nz,InLoop ; wenn nicht Null, auf jeden Fall weitercp e,c ; noch nicht genug Zeichen ?jr ult,InLoop ; dann auch weiterOutLoop: pop a ; umgekehrt ausgebencall ConOutdjnz e,OutLooppop depop xwaretendp;******************************************************************************; Modulendeendsection