📄 ui_slider.lst
字号:
\ 0323 FD9E09 SBC A,(IY+9)
\ 0326 ?0100:
\ 0326 77 LD (HL),A
164 value_changed = TRUE;
165 need_draw = TRUE;
\ 0327 DD36F601 LD (IX-10),1
\ 032B ?0105:
\ 032B DD36F701 LD (IX-9),1
\ 032F ?0040:
166 }
167
168 break;
\ 032F 1850 JR ?0056
\ 0331 ?0041:
169
170 //hold 用来控制加速开关
171 case AP_KEY_NEXT | AP_KEY_HOLD:
172 case AP_KEY_VOLADD | AP_KEY_HOLD:
173 if(hold_state == 0) hold_state = 1;
\ 0331 AF XOR A
\ 0332 DDB6F5 OR (IX-11)
\ 0335 204A JR NZ,?0056
\ 0337 ?0042:
\ 0337 DD36F501 LD (IX-11),1
\ 033B ?0043:
174
175 break;
\ 033B 1844 JR ?0056
\ 033D ?0044:
176
177
178 case AP_KEY_PREV | AP_KEY_HOLD:
179 case AP_KEY_VOLSUB | AP_KEY_HOLD:
180 if(hold_state == 0) hold_state = 2;
\ 033D AF XOR A
\ 033E DDB6F5 OR (IX-11)
\ 0341 203E JR NZ,?0056
\ 0343 ?0045:
\ 0343 DD36F502 LD (IX-11),2
\ 0347 ?0046:
181
182 break;
\ 0347 1838 JR ?0056
\ 0349 ?0047:
183
184
185 case AP_KEY_NEXT | AP_KEY_UP:
186 case AP_KEY_VOLADD | AP_KEY_UP:
187 case AP_KEY_PREV | AP_KEY_UP:
188 case AP_KEY_VOLSUB | AP_KEY_UP:
189 hold_state = 0;
\ 0349 DD36F500 LD (IX-11),0
190
191 break;
\ 034D 1832 JR ?0056
\ 034F ?0048:
192
193
194 case AP_KEY_MODE | AP_KEY_UP:
195 case AP_KEY_PLAY | AP_KEY_UP:
196 return 0; //ok and return
\ 034F 1818 JR ?0093
197
198
199 case AP_MSG_WAIT_TIMEOUT:
\ 0351 1824 JR ?0082
\ 0353 ?0049:
200 if(ui_auto_select) return 0;
\ 0353 3A0000 LD A,(ui_auto_select)
\ 0356 B7 OR A
\ 0357 2828 JR Z,?0056
\ 0359 ?0050:
\ 0359 180E JR ?0093
201
202 break;
\ 035B 181A JR ?0082
\ 035D ?0051:
\ 035D 1822 JR ?0056
\ 035F ?0052:
203
204
205 default:
206 key = ap_handle_hotkey(key);
\ 035F CD0000 CALL LWRD ap_handle_hotkey
\ 0362 DD77F4 LD (IX-12),A
207 if(key == RESULT_REDRAW) //need_draw = TRUE;
\ 0365 FE32 CP 50
\ 0367 2005 JR NZ,?0054
\ 0369 ?0053:
208 {
209 //直接退出,因为控件不能重画背景
210 return 0;
\ 0369 ?0093:
\ 0369 210000 LD HL,0
211 }
\ 036C 1809 JR ?0082
\ 036E ?0054:
212 else if(key != 0) return key;
\ 036E AF XOR A
\ 036F DDB6F4 OR (IX-12)
\ 0372 280D JR Z,?0056
\ 0374 ?0055:
\ 0374 6F LD L,A
\ 0375 2600 LD H,0
213 }
\ 0377 ?0082:
\ 0377 DDF9 LD SP,IX
\ 0379 DDE1 POP IX
\ 037B FDE1 POP IY
\ 037D C1 POP BC
\ 037E C30000 JP LWRD ?BANK_FAST_LEAVE_L08
\ 0381 ?0056:
\ 0381 ?0034:
214
215
216 //check if holding
217 if(hold_state == 1) //holding up
\ 0381 DD46F5 LD B,(IX-11)
\ 0384 05 DEC B
\ 0385 2058 JR NZ,?0058
\ 0387 ?0057:
218 {
219 if((slider->value + slider->step) <= slider->max)
\ 0387 FD6E08 LD L,(IY+8)
\ 038A FD6609 LD H,(IY+9)
\ 038D FD4E06 LD C,(IY+6)
\ 0390 FD4607 LD B,(IY+7)
\ 0393 09 ADD HL,BC
\ 0394 4D LD C,L
\ 0395 44 LD B,H
\ 0396 FD6E04 LD L,(IY+4)
\ 0399 FD6605 LD H,(IY+5)
\ 039C F680 OR 128
\ 039E ED42 SBC HL,BC
\ 03A0 E2A403 JP PO,?0088
\ 03A3 AC XOR H
\ 03A4 ?0088:
\ 03A4 FA3A04 JP M,?0071
\ 03A7 ?0059:
220 {
221 slider->value += slider->step;
\ 03A7 210600 LD HL,6
\ 03AA FDE5 PUSH IY
\ 03AC C1 POP BC
\ 03AD 09 ADD HL,BC
\ 03AE 7E LD A,(HL)
\ 03AF FD8608 ADD A,(IY+8)
\ 03B2 77 LD (HL),A
\ 03B3 23 INC HL
\ 03B4 7E LD A,(HL)
\ 03B5 FD8E09 ADC A,(IY+9)
\ 03B8 77 LD (HL),A
222 value_changed = TRUE;
223 need_draw = TRUE;
\ 03B9 DD36F601 LD (IX-10),1
\ 03BD DD36F701 LD (IX-9),1
\ 03C1 ?0062:
224
225 while(key != NULL)
\ 03C1 AF XOR A
\ 03C2 DDB6F4 OR (IX-12)
\ 03C5 2877 JR Z,?0077
\ 03C7 ?0063:
226 {
227 if((key & AP_KEY_UP) != NULL)
\ 03C7 DDCBF46E BIT 5,(IX-12)
\ 03CB 2804 JR Z,?0065
\ 03CD ?0064:
228 hold_state = 0;
\ 03CD DD36F500 LD (IX-11),0
\ 03D1 ?0065:
229 key = ap_get_message();
\ 03D1 CD0000 CALL LWRD ap_get_message
\ 03D4 DD77F4 LD (IX-12),A
230 }
231 }
\ 03D7 18E8 JR ?0062
\ 03D9 ?0061:
\ 03D9 1863 JR ?0077
\ 03DB ?0060:
232 else hold_state = 0; //disable holding
\ 03DB 185D JR ?0071
\ 03DD ?0066:
\ 03DD 185F JR ?0077
\ 03DF ?0058:
233 }
234 else if(hold_state == 2) //holding down
\ 03DF DD46F5 LD B,(IX-11)
\ 03E2 05 DEC B
\ 03E3 05 DEC B
\ 03E4 2058 JR NZ,?0077
\ 03E6 ?0068:
235 {
236 if((slider->value - slider->step) >= slider->min)
\ 03E6 FD4E02 LD C,(IY+2)
\ 03E9 FD4603 LD B,(IY+3)
\ 03EC FD5E08 LD E,(IY+8)
\ 03EF FD5609 LD D,(IY+9)
\ 03F2 FD6E06 LD L,(IY+6)
\ 03F5 FD6607 LD H,(IY+7)
\ 03F8 A7 AND A
\ 03F9 ED52 SBC HL,DE
\ 03FB F680 OR 128
\ 03FD ED42 SBC HL,BC
\ 03FF E20304 JP PO,?0089
\ 0402 AC XOR H
\ 0403 ?0089:
\ 0403 FA3A04 JP M,?0071
\ 0406 ?0070:
237 {
238 slider->value -= slider->step;
\ 0406 210600 LD HL,6
\ 0409 FDE5 PUSH IY
\ 040B C1 POP BC
\ 040C 09 ADD HL,BC
\ 040D 7E LD A,(HL)
\ 040E FD9608 SUB (IY+8)
\ 0411 77 LD (HL),A
\ 0412 23 INC HL
\ 0413 7E LD A,(HL)
\ 0414 FD9E09 SBC A,(IY+9)
\ 0417 77 LD (HL),A
239 value_changed = TRUE;
240 need_draw = TRUE;
\ 0418 DD36F601 LD (IX-10),1
\ 041C DD36F701 LD (IX-9),1
\ 0420 ?0073:
241
242 while(key != NULL)
\ 0420 AF XOR A
\ 0421 DDB6F4 OR (IX-12)
\ 0424 2818 JR Z,?0077
\ 0426 ?0074:
243 {
244 if((key & AP_KEY_UP) != NULL)
\ 0426 DDCBF46E BIT 5,(IX-12)
\ 042A 2804 JR Z,?0076
\ 042C ?0075:
245 hold_state = 0;
\ 042C DD36F500 LD (IX-11),0
\ 0430 ?0076:
246 key = ap_get_message();
\ 0430 CD0000 CALL LWRD ap_get_message
\ 0433 DD77F4 LD (IX-12),A
247 }
248 }
\ 0436 18E8 JR ?0073
\ 0438 ?0072:
\ 0438 1804 JR ?0077
\ 043A ?0071:
249 else hold_state = 0; //disable holding
\ 043A DD36F500 LD (IX-11),0
\ 043E ?0077:
\ 043E ?0069:
\ 043E ?0067:
250 }
251
252 //handle callback
253 if(callback != NULL && value_changed)
\ 043E DD7E0A LD A,(IX+10)
\ 0441 DDB60B OR (IX+11)
\ 0444 DDB60C OR (IX+12)
\ 0447 CA3401 JP Z,?0021
\ 044A AF XOR A
\ 044B DDB6F6 OR (IX-10)
\ 044E CA3401 JP Z,?0021
\ 0451 ?0081:
\ 0451 ?0080:
\ 0451 ?0078:
254 {
255 callback(slider->value);
\ 0451 FD5E06 LD E,(IY+6)
\ 0454 FD5607 LD D,(IY+7)
\ 0457 DD7E0C LD A,(IX+12)
\ 045A DD6E0A LD L,(IX+10)
\ 045D DD660B LD H,(IX+11)
\ 0460 CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
256 value_changed = FALSE;
\ 0463 DD36F600 LD (IX-10),0
\ 0467 ?0079:
257 }
258
259 }//while(1)
260 }
\ 0467 C33401 JP LWRD ?0021
\ 046A ?0112:
\ 046A 1600 LD D,0
\ 046C ?0111:
\ 046C 210900 LD HL,9
\ 046F 19 ADD HL,DE
\ 0470 EB EX DE,HL
\ 0471 ?0110:
\ 0471 3E00 LD A,BYTE3 main_ResShowPic
\ 0473 210000 LD HL,LWRD main_ResShowPic
\ 0476 C30000 JP LWRD ?BANK_CALL_DIRECT_L08
261
262
\ 0000 RSEG CONST
\ 0000 ?0019:
\ 0000 2C DEFB ','
\ 0001 10 DEFB 16
\ 0002 28 DEFB '('
\ 0003 10 DEFB 16
\ 0004 END
Errors: none
Warnings: none
Code size: 1145
Constant size: 4
Static variable size: Data(0) Iram(0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -