Rev 1035 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1035 | Rev 1186 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | 1 | ||
2 | ; LAST UPDATE: 09.11.2022 savelij |
2 | ; LAST UPDATE: 16.02.2025 savelij |
3 | 3 | ||
4 | ITSELECTOR LD HL,FLAGS |
4 | ITSELECTOR LD HL,SYSFLAGS |
5 | RES B_MOUSE_PRESENT,(HL) ;ПРИНУДИТЕЛЬНОЕ ОТКЛЮЧЕНИЕ МЫШИ ДЛЯ ТЕКСТМОДА |
5 | RES SYSFLAGS.B_MOUSE_PRESENT,(HL); принудительное отключение мыши для текстмода |
6 | SET B_VIDEO_MODE,(HL) ;МЕНЮ ТЕКСТОВОГО ВИДЕОРЕЖИМА |
6 | SET SYSFLAGS.B_VIDEO_MODE,(HL) ; меню текстового видеорежима |
7 | LD HL,KEYBOARDS |
7 | LD HL,KEYBOARDS |
8 | LD (ADR_INT),HL ;ПО ПРЕРЫВАНИЯМ БУДЕТ ОПРОС КЛАВИАТУРЫ |
8 | LD (ADR_INT),HL ; по прерываниям будет опрос клавиатуры |
9 | LD (OLD_STACK),SP |
9 | LD (OLD_STACK),SP |
10 | JR SELECTOR |
10 | JR SELECTOR |
11 | 11 | ||
12 | ISELECTOR LD HL,FLAGS |
12 | ISELECTOR LD HL,SYSFLAGS |
13 | RES B_VIDEO_MODE,(HL) |
13 | RES SYSFLAGS.B_VIDEO_MODE,(HL) |
14 | CALL DETECTMOUSE |
14 | CALL DETECTMOUSE |
15 | LD (OLD_STACK),SP |
15 | LD (OLD_STACK),SP |
16 | SELECTOR EI |
16 | SELECTOR EI |
17 | LD A,(FLAGS) |
17 | LD A,(SYSFLAGS) |
18 | AND M_MOUSE_PRESENT ;ПРОВЕРКА НАЛИЧИЯ МЫШИ |
18 | AND SYSFLAGS.M_MOUSE_PRESENT ; проверка наличия мыши |
19 | JR Z,_RULNMO |
19 | JR Z,_RULNMO |
20 | ;FIX КОЛЕСО МЫШИ |
20 | ; FIX колесо мыши |
21 | MKEYPR EI |
21 | MKEYPR EI |
22 | LD A,0XFA |
22 | LD A,HIGH (MOUSE_KEYS) |
23 | IN A,(0XDF) |
23 | IN A,(LOW (MOUSE_KEYS)) |
24 | CPL |
24 | CPL |
25 | AND 7 |
25 | AND %00000111 |
26 | JR NZ,MKEYPR |
26 | JR NZ,MKEYPR |
27 | _RULNMO CALL SAVE2X2 ;ЕСЛИ МЕНЮ НАПЕЧАТАЛИ ПОВЕРХ СТРЕЛКИ |
27 | _RULNMO CALL SAVE2X2 ; если меню напечатали поверх стрелки |
28 | CALL SET_ADR_ATR ;УСТАНОВКА НОВОГО АДРЕСА ДЛЯ ЦВЕТНОЙ ПОЛОСКИ |
28 | CALL SET_ADR_ATR ; установка нового адреса для цветной полоски |
29 | LD HL,FLAGS_KEY |
29 | LD HL,FLAGS_KEY |
30 | RES 5,(HL) ;НА КЛАВИАТУРЕ НИЧЕГО НЕ НАЖАТО |
30 | RES 5,(HL) ; на клавиатуре ничего не нажато |
31 | JR MAINLOP |
31 | JR MAINLOP |
32 | 32 | ||
33 | ;НАЖАТА СТРЕЛКА ВВЕРХ |
33 | ; нажата стрелка вверх |
34 | UP CALL CURSOR_UP ;СМЕНИЛИ ТЕКУЩИЙ ПУНКТ НА -1 |
34 | UP CALL CURSOR_UP ; сменили текущий пункт на -1 |
35 | JR SET_POS1 |
35 | JR SET_POS1 |
36 | 36 | ||
37 | ;НАЖАТА СТРЕЛКА ВПРАВО |
37 | ; нажата стрелка вправо |
38 | RIGHT BIT 1,(IX+6) ;ПРОВЕРКА ПРОСТО МЕНЮ ИЛИ ФАЙЛОВОЕ |
38 | RIGHT BIT 1,(IX+_FLAGS) ; проверка просто меню или файловое |
39 | PUSH AF ;СОХРАНИЛИ РЕЗУЛЬТАТ ПРОВЕРКИ |
39 | PUSH AF ; сохранили результат проверки |
40 | CALL NZ,PAGEDN ;ЕСЛИ ФАЙЛОВОЕ, ТО ЛИСТАНИЕ СТРАНИЧНОЕ |
40 | CALL NZ,PAGEDN ; если файловое, то листание страничное |
41 | POP AF ;ВОССТАНОВИЛИ РЕЗУЛЬТАТ ПРОВЕРКИ |
41 | POP AF ; восстановили результат проверки |
42 | JR NZ,SET_POS1 ;ЕСЛИ ФАЙЛОВОЕ ПРОДОЛЖАЕМ |
42 | JR NZ,SET_POS1 ; если файловое продолжаем |
43 | LD A,(IX+0X0A) |
43 | LD A,(IX+_NUM_KOL_L) |
44 | AND A |
44 | AND A |
45 | JR Z,SET_POS |
45 | JR Z,SET_POS |
46 | DEC A ;ИНАЧЕ ПЕРЕХОД КУРСОРА НА ПОСЛЕДНИЙ ПУНКТ |
46 | DEC A ; иначе переход курсора на последний пункт |
47 | JR SET_POS ;ИЗМЕНЯЕМ ПОЛОЖЕНИЕ КУРСОРА И ПРОДОЛЖАЕМ |
47 | JR SET_POS ; изменяем положение курсора и продолжаем |
48 | 48 | ||
49 | ;НАЖАТА СТРЕЛКА ВНИЗ |
49 | ; нажата стрелка вниз |
50 | DOWN CALL CURSOR_DOWN ;СМЕНИЛИ ТЕКУЩИЙ ПУНКТ НА +1 |
50 | DOWN CALL CURSOR_DOWN ; сменили текущий пункт на +1 |
51 | JR SET_POS1 |
51 | JR SET_POS1 |
52 | 52 | ||
53 | ;НАЖАТА СТРЕЛКА ВЛЕВО |
53 | ; нажата стрелка влево |
54 | LEFT BIT 1,(IX+6) ;ПРОВЕРКА ПРОСТО МЕНЮ ИЛИ ФАЙЛОВОЕ |
54 | LEFT BIT 1,(IX+_FLAGS) ; проверка просто меню или файловое |
55 | PUSH AF ;СОХРАНИЛИ РЕЗУЛЬТАТ ПРОВЕРКИ |
55 | PUSH AF ; сохранили результат проверки |
56 | CALL NZ,PAGEUP ;ЕСЛИ ФАЙЛОВОЕ, ТО ЛИСТАНИЕ СТРАНИЧНОЕ |
56 | CALL NZ,PAGEUP ; если файловое, то листание страничное |
57 | POP AF ;ВОССТАНОВИЛИ РЕЗУЛЬТАТ ПРОВЕРКИ |
57 | POP AF ; восстановили результат проверки |
58 | JR NZ,SET_POS1 ;ЕСЛИ ФАЙЛОВОЕ ПРОДОЛЖАЕМ |
58 | JR NZ,SET_POS1 ; если файловое продолжаем |
59 | XOR A ;ИНАЧЕ ПЕРЕХОД КУРСОРА НА ПЕРВЫЙ ПУНКТ |
59 | XOR A ; иначе переход курсора на первый пункт |
60 | SET_POS BIT 7,(IX+7) |
60 | SET_POS BIT B_ADR_PUNKT,(IX+_NUM_PKT) |
61 | JR Z,SET_POS3 |
61 | JR Z,SET_POS3 |
62 | LD L,(IX+8) |
62 | LD L,(IX+_TEK_PKT_L) |
63 | LD H,(IX+9) |
63 | LD H,(IX+_TEK_PKT_H) |
64 | LD (HL),A |
64 | LD (HL),A |
65 | INC HL |
65 | INC HL |
66 | LD (HL),A |
66 | LD (HL),A |
67 | INC HL |
67 | INC HL |
68 | LD (HL),0 |
68 | LD (HL),0 |
69 | JR SET_POS1 |
69 | JR SET_POS1 |
70 | 70 | ||
71 | SET_POS3 LD (IX+7),A ;ИЗМЕНИЛИ ПОЗИЦИЮ КУРСОРА |
71 | SET_POS3 LD (IX+_NUM_PKT),A ; изменили позицию курсора |
72 | LD (IX+8),A |
72 | LD (IX+_TEK_PKT_L),A |
73 | LD (IX+9),0 ;ИЗМЕНИЛИ НОМЕР ВЫБРАННОГО ПУНКТА |
73 | LD (IX+_TEK_PKT_H),0 ; изменили номер выбранного пункта |
74 | SET_POS1 CALL COLOR_CURSOR ;ПЕРЕРИСОВКА ЦВЕТНОЙ ПОЛОСКИ МЕНЮ |
74 | SET_POS1 CALL COLOR_CURSOR ; перерисовка цветной полоски меню |
75 | MAINLOP LD HL,FLAGS_KEY |
75 | MAINLOP LD HL,FLAGS_KEY |
76 | RES 5,(HL) ;СБРОС НАЖАТЫХ КНОПОК |
76 | RES 5,(HL) ; сброс нажатых кнопок |
77 | LD A,(FLAGS) |
77 | LD A,(SYSFLAGS) |
78 | AND M_MOUSE_PRESENT ;ПРОВЕРКА НАЛИЧИЯ МЫШИ |
78 | AND SYSFLAGS.M_MOUSE_PRESENT ; проверка наличия мыши |
79 | JP Z,MAINNMO |
79 | JP Z,MAINNMO |
80 | LD HL,(ARXY) ;СТАРАЯ КООРДИНАТА МЫШИ |
80 | LD HL,(ARXY) ; старая координата мыши |
81 | PUSH HL |
81 | PUSH HL |
82 | CALL MOUSE ;ОПРОС ПОРТОВ МЫШИ |
82 | CALL MOUSE ; опрос портов мыши |
83 | POP BC |
83 | POP BC |
84 | AND A |
84 | AND A |
85 | SBC HL,BC |
85 | SBC HL,BC |
86 | JR Z,NO_SELECT ;НЕ БЫЛО ДВИЖЕНИЯ МЫШИ |
86 | JR Z,NO_SELECT ; не было движения мыши |
87 | CALL MOUOPT ;ПРОВЕРКА НАВЕДЕНИЯ МЫШИ НА ЗАДАННОЕ ОКНО |
87 | CALL MOUOPT ; проверка наведения мыши на заданное окно |
88 | NO_SELECT LD BC,0XFADF |
88 | NO_SELECT LD BC,MOUSE_KEYS |
89 | IN A,(C) ;ОПРОС НАЖАТИЯ КНОПОК МЫШИ |
89 | IN A,(C) ; опрос нажатия кнопок мыши |
90 | AND 7 |
90 | AND 7 |
91 | CP 6 |
91 | CP 6 |
92 | JR Z,PRESS_MOUSE ;ЕСЛИ НАЖАТА ЛЕВАЯ КНОПКА МЫШИ |
92 | JR Z,PRESS_MOUSE ; если нажата левая кнопка мыши |
93 | CP 5 |
93 | CP 5 |
94 | JP Z,RESTART ;ЕСЛИ НАЖАТА ПРАВАЯ КНОПКА МЫШИ |
94 | JP Z,RESTART ; если нажата правая кнопка мыши |
95 | CALL PRINTTIME ;ОБНОВИЛИ ВРЕМЯ ЕСЛИ ИЗМЕНИЛОСЬ |
95 | CALL PRINTTIME ; обновили время если изменилось |
96 | EI |
96 | EI |
97 | CALL REST2X2 ;ВОССТАНОВИЛИ КУСОК ЭКРАНА ПОД МЫШЬЮ |
97 | CALL REST2X2 ; восстановили кусок экрана под мышью |
98 | CALL DRAW_MOUSE ;НАРИСОВАЛИ КУРСОР МЫШИ |
98 | CALL DRAW_MOUSE ; нарисовали курсор мыши |
99 | JR MAINQMO ;ПРОДОЛЖЕНИЕ ОПРОСА |
99 | JR MAINQMO ; продолжение опроса |
100 | 100 | ||
101 | PRESS_MOUSE CALL OPMSPL |
101 | PRESS_MOUSE CALL OPMSPL |
102 | AND A |
102 | AND A |
103 | JR Z,CP_MOUSE4 |
103 | JR Z,CP_MOUSE4 |
104 | LD (LAST_K),A |
104 | LD (LAST_K),A |
105 | CALL TIMELP |
105 | CALL TIMELP |
106 | JR SELECT_KEY |
106 | JR SELECT_KEY |
107 | 107 | ||
108 | CP_MOUSE4 CALL MOUOPT ;ПРОВЕРКА ПОПАДАНИЯ МЫШИ В ПРЕДЕЛЫ ТЕКУЩЕГО ОКНА |
108 | CP_MOUSE4 CALL MOUOPT ; проверка попадания мыши в пределы текущего окна |
109 | JR C,MAINNMO ;НЕ ПОПАЛИ И ЕДЕМ ДАЛЕЕ |
109 | JR C,MAINNMO ; не попали и едем далее |
110 | LD E,(IX+7) ;ВЗЯЛИ НОМЕР ПУНКТА КУДА ПОПАЛИ МЫШЬЮ |
110 | LD E,(IX+_NUM_PKT) ; взяли номер пункта куда попали мышью |
111 | BIT 7,E |
111 | BIT B_ADR_PUNKT,E |
112 | JR Z,CP_MOUSE5 |
112 | JR Z,CP_MOUSE5 |
113 | LD L,(IX+8) |
113 | LD L,(IX+_TEK_PKT_L) |
114 | LD H,(IX+9) |
114 | LD H,(IX+_TEK_PKT_H) |
115 | LD E,(HL) |
115 | LD E,(HL) |
116 | CP_MOUSE5 LD D,0 |
116 | CP_MOUSE5 LD D,0 |
117 | LD HL,(PRESSEDKEY) ;АДРЕС СПИСКА ХОТКЕЕВ ТЕКУЩЕГО ОКНА |
117 | LD HL,(PRESSEDKEY) ; адрес списка хоткеев текущего окна |
118 | ADD HL,DE ;АДРЕС ХОТКЕЯ ВЫБРАННОГО ПУНКТА |
118 | ADD HL,DE ; адрес хоткея выбранного пункта |
119 | LD DE,LAST_K |
119 | LD DE,LAST_K |
120 | LDI ;ИМИТАЦИЯ НАЖАТИЯ ЗАДАННОЙ КНОПКИ |
120 | LDI ; имитация нажатия заданной кнопки |
121 | JR ENTER |
121 | JR ENTER |
122 | 122 | ||
123 | MAINNMO CALL PRINTTIME ;ОБНОВЛЕНИЕ ВРЕМЕНИ, ЕСЛИ В ОНО ОБНОВИЛОСЬ |
123 | MAINNMO CALL PRINTTIME ; обновление времени, если в оно обновилось |
124 | EI |
124 | EI |
125 | HALT |
125 | HALT |
126 | MAINQMO LD A,(FLAGS_KEY) |
126 | MAINQMO LD A,(FLAGS_KEY) |
127 | BIT 5,A ;ПРОВЕРКА НАЖАТИЯ КНОПОК КЛАВИАТУРЫ |
127 | BIT 5,A ; проверка нажатия кнопок клавиатуры |
128 | JP Z,MAINLOP ;ПРОДОЛЖАЕМ ОПРОС УПРАВЛЕНИЯ |
128 | JP Z,MAINLOP ; продолжаем опрос управления |
129 | ROMCALL BREAK_KEY,ROM_RST82 ;ПРОВЕРКА НА BREAK |
129 | ROMCALL BREAK_KEY,ROM_RST82 ; проверка на BREAK |
130 | JR C,SELECT_KEY ;ЕСЛИ BREAK НЕ НАЖАТ ПРОДОЛЖАЕМ |
130 | JR C,SELECT_KEY ; если BREAK не нажат продолжаем |
131 | RESTART DI |
131 | RESTART DI |
- | 132 | CALL RESTORE_FATVARS ; восстановление FAT переменных |
|
132 | CALL TRESTORE_CLINE |
133 | CALL TRESTORE_CLINE ; восстановление цвета в меню |
133 | LD A,1 |
134 | LD A,1 |
134 | RET |
135 | RET |
135 | 136 | ||
136 | SELECT_KEY DI |
137 | SELECT_KEY DI |
137 | LD HL,SET_POS1 |
138 | LD HL,SET_POS1 |
138 | PUSH HL |
139 | PUSH HL |
139 | LD HL,LAST_K |
140 | LD HL,LAST_K |
140 | LD A,(HL) ;ВЗЯЛИ НАЖАТУЮ КЛАВИШУ |
141 | LD A,(HL) ; взяли нажатую клавишу |
141 | LD B,0 |
142 | LD B,0 |
142 | LD HL,MAIN_KEYS |
143 | LD HL,MAIN_KEYS |
143 | LD C,(HL) ;КОЛИЧЕСТВО ДОСТУПНЫХ КНОПОК |
144 | LD C,(HL) ; количество доступных кнопок |
144 | LD D,C |
145 | LD D,C |
145 | INC HL |
146 | INC HL |
146 | CPIR |
147 | CPIR |
147 | JR NZ,NOMAINKEYS ;НИЧЕГО НЕ НАШЛИ, ДАЛЕЕ СМОТРИМ КНОПКИ ТЕКУЩЕГО ОКНА |
148 | JR NZ,NOMAINKEYS ; ничего не нашли, далее смотрим кнопки текущего окна |
148 | ;НАЖАТО ЧТО-ТО ИЗ ГЛАВНЫХ КНОПОК, ДОСТУПНЫХ ВСЕГДА |
149 | ; нажато что-то из главных кнопок, доступных всегда |
149 | LD HL,ADREXEKEYS |
150 | LD HL,ADREXEKEYS |
150 | LD A,D ;КОЛИЧЕСТВО КНОПОК В ТАБЛИЦЕ -1 |
151 | LD A,D ; количество кнопок в таблице -1 |
151 | SUB C ;ПОЛУЧИЛИ ВЫБРАННЫЙ НОМЕР |
152 | SUB C ; получили выбранный номер |
152 | DEC A |
153 | DEC A |
153 | ADD A,A |
154 | ADD A,A |
154 | ADD A,L |
155 | ADD A,L |
155 | LD L,A |
156 | LD L,A |
156 | ADC A,H |
157 | ADC A,H |
Line 160... | Line 161... | ||
160 | INC HL |
161 | INC HL |
161 | LD H,(HL) |
162 | LD H,(HL) |
162 | LD L,A |
163 | LD L,A |
163 | JP (HL) |
164 | JP (HL) |
164 | 165 | ||
165 | ;ПРОВЕРКА ХОТКЕЕВ В ТЕКУЩЕМ ОКНЕ |
166 | ; проверка хоткеев в текущем окне |
166 | NOMAINKEYS LD L,(IX+0X12) |
167 | NOMAINKEYS LD L,(IX+_ADR_HOTKEY_L) |
167 | LD H,(IX+0X13) ;АДРЕС СПИСКА НАЖАТЫХ КНОПОК ТЕКУЩЕГО ОКНА |
168 | LD H,(IX+_ADR_HOTKEY_H) ; адрес списка нажатых кнопок текущего окна |
168 | LD C,A |
169 | LD C,A |
169 | LD A,H |
170 | LD A,H |
170 | OR L |
171 | OR L |
171 | JP Z,MAINLOP ;ЕСЛИ СПИСКА НЕТ, ПРОДОЛЖАЕМ ОПРОС |
172 | JP Z,MAINLOP ; если списка нет, продолжаем опрос |
172 | LD A,C |
173 | LD A,C |
173 | LD C,(IX+2) |
174 | LD C,(IX+_V_SIZE) |
174 | LD E,(HL) |
175 | LD E,(HL) |
175 | INC HL |
176 | INC HL |
176 | DEC C ;КОЛИЧЕСТВО КНОПОК |
177 | DEC C ; количество кнопок |
177 | DEC C ;ВЫСОТА ОКНА -2 |
178 | DEC C ; высота окна -2 |
178 | LD D,C |
179 | LD D,C |
179 | LD B,0 |
180 | LD B,0 |
180 | CPIR ;СКАНИРОВАНИЕ СПИСКА ЗАДАННЫХ КЛАВИШ |
181 | CPIR ; сканирование списка заданных клавиш |
181 | JR NZ,OSTAT_KEYS |
182 | JR NZ,OSTAT_KEYS |
182 | LD A,D ;ВЫСОТА ОКНА |
183 | LD A,D ; высота окна |
183 | SUB C |
184 | SUB C |
184 | DEC A ;ПОЛУЧИЛИ НОМЕР НАЖАТОЙ КНОПКИ И -1 |
185 | DEC A ; получили номер нажатой кнопки и -1 |
185 | BIT 7,(IX+7) |
186 | BIT B_ADR_PUNKT,(IX+_NUM_PKT) |
186 | JR Z,ENTER1 |
187 | JR Z,ENTER1 |
187 | LD L,(IX+8) |
188 | LD L,(IX+_TEK_PKT_L) |
188 | LD H,(IX+9) |
189 | LD H,(IX+_TEK_PKT_H) |
189 | LD (HL),A |
190 | LD (HL),A |
190 | INC HL |
191 | INC HL |
191 | LD (HL),A |
192 | LD (HL),A |
192 | JR ENTER |
193 | JR ENTER |
193 | 194 | ||
194 | ENTER1 LD (IX+7),A ;НОМЕР ПУНКТА В ОКНЕ |
195 | ENTER1 LD (IX+_NUM_PKT),A ; номер пункта в окне |
195 | LD (IX+8),A ;НОМЕР НАЖАТОЙ КЛАВИШИ ПО УКАЗАННОМУ СПИСКУ |
196 | LD (IX+_TEK_PKT_L),A ; номер нажатой клавиши по указанному списку |
196 | ENTER LD A,(FLAGS) |
197 | ENTER LD A,(SYSFLAGS) |
197 | AND M_MOUSE_PRESENT |
198 | AND SYSFLAGS.M_MOUSE_PRESENT |
198 | CALL NZ,TIMELP ;ОБНОВЛЕНИЕ ВРЕМЕНИ ЕСЛИ ОНО ИЗМЕНИЛОСЬ |
199 | CALL NZ,TIMELP ; обновление времени если оно изменилось |
199 | CALL REST2X2 ;СТЕРЛИ КУРСОР МЫШИ |
200 | CALL REST2X2 ; стерли курсор мыши |
200 | LD A,(IX+7) ;НОМЕР ИЗ СПИСКА КОТОРЫЙ ВЫЗВАТЬ |
201 | LD A,(IX+_NUM_PKT) ; номер из списка который вызвать |
201 | BIT 7,A |
202 | BIT B_ADR_PUNKT,A |
202 | JR Z,JUMP2HL1 |
203 | JR Z,JUMP2HL1 |
203 | LD L,(IX+8) |
204 | LD L,(IX+_TEK_PKT_L) |
204 | LD H,(IX+9) |
205 | LD H,(IX+_TEK_PKT_H) |
205 | LD A,(HL) |
206 | LD A,(HL) |
206 | JUMP2HL1 LD L,(IX+0X0E) |
207 | JUMP2HL1 LD L,(IX+_ADR_PRG_L) |
207 | LD H,(IX+0X0F) ;ВЗЯЛИ СПИСОК АДРЕСОВ 1 ИЗ КОТОРЫХ БУДЕМ ВЫЗЫВАТЬ |
208 | LD H,(IX+_ADR_PRG_H) ; взяли список адресов 1 из которых будем вызывать |
208 | JUMP2HL ADD A,A |
209 | JUMP2HL ADD A,A |
209 | ADD A,L |
210 | ADD A,L |
210 | LD L,A |
211 | LD L,A |
211 | ADC A,H |
212 | ADC A,H |
212 | SUB L |
213 | SUB L |
Line 229... | Line 230... | ||
229 | SUB C |
230 | SUB C |
230 | DEC A |
231 | DEC A |
231 | JR JUMP2HL1 |
232 | JR JUMP2HL1 |
232 | 233 | ||
233 | TIMELP CALL PRINTTIME |
234 | TIMELP CALL PRINTTIME |
234 | LD A,0XFA |
235 | LD A,HIGH (MOUSE_KEYS) |
235 | IN A,(0XDF) ;КНОПКИ МЫШИ |
236 | IN A,(LOW (MOUSE_KEYS)) ; кнопки мыши |
236 | CPL |
237 | CPL |
237 | AND 7 |
238 | AND 7 |
238 | JR NZ,TIMELP ;ПОКА НЕ ОТПУСТЯТ |
239 | JR NZ,TIMELP ; пока не отпустят |
239 | RET |
240 | RET |
240 | 241 | ||
241 | CURSOR_UP LD C,(IX+8) |
242 | CURSOR_UP LD C,(IX+_TEK_PKT_L) |
242 | LD B,(IX+9) |
243 | LD B,(IX+_TEK_PKT_H) |
243 | BIT 7,(IX+7) |
244 | BIT B_ADR_PUNKT,(IX+_NUM_PKT) |
244 | JR Z,CURSOR_UP3 |
245 | JR Z,CURSOR_UP3 |
245 | LD L,(IX+8) |
246 | LD L,(IX+_TEK_PKT_L) |
246 | LD H,(IX+9) |
247 | LD H,(IX+_TEK_PKT_H) |
247 | INC HL |
248 | INC HL |
248 | LD C,(HL) |
249 | LD C,(HL) |
249 | INC HL |
250 | INC HL |
250 | LD B,(HL) |
251 | LD B,(HL) |
251 | CURSOR_UP3 LD A,B |
252 | CURSOR_UP3 LD A,B |
252 | OR C |
253 | OR C |
253 | RET Z |
254 | RET Z |
254 | DEC BC |
255 | DEC BC |
255 | BIT 7,(IX+7) |
256 | BIT B_ADR_PUNKT,(IX+_NUM_PKT) |
256 | JR Z,CURSOR_UP2 |
257 | JR Z,CURSOR_UP2 |
257 | LD (HL),B |
258 | LD (HL),B |
258 | DEC HL |
259 | DEC HL |
259 | LD (HL),C |
260 | LD (HL),C |
260 | DEC HL |
261 | DEC HL |
Line 262... | Line 263... | ||
262 | AND A |
263 | AND A |
263 | JR Z,CURSOR_UP1 |
264 | JR Z,CURSOR_UP1 |
264 | DEC (HL) |
265 | DEC (HL) |
265 | RET |
266 | RET |
266 | 267 | ||
267 | CURSOR_UP2 LD (IX+8),C |
268 | CURSOR_UP2 LD (IX+_TEK_PKT_L),C |
268 | LD (IX+9),B |
269 | LD (IX+_TEK_PKT_H),B |
269 | LD A,(IX+7) |
270 | LD A,(IX+_NUM_PKT) |
270 | AND A |
271 | AND A |
271 | JR Z,CURSOR_UP1 |
272 | JR Z,CURSOR_UP1 |
272 | DEC (IX+7) |
273 | DEC (IX+_NUM_PKT) |
273 | RET |
274 | RET |
274 | 275 | ||
275 | CURSOR_UP1 CALL REST2X2 |
276 | CURSOR_UP1 CALL REST2X2 |
276 | CALL RESTORE_CLINE |
277 | CALL RESTORE_CLINE |
277 | CALL SCRDN |
278 | CALL SCRDN |
278 | LD E,(IX+1) |
279 | LD E,(IX+_Y_COORD) |
279 | INC E |
280 | INC E |
280 | DOWN1 LD D,(IX+0) |
281 | DOWN1 LD D,(IX+_X_COORD) |
281 | INC D |
282 | INC D |
282 | INC D |
283 | INC D |
283 | EVOPORT WIN_P3,RAM_TEMP2 |
284 | EVOPORT WIN_P3,RAM_SORTFILES |
284 | LD L,(IX+8) |
285 | LD L,(IX+_TEK_PKT_L) |
285 | LD H,(IX+9) |
286 | LD H,(IX+_TEK_PKT_H) |
286 | BIT 7,(IX+7) |
287 | BIT B_ADR_PUNKT,(IX+_NUM_PKT) |
287 | JR Z,DOWN3 |
288 | JR Z,DOWN3 |
288 | DEC D |
289 | DEC D |
289 | INC HL |
290 | INC HL |
290 | LD A,(HL) |
291 | LD A,(HL) |
291 | INC HL |
292 | INC HL |
Line 301... | Line 302... | ||
301 | ROMCALL POSTF06,ROM_RST83 |
302 | ROMCALL POSTF06,ROM_RST83 |
302 | ROMCALL READ_DIR,ROM_RST83 |
303 | ROMCALL READ_DIR,ROM_RST83 |
303 | LD DE,FILES_EXT |
304 | LD DE,FILES_EXT |
304 | ROMCALL CP_EXT,ROM_RST83 |
305 | ROMCALL CP_EXT,ROM_RST83 |
305 | EX AF,AF' |
306 | EX AF,AF' |
306 | LD BC,0X0B |
307 | LD BC,_DIR_Attr |
307 | ADD HL,BC |
308 | ADD HL,BC |
308 | LD A,(HL) |
309 | LD A,(HL) |
309 | SBC HL,BC |
310 | SBC HL,BC |
310 | AND 0X10 |
311 | AND M_DIR_Directory |
311 | LD A,BLUE<<3+WHITE+BR_INK |
- | |
312 | LD (OUT_NAME_FILE+1),A ;ЕСЛИ ДИРЕКТОРИЯ ТО ЦВЕТ БЕЛЫЙ |
312 | LD A,BLUE << 3 + WHITE + BR_INK ; если директория то цвет белый |
313 | JR NZ,DOWN7 |
313 | JR NZ,DOWN7 |
- | 314 | ; раскраска по заданной таблице |
|
314 | EX AF,AF' |
315 | EX AF,AF' |
315 | LD L,A |
- | |
316 | INC A |
- | |
317 | JR Z,DOWN6 |
- | |
318 | LD A,L |
- | |
319 | DOWN6 LD HL,COLOR_EXT |
316 | LD HL,COLOR_EXT |
320 | ADD A,L |
317 | ADD A,L |
321 | LD L,A |
318 | LD L,A |
322 | ADC A,H |
319 | ADC A,H |
323 | SUB L |
320 | SUB L |
- | 321 | LD H,A |
|
324 | LD A,(HL) |
322 | LD A,(HL) |
325 | ADD A,BLUE<<3+BR_INK |
323 | ADD A,BLUE << 3 + BR_INK |
326 | LD (OUT_NAME_FILE+1),A |
324 | DOWN7 LD (OUT_NAME_FILE+1),A ; установка цвета раскраски |
327 | DOWN7 LD HL,BUF_256 |
325 | LD HL,BUF_MOVE256 |
328 | ROMCALL GET_LONGNAME,ROM_RST83 |
326 | ROMCALL GET_LONGNAME,ROM_RST83 |
329 | POP DE |
327 | POP DE |
330 | CALL FILENAME8_3 |
328 | CALL FILENAME8_3 |
331 | JP SET_ADR_ATR |
329 | JP SET_ADR_ATR |
332 | 330 | ||
333 | CURSOR_DOWN LD L,(IX+0X0A) |
331 | CURSOR_DOWN LD L,(IX+_NUM_KOL_L) |
334 | LD H,(IX+0X0B) ;КОЛИЧЕСТВО ПУНКТОВ |
332 | LD H,(IX+_NUM_KOL_H) ; количество пунктов |
335 | BIT 6,(IX+7) |
333 | BIT B_ADR_NUMS_PUNKT,(IX+_NUM_PKT) |
336 | JR Z,CURSOR_DOWN6 |
334 | JR Z,CURSOR_DOWN6 |
337 | LD L,(IX+8) ;ПОЛУЧЕНИЕ КОЛИЧЕСТВА ПУНКТОВ |
335 | LD L,(IX+_TEK_PKT_L) ; получение количества пунктов |
338 | LD H,(IX+9) ;ИЗ УКАЗАННОГО АДРЕСА |
336 | LD H,(IX+_TEK_PKT_H) ; из указанного адреса |
339 | INC HL |
337 | INC HL |
340 | INC HL |
338 | INC HL |
341 | INC HL |
339 | INC HL |
342 | LD A,(HL) |
340 | LD A,(HL) |
343 | INC HL |
341 | INC HL |
344 | LD H,(HL) |
342 | LD H,(HL) |
345 | LD L,A ;КОЛИЧЕСТВО ПУНКТОВ В ЭТОМ МЕНЮ |
343 | LD L,A ; количество пунктов в этом меню |
346 | CURSOR_DOWN6 LD A,H |
344 | CURSOR_DOWN6 LD A,H |
347 | OR L |
345 | OR L |
348 | RET Z |
346 | RET Z |
349 | BIT 7,(IX+7) |
347 | BIT B_ADR_PUNKT,(IX+_NUM_PKT) |
350 | JR Z,CURSOR_DOWN2 |
348 | JR Z,CURSOR_DOWN2 |
351 | LD E,(IX+8) |
349 | LD E,(IX+_TEK_PKT_L) |
352 | LD D,(IX+9) ;ТЕКУЩИЙ НОМЕР |
350 | LD D,(IX+_TEK_PKT_H) ; текущий номер |
353 | EX DE,HL |
351 | EX DE,HL |
354 | INC HL |
352 | INC HL |
355 | LD C,(HL) |
353 | LD C,(HL) |
356 | INC HL |
354 | INC HL |
357 | LD B,(HL) |
355 | LD B,(HL) |
358 | EX DE,HL |
356 | EX DE,HL |
359 | JR CURSOR_DOWN3 |
357 | JR CURSOR_DOWN3 |
360 | 358 | ||
361 | CURSOR_DOWN2 LD C,(IX+8) |
359 | CURSOR_DOWN2 LD C,(IX+_TEK_PKT_L) |
362 | LD B,(IX+9) |
360 | LD B,(IX+_TEK_PKT_H) |
363 | CURSOR_DOWN3 SCF |
361 | CURSOR_DOWN3 SCF |
364 | SBC HL,BC |
362 | SBC HL,BC |
365 | RET Z |
363 | RET Z |
366 | INC BC |
364 | INC BC |
367 | BIT 7,(IX+7) |
365 | BIT B_ADR_PUNKT,(IX+_NUM_PKT) |
368 | JR Z,CURSOR_DOWN4 |
366 | JR Z,CURSOR_DOWN4 |
369 | EX DE,HL |
367 | EX DE,HL |
370 | LD (HL),B |
368 | LD (HL),B |
371 | DEC HL |
369 | DEC HL |
372 | LD (HL),C |
370 | LD (HL),C |
373 | DEC HL |
371 | DEC HL |
374 | LD A,(IX+2) |
372 | LD A,(IX+_V_SIZE) |
375 | SUB 3 |
373 | SUB 3 |
376 | CP (HL) |
374 | CP (HL) |
377 | JR Z,CURSOR_DOWN1 |
375 | JR Z,CURSOR_DOWN1 |
378 | INC (HL) |
376 | INC (HL) |
379 | RET |
377 | RET |
380 | 378 | ||
381 | CURSOR_DOWN4 LD (IX+8),C |
379 | CURSOR_DOWN4 LD (IX+_TEK_PKT_L),C |
382 | LD (IX+9),B |
380 | LD (IX+_TEK_PKT_H),B |
383 | LD A,(IX+2) |
381 | LD A,(IX+_V_SIZE) |
384 | SUB 3 |
382 | SUB 3 |
385 | CP (IX+7) |
383 | CP (IX+_NUM_PKT) |
386 | JR Z,CURSOR_DOWN1 |
384 | JR Z,CURSOR_DOWN1 |
387 | INC (IX+7) |
385 | INC (IX+_NUM_PKT) |
388 | RET |
386 | RET |
389 | 387 | ||
390 | CURSOR_DOWN1 CALL REST2X2 |
388 | CURSOR_DOWN1 CALL REST2X2 |
391 | CALL RESTORE_CLINE |
389 | CALL RESTORE_CLINE |
392 | CALL SCRUP |
390 | CALL SCRUP |
393 | LD A,(IX+1) |
391 | LD A,(IX+_Y_COORD) |
394 | ADD A,(IX+2) |
392 | ADD A,(IX+_V_SIZE) |
395 | SUB 2 |
393 | SUB 2 |
396 | LD E,A |
394 | LD E,A |
397 | JP DOWN1 |
395 | JP DOWN1 |
398 | 396 | ||
399 | GET_XY LD L,(IX+8) |
397 | GET_XY LD L,(IX+_TEK_PKT_L) |
400 | LD H,(IX+9) ;ТЕКУЩИЙ НОМЕР |
398 | LD H,(IX+_TEK_PKT_H) ; текущий номер |
401 | BIT 7,(IX+7) |
399 | BIT B_ADR_PUNKT,(IX+_NUM_PKT) |
402 | JR Z,GETXY1 |
400 | JR Z,GETXY1 |
403 | ;ПОЛУЧЕНИЕ НОМЕРА ТЕКУЩЕГО ПУНКТА ИЗ УКАЗАТЕЛЯ |
401 | ; получение номера текущего пункта из указателя |
404 | INC HL |
402 | INC HL |
405 | LD E,(HL) |
403 | LD E,(HL) |
406 | INC HL |
404 | INC HL |
407 | LD D,(HL) ;ТЕКУЩИЙ НОМЕР ИЗ УКАЗАННОГО АДРЕСА |
405 | LD D,(HL) ; текущий номер из указанного адреса |
408 | EX DE,HL |
406 | EX DE,HL |
409 | BIT 6,(IX+7) |
407 | BIT B_ADR_NUMS_PUNKT,(IX+_NUM_PKT) |
410 | JR Z,GETXY1 |
408 | JR Z,GETXY1 |
411 | ;ПОЛУЧЕНИЕ КОЛИЧЕСТВА ПУНКТОВ ИЗ УККАЗАТЕЛЯ |
409 | ; получение количества пунктов из укказателя |
412 | EX DE,HL |
410 | EX DE,HL |
413 | INC HL |
411 | INC HL |
414 | LD A,(HL) |
412 | LD A,(HL) |
415 | INC HL |
413 | INC HL |
416 | LD H,(HL) |
414 | LD H,(HL) |
417 | LD L,A ;КОЛИЧЕСТВО ПУНКТОВ ИЗ УКАЗАННОГО АДРЕСА |
415 | LD L,A ; количество пунктов из указанного адреса |
418 | EX DE,HL |
416 | EX DE,HL |
419 | JR GETXY2 |
417 | JR GETXY2 |
420 | 418 | ||
421 | GETXY1 LD E,(IX+0X0A) |
419 | GETXY1 LD E,(IX+_NUM_KOL_L) |
422 | LD D,(IX+0X0B) ;КОЛ-ВО ПУНКТОВ |
420 | LD D,(IX+_NUM_KOL_H) ; кол-во пунктов |
423 | GETXY2 LD A,(IX+2) |
421 | GETXY2 LD A,(IX+_V_SIZE) |
424 | SUB 3 |
422 | SUB 3 |
425 | LD C,A ;КОЛИЧЕСТВО ПУНКТОВ В ВЫСОТЕ ОКНА |
423 | LD C,A ; количество пунктов в высоте окна |
426 | LD B,0 |
424 | LD B,0 |
427 | LD A,D |
425 | LD A,D |
428 | OR E |
426 | OR E |
429 | LD A,C |
427 | LD A,C |
430 | RET |
428 | RET |
431 | 429 | ||
432 | ;ПЕРЕМЕЩЕНИЕ НА СТРАНИЦУ ВВЕРХ |
430 | ; перемещение на страницу вверх |
433 | PAGEUP CALL GET_XY |
431 | PAGEUP CALL GET_XY |
434 | RET Z |
432 | RET Z |
435 | XOR A |
433 | XOR A |
436 | SBC HL,BC |
434 | SBC HL,BC |
437 | EX DE,HL |
435 | EX DE,HL |
438 | JR NC,PDUN0 |
436 | JR NC,PDUN0 |
439 | PDU0 LD D,A |
437 | PDU0 LD D,A |
440 | LD E,A |
438 | LD E,A |
441 | JR PDUN0 |
439 | JR PDUN0 |
442 | 440 | ||
443 | ;ПЕРЕМЕЩЕНИЕ НА СТРАНИЦУ ВНИЗ |
441 | ; перемещение на страницу вниз |
444 | PAGEDN CALL GET_XY |
442 | PAGEDN CALL GET_XY |
445 | RET Z |
443 | RET Z |
446 | EX DE,HL |
444 | EX DE,HL |
447 | AND A |
445 | AND A |
448 | SBC HL,BC |
446 | SBC HL,BC |
Line 459... | Line 457... | ||
459 | ADD HL,DE |
457 | ADD HL,DE |
460 | JR Z,PDUN1 |
458 | JR Z,PDUN1 |
461 | JR NC,PDUN0 |
459 | JR NC,PDUN0 |
462 | PDUN1 EX DE,HL |
460 | PDUN1 EX DE,HL |
463 | DEC DE |
461 | DEC DE |
464 | PDUN0 BIT 7,(IX+7) |
462 | PDUN0 BIT B_ADR_PUNKT,(IX+_NUM_PKT) |
465 | JR Z,PDUN2 |
463 | JR Z,PDUN2 |
466 | LD L,(IX+8) |
464 | LD L,(IX+_TEK_PKT_L) |
467 | LD H,(IX+9) |
465 | LD H,(IX+_TEK_PKT_H) |
468 | LD (HL),A |
466 | LD (HL),A |
469 | INC HL |
467 | INC HL |
470 | LD (HL),E |
468 | LD (HL),E |
471 | INC HL |
469 | INC HL |
472 | LD (HL),D |
470 | LD (HL),D |
473 | JR PDUN3 |
471 | JR PDUN3 |
474 | 472 | ||
475 | PDUN2 LD (IX+7),A |
473 | PDUN2 LD (IX+_NUM_PKT),A |
476 | LD (IX+8),E |
474 | LD (IX+_TEK_PKT_L),E |
477 | LD (IX+9),D |
475 | LD (IX+_TEK_PKT_H),D |
478 | PDUN3 CALL RESTORE_CLINE |
476 | PDUN3 CALL RESTORE_CLINE |
479 | JP OUT_TEK_DIR |
477 | JP OUT_CURR_DIR |
480 | 478 | ||
481 | PRINTTIME DI |
479 | PRINTTIME DI |
482 | LD H,0X0C |
480 | LD H,CMOS.REG_C |
483 | CALL READCMOS |
481 | CALL READCMOS |
484 | AND 0X10 |
482 | AND CMOSREG.M_C_RO_UF |
485 | RET Z ;ЕСЛИ ВРЕМЯ ЕЩЕ НЕ ОБНОВИЛОСЬ, ВЫХОДИМ НИЧЕГО НЕ ВЫВОДЯ |
483 | RET Z ; если время еще не обновилось, выходим ничего не выводя |
486 | LD BC,TXT_TIME ;ЧТЕНИЕ И ПРЕОБРАЗОВАНИЕ ВРЕМЕНИ |
484 | LD BC,TXT_TIME ; чтение и преобразование времени |
487 | LD H,4 |
485 | LD H,CMOS.HOUR |
488 | CALL READCMOS ;ПРОЧИТАЛИ ЧАСЫ |
486 | CALL READCMOS ; прочитали часы |
489 | CALL BYTE2TXT ;СКОНВЕРТИЛИ ЧАСЫ С УКЛАДКОЙ В БУФЕР |
487 | CALL BYTE2TXT ; сконвертили часы с укладкой в буфер |
490 | LD A,(BC) |
488 | LD A,(BC) |
491 | XOR 0X1A ;КОНВЕРСИЯ МИГАЮЩЕГО ДВОЕТОЧИЯ |
489 | XOR ':'-' ' ; конверсия мигающего двоеточия |
492 | LD (BC),A |
490 | LD (BC),A |
493 | INC BC |
491 | INC BC |
494 | LD H,2 |
492 | LD H,CMOS.MINUTE |
495 | CALL READCMOS ;ПРОЧИТАЛИ МИНУТЫ |
493 | CALL READCMOS ; прочитали минуты |
496 | CALL BYTE2TXT ;СКОНВЕРТИЛИ ЧАСЫ С УКЛАДКОЙ В БУФЕР |
494 | CALL BYTE2TXT ; сконвертили часы с укладкой в буфер |
497 | LD A,(BC) |
495 | LD A,(BC) |
498 | XOR ':'-' ' ;КОНВЕРСИЯ МИГАЮЩЕГО ДВОЕТОЧИЯ |
496 | XOR ':'-' ' ; конверсия мигающего двоеточия |
499 | LD (BC),A |
497 | LD (BC),A |
500 | INC BC |
498 | INC BC |
501 | LD H,0 |
499 | LD H,CMOS.SECOND |
502 | CALL READCMOS ;ПРОЧИТАЛИ СЕКУНДЫ |
500 | CALL READCMOS ; прочитали секунды |
503 | CALL BYTE2TXT |
501 | CALL BYTE2TXT |
504 | LD BC,TXT_DATA ;ДАЛЕЕ ЧТЕНИЕ И ПРЕОБРАЗОВАНИЕ ДАТЫ |
502 | LD BC,TXT_DATA ; далее чтение и преобразование даты |
505 | LD H,7 |
503 | LD H,CMOS.DAY_MONTH |
506 | CALL READCMOS |
504 | CALL READCMOS |
507 | CALL BYTE2TXT |
505 | CALL BYTE2TXT |
508 | INC BC |
506 | INC BC |
509 | LD H,8 |
507 | LD H,CMOS.MONTH |
510 | CALL READCMOS |
508 | CALL READCMOS |
511 | CALL BYTE2TXT |
509 | CALL BYTE2TXT |
512 | INC BC |
510 | INC BC |
513 | LD H,9 |
511 | LD H,CMOS.YEAR |
514 | CALL READCMOS |
512 | CALL READCMOS |
515 | CALL BYTE2TXT |
513 | CALL BYTE2TXT |
516 | LD HL,BUFF_TIME ;ПЕЧАТАЕМ ВРЕМЯ ИЗ БУФЕРА |
514 | LD HL,BUFF_TIME ; печатаем время из буфера |
517 | JP ITPRINT_MESSAGE |
515 | JP ITPRINT_MESSAGE |
518 | 516 | ||
519 | ;ПЕРЕВОД "A" В ДЕСЯТИЧКУ И В ТЕКСТ |
517 | ; перевод "A" в десятичку и в текст |
520 | A2TXT PUSH HL |
518 | A2TXT PUSH HL |
521 | LD L,A |
519 | LD L,A |
522 | LD H,0 |
520 | LD H,0 |
523 | LD DE,10 |
521 | LD DE,10 |
524 | XOR A |
522 | XOR A |
525 | DEC A |
523 | DEC A |
526 | INC A |
524 | .L1 INC A |
527 | SBC HL,DE |
525 | SBC HL,DE |
528 | JR NC,$-3 |
526 | JR NC,.L1 |
529 | ADD HL,DE |
527 | ADD HL,DE |
530 | ADD A,"0" |
528 | ADD A,'0' |
531 | LD D,A |
529 | LD D,A |
532 | LD A,L |
530 | LD A,L |
533 | ADD A,"0" |
531 | ADD A,'0' |
534 | POP HL |
532 | POP HL |
535 | LD (HL),D |
533 | LD (HL),D |
536 | INC HL |
534 | INC HL |
537 | LD (HL),A |
535 | LD (HL),A |
538 | INC HL |
536 | INC HL |
539 | RET |
537 | RET |
540 | 538 | ||
541 | BYTE2TXT LD L,A |
539 | BYTE2TXT LD L,A |
542 | LD H,"0" |
540 | LD H,'0' |
543 | RRCA |
541 | RRCA |
544 | RRCA |
542 | RRCA |
545 | RRCA |
543 | RRCA |
546 | RRCA |
544 | RRCA |
547 | AND 0X0F |
545 | AND 0x0F |
548 | ADD A,H |
546 | ADD A,H |
549 | LD (BC),A |
547 | LD (BC),A |
550 | INC BC |
548 | INC BC |
551 | LD A,L |
549 | LD A,L |
552 | AND 0X0F |
550 | AND 0x0F |
553 | ADD A,H |
551 | ADD A,H |
554 | LD (BC),A |
552 | LD (BC),A |
555 | INC BC |
553 | INC BC |
556 | RET |
554 | RET |
557 | 555 | ||
558 | ;ВЫХОД ИЗ MAGIC |
556 | ; выход из MAGIC |
559 | CONTINUE_PROG DI |
557 | CONTINUE_PROG DI |
560 | LD SP,(OLD_STACK) |
558 | LD SP,(OLD_STACK) |
561 | XOR A |
559 | XOR A |
562 | RET |
560 | RET |
563 | 561 | ||
564 | ;ПЕРЕЗАПУСК MAGIC МЕНЮ С ПОЛНОЙ ПЕРЕРИСОВКОЙ ЭКРАНА |
562 | ; перезапуск MAGIC меню с полной перерисовкой экрана |
565 | RESTART_MAIN DI |
563 | RESTART_MAIN DI |
566 | LD SP,(OLD_STACK) |
564 | LD SP,(OLD_STACK) |
567 | LD A,1 |
565 | LD A,1 |
568 | RET |
566 | RET |
569 | 567 | ||
570 | ;ВЫХОД ИЗ ОТЛАДЧИКА |
568 | ; выход из отладчика |
571 | TRACER_DBG DI |
569 | TRACER_DBG DI |
572 | LD SP,(OLD_STACK) |
570 | LD SP,(OLD_STACK) |
573 | LD A,2 |
571 | LD A,2 |
574 | RET |
572 | RET |
575 | 573 | ||
576 | SETUP LD IX,SETUP_MENU |
574 | SETUP LD IX,SETUP_MENU |
577 | CALL ITWINW |
575 | CALL INT_TXT_WINDOW |
578 | JP SET_ADR_ATR |
576 | JP SET_ADR_ATR |
579 | 577 | ||
580 | ;ПЕРЕБОР TURBO РЕЖИМОВ С ЗАПИСЬЮ В CMOS И ИЗМЕНЕНИЕМ ПОСЛЕ ВЫХОДА ИЗ NMI |
578 | ; перебор TURBO режимов с записью в CMOS и изменением после выхода из NMI |
581 | ;0-7MHZ 1-3,5MHZ 2-14,0MHZ |
579 | ; 0-7MHZ 1-3,5MHZ 2-14,0MHZ |
582 | SET_TURBO DI |
580 | SET_TURBO DI |
583 | LD H,CMOS_BYTE_01 |
581 | LD H,CMOS.BYTE_01 |
584 | CALL READCMOS |
582 | CALL READCMOS |
585 | LD E,L ;TURBO AND MEMORY MODE |
583 | LD E,L ; турбо режим и режим памяти |
586 | LD H,CMOS_BYTE_00 |
584 | LD H,CMOS.BYTE_00 |
587 | CALL READCMOS |
585 | CALL READCMOS |
588 | LD D,L ;TURBO 14 |
586 | LD D,L ; TURBO 14.0 |
589 | RLCA |
587 | RLCA |
590 | LD C,A |
588 | LD C,A |
591 | LD A,E |
589 | LD A,E |
592 | RLCA |
590 | RLCA |
593 | LD A,C |
591 | LD A,C |
594 | RLA |
592 | RLA |
595 | AND 3 |
593 | AND 3 |
596 | INC A ;СМЕНИЛИ TURBO РЕЖИМ |
594 | INC A ; сменили TURBO режим |
597 | CP 3 |
595 | CP 3 |
598 | JR C,SETTURBO1 |
596 | JR C,SETTURBO1 |
599 | XOR A ;ЕСЛИ ПЕРЕШЛИ ЧЕРЕЗ 0, ТО ВЫСТАВИЛИ РЕЖИМ 14MHZ |
597 | XOR A ; если перешли через 0, то выставили режим 14.0 |
600 | SETTURBO1 LD C,A |
598 | SETTURBO1 LD C,A |
601 | PUSH BC |
599 | PUSH BC |
602 | AND A |
600 | AND A |
603 | RES 7,E ;TURBO 7 0 |
601 | RES 7,E ; TURBO 7 0 |
604 | RES 7,D ;TURBO 14=7MHZ 0 |
602 | RES 7,D ; TURBO 14=7MHZ 0 |
Line 607... | Line 605... | ||
607 | SET 7,E ;TURBO 7 1 |
605 | SET 7,E ; TURBO 7 1 |
608 | RES 7,D ;TURBO 14=3,5 0 |
606 | RES 7,D ; TURBO 14=3,5 0 |
609 | JR Z,SETTURBO3 |
607 | JR Z,SETTURBO3 |
610 | RES 7,E ;TURBO 7 0 |
608 | RES 7,E ; TURBO 7 0 |
611 | SET 7,D ;TURBO 14=14 1 |
609 | SET 7,D ; TURBO 14=14 1 |
612 | SETTURBO3 LD H,CMOS_BYTE_00 |
610 | SETTURBO3 LD H,CMOS.BYTE_00 |
613 | LD L,D |
611 | LD L,D |
614 | PUSH DE |
612 | PUSH DE |
615 | CALL IWRITECMOS |
613 | CALL IWRITECMOS |
616 | POP DE |
614 | POP DE |
617 | LD H,CMOS_BYTE_01 |
615 | LD H,CMOS.BYTE_01 |
618 | LD L,E |
616 | LD L,E |
619 | CALL IWRITECMOS |
617 | CALL IWRITECMOS |
620 | POP BC |
618 | POP BC |
621 | LD A,C |
619 | LD A,C |
622 | AND A |
620 | AND A |
Line 633... | Line 631... | ||
633 | LD A,(N_EFF7) |
631 | LD A,(N_EFF7) |
634 | AND %11101111 |
632 | AND %11101111 |
635 | OR D |
633 | OR D |
636 | LD (N_EFF7),A |
634 | LD (N_EFF7),A |
637 | SETANDPRINT CALL SETUP4SEL |
635 | SETANDPRINT CALL SETUP4SEL |
638 | LD HL,TXT_SETUPMENU |
636 | LD HL,SETUP_MENU.TXT_SETUPMENU |
639 | JP ITPRINT_MESSAGE |
637 | JP ITPRINT_MESSAGE |
640 | 638 | ||
641 | ;ПЕРЕБОР РЕЖИМОВ ПАМЯТИ С ЗАПИСЬЮ В CMOS И ИЗМЕНЕНИЕМ ПОСЛЕ ВЫХОДА ИЗ NMI |
639 | ; перебор режимов памяти с записью в CMOS и изменением после выхода из NMI |
642 | SET_MEMORY DI |
640 | SET_MEMORY DI |
643 | LD H,CMOS_BYTE_01 |
641 | LD H,CMOS.BYTE_01 |
644 | CALL READCMOS |
642 | CALL READCMOS |
645 | AND 3 |
643 | AND 3 |
646 | INC A |
644 | INC A |
647 | CP 3 |
645 | CP 3 |
648 | JR C,SETMEMORY1 |
646 | JR C,SETMEMORY1 |
Line 653... | Line 651... | ||
653 | OR C |
651 | OR C |
654 | LD L,A |
652 | LD L,A |
655 | CALL IWRITECMOS |
653 | CALL IWRITECMOS |
656 | JR SETANDPRINT |
654 | JR SETANDPRINT |
657 | 655 | ||
658 | ;ВКЛЮЧЕНИЕ/ВЫКЛЮЧЕНИЕ РЕЗИДЕНТА HONEY COMANDER |
656 | ; включение/выключение резидента HONEY COMANDER |
659 | SET_REZIDENT DI |
657 | SET_REZIDENT DI |
660 | LD H,CMOS_BYTE_01 |
658 | LD H,CMOS.BYTE_01 |
661 | CALL READCMOS |
659 | CALL READCMOS |
662 | XOR M_REZIDENT |
660 | XOR CMOS_EC.M_REZIDENT |
663 | LD L,A |
661 | LD L,A |
664 | CALL IWRITECMOS |
662 | CALL IWRITECMOS |
665 | JR SETANDPRINT |
663 | JR SETANDPRINT |
666 | 664 | ||
667 | KILL_REZID DI |
665 | KILL_REZID DI |
668 | LD H,CMOS_BYTE_03 |
666 | LD H,CMOS.BYTE_03 |
669 | CALL READCMOS |
667 | CALL READCMOS |
670 | XOR M_KILL_REZIDENT |
668 | XOR CMOS_E9.M_KILL_REZIDENT |
671 | LD L,A |
669 | LD L,A |
672 | CALL IWRITECMOS |
670 | CALL IWRITECMOS |
673 | JR SETANDPRINT |
671 | JR SETANDPRINT |
674 | 672 | ||
675 | ;ИЗМЕНЕНИЕ ТЕКСТА В МЕНЮ |
673 | ; изменение текста в меню |
676 | SETUP4SEL DI |
674 | SETUP4SEL DI |
677 | LD H,CMOS_BYTE_01 |
675 | LD H,CMOS.BYTE_01 |
678 | CALL READCMOS |
676 | CALL READCMOS |
679 | LD E,L ;TURBO AND MEMORY MODE |
677 | LD E,L ; турбо режим и режим памяти |
680 | LD H,CMOS_BYTE_00 |
678 | LD H,CMOS.BYTE_00 |
681 | CALL READCMOS |
679 | CALL READCMOS |
682 | LD D,L ;TURBO 14 |
680 | LD D,L ; TURBO 14.0 |
683 | RLCA |
681 | RLCA |
684 | LD C,A |
682 | LD C,A |
685 | LD A,E |
683 | LD A,E |
686 | RLCA |
684 | RLCA |
687 | LD A,C |
685 | LD A,C |
Line 695... | Line 693... | ||
695 | LD HL,TXT_TURBO |
693 | LD HL,TXT_TURBO |
696 | LD C,A |
694 | LD C,A |
697 | LD B,0 |
695 | LD B,0 |
698 | ADD HL,BC |
696 | ADD HL,BC |
699 | PUSH DE |
697 | PUSH DE |
700 | LD DE,TURBO_MODE |
698 | LD DE,TXT_TURBO_MODE |
701 | LDI |
699 | LDI |
702 | LDI |
700 | LDI |
703 | LDI |
701 | LDI |
704 | LDI |
702 | LDI |
705 | EX DE,HL |
703 | EX DE,HL |
Line 712... | Line 710... | ||
712 | LD B,0 |
710 | LD B,0 |
713 | LD HL,TXT_MEMORY |
711 | LD HL,TXT_MEMORY |
714 | ADD HL,BC |
712 | ADD HL,BC |
715 | ADD HL,BC |
713 | ADD HL,BC |
716 | ADD HL,BC |
714 | ADD HL,BC |
717 | LD DE,MEMORY_MODE |
715 | LD DE,TXT_MEMORY_MODE |
718 | LDI |
716 | LDI |
719 | LDI |
717 | LDI |
720 | LDI |
718 | LDI |
721 | EX DE,HL |
719 | EX DE,HL |
722 | LD (HL),2 |
720 | LD (HL),2 |
723 | POP DE |
721 | POP DE |
724 | ;ДЛЯ РЕЗИДЕНТА HONEY COMANDER |
722 | ; для резидента HONEY COMANDER |
725 | LD A,E |
723 | LD A,E |
726 | AND M_REZIDENT |
724 | AND CMOS_EC.M_REZIDENT |
727 | LD HL,TXT_ONOFF |
725 | LD HL,TXT_ONOFF |
728 | JR NZ,.ON |
726 | JR NZ,.ON |
729 | LD HL,TXT_ONOFF+3 |
727 | LD HL,TXT_ONOFF+3 |
730 | .ON LD DE,REZIDENT_MODE |
728 | .ON LD DE,TXT_REZIDENT_MODE |
731 | LDI |
729 | LDI |
732 | LDI |
730 | LDI |
733 | LDI |
731 | LDI |
734 | EX DE,HL |
732 | EX DE,HL |
735 | LD (HL),2 |
733 | LD (HL),2 |
736 | LD H,CMOS_BYTE_03 |
734 | LD H,CMOS.BYTE_03 |
737 | CALL READCMOS |
735 | CALL READCMOS |
738 | AND M_KILL_REZIDENT |
736 | AND CMOS_E9.M_KILL_REZIDENT |
739 | LD HL,TXT_ONOFF |
737 | LD HL,TXT_ONOFF |
740 | JR NZ,.ON1 |
738 | JR NZ,.ON1 |
741 | LD HL,TXT_ONOFF+3 |
739 | LD HL,TXT_ONOFF+3 |
742 | .ON1 LD DE,TXT_KILLREZID |
740 | .ON1 LD DE,TXT_KILLREZID |
743 | LDI |
741 | LDI |
Line 745... | Line 743... | ||
745 | LDI |
743 | LDI |
746 | EX DE,HL |
744 | EX DE,HL |
747 | LD (HL),2 |
745 | LD (HL),2 |
748 | RET |
746 | RET |
749 | 747 | ||
750 | ;ОЖИДАНИЕ НАЖАТИЯ И ОТПУСКАНИЯ ЛЮБОЙ КЛАВИШИ |
748 | ; ожидание нажатия и отпускания любой клавиши |
751 | ANY_KEYS XOR A |
749 | ANY_KEYS XOR A |
752 | IN A,(0XFE) |
750 | IN A,(0xFE) |
753 | CPL |
751 | CPL |
754 | AND 0X1F |
752 | AND 0x1F |
755 | JR Z,ANY_KEYS |
753 | JR Z,ANY_KEYS |
756 | ANYKEYS1 XOR A |
754 | ANYKEYS1 XOR A |
757 | IN A,(0XFE) |
755 | IN A,(0xFE) |
758 | CPL |
756 | CPL |
759 | AND 0X1F |
757 | AND 0x1F |
760 | JR NZ,ANYKEYS1 |
758 | JR NZ,ANYKEYS1 |
761 | RET |
759 | RET |