Subversion Repositories pentevo

Rev

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
;