Prev: 58642 Up: Map Next: 58800
58684: Handler: Cursor Movement
Handler_CursorMovement 58684 CALL FetchTileObject Call FetchTileObject.
58687 LD A,(55340) Write *DestinationCursor_Y_Position to *StorageCursor_Y_Position.
58690 LD (55344),A
58693 LD A,(55341) Write *DestinationCursor_X_Position to *StorageCursor_X_Position.
58696 LD (55345),A
58699 LD A,R A=the contents of the Memory Refresh Register.
58701 RLCA Multiply A by 2 and store the result in L.
58702 LD L,A
58703 LD H,0 H=0.
58705 LD B,70 Set a counter in B for the first outer loop.
58707 LD D,5 Set a counter in D for the first inner loop.
CursorMovement_SoundLoop_01 58709 LD A,(HL) Fetch a byte from the ZX Spectrum ROM and store it in A.
58710 AND %00011000 Keep only bits 3-4.
58712 OR %00000101 Set bits 0, 2.
58714 OUT (254),A Send to the speaker.
58716 INC HL Increment the ROM pointer by one.
58717 PUSH BC Stash the outer loop counter on the stack.
58718 LD B,D Set B to the inner loop counter held by D.
CursorMovement_DelayLoop_01 58719 DJNZ CursorMovement_DelayLoop_01 Decrease the inner loop counter by one and loop back to CursorMovement_DelayLoop_01 until the counter is zero.
58721 POP BC Restore the outer loop counter from the stack.
58722 DJNZ CursorMovement_SoundLoop_01 Decrease the outer loop counter by one and loop back to CursorMovement_SoundLoop_01 until the counter is zero.
58724 HALT Halt operation (suspend CPU until the next interrupt).
Update the cursor position.
58725 LD A,(55340) Jump to Handler_CursorMovement_1 if *DestinationCursor_Y_Position is equal to *CurrentCursor_Y_Position.
58728 LD HL,55342
58731 CP (HL)
58732 JR Z,Handler_CursorMovement_1
58734 JP P,Handler_CursorMovement_0 Jump to Handler_CursorMovement_0 if *DestinationCursor_Y_Position is greater than or equal to *CurrentCursor_Y_Position.
58737 DEC (HL) Decrease *CurrentCursor_Y_Position by one.
58738 JR Handler_CursorMovement_1 Jump to Handler_CursorMovement_1.
Handler_CursorMovement_0 58740 INC (HL) Increment *HL by one.
Handler_CursorMovement_1 58741 LD A,(55341) Jump to Handler_CursorMovement_3 if *DestinationCursor_X_Position is equal to *CurrentCursor_X_Position.
58744 LD HL,55343
58747 CP (HL)
58748 JR Z,Handler_CursorMovement_3
58750 JP P,Handler_CursorMovement_2 Jump to Handler_CursorMovement_2 if *DestinationCursor_X_Position is greater than or equal to *CurrentCursor_X_Position.
58753 DEC (HL) Decrease *CurrentCursor_X_Position by one.
58754 JR Handler_CursorMovement_3 Jump to Handler_CursorMovement_3.
Handler_CursorMovement_2 58756 INC (HL) Increment *HL by one.
Handler_CursorMovement_3 58757 LD A,(55342) Jump to Handler_CursorMovement if *CurrentCursor_Y_Position is not equal to *DestinationCursor_Y_Position.
58760 LD HL,55340
58763 CP (HL)
58764 JR NZ,Handler_CursorMovement
58766 LD A,(55343) Jump to Handler_CursorMovement if *CurrentCursor_X_Position is not equal to *DestinationCursor_X_Position.
58769 LD HL,55341
58772 CP (HL)
58773 JR NZ,Handler_CursorMovement
The final sound effect when the cursor reaches its destination.
58775 LD A,R Set the lower byte in L, which for randomness is the contents of the Memory Refresh Register.
58777 LD L,A
58778 LD H,10 Set the upper byte of the sound data address (0A00-0AFF).
58780 LD B,35 Set a counter in B for the second outer loop.
58782 LD C,100 Set a counter in C for the second inner loop.
CursorMovement_SoundLoop_02 58784 LD A,(HL) Fetch a byte from the ZX Spectrum ROM and store it in A.
58785 INC HL Increment the ROM pointer by one.
58786 AND %00011000 Keep only bits 3-4.
58788 OR %00000101 Set bits 0, 2.
58790 OUT (254),A Send to the speaker.
58792 PUSH BC Stash the outer loop counter on the stack.
58793 LD B,C Set B to the inner loop counter held by C.
CursorMovement_DelayLoop_02 58794 DJNZ CursorMovement_DelayLoop_02 Decrease the inner loop counter by one and loop back to CursorMovement_DelayLoop_02 until counter is zero.
58796 POP BC Restore the outer loop counter from the stack.
58797 DJNZ CursorMovement_SoundLoop_02 Decrease the outer loop counter by one and loop back to CursorMovement_SoundLoop_02 until the counter is zero.
58799 RET Return.
Prev: 58642 Up: Map Next: 58800