title ANSI Ueberwachung name ('ANSI') ; Modifizierte Version der ANSI.RSX ; Basierend auf ANSI.COM Version 0.2 ; ------------------------------------------------------------ ; (c)1997 Andress Freystatzky ; ; Andress Freystatzky Andress_Freystatzky@sz.maus.de ; Pestalozzistrasse 4 Andress Freystatzky@2:241/534.46 ; 38114 Braunschweig ; ------------------------------------------------------------ ; Modifizierte Version: ; ANSI (c) 1997 Werner Cirsovius und Andress Freystatzky ; ; Werner Cirsovius Cirsovius@dkrz.de ; Hohe Weide 44 ; 20253 Hamburg OS equ 0000h BDOS equ 0005h @@CO equ 4 ; BIOS Konsol-Ausgabe esc equ 1bh ASCoff equ 32 ; ASCII-Offset fuer Cursor-Positionierung ; ; RSX KOPF ; ds 6 ; xx00: Seriennummer _ENTRY_: jp _NEXT_ ; xx06: Sprung zur RSX - hier: Code uebergehen _NEXT_: jp BDOS+1 ; xx09: Sprung zur naechsten RSX dw BDOS+2 ; xx0c: Adresse der vorigen RSX db -1 ; xx0e: Anzeige ob dauerhaft db 0 ; xx0f: Anzeige ob System mit Baenken db 'ANSI.SYS' ; xx10: Name de RSX db 0 ; xx18: Anzeige ob Lader db 0,0 ; xx19: Reserviert ; ENDE DES RSX KOPFES ; ESClev: db 1 ; xx1b: ESCape Ebene (1..3) Pn2: db 0 ; xx1c: Parameter 2 Pn1: db 0 ; xx1d: Parameter 1 GRPH: db 0 ; xx1e: Anzeige Graphik ; ; Original BIOS Konsolausgabe ; _BIOS.CO_: jp $-$ ; xx1f: Original BIOS Zeiger _VECLEN equ $-_BIOS.CO_ ; ; Abgefangene BIOS Konsolausgabe ; _NBIOS_: jp _ICOUT_ ; xx22: Neuer BIOS Zeiger ; xx25: Start des Codes ; ; Abgefangene BIOS Konsolausgabe landet hier ; _ICOUT_: ld hl,ESClev ; Zeiger auf Ebene ld a,(hl) ; Ebene testen dec a jr z,Level.1 ; .. kein Praefix dec a jr z,Level.2 dec a jr z,Level.3 ld (hl),1 ; Ebene zuruecksetezen jr _BIOS.CO_ ; .. Ausgabe auf Konsole ueber BIOS ; ; Ebene 1 der Ueberwachung: Kein ESCape gefunden bisher ; Level.1: ld a,c ; Zeichen holen cp esc ; Testen des Praefix jr nz,_BIOS.CO_ ; .. Ausgabe auf Konsole ueber BIOS falls nicht inc (hl) ; .. sonst Ebene 2 setzen ret ; ; Ebene 2 der Ueberwachung: ESCape gefunden ; Level.2: ld a,c ; Zeichen holen cp '[' ; Testen ob ANSI Praefix jr z,gotANSCII ; .. ja ld (hl),1 ; Sonst Ebene zuruecksetzen jp ESCout ; .. Sequenz ausgeben gotANSCII: inc (hl) ; Ebene 3 setzen xor a ; Initialisieren .. ld (Pn2),a ; .. 2. Zahl ld (Pn1),a ; .. 1. Zahl dec a ld (GRPH),a ; .. Graphik Darstellung ret ; ; Ebene 3 der Ueberwachung: Sequenz bearbeiten ; Level.3: ld a,c ; Zeichen holen cp '0' ; Testen ob Ziffer ret c cp '9'+1 jr c,NumIn ; .. ja cp ';' ; Test ob Trennzeichen ret c jr z,NumDel ; .. ja, Zahlen umkopieren cp 'A' ; Testen ob Buchstabe ret c cp 'Z'+1 jr c,UPPER cp 'a' ret c cp 'z'+1 jr c,LOWER ret NumIn: ld a,(Pn2) ; Aktuelle Zahl holen add a,a ; * 2 ld d,a add a,a ; * 4 add a,a ; * 8 add a,d ; *10 ld d,a ld a,c and 00001111b ; .. neue Ziffer holen add a,d ; .. einfuegen ld (Pn2),a ; .. und speichern ret NumDel: ld a,(Pn2) ; Aktuelle Zahl holen ld (Pn1),a ; .. in erste Zahl ablegen ld d,a xor a ld (Pn2),a ; Aktuelle Zahl loeschen ld a,d ; Einageb holen cp 9+1 ; Bereich testen ret nc ld (GRPH),a ; .. Graphik Darstellung freigeben ret ; ; Buchstaben A..Z gefunden ; ; Es werden unterstuetzt: ; ; ANSI Bedeutung Joyce ; =================== ================== =============== ; ; 1) ESC [ Pn A -> Cursor hoch -> Pn mal ESC A ; ; 2) ESC [ Pn B -> Cursor runter -> Pn mal ESC B ; ; 3) ESC [ Pn C -> Cursor rechts -> Pn mal ESC C ; ; 4) ESC [ Pn D -> Cursor links -> Pn mal ESC D ; ; 5) ESC [ row;col H -> Cursor setzen -> ESC Y row+32 col+32 ; ; 6) ESC [ Pn J -> Bildschirm loeschen -> ESC J / ESC d / ESC E ; ; 7) ESC [ Pn K -> Zeile loeschen -> ESC K / ESC o / ESC l ; UPPER: call iniDefault ; Voreinstellung ld hl,Pn2 ; Zeiger laden ld a,c cp 'A' ; Test Cursor hoch jr z,repESC cp 'B' ; .. Cursor runter jr z,repESC cp 'C' ; .. Cursor rechts jr z,repESC cp 'D' ; .. Cursor links jr z,repESC cp 'H' ; .. Cursor setzen jr z,CURSET ; Setzen ld de,K$Set cp 'K' ; Test Loeschen in der Zeile jr z,TableOut cp 'J' ; Test Loeschen im Bildschirm ret nz ld de,J$Set TableOut: ex de,hl ld a,(de) ; Modus laden cp 2+1 ; Bereich testen ret nc ; Bereich ist 0..2 ld c,a ld b,0 add hl,bc ; Zeiger aufbauen ld c,(hl) ; Zeichen holen jr ESCout ; Und ausgeben ; ; Buchstaben a..z gefunden ; ; Es werden unterstuetzt: ; ; ANSI Bedeutung Joyce ; =================== ================== =============== ; ; 1) ESC [ row;col f -> Cursor setzen -> ESC Y row+32 col+32 ; ; 2) ESC [ P1;..;Pn m -> Graphik setzen -> Pn=0: ESC q ESC u ; Pn=1: ESC q ESC u ESC p ; Pn=x: ESC q ESC u ESC r ; ; 3) ESC [ s -> Cursor speichern -> ESC j ; ; 4) ESC [ u -> Cursor laden -> ESC k ; LOWER: call iniDefault ; Voreinstellung ld a,c cp 'f' ; Test ob Cursor setzen jr z,CURSET ; Setzen cp 'm' ; .. Attribut setzen jr nz,SCS? ld a,(Pn2) ; Aktuelle Zahl laden cp 9+1 ; Bereich testen jr nc,gotGRP ld (GRPH),a ; .. Graphik Darstellung freigeben gotGRP: ld a,(GRPH) ; Test ob Graphik freigegeben cp -1 ret z ; .. nein ld c,'q' call ESCout ; Inverse Darstellung ausschalten ld c,'u' call ESCout ; .. und Unterstreichen ausschalten ld a,(GRPH) ; Graphik Darstellung holen cp 0 ; Test Voreinstellung ret z cp 1 ; .. test ob Invers jr nz,setUDL ld c,'p' jr ESCout ; Invers einschalten setUDL: ld c,'r' jr ESCout ; Unterstreicen einschalten SCS?: cp 's' ; Test ob Cursor speichern jr nz,RCS? ld c,'j' jr ESCout ; Cursorposition speichern RCS?: cp 'u' ; Test ob Cursor laden ret nz ld c,'k' jr ESCout ; Cursorposition wiederherstellen ; ; Cursorbewegungen gefunden : ESC [ Pn xx ; Mit xx A Cursor hoch ; B Cursor runter ; C Cursor rechts ; D Cursor links ; repESC: ld a,(hl) ; Aktuelle Zahl holen or a ; .. Zahl testen ret z ; .. Null ist Ende dec (hl) ; .. runtertaehlen push bc push hl call ESCout ; ESCape xx ausgeben pop hl pop bc jp repESC ; .. und weiter ; ; Cursor setzen ; CURSET: ld c,'Y' ; .. Zeichen wandeln call ESCout ; Als ESCape Y ausgeben ld a,(Pn1) ; Erste Zahl holen (Zeile) call OFFOUT ld a,(Pn2) ; Zweite Zahl holen (Spalte) OFFOUT: add a,ASCoff-1 ; .. Wert addieren ld c,a jp _BIOS.CO_ ; .. Konsolausgabe ueber BIOS ; ; ESC ausgeben ; ESCout: push bc ; Zeichen retten ld c,esc call _BIOS.CO_ ; Escape Praefix ausgeben pop bc ; .. Zeichen zurueckholen jp _BIOS.CO_ ; .. Konsolausgabe ueber BIOS ; ; Voreinstellungen setzen ; iniDefault: ld (hl),1 ; Ebene zuruecksetzen ld hl,Pn2 call ..def ; 0 -> 1 wandeln inc hl ; .. zweimal ..def: ld a,(hl) or a ret nz ; .. Wert ist vorhanden inc (hl) ; .. auf 1 setzen ret ; ; Zeichenumsetzung fuer ESC [ Pn K und ESC [ Pn J ; K$Set: db 'K' ; Pn=0 db 'o' ; Pn=1 db 'l' ; Pn=2 J$Set: db 'J' ; Pn=0 db 'd' ; Pn=1 db 'E' ; Pn=2 end