Elite on the BBC Micro and NES

# Moving: MVEIT (Part 3 of 9)

## [BBC Micro cassette version]

```       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

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

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
```