.z80 .radix 16 aseg bank_0 equ 07fc1 bank_1 equ 07fc2 romcall equ 0fdca txtout equ 0bb5ah org 0100h di ld hl,fast_anf ld de,0c000h ld bc,fast_end-fast_dob ldir push de ld hl,copy ld bc,copy_end-copy ldir pop hl call jphl call romcall dw fast_ini jp 0 jphl: jp (hl) copy: ld bc,bank_0 out (c),c ld a,(ctl_tab+3*019h) cp 1 jr z,copy_out ld hl,0c000h ld de,fast_dob ld bc,fast_end-fast_dob ldir copy_out: ld bc,bank_1 out (c),c ret copy_end: fast_anf: fast_dob equ 04900h .phase fast_dob ; **** FASTOUT-Routinen f}r Mode 0, 1 und 2 **** ; * * ; * Andreas Dobbertin 21.10.1988 * ; * * ; * erweitert mit Routinen von Helmut Tischer * ; * fuer Darstellung von Textattributen und * ; * VT52-Emulation * ; * 15.12.89 Robert Steindl * ; * * ; ********************************************** ; ; ; ------ >>> Label-Definitionen <<< ---------------- ; getmode equ 0bc11 ;SCR_GET_MODE modeclr equ 0bc14 ;SCR_MODE_CLEAR TXT_WIN_ENABLE EQU 0BB66H TXT_GET_WINDOW EQU 0BB69H TXT_CLEAR_WINDO EQU 0BB6CH TXT_SET_COLUMN EQU 0BB6FH TXT_SET_CURSOR EQU 0BB75H TXT_GET_CURSOR EQU 0BB78H SCR_SET_OFFSET EQU 0BC05H SCR_GET_LOCATIO EQU 0BC0BH SCR_SET_MODE EQU 0BC0EH SCR_CHAR_POSITI EQU 0BC1AH SCR_NEXT_LINE EQU 0BC26H SCR_SOFTWARE_RO EQU 0BC50H MC_WAIT_FLYBACK EQU 0BD19H TXT_DRAW_CURSOR EQU 0BDCDH TXT_UNDRAW_CURS EQU 0BDD0H ctl_cnt equ 0b2b8h akt_ctl equ 0b2b9h ctl_tab equ 0b2c3h vdu_flg equ 0b28eh pen_pap equ 0b28fh curlin equ 0b285h scr_off equ 0b1c9h base_hi equ 0b1cbh cur_tst equ 091abh ; ; ------ >>> neue MODE-Routine <<< ----------------- ; newmode: call getmode ;Aktuellen Mode holen ld hl,fast_0 ;Zeiger auf MODE 0 Routine jr c,newout ;Springe wenn Mode 0 ld hl,fast_1 ;Zeiger auf MODE 1 Routine jr z,newout ;Springe wenn MODE 1 ld hl,fast_2 ;Zeiger auf MODE 2 Routine newout: ld (wr_char+1),hl jp modeclr ; ; ------ >>> neue Ausgabe-Routine <<< -------------- ; sendcrt: di nop nop nop crsrflg: ld hl,$-$ ;Zeiger auf CRSRFLG-> 'HL' ld a,(hl) ;Ist der Cursor z.Zt. or a ; sichtbar ? call z,0bb84 ;Ja, dann ausschalten ld (hl),0ff ;Cursor-Zustand merken ; patch01: ld hl,ctl_cnt ;Zeichen in Control-Buffer ld a,c ;Zeichen -> 'A' cp 020 ;Ist es ein Steuerzeichen? ld a,(hl) ;Parameteranzahl -> 'A' jr c,control ;Springe wenn CTRL-Code or a ;Sind Parameter im Puffer? jr nz,control ;Ja, dann springe ; patch02: ld a,(vdu_flg) ;VDU-Flag patch03: and a ;Screen disabled ? ret z ;Ja, dann zur}ck push bc ;Zeichen merken call chkcrsr ;Cursorpos. pr}fen pop bc ;Zeichen wieder -> 'C' patch04: ld hl,(curlin) ;Cursorpos. -> 'HL' inc h ;Cursorspalte erh|hen patch05: ld (curlin),hl ;Neue Cursorpos. merken dec h ;Alte Cusorspalte -> 'H' ld a,c ;Zeichen wieder -> 'A' wr_char: jp $-$ ;Zur Zeichenausgaberoutine ; control: cp 00a ;Schon maximale L{nge ? jr nc,flshbuf ;Dann Puffer l|schen ; inc a ;Anzahl der Zeichen -> 'A' ld b,a ;Anzahl der Zeichen im ld (hl),b ; Puffer erhoehen add a,l ;Aktuelle Puffer- ld l,a ; Adresse -> 'HL' ld (hl),c ;Zeichen in den Puffer patch06: ld a,(akt_ctl) ;Das zugeh|rige Steuer- ld e,a ; zeichen -> 'E' ld d,000 patch07: ld hl,ctl_tab add hl,de add hl,de add hl,de ld a,(hl) ;Zahl der Parameter -> 'A' and 00f ;Zahl isolieren cp b ;Schon genug Parameter ? ret nc ;Nein, dann zur}ck inc hl ;Zeiger auf Zieladresse ld e,(hl) inc hl ld d,(hl) ;Zieladresse -> 'DE' patch08: ld hl,akt_ctl ;Zeiger auf Puffer ld a,c ;Letzter Parameter -> 'A' call jp_tode ;Zieladresse anspringen flshbuf: xor a ;Anzahl der Zeichen patch09: ld (ctl_cnt),a ; im Puffer nullen chkcrsr: rst 08 dw cur_tst ;Cursorposition }berpr}fen ; jp_tode: rst 08 dw 08016 ;Zieladresse anspringen ; ; ------ >>> FAST-Routine Mode 2 <<< --------------- ; ;Ausgabe erfolgt beschleunigt in durch VIDATT angegebener Darstellung. ;Wahlweise sind deutsche Sonderzeichen m|glich ; Bit 0 -> Durchgestrichen ; Bit 1 -> Invertiert ; Bit 2 -> gerastert (halbhell) ; Bit 3 -> Unterstrichen ; Bit 4 -> Tiefgestellt ; Bit 5 -> Hochgestellt ; Bit 6 -> Fettschrift ; Bit 7 -> Kursiv ;###### Zeichen in A an Spalte H Zeile L anzeigen fast_2: ld b,0 ld c,l ;Zeile -> 'BC' ld d,b ld e,h ;Spalte -> 'DE' ld h,b ;Zeile -> 'HL' add hl,hl add hl,hl add hl,bc add hl,hl add hl,hl add hl,hl ;In HL steht jetzt add hl,hl ; Zeile * 80 add hl,de ;Spalte noch addieren ; patch10: ld bc,(scr_off) ;Zu dieser Adresse den add hl,bc ; Screen-Offset addieren ex de,hl ;Screen-Adr. -> 'HL' ; ld h,08 ;Start RAM-Zeichensatz / 8 ld l,a ;Zeichen -> 'L' add hl,hl ; * 2 add hl,hl ; * 4 add hl,hl ; * 8 ; patch12: ld a,(base_hi) ;Screen-Start -> 'A' add a,d and 0c7 ld d,a ex de,hl ; ; 'DE' zeigt jetzt auf die entsprechende Stelle im ; Zeichensatz, 'HL' zeigt auf die erste Bildschirm- ; speicheradresse ; ;###### Zeichen ausgeben DE:= Charaktermatrix, HL:=Screenadresse ;(vidatt): Bit0=Durchgestrichen, Bit1=Invers, Bit2=gerastert ;Bit3=Unterstrichen, Bit4=Tief, Bit5=Hoch, Bit6=Fett, Bit7=Kursiv ld a,(vidatt) ld c,a ;Video-Attribut and 0FDh ;nichts au~er Invers? ld a,c jp z,tinvers push hl ex de,hl ;HL := Zeichenmatrix ld de,tbuffer ;DE := 8 Byte Puffer and 30h jr nz,tshift ld bc,8 ;Matrix f}r weitere Mainpulationen in Puffer ldir jr tnoshif tshift: sub 10h ;Matrix in Puffer und dabei komprimieren jr nz,tnotief ld (de),a ;Voraussetzung: A = 0 inc de ld (de),a inc de call tkompr ;Tiefstellen jr tnoshif tnotief:sub 10h jr nz,tnohoch call tkompr ;Hochstellen ld (de),a ;Voraussetzung: A = 0 inc de ld (de),a jr tnoshif tnohoch:xor a ld (de),a inc de call tkompr ;Hoch + Tiefstellen = zentrieren ld (de),a tnoshif:ld a,(vidatt) ld c,a and 0C0h ;Fett oder Kursiv verwendet? ld a,c jr z,tnofeku add a,a jr nc,tnokur ld hl,tbuffer ;Kursive Darstellung srl (hl) ;3 Rasterzeilen nach rechts rutschen inc hl srl (hl) inc hl srl (hl) ld hl,tbuffer+6 ;3 Rasterzeilen bleiben sla (hl) ;2 Rasterzeilen nach links rutschen inc hl sla (hl) tnokur: add a,a jr nc,tnofett ld hl,tbuffer ;Fettschrift einschalten ld b,4 tf2: ld a,(hl) add a,a or (hl) ld (hl),a inc hl ld a,(hl) add a,a or (hl) ld (hl),a inc hl djnz tf2 tnofett:ld a,c tnofeku:and 09 ;Unterstreichen oder Durchstreichen jr z,tnoduun ld a,0FFh bit 0,c jr z,tnodu ld (tbuffer+3),a ;Durchstreichen tnodu: bit 3,c jr z,tnoduun ld (tbuffer+7),a ;Unterstreichen tnoduun:bit 2,c jr z,tlatt ld hl,tbuffer ;Rastern ld bc,0455h ;Schleifenz{hler + Raster tras: ld a,c and (hl) ld (hl),a inc hl ld a,c rrca ;Raster invertieren -> Schachbrett and (hl) ld (hl),a inc hl djnz tras tlatt: pop hl ;HL := Bildschirmadresse ld de,tbuffer ;DE := Zeichenmatrix ld a,(vidatt) ;A := Invers-Attribut tinvers:and 02 ;Zeichen auf Bildschirm darstellen jr z,tpos ld a,0FFh tpos: ld c,a ;C := Invers-Maske ex de,hl ;HL := Tbuffer ld a,d ;AE := Bildscirmadresse ld b,8 ;8 Byte pro Zeichen tpos2: ld d,a ld a,(hl) xor c ld (de),a ld a,d add a,8 inc hl djnz tpos2 ret ;****** Matrix in Puffer kopieren und dabei komprimieren tkompr: ldi inc hl ldi ldi inc hl ldi ldi ldi ret tbuffer:ds 8 ;8 Bytes Raum f}r aktuelle Zeichenmatrix ;================================================================ ; ; ------ >>> FAST-Routine Mode 1 <<< --------------- ; fast_1: ld b,0 ld c,l ;Zeile -> 'BC' add hl,hl ld d,b ld e,h ;Spalte * 2 -> 'DE' ld h,b ;Zeile * 2 -> 'HL' add hl,hl add hl,bc add hl,hl add hl,hl add hl,hl ;In HL steht jetzt add hl,hl ; Zeile * 80 add hl,de ;Spalte * 2 addieren ; patch13: ld bc,(scr_off) ;Zu dieser Adresse den add hl,bc ; Screen-Offset addieren ex de,hl ;Screen-Adr. -> 'DE' ; ld h,008 ;Start RAM-Zeichensatz / 8 ld l,a ;Zeichen -> 'HL' add hl,hl ; * 2 add hl,hl ; * 4 add hl,hl ; * 8 ; patch14: ld a,(base_hi) ;Screen-Start -> 'A' add a,d and 0c7h ;Screenstart-High -> 'A' ; ; 'HL' zeigt jetzt auf die entsprechende Stelle im ; Zeichensatz und 'AE' zeigt auf die erste Bild- ; schirmspeicheradresse. ; ld b,8 ;Bytes/Zeichen -> 'B' loop_2: ld d,a ;Screenstart-High -> 'D' push hl ;Zeichensatz-Zeiger merken push bc ld a,(hl) ;Zeichensatz-Byte holen ld hl,selfmod+1 ld (hl),a ; und in 2 H{lften teilen rld ; (2. H{lfte -> PATCH1+1 ) patch15: ld hl,(pen_pap) ;PEN & PAPER holen ld b,a ;1.Matrix in 'B' merken cpl and h ;PAPER-Bits setzen ld c,a ;PAPER-Maske in 'C' merken ld a,b ;1.Matrix wieder -> 'A' and l ;PEN-Bits setzen und mit or c ; PAPER-Bits verkn}pfen ld (de),a ;1.Byte auf den Bildschirm inc de selfmod: ld a,$-$ ld b,a ;2.Matrix in 'B' merken cpl and h ;PAPER-Bits setzen ld c,a ;PAPER-Maske in 'C' merken ld a,b ;2.Matrix wieder -> 'A' and l ;PEN-Bits setzen und mit or c ; PAPER-Bits verkn}pfen ld (de),a ;2.Byte auf den Bildschirm pop bc ;Schleifenz{hler -> 'B' pop hl ;Zeichensatz-Zeiger wieder inc hl ; holen und erh|hen dec de ld a,d ;'DE' auf die n{chste add a,008 ; Zeile erh|hen (+ 00800) djnz loop_2 ;8 Zeilen pro Zeichen ; ret ; ; ------ >>> FAST-Routine Mode 0 <<< --------------- ; fast_0: ld b,0 ld c,l ;Zeile -> 'BC' add hl,hl add hl,hl ld d,b ld e,h ;Spalte * 4 -> 'DE' ld h,b ;Zeile * 4 -> 'HL' add hl,bc add hl,hl add hl,hl add hl,hl ;In HL steht jetzt add hl,hl ; Zeile * 80 add hl,de ;Spalte * 4 addieren ; patch16: ld bc,(scr_off) ;Zu dieser Adresse den add hl,bc ; Screen-Offset addieren ex de,hl ;Screen-Adr. -> 'DE' ; ld h,008 ;Start RAM-Zeichensatz / 8 ld l,a ;Zeichen -> 'HL' add hl,hl ; * 2 add hl,hl ; * 4 add hl,hl ; * 8 ; patch17: ld a,(base_hi) ;Screen-Start -> 'A' add a,d and 0C7h ;Screenstart-High -> 'A' ld d,a ;Screenstart-High -> 'D' ; ; 'HL' zeigt jetzt auf die entsprechende Stelle im ; Zeichensatz und 'DE' zeigt auf die erste Bild- ; schirmspeicheradresse. ; ld b,008 ;Bytes/Zeichen -> 'B' prloop1: push bc ;Schleifenz{hler merken push hl ;Zeichensatz-Zeiger merken ld c,(hl) ;Zeichensatz-Byte -> 'C' scf ;End-Flag setzen prloop2: rl c jr z,xfast_0 sbc a,a ;000 oder 0FF -> 'A' or 055h ;055 oder 0FF -> 'A' sla c jr c,patch18 and 0aah ;0aa oder 000 -> 'A' patch18: ld hl,(pen_pap) ;PEN & PAPER holen ld b,a ;Matrix in 'B' merken cpl and h ;PAPER-Bits setzen ld h,a ;PAPER-Bits in 'H' merken ld a,b ;Matrix wieder -> 'A' and l ;PEN-Bits setzen und mit or h ; PAPER-Bits verkn}pfen ld (de),a ;Byte auf den Bildschirm inc de jr prloop2 ; xfast_0: ld hl,007fc add hl,de ;'DE' auf die n{chste ex de,hl ; Zeile erh|hen (+ 00800) pop hl ;Zeichensatz-Zeiger wieder inc hl ; holen und erh|hen pop bc ;Schleifenz{hler -> 'B' djnz prloop1 ;8 Zeilen pro Zeichen ; ret ;die wichtigsten Steurzeichen eines Heath/Zenith/VT52-Terminals: ; ESC 'Y' (Zeile+32) (Spalte+32) ;Cursorpositionieren ; ESC 'L' ;Zeile einf}gen und Rest nach unten rollen ; ESC 'M' ;Zeile l|schen und Rest nach oben rollen ; ESC 'q' ;Inverse Darstellung auschalten ; ESC 'p' ;Inverse Darstellung einschalten ; ESC 'K' ;bis zum Zeilenende l|schen ; ESC 'J' ;bis zum Bildschirmende l|schen ; ESC 'E' ;Bildschirm l|schen (+ 24 Zeilen) ; ESC 'H' ;Cursor Home ; EM (Video-Attribut) ;Zeichendarstellung ausw{hlen ; ESC 'R' ;Unterstreichen einschalten ; ESC 'U' ;Untersrteichen ausschalten ; ESC 'a' ;Schriftarten Master Control (entspricht ^Y) locbuf: db 0 vidatt: db 0 esctst: inc hl ld b,0 ld a,(hl) ;ESC-Parameter holen cp 'Y' ;locate ;?ESC 'Y' jp z,curloc ;!dann Cursor positionieren cp 'L' ;insline ;ESC 'L' jr z,xinsdel ;dann Zeile einf}gen/l|schen B=0 -> einfuegen cp 'q' ;ivoff ;ESC 'q'? jr z,ivset ;dann Invers ein/aus B=0 -> ein dec b cp 'M' ;delline ;ESC 'M' xinsdel:jp z,insdel ;dann Zeile einf}gen/l|schen B=255 -> loeschen cp 'p' ;ivon ;ESC 'p'? jr z,ivset ;dann Invers ein/aus B=255 -> aus cp 'K' ;eraeol ;ESC 'K'? clrelp: jp z,$-$ cp 'J' ;eraeos ;ESC 'J'? clresp: jp z,$-$ cp 'E' ;clrscr ;ESC 'E' jr z,clearall cp 'H' ;home jr z,home cp 'a' ;Master Control jr z,setvid_2 cp 'R' ;ulon jr z,ulon cp 'U' ;uloff jr z,uloff ret setvid: inc hl ld a,(hl) jr pap4 setvid_2: ld hl,sendcrt+1 ld (hl),0c3h ld de,do_esc_a inc hl ld (hl),e inc hl ld (hl),d ret do_esc_a: ld hl,sendcrt+1 xor a ld b,3 do_esc_a_1: ld (hl),a inc hl djnz do_esc_a_1 ld a,c jr pap4 home: ld hl,0101h jp txt_set_cursor ulon: ld a,(vidatt) or 8 ;Bit 3 setzen fuer unterstreichen jr pap4 uloff: ld a,(vidatt) and 0f7h ;Bit 3 loeschen jr pap4 turn: ld a,(vidatt) xor 02 jr pap4 ivset: ld a,b jr pap3 pen: inc hl ld a,(hl) xor 01 jr pap2 paper: inc hl ld a,(hl) pap2: add a,a pap3: and 02 ld b,a ld a,(vidatt) and 0FDh or b pap4: ld (vidatt),a ret clearall: jp modeclr curloc: ld hl,sendcrt+1 ld (hl),0c3h inc hl ld de,parcnt ld (hl),e inc hl ld (hl),d ld hl,locbuf ld (hl),0 ret parcnt: ld hl,locbuf inc (hl) dec (hl) jr nz,exec ld (hl),c ret exec: ld a,c sub 01fh ld d,a ld a,(hl) ld (hl),0 sub 01fh ld e,a txtoup: ld hl,sendcrt+1 xor a ld b,3 txtoup_2: ld (hl),a inc hl djnz txtoup_2 ex de,hl jp txt_set_cursor insdel: call txt_undraw_curs ;Register B gibt scroll-Richtung an call txt_get_cursor dec l ld c,l call txt_get_window ;Register BC bleibt unver{ndert ld l,c xor a ;call txt_get_paper!call scr_ink_encode call scr_software_ro call txt_draw_cursor ld a,1 jp txt_set_column ;================================================================ .radix 10 ;****** Steuerzeichentabelle erweitern: ;Rudiment{re Heath/Zenith-Simulation fast_ini: ld c,0ffh ;#FF => BASIC-ROM call 0b915h ;Rechner-Typ ermitteln ld a,h cp 01 ;Ist es ein CPC 464 ? jr c,ini_464 ld a,(0b763h+3*25) jr f_ini ini_464:ld a,(ctl_tab+3*25) ;^Y bereits eingetragen? f_ini: cp 1 ret z ; ; ------ >>> BIOS-Routinen an DOS anpassen <<< ----- ; ; Diese Routine ermittelt die DOS-abh{ngige Adressen, ; an denen der Inhalt von BC' (Gate-Array Zustand), ; der original Interrupt-Entry und das Cursor-Flag ; abgelegt sind und patcht somit DOS-abh{ngig die ; BIOS-Routinen. ; ld hl,(2504h) ;Warmstart-Adr. -> 'HL' inc hl call ld_hlhl ;CALL-BIOS (RAM) -> 'HL' inc hl call ld_hlhl ;CALL-BIOS (ROM) -> 'HL' search: ld a,(hl) ;Die CALL-BIOS Routine im inc hl ; ROM nach dem Byte #4B cp 4bh ; druchsuchen. Dahinter jr nz,search ; steht die BC'-Adresse inc hl ; Adresse ermitteln inc hl ; in der die original inc hl ; Interrupt-Entry inc hl ; Adresse abgelegt call ld_hlhl ; ist inc hl inc hl call ld_hlhl ;'HL' zeigt jetzt auf die push hl ; System-Variable ORIGINT ; call ld_hlhl ;Orig. INT-Entry -> 'HL' ; ld (origint+1),hl ; pop de ;Zeiger auf ORIGINT-> 'DE' ld hl,-0ad3eh add hl,de ;Pr}fen, ob ORIGINT bei ld a,h ; #AD3E/F liegt or l ld hl,0003 ;Ja, dann steht das Cursor jr z,cflgadr ; Flag 3, sonst 4 (X-VDOS) inc l ; Byte hinter ORIGINT cflgadr:add hl,de ;Zeiger auf CRSRFLG-> 'HL' ld (crsrflg+1),hl ; ; ; ------ >>> FAST-Routine einbinden <<< ------------ ; ; Der Indirection 'NEWMODE' ab #BDEB wird auf eine ; eigene Routine umgelenkt. Beim n{chsten MODE-Wechsel ; ( im BOOT-Sector ) wird die FAST-Routine aktiviert. ; ld hl,0a80h ;Dobbertin BIOS-Routinen do_search: ld a,0b0h ;suchen nach BEB0 search_on: cpi jr nz,search_on ld a,0beh ;Highbyte von BEB0 cp (hl) ; gefunden ? jr nz,do_search ;nein, dann weitersuchen inc hl ld bc,sendcrt ld (hl),c ;neue Routine eintragen inc hl ld (hl),b ld de,8 add hl,de ld (hl),c inc hl ld (hl),b ld hl,newmode ;Neue MODE-Routine ld (0bdech),hl ; einh{ngen ld c,0ffh ;#FF => BASIC-ROM call 0b915h ;Rechner-Typ ermitteln ld a,h cp 01 ;Ist es ein CPC 464 ? jr c,init_on ;Ja, dann fertig ; ld hl,091a3h ;CPC 664 Cursor-Validate jr z,cpc_664 ;Springe wenn CPC 664 ld l,0a7h ;CPC 6128 Cursor-Validate cpc_664:ld (chkcrsr+1),hl ; ld hl,0b763h ;Steuerzeichentabelle ld (init_on+1),hl ld hl,ptchtbl ;Bei CPC 664/6128 erst die ld de,patch01 ; FAST-Routine angepassen ; patcher:ld a,(hl) ;N{chsten Offset holen cp 0ffh ;Ist schon alles gepatcht? jr z,init_on ;Ja, dann weiter im Text inc hl add a,e ld e,a adc a,d sub e ld d,a ld bc,0002 ldir jr patcher init_on:ld de,ctl_tab ;Adresse Steuerzeichentabelle ld hl,3*14 add hl,de ld (hl),1 inc hl ld bc,paper ld (hl),c inc hl ld (hl),b ld hl,3*15 add hl,de ld (hl),1 inc hl ld bc,pen ld (hl),c inc hl ld (hl),b ld hl,3*24 add hl,de ld (hl),0 inc hl ld bc,turn ld (hl),c inc hl ld (hl),b ld hl,3*25 ;^Y add hl,de ld (hl),1 inc hl ld bc,setvid ld (hl),c inc hl ld (hl),b ld hl,3*27 ;esc add hl,de ;HL -> Tabellensatz ESC ld (hl),1 ;Ein Parameter inc hl ld bc,esctst ;Adresse der ESC-Routine ld (hl),c inc hl ld (hl),b ;in Tabellensatz eintragen ld hl,18*3+1 ;Adresse des Pointers auf CLREOL-Routine add hl,de ld c,(hl) inc hl ld b,(hl) ld (clrelp+1),bc ;alte CLREOL-Routine in Erweiterung Eintragen ld hl,20*3+1 ;Adresse des Pointers auf CLREOS-Routine add hl,de ld c,(hl) inc hl ld b,(hl) ld (clresp+1),bc ;alte CLREOS-Routine in Erweiterung eintragen call newmode call home ld hl,message out_on: ld a,(hl) cp 0ffh ret z push hl call txtout pop hl inc hl jr out_on message:db 0dh,0ah,'Video-Routinen und VT52-Emulation installiert !' db 0dh,0ah,07h,0ffh ld_hlhl:ld e,(hl) inc hl ld d,(hl) ex de,hl ret ; ; ------ >>> Patch-Tabelle f}r CPC 664/6128 <<< ---- ; ptchtbl:defb 01 defw 0b758h defb patch02-patch01-2 defw 0b72eh defb patch03-patch02-3 defw 0f8a7h ;AND A, RET M defb patch04-patch03-1 defw 0b726h defb patch05-patch04-2 defw 0b726h defb patch06-patch05-2 defw 0b759h defb patch07-patch06-2 defw 0b763h defb patch08-patch07-2 defw 0b759h defb patch09-patch08-2 defw 0b758h defb patch10-patch09-1 defw 0b7c4h defb patch12-patch10-3 defw 0b7c6h defb patch13-patch12-1 defw 0b7c4h defb patch14-patch13-3 defw 0b7c6h defb patch15-patch14-2 defw 0b72fh defb patch16-patch15-1 defw 0b7c4h defb patch17-patch16-3 defw 0b7c6h defb patch18-patch17-2 defw 0b72fh ; defb 0ffh ;Ende der Patch-Tabelle fast_end: .dephase end