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 |