title Zeichensatz definieren name ('CHARSET') ; Program : CHARSET.MAC ; ; RSX Modul fuer die Definition einer einzelnen Zeichenmatrix ; ; Programm von Werner Cirsovius ; Hohe Weide 44 ; D-2000 Hamburg 20 ; Tel.:040/4223247 ; Vielen Dank an Cliff Lawson, Amstrad Consumer Electronics plc., ; der mir mit seiner Veroeffentlichung der Definition des ; JOYCE Zeichensatzes eine grosse Hilfe war ; Die neuen BDOS Funktionen sind 38 zum Laden einer alten Matrix ; und 39 zum Speichern einer neuen Matrix. ; Der Aufruf dieser Funktionen setzt voraus, dass das Register HL ; auf einen Puffer zeigt, dessen erstes Byte der Wert des zu ; bearbeitenden Zeichens darstellt. ; Bei der Beendigung der BDOS Funktion 38 ist dieser Puffer ; mit acht Bytes der gewaehlten Zeichenmatrix gefuellt. ; Zur Erzeugung des RSX Moduls und zum Anbinden an eine Anwendung ; muss folgendes eingegeben werden: ; M80 CHARSET ; LINK CHARSET [OP] ; RENAME CHARSET.RSX=CHARSET.PRL ; GENCOM anwendung CHARSET OS equ 0000h ; Warmstart-Adresse _jp macro ; Jump-Opcode db 0c3h endm .ldMTX equ 38 ; Neue BDOS Funktionen .stMTX equ 39 _userf equ 30 ; BIOS Funktion matx equ 8 ; Laenge einer Matrix _SCRRUN equ 000e9h ; XBIOS-Adresse MATRIX equ 0b800h ; Basis-Adresse der Zeichenmatrix ; ; ===== RSX startet hier ===== ; ; ===== RSX Kopf beginnt ===== ; db 0,0,0,0,0,0 ; Sechs Bytes Serien-Nummer jp start ; Sprung zum RSX-Programm next: _jp ; Sprung zur naechsten RSX dw 0 dw 0 ; Adresse der vorigen RSX db 0ffh ; Remove-Anzeige (0 RSX bleibt) db 0 ; Anzeige Bank db 'CHARSET ' ; Beliebiger Name (8 Zeichen) db 0 ; Loader-Anzeige dw 0 ; Frei (reserviert) ; ; ===== RSX Kopf endet ===== ; start: ld a,c cp .ldMTX ; Test ob neue BDOS-Funktion jr z,get cp .stMTX jr nz,next ; Ignorieren wenn nicht ; ; Neue Matrix speichern ; ld bc,1+matx ld de,buffer ldir ; Matrix vom Aufrufer laden call BIOS ; BIOS-Adresse berechnen ld bc,codes call switch ; Neue Matrix setzen ret ; ; Alte Matrix laden ; get: ld a,(hl) ; Wert des Zeichens laden ld (buffer),a ; Als erster Eintrag inc hl push hl call BIOS ; BIOS-Adresse berechnen ld bc,codeg call switch ; Alte Matrix laden pop de ; Puffer holen ld hl,buffer+1 ld bc,matx ldir ; Alten Wert laden ret ; ; ------------------------------------------------- ; ; BIOS-Adresse berechnen ; BIOS: ld hl,(OS+1) ld de,(_userf-1)*3 add hl,de ld (entfw+1),hl ; Adresse speichern ret ; entfw: _jp dw 0 ; ; Aufruf der Spezial-Routine "scr_run_routine" ; switch: ld hl,buffer ; Puffer setzen call entfw dw _SCRRUN ret ; ; Gemeinsame Lade-/Speicherroutine ; codeg: ld e,1 jr comcod codes: ld e,0 comcod: ld a,(hl) ; Wert des Zeichens holen inc hl push hl ld l,a ld h,0 add hl,hl ; 3 Bits nach links schieben add hl,hl add hl,hl ld a,e ld de,MATRIX add hl,de ; Auf Matrix zeigen or a jr z,doset pop de ; Ziel laden jr move doset: ex de,hl ; Ziel setzen pop hl ; .. und Quelle move: ld bc,matx ldir ; In den Puffer speichern ret ; buffer: ds 1+matx ; Matrix-Puffer end