1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
|
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
|