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 |