```;---------------------------------------------------------------;
;                                                               ;
; Snail Maze                                                    ;
; Movement routines                                             ;
;                                                               ;
;---------------------------------------------------------------;

;------------------------------------------------
; moveUp - try to move up
;   input:  none
;   output: none
;------------------------------------------------
moveUp:
ld      hl,(sy)
ld      de,(sx)
call    getTile                         ; A = tile # that snail is currently on
bit     0,a                             ; is it 1 or 3?
jp      nz,afterDpad                    ; if so, can't move up
ld      hl,sy
ld      a,(hl)
or      a                               ; at top of maze?
jp      z,afterDpad                     ; if so, can't move up
dec     (hl)                            ; update y
xor     a
ld      (dir),a                         ; set direction
ld      a,MOVE_COUNT_INI
ld      (moveCount),a

;------------------------------------------------
; moveDown - try to move down
;   input:  none
;   output: none
;------------------------------------------------
moveDown:
ld      hl,(sy)
inc     hl
ld      de,(sx)
call    getTile                         ; A = tile # below snail
bit     0,a                             ; is it 1 or 3?
jp      nz,afterDpad                    ; if so, can't move down
ld      hl,sy
ld      a,(hl)
cp      MAZE_HEIGHT-1                   ; at bottom of maze?
inc     (hl)                            ; update y
ld      a,1
ld      (dir),a                         ; set direction
ld      a,MOVE_COUNT_INI
ld      (moveCount),a

;------------------------------------------------
; moveLeft - try to move left
;   input:  none
;   output: none
;------------------------------------------------
moveLeft:
ld      hl,(sy)
ld      de,(sx)
call    getTile                         ; A = tile # that snail is currently on
cp      2                               ; is it 2 or 3?
jp      nc,afterDpad                    ; if so, can't move left
ld      hl,sx
ld      a,(hl)
or      a
dec     (hl)                            ; update x
ld      a,2
ld      (dir),a                         ; set direction
ld      a,MOVE_COUNT_INI
ld      (moveCount),a

;------------------------------------------------
; moveRight - try to move right
;   input:  none
;   output: none
;------------------------------------------------
moveRight:
ld      hl,(sy)
ld      de,(sx)
inc     de
call    getTile                         ; A = tile # to the right of snail
cp      2                               ; is it 2 or 3?
jp      nc,afterDpad                    ; if so, can't move right
ld      hl,sx
ld      a,(hl)
cp      MAZE_WIDTH-1
inc     (hl)                            ; update x
ld      a,3
ld      (dir),a                         ; set direction
ld      a,MOVE_COUNT_INI
ld      (moveCount),a

;------------------------------------------------
; continueMove - continue a move until aligned with a cell
;   input:  none
;   output: none
;------------------------------------------------
continueMove:
ld      hl,moveCount
dec     (hl)
dec     (hl)