Subversion Repositories pentevo

Rev

Rev 821 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 821 Rev 1186
Line 1... Line 1...
1
 
1
 
2
;LAST UPDATE; 03.05.2019 savelij
2
; LAST UPDATE: 14.02.2025 savelij
3
 
3
 
4
;СОХРАНЕНИЕ КУСКА ЭКРАНА
4
; сохранение куска экрана
5
SAVE2X2         LD HL,FLAGS
5
SAVE2X2         LD HL,SYSFLAGS
6
                BIT B_VIDEO_MODE,(HL)
6
                BIT SYSFLAGS.B_VIDEO_MODE,(HL)
7
                RET NZ
7
                RET NZ
8
                LD HL,(ADR_REST)
8
                LD HL,(ADR_REST)
9
                LD DE,MOUSE_BUFF
9
                LD DE,MOUSE_BUFF
10
                LD B,8
10
                LD B,8
11
SAVE2X21        LD A,(HL)
11
.L1             LD A,(HL)
12
                LD (DE),A
12
                LD (DE),A
13
                INC DE
13
                INC DE
14
                INC L
14
                INC L
15
                LD A,(HL)
15
                LD A,(HL)
16
                LD (DE),A
16
                LD (DE),A
17
                INC DE
17
                INC DE
18
                DEC L
18
                DEC L
19
                CALL INC_H
19
                CALL INC_H
20
                DJNZ SAVE2X21
20
                DJNZ .L1
21
                RET
21
                RET
22
 
22
 
23
;ВОССТАНОВЛЕНИЕ КУСКА ЭКРАНА
23
; восстановление куска экрана
24
REST2X2         LD HL,FLAGS
24
REST2X2         LD HL,SYSFLAGS
25
                BIT B_VIDEO_MODE,(HL)
25
                BIT SYSFLAGS.B_VIDEO_MODE,(HL)
26
                RET NZ
26
                RET NZ
27
                LD HL,(ADR_REST)
27
                LD HL,(ADR_REST)
28
                LD DE,MOUSE_BUFF
28
                LD DE,MOUSE_BUFF
29
                LD B,8
29
                LD B,8
30
REST2X21        LD A,(DE)
30
.L1             LD A,(DE)
31
                LD (HL),A
31
                LD (HL),A
32
                INC DE
32
                INC DE
33
                INC L
33
                INC L
34
                LD A,(DE)
34
                LD A,(DE)
35
                LD (HL),A
35
                LD (HL),A
36
                INC DE
36
                INC DE
37
                DEC L
37
                DEC L
38
                CALL INC_H
38
                CALL INC_H
39
                DJNZ REST2X21
39
                DJNZ .L1
40
                RET
40
                RET
41
 
41
 
42
DETECTMOUSE     LD HL,FLAGS
42
DETECTMOUSE     LD HL,SYSFLAGS
43
                LD BC,0XFBDF
43
                LD BC,0xFBDF
44
                LD E,0X20
44
                LD E,0x20
45
                EI
45
                EI
46
                HALT
46
                HALT
47
                IN D,(C)                        ;1.СТАБИЛЬНОСТЬ X
47
                IN D,(C)                        ; 1.стабильность X
48
SETMOU1         IN A,(C)
48
.L1             IN A,(C)
49
                CP D
49
                CP D
50
                JR NZ,SETMOU2
50
                JR NZ,.L2
51
                DEC E
51
                DEC E
52
                JR NZ,SETMOU1                   ;2.KEYS<>X
52
                JR NZ,.L1                       ; 2.keys<>X
53
                DEC B
53
                DEC B
54
                IN A,(C)
54
                IN A,(C)
55
                CP D
55
                CP D
56
                JR Z,SETMOU2                    ;3.KEYS&7=7(LION17)
56
                JR Z,.L2                        ; 3.keys&7=7(LION17)
57
                CPL
57
                CPL
58
                AND 7
58
                AND 7
59
                SET B_MOUSE_PRESENT,(HL)
59
                SET SYSFLAGS.B_MOUSE_PRESENT,(HL)
60
                RET Z
60
                RET Z
61
SETMOU2         RES B_MOUSE_PRESENT,(HL)
61
.L2             RES SYSFLAGS.B_MOUSE_PRESENT,(HL)
62
                SCF
62
                SCF
63
                RET
63
                RET
64
 
64
 
65
MOUSE           LD HL,FLAGS
65
MOUSE           LD HL,SYSFLAGS
66
                BIT B_VIDEO_MODE,(HL)
66
                BIT SYSFLAGS.B_VIDEO_MODE,(HL)
67
                RET NZ
67
                RET NZ
68
                LD HL,(ARXY)
68
                LD HL,(ARXY)
69
                LD DE,(MOUPOS)                  ;D=Y КООДИНАТА, E=X КООРДИНАТА
69
                LD DE,(MOUPOS)                  ; D=Y коодината, E=X координата
70
                LD BC,0XFBDF
70
                LD BC,MOUSE_X
71
                IN A,(C)                        ;ЧТЕНИЕ КООРДИНАТЫ X
71
                IN A,(C)                        ; чтение координаты X
72
                LD (MOUPOS),A
72
                LD (MOUPOS),A
73
                SUB E
73
                SUB E
74
                JR Z,MOUNX
74
                JR Z,MOUNX
75
                JP P,MOUPX
75
                JP P,MOUPX
76
                ADD A,L
76
                ADD A,L
77
                JR C,$+3
77
                JR C,.L1
78
                XOR A
78
                XOR A
79
                LD L,A
79
.L1             LD L,A
80
                JR MOUNX
80
                JR MOUNX
81
 
81
 
82
MOUPX           ADD A,L
82
MOUPX           ADD A,L
83
                JR C,$+6
83
                JR C,.L1
84
                CP 0XF9
84
                CP 0xF9
85
                JR C,$+4
85
                JR C,.L2
86
                LD A,0XF9
86
.L1             LD A,0xF9
87
                LD L,A
87
.L2             LD L,A
-
 
88
MOUNX           LD BC,MOUSE_Y
88
MOUNX           LD BC,0XFFDF                    ;ЧТЕНИЕ КООРДИНАТЫ Y
89
                IN A,(C)                        ; чтение координаты Y
89
                IN A,(C)
-
 
90
                LD (MOUPOS+1),A
90
                LD (MOUPOS+1),A
91
                SUB D
91
                SUB D
92
                JR Z,MOUNY
92
                JR Z,MOUNY
93
                NEG
93
                NEG
94
                JP P,MOUPY
94
                JP P,MOUPY
95
                ADD A,H
95
                ADD A,H
96
                JR C,$+3
96
                JR C,.L1
97
                XOR A
97
                XOR A
98
                LD H,A
98
.L1             LD H,A
99
                JR MOUNY
99
                JR MOUNY
100
 
100
 
101
MOUPY           ADD A,H
101
MOUPY           ADD A,H
102
                JR C,$+6
102
                JR C,.L1
103
                CP 0XB8
103
                CP 0xB8
104
                JR C,$+4
104
                JR C,.L2
105
                LD A,0XB8
105
.L1             LD A,0xB8
106
                LD H,A
106
.L2             LD H,A
107
MOUNY           LD (ARXY),HL
107
MOUNY           LD (ARXY),HL
108
                RET
108
                RET
109
 
109
 
110
MOUOPT          LD H,(IX+1)
110
MOUOPT          LD H,(IX+_Y_COORD)
111
                LD L,(IX+0)
111
                LD L,(IX+_X_COORD)
112
                LD DE,(ARXY)
112
                LD DE,(ARXY)
113
                LD B,3
113
                LD B,3
114
                SRL D
114
.L2             SRL D
115
                SRL E
115
                SRL E
116
                DJNZ $-4
116
                DJNZ .L2
117
                LD A,E
117
                LD A,E
118
                CP L
118
                CP L
119
                RET C                           ;КУРСОР ЛЕВЕЕ ОКНА
119
                RET C                           ; курсор левее окна
120
                LD A,L
120
                LD A,L
121
                ADD A,(IX+3)
121
                ADD A,(IX+_H_SIZE)
122
                DEC A
122
                DEC A
123
                CP E
123
                CP E
124
                RET C                           ;КУРСОР ПРАВЕЕ ОКНА
124
                RET C                           ; курсор правее окна
125
                LD A,D
125
                LD A,D
126
                INC H
126
                INC H
127
                CP H
127
                CP H
128
                RET C                           ;КУРСОР ВЫШЕ ОКНА ИЛИ НА ВЕРХНЕЙ ПОЛОСКЕ
128
                RET C                           ; курсор выше окна или на верхней полоске
129
                LD A,H
129
                LD A,H
130
                ADD A,(IX+2)
130
                ADD A,(IX+_V_SIZE)
131
                SUB 3
131
                SUB 3
132
                CP D
132
                CP D
133
                RET C                           ;КУРСОР НИЖЕ ОКНА ИЛИ НА ПОСЛЕДНЕЙ ПОЛОСКЕ
133
                RET C                           ; курсор ниже окна или на последней полоске
134
;КУРСОР В ПРЕДЕЛАХ РАБОЧЕЙ ОБЛАСТИ
134
; курсор в пределах рабочей области
135
                LD A,(IX+_NUM_KOL_H)
135
                LD A,(IX+_NUM_KOL_H)
136
                AND A
136
                AND A
137
                JR NZ,.L1              
137
                JR NZ,.L1              
138
                OR (IX+_NUM_KOL_L)
138
                OR (IX+_NUM_KOL_L)
139
                JR Z,.L1
139
                JR Z,.L1
140
;ПРОВЕРКА ДЛЯ КОЛИЧЕСТВА ПУНКТОВ МЕНЬШЕ ВЫСОТЫ ОКНА - 2
140
; проверка для количества пунктов меньше высоты окна - 2
141
                PUSH HL
141
                PUSH HL
142
                LD L,A
142
                LD L,A
143
                LD H,(IX+_NUM_KOL_H)
143
                LD H,(IX+_NUM_KOL_H)
144
                LD A,D
144
                LD A,D
145
                SUB (IX+_Y_COORD)
145
                SUB (IX+_Y_COORD)
Line 147... Line 147...
147
                LD B,0
147
                LD B,0
148
                AND A
148
                AND A
149
                SBC HL,BC
149
                SBC HL,BC
150
                POP HL
150
                POP HL
151
                RET C
151
                RET C
152
 
-
 
153
.L1             LD A,D
152
.L1             LD A,D
154
                SUB H
153
                SUB H
155
                LD C,A
154
                LD C,A
156
                LD L,(IX+8)
155
                LD L,(IX+_TEK_PKT_L)
157
                LD H,(IX+9)
156
                LD H,(IX+_TEK_PKT_H)
158
                BIT 7,(IX+7)
157
                BIT B_ADR_PUNKT,(IX+_NUM_PKT)
159
                JR Z,MOUOPT1
158
                JR Z,MOUOPT1
160
                LD B,0
159
                LD B,0
161
                LD C,(HL)
160
                LD C,(HL)
162
                INC HL
161
                INC HL
163
                LD E,(HL)
162
                LD E,(HL)
Line 175... Line 174...
175
                LD (HL),A
174
                LD (HL),A
176
                JP COLOR_CURSOR
175
                JP COLOR_CURSOR
177
 
176
 
178
MOUOPT1         LD B,0
177
MOUOPT1         LD B,0
179
                LD D,B
178
                LD D,B
180
                LD E,(IX+7)
179
                LD E,(IX+_NUM_PKT)
181
                SBC HL,DE
180
                SBC HL,DE
182
                ADD HL,BC
181
                ADD HL,BC
183
                LD (IX+7),C
182
                LD (IX+_NUM_PKT),C
184
                LD (IX+8),L
183
                LD (IX+_TEK_PKT_L),L
185
                LD (IX+9),H
184
                LD (IX+_TEK_PKT_H),H
186
                JP COLOR_CURSOR
185
                JP COLOR_CURSOR
187
 
186
 
188
DRAW_MOUSE      LD BC,(ARXY)
187
DRAW_MOUSE      LD BC,(ARXY)
189
                LD L,B
188
                LD L,B
190
                LD H,0
189
                LD H,0
Line 193... Line 192...
193
                ADD HL,DE
192
                ADD HL,DE
194
                LD A,C
193
                LD A,C
195
                RRCA
194
                RRCA
196
                RRCA
195
                RRCA
197
                RRCA
196
                RRCA
198
                AND 0X1F
197
                AND 0x1F
199
                ADD A,(HL)
198
                ADD A,(HL)
200
                INC HL
199
                INC HL
201
                LD H,(HL)
200
                LD H,(HL)
202
                LD L,A
201
                LD L,A
203
                LD (ADR_REST),HL
202
                LD (ADR_REST),HL
204
                PUSH HL
203
                PUSH HL
205
                CALL SAVE2X2
204
                CALL SAVE2X2
206
                LD A,(_MORG)
205
                LD A,(_MORG)
207
                INC A
206
                INC A
208
                LD HL,FLAGS
207
                LD HL,SYSFLAGS
209
                CP 0X0C
208
                CP 0x0C
210
                JR NZ,_MORG3
209
                JR NZ,_MORG3
211
                LD A,M_CURSOR_NUM
210
                LD A,SYSFLAGS.M_CURSOR_NUM
212
                XOR (HL)
211
                XOR (HL)
213
                LD (HL),A
212
                LD (HL),A
214
                XOR A
213
                XOR A
215
_MORG3          LD (_MORG),A
214
_MORG3          LD (_MORG),A
216
                LD A,(ARXY)
215
                LD A,(ARXY)
217
                AND 7
216
                AND 7
218
                CPL
217
                CPL
219
                ADD A,9
218
                ADD A,9
220
                LD C,A
219
                LD C,A
221
                LD A,(FLAGS)
220
                LD A,(SYSFLAGS)
222
                AND M_CURSOR_NUM
221
                AND SYSFLAGS.M_CURSOR_NUM
223
                LD HL,SPRAR
222
                LD HL,SPRAR
224
                JR Z,_MORG2
223
                JR Z,_MORG2
225
                LD HL,SPRAR2
224
                LD HL,SPRAR2
226
_MORG2          LD B,8
225
_MORG2          LD B,8
227
                POP DE
226
                POP DE
228
PRAR0           PUSH BC
227
.L2             PUSH BC
229
                LD B,C
228
                LD B,C
230
                LD C,(HL)
229
                LD C,(HL)
231
                INC HL
230
                INC HL
232
                PUSH HL
231
                PUSH HL
233
                LD L,(HL)
232
                LD L,(HL)
234
                EX DE,HL
233
                EX DE,HL
235
                LD A,0XFF
234
                LD A,0xFF
236
                LD D,0
235
                LD D,0
237
PRAR1           SCF
236
.L1             SCF
238
                RL C
237
                RL C
239
                RLA
238
                RLA
240
                SLA E
239
                SLA E
241
                RL D
240
                RL D
242
                DJNZ PRAR1
241
                DJNZ .L1
243
                AND (HL)
242
                AND (HL)
244
                OR D
243
                OR D
245
                LD (HL),A
244
                LD (HL),A
246
                INC L
245
                INC L
247
                LD A,(HL)
246
                LD A,(HL)
Line 252... Line 251...
252
                CALL INC_H
251
                CALL INC_H
253
                EX DE,HL
252
                EX DE,HL
254
                POP HL
253
                POP HL
255
                INC HL
254
                INC HL
256
                POP BC
255
                POP BC
257
                DJNZ PRAR0
256
                DJNZ .L2
258
                RET
257
                RET
259
 
258
 
260
;МЕСТОПОЛОЖЕНИЕ КУРСОРА
259
; местоположение курсора
261
OPMSPL          LD E,(IX+0X10)
260
OPMSPL          LD E,(IX+_ADR_MOUSE_L)
262
                LD D,(IX+0X11)
261
                LD D,(IX+_ADR_MOUSE_H)
263
                LD A,D
262
                LD A,D
264
                OR E
263
                OR E
265
                RET Z                           ;АДРЕС ОПИСАТЕЛЕЙ НЕ ЗАДАН
264
                RET Z                           ; адрес описателей не задан
266
                PUSH IX
265
                PUSH IX
267
                PUSH DE
266
                PUSH DE
268
                POP IX
267
                POP IX
269
                LD HL,(ARXY)                    ;H=Y, L=X
268
                LD HL,(ARXY)                    ; H=Y, L=X
270
                SRL H
269
                SRL H
Line 276... Line 275...
276
NXTPOS2         LD A,(IX+0)
275
NXTPOS2         LD A,(IX+0)
277
                INC A
276
                INC A
278
                JR Z,ENDWI
277
                JR Z,ENDWI
279
                LD A,L
278
                LD A,L
280
                CP (IX+1)
279
                CP (IX+1)
281
                JR C,NXTPOS1                    ;КУРСОР ЛЕВЕЕ
280
                JR C,NXTPOS1                    ; курсор левее
282
                LD A,(IX+1)
281
                LD A,(IX+1)
283
                ADD A,(IX+4)
282
                ADD A,(IX+4)
284
                DEC A
283
                DEC A
285
                CP L
284
                CP L
286
                JR C,NXTPOS1                    ;КУРСОР ПРАВЕЕ
285
                JR C,NXTPOS1                    ; курсор правее
287
                LD A,H
286
                LD A,H
288
                CP (IX+2)
287
                CP (IX+2)
289
                JR C,NXTPOS1                    ;КУРСОР ВЫШЕ
288
                JR C,NXTPOS1                    ; курсор выше
290
                LD A,(IX+2)
289
                LD A,(IX+2)
291
                ADD A,(IX+3)
290
                ADD A,(IX+3)
292
                DEC A
291
                DEC A
293
                CP H
292
                CP H
294
                JR C,NXTPOS1                    ;КУРСОР НИЖЕ
293
                JR C,NXTPOS1                    ; курсор ниже
295
                LD A,(IX+5)                     ;ПОЛУЧИЛИ КОД КНОПКИ  
294
                LD A,(IX+5)                     ; получили код кнопки  
296
ENDWI           POP IX                          ;ПОПАЛИ В ЗАДАННУЮ ЗОНУ
295
ENDWI           POP IX                          ; попали в заданную зону
297
                RET                             ;ВЫХОДИМ
296
                RET                             ; выходим
298
 
297
 
299
NXTPOS1         LD DE,6                         ;ПОКА НИКУДА НЕ ПОПАЛИ
298
NXTPOS1         LD DE,6                         ; пока никуда не попали
300
                ADD IX,DE                       ;ПЕРЕХОДИМ К ПРОВЕРКЕ СЛЕДУЩЕГО
299
                ADD IX,DE                       ; переходим к проверке следущего
301
                JR NXTPOS2
300
                JR NXTPOS2