TITLE EUMEL-SHard Graphikroutinen, 64180-Teil ; RUC64180 auf Basis108 ; 19.05.86, Michael Staubermann ; Ueberarbeitet: 11.01.87 GLOBAL GMOVE, GDRAW, GTEST, GCTRL GLOBAL GTRANS, GCLR, GFILL, GRAFIO ; EXTERNAL WTEND, MEMDMA, HGOP INCLUDE HD64180.LIB .LIST CSEG CTRLMOVE EQU 0 CTRLDRAW EQU 1 CTRLTEST EQU 2 CTRLCTRL EQU 3 CTRLCLR EQU 4 CTRLFILL EQU 5 CTRLTRANS EQU 6 TASK EQU 0F080H ; Task fuer 6502 RESULT EQU 0F081H ; Subtask und Ergebnis PARAM1 EQU 0F082H ; xpos oder Parameter PARAM2 EQU 0F084H ; ypos oder Linepattern ;........................................................................... ; ; M O V E ; ; Startposition fuer DRAW setzen ; Es findet keine Bereichspruefung statt ; ; Eingang: A = Terminalnummer (Kanal 1) ; DE = xpos (0..279) ; HL = ypos (0..191) ; GMOVE: LD B,CTRLMOVE JR GRAPHIK ;............................................................................ ; ; D R A W ; ; Linie von Startposition bis zur uebergebenen Position zeichnen ; Ausserhalb des Bildschirms wird nicht gezeichnet ; ; Eingang: A = Terminalnummer (Kanal 1) ; DE = xpos (0..279) ; HL = ypos (0..191) ; GDRAW: LD B,CTRLDRAW JR GRAPHIK ;............................................................................ ; ; T E S T B I T ; ; Pruefen, ob Punkt gesetzt ; ; Eingang: A = Terminalnummer (Kanal 1) ; DE = xpos (0..279) ; HL = ypos (0..191) ; ; Ausgang: BC = 255 : Position ausserhalb des gueltigen Bereichs ; sonst: Bit 0 = Zustand (0 = geloescht, 1 = gesetzt) ; Bit 7 = Farbe (1 = Gelb, 0 = Violett) ; GTEST: LD B,CTRLTEST JR GRAPHIK ;........................................................................... ; ; C T R L ; ; Graphikparameter setzen ; ; Eingang: DE = Steuerbits: ; Bit 0: 0 = Textmode, 1 = Graphikmode ; Bit 1: 0 = Sichtbare Seite 0, 1 = Sichtbare Seite 1 ; Bit 2: 0 = Bearbeitete Seite 0, 1 = Bearbeitete Seite 1 ; Bit 3,4: 0 = OR, 1 = NAND, 2 = XOR Zeichnen ; Bit 5: 0 = Full Graphics, 1 = Mixed Graphics ; Bit 6: 0 = Pattern in HL, 1 = Letztes DRAW Pattern ; fuer Linetype benutzen ; Bit 7: 1 = Gelb, 0 = Violett ; HL = Linetype Pattern, wenn Bit 6 = 0 ; GCTRL: LD B,CTRLCTRL JR GRAPHIK ;............................................................................ ; ; C L E A R ; ; Graphikseite mit einem Fuellzeichen loeschen ; ; Eingang: DE = Page (0..3) ; HL = Fuellzeichen (Byte in L) ; GCLR: LD B,CTRLCLR JR GRAPHIK ;............................................................................ ; ; F I L L ; ; Umrandete Flaeche fuellen ; ; Eingang: DE = xpos ; HL = ypos GFILL: LD B,CTRLFILL JR GRAPHIK ;............................................................................ ; ; T R A N S ; ; Transportiert (kopiert) eine Graphikseite in eine andere ; ; Eingang: DE = 'from'-Page (0..3) ; HL = 'to'-Page (0..3) GTRANS: LD B,CTRLTRANS GRAPHIK: LD A,B ; Subtasknummer CALL WTEND ; Busy warten, da in IOCONTROL POP HL PUSH HL ; Zweiter Parameter DI IN0 B,(CBR) ; Alte MMU-Einstellung merken LD C,51H ; Basisspeicher Page 0 OUT0 (CBR),C LD (PARAM1),DE ; 1. Parameter LD (PARAM2),HL ; 2. Parameter LD L,7 ; 6502-Task: Graphik LD H,A ; Subtask LD (TASK),HL LD C,0 ; Als 'ok' vorbesetzen CP CTRLTEST ; Muss auf Resultat gewartet werden ? JR NZ,TASKEND WAITTEND: LD A,(TASK) ; Darf intensiv auf Taskende warten AND A JR NZ,WAITTEND LD A,(RESULT) LD C,A TASKEND: OUT0 (CBR),B ; Alte MMU-Einstellung wiederherstellen EI POP HL LD B,0 RET ;.............................................................................. ; ; G R A F I O ; Blockin/Blockout fuer Graphikpage ; ; Eingang: DE = Blocknummer : 0..15= Page 0 (ggf. sichtbar) ; 16..31= Page 1 (ggf. sichtbar) ; 32..47= Page 2 (nur durch Transfer) ; 48..63= Page 3 (nur durch Transfer) ; ; HL = Hauptspeicheraddresse ; (HGOP) = 1 : Graphikseite --> Hauptspeicher ; (HGOP) = 0 : Hauptspeicher --> Graphikseite ; GRAFIO: PUSH AF PUSH DE EX DE,HL ; DE = log. Hauptspeicheradresse LD A,L ADD A ; HL * 512 + 2000H ADD A,20H LD H,A LD L,0 LD BC,512 ; Blockgroesse LD A,(HGOP) ; Transferrichtung CALL MEMDMA ; Block tranportieren POP DE POP AF LD BC,0 ; Transfer fehlerfrei RET END