Subversion Repositories pentevo

Rev

Rev 838 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
507 savelij 1
 
1186 savelij 2
; LAST UPDATE: 14.02.2025 savelij
507 savelij 3
 
1186 savelij 4
; описатель окна (адрес в IX)
5
; +00 X координата
6
; +01 Y координата
7
; +02 V высота
8
; +03 H ширина
9
; +04 C цвет
10
; +05 C цвет курсора
11
; +06 F флаговый
12
; +07 N номер пункта в окне
13
;   BIT 7-0 => 8-9 текущий пункт,
14
;         1 => 8-9 адрес хранения
15
;       6-0 => A-B количество пунктов
16
;         1 => A-B адрес хранения
17
; +08 | текущий
18
; +09 | пункт меню
19
; +0A : количество
20
; +0B : пунктов
21
; +0C | адрес
22
; +0D | текста
23
; +0E : список адресов
24
; +0F : подпрограмм
25
; +10 | адрес списка активных
26
; +11 | зон для мыши
27
; +12 : адрес списка
28
; +13 : горячих клавиш
29
 
30
; формат флагового байта окна
31
; IX+6
32
; 7-0-нет, 1-есть нижний заголовок
33
; 6-0-с рамкой,1-без рамки
34
; 5-0-нет, 1-есть верхний заголовок
35
; 4-0-есть текст, 1-нет
36
; 3
37
; 2-
38
; 1-
39
; 0-
507 savelij 40
 
1186 savelij 41
; раскладка байт выделений. на данный момент не все перенесено из старой реализации
42
; +0 флаговый
43
;     7 при активности установлен
44
;     6 установлен, не выделяется
45
;     5 установлен, вызов вектора
46
;     4
47
;     3 \
48
;     2  } форма курсора
49
;     1  } при попадании
50
;     0 /
51
; +1 x координата
52
; +2 y координата
53
; +3 v высота
54
; +4 h ширина
55
; +5 k код клавиши
507 savelij 56
 
1186 savelij 57
EXT_WINDOW      LD A,(SYSFLAGS)
58
                BIT SYSFLAGS.B_FB_INT_EXT,A
59
                JR NZ,EXT_ZX_WINDOW
60
; внутренний вызов рисования окна на ZX экране
61
INT_ZX_WINDOW   LD A,NUM_ZXSCR
62
                JR INT_TXT_WINDOW.L1
507 savelij 63
 
1186 savelij 64
; внутренний вызов для рисования окна на текстовом экране
65
INT_TXT_WINDOW  LD A,NUM_TXTSCR
66
; внешний вызов для рисования окна на текстовом экране
67
.L1             EX AF,AF'
507 savelij 68
                XOR A
69
                LD (PAGE4READ),A
585 savelij 70
                EX AF,AF'
1186 savelij 71
                LD HL,SYSFLAGS
72
                SET SYSFLAGS.B_WIN_INT_EXT,(HL)
73
                JR EXT_ZX_WINDOW.L1
507 savelij 74
 
1186 savelij 75
; внешний вызов для рисования окна на ZX экране
76
EXT_ZX_WINDOW   LD HL,SYSFLAGS
77
                RES SYSFLAGS.B_WIN_INT_EXT,(HL)
585 savelij 78
                LD IX,(RREG_IXL)
79
                LD A,(R_77)
80
                AND 7
1186 savelij 81
.L1             CP NUM_ZXSCR
585 savelij 82
                JP Z,WINW_ZX
838 savelij 83
                CP NUM_TXTSCR
585 savelij 84
                RET NZ
507 savelij 85
                EXX
1186 savelij 86
                LD BC,WIN_P2
585 savelij 87
                LD A,(PAGE4READ)
507 savelij 88
                OUT (C),A
585 savelij 89
                EXX
1186 savelij 90
                LD D,(IX+_X_COORD)              ; X
91
                LD E,(IX+_Y_COORD)              ; Y
92
                LD C,(IX+_COLOR_WIN)            ; цвет окна
585 savelij 93
                EXX
1186 savelij 94
                LD H,(IX+_V_SIZE)               ; V
95
                LD L,(IX+_H_SIZE)               ; H
96
                LD D,(IX+_FLAGS)                ; FLAGS
97
        EVOPORT WIN_P2,RAM_NMI
585 savelij 98
                LD B,HIGH (WIN_P3)
1186 savelij 99
                LD A,VMODE7_0
585 savelij 100
                OUT (C),A
101
                EXX
102
                PUSH DE
103
                LD B," "
104
                EXX
105
                PUSH HL
106
WINT2           LD A,L
107
                EXX
108
                PUSH DE
109
WINT1           EX AF,AF'
110
                CALL PRTSYMTXTMODE
111
                INC D
112
                EX AF,AF'
113
                DEC A
114
                JR NZ,WINT1
115
                POP DE
116
                INC E
117
                EXX
118
                DEC H
119
                JR NZ,WINT2
120
                POP HL
1186 savelij 121
                BIT B_DOWN_HEADER,D
585 savelij 122
                EXX
123
                POP DE
1186 savelij 124
                JR Z,TNIZ_RAMKA         ; окно без нижнего заголовка
125
; рисуем нижнюю цветную полоску
585 savelij 126
                PUSH DE
127
                EXX
128
                LD A,H
129
                EXX
130
                DEC A
131
                ADD A,E
132
                LD E,A
133
                CALL COLOR_LINE
134
                POP DE
135
                JR TCENTR_RAMK
136
 
1186 savelij 137
; рисуем нижнюю рамку
585 savelij 138
TNIZ_RAMKA      EXX
1186 savelij 139
                BIT B_WINFRAME,D
605 savelij 140
                EXX
141
                JR NZ,TCENTR_RAMK
142
                EXX
585 savelij 143
                LD A,H
144
                EXX
145
                PUSH DE
146
                DEC A
147
                ADD A,E
148
                LD E,A
149
;               LD B,"└"
1186 savelij 150
                LD B,5+0xF2                     ; левый нижний угол
585 savelij 151
                CALL PRTSYMTXTMODE
152
;               LD B,"─"
1186 savelij 153
                LD B,6+0xF2                     ; нижний край
585 savelij 154
                INC D
155
                EXX
156
                LD A,L
157
                EXX
158
                DEC A
159
                DEC A
160
WINT04          EX AF,AF'
161
                CALL PRTSYMTXTMODE
162
                INC D
163
                EX AF,AF'
164
                DEC A
165
                JR NZ,WINT04
166
;               LD B,"┘"
1186 savelij 167
                LD B,7+0xF2                     ; правый нижний угол
585 savelij 168
                CALL PRTSYMTXTMODE
169
                POP DE
170
TCENTR_RAMK     EXX
1186 savelij 171
                BIT B_WINFRAME,D
585 savelij 172
                EXX
1186 savelij 173
                JR NZ,TWERH_COLOR               ; окно без рамки
174
; рисуем боковые рамки
585 savelij 175
                EXX
176
                LD A,H
177
                EXX
178
                DEC A
179
                DEC A
180
;               LD B,"│"
1186 savelij 181
                LD B,3+0xF2                     ; левая сторона
585 savelij 182
                INC E
183
                PUSH DE
184
WINT01          EX AF,AF'
185
                CALL PRTSYMTXTMODE
186
                INC E
187
                EX AF,AF'
188
                DEC A
189
                JR NZ,WINT01
190
                POP DE
191
                PUSH DE
192
                EXX
193
                LD A,L
194
                EXX
195
                ADD A,D
196
                DEC A
197
                LD D,A
198
                EXX
199
                LD A,H
200
                EXX
201
                DEC A
202
                DEC A
1186 savelij 203
                LD B,4+0xF2                     ; правая сторона окна
585 savelij 204
WINT02          EX AF,AF'
205
                CALL PRTSYMTXTMODE
206
                INC E
207
                EX AF,AF'
208
                DEC A
209
                JR NZ,WINT02
210
                POP DE
211
                DEC E
212
TWERH_COLOR     EXX
1186 savelij 213
                BIT B_UPHEADER,D
585 savelij 214
                EXX
215
                JR Z,TWERH_RAMK
1186 savelij 216
; рисуем верхнюю цветную полосу
585 savelij 217
                PUSH DE
218
                CALL COLOR_LINE
219
                POP DE
623 savelij 220
                JR TRASCH
585 savelij 221
 
222
TWERH_RAMK      EXX
1186 savelij 223
                BIT B_WINFRAME,D
585 savelij 224
                EXX
623 savelij 225
                JR NZ,TRASCH
585 savelij 226
;               LD B,"┌"
1186 savelij 227
                LD B,0+0xF2                     ; левый верхний угол
585 savelij 228
                CALL PRTSYMTXTMODE
229
;               LD B,"─"
1186 savelij 230
                LD B,1+0xF2                     ; верхний край
585 savelij 231
                EXX
232
                LD A,L
233
                EXX
234
                DEC A
235
                DEC A
236
                PUSH DE
237
                INC D
238
WINT3           EX AF,AF'
239
                CALL PRTSYMTXTMODE
240
                INC D
241
                EX AF,AF'
242
                DEC A
243
                JR NZ,WINT3
244
;               LD B,"┐"
1186 savelij 245
                LD B,2+0xF2                     ; правый верхний угол
585 savelij 246
                CALL PRTSYMTXTMODE
247
                POP DE
248
TRASCH          INC D
249
                LD (TADRSTR_Y),DE
250
                LD A,D
251
                LD (TXNEW),A
1186 savelij 252
                LD A,(SYSFLAGS)
253
                AND SYSFLAGS.M_RUN_FAT_DSK
585 savelij 254
                JR NZ,TNOSET_MAIN
1186 savelij 255
        ROMCALL MAIN_MEM13,ROM_RST83
256
TNOSET_MAIN     LD BC,WIN_P2
585 savelij 257
                LD A,(PAGE4READ)
258
                OUT (C),A
1186 savelij 259
                LD L,(IX+_ADR_TXT_L)
260
                LD H,(IX+_ADR_TXT_H)
261
        EVOPORT WIN_P2,RAM_NMI
585 savelij 262
                EXX
1186 savelij 263
                BIT B_TEXT,D
585 savelij 264
                EXX
265
                RET NZ
266
ITPRINT_MESSAGE EXX
267
                LD HL,0
268
                LD (TEK_TEXT),HL
1186 savelij 269
        EVOPORT WIN_P2,RAM_NMI
585 savelij 270
                LD A,(PAGE4READ)
271
                LD H,A
272
                OUT (C),H
273
                LD L,0
274
                EXX
275
TNEXT           EXX
276
                OUT (C),H
277
                EXX
278
                LD A,(HL)
279
                INC HL
280
                AND A
281
                JP Z,STOP_TPRINTMSG
1186 savelij 282
TPRINT          CP 0x20
585 savelij 283
                JP NC,TPRINTA
284
                CP 3
285
                JR Z,TNEXT
286
                CP 9
287
                JR NZ,TCOD0D
288
                LD B,(HL)
289
                INC HL
290
                EXX
291
                OUT (C),L
292
                EXX
293
                LD A,(TADRSTR_X)
294
                ADD A,B
295
                LD (TADRSTR_X),A
296
                JP TNEXT
297
 
1186 savelij 298
TCOD0D          CP 0x0D
585 savelij 299
                JR NZ,TCOD16
300
                EXX
301
                OUT (C),L
302
                EXX
303
                LD A,(TXNEW)
304
                LD (TADRSTR_X),A
305
                LD D,A
306
                LD A,(TADRSTR_Y)
307
                INC A
308
                LD (TADRSTR_Y),A
309
                LD E,A
310
                JP TNEXT
311
 
1186 savelij 312
TCOD16          CP 0x16
585 savelij 313
                JR NZ,TCOD17
314
                LD E,(HL)
315
                INC HL
316
                LD D,(HL)
317
                INC HL
318
                EXX
319
                OUT (C),L
320
                EXX
321
                LD (TADRSTR_Y),DE
322
                JP TNEXT
323
 
1186 savelij 324
TCOD17          CP 0x17
585 savelij 325
                JR NZ,TCOD1
326
                LD C,(HL)
327
                INC HL
328
                LD A,C
329
                EXX
330
                OUT (C),L
331
                EXX
332
                LD (COLOR4SYM),A
333
                JP TNEXT
334
 
335
TCOD1           CP 1
336
                JR NZ,TCOD2
1186 savelij 337
                LD D,(IX+_X_COORD)
338
                LD E,(IX+_Y_COORD)
585 savelij 339
                INC D
340
                EXX
341
                OUT (C),L
342
                EXX
343
                LD (TADRSTR_Y),DE
344
                JP TNEXT
345
 
346
TCOD2           CP 2
347
                JP NZ,TNEXT
348
                LD DE,(TEK_TEXT)
349
                LD A,D
350
                OR E
351
                JR NZ,TCOD2_1
352
                LD E,(HL)
353
                INC HL
354
                LD D,(HL)
355
                INC HL
356
                LD (TEK_TEXT),HL
357
                EX DE,HL
358
                JP TNEXT
359
 
360
TCOD2_1         LD HL,(TEK_TEXT)
361
                LD DE,0
362
                LD (TEK_TEXT),DE
363
                JP TNEXT
364
 
365
TPRINT_A        LD A,(RREG_A)
366
ITPRINT_A       EX AF,AF'
605 savelij 367
ITPRINT_A1      EXX
1186 savelij 368
                LD BC,WIN_P2
585 savelij 369
                LD A,(PAGE4READ)
370
                LD H,A
371
                LD L,0
372
                EX AF,AF'
373
                EXX
374
                LD HL,STOP_PRINTA
375
TPRINTA         EX AF,AF'
376
                EXX
377
                OUT (C),L
378
                EXX
379
                PUSH HL
380
                LD HL,TADRSTR_Y
381
                LD E,(HL)
382
                INC HL
383
                LD D,(HL)
384
                INC (HL)
385
                LD A,(COLOR4SYM)
386
                LD C,A
387
                EXX
1186 savelij 388
                LD A,VMODE7_0
585 savelij 389
                OUT (C),A
390
                EXX
391
                LD H,E
392
                LD L,0
393
                LD E,D
394
                LD A,D
395
                LD D,L
396
                SRL H
397
                RR L
398
                SRL H
399
                RR L
400
                SRL E
401
                ADD HL,DE
402
                AND 1
403
                RRCA
1186 savelij 404
                RRCA
405
                RRCA
406
                RRCA
407
                ADD A,HIGH (CPU2+LSYM)
585 savelij 408
                LD D,A
1186 savelij 409
                LD E,LOW (CPU2+LSYM)
585 savelij 410
                ADD HL,DE
411
                EX AF,AF'
412
                LD (HL),A
413
                LD A,C
414
                INC A
415
                JP Z,TRINTA0
416
                LD A,H
1186 savelij 417
                XOR 0x30
585 savelij 418
                LD H,A
419
                LD A,D
1186 savelij 420
                AND 0x10
585 savelij 421
                RRCA
1186 savelij 422
                RRCA
423
                RRCA
424
                RRCA
585 savelij 425
                ADD A,L
426
                LD L,A
427
                LD (HL),C
428
TRINTA0         EXX
429
                OUT (C),L
430
                EXX
431
                POP HL
432
                JP TNEXT
433
 
434
STOP_TPRINTMSG  EXX
435
                OUT (C),L
436
                EXX
437
                RET
438
 
1186 savelij 439
; D-X E-Y B-символ C-цвет
585 savelij 440
COLOR_LINE      LD A,C
441
                PUSH AF
442
                AND 7
443
                RLCA
444
                RLCA
445
                RLCA
446
                LD H,A
447
                LD A,C
448
                RRCA
449
                RRCA
450
                RRCA
451
                AND 7
452
                OR H
453
                LD H,A
454
                LD A,C
1186 savelij 455
                AND 0xC0
585 savelij 456
                OR H
457
                LD C,A
458
                LD B," "
459
                EXX
460
                LD A,L
461
                EXX
462
WINT03          EX AF,AF'
463
                CALL PRTSYMTXTMODE
464
                INC D
465
                EX AF,AF'
466
                DEC A
467
                JR NZ,WINT03
468
                POP AF
469
                LD C,A
470
                RET
471
 
1186 savelij 472
; D-X E-Y -> DE=ATTR ADR HL=DISP ADR
585 savelij 473
TDISP_ATTR      LD H,E
474
                LD L,0
475
                LD E,D
476
                LD A,D
477
                LD D,L
478
                SRL H
479
                RR L
480
                SRL H
481
                RR L
482
                SRL E
483
                ADD HL,DE
484
                AND 1
485
                RRCA
1186 savelij 486
                RRCA
487
                RRCA
488
                RRCA
585 savelij 489
                ADD A,HIGH (CPU3+LSYM)
490
                LD D,A
491
                LD E,LOW (CPU3+LSYM)
1186 savelij 492
                ADD HL,DE                       ; HL=Адрес символа на текстмодном экране
585 savelij 493
                LD E,H
494
                LD A,H
1186 savelij 495
                XOR 0x30
585 savelij 496
                LD D,A
497
                LD A,E
1186 savelij 498
                AND 0x10
585 savelij 499
                RRCA
1186 savelij 500
                RRCA
501
                RRCA
502
                RRCA
585 savelij 503
                ADD A,L
504
                LD E,A
505
                RET
506
 
1186 savelij 507
; печать символа на текстмодном экране
508
; D-X E-Y B-символ C-цвет
585 savelij 509
PRTSYMTXTMODE   PUSH DE
510
                PUSH HL
511
                CALL TDISP_ATTR
512
                LD (HL),B
513
                LD A,C
514
                INC A
1186 savelij 515
                JR Z,.L1
585 savelij 516
                EX DE,HL
517
                LD (HL),C
1186 savelij 518
.L1             POP HL
585 savelij 519
                POP DE
520
                RET
521
 
522
WINW_ZX         EXX
1186 savelij 523
        READ_7FFD
585 savelij 524
                AND 8
525
                RRCA
526
                RRCA
527
                RRCA
528
                RRCA
529
                LD D,A
1186 savelij 530
                LD BC,WIN_P2
585 savelij 531
                LD A,(PAGE4READ)
532
                OUT (C),A
1186 savelij 533
                LD A,(IX+_V_SIZE)
507 savelij 534
                ADD A,A
535
                ADD A,A
536
                ADD A,A
537
                LD E,A
538
                EXX
1186 savelij 539
                LD C,(IX+_H_SIZE)
540
                LD L,(IX+_Y_COORD)
507 savelij 541
                LD H,0
542
                ADD HL,HL
543
                ADD HL,HL
544
                ADD HL,HL
545
                ADD HL,HL
546
                EX DE,HL
547
                LD IY,BUFTSC
548
                ADD IY,DE
1186 savelij 549
WINW3           LD A,(IX+_X_COORD)
507 savelij 550
                ADD A,(IY+0)
551
                LD E,A
585 savelij 552
                LD A,(IY+1)
553
                EXX
554
                ADD A,D
555
                EXX
556
                LD D,A
507 savelij 557
                AND 7
558
                JR NZ,WINW4
559
                LD B,C
560
                LD A,D
561
                RRCA
562
                RRCA
563
                RRCA
564
                AND 3
1186 savelij 565
                ADD A,0x58
585 savelij 566
                EXX
567
                ADD A,D
568
                EXX
507 savelij 569
                LD H,A
570
                LD L,E
1186 savelij 571
                LD A,(IX+_COLOR_WIN)
507 savelij 572
WINW5           LD (HL),A
573
                INC L
574
                DJNZ WINW5
575
WINW4           LD B,C
576
                XOR A
577
WINW6           LD (DE),A
578
                INC E
579
                DJNZ WINW6
580
                INC IY
581
                INC IY
582
                EXX
583
                DEC E
584
                EXX
585
                JR NZ,WINW3
1186 savelij 586
                BIT B_ADR_PUNKT,(IX+_FLAGS)
587
                JR Z,NIZ_RAMKA          ; окно без нижнего заголовка
588
; рисуем нижнюю цветную полоску
589
                LD DE,0xFFF0
507 savelij 590
                ADD IY,DE
1186 savelij 591
                LD A,(IX+_X_COORD)
507 savelij 592
                ADD A,(IY+0)
593
                LD E,A
594
                LD A,(IY+1)
595
                RRCA
596
                RRCA
597
                RRCA
598
                AND 3
1186 savelij 599
                ADD A,0x58
585 savelij 600
                EXX
601
                ADD A,D
602
                EXX
507 savelij 603
                LD D,A
604
                LD B,C
1186 savelij 605
                LD L,(IX+_COLOR_WIN)
507 savelij 606
                LD A,L
607
                AND 7
608
                RLCA
609
                RLCA
610
                RLCA
611
                LD H,A
612
                LD A,L
613
                RRCA
614
                RRCA
615
                RRCA
616
                AND 7
617
                OR H
618
WINWN1          LD (DE),A
619
                INC E
620
                DJNZ WINWN1
1186 savelij 621
                LD DE,0x0E
507 savelij 622
                ADD IY,DE
623
                JR CENTR_RAMK
624
 
1186 savelij 625
NIZ_RAMKA       BIT B_ADR_NUMS_PUNKT,(IX+_FLAGS)
626
                JR NZ,CENTR_RAMK                ; окно без рамки
627
; рисуем нижнюю рамку
507 savelij 628
                DEC IY
605 savelij 629
                DEC IY
1186 savelij 630
                LD L,(IX+_X_COORD)
507 savelij 631
                LD A,(IY+0)
632
                ADD A,L
633
                LD E,A
634
                LD H,A
585 savelij 635
                LD A,(IY+1)
636
                EXX
637
                ADD A,D
638
                EXX
639
                LD D,A
507 savelij 640
                LD B,C
1186 savelij 641
                LD A,0xFF
507 savelij 642
NR1             LD (DE),A
643
                INC E
644
                DJNZ NR1
645
                DEC E
646
                DEC D
647
                LD L,H
648
                LD H,D
1186 savelij 649
                LD A,0x80
507 savelij 650
                LD B,7
651
NR2             LD (HL),A
652
                RLCA
653
                LD (DE),A
654
                RRCA
655
                DEC H
656
                DEC D
657
                DJNZ NR2
1186 savelij 658
CENTR_RAMK      BIT B_ADR_NUMS_PUNKT,(IX+_FLAGS)
659
                JR NZ,WERH_COLOR                ; окно без рамки
660
; рисуем боковые рамки
507 savelij 661
                EXX
1186 savelij 662
                LD A,(IX+_V_SIZE)
507 savelij 663
                SUB 2
664
                LD E,A
665
                EXX
1186 savelij 666
NR4             LD DE,0xFFF0
507 savelij 667
                ADD IY,DE
1186 savelij 668
                LD L,(IX+_X_COORD)
507 savelij 669
                LD A,(IY+0)
670
                ADD A,L
671
                LD E,A
585 savelij 672
                LD A,(IY+1)
673
                EXX
674
                ADD A,D
675
                EXX
676
                LD D,A
677
                LD A,E
507 savelij 678
                LD H,D
1186 savelij 679
                ADD A,(IX+_H_SIZE)
507 savelij 680
                DEC A
681
                LD L,A
1186 savelij 682
                LD A,0x80
507 savelij 683
                LD B,8
684
NR3             LD (DE),A
685
                RLCA
686
                LD (HL),A
687
                RRCA
688
                DEC H
689
                DEC D
690
                DJNZ NR3
691
                EXX
692
                DEC E
693
                EXX
694
                JR NZ,NR4
1186 savelij 695
WERH_COLOR      BIT B_UPHEADER,(IX+_FLAGS)
696
                JR Z,WERH_RAMK          ; без верхнего заголовка
697
; рисуем верхнюю цветную полосу
698
                LD L,(IX+_Y_COORD)
507 savelij 699
                LD H,0
700
                ADD HL,HL
701
                ADD HL,HL
702
                ADD HL,HL
703
                ADD HL,HL
704
                EX DE,HL
705
                LD IY,BUFTSC
706
                ADD IY,DE
1186 savelij 707
                LD A,(IX+_X_COORD)
507 savelij 708
                ADD A,(IY+0)
709
                LD E,A
710
                LD A,(IY+1)
711
                RRCA
712
                RRCA
713
                RRCA
714
                AND 3
1186 savelij 715
                ADD A,0x58
585 savelij 716
                EXX
717
                ADD A,D
718
                EXX
507 savelij 719
                LD D,A
720
                LD B,C
1186 savelij 721
                LD L,(IX+_COLOR_WIN)
507 savelij 722
                LD A,L
723
                AND 7
724
                RLCA
725
                RLCA
726
                RLCA
727
                LD H,A
728
                LD A,L
729
                RRCA
730
                RRCA
731
                RRCA
732
                AND 7
733
                OR H
734
WINWW1          LD (DE),A
735
                INC E
736
                DJNZ WINWW1
737
                JP RADUGA
738
 
1186 savelij 739
WERH_RAMK       BIT B_ADR_NUMS_PUNKT,(IX+_FLAGS)
740
                JR NZ,RADUGA            ; окно без рамки
741
; рисуем верхнюю рамку
742
WR4             LD DE,0xFFF0
507 savelij 743
                ADD IY,DE
1186 savelij 744
                LD L,(IX+_X_COORD)
507 savelij 745
                LD A,(IY+0)
746
                ADD A,L
747
                LD E,A
585 savelij 748
                LD A,(IY+1)
749
                EXX
750
                ADD A,D
751
                EXX
752
                LD D,A
753
                LD A,E
507 savelij 754
                LD H,D
1186 savelij 755
                ADD A,(IX+_H_SIZE)
507 savelij 756
                DEC A
757
                LD L,A
1186 savelij 758
                LD A,0x80
507 savelij 759
                LD B,7
760
WR3             LD (DE),A
761
                RLCA
762
                LD (HL),A
763
                RRCA
764
                DEC H
765
                DEC D
766
                DJNZ WR3
767
                LD A,L
768
                SUB E
769
                LD B,A
770
                INC B
1186 savelij 771
                LD A,0xFF
507 savelij 772
WR5             LD (DE),A
773
                INC E
774
                DJNZ WR5
1186 savelij 775
RADUGA          BIT B_UPHEADER,(IX+_FLAGS)
507 savelij 776
                JR Z,RASCH
777
                LD IY,BUFTSC
1186 savelij 778
                LD L,(IX+_Y_COORD)
507 savelij 779
                LD H,0
780
                ADD HL,HL
781
                ADD HL,HL
782
                ADD HL,HL
783
                ADD HL,HL
784
                EX DE,HL
785
                ADD IY,DE
786
                LD L,(IY+0)
787
                LD A,(IY+1)
788
                LD D,A
789
                RRCA
790
                RRCA
791
                RRCA
792
                AND 3
1186 savelij 793
                ADD A,0x58
585 savelij 794
                EXX
795
                ADD A,D
796
                EXX
507 savelij 797
                LD H,A
1186 savelij 798
                LD A,(IX+_X_COORD)
799
                ADD A,(IX+_H_SIZE)
507 savelij 800
                ADD A,L
801
                LD L,A
802
                LD E,A
1186 savelij 803
                LD A,(IX+_COLOR_WIN)
804
                AND 0x47
507 savelij 805
                LD C,A
1186 savelij 806
                AND 0x40
507 savelij 807
                LD B,A
808
                DEC L
809
                LD A,C
810
                ADD A,5*8
1186 savelij 811
                LD (HL),A       ; 5*8+7
507 savelij 812
                DEC L
813
                LD A,4*8+5
814
                OR B
1186 savelij 815
                LD (HL),A       ; 4*8+5
507 savelij 816
                DEC L
817
                LD A,6*8+4
818
                OR B
1186 savelij 819
                LD (HL),A       ; 6*8+4
507 savelij 820
                DEC L
821
                LD A,2*8+6
822
                OR B
1186 savelij 823
                LD (HL),A       ; 2*8+6
507 savelij 824
                DEC L
825
                LD A,C
826
                AND 7
827
                RLCA
828
                RLCA
829
                RLCA
830
                OR B
831
                ADD A,2
1186 savelij 832
                LD (HL),A       ; 7*8+2
507 savelij 833
                EX DE,HL
834
                DEC L
835
                LD B,8
836
                XOR A
837
                LD C,L
838
RADUGA1         SCF
839
                RLA
840
                LD (HL),A
841
                DEC L
842
                LD (HL),A
843
                DEC L
844
                LD (HL),A
845
                DEC L
846
                LD (HL),A
847
                DEC L
848
                LD (HL),A
849
                LD L,C
850
                INC H
851
                DJNZ RADUGA1
1186 savelij 852
RASCH           LD A,(IX+_X_COORD)
853
                LD L,(IX+_Y_COORD)
585 savelij 854
                ADD A,A
855
                ADD A,A
856
                ADD A,A
857
                LD H,A
507 savelij 858
                INC H
859
                EXX
1186 savelij 860
        EVOPORT WIN_P2,RAM_NMI
507 savelij 861
                EXX
862
                LD A,H
863
                LD (XNEW),A
864
                LD (ADRSTR_Y),HL
865
                EXX
866
                LD A,(PAGE4READ)
867
                OUT (C),A
868
                EXX
1186 savelij 869
                LD L,(IX+_ADR_TXT_L)
870
                LD H,(IX+_ADR_TXT_H)
507 savelij 871
                EXX
1186 savelij 872
        EVOPORT WIN_P2,RAM_NMI
507 savelij 873
                EXX
1186 savelij 874
                BIT B_TEXT,(IX+_FLAGS)
585 savelij 875
                JP Z,IPRINT_MESSAGE
507 savelij 876
                RET
877
 
878
CLS             LD HL,0
879
                LD D,H
880
                LD E,L
881
                ADD HL,SP
1186 savelij 882
                LD B,0x60
883
                LD SP,0x5800
884
CLS1
885
        REPT 0x20
507 savelij 886
                PUSH DE
1186 savelij 887
        ENDM
507 savelij 888
                DJNZ CLS1
889
                LD SP,HL
890
CLSSCR          LD HL,0
891
                LD D,A
892
                LD E,A
893
                ADD HL,SP
1186 savelij 894
                LD SP,0x5B00
507 savelij 895
                LD B,12
1186 savelij 896
CLS2
897
        REPT 0x20
507 savelij 898
                PUSH DE
1186 savelij 899
        ENDM
507 savelij 900
                DJNZ CLS2
901
                LD SP,HL
902
                RRCA
903
                RRCA
904
                RRCA
905
                AND 7
1186 savelij 906
                OUT (0xFE),A
507 savelij 907
                RET
908
 
1186 savelij 909
STOP_PRINTMSG
910
        EVOPORT WIN_P2,RAM_NMI
507 savelij 911
                RET
912
 
1186 savelij 913
; печать текстовой строки с управляющими кодами (внешний вызов)
553 savelij 914
PRINT_MESSAGE   LD HL,(RREG_L)
1186 savelij 915
; печать текстовой строки с управляющими кодами (внутренний вызов)
605 savelij 916
IPRINT_MESSAGE  LD A,(R_77)
917
                AND 7
918
                CP 7
919
                JP Z,ITPRINT_MESSAGE
920
                CP 3
921
                RET NZ
1186 savelij 922
        READ_7FFD
585 savelij 923
                AND 8
924
                LD BC,BUFTSC
925
                JR Z,IPM1
926
                LD BC,BUFTSC1
927
IPM1            LD (TEKBUFTSC),BC
1186 savelij 928
                LD BC,WIN_P2
929
; печать текстовой стороки с управляющими кодами (внутренний вызов)
585 savelij 930
NEXT            LD A,(PAGE4READ)
507 savelij 931
                OUT (C),A
932
                LD A,(HL)
933
                INC HL
934
                AND A
585 savelij 935
                JR Z,STOP_PRINTMSG
1186 savelij 936
PRINT           CP 0x20
585 savelij 937
                JP NC,PRINTA
507 savelij 938
COD03           CP 3
939
                JR NZ,COD9
1186 savelij 940
                LD D,0                          ; центровка строки в окне
585 savelij 941
                LD A,H
942
                EX AF,AF'
507 savelij 943
                LD E,L
944
CEN2            LD A,(HL)
1186 savelij 945
                CP 0x20
507 savelij 946
                JR C,CEN3
947
                LD A,6
585 savelij 948
                ADD A,D
949
                LD D,A
507 savelij 950
                INC HL
951
                JR CEN2
952
 
1186 savelij 953
CEN3
954
        EVOPORT WIN_P2,RAM_NMI
955
                LD A,(IX+_H_SIZE)
507 savelij 956
                ADD A,A
957
                ADD A,A
958
                ADD A,A
585 savelij 959
                SUB D
507 savelij 960
                SRL A
961
                DEC A
962
                LD H,A
963
                LD A,(XNEW)
964
                ADD A,H
965
                LD (ADRSTR_X),A
585 savelij 966
                EX AF,AF'
967
                LD H,A
507 savelij 968
                LD L,E
969
                JP NEXT
970
 
971
COD9            CP 9
585 savelij 972
                JR NZ,COD0D
1186 savelij 973
                LD D,(HL)                       ; табуляция на N позиций
507 savelij 974
                INC HL
975
                LD A,D
976
                ADD A,A
977
                ADD A,D
978
                ADD A,A
979
                LD D,A
1186 savelij 980
        EVOPORT WIN_P2,RAM_NMI
507 savelij 981
                LD A,(ADRSTR_X)
982
                ADD A,D
983
                LD (ADRSTR_X),A
984
                JR NEXT
985
 
1186 savelij 986
COD0D           CP 0x0D
585 savelij 987
                JR NZ,COD16
1186 savelij 988
        EVOPORT WIN_P2,RAM_NMI
989
                LD A,(XNEW)                     ; перевод строки
507 savelij 990
                LD (ADRSTR_X),A
991
                LD A,(ADRSTR_Y)
623 savelij 992
                INC A
507 savelij 993
                LD (ADRSTR_Y),A
994
                JP NEXT
995
 
1186 savelij 996
COD16           CP 0x16
507 savelij 997
                JR NZ,COD17
1186 savelij 998
                LD E,(HL)                       ; печать в указанной позиции
507 savelij 999
                INC HL
1000
                LD D,(HL)
1001
                INC HL
1186 savelij 1002
        EVOPORT WIN_P2,RAM_NMI
507 savelij 1003
                LD (ADRSTR_Y),DE
1004
                JP NEXT
1005
 
1186 savelij 1006
COD17           CP 0x17
585 savelij 1007
                JR NZ,COD1
507 savelij 1008
                LD D,(HL)
1009
                INC HL
1186 savelij 1010
        EVOPORT WIN_P2,RAM_NMI
507 savelij 1011
                LD A,D
1012
                LD (COLOR4SYM),A
1013
                JP NEXT
1014
 
1186 savelij 1015
; координата печати в исходную позицию окна
507 savelij 1016
COD1            CP 1
585 savelij 1017
                JP NZ,NEXT
1186 savelij 1018
        EVOPORT WIN_P2,RAM_NMI
1019
                LD A,(IX+_X_COORD)
1020
                LD E,(IX+_Y_COORD)
585 savelij 1021
                ADD A,A
1022
                ADD A,A
1023
                ADD A,A
1024
                INC A
1025
                LD D,A
1026
                LD (ADRSTR_Y),DE
507 savelij 1027
                JP NEXT
1028
 
553 savelij 1029
PRINT_A         LD A,(RREG_A)
585 savelij 1030
IPRINT_A        EX AF,AF'
1031
                LD A,(R_77)
1032
                AND 7
1033
                CP 7
605 savelij 1034
                JP Z,ITPRINT_A1
585 savelij 1035
                CP 3
1036
                RET NZ
1037
                EX AF,AF'
1186 savelij 1038
                LD BC,WIN_P2
585 savelij 1039
                LD HL,STOP_PRINTA
1186 savelij 1040
; печать символа в "A"
585 savelij 1041
PRINTA          EX AF,AF'
1186 savelij 1042
        EVOPORT WIN_P2,RAM_NMI
507 savelij 1043
                PUSH HL
1044
                LD H,A
585 savelij 1045
                EX AF,AF'
1046
                LD L,A
507 savelij 1047
                ADD HL,HL
1048
                ADD HL,HL
1049
                ADD HL,HL
1050
                LD DE,CHARS
1051
                ADD HL,DE
585 savelij 1052
                LD A,(COLOR4SYM)
1053
                LD D,A
507 savelij 1054
                EXX
1186 savelij 1055
                LD HL,(ADRSTR_Y)                ; H=X L=Y
585 savelij 1056
                LD B,0
1057
                LD D,B
507 savelij 1058
                LD A,H
1059
                AND 7
1060
                LD C,A
1061
                LD IY,SDVIG
1062
                ADD IY,BC
1063
                LD A,H
1186 savelij 1064
                AND 0xF8
585 savelij 1065
                RRCA
1066
                RRCA
1067
                RRCA
1068
                EX AF,AF'
507 savelij 1069
                LD A,6
1070
                ADD A,H
1071
                LD H,A
1072
                LD (ADRSTR_Y),HL
585 savelij 1073
                LD A,L
1074
                RLCA
1075
                RLCA
1076
                RLCA
1077
                LD E,A
623 savelij 1078
                LD HL,(TEKBUFTSC)
507 savelij 1079
                ADD HL,DE
1080
                ADD HL,DE
585 savelij 1081
                EX AF,AF'
507 savelij 1082
                ADD A,(HL)
1083
                INC HL
1084
                LD E,A
1085
                LD D,(HL)
1086
                LD HL,BUFMSK
1087
                ADD HL,BC
1088
                ADD HL,BC
1089
                LD B,(HL)
1090
                INC HL
1091
                LD C,(HL)
585 savelij 1092
                EXX
1093
                LD A,(PAGE4READ)
1094
                OUT (C),A
1095
                EXX
507 savelij 1096
                LD A,8
1097
SLEDU           EX AF,AF'
1098
                EXX
585 savelij 1099
                LD A,(HL)
507 savelij 1100
                INC HL
1101
                EXX
1102
                LD L,A
1103
                LD H,0
1104
                JP (IY)
1105
 
1186 savelij 1106
SDVIG
1107
        REPT 8
507 savelij 1108
                ADD HL,HL
1186 savelij 1109
        ENDM
507 savelij 1110
                LD A,(DE)
1111
                AND B
1112
                OR H
1113
                LD (DE),A
1114
                INC E
1115
                LD A,(DE)
1116
                AND C
1117
                OR L
1118
                LD (DE),A
1119
                DEC E
1120
                INC D
1121
                EX AF,AF'
1122
                DEC A
1123
                JP NZ,SLEDU
1124
                EX DE,HL
585 savelij 1125
                EXX
1126
                LD A,D
1127
                EXX
507 savelij 1128
                LD E,A
1129
                INC A
1130
                JR Z,PRINTA1
1131
                DEC H
1132
                LD A,H
1133
                RRCA
1134
                RRCA
1135
                RRCA
1136
                AND 3
1186 savelij 1137
                OR 0x58
507 savelij 1138
                LD H,A
1139
                LD (HL),E
1140
PRINTA1         EXX
1186 savelij 1141
        EVOPORT WIN_P2,RAM_NMI
507 savelij 1142
                POP HL
585 savelij 1143
                JP NEXT
507 savelij 1144
 
585 savelij 1145
STOP_PRINTA     DB 0
1146
 
507 savelij 1147
BUFMSK          DB %00000011,%11111111
1148
                DB %10000001,%11111111
1149
                DB %11000000,%11111111
1150
                DB %11100000,%01111111
1151
                DB %11110000,%00111111
1152
                DB %11111000,%00011111
1153
                DB %11111100,%00001111
1154
                DB %11111110,%00000111
1155
 
1186 savelij 1156
; рисовалка цветной полоски в меню
1157
COLOR_CURSOR    LD HL,SYSFLAGS
1158
                BIT SYSFLAGS.B_VIDEO_MODE,(HL)
585 savelij 1159
                JP Z,COLORCURS4
1186 savelij 1160
        EVOPORT WIN_P3,VMODE7_0
1161
                LD B,(IX+_H_SIZE)
585 savelij 1162
                LD DE,(COL_CURSOR)
1163
                CALL TRESTORE_CLINE
1186 savelij 1164
COLORCURS6      LD A,(IX+_NUM_PKT)
1165
                BIT B_ADR_PUNKT,A
585 savelij 1166
                JR Z,COLORCURS5
1186 savelij 1167
                LD L,(IX+_TEK_PKT_L)
1168
                LD H,(IX+_TEK_PKT_H)
585 savelij 1169
                LD A,(HL)
1186 savelij 1170
COLORCURS5      LD D,(IX+_X_COORD)
1171
                ADD A,(IX+_Y_COORD)
585 savelij 1172
                LD E,A
1173
                INC E
1174
                LD (COL_CURSOR),DE
1186 savelij 1175
        EVOPORT WIN_P3,VMODE7_0
1176
                LD B,(IX+_H_SIZE)
585 savelij 1177
                CALL TSTORE_CLINE
1186 savelij 1178
                LD A,(IX+_COLOR_CUR)
1179
                AND 0xF8
585 savelij 1180
                LD C,A
1181
                PUSH HL
1182
                PUSH DE
1183
                PUSH BC
1184
                LD (COL_CURSOR),DE
1185
                CALL TDISP_ATTR
1186
                LD A,D
1186 savelij 1187
                XOR 0x10
585 savelij 1188
                LD H,A
1189
                LD A,D
1186 savelij 1190
                AND 0x10
585 savelij 1191
                RRCA
1186 savelij 1192
                RRCA
1193
                RRCA
1194
                RRCA
585 savelij 1195
                ADD A,E
1196
                LD L,A
1197
TCOLORLINE2     EX DE,HL
1198
                LD A,(HL)
1186 savelij 1199
                AND 0xC7
585 savelij 1200
                OR C
1201
                LD (HL),A
1202
                INC HL
1203
                DJNZ TCOLORLINE2
1204
                POP BC
1205
                POP DE
1206
                POP HL
1207
                RET
1208
 
1186 savelij 1209
; рисование цветной полосы
1210
; D-X E-Y B-длина C-цвет
585 savelij 1211
TCOLOR_LINE     PUSH HL
1212
                PUSH DE
1213
                PUSH BC
1214
                LD (COL_CURSOR),DE
1215
                CALL TDISP_ATTR
1216
                LD A,D
1186 savelij 1217
                XOR 0x10
585 savelij 1218
                LD H,A
1219
                LD A,D
1186 savelij 1220
                AND 0x10
1221
        REPT 4
585 savelij 1222
                RRCA
1186 savelij 1223
        ENDM
585 savelij 1224
                ADD A,E
1225
                LD L,A
1226
TCOLORLINE1     EX DE,HL
1227
                LD (HL),C
1228
                INC HL
1229
                DJNZ TCOLORLINE1
1230
                POP BC
1231
                POP DE
1232
                POP HL
1233
                RET
1186 savelij 1234
;  00   01   02   03   04   05   06
1235
; F1C0 E1C1 F1C1 E1C2 F1C2 E1C3 F1C3
585 savelij 1236
 
1186 savelij 1237
; сохранение части экрана для вывода цветной линии
1238
; D-X E-Y B-длина
585 savelij 1239
TSTORE_CLINE    PUSH HL
1240
                PUSH DE
1241
                PUSH BC
1242
                CALL TDISP_ATTR
1243
                LD A,D
1186 savelij 1244
                XOR 0x10
585 savelij 1245
                LD H,A
1246
                LD A,D
1186 savelij 1247
                AND 0x10
1248
        REPT 4
585 savelij 1249
                RRCA
1186 savelij 1250
        ENDM
585 savelij 1251
                ADD A,E
1252
                LD L,A
1253
TSTORECLINE1    EXX
507 savelij 1254
                LD HL,COLBUF
585 savelij 1255
                EXX
1256
TSTORECLINE2    EX DE,HL
1257
                LD A,(HL)
1258
                INC HL
1259
                EXX
1260
                LD (HL),A
1261
                INC HL
1262
                EXX
1263
                DJNZ TSTORECLINE2
1264
                POP BC
1265
                POP DE
1266
                POP HL
1267
                RET
1268
 
1186 savelij 1269
; восстановление части экрана под цветной линией
1270
; D-X E-Y B-длина
585 savelij 1271
TRESTORE_CLINE  PUSH HL
1272
                PUSH DE
1273
                PUSH BC
1186 savelij 1274
                LD B,(IX+_H_SIZE)
585 savelij 1275
                LD DE,(COL_CURSOR)
1276
                CALL TDISP_ATTR
1277
                LD A,D
1186 savelij 1278
                XOR 0x10
585 savelij 1279
                LD H,A
1280
                LD A,D
1186 savelij 1281
                AND 0x10
1282
        REPT 4
585 savelij 1283
                RRCA
1186 savelij 1284
        ENDM
585 savelij 1285
                ADD A,E
1286
                LD L,A
1287
TRESTCLINE1     EXX
1288
                LD HL,COLBUF
1289
                EXX
1290
TRESTCLINE2     EX DE,HL
1291
                EXX
1292
                LD A,(HL)
1293
                INC HL
1294
                EXX
1295
                LD (HL),A
1296
                INC HL
1297
                DJNZ TRESTCLINE2
1298
                POP BC
1299
                POP DE
1300
                POP HL
1301
                RET
1302
 
1186 savelij 1303
RESTORE_CLINE   LD HL,SYSFLAGS
1304
                BIT SYSFLAGS.B_VIDEO_MODE,(HL)
585 savelij 1305
                JR NZ,TREST_CLINE
1306
                LD DE,(COL_CURSOR)
1307
                LD HL,COLBUF
1186 savelij 1308
                LD C,(IX+_H_SIZE)
585 savelij 1309
                LD B,0
1310
                LDIR
1311
                RET
1312
 
1186 savelij 1313
TREST_CLINE
1314
        EVOPORT WIN_P3,VMODE7_0
1315
                LD B,(IX+_H_SIZE)
585 savelij 1316
                LD DE,(COL_CURSOR)
1317
                JP TRESTORE_CLINE
1318
 
1319
COLORCURS4      LD DE,(COL_CURSOR)
1320
                LD HL,COLBUF
1186 savelij 1321
                LD C,(IX+_H_SIZE)
1322
;               BIT 2,(IY+55)           ; файлов больше высоты окна?
507 savelij 1323
;               JR Z,COLCURS1
1186 savelij 1324
;               DEC C                   ; цветная полоска на 1 короче
507 savelij 1325
COLCURS1        LD B,0
1326
                LDIR
1186 savelij 1327
SET_ADR_ATR
1328
        EVOPORT WIN_P3,VMODE7_0
1329
                LD HL,SYSFLAGS
1330
                BIT SYSFLAGS.B_VIDEO_MODE,(HL)
585 savelij 1331
                JP NZ,COLORCURS6
1186 savelij 1332
                BIT B_ADR_PUNKT,(IX+_NUM_PKT)
507 savelij 1333
                JR Z,COLCURS3
1186 savelij 1334
                LD L,(IX+_TEK_PKT_L)
1335
                LD H,(IX+_TEK_PKT_H)
507 savelij 1336
                LD A,(HL)
1186 savelij 1337
COLCURS3        LD H,(IX+_X_COORD)
1338
                LD L,(IX+_Y_COORD)
507 savelij 1339
                ADD A,L
1340
                LD L,A
1341
                INC L
1342
                CALL ADRDIS
1343
                EX DE,HL
1186 savelij 1344
                LD (COL_CURSOR),HL      ; положили адрес для восстановления цвета
507 savelij 1345
                LD DE,COLBUF
1186 savelij 1346
                LD B,(IX+_H_SIZE)
1347
;               BIT 2,(IY+55)           ; файлов больше высоты окна?
507 savelij 1348
;               JR Z,COLCURS2
1186 savelij 1349
;               DEC B                   ; цветная полоска на 1 короче
1350
COLCURS2        LD C,(IX+_COLOR_CUR)
1351
.L1             LD A,(HL)
507 savelij 1352
                LD (DE),A
1353
                LD (HL),C
1354
                INC L
1355
                INC E
1186 savelij 1356
                DJNZ .L1
507 savelij 1357
                RET
1358
 
1186 savelij 1359
; H-X, L-Y
507 savelij 1360
ADRDIS          LD C,A
1361
                LD A,L
1186 savelij 1362
                AND 0x18
1363
                OR 0x40
507 savelij 1364
                EX AF,AF'
1365
                LD A,L
1366
                AND 7
1367
                RRCA
1368
                RRCA
1369
                RRCA
1370
                ADD A,H
1371
                LD L,A
1372
                EX AF,AF'
1373
                LD H,A
1374
                LD E,L
1375
ADRATR          LD A,H
1376
                RRCA
1377
                RRCA
1378
                RRCA
1379
                AND 3
1186 savelij 1380
                OR 0x58
507 savelij 1381
                LD D,A
1382
                LD A,C
1383
                RET
1384
 
1385
INC_H           INC H
1386
                LD A,H
1387
                AND 7
1388
                RET NZ
1389
                LD A,L
1186 savelij 1390
                ADD A,0x20
507 savelij 1391
                LD L,A
1392
                RET C
1393
UMEHL1          LD A,H
1394
                SUB 8
1395
                LD H,A
1396
                RET    
1397
 
1186 savelij 1398
; сдвиг окна вверх
1399
SCRUP           LD HL,SYSFLAGS
1400
                BIT SYSFLAGS.B_VIDEO_MODE,(HL)
623 savelij 1401
                JP NZ,TSCRUP
1186 savelij 1402
; сдвиг окна вверх (ZX)
623 savelij 1403
                PUSH IY
585 savelij 1404
                PUSH IX
507 savelij 1405
                EXX
623 savelij 1406
                LD A,(SCROLL_MODE)
1407
                LD E,A
507 savelij 1408
                EXX
1186 savelij 1409
                LD L,(IX+_Y_COORD)
507 savelij 1410
                INC L
1411
                CALL USTAN
1186 savelij 1412
; сдвиг пикселей вверх
1413
SCRUP1          LD A,(IX+0x10)
507 savelij 1414
                ADD A,C
1415
                LD L,A
1186 savelij 1416
                LD H,(IX+0x11)
507 savelij 1417
                LD A,(IX+0)
1418
                ADD A,C
1419
                LD E,A
1420
                LD D,(IX+1)
1421
                PUSH BC
1422
                CALL LDIST
1423
                POP BC
623 savelij 1424
                EXX
1425
                LD A,E
1426
                EXX
646 savelij 1427
                AND 1;A
623 savelij 1428
                JR Z,SCRUP2
1186 savelij 1429
                LD A,(IX+0x11)
623 savelij 1430
                LD H,A
1431
                AND 7
1432
                CP 7
1433
                JR NZ,SCRUP2
1186 savelij 1434
; сдвиг вверх цветовой строки после переноса 7 линий знакоряда
623 savelij 1435
                LD A,H
1436
                RRCA
1437
                RRCA
1438
                RRCA
1439
                AND 3
1186 savelij 1440
                OR 0x58
623 savelij 1441
                LD H,A
1186 savelij 1442
                LD L,(IX+0x10)
623 savelij 1443
                LD A,(IX+1)
1444
                RRCA
1445
                RRCA
1446
                RRCA
1447
                AND 3
1186 savelij 1448
                OR 0x58
623 savelij 1449
                LD D,A
1450
                LD E,(IX+0)
1451
                PUSH BC
1452
                CALL LDIST
1453
                POP BC
1454
SCRUP2          INC IX
507 savelij 1455
                INC IX
1456
                DJNZ SCRUP1
623 savelij 1457
SCRUP3          POP IX
1458
                POP IY
507 savelij 1459
                RET
1460
 
1186 savelij 1461
; сдвиг окна вверх (TXT)
623 savelij 1462
TSCRUP          PUSH IY
585 savelij 1463
                PUSH IX
1186 savelij 1464
        EVOPORT WIN_P3,VMODE7_0
1465
                LD A,(IX+_V_SIZE)
585 savelij 1466
                SUB 3
1186 savelij 1467
                LD B,A                          ; сколько строк в окне скроллировать
1468
                LD C,(IX+_H_SIZE)               ; ширина окна
1469
                LD D,(IX+_X_COORD)              ; X координата левого верхнего угла для скроллера
1470
                LD E,(IX+_Y_COORD)
1471
                INC E                           ; Y координата левого верхнего угла для скроллера
585 savelij 1472
                LD A,E
1473
                ADD A,A
1474
                ADD A,A
507 savelij 1475
                EXX
585 savelij 1476
                LD C,A
1477
                LD B,0
1478
                LD IX,TBUFTSC
1186 savelij 1479
                ADD IX,BC                       ; IX=список адресов начал строк для скроллера
585 savelij 1480
                EXX
1481
                LD A,C
1186 savelij 1482
                AND 0xFE
585 savelij 1483
                NEG
1186 savelij 1484
                LD H,A                          ; ширина для левый символов
1485
                LD L,A                          ; ширина для правых символов
585 savelij 1486
                BIT 0,C
1186 savelij 1487
                JR Z,TSCRUP1                    ; если ширина четная, ничего не делаем
585 savelij 1488
                DEC L
1489
                DEC L
1490
                BIT 0,D
1491
                JR NZ,TSCRUP1
1492
                LD A,H
1493
                LD H,L
1494
                LD L,A
1495
TSCRUP1         LD A,D
1496
                SRL A
1497
                LD D,A
1498
                ADC A,0
1499
                LD E,A
1500
TSCRUP2         LD A,H
1501
                EXX
1502
                LD IY,LDI_END
1503
                LD E,A
1186 savelij 1504
                LD D,0xFF
585 savelij 1505
                ADD IY,DE
1506
                EXX
1507
                LD A,E
1508
                EXX
1509
                LD E,A
1510
                ADD A,(IX+4)
1511
                LD L,A
1512
                LD H,(IX+5)
1513
                LD A,E
1514
                ADD A,(IX+0)
1515
                LD E,A
1516
                LD D,(IX+1)
1186 savelij 1517
                CALL LDIST                      ; перенос монохромнойй строки
585 savelij 1518
                EXX
1519
                LD A,E
1520
                EXX
1521
                LD E,A
1522
                ADD A,(IX+4+100)
1523
                LD L,A
1524
                LD H,(IX+5+100)
1525
                LD A,E
1526
                ADD A,(IX+0+100)
1527
                LD E,A
1528
                LD D,(IX+1+100)
1186 savelij 1529
                CALL LDIST                      ; перенос цветной строки
585 savelij 1530
                EXX
1531
                LD A,L
1532
                EXX
1533
                LD IY,LDI_END
1534
                LD E,A
1186 savelij 1535
                LD D,0xFF
585 savelij 1536
                ADD IY,DE
1537
                EXX
1538
                LD A,D
1539
                EXX
1540
                LD E,A
1541
                ADD A,(IX+6)
1542
                LD L,A
1543
                LD H,(IX+7)
1544
                LD A,E
1545
                ADD A,(IX+2)
1546
                LD E,A
1547
                LD D,(IX+3)
1186 savelij 1548
                CALL LDIST                      ; перенос монохромной строки
585 savelij 1549
                EXX
1550
                LD A,D
1551
                EXX
1552
                LD E,A
1553
                ADD A,(IX+6+100)
1554
                LD L,A
1555
                LD H,(IX+7+100)
1556
                LD A,E
1557
                ADD A,(IX+2+100)
1558
                LD E,A
1559
                LD D,(IX+3+100)
1186 savelij 1560
                CALL LDIST                      ; перенос строки цвета
1561
        REPT 4
585 savelij 1562
                INC IX
1186 savelij 1563
        ENDM
585 savelij 1564
                EXX
1565
                DJNZ TSCRUP2
623 savelij 1566
                POP IX
585 savelij 1567
                POP IY
1568
                RET
1569
 
1570
;0 2 4 6 8
1571
; 1 3 5 7 9
1186 savelij 1572
; =====         3 нечет + 2 чет
1573
;=====          2 нечет + 3 чет
1574
; ====          2 нечет + 2 чет
1575
;====           2 нечет + 2 чет
585 savelij 1576
;0 2 4 6 8
1577
; 1 3 5 7 9
1578
 
1579
;C200    C201    C202    C203    C204
1580
;    D200    D201    D202    D203    D204
1581
;----------------------------------------
1582
;C240    C241    C242    C243    C244
1583
;    D240    D241    D242    D243    D244
1584
 
1186 savelij 1585
; сдвиг окна вниз
585 savelij 1586
TSCRDN          DI
1587
                PUSH IX
1588
                PUSH IY
1186 savelij 1589
        EVOPORT WIN_P3,VMODE7_0
1590
                LD A,(IX+_V_SIZE)
585 savelij 1591
                SUB 3
1186 savelij 1592
                LD B,A                          ; сколько строк в окне скроллировать
1593
                LD C,(IX+_H_SIZE)               ; ширина окна
1594
                LD D,(IX+_X_COORD)              ; X координата левого верхнего угла для скроллера
1595
                LD A,(IX+_Y_COORD)
1596
                ADD A,(IX+_V_SIZE)
585 savelij 1597
                SUB 2
1186 savelij 1598
                LD E,A                          ; Y координата левого верхнего угла для скроллера
585 savelij 1599
                ADD A,A
1600
                ADD A,A
1601
                EXX
1602
                LD C,A
1603
                LD B,0
1604
                LD IX,TBUFTSC
1186 savelij 1605
                ADD IX,BC                       ; IX=список адресов начал строк для скроллера
585 savelij 1606
                EXX
1607
                LD A,C
1186 savelij 1608
                AND 0xFE
585 savelij 1609
                NEG
1186 savelij 1610
                LD H,A                          ; ширина для левый символов
1611
                LD L,A                          ; ширина для правых символов
585 savelij 1612
                BIT 0,C
1613
                JR Z,TSCRDN1
1614
                DEC L
1615
                DEC L
1616
                BIT 0,D
1617
                JR NZ,TSCRDN1
1618
                LD A,H
1619
                LD H,L
1620
                LD L,A
1621
TSCRDN1         LD A,D
1622
                SRL A
1623
                LD D,A
1624
                ADC A,0
1625
                LD E,A
1186 savelij 1626
TSCRDN2
1627
        REPT 4
585 savelij 1628
                DEC IX
1186 savelij 1629
        ENDM
585 savelij 1630
                LD A,H
1631
                EXX
1632
                LD IY,LDI_END
1633
                LD E,A
1186 savelij 1634
                LD D,0xFF
585 savelij 1635
                ADD IY,DE
1636
                EXX
1637
                LD A,E
1638
                EXX
1639
                LD E,A
1640
                ADD A,(IX+0)
1641
                LD L,A
1642
                LD H,(IX+1)
1643
                LD A,E
1644
                ADD A,(IX+4)
1645
                LD E,A
1646
                LD D,(IX+5)
1186 savelij 1647
                CALL LDIST                      ; перенос мохоромной строки
585 savelij 1648
                EXX
1649
                LD A,E
1650
                EXX
1651
                LD E,A
1652
                ADD A,(IX+0+100)
1653
                LD L,A
1654
                LD H,(IX+1+100)
1655
                LD A,E
1656
                ADD A,(IX+4+100)
1657
                LD E,A
1658
                LD D,(IX+5+100)
1186 savelij 1659
                CALL LDIST                      ; перенос цветной строки
585 savelij 1660
                EXX
1661
                LD A,L
1662
                EXX
1663
                LD IY,LDI_END
1664
                LD E,A
1186 savelij 1665
                LD D,0xFF
585 savelij 1666
                ADD IY,DE
1667
                EXX
1668
                LD A,D
1669
                EXX
1670
                LD E,A
1671
                ADD A,(IX+2)
1672
                LD L,A
1673
                LD H,(IX+3)
1674
                LD A,E
1675
                ADD A,(IX+6)
1676
                LD E,A
1677
                LD D,(IX+7)
1186 savelij 1678
                CALL LDIST                      ; перенос монохромной строки
585 savelij 1679
                EXX
1680
                LD A,D
1681
                EXX
1682
                LD E,A
1683
                ADD A,(IX+2+100)
1684
                LD L,A
1685
                LD H,(IX+3+100)
1686
                LD A,E
1687
                ADD A,(IX+6+100)
1688
                LD E,A
1689
                LD D,(IX+7+100)
1186 savelij 1690
                CALL LDIST                      ; перенос цветной строки
585 savelij 1691
                EXX
1692
                DJNZ TSCRDN2
1693
                POP IY
1694
                POP IX
1695
                RET
1696
 
1186 savelij 1697
SCRDN           LD HL,SYSFLAGS
1698
                BIT SYSFLAGS.B_VIDEO_MODE,(HL)
585 savelij 1699
                JP NZ,TSCRDN
1186 savelij 1700
; скролл окна вверх (ZX)
585 savelij 1701
                PUSH IX
623 savelij 1702
                PUSH IY
585 savelij 1703
                EXX
623 savelij 1704
                LD A,(SCROLL_MODE)
1705
                LD E,A
507 savelij 1706
                EXX
1186 savelij 1707
                LD A,(IX+_V_SIZE)
1708
                ADD A,(IX+_Y_COORD)
507 savelij 1709
                SUB 2
1710
                LD L,A
1711
                CALL USTAN
573 savelij 1712
                DEC IX
1713
                DEC IX
507 savelij 1714
SCRDN1          LD A,(IX+0)
1715
                ADD A,C
1716
                LD L,A
1717
                LD H,(IX+1)
1186 savelij 1718
                LD A,(IX+0x10)
507 savelij 1719
                ADD A,C
1720
                LD E,A
1186 savelij 1721
                LD D,(IX+0x11)
507 savelij 1722
                PUSH BC
1723
                CALL LDIST
1724
                POP BC
623 savelij 1725
                EXX
1726
                LD A,E
1727
                EXX
646 savelij 1728
                AND 1;A
623 savelij 1729
                JR Z,SCRDN2
1730
                LD A,(IX+1)
1731
                LD H,A
1732
                AND 7
1733
                CP 7
1734
                JR NZ,SCRDN2
1735
                LD A,H
1736
                RRCA
1737
                RRCA
1738
                RRCA
1739
                AND 3
1186 savelij 1740
                OR 0x58
623 savelij 1741
                LD H,A
1742
                LD L,(IX+0)
1186 savelij 1743
                LD A,(IX+0x11)
623 savelij 1744
                RRCA
1745
                RRCA
1746
                RRCA
1747
                AND 3
1186 savelij 1748
                OR 0x58
623 savelij 1749
                LD D,A
1186 savelij 1750
                LD E,(IX+0x10)
623 savelij 1751
                PUSH BC
1752
                CALL LDIST
1753
                POP BC
1754
SCRDN2          DEC IX
507 savelij 1755
                DEC IX
1756
                DJNZ SCRDN1
623 savelij 1757
                POP IY
507 savelij 1758
                POP IX
1759
                RET
1760
 
1186 savelij 1761
; установки для скроллера окна
1762
USTAN           LD A,(IX+_H_SIZE)
507 savelij 1763
                ADD A,A
1764
                LD E,A
1765
                LD A,L
1766
                LD D,0
585 savelij 1767
                LD HL,LDI_END
507 savelij 1768
                AND A
1769
                SBC HL,DE
1770
                PUSH HL
1771
                POP IY
1186 savelij 1772
                LD C,(IX+_X_COORD)
507 savelij 1773
                LD L,A
1186 savelij 1774
                LD A,(IX+_V_SIZE)
507 savelij 1775
                SUB 3
1776
                ADD A,A
1777
                ADD A,A
1778
                ADD A,A
1779
                LD B,A
1780
                LD H,0
1781
                ADD HL,HL
1782
                ADD HL,HL
1783
                ADD HL,HL
1784
                LD IX,BUFTSC
1785
                EX DE,HL
1786
                ADD IX,DE
1787
                ADD IX,DE
1788
                RET
1789
 
1186 savelij 1790
LDIST           JP (IY)
1791
        REPT 80
507 savelij 1792
                LDI
1186 savelij 1793
        ENDM
585 savelij 1794
LDI_END         RET
573 savelij 1795
 
1796
SYM00           DB %11111111
1797
                DB %10000000
1798
                DB %10000000
1799
                DB %10000000
1800
                DB %10000000
1801
                DB %10000000
1802
                DB %10000000
585 savelij 1803
                DB %10000000
573 savelij 1804
 
1805
SYM01           DB %11111111
1806
                DB %00000000
1807
                DB %00000000
1808
                DB %00000000
1809
                DB %00000000
1810
                DB %00000000
1811
                DB %00000000
585 savelij 1812
                DB %00000000
573 savelij 1813
 
1814
SYM02           DB %11111111
1815
                DB %00000001
1816
                DB %00000001
1817
                DB %00000001
1818
                DB %00000001
1819
                DB %00000001
1820
                DB %00000001
1821
                DB %00000001
1822
 
1823
SYM03           DB %10000000
1824
                DB %10000000
1825
                DB %10000000
1826
                DB %10000000
1827
                DB %10000000
1828
                DB %10000000
1829
                DB %10000000
1830
                DB %10000000
1831
 
1832
SYM04           DB %00000001
1833
                DB %00000001
1834
                DB %00000001
1835
                DB %00000001
1836
                DB %00000001
1837
                DB %00000001
1838
                DB %00000001
1839
                DB %00000001
1840
 
1841
SYM05           DB %10000000
1842
                DB %10000000
1843
                DB %10000000
1844
                DB %10000000
1845
                DB %10000000
1846
                DB %10000000
1847
                DB %10000000
1848
                DB %11111111
1849
 
1850
SYM06           DB %00000000
1851
                DB %00000000
1852
                DB %00000000
1853
                DB %00000000
1854
                DB %00000000
1855
                DB %00000000
1856
                DB %00000000
1857
                DB %11111111
1858
 
1859
SYM07           DB %00000001
1860
                DB %00000001
1861
                DB %00000001
1862
                DB %00000001
1863
                DB %00000001
1864
                DB %00000001
1865
                DB %00000001
1866
                DB %11111111
585 savelij 1867
END_MAGICSYM
573 savelij 1868
 
585 savelij 1869
;ICO_MOUSE0     DB %00111111,%00000000;3F,00
1870
;               DB %00011111,%01000000;1F,40
1871
;               DB %00001111,%01100000;0F,60
1872
;               DB %00000111,%01010000;07,50
1873
;               DB %00000011,%01001000;03,48
1874
;               DB %00000001,%01001100;01,4C
1875
;               DB %00000001,%01110000;01,70
1876
;               DB %00000111,%00000000;07,00
573 savelij 1877
 
585 savelij 1878
;ICO_MOUSE1     DB %00111111,%00000000;3F,00
1879
;               DB %00011111,%01000000;1F,40
1880
;               DB %00001111,%01100000;0F,60
1881
;               DB %00000111,%01110000;07,70
1882
;               DB %00000011,%01111000;03,78
1883
;               DB %00000001,%01111100;01,7C
1884
;               DB %00000001,%01110000;01,70
1885
;               DB %00000111,%00000000;07,00