Rev 736 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
548 | savelij | 1 | |
2 | ; Пример чтения фонтрома в пентеве |
||
3 | ; |
||
4 | ; (c) lvd^nedopc 2012 |
||
5 | ; |
||
6 | ; сорец для аласма |
||
7 | |||
646 | savelij | 8 | ;ПЕРЕДЕЛКА ДЛЯ КОМПИЛЯЦИИ В СОСТАВЕ EVO RESET SERVICE 16.04.2012 savelij |
548 | savelij | 9 | |
831 | savelij | 10 | ;LAST UPDATE: 30.06.2019 savelij |
11 | |||
548 | savelij | 12 | ;START EQU #6000 |
13 | ; ORG START |
||
14 | |||
646 | savelij | 15 | FREAD EQU CPU1+OFFSET_SCRSAVE;OFFSET_FNTSAVE;-0X800 |
16 | FONT EQU CPU1+OFFSET_FNTSAVE;0XD800 |
||
548 | savelij | 17 | ;FLDIR EQU 0XD800 |
18 | |||
19 | SCAN_FONT |
||
20 | ; DI |
||
21 | |||
22 | ; LD A,1 |
||
23 | ; OUT (0XFE),A |
||
24 | |||
549 | savelij | 25 | ; XOR A |
26 | ; OUT (PEVO_CONF),A |
||
548 | savelij | 27 | |
549 | savelij | 28 | ; LD BC,0XEFF7 |
29 | ; OUT (C),A ;ставим ефф7, который доступен только в нешедоу-режиме |
||
548 | savelij | 30 | |
549 | savelij | 31 | ; INC A |
32 | ; OUT (PEVO_CONF),A |
||
548 | savelij | 33 | |
34 | LD A,0XA7 |
||
35 | LD BC,0XFF77 |
||
36 | OUT (C),A ;включаем новый пентевный текстмод - 1-страничный |
||
37 | ; заодно ефф7 и фф77 ставят нам 7 МГц частоту |
||
736 | savelij | 38 | EVOPORT WIN_P1,RAM_SCR_FONT |
548 | savelij | 39 | CALL OUTPAGE ;выводим все символы на экран |
40 | |||
41 | LOOP |
||
42 | CALL SYNCREAD ;считываем фонтром методом чтения байтиков, которые на экране |
||
43 | JP DECODEFONT ; перекодируем в обычный формат фонтрома ИИНВЕРТИМ СЧИТАННЫЙ ФОНТ |
||
44 | ; CALL INVERTFONT ; инвертируем все байты фонта |
||
45 | ; CALL WRITEFONT ; пишем взад |
||
46 | |||
47 | ; LD A,0X7F |
||
48 | ; IN A,(0XFE) |
||
49 | ; RRA |
||
50 | ; JR C,LOOP ;итого всё мигает пока не нажмём any key |
||
51 | |||
52 | ; LD A,0XFF |
||
53 | ; LD BC,WIN_A3 |
||
54 | ; OUT (C),A |
||
55 | |||
56 | ; LD A,0XA3 |
||
57 | ; LD BC,0XFF77 |
||
58 | ; OUT (C),A ; восстанавливаем 6912-режим |
||
59 | |||
60 | ; XOR A |
||
61 | ; OUT (PEVO_CONF),A ;закрываем шедоу |
||
62 | |||
63 | ; RET |
||
64 | |||
65 | OUTPAGE |
||
66 | ; LD A,0X7F-8 ;где находится 1страничный текстмод (см доку) |
||
67 | ; LD BC,WIN_A3 |
||
68 | ; OUT (C),A |
||
69 | |||
70 | ; LD HL,0XC000 ; ставим атрибуты. Не обязательно, чтоб символы были видимы, |
||
71 | ; LD DE,0XC001 ; можно нафигачить нулей |
||
72 | ; LD (HL),0X01;5 |
||
73 | ; LD BC,0X3FFF |
||
74 | ; LDIR |
||
75 | |||
573 | savelij | 76 | XOR A |
77 | LD HL,CPU3+LATTR |
||
831 | savelij | 78 | ROMCALL CLSTXTMD1,ROM_RST82 |
573 | savelij | 79 | XOR A |
80 | LD HL,CPU3+RATTR |
||
831 | savelij | 81 | ROMCALL CLSTXTMD1,ROM_RST82 |
548 | savelij | 82 | |
83 | XOR A ; код печатаемого символа |
||
573 | savelij | 84 | LD HL,CPU3+LSYM ;0XC1C0 ; откуда начинаем печатать |
548 | savelij | 85 | LD DE,64-40 |
86 | LD C,25 ; сколько строк печатаем. Достаточно напечатать 16 строк сверху. |
||
87 | STRLOOP |
||
88 | LD B,80/5 |
||
89 | SYMLOOP |
||
90 | CALL PRINC ; повторяем каждый символ 5 раз |
||
91 | CALL PRINC |
||
92 | CALL PRINC |
||
93 | CALL PRINC |
||
94 | CALL PRINC |
||
95 | |||
96 | INC A |
||
97 | |||
98 | DJNZ SYMLOOP |
||
99 | |||
100 | ADD HL,DE ; смещение на следующую строку |
||
101 | |||
102 | DEC C |
||
103 | JR NZ,STRLOOP |
||
104 | |||
105 | RET |
||
106 | |||
107 | PRINC ; печатаем символ и апдейтим указатель в HL на следующий символ |
||
108 | LD (HL),A |
||
109 | BIT 4,H |
||
110 | SET 4,H |
||
111 | RET Z |
||
112 | RES 4,H |
||
113 | INC HL |
||
114 | RET |
||
115 | |||
116 | SYNCREAD |
||
117 | |||
118 | ; эта процедура должна выполняться при частоте процессора 7 МГц!!!!!!! |
||
119 | |||
120 | ; сначала включаем IM 2 и делаем таблички для него |
||
121 | DI |
||
122 | ; IM 2 |
||
123 | |||
124 | ; setup IM2 tables |
||
125 | |||
126 | ; LD HL,INTTAB |
||
127 | ; LD A,1 |
||
128 | ; LD I,A |
||
129 | ; INC A |
||
130 | |||
131 | ; LD (HL),A |
||
132 | ; INC L |
||
133 | ; JR NZ,$-2 |
||
134 | |||
135 | ; INC H |
||
136 | ; LD (HL),A |
||
137 | |||
138 | ; LD L,H |
||
139 | ; LD (HL),0XC3 ; JP |
||
140 | ; INC HL |
||
141 | ; LD (HL)LOW (INTPROC) |
||
142 | ; INC HL |
||
143 | ; LD (HL),HIGH (INTPROC) |
||
144 | |||
145 | |||
585 | savelij | 146 | LD HL,EI_RET |
147 | LD (ADR_INT),HL |
||
148 | |||
548 | savelij | 149 | LD HL,FREAD ; заранее ставим куда будем читать фонт |
150 | |||
151 | EI |
||
152 | HALT |
||
153 | EI |
||
154 | HALT ; делаем халт чтоб после инта и задержки попасть чтением спецпорта прямо |
||
155 | ; в момент начала отображения символов. делаем халт 2 раза, чтоб убедиццо, |
||
156 | ; что инт будет схвачен в своем начале, а не в середине. |
||
157 | ; обработчик инта - сначала JP, потом RET. |
||
158 | |||
159 | |||
160 | |||
161 | |||
162 | ; делаем задержку до момента отображения первого символа. Он повторяется 5 раз, |
||
163 | ; а первая команда INI попадает циклом ввода примерно в середину этих |
||
164 | ; 5 символов |
||
623 | savelij | 165 | LD BC,0 ;10 |
585 | savelij | 166 | DI ;4 |
167 | LD B,2 ;7 |
||
623 | savelij | 168 | DJNZ $ ;13*2+8 |
548 | savelij | 169 | LD D,76 |
170 | LINWAIT |
||
171 | LD BC,256*33 |
||
172 | DJNZ $ |
||
173 | DEC D |
||
174 | JP NZ,LINWAIT |
||
175 | LD BC,0X0EBE ; заодно в процессе задержки грузим адрес порта |
||
176 | LD D,128 ; и счётчик для 128 строк |
||
177 | |||
178 | |||
179 | READLOOP |
||
180 | ; читаем 16 байт. Как раз INI:INC B выполняется за 20 тактов, и 5 символов |
||
181 | ; длятся тоже 20 тактов (@7MHz nowait) |
||
182 | REPT 16 |
||
183 | INI |
||
184 | INC B |
||
185 | ENDM |
||
186 | |||
187 | LD E,7 ; просираем оставшееся время строки |
||
188 | DEC E |
||
189 | JR NZ,$-1 |
||
190 | |||
191 | DEC D |
||
192 | JP NZ,READLOOP ; итого весь этот луп занимает 448 тактов |
||
193 | |||
194 | |||
195 | ; всё считали, идём на йух... |
||
196 | DI |
||
197 | ; IM 1 |
||
198 | RET |
||
199 | |||
585 | savelij | 200 | ;INTPROC ; обработчег инта :) |
201 | ; RET |
||
548 | savelij | 202 | |
203 | |||
204 | |||
205 | |||
206 | DECODEFONT |
||
207 | |||
208 | ; перекодируем считанный фонт в обычный формат |
||
209 | |||
210 | LD HL,FREAD |
||
211 | LD DE,FONT |
||
212 | |||
213 | |||
214 | LD IXH,16 |
||
215 | DF256L |
||
216 | LD IXL,16 |
||
217 | DF16L |
||
218 | LD BC,16 |
||
219 | REPT 8 |
||
220 | LD A,(HL) |
||
221 | ADD HL,BC |
||
222 | LD (DE),A |
||
223 | INC DE |
||
224 | ENDM |
||
225 | |||
226 | LD BC,1-128 |
||
227 | ADD HL,BC |
||
228 | |||
229 | DEC IXL |
||
230 | JR NZ,DF16L |
||
231 | |||
232 | LD BC,128-16 |
||
233 | ADD HL,BC |
||
234 | |||
235 | DEC IXH |
||
236 | JR NZ,DF256L |
||
237 | |||
238 | RET |
||
239 | |||
240 | |||
241 | |||
242 | ;INVERTFONT |
||
243 | |||
244 | ; инвертируем фонт |
||
245 | |||
246 | ; LD HL,FONT |
||
247 | ; LD BC,2048 |
||
248 | ;IFLOOP |
||
249 | ; LD A,(HL) |
||
250 | ; CPL |
||
251 | ; LD (HL),A |
||
252 | ; CPI |
||
253 | ; JP PE,IFLOOP |
||
254 | |||
255 | ; RET |
||
256 | |||
257 | |||
258 | |||
259 | ;WRITEFONT |
||
260 | |||
261 | ; пишем фонт обратно в фонтром |
||
262 | |||
263 | ; LD A,0X05 |
||
264 | ; OUT (PEVO_CONF),A |
||
265 | |||
266 | ; LD HL,FONT |
||
267 | ; LD DE,FLDIR ; лдирим из озу в озу -- всё работает |
||
268 | ; LD BC,2048 |
||
269 | ; LDIR |
||
270 | |||
271 | ; LD A,1 |
||
272 | ; OUT (PEVO_CONF),A |
||
273 | ; RET |
||
274 | |||
275 | |||
276 | |||
277 | ; ORG ($+255)&0XFF00 |
||
278 | ;INTTAB |
||
279 | ; DS 512 |
||
280 | |||
281 | |||
282 | ;FREAD DS 2048 |
||
283 | ;FONT DS 2048 |
||
284 | |||
285 | ;FLDIR EQU FONT & 0XF800 |
||
286 | |||
287 | ;ENDD |
||
288 | ; ORG START |