title Zeichendarstellung im JOYCE name ('JOYCHAR') ; Dieses kleine Testprogramm stellt alle Zeichen des Joyce mit ; BDOS- und BIOS-Aufrufen dar. ; Die Aufrufe koennen ueber Parameter gewaehlt werden: ; JOYCHAR 6 Die direkte Konsol-Ausgabe ; Die Zeichen 0xFDh, 0xFEh und 0xFFh koennen nicht ; dargestellt werden ; JOYCHAR 2 Die Konsol-Ausgabe ; Der Tabulator wird interpretiert ; JOYCHAR 2T Die Konsol-Ausgabe mit unterdruecktem Tabulator ; Der Tabulator wird nicht interpretiert ; JOYCHAR B Die BIOS Konsol-Ausgabe ; ; Nur mit den Aufrufen 'JOYCHAR 2T' und 'JOYCHAR B' wird der komplette ; Zeichensatz dargestellt OS equ 0000h BDOS equ 0005h TPAtop equ BDOS+1 FCBnam equ 005dh .conout equ 2 .condir equ 6 .string equ 9 .consta equ 109 _COT equ 4 ; BIOS Funktion null equ 00h tab equ 09h lf equ 0ah cr equ 0dh esc equ 1bh eot equ '$' DEL equ 7fh SPC equ 80h ld sp,(TPAtop) ; Stack laden ld a,(FCBnam) ; Parameter holen cp ' ' ; Ende falls Aufruf ohne Parameter jr z,Help sub '0' ; Aus ASCII binaer machen cp .conout jr z,setcon cp .condir jr z,setcon cp 'B'-'0' ; Test BIOS jr nz,Help ; Ungueltig call BIOSini jr gochar Help: ld de,$HELP call String ; Kleine Hilfe ausgeben jp OS setcon: ld (concall),a ; Funktion abspeichern cp .conout call z,chgtab ; Eventuell Tabulator abschalten gochar: ld de,$HEAD call String ; Kopfzeile ausgeben ld c,null ; Startwert fuer Zeichen ld b,2 ; Anzahl Zeilen call put ; Im Bereich 0x00h-0x1Fh ausgeben ld de,$DEL call String ld a,DEL call conout ; Spezialzeichen ausgeben ld de,$EXTEND call String ld c,SPC ; Startwert fuer Zeichen ld b,8 ; Anzahl Zeilen call put ; Im Bereich 0x80h-0xFFh ausgeben jp OS ; Ende ; ; Zeilen mit Spezialzeichen ausgeben ; Startwert steht in Register C, Anzahl Zeilen in Register B ; put: ld a,c ; Startwert holen call hexout ; In Hex ausgeben ld de,$DELIM call String ; Begrenzer ausgeben push bc ld b,16 ; Anzahl Zeichen pro Zeile put2: ld a,c ; Zeichen holen cp ' ' ; Test ob Kontrollzeichen call c,ESCout ; ESCape ausgeben falls ja ld a,c call conout ; Zeichen ausgeben ld de,$BLANK call String ; Leerzeichen ausgeben inc c ; Naechstes Zeichen djnz put2 call crlf ; Zeile schliessen ld a,c pop bc ld c,a djnz put crlf: ld de,$CRLF call String ret ; ; Byte im Accu als Zeichen ausgeben ; hexout: push af rra ; Obere Bits holen rra rra rra call prhex ; Ausgeben pop af ; Dann die unteren Bits prhex: and 00001111b ; Bits maskieren add a,90h daa ; In ASCII wandeln adc a,40h daa jr conout ; Ausgabe ; ; ESCAPE Zeichen ausgeben ; ESCout: ld a,esc ; ; Zeichen im Akku ausgeben ; conout: push bc push de push hl ld hl,(CONvec) ; Ausgabevektor laden call jp.r ; Ausgabe pop hl pop de pop bc ret concall: ds 1 ; jp.r: jp (hl) ; ; Zeichenausgabe via BDOS ; BDOS.COT: ld e,a ; Zeichen umpacken ld a,(concall) ; BDOS Funktion laden ld c,a call BDOS ; Ausgabe ret ; ; Zeichenausgabe via BIOS ; BIOS.COT: ld c,a ; Zeichen umpacken ld hl,(@COT) ; BIOS Adresse laden call jp.r ; Ausgabe ret ; ; Zeichenkette in ^DE ausgeben ; String: push bc push de push hl ld c,.string call BDOS ; Ausgabe pop hl pop de pop bc ret ; ; Konsolmodus aendern wenn gewuenscht ; chgtab: ld a,(FCBnam+1) ; Zeichen nach '2' holen cp 'T' ; Test ob Tabulator unterdrueckt werden soll ret nz ; Nein ld de,-1 call conset ; Konsolstatus holen ex de,hl set 2,e ; Das Tabulatorbit aendern conset: ld c,.consta call BDOS ; Konsolstaus anfassen ret ; ; BIOS Vektor fuer Ausgabe eintragen ; BIOSini: ld hl,(OS+1) ; BIOS Basisadresse laden ld de,3*(_COT-1) add hl,de ld (@COT),hl ; Adresse fuer Konsolausgabe ld hl,BIOS.COT ld (CONvec),hl ret @COT: ds 2 CONvec: dw BDOS.COT ; $HELP: db cr,lf,lf db 'Dieses kleine Testprogramm stellt alle Zeichen des Joyce mit' db cr,lf db 'BDOS- und BIOS-Aufrufen dar.' db cr,lf,lf db 'Die Aufrufe koennen ueber Parameter gewaehlt werden:' db cr,lf,lf db 'JOYCHAR 6',tab,'Die direkte Konsol-Ausgabe' db cr,lf db tab,tab,'Die Zeichen 0xFDh, 0xFEh und 0xFFh koennen nicht' db cr,lf db tab,tab,'dargestellt werden' db cr,lf db 'JOYCHAR 2',tab,'Die Konsol-Ausgabe' db cr,lf db tab,tab,'Der Tabulator wird interpretiert' db cr,lf db 'JOYCHAR 2T',tab,'Die Konsol-Ausgabe mit unterdruecktem Tabulator' db cr,lf db tab,tab,'Der Tabulator nicht wird interpretiert' db cr,lf db 'JOYCHAR B',tab,'Die BIOS Konsol-Ausgabe' db cr,lf,lf db 'Nur mit den Aufrufen ''JOYCHAR 2T'' und ''JOYCHAR B'' wird der komplette' db cr,lf db 'Zeichensatz dargestellt' db cr,lf,lf,eot $HEAD: db cr,lf,lf db ' 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F' db cr,lf db ' -----------------------------------------------' db cr,lf db ' (ESCape vorweg)' db cr,lf,eot $DEL: db ' (ASCII Spezial)' db cr,lf db '7F: ' db eot $EXTEND: db cr,lf db ' (Erweiterte Zeichen)' $CRLF: db cr,lf,eot $DELIM: db ': ' db eot $BLANK: db ' ' db eot end