2 ;; requires: WinSys, WinArrow, WinStick, WinMouse, WinInput
5 lastSelectedItem: db #ff
7 lastItemSA: dw 0 ; last inverted item's screen address
13 __TEST_INTR_TIME__ EQU 0
16 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
17 ;; ÉÎ×ÅÒÔÉÒÕÅÍ ÐÕÎËÔ ÍÅÎÀÈÉ
19 ;; hl: pointer to item data (curItemSA, curItemWdt)
21 ;; af', af, bc, de, hl: destroyed
54 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
55 ;; calc address for the given item
58 ;; hl: pointer to item data (curItemSA, curItemWdt)
106 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
111 ;; a: selected item or #ff
112 ;; af,bc,de,hl: destroyed
118 ld d,0 ; item counter
136 jr c,.next ; if x < menu_x: continue
138 jr nc,.next ; if x >= menu_x+menu_width: continue
139 ; selected item found
142 ld (lastSelectedItem),a
145 ; advance to the next item
147 ; increase item counter
152 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
153 ;; check if arrow is inside window
155 ;; carry: =1 if outsize
182 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
183 ;; ÎÁÍÁÌÀÅÍ ÓÔÒÅÌÏÞËÕ. ÐÒÅÄÙÄÕÝÅŠţ ÓÏÓÔÏÑÎÉÅ ÐÏÆÉÇÕ
184 ;; ÄÅÌÁÅÍ halt, ÓÏÓÔÏÑÎÉÅ ÐÒÅÒÙ×ÁÎÉÊ -- ÐÏÆÉÇÕ, ×ÏÓÓÔÁÎÏ×ÉÍ
186 ;; af,af',bc,de,hl,bc',de',hl': ÄÏÈÌÙÅ
188 call WinMouse.Scan ; ÜÔÏ ÞÔÏÂÙ ÍÙÛØ ÎÅ ÅÌÏÚÉÌÁÓØ
189 ld hl,(WinArrow.curX)
190 ld (WinArrow.newX),hl
194 tmpItemSA: dw 0 ; current item's screen address
197 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
199 ;; af,af',bc,de,hl,bc',de': destroyed
201 ld bc,(WinArrow.newX)
202 ld hl,(WinArrow.curX)
205 jr nz,ForcedRedrawArrow
210 ld bc,(WinArrow.newX)
216 IFX __TEST_INTR_TIME__
225 ld hl,(WinArrow.newX)
226 ld (WinArrow.curX),hl
228 IFX __TEST_INTR_TIME__
239 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
240 ;; redraw arrow from interrupt handler
242 ;; af,af',bc,de,hl,bc',de': destroyed
245 ld (redrawArrowHalt),a
248 ld (redrawArrowHalt),a
252 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
253 ;; ÓÐÒÑÞÅÍ ÓÔÒÅÌÏÞËÕ. ÐÒÅÄÙÄÕÝÅŠţ ÓÏÓÔÏÑÎÉÅ ÐÏÆÉÇÕ
255 ;; af',bc,de,hl: ÄÏÈÌÙÅ
267 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
268 ;; ÐÒÏÉÎÉÔÉÍ ÍÅÎÀÈÕ, ÐÏÄÓ×ÅÔÉÍ ÎÕÖÎÙÊ ÐÕÎËÔ, ÚÁÄ×ÉÎÅÍ ÎÁ ÎÅÇÏ ÓÔÒÅÌËÕ
270 ;; hl: ptr to "menu info" (can be 0)
271 ;; a: item to set cursor on (#ff: none)
273 ;; af,af',bc,de,hl,bc',de': destroyed
284 ld (lastSelectedItem),a
287 ; set arrow to item a
315 ld (WinArrow.curX),de
324 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
325 ;; ÏÄÉÎ ÃÉËÌ "ÍÅÎÀÈÉ"
327 ;; a: menu item number/#ff (carry set); dirt (carry reset)
328 ;; carry flag: fire pressed on an item or outside the window
329 ;; carry reset: fire not pressed or not an any item
330 ;; f,af',bc,de,hl,bc',de',hl': destroyed
334 call WinInput.StickMoves
337 ret z ; return if no stick events
341 ld a,(WinInput.joystate)
343 ret nc ; return if fire isn't pressed
346 ld a,(lastSelectedItem)
350 ; the arrow is outside the window
352 ld (lastSelectedItem),a
357 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
358 ;; ÂÅÇÁÅÍ ÐÏ ÍÅÎÀÈÅ, ÖÄ£Í "fire"
360 ;; a: selected item (or #ff ÅÖÅÌÉ ×ÎÅ ÏËÏÛËÁ)
361 ;; f,af',bc,de,hl,bc',de',hl': destroyed
368 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
369 ;; ÓÐÒÑÞÅÍ ÓÔÒÅÌÏÞËÕ. ÐÒÅÄÙÄÕÝÅŠţ ÓÏÓÔÏÑÎÉÅ ÐÏÆÉÇÕ
370 ;; ÖÄ£Í, ÐÏËÁ ÀÚ×ÅÒØ ÏÔÐÕÓÔÉÔ "fire"
372 ;; af',bc,de,hl: ÄÏÈÌÙÅ
377 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
378 ;; ÖÄ£Í, ÐÏËÁ ÀÚ×ÅÒØ ÏÔÐÕÓÔÉÔ "fire"
384 call WinMouse.ScanButtons
385 ; ÅÓÌÉ ÍÙÛËÉ ÎÅÔ, ÔÏ ÂÉÔ 0 ÓÂÒÏÛÅÎ, ÉÎÁÞÅ ÕÓÔÁÎÏ×ÌÅÎ ÐÒÉ ÎÁÖÁÔÏÊ ËÎÏÐËÅ
388 call WinInput.SticksInput
395 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
396 ;; ÖÄ£Í, ÐÏËÁ ÀÚ×ÅÒØ ÎÁÄÁ×ÉÔ "fire"
402 call WinMouse.ScanButtons
403 ; ÅÓÌÉ ÍÙÛËÉ ÎÅÔ, ÔÏ ÂÉÔ 0 ÓÂÒÏÛÅÎ, ÉÎÁÞÅ ÕÓÔÁÎÏ×ÌÅÎ ÐÒÉ ÎÁÖÁÔÏÊ ËÎÏÐËÅ
406 call WinInput.SticksInput
414 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
415 ;; ÕÓÔÁÎÏ×ÉÔØ ÎÏ×ÙÅ ËÏÏÒÄÉÎÁÔÙ ÓÔÒÅÌÏÞËÉ, ÐÏÄÓ×ÅÔÉÔØ ÍÅÎÀ, ÅÓÌÉ ÎÁÄÏ
416 ;; ÅÓÌÉ ÒÉÓÕÅÍ ÓÔÒÅÌÏÞËÕ, ÔÏ ÄÅÌÁÅÍ É halt
417 ;; ÓÏÓÔÏÑÎÉÅ ÐÒÅÒÙ×ÁÎÉÊ -- ÐÏÆÉÇÕ, ×ÏÓÓÔÁÎÏ×ÉÍ
421 ;; carry flag set: draw arrow
423 ;; af,af',bc,de,hl,bc',de',hl': ÄÏÈÌÙÅ
425 ld (WinArrow.curX),de
427 ; ÄÁÌØÛÅ ÓÍÅÌÏ ÉÄ£Í ÎÁ ShowArrow
430 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
431 ;; ÕÓÔÁÎÏ×ÉÍ ÎÏ×ÙÊ ÓÐÒÁÊÔ ÓÔÒÅÌÏÞËÉ
432 ;; ÅÓÌÉ ÒÉÓÕÅÍ ÓÔÒÅÌÏÞËÕ, ÔÏ ÄÅÌÁÅÍ É halt
433 ;; ÓÏÓÔÏÑÎÉÅ ÐÒÅÒÙ×ÁÎÉÊ -- ÐÏÆÉÇÕ, ×ÏÓÓÔÁÎÏ×ÉÍ
435 ;; hl: ptr to arrow sprite
436 ;; carry flag set: draw arrow
438 ;; af,af',bc,de,hl,bc',de',hl': ÄÏÈÌÙÅ
440 ld (WinArrow.sprAddr),hl
445 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
451 ;; hl: word in table at given index (or 00 for #ff)
452 ;; zero flag: set if hl is zero
476 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;