Skip to navigation

Elite on the BBC Micro and NES

Moving: MVEIT (Part 3 of 9)

[NES version, Bank 0]

Name: MVEIT (Part 3 of 9) [Show more] Type: Subroutine Category: Moving Summary: Move current ship: Move ship forward according to its speed
Context: See this subroutine in context in the source code References: No direct references to this subroutine in this source file

This routine has multiple stages. This stage does the following: * Move the ship forward (along the vector pointing in the direction of travel) according to its speed: (x, y, z) += nosev_hi * speed / 64
SETUP_PPU_FOR_ICON_BAR ; If the PPU has started drawing the icon bar, configure ; the PPU to use nametable 0 and pattern table 0 LDA INWK+27 ; Set Q = the ship's speed byte #27 * 4 ASL A ASL A STA Q LDA INWK+10 ; Set A = |nosev_x_hi| AND #%01111111 JSR FMLTU ; Set R = A * Q / 256 STA R ; = |nosev_x_hi| * speed / 64 LDA INWK+10 ; If nosev_x_hi is positive, then: LDX #0 ; JSR MVT1-2 ; (x_sign x_hi x_lo) = (x_sign x_hi x_lo) + R ; ; If nosev_x_hi is negative, then: ; ; (x_sign x_hi x_lo) = (x_sign x_hi x_lo) - R ; ; So in effect, this does: ; ; (x_sign x_hi x_lo) += nosev_x_hi * speed / 64 LDA INWK+12 ; Set A = |nosev_y_hi| AND #%01111111 JSR FMLTU ; Set R = A * Q / 256 STA R ; = |nosev_y_hi| * speed / 64 LDA INWK+12 ; If nosev_y_hi is positive, then: LDX #3 ; JSR MVT1-2 ; (y_sign y_hi y_lo) = (y_sign y_hi y_lo) + R ; ; If nosev_y_hi is negative, then: ; ; (y_sign y_hi y_lo) = (y_sign y_hi y_lo) - R ; ; So in effect, this does: ; ; (y_sign y_hi y_lo) += nosev_y_hi * speed / 64 LDA INWK+14 ; Set A = |nosev_z_hi| AND #%01111111 JSR FMLTU ; Set R = A * Q / 256 STA R ; = |nosev_z_hi| * speed / 64 SETUP_PPU_FOR_ICON_BAR ; If the PPU has started drawing the icon bar, configure ; the PPU to use nametable 0 and pattern table 0 LDA INWK+14 ; If nosev_y_hi is positive, then: LDX #6 ; JSR MVT1-2 ; (z_sign z_hi z_lo) = (z_sign z_hi z_lo) + R ; ; If nosev_z_hi is negative, then: ; ; (z_sign z_hi z_lo) = (z_sign z_hi z_lo) - R ; ; So in effect, this does: ; ; (z_sign z_hi z_lo) += nosev_z_hi * speed / 64