;************************************************ ;Betriebssystem BIC Teil: Bildausgabe ;Bearbeiter: Gaertner EEM ; ; STAND: 23.05.89 ; FILE: BICGAE.S ; ;------------------------------------------------ global CURSS global CURSRD global JPVER5 global VHOME global BEEP global KULIFS global VLF global CLSTSC global VCR global CSCRFK global KUREFS global CLINFK global CLIN global KUHO global ESC global WRZEMU global REZEMU global AOUTI4 global AOUTI5 global SAZLSP global ESCF7 global POP0 global DEL global TGRASC global VFTIN2 global VFTIN6 global WRMOD global FULL global STWIND global SELSCR global KEYON global KEYOFF external ERINT ;************************************************ ;Adressen Videobereiche fuer F-Tastenbelegung ; VFKEY1 equ 0FF40h VFKEY6 equ 0FF90h ;************************************************ COND ZDS.OR.K4 FLAGR EQU 98H ENDC COND CGG FLAGR EQU 0B8H ENDC PARAP EQU FLAGR READP EQU FLAGR+1 COMNP EQU READP VISDAT EQU FLAGR+4 VISMOD EQU VISDAT+1 VISADD EQU VISMOD+1 ;------------------------------ VRESET EQU 0 FIGS EQU 4CH CURS EQU 49H CURD EQU 0E0H PITCH EQU 47H VSYNC EQU 6FH ZOOM EQU 46H PRAM EQU 70H START EQU 6BH CCHAR EQU 4BH RDATWO EQU 0A0H WDATWO EQU 20H MASK EQU 4AH SYNC EQU 0EH ;************************************************************* ; Initialisierungswerte der VIS-Register VISIW defb 0 ;Reg.0 Normalmodus defb 66h ;Reg.6 Pal.farbe 3 defb 54h ;Reg.5 Pal.farbe 2 defb 42h ;Reg.4 Pal.farbe 1 defb 30h ;Reg.3 Paperfarbe schwarz defb 20h ;Reg.2 Borderfarbe schwarz defb 12h ;Reg.1 40 Zeichen,ZG-Manipulation aus ;------------------------------- ;Synchronisationsparameter BS40OA DEFB SYNC ;40 Zeichen pro Zeile 200 FS-Zeilen DEFB 8 DEFB 14H DEFB 26H DEFB 0C1H DEFB 13H DEFB 0CH DEFB 29H DEFB 0C8H DEFB 0A4H DEFB PITCH DEFB 1 DEFB 40 DEFB CCHAR ;1 Zeile = 8 FS-Zeilen DEFB 3 ;Kursor stehend 1.bis 8. FS-Zeile INICHR DEFB 87H DEFB 0A0H DEFB 39H DEFB VSYNC ;GDC in Mastermode DEFB 0 DEFB ZOOM ;ZOOM ist 0 DEFB 1 DEFB 0 DEFB PRAM ;Bildbereich 1 ab Adresse 0 , 200 FS-Zeilen DEFB 4 DEFW 0 DEFB 80H DEFB 0CH DEFB CURS ;Kursor auf Adresse 0 DEFB 3 DEFW 0 DEFB 0 DEFB MASK ;Maske FFFF alle Bits beschreiben DEFB 2 DEFW 0FFFFH DEFB FIGS ;Screibrichtung 2 Anzahl 4000H-1 (Textbereich) DEFB 3 DEFB 2 DEFW 3FFFH DEFB WDATWO ;Schreiben SPACE,gelb auf schwarz DEFB 2 DEFB 20H DEFB 6 DEFB FIGS ;s.o. (1.Grafikbereich) DEFB 3 DEFB 2 DEFW 03FFFH DEFB WDATWO ;Schreiben Farbe 0 (Paper) DEFB 2 DEFW 0 DEFB FIGS ;s.o. (2.Grafikbereich) DEFB 3 DEFB 2 DEFW 03FFFH DEFB WDATWO ;s.o. DEFB 2 DEFW 0 DEFB FIGS ;s.o. (3.Grafikbereich) DEFB 3 DEFB 2 DEFW 03FFFH DEFB WDATWO ;s.o. DEFB 2 DEFW 0 DEFB CURS ;Kursor auf Adresse 0 DEFB 3 DEFW 0 DEFB 0 DEFB MASK ;s.o. DEFB 2 DEFW 0FFFFH DEFB START ;GDC in Anzeigemodus DEFB 0 ;************************************************ ;Initialisierungswerte RAM fuer 40 Zeichenmodus ; BPA1IW defb 1 defb 40 defb 1 defb 25 defb 1 defb 1 defb 14 defw 40 ; ;Initialisierungswerte RAM fuer 80 Zeichenmodus ; BPA2IW defb 1 defb 80 defb 1 defb 25 defb 1 defb 1 defb 56 defw 80 ; ;*************************************************** ;Synchronisationsparameter fuer verschiedene Modi ISYBE1 defb 26h defb 0C1h defb 13h defb 0Ch ;------------------- defb 4Eh defb 0C3h defb 27h defb 19h ;------------------- defb 26h defb 0C1h defb 13h defb 0Ah ;------------------- defb 4Eh defb 0C3h defb 2Bh defb 14h ;------------------- ISYBE2 defb 14h defb 0FAh defb 2Ch ;------------------- ISYBE3 defb 29h defb 0C8h defb 0A4h ;-------------------- CHRSTD defb 0 ;Initwert fuer SZFLAG defb 09 ;Init.werte fuer Zeichen und Kursor defb 07 defb 0A0h defb 84h defb 39h ;-------------------------------- ;UP zum Test Slot mit ZG INZGUP out (PPIA),a ld de,(ZG+10h) ld hl,7F3Eh rst 20h ;CPREG ret ;Initialisierung Bilschirmanzeige ;-------------------------------- BSINIT call XBSINI di ld a,90h ;SCP-ROM zuschalten call INZGUP jr z,BSINI1 ld a,80h call INZGUP jr z,BSINI1 ld a,0B0h out (PPIA),a BSINI1 LD HL,ZG ;ZG LADEN LD C,VISDAT LD A,13H OUT (VISMOD),A ;ZG-MANIPULATION EIN XOR A ;ZAEHLER 256 INITZG OUT (VISADD),A ;ZG-ADRESSE LD B,8 OTIR INC A JR NZ,INITZG ld a,0A0h ;SCP-ROM abschalten out (PPIA),a ;------------------------------ INIVIS INC C ;VIS PROGAMMIEREN LD HL,VISIW LD B,BS40OA-VISIW OTIR dec hl ld a,(hl) ld (VIREG1),a ;------------------------------ INIGDC LD HL,BS40OA+1 ;Synchronisationsparameter push hl LD E,19 ;ANZAHL DER KOMMANDOS XOR A out (COMNP),a ;VRESET CALL IGDCU3 EI pop hl dec hl ld de,SYNBER ld bc,18 ldir ld bc,6 ;Initial. Zeichen- und Kursorwerte ld de,SZFLAG ;und SZFLAG ld hl,CHRSTD ldir jp CLSTS3 ;ZLSTAT INIT. ;----------------------------- ; GDC-KOMMANDOS ABARBEITEN ;IN: HL ADR.SPEICHEN KOMMANDOS UND PARAMETER ; E ANZAHL DER KOMMANDOS ; IGDCU0 LD A,(HL) ;Kommandobyte in A IGDCU1 CALL COMND ;Kommando an GDC INC HL IGDCU3 LD B,(HL) ;Anzahl der Parameter in B INC HL DEC B INC B JR Z,IGDCU2 ;keine Parameter CALL PARAM0 ;Parameter an GDC IGDCU2 DEC E ;Anzahl der Kommandos -1 JR NZ,IGDCU0 RET ;alle Kommandos fertig ;************************************************ ; SELect SCReen ; IN: bc Screennr./seite aktiv ; de Screennr./seite visuell ; OUT af s=m FC-ERROR s=p i.o. ;------------------------------ SELSCR di call TGRASC call c,TXRET ;Parameter Textmodus retten push de ld d,b ld e,c call REMASK ;Maske auf 0FFFFh ld hl,(PAGEAK) rst 20h jr z,SELSC6 ;aktive Seite bleibt ex de,hl ld (PAGEAK),hl ld a,h push af ld hl,SCAKTA-2 ld c,7 call JPVER5 ;Routine fuer Aktiven Screen anspringen ;----------------------------- ; Speicherbereich loeschen, falls in ; anderem Modus verwendet pop af cp 4 jr z,SELSC6 ;Plotter and 0F7h ; 8,9 --> 0,1 push af ld hl,TBTXT ;Tabelle der Statusbytes fuer Textseiten cp 2 jr c,SELSC2 ld hl,TBTXT+16 ; -"- fuer Grafikseiten SELSC2 and 1 ; Modus 0,2 oder 1,3,5 ? ld b,0 ld a,(PAGEAK) jr z,SELSC5 sla a ;Modus 1,3,5 Seitenzahl*2 ld c,a ;bc: Seitenzahl*2 add hl,bc pop af ;a: aktueller Modus cp (hl) jr z,SELSC4 ;Modus stimmt ld (hl),a ;neuen Modus laden inc hl ;naechster Speicherbereich SELSC3 ld (hl),a ;neuen Modus laden call CLSASC jr SELSC6 ;fertig SELSC4 inc hl ;naechster Speicherbereich cp (hl) jr nz,SELSC3 ;2. Bereich stimmt nicht jr SELSC6 ;Modus stimmt ->fertig SELSC5 ld c,a ;Modus 0,2 add hl,bc pop af ;a: aktueller Modus cp (hl) jr nz,SELSC3 ;Modus stimmt nicht ;--------------------------------------------------------- ; visuellen Modus und Seite einstellen SELSC6 pop de ld hl,(PAGEVI) rst 20h jp z,SELSC9 ;visuelle Seite bleibt ex de,hl ld (PAGEVI),hl SELSC7 in a,(FLAGR) ;warten auf Vertikalsynchronisation and 20h jr nz,SELSC7 SELS71 in a,(FLAGR) and 20h jr z,SELS71 ld a,h cp d jp z,SELSC8 ;Modus bleibt nur Seite aendern ld a,0Ch ;Bildschirm dunkel call COMND ld a,h ;-------------------------------Routine fuer visuellen Modus ; IN: a Modus SCREVI push af ld de,SYNBER+3 ld bc,4 ld hl,ISYBE1 rra push af ld a,12h jr nc,SCREV0 ;40 Zeichen add hl,bc ;80 Zeichen dec a dec a SCREV0 out (VISMOD),a ;Frequenz vom VIS einstellen ld (VIREG1),a ld a,(MONSW) and a jr z,SCREV1 ;TV add hl,bc add hl,bc ;Monitor SCREV1 ldir pop af ld a,80 ;PITCH-Parameter jr c,SCREV2 rrca ;40 Zeichen SCREV2 ld (SYNBER+12),a pop af ;a : visueller Modus call TGRAS1 ;Modus-Test ld hl,PCHAR jr nc,SCREV4 ;Grafik-Modus and 8 ;Test auf Abstand push af call TGRASC ;Grafikmodus aktiv ld a,0 jr nc,SCREV3 ;Kursor immer aus ld a,(CURSW) and a jr z,SCREV3 ;Kursor aus ld a,80h ;Kursor ein SCREV3 ld (hl),a pop af jr z,SCREV6 ld a,(CURSO0) ;mit Abstand or (hl) push hl ld hl,ISYBE2 ;Parameter mit Abstand ex (sp),hl jr SCREV7 SCREV4 cp 5 ld a,1 ;Hochaufloesend jr nz,SCREV5 inc a ;Multicolor SCREV5 push af xor a ld (hl),a ;PCHAR laden inc hl ld (hl),a inc hl ld (hl),a ld hl,ISYBE3 ;Parameter Grafik pop af jr SCREV9 SCREV6 ld a,(CURSO1) ;ohne Abstand or (hl) push hl ld hl,ISYBE3 ;Parameter ohne Abstand ex (sp),hl SCREV7 ld (hl),a ;1. PCHAR-Parameter inc hl ld a,(CURSO2) ld (hl),a ld a,(CURGK) and a jr z,SCREV8 ;Normalkursor ld a,(CURSO3) ld (hl),a ;Kleinkursor blinkend SCREV8 inc hl ld a,(CURSO4) ld (hl),a pop hl xor a ;Textmodus SCREV9 out (VISMOD),a ;VIS-Register 0 ld (VIREG0),a ld bc,3 ldir ;Parameter laden ab SYNBER+7 ld hl,SYNBER ld e,3 call IGDCU0 ;1. 3 Synchr.befehle ausgeben ;---------------------------- SCREVX ld hl,(PAGEVI) ld a,h call TGRAS1 push af call nc,GVRMBE ;Grafik pop af push af call c,VRAMBE ;Text Anf.adr. BWS berechnen ld (VVRAM),hl ld (PPARAM),hl ld hl,PPARAM+2 pop af cp 8 jr c,SCREVY ld (hl),0a0h inc hl ld (hl),0fh ;250 Bildschirmzeilen jr SCREVZ SCREVY ld (hl),80h inc hl ld (hl),0ch ;200 Bildschirmzeilen SCREVZ ld b,4 call PARAM2 ld a,0Dh ;Bildschirm hell call COMND call VFTINI ;F-Tasten initialisieren jp BKEYAN ;----------------------------- SELSC8 call SELSC9 ;Kursuorbehandlung jr SCREVX ;----------------------------- ; Kursor stellen, wenn nur aktive Seite anders SELSC9 call TGRASC jr nc,SELSCA ;Grafik Kursor immer aus ld a,(CURSW) ;Text Kursor entsprechen Kursorschalter and a jr z,SELSCA ;Kursor aus ld a,(PCHAR) ;Kursor ein or 80h jr SELSCB SELSCA ld a,(PCHAR) and 7Fh SELSCB ld (PCHAR),a push hl jp KURES3 ;----------------------------- SCAKTA defb 0 ;Tabelle der Ansprungadressen fuer Routinen defw SCREA0 ;bei aktivem Screen defb 1 defw SCREA1 defb 2 defw SCREA2 defb 3 defw SCREA3 defb 5 defw SCREA5 defb 8 defw SCREA0 defb 9 defw SCREA1 ;****************************** ;Umschaltung Monitor <--> TV MONCTR ld a,(MONSW) xor 1 ld (MONSW),a ld hl,(PAGEVI) ld d,4 jp SELSC7 ;****************************** aktive Seite einstellen SCREU0 ld hl,BPA1IW ;Bildparameter 40 Zeichen jr SCREU7 SCREU1 ld hl,BPA2IW ;Bildparameter 80 Zeichen SCREU7 ld de,SPFIRS ld bc,9 ldir ret ;----------------------------- SCREA0 call SCREU0 jr SCREA7 SCREA1 call SCREU1 SCREA7 ld hl,(PATXAK) ;h SCRNTX cp h push af ld hl,ZLLAST ld a,(FKTANZ) ; 0 - keyoff -1 - keyon add a,(hl) ; +25 standard ld (hl),a SCREA8 ld hl,(PAGEAK) ;letzten Textmodus inc l dec l jr nz,SCREA9 ;nur wenn Seite 0 ld (PATXAK),hl ;merken SCREA9 call VRAMBE ld (AVRAM),hl call CURSS ;Kursor auf Bildanfang call REMASK pop af jr z,TXLAD ;alter Textscr. wieder aktiv ret ;----------------------------- REMASK ld hl,0FFFFH ld (PPARAM),hl ld b,2 ld a,MASK jp PARAM3 ;Maske fuer Text auf FFFF ;----------------------------- ;zeilenstatus u. kursorpos. fuer TeXtmodus (seite 0) RETten TXRET ld a,(PAGEAK) and a ret nz ;nicht Kommandoseite push bc push de ld hl,(CRSZL) ld (CRSTX),hl ld hl,ZLSTAT ld de,ZLSTTX ld bc,25 ldir pop de pop bc ret ;----------------------------- ;zeilenstatus u. kursorpos. fuer TeXtmodus (seite 0) LADen TXLAD ld a,(PAGEAK) and a ret nz ;nicht Seite 0 ld hl,ZLSTTX ld de,ZLSTAT ld bc,25 ldir ld hl,(CRSTX) jp SAZLSP ;Kursor auf alte Position ;----------------------------- VRAMBE ld b,l ; b Seitennr. ld a,h ; c Screennr. ld hl,0 ld de,400h VRAMB0 inc b dec b ret z ; Seite 0 ex de,hl rra jr nc,VRAMB1 add hl,hl ;Screen 1 bzw. 3,5 VRAMB1 ex de,hl VRAMB2 add hl,de djnz VRAMB2 ret ;**********************************: GVRMBE ld b,l ;l Seitennr. ld a,h ;h Screennr. ld hl,4000h ;Anfang Grafik-RAM ld de,2000h jr VRAMB0 ;*********************************** SCREA5 ld hl,320 ld (PVIEW2),hl ld hl,80 jr SCREA4 SCREA2 ld hl,320 ld (PVIEW2),hl ld hl,40 jr SCREA4 SCREA3 ld hl,640 ld (PVIEW2),hl ld hl,80 SCREA4 ld (WIDTH),hl ld hl,(PAGEAK) call GVRMBE ld (AVRAM),hl ;--------------------------------- REGRKU call CURSS ;Grafikkursor links unten ld b,20 ld hl,XALT REGRK1 ld (hl),0 inc hl djnz REGRK1 ret ;----------------------------------- ;SET BORderfarbe ; SETBOR and 0Fh or 20h ;VIS-Register 2 ld (VIREG2),a SETBO1 out (VISMOD),a ret ;-------------------------------- ;SET PAPerfarbe ; SETPAP and 0Fh or 30h ;VIS-Register 3 ld (VIREG3),a jr SETBO1 ;-------------------------------- ;SET PALette ; SETPAL push hl ld hl,PAL11 rra jr nc,SETPA1 ;gerade --> Pal.1 ld hl,PAL21 ;ungerade --> Pal.2 SETPA1 ld b,3 ld c,VISMOD otir push de dec hl ld bc,3 ld de,VIREG6 lddr ;Palette merken pop de pop hl ret ;-------------------------------- STFTAT defm 'screen ' defw 0 defw 0 defw 0 defw 0 defb 0 ; defb 15h defm 'auto ' defw 0 defw 0 defw 0 defw 0 defw 0 ; defb 15h defm 'load"' defw 0 defw 0 defw 0 defw 0 defw 0 ; defb 15h defm 'list ' defw 0 defw 0 defw 0 defw 0 defw 0 ; defb 15h defm 'run' defb 0Dh defb 0 defw 0 defw 0 defw 0 defw 0 defw 0 ; defb 15h defm 'color 6,0,0 ' defb 0Dh defw 0 ; defb 15h defm 'files' defb 0Dh defb 0 defw 0 defw 0 defw 0 defw 0 ; defb 15h defm 'save"' defw 0 defw 0 defw 0 defw 0 defw 0 ; defb 15h defm 'list.' defb 0Dh defb 1Eh defb 1Eh defb 0 defw 0 defw 0 defw 0 ; defb 15h defm 'run' defw 0 defw 0 defw 0 defw 0 defw 0 defw 0 ;-------------------------------- ;FunktionsTasten INItialisierung ; FTINI ld bc,160 ld de,FKEY1 ld hl,STFTAT ldir ;------------------------------- ;Videobereich fuer FTasten INItialisieren ; VFTINI call CURSRD push hl ld b,7 ld a,(SCRNRV) rrca jr nc,VFTIN1 ;40 Zeichen Screen rl b ;80 Zeichen Screen VFTIN1 ld c,5 ;5 F-Tasten push bc ld hl,VFKEY1 ;Videobereich 1 ld de,FKEY1 call VFTIN2 pop bc ld hl,VFKEY6 ;Videobereich 2 ld de,FKEY6 call VFTIN2 pop hl call CURSS ret ;------------------------------- VFTIN2 call CURSS ;Kursor auf Anfang Videobereich push de push bc ex de,hl VFTIN7 call XVFTIN VFTIN3 call WRMOD VFTIN4 ld a,(hl) inc hl call CHRTST jr nc,VFTIN4 ;GCH jr nz,VFTIN5 ;2. Grafikbyte cp 20h jr nc,VFTIN5 ;kein Steuerzeichen xor a VFTIN5 out (PARAP),a call FULL ld a,(ACTCOL) out (PARAP),a djnz VFTIN3 VFTIN6 ld c,0 ;Leerzeichen ld b,a ;Farbcode call CHRTS0 ;F-Taste mit 0 abschliessen pop bc pop hl dec c ret z ;5 F-Tasten fertig ld de,16 add hl,de push hl push bc jr VFTIN7 ;------------------------------- ;KEYanzeige OFF ; KEYOFF call XKEYOF push hl xor a call SFATGS ;Test Grafikscreen di call SCREVX ;nein pop hl ret ;------------------------------- ;Bedingte KEYanzeige ; BKEYAN ld a,(FKTANZ) and a jr z,KEYON4 ;------------------------------- ;KEYanzeige ON ; KEYON call XKEYON di ld a,0FFh call SFATGS ret nc ;Grafikscreen push hl ld hl,(VVRAM) ld (PPARAM),hl ;Bildbereich 1 ld hl,PPARAM+2 ld a,(SCRNRV) cp 8 jr c,KEYON1 ;Screen 0 und 1 ld (hl),0 inc hl ld (hl),0Fh ;240 FS-Zeilen jr KEYON2 KEYON1 ld (hl),0 inc hl ld (hl),0Ch ;192 FS-Zeilen KEYON2 ld a,(ASTAMT) rrca ld de,VFKEY1 ld a,1 ;kein Shift jr c,KEYON3 ld de,VFKEY6 xor a ;Shift KEYON3 ld (FTSHI),a inc hl ;2.Bildbereich ld (hl),e inc hl ld (hl),d ;Anfangsadr. entsprechend Shift-Taste inc hl ld (hl),0A0h inc hl ld (hl),0 ;10 FS-Zeilen ld b,8 call PARAM2 pop hl KEYON4 ei ret ;-------------------------------- ;Set FktAnz und Test GrafikScreen ;IN : A 0/FF ; SFATGS ld (FKTANZ),a TGRASV ld a,(SCRNRV) jr TGRAS1 ;------------------------------ ;Test ,ob Grafik-Bs ; OUT: NC Grafik (2,3,4,5) TGRASC ld a,(SCRNRA) TGRAS1 cp 2 ret c ;0,1 cp 6 ccf ret ;*********************************** ;KURSOR POSITIONIEREN ; IN: HL SPALTE,ZEILE ; CRSPOS LD A,1BH rst 18h LD A,59H rst 18h LD A,L ADD A,1FH rst 18h LD A,H ADD A,1FH rst 18h RET ;************************************************, ;CHaRacterTeST ; ;IN: A:Zeichen ;OUT: NC/ Z, wenn A=GCH (01H) ; C/NZ, wenn A=2.Grafbyte und A=A-40H ; NC/NZ, sonst ; CHRTST push hl push af ld hl,GCHSW xor a cp (hl) ld (hl),a jr z,CHRT6 pop af sub 40H cp 20H jr c,CHRT4 add a,40H CHRT2 cp a scf CHRT4 pop hl ret CHRT6 pop af cp 1 jr nz,CHRT2 ld (hl),a pop hl ret ;************************************************ ;INput BC-mal zeichen aus bws in DE ff. ; ; in: hl bwsadresse bc anzahl(max.127) de zielpuffer ; ;------------------------------------------------ INBCDE ld b,c ld c,PARAP INBC1 in a,(FLAGR) and 4 ;FIFO leer ? jr z,INBC1 ;nein ld a,CURS ;ja out (COMNP),a out (c),l out (c),h ;Kursor setzen ld a,FIGS out (COMNP),a ld a,2 ;Richtung 2 out (PARAP),a out (c),b xor a out (PARAP),a ;Anzahl an GDC sla b ;Anzahl*2 ld c,READP ex de,hl ;Zieladresse in hl INBC2 in a,(FLAGR) and 4 ;FIFO leer - bereit fuer Leserichtung ? jr z,INBC2 ;nein ld a,RDATWO out (COMNP),a INBC3 in a,(FLAGR) and 1 ;Daten bereit ? jr z,INBC3 ;nein ini jr nz,INBC3 ;weitere Bytes lesen ret ;----------------------------------------------- ; OuT BC-mal zeichen an bws aus quellpuffer DE ; ; in: hl bws-adresse bc anzahl(max.127) de quellpuffer ; ;----------------------------------------------- OTBCDE in a,(FLAGR) ;FIFO leer ? and 4 jr z,OTBCDE ;nein ld a,CURS out (COMNP),a ld b,c ld c,PARAP out (c),l out (c),h ex de,hl sla b ;Anzahl*2 ld a,WDATWO out (COMNP),a OTBC1 in a,(FLAGR) and 2 ;FIFO voll ? jr nz,OTBC1 ;ja outi jr nz,OTBC1 ;weitere Bytes ret ;--------------------------------- ; OUt BC-mal Zeichen aus ; IN: bc Anzahl (max 127) ; a Zeichen ; hl Adresse VIDEO-RAM OUTBCA ld b,c ld c,a call CURSS sla b ld a,WDATWO call COMND OUTBC1 in a,(FLAGR) and 2 jr nz,OUTBC1 ld a,c out (PARAP),a djnz OUTBC1 ret ;************************************************* ;REad ZEichenMUster ; REZEMU ld c,a defb 3eh WRZEMU xor a push af di REZEM0 in a,(FLAGR) and 20h jr z,REZEM0 ld a,(VIREG1) or 1 ;ZG-Manipulation ein out (VISMOD),a ld a,c out (VISADD),a pop af or a ld b,8 jr nz,REZEM1 ld c,VISDAT otir jr ZEMU2 REZEM1 ld de,ZEIPUF REZEM2 in a,(VISDAT) ld (de),a inc de djnz REZEM2 ZEMU2 ld a,(VIREG1) out (VISMOD),a ei ret ;************************************************* ;Get CHaracter ADdress ; ; in : HL spalte/zeile ; out: HL bws-adresse de uv ;--------------------------------------------. GCHAD dec h dec l ld b,0 ld c,h ;BC Spalte-1 push bc ld h,b ;HL Zeile-1 ld a,(SCRNRA) rra jr nc,GCHAD1 add hl,hl GCHAD1 add hl,hl add hl,hl add hl,hl ld c,l ld b,h add hl,hl add hl,hl add hl,bc pop bc add hl,bc ld bc,(AVRAM) add hl,bc ret ;-------------------------------------------- ; Get Line ATtribut und ADresse ; ; in: l zeile ; out: a attribut de adresse ; ;------------------------------------------- GLATAD push hl ld de,ZLSTAT-1 ld h,0 add hl,de ld a,(hl) ex de,hl pop hl and a ret ;------------------------------------------ SEZL defb 3eh REZL defb 0afh ;------------------------------------------ SLIAT push af call GLATAD pop af ld (de),a ret ;---------------------------- ;ReaD from VideoRaM ;in: hl VRAMAdresse ;out: b Farbcode c=a Zeichencode hl,de uv RDVRM push de ld de,RDVRM1 push de push hl jp CHRAS1 RDVRM1 pop de ei ret ;---------------------------- ;WRite To VideoRaM ;in: hl VRAMAdresse b Farbcode c Zeichencode ;out: hl,de uv WRTVRM ld c,a WRTVR1 push de push hl call CURSRD ex (sp),hl ld de,WRTVR2 ;Ruecksprungadr. kellern push de push hl push bc jp CHRTS1 WRTVR2 ex (sp),hl call CURSS pop hl pop de ei ret ;---------------------------- ;Einstellung Monitor- oder TV-Modus ; MONTV push af ;a=0 von SCP a=0FFh von RBASIC ld a,(SLCTRL) cp 94h ;alter VIS !!!!!!!!!!!!! ld b,0 jp z,MONTV4 ld b,8 MONTV4 in a,(78h) ;Adressbyte fuer Vernetzung (DSE-typisch) and 80h jr z,MONTV1 xor a ;a=0 jr MONTV2 ;DSE nicht angschlossen -> TV-Modus MONTV1 inc a ;a=1 MONTV2 ld (MONSW),a ;Monitormodus pop af and a jr nz,MONTV3 ;RBASIC ->SCREEN0/8 inc b ;SCP -> SCREEN1/9 MONTV3 ld d,b ld c,0 ld e,c jp SELSCR ;---------------------------- ;LAst TeXTModus einstellen LATXTM call TGRASC ret c ;bereits Textscreen eingestellt ld bc,(PATXAK) ld de,(PAGEVI) call XLATXM LATXT1 jp SELSCR ;----------------------------- ;KOMmandoSCReen einstellen (letzter textmodus seite 0) KOMSCR ld a,(SCRNTX) ld b,a ld d,a ld c,0 ld e,c jr LATXT1 ;---------------------------- ;Screen entsprechend Ansprungadr. Seite 0 SSCR0 ld a,0 defb 1 SSCR1 ld a,1 defb 1 SSCR2 ld a,2 defb 1 SSCR3 ld a,3 defb 1 SSCR8 ld a,8 defb 1 SSCR9 ld a,9 ld b,a ld d,a ld c,0 ld e,c call SELSCR jp CLSASC ;************************************************+ ;OUTput A-reg in SCreen ; OUTASC di push hl push de push bc push af call XOUASC ; ------------------------ call TGRASC jr nc,POP1 ; ------------------------ pop af push af call AOUTIK ; ------------------------ POP0 ld a,(CRSSP) dec a ld (CRSSPI),a ;------------------------------- POP1 pop af POP2 pop bc pop de pop hl ei ret ;************************************************ ;A-reg-OUTput und Inc Kursor ; AOUTIK call CHRTST ret nc ;A=GCH-->RET ; ------------------------ ld c,a jr nz,AOUTI5 ;A=2.Grafbyte--> ;------------------------------- ld hl,ESCSW ld a,(hl) and a ;ESC-Folge? jp nz,ESCFB ;Ja--> ; ------------------------ ld a,c AOUTST cp 20H ;Steuerzeichen? jr c,JPVER ; Ja-->JPVER ; ------------------------ AOUTI5 ld hl,(CRSZL) ;HL=Spalte/Zeile cp 7FH jp z,DEL ;A=DEL-->DEL ;------------------------------- AOUTI4 LD A,(ACTCOL) LD B,A call CHRTS0 LD A,(SPLAST) CP H JR Z,AOUTI6 INC H LD (CRSZL),HL RET ;------------------------------- AOUTI6 call REZL ;ZEILENSTATUS 0 -- FORTSETZUNG ld a,(SPFIRS) ld h,a ;Spalte=1 VLF call KURU ret nz ;Kein Bildende-->RET ;------------------------------- call SAZLSP ld a,(ZLFIRS) ld l,a jp BIHORO ;************************************************ ;JP-VERteiler ; ;IN: A:Byte ;OUT: NC/NZ/M, wenn nicht gefunden ; NC/ Z/P, wenn UP abgearbeitet ; JPVER ld hl,VT1-2 ;Tabadr in HL ld c,0EH ;Tablaenge in C ;=============================== JPVER5 inc hl inc hl and a dec c ;Tabende? ret m ; Ja-->RET ; ------------------------ cp (hl) ;Gefunden? inc hl jr nz,JPVER5 ; Nein--> ;-------------------------------- ld c,(hl) inc hl ld b,(hl) ;BC=UP-Adr ld hl,(CRSZL) ;HL=Spalte/Zeile call JPBC xor a ret ;------------------------------- JPBC push bc ret ;JP (BC) ;************************************************ VT1 DEFB 7 DEFW BEEP DEFB 8 DEFW KULIFS DEFB 9 DEFW TAB DEFB 0AH DEFW VLF DEFB 0BH DEFW VHOME DEFB 0CH DEFW CLSTSC DEFB 0DH DEFW VCR DEFB 1BH DEFW ESC DEFB 1CH DEFW KUREFS DEFB 1DH DEFW KULIFS DEFB 1EH DEFW KUHO DEFB 1FH DEFW KURU DEFB 17H DEFW STWIND DEFB 18H DEFW MONCTR ;************************************************ ESCT DEFB 6AH DEFW CLSTSC DEFB 45H DEFW CLSTSC DEFB 4BH DEFW CLINFK DEFB 4AH DEFW CSCRFK DEFB 6CH DEFW CLIN DEFB 4CH DEFW INSZL DEFB 4DH DEFW DELZL DEFB 59H DEFW ESCGY DEFB 41H DEFW KUHO DEFB 42H DEFW KURU DEFB 43H DEFW KUREFL DEFB 44H DEFW KULIFL DEFB 48H DEFW VHOME DEFB 78H DEFW ESCX DEFB 79H DEFW ESCKY ;************************************************ ESCX ld a,1 DEFB 1 ESCKY DEFB 3EH DEFB 2 DEFB 1 ESCGY DEFB 3EH DEFB 4 DEFB 1 ESC DEFB 3EH DEFB 0FFH ld (ESCSW),a ret ;------------------------------- ;ESCX LD A,1 ; LD BC,23EH ;ESC1 LD BC,43EH ;ESC2 LD BC,0FF3EH ;ESC3 LD (ESCSW),A ; RET ;ESCKY LD A,2 ; JR ESC1 ;ESCGY LD A,4 ; JR ESC2 ;ESC LD A,0FFH ; JR ESC3 ;************************************************ ;ESCapeFolge-Behandlung ; ;IN: HL:ESCSW / C:Zeichen nach ESC /A:Steuerbyte (1,2,3,4,FF) ; ESCFB jp p,ESCF1 ;ESC x/Y/y-->ESCF1 ; ------------------------ ld (hl),0 ld a,c ld hl,ESCT-2 ld c,15 jp JPVER5 ;------------------------------- ESCF1 dec a jr z,ESCF3 ; ------------------------ dec a jr z,ESCF4 ;------------------------------- dec a ld (hl),a ld a,(SPLAST) ld de,CRSSP push af jr z,ESCF2 ; ------------------------ ld (hl),3 ;ESC Y Zeile ld a,(ZLLAST) dec de ; ------------------------ ESCF2 ld b,a ;ESC Y Zeile Spalte ld a,c sub 20H cp b inc a ld (de),a jr c,ESCF2A ; ------------------------ ld a,b ld (de),a ;Begrenzung auf Bild ESCF2A pop af ret nz ld hl,(CRSZL) jp SAZLSP ;================================ ESCF3 ld (hl),a ld a,c sub 34H jr z,ESCF5 ;ESC x 4-->Grosskursor dec a jr z,ESCF7 ;ESC x 5-->Kursor ein ret ESCF4 ld (hl),a ld a,c sub 34H jr nz,ESCF6 ;ESC y 5-->Kursor aus inc a ;ESC y 4-->Kleinkursor ESCF5 ld (CURGK),a jr ESCF8 ESCF6 dec a ret nz inc a ESCF7 ld (CURSW),a ESCF8 call KUSENZ call KUREZ ret ;************************************************ ;KUsor SEtzen, wenn cursw=Zero ; KUSEZ ld a,(CURSW) and a ret nz jr KUSE ;************************************************ ;KUrsor SEtzen, wenn cursw=Not Zero ; KUSENZ ld a,(CURSW) and a ret z ;------------------------------- KUSE call XKUSE call TGRASV ret nc ;Grafik push hl ld hl,PCHAR ld a,(hl) or 80h jr KURES1 ;************************************************ ;KUrsor REset, wenn cursw=Zero ; KUREZ ld a,(CURSW) and a ret nz jr KURES ;************************************************ ;KUrsor REset, wenn cursw=Not Zero ; KURENZ ld a,(CURSW) and a ret z ;------------------------------- KURES call XKURES call TGRASV ret nc ;Grafik push hl ld hl,PCHAR ld a,(hl) and 7fh KURES1 ld (hl),a inc hl ld a,(CURSO2) ld (hl),a ld a,(CURGK) or a jr z,KURES3 ld a,(CURSO3) ld (hl),a KURES3 ld a,CCHAR call COMND ld b,3 ld hl,PCHAR call PARAM0 pop hl ret ;************************************************ ;KUrsor REchts For Line ; KUREFL ld a,(SPLAST) cp h ;Zeilenende? ret z ; Ja-->RET inc h ;Spalte+1 jr SAZLSP ;************************************************ ;KUrsor LInks For Screen ; KULIFS call KULIFL ret nz ;kein Zeilenanf-->RET ld a,(SPLAST) ld h,a ;Spalte=Zeilenende ;************************************************ ; KUrsor HOch KUHO LD A,(ZLFIRS) cp l ret z ;Bildanf-->RET dec l jr SAZLSP ;************************************************ ;KUrsor LInks For Line KULIFL ld a,(SPFIRS) ;1.spalte cp h ret z ;zeilenanfang dec h jr SAZLSP ;************************************************ ;KUrsor REchts For Screen ; KUREFS call KUREFL ret nz ;kein Zeiilende-->RET ld a,(SPFIRS) ld h,a ;1.Spalte ;************************************************ ;KUrsor RUnter ; KURU ld a,(ZLLAST) cp l ret z ;letzte Zeile-->RET jr c,KURU1 inc l ;------------------------------- SAZLSP ld (CRSZL),hl ;SAve ZeiLe/SPalte push af call GCHAD call CURSS pop af ret ;================================================ KURU1 dec l xor a jr SAZLSP ;************************************************ ;TABulatorbehandlung ; TAB ld a,' ' call AOUTIK ld a,(CRSSP) dec a and 7 jr nz,TAB ret ;************************************************ ;Standard-WINDOW setzen ; STWIND ld a,(SCRNRA) rra call nc,SCREU0 call c,SCREU1 ld hl,ZLLAST ld a,(FKTANZ) add a,(hl) ld (hl),a ;********************************************** ;kursor an HOME-position ; VHOME ld a,(ZLFIRS) ld l,a ;************************************************ ;CR-behandlung ; VCR ld a,(SPFIRS) ;1. spalte ld h,a jr SAZLSP ;************************************************ ;DELete ZeiLe (mit Bild nachrollen) ; DELZL call VCR ;************************************************ ;BIld HOch ROllen ; BIHORO ld a,(ZLLAST) sub l ret c ;Zeile zu gross-->RET jp z,BIHOR2 ;Letzte Zeile ;------------------------------- push af push hl ld c,a ld b,0 call GLATAD ld l,e ld h,d inc hl ldir ;Zeilenattribute umsp ; ------------------------ ld d,b ;d=0 ld hl,CUPOVO dec (hl) push bc call KURENZ pop bc pop hl ld a,(SPFIRS) ld h,a ld a,(SPLAST) sub h inc a ld e,a ;DE zeilenlaenge ;HL zeile/spalte 1.zeichen call GCHAD ;HL adresse 1.zeichen pop bc BIHOR1 push bc push de push hl ld b,d ld c,e push bc ld de,(WIDTH) add hl,de push hl ld de,ZEILPU call INBCDE ld de,ZEILPU pop hl pop bc ex (sp),hl call OTBCDE pop hl pop de pop bc djnz BIHOR1 ; ------------------------ call KUSENZ BIHOR2 ld a,(ZLLAST) ld l,a call CLIN ;Letzte Zeile loeschen ret ;************************************************ ;INSert ZeiLe ; INSZL call VCR ;************************************************ BIRURO push hl ld a,(ZLLAST) ld h,a sub l ret c jr z,BIRUR2 ld l,h push af push hl ;------------------------. ld c,a ld b,0 call GLATAD ld l,e ld h,d push hl dec hl lddr ;----------------------- pop hl ld (hl),h ld d,b push bc call KURENZ pop bc pop hl ld a,(SPFIRS) ld h,a ld a,(SPLAST) sub h inc a ld e,a call GCHAD pop bc ;----------------------- BIRUR1 push bc push de push hl ld b,d ld c,e push bc xor a ld de,(WIDTH) sbc hl,de push hl ld de,ZEILPU call INBCDE ld de,ZEILPU pop hl pop bc ex (sp),hl call OTBCDE pop hl pop de pop bc djnz BIRUR1 call KUSENZ BIRUR2 pop hl call CLIN ret ;************************************************ ;DELete zeichen ; DEL push hl call KULIFS pop hl ret z ld c,' ' ld a,(ACTCOL) ld b,a call CHRTS0 jp KULIFS ;************************************************ ;Clear LINe ; CLIN ld a,(SPFIRS) ld h,a ;-------------------------------- ; in: hl spalte/zeile ;-------------------------------- CLINFK push hl call SEZL ld a,(SPLAST) sub h ld b,0 ld c,a call PFIGS call GCHAD push hl call CURSS call WRMOD ld a,20h ;leerzeichen out (PARAP),a ld a,(ACTCOL) call FULL out (PARAP),a pop hl call CURSS pop hl ret ;************************************************ ;Clear SCReen From Kursor ; CSCRFK call CLINFK ;Loeschen akt. Zeile ld a,(ZLLAST) cp l ret c ret z ;Bildende-->RET ; ------------------------ ld a,(SPFIRS) ld h,a ;1.spalte inc l ;Zeile+1 jr CSCRFK ;************************************************ ZCLS ret nz push hl call CLSASC pop hl ret ;---------------------------------. CLSASC call TGRASC jp nc,GCLS ;Grafik-CLS ;--------------------------------- CLSTSC call KURENZ ld a,(ZLFIRS) ld l,a CLSTS1 call CLIN inc l ld a,(ZLLAST) cp l jr nc,CLSTS1 ld a,(BSKENN) BIT 1,A call z,VFTINI ;bei SCP nicht call VHOME call KUSENZ CLSTS3 ld hl,ZLSTAT ld b,25 CLSTS2 ld (hl),b inc hl djnz CLSTS2 ret ;------------------------------------------------ ; CHRASC EINGABE ZEICHEN VOM BWS ; ; IN HL SPALTE,ZEILE ; OUT: A=C=ZEICHEN ACTCOL FARBCODE ; B=FARBCODE ; ;-------------------------------- CHRASC PUSH HL CALL GCHAD CHRAS1 push hl call CURSRD ex (sp),hl CALL CURSS ld bc,1 call PFIGS CALL RDMOD IN A,(READP) PUSH AF CALL READY IN A,(READP) ld h,a POP AF ld l,a ex (sp),hl call CURSS pop bc ld a,c POP HL RET ;--------------------------------- RDMOD in a,(FLAGR) and 4 ;FIFO leer ? jr z,RDMOD ld a,RDATWO out (COMNP),a CALL READY RET ;-------------------------------------------- ; CHRTSC AUSGABE ZEICHEN IN BWS ; ; IN: C ZEICHEN HL SPALTE,ZEILE ; B FARBCODE ;------------------------------------------------ CHRTSC push hl push bc CALL GCHAD CHRTS1 in a,(FLAGR) ;FIFO leer ? and 4 jr z,CHRTS1 ;nein ld a,CURS ;ja ... Kursor setzen out (COMNP),a ld a,l out (PARAP),a ld a,h out (PARAP),a pop bc pop hl CHRTS0 ld a,WDATWO out (COMNP),a ld a,c out (PARAP),a ;AUSGABE ZEICHENCODE ld a,b out (PARAP),a ;AUSGABE FARBCODE ret ;------------------------------------------------ ; WRMOD VORBEREITUNG WORTAUSGABE AN GDC ; WRMOD LD A,WDATWO CALL COMND CALL FULL RET ;------------------------------------------------ ; kursor setzen ; ; in: hl kusoradresse ; out: bc,de,hl uv ;------------------------------------------------ CURSS in a,(FLAGR) ;FIFO leer ? and 4 jr z,CURSS ;nein ld a,CURS out (COMNP),a ld a,l out (PARAP),a ld a,h out (PARAP),a ret ;----------------------------------------------- ; kursuradresse lesen ; ; out: hl kursoradresse ; ;---------------------------------------------- CURSRD in a,(FLAGR) and 4 ;FIFO leer ? jr z,CURSRD ld a,CURD out (COMNP),a CURSR1 in a,(FLAGR) ;Daten im FIFO ? and 1 jr z,CURSR1 ;nein in a,(READP) ld l,a CURSR2 in a,(FLAGR) ;Daten im FIFO ? and 1 jr z,CURSR2 ;nein in a,(READP) ld h,a CURSR3 in a,(FLAGR) ;Daten im FIFO ? and 1 jr z,CURSR3 ;nein in a,(READP) ;3.Byte wegwerfen CURSR4 in a,(FLAGR) ;Daten im FIFO ? and 1 jr z,CURSR4 ;nein in a,(READP) ;4.Byte wegwerfen CURSR5 in a,(FLAGR) ;Daten im FIFO ? and 1 jr z,CURSR5 ;nein in a,(READP) ;5.Byte wegwerfen ret ;************************************************************ ; Grafikroutinen ; ; TXTGSC push hl push de push bc push af call CHRTST jr nc,TXTG75 jr nz,TXTG10 cp 0DH jr z,TXTG80 cp 20H jr c,TXTG75 ;=============================== TXTG10 call REZEMU ld hl,(YALT) ex de,hl ld bc,(XALT) call TPPOS jr nc,TXTG75 call MKPMA ld de,ZEIPUF+7 ld c,8 TXTG20 ld b,8 call LDPMA push hl push af ld a,(de) TXTG30 rrca push af call c,SPOINT call APRGT pop hl jr c,TXTG40 push hl pop af djnz TXTG30 TXTG40 pop af pop hl call STPMA call APDWN jr c,TXTG50 dec de dec c jr nz,TXTG20 TXTG50 ld hl,(XALT) ld de,8 add hl,de ld de,(PVIEW2) rst 20h jr nc,TXTG80 ld (XALT),hl TXTG75 jp POP1 ;------------------------------- TXTG80 xor a ;CY=0 ld hl,(PVIEW1) ld (XALT),hl ld hl,(YALT) ld de,8 sbc hl,de ld de,(PVIEW3) rst 20h ld de,(PVIEW4) jr c,TXTG85 rst 20h jr c,TXTG90 TXTG85 ex de,hl dec hl TXTG90 ld (YALT),hl jr TXTG75 ;************************************************************ ;Test PunktPOSition ; ;IN: DE=log. Zeile / BC=log. Spalte ;OUT: ; TPPOS push hl push bc ld b,1 ex de,hl ld a,h add a,a jr nc,TPPOS1 ld hl,0 jr TPOS2 TPPOS1 ld de,(PVIEW4) ;Standard 200 rst 20h jr c,TPPOS3 ex de,hl dec hl TPOS2 ld b,0 TPPOS3 ex (sp),hl ld a,h add a,a jr nc,TPPOS4 ld hl,0 jr TPPOS5 TPPOS4 ld de,(PVIEW2) ;Standard 320 rst 20h jr c,TPPOS6 ex de,hl dec hl TPPOS5 ld b,0 TPPOS6 pop de ld a,b rrca ld b,h ld c,l pop hl ret ;************************************************************ ;Test SCreen 2 oder 3 ; ;OUT: Z = Screen 2 ; NZ = 3 ; TSC23 ld a,(SCRNRA) sub 2 ret ;************************************************************ ;MaKe PunktMaske und punktAdresse ; ;IN: BC=X-Koordinate / DE=Y-Koordinate ; MKPMA push bc xor a ld hl,199 sbc hl,de ex de,hl ld a,(SCRNRA) cp 5 ld a,c jr z,MKPMA2 ld hl,MKPMAT and 7 pop bc srl b rr c push bc jr MKPMA3 MKPMA2 ld hl,MKPMT5 and 3 MKPMA3 ld c,a ld b,0 add hl,bc ld a,(hl) ld (POIMA),a ;--------------------------- ex de,hl ld a,(SCRNRA) rrca jr nc,MKPMA1 add hl,hl MKPMA1 add hl,hl add hl,hl add hl,hl ld d,h ld e,l add hl,hl add hl,hl add hl,de pop bc srl b rr c srl b rr c add hl,bc ld bc,(AVRAM) add hl,bc ld (POIADR),hl ret ;=============================== MKPMAT defb 1 defb 2 defb 4 defb 8 defb 10h defb 20h defb 40h defb 80h ;------------------------------- MKPMT5 defb 11h defb 22h defb 44h defb 88h ;************************************************************ ;LoaD PunktMAske und punktAdresse ; LDPMA ld a,(POIMA) ld hl,(POIADR) ret ;************************************************************ ;STore PunktMAske und punktAdresse ; STPMA ld (POIMA),a ld (POIADR),hl ret ;************************************************************ ;Get POINT ; GPOINT push bc push de push hl call LDPMA push af call RDVRM ld a,(SCRNRA) cp 5 jr z,GPOIN3 pop af ;Screen2,3 push af and c jr z,GPOIN1 ld a,1 GPOIN1 ld c,a pop af and b jr z,GPOIN2 ld a,2 GPOIN2 or c jr GPOIN8 ;------------------------ GPOIN3 pop af ;Screen5 push af ;a: Punktmaske ld e,0 and c jr z,GPOIN5 ; im Lowbyte kein Farbanteil ld c,a and 0F0h ; Test 1. Halbbyte jr z,GPOIN4 ; Kein Farbanteil inc e inc e ; Farbe +2 ld a,c and 0Fh ; Test 2. Halbbyte jr z,GPOIN5 ; kein Farbanteil GPOIN4 inc e ; Farbe +1 GPOIN5 pop af ; a: Punktmaske and b jr z,GPOIN7 ; im Highbyte kein Farbanteil ld b,a and 0F0h ; Test 1.Halbbyte jr z,GPOIN6 ; kein Farb anteil ld a,8 add a,e ld e,a ; Farbe +8 ld a,b and 0Fh ; Test 2.Halbyte jr z,GPOIN7 ; kein Farbanteil GPOIN6 ld a,4 add a,e ld e,a ;Farbe +4 GPOIN7 ld a,e GPOIN8 pop hl pop de pop bc ret ;************************************************************ ;STore Akt INK ; STAINK ld (ACTINK),a STAIN3 push hl ld hl,PALCOL STAIN0 push af ld a,(SCRNRA) cp 5 jr z,STAIN5 ;-------------------------- pop af ;a: Farbe cp 4 ;fuer Screen2,3 testen jr nc,STAIN6 ;>3 falsch push bc ld bc,0 or a jr z,STAIN1 ;Farbe 0 (Hintergrund) dec b ;b=FF cp 2 jr z,STAIN1 ;Farbe 2 jr c,STAIN2 ;Farbe 1 ld c,b ;Farbe 3 STAIN1 ld (hl),c inc hl ld (hl),b pop bc pop hl ret STAIN2 inc b ;b=0 dec c ;c=FF ccf jr STAIN1 ;--------------------------------- STAIN5 pop af cp 16 ;Screen5 jr nc,STAIN6 call STAIN7 inc hl ;Highbyte der Farbkodierung call STAIN7 scf STAIN6 ccf pop hl ret ;-------------------------------UP zur Farbauswertung STAIN7 rra ; Bit 0 blau oder Bit 2 rot ld (hl),0 jr nc,STAIN8 ;nicht gesetzt ld (hl),0Fh STAIN8 rra ; Bit 1 gruen oder Bit 3 hell push af ld a,0 jr nc,STAIN9 ;nicht gesetzt ld a,0F0h STAIN9 or (hl) ld (hl),a pop af ret ;************************************************************ ;Set POINT ; SPOINT push hl ld a,(POIMA) ld hl,(POIADR) call SPINA pop hl ret ;************************************************************ APRGT push hl push de call LDPMA rlca jr nc,APLFT3 ld a,(SCRNRA) cp 5 ld e,11h jr z,APRGT3 ld e,1 APRGT3 inc hl ld a,l and 7 ld a,e jr nz,APLFT2 push hl ld de,(AVRAM) sbc hl,de ld de,(WIDTH) APRGT2 sbc hl,de jr z,APUP1 jr nc,APRGT2 pop hl jr APLFT2 ;************************************************************ APRGT1 push hl push de call LDPMA rlca jr nc,APLFT3 inc hl jr APLFT2 ;************************************************************ APLFT push hl push de call LDPMA rrca jr nc,APLFT3 ld a,(SCRNRA) cp 5 ld e,88h jr z,APLFT6 ld e,80h APLFT6 ld a,l and 7 ld a,e jr nz,APLFT5 push hl ld de,(AVRAM) sbc hl,de jr z,APUP1 ld de,(WIDTH) APLFT4 sbc hl,de jr z,APUP1 jr nc,APLFT4 pop hl APLFT5 dec hl jr APLFT2 ;************************************************************ APLFT1 push hl push de call LDPMA rrca jr nc,APLFT3 dec hl APLFT2 ld (POIADR),hl APLFT3 ld (POIMA),a and a pop de pop hl ret ;************************************************************ APUP1 pop hl scf jr APUP4 ;************************************************************* APUP push hl push de call TSC23 ld de,8000 jr z,APUP2 ld de,16000 APUP2 ld hl,(AVRAM) add hl,de push hl ld hl,(POIADR) ld de,(WIDTH) add hl,de pop de rst 20h ccf jr c,APUP4 APUP3 ld (POIADR),hl APUP4 pop de pop hl ret ;************************************************************ APUP10 push hl push de ld hl,(POIADR) ld de,(WIDTH) add hl,de jr APUP3 ;************************************************************ APDWN push hl push de ld hl,(POIADR) ld de,(WIDTH) xor a sbc hl,de ld de,(AVRAM) rst 20h jr c,APUP4 jr APUP3 ;************************************************************ APDWN1 push hl push de ld hl,(POIADR) ld de,(WIDTH) xor a sbc hl,de jr APUP3 ;************************************************************ GCLS ld hl,(AVRAM) push hl call CURSS call REMASK ld bc,1F40h ld a,(SCRNRA) push af rrca jr nc,GCLS1 ld bc,3F40h GCLS1 call PFIGS call WRMOD pop af cp 5 jr z,GCLS3 xor a out (PARAP),a call FULL out (PARAP),a GCLS4 pop hl call REGRKU ;------------------------- ld hl,6500 ;Warteschleife fuer GDC GCLS2 dec hl ld a,h or l jr nz,GCLS2 ret ;-------------------------- GCLS3 ld a,(PAPER) call STAIN3 ld a,(PALCOL) out (PARAP),a call FULL ld a,(PALCOL+1) out (PARAP),a jr GCLS4 ;***************************************************** ;FILL ; FILLUP in a,(FLAGR) ;neue Version and 4 ;FIFO leer ? jr z,FILLUP ld a,CURS out (COMNP),a ld a,l out (PARAP),a ld a,h out (PARAP),a ;Kursor setzen ld a,MASK out (COMNP),a ld a,0FFh out (PARAP),a out (PARAP),a ;Maske auf FFFF add hl,bc dec bc ld a,FIGS out (COMNP),a ld a,2 out (PARAP),a ;Richtung 2 ld a,c out (PARAP),a ld a,b out (PARAP),a ;Anzahl bc jp SPINA2 ;--------------------------- FILL ld a,(SCRNRA) cp 5 jr nz,FILL0 FILS5 push hl call LDPMA ex (sp),hl rrca jr c,FILS52 rlca ld bc,-1 push af FILS51 add hl,bc jr nc,FILS55 rlca jr nc,FILS51 pop af and 0Fh dec a cpl ld e,a rlca rlca rlca rlca and e ex (sp),hl call SPINA inc hl ex (sp),hl FILS52 ld a,l and 3 ld e,a ld a,l rrc h rra rrc h rra or a pop hl ld c,a ld b,0 ld d,b jr z,FILS54 call FILLUP FILS54 dec e ret m push hl ld hl,FILTS5 add hl,de ld a,(hl) jr FILL6 ;=============================== FILTS5 defb 11h defb 33h defb 77h ;=============================== FILS55 and 0F0h dec a ld b,a pop af and 0F0h dec a cpl and b push af rlca rlca rlca rlca pop bc or b jr FILL6 ;-------------------------------- FILL0 push hl call LDPMA ex (sp),hl rrca jr c,FILL2 rlca ld bc,-1 push af FILL1 add hl,bc jr nc,FILL5 rlca jr nc,FILL1 pop af dec a cpl ex (sp),hl call SPINA inc hl ex (sp),hl FILL2 ld a,l and 7 ld e,a ld a,l rrc h rra rrc h rra rrc h rra or a pop hl ld c,a ld b,0 ld d,b jr z,FILL4 call FILLUP FILL4 dec e ret m push hl ld hl,FILLT add hl,de ld a,(hl) jr FILL6 ;=============================== FILLT defb 1 defb 3 defb 7 defb 0Fh defb 1Fh defb 3Fh defb 7Fh ;=============================== FILL5 dec a ld b,a pop af dec a cpl and b FILL6 pop hl ;************************************************************ ;Set Punkt IN A ;IN: a POIMA hl POIADR PALCOL ,+1 ;OUT: hl bc de :uv ; SPINA push af SPINA1 in a,(FLAGR) and 4 ;FIFO leer ? jr z,SPINA1 ;nein ld a,CURS ;ja out (COMNP),a ld a,l out (PARAP),a ld a,h out (PARAP),a ;Kursor auf Adr. POIADR ld a,MASK out (COMNP),a pop af out (PARAP),a out (PARAP),a ;Maske setzen auf POIMA SPINA2 ld a,WDATWO out (COMNP),a ld a,(PALCOL) out (PARAP),a ld a,(PALCOL+1) out (PARAP),a ;Farbwort schreiben ret ;************************************************************ ;LoaD ELLIpsenparameter ; LDELLI ld hl,(ELLIX) ex de,hl ld hl,(ELLIY) ret ;************************************************************ ;PAInt-UP 1 ; PAIUP1 push hl ld hl,PARAND jp STAIN0 ;************************************************************ ;PAInt-UP 2 ; PAIUP2 ld a,b ld (AUTSTL),a xor a ld h,a ld l,a ld c,a ld (PAIHL2),a ld a,(PARAND) PAIU21 call PAIU5 jr nz,PAIU22 dec de ld a,d or e ld c,a ret z call APRGT jr nc,PAIU21 ld de,0 ret ;------------------------------- PAIU22 call PAIU4 push de call LDPMA ld (HLPPA1),hl ld (HLPPA2),a ld de,0 PAI23 inc de call APRGT jr c,PAI24 call PAIU5 jr z,PAI24 call PAIU4 jr PAI23 ;------------------------------- PAI24 push de call LDPMA push hl push af ld hl,(HLPPA1) ld a,(HLPPA2) call STPMA ex de,hl ld (PAIHL1),hl ld a,(AUTSTL) and a call nz,FILL pop af pop hl call STPMA pop hl pop de jp PAIU34 ;************************************************************ PAIUP3 xor a ld h,a ld l,a ld c,a ld (PAIHL2),a PAIU31 call APLFT jr c,PAIU33 call PAIU5 jr z,PAIU32 call PAIU4 inc hl jr PAIU31 ;------------------------------- PAIU32 call APRGT1 PAIU33 push hl ld de,(PAIHL1) add hl,de call FILL pop hl PAIU34 ld a,(PAIHL2) ld c,a ret ;************************************************************ ;in: bc Farbe aktueller Punkt PAIU4 push de ld a,(POIMA) ld e,a ld a,(PALCOL) xor c and e jr nz,PAIU41 ld a,(PALCOL+1) xor b and e PAIU41 pop de ret z ;gleich Malfarbe -> (PAIHL2) bleibt 0 ld (PAIHL2),a ;a<>0 ret ;--------------------------- ;in: POIMA, POIADR ;out: z-Flag PAIU5 push de push hl call LDPMA ld e,a ;e: POIMA call CURSS ld bc,1 call PFIGS ;1 Wort lesen call RDMOD in a,(READP) ld c,a ld hl,PARAND xor (hl) and e ;akt.Farbe XOR Randfarbe AND Punktmaske Lowbyte push af call READY pop af in a,(READP) ld b,a jr nz,PAIU51 inc hl xor (hl) and e ;akt.Farbe XOR Randfarbe AND Punktmaske Highbyte PAIU51 pop hl pop de ret ;************************************************************ ; Screeneditor ; ; ;EDIt 1 ; EDI1 call XEDI1 ld a,(AUTOFL) ;AUTO? and a ; Ja--> jr nz,EDI2 ;------------------------------- ld l,0 ;L=Zeile=0 jr EDI22 ;************************************************************ ;GET STring ; GETST call XGETST ld a,'?' rst 18h ld a,' ' ;Ausgabe "? " rst 18h ;************************************************************ EDI2 call XEDI2 ld hl,(CRSZL) ;HL=Spalte/Zeile ; ------------------------ dec l ;vorherige Zeile als call nz,SEZL ; Endezeile inc l ; ------------------------ EDI22 ld (CUPOVO),hl ;Kursor vor Eingabe xor a ld (STCSSW),a ;(CTRL-)STOP loeschen ;------------------------------- EDI24 call ICONIN ;A=Zeichen ld hl,SCRET-2 ld c,11 call JPVER5 ;Steuerzeichenauswertung ; C/NZ:CR,STOP-IR ; C/ Z:CTRL-STOP ; NC/ Z:STZ ; NC/NZ:kein STZ ; ------------------------ push af call nz,AOUT ;Zeichenausgabe pop af jr nc,EDI24 ;-------------------------------- ld hl,HEDIBU ;Weiter nach CR,CTRL-STOP ; (Stackmanipulation) ret z ;------------------------------- ccf EDI26 ret ;************************************************************ ;A-register-OUTput ; ;IN: A=Zeichen ; AOUT push af cp 9 jr nz,AOUT4 ;------------------------------- pop af ;TAB in AOUT2 ld a,' ' call AOUT ld a,(CRSSP) dec a and 7 jr nz,AOUT2 ret ; SPC wandeln ;=============================== AOUT4 pop af ld hl,INSSW ; ------------------------ cp 1 ;GCH? jr z,AOUT6 ; Ja--> ; ------------------------ cp 20H ;Steuerzeichen? jr c,RIMAO ; Ja--> ;------------------------------- push af ld a,(hl) ;Insertmode? and a call nz,ESLR ; Ja-->Verschieben pop af ;------------------------------- AOUT6 rst 18h ;Ausgabe ret ;************************************************************ ;Reset InsertMode A-register Output ; ;IN: HL=INSSW ; A=Zeichen ; RIMAO ld (hl),0 rst 18h defb 3eh ; - / LD A,3EH ;************************************************************ ;SET InsertMode (Kleinkursor) ; SETIM defb 3eh ;LD A,0AFH / - " - ;************************************************************ ;RESet InsertMode (Grosskursor) ; RESIM defb 0afh ;- " - / XOR A ; ------------------------ ld (CURGK),a ;Gross-/Kleinkursor jp KUSENZ ;bed.Kursorset. ;************************************************************ ;SCReen-Editor-Tabelle ; SCRET DEFB 8 DEFW EBS DEFB 12H DEFW EINMO DEFB 1BH DEFW EDI26 DEFB 2 DEFW LTNW DEFB 6 DEFW RTNW DEFB 0EH DEFW RTLE DEFB 5 DEFW DTLE DEFB 3 DEFW ECTSP DEFB 0DH DEFW ECR DEFB 15H DEFW ECLLN DEFB 7FH DEFW EDEL ;************************************************************ ;Edit-CR ; ;IN: H=Spalte / L=Zeile ; ECR call GCPVO ;veraendert HL ! ;------------------------- ld a,(AUTOFL) and a ;AUTO? jr z,ECR10 ld a,(SPFIRS) ld h,a ; ------------------------ ECR10 call KURENZ ;Korsor loe. ;=============================== ld de,EDIBUF ld b,254 ;Lanege dec l ;Zeile-1 ;------------------------------- ECR20 inc l ;Zeile+1 ; ======================== ECR30 push de push bc call CHRASC ;Zeichen aus BWSP pop bc pop de ; ------------------------ and a ;Zeichen=0? jr z,ECR50 ; Ja--> ; ------------------------ cp 20H ;Grafikzeichen? jr nc,ECR40 ; Nein--> ; ======================== dec b ;Puffer voll? jr z,ECR60 ; Ja--> ; ------------------------ ld c,a ld a,1 ld (de),a ;GCH abspeichern inc de ; ------------------------ ld a,c ;Kodekorrektur add a,40H ; Grafikzeichen ; ========================= ECR40 ld (de),a ;Zeichen abspeichern inc de dec b ;Puffer voll? jr z,ECR60 ; Ja--> ; ========================= ECR50 inc h ;Spalte+1 ld a,(SPLAST) cp h ;Zeilenende? jr nc,ECR30 ; Nein--> ;------------------------------- push de call GLATAD ;Endzeile? pop de ld a,(SPFIRS) ;(Spalte 1) ld h,a jr z,ECR20 ; Nein--> ;=============================== ECR60 dec de ld a,(de) ;SPC am Pufferende cp ' ' jr z,ECR60 ; abschneiden ;------------------------------- push de call KUSENZ ;Kursor set. pop de ;------------------------------- inc de xor a ;Endekennzeichen ld (de),a ; in Puffer ;=============================== ECR70 ld a,0DH ;CR and a ;Z=0 (NZ) bei CR !! ; ------------------------ ECR80 push af ;Flags speichern ;------------------------------- call SEZL ;Endezeile markieren call CRSPOS ;Kursor positionieren ld a,0Ah rst 18h ;Ausgabe LF xor a ld (INSSW),a ;Grosskursor ; ------------------------ pop af ;Flags wie oben ! scf ;CY=1 pop hl ;Stackmanipulation !! ret ;************************************************************ ;Edit-CTrl-StoP ; ;IN: H=Spalte / L=Zeile ; ECTSP2 inc l ;Zeile+1 ;=============================== ECTSP call GLATAD ;Endzeile? jr z,ECTSP2 ; Nein--> ;------------------------------- call RESIM ;Res INS-mode xor a ld (EDIBUF),a ;Puffer loeschen ld a,(SPFIRS) ;1.spalte ld h,a push hl ; call MUINIT ;PSG init ; ------------------------ call TSTPIR ;STOP-IR? pop hl jr c,ECR70 ; Ja--> ;------------------------------- ld a,(STOPFL) and a ;Stop ein? jr nz,ECR70 ; Nein--> ;------------------------------- jr ECR80 ;sonst ( NC/Z !!) ;************************************************************ ;Edit-INsertMOde ; EINMO ld hl,INSSW ld a,(hl) xor 0FFH ;Switch negieren ld (hl),a jp z,RESIM ;=0-->Reset jp SETIM ;<>0-->Set ;************************************************************ ;Edit Shift Line Right ; ESLR call KURENZ ;=============================== ld hl,(CRSZL) ;HL=Spalte/Zeile ld a,(ACTCOL) ld b,a ld c,' ' ;C=neues Zeichen ESLR10 push hl ;=============================== ESLR20 push bc ;neu Zei in Stack call CHRASC ;C=alt Zei aus BWSP pop de ;E=neu Zei push bc ;alt Zei in Stack ld c,e ;C=neu Zei ld b,d call CHRTSC ;neu Zei in BWSP pop bc ;C=alt Zei ; ------------------------ ld a,(SPLAST) inc h ;Spalte+1 cp h ;Zeilenende? jr nc,ESLR20 ; Nein--> ;------------------------------- pop hl call GLATAD ;Endzeile? jr z,ESLR70 ; Nein--> ; ------------------------ ld a,c cp ' ' ;alt Zei=SPC? push af ;Flags in Stack jr nz,ESLR30 ; Nein--> ; ------------------------ ld a,(SPLAST) cp h ;letztes Zeichen auf Zeile? jr z,ESLR30 ; Ja--> ; ------------------------ pop af ESLR25 ld hl,(CRSZL) call SAZLSP jp KUSENZ ;-->Ende !! ;=============================== ESLR30 call REZL ;Reset Endzeile inc l ;Zeile+1 push bc ;alt Zei in Stack push hl ld a,(ZLLAST) cp l ;Bildende? jr c,ESLR40 ; Ja--> ; ------------------------ call BIRURO ;Restbild runterrollen jr ESLR60 ;------------------------------- ESLR40 ld hl,CRSZL dec (hl) ;Zeile-1 jr nz,ESLR50 inc (hl) ;bei 0-->Zeile+1 ESLR50 ld a,(ZLFIRS) ld l,a call BIHORO ;Bild hochrollen pop hl dec l ;Zeile-1 push hl ; ------------------------ ESLR60 pop hl pop bc ;C=alt Zei pop af ;Flags jr z,ESLR25 ; SPC--> dec l ;Zeile-1 ; ------------------------ ESLR70 inc l ;Zeile+1 ld a,(SPFIRS) ;1.SPALTE ld h,a jr ESLR10 ;alt Zei-->neu Zei ;************************************************************ ;Edit-DELete ; EDEL ld a,(SPLAST) cp h ;Zeilenende? jr nz,EDEL2 ; Nein--> ; ------------------------ call GLATAD ;Endzeile? push hl jr nz,EBS50 ; Ja--> pop hl ;------------------------------- EDEL2 ld a,1CH ;Kursor rechts MIT HC-TASTATUR SONST 1CH rst 18h ld hl,(CRSZL) ;HL=Spalte/Zeile ;************************************************************ ;Edit-BackSpace ; ;IN: H=Spalte / L=Zeile ; EBS call KURENZ ;Kursor loe. ;------------------------------- ld a,(SPFIRS) cp h jr nz,EBS20 ;kein Zeilenanfang push hl ld a,(ZLFIRS) cp l jr z,EBS10 ; Bildanfang--> dec l ld a,(SPLAST) ld h,a ;letzte Spalte call GLATAD ;Endzeile? jr nz,EBS10 ; Ja--> ex (sp),hl EBS10 pop hl inc h EBS20 dec h push hl ;------------------------------- EBS30 ld a,(SPLAST) cp h ;Zeilenende? jr z,EBS50 ; Ja--> ; ------------------------ inc h ;Rest der Zeile EBS40 call CHRASC dec h call CHRTSC inc h inc h ; ranruecken ld a,(SPLAST) inc a cp h jr nz,EBS40 ; ------------------------ dec h EBS50 ld c,' ' ld a,(ACTCOL) ld b,a call CHRTSC ;SPC anfuegen ; ------------------------ call GLATAD ;Endzeile? jr z,EBS60 ;nein pop hl call SAZLSP ;ja ENDE jp KUSENZ ;================================ EBS60 push hl ;Kursorpos retten inc l ;1.Zeichen der ld a,(SPFIRS) ld h,a call CHRASC ; auf letztes Zeichen ex (sp),hl call CHRTSC ; der alten Zeile pop hl ;Kursor auf 1.Zei neue Zeile jr EBS30 ;************************************************************ ;Edit-CLear-LiNe ; ;IN: H=Spalte / L=Zeile ; ECLLN call KURENZ ;Kursor loe call GCPVO ;Kursor an jr DTLE1 ;************************************************************ ;Delete from kursor to LineEnd ; ;IN: H=Spalte / L=Zeile ; DTLE push hl call KURENZ ;Kursor loe pop hl ;------------------------------- DTLE1 push hl DTLE2 call GLATAD push af call CLINFK ;Clear Line From Kursor pop af jr nz,DTLE3 ;Endzeile--> ; ------------------------ ld a,(SPFIRS) ld h,a ;naechste inc l ; Zeile jr DTLE2 DTLE3 pop hl DTLE4 call SAZLSP DTLE5 xor a ld (INSSW),a jp RESIM ;Res INS-Mode ;************************************************************ ;kursor Right To LineEnd ; RTLE call KURENZ ld hl,(CRSZL) ;HL=Spalte/Zeile dec l ;------------------------------- RTLE2 inc l ;Zeile+1 call GLATAD ;Endzeile? jr z,RTLE2 ; Nein--> ;------------------------------- ld a,(SPLAST) ld h,a inc h ;Letzte Spalte +1 ; ------------------------ RTLE4 dec h ;Spalte-1 jr z,RTLE6 ;Zeilenanfang--> call CHRASC cp ' ' ;SPC? jr z,RTLE4 ; Ja--> ;------------------------------- ld a,(SPLAST) cp h jr z,RTLE6 inc h RTLE6 jr DTLE4 ;************************************************************ ;kursor Right To New Word ; RTNW call KURENZ ;Kursor loe call ZTKL ;Kursor links ;------------------------------- RTNW2 call ZTKR ;Zeichentest jr z,DTLE4 ;Bildende--> jr c,RTNW2 ;kein Trennzeichen--> ;-------------------------------- RTNW4 call ZTKR ;Zeichentest jr z,DTLE4 ;Bildende--> jr nc,RTNW4 ;Trennzeichen--> ;------------------------------- jr DTLE4 ;************************************************************ ;kursor Left To New Word ; LTNW call KURENZ ;------------------------------- LTNW2 call ZTKL jr z,DTLE4 ;Bildanfang--> jr nc,LTNW2 ;Trennzeichen--> ;------------------------------- LTNW4 call ZTKL jr z,DTLE4 ;Bildanfang--> jr c,LTNW4 ;kein Trennzeichen--> ;------------------------------- call KUREFS jr DTLE5 ;************************************************************ ;ZeichenTest ab Kursor+1 nach Rechts ; ;OUT: Z: Bildende ; NZ/NC: Trennzeichen ; NZ/CY: kein Trennzeichen ; ZTKR ld hl,(CRSZL) ;HL=Spalte/Zeile call KUREFS ;------------------------------- ld a,(ZLLAST) ld e,a ld a,(SPLAST) ld d,a ;DE=Sollkursor jr ZTKL2 ; (Bildende) ;************************************************************ ;ZeichenTest ab Kursor-1 nach Links ; ;OUT: Z: Bildanfang ; NZ/NC: Trennzeichen ; NZ/CY: kein Trennzeichen ; ZTKL ld hl,(CRSZL) ;HL=Spalte/Zeile call KULIFS ld a,(SPFIRS) ld d,a ld a,(ZLFIRS) ld e,a ; DE SOLLKURSOR ;================================ ZTKL2 ld hl,(CRSZL) ;Istkursor rst 20h ret z ;RET (Z), wenn gleich ;------------------------------- ld de,ZTKL4 ;Ret-Adr push de ; in Stack call CHRASC ;Zeichen in A ;=============================== cp 30H ccf ret nc ;sonst-->RET (NC) cp 3AH ret c ;Zahl-->RET (CY) ;------------------------------- cp 41H ccf ret nc ;sonst-->RET (NC) cp 5BH ret c ;Grossbuchstabe-->RET (CY) ;------------------------------- cp 61H ccf ret nc ;sonst-->RET (NC) cp 7BH ret c ;Kleinbuchstabe-->RET (CY) ;------------------------------- cp 86H ccf ret nc ;sonst-->RET (NC) cp 0A0H ret c ;86H..A0H-->RET (CY) ;------------------------------- cp 0A6H ccf ;>=A6H-->RET (CY) ;================================ ZTKL4 ld a,0 inc a ;NZ ret ;************************************************************ ;Get CursorPosition VOr eingabe ; ;IN: HL=Spalte/Zeile (aktuell) ;OUT:HL=Spalte/Zeile (ab Eingabebeginn) ; GCPVO LD A,(ZLFIRS) CP L jr z,GCPVO2 ; Bildanfang--> ; ------------------------ DEC L call GLATAD ;Endzeile? JR Z,GCPVO ;NEIN ;------------------------------- GCPVO1 inc l ;Zeile+1 GCPVO2 ld a,(CUPOVO) ;Kursor noch cp l ; in selber Zeile? ld a,(SPFIRS) ld h,a ret nz ; Nein-->RET ; ------------------------ ld hl,(CUPOVO) ;HL=alte Kursorposition ret ;************************************************************* ;----------------------------------------------- COMND call FULL out (COMNP),a ret ;----------------------------------------------- PARAM2 ld a,PRAM PARAM3 call COMND PARAM ld hl,PPARAM PARAM0 ld c,PARAP PARAM1 call FULL outi jr nz,PARAM1 ret ;------------------------------------------------ FULL push af FULL1 in a,(FLAGR) and 2 jr nz,FULL1 pop af ret ;--------------------------------------------- READY push af READY1 in a,(FLAGR) and 1 jr z,READY1 pop af ret ;----------------------------------------------- ;FIGS-Parameter ausgeben ;IN: bc Anzahl ;OUT: bc,de,hl uv PFIGS in a,(FLAGR) and 4 ;FIFO leer? jr z,PFIGS ld a,FIGS out (COMNP),a ld a,2 out (PARAP),a ;Richtung ld a,c out (PARAP),a ld a,b out (PARAP),a ;Anzahl ret ;================================================== INPPSG VDPCOM VDPDAM PRGVDP PR7VDP VDPSC0 VDPSC1 VDPSC2 VDPSC3 GSPRAD GSPRAT TESPRM STAVDP VDPWRM VDPREM ld ix,ERINT jp L1CALL