Rev 291 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
261 | ddp | 1 | .EQU WIN_SHADOW_ATTR=$01 |
2 | ; |
||
3 | ;-------------------------------------- |
||
4 | ; |
||
5 | SCR_FADE: |
||
6 | LDI XL,0 |
||
7 | LDI XH,1 |
||
8 | RCALL SCR_SET_CURSOR |
||
9 | LDI TEMP,$77 |
||
290 | ddp | 10 | LDIW 53*23 |
261 | ddp | 11 | RJMP SCR_FILLLONG_ATTR |
12 | ; |
||
13 | ;-------------------------------------- |
||
14 | ; |
||
15 | SCR_BACKGND: |
||
277 | ddp | 16 | LDI XL,0 |
17 | LDI XH,0 |
||
18 | RCALL SCR_SET_CURSOR |
||
261 | ddp | 19 | LDI DATA,$20 ;" " |
20 | LDI TEMP,$F0 |
||
21 | LDI COUNT,53 |
||
22 | RCALL SCR_FILL_CHAR_ATTR |
||
277 | ddp | 23 | LDI DATA,$B0 ;"░" |
24 | LDI TEMP,$77 |
||
25 | LDIW 53*23 |
||
26 | RCALL SCR_FILLLONG_CHAR_ATTR |
||
261 | ddp | 27 | LDI DATA,$20 ;" " |
28 | LDI TEMP,$F0 |
||
29 | LDI COUNT,53 |
||
30 | RCALL SCR_FILL_CHAR_ATTR |
||
277 | ddp | 31 | CBR FLAGS1,0B00000011 |
261 | ddp | 32 | SBR FLAGS1,0B00000100 |
33 | LDI XL,0 |
||
34 | LDI XH,0 |
||
35 | RCALL SCR_SET_CURSOR |
||
290 | ddp | 36 | LDIZ MSG_TITLE1*2 |
37 | RCALL SCR_PRINTSTRZ |
||
261 | ddp | 38 | CALL PRINT_SHORT_VERS |
39 | LDIZ MSG_TITLE2*2 |
||
40 | RJMP SCR_PRINTSTRZ |
||
41 | ; |
||
42 | ;-------------------------------------- |
||
43 | ; ┌──┬────────────────────── коорд.лев.верхн угола окна |
||
44 | ; │ │ ┌────────────────── ширина (без учёта тени) |
||
45 | ; │ │ │ ┌────────────── высота (без учёта тени) |
||
46 | ; │ │ │ │ ┌───────── атрибут окна |
||
47 | ;WINDOW_DESCRIPTOR: │ │ │ │ │ ┌──── флаги: .0 - "с тенью/без тени" |
||
48 | ; .DB 15, 3, 25, 13, $1F, $01 |
||
49 | ; |
||
50 | ;in: Z == указатель на описатель окна (в младших 64K) |
||
51 | ;const: WIN_SHADOW_ATTR == атрибут тени |
||
52 | .EQU WIN_X =0 |
||
53 | .EQU WIN_Y =1 |
||
54 | .EQU WIN_W =2 |
||
55 | .EQU WIN_W2 =3 |
||
56 | .EQU WIN_H =4 |
||
57 | .EQU WIN_H2 =5 |
||
58 | .EQU WIN_ATTR=6 |
||
59 | .EQU WIN_FLGS=7 |
||
60 | ; |
||
61 | WINDOW: GETMEM 8 |
||
62 | |||
63 | LPM XL,Z+ |
||
64 | STH WIN_X,XL |
||
65 | LPM XH,Z+ |
||
66 | STH WIN_Y,XH |
||
67 | LPM TEMP,Z+ |
||
68 | STH WIN_W,TEMP |
||
69 | SUBI TEMP,2 |
||
70 | STH WIN_W2,TEMP |
||
71 | LPM TEMP,Z+ |
||
72 | STH WIN_H,TEMP |
||
73 | SUBI TEMP,2 |
||
74 | STH WIN_H2,TEMP |
||
75 | LPM TEMP,Z+ |
||
76 | STH WIN_ATTR,TEMP |
||
77 | LPM TEMP,Z+ |
||
78 | STH WIN_FLGS,TEMP |
||
79 | |||
80 | RCALL SCR_SET_CURSOR |
||
81 | LDH TEMP,WIN_ATTR |
||
82 | RCALL SCR_SET_ATTR |
||
83 | LDI DATA,$DA ;"┌" |
||
84 | RCALL SCR_PUTCHAR |
||
85 | LDI DATA,$C4 ;"─" |
||
86 | LDH COUNT,WIN_W2 |
||
87 | RCALL SCR_FILL_CHAR |
||
88 | LDI DATA,$BF ;"┐" |
||
89 | RCALL SCR_PUTCHAR |
||
90 | WIND_1: |
||
91 | LDH XL,WIN_X |
||
92 | LDH XH,WIN_Y |
||
93 | INC XH |
||
94 | STH WIN_Y,XH |
||
95 | RCALL SCR_SET_CURSOR |
||
96 | LDH TEMP,WIN_ATTR |
||
97 | RCALL SCR_SET_ATTR |
||
98 | LDI DATA,$B3 ;"│" |
||
99 | RCALL SCR_PUTCHAR |
||
100 | LDI DATA,$20 ;" " |
||
101 | LDH COUNT,WIN_W2 |
||
102 | RCALL SCR_FILL_CHAR |
||
103 | LDI DATA,$B3 ;"│" |
||
104 | RCALL SCR_PUTCHAR |
||
105 | LDH COUNT,WIN_FLGS |
||
106 | SBRS COUNT,0 |
||
107 | RJMP WIND_2 |
||
108 | LDI TEMP,WIN_SHADOW_ATTR |
||
109 | LDI COUNT,1 |
||
110 | RCALL SCR_FILL_ATTR |
||
111 | WIND_2: LDH COUNT,WIN_H2 |
||
112 | DEC COUNT |
||
113 | STH WIN_H2,COUNT |
||
114 | BRNE WIND_1 |
||
115 | |||
116 | LDH XL,WIN_X |
||
117 | LDH XH,WIN_Y |
||
118 | INC XH |
||
119 | STH WIN_Y,XH |
||
120 | RCALL SCR_SET_CURSOR |
||
121 | LDH TEMP,WIN_ATTR |
||
122 | RCALL SCR_SET_ATTR |
||
123 | LDI DATA,$C0 ;"└" |
||
124 | RCALL SCR_PUTCHAR |
||
125 | LDI DATA,$C4 ;"─" |
||
126 | LDH COUNT,WIN_W2 |
||
127 | RCALL SCR_FILL_CHAR |
||
128 | LDI DATA,$D9 ;"┘" |
||
129 | RCALL SCR_PUTCHAR |
||
130 | LDH COUNT,WIN_FLGS |
||
131 | SBRS COUNT,0 |
||
132 | RJMP WIND_3 |
||
133 | LDI TEMP,WIN_SHADOW_ATTR |
||
134 | LDI COUNT,1 |
||
135 | RCALL SCR_FILL_ATTR |
||
136 | WIND_3: |
||
137 | LDH COUNT,WIN_FLGS |
||
138 | SBRS COUNT,0 |
||
139 | RJMP WIND_4 |
||
140 | LDH XL,WIN_X |
||
141 | INC XL |
||
142 | LDH XH,WIN_Y |
||
143 | INC XH |
||
144 | RCALL SCR_SET_CURSOR |
||
145 | LDI TEMP,WIN_SHADOW_ATTR |
||
146 | LDH COUNT,WIN_W |
||
147 | RCALL SCR_FILL_ATTR |
||
148 | WIND_4: |
||
149 | LDH TEMP,WIN_ATTR |
||
150 | RCALL SCR_SET_ATTR |
||
151 | |||
152 | FREEMEM 8 |
||
153 | RET |
||
154 | ; |
||
155 | ;-------------------------------------- |
||
156 | ; ┌──┬────────────────────── коорд.лев.верхн угола окна |
||
290 | ddp | 157 | ; │ │ ┌────────────────── длина_строки + 2 = |
158 | ; │ │ │ = ширина без учёта рамки и тени |
||
261 | ddp | 159 | ; │ │ │ ┌───────────── количество пунктов меню |
160 | ; │ │ │ │ ┌──────── атрибут для окна |
||
161 | ;MENU_DESCRIPTOR: │ │ │ │ │ ┌─── атрибут для курсора |
||
162 | ; .DB 15, 3, 18+2, 2, $1F, $F0 |
||
163 | ; .DW BKGND_TASK ──────────────── ссылка на фоновую задачу |
||
164 | ; .DW PERIOD ──────────────────── период вызова фоновой задачи, мс (1..16383) |
||
165 | ; |
||
166 | ; .DW HANDLER1 ────────────────── указатель на обработчик для 1-го пункта меню |
||
167 | ; .DW HANDLER2 ────────────────── указатель на обработчик для 2-го пункта меню |
||
168 | ; |
||
169 | ; .DB "─ Заголовок окна ─" \ |
||
170 | ; .DB "Первый пункт меню " > язык 0 |
||
171 | ; .DB "Второй пункт меню " / |
||
172 | ; |
||
173 | ; .DB " Header of window " \ |
||
174 | ; .DB "It's first item " > язык 1 |
||
175 | ; .DB "It's second item " / |
||
290 | ddp | 176 | ; ;123456789012345678 (длина_строки=18) |
261 | ddp | 177 | ; |
178 | ; ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ |
||
179 | ; ▒▒▒▒┌── Заголовок окна ──┐▒▒▒▒▒ ▒▒▒▒┌─ Header of window ─┐▒▒▒▒▒ |
||
180 | ; ▒▒▒▒│ Первый пункт меню │░▒▒▒▒ ▒▒▒▒│ It's first item │░▒▒▒▒ |
||
181 | ; ▒▒▒▒│ Второй пункт меню │░▒▒▒▒ ▒▒▒▒│ It's second item │░▒▒▒▒ |
||
182 | ; ▒▒▒▒└────────────────────┘░▒▒▒▒ ▒▒▒▒└────────────────────┘░▒▒▒▒ |
||
183 | ; ▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░▒▒▒▒ ▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░▒▒▒▒ |
||
184 | ; ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ |
||
185 | ;-------------------------------------- |
||
186 | ;Меню (выбор функции - выполнение - возврат в меню) |
||
187 | ;in: Z == указатель на описатель меню (в младших 64K) |
||
188 | ;const: WIN_SHADOW_ATTR == атрибут тени |
||
189 | .EQU MENU_TIMEOUT_0 =0 |
||
190 | .EQU MENU_TIMEOUT_1 =1 |
||
191 | .EQU MENU_DESC_L =2 |
||
192 | .EQU MENU_DESC_H =3 |
||
193 | .EQU MENU_SELECT =4 |
||
194 | .EQU MENU_X =5 |
||
195 | .EQU MENU_Y =6 |
||
196 | .EQU MENU_Y_TEMP =7 |
||
197 | .EQU MENU_WIDTH2 =8 |
||
198 | .EQU MENU_HEIGHT2 =9 |
||
199 | .EQU MENU_H2_TEMP =10 |
||
200 | .EQU MENU_WIN_ATTR =11 |
||
201 | .EQU MENU_CUR_ATTR =12 |
||
202 | .EQU MENU_BTASK_L =13 |
||
203 | .EQU MENU_BTASK_H =14 |
||
204 | .EQU MENU_BPERIOD_L =15 |
||
205 | .EQU MENU_BPERIOD_H =16 |
||
206 | ; |
||
207 | MENU: GETMEM 17 |
||
208 | STH MENU_DESC_L,ZL |
||
209 | STH MENU_DESC_H,ZH |
||
210 | STH MENU_SELECT,NULL |
||
211 | MENU_AGAIN: |
||
212 | STH MENU_TIMEOUT_1,NULL |
||
213 | RCALL SCR_BACKGND |
||
214 | LDH ZL,MENU_DESC_L |
||
215 | LDH ZH,MENU_DESC_H |
||
216 | LPM XL,Z+ |
||
217 | STH MENU_X,XL |
||
218 | LPM XH,Z+ |
||
219 | STH MENU_Y,XH |
||
220 | STH MENU_Y_TEMP,XH |
||
221 | LPM TEMP,Z+ |
||
222 | STH MENU_WIDTH2,TEMP |
||
223 | LPM TEMP,Z+ |
||
224 | STH MENU_HEIGHT2,TEMP |
||
225 | STH MENU_H2_TEMP,TEMP |
||
226 | LPM TEMP,Z+ |
||
227 | STH MENU_WIN_ATTR,TEMP |
||
228 | LPM TEMP,Z+ |
||
229 | STH MENU_CUR_ATTR,TEMP |
||
230 | |||
231 | LPM TEMP,Z+ |
||
232 | STH MENU_BTASK_L,TEMP |
||
233 | LPM TEMP,Z+ |
||
234 | STH MENU_BTASK_H,TEMP |
||
235 | LPM TEMP,Z+ |
||
236 | STH MENU_BPERIOD_L,TEMP |
||
237 | LPM TEMP,Z+ |
||
238 | STH MENU_BPERIOD_H,TEMP |
||
239 | |||
240 | LDH TEMP,MENU_HEIGHT2 |
||
241 | LSL TEMP |
||
242 | ADD ZL,TEMP |
||
243 | ADC ZH,NULL |
||
244 | LDH DATA,MENU_WIDTH2 |
||
245 | SUBI DATA,2 |
||
246 | LDH TEMP,MENU_HEIGHT2 |
||
247 | INC TEMP |
||
248 | MUL DATA,TEMP |
||
249 | MOV TEMP,LANG |
||
250 | LSR TEMP |
||
251 | BREQ MENU_5 |
||
252 | MENU_6: ADD ZL,R0 |
||
253 | ADC ZH,R1 |
||
254 | DEC TEMP |
||
255 | BRNE MENU_6 |
||
256 | MENU_5: |
||
257 | RCALL SCR_SET_CURSOR |
||
258 | LDH TEMP,MENU_WIN_ATTR |
||
259 | RCALL SCR_SET_ATTR |
||
260 | LDI DATA,$DA ;"┌" |
||
261 | RCALL SCR_PUTCHAR |
||
262 | LDI DATA,$C4 ;"─" |
||
263 | RCALL SCR_PUTCHAR |
||
264 | LDH COUNT,MENU_WIDTH2 |
||
265 | SUBI COUNT,2 |
||
266 | RCALL SCR_PRINTSTRN |
||
267 | LDI DATA,$C4 ;"─" |
||
268 | RCALL SCR_PUTCHAR |
||
269 | LDI DATA,$BF ;"┐" |
||
270 | RCALL SCR_PUTCHAR |
||
271 | MENU_1: |
||
272 | LDH XL,MENU_X |
||
273 | LDH XH,MENU_Y_TEMP |
||
274 | INC XH |
||
275 | STH MENU_Y_TEMP,XH |
||
276 | RCALL SCR_SET_CURSOR |
||
277 | LDH TEMP,MENU_WIN_ATTR |
||
278 | RCALL SCR_SET_ATTR |
||
279 | LDI DATA,$B3 ;"│" |
||
280 | RCALL SCR_PUTCHAR |
||
281 | LDI DATA,$20 ;" " |
||
282 | RCALL SCR_PUTCHAR |
||
283 | LDH COUNT,MENU_WIDTH2 |
||
284 | SUBI COUNT,2 |
||
285 | RCALL SCR_PRINTSTRN |
||
286 | LDI DATA,$20 ;" " |
||
287 | RCALL SCR_PUTCHAR |
||
288 | LDI DATA,$B3 ;"│" |
||
289 | RCALL SCR_PUTCHAR |
||
290 | LDI TEMP,WIN_SHADOW_ATTR |
||
291 | LDI COUNT,1 |
||
292 | RCALL SCR_FILL_ATTR |
||
293 | MENU_2: LDH COUNT,MENU_H2_TEMP |
||
294 | DEC COUNT |
||
295 | STH MENU_H2_TEMP,COUNT |
||
296 | BRNE MENU_1 |
||
297 | |||
298 | LDH XL,MENU_X |
||
299 | LDH XH,MENU_Y_TEMP |
||
300 | INC XH |
||
301 | STH MENU_Y_TEMP,XH |
||
302 | RCALL SCR_SET_CURSOR |
||
303 | LDH TEMP,MENU_WIN_ATTR |
||
304 | RCALL SCR_SET_ATTR |
||
305 | LDI DATA,$C0 ;"└" |
||
306 | RCALL SCR_PUTCHAR |
||
307 | LDI DATA,$C4 ;"─" |
||
308 | LDH COUNT,MENU_WIDTH2 |
||
309 | RCALL SCR_FILL_CHAR |
||
310 | LDI DATA,$D9 ;"┘" |
||
311 | RCALL SCR_PUTCHAR |
||
312 | LDI TEMP,WIN_SHADOW_ATTR |
||
313 | LDI COUNT,1 |
||
314 | RCALL SCR_FILL_ATTR |
||
315 | MENU_3: |
||
316 | LDH XL,MENU_X |
||
317 | INC XL |
||
318 | LDH XH,MENU_Y_TEMP |
||
319 | INC XH |
||
320 | RCALL SCR_SET_CURSOR |
||
321 | LDI TEMP,WIN_SHADOW_ATTR |
||
322 | LDH COUNT,MENU_WIDTH2 |
||
323 | ADDI COUNT,2 |
||
324 | RCALL SCR_FILL_ATTR |
||
325 | |||
326 | LDH ZL,MENU_BTASK_L |
||
327 | LDH ZH,MENU_BTASK_H |
||
328 | LDI DATA,0 |
||
329 | ICALL |
||
330 | |||
331 | MENU_DRAWCURSOR: |
||
332 | LDH XL,MENU_X |
||
333 | INC XL |
||
334 | LDH XH,MENU_Y |
||
335 | INC XH |
||
336 | LDH TEMP,MENU_SELECT |
||
337 | ADD XH,TEMP |
||
338 | RCALL SCR_SET_CURSOR |
||
339 | LDH TEMP,MENU_CUR_ATTR |
||
340 | LDH COUNT,MENU_WIDTH2 |
||
341 | RCALL SCR_FILL_ATTR |
||
342 | |||
343 | MENU_WAITKEY: |
||
344 | CALL INKEY |
||
345 | BREQ MENU_NOKEY |
||
346 | CPI DATA,KEY_ENTER |
||
347 | BREQ MENU_ENTER |
||
348 | CPI DATA,KEY_UP |
||
349 | BREQ MENU_UP |
||
350 | CPI DATA,KEY_DOWN |
||
351 | BREQ MENU_DOWN |
||
352 | CPI DATA,KEY_PAGEUP |
||
353 | BREQ MENU_TOP |
||
354 | CPI DATA,KEY_HOME |
||
355 | BREQ MENU_TOP |
||
356 | CPI DATA,KEY_PAGEDOWN |
||
357 | BREQ MENU_BOTTOM |
||
358 | CPI DATA,KEY_END |
||
359 | BREQ MENU_BOTTOM |
||
360 | SBRC TEMP,PS2K_BIT_EXTKEY |
||
361 | RJMP MENU_NOKEY |
||
362 | CPI DATA,KEY_ESC |
||
363 | BREQ MENU_ESCAPE |
||
364 | CPI DATA,KEY_CAPSLOCK |
||
365 | BREQ MENU_SWITCH_LANG |
||
366 | CPI DATA,KEY_SCROLLLOCK |
||
367 | BREQ MENU_SWITCH_VGA |
||
368 | CPI DATA,KEY_F1 |
||
369 | BREQ MENU_HELP |
||
370 | MENU_NOKEY: |
||
371 | MOVW ZL,YL |
||
372 | CALL CHECK_TIMEOUT_MS |
||
373 | BRCC MENU_WAITKEY |
||
374 | LDH ZL,MENU_BTASK_L |
||
375 | LDH ZH,MENU_BTASK_H |
||
376 | LDI DATA,1 |
||
377 | ICALL |
||
378 | MOVW ZL,YL |
||
379 | LDH WL,MENU_BPERIOD_L |
||
380 | LDH WH,MENU_BPERIOD_H |
||
381 | CALL SET_TIMEOUT_MS |
||
382 | RJMP MENU_WAITKEY |
||
383 | ; |
||
384 | MENU_TOP: |
||
385 | RJMP MENU_TOP0 |
||
386 | MENU_BOTTOM: |
||
387 | RJMP MENU_BOTTOM0 |
||
388 | MENU_SWITCH_LANG: |
||
389 | RJMP MENU_SWLNG0 |
||
390 | MENU_SWITCH_VGA: |
||
391 | RJMP MENU_SWVGA0 |
||
392 | MENU_HELP: |
||
393 | RJMP MENU_HELP0 |
||
394 | ; |
||
395 | MENU_ESCAPE: |
||
396 | FREEMEM 17 |
||
397 | RET |
||
398 | ; |
||
399 | MENU_ENTER: |
||
400 | RCALL SCR_FADE |
||
401 | LDH ZL,MENU_DESC_L |
||
402 | LDH ZH,MENU_DESC_H |
||
403 | ADIW ZL,10 |
||
404 | LDH TEMP,MENU_SELECT |
||
405 | LSL TEMP |
||
406 | ADD ZL,TEMP |
||
407 | ADC ZH,NULL |
||
408 | LPM XL,Z+ |
||
409 | LPM XH,Z+ |
||
410 | MOVW ZL,XL |
||
411 | ICALL |
||
412 | RJMP MENU_AGAIN |
||
413 | ; |
||
414 | MENU_UP: |
||
415 | LDH TEMP,MENU_SELECT |
||
416 | TST TEMP |
||
417 | BRNE MENU_UP_1 |
||
418 | RJMP MENU_WAITKEY |
||
419 | MENU_UP_1: |
||
420 | RCALL MENU_CLR_CURSOR |
||
421 | LDH TEMP,MENU_SELECT |
||
422 | DEC TEMP |
||
423 | STH MENU_SELECT,TEMP |
||
424 | RJMP MENU_DRAWCURSOR |
||
425 | ; |
||
426 | MENU_DOWN: |
||
427 | LDH TEMP,MENU_SELECT |
||
428 | LDH DATA,MENU_HEIGHT2 |
||
429 | DEC DATA |
||
430 | CP TEMP,DATA |
||
431 | BRCS MENU_DOWN_1 |
||
432 | RJMP MENU_WAITKEY |
||
433 | MENU_DOWN_1: |
||
434 | RCALL MENU_CLR_CURSOR |
||
435 | LDH TEMP,MENU_SELECT |
||
436 | INC TEMP |
||
437 | STH MENU_SELECT,TEMP |
||
438 | RJMP MENU_DRAWCURSOR |
||
439 | ; |
||
440 | MENU_TOP0: |
||
441 | LDH TEMP,MENU_SELECT |
||
442 | RCALL MENU_CLR_CURSOR |
||
443 | CLR TEMP |
||
444 | STH MENU_SELECT,TEMP |
||
445 | RJMP MENU_DRAWCURSOR |
||
446 | ; |
||
447 | MENU_BOTTOM0: |
||
448 | LDH TEMP,MENU_SELECT |
||
449 | RCALL MENU_CLR_CURSOR |
||
450 | LDH TEMP,MENU_HEIGHT2 |
||
451 | DEC TEMP |
||
452 | STH MENU_SELECT,TEMP |
||
453 | RJMP MENU_DRAWCURSOR |
||
454 | ; |
||
455 | MENU_HELP0: |
||
456 | RCALL SCR_FADE |
||
457 | LDIZ WIND_MENU_HELP*2 |
||
458 | RCALL WINDOW |
||
459 | LDIZ MLMSG_MENU_HELP*2 |
||
460 | RCALL SCR_PRINTMLSTR |
||
461 | CALL WAITKEY |
||
462 | RJMP MENU_AGAIN |
||
463 | WIND_MENU_HELP: |
||
464 | .DB 3,13,37,9,$CF,$01 |
||
465 | ; |
||
466 | MENU_SWLNG3: |
||
467 | FREEMEM 2 |
||
468 | MENU_SWLNG0: |
||
469 | MOV DATA,LANG |
||
470 | ADDI DATA,2 |
||
471 | CPI DATA,MAX_LANG*2 |
||
472 | BRCS MENU_SWLNG1 |
||
473 | CLR DATA |
||
474 | MENU_SWLNG1: |
||
475 | MOV LANG,DATA |
||
476 | LSR DATA |
||
477 | LDIW EE_LANG |
||
478 | CALL EEPROM_WRITE |
||
479 | RCALL SCR_FADE |
||
480 | LDIZ WIND_MENU_SWLNG*2 |
||
481 | RCALL WINDOW |
||
482 | LDI TEMP,$9E |
||
483 | RCALL SCR_SET_ATTR |
||
484 | LDIZ MLMSG_MENU_SWLNG*2 |
||
485 | RCALL SCR_PRINTMLSTR |
||
486 | GETMEM 2 |
||
487 | MOVW ZL,YL |
||
488 | LDIW 2000 |
||
489 | CALL SET_TIMEOUT_MS |
||
490 | MENU_SWLNG2: |
||
491 | MOVW ZL,YL |
||
492 | CALL CHECK_TIMEOUT_MS |
||
493 | BRCS MENU_SWLNG9 |
||
494 | CALL INKEY |
||
495 | BREQ MENU_SWLNG2 |
||
496 | SBRC TEMP,PS2K_BIT_EXTKEY |
||
497 | RJMP MENU_SWLNG9 |
||
498 | CPI DATA,KEY_CAPSLOCK |
||
499 | BREQ MENU_SWLNG3 |
||
500 | MENU_SWLNG9: |
||
501 | FREEMEM 2 |
||
502 | RJMP MENU_AGAIN |
||
503 | WIND_MENU_SWLNG: |
||
504 | .DB 13,11,27,3,$9F,$01 |
||
505 | ; |
||
506 | MENU_SWVGA0: |
||
380 | ddp | 507 | LDI TEMP,0B10000000 |
508 | EOR MODE1,TEMP |
||
261 | ddp | 509 | MOV DATA,MODE1 |
380 | ddp | 510 | ANDI DATA,0B10000000 |
261 | ddp | 511 | LDI TEMP,SCR_MODE |
512 | CALL FPGA_REG |
||
513 | MOV DATA,MODE1 |
||
514 | LDIW EE_MODE1 |
||
515 | CALL EEPROM_WRITE |
||
516 | RCALL SCR_KBDSETLED |
||
517 | RJMP MENU_AGAIN |
||
518 | ; |
||
519 | MENU_CLR_CURSOR: |
||
520 | LDH XL,MENU_X |
||
521 | INC XL |
||
522 | LDH XH,MENU_Y |
||
523 | INC XH |
||
524 | ADD XH,TEMP |
||
525 | RCALL SCR_SET_CURSOR |
||
526 | LDH TEMP,MENU_WIN_ATTR |
||
527 | LDH COUNT,MENU_WIDTH2 |
||
528 | RJMP SCR_FILL_ATTR |
||
529 | ; |
||
530 | SCR_KBDSETLED: |
||
531 | LDI DATA,$ED |
||
532 | RCALL PS2K_SEND_BYTE |
||
533 | BREQ SCR_SETLED_FAIL |
||
534 | RCALL PS2K_RECEIVE_BYTE |
||
535 | BREQ SCR_SETLED_FAIL |
||
536 | CPI DATA,$FA |
||
537 | BRNE SCR_SETLED_FAIL |
||
380 | ddp | 538 | LDI DATA,0B00000000 |
539 | SBRS MODE1,7 |
||
540 | LDI DATA,0B00000001 |
||
261 | ddp | 541 | RCALL PS2K_SEND_BYTE |
542 | SCR_SETLED_FAIL: |
||
543 | RET |
||
544 | ; |
||
545 | ;-------------------------------------- |
||
546 | ;Установка текущего атрибута |
||
547 | ;in: TEMP - attr |
||
548 | SCR_SET_ATTR: |
||
549 | MOV DATA,TEMP |
||
550 | LDI TEMP,SCR_ATTR |
||
551 | RJMP FPGA_REG |
||
552 | ; |
||
553 | ;-------------------------------------- |
||
554 | ;Установка позиции печати на экране |
||
555 | ; XL - x (0..52) |
||
556 | ; XH - y (0..24) |
||
557 | SCR_SET_CURSOR: |
||
558 | LDI TEMP,53 |
||
559 | MUL XH,TEMP |
||
560 | CLR XH |
||
561 | ADD XL,R0 |
||
562 | ADC XH,R1 |
||
563 | SBIW XL,1 |
||
564 | ANDI XH,$07 |
||
565 | LDI TEMP,SCR_LOADDR |
||
566 | MOV DATA,XL |
||
567 | RCALL FPGA_REG |
||
568 | LDI TEMP,SCR_HIADDR |
||
277 | ddp | 569 | MOV DATA,XH |
261 | ddp | 570 | RJMP FPGA_REG |
571 | ; |
||
572 | ;-------------------------------------- |
||
573 | ;in: Z == указатель на структуру строк (в младших 64K) |
||
574 | SCR_PRINTMLSTR: |
||
575 | ADD ZL,LANG |
||
576 | ADC ZH,NULL |
||
577 | LPM WL,Z+ |
||
578 | LPM WH,Z+ |
||
579 | MOVW ZL,WL |
||
580 | ; |
||
581 | ; - - - - - - - - - - - - - - - - - - - |
||
582 | ;in: Z == указатель на строку (в младших 64K) |
||
583 | SCR_PRINTSTRZ: |
||
584 | SPICS_SET |
||
585 | LDI TEMP,SCR_CHAR |
||
380 | ddp | 586 | .IFDEF DEBUG_FPGA_OUT |
587 | CALL DBG_SET_FPGA_REG |
||
588 | .ENDIF |
||
261 | ddp | 589 | OUT SPDR,TEMP |
590 | RCALL FPGA_RDY_RD |
||
591 | SCR_PRSTRZ1: |
||
592 | LPM DATA,Z+ |
||
593 | TST DATA |
||
594 | BREQ SCR_PRSTRZ9 |
||
595 | CPI DATA,$15 |
||
596 | BREQ SCR_PRSTRZ2 |
||
597 | CPI DATA,$16 |
||
598 | BREQ SCR_PRSTRZ3 |
||
599 | RCALL FPGA_SAME_REG |
||
600 | RJMP SCR_PRSTRZ1 |
||
601 | SCR_PRSTRZ2: |
||
602 | LPM DATA,Z+ |
||
603 | LDI TEMP,SCR_ATTR |
||
604 | RCALL FPGA_REG |
||
605 | RJMP SCR_PRINTSTRZ ;SCR_PRSTRZ1 |
||
606 | SCR_PRSTRZ3: |
||
607 | LPM XL,Z+ |
||
608 | LPM XH,Z+ |
||
609 | RCALL SCR_SET_CURSOR |
||
610 | RJMP SCR_PRINTSTRZ ;SCR_PRSTRZ1 |
||
611 | SCR_PRSTRZ9: |
||
612 | RET |
||
613 | ; |
||
614 | ;-------------------------------------- |
||
615 | ;in: Z == указатель на строку (в RAM) |
||
616 | ; COUNT == длина строки |
||
617 | SCR_PRNRAMSTRN: |
||
618 | SPICS_SET |
||
619 | LDI TEMP,SCR_CHAR |
||
380 | ddp | 620 | .IFDEF DEBUG_FPGA_OUT |
621 | CALL DBG_SET_FPGA_REG |
||
622 | .ENDIF |
||
261 | ddp | 623 | OUT SPDR,TEMP |
624 | RCALL FPGA_RDY_RD |
||
625 | SCR_PRSN1: |
||
626 | LD DATA,Z+ |
||
627 | RCALL FPGA_SAME_REG |
||
628 | DEC COUNT |
||
629 | BRNE SCR_PRSN1 |
||
630 | RET |
||
631 | ; |
||
632 | ;-------------------------------------- |
||
633 | ;in: Z == указатель на строку (в младших 64K) |
||
634 | ; COUNT == длина строки |
||
635 | SCR_PRINTSTRN: |
||
636 | SPICS_SET |
||
637 | LDI TEMP,SCR_CHAR |
||
380 | ddp | 638 | .IFDEF DEBUG_FPGA_OUT |
639 | CALL DBG_SET_FPGA_REG |
||
640 | .ENDIF |
||
261 | ddp | 641 | OUT SPDR,TEMP |
642 | RCALL FPGA_RDY_RD |
||
643 | SCR_PRSTRN1: |
||
644 | LPM DATA,Z+ |
||
645 | RCALL FPGA_SAME_REG |
||
646 | DEC COUNT |
||
647 | BRNE SCR_PRSTRN1 |
||
648 | RET |
||
649 | ; |
||
650 | ;-------------------------------------- |
||
651 | ;in: DATA |
||
652 | SCR_PUTCHAR: |
||
653 | PUSH TEMP |
||
654 | LDI TEMP,SCR_CHAR |
||
655 | RCALL FPGA_REG |
||
656 | POP TEMP |
||
657 | RET |
||
658 | ; |
||
659 | ;-------------------------------------- |
||
660 | ;Заполнение символом и атрибутом |
||
661 | ;in: DATA == символ |
||
662 | ; TEMP == атрибут |
||
663 | ; COUNT == количество |
||
664 | SCR_FILL_CHAR_ATTR: |
||
665 | PUSH DATA |
||
666 | MOV DATA,TEMP |
||
667 | LDI TEMP,SCR_ATTR |
||
668 | RCALL FPGA_REG |
||
669 | POP DATA |
||
670 | ;Заполнение символом и текущим атрибутом |
||
671 | ;in: DATA == символ |
||
672 | ; COUNT == количество |
||
673 | SCR_FILL_CHAR: |
||
674 | LDI TEMP,SCR_CHAR |
||
675 | RCALL FPGA_REG |
||
676 | DEC COUNT |
||
677 | BRNE SCR_FA1 |
||
678 | RET |
||
679 | ; |
||
680 | ;-------------------------------------- |
||
681 | ;Заполнение атрибутом |
||
682 | ;in: TEMP == атрибут |
||
683 | ; COUNT == количество |
||
684 | SCR_FILL_ATTR: |
||
685 | MOV DATA,TEMP |
||
686 | LDI TEMP,SCR_FILL |
||
687 | RCALL FPGA_REG |
||
688 | DEC COUNT |
||
689 | BREQ SCR_FA9 |
||
690 | SCR_FA1:SPICS_CLR |
||
691 | SPICS_SET |
||
380 | ddp | 692 | .IFDEF DEBUG_FPGA_OUT |
693 | CALL DBG_REPEAT_SEQ |
||
694 | .ENDIF |
||
261 | ddp | 695 | DEC COUNT |
696 | BRNE SCR_FA1 |
||
697 | SCR_FA9:RET |
||
698 | ; |
||
699 | ;-------------------------------------- |
||
277 | ddp | 700 | ;Заполнение символом и атрибутом (LONG) |
701 | ;in: DATA == символ |
||
702 | ; TEMP == атрибут |
||
703 | ; W == количество |
||
704 | SCR_FILLLONG_CHAR_ATTR: |
||
705 | PUSH DATA |
||
706 | MOV DATA,TEMP |
||
707 | LDI TEMP,SCR_ATTR |
||
708 | RCALL FPGA_REG |
||
709 | POP DATA |
||
710 | ;Заполнение символом и текущим атрибутом (LONG) |
||
711 | ;in: DATA == символ |
||
712 | ; W == количество |
||
713 | SCR_FILLLONG_CHAR: |
||
714 | LDI TEMP,SCR_CHAR |
||
715 | RCALL FPGA_REG |
||
716 | SBIW WL,1 |
||
717 | BRNE SCR_FL1 |
||
718 | RET |
||
719 | ; |
||
720 | ;-------------------------------------- |
||
721 | ;Заполнение атрибутом (LONG) |
||
261 | ddp | 722 | ;in: TEMP == атрибут |
723 | ; W == количество |
||
724 | SCR_FILLLONG_ATTR: |
||
725 | MOV DATA,TEMP |
||
726 | LDI TEMP,SCR_FILL |
||
727 | RCALL FPGA_REG |
||
728 | SBIW WL,1 |
||
729 | BREQ SCR_FL9 |
||
730 | SCR_FL1:SPICS_CLR |
||
731 | SPICS_SET |
||
380 | ddp | 732 | .IFDEF DEBUG_FPGA_OUT |
733 | CALL DBG_REPEAT_SEQ |
||
734 | .ENDIF |
||
261 | ddp | 735 | SBIW WL,1 |
736 | BRNE SCR_FL1 |
||
737 | SCR_FL9:RET |
||
738 | ; |
||
739 | ; |
||
740 | ;-------------------------------------- |
||
741 | ; |