NOSTROMO.ASM

The AX-2 Nostromo N60 BASIC/Z80 machine code port-in-progress to 6809 assembly

CODE

This code is an incomplete snapshot of a project in progress.

;*********************************************************************
;* Title: NOSTROMO.ASM
;*********************************************************************
;* Author:
;*     R. Allen Murphey
;*
;* License:
;*     Copyright (c) 2020-2022 R. Allen Murphey. All Rights Reserved.
;*
;* Description:
;*     AX-2 Uchu Yusosen Nostromo / Space Transport Nostromo
;*
;* Documentation:
;*     https://exileinparadise.com/tandy_color_computer:nostromo
;*
;* Include Files:
;*     See end of listing 
;*
;* Assembler:
;*     lwasm 1.4+
;*
;* Revision History:
;* Rev #     Date       Who     Comments
;* -----  -----------  ------  ---------------------------------------
;*  00     2020-2022    RAM     Initial port/conversion
;*********************************************************************
 
;*********************************************************************
;* NEC PC-6001 MEMORY MAP - Z80, AY-3-8910 PSG, N60 BASIC
;*********************************************************************
 
                              ; C200-C3FF SCREEN MEMORY
                              ; C400-E163 BASIC PROGRAM
                              ; E164- MACHINE CODE
                              ; F300-F7FF RELOCATED MACHINE CODE
                              ; F800/F801 ALIEN POS X Y
                              ; F802/F802 PLAYER POS X Y
                              ; F804/F805 ALIEN MOVE X Y
                              ; F806 - TOTAL ITEMS HELD
                              ; F807-F80A - COUNT OF EACH ITEM HELD
                              ; F80B - PLAYER CAUGHT? 0 = NO 1 = YES
                              ; F80C
                              ; F80D
                              ; F80E
                              ; F80F - PLAYER HIT WALL FLAG FOR SOUND?
 
;*********************************************************************
;* COCO 1,2,3 MEMORY MAP - 6809, DAC, Super/Extended/Color BASIC
;*********************************************************************
 
                              ; 0000 - 03FF BASIC VARIABLES
                              ; 0400 - 05FF NOSTROMO SG4
                              ; 0600 - 1DFF DOS and RAM
                              ; 1E00 - 35FF NOSTROMO RG6
                              ; 3600 - 36FF NOSTROMO VARIABLES
                              ; 3900 - 55FF NOSTROMO CODE
                              ; 5600 - 61FF DATA FONT
                              ; 6200 - 7EFF RAM
                              ; 7F00 - 7FFF BASIC STACK
                              ; 8000 - DFFF NOSTROMO 256x192x16
                              ; E000 - FDFF RAM
                              ; FE00 - FEFF COCO3 VECTOR PAGE
                              ; FF00 - FFEF COCO MMIO
                              ; FFF0 - FFFF MPU VECTORS
 
;*********************************************************************
;* EQUATES
;*********************************************************************
RESET:      equ   $FFFE       ; Address of MPU Reset Vector
VECCOCO:    equ   $A027       ; CoCo 1/2 reset vector value
VECDRGN:    equ   $B3B4       ; Dragon32/64 reset vector value
VECCOCO3:   equ   $8C1B       ; CoCo3 reset vector value
 
;*********************************************************************
;* GLOBALS
;*********************************************************************
            org   $3600       ; see memory map above
            align $0200       ; align on text mode screen sized chunks
COLORRAM:   rmb   512         ; lets hold an entire fore/back colormap
;*********************************************************************
;* PLATFORM DATA
;*********************************************************************
            align 2           ; 6809s love 16-bits
PLATFORM:   rmb   1           ; WHICH PLATFORM ARE WE ON 1,2,3,32,64
VIDDRV:     rmb   1           ; WHICH VIDEO DRIVER TO USE
AUDDRV:     rmb   1           ; WHICH AUDIO DRIVER TO USE
INPDRV:     rmb   1           ; WHICH INPUT DRIVER TO USE
 
;*********************************************************************
;* INPUT DRIVER DATA
;*********************************************************************
INKEYB:     rmb   8           ; STORE PIA VALUES HERE
OUTKEY:     rmb   56          ; DECODED KEYS GO HERE
 
;*********************************************************************
;* VIDEO DRIVER DATA
;*********************************************************************
VIDRAM:     rmb   2           ; START OF VIDEO RAM FOR RENDERER
ENDVID:     rmb   2           ; END OF VIDEO RAM FOR RENDERER
COUNTER:    rmb   2           ; 16-BIT COUNTER
FONTPTR:    rmb   2           ; POINTER TO START OF FONT CHAR BITMAPS
SCRNPTR:    rmb   2           ; POINTER TO SCREEN RAM LOCATION
MAPPTR:     rmb   2           ; POINTER INTO THE MAP OF THE SCREEN
CLRPTR:     rmb   2           ; POINTER TO THE COLOR FG/BG TO DRAW
COUNT:      rmb   1           ; COUNT OF SCREEN CHARACTER TO DRAW
TX:         rmb   1           ; TILE X COLUMN TO DRAW ON 0-31
TY:         rmb   1           ; TILE Y ROW TO DRAW ON 0-15
PX:         rmb   1           ; PIXEL X 0-255 / OFFSET TX * 4
PY:         rmb   1           ; PIXEL Y 0-191 ROW TO DRAW ON 0-191
SX:         rmb   1           ; SCREEN X
SY:         rmb   1           ; SCREEN Y
ROW:        rmb   1           ; CHARACTER BITMAP ROW TO DRAW $00-$0B
COLOR:      rmb   1           ; COLOR $00-$0F TO DRAW ON COCO3
CLRFORE:    rmb   1           ; FOREGROUND COLOR $00-$0F
CLRBACK:    rmb   1           ; BACKGROUND COLOR $00-$0F
 
INDEXIX     rmb   1           ; TEMP VARIABLE FOR LOOPS
INDEXIY     rmb   1           ; TEMP VARIABLE FOR LOOPS
 
STRPTR:     rmb   2           ; address pointer to start of string to show
STRLEN:     rmb   1           ; fixed string length to type out
 
NEXTSCREEN:                   ; Next screen offset used in BAS5010
            rmb   1
 
;*********************************************************************
;* AUDIO DRIVER DATA
;*********************************************************************
                              ; FIXME SHADOW REGISTERS FOR DACS
                              ; FIXME SHADOW REGISTERS FOR PSG
                              ; FIXME SHADOW REGISTERS FOR SSG
                              ; FIXME SHADOW REGISTERS FOR DCSG
 
;*********************************************************************
;* GAME DATA
;*********************************************************************
 
ALIENX:     rmb   1           ; ALIEN CURRENT X 0-31
ALIENY:     rmb   1           ; ALIEN CURRENT Y 0-15
ALIENDX:    rmb   1           ; ALIEN DIRECTION X -1, 0, +1
ALIENDY:    rmb   1           ; ALIEN DIRECTION Y -1, 0, +1
PLAYERX:    rmb   1           ; PLAYER X 0-31
PLAYERY:    rmb   1           ; PLAYER Y 0-15
PLAYERDX:    rmb   1          ; PLAYER DIRECTION X -1, 0, +1
PLAYERDY:    rmb   1          ; PLAYER DIRECTION Y -1, 0, +1
 
CR:         rmb   1           ; CR = CREW REMAINING
EE:         rmb   1           ; FIXME some sort of exit flag
PH:         rmb   1           ; PH = Player Held? NEC $F806 count of items completed?
PH0:        rmb   1           ; PH0 = Player Held 0 NEC $F807 count of Diamonds
PH1:        rmb   1           ; PH1 = Player Held 1 NEC $F808 count of Clubs
PH2:        rmb   1           ; PH2 = Player Held 2 NEC $F809 count of Hearts
PH3:        rmb   1           ; PH3 = Player Held 3 NEC $F80A count of Spades
PM:         rmb   1           ; PM = PLAYER MISSION: gather this many of each item
PS0:        rmb   1           ; PS0 = Placed in Shuttle 0 Diamonds
PS1:        rmb   1           ; PS1 = Placed in Shuttle 1 Clubs
PS2:        rmb   1           ; PS2 = Placed in Shuttle 2 Hearts
PS3:        rmb   1           ; PS3 = Placed in Shuttle 3 Spades
SC:         rmb   2           ; SC = SCORE
SS:         rmb   1           ; SS = SCREEN # to SHOW
TL:         rmb   2           ; TL = TIME LEFT (in seconds)
                              ; T = TIME
                              ; H = INVOKE HELP HACK
CAUGHT:     rmb   1           ; CAUGHT = PLAYER CAUGHT FLAG
HITWALL:    rmb   1           ; HITWALL = PLAYER HIT WALL FLAG
KEYPRESS:   rmb   1           ; Value of key pressed
 
;*********************************************************************
;* TABLES AND STRINGS (translated from ASCII to COCO values)
;*********************************************************************
 
                              ; Strings used in BAS0001-BAS0009
TXTNAME:    fcc   'NOSTROMO'
                              ; Copyright 1982 ASCII
TXTCOPY:    fcb   $43,$0F,$10,$19,$12,$09,$07,$08,$14,$60,$71,$79,$78,$72,$60,$41,$53,$43,$49,$49
                              ; by HIROMI OHBA
TXTAUTH:    fcb   $02,$19,$60,$48,$49,$52,$4F,$4D,$49,$60,$4F,$48,$42,$41
 
SCREENTABLE:                  ; Table of Next Screen values for BAS5010
            fdb   1,1,3,4,2,1,1,4,2,5,1,1,1,6,1,1,5,1,1,6,0
 
SCORE:      fcc   'SCORE'
TIME:       fcc   'TIME'
CREWLEFT:   fcb   $60,$F0,$60,$F0,$60,$F0
 
SPACE:      fcb   $60
PLAYER:     fcb   $F0
ALIEN:      fcb   $40
 
;*********************************************************************
;* JUMP TABLE POINTERS
;*********************************************************************
IINIT:      rmb   2           ; Indirect vector to INIT
ICLEAR:     rmb   2           ; Indirect vector to CLEAR
IDRAWCH:    rmb   2           ; Indirect vector to DRAWCH
ISCREEN:    rmb   2           ; Indirect vector to SCREEN
 
;*********************************************************************
;* JUMP TABLE
;*********************************************************************
 
            org   $3900       ; see memory map above
 
INIT:       jmp   [IINIT]     ; Initialize video device
CLEAR:      jmp   [ICLEAR]    ; Clear screen
DRAWCH:     jmp   [IDRAWCH]   ; Draw character
SCREEN:     jmp   [ISCREEN]   ; Draw screen
 
;*********************************************************************
;* CONFIG - Determine machine type and configuration
;*********************************************************************
 
CONFIG:                       ; FIXME cheap hack to test screens
            lda   $FF         ; POKE 255,screennumber before start
            cmpa  #1          ; $0255 = 1?
            beq   CONFIG10    ; VDG SG4 32x16x9 tile
            cmpa  #2          ; $0255 = 2?
            beq   CONFIG20    ; VDG T1 SG4 32x16x9 tile with lowercase
            cmpa  #3          ; $0255 = 3?
            beq   CONFIG30    ; VDG VGA SG4 32x16x9 tile + custom font
            cmpa  #4          ; $0255 = 4?
            beq   CONFIG40    ; VDG RG6 / PMODE 4 256x192x2 pixel
            cmpa  #5          ; $0255 = 5?
            beq   CONFIG50    ; ACVC / GIME 256x192x16 pixel
 
CONFIG2:                      ; FIXME start of autodetect and config menus
            ldx   RESET       ; Read MPU reset value to detect hardware
 
            cmpx  #VECCOCO    ; Is CoCo1, CoCo2, CoCo2B?
            beq   CONFIG10    ; yes, go configure that
 
            cmpx  #VECDRGN    ; Is Dragon32, 64, Tano?
            beq   CONFIG10    ; yes, go configure that
 
                              ; FIXME Is CoCo2B
            beq   CONFIG20    ; yes, go configure that
 
                              ; FIXME Is CoCoVGA?
            beq   CONFIG30    ; yes, go configure that
 
                              ; FIXME IS RG6?
            beq   CONFIG40    ; yes, go configure that
 
            cmpx  #VECCOCO3   ; Is CoCo3?
            beq   CONFIG50    ; yes, go configure that
 
CONFIG10:                     ; CoCo, Dragon
            jsr   SG4         ; Setup SG4 screen
            bra   CONFIGEX    ; exit config
CONFIG20:                     ; CoCo2B
            jsr   VDGT1       ; Setup SG4 on T1
            bra   CONFIGEX    ; exit config
CONFIG30:                     ; CoCoVGA
            jsr   VGA         ; Setup SG4 on CoCoVGA
            bra   CONFIGEX    ; exit config
CONFIG40:                     ; RG6
            jsr   RG6         ; Setup RG6 on VDG
            bra   CONFIGEX    ; exit config
CONFIG50:                     ; ACVC
            jsr   ACVC        ; Setup 256x192x16 on ACVC / GIME
            bra   CONFIGEX    ; exit configg
CONFIGEX:                     ; Exit the config routine
            jsr   CLEAR       ; clear whatever screen we're configured for
 
            clr   SS          ; start "show screen" at zero
 
            jsr   RNDINIT     ; we need to initialize PRNG somewhere
 
;*********************************************************************
;* COPYRIGHT
;*          Display a copyright screen from original REM statements
;* Entry Values
;*          None
;* Exit Values
;*          None
;* Control Register Modifications
;*          A,X,Y
;* Subroutines Called
;*          COLOR1,HLINE,VLINE,PRINTAT
;*********************************************************************
 
COPYRIGHT:                    ; 1 REM**************************
                              ; 2 REM*                        *
                              ; 3 REM*       NOSTROMO         *
                              ; 4 REM*                        *
                              ; 5 REM*  Copyright 1982 ASCII  *
                              ; 6 REM*                        *
                              ; 7 REM*    by HIROMI OHBA      *
                              ; 8 REM*                        *
                              ; 9 REM**************************
                              ;      12345678901234567890123456
 
            jsr   COLOR1      ; Setup white letters on black background
 
BAS0001:                      ; Draw box top
            lda   #3          ; start drawing at ...
            sta   TX          ; ... column 3
            sta   TY          ; ... row 3
            lda   #29         ; for 29 horizontal characters
            sta   INDEXIX     ; working varable for horizontal count
            ldb   #$6A        ; '* to draw
            jsr   HLINE       ; now go draw horizonal line of *
 
                              ; Draw box left side
            ldd   #$0304      ; draw vertical line of * at column 3
            sta   TX          ; ... column 3
            stb   TY          ; ... row 4
            lda   #11         ; for 8 vertical characters
            sta   INDEXIY     ; working variable for vertical count
            ldb   #$6A        ; '* to draw
            jsr   VLINE       ; now go draw vertical line of *
 
                              ; Draw box right side
            ldd   #$1C04      ; draw vertical line of * at column 29
            sta   TX          ; ... column 29
            stb   TY          ; ... row 4
            lda   #11         ; for 8 vertical characters
            sta   INDEXIY     ; working varable for vertical count
            ldb   #$6A        ; '* to draw
            jsr   VLINE       ; now go draw vertical line of *
 
                              ; Draw box bottom
            ldd   #$030B      ; start drawing at ...
            sta   TX          ; ... column 3
            stb   TY          ; ... row 11
            lda   #29         ; for 29 horizontal characters
            sta   INDEXIX     ; working variable for horizontal count
            ldb   #$6A        ; '* to draw
            jsr   HLINE       ; now go draw horizontal line of *
 
                              ; Draw TXTNAME program name message
            ldd   #$0C05      ; start drawing at ...
            sta   TX          ; ... column 12
            stb   TY          ; ... row 5
            ldx   #TXTNAME    ; load X with pointer to string
            stx   STRPTR      ; ... and store in temp
            lda   #8          ; load Y with length of string
            sta   STRLEN      ; ... and store in temp
            jsr   PRINTAT     ; now go print string at
 
                              ; Draw TXTCOPY copyright message
            ldd   #$0707      ; start drawing at ...
            sta   TX          ; ... column 7
            stb   TY          ; ... row 7
            ldx   #TXTCOPY    ; load X with pointer to string
            stx   STRPTR      ; ... and store in temp
            lda   #20         ; load Y with length of string
            sta   STRLEN      ; ... and store in temp
            jsr   PRINTAT     ; now go print string at
 
                              ; Draw TXTAUTH author message
            ldd   #$0909      ; start drawing at ...
            sta   TX          ; ... column 12
            stb   TY          ; ... row 9
            ldx   #TXTAUTH    ; load X with pointer to string
            stx   STRPTR      ; ... and store in temp
            lda   #14         ; load Y with length of string
            sta   STRLEN      ; ... and store in temp
            jsr   PRINTAT     ; now go print string at
 
                              ; TEST CODE
            jsr   INITTMR     ; INITIALIZE TIMER ROUTINE
            lda   #1          ; LETS WAIT 5 SECONDS
            sta   SECONDS     ; STORE FOR NUMBER OF SECONDS TO WAIT
WAIT1:      jsr   WAITSYNC    ; WAIT FOR VSYNC
            lda   SECONDS     ; HAS SECONDS COUNTED OUT TO 0?
            cmpa  #0          ; Out of Seconds?
            bne   WAIT1       ; NO, SECONDS WAS > 0 SO WAIT MORE
 
           ;jmp   BAS1000     ; YES, CARRY ON
 
;*********************************************************************
BAS0010:                      ; START SETTING UP GAME
;*********************************************************************
                              ; 10 EXEC&HE164 'OVERWRITES LINE 10 WITH 10 REM ASCII FOR SUBSEQUENT RUNS
                              ; 10 REM ASCII
ASME164:
                              ; This part moves E180-E67F up to F300-F7FF
                              ;       TFR     0xE180,X    ;E164 21 80 E1    LD      HL,0xE180
                              ;       TFR     0xF300,Y    ;E167 11 00 F3    LD      DE,0xF300
                              ;       TFR     0x0500,U    ;E16A 01 00 05    LD      BC,0x0500
                              ;       PSHS    D       *** Check U is an even #
                              ; !      LDD     ,X++
                              ;       STD     ,Y++
                              ;       LEAU    -2,U
                              ;       CMPU    #$0000
                              ;       BNE     <
                              ;       PULS    D           ;E16D ED B0       LDIR
                              ;
                              ; ** FIXME WHAT ARE THESE VECTORS FOR? RESETS? IRQS?
                              ;       TFR     0xE164,X    ;E16F 21 64 E1    LD      HL,0xE164
                              ;       STX     0xFF56      ;E172 22 56 FF    LD      (0xFF56),HL
                              ;       STX     0xFF58      ;E175 22 58 FF    LD      (0xFF58),HL
                              ;       STX     0xFF5A      ;E178 22 5A FF    LD      (0xFF5A),HL
                              ;
                              ; ** This is the start of the code that changes line 10 to REM ASCII - 8E = REM token
                              ;       TFR     0x8E,A      ;E17B 3E 8E       LD      A,0x8E
                              ;       LBRA    0xE240      ;E17D C3 40 E2    JP      0xE240
 
ASME240:
                              ; ** Rest of the code that changes line 10 to REM ASCII
                              ;       STA     0xC525      ;E240 32 25 C5    LD      (0xC525),A
                              ;       TFR     0x4120,X    ;E243 21 20 41    LD      HL,0x4120
                              ;       STX     0xC526      ;E246 22 26 C5    LD      (0xC526),HL
                              ;       TFR     0x4353,X    ;E249 21 53 43    LD      HL,0x4353
                              ;       STX     0xC528      ;E24C 22 28 C5    LD      (0xC528),HL
                              ;       TFR     0x4949,X    ;E24F 21 49 49    LD      HL,0x4949
                              ;       STX     0xC52A      ;E252 22 2A C5    LD      (0xC52A),HL
                              ;       RTS                 ;E255 C9          RET
 
BAS0080:
                              ; 80 CLEAR300,&HEFFF 'RESERVE 300 BYTES FOR STRINGS AND SET UPPER LIMIT TO EFFF
            jsr   COLOR1      ;   COLOR1          'SET COLOR TO FOREGROUND 1 BACKGROUND NONE COLORSET NOT
                              ;   SCREEN 2        'Semigraphics 6 64x48 9-color mode on NEC
                              ;   CONSOLE,,0,0    'SCROLL START,LENGTH DISABLED,PNKEYS OFF,KEYCLICK OFF
 
BAS0090:
            jmp   BAS5000     ; 90 GOTO 5000       'PICK WHICH SCREEN TO RUN
 
;*********************************************************************
BAS0100:                      ; START / INITIALIZATION CODE
;*********************************************************************
                              ; 100 REM **** start
 
                              ; 110 GOSUB8100:GOSUB8130
            jsr   BAS8100     ;     8100 SETUP ALIEN AND PLAYER POS
            jsr   BAS8130     ;     8130 SETUP ITEMS HELD TO EMPTY
 
                              ; TURN ON ALIEN MOVEMENT 3A = OPCODE FOR LD A,(**)
                              ; 120 POKE&HF700,&H3A
 
                              ; SETUP SCREEN AND SOUND CHIP
            jsr   BAS1000     ; 180 GOSUB 1000
 
                              ; SAVE STARTING TIME
                              ; 190 T=TIME
 
;*********************************************************************
BAS0200:                      ; START MAIN LOOP
;*********************************************************************
                              ; 200 EXEC&HF500:EXEC&HF7D0
                              ;     F500 ALIEN AND PLAYER POSITION CHECK
                              ;     F600 PLAYER MOVE HIT ITEMS WALLS READ KEYS?
                              ;     F700 ALIEN MOVE AI
                              ;     F790 UPDATE PLAYER
                              ;     F7B0 ALIEN CAUGHT PLAYER
                              ;     F7D0 UPDATE NUMBERS
            jsr   ASMF500
            jsr   ASMF7D0
 
            jmp   BAS0220 
;*********************************************************************
ASMF500:                      ; ALIEN AND PLAYER POSITION UPDATE
;*********************************************************************
                              ;        TFR     0x20,B ' '  ;F500 06 20       LD      B,0x20         Load a space
                              ;        LBSR    0xF790      ;F502 CD 90 F7    CALL    0xF790         Draw it at PLAYERX/Y
            ldb   SPACE       ; Blank out the player with an $80
            jsr   DRWPLR      ; DRWPLR is an alias for ASMF790
 
                              ;---------------------------------------
                              ;        LDX     0xF800      ;F505 2A 00 F8    LD      HL,(0xF800)    Copy AlienX into HL
                              ;        LDU     0xF802      ;F508 DD 2A 02    LD      IX,(0xF802)    Temporarily Save PlayerX in IX
                              ;        STX     0xF802      ;F50C 22 02 F8    LD      (0xF802),HL    Now put AlienX in HL into PlayerX
                              ;        TFR     0x20,B ' '  ;F50F 06 20       LD      B,0x20         Load a space
                              ;        LBSR    0xF790      ;F511 CD 90 F7    CALL    0xF790         Draw it at PLAYERX/Y (currently Alien)
            ldb   SPACE       ; Blank out the alien with an $80
            jsr   DRWALN
                              ;---------------------------------------
                              ;        LDX     0xF802      ;F514 2A 02 F8    LD      HL,(0xF802)    Copy PlayerX into HL
                              ;        STX     0xF800      ;F517 22 00 F8    LD      (0xF800),HL    Restore AlienX from HL
                              ;        STU     0xF802      ;F51A DD 22 02    LD      (0xF802),IX    Restore PlayerX from IX
                              ;        LBSR    0xF600      ;F51E CD 00 F6    CALL    0xF600         SUB Player Move
            jsr   ASMF600
                              ;---------------------------------------
                              ;        TFR     0x84,B 'O'  ;F521 06 84       LD      B,0x84         Load an 'O'
                              ;        LBSR    0xF790      ;F523 CD 90 F7    CALL    0xF790         Draw it at PLAYERX/Y
            ldb   PLAYER      ; The player is shown as character O at $F0
            jsr   DRWPLR
                              ;---------------------------------------
                              ;        LBSR    0xF7B0      ;F526 CD B0 F7    CALL    0xF7B0         SUB: Alien Caught Player?
            jsr   ASMF7B0
                              ;---------------------------------------
                              ;        LDA     0xF80B      ;F529 3A 0B F8    LD      A,(0xF80B)     Load Player Caught Flag into A
                              ;        CMPA    #$ 0        ;F52C FE 01       CP      0x01           Was player caught?
                              ;        BEQ to RTS address  ;F52E C8          RET     Z
                              ;        LBSR    0xF700      ;F52F CD 00 F7    CALL    0xF700         SUB: Alien Move AI
           ;jsr   ASMF700
                              ;---------------------------------------
                              ;        LBSR    0xF7B0      ;F532 CD B0 F7    CALL    0xF7B0         SUB: Alien Caught Player?
            jsr   ASMF7B0
                              ;---------------------------------------
                              ;        LDA     0xF80B      ;F535 3A 0B F8    LD      A,(0xF80B)     Load Player Caught Flag into A
                              ;        CMPA    #$ 0        ;F538 FE 01       CP      0x01           Was player caught?
                              ;        BEQ to RTS address  ;F53A C8          RET     Z              Yes... Return
                              ;        LBRA    0xF569      ;F53B 18 2C       JR      0xF569         No...
                              ;        BMI to RTS address  ;F53D F8          RET     M              Return if Minus?
                              ;---------------------------------------
                              ; JF53E  CMPA    #$ 0        ;F53E FE 00       CP      0x00
                              ;        LBEQ    0xF548      ;F540 28 06       JR      Z,0xF548       If A=0 jump F548
                              ;        SUBA    #$ 0        ;F542 D6 05       SUB     0x05           Subtract 5 (Moving Left?)
                              ;        LBCS    0xF554      ;F544 38 0E       JR      C,0xF554
                              ;        LBRA    0xF53E      ;F546 18 F6       JR      0xF53E
                              ;---------------------------------------
                              ; JF548  LDA     0xF802      ;F548 3A 02 F8    LD      A,(0xF802)     PlayerX -> A
                              ;        TFR     A,B         ;F54B 47          LD      B,A            A -> B
                              ;        LDA     0xF800      ;F54C 3A 00 F8    LD      A,(0xF800)     AlienX -> A
                              ;        CMPA    B_Temp      ;F54F B8          CP      B              Compare PlayerX with AlienX
                              ;        LBNE    0xF554      ;F550 20 02       JR      NZ,0xF554      Not the same? Jump F554
                              ;        LBRA    0xF567      ;F552 18 13       JR      0xF567         The Same... Jump F567
                              ;---------------------------------------
                              ; JF554  LDA     0xF803      ;F554 3A 03 F8    LD      A,(0xF803)     PlayerY -> A
                              ; JF557  CMPA    #$ 0        ;F557 FE 00       CP      0x00
                              ;        LBEQ    0xF560      ;F559 28 05       JR      Z,0xF560
                              ;        SUBA    #$ 0        ;F55B D6 06       SUB     0x06           Moving Up?
                              ;        BCS to RTS address  ;F55D D8          RET     C              Return if Carry Set (Borrow)
                              ;        LBRA    0xF557      ;F55E 18 F7       JR      0xF557         Loop Back
                              ;---------------------------------------
                              ; JF560  LDA     0xF803      ;F560 3A 03 F8    LD      A,(0xF803)     PlayerY -> A
                              ;        TFR     A,B         ;F563 47          LD      B,A            A -> B
                              ;        LDA     0xF801      ;F564 3A 01 F8    LD      A,(0xF801)     AlienY -> B
                              ;---------------------------------------
                              ; JF567  CMPA    B_Temp      ;F567 B8          CP      B              Compare AlienY to PlayerY
                              ;        BNE to RTS address  ;F568 C0          RET     NZ             Not the same? Return
                              ;---------------------------------------
                              ; JF569  LDX     0xF800      ;F569 2A 00 F8    LD      HL,(0xF800)    AlienX -> HL
                              ;        LDU     0xF802      ;F56C DD 2A 02    LD      IX,(0xF802)    PlayerX -> IX
                              ;        STX     0xF802      ;F570 22 02 F8    LD      (0xF802),HL    HL -> PlayerX
                              ;        TFR     0x40,B '@'  ;F573 06 40       LD      B,0x40 '@'     '@' -> B
                              ;        LBSR    0xF790      ;F575 CD 90 F7    CALL    0xF790         SUB:
            ldb   ALIEN       ; The alien is shown with an '@'
            jsr   DRWALN
                              ;---------------------------------------
                              ;        LDX     0xF802      ;F578 2A 02 F8    LD      HL,(0xF802)    PlayerX -> HL
                              ;        STX     0xF800      ;F57B 22 00 F8    LD      (0xF800),HL    HL -> AlienX
                              ;        STU     0xF802      ;F57E DD 22 02    LD      (0xF802),IX    IX -> PlayerX
                              ;        RTS                 ;F582 C9          RET
            rts
 
;*********************************************************************
ASMF600:                      ; PLAYER MOVE HIT ITEMS WALLS READ KEYS?
;*********************************************************************
                              ;        TFR     0x00,A      ;F600 3E 00       LD      A,0x00         Turn off "Hit the Wall" flag
                              ;        STA     0xF80F      ;F602 32 0F F8    LD      (0xF80F),A     Store the NOPE hit the wall flag
            clr   HITWALL     ; Clear the hit-the-wall flag
 
                              ;---------------------------------------
                              ;        ORCC    #$50        ;F605 F3          DI                     Disable interrupts
                              ;        LDA     IO_90_0x90  ;F606 DB 90       IN      A,(0x90)       Pull input from port 90 - key in?
                              ;        ANDCC    #$AF       ;F608 FB          EI                     Re-enable interrupts
            clra
            sta   PLAYERDX
            sta   PLAYERDY
            lda   #$FF        ; 
            sta   KEYPRESS    ; set KEYPRESS to -1
            jsr   KEYSCN      ; Strobe and save all of the key columns
            jsr   DECODE      ; Decode a key into KEYPRESS
 
ASMF609:                      ;---------------------------------------
                              ;        CMPA    #$ 1        ;F609 FE 1C       CP      0x1C           Right key pressed?
                              ;        LBNE    0xF613      ;F60B 20 06       JR      NZ,0xF613      No, go check next
                              ;        TFR     0x01,B      ;F60D 06 01       LD      B,0x01         Set player direction +1X
                              ;        TFR     0x00,C      ;F60F 0E 00       LD      C,0x00         Set player direction +0Y
                              ;        LBRA    0xF62E      ;F611 18 1B       JR      0xF62E         Go calculate new pointer to draw in
            lda   KEYPRESS
            cmpa  #KEY_RIGHT  ; Right arrow key pressed?
            bne   ASMF613     ; No, go check next key
            lda   #1
            sta   PLAYERDX
            bra   ASMF62E
ASMF613:                      ;---------------------------------------
                              ; JF613  CMPA    #$ 1        ;F613 FE 1D       CP      0x1D           Left key pressed?
                              ;        LBNE    0xF61D      ;F615 20 06       JR      NZ,0xF61D      No, go check next
                              ;        TFR     0xFF,B      ;F617 06 FF       LD      B,0xFF         Set player direction -1X
                              ;        TFR     0x00,C      ;F619 0E 00       LD      C,0x00         Set player direction +0Y
                              ;        LBRA    0xF62E      ;F61B 18 11       JR      0xF62E         Go calculate new pointer to draw in
            lda   KEYPRESS
            cmpa  #KEY_LEFT   ; Left arrow key pressed?
            bne   ASMF61D     ; No, go check next key
            lda   #-1
            sta   PLAYERDX
            bra   ASMF62E
ASMF61D:                      ;---------------------------------------
                              ; JF61D  CMPA    #$ 1        ;F61D FE 1E       CP      0x1E           Up key pressed?
                              ;        LBNE    0xF627      ;F61F 20 06       JR      NZ,0xF627      No, go check next
                              ;        TFR     0x00,B      ;F621 06 00       LD      B,0x00         Set player direction +0X
                              ;        TFR     0xFF,C      ;F623 0E FF       LD      C,0xFF         Set player direction -1Y
                              ;        LBRA    0xF62E      ;F625 18 07       JR      0xF62E         Go calculate new pointer to draw in
            lda   KEYPRESS
            cmpa  #KEY_UP     ; Up arrow key pressed?
            bne   ASMF627     ; No, go check next key
            lda   #-1
            sta   PLAYERDY
            bra   ASMF62E
ASMF627:                      ;---------------------------------------
                              ; JF627  CMPA    #$ 1        ;F627 FE 1F       CP      0x1F           Down pressed?
                              ;        BNE to RTS address  ;F629 C0          RET     NZ             Nope, no keys pressed bail out now
                              ;        TFR     0x00,B      ;F62A 06 00       LD      B,0x00         Set player direction +0X
                              ;        TFR     0x01,C      ;F62C 0E 01       LD      C,0x01         Set player direction +1Y
            lda   KEYPRESS
            cmpa  #KEY_DOWN   ; Down arrow key pressed?
            bne   ASMF62E     ; No, go check where we ended up
            lda   #1
            sta   PLAYERDY
ASMF62E:                      ;---------------------------------------
                              ; JF62E  LDA     0xF802      ;F62E 3A 02 F8    LD      A,(0xF802)     PlayerX -> A
                              ;        ADDA    ,B          ;F631 80          ADD     A,B            Modify PlayerX by direction from above
                              ;        TFR     A,D         ;F632 57          LD      D,A            Store in D for now
            lda   PLAYERDX
            adda  PLAYERX
            sta   PLAYERX
            clr   PLAYERDX
                              ;---------------------------------------
                              ;        LDA     0xF803      ;F633 3A 03 F8    LD      A,(0xF803)     PlayerY -> A
                              ;        ADDA    ,C          ;F636 81          ADD     A,C            Modify PlayerY by direction from above
                              ;        TFR     A,E         ;F637 5F          LD      E,A            Store in E for now
            lda   PLAYERDY
            adda  PLAYERY
            sta   PLAYERY
            clr   PLAYERDY
                              ;---------------------------------------
                              ;        ADDA    ,0x02       ;F638 C6 02       ADD     A,0x02         Put 2 in A
                              ;        TFR     A,L         ;F63A 6F          LD      L,A            Put A in L
                              ;        TFR     0x00,H      ;F63B 26 00       LD      H,0x00         Zero out H
                              ;        ADD     X=X+X       ;F63D 29          ADD     HL,HL          HL=HL+2
                              ;        ADD     X=X+X       ;F63E 29          ADD     HL,HL          HL=HL+4
                              ;        ADD     X=X+X       ;F63F 29          ADD     HL,HL          HL=HL+8
                              ;        ADD     X=X+X       ;F640 29          ADD     HL,HL          HL=HL+16
                              ;        ADD     X=X+X       ;F641 29          ADD     HL,HL          HL=HL+32
                              ;        TFR     D,A         ;F642 7A          LD      A,D            Move temp D back to A
                              ;        INCA                ;F643 3C          INC     A              A=A+1
                              ;        ADDA    ,L          ;F644 85          ADD     A,L            Add L to A
                              ;        TFR     A,L         ;F645 6F          LD      L,A            Store A back in L
                              ;        TFR     H,A         ;F646 7C          LD      A,H            Store H in A
                              ;        ADC     A,0xC2 - Fix;F647 CE C2       ADC     A,0xC2         Add C2 to A
                              ;        TFR     A,H         ;F649 67          LD      H,A            Put A back in H - done making new pointer
                              ;---------------------------------------
                              ;        LDA     ,X          ;F64A 7E          LD      A,(HL)         Get character at new pointer in HL
                              ;        CMPA    #$ 2        ;F64B FE 20       CP      0x20           Is it a space?
                              ;        LBNE    0xF658      ;F64D 20 09       JR      NZ,0xF658      No, go check what was hit
                              ;---------------------------------------
ASMF64F:                      ; JF64F  TFR     D,A         ;F64F 7A          LD      A,D            Put temp D back in A
                              ;        STA     0xF802      ;F650 32 02 F8    LD      (0xF802),A     Store A -> PlayerX
                              ;        TFR     E,A         ;F653 7B          LD      A,E            Put temp E back in A
                              ;        STA     0xF803      ;F654 32 03 F8    LD      (0xF803),A     Store A -> PlayerY
                              ;        RTS                 ;F657 C9          RET                    and done
             rts
ASMF658:                      ;---------------------------------------
                              ; JF658  CMPA    #$ 8        ;F658 FE 83       CP      0x83           Did you hit a Diamond resource?
                              ;        LBNE    0xF66F      ;F65A 20 13       JR      NZ,0xF66F      No, go check next resource
                              ;        LDA     0xF806      ;F65C 3A 06 F8    LD      A,(0xF806)     Yes, get current items carried
                              ;        CMPA    #$ 0        ;F65F FE 05       CP      0x05           Holding 5 items already?
                              ;        BCC to RTS address  ;F661 D0          RET     NC             Yes, can't pick up more
                              ;        INCA                ;F662 3C          INC     A              No, increment count of items carried
                              ;        STA     0xF806      ;F663 32 06 F8    LD      (0xF806),A     Store new count of items carried
                              ;        LDA     0xF807      ;F666 3A 07 F8    LD      A,(0xF807)     Load count of Diamonds carried
                              ;        INCA                ;F669 3C          INC     A              Add a Diamond
                              ;        STA     0xF807      ;F66A 32 07 F8    LD      (0xF807),A     Store new count of Diamonds
                              ;        LBRA    0xF64F      ;F66D 18 E0       JR      0xF64F         Jump back to top of loop
 
                              ;---------------------------------------
                              ; JF66F  CMPA    #$ 8        ;F66F FE 82       CP      0x82           Did you hit a Club resource?
                              ;        LBNE    0xF686      ;F671 20 13       JR      NZ,0xF686      No, go check next resource
                              ;        LDA     0xF806      ;F673 3A 06 F8    LD      A,(0xF806)     Yes, get current items carried
                              ;        CMPA    #$ 0        ;F676 FE 05       CP      0x05           Holding 5 items already?
                              ;        BCC to RTS address  ;F678 D0          RET     NC             Yes, can't pick up more
                              ;        INCA                ;F679 3C          INC     A              No, increment count of items carried
                              ;        STA     0xF806      ;F67A 32 06 F8    LD      (0xF806),A     Store new count of items carried
                              ;        LDA     0xF808      ;F67D 3A 08 F8    LD      A,(0xF808)     Load count of Clubs carried
                              ;        INCA                ;F680 3C          INC     A              Add a Club
                              ;        STA     0xF808      ;F681 32 08 F8    LD      (0xF808),A     Store new count of Clubs
                              ;        LBRA    0xF64F      ;F684 18 C9       JR      0xF64F         Jump back to top of loop
 
                              ;---------------------------------------
                              ; JF686  CMPA    #$ 8        ;F686 FE 81       CP      0x81           Did you hit a Heart resource?
                              ;        LBNE    0xF69D      ;F688 20 13       JR      NZ,0xF69D      No, go check next resource
                              ;        LDA     0xF806      ;F68A 3A 06 F8    LD      A,(0xF806)     Yes, get current items carried
                              ;        CMPA    #$ 0        ;F68D FE 05       CP      0x05           Holding 5 items already?
                              ;        BCC to RTS address  ;F68F D0          RET     NC             Yes, can't pick up more
                              ;        INCA                ;F690 3C          INC     A              No, increment count of items carried
                              ;        STA     0xF806      ;F691 32 06 F8    LD      (0xF806),A     Store new count of items carried
                              ;        LDA     0xF809      ;F694 3A 09 F8    LD      A,(0xF809)     Load count of Hearts carried
                              ;        INCA                ;F697 3C          INC     A              Add a Heart
                              ;        STA     0xF809      ;F698 32 09 F8    LD      (0xF809),A     Store new count of Hearts
                              ;        LBRA    0xF64F      ;F69B 18 B2       JR      0xF64F         Jump back to top of loop
 
                              ;---------------------------------------
                              ; JF69D  CMPA    #$ 8        ;F69D FE 80       CP      0x80           Did you hit a Spade resource?
                              ;        LBNE    0xF6B4      ;F69F 20 13       JR      NZ,0xF6B4      No, did you hit a wall?
                              ;        LDA     0xF806      ;F6A1 3A 06 F8    LD      A,(0xF806)     Get current number of items carried
                              ;        CMPA    #$ 0        ;F6A4 FE 05       CP      0x05           Already carrying 5 items?
                              ;        BCC to RTS address  ;F6A6 D0          RET     NC             Yep, just return
                              ;        INCA                ;F6A7 3C          INC     A              No, pick up next resource
                              ;        STA     0xF806      ;F6A8 32 06 F8    LD      (0xF806),A     Store new total of items carried
                              ;        LDA     0xF80A      ;F6AB 3A 0A F8    LD      A,(0xF80A)     Load count of Spades carried
                              ;        INCA                ;F6AE 3C          INC     A              Add a Spade
                              ;        STA     0xF80A      ;F6AF 32 0A F8    LD      (0xF80A),A     Store new count of Spades
                              ;        LBRA    0xF64F      ;F6B2 18 9B       JR      0xF64F         Jump back to top of loop
 
                              ;---------------------------------------
                              ; JF6B4  LDA     0xF802      ;F6B4 3A 02 F8    LD      A,(0xF802)     PlayerX -> A
                              ; JF6B7  CMPA    #$ 0        ;F6B7 FE 00       CP      0x00           At screen left?
                              ;        LBEQ    0xF6CD      ;F6B9 28 12       JR      Z,0xF6CD       Hit the left wall
                              ;        SUBA    #$ 0        ;F6BB D6 05       SUB     0x05           Check 5 spaces left
                              ;        LBCS    0xF6C1      ;F6BD 38 02       JR      C,0xF6C1       Woops, had to borrow, we went too far
                              ;        LBRA    0xF6B7      ;F6BF 18 F6       JR      0xF6B7         Go back and keep checking left...
 
                              ;---------------------------------------
                              ; JF6C1  LDA     0xF803      ;F6C1 3A 03 F8    LD      A,(0xF803)     PlayerY -> A
                              ; JF6C4  CMPA    #$ 0        ;F6C4 FE 00       CP      0x00           At top?
                              ;        LBEQ    0xF6CD      ;F6C6 28 05       JR      Z,0xF6CD
                              ;        SUBA    #$ 0        ;F6C8 D6 06       SUB     0x06           Check up?
                              ;        BCS to RTS address  ;F6CA D8          RET     C
                              ;        LBRA    0xF6C4      ;F6CB 18 F7       JR      0xF6C4         Go back and keep checking
 
                              ;---------------------------------------
ASMF6CD:                      ; JF6CD  TFR     0x01,A      ;F6CD 3E 01       LD      A,0x01         Set hit the wall flag
                              ;        STA     0xF80F      ;F6CF 32 0F F8    LD      (0xF80F),A     Store hit the wall flag to trigger sound
                              ;        LDA     ,X          ;F6D2 7E          LD      A,(HL)         HL pointer -> A
                              ;        CMPA    #$ A        ;F6D3 FE A5       CP      0xA5           Compare with A5
                              ;        LBNE    0xF6DA      ;F6D5 20 03       JR      NZ,0xF6DA
                              ;        ST0x20     ,X       ;F6D7 36 20       LD      (HL),0x20      Put a space into HL
                              ;        RTS                 ;F6D9 C9          RET                    Done - wall knocked down?
            rts
                              ;---------------------------------------
ASMF6DA:                      ; JF6DA  LDA     ,X          ;F6DA 7E          LD      A,(HL)         Load type of block at position
                              ;        CMPA    #$ 1        ;F6DB FE 16       CP      0x16           Is it a ???
                              ;        BCC to RTS address  ;F6DD D0          RET     NC             Yes, just bail
                              ;        TFR     H,A         ;F6DE 7C          LD      A,H
                              ;        SUBA    #$ 0        ;F6DF D6 02       SUB     0x02
                              ;        TFR     A,H         ;F6E1 67          LD      H,A
                              ;        LDA     ,X          ;F6E2 7E          LD      A,(HL)
                              ;        CMPA    #$ 2        ;F6E3 FE 20       CP      0x20           Is it a space?
                              ;        LBNE    0xF6EB      ;F6E5 20 04       JR      NZ,0xF6EB
                              ;        TFR     0x22,A      ;F6E7 3E 22       LD      A,0x22         Put 22 -> A '"'
                              ;        STA     ,X          ;F6E9 77          LD      (HL),A         A -> HL
                              ;        RTS                 ;F6EA C9          RET
            rts
                              ;---------------------------------------
ASMF6EB:                      ; JF6EB  TFR     0x20,A      ;F6EB 3E 20       LD      A,0x20         Put a space
                              ;        STA     ,X          ;F6ED 77          LD      (HL),A         Store space into point
                              ;        TFR     H,A         ;F6EE 7C          LD      A,H            H -> A
                              ;        ADDA    ,0x02       ;F6EF C6 02       ADD     A,0x02         Add 2
                              ;        TFR     A,H         ;F6F1 67          LD      H,A            Put A -> A
                              ;        TFR     0xA5,A      ;F6F2 3E A5       LD      A,0xA5         A5 -> A
                              ;        STA     ,X          ;F6F4 77          LD      (HL),A         Put A5 -> A
                              ;        RTS                 ;F6F5 C9          RET
            rts
;*********************************************************************
ASMF700:                      ; MOVE ALIEN AI
MOVALN:
;*********************************************************************
                              ; MOVALN  LDA     0xF800      ;F700 3A 00 F8    LD      A,(0xF800)    A=AlienX
                              ; BF703   CMPA    #$ 0        ;F703 FE 00       CP      0x00          If zero...
                              ;         LBEQ    0xF70D      ;F705 28 06       JR      Z,0xF70D      ... goto F70D
                              ;         SUBA    #$ 0        ;F707 D6 05       SUB     0x05          else subtract 5 from X?
                              ;         LBCS    0xF71A      ;F709 38 0F       JR      C,0xF71A      if you had to borrow... goto F71A
                              ;         LBRA    0xF703      ;F70B 18 F6       JR      0xF703        Loop back to F703
                              ;---------------------------------------
                              ; BF70D   LDA     0xF801      ;F70D 3A 01 F8    LD      A,(0xF801)    A=AlienY
                              ; BF710   CMPA    #$ 0        ;F710 FE 00       CP      0x00          If zero...
                              ;         LBEQ    0xF731      ;F712 28 1D       JR      Z,0xF731      ... goto F731
                              ;         SUBA    #$ 0        ;F714 D6 06       SUB     0x06          else subtract 6 from Y?
                              ;         LBCS    0xF71A      ;F716 38 02       JR      C,0xF71A      if you had to borrow... goto F71A
                              ;         LBRA    0xF710      ;F718 18 F6       JR      0xF710        Loop back to F710
                              ;---------------------------------------
ASMF71A:                      ; BF71A   LDA     0xF800      ;F71A 3A 00 F8    LD      A,(0xF800)    A=AlienX
                              ;         TFR     A,B         ;F71D 47          LD      B,A           Mov A to B register
                              ;         LDA     0xF804      ;F71E 3A 04 F8    LD      A,(0xF804)    Load temp AlienX
                              ;         ADDA    ,B          ;F721 80          ADD     A,B           Add to AlienX position
                              ;         STA     0xF800      ;F722 32 00 F8    LD      (0xF800),A    Save new AlienX position
                              ;         LDA     0xF801      ;F725 3A 01 F8    LD      A,(0xF801)    A=AliexY
                              ;         TFR     A,B         ;F728 47          LD      B,A           Move A to B register
                              ;         LDA     0xF805      ;F729 3A 05 F8    LD      A,(0xF805)    Load temp AlienY
                              ;         ADDA    ,B          ;F72C 80          ADD     A,B           Add to Alien Y Position
                              ;         STA     0xF801      ;F72D 32 01 F8    LD      (0xF801),A    Save new AlienY position
                              ;         RTS                 ;F730 C9          RET                   Alien move is done - return to BASIC game
                              ;---------------------------------------
                              ; BF731   LDA     0xF802      ;F731 3A 02 F8    LD      A,(0xF802)    A=PlayerX
                              ;         TFR     A,B         ;F734 47          LD      B,A           Move A to B register
                              ;         LDA     0xF800      ;F735 3A 00 F8    LD      A,(0xF800)    A=AlienX
                              ;         SUBA    ,B          ;F738 90          SUB     B             Subract AlienX from PlayerX
                              ;         LBCS    0xF745      ;F739 38 0A       JR      C,0xF745      If borrow goto F745
                              ;         NEGA                ;F73B ED 44       NEG                   Negate
                              ;         TFR     A,C         ;F73D 4F          LD      C,A           Put difference in temporary spot CReg
                              ;         TFR     0xFF,A      ;F73E 3E FF       LD      A,0xFF        Set direction to move to -1
                              ;         STA     0xF804      ;F740 32 04 F8    LD      (0xF804),A    Update X direction to move Alien (LEFT!)
                              ;         LBRA    0xF74B      ;F743 18 06       JR      0xF74B        Goto F74B
                              ;---------------------------------------
                              ; BF745   TFR     A,C         ;F745 4F          LD      C,A           A is X distance to player, put in CReg temp
                              ;         TFR     0x01,A      ;F746 3E 01       LD      A,0x01        A=1
                              ;         STA     0xF804      ;F748 32 04 F8    LD      (0xF804),A    Update X direction to move Alien (RIGHT!)
                              ;---------------------------------------
                              ; BF74B   LDA     0xF803      ;F74B 3A 03 F8    LD      A,(0xF803)    A=PlayerY
                              ;         TFR     A,B         ;F74E 47          LD      B,A           Move A to B
                              ;         LDA     0xF801      ;F74F 3A 01 F8    LD      A,(0xF801)    A=AlienY
                              ;         SUBA    ,B          ;F752 90          SUB     B             Get difference between PlayerY and AlienY
                              ;         LBCS    0xF75F      ;F753 38 0A       JR      C,0xF75F      If borrow
                              ;         NEGA                ;F755 ED 44       NEG                   Flip the Sign
                              ;         TFR     A,B         ;F757 47          LD      B,A           Now put B in A
                              ;         TFR     0xFF,A      ;F758 3E FF       LD      A,0xFF        Set A to -1
                              ;         STA     0xF805      ;F75A 32 05 F8    LD      (0xF805),A    Update Y direction to move Alien (UP!)
                              ;         LBRA    0xF765      ;F75D 18 06       JR      0xF765        Goto F765
                              ;---------------------------------------
                              ; BF75F   TFR     A,B         ;F75F 47          LD      B,A           A is Y distance to player, put in BReg
                              ;         TFR     0x01,A      ;F760 3E 01       LD      A,0x01        A=1
                              ;         STA     0xF805      ;F762 32 05 F8    LD      (0xF805),A    Update Y direction to move Alien (DOWN!)
                              ;---------------------------------------
                              ; BF765   TFR     B,A         ;F765 78          LD      A,B
                              ;         DEC     C           ;F766 0D          DEC     C
                              ;         DECA                ;F767 3D          DEC     A
                              ;         SUBA    ,C          ;F768 91          SUB     C
                              ;         LBCS    0xF772      ;F769 38 07       JR      C,0xF772      If borrow goto F772
                              ;         TFR     0x00,A      ;F76B 3E 00       LD      A,0x00        Clear A
                              ;         STA     0xF805      ;F76D 32 05 F8    LD      (0xF805),A    Update Y direction to move Alien (SAME ROW)
                              ;         LBRA    0xF71A      ;F770 18 A8       JR      0xF71A        Go back to top
                              ;---------------------------------------
                              ; BF772   TFR     0x00,A      ;F772 3E 00       LD      A,0x00        Clear A
                              ;         STA     0xF804      ;F774 32 04 F8    LD      (0xF804),A    Update X direction to move Alien (SAME COL)
                              ;         LBRA    0xF71A      ;F777 18 A1       JR      0xF71A        Go back to top
            lbra  ASMF71A
 
;*********************************************************************
ASMF790:                      ; UPDATE PLAYER POINTER TO PLACE TO DRAW
                              ; ALSO USED FOR ALIEN, WALLS, ETC
DRWPLR:
;*********************************************************************
                              ;        LDA     0xF802      ;F790 3A 02 F8    LD      A,(0xF802)     PlayerX -> A
                              ;        TFR     A,D         ;F793 57          LD      D,A            Save A to D
                              ;        LDA     0xF803      ;F794 3A 03 F8    LD      A,(0xF803)     PlayerY -> A
                              ;        ADDA    ,0x02       ;F797 C6 02       ADD     A,0x02         Add 2 to Y
                              ;        TFR     A,L         ;F799 6F          LD      L,A            Save A to L
                              ;        TFR     0x00,H      ;F79A 26 00       LD      H,0x00         Zero out H
                              ;        ADD     X=X+X       ;F79C 29          ADD     HL,HL          +2
                              ;        ADD     X=X+X       ;F79D 29          ADD     HL,HL          +4
                              ;        ADD     X=X+X       ;F79E 29          ADD     HL,HL          +8
                              ;        ADD     X=X+X       ;F79F 29          ADD     HL,HL          +16
                              ;        ADD     X=X+X       ;F7A0 29          ADD     HL,HL          +32
                              ;        TFR     D,A         ;F7A1 7A          LD      A,D            Pull back PlayerX
                              ;        INCA                ;F7A2 3C          INC     A              Add an X
                              ;        ADDA    ,L          ;F7A3 85          ADD     A,L            Now add 32 from L?
                              ;        TFR     A,L         ;F7A4 6F          LD      L,A            Save A to L
                              ;        TFR     H,A         ;F7A5 7C          LD      A,H            Load H into A
                              ;        ADC     A,0xC2 - Fix;F7A6 CE C2       ADC     A,0xC2         Now put in a C2
                              ;        TFR     A,H         ;F7A8 67          LD      H,A            Put C2 into H - high part of pointer
                              ;        TFR     B,A         ;F7A9 78          LD      A,B            Pull B into A - character to show at pointer
                              ;        STA     ,X          ;F7AA 77          LD      (HL),A         Put character onto screen
                              ;        RTS                 ;F7AB C9          RET
                              ;---------------------------------------
            lda   PLAYERX
            sta   TX
            lda   PLAYERY
            sta   TY
            jsr   DRAWCH
            rts
 
;*********************************************************************
DRWALN:
;*********************************************************************
            lda   ALIENX
            sta   TX
            lda   ALIENY
            sta   TY
            jsr   DRAWCH
            rts
 
 
;*********************************************************************
ASMF7B0:                      ; ALIEN CAUGHT PLAYER?
;*********************************************************************
                              ;        TFR     0x00,A      ;F7B0 3E 00       LD      A,0x00         Zero out player caught flag
                              ;        STA     0xF80B      ;F7B2 32 0B F8    LD      (0xF80B),A     Store it
            clr   CAUGHT      ; Clear out the Player Caught flag
                              ;---------------------------------------
                              ;        LDA     0xF802      ;F7B5 3A 02 F8    LD      A,(0xF802)     Get PlayerX -> A
                              ;        TFR     A,B         ;F7B8 47          LD      B,A            Move A -> B
                              ;        LDA     0xF800      ;F7B9 3A 00 F8    LD      A,(0xF800)     Get AlienX -> A
                              ;        CMPA    B_Temp      ;F7BC B8          CP      B              Same X coordinate?
                              ;        BNE to RTS address  ;F7BD C0          RET     NZ             No, not caught so return
            lda   PLAYERX     ; Where is the player?
            cmpa  ALIENX      ; Compare to Alien ...
            beq   ASMF7BE     ; Hmm, X pos are same, check Y
            rts               ; Not caught so return
 
ASMF7BE:
                              ;---------------------------------------
                              ;        LDA     0xF803      ;F7BE 3A 03 F8    LD      A,(0xF803)     Yes, so now check PlayerY -> A
                              ;        TFR     A,B         ;F7C1 47          LD      B,A            Move A -> B
                              ;        LDA     0xF801      ;F7C2 3A 01 F8    LD      A,(0xF801)     Get AlienY -> A
                              ;        CMPA    B_Temp      ;F7C5 B8          CP      B              Same Y coordinate?
                              ;        BNE to RTS address  ;F7C6 C0          RET     NZ             No, not caught so return
            lda   PLAYERY     ; Where is the player?
            cmpa  ALIENY      ; Compare to Alien ...
            beq   ASMF7C7     ; Hmm, Y pos are same too? WE GOTCHA!
            rts               ; Not caught so return
 
ASMF7C7:
                              ;---------------------------------------
                              ;        TFR     0x01,A      ;F7C7 3E 01       LD      A,0x01         Yes, whoops got caught
                              ;        STA     0xF80B      ;F7C9 32 0B F8    LD      (0xF80B),A     Save that caught flag
                              ;        RTS                 ;F7CC C9          RET
            lda   #1          ; YES, Player caught, signal with a 1
            sta   CAUGHT      ; Save that for later
            rts               ; let's go back
 
;*********************************************************************
ASMF7D0:                      ; UPDATE HELD ITEM COUNTS ON SCREEN
                              ; S=Shuttle H=Held
                              ; F807 DRAWN TO C2BE Diamond S-H
                              ; F808 DRAWN TO C2DE Clubs   S-H
                              ; F809 DRAWN TO C2FE Hearts  S-H
                              ; F80A DRAWN TO C31E Spades  S-H
;*********************************************************************
                              ;        TFR     0xC2BE,X    ;F7D0 21 BE C2    LD      HL,0xC2BE      HL pointer to C2BE
                              ;        TFR     0xF807,U    ;F7D3 DD 21 07    LD      IX,0xF807      IX pointer to current item count
                              ;        TFR     0x0020,U    ;F7D7 01 20 00    LD      BC,0x0020      Move a 32 (screen line?)
ASMF7DA:                      ; JF7DA  LDA     $E ,U       ;F7DA DD 7E 00    LD      A,(IX+0)       Get current item count
                              ;        ADDA    ,0x30       ;F7DD C6 30       ADD     A,0x30         Turn it into ASCII number
                              ;        STA     ,X          ;F7DF 77          LD      (HL),A         Store it into C2BE pointer
                              ;        ADD     X=X+U       ;F7E0 09          ADD     HL,BC          Move down a screen line
                              ;        TFR     L,A         ;F7E1 7D          LD      A,L            Get low byte of pointer
                              ;        CMPA    #$ 3        ;F7E2 FE 3E       CP      0x3E           Are we looking at 5th line @ C23E
                              ;        BEQ to RTS address  ;F7E4 C8          RET     Z              Done
            rts
                              ;        INC     U           ;F7E5 DD 23       INC     IX             Add one to count
                              ;        LBRA    0xF7DA      ;F7E7 18 F1       JR      0xF7DA         Loop Back
            lbra  ASMF7DA
 
;*********************************************************************
;* RoutineName - expanded name or phrase describing purpose
;*  Brief description
;*
;* I/O: what is expected and produced
;*
;* Calling Convention: how is this called?
;*
;* Returns:
;*
;* Stack Usage: (when needed) structure of stacked data
;*
;* Calls: Info about routines called
;*
;* Changes: registers destroyed.
;*********************************************************************
                              ; SOUND MIXER CONTROL/IO ENABLE
                              ; 60 = 00111100
                              ; B7 IO Port B Input Enable
                              ; B6 IO Port A Input Enable
                              ; B5 Noise Enable C OFF
                              ; B4 Noise Enable B OFF
                              ; B3 Noise Enable A OFF
                              ; B2 Tone Enable C OFF
                              ; B1 Tone Enable B ON
                              ; B0 Tone Enable A ON
BAS0220:                      ; 220 SOUND 7,60
 
                              ; SOUND WHEN YOU HIT WALL
                              ; SOUND MIXER CONTROL/IO ENABLE
                              ; 55 = 00110111
                              ; B7 IO Port B Input Enable
                              ; B6 IO Port A Input Enable
                              ; B5 Noise Enable C OFF
                              ; B4 Noise Enable B OFF
                              ; B3 Noise Enable A ON
                              ; B2 Tone Enable C OFF
                              ; B1 Tone Enable B OFF
                              ; B0 Tone Enable A OFF
                              ; 230 IF PEEK(&HF80F)=1 THEN SOUND7,55
 
                              ; ENVELOPE PERIOD CONTROL FINE TUNE
                              ; 9 = 00001001
                              ; 240 SOUND 13,9
 
                              ; DID THE ALIEN CATCH YOU?
                              ; 250 IF PEEK(&HF80B)=1 THEN GOTO 800
 
                              ; DID YOU MAKE IT INTO SHUTTLE? COUNT POINTS
                              ; RESET COUNT OF COMPLETED ITEM TYPES
                              ; SETUP FOR NEXT LEVEL
                              ; 260 IF PEEK(&HF802)=22 THEN GOSUB 600:IF PX=4 THEN PX=0:GOTO 3000
 
                              ; TOTAL TIME = CURRENT TIME - START TIME
                              ; TIME LEFT = 300 - INTEGER TOTAL TIME / 1000
                              ; 270 TT=TIME-T:TL=300-INT(TT/1000)
 
                              ; IF TIME LEFT < 0 THEN JUMP 400 TIME OVER
                              ; 280 IF TL<0 THEN GOTO 400
 
                              ; UPDATE TIME LEFT ON SCREEN
                              ; 290 LOCATE28,11:PRINT RIGHT$("  "+STR$(TL),3)
 
                              ; LOOP BACK
                              ; 300 GOTO 200
            jmp   BAS0200
 
;*********************************************************************
;* TIMEOVER
;*  Brief description
;*
;* I/O: what is expected and produced
;*
;* Calling Convention: how is this called?
;*
;* Returns:
;*
;* Stack Usage: (when needed) structure of stacked data
;*
;* Calls: Info about routines called
;*
;* Changes: registers destroyed.
;*********************************************************************
TIMEOVER:
                              ; 400 REM**** TIME OVER
 
                              ; PRINT OUT ZEROED TIME
                              ; 410 LOCATE28,11:PRINT"   0";
 
                              ; PRINT TIME OVER BANNER
                              ; 415 LOCATE3,8:PRINT" T I M E  O V E R"
 
                              ; SET VOLUME AND NOTE LENGTH
                              ; 420 PLAY"V13L12","V13L12"
 
                              ; TRANSPOSE DOWN ONE OCTAVE FOR COCO EXT BAS
                              ; PLAY"O5CO4BA+AG+GF+FED+DC+C"
                              ; 430 PLAY"O6CO5BA+AG+GF+FED+DC+C","O6C+CO5BA+AG+GF+FED+DC+"
 
                              ; SET NOTE LENGTH BACK TO 1/4TH NOTE?
                              ; 440 PLAY"L4","L4"
 
                              ; DELAY LOOP
                              ; 450 FOR I=1 TO 600:NEXT
 
                              ; TIME EXPIRED - PLAY AGAIN? SCREEN
                              ; 580 GOTO 9000
 
;*********************************************************************
;* POINT - COUNT POINTS WHEN IN SHUTTLE
;*  Brief description
;*
;* I/O: what is expected and produced
;*
;* Calling Convention: how is this called?
;*
;* Returns:
;*
;* Stack Usage: (when needed) structure of stacked data
;*
;* Calls: Info about routines called
;*
;* Changes: registers destroyed.
;*********************************************************************
POINT:
                              ; 599 REM *****  point
 
                              ; DRAW ALIEN
                              ; 600 LOCATEPEEK(&HF800)+1,PEEK(&HF801)+2:PRINT"@";
 
                              ; IF HOLDING NO ITEMS RETURN TO MAIN LOOP
                              ; 610 IF PEEK(&HF806)=0 THEN RETURN
 
                              ; SOUND MADE IT INTO SHUTTLE WITH SUPPLIES
                              ; 615 GOSUB 7300
 
                              ; LOOP THRU ITEMS CARRIED
                              ; 620 PX=0:FOR I=0 TO 3
 
                              ; HOW MANY OF ITEM 0 TO 3 IS PLAYER HOLDING
                              ; 630 P(I)=PEEK(&HF807+I)
 
                              ; ZERO OUT THE HELD AMOUNT
                              ; 635 POKE&HF807+I,0
 
                              ; ADD THE AMOUNT TO THE PLAYERS SHUTTLE COUNT
                              ; 640 PS(I)=PS(I)+P(I)
 
                              ; CALCULATE PLACE ON SCREEN TO DRAW UPDATED COUNT
                              ; 650 LOCATE28,5+I
 
                              ; SETUP DEFAULT "NOT ENOUGH YET" COLOR
                              ; 655 COLOR1
 
                              ; IF PLAYER HAS ENOUGH IN SHUTTLE SETUP REVERSE COLOR
                              ; AND MAKE NOTE THEY ARE CLOSER TO VICTORY VIA PX
                              ; 660 IF PS(I)>PM THEN COLOR4:PX=PX+1
 
                              ; UPDATE SHUTTLE ITEMS DISPLAY
                              ; 670 PRINTRIGHT$(STR$(PS(I)),1):COLOR1:LOCATE30,5+I:PRINT"0"
 
                              ; CALCULATE SCORE BASED ON ITEMS RETRIEVED
                              ; FIXME THIS NEEDS CHANGES SO FURTHER ITEMS ARE WORTH MORE
                              ; 680 SC=SC+P(I)*(10+I*5)
 
                              ; FINISH LOOPING THROUGH HELD ITEMS
                              ; 690 NEXT
 
                              ; UPDATE SCORE TOTAL
                              ; 700 LOCATE26,2:PRINT RIGHT$("     "+STR$(SC),5)
 
                              ; ZERO OUT HELD ITEM COUNT
                              ; 710 POKE&HF806,0
 
                              ; 730 RETURN
 
;*********************************************************************
;* JUMP 800 ALIEN CAUGHT YOU
;*  Brief description
;*
;* I/O: what is expected and produced
;*
;* Calling Convention: how is this called?
;*
;* Returns:
;*
;* Stack Usage: (when needed) structure of stacked data
;*
;* Calls: Info about routines called
;*
;* Changes: registers destroyed.
;*********************************************************************
                              ; 800 REM<97><DE><8C>
                              ; 0000c88a 20                               0x20 ' '
                              ; 0000c88b 03                               0x03
                              ; 0000c88c 8e                               0x8e
                              ; 0000c88d 97                               0x97
                              ; 0000c88e de                               0xde
                              ; 0000c88f 8c                               0x8c
                              ; 0000c890 00                               0x00
 
                              ; TONE GENERATOR C 0 70
                              ; 810 SOUND 4,70:SOUND 5,0
 
                              ; TONE GENERATOR B 0 15
                              ; 820 SOUND 2,0:SOUND 3,15
 
                              ; VOLUME B = 15 VOLUME C = 15
                              ; 830 SOUND 9,15:SOUND10,15
 
                              ; SOUND MIXER CONTROL/IO ENABLE
                              ; 57 = 00111001
                              ; B7 IO Port B Input Enable
                              ; B6 IO Port A Input Enable
                              ; B5 Noise Enable C OFF
                              ; B4 Noise Enable B OFF
                              ; B3 Noise Enable A OFF
                              ; B2 Tone Enable C ON
                              ; B1 Tone Enable B ON
                              ; B0 Tone Enable A OFF
                              ; 840 SOUND 7,57
 
                              ; GET SET CURSOR TO ALIEN POSITION
                              ; 845 LOCATEPEEK(&HF800)+1,PEEK(&HF801)+2
 
                              ; FLASH ALIEN 8 TIMES
                              ; 850 FOR I=1TO 8
 
                              ; DRAW ALIEN IN BLACK ON GREEN
                              ; 855 COLOR4:PRINT"@";CHR$(29);
 
                              ; TONE GENERATOR B 0 15
                              ; 860 SOUND 3,15
 
                              ; DELAY
                              ; 870 FOR J=0 TO 50:NEXT
 
                              ; DRAW ALIEN BLACK ON WHITE
                              ; 875 COLOR2:PRINT"@";CHR$(29);
 
                              ; TONE GENERATOR B 0 13
                              ; 880 SOUND 3,13
 
                              ; DELAY
                              ; 890 FOR J=0 TO 50:NEXT
 
                              ; END OF FLASHING LOOP
                              ; 895 NEXT
 
                              ; PLAY ALIEN CAUGHT YOU SONG
                              ; 896 GOSUB 7100
 
                              ; LOSE A LIFE
                              ; 900 CR=CR-1
 
                              ; OUT OF LIVES? GAME OVER SCREEN
                              ; 910 IF CR=0 THEN GOTO 970
 
                              ; CLEAR ALIEN AND PLAYER FROM SCREEN
                              ; 915 COLOR1:PRINT" "
 
                              ; MOVE TO CREW REMAINING DISPLAY
                              ; 920 LOCATE 26,14
 
                              ; SETUP REVERSE VIDEO BLACK ON GREEN
                              ; 925 COLOR 4
 
                              ; DRAW UPDATED PLAYERS REMAINING
                              ; 930 FOR I=1 TO 4-CR:PRINT"  ";:NEXT
 
                              ; RESET COLORS TO BLACK ON GREEN
                              ; 935 COLOR 1
 
                              ; RESET PLAYER POSITION TO SHUTTLE
                              ; 940 POKE&HF802,22:POKE&HF803,9
 
                              ; RESET SOUND CHIP SETTINGS
                              ; 950 GOSUB 1390
 
                              ; CLEAR OUT ITEMS HELD
                              ; 955 POKE&HF806,0:POKE&HF807,0:POKE&HF808,0:POKE&HF809,0:POKE&HF80A,0
 
                              ; IF DIED IN TIME TRIAL, RE-ENABLE ALIEN MOVE - IF RET, PUT LD A,(**)
                              ; 956 IF PEEK(&HF700)=&HC9 THEN POKE&HF700,&H3A:RETURN
 
                              ; IF HELP HACK TRUE, RESET SCREEN NUMBER TO PREVIOUS
                              ; RE SETUP SCREEN FROM SCRATCH
                              ; RESET TIME
                              ; 957 IF H=1 THEN SS=SS-1:GOSUB 1000:T=T-100000
 
                              ; JUMP BACK TO MAIN LOOP
                              ; 960 GOTO 200
 
;*********************************************************************
;* GAME OVER SCREEN
;*  Brief description
;*
;* I/O: what is expected and produced
;*
;* Calling Convention: how is this called?
;*
;* Returns:
;*
;* Stack Usage: (when needed) structure of stacked data
;*
;* Calls: Info about routines called
;*
;* Changes: registers destroyed.
;*********************************************************************
GAMEOVER:
                              ; 970 LOCATE3,8:PRINT"G A M E  O V E R"
 
                              ; SOUND MIXER CONTROL/IO ENABLE
                              ; SHUT OFF ALL SOUNDS
                              ; 63 = 00111111
                              ; B7 IO Port B Input Enable
                              ; B6 IO Port A Input Enable
                              ; B5 Noise Enable C OFF
                              ; B4 Noise Enable B OFF
                              ; B3 Noise Enable A OFF
                              ; B2 Tone Enable C OFF
                              ; B1 Tone Enable B OFF
                              ; B0 Tone Enable A OFF
                              ; 975 SOUND 7,63
 
                              ; PLAY AGAIN BANNER/PROMPT
                              ; 980 GOTO 9000
 
;*********************************************************************
;* SUBROUTINE 1000 SETUP SCREEN AND SOUND CHIP
;*  Brief description
;*
;* I/O: what is expected and produced
;*
;* Calling Convention: how is this called?
;*
;* Returns:
;*
;* Stack Usage: (when needed) structure of stacked data
;*
;* Calls: Info about routines called
;*
;* Changes: registers destroyed.
;*********************************************************************
ROWTOP:     fcb   $F8,$F2,$F2,$F9,$60,$F8,$F2,$F2,$F9,$60,$F8,$F2,$F2,$F9,$60,$F8,$F2,$F2,$F9
ROWMID:     fcb   $F4,$FF,$FF,$F3,$60,$F4,$FE,$FE,$F3,$60,$F4,$FD,$FD,$F3,$60,$F4,$FC,$FC,$F3
ROWBOT:     fcb   $FA,$F1,$F1,$FB,$60,$FA,$F1,$F1,$FB,$60,$FA,$F1,$F1,$FB,$60,$FA,$F1,$F1,$FB
 
TEMPCHAR:   rmb   1           ; A place to hold a single temporary character for screen printing
 
                              ; FIXME COLOR1 - COLOR4 Setup for CoCo/2/3 CMP/3 RGB/ PAL
COLOR1:                       ; NEC PC6001 COLOR 1 white chars on black background
            ldd   #$040C      ; Palette 4 (Buff) Palette C (Black)
            sta   CLRFORE     ; Store to Foreground
            stb   CLRBACK     ; Store to Background
            rts
 
COLOR2:                       ; NEC PC6001 COLOR 2 black chars on white background
            ldd   #$0C04      ; Palette C (Black) Palette 4 (Buff)
            sta   CLRFORE     ; Store to Foreground
            stb   CLRBACK     ; Store to Background
            rts
COLOR3:                       ; NEC PC6001 COLOR 3 green chars on black background
            ldd   #$0908      ; Palette 0 (Green) Palette C (Black)
            sta   CLRFORE     ; Store to Foreground
            stb   CLRBACK     ; Store to Background
            rts
COLOR4:                       ; NEC PC6001 COLOR 4 black chars on green background
            ldd   #$0809      ; Palette C (Black) Palette 0 (Green)
            sta   CLRFORE     ; Store to Foreground
            stb   CLRBACK     ; Store to Background
            rts
 
BAS1000:                      ; 1000 CLS:PRINT " NOSTROMO ";
            jsr   CLEAR       ;     CLEAR SCREEN
                              ;     PRINT NOSTROMO IN WHITE ON BLACK
            ldd   #$0100      ;     start drawing at ...
            sta   TX          ;      ... column 1
            stb   TY          ;      ... row 0
            ldx   #TXTNAME    ;      load X with pointer to string
            stx   STRPTR      ;      ... and store in string pointer
            lda   #8          ;      load A with length of string
            sta   STRLEN      ;      ... and store in string length
            jsr   PRINTAT     ;      now go print string at
 
BAS1005:                      ; 1005 SS=SS+1:COLOR4:PRINTSS;:COLOR1:PRINT"-";:COLOR3:PRINTPM+1:COLOR1
            inc   SS          ;     SCREEN = SCREEN +1
 
            jsr   COLOR4      ;     COLOR BLACK ON GREEN
 
            ldd   #$0A00      ;     draw first space to set SS field
            sta   TX          ;     ... column 10
            stb   TY          ;     ... row 0
            ldb   #$60        ;     space
            jsr   DRAWCH      ;     draw it
 
            ldd   #$0B00      ;     draw second space to set SS field
            sta   TX          ;     ... column 11
            stb   TY          ;     ... row 0
            ldb   #$60        ;     space
            jsr   DRAWCH      ;     draw it
 
            ldd   #$0B00      ;     start drawing at ... FIXME should be 2 digit for SS display
            sta   TX          ;      ... column 10 and 11
            stb   TY          ;      ... row 0
            ldb   SS          ;     SHOW CURRENT SCREEN NUMBER
            addb  #$70        ;     convert from value to numeric character to display in CGROM60 font
            jsr   DRAWCH      ;     now go print character
 
            jsr   COLOR1      ;     COLOR WHITE ON BLACK
 
            ldd   #$0C00      ;     start drawing at ...
            sta   TX          ;      ... column 12
            stb   TY          ;      ... row 0
            ldb   #$6D        ;     SHOW DASH
            jsr   DRAWCH      ;     now go print character
 
            jsr   COLOR3      ;     COLOR GREEN ON BLACK
 
            ldd   #$0E00      ;     start drawing at ... FIXME should be 2 digits for PM display?
            sta   TX          ;      ... column 14
            stb   TY          ;      ... row 0
            ldb   PM          ;     SHOW HOW MANY OF EACH ITEM NEEDED
            incb              ;     gets us visual PM+1 used in BASIC statement
            addb  #$70        ;     convert from value to numeric character to display in CGROM60 font
            jsr   DRAWCH      ;     now go print characters
 
            jsr   COLOR1      ;     COLOR WHITE ON BLACK
 
                              ;     ZERO OUT PLAYER SHUTTLE ITEM COUNTS
BAS1006:                      ; 1006 FOR I=0 TO 3:PS(I)=0:NEXT
            clr   PS0         ;     Player Shuttle 0 = 0
            clr   PS1         ;     Player Shuttle 1 = 0
            clr   PS2         ;     Player Shuttle 2 = 0
            clr   PS3         ;     Player Shuttle Item Count 3 = 0
 
                              ;     CB06 FDB F2 03 95 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 00 ;0xCB22
BAS1010:                      ; 1010 PRINT"                       "
 
                              ;     CB25 FDB FC 03 95 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 00 ;0xCB41
BAS1020:                      ; 1020 PRINT"                       "
 
                              ;     CB44 FDB 06 04 95 22 20 20 14 48 14 42 14 42 14 49 20 14 48 14 42 14 42 14 49 20 14 48 14 42 14 42 14 49 20 14 48 14 42 14 42 14 49 20 20 22 00 ; 0xCB70
BAS1030:                      ; 1030 PRINT"  HBBI HBBI HBBI HBBI  "
            ldd   #$0203      ;     Start printing at Column 2, Row 3
            sta   TX          ;     PRINTAT Column goes in Tile X
            stb   TY          ;     PRINTAT Row goes in Tile Y
            ldx   #ROWTOP     ;     Get the address of the string of stuff to print - top walls of a cargo area
            stx   STRPTR      ;     PRINTAT String start pointer
            lda   #19         ;     How many tiles are we printing?
            sta   STRLEN      ;     PRINTAT String Length
            jsr   PRINTAT     ;     Setup is done, go print it to screen map to be rendered
 
BAS1035:                      ; 1035 FOR I=1 TO 3
 
                              ; CB81 FDB 10 04 95 22 20 20 14 44 83 83 14 43 20 14 44 82 82 14 43 20 14 44 81 81 14 43 20 14 44 80 80 14 43 20 20 22 00 ; 0xCBA5
BAS1040:                      ; 1040 PRINT"  D..C D..C D..C D..C  "
            ldd   #$0204      ;     Start printing at Column 2, Row 4
            sta   TX          ;     PRINTAT Column goes in Tile X
            stb   TY          ;     PRINTAT Row goes in Tile Y
            ldx   #ROWMID     ;     Get address of stuff to print - middle rows of cargo areas
            stx   STRPTR      ;     PRINTAT String start pointer
            lda   #19         ;     How many tiles are we printing?
            sta   STRLEN      ;     PRINTAT String length
            jsr   PRINTAT     ;     Setup is done, go print it to the screen map to be rendered
 
            ldd   #$0205      ;     Next line at Column 2, Row 5
            sta   TX          ;     PRINTAT Column goes in Tile X
            stb   TY          ;     PRINTAT Row goes in Tile Y
            ldx   #ROWMID     ;     Get address of stuff to print - middle rows of cargo areas
            stx   STRPTR      ;     PRINTAT String start pointer
            lda   #19         ;     How many tiles are we printing?
            sta   STRLEN      ;     PRINTAT String length
            jsr   PRINTAT     ;     Setup is done, go print it to the screen map to be rendered
 
            ldd   #$0206      ;     Next line at Column 2, Row 6
            sta   TX          ;     PRINTAT Column goes in Tile X
            stb   TY          ;     PRINTAT Row goes in Tile Y
            ldx   #ROWMID     ;     Get address of stuff to print - middle rows of cargo areas
            stx   STRPTR      ;     PRINTAT String start pointer
            lda   #19         ;     How many tiles are we printing?
            sta   STRLEN      ;     PRINTAT String length
            jsr   PRINTAT     ;     Setup is done, go print it to the screen map to be rendered
 
BAS1045:                      ; 1045 NEXT
 
                              ; CBAE FDB 1A 04 95 22 20 20 14 4A 14 41 14 41 14 4B 20 14 4A 14 41 14 41 14 4B 20 14 4A 14 41 14 41 14 4B 20 14 4A 14 41 14 41 14 4B 20 20 22 00 ; 0xCBDA
BAS1050:                      ; 1050 PRINT"  JAAK JAAK JAAK JAAK  "
            ldd   #$0207      ;     Next line at Column 2, Row 7
            sta   TX          ;     PRINTAT Column goes in Tile X
            stb   TY          ;     PRINTAT Row goes in Tile Y
            ldx   #ROWBOT     ;     Get address of stuff to print - bottom row of cargo areas
            stx   STRPTR      ;     PRINTAT String start pointer
            lda   #19         ;     How many tiles are we printing?
            sta   STRLEN      ;     PRINTAT String length
            jsr   PRINTAT     ;     Setup is done, go print it to the screen map to be rendered
 
                              ; CBDD FDB F2 03 95 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 00 ;0xCBF9
BAS1055:                      ; 1055 PRINT"                       "
 
                              ; CBFC FDB 06 04 95 22 20 20 14 48 14 42 14 42 14 49 20 14 48 14 42 14 42 14 49 20 14 48 14 42 14 42 14 49 20 14 48 14 42 14 42 14 49 20 20 22 00 ; 0xCC28
BAS1060:                      ; 1060 PRINT"  HBBI HBBI HBBI HBBI  "
            ldd   #$0209      ;     Next line at Column 2, Row 9
            sta   TX          ;     PRINTAT Column goes in Tile X
            stb   TY          ;     PRINTAT Row goes in Tile Y
            ldx   #ROWTOP     ;     Get address of stuff to print - top row of cargo areas
            stx   STRPTR      ;     PRINTAT String start pointer
            lda   #19         ;     How many tiles are we printing?
            sta   STRLEN      ;     PRINTAT String length
            jsr   PRINTAT     ;     Setup is done, go print it to the screen map to be rendered
 
                              ; CC2B FDB 10 04 95 22 20 20 14 44 83 83 14 43 20 14 44 82 82 14 43 20 14 44 81 81 14 43 20 14 44 80 80 14 43 20 20 22 00 ; 0xCC51
BAS1070:                      ; 1070 PRINT"  D..C D..C D..C D..C  "
            ldd   #$020A      ;     Next line at Column 2, Row 10
            sta   TX          ;     PRINTAT Column goes in Tile X
            stb   TY          ;     PRINTAT Row goes in Tile Y
            ldx   #ROWMID     ;     Get address of stuff to print - middle rows of cargo areas
            stx   STRPTR      ;     PRINTAT String start pointer
            lda   #19         ;     How many tiles are we printing?
            sta   STRLEN      ;     PRINTAT String length
            jsr   PRINTAT     ;     Setup is done, go print it to the screen map to be rendered
 
                              ; CC54 FDB 10 04 95 22 20 20 14 44 83 83 14 43 20 14 44 82 82 14 43 20 14 44 81 81 14 43 20 14 44 80 80 14 43 20 20 22 00 ; 0xCC7A
BAS1080:                      ; 1080 PRINT"  D..C D..C D..C D..C  "
            ldd   #$020B      ;     Next line at Column 2, Row 11
            sta   TX          ;     PRINTAT Column goes in Tile X
            stb   TY          ;     PRINTAT Row goes in Tile Y
            ldx   #ROWMID     ;     Get address of stuff to print - middle rows of cargo areas
            stx   STRPTR      ;     PRINTAT String start pointer
            lda   #19         ;     How many tiles are we printing?
            sta   STRLEN      ;     PRINTAT String length
            jsr   PRINTAT     ;     Setup is done, go print it to the screen map to be rendered
 
                              ; CC7D FDB 42 04 95 22 20 20 14 44 83 83 14 43 20 14 44 82 82 14 43 20 14 44 81 81 14 43 20 14 44 80 80 14 43 20 20 20 20 22 00 ; 0xCCA3
BAS1090:                      ; 1090 PRINT"  D..C D..C D..C D..C    " ; 2 extra spaces for open shuttle
            ldd   #$020C      ;     Next line at Column 2, Row 12
            sta   TX          ;     PRINTAT Column goes in Tile X
            stb   TY          ;     PRINTAT Row goes in Tile Y
            ldx   #ROWMID     ;     Get address of stuff to print - middle rows of cargo areas
            stx   STRPTR      ;     PRINTAT String start pointer
            lda   #19         ;     How many tiles are we printing?
            sta   STRLEN      ;     PRINTAT String length
            jsr   PRINTAT     ;     Setup is done, go print it to the screen map to be rendered
 
                              ; CCA6 FDB 4C 04 95 22 20 20 14 4A 14 41 14 41 14 4B 20 14 4A 14 41 14 41 14 4B 20 14 4A 14 41 14 41 14 4B 20 14 4A 14 41 14 41 14 4B 20 20 22 00 ; 0xCCD2
BAS1100:                      ; 1100 PRINT"  JAAK JAAK JAAK JAAK  "
            ldd   #$020D      ;     Next line at Column 2, Row 13
            sta   TX          ;     PRINTAT Column goes in Tile X
            stb   TY          ;     PRINTAT Row goes in Tile Y
            ldx   #ROWBOT     ;     Get address of stuff to print - bottom row of cargo areas
            stx   STRPTR      ;     PRINTAT String start pointer
            lda   #19         ;     How many tiles are we printing?
            sta   STRLEN      ;     PRINTAT String length
            jsr   PRINTAT     ;     Setup is done, go print it to the screen map to be rendered
 
                              ; CCD5 FDB 56 04 95 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 00 ;0xCCF1
BAS1110:                      ; 1110 PRINT"                       "
 
                              ; CCF4 FDB 60 04 95 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 00 ;0xCD11
BAS1120:                      ; 1120 PRINT"                       ";
 
 
;*********************************************************************
;* PLACECARGO - Determine how much cargo is left in each hold
;*   loop through 8 cargo holds... far upper left, far lower left
;*   then next column over. In each hold are already 6 resources.
;*   This routine replaces a random location with a space for empty
;*   cargo spot, and two spaces are replaced with unbreakable magenta
;*   cargo boxes. The empty and magenta locations may overlap, meaning
;*   a cargo hold can have up to 5 resources a magenta box
;*   or 4 resources with 2 magenta boxes or a magenta box and a space,
;*   or 3 resources with 2 magenta boxes and a space.
;*
;* I/O: Memory only
;*
;* Calling Convention: Fall through from above
;*
;* Returns: updated game map cargo bay contents
;*          resources, empty spaces, or unbreakable magenta cargo boxes
;*
;* Stack Usage: (when needed) structure of stacked data
;*
;* Calls: RND2, RND3, PRINTAT
;*
;* Changes: Everything.
;*********************************************************************
 
            bra  PLACECARGO   ; FIXME skip over data
EMPTYCARGO: fcb  $60          ; TRS-80 SPACE for empty cargo spot
PINKCARGO:  fcb  $EF          ; TRS-80 Semi4 magenta full block
 
PLACECARGO:                   ; FIXME DOING THIS ALL WRONG BUT GETTING CLOSE
                              ; LOOP THROUGH CARGO HOLDS LEFT TO RIGHT
BAS1130:                      ; 1130 FOR X=3 TO 18 STEP5
            ldx   #3          ; Use X in the outer loop for where to draw
            lda   #3          ; We'll need it in A to put into the global
            sta   TX          ; Store it into TileX (TX)
CARGOX:                       ; OUR CARGO OUTER LOOP COLUMN BY COLUMN
 
                              ; LOOP THROUGH CARGO HOLDS TOP TO BOTTOM
BAS1140:                      ; 1140 FOR Y=4 TO 10 STEP6
            ldy   #3          ; We'll use Y in the inner loop for where to draw
            ldb   #3          ; We'll need it in B to put into the global
            stb   TY          ; Store it into TileY (TY)
CARGOY:                       ; CARGO INNER LOOP TOP THEN BOTTOM ROW
 
 
                              ; PICK A RANDOM CARGO SPOT
BAS1150:                      ; 1150 A=RND(1)*2:B=RND(1)*3
            jsr   RND2        ; RND 1 of 2 returns 0 or 1
            adda  TX          ; Stay on column or move right 1
            sta   TX          ; Update TileX to draw on
            jsr   RND3        ; RND 1 of 3 returns 0, 1, or 2
            addb  TY          ; Stay on row or drop down 1 or 2
            stb   TY          ; Update TileY to draw on
 
                              ; BLANK IT OUT
BAS1160:                      ; 1160 LOCATEX+A,Y+B:PRINT" ";
                              ; 0000cd58 3a                               0x3a ':'
                              ; 0000cd59 95                               0x95
                              ; 0000cd5a 22                               0x22 '"'
                              ; 0000cd5b 20                               0x20 ' '
                              ; 0000cd5c 22                               0x22 '"'
                              ; 0000cd5d 3b                               0x3b ';'
                              ; 0000cd5e 00                               0x00
            pshs  X           ; We're gonna mangle our column holder save it
            jsr   COLOR1      ; white foreground on black background
            ldx   #EMPTYCARGO ; load X with pointer to string
            stx   STRPTR      ; ... and store in temp
            lda   #1          ; load Y with length of string
            sta   STRLEN      ; ... and store in temp
            jsr   PRINTAT     ; now go print string at
            puls  X           ; Restored it after use as string pointer
            TFR   X,D         ; Move X to D so we can chop out 8 bits
            stb   TX          ; FIXME stupid 16-bit to 8-bit thunk
            TFR   Y,D         ; Move Y to D so we can chop out 8 bits
            stb   TY          ; FIXME stupid 16-bit to 8-bit thunk
 
                              ; PICK A RANDOM CARGO LOCATION
BAS1170:                      ; 1170 A=INT(RND(1)*2):B=INT(RND(1)*3)
            jsr   RND2        ; RND 1 of 2 returns 0 or 1
            adda  TX          ; Stay on column or move right 1
            sta   TX          ; Update TileX to draw on
            jsr   RND3        ; RND 1 of 3 returns 0, 1, or 2
            addb  TY          ; Stay on row or drop down 1 or 2
            stb   TY          ; Update TileY to draw on
 
                              ; DRAW A MAGENTA BOX
BAS1180:                      ; 1180 LINE((X+A)*8,(Y+B)*12)-((X+A+1)*8-1,(Y+B+1)*12-1),7,B
 
            pshs  X           ; We're gonna mangle our column holder save it
            ldd   #$060C      ; load up magenta on black
            sta   CLRFORE     ; setup foreground to magenta
            stb   CLRBACK     ; setup background to black
            ldx   #PINKCARGO  ; load X with pointer to string
            stx   STRPTR      ; ... and store in temp
            lda   #1          ; load Y with length of string
            sta   STRLEN      ; ... and store in temp
            jsr   PRINTAT     ; now go print string at
            puls  X           ; Restored it after use as string pointer
            TFR   X,D         ; Move X to D so we can chop out 8 bits
            stb   TX          ; FIXME stupid 16-bit to 8-bit thunk
            TFR   Y,D         ; Move Y to D so we can chop out 8 bits
            stb   TY          ; FIXME stupid 16-bit to 8-bit thunk
 
                              ; PICK ANOTHER RANDOM CARGO LOCATION
BAS1190:                      ; 1190 A=INT(RND(1)*2):B=INT(RND(1)*3)
            jsr   RND2        ; RND 1 of 2 returns 0 or 1
            adda  TX          ; Stay on column or move right 1
            sta   TX          ; Update TileX to draw on
            jsr   RND3        ; RND 1 of 3 returns 0, 1, or 2
            addb  TY          ; Stay on row or drop down 1 or 2
            stb   TY          ; Update TileY to draw on
 
                              ; DRAW ANOTHER MAGENTA BOX
BAS1200:                      ; 1200 LINE((X+A)*8,(Y+B)*12)-((X+A+1)*8-1,(Y+B+1)*12-1),7,B
            pshs  X           ; We're gonna mangle our column holder save it
            ldd   #$060C      ; load up magenta on black
            sta   CLRFORE     ; setup foreground to magenta
            stb   CLRBACK     ; setup background to black
            ldx   #PINKCARGO  ; load X with pointer to string
            stx   STRPTR      ; ... and store in temp
            lda   #1          ; load Y with length of string
            sta   STRLEN      ; ... and store in temp
            jsr   PRINTAT     ; now go print string at
            puls  X
                              ; END LOOPS THROUGH ALL CARGO LOCATIONS
BAS1210:                      ; 1210 NEXT Y:NEXT X
            cmpy  #9          ; done with bottom row?
            beq   NEXTX       ; yes move on to next column of cargo
            leay  6,y         ; Y += 6
            tfr   Y,D
            stb   TY
            lbra  CARGOY     ; go back and do next row FIXME bloated
NEXTX:
            cmpx  #18         ; In rightmost cargo?
            beq   CARGOXIT    ; done with cargo
            leax  5,x         ; X += 5
            tfr   X,D
            stb   TX
            lbra  CARGOX     ; go back and do next column FIXME bloated
CARGOXIT:
 
 
;*********************************************************************
;* RoutineName - expanded name or phrase describing purpose
;*  Brief description
;*
;* I/O: what is expected and produced
;*
;* Calling Convention: how is this called?
;*
;* Returns:
;*
;* Stack Usage: (when needed) structure of stacked data
;*
;* Calls: Info about routines called
;*
;* Changes: registers destroyed.
;*********************************************************************
                              ; DRAW OUTER WHITE BOX 1-3
BAS1211:                      ; 1211 LINE(0,12)-(183,191),5,B
BAS1212:                      ; 1212 LINE(4,16)-(179,187),5,B
BAS1213:                      ; 1213 LINE(4,22)-(179,183),5,B
 
            jsr   COLOR1      ; Setup white letters on black background
 
                              ; Draw box top
            ldd   #$0001      ; start drawing at ...
            sta   TX          ; ... column 0
            stb   TY          ; ... row 1
            lda   #23         ; for 23 horizontal characters
            sta   INDEXIX     ; working varable for horizontal count
            ldb   #$CF        ; Semigraphics WHITE full block
            jsr   HLINE       ; now go draw horizonal line of *
 
                              ; Draw box left side
            ldd   #$0001      ; draw vertical line of * at column 3
            sta   TX          ; ... column 3
            stb   TY          ; ... row 4
            lda   #16         ; for 15 vertical characters
            sta   INDEXIY     ; working variable for vertical count
            ldb   #$CF        ; Semigraphics WHITE full block
            jsr   VLINE       ; now go draw vertical line of *
 
                              ; Draw box right side
            ldd   #$1601      ; draw vertical line of * at column 3
            sta   TX          ; ... column 3
            stb   TY          ; ... row 4
            lda   #16         ; for 15 vertical characters
            sta   INDEXIY     ; working variable for vertical count
            ldb   #$CF        ; Semigraphics WHITE full block
            jsr   VLINE       ; now go draw vertical line of *
 
                              ; Draw box bottom
            ldd   #$000F      ; start drawing at ...
            sta   TX          ; ... column 0
            stb   TY          ; ... row 15
            lda   #23         ; for 23 horizontal characters
            sta   INDEXIX     ; working varable for horizontal count
            ldb   #$CF        ; Semigraphics WHITE full block
            jsr   HLINE       ; now go draw horizonal line of *
 
                              ; DRAW SHUTTLE CUTOUT
BAS1214:                      ; 1214 LINE(183,128)-(198,147),4,B
 
            ldd   #$030C      ; RED on BLACK
            sta   CLRFORE     ; set foreground
            stb   CLRBACK     ; set background
 
            ldd   #$160A      ; setup row and column
            sta   TX          ; ... column 22
            stb   TY          ; ... row 11
            ldb   #$BF        ; Red block
            jsr   DRAWCH      ; draw it
 
            ldd   #$170A      ; setup row and column
            sta   TX          ; ... column 22
            stb   TY          ; ... row 11
            lda   #25         ; two hull units wide
            sta   INDEXIX     ; working variable for horizontal count
            ldb   #$B3        ; Red block lower half
            jsr   HLINE       ; draw it
 
            ldd   #$180B      ; setup row and column
            sta   TX          ; ... column 24
            stb   TY          ; ... row 12
            ldb   #$B5        ; Red block left half
            jsr   DRAWCH      ; draw it
 
            ldd   #$170C      ; setup row and column
            sta   TX          ; ... column 23
            stb   TY          ; ... row 13
            lda   #25         ; two hull units wide
            sta   INDEXIX     ; working variable for horizontal count
            ldb   #$BC        ; Red block upper half
            jsr   HLINE       ; draw it
 
            ldd   #$160C      ; setup row and column
            sta   TX          ; ... column 22
            stb   TY          ; ... row 13
            ldb   #$BF        ; Red block
            jsr   DRAWCH      ; draw it
 
                              ; OPEN SHUTTLE DOOR
BAS1216:                      ; 1216 LOCATE22,11:PRINT" ";
                              ; 0000ce86 3a                               0x3a ':'
                              ; 0000ce87 95                               0x95
                              ; 0000ce88 22                               0x22 '"'
                              ; 0000ce89 20                               0x20 ' '
                              ; 0000ce8a 22                               0x22 '"'
                              ; 0000ce8b 3b                               0x3b ';'
 
            ldd   #$0C0C      ; It's BLAAAAAAAAACK
            sta   CLRFORE     ; set foreground color
            stb   CLRBACK     ; set background color
            ldd   #$160B      ; LOCATE 22,11
            sta   TX          ; ... column 22
            stb   TY          ; ... row 11
            ldb   #$60        ;     space
            jsr   DRAWCH      ;     draw it
 
                              ; 1220 COLOR3:LOCATE26,1:PRINT"SCORE";
            jsr   COLOR3      ; Setup GREEN on BLACK
            ldd   #$1A01      ; LOCATE 26,1
            sta   TX          ; setup column 26
            stb   TY          ; setup row 1
            ldx   #SCORE      ; load X with pointer to string
            stx   STRPTR      ; ... and store in temp
            lda   #5          ; load Y with length of string
            sta   STRLEN      ; ... and store in temp
            jsr   PRINTAT     ; now go print string at
 
 
                              ; 1221 COLOR1:LOCATE26,2:PRINT RIGHT$("     "+STR$(SC),5);
 
                              ; 83 = Diamond
BAS1230:                      ; 1230 LOCATE26,5:PRINT""
                              ; 0000cec9 ce                               0xce
                              ; 0000ceca 04                               0x04
                              ; 0000cecb a1                               0xa1
                              ; 0000cecc 32                               0x32 '2'
                              ; 0000cecd 36                               0x36 '6'
                              ; 0000cece 2c                               0x2c ','
                              ; 0000cecf 35                               0x35 '5'
                              ; 0000ced0 3a                               0x3a ':'
                              ; 0000ced1 95                               0x95
                              ; 0000ced2 22                               0x22 '"'
                              ; 0000ced3 83                               0x83
                              ; 0000ced4 22                               0x22 '"'
                              ; 0000ced5 00                               0x00
 
            jsr   COLOR1      ; WHITE on BLACK
            ldd   #$1A05      ; LOCATE 26,5
            sta   TX          ; ... setup column 26
            stb   TY          ; ... setup row 5
            ldb   #$FF        ; diamond FIXME MAKE THIS A DAMN CONSTANT
            jsr   DRAWCH      ; draw it
 
                              ; 82 = Clubs
                              ; 1240 LOCATE26,6:PRINT""
                              ; 0000ced8 d8                               0xd8
                              ; 0000ced9 04                               0x04
                              ; 0000ceda a1                               0xa1
                              ; 0000cedb 32                               0x32 '2'
                              ; 0000cedc 36                               0x36 '6'
                              ; 0000cedd 2c                               0x2c ','
                              ; 0000cede 36                               0x36 '6'
                              ; 0000cedf 3a                               0x3a ':'
                              ; 0000cee0 95                               0x95
                              ; 0000cee1 22                               0x22 '"'
                              ; 0000cee2 82                               0x82
                              ; 0000cee3 22                               0x22 '"'
                              ; 0000cee4 00                               0x00
 
            ldd   #$1A06      ; LOCATE 26,6
            sta   TX          ; ... setup column 26
            stb   TY          ; ... setup row 6
            ldb   #$FE        ; clubs FIXME MAKE THIS A DAMN CONSTANT
            jsr   DRAWCH      ; draw it
 
                              ; 81 = Hearts
                              ; 1250 LOCATE26,7:PRINT""
                              ; 0000cee7 e2                               0xe2
                              ; 0000cee8 04                               0x04
                              ; 0000cee9 a1                               0xa1
                              ; 0000ceea 32                               0x32 '2'
                              ; 0000ceeb 36                               0x36 '6'
                              ; 0000ceec 2c                               0x2c ','
                              ; 0000ceed 37                               0x37 '7'
                              ; 0000ceee 3a                               0x3a ':'
                              ; 0000ceef 95                               0x95
                              ; 0000cef0 22                               0x22 '"'
                              ; 0000cef1 81                               0x81
                              ; 0000cef2 22                               0x22 '"'
                              ; 0000cef3 00                               0x00
 
            ldd   #$1A07      ; LOCATE 26,7
            sta   TX          ; ... setup column 26
            stb   TY          ; ... setup row 7
            ldb   #$FD        ; hearts FIXME MAKE THIS A DAMN CONSTANT
            jsr   DRAWCH      ; draw it
 
                              ; 80 = Spades
                              ; 1260 LOCATE26,8:PRINT""
                              ; 0000cef6 ec                               0xec
                              ; 0000cef7 04                               0x04
                              ; 0000cef8 a1                               0xa1
                              ; 0000cef9 32                               0x32 '2'
                              ; 0000cefa 36                               0x36 '6'
                              ; 0000cefb 2c                               0x2c ','
                              ; 0000cefc 38                               0x38 '8'
                              ; 0000cefd 3a                               0x3a ':'
                              ; 0000cefe 95                               0x95
                              ; 0000ceff 22                               0x22 '"'
                              ; 0000cf00 80                               0x80
                              ; 0000cf01 22                               0x22 '"'
                              ; 0000cf02 00                               0x00
 
            ldd   #$1A08      ; LOCATE 26,8
            sta   TX          ; ... setup column 26
            stb   TY          ; ... setup row 8
            ldb   #$FC        ; spades FIXME MAKE THIS A DAMN CONSTANT
            jsr   DRAWCH      ; draw it
 
 
                              ; LOOP THROUGH FOUR ITEM TYPES
                              ; 1270 FOR I=1 TO 4
 
            ldx   #1          ; setup our loop index counter
            ldd   #$1C04      ; setup where to start drawing
            sta   TX          ; ... column 28
            stb   TY          ; ... row 4
                              ; PRINT 0 IN WHITE ON BLACK THEN - IN GREEN ON BLACK THEN 0 IN WHITE ON BLACK
BAS1280:                      ; 1280 LOCATE28,I+4:COLOR1:PRINT"0";:COLOR3:PRINT"-";:COLOR1:PRINT"0"
            lda   #$1C        ; reset column to 28
            sta   TX          ; save it to the TileX global
            inc   TY          ; in this pass of the loop, increment row
            jsr   COLOR1      ; reset to white on black
            ldb   #$70        ; TRSCII ZERO
            jsr   DRAWCH      ; Draw the tile
            inc   TX          ; Move right 1 column
            jsr   COLOR3      ; Setup green on black
            ldb   #$6D        ; TRSCII DASH
            jsr   DRAWCH      ; Draw the tile
            inc   TX          ; Move right 1 more column
            jsr   COLOR1      ; Setup white on block
            ldb   #$70        ; TRSCII ZERO
            jsr   DRAWCH      ; Draw the tile
 
                              ; FINISH LOOP I
                              ; 1290 NEXT
            leax  1,X         ; Okay bump the index counter
            cmpx  #5          ; Did we make 4 passes and land at 5?
            bne   BAS1280     ; Nope, keep looping
 
;*********************************************************************
;* RoutineName - expanded name or phrase describing purpose
;*  Brief description
;*
;* I/O: what is expected and produced
;*
;* Calling Convention: how is this called?
;*
;* Returns:
;*
;* Stack Usage: (when needed) structure of stacked data
;*
;* Calls: Info about routines called
;*
;* Changes: registers destroyed.
;*********************************************************************
                              ; SETUP TIME DISPLAY IN GREEN ON BLOCK
BAS1300:                      ; 1300 LOCATE 28,10:COLOR3:PRINT"TIME"
 
            jsr   COLOR3      ; Setup GREEN on BLACK
            ldd   #$1C0A      ; LOCATE 28,10
            sta   TX          ; setup column 28
            stb   TY          ; setup row 10
            ldx   #TIME       ; load X with pointer to string
            stx   STRPTR      ; ... and store in temp
            lda   #4          ; load Y with length of string
            sta   STRLEN      ; ... and store in temp
            jsr   PRINTAT     ; now go print string at
 
                              ; PRINTS STUFF AROUND COUNTDOWN
                              ; 1310 LOCATE26,11:PRINT"   "
                              ; 0000cf56 1e                               0x1e
                              ; 0000cf57 05                               0x05
                              ; 0000cf58 a1                               0xa1
                              ; 0000cf59 32                               0x32 '2'
                              ; 0000cf5a 36                               0x36 '6'
                              ; 0000cf5b 2c                               0x2c ','
                              ; 0000cf5c 31                               0x31 '1'
                              ; 0000cf5d 31                               0x31 '1'
                              ; 0000cf5e 3a                               0x3a ':'
                              ; 0000cf5f 95                               0x95
                              ; 0000cf60 22                               0x22 '"'
                              ; 0000cf61 91                               0x91
                              ; 0000cf62 e4                               0xe4
                              ; 0000cf63 20                               0x20 ' '
                              ; 0000cf64 20                               0x20 ' '
                              ; 0000cf65 20                               0x20 ' '
                              ; 0000cf66 14                               0x14
                              ; 0000cf67 3c                               0x3c '<'
                              ; 0000cf68 22                               0x22 '"'
                              ; 0000cf69 00                               0x00
 
                              ; DRAW YELLOW VERTICAL LINE
BAS1320:                      ; 1320 LINE(200,0)-(200,191),2
BAS1330:                      ; 1330 LINE(204,0)-(204,191),2
            ldd   #$010C      ; Setup YELLOW on BLACK colors
            sta   CLRFORE
            stb   CLRBACK
            ldd   #$1900      ; draw vertical line at column 25
            sta   TX          ; ... column 25
            stb   TY          ; ... row 0
            lda   #16         ; for 16 vertical characters
            sta   INDEXIY     ; working variable for vertical count
            ldb   #$9F        ; Semigraphics green full block
            jsr   VLINE       ; now go draw vertical line of *
 
                              ; DRAW MAGENTA HORIZONTAL LINE
BAS1340:                      ; 1340 LINE(209,110)-(256,110),7
            ldd   #$060C      ; Setup MAGENTA on BLACK colors
            sta   CLRFORE     ; setup foreground color
            stb   CLRBACK     ; setup background color
            ldd   #$1A09      ; start drawing at ...
            sta   TX          ; ... column 26
            stb   TY          ; ... row 9
            lda   #32         ; for 6 horizontal characters to column 31
            sta   INDEXIX     ; working varable for horizontal count
            ldb   #$EC        ; Semigraphics MAGENTA upper half
            jsr   HLINE       ; now go draw horizonal line of *
 
                              ; FIXME Tone A Course value to 2? Here? Ugh.
BAS1350:                      ; 1350 SOUND 1,2
 
                              ; DRAW BLUE HORIZONTAL LINE
BAS1360:                      ; 1360 LINE(209,40)-(255,40),3
            ldd   #$020C      ; Setup MAGENTA on BLACK colors
            sta   CLRFORE     ; setup foreground color
            stb   CLRBACK     ; setup background color
            ldd   #$1A03      ; start drawing at ...
            sta   TX          ; ... column 26
            stb   TY          ; ... row 3
            lda   #32         ; for 6 horizontal characters to column 31
            sta   INDEXIX     ; working varable for horizontal count
            ldb   #$A3        ; Semigraphics BLUE lower half
            jsr   HLINE       ; now go draw horizonal line of *
 
                              ; DRAW GREEN HORIZONTAL LINE
BAS1370:                      ; 1370 LINE(209,151)-(255,151),1
            jsr   COLOR3      ; GREEN ON BLACK
            ldd   #$1A0C      ; start drawing at ...
            sta   TX          ; ... column 26
            stb   TY          ; ... row 12
            lda   #32         ; for 6 horizontal characters to column 31
            sta   INDEXIX     ; working varable for horizontal count
            ldb   #$CC        ; Semigraphics WHITE full block
            jsr   HLINE       ; now go draw horizonal line of *
 
                              ; 84 = HOLLOW CIRCLE
BAS1380:                      ; 1380 COLOR4:LOCATE26,14:PRINT"   ";
                              ; 0000cff7 64                               0x64 'd'
                              ; 0000cff8 05                               0x05
                              ; 0000cff9 9a                               0x9a
                              ; 0000cffa 34                               0x34 '4'
                              ; 0000cffb 3a                               0x3a ':'
                              ; 0000cffc a1                               0xa1
                              ; 0000cffd 32                               0x32 '2'
                              ; 0000cffe 36                               0x36 '6'
                              ; 0000cfff 2c                               0x2c ','
                              ; 0000d000 31                               0x31 '1'
                              ; 0000d001 34                               0x34 '4'
                              ; 0000d002 3a                               0x3a ':'
                              ; 0000d003 95                               0x95
                              ; 0000d004 22                               0x22 '"'
                              ; 0000d005 20                               0x20 ' '
                              ; 0000d006 84                               0x84
                              ; 0000d007 20                               0x20 ' '
                              ; 0000d008 84                               0x84
                              ; 0000d009 20                               0x20 ' '
                              ; 0000d00a 84                               0x84
                              ; 0000d00b 22                               0x22 '"'
                              ; 0000d00c 3b                               0x3b ';'
                              ; 0000d00d 00                               0x00
 
            jsr   COLOR4      ; BLACK on GREEN
            ldd   #$1A0E      ; LOCATE 26,14
            sta   TX          ; setup column 26
            stb   TY          ; setup row 14
            ldx   #CREWLEFT   ; load X with pointer to string
            stx   STRPTR      ; ... and store in temp
            lda   #6          ; load Y with length of string
            sta   STRLEN      ; ... and store in temp
            jsr   PRINTAT     ; now go print string at
 
 
                              ; IF YOU STILL HAVE ALL LIVES JUMP TO COLOR/SOUND SETUP
BAS1381:                      ; 1381 IF CR=4 THEN GOTO 1390
            lda   CR          ; Start of check for crew remaining
            cmpa  #4          ; 4 crew remaining?
            beq   BAS1390     ; yes, skip updating lives left
 
                              ; ERASE MARKERS FOR CREW ALREADY LOST FROM LEFT TO RIGHT
BAS1382:                      ; 1382 LOCATE26,14:FOR I=1 TO 4-CR:PRINT"  ";:NEXT
                              ; 0000d024 66                               0x66 'f'
                              ; 0000d025 05                               0x05
                              ; 0000d026 a1                               0xa1
                              ; 0000d027 32                               0x32 '2'
                              ; 0000d028 36                               0x36 '6'
                              ; 0000d029 2c                               0x2c ','
                              ; 0000d02a 31                               0x31 '1'
                              ; 0000d02b 34                               0x34 '4'
                              ; 0000d02c 3a                               0x3a ':'
                              ; 0000d02d 81                               0x81
                              ; 0000d02e 20                               0x20 ' '
                              ; 0000d02f 49                               0x49 'I'
                              ; 0000d030 d2                               0xd2
                              ; 0000d031 31                               0x31 '1'
                              ; 0000d032 20                               0x20 ' '
                              ; 0000d033 c3                               0xc3
                              ; 0000d034 20                               0x20 ' '
                              ; 0000d035 34                               0x34 '4'
                              ; 0000d036 cb                               0xcb
                              ; 0000d037 43                               0x43 'C'
                              ; 0000d038 52                               0x52 'R'
                              ; 0000d039 3a                               0x3a ':'
                              ; 0000d03a 95                               0x95
                              ; 0000d03b 22                               0x22 '"'
                              ; 0000d03c 20                               0x20 ' '
                              ; 0000d03d 20                               0x20 ' '
                              ; 0000d03e 22                               0x22 '"'
                              ; 0000d03f 3b                               0x3b ';'
                              ; 0000d040 3a                               0x3a ':'
                              ; 0000d041 82                               0x82
                              ; 0000d042 00                               0x00
            ldd   #$1A0E      ; LOCATE 26,14
            sta   TX          ; setup column 26
            stb   TY          ; setup row 14
            ldx   #CREWLEFT   ; load X with pointer to string
            stx   STRPTR      ; ... and store in temp
            lda   #2          ; load Y with length of string
            sta   STRLEN      ; ... and store in temp
            jsr   PRINTAT     ; now go print string at
 
;*********************************************************************
;* SUBROUTINE / JUMP 1390 RESET COLOR AND SOUND CHIP
;*  Brief description
;*
;* I/O: what is expected and produced
;*
;* Calling Convention: how is this called?
;*
;* Returns:
;*
;* Stack Usage: (when needed) structure of stacked data
;*
;* Calls: Info about routines called
;*
;* Changes: registers destroyed.
;*********************************************************************
BAS1390:                      ; 1390 COLOR1
            jsr   COLOR1      ; WHITE on BLACK
 
BAS1490:                      ; 1490 SOUND 0,128:SOUND 6,8:SOUND 1,2:SOUND 11,0:SOUND 12,12
                              ; SOUND 0,128 - CHANNEL A FINE
                              ; SOUND 1,2 - CHANNEL A COARSE
                              ; SOUND 2,16 - CHANNEL B FINE
                              ; SOUND 3,2 - CHANNEL B COARSE
                              ; SOUND 6,8 - NOISE GENERATOR CONTROL - NOISE FREQ COUNTDOWN BY 8
                              ; SOUND 8,16 - CHANNEL A FULL VOLUME
                              ; SOUND 9,16 - CHANNEL B FULL VOLUME
                              ; SOUND 11,0 - ENVELOPE PERIOD FINE
                              ; SOUND 12,12 - ENVELOPE PERIOD COARSE
 
 
;HALT:       bra   HALT
BAS1590:                      ; 1540 SOUND 8,16:SOUND 2,16:SOUND 3,2:SOUND 9,16:RETURN
            rts               ; return
 
;*********************************************************************
;* SUBROUTINE 2000 TIME TRIAL
;*  Brief description
;*
;* I/O: what is expected and produced
;*
;* Calling Convention: how is this called?
;*
;* Returns:
;*
;* Stack Usage: (when needed) structure of stacked data
;*
;* Calls: Info about routines called
;*
;* Changes: registers destroyed.
;*********************************************************************
BAS2000:
                              ; 2000 REM*** TIME TRIAL
 
                              ; SETUP SCREEN AND SOUND CHIP
                              ; 2010 GOSUB 1000
 
                              ; SETUP ALIEN AND PLAYER AND ITEMS
                              ; 2020 GOSUB8100:GOSUB8130
 
                              ; FORCE ALIEN POSITION TO CENTER OF DECK
                              ; 2030 POKE&HF800,10:POKE&HF801,6
 
                              ; START THE CLOCK
                              ; 2045 T=TIME
 
                              ; DISABLE ALIEN MOVE ROUTINE WITH RET
                              ; 2050 POKE&HF700,&HC9
 
                              ; F500 ALIEN AND PLAYER POSITION CHECK
                              ; F600 PLAYER MOVE HIT ITEMS WALLS READ KEYS?
                              ; F700 ALIEN MOVE AI
                              ; F790 UPDATE PLAYER
                              ; F7B0 ALIEN CAUGHT PLAYER
                              ; F7D0 UPDATE NUMBERS
                              ; SOUND MIXER CONTROL/IO ENABLE
                              ; 60 = 00111100
                              ; B7 IO Port B Input Enable
                              ; B6 IO Port A Input Enable
                              ; B5 Noise Enable C OFF
                              ; B4 Noise Enable B OFF
                              ; B3 Noise Enable A OFF
                              ; B2 Tone Enable C OFF
                              ; B1 Tone Enable B ON
                              ; B0 Tone Enable A ON
                              ; 2060 EXEC&HF500:EXEC&HF7D0:SOUND 7,60
;*********************************************************************
;* F500 ALIEN AND PLAYER POSITION CHECK
;*  Brief description
;*
;* I/O: what is expected and produced
;*
;* Calling Convention: how is this called?
;*
;* Returns:
;*
;* Stack Usage: (when needed) structure of stacked data
;*
;* Calls: Info about routines called
;*
;* Changes: registers destroyed.
;*********************************************************************
                              ;        TFR     0x20,B ' '  ;F500 06 20       LD      B,0x20        ' '
                              ;        LBSR    0xF790      ;F502 CD 90 F7    CALL    0xF790
                              ;        LDX     0xF800      ;F505 2A 00 F8    LD      HL,(0xF800)    AlienX -> HL
                              ;        LDU     0xF802      ;F508 DD 2A 02    LD      IX,(0xF802)    PlayerX -> IX
                              ;        STX     0xF802      ;F50C 22 02 F8    LD      (0xF802),HL    HL -> PlayerX
                              ;        TFR     0x20,B ' '  ;F50F 06 20       LD      B,0x20        ' '
                              ;        LBSR    0xF790      ;F511 CD 90 F7    CALL    0xF790
                              ;        LDX     0xF802      ;F514 2A 02 F8    LD      HL,(0xF802)    PlayerX -> HL
                              ;        STX     0xF800      ;F517 22 00 F8    LD      (0xF800),HL    HL -> AlienX
                              ;        STU     0xF802      ;F51A DD 22 02    LD      (0xF802),IX    IX -> PlayerX
                              ;        LBSR    0xF600      ;F51E CD 00 F6    CALL    0xF600        SUB Player Move
                              ;        TFR     0x84,B 'O' player                   ;F521 06 84       LD      B,0x84        'O' player
                              ;        LBSR    0xF790      ;F523 CD 90 F7    CALL    0xF790
                              ;        LBSR    0xF7B0      ;F526 CD B0 F7    CALL    0xF7B0        SUB: Alien Caught Player?
                              ;        LDA     0xF80B      ;F529 3A 0B F8    LD      A,(0xF80B)    Load Player Caught Flag into A
                              ;        CMPA    #$ 0        ;F52C FE 01       CP      0x01        Was player caught?
                              ;        BEQ to RTS address  ;F52E C8          RET     Z
                              ;        LBSR    0xF700      ;F52F CD 00 F7    CALL    0xF700        SUB: Alien Move AI
                              ;        LBSR    0xF7B0      ;F532 CD B0 F7    CALL    0xF7B0        SUB: Alien Caught Player?
                              ;        LDA     0xF80B      ;F535 3A 0B F8    LD      A,(0xF80B)    Load Player Caught Flag into A
                              ;        CMPA    #$ 0        ;F538 FE 01       CP      0x01        Was player caught?
                              ;        BEQ to RTS address  ;F53A C8          RET     Z        Yes... Return
                              ;        LBRA    0xF569      ;F53B 18 2C       JR      0xF569        No...
                              ;        BMI to RTS address  ;F53D F8          RET     M        Return if Minus?
                              ; JF53E  CMPA    #$ 0        ;F53E FE 00       CP      0x00
                              ;        LBEQ    0xF548      ;F540 28 06       JR      Z,0xF548        If A=0 jump F548
                              ;        SUBA    #$ 0        ;F542 D6 05       SUB     0x05        Subtract 5 (Moving Left?)
                              ;        LBCS    0xF554      ;F544 38 0E       JR      C,0xF554
                              ;        LBRA    0xF53E      ;F546 18 F6       JR      0xF53E
                              ; JF548  LDA     0xF802      ;F548 3A 02 F8    LD      A,(0xF802)    PlayerX -> A
                              ;        TFR     A,B         ;F54B 47          LD      B,A        A -> B
                              ;        LDA     0xF800      ;F54C 3A 00 F8    LD      A,(0xF800)    AlienX -> A
                              ;        CMPA    B_Temp      ;F54F B8          CP      B        Compare PlayerX with AlienX
                              ;        LBNE    0xF554      ;F550 20 02       JR      NZ,0xF554    Not the same? Jump F554
                              ;        LBRA    0xF567      ;F552 18 13       JR      0xF567        The Same... Jump F567
                              ; JF554  LDA     0xF803      ;F554 3A 03 F8    LD      A,(0xF803)    PlayerY -> A
                              ; JF557  CMPA    #$ 0        ;F557 FE 00       CP      0x00
                              ;        LBEQ    0xF560      ;F559 28 05       JR      Z,0xF560
                              ;        SUBA    #$ 0        ;F55B D6 06       SUB     0x06        Moving Up?
                              ;        BCS to RTS address  ;F55D D8          RET     C        Return if Carry Set (Borrow)
                              ;        LBRA    0xF557      ;F55E 18 F7       JR      0xF557        Loop Back
                              ; JF560  LDA     0xF803      ;F560 3A 03 F8    LD      A,(0xF803)    PlayerY -> A
                              ;        TFR     A,B         ;F563 47          LD      B,A        A -> B
                              ;        LDA     0xF801      ;F564 3A 01 F8    LD      A,(0xF801)    AlienY -> B
                              ; JF567  CMPA    B_Temp      ;F567 B8          CP      B        Compare AlienY to PlayerY
                              ;        BNE to RTS address  ;F568 C0          RET     NZ        Not the same? Return
                              ; JF569  LDX     0xF800      ;F569 2A 00 F8    LD      HL,(0xF800)    AlienX -> HL
                              ;        LDU     0xF802      ;F56C DD 2A 02    LD      IX,(0xF802)    PlayerX -> IX
                              ;        STX     0xF802      ;F570 22 02 F8    LD      (0xF802),HL    HL -> PlayerX
                              ;        TFR     0x40,B '@'  ;F573 06 40       LD      B,0x40 '@'    '@' -> B
                              ;        LBSR    0xF790      ;F575 CD 90 F7    CALL    0xF790        SUB:
                              ;        LDX     0xF802      ;F578 2A 02 F8    LD      HL,(0xF802)    PlayerX -> HL
                              ;        STX     0xF800      ;F57B 22 00 F8    LD      (0xF800),HL    HL -> AlienX
                              ;        STU     0xF802      ;F57E DD 22 02    LD      (0xF802),IX    IX -> PlayerX
                              ;        RTS                 ;F582 C9          RET
;*********************************************************************
;* F600 PLAYER MOVE HIT ITEMS WALLS READ KEYS?
;*  Brief description
;*
;* I/O: what is expected and produced
;*
;* Calling Convention: how is this called?
;*
;* Returns:
;*
;* Stack Usage: (when needed) structure of stacked data
;*
;* Calls: Info about routines called
;*
;* Changes: registers destroyed.
;*********************************************************************
                              ;        TFR     0x00,A      ;F600 3E 00       LD      A,0x00        Turn off "Hit the Wall" flag
                              ;        STA     0xF80F      ;F602 32 0F F8    LD      (0xF80F),A    Store the NOPE hit the wall flag
                              ;        ORCC    #$50        ;F605 F3          DI            Disable interrupts
                              ;        LDA     IO_90_0x90  ;F606 DB 90       IN      A,(0x90)        Pull input from port 90 - key in?
                              ;        ANDCC    #$AF       ;F608 FB          EI            Re-enable interrupts
                              ;        CMPA    #$ 1        ;F609 FE 1C       CP      0x1C        A Key Pressed?
                              ;        LBNE    0xF613      ;F60B 20 06       JR      NZ,0xF613    No, go check next
                              ;        TFR     0x01,B      ;F60D 06 01       LD      B,0x01        Set Player Dir in one Axis
                              ;        TFR     0x00,C      ;F60F 0E 00       LD      C,0x00        Set Player Dir for other Axis
                              ;        LBRA    0xF62E      ;F611 18 1B       JR      0xF62E
                              ; JF613  CMPA    #$ 1        ;F613 FE 1D       CP      0x1D        A Key Pressed?
                              ;        LBNE    0xF61D      ;F615 20 06       JR      NZ,0xF61D
                              ;        TFR     0xFF,B      ;F617 06 FF       LD      B,0xFF
                              ;        TFR     0x00,C      ;F619 0E 00       LD      C,0x00
                              ;        LBRA    0xF62E      ;F61B 18 11       JR      0xF62E
                              ; JF61D  CMPA    #$ 1        ;F61D FE 1E       CP      0x1E        A Key Pressed?
                              ;        LBNE    0xF627      ;F61F 20 06       JR      NZ,0xF627
                              ;        TFR     0x00,B      ;F621 06 00       LD      B,0x00
                              ;        TFR     0xFF,C      ;F623 0E FF       LD      C,0xFF
                              ;        LBRA    0xF62E      ;F625 18 07       JR      0xF62E
                              ; JF627  CMPA    #$ 1        ;F627 FE 1F       CP      0x1F        A Key Pressed?
                              ;        BNE to RTS address  ;F629 C0          RET     NZ
                              ;        TFR     0x00,B      ;F62A 06 00       LD      B,0x00
                              ;        TFR     0x01,C      ;F62C 0E 01       LD      C,0x01
                              ; JF62E  LDA     0xF802      ;F62E 3A 02 F8    LD      A,(0xF802)    PlayerX -> A
                              ;        ADDA    ,B          ;F631 80          ADD     A,B
                              ;        TFR     A,D         ;F632 57          LD      D,A
                              ;        LDA     0xF803      ;F633 3A 03 F8    LD      A,(0xF803)    PlayerY -> A
                              ;        ADDA    ,C          ;F636 81          ADD     A,C
                              ;        TFR     A,E         ;F637 5F          LD      E,A
                              ;        ADDA    ,0x02       ;F638 C6 02       ADD     A,0x02
                              ;        TFR     A,L         ;F63A 6F          LD      L,A
                              ;        TFR     0x00,H      ;F63B 26 00       LD      H,0x00
                              ;        ADD     X=X+X       ;F63D 29          ADD     HL,HL
                              ;        ADD     X=X+X       ;F63E 29          ADD     HL,HL
                              ;        ADD     X=X+X       ;F63F 29          ADD     HL,HL
                              ;        ADD     X=X+X       ;F640 29          ADD     HL,HL
                              ;        ADD     X=X+X       ;F641 29          ADD     HL,HL
                              ;        TFR     D,A         ;F642 7A          LD      A,D
                              ;        INCA                ;F643 3C          INC     A
                              ;        ADDA    ,L          ;F644 85          ADD     A,L
                              ;        TFR     A,L         ;F645 6F          LD      L,A
                              ;        TFR     H,A         ;F646 7C          LD      A,H
                              ;        ADC     A,0xC2 - Fix;F647 CE C2       ADC     A,0xC2
                              ;        TFR     A,H         ;F649 67          LD      H,A
                              ;        LDA     ,X          ;F64A 7E          LD      A,(HL)
                              ;        CMPA    #$ 2        ;F64B FE 20       CP      0x20        Is it a space?
                              ;        LBNE    0xF658      ;F64D 20 09       JR      NZ,0xF658
                              ; JF64F  TFR     D,A         ;F64F 7A          LD      A,D
                              ;        STA     0xF802      ;F650 32 02 F8    LD      (0xF802),A    Store PlayerX
                              ;        TFR     E,A         ;F653 7B          LD      A,E
                              ;        STA     0xF803      ;F654 32 03 F8    LD      (0xF803),A    Store PlayerY
                              ;        RTS                 ;F657 C9          RET
                              ; JF658  CMPA    #$ 8        ;F658 FE 83       CP      0x83        Did you hit a Diamond resource?
                              ;        LBNE    0xF66F      ;F65A 20 13       JR      NZ,0xF66F    No, go check next resource
                              ;        LDA     0xF806      ;F65C 3A 06 F8    LD      A,(0xF806)    Yes, get current items carried
                              ;        CMPA    #$ 0        ;F65F FE 05       CP      0x05        Holding 5 items already?
                              ;        BCC to RTS address  ;F661 D0          RET     NC        Yes, can't pick up more
                              ;        INCA                ;F662 3C          INC     A        No, increment count of items carried
                              ;        STA     0xF806      ;F663 32 06 F8    LD      (0xF806),A    Store new count of items carried
                              ;        LDA     0xF807      ;F666 3A 07 F8    LD      A,(0xF807)    Load count of Diamonds carried
                              ;        INCA                ;F669 3C          INC     A        Add a Diamond
                              ;        STA     0xF807      ;F66A 32 07 F8    LD      (0xF807),A    Store new count of Diamonds
                              ;        LBRA    0xF64F      ;F66D 18 E0       JR      0xF64F        Jump back to top of loop
                              ; JF66F  CMPA    #$ 8        ;F66F FE 82       CP      0x82        Did you hit a Club resource?
                              ;        LBNE    0xF686      ;F671 20 13       JR      NZ,0xF686    No, go check next resource
                              ;        LDA     0xF806      ;F673 3A 06 F8    LD      A,(0xF806)    Yes, get current items carried
                              ;        CMPA    #$ 0        ;F676 FE 05       CP      0x05        Holding 5 items already?
                              ;        BCC to RTS address  ;F678 D0          RET     NC        Yes, can't pick up more
                              ;        INCA                ;F679 3C          INC     A        No, increment count of items carried
                              ;        STA     0xF806      ;F67A 32 06 F8    LD      (0xF806),A    Store new count of items carried
                              ;        LDA     0xF808      ;F67D 3A 08 F8    LD      A,(0xF808)    Load count of Clubs carried
                              ;        INCA                ;F680 3C          INC     A        Add a Club
                              ;        STA     0xF808      ;F681 32 08 F8    LD      (0xF808),A    Store new count of Clubs
                              ;        LBRA    0xF64F      ;F684 18 C9       JR      0xF64F        Jump back to top of loop
                              ; JF686  CMPA    #$ 8        ;F686 FE 81       CP      0x81        Did you hit a Heart resource?
                              ;        LBNE    0xF69D      ;F688 20 13       JR      NZ,0xF69D    No, go check next resource
                              ;        LDA     0xF806      ;F68A 3A 06 F8    LD      A,(0xF806)    Yes, get current items carried
                              ;        CMPA    #$ 0        ;F68D FE 05       CP      0x05        Holding 5 items already?
                              ;        BCC to RTS address  ;F68F D0          RET     NC        Yes, can't pick up more
                              ;        INCA                ;F690 3C          INC     A        No, increment count of items carried
                              ;        STA     0xF806      ;F691 32 06 F8    LD      (0xF806),A    Store new count of items carried
                              ;        LDA     0xF809      ;F694 3A 09 F8    LD      A,(0xF809)    Load count of Hearts carried
                              ;        INCA                ;F697 3C          INC     A        Add a Heart
                              ;        STA     0xF809      ;F698 32 09 F8    LD      (0xF809),A    Store new count of Hearts
                              ;        LBRA    0xF64F      ;F69B 18 B2       JR      0xF64F        Jump back to top of loop
                              ; JF69D  CMPA    #$ 8        ;F69D FE 80       CP      0x80        Did you hit a Spade resource?
                              ;        LBNE    0xF6B4      ;F69F 20 13       JR      NZ,0xF6B4
                              ;        LDA     0xF806      ;F6A1 3A 06 F8    LD      A,(0xF806)    Get current number of items carried
                              ;        CMPA    #$ 0        ;F6A4 FE 05       CP      0x05        Already carrying 5 items?
                              ;        BCC to RTS address  ;F6A6 D0          RET     NC        Yep, just return
                              ;        INCA                ;F6A7 3C          INC     A        No, pick up next resource
                              ;        STA     0xF806      ;F6A8 32 06 F8    LD      (0xF806),A    Store new total of items carried
                              ;        LDA     0xF80A      ;F6AB 3A 0A F8    LD      A,(0xF80A)    Load count of Spades carried
                              ;        INCA                ;F6AE 3C          INC     A        Add a Spade
                              ;        STA     0xF80A      ;F6AF 32 0A F8    LD      (0xF80A),A    Store new count of Spades
                              ;        LBRA    0xF64F      ;F6B2 18 9B       JR      0xF64F        Jump back to top of loop
                              ; JF6B4  LDA     0xF802      ;F6B4 3A 02 F8    LD      A,(0xF802)    PlayerX -> A
                              ; JF6B7  CMPA    #$ 0        ;F6B7 FE 00       CP      0x00        At screen left?
                              ;        LBEQ    0xF6CD      ;F6B9 28 12       JR      Z,0xF6CD        Hit the left wall
                              ;        SUBA    #$ 0        ;F6BB D6 05       SUB     0x05        Check 5 spaces left
                              ;        LBCS    0xF6C1      ;F6BD 38 02       JR      C,0xF6C1        Woops, had to borrow, we went too far
                              ;        LBRA    0xF6B7      ;F6BF 18 F6       JR      0xF6B7        Go back and keep checking left...
                              ; JF6C1  LDA     0xF803      ;F6C1 3A 03 F8    LD      A,(0xF803)    PlayerY -> A
                              ; JF6C4  CMPA    #$ 0        ;F6C4 FE 00       CP      0x00        At top?
                              ;        LBEQ    0xF6CD      ;F6C6 28 05       JR      Z,0xF6CD
                              ;        SUBA    #$ 0        ;F6C8 D6 06       SUB     0x06        Check up?
                              ;        BCS to RTS address  ;F6CA D8          RET     C
                              ;        LBRA    0xF6C4      ;F6CB 18 F7       JR      0xF6C4        Go back and keep checking
                              ; JF6CD  TFR     0x01,A      ;F6CD 3E 01       LD      A,0x01        Set hit the wall flag
                              ;        STA     0xF80F      ;F6CF 32 0F F8    LD      (0xF80F),A    Store hit the wall flag to trigger sound
                              ;        LDA     ,X          ;F6D2 7E          LD      A,(HL)        HL pointer -> A
                              ;        CMPA    #$ A        ;F6D3 FE A5       CP      0xA5        Compare with A5
                              ;        LBNE    0xF6DA      ;F6D5 20 03       JR      NZ,0xF6DA
                              ;        ST0x20     ,X       ;F6D7 36 20       LD      (HL),0x20    Put a space into HL
                              ;        RTS                 ;F6D9 C9          RET            Done - wall knocked down?
                              ; JF6DA  LDA     ,X          ;F6DA 7E          LD      A,(HL)        Load type of block at position
                              ;        CMPA    #$ 1        ;F6DB FE 16       CP      0x16        Is it a ???
                              ;        BCC to RTS address  ;F6DD D0          RET     NC        Yes, just bail
                              ;        TFR     H,A         ;F6DE 7C          LD      A,H
                              ;        SUBA    #$ 0        ;F6DF D6 02       SUB     0x02
                              ;        TFR     A,H         ;F6E1 67          LD      H,A
                              ;        LDA     ,X          ;F6E2 7E          LD      A,(HL)
                              ;        CMPA    #$ 2        ;F6E3 FE 20       CP      0x20        Is it a space?
                              ;        LBNE    0xF6EB      ;F6E5 20 04       JR      NZ,0xF6EB
                              ;        TFR     0x22,A      ;F6E7 3E 22       LD      A,0x22        Put 22 -> A '"'
                              ;        STA     ,X          ;F6E9 77          LD      (HL),A        A -> HL
                              ;        RTS                 ;F6EA C9          RET
                              ; JF6EB  TFR     0x20,A      ;F6EB 3E 20       LD      A,0x20        Put a space
                              ;        STA     ,X          ;F6ED 77          LD      (HL),A        Store space into point
                              ;        TFR     H,A         ;F6EE 7C          LD      A,H        H -> A
                              ;        ADDA    ,0x02       ;F6EF C6 02       ADD     A,0x02        Add 2
                              ;        TFR     A,H         ;F6F1 67          LD      H,A        Put A -> A
                              ;        TFR     0xA5,A      ;F6F2 3E A5       LD      A,0xA5        A5 -> A
                              ;        STA     ,X          ;F6F4 77          LD      (HL),A        Put A5 -> A
                              ;        RTS                 ;F6F5 C9          RET
;*********************************************************************
;* F700 MOVE ALIEN AI
;*  Brief description
;*
;* I/O: what is expected and produced
;*
;* Calling Convention: how is this called?
;*
;* Returns:
;*
;* Stack Usage: (when needed) structure of stacked data
;*
;* Calls: Info about routines called
;*
;* Changes: registers destroyed.
;*********************************************************************
                              ; MOVALN  LDA     0xF800      ;F700 3A 00 F8    LD      A,(0xF800)    A=AlienX
                              ; BF703   CMPA    #$ 0        ;F703 FE 00       CP      0x00        If zero...
                              ;         LBEQ    0xF70D      ;F705 28 06       JR      Z,0xF70D    ... goto F70D
                              ;         SUBA    #$ 0        ;F707 D6 05       SUB     0x05        else subtract 5 from X?
                              ;         LBCS    0xF71A      ;F709 38 0F       JR      C,0xF71A    if you had to borrow... goto F71A
                              ;         LBRA    0xF703      ;F70B 18 F6       JR      0xF703        Loop back to F703
                              ; ;---------------------------------------------------------------------------------------
                              ; BF70D   LDA     0xF801      ;F70D 3A 01 F8    LD      A,(0xF801)    A=AlienY
                              ; BF710   CMPA    #$ 0        ;F710 FE 00       CP      0x00        If zero...
                              ;         LBEQ    0xF731      ;F712 28 1D       JR      Z,0xF731    ... goto F731
                              ;         SUBA    #$ 0        ;F714 D6 06       SUB     0x06        else subtract 6 from Y?
                              ;         LBCS    0xF71A      ;F716 38 02       JR      C,0xF71A    if you had to borrow... goto F71A
                              ;         LBRA    0xF710      ;F718 18 F6       JR      0xF710        Loop back to F710
                              ; ;---------------------------------------------------------------------------------------
                              ; BF71A   LDA     0xF800      ;F71A 3A 00 F8    LD      A,(0xF800)    A=AlienX
                              ;         TFR     A,B         ;F71D 47          LD      B,A        Mov A to B register
                              ;         LDA     0xF804      ;F71E 3A 04 F8    LD      A,(0xF804)    Load temp AlienX
                              ;         ADDA    ,B          ;F721 80          ADD     A,B        Add to AlienX position
                              ;         STA     0xF800      ;F722 32 00 F8    LD      (0xF800),A    Save new AlienX position
                              ;         LDA     0xF801      ;F725 3A 01 F8    LD      A,(0xF801)    A=AliexY
                              ;         TFR     A,B         ;F728 47          LD      B,A        Move A to B register
                              ;         LDA     0xF805      ;F729 3A 05 F8    LD      A,(0xF805)    Load temp AlienY
                              ;         ADDA    ,B          ;F72C 80          ADD     A,B        Add to Alien Y Position
                              ;         STA     0xF801      ;F72D 32 01 F8    LD      (0xF801),A    Save new AlienY position
                              ;         RTS                 ;F730 C9          RET            Alien move is done - return to BASIC game
                              ; ;---------------------------------------------------------------------------------------
                              ; BF731   LDA     0xF802      ;F731 3A 02 F8    LD      A,(0xF802)    A=PlayerX
                              ;         TFR     A,B         ;F734 47          LD      B,A        Move A to B register
                              ;         LDA     0xF800      ;F735 3A 00 F8    LD      A,(0xF800)    A=AlienX
                              ;         SUBA    ,B          ;F738 90          SUB     B        Subract AlienX frokm PlayerX
                              ;         LBCS    0xF745      ;F739 38 0A       JR      C,0xF745    If borrow goto F745
                              ;         NEGA                ;F73B ED 44       NEG            Negate
                              ;         TFR     A,C         ;F73D 4F          LD      C,A        Put difference in temporary spot CReg
                              ;         TFR     0xFF,A      ;F73E 3E FF       LD      A,0xFF        Set direction to move to -1
                              ;         STA     0xF804      ;F740 32 04 F8    LD      (0xF804),A    Update X direction to move Alien (LEFT!)
                              ;         LBRA    0xF74B      ;F743 18 06       JR      0xF74B        Goto F74B
                              ; BF745   TFR     A,C         ;F745 4F          LD      C,A        A is X distance to player, put in CReg temp
                              ;         TFR     0x01,A      ;F746 3E 01       LD      A,0x01        A=1
                              ;         STA     0xF804      ;F748 32 04 F8    LD      (0xF804),A    Update X direction to move Alien (RIGHT!)
                              ; BF74B   LDA     0xF803      ;F74B 3A 03 F8    LD      A,(0xF803)    A=PlayerY
                              ;         TFR     A,B         ;F74E 47          LD      B,A        Move A to B
                              ;         LDA     0xF801      ;F74F 3A 01 F8    LD      A,(0xF801)    A=AlienY
                              ;         SUBA    ,B          ;F752 90          SUB     B        Get difference between PlayerY and AlienY
                              ;         LBCS    0xF75F      ;F753 38 0A       JR      C,0xF75F    If borrow
                              ;         NEGA                ;F755 ED 44       NEG            Flip the Sign
                              ;         TFR     A,B         ;F757 47          LD      B,A        Now put B in A
                              ;         TFR     0xFF,A      ;F758 3E FF       LD      A,0xFF        Set A to -1
                              ;         STA     0xF805      ;F75A 32 05 F8    LD      (0xF805),A    Update Y direction to move Alien (UP!)
                              ;         LBRA    0xF765      ;F75D 18 06       JR      0xF765        Goto F765
                              ; BF75F   TFR     A,B         ;F75F 47          LD      B,A        A is Y distance to player, put in BReg
                              ;         TFR     0x01,A      ;F760 3E 01       LD      A,0x01        A=1
                              ;         STA     0xF805      ;F762 32 05 F8    LD      (0xF805),A    Update Y direction to move Alien (DOWN!)
                              ; BF765   TFR     B,A         ;F765 78          LD      A,B
                              ;         DEC     C           ;F766 0D          DEC     C
                              ;         DECA                ;F767 3D          DEC     A
                              ;         SUBA    ,C          ;F768 91          SUB     C
                              ;         LBCS    0xF772      ;F769 38 07       JR      C,0xF772    If borrow goto F772
                              ;         TFR     0x00,A      ;F76B 3E 00       LD      A,0x00        Clear A
                              ;         STA     0xF805      ;F76D 32 05 F8    LD      (0xF805),A    Update Y direction to move Alien (SAME ROW)
                              ;         LBRA    0xF71A      ;F770 18 A8       JR      0xF71A        Go back to top
                              ; BF772   TFR     0x00,A      ;F772 3E 00       LD      A,0x00        Clear A
                              ;         STA     0xF804      ;F774 32 04 F8    LD      (0xF804),A    Update X direction to move Alien (SAME COL)
                              ;         LBRA    0xF71A      ;F777 18 A1       JR      0xF71A        Go back to top
;*********************************************************************
;* F790 UPDATE PLAYER    CREATE POINTER TO NEW PLACE TO DRAW THING - PLAYER WALL ETC
;*  Brief description
;*
;* I/O: what is expected and produced
;*
;* Calling Convention: how is this called?
;*
;* Returns:
;*
;* Stack Usage: (when needed) structure of stacked data
;*
;* Calls: Info about routines called
;*
;* Changes: registers destroyed.
;*********************************************************************
                              ;        LDA     0xF802      ;F790 3A 02 F8    LD      A,(0xF802)    PlayerX -> A
                              ;        TFR     A,D         ;F793 57          LD      D,A        Save A to D
                              ;        LDA     0xF803      ;F794 3A 03 F8    LD      A,(0xF803)    PlayerY -> A
                              ;        ADDA    ,0x02       ;F797 C6 02       ADD     A,0x02        Add 2 to Y
                              ;        TFR     A,L         ;F799 6F          LD      L,A        Save A to L
                              ;        TFR     0x00,H      ;F79A 26 00       LD      H,0x00        Zero out H
                              ;        ADD     X=X+X       ;F79C 29          ADD     HL,HL        +2
                              ;        ADD     X=X+X       ;F79D 29          ADD     HL,HL        +4
                              ;        ADD     X=X+X       ;F79E 29          ADD     HL,HL        +8
                              ;        ADD     X=X+X       ;F79F 29          ADD     HL,HL        +16
                              ;        ADD     X=X+X       ;F7A0 29          ADD     HL,HL        +32
                              ;        TFR     D,A         ;F7A1 7A          LD      A,D        Pull back PlayerX
                              ;        INCA                ;F7A2 3C          INC     A        Add an X
                              ;        ADDA    ,L          ;F7A3 85          ADD     A,L        Now add 32 from L?
                              ;        TFR     A,L         ;F7A4 6F          LD      L,A        Save A to L
                              ;        TFR     H,A         ;F7A5 7C          LD      A,H        Load H into A
                              ;        ADC     A,0xC2 - Fix;F7A6 CE C2       ADC     A,0xC2        Now put in a C2
                              ;        TFR     A,H         ;F7A8 67          LD      H,A        Put C2 into H - high part of pointer
                              ;        TFR     B,A         ;F7A9 78          LD      A,B        Pull B into A - character to show at pointer
                              ;        STA     ,X          ;F7AA 77          LD      (HL),A        Put character onto screen
                              ;        RTS                 ;F7AB C9          RET
;*********************************************************************
;* F7B0 ALIEN CAUGHT PLAYER?
;*  Brief description
;*
;* I/O: what is expected and produced
;*
;* Calling Convention: how is this called?
;*
;* Returns:
;*
;* Stack Usage: (when needed) structure of stacked data
;*
;* Calls: Info about routines called
;*
;* Changes: registers destroyed.
;*********************************************************************
                              ;        TFR     0x00,A      ;F7B0 3E 00       LD      A,0x00        Zero out player caught flag
                              ;        STA     0xF80B      ;F7B2 32 0B F8    LD      (0xF80B),A    Store it
                              ;        LDA     0xF802      ;F7B5 3A 02 F8    LD      A,(0xF802)    Get PlayerX -> A
                              ;        TFR     A,B         ;F7B8 47          LD      B,A        Move A -> B
                              ;        LDA     0xF800      ;F7B9 3A 00 F8    LD      A,(0xF800)    Get AlienX -> A
                              ;        CMPA    B_Temp      ;F7BC B8          CP      B        Same X coordinate?
                              ;        BNE to RTS address  ;F7BD C0          RET     NZ        No, not caught so return
                              ;        LDA     0xF803      ;F7BE 3A 03 F8    LD      A,(0xF803)    Yes, so now check PlayerY -> A
                              ;        TFR     A,B         ;F7C1 47          LD      B,A        Move A -> B
                              ;        LDA     0xF801      ;F7C2 3A 01 F8    LD      A,(0xF801)    Get AlienY -> A
                              ;        CMPA    B_Temp      ;F7C5 B8          CP      B        Same Y coordinate?
                              ;        BNE to RTS address  ;F7C6 C0          RET     NZ        No, not caught so return
                              ;        TFR     0x01,A      ;F7C7 3E 01       LD      A,0x01        Yes, whoops got caught
                              ;        STA     0xF80B      ;F7C9 32 0B F8    LD      (0xF80B),A    Save that caught flag
                              ;        RTS                 ;F7CC C9          RET
;*********************************************************************
;* F7D0 UPDATE NUMBERS DIRECT DRAW ON SCREEN
;*  Brief description
;*
;* I/O: what is expected and produced
;*
;* Calling Convention: how is this called?
;*
;* Returns:
;*
;* Stack Usage: (when needed) structure of stacked data
;*
;* Calls: Info about routines called
;*
;* Changes: registers destroyed.
;*********************************************************************
                              ;        TFR     0xC2BE,X    ;F7D0 21 BE C2    LD      HL,0xC2BE    HL pointer to C2BE
                              ;        TFR     0xF807,U    ;F7D3 DD 21 07    LD      IX,0xF807    IX pointer to current item count
                              ;        TFR     0x0020,U    ;F7D7 01 20 00    LD      BC,0x0020    Move a 32 (screen line?)
                              ; JF7DA  LDA     $E ,U       ;F7DA DD 7E 00    LD      A,(IX+0)        Get current item count
                              ;        ADDA    ,0x30       ;F7DD C6 30       ADD     A,0x30        Turn it into ASCII number
                              ;        STA     ,X          ;F7DF 77          LD      (HL),A        Store it into C2BE pointer
                              ;        ADD     X=X+U       ;F7E0 09          ADD     HL,BC        Move down a screen line
                              ;        TFR     L,A         ;F7E1 7D          LD      A,L        Get low byte of pointer
                              ;        CMPA    #$ 3        ;F7E2 FE 3E       CP      0x3E        Are we looking at 5th line @ C23E
                              ;        BEQ to RTS address  ;F7E4 C8          RET     Z        Done
                              ;        INC     U           ;F7E5 DD 23       INC     IX        Add one to count
                              ;        LBRA    0xF7DA      ;F7E7 18 F1       JR      0xF7DA        Loop Back
 
;*********************************************************************
;* RoutineName - expanded name or phrase describing purpose
;*  Brief description
;*
;* I/O: what is expected and produced
;*
;* Calling Convention: how is this called?
;*
;* Returns:
;*
;* Stack Usage: (when needed) structure of stacked data
;*
;* Calls: Info about routines called
;*
;* Changes: registers destroyed.
;*********************************************************************
                              ; SOUND WHEN YOU HIT WALL
                              ; SOUND MIXER CONTROL/IO ENABLE
                              ; 55 = 00110111
                              ; B7 IO Port B Input Enable
                              ; B6 IO Port A Input Enable
                              ; B5 Noise Enable C OFF
                              ; B4 Noise Enable B OFF
                              ; B3 Noise Enable A ON
                              ; B2 Tone Enable C OFF
                              ; B1 Tone Enable B OFF
                              ; B0 Tone Enable A OFF
                              ; 2090 IF PEEK(&HF80F)=1 THEN SOUND7,55
 
                              ; ENVELOPE PERIOD CONTROL FINE TUNE
                              ; 9 = 00001001
                              ; 2100 SOUND 13,9
 
                              ; YOU HIT A PARKED ALIEN? OKAY - SUICIDE SUCCESSFULL
                              ; 2110 IF PEEK(&HF80B)=1 THEN GOTO800
 
                              ; DID YOU MAKE IT INTO THE SHUTTLE
                              ; RESET COUNT OF COMPLETED ITEM TYPES
                              ; COUNT UP POINTS FOR TIME REMAINING
                              ; 2120 IF PEEK(&HF802)=22 THEN GOSUB 600:IF PX=4 THEN PX=0:GOTO 2500
 
                              ; TOTAL TIME = CURRENT TIME - START TIME
                              ; TIME LEFT = INTEGER TOTAL TIME / 1000
                              ; 2130 TT=TIME-T:TL=100-INT(TT/1000)
 
                              ; UPDATE TIME LEFT ON SCREEN
                              ; 2140 LOCATE28,11:PRINT RIGHT$("  "+STR$(TL),3)
 
                              ; IF TIME LEFT < 0 THEN JUMP 2400 SORRY NO BONUS
                              ; 2150 IF TL<0 THEN GOTO 2400
 
                              ; LOOP BACK TO CONTINUE TIME TRIAL
                              ; 2160 GOTO 2060
 
;*********************************************************************
;* JUMP 2400 TIME TRIAL OVER - OUT OF TIME
;*  Brief description
;*
;* I/O: what is expected and produced
;*
;* Calling Convention: how is this called?
;*
;* Returns:
;*
;* Stack Usage: (when needed) structure of stacked data
;*
;* Calls: Info about routines called
;*
;* Changes: registers destroyed.
;*********************************************************************
                              ; SOUND MIXER CONTROL/IO ENABLE
                              ; 62 = 00111110
                              ; B7 IO Port B Input Enable
                              ; B6 IO Port A Input Enable
                              ; B5 Noise Enable C OFF
                              ; B4 Noise Enable B OFF
                              ; B3 Noise Enable A OFF
                              ; B2 Tone Enable C OFF
                              ; B1 Tone Enable B OFF
                              ; B0 Tone Enable A ON
                              ; START TIME OVER DRAW LOOP
                              ; 2400 SOUND7,62:FOR I=1 TO 16
 
                              ; POSITION TO DRAW NEXT LETTER
                              ; 2410 LOCATE3+I,8
 
                              ; FIND NEXT LETTER IN BANNER
                              ; 2420 PR$=MID$("T I M E  O V E R",I,1)
 
                              ; DRAW NEXT LETTER
                              ; 2425 PRINTPR$:IF PR$=" " THEN GOTO 2435
 
                              ; USE LETTER OR SPACE DISPLAYED AS TONE?
                              ; 2430 PLAY"L12V11N"+STR$(-I+50)
 
                              ; DELAY BETWEEN LETTERS/TONES
                              ; 2435 FOR J=1 TO40:NEXT
 
                              ; END BANNER LOOP
                              ; 2440 NEXT
 
                              ; REENABLE ALIEN MOVE ROUTINE - REPLACE RET WITH LD A,(**)
                              ; 2445 POKE&HF700,&H3A
 
                              ; MOVE TO NEXT LINE
                              ; COLOR REVERSE BLACK ON GREEN
                              ; PRINT NO BONUS
                              ; COLOR WHITE ON BLACK
                              ; 2450 LOCATE7,9:COLOR4:PRINT"SORRY NO BONUS";:COLOR1
 
                              ; DELAY THEN RETURN
                              ; 2460 FOR I=1 TO 1000:NEXT:RETURN
 
;*********************************************************************
;* JUMP 2500 TIME TRIAL SUCCESS COUNT REMAINING POINTS
;*  Brief description
;*
;* I/O: what is expected and produced
;*
;* Calling Convention: how is this called?
;*
;* Returns:
;*
;* Stack Usage: (when needed) structure of stacked data
;*
;* Calls: Info about routines called
;*
;* Changes: registers destroyed.
;*********************************************************************
                              ; 2500 REM*********
 
                              ; REENABLE ALIEN MOVE - REPLACE RET WITH LD A,(**)
                              ; 2505 POKE&HF700,&H3A
 
                              ; COUNT FOR EACH TIME LEFT
                              ; 2530 FOR I=0 TO TL
 
                              ; ADD ONE POINT
                              ; MOVE CURSOR TO SCORE
                              ; UPDATE SCORE
                              ; 2540 SC=SC+1:LOCATE26,2:PRINT RIGHT$("     "+STR$(SC),5)
 
                              ; MOVE CURSOR TO TIME
                              ; UPDATE TIME COUNTING DOWN
                              ; 2550 LOCATE28,11:PRINT RIGHT$("  "+STR$(TL-I),3)
 
                              ; RING THE BELL FOR EACH POINT
                              ; 2555 PLAY"L20SO5c"
 
                              ; TIME LEFT COUNTDOWN LOOP
                              ; 2560 NEXT
 
                              ; SUBTRACT ONE FROM COUNT OF ITEMS NEEDED ON NEXT?
                              ; 2570 PM=PM-1
 
                              ; FALL THROUGH INTO
;*********************************************************************
;* NEXT JUMP 3000 NEXT LEVEL SETUP
;*  Brief description
;*
;* I/O: what is expected and produced
;*
;* Calling Convention: how is this called?
;*
;* Returns:
;*
;* Stack Usage: (when needed) structure of stacked data
;*
;* Calls: Info about routines called
;*
;* Changes: registers destroyed.
;*********************************************************************
NEXT:
                              ; 3000 REM**** next
 
                              ; PLAY LEVEL START MUSIC
                              ; 3050 GOSUB 7200
 
                              ; INCREMENT NUMBER OF ITEMS NEEDED
                              ; AND CAP IT AT 6
                              ; FIXME IS THERE A BUG IN THIS AT HIGH LEVELS?
                              ; 3100 PM=PM+1:IF PM>6 THEN PM=6
 
                              ; LOOP THROUGH ITEM CATEGORIES
                              ; 3110 FOR I=0 TO 3
 
                              ; SET SHUTTLE AMOUNTS TO EMPTY
                              ; 3120 PS(I)=0
 
                              ; END LOOP
                              ; 3130 NEXT
 
                              ; 3140 RETURN
 
;*********************************************************************
;* SUBROUTINE DEMO1
;*  Brief description
;*
;* I/O: what is expected and produced
;*
;* Calling Convention: how is this called?
;*
;* Returns:
;*
;* Stack Usage: (when needed) structure of stacked data
;*
;* Calls: Info about routines called
;*
;* Changes: registers destroyed.
;*********************************************************************
BAS4000:
DEMO1:
                              ; 4000 REM***** demo1
 
                              ; DRAW HALL 1
                              ; 4010 CLS
 
                              ; 4020 LINE(0,0)-(72,72),5
 
                              ; 4030 LINE(0,192)-(72,116),5
 
                              ; 4040 LINE(72,72)-(72,116),5
 
                              ; 4050 LINE(144,72)-(216,0),5
 
                              ; 4060 LINE(144,116)-(216,192),5
 
                              ; 4070 LINE(144,116)-(144,72),5
 
                              ; 4080 LINE(72,84)-(144,84),5
 
                              ; 4090 LINE(72,108)-(144,108),5
 
                              ; PLAY LOW BOOP
                              ; DELAY
                              ; 4100 PLAY"v11l1o3c":FOR I=1 TO 500:NEXT
 
                              ; DRAW HALL 2
                              ; 4110 CLS
 
                              ; 4120 LINE(0,0)-(48,48),5
 
                              ; 4130 LINE(0,192)-(48,140),5
 
                              ; 4140 LINE(48,48)-(48,140),5
 
                              ; 4150 LINE(168,48)-(216,0),5
 
                              ; 4160 LINE(168,140)-(216,192),5
 
                              ; 4170 LINE(168,140)-(168,48),5
 
                              ; 4180 LINE(48,68)-(168,68),5
 
                              ; 4190 LINE(48,120)-(168,120),5
 
                              ; PLAY LOWER BOOP
                              ; DELAY
                              ; 4200 PLAY"v11l1o2b.":FOR I=1 TO 500:NEXT
 
                              ; START BUILDING ATSIGN ALIEN DISPLAY
                              ; 4500 A$=CHR$(64)+CHR$(29)
 
                              ; 4510 B$=A$+CHR$(30)
 
                              ; 4520 C$=A$+CHR$(31)
 
                              ; 4530 D$=A$+CHR$(29)
 
                              ; 4540 E$=A$+CHR$(28)
 
                              ; 4545 F$=C$+CHR$(29)
 
                              ; 4550 A$=B$+B$+CHR$(28)+E$+E$+E$+E$+E$+E$+CHR$(31)+C$+C$+C$+C$+F$
 
                              ; 4560 A$=A$+D$+D$+D$+D$+D$+D$+CHR$(30)+B$+CHR$(28)+E$+E$+E$+CHR$(31)+E$
 
                              ; MOVE TO START DRAWING AT SIGNS WHITE ON BLACK
                              ; 4565 LOCATE9,8
 
                              ; LOOP THROUGH ENTIRE STRING TO DRAW 1 AT SIGN AND CURSOR MOVE EACH
                              ; 4570 FOR I=1 TO 78
 
                              ; DRAW JUST ONE
                              ; 4580 PRINTMID$(A$,I,1);
 
                              ; SMALL DELAY BETWEEN EACH ONE
                              ; 4590 FOR J=1 TO 5:NEXT
 
                              ; FINISH SLOW DRAWING THE ALIEN
                              ; 4600 NEXT
 
                              ; 4700 SOUND 4,70:SOUND 5,0
 
                              ; 4710 SOUND 2,0:SOUND 3,15
 
                              ; 4720 SOUND 9,15:SOUND10,15
 
                              ; 4730 SOUND 7,57
 
                              ; NOW FLASH ALIEN WITH ALTERNATING TONES
                              ; 4750 FOR I=1TO 8
 
                              ; 4760 COLOR3:LOCATE9,8:PRINTA$
 
                              ; 4770 SOUND 3,15
 
                              ; 4780 FOR J=0 TO 50:NEXT
 
                              ; 4790 COLOR1:LOCATE9,8:PRINTA$
 
                              ; 4800 SOUND 3,13
 
                              ; DELAY
                              ; 4810 FOR J=0 TO 50:NEXT
 
                              ; 4820 NEXT:SOUND7,60
 
                              ; PLAY FALLING TONES WHILE DRAWING MESSAGE
                              ; 4830 PLAY"l3o6v11d+dc+c"
 
                              ; LOOP THROUGH MESSAGE
                              ; 4840 FORI=1 TO 12
 
                              ; DRAW ITS HERE IN WHITE ON BLACK ONE LETTER AT A TIME
                              ; 4850 LOCATE8,14:PRINTLEFT$(" !",I);:FOR J=1 TO 20:NEXT
                              ; 0000d768 f2                               0xf2
                              ; 0000d769 12                               0x12
                              ; 0000d76a a1                               0xa1
                              ; 0000d76b 38                               0x38 '8'
                              ; 0000d76c 2c                               0x2c ','
                              ; 0000d76d 31                               0x31 '1'
                              ; 0000d76e 34                               0x34 '4'
                              ; 0000d76f 3a                               0x3a ':'
                              ; 0000d770 95                               0x95
                              ; 0000d771 ea                               0xea
                              ; 0000d772 28                               0x28 '('
                              ; 0000d773 22                               0x22 '"'
                              ; 0000d774 eb                               0xeb
                              ; 0000d775 8a                               0x8a
                              ; 0000d776 8a                               0x8a
                              ; 0000d777 20                               0x20 ' '
                              ; 0000d778 b4                               0xb4
                              ; 0000d779 b2                               0xb2
                              ; 0000d77a d8                               0xd8
                              ; 0000d77b b1                               0xb1
                              ; 0000d77c dd                               0xdd
                              ; 0000d77d e0                               0xe0
                              ; 0000d77e de                               0xde
                              ; 0000d77f 21                               0x21 '!'
                              ; 0000d780 22                               0x22 '"'
                              ; 0000d781 2c                               0x2c ','
                              ; 0000d782 49                               0x49 'I'
                              ; 0000d783 29                               0x29 ')'
                              ; 0000d784 3b                               0x3b ';'
                              ; 0000d785 3a                               0x3a ':'
                              ; 0000d786 81                               0x81
                              ; 0000d787 20                               0x20 ' '
                              ; 0000d788 4a                               0x4a 'J'
                              ; 0000d789 d2                               0xd2
                              ; 0000d78a 31                               0x31 '1'
                              ; 0000d78b 20                               0x20 ' '
                              ; 0000d78c c3                               0xc3
                              ; 0000d78d 20                               0x20 ' '
                              ; 0000d78e 32                               0x32 '2'
                              ; 0000d78f 30                               0x30 '0'
                              ; 0000d790 3a                               0x3a ':'
                              ; 0000d791 82                               0x82
                              ; 0000d792 00                               0x00
 
                              ; 4860 NEXT
 
                              ; GREEN ON BLACK
                              ; 4865 COLOR3
 
                              ; DRAW ITS HERE MESSAGE AGAIN THIS TIME IN DIFFERENT COLOR
                              ; 4870 FORI=1 TO 12
 
                              ; 4880 LOCATE8,14:PRINTLEFT$(" !",I);:FOR J=1 TO 20:NEXT
                              ; 0000d7b0 10                               0x10
                              ; 0000d7b1 13                               0x13
                              ; 0000d7b2 a1                               0xa1
                              ; 0000d7b3 38                               0x38 '8'
                              ; 0000d7b4 2c                               0x2c ','
                              ; 0000d7b5 31                               0x31 '1'
                              ; 0000d7b6 34                               0x34 '4'
                              ; 0000d7b7 3a                               0x3a ':'
                              ; 0000d7b8 95                               0x95
                              ; 0000d7b9 ea                               0xea
                              ; 0000d7ba 28                               0x28 '('
                              ; 0000d7bb 22                               0x22 '"'
                              ; 0000d7bc eb                               0xeb
                              ; 0000d7bd 8a                               0x8a
                              ; 0000d7be 8a                               0x8a
                              ; 0000d7bf 20                               0x20 ' '
                              ; 0000d7c0 b4                               0xb4
                              ; 0000d7c1 b2                               0xb2
                              ; 0000d7c2 d8                               0xd8
                              ; 0000d7c3 b1                               0xb1
                              ; 0000d7c4 dd                               0xdd
                              ; 0000d7c5 e0                               0xe0
                              ; 0000d7c6 de                               0xde
                              ; 0000d7c7 21                               0x21 '!'
                              ; 0000d7c8 22                               0x22 '"'
                              ; 0000d7c9 2c                               0x2c ','
                              ; 0000d7ca 49                               0x49 'I'
                              ; 0000d7cb 29                               0x29 ')'
                              ; 0000d7cc 3b                               0x3b ';'
                              ; 0000d7cd 3a                               0x3a ':'
                              ; 0000d7ce 81                               0x81
                              ; 0000d7cf 20                               0x20 ' '
                              ; 0000d7d0 4a                               0x4a 'J'
                              ; 0000d7d1 d2                               0xd2
                              ; 0000d7d2 31                               0x31 '1'
                              ; 0000d7d3 20                               0x20 ' '
                              ; 0000d7d4 c3                               0xc3
                              ; 0000d7d5 20                               0x20 ' '
                              ; 0000d7d6 32                               0x32 '2'
                              ; 0000d7d7 30                               0x30 '0'
                              ; 0000d7d8 3a                               0x3a ':'
                              ; 0000d7d9 82                               0x82
                              ; 0000d7da 00                               0x00
 
                              ; FINISH DRAWING LOOP
                              ; 4890 NEXT
 
                              ; 4900 RETURN
 
                              ; 4999 END
 
;*********************************************************************
;* JUMP 5000 PICK WHICH SCREEN TO RUN?
;* SCREENTABLE:                  ; Table of screen values used in BAS5010
;*            fdb   1,1,3,4,2,1,1,4,2,5,1,1,1,6,1,1,5,1,1,6,0
;*  Brief description
;*
;* I/O: what is expected and produced
;*
;* Calling Convention: how is this called?
;*
;* Returns:
;*
;* Stack Usage: (when needed) structure of stacked data
;*
;* Calls: Info about routines called
;*
;* Changes: registers destroyed.
;*********************************************************************
BAS5000:                      ; 5000 REM**
 
BAS5005:                      ; FIXME 5005 POKE&HF5E5,&HE3:PM=1:CR=4:SS=0
            clr   NEXTSCREEN  ; FIXME F5E5 LOADS AS D4 - CHANGED TO E3
            lda   #1          ; FIXME constants can be made into config variables
            sta   PM          ; NUMBER ITEMS PER CATEGORY TO 1
            lda   #4          ; FIXME constants can be made into config variables
            sta   CR          ; 4 CREW REMAINING
            clr   SS          ; SHOW SCREEN 0
 
BAS5006:                      ; FIXME 5006 GOSUB 6700:EE=0
                              ; FIXME SETUP F53B TO JR 0xF569
            clr   EE          ; FIXME EE = 0 WHAT IS EE?
 
BAS5010:                      ; 5010 EXEC&HF5B8
                              ; ############################################################################
ASMF5B8:                      ;        LDX     0xF5E5      ;F5B8 2A E5 F5    LD      HL,(0xF5E5)
                              ;        LEAX    1,X         ;F5BB 23          INC     HL
                              ;        TFR     L,A         ;F5BC 7D          LD      A,L
                              ;        CMPA    #$ E        ;F5BD FE E4       CP      0xE4
                              ;        LBNE    0xF5C3      ;F5BF 20 02       JR      NZ,0xF5C3
                              ;        TFR     0xD0,L      ;F5C1 2E D0       LD      L,0xD0
                              ;        LDA     ,X          ;F5C3 7E          LD      A,(HL)
                              ;        STA     0xF5E7      ;F5C4 32 E7 F5    LD      (0xF5E7),A
                              ;        STX     0xF5E5      ;F5C7 22 E5 F5    LD      (0xF5E5),HL
                              ;        RTS                 ;F5CA C9          RET
                              ; ### TABLE OF SCREEN/LEVEL VALUES?
                              ;         TFR     0x0301,U    ;F5D0 01 01 03    LD      BC,0x0301
                              ;         INCB                ;F5D3 04          INC     B
                              ;         STA     ,U          ;F5D4 02          LD      (BC),A
                              ;         TFR     0x0401,U    ;F5D5 01 01 04    LD      BC,0x0401
                              ;         STA     ,U          ;F5D8 02          LD      (BC),A
                              ;         DECB                ;F5D9 05          DEC     B
                              ;         TFR     0x0101,U    ;F5DA 01 01 01    LD      BC,0x0101
                              ;         TFR     0x01,B      ;F5DD 06 01       LD      B,0x01
                              ;         TFR     0x0105,U    ;F5DF 01 05 01    LD      BC,0x0105
                              ;         TFR     0x0006,U    ;F5E2 01 06 00    LD      BC,0x0006
                              ;         BCS     >           ;F5E5 -
                              ;         LBSR    0x01F5
                              ; !       ***     Jump here   ;**** D4 F5 01    CALL    NC,0x01F5
 
            ldb   NEXTSCREEN  ; load the value of the offset into the table
            incb              ; move the offset one more
            cmpb  #20         ; did we hit 00 at the end of the table?
            bne   EXIT5010    ; not at the end of the table, use the B we got
            clrb              ; yep, hit end of table, so reset offset to 0 back at start of table
EXIT5010:   stb   NEXTSCREEN  ; save our offset to use in B
            ldx   #SCREENTABLE ; load address of table of screens to show in order
            abx               ; now get that table value address read
            lda   ,X          ; load table value into accumulator
 
BAS5020:                      ; 5020 ON PEEK(&HF5E7) GOSUB 100,2000,4000,6000,6500,8800,6000,8800
                              ; MOVE THROUGH TABLE OF SCREENS AS GAME PROGRESSES?
                              ; F5E7 LOADS AS 01 TO GO TO MAIN GAME LOOP FIRST
                              ; SCREEN 1 - 100 MAIN
                              ; SCREEN 2 - 2000 TIME TRIAL
                              ; SCREEN 3 - 4000 DEMO1
                              ; SCREEN 4 - 6000 TIME TRIAL
                              ; SCREEN 5 - 6500 GRAPHIC MULTICOLOR ALIEN SITTING STILL
                              ; SCREEN 6 - 8800 GRAPHIC RED ALIEN BOUNCING BACK AND FORTH
                              ; SCREEN 7 - 6000 GRAPHIC MULTICOLOR ALIEN SITTING STILL
                              ; SCREEN 8 - 8800 GRAPHIC RED ALIEN BOUNCING BACK AND FORTH
 
                              ; FIXME replace this mess with a jump table by offset
                              ; SCREEN 7 AND 8 in GOSUB are never called by number from table
            cmpa  #1          ; is next screen #1?
            bne   CHKSCN2     ; no, go check next
            jsr   BAS0100     ; yes, gosub line 100 - main game screen
            jmp   BAS5025     ; go check EE when done
CHKSCN2:
            cmpa  #2          ; is next screen #2?
            bne   CHKSCN3     ; no, go check next
            jsr   BAS2000     ; gosub line 2000 - main time trial screen
            jmp   BAS5025     ; go check EE when done
CHKSCN3:
            cmpa  #3          ; is next screen #3?
            bne   CHKSCN4     ; no, go check next
            jsr   BAS4000     ; yes, gosub line 4000 demo 1
            jmp   BAS5025     ; go check EE when done
CHKSCN4:
            cmpa  #4          ; is next screen #4?
            bne   CHKSCN5     ; no, go check next
            jsr   BAS6000     ; yes, gosub line 6000 - time trial intro
            jmp   BAS5025     ; go check EE when done
CHKSCN5:
            cmpa  #5          ; is next screen #5?
            bne   CHKSCN6     ; no, go check next
            jsr   BAS6500     ; yes, gosub line 6500 - graphic alien sitting still
            jmp   BAS5025     ; go check EE when done
CHKSCN6:
            cmpa  #6          ; is next screen #6?
            bne   CHKSCN7     ; no, go check next
            jsr   BAS8800     ; yes, gosub line 8800 - graphic alien bouncing around
            jmp   BAS5025     ; go check EE when done
                              ; FIXME we should never fall through here
CHKSCN7:    bra   CHKSCN7     ; ERROR - HALT
CHKSCN8:    bra   CHKSCN8     ; ERROR - HALT
 
BAS5025:                      ; 5025 IF EE=1 THEN GOTO 5000
            lda   EE          ; load EE
            cmpa  #1          ; compare EE to 1
            bne   BAS5030     ; not equal, go to next line 5030
            jmp   BAS5000     ; was equal, go to line 5000
 
BAS5030:                      ; 5030 GOTO 5010
            jmp   BAS5010
;*********************************************************************
;* SUBROUTINE 6000 TIME TRIAL SCREEN
;*  Brief description
;*
;* I/O: what is expected and produced
;*
;* Calling Convention: how is this called?
;*
;* Returns:
;*
;* Stack Usage: (when needed) structure of stacked data
;*
;* Calls: Info about routines called
;*
;* Changes: registers destroyed.
;*********************************************************************
BAS6000:
                              ; 6000 CLS:FOR I=0 TO 15:PRINT"                              ";
 
                              ; 6001 NEXT
 
                              ; 6005 LOCATE5,7:PRINT"@ @ @ @  @ @ @ @ @ @"
 
                              ; 6010 FOR I=1 TO 20
 
                              ; 6020 LOCATE5,7:PRINTLEFT$("T I M E  T R I A L @",I);:FORJ=1TO50:NEXT
 
                              ; 6030 NEXT
 
                              ; 6040 A$="V10L4T120"
 
                              ; 6050 PLAYA$,A$:A$="O6C16C+16D16D+16"
 
                              ; 6060 PLAY"O4CC+DD+EF",A$+A$+A$+A$+A$+A$
 
                              ; 6070 PLAY"F+GG+AA+B",A$+A$+A$+A$+A$+A$
 
                              ; 6075 PLAY"O5CCCC",A$+A$+"CC"
 
                              ; 6076 FOR I=1 TO 2500:NEXT
 
                              ; 6080 RETURN
 
;*********************************************************************
;* SUBROUTINE 6400 PLAY RANDOM NOTES
;*  Brief description
;*
;* I/O: what is expected and produced
;*
;* Calling Convention: how is this called?
;*
;* Returns:
;*
;* Stack Usage: (when needed) structure of stacked data
;*
;* Calls: Info about routines called
;*
;* Changes: registers destroyed.
;*********************************************************************
                              ; 6400 PLAY"s9m5000"
 
                              ; 6410 A$=MID$("CDEFGAB",RND(1)*7+1,1):PLAYA$+"16":RETURN
 
;*********************************************************************
;* SUBROUTINE 6500 DRAW GRAPHIC ALIEN SITTING STILL ON SCREEN PLAY NOTES
;*  Brief description
;*
;* I/O: what is expected and produced
;*
;* Calling Convention: how is this called?
;*
;* Returns:
;*
;* Stack Usage: (when needed) structure of stacked data
;*
;* Calls: Info about routines called
;*
;* Changes: registers destroyed.
;*********************************************************************
BAS6500:
                              ; 6500 CLS
 
                              ; BLOCK MOVE F300-F3AF TO C287-C336
                              ; 6510 POKE&HF4F1,&HC2:POKE&HF4F0,135:EXEC&HF4E0
                              ; ;############################################################################
                              ;         TFR     0x00B0,U    ;F4E0 01 B0 00    LD      BC,0x00B0
                              ;         TFR     0xF300,X    ;F4E3 21 00 F3    LD      HL,0xF300
                              ;         LDY     0xF4F0      ;F4E6 ED 5B F0    LD      DE,(0xF4F0)
                              ;         PSHS    D       *** Check U is an even #
                              ; !       LDD     ,X++
                              ;         STD     ,Y++
                              ;         LEAU    -2,U
                              ;         CMPU    #$0000
                              ;         BNE     <
                              ;         PULS    D           ;F4EA ED B0       LDIR
                              ;         RTS                 ;F4EC C9          RET
                              ; ;############################################################################
                              ;         ADDA    ,B          ;F4ED 80          ADD     A,B
                              ;         ADDA    ,B          ;F4EE 80          ADD     A,B
                              ;         ADDA    ,B          ;F4EF 80          ADD     A,B
                              ;         ASLA                ;F4F0 87          ADD     A,A
                              ;         LBNE    0x8080      ;F4F1 C2 80 80    JP      NZ,0x8080
 
 
                              ; 6520 FORI=1 TO 5
 
                              ; MODIFY CODE AT F5A8 AND EXECUTE
                              ; FILL SCREEN OR BUFFER WITH &H62
                              ; 6530 POKE&HF5A8,&H62:EXEC&HF5A4
                              ; ;############################################################################
                              ;         TFR     0xC000,X    ;F5A4 21 00 C0    LD      HL,0xC000
                              ;         TFR     0x60,B      ;F5A7 06 60       LD      B,0x60
                              ;         STB     ,X          ;F5A9 70          LD      (HL),B
                              ;         LEAX    1,X         ;F5AA 23          INC     HL
                              ;         TFR     H,A         ;F5AB 7C          LD      A,H
                              ;         CMPA    #$ C        ;F5AC FE C2       CP      0xC2
                              ;         BEQ to RTS address  ;F5AE C8          RET     Z
                              ;         LBRA    0xF5A9      ;F5AF 18 F8       JR      0xF5A9
 
                              ; PICK RANDOM COLOR?
                              ; 6540 POKE&HF594,INT(RND(1)*4)*&H40:EXEC&HF590:GOSUB6400
                              ; ;############################################################################
                              ;         TFR     0xC200,X    ;F590 21 00 C2    LD      HL,0xC200
                              ;         TFR     0x80,B      ;F593 06 80       LD      B,0x80
                              ;         TFR     0x3F,C      ;F595 0E 3F       LD      C,0x3F
                              ;         LDA     ,X          ;F597 7E          LD      A,(HL)
                              ;         ANDA    C           ;F598 A1          AND     C
                              ;         ORA   Register - need tweaking  B           ;F599 B0          OR      B
                              ;         STA     ,X          ;F59A 77          LD      (HL),A
                              ;         LEAX    1,X         ;F59B 23          INC     HL
                              ;         TFR     H,A         ;F59C 7C          LD      A,H
                              ;         CMPA    #$ C        ;F59D FE C4       CP      0xC4
                              ;         BEQ to RTS address  ;F59F C8          RET     Z
                              ;         LBRA    0xF597      ;F5A0 18 F5       JR      0xF597
 
                              ; 6560 POKE&HF5A8,&H60:EXEC&HF5A4
                              ; ;############################################################################
                              ;         TFR     0xC000,X    ;F5A4 21 00 C0    LD      HL,0xC000
                              ;         TFR     0x60,B      ;F5A7 06 60       LD      B,0x60
                              ;         STB     ,X          ;F5A9 70          LD      (HL),B
                              ;         LEAX    1,X         ;F5AA 23          INC     HL
                              ;         TFR     H,A         ;F5AB 7C          LD      A,H
                              ;         CMPA    #$ C        ;F5AC FE C2       CP      0xC2
                              ;         BEQ to RTS address  ;F5AE C8          RET     Z
                              ;         LBRA    0xF5A9      ;F5AF 18 F8       JR      0xF5A9
 
                              ; 6570 POKE&HF594,INT(RND(1)*4)*&H40:EXEC&HF590:GOSUB6400
                              ; ;############################################################################
                              ;         TFR     0xC200,X    ;F590 21 00 C2    LD      HL,0xC200
                              ;         TFR     0x80,B      ;F593 06 80       LD      B,0x80
                              ;         TFR     0x3F,C      ;F595 0E 3F       LD      C,0x3F
                              ;         LDA     ,X          ;F597 7E          LD      A,(HL)
                              ;         ANDA    C           ;F598 A1          AND     C
                              ;         ORA   Register - need tweaking  B           ;F599 B0          OR      B
                              ;         STA     ,X          ;F59A 77          LD      (HL),A
                              ;         LEAX    1,X         ;F59B 23          INC     HL
                              ;         TFR     H,A         ;F59C 7C          LD      A,H
                              ;         CMPA    #$ C        ;F59D FE C4       CP      0xC4
                              ;         BEQ to RTS address  ;F59F C8          RET     Z
                              ;         LBRA    0xF597      ;F5A0 18 F5       JR      0xF597
 
                              ; FINISH LOOP OF 5
                              ; 6590 NEXT
 
                              ; PLAY MELODY AND DELAY
                              ; 6595 PLAY"L12CC+CDCD+CECFCECD+CDCCCCL4":FOR I=1 TO 600:NEXT
 
                              ; MODIFY CODE AT F500-F582 - MAKE ALIEN INVISIBLE?
                              ; ITEMS NEEDED = 1
                              ; 6600 POKE&HF53B,&H3A:POKE&HF53C,&H02:PM=1
 
                              ; 6610 RETURN
 
;*********************************************************************
;* SUBROUTINE 6700 - PATCH SCREEN ORDER?
;*  Brief description
;*
;* I/O: what is expected and produced
;*
;* Calling Convention: how is this called?
;*
;* Returns:
;*
;* Stack Usage: (when needed) structure of stacked data
;*
;* Calls: Info about routines called
;*
;* Changes: registers destroyed.
;*********************************************************************
                              ; SET F53B TO JR 0xF569
                              ; 6700 POKE&HF53B,&H18:POKE&HF53C,&H2C
 
                              ; 6710 RETURN
 
;*********************************************************************
;* SOUND ALIEN CAUGHT YOU SONG
;* RoutineName - expanded name or phrase describing purpose
;*  Brief description
;*
;* I/O: what is expected and produced
;*
;* Calling Convention: how is this called?
;*
;* Returns:
;*
;* Stack Usage: (when needed) structure of stacked data
;*
;* Calls: Info about routines called
;*
;* Changes: registers destroyed.
;*********************************************************************
SOUND:
                              ; 7000 REM**** sound
 
                              ; 7100 REM
                              ; 0000db63 bc                               0xbc
                              ; 0000db64 1b                               0x1b
                              ; 0000db65 8e                               0x8e
                              ; 0000db66 eb                               0xeb
                              ; 0000db67 94                               0x94
                              ; 0000db68 8a                               0x8a
                              ; 0000db69 8a                               0x8a
                              ; 0000db6a 00                               0x00
 
                              ; 7110 A$="L6O3v8a.v9a.v10a.v11a."
 
                              ; 7120 B$="L6O3v8e.v9f.v10g.v11f.
 
                              ; 7130 C$="L12O4v8ccev9ddfv10eegv11ffd"
 
                              ; 7135 POKE&HFB8F,0:POKEFB90,0:H=0:POKE&HFB90,1:POKE&HFB8F,1
 
                              ; 7140 PLAYA$,B$,C$
 
                              ; 7145 FOR I=1 TO 600:IF INKEY$="h" THEN H=1
 
                              ; 7146 NEXT
 
                              ; 7150 GOTO 1390
 
;*********************************************************************
;* NEXT LEVEL MUSIC?
;* RoutineName - expanded name or phrase describing purpose
;*  Brief description
;*
;* I/O: what is expected and produced
;*
;* Calling Convention: how is this called?
;*
;* Returns:
;*
;* Stack Usage: (when needed) structure of stacked data
;*
;* Calls: Info about routines called
;*
;* Changes: registers destroyed.
;*********************************************************************
                              ; 7200 REM ***** !!!!!!!
                              ; 0000dc3c 20                               0x20 ' '
                              ; 0000dc3d 1c                               0x1c
                              ; 0000dc3e 8e                               0x8e
                              ; 0000dc3f 20                               0x20 ' '
                              ; 0000dc40 2a                               0x2a '*'
                              ; 0000dc41 2a                               0x2a '*'
                              ; 0000dc42 2a                               0x2a '*'
                              ; 0000dc43 2a                               0x2a '*'
                              ; 0000dc44 2a                               0x2a '*'
                              ; 0000dc45 20                               0x20 ' '
                              ; 0000dc46 98                               0x98
                              ; 0000dc47 f8                               0xf8
                              ; 0000dc48 91                               0x91
                              ; 0000dc49 21                               0x21 '!'
                              ; 0000dc4a 21                               0x21 '!'
                              ; 0000dc4b 21                               0x21 '!'
                              ; 0000dc4c 21                               0x21 '!'
                              ; 0000dc4d 21                               0x21 '!'
                              ; 0000dc4e 21                               0x21 '!'
                              ; 0000dc4f 21                               0x21 '!'
                              ; 0000dc50 00                               0x00
 
                              ; 7205 SOUND7,56
 
                              ; 7210 A$="L16v9gggeO5cO4bagbO5cdO4fffff"
 
                              ; 7220 B$="L16fffgbagfddd+d+eeee"
 
                              ; 7230 C$="L16fffO5dcO4babO5cO4bO5dccccc"
 
                              ; 7240 E$="v9L2efge":G$="L2gfgc"
 
                              ; 7250 F$="v9L2O4ccO3fg":H$="L2O4ccO3bg"
 
                              ; 7260 PLAYA$+B$,E$,F$
 
                              ; 7270 PLAYA$+C$,G$,H$
 
                              ; DELAY
                              ; 7275 FOR I=1 TO 500:NEXT
 
                              ; RESET COLOR AND SOUND AND RETURN
                              ; 7280 GOTO 1390
 
;*********************************************************************
;* SUBROUTINE 7300 SOUND: MADE IT INTO SHUTTLE WITH SUPPLIES
;*  Brief description
;*
;* I/O: what is expected and produced
;*
;* Calling Convention: how is this called?
;*
;* Returns:
;*
;* Stack Usage: (when needed) structure of stacked data
;*
;* Calls: Info about routines called
;*
;* Changes: registers destroyed.
;*********************************************************************
                              ; 7300 SOUND7,60
 
                              ; 7310 A$="L16v11O5cegO6c":B$="L16v11O4gO5ceg"
 
                              ; 7320 PLAYA$,B$:PLAYA$,B$
 
                              ; 7325 FOR I=1 TO 300:NEXT
 
                              ; JUMP BACK TO SOUND CHIP RESET WHICH RETURNS TO PREVIOUS FUNCTION
                              ; 7330 GOTO 1390
 
;*********************************************************************
;* START SUBROUTINE 8100
;* SETUP ALIEN STARTING POSITIONS F800, F801
;* SETUP PLAYER STARTING POSITIONS F802, F803
;* SETUP ALIEN INITIAL MOVE DIRECTION F804, F805
;*
;* I/O: what is expected and produced
;*
;* Calling Convention: how is this called?
;*
;* Returns:
;*
;* Stack Usage: (when needed) structure of stacked data
;*
;* Calls: Info about routines called
;*
;* Changes: registers destroyed.
;*********************************************************************
                              ; 8000 REM **** start
 
BAS8100:                      ; 8100 POKE&HF800,0:POKE&HF801,0:POKE&HF802,22:POKE&HF803,9:POKE&HF804,1
            clr   ALIENX      ;     Clear Alien X position at NEC $F800
            clr   ALIENY      ;     Clear Alien Y position at NEC $F801
            lda   #22         ;     Player start X position at NEC $F802 = 22
            sta   PLAYERX     ;     Set it up
            lda   #9          ;     Player start Y postion at NEC $F803 = 9
            sta   PLAYERY     ;     Set it up
            lda   #1          ;     Alien start direction X at NEC $F804 = move right
            sta   ALIENDX     ;     Set it up
 
                              ; 8110 POKE&HF805,0
            clr   ALIENDY     ;     Alien start direction Y at NEC $F805 = do not move up or down
 
            rts               ; 8120 RETURN
 
;*********************************************************************
;* SUBROUTINE 8130 EMPTY OUT ITEMS CARRIED F806 to F80A
;*
;* I/O: what is expected and produced
;*
;* Calling Convention: how is this called?
;*
;* Returns:
;*
;* Stack Usage: (when needed) structure of stacked data
;*
;* Calls: Info about routines called
;*
;* Changes: registers destroyed.
;*********************************************************************
 
BAS8130:                      ; 8130 POKE&HF806,0:POKE&HF807,0:POKE&HF808,0:POKE&HF809,0:POKE&HF80A,0
            clr   PH          ;      NEC $F806 - TOTAL ITEMS HELD
            clr   PH0         ;      NEC $F807-$F80A - COUNT OF EACH ITEM TYPE HELD
            clr   PH1         ;      NEC $F807-$F80A - COUNT OF EACH ITEM TYPE HELD
            clr   PH2         ;      NEC $F807-$F80A - COUNT OF EACH ITEM TYPE HELD
            clr   PH3         ;      NEC $F807-$F80A - COUNT OF EACH ITEM TYPE HELD
 
            rts               ; 8140 RETURN
 
;*********************************************************************
;* JUMP 8600 DRAWS RED GRAPHIC ALIEN JUMPING BACK AND FORTH ON SCREEN
;* RoutineName - expanded name or phrase describing purpose
;*  Brief description
;*
;* I/O: what is expected and produced
;*
;* Calling Convention: how is this called?
;*
;* Returns:
;*
;* Stack Usage: (when needed) structure of stacked data
;*
;* Calls: Info about routines called
;*
;* Changes: registers destroyed.
;*********************************************************************
                              ; 8600 FORDI=1TO2:POKE&HF4F1,&HC2
 
                              ; 8610 FOR I=128 TO 146 STEP 6
 
                              ; 8620 POKE &HF4F0,I
 
                              ; 8630 CLS:EXEC&HF4E0:SOUND13,9
                              ; ;############################################################################
                              ;       TFR     0x00B0,U    ;F4E0 01 B0 00    LD      BC,0x00B0
                              ;       TFR     0xF300,X    ;F4E3 21 00 F3    LD      HL,0xF300
                              ;       LDY     0xF4F0      ;F4E6 ED 5B F0    LD      DE,(0xF4F0)
                              ;       PSHS    D       *** Check U is an even #
                              ; !       LDD     ,X++
                              ;       STD     ,Y++
                              ;       LEAU    -2,U
                              ;       CMPU    #$0000
                              ;       BNE     <
                              ;       PULS    D           ;F4EA ED B0       LDIR
                              ;       RTS                 ;F4EC C9          RET
                              ; ;############################################################################
                              ;       ADDA    ,B          ;F4ED 80          ADD     A,B
                              ;       ADDA    ,B          ;F4EE 80          ADD     A,B
                              ;       ADDA    ,B          ;F4EF 80          ADD     A,B
                              ;       ASLA                ;F4F0 87          ADD     A,A
                              ;       LBNE    0x8080      ;F4F1 C2 80 80    JP      NZ,0x8080
 
 
                              ; 8635 FOR J=1 TO 30:NEXT
 
                              ; 8640 POKE &HF4F0,I-62
 
                              ; 8650 CLS:EXEC&HF4E0
                              ; ;############################################################################
                              ;       TFR     0x00B0,U    ;F4E0 01 B0 00    LD      BC,0x00B0
                              ;       TFR     0xF300,X    ;F4E3 21 00 F3    LD      HL,0xF300
                              ;       LDY     0xF4F0      ;F4E6 ED 5B F0    LD      DE,(0xF4F0)
                              ;       PSHS    D       *** Check U is an even #
                              ; !       LDD     ,X++
                              ;       STD     ,Y++
                              ;       LEAU    -2,U
                              ;       CMPU    #$0000
                              ;       BNE     <
                              ;       PULS    D           ;F4EA ED B0       LDIR
                              ;       RTS                 ;F4EC C9          RET
                              ; ;############################################################################
                              ;       ADDA    ,B          ;F4ED 80          ADD     A,B
                              ;       ADDA    ,B          ;F4EE 80          ADD     A,B
                              ;       ADDA    ,B          ;F4EF 80          ADD     A,B
                              ;       ASLA                ;F4F0 87          ADD     A,A
                              ;       LBNE    0x8080      ;F4F1 C2 80 80    JP      NZ,0x8080
 
 
                              ; 8655 FOR J=1 TO 30:NEXT
 
                              ; 8660 POKE &HF4F0,I-60
 
                              ; 8670 CLS:EXEC&HF4E0
                              ; ;############################################################################
                              ;       TFR     0x00B0,U    ;F4E0 01 B0 00    LD      BC,0x00B0
                              ;       TFR     0xF300,X    ;F4E3 21 00 F3    LD      HL,0xF300
                              ;       LDY     0xF4F0      ;F4E6 ED 5B F0    LD      DE,(0xF4F0)
                              ;       PSHS    D       *** Check U is an even #
                              ; !       LDD     ,X++
                              ;       STD     ,Y++
                              ;       LEAU    -2,U
                              ;       CMPU    #$0000
                              ;       BNE     <
                              ;       PULS    D           ;F4EA ED B0       LDIR
                              ;       RTS                 ;F4EC C9          RET
                              ; ;############################################################################
                              ;       ADDA    ,B          ;F4ED 80          ADD     A,B
                              ;       ADDA    ,B          ;F4EE 80          ADD     A,B
                              ;       ADDA    ,B          ;F4EF 80          ADD     A,B
                              ;       ASLA                ;F4F0 87          ADD     A,A
                              ;       LBNE    0x8080      ;F4F1 C2 80 80    JP      NZ,0x8080
 
                              ; 8675 FOR J=1 TO 30:NEXT
 
                              ; 8680 NEXT
 
                              ; 8690 POKE&HF4D0,154:CLS:SOUND13,9
 
                              ; 8695 EXEC&HF4C0:FORJ=1TO30:NEXT
                              ; ;############################################################################
                              ;       TFR     0x00B0,U    ;F4C0 01 B0 00    LD      BC,0x00B0
                              ;       TFR     0xF400,X    ;F4C3 21 00 F4    LD      HL,0xF400
                              ;       LDY     0xF4D0      ;F4C6 ED 5B D0    LD      DE,(0xF4D0)
                              ;       PSHS    D       *** Check U is an even #
                              ; !       LDD     ,X++
                              ;       STD     ,Y++
                              ;       LEAU    -2,U
                              ;       CMPU    #$0000
                              ;       BNE     <
                              ;       PULS    D           ;F4CA ED B0       LDIR
                              ;       RTS                 ;F4CC C9          RET
                              ; ;############################################################################
                              ;       ADDA    ,B          ;F4CD 80          ADD     A,B
                              ;       ADDA    ,B          ;F4CE 80          ADD     A,B
                              ;       ADDA    ,B          ;F4CF 80          ADD     A,B
                              ;       ADDA    ,B          ;F4D0 80          ADD     A,B
                              ;       LBNE    0x8080      ;F4D1 C2 80 80    JP      NZ,0x8080
 
                              ; 8700 POKE&HF4D1,&HC2
 
                              ; 8710 FOR I=146 TO 128 STEP-6
 
                              ; 8720 POKE &HF4D0,I-60
 
                              ; 8730 CLS:EXEC&HF4C0
                              ; ;############################################################################
                              ;       TFR     0x00B0,U    ;F4C0 01 B0 00    LD      BC,0x00B0
                              ;       TFR     0xF400,X    ;F4C3 21 00 F4    LD      HL,0xF400
                              ;       LDY     0xF4D0      ;F4C6 ED 5B D0    LD      DE,(0xF4D0)
                              ;       PSHS    D       *** Check U is an even #
                              ; !       LDD     ,X++
                              ;       STD     ,Y++
                              ;       LEAU    -2,U
                              ;       CMPU    #$0000
                              ;       BNE     <
                              ;       PULS    D           ;F4CA ED B0       LDIR
                              ;       RTS                 ;F4CC C9          RET
                              ; ;############################################################################
                              ;       ADDA    ,B          ;F4CD 80          ADD     A,B
                              ;       ADDA    ,B          ;F4CE 80          ADD     A,B
                              ;       ADDA    ,B          ;F4CF 80          ADD     A,B
                              ;       ADDA    ,B          ;F4D0 80          ADD     A,B
                              ;       LBNE    0x8080      ;F4D1 C2 80 80    JP      NZ,0x8080
 
                              ; 8735 FOR J=1 TO 30:NEXT
 
                              ; 8740 POKE &HF4D0,I-62
 
                              ; 8750 CLS:EXEC&HF4C0
                              ; ;############################################################################
                              ;       TFR     0x00B0,U    ;F4C0 01 B0 00    LD      BC,0x00B0
                              ;       TFR     0xF400,X    ;F4C3 21 00 F4    LD      HL,0xF400
                              ;       LDY     0xF4D0      ;F4C6 ED 5B D0    LD      DE,(0xF4D0)
                              ;       PSHS    D       *** Check U is an even #
                              ; !       LDD     ,X++
                              ;       STD     ,Y++
                              ;       LEAU    -2,U
                              ;       CMPU    #$0000
                              ;       BNE     <
                              ;       PULS    D           ;F4CA ED B0       LDIR
                              ;       RTS                 ;F4CC C9          RET
                              ; ;############################################################################
                              ;       ADDA    ,B          ;F4CD 80          ADD     A,B
                              ;       ADDA    ,B          ;F4CE 80          ADD     A,B
                              ;       ADDA    ,B          ;F4CF 80          ADD     A,B
                              ;       ADDA    ,B          ;F4D0 80          ADD     A,B
                              ;       LBNE    0x8080      ;F4D1 C2 80 80    JP      NZ,0x8080
 
                              ; 8755 FOR J=1 TO 30:NEXT
 
                              ; 8760 POKE &HF4D0,I:SOUND13,9
 
                              ; 8770 CLS:EXEC&HF4C0
                              ; ;############################################################################
                              ;       TFR     0x00B0,U    ;F4C0 01 B0 00    LD      BC,0x00B0
                              ;       TFR     0xF400,X    ;F4C3 21 00 F4    LD      HL,0xF400
                              ;       LDY     0xF4D0      ;F4C6 ED 5B D0    LD      DE,(0xF4D0)
                              ;       PSHS    D       *** Check U is an even #
                              ; !       LDD     ,X++
                              ;       STD     ,Y++
                              ;       LEAU    -2,U
                              ;       CMPU    #$0000
                              ;       BNE     <
                              ;       PULS    D           ;F4CA ED B0       LDIR
                              ;       RTS                 ;F4CC C9          RET
                              ; ;############################################################################
                              ;       ADDA    ,B          ;F4CD 80          ADD     A,B
                              ;       ADDA    ,B          ;F4CE 80          ADD     A,B
                              ;       ADDA    ,B          ;F4CF 80          ADD     A,B
                              ;       ADDA    ,B          ;F4D0 80          ADD     A,B
                              ;       LBNE    0x8080      ;F4D1 C2 80 80    JP      NZ,0x8080
 
                              ; 8775 FOR J=1 TO 30:NEXT
 
                              ; 8780 NEXT:NEXT
 
                              ; 8799 RETURN
 
;*********************************************************************
;* SUBROUTINE 8800 SOUND AND GO TO 8600
;* RoutineName - expanded name or phrase describing purpose
;*  Brief description
;*
;* I/O: what is expected and produced
;*
;* Calling Convention: how is this called?
;*
;* Returns:
;*
;* Stack Usage: (when needed) structure of stacked data
;*
;* Calls: Info about routines called
;*
;* Changes: registers destroyed.
;*********************************************************************
BAS8800:
                              ; 8800 SOUND7,&H37:SOUND8,16
 
                              ; 8810 SOUND 12,20
 
                              ; 8820 GOTO 8600
 
;*********************************************************************
;* JUMP 9000 PLAY AGAIN BANNER / PROMPT
;* RoutineName - expanded name or phrase describing purpose
;*  Brief description
;*
;* I/O: what is expected and produced
;*
;* Calling Convention: how is this called?
;*
;* Returns:
;*
;* Stack Usage: (when needed) structure of stacked data
;*
;* Calls: Info about routines called
;*
;* Changes: registers destroyed.
;*********************************************************************
                              ; 9000 FOR I=1 TO 1000:NEXT:COLOR3
 
                              ; 9010 A$=" ?  'y'  'n'     "
                              ; 0000e04d 32                               0x32 '2'
                              ; 0000e04e 23                               0x23 '#'
                              ; 0000e04f 41                               0x41 'A'
                              ; 0000e050 24                               0x24 '$'
                              ; 0000e051 d2                               0xd2
                              ; 0000e052 22                               0x22 '"'
                              ; 0000e053 f3                               0xf3
                              ; 0000e054 93                               0x93
                              ; 0000e055 92                               0x92
                              ; 0000e056 e1                               0xe1
                              ; 0000e057 e4                               0xe4
                              ; 0000e058 de                               0xde
                              ; 0000e059 20                               0x20 ' '
                              ; 0000e05a 91                               0x91
                              ; 0000e05b 9f                               0x9f
                              ; 0000e05c eb                               0xeb
                              ; 0000e05d de                               0xde
                              ; 0000e05e ef                               0xef
                              ; 0000e05f 9d                               0x9d
                              ; 0000e060 96                               0x96
                              ; 0000e061 3f                               0x3f '?'
                              ; 0000e062 20                               0x20 ' '
                              ; 0000e063 91                               0x91
                              ; 0000e064 9f                               0x9f
                              ; 0000e065 ec                               0xec
                              ; 0000e066 de                               0xde
                              ; 0000e067 e5                               0xe5
                              ; 0000e068 f7                               0xf7
                              ; 0000e069 20                               0x20 ' '
                              ; 0000e06a 27                               0x27 '''
                              ; 0000e06b 79                               0x79 'y'
                              ; 0000e06c 27                               0x27 '''
                              ; 0000e06d 20                               0x20 ' '
                              ; 0000e06e f4                               0xf4
                              ; 0000e06f f2                               0xf2
                              ; 0000e070 f9                               0xf9
                              ; 0000e071 e5                               0xe5
                              ; 0000e072 f7                               0xf7
                              ; 0000e073 20                               0x20 ' '
                              ; 0000e074 27                               0x27 '''
                              ; 0000e075 6e                               0x6e 'n'
                              ; 0000e076 27                               0x27 '''
                              ; 0000e077 20                               0x20 ' '
                              ; 0000e078 86                               0x86
                              ; 0000e079 20                               0x20 ' '
                              ; 0000e07a 95                               0x95
                              ; 0000e07b 9c                               0x9c
                              ; 0000e07c e3                               0xe3
                              ; 0000e07d 98                               0x98
                              ; 0000e07e e0                               0xe0
                              ; 0000e07f de                               0xde
                              ; 0000e080 9b                               0x9b
                              ; 0000e081 92                               0x92
                              ; 0000e082 20                               0x20 ' '
                              ; 0000e083 20                               0x20 ' '
                              ; 0000e084 20                               0x20 ' '
                              ; 0000e085 22                               0x22 '"'
                              ; 0000e086 00                               0x00
 
                              ; 9020 FOR I=1TO50
 
                              ; 9030 LOCATE3,8:PRINTMID$(A$+A$,I,18);:FOR J=1 TO 10:NEXT
 
                              ; 9040 K$=INKEY$:IF K$<>"" THEN GOTO 9070
 
                              ; 9050 NEXT
 
                              ; 9060 GOTO 9020
 
                              ; THIS RUN STATEMENT IS WHY LINE 10 GETS OVERWRITTEN
                              ; 9070 IF K$="y"ORK$="Y"ORK$="" THEN I=50:NEXT:EE=1:RUN
                              ; 0000e0e8 6e                               0x6e 'n'
                              ; 0000e0e9 23                               0x23 '#'
                              ; 0000e0ea 8a                               0x8a
                              ; 0000e0eb 20                               0x20 ' '
                              ; 0000e0ec 4b                               0x4b 'K'
                              ; 0000e0ed 24                               0x24 '$'
                              ; 0000e0ee d2                               0xd2
                              ; 0000e0ef 22                               0x22 '"'
                              ; 0000e0f0 79                               0x79 'y'
                              ; 0000e0f1 22                               0x22 '"'
                              ; 0000e0f2 d0                               0xd0
                              ; 0000e0f3 4b                               0x4b 'K'
                              ; 0000e0f4 24                               0x24 '$'
                              ; 0000e0f5 d2                               0xd2
                              ; 0000e0f6 22                               0x22 '"'
                              ; 0000e0f7 59                               0x59 'Y'
                              ; 0000e0f8 22                               0x22 '"'
                              ; 0000e0f9 d0                               0xd0
                              ; 0000e0fa 4b                               0x4b 'K'
                              ; 0000e0fb 24                               0x24 '$'
                              ; 0000e0fc d2                               0xd2
                              ; 0000e0fd 22                               0x22 '"'
                              ; 0000e0fe fd                               0xfd
                              ; 0000e0ff 22                               0x22 '"'
                              ; 0000e100 20                               0x20 ' '
                              ; 0000e101 c7                               0xc7
                              ; 0000e102 20                               0x20 ' '
                              ; 0000e103 49                               0x49 'I'
                              ; 0000e104 d2                               0xd2
                              ; 0000e105 35                               0x35 '5'
                              ; 0000e106 30                               0x30 '0'
                              ; 0000e107 3a                               0x3a ':'
                              ; 0000e108 82                               0x82
                              ; 0000e109 3a                               0x3a ':'
                              ; 0000e10a 45                               0x45 'E'
                              ; 0000e10b 45                               0x45 'E'
                              ; 0000e10c d2                               0xd2
                              ; 0000e10d 31                               0x31 '1'
                              ; 0000e10e 3a                               0x3a ':'
                              ; 0000e10f 89                               0x89
                              ; 0000e110 00                               0x00
 
                              ; 9080 IF K$="n"ORK$="N"ORK$="" THEN I=50:NEXT:GOTO 9200
                              ; 0000e113 78                               0x78 'x'
                              ; 0000e114 23                               0x23 '#'
                              ; 0000e115 8a                               0x8a
                              ; 0000e116 20                               0x20 ' '
                              ; 0000e117 4b                               0x4b 'K'
                              ; 0000e118 24                               0x24 '$'
                              ; 0000e119 d2                               0xd2
                              ; 0000e11a 22                               0x22 '"'
                              ; 0000e11b 6e                               0x6e 'n'
                              ; 0000e11c 22                               0x22 '"'
                              ; 0000e11d d0                               0xd0
                              ; 0000e11e 4b                               0x4b 'K'
                              ; 0000e11f 24                               0x24 '$'
                              ; 0000e120 d2                               0xd2
                              ; 0000e121 22                               0x22 '"'
                              ; 0000e122 4e                               0x4e 'N'
                              ; 0000e123 22                               0x22 '"'
                              ; 0000e124 d0                               0xd0
                              ; 0000e125 4b                               0x4b 'K'
                              ; 0000e126 24                               0x24 '$'
                              ; 0000e127 d2                               0xd2
                              ; 0000e128 22                               0x22 '"'
                              ; 0000e129 f0                               0xf0
                              ; 0000e12a 22                               0x22 '"'
                              ; 0000e12b 20                               0x20 ' '
                              ; 0000e12c c7                               0xc7
                              ; 0000e12d 20                               0x20 ' '
                              ; 0000e12e 49                               0x49 'I'
                              ; 0000e12f d2                               0xd2
                              ; 0000e130 35                               0x35 '5'
                              ; 0000e131 30                               0x30 '0'
                              ; 0000e132 3a                               0x3a ':'
                              ; 0000e133 82                               0x82
                              ; 0000e134 3a                               0x3a ':'
                              ; 0000e135 88                               0x88
                              ; 0000e136 20                               0x20 ' '
                              ; 0000e137 39                               0x39 '9'
                              ; 0000e138 32                               0x32 '2'
                              ; 0000e139 30                               0x30 '0'
                              ; 0000e13a 30                               0x30 '0'
                              ; 0000e13b 00                               0x00
 
                              ; 9090 NEXT
 
;*********************************************************************
;* JUMP 9020 GOODBYE SCREEN
;* RoutineName - expanded name or phrase describing purpose
;*  Brief description
;*
;* I/O: what is expected and produced
;*
;* Calling Convention: how is this called?
;*
;* Returns:
;*
;* Stack Usage: (when needed) structure of stacked data
;*
;* Calls: Info about routines called
;*
;* Changes: registers destroyed.
;*********************************************************************
                              ; GOODBYE SCREEN
                              ; 9200 CLS:LOCATE3,8:COLOR1:PRINT""
                              ; 0000e144 f0                               0xf0
                              ; 0000e145 23                               0x23 '#'
                              ; 0000e146 a0                               0xa0
                              ; 0000e147 3a                               0x3a ':'
                              ; 0000e148 a1                               0xa1
                              ; 0000e149 33                               0x33 '3'
                              ; 0000e14a 2c                               0x2c ','
                              ; 0000e14b 38                               0x38 '8'
                              ; 0000e14c 3a                               0x3a ':'
                              ; 0000e14d 9a                               0x9a
                              ; 0000e14e 31                               0x31 '1'
                              ; 0000e14f 3a                               0x3a ':'
                              ; 0000e150 95                               0x95
                              ; 0000e151 22                               0x22 '"'
                              ; 0000e152 91                               0x91
                              ; 0000e153 f8                               0xf8
                              ; 0000e154 96                               0x96
                              ; 0000e155 de                               0xde
                              ; 0000e156 e4                               0xe4
                              ; 0000e157 93                               0x93
                              ; 0000e158 9a                               0x9a
                              ; 0000e159 de                               0xde
                              ; 0000e15a 9b                               0x9b
                              ; 0000e15b de                               0xde
                              ; 0000e15c 92                               0x92
                              ; 0000e15d ef                               0xef
                              ; 0000e15e 9c                               0x9c
                              ; 0000e15f e0                               0xe0
                              ; 0000e160 22                               0x22 '"'
                              ; 0000e161 00                               0x00
 
;*********************************************************************
; ADDON - ASCII PUBLISHING LOGO FROM AX2 DEMO
;*  Brief description
;*
;* I/O: what is expected and produced
;*
;* Calling Convention: how is this called?
;*
;* Returns:
;*
;* Stack Usage: (when needed) structure of stacked data
;*
;* Calls: Info about routines called
;*
;* Changes: registers destroyed.
;*********************************************************************
                              ; Draw ASCII logo
                              ; Scroll Publishing onto screen
 
;*********************************************************************
;* ADDON - NOSTROMO THUMBNAIL FROM AX2 DEMO
;*  Brief description
;*
;* I/O: what is expected and produced
;*
;* Calling Convention: how is this called?
;*
;* Returns:
;*
;* Stack Usage: (when needed) structure of stacked data
;*
;* Calls: Info about routines called
;*
;* Changes: registers destroyed.
;*********************************************************************
                              ; Draw Title NOSTROMO
                              ; Draw Outer Green Box
                              ; Draw inner white lines
                              ; Draw left cargo
                              ; Draw right cargo bay
                              ; Draw alien and player
                              ; Write text
                              ; " NOSTROMO : An alien has invaded"
                              ; " your spacecraft!   Load  the   "
                              ; "shuttle with necessities and    "
                              ; "jettison. You have no choice.   "
 
;*********************************************************************
;* CREDITS
;*          Credit where credit is due
;* Entry Values
;*
;* Exit Values
;*          None
;* Control Register Modifications
;*          None
;* Subroutines Called
;*          None
;*********************************************************************
 
CREDITS:
            fcc   '6809: Terry Ritter, Joel Boney'
            fcc   'CoCo: Charles Tandy, John Roach, Mark Siegel'
            fcc   'Assembly: Lance Leventhal, Dennis Bathory-Kitsz, William Barden, Rodnay Zaks'
            fcc   'BASIC: John G. Kemeny, Thomas E. Kurtz'
            fcc   'Color BASIC: Bill Gates, Mark Chamberlin, the authors and illustrators of _Getting Started with Color BASIC_'
            fcc   'DAC Sound: Hal Chamberlin, Clell Dildy, Lester Hands, Simon "Madman" Jonassen'
            fcc   'Orchestra90/CC: Jon Bokelman, Jim "go4retro" Brain'
            fcc   'Rainbow Magazine: Lonnie Falk, CoCo Cat'
            fcc   'CoCoFEST!: the members and officers of the Glenside Color Computer Club, past present and future'
            fcc   'CoCoSDC: Darren Atkinson, Ed "Zippster" Snider, Richard "Boysontech" Lorbieski, Tim "timbo-tek" Lindner'
            fcc   'CoCoPSG: Ed "Zippster" Snider'
            fcc   'GMC: John "Tuxdriver" Linville, Mike "MiRo" Rowen'
            fcc   'MIDI Maestro: Jim "go4retro" Brain'
            fcc   'Joysticks: Phill Kraft, Hal Chamberlin'
            fcc   'Nostromo Design and Programming for CBM PET 2001: Akira Takiguchi'
            fcc   'Nostromo Design and Programming for NEC PC-6001: Masakuni "Mitsu" Mitsuhashi aka Hiromi Ohba'
            fcc   'Nostromo cover artwork: Masashi Iwasaki'
            fcc   'Nostromo publishing and distribtion: ASCII Publishing'
            fcc   'Youtube Community: Panteryasha, HighRetroGameLord'
            fcc   'MC-10 Port and Support: Jim Gerrie, James Diffendaffer'
            fcc   'Z80 Transcodiing and MIDI Converter: Glen Hewlett'
            fcc   'lwasm: William "Lostwizard" Astle'
            fcc   'cmoc: Pierre Sarrazin'
            fcc   'Mocha: Brad Grier'
            fcc   'asm6809 and Xroar: Ciaran "Sixxie" Anscomb'
            fcc   'MAME: Tim "timbo-tek" Lindner and the MAME Devs'
            fcc   'OVCC: Walter "Wally" Zambotti, Jim Rye'
            fcc   'Toolshed: Tormod Volden, Tim "timbo-tek" Lindner, James Jones, Mark Marlette, Boisy "OS9er" Pitre, Roy Justus'
            fcc   'Color Max Deluxe: Greg Miller and Erik Gavriluk'
            fcc   'Drivewire: Mark "Cloud9" Marlette, Boisy "OS9er" Pitre, Michael "Mikey" Furman'
            fcc   'Random and IRQs: Steve "6809ER" Bjork, Rick Adams'
            fcc   'Pitfall LFSR: David Crane, Thomas "JTZ" Jentzsch, Sam Trenholme'
            fcc   'CoCoVGA: Brendan Donahe'
            fcc   'Digital Joystick Adapters: Robert Lee Hawkins, John Linville, Neil Blanchard, Ed "Zippster" Snider'
            fcc   'The Community: MrDave6809, Seat Safety Switch, Tom C from Joisy, OGStevieStrow, Sir David Ladd, Lord Curtis Boyle,'
            fcc   'Mark Overholser, Sloopy Malibu, Nick Marotta Nick Marotta Nick Marotta, Jason "CoCoMan" Reighard,'
            fcc   'Ken "You Know Who You Are" Reighard, Paul Thayer, Paul Shoemaker, Paul Fiscarelli, Grant Leighty,'
            fcc   'Allen "os9Al" Huffman, Al Hartman, Ken "CRT" Waters, Sheldon Macdonald, George Jansen'
            fcc   'And thank YOU for playing and keeping the CoCo going and growing in the 21st century!'
APOLOGIES:
            fcc   'Apologies to anyone I accidentally missed along the way!'
DEDICATION:
            fcc   'For Carrie, Melanie, Robbie, Gizmo, Biscuit, and Butter'
INSPIRATION:
            fcc   'Shout outs to Blue Planet Corporation, The Enigma TNG, Tentura, Carbon Based Lifeforms, and Talk Talk for the music to stay sane doing this!'
 
;*********************************************************************
;* HLINE
;*          Draw Horizontal line of given character
;* Entry Values
;*          TX = starting column
;*          TY = row
;*          INDEXIX = length of line
;*          B = character to draw
;* Exit Values
;*          None
;* Control Register Modifications
;*          None
;* Subroutines Called
;*          DRAWCH
;*********************************************************************
 
HLINE:
            jsr   DRAWCH      ; draw the character
            inc   TX          ; skip one more to the right for next horizontal char
            lda   TX          ; get it back in FIXME WASTED CYCLES
            cmpa  INDEXIX     ; are we at the right hand border of our line?
            bne   HLINE       ; no, go back and keep typing
            rts               ; yep, done, run, go, woo!
 
;*********************************************************************
;* VLINE
;*          Draw vertical line of a given character
;* Entry Values
;*          TX = column
;*          TY = starting row
;*          INDEXIY = length of line
;*          B = character to draw
;* Exit Values
;*          None
;* Control Register Modifications
;*          None
;* Subroutines Called
;*          DRAWCH
;*********************************************************************
 
VLINE:
            jsr   DRAWCH      ; draw the character
            inc   TY          ; drop down one screen / tile line
            lda   TY          ; and get that current FIXME WASTED CYCLES
            cmpa  INDEXIY     ; did I reach the bottom of the vertical line to draw?
            bne   VLINE       ; nope, keep drawing above
            rts               ; yep, run like hell
 
;*********************************************************************
;* PRINTAT
;*          Put a string of a known length at X,Y
;* Entry Values
;*          TX = column
;*          TY = starting row
;*          STRPTR = pointer to start of string
;*          STRLEN = length of string
;* Exit Values
;*          None
;* Control Register Modifications
;*          None
;* Subroutines Called
;*          DRAWCH
;*********************************************************************
 
PRINTAT:
            ldx   STRPTR      ; put address of string into X for fun
            clra              ; start counting at zero for string length
PRINTLOOP:  ldb   ,X+         ; get the next string char in B, and step X by 1
            jsr   DRAWCH      ; slam that puppy onto the framebuffer
            inc   TX          ; move the Tile X to the right 1 space
            inca              ; move one more character into string
            cmpa  STRLEN      ; did we hit the end of the string length to draw?
            bne   PRINTLOOP   ; go back and print some more
            rts               ; return to sender
 
;*********************************************************************
;* INCLUDES IN MOSTLY MEMORY MAP ORDER
;*********************************************************************
            INCLUDE "code-config-v00.asm"         ; Detect/Select Config
            INCLUDE "code-rnd-v00.asm"            ; Pseudo Random Numbers for Cargo Placement
 
            INCLUDE "code-pia0-v00.asm"           ; $FF00 MC6821 Peripheral Interface Adapter 0
            INCLUDE "code-keyscn-v01.asm"         ; --    Key Scan
            INCLUDE "code-joy-v00.asm"            ; --    Joystick
            INCLUDE "code-pia1-v00.asm"           ; $FF20 Peripheral Interface Adapter 1
            INCLUDE "code-onebit-v00.asm"         ; --    1-bit DAC
            INCLUDE "code-timer-v00.asm"          ; --    VSYNC countdown clock
 
                                                  ; Audio
            INCLUDE "code-gmc-v00.asm"            ; $FF40-FF41 Games Master Cart
            INCLUDE "code-dcsg-v00.asm"           ; --         TI SN76489AN Dynamic Complex Sound Generator (DCSG)
            INCLUDE "code-mmmpi-v00.asm"          ; $FF50-FF54 MEGAmini Multi-Pak Interface with OPL, 16550s
            INCLUDE "code-opl3-v00.asm"           ; --         Yamaha YMF-262 Operator-L 3 (OPL3) Synthesizer
            INCLUDE "code-cocopsg-v00.asm"        ; $FF5A-FF5F CoCoPSG with RAM, ROM, SSG, Joysticks
            INCLUDE "code-ssg-v00.asm"            ; --         Yamaha YM2149 Software-controlled Sound Generator (SSG)
            INCLUDE "code-symphony12-v00.asm"     ; $FF60-FF63
            INCLUDE "code-midi-v00.asm"           ; $FF6E-FF6F
            INCLUDE "code-orch90-v00.asm"         ; $FF7A-FF7B
            INCLUDE "code-ssc-v00.asm"            ; $FF7D-FF7E Speech/Sound Cartridge (SSC)
            INCLUDE "code-psg-v00.asm"            ; --
 
            INCLUDE "code-mpi-v00.asm"            ; $FF7F Tandy / Mini / MEGAmini Multi-Pak Interface Slot Select
 
                                                  ; Video
            INCLUDE "code-vdgsg4-v00.asm"         ; CoCo1/2/Dragon SG4 Semigraphics
            INCLUDE "code-vdgt1-v00.asm"          ; CoCo 2B with MC6847T1 Lowercase VDG
            INCLUDE "code-vdgvga-v00.asm"         ; CoCo1/2 with CoCoVGA
            INCLUDE "code-vdgrg6-v01.asm"         ; CoCo1/2/Dragon RG6 Resolution Graphics (PMODE4)
            INCLUDE "code-acvc-v00.asm"           ; $FF90-FFBF ACVC
 
            INCLUDE "code-sam-v00.asm"            ; $FFC0-FFDF SAM
 
                                                  ; Data
            align $200                            ; Font on 512 byte bound for CoCoVGA
            INCLUDE "data-cgrom60-v04.asm"        ; NEC Font reorg to CoCoASCII
 
;*********************************************************************
;* End of NOSTROMO.ASM
;*********************************************************************
            end   CONFIG

DISCUSSION

Please ping me on the Discord #programming channel if you have questions or comments about this.

RTS

Return to Nostromo

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies