A Bit of Vectrex History
From RoadsideThoughts ...
Home >> A Bit of Vectrex History >> Minestorm >> MINESTRM.ASM - Rev. CIndex...

MINESTRM.ASM - Rev. C



;  *********************************************************
;  *********************************************************
;  ***                                                   ***
;  ***          G C E     === V E C T R E X ===          ***
;  ***                                                   ***
;  ***                     M I N E   S T O R M           ***
;  ***                                                   ***
;  *********************************************************
;  *********************************************************
;
;
;
;  C O M M E N T S
;  ---------------
;
;       MUST BE ASSEMBLED USING AVOCET 'ASM09'
;
;
;
;=============================================================================
;
;  REV     DATE     PROG     COMMENT(S)
;  ---     ----     ----     ----------
;
;   C    12/23/82   JJH      CORRECTED GAME LEVEL SEQUENCING PROBLEM
;                            LIMITED NUMBER OF MARKERS THAT CAN BE DISPLAYED
;                            MUST KILL MINE-LAYER DURING RESEEDING
;                            MODIFIED MINE FIELD MESSAGE FOR THREE DIGITS
;                                (REV. B & C CAUSED BY RUM CHANGES)
;
;   B    07/29/82   JJH      CORRECTED HIGH-SCORE PROBLEM
;
;   A    07/15/82   JJH      MODIFIED TO REFLECT 'RUM' REV. A CHANGES
;
;   -    05/16/82   RELEASE FROM WESTERN TECHNOLOGIES
;
;=============================================================================
;
;
;
;  'EXECUTIVE' EQUATES
;  ===================
;
;
REG0     EQU     $C800            ;  SOUND GENERATOR (PSG) MIRROR IMAGE
REG2     EQU     $C802            ;  .
;
TRIGGR   EQU     $C80F            ;  COLLECTIVE SWITCH SETTINGS
KEY0     EQU     $C812            ;  CONTROLLER #1 - SWITCH #0 (LEFT)
KEY1     EQU     $C813            ;  .
KEY2     EQU     $C814            ;  .
KEY3     EQU     $C815            ;  .             - SWITCH #3 (RIGHT)
;
POT0     EQU     $C81B            ;  JOYSTICK #1 - 'X' AXIS
POT1     EQU     $C81C            ;  .           - 'Y' AXIS
;
EPOT0    EQU     $C81F            ;  ENABLE POT READ
EPOT2    EQU     $C821            ;  .
;
LIST     EQU     $C823            ;  NUMBER OF VECTORS - 1
ZSKIP    EQU     $C824            ;  SKIP INTEGRATOR ZEROING AND ACTIVE GROUND
FRAME    EQU     $C826            ;  FRAME COUNTER
;
SIZRAS   EQU     $C82A            ;  RASTER MESSAGE SIZE
LEG      EQU     $C83B            ;  EXECUTIVE WORKING STORAGE
TSTAT    EQU     $C856            ;  TUNE STATUS
;
PLAYRS   EQU     $C879            ;  NUMBER OF PLAYERS IN GAME
OPTION   EQU     $C87A            ;  GAME OPTION NUMBER
;
HISCOR   EQU     $CBEB            ;  HIGH-SCORE
;
;
T1LOLC   EQU     $D004            ;  TIMER #1 (LSB)
;
;
PWRUP    EQU     $F000            ;  POWER-UP HANDLER
COLD0    EQU     $F01C            ;  VECTREX RESTART ENTRY FOR MINE-STORM
INTALL   EQU     $F18B            ;  COMPLETE INTIALIZATION
FRWAIT   EQU     $F192            ;  WAIT FOR FRAME BOUNDARY
;
DPIO     EQU     $F1AA            ;  SET DIRECT REGISTER
DPRAM    EQU     $F1AF            ;  .
;
DBNCE    EQU     $F1B4            ;  READ CONTROLLER BUTTONS
INPUT    EQU     $F1BA            ;  .
JOYBIT   EQU     $F1F8            ;  READ JOYSTICKS
;
WRREG    EQU     $F256            ;  WRITE TO PSG
INTPSG   EQU     $F272            ;  INITIALIZE SOUND GENERATOR
PSGLST   EQU     $F27D            ;  SEND SOUND STRING TO PSG
REQOUT   EQU     $F289            ;  SEND 'REQX' TO PSG AND MIRROR
;
INT3Q    EQU     $F2A5            ;  SET INTENSITY
INTMAX   EQU     $F2A9            ;  .
INTENS   EQU     $F2AB            ;  .
;
DOTAB    EQU     $F2C3            ;  DRAW ONE DOT FROM THE CONTENTS OF 'A' & 'B'
DIFDOT   EQU     $F2D5            ;  DRAW DOTS ACCORDING TO 'DIFFY' FORMAT
;
DEFLOK   EQU     $F2E6            ;  OVER-COME SCAN COLLAPSE CIRCUITRY
POSWID   EQU     $F2F2            ;  POSITION RELATIVE VECTOR
POSITD   EQU     $F2FC            ;  .
POSITN   EQU     $F312            ;  .
ZERGND   EQU     $F354            ;  ZERO INTEGRATORS AND SET ACTIVE GROUND
RSTSIZ   EQU     $F373            ;  DISPLAY RASTER MESSAGE
;
TPACK    EQU     $F40E            ;  DRAW FROM 'PACKET' STYLE LIST
PACKET   EQU     $F410            ;  .
RASTER   EQU     $F495            ;  DISPLAY RASTER STRING
;
RANDOM   EQU     $F517            ;  CALCULATE RANDOM NUMBER
BCLR     EQU     $F53F            ;  CLEAR MEMORY BLOCK
CMPASS   EQU     $F593            ;  DETERMINE ANGLE FROM DELTA 'Y:X'
LNROT    EQU     $F601            ;  SINGLE LINE ROTATE
PROT     EQU     $F61F            ;  'PACKET' STYLE ROTATE
;
REPLAY   EQU     $F687            ;  SET 'REQX' FOR GIVEN TUNE
SPLAY    EQU     $F68D            ;  .
;
SELOPT   EQU     $F7A9            ;  FETCH GAME OPTIONS
;
SCLR     EQU     $F84F            ;  CLEAR INDICATED SCORE
SCRADD   EQU     $F87C            ;  ADD CONTENTS OF 'D' TO INDICATED SCORE
HISCR    EQU     $F8D8            ;  CALCULATE HIGH SCORE AND SAVE FOR LOGO
BXTEST   EQU     $F8FF            ;  SYMMETRIC COLLISION TEST
;
VIBENL   EQU     $FEB6
;
;
;
;
;  ***************************************
;  ***************************************
;  ***                                 ***
;  ***          E Q U A T E S          ***
;  ***                                 ***
;  ***************************************
;  ***************************************
;
;
RATE     EQU     50               ;  FRAME RATE (HERTZ)
;
;
THYPER   EQU     $20              ;  HYPER-SPACE TIME
;
BULLETS  EQU     4                ;  NUMBER OF BULLETS
MINES    EQU     28               ;  NUMBER OF MINES
;
;
PSCOR1   EQU     $7FA0            ;  POSITION OF PLAYER #1 SCORE
PSCOR2   EQU     $7F10            ;  POSITION OF PLAYER #2 SCORE
;
;
P.SHPSZ  EQU     $0C              ;  INITIAL STAR-SWEEPER SIZE
;
P.LYRSZ  EQU     $08              ;  INITIAL MINE-LAYER SIZE
P.LYRSP  EQU     $10              ;  MINE-LAYER SPEED OFFSET
P.LYRBX  EQU     $0616            ;  MINE-LAYER COLLISION BOX
;
;
MIN.SIZ1 EQU     $10              ;  MINE #1 (LARGE) SIZE
MIN.SIZ2 EQU     $07              ;  MINE #2
MIN.SIZ3 EQU     $02              ;  MINE #3 (SMALLEST)
;
MIN.SPD1 EQU     $10              ;  MINE #1 (LARGE) SPEED
MIN.SPD2 EQU     $18              ;  MINE #2
MIN.SPD3 EQU     $20              ;  MINE #3 (SMALLEST)
;
MIN.BOX1 EQU     $0D0D            ;  MINE #1 (LARGE) COLLISION BOX
MIN.BOX2 EQU     $0808            ;  MINE #2
MIN.BOX3 EQU     $0404            ;  MINE #3 (SMALLEST)
;
M.DUMB   EQU     $00              ;  'DUMB' MINE FLAG
M.MAG    EQU     $01              ;  'MAGNETIC' MINE FLAG
M.FIRE   EQU     $02              ;  'FIREBALL' MINE FLAG
M.MFIRE  EQU     $03              ;  'MAGNETIC FIREBALL' MINE FLAG
FIRBALL  EQU     $04              ;  'RELEASED' FIREBALL
;
;
S.ABRT   EQU     KEY3             ;  TITLE PAGE ABORT
S.THRST  EQU     KEY2             ;  THRUST SWITCH
S.FIRE   EQU     KEY3             ;  FIRE SWITCH
S.HYPER  EQU     KEY1             ;  HYPERSPACE SWITCH
;
;
;
;  *******************************************************
;  *******************************************************
;  ***                                                 ***
;  ***          W O R K I N G   S T O R A G E          ***
;  ***                                                 ***
;  *******************************************************
;  *******************************************************
;
;
         ORG     $C880
;        ===     =====
;
SBTN     DB      0                ;  CONTROLLER DEBOUNCE FLAGS
SJOY     DW      0                ;  JOYSTICK 'BANG' FLAGS
;
;
ETMP1    DB      0                ;  TEMPORARY WORKING STORAGE (FIRST LEVEL)
ETMP2    DB      0                ;  .
ETMP3    DB      0                ;  .
ETMP4    DB      0                ;  .
ETMP5    DB      0                ;  .
ETMP6    DB      0                ;  .
ETMP7    DB      0                ;  .
ETMP8    DB      0                ;  .
ETMP9    DB      0                ;  .
ETMP10   DB      0                ;  .
;
         DW      0                ;  .    WORKING STORAGE SLOP
;
TEMP1    DB      0                ;  TEMPORARY WORKING STORAGE (SECOND LEVEL)
TEMP2    DB      0                ;  .
TEMP3    DB      0                ;  .
TEMP4    DB      0                ;  .
TEMP5    DB      0                ;  .
TEMP6    DB      0                ;  .
TEMP7    DB      0                ;  .
TEMP8    DB      0                ;  .
TEMP9    DB      0                ;  .
TEMP10   DB      0                ;  .
;
         DW      0                ;  .    WORKING STORAGE SLOP
;
;
ACTPLY   DB      0                ;  ACTIVE PLAYER FLAG ($00 / $02)
;
;
TMR1     DB      0                ;  TIMER #1 - DOWN COUNTER
         DW      0                ;  .        - TIME-OUT ROUTINE POINTER
;
TMR2     DB      0                ;  TIMER #2 - DOWN COUNTER
         DW      0                ;  .        - TIME-OUT ROUTINE POINTER
;
TMR3     DB      0                ;  TIMER #3 - DOWN COUNTER
         DW      0                ;  .        - TIME-OUT ROUTINE POINTER
;
TMR4     DB      0                ;  TIMER #4 - DOWN COUNTER
         DW      0                ;  .        - TIME-OUT ROUTINE POINTER
;
;
SCOR1    DS      7                ;  PLAYER #1 SCORE
SCOR2    DS      7                ;  PLAYER #2 SCORE
;
;
BLTSND   DB      0                ;  BULLET SOUND FLAG
;
;
STAR1    DB      0                ;  TEMPORARY WORKING STORAGE (THIRD LEVEL)
STAR2    DB      0                ;  .
STAR3    DB      0                ;  .
STAR4    DB      0                ;  .
STAR5    DB      0                ;  .
STAR6    DB      0                ;  .
;
ABORT    DB      0                ;  GAME ABORT FLAG
LOCK     DB      0                ;  LOCK-UP ON GAME SEQUENCE
;
RSMINES  DB      0                ;  MINE-LAYER RE-SEED MINE COUNT
RESEED   DB      0                ;  MINE-LAYER RESEED FLAG
FRCTIME  DB      0                ;  FORCED GROWTH COUNTER
;
MINTABLE DW      0                ;  MINE FIELD POINTER FOR LAYER SEQUENCE
TBLPTR1  DW      0                ;  MINE FIELD POINTER FOR PLAYER #1
TBLPTR2  DW      0                ;  MINE FIELD POINTER FOR PLAYER #2
;
WSHIPY   DW      0                ;  WORKING 'Y' POSITION
WSHIPX   DW      0                ;  WORKING 'X' POSITION
DSHIPY1  DW      0                ;  'Y' DISPLACEMENT FOR MOMENTUM AXIS #1
DSHIPX1  DW      0                ;  'X' DISPLACEMENT FOR MOMENTUM AXIS #1
DSHIPY2  DW      0                ;  'Y' DISPLACEMENT FOR MOMENTUM AXIS #2
DSHIPX2  DW      0                ;  'X' DISPLACEMENT FOR MOMENTUM AXIS #2
SHIPROT  DB      0                ;  CURRENT SHIP ROTATION
SHIPSPD1 DB      0                ;  SPEED ALONG MOMENTUM AXIS #1
SHIPDIR1 DB      0                ;  DIRECTION OF MOMENTUM AXIS #1
SHIPSPD2 DB      0                ;  SPEED ALONG MOMENTUM AXIS #2
SHIPDIR2 DB      0                ;  DIRECTION OF MOMENTUM AXIS #2
SHIPCNT  DB      0                ;  CURRENT SHIP COUNT FOR ACTIVE PLAYER
SHIPCNT0 DB      0                ;  CURRENT SHIP COUNT FOR PLAYER #1
SHIPCNT1 DB      0                ;  CURRENT SHIP COUNT FOR PLAYER #2
;
LAYRYX   DW      0                ;  CURRENT MINE-LAYER POSITION (Y:X)
WLAYRY   DW      0                ;  .    WORKING 'Y' POSITION
WLAYRX   DW      0                ;  .    WORKING 'X' POSITION
DLAYRY   DW      0                ;  .    'Y' DISPLACEMENT
DLAYRX   DW      0                ;  .    'X' DISPLACEMENT
LAYRDIR  DB      0                ;  CURRENT MINE-LAYER DIRECTION
LAYRSPD  DB      0                ;  CURRENT MINE-LAYER SPEED
LAYRPTR  DW      0                ;  MINE-LAYER RE-SEEDING SEQUENCE POINTER
;
CBULLET  DB      0                ;  ACTIVE BULLET COUNTER
CMINES   DB      0                ;  ACTIVE MINE COUNTER
CEXPLS   DB      0                ;  ACTIVE EXPLOSION COUNTER
;
MINMAX   DB      0                ;  MAXIMUM MINES COUNT
;
HYPFLAG  DB      0                ;  HYPER-SPACE FLAG
HYPCNT   DB      0                ;  HYPER-SPACE SEQUENCE COUNTER
;
TIMEOUT  DW      0                ;  LONG TIME-OUT DELAY
;
THRSND   DB      0                ;  THRUSTER SOUND FLAG
EXPLSND  DB      0                ;  OBJECT EXPLOSION SOUND FLAG
POPSND   DB      0                ;  MINE 'POP' SOUND FLAG
FIRSND   DB      0                ;  'RELEASED' FIRE-BALL SOUND FLAG
HYPSND   DB      0                ;  HYPER-SPACE SOUND FLAG
;
SEXPCNT  DB      0                ;  SHIP EXPLOSION COUNTERS
SEXP1    DB      0                ;  .
;
MNLVL1   DS      7                ;  ACTIVE MINE-FIELD LEVEL FOR PLAYER #1
MNLVL2   DS      7                ;  ACTIVE MINE-FIELD LEVEL FOR PLAYER #2;
;
;        BULLET TABLE
;        ------------
;
DBLTY    DW      0                ;  'Y' DISPLACEMENT FOR ALL NEW BULLETS
DBLTX    DW      0                ;  'X' DISPLACMENET FOR ALL NEW BULLETS
;
;
BLT.FLG  EQU     0                ;  BULLET FLAG
BLT.YD   EQU     BLT.FLG + 1      ;  WORKING 'Y' DISPLACEMENT
BLT.XD   EQU     BLT.YD + 2       ;  WORKING 'X' DISPLACEMENT
BLT.WY   EQU     BLT.XD + 2       ;  WORKING 'Y' POSITION
BLT.WX   EQU     BLT.WY + 2       ;  WORKING 'X' POSITION
BLT.DC   EQU     BLT.WX + 2       ;  BULLET DOWN-COUNTER
;
BLT.LEN  EQU     BLT.DC + 1       ;  BULLET TABLE LENGTH
;
BLT.TBL  DS      BLT.LEN * BULLETS
;
;
;        MINE TABLE
;        ----------
;
MIN.FLG  EQU     0                ;  MINE FLAG
MIN.PAK  EQU     MIN.FLG + 1      ;  PACKET TYPE (NUMBER)
MIN.SIZ  EQU     MIN.PAK + 1      ;  SIZE (ZOOM VALUE)
MIN.BSZ  EQU     MIN.SIZ + 1      ;  BASE MINE SIZE (0 - 3)
MIN.YW   EQU     MIN.BSZ + 1      ;  WORKING 'Y' POSITION
MIN.XW   EQU     MIN.YW + 2       ;  WORKING 'X' POSITION
MIN.YD   EQU     MIN.XW + 2       ;  WORKING 'Y' DISPLACEMENT
MIN.XD   EQU     MIN.YD + 2       ;  WORKING 'X' DISPLACEMENT
MIN.BOX  EQU     MIN.XD + 2       ;  COLLISION BOX PARAMETERS
MIN.SCR  EQU     MIN.BOX + 2      ;  SCORE VALUE
MIN.T1   EQU     MIN.SCR + 2      ;  MINE TEMPORARY WORKING STORAGE
MIN.T2   EQU     MIN.T1 + 1       ;  .
;
MIN.LEN  EQU     MIN.T2 + 1       ;  MINE TABLE LENGTH
;
MIN.TBL  DS      MIN.LEN * MINES
;
;
;        EXPLOSION TABLE
;        ---------------
;
EXP.FLG  EQU     0                ;  EXPLOSION FLAG
EXP.SIZ  EQU     EXP.FLG + 1      ;  SIZE (ZOOM VALUE)
EXP.YX   EQU     EXP.SIZ + 1      ;  ABSOLUTE Y:X POSITIONS
EXP.CNT  EQU     EXP.YX + 2       ;  FRAME COUNTER
;
EXP.LEN  EQU     EXP.CNT + 1      ;  EXPLOSION TABLE LENGTH
EXPLSN   EQU     14               ;  NUMBER OF EXPLOSION ENTRIES
;
EXP.TBL  DS      EXP.LEN * EXPLSN
;
;
;        STAR FIELD TABLES
;        -----------------
;
FSTAR    DS      16
ZSTAR    DS      8
;
;
;
;==========================================================================JJH
;PACKET1 DS      30               ;  CODE DELETED - REV. C CHANGES   ======JJH
;PACKET2 DS      30               ;  .                               ======JJH
;==========================================================================JJH
;
;==========================================================================JJH
PACKET1  DS      27               ;  CODE ADDED - REV. C CHANGES     ======JJH
PACKET2  DS      15               ;  .    PACKET WORKING AREA        ======JJH
;==========================================================================JJH
;
;==========================================================================JJH
MINTBL1  DB      0                ;  MINE TABLE FOR PLAYER #1        ======JJH
         DB      0                ;  .    CODE ADDED -               ======JJH
         DB      0                ;  .        REV. C CHANGES         ======JJH
         DB      0                ;  .                               ======JJH
;                                                                    ======JJH
;                                                                    ======JJH
MINTBL2  DB      0                ;  MINE TABLE FOR PLAYER #2        ======JJH
         DB      0                ;  .                               ======JJH
         DB      0                ;  .                               ======JJH
         DB      0                ;  .                               ======JJH
;==========================================================================JJH
;
ENDRAM   DB      0                ;  END-OF-RAM FLAG
;
;
;
;  ***************************************************
;  ***************************************************
;  ***                                             ***
;  ***          R E S I D E N T   G A M E          ***
;  ***                                             ***
;  ***************************************************
;  ***************************************************
;
;
         ORG     $E000
;        ===     =====
;
         DW      LAYTUNE
;
         DW      $F850
         DW      $30E8
         DB      'MINE',$80
;
         DW      $F850
         DW      $00DE
         DB      'STORM',$80
         DB      0
;
;
;
;
;  POWER-UP INITIALIZATION
;  =======================
;
         SETDP   $D0
;        =====   ===
;
ENTRY    LDX     #ETMP1           ;  CLEAR MEMORY
CLRALL   CLR     X+               ;  .
         CMPX    #ENDRAM          ;  .
         BNE     CLRALL           ;  .
;
         JSR     I.STARS          ;  INITIALIZE STAR FIELDS
;
;==========================================================================JJH
;        LDX     #HISCOR          ;  CODE DELETED - REV. B CHANGES   ======JJH
;        JSR     SCLR             ;  .                               ======JJH
;==========================================================================JJH
;
;==========================================================================JJH
;        NOP                      ;  CODE ADDED - REV. B CHANGES     ======JJH
;        NOP                      ;  CODE DELETED - REV. C CHANGES   ======JJH
;        NOP                      ;  .                               ======JJH
;        NOP                      ;  .                               ======JJH
;        NOP                      ;  .                               ======JJH
;        NOP                      ;  .                               ======JJH
;==========================================================================JJH
;
         INC     ZSKIP            ;  SET POST-PACKET ZEROING FLAG
;
         LDA     #$BB             ;  SET-UP CONTROLLER FLAGS
         STA     SBTN             ;  .
         LDX     #$0101           ;  .
         STX     SJOY             ;  .
;
;
;  INITIALIZE MINE-SWEEPER
;  =======================
;
;
NEWGAME  LDX     #ETMP1           ;  CLEAR MEMORY
CLRMEM   CLR     X+               ;  .
         CMPX    #FSTAR - 1       ;  .
         BNE     CLRMEM           ;  .
         BRA     GAME1            ;  .
;
GAME1    JSR     DPRAM            ;  SET "DP" REGISTER FOR RAM
         SETDP   $C8              ;  .
;
         LDD     #$0200           ;  SELECT OPTIONS
         JSR     SELOPT           ;  .
         DEC     <PLAYRS          ;  .
;
         CLR     <TSTAT           ;  CLEAR TUNE FLAG
         CLR     <ACTPLY          ;  CLEAR ACTIVE PLAYER FLAG
;
         LDX     #SCOR1           ;  CLEAR PLAYERS SCORE
         JSR     SCLR             ;  .
         LDX     #SCOR2           ;  .
         JSR     SCLR             ;  .
;
         LDX     #MNLVL1          ;  CLEAR ACTIVE MINE-FIELD COUNTER
         JSR     SCLR             ;  .    FOR PLAYER #1
         LDD     #$0001           ;  .    .
         JSR     SCRADD           ;  .    .
;
         LDX     #MNLVL2          ;  .    FOR PLAYER #2
         JSR     SCLR             ;  .    .
         LDD     #$0001           ;  .    .
         JSR     SCRADD           ;  .    .
;
;==========================================================================JJH
;        LDX     #MINTBL1         ;  CODE DELETED - REV. C CHANGES   ======JJH
;        STX     <TBLPTR1         ;  .                               ======JJH
;        STX     <TBLPTR2         ;  .                               ======JJH
;==========================================================================JJH
;
;==========================================================================JJH
         LDX     #MINTBL1         ;  CODE ADDED - REV. C CHANGES     ======JJH
         STX     <TBLPTR1         ;  .    SET-UP NEW MINE TABLES     ======JJH
         LDX     #MINTBL2         ;  .    .                          ======JJH
         STX     <TBLPTR2         ;  .    .                          ======JJH
         LDB     #$08             ;  .    CLEAR NEW MINE TABLES      ======JJH
         LDX     #MINTBL1         ;  .    .                          ======JJH
         JSR     BCLR             ;  .    .                          ======JJH
;==========================================================================JJH
;
         LDA     #5               ;  SET SHIP COUNT
         STA     <SHIPCNT         ;  .
         STA     <SHIPCNT0        ;  .
         STA     <SHIPCNT1        ;  .
;
         BRA     LVLN1            ;  LEVEL #1 ENTRY POINT IS DIFFERENT
;
;
;  GAME LEVEL SEQUENCER
;  ====================
;
;
LEVELN   JSR     FALL             ;  FALL-THRU TO NEXT GAME LEVEL
;
         LDY     #TBLPTR1         ;  BUMP GAME DATA POINTER FOR ACTIVE PLAYER
         LDA     <ACTPLY          ;  .
         LDX     A,Y              ;  .
;
;==========================================================================JJH
;        LEAX    4,X              ;  CODE DELETED - REV. C CHANGES   ======JJH
;        STX     A,Y              ;  .                               ======JJH
;==========================================================================JJH
;
;==========================================================================JJH
         JSR     REVC.0           ;  CODE ADDED - REV. C CHANGES     ======JJH
;==========================================================================JJH
;
         LDX     #PMNLVL          ;  BUMP ACTIVE MINE-FIELD COUNTER
         LDA     <ACTPLY          ;  .    WHICH PLAYER IS ACTIVE ?
         LDX     A,X              ;  .    .
;
         LDA     5,X              ;  .    BONUS SHIP ?
         ANDA    #$03             ;  .    .
         BNE     LVLN01           ;  .    .
         INC     SHIPCNT          ;  .    .    BUMP SHIP COUNT FOR ACTIVE PLAYER
;
LVLN01   LDD     #$0001           ;  .    BUMP GAME LEVEL
         JSR     SCRADD           ;  .    .
;
LVLN1    JSR     SWPINT           ;  ENTRY FOR LEVEL RE-START
;
         LDX     #TBLPTR1         ;  .    SET-UP FOR NEXT GAME LEVEL
         LDA     <ACTPLY          ;  .    .    WHICH PLAYER IS ACTIVE
         LDX     A,X              ;  .    .    .
;
;==========================================================================JJH
;        LDA     0,X              ;  CODE DELETED - REV. C CHANGES   ======JJH
;        BMI     LVLN2            ;  .                               ======JJH
;==========================================================================JJH
;
         JSR     MINLAY           ;  INITIALIZE FOR GAME LEVEL
         BRA     LVLN3            ;  .
;
LVLN2    LDD     <TIMEOUT         ;  LOCK-UP ON GAME SEQUENCE
         SUBD    #$0001           ;  .    TIME-OUT ON SEQUENCE ?
         STD     <TIMEOUT         ;  .    .
         BEQ     LVLN21           ;  .    .
;
         PSHS    DP               ;  .    DISPLAY BOTH PLAYERS SCORE
         JSR     DPIO             ;  .    .
         JSR     SCRBTH           ;  .    .
         LDU     #M.END           ;  .    DISPLAY 'GAME OVER' MESSAGE
         JSR     MESS             ;  .    .
         PULS    DP               ;  .    .
;
;==========================================================================JJH
;        LDA     <TRIGGR          ;  CODE DELETED - REV. B CHANGES   ======JJH
;        BEQ     LVLN3            ;  .                               ======JJH
;==========================================================================JJH
;
         LDX     #SCOR1           ;  ESCAPE FROM GAME LEVEL LOCK-UP
         LDU     #HISCOR          ;  .    IS PLAYER #1 SCORE HIGHEST ?
         JSR     HISCR            ;  .    .
;
         LDX     #SCOR2           ;  .    IS PLAYER #2 SCORE HIGHEST ?
         LDU     #HISCOR          ;  .    .
         JSR     HISCR            ;  .    .
;
;==========================================================================JJH
         LDA     <TRIGGR          ;  CODE ADDED - REV. B CHANGES     ======JJH
         BEQ     LVLN3            ;  .                               ======JJH
;==========================================================================JJH
;
LVLN21   LDD     <TIMEOUT         ;  LOCK TIME-OUT ?
         LBNE    NEWGAME          ;  .    START GAME OVER
;
;==========================================================================JJH
;        CLR     $CBFE            ;  CODE DELETED - REV. B CHANGES   ======JJH
;        JMP     $F01C            ;  .                               ======JJH
;==========================================================================JJH
;
;==========================================================================JJH
         JMP     REVB.0           ;  CODE ADDED - REV. B CHANGES     ======JJH
         NOP                      ;  .    FILLER                     ======JJH
         NOP                      ;  .    .                          ======JJH
         NOP                      ;  .    .                          ======JJH
;==========================================================================JJH
;
;
LVLN3    PSHS    DP               ;  SAVE "DP" REGISTER
         JSR     WAIT             ;  WAIT FOR FRAME BOUNDARY
         JSR     GMINE            ;  HANDLE MINE GAME LOGIC
         JSR     GSHIP            ;  HANDLE SWEEPER GAME LOGIC
         JSR     GBULLET          ;  HANDLE BULLET GAME LOGIC
         JSR     MSHIP            ;  HANDLE MINE-LAYER GAME LOGIC
;
         PULS    DP               ;  SET "DP" REGISTER TO RAM
         SETDP   $C8              ;  .
;
         JSR     CBULMIN          ;  HANDLE BULLET/MINE COLLISIONS
         JSR     CMINSHIP         ;  HANDLE SHIP/MINE COLLISIONS
         JSR     CSHPLYR          ;  HANDLE SHIP/LAYER COLLISIONS
         JSR     TAIL             ;  HANDLE TAIL-END LOGIC
         BCS     LVLN3            ;  .    MORE GAME LOGIC ?
;
         LDA     <ABORT           ;  RESTART CURRENT GAME POSITION ?
         LBEQ    LEVELN           ;  .    WAS GAME ABORTED ?
         LDA     <LOCK            ;  .    .    LOCK-UP ON GAME SEQUENCE ?
         LBNE    LVLN2            ;  .    .    .
         JMP     LVLN1            ;  .    .    RESTART GAME SEQUENCE
;
;
;  ***********************************************
;  ***********************************************
;  ***                                         ***
;  ***          S U B R O U T I N E S          ***
;  ***                                         ***
;  ***********************************************
;  ***********************************************
;
;
;
;  HANDLE MINE-LAYING SEQUENCE
;  ===========================
;
         SETDP   $C8
;        =====   ===
;
MINLAY   STX     <MINTABLE        ;  SET-UP FOR INITIAL MINE-LAYING
         LDD     #$7F00           ;  .    SET POSITION OF MINE-LAYER
         STD     <LAYRYX          ;  .    .
         STA     <STAR1           ;  .    SET MINE-LAYER ZOOM VALUE
;
         LDA     #$20             ;  SET MINE INSERTION TIME
         STA     <TMR1            ;  .
         LDX     #INSINT          ;  .
         STX     <TMR1+1          ;  .
         LDX     #MIN.TBL         ;  .    SET-UP FOR MINE INSERTION
         STX     <STAR3           ;  .    .    NEXT MINE TABLE ENTRY
         LDA     #MINES + 1       ;  .    .    TOTAL MINES TO INSERT
         STA     <STAR2           ;  .    .    .
;
         CLR     <TSTAT           ;  SET-UP FOR MINE-LAYING TUNE
         LDU     #LAYTUNE         ;  .
         JSR     SPLAY            ;  .
;
;
MNLY1    PSHS    DP               ;  DEPOSIT INITIAL MINES
         JSR     STAIL            ;  .    DRAW EXPLOSIONS AND SHIP COUNTER
         JSR     REPLAY           ;  .    SET-UP FOR TUNE
;
         LDA     <FRAME           ;  .    CHANGE ZOOM VALUE ?
         BITA    #$01             ;  .    .
         BNE     MNLY2            ;  .    .
         DEC     <STAR1           ;  .    .    INCREMENT LAYER ZOOM VALUE
;
MNLY2    JSR     WAIT             ;  .    WAIT FOR FRAME BOUNDARY
         SETDP   $D0              ;  .    .
         JSR     SCRBTH           ;  .    DISPLAY BOTH PLAYER'S SCORES
         JSR     REQOUT           ;  .    PLAY LAYING TUNE
         JSR     GMINE            ;  .    HANDLE MINE GAME LOGIC
;
         JSR     INT3Q            ;  .    DISPLAY MINE-LAYER
         LDB     STAR1            ;  .    .    SKIP IF ZOOM VALUE IS ZERO
         BEQ     MNLY3            ;  .    .    .
         LDX     #LLAYR           ;  .    .    DRAW LEFT PACKET
         LDY     LAYRYX           ;  .    .    .
         JSR     APACK            ;  .    .    .
         LDX     #RLAYR           ;  .    .    DRAW RIGHT PACKET
         JSR     APACK            ;  .    .    .
         LDX     #MLAYR           ;  .    .    DRAW MIDDLE PACKET
         JSR     APACK            ;  .    .    .
;
         PULS    DP               ;  .    .
         SETDP   $C8              ;  .    .
         DEC     <LAYRYX          ;  .    .
         BRA     MNLY1            ;  .    .
;
;
MNLY3    PULS    DP               ;  GROW FOUR LARGE MINES
         SETDP   $C8              ;  .    .
;
         CLR     <TMR1            ;  .
         LDA     #$04             ;  .    SET MINE COUNT
         STA     <STAR1           ;  .    .
         LDA     #$7F             ;  .    SET GROWING DELAY TIME
         STA     <STAR2           ;  .    .
;
MNLY4    LDA     <STAR1           ;  .    START SEQUENTIAL MINE GROWTH
         BEQ     MNLY7            ;  .    .
;
         LDB     <STAR2           ;  .    .    GROWING DELAY TIME ?
         BEQ     MNLY5            ;  .    .    .
         DEC     <STAR2           ;  .    .    .    DECREMENT DELAY TIMER
         BRA     MNLY6            ;  .    .    .    SKIP MINE GROWTH
;
MNLY5    LDB     <FRAME           ;  .    .    ADJUST GROWTH-TO-GROWTH TIME
         ANDB    #$1F             ;  .    .    .
         BNE     MNLY6            ;  .    .    .
;
         DECA                     ;  .    GROW ONE LARGE MINE
         STA     <STAR1           ;  .    .    DECREMENT MINE COUNTER
;
         LDX     <MINTABLE        ;  .    .    SET SEED ENTRY FOR GROWTH
         LDA     A,X              ;  .    .    .    SET MINE TYPE
         LDB     #$03             ;  .    .    .    SET MINE SIZE (LARGE)
         JSR     RANSEED          ;  .    .    .    FIND AND SET ENTRY
;
MNLY6    PSHS    DP               ;  .    WAIT FOR FRAME BOUNDARY
         JSR     WAIT             ;  .    .
         SETDP   $D0              ;  .    .
;
         JSR     INTMAX           ;  .    DISPLAY ACTIVE MINE-FIELD MESSAGE
         LDU     #M.MNFLD         ;  .    .    DRAW MINE-FIELD MESSAGE
         JSR     MESS             ;  .    .    .
         LDY     #$E000           ;  .    .    DRAW MINE-FIELD COUNTER
         LDU     #PMNLVL          ;  .    .    .    FIND MESSAGE FOR ACTIVE PLAYER
         LDA     ACTPLY           ;  .    .    .    .
         LDU     A,U              ;  .    .    .    .
         JSR     AMESS            ;  .    .    .
;
         JSR     GMINE            ;  .    HANDLE MINE GAME LOGIC
         JSR     GSHIP            ;  .    HANDLE SWEEPER GAME LOGIC
         JSR     GBULLET          ;  .    HANDLE BULLET GAME LOGIC
;
         PULS    DP               ;  .    SET "DP" REGISTER TO RAM
         SETDP   $C8              ;  .    .
;
         JSR     CBULMIN          ;  .    HANDLE BULLET/MINE COLLISIONS
         JSR     TAIL             ;  .    HANDLE TAIL-END LOGIC
         BRA     MNLY4            ;  .    .
;
MNLY7    RTS                      ;  RETURN TO CALLER
;
;
;  INITIAL MINE INSERTION
;  ======================
;
;
INSINT   SETDP   $C8              ;  TIMER "DP" SET TO RAM
;
         DEC     <STAR2           ;  END-OF-MINE INSERTION ?
         BEQ     INSINT9          ;  .
;
         INC     <MINMAX          ;  BUMP MINE-SEED COUNTER
;
         JSR     RANDOM           ;  RESET INSERTION TIME
         ANDA    #$07             ;  .
         ADDA    #$04             ;  .
         STA     <TMR1            ;  .
;
         LDU     <STAR3           ;  INSERT INITIAL MINE BEHAVIOR PARAMETERS
;
         LDA     #$80             ;  .    SET MINE TO INITIAL LOCATION
         STA     MIN.FLG,U        ;  .    .
;
         LDD     <LAYRYX          ;  .    SET SEED RESTING LOCATION
         ADDA    #$08             ;  .    .    FUDGE MINE UP FOR LAYER OPENING
         STA     MIN.YW,U         ;  .    .    SET WORKING VALUES
         CLR     MIN.YW+1,U       ;  .    .    .
         STB     MIN.XW,U         ;  .    .    .
         CLR     MIN.XW+1,U       ;  .    .    .
;
INSINT0  JSR     RANDOM           ;  .    SET SEED DESTINATION LOCATION
         TSTA                     ;  .    .    SET MINIMUM DISTANCE FROM CENTRE
         BMI     INSINT3          ;  .    .    .
;
INSINT1  CMPA    #$10             ;  .    .    .    'X' IS POSITIVE
         BGE     INSINT2          ;  .    .    .    .    BELOW 'X' WINDOW ?
         ADDA    #$0C             ;  .    .    .    .    .    FUDGE IT UP
INSINT2  CMPA    #$60             ;  .    .    .    .    ABOVE 'X' WINDOW ?
         BLE     INSINT5          ;  .    .    .    .    .    FUDGE IT DOWN
         BRA     INSINT0          ;  .    .    .    .    .    .
;
INSINT3  CMPA    #$F0             ;  .    .    .    'X' IS NEGATIVE
         BLE     INSINT4          ;  .    .    .    .    ABOVE 'X' WINDOW ?
         SUBA    #$0C             ;  .    .    .    .    .    FUDGE IT DOWN
INSINT4  CMPA    #$A0             ;  .    .    .    .    BELOW 'X' WINDOW ?
         BGE     INSINT5          ;  .    .    .    .    .    FUDGE IT UP
         BRA     INSINT0          ;  .    .    .    .    .    .
;
INSINT5  STA     MIN.T2,U         ;  .    .    .    .
;
         TFR     A,B              ;  .    SET DISPLACEMENT VALUE ($01 OR $FF)
         SEX                      ;  .    .
         ORA     #$01             ;  .    .
         STA     MIN.T1,U         ;  .    .
;
         CLR     MIN.SIZ,U        ;  .    SET INITIAL ZOOM VALUE
;
         LEAY    MIN.LEN,U        ;  .    BUMP TO NEXT ENTRY
         STY     <STAR3           ;  .    .
;
INSINT9  RTS                      ;  RETURN TO CALLER
;
;
MINSZ    DB      0                ;  MINE SIZE TABLE
         DB      MIN.SIZ3         ;  .    SMALL
         DB      MIN.SIZ2         ;  .    MEDIUM
         DB      MIN.SIZ1         ;  .    LARGE
;
MINSPD   DB      0                ;  MINE SPEED TABLE
         DB      MIN.SPD3         ;  .    SMALL
         DB      MIN.SPD2         ;  .    MEDIUM
         DB      MIN.SPD1         ;  .    LARGE
;
MINSCR   DW      $0100            ;  MINE SCORE TABLE
         DW      $0500            ;  .
         DW      $0325            ;  .
         DW      $0750            ;  .
;
MINSSCR  DW      0                ;  MINE SCORE VS. SPEED TABLE
         DW      $0100            ;  .    SMALL
         DW      $0035            ;  .    MEDIUM
         DW      $0000            ;  .    LARGE
;
MINBOX   DW      0                ;  MINE COLLISION BOX PARAMETERS
         DW      MIN.BOX3         ;  .
         DW      MIN.BOX2         ;  .
         DW      MIN.BOX1         ;  .
;
MINOBJ   DW      MINE1            ;  MINE PACKET TABLE
         DW      MINE2            ;  .
         DW      MINE3            ;  .
         DW      MINE4            ;  .
;
;
;  STAR-SWEEPER GAME LOGIC
;  =======================
;
;
GSHIP    PSHS    DP               ;  SAVE ENTRY "DP"
         LDA     #$C8             ;  SET "DP" REGISTER TO RAM
         TFR     A,DP             ;  .
         SETDP   $C8              ;  .
;
         LDA     <ABORT           ;  GAME ABORTED ?
         LBNE    SHPON2           ;  .    SKIP STAR-SWEEPER LOGIC
;
         LDA     <HYPFLAG         ;  STATUS OF HYPER-SPACE SEQUENCE ?
         LBNE    HYPER1           ;  .    HYPER-SPACE SEQUENCE GOING ALREADY
         LDA     <S.HYPER         ;  .    HYPER-SPACE BUTTON PRESSED ?
         LBNE    HYPER            ;  .    .
;
GSHP1    LDA     <S.THRST         ;  THRUSTING ?
         BEQ     GSHP5            ;  .
;
         LDA     <SHIPROT         ;  .    THRUSTING ALONG EXISTING AXIS ?
         CMPA    <SHIPDIR1        ;  .    .    ALONG FIRST AXIS ?
         BEQ     GSHP3            ;  .    .    .
         CMPA    <SHIPDIR2        ;  .    .    ALONG SECOND AXIS ?
         BEQ     GSHP2            ;  .    .    .
;
         LDA     <SHIPSPD1        ;  .    WHICH AXIS IS FREE ?
         BEQ     GSHP3            ;  .    .    FIRST AXIS ?
         LDA     <SHIPSPD2        ;  .    .    SECOND AXIS ?
         BNE     GSHP5            ;  .    .    .
;
GSHP2    LDA     <SHIPSPD2        ;  .    ACCELERATE SPEED ALONG AXIS #2
         ADDA    #$0C             ;  .    .
         CMPA    #$7F             ;  .    .    MAXIMUM SPEED ?
         BHI     GSHP5            ;  .    .    .
         STA     <SHIPSPD2        ;  .    .    SAVE NEW SPEED
         LDA     <SHIPROT         ;  .    .    SET DIRECTION OF AXIS
         STA     <SHIPDIR2        ;  .    .    .
         BRA     GSHP4            ;  .    .    SET THRUSTER SOUND
;
;
GSHP3    LDA     <SHIPSPD1        ;  .    ACCELERATE SPEED ALONG AXIS #1
         ADDA    #$0C             ;  .    .
         CMPA    #$7F             ;  .    .    MAXIMUM SPEED ?
         BHI     GSHP5            ;  .    .    .
         STA     <SHIPSPD1        ;  .    .    SAVE NEW SPEED
         LDA     <SHIPROT         ;  .    .    SET DIRECTION OF AXIS
         STA     <SHIPDIR1        ;  .    .    .
;
GSHP4    INC     THRSND           ;  .    .    SET THRUSTER SOUND
;
GSHP5    LDA     <SHIPSPD1        ;  DECELERATE SPEED ALONG FIRST AXIS
         BEQ     GSHP6            ;  .
         SUBA    #$02             ;  .
         STA     <SHIPSPD1        ;  .
;
         LDB     <SHIPDIR1        ;  .    CALCULATE SHIP DISPLACEMENTS
         JSR     MLTY8            ;  .    .    FORM DISPLACEMENTS
         STY     <DSHIPY1         ;  .    .    .    SAVE 'Y' DISPLACEMENT
         STX     <DSHIPX1         ;  .    .    .    SAVE 'X' DISPLACEMENT
;
GSHP6    LDA     <SHIPSPD2        ;  DECELERATE SPEED ALONG SECOND AXIS
         BEQ     GSHP7            ;  .
         SUBA    #$02             ;  .
         STA     <SHIPSPD2        ;  .
;
         LDB     <SHIPDIR2        ;  .    CALCULATE SHIP DISPLACEMENTS
         JSR     MLTY8            ;  .    .    FORM DISPLACEMENTS
         STY     <DSHIPY2         ;  .    .    .    SAVE 'Y' DISPLACEMENT
         STX     <DSHIPX2         ;  .    .    .    SAVE 'X' DISPLACEMENT
;
GSHP7    LDD     <WSHIPY          ;  MOVE SHIP 'Y' AXIS
         ADDD    <DSHIPY1         ;  .
         ADDD    <DSHIPY2         ;  .
         STD     <WSHIPY          ;  .
;
         LDD     <WSHIPX          ;  MOVE SHIP 'X' AXIS
         ADDD    <DSHIPX1         ;  .
         ADDD    <DSHIPX2         ;  .
         STD     <WSHIPX          ;  .
;
GSHP8    LDA     <POT0            ;  ROTATE STAR-SWEEPER ?
         BEQ     SHPON1           ;  .    NO ROTATION ?
         BMI     GSHP9            ;  .    ROTATE LEFT ?
;
         DEC     <SHIPROT         ;  .    ROTATE RIGHT
         BRA     SHPON0           ;  .    .
;
GSHP9    INC     <SHIPROT         ;  .    ROTATE LEFT
         BRA     SHPON0           ;  .    .
;
;
SHPONLY  PSHS    DP               ;  SHIP-ONLY ENTRY POINT
;
SHPON0   JSR     SWPROT           ;  ROTATE STAR-SWEEPER
;
SHPON1   LDA     #$D0             ;  SET "DP" REGISTER TO I/O
         TFR     A,DP             ;  .
         SETDP   $D0              ;  .
;
         JSR     INT3Q            ;  DISPLAY MINE-SWEEPER
         LDB     #P.SHPSZ         ;  .    SET SIZE
         LDY     #WSHIPY          ;  .    SET POSITION
         LDX     #PACKET1         ;  .    SET SHIP PACKET ADDRESS
         JSR     DPACK            ;  .    DRAW PACKET
;
SHPON2   PULS    DP,PC            ;  RETURN TO CALLER
;
;
;  HYPER-SPACE SEQUENCE
;  ====================
;
         SETDP   $C8
;        =====   ===
;
HYPER    LDA     #$80             ;  START HYPER-SPACE SEQUENCE
         STA     <HYPFLAG         ;  .    SET FLAG FOR RNG MIXING
         JSR     RANDOM           ;  .    SET COUNTER
         ANDA    #$03             ;  .    .
         ADDA    #$03             ;  .    .
         STA     <HYPCNT          ;  .    .
         INC     HYPSND           ;  .    SET HYPER-SPACE SOUND FLAG
;
HYPER1   LDA     <HYPFLAG         ;  SELECT HYPER-SPACE SEQUENCE
         BPL     HYPER30          ;  .    WAITING FOR NEW LOCATION ?
;
HYPER20  DEC     <HYPCNT          ;  WAIT FOR SHIP RE-APPERANCE
         BEQ     HYPER21          ;  .    SEQUENCE DONE ?
;
         JSR     RANPOS           ;  .    STIR-UP RANDOM NUMBER GENERATOR
         STA     <WSHIPY          ;  .    .
         CLR     <WSHIPY + 1      ;  .    .
         STB     <WSHIPX          ;  .    .
         CLR     <WSHIPX + 1      ;  .    .
         PULS    DP,PC            ;  .    .
;
HYPER21  LSR     <HYPFLAG         ;  .    SET FLAG FOR NEXT SEQUENCE
         LDA     #$1F             ;  .    .
         STA     <HYPCNT          ;  .    .
         PULS    DP,PC            ;  .    .
;
;
HYPER30  LDB     <HYPCNT          ;  SHIP RE-APPERANCE
         CMPB    #$E0             ;  .
         BLE     HYPER31          ;  .
         LDA     <HYPCNT          ;  .
         SUBA    #$04             ;  .
         STA     <HYPCNT          ;  .
;
         CLRA                     ;  .    DRAW STAR FIELD
         JSR     H.STARS          ;  .    .
         PULS    DP,PC            ;  .    .
;
HYPER31  CLR     <HYPCNT          ;  HYPER-SPACE SEQUENCE DONE
         CLR     <HYPFLAG         ;  .
         JSR     HSWPRST          ;  .    INITIALIZE SWEEPER PARAMETERS
;
         PULS    DP,PC            ;  RETURN TO CALLER
;
;
;  MINE-LAYER GAME LOGIC
;  =======================
;
         SETDP   $D0
;        =====   ===
;
MSHIP    LDA     LAYRSPD          ;  IS THE MINE-LAYER ON-SCREEN ?
         BEQ     MSHIP1           ;  .
;
         PSHS    DP               ;  SAVE ENTRY "DP"
         LDA     #$C8             ;  SET "DP" REGISTER TO RAM
         TFR     A,DP             ;  .
         SETDP   $C8              ;  .
;
;==========================================================================JJH
;        LDA     <LAYRSPD         ;  CODE DELETED - REV. C CHANGES   ======JJH
;        BEQ     MSHIP1           ;  .                               ======JJH
;==========================================================================JJH
;
;==========================================================================JJH
         NOP                      ;  CODE ADDED - REV. C CHANGES     ======JJH
         NOP                      ;  .                               ======JJH
         NOP                      ;  .                               ======JJH
         NOP                      ;  .                               ======JJH
;==========================================================================JJH
;
         LDD     <WLAYRY          ;  MOVE SHIP 'Y' AXIS
         ADDD    <DLAYRY          ;  .
         STD     <WLAYRY          ;  .
         STA     <LAYRYX          ;  .
;
         LDD     <WLAYRX          ;  MOVE SHIP 'X' AXIS
         ADDD    <DLAYRX          ;  .
         STD     <WLAYRX          ;  .
         STA     <LAYRYX+1        ;  .
;
         PULS    DP               ;  SET "DP" REGISTER TO I/O
         SETDP   $D0              ;  .
;
         JSR     INT3Q            ;  DISPLAY MINI MINE-LAYER
         LDB     #P.LYRSZ         ;  .    SET SIZE
         LDY     LAYRYX           ;  .    SET POSITION
         LDX     #LAYER           ;  .    SET PACKET ADDRESS
         JSR     APACK            ;  .    DRAW PACKET
;
MSHIP1   RTS                      ;  RETURN TO CALLER
;
;
;  MINE-LAYER PARAMETER MODIFICATIONS
;  ==================================
;
;        FIRST MINE-LAYER MOTION MODIFICATION
;        ------------------------------------
;
BEGLAYR  SETDP   $C8              ;  TIMER "DP" SET TO RAM
;
         LDX     #INSLAYR         ;  SET-UP FOR GENERAL MINE-LAYER MOTION
         STX     <TMR3 + 1        ;  .
;
         JSR     RANDOM           ;  SELECT PRE-PROGRAMMED MINE-LAYING SEQUENCE
         LDX     #RSTABL          ;  .
         ANDA    #$06             ;  .
         LDX     A,X              ;  .
;
         LDD     X++              ;  SET INITIAL MINE-LAYER LOCATION
         STD     <LAYRYX          ;  .
         STA     <WLAYRY          ;  .    WORKING 'Y' LOCATION
         CLR     <WLAYRY + 1      ;  .    .
         STB     <WLAYRX          ;  .    WORKING 'X' LOCATION
         CLR     <WLAYRX + 1      ;  .    .
;
         BRA     INSLYR6          ;  FETCH MOTION MODIFICATIONS
;
;
;        GENERAL MINE-LAYER MOTION MODIFICATIONS
;        ---------------------------------------
;
;
INSLAYR  SETDP   $C8              ;  TIMER "DP" SET TO RAM
;
         LDA     <RSMINES         ;  USE RANDOM MOTION OR PROGRAMMED SEQUENCE ?
         BNE     INSLYR2          ;  .
;
;
INSLYR1  JSR     RANDOM           ;  RANDOM MOTION
         ANDA    #$7F             ;  .    SET PARAMETER CHANGE TIME
         ADDA    #$30             ;  .    .
         STA     <TMR3            ;  .    .
;
         JSR     RANDOM           ;  .    SET MINE-LAYER DIRECTION
         ANDA    #$3F             ;  .    .
         STA     <LAYRDIR         ;  .    .
;
         JSR     RANDOM           ;  .    SET MINE-LAYER SPEED
         ADDA    #$10             ;  .    .
         STA     <LAYRSPD         ;  .    .
         BRA     INSLYR7          ;  .    .
;
;
INSLYR2  LDA     <ABORT           ;  PRE-PROGRAMMED MINE-LAYING SEQUENCE
         BNE     INSLYR1          ;  .    GAME ABORTED ?
;
;        LDA     <CMINES          ;  .    ALL ACTIVE MINES DESTROYED ?
;        BEQ     INSLYR1          ;  .    .
;
         LDB     #MINES           ;  .    FIND HOLE FOR NEW MINE
         LDU     #MIN.TBL         ;  .    .
;
INSLYR3  LDA     0,U              ;  .    .
         BEQ     INSLYR4          ;  .    .
;
         LEAU    MIN.LEN,U        ;  .    .
         DECB                     ;  .    .    END-OF-TABLE ?
         BNE     INSLYR3          ;  .    .    .
         BRA     INSLYR7          ;  .    .    .    WHAT THE HEY ?
;
;
INSLYR4  INC     <MINMAX          ;  .    INSERT NEW MINE
         DEC     <RSMINES         ;  .    .    DECREMENT RE-SEED MINE COUNT
;
         LDX     <WLAYRY          ;  .    .    SET MINE TO LAYER POSITION
         STX     MIN.YW,U         ;  .    .    .    WORKING DISPLACMENETS
         LDX     <WLAYRX          ;  .    .    .    .
         STX     MIN.XW,U         ;  .    .    .    .
;
         LDA     #$40             ;  .    .    SET MINE-SEED TO IDLE
         STA     MIN.FLG,U        ;  .    .    .
;
         LDA     <RESEED          ;  .    .    MINE RE-SEEDING ALREADY STARTED ?
         BNE     INSLYR5          ;  .    .    .
;
         LDX     #RSGROW          ;  .    .    SET-UP DELAYED MINE GROWTH
         STX     <TMR1 + 1        ;  .    .    .
         JSR     RANDOM           ;  .    .    .    SET DELAY TIME
         ANDA    #$7F             ;  .    .    .    .
         ADDA    #$40             ;  .    .    .    .
         STA     <TMR1            ;  .    .    .    .
;
         INC     <RESEED          ;  .    .    SET RE-SEEDING FLAG
;
INSLYR5  LDX     <LAYRPTR         ;  .    FETCH PRE-PROGRAMMED VALUES
INSLYR6  LDA     X+               ;  .    .    SET NEXT PARAMETER CHANGE TIME
         STA     <TMR3            ;  .    .    .
;
         LDA     X+               ;  .    .    SET MINE-LAYER DIRECTION
         STA     <LAYRDIR         ;  .    .    .
;
         LDA     X+               ;  .    .    SET MINE-LAYER SPEED
         STA     <LAYRSPD         ;  .    .    .
         STX     <LAYRPTR         ;  .    .    .    SAVE UPDATED SEQUENCE POINTER
;
;
INSLYR7  LDB     <LAYRDIR         ;  CALCULATE SHIP DISPLACEMENTS FOR SPEED
         JSR     MLTY8            ;  .    FORM DISPLACEMENTS
         STY     <DLAYRY          ;  .    .    SAVE 'Y' DISPLACEMENT
         STX     <DLAYRX          ;  .    .    SAVE 'X' DISPLACEMENT
;
         RTS                      ;  .    RETURN TO CALLER
;
;
;        RE-SEEDED MINE GROWTH HANDLER
;        -----------------------------
;
;
RSGROW   SETDP   $C8              ;  TIMER "DP" SET TO RAM
;
         LDU     #TBLPTR1         ;  GROW FEATURED MINE
         LDA     <ACTPLY          ;  .    SELECT POINTER FOR ACTIVE PLAYER
         LDU     A,U              ;  .    .
         LDA     0,U              ;  .    SET MINE TYPE
         LDB     #3               ;  .    SET MINE SIZE
         JSR     RANSEED          ;  .    FIND AND SET ENTRY
;
         LDX     #FRCGROW         ;  SET-UP FOR FORCED MINE GROWTH
         STX     <TMR1 + 1        ;  .
;
         RTS                      ;  .    RETURN TO CALLER
;
;
;        FORCED MINE GROWTH HANDLER
;        --------------------------
;
;
FRCGROW  SETDP   $C8              ;  TIMER "DP" SET TO RAM
;
         DEC     <FRCTIME         ;  DOWN-COUNT FORCE TIMER
         BEQ     FRC1             ;  .
         LDA     #$FF             ;  .    RESET TIMER #1
         STA     <TMR1            ;  .    .
         BRA     FRC9             ;  .    SKIP FORCED MINE GROWTH
;
FRC1     JSR     RANDOM           ;  FETCH RANDOM NUMBER FOR MINE SIZE
         TFR     A,B              ;  .    NUMBER MUST BE BETWEEN 1 - 3
         ANDB    #$03             ;  .    .
         BNE     FRC2             ;  .    .    BUMP IF ZERO
         ADDB    #$01             ;  .    .    .
;
FRC2     LDU     #TBLPTR1         ;  GROW FEATURED MINE
         LDA     <ACTPLY          ;  .    SELECT POINTER FOR ACTIVE PLAYER
         LDU     A,U              ;  .    .
         LDA     0,U              ;  .    SET MINE TYPE
         JSR     RANSEED          ;  .    FIND AND SET ENTRY
;
FRC9     RTS                      ;  .    RETURN TO CALLER
;
;
;        MINE-LAYER RE-SEEDING SEQUENCES
;        -------------------------------
;
;
RSTABL   DW      RESEED1          ;  RE-SEEDING SEQUENCE LOOK-UP TABLE
         DW      RESEED2          ;  .
         DW      RESEED3          ;  .
         DW      RESEED4          ;  .
;
;
RESEED1  DW      $7F00            ;  RE-SEED SEQUENCE #1
         DB      $28              ;  .    DELAY TO NEXT CHANGE
         DB      $20              ;  .    DIRECTION OF CURRENT MOTION
         DB      $30              ;  .    SPEED OF CURRENT MOTION
         DB      $40,$28,$30      ;  .
         DB      $28,$00,$10      ;  .
         DB      $30,$10,$40      ;  .
         DB      $18,$20,$50      ;  .
         DB      $40,$30,$28      ;  .
         DB      $30,$08,$60      ;  .
         DB      $7F,$38,$70      ;  .
;
;
RESEED2  DW      $8000            ;  RE-SEED SEQUENCE #2
         DB      $40              ;  .    DELAY TO NEXT CHANGE
         DB      $00              ;  .    DIRECTION OF CURRENT MOTION
         DB      $30              ;  .    SPEED OF CURRENT MOTION
         DB      $20,$10,$50      ;  .
         DB      $20,$28,$40      ;  .
         DB      $30,$3E,$70      ;  .
         DB      $18,$30,$60      ;  .
         DB      $20,$18,$40      ;  .
         DB      $30,$24,$50      ;  .
         DB      $7F,$06,$70      ;  .
;
;
RESEED3  DW      $007F            ;  RE-SEED SEQUENCE #3
         DB      $40              ;  .    DELAY TO NEXT CHANGE
         DB      $10              ;  .    DIRECTION OF CURRENT MOTION
         DB      $60              ;  .    SPEED OF CURRENT MOTION
         DB      $28,$38,$30      ;  .
         DB      $28,$08,$40      ;  .
         DB      $30,$28,$7F      ;  .
         DB      $20,$18,$30      ;  .
         DB      $30,$08,$68      ;  .
         DB      $40,$20,$50      ;  .
         DB      $7F,$38,$70      ;  .
;
;
RESEED4  DW      $0080            ;  RE-SEED SEQUENCE #4
         DB      $40              ;  .    DELAY TO NEXT CHANGE
         DB      $30              ;  .    DIRECTION OF CURRENT MOTION
         DB      $60              ;  .    SPEED OF CURRENT MOTION
         DB      $38,$18,$30      ;  .
         DB      $30,$20,$18      ;  .
         DB      $20,$38,$40      ;  .
         DB      $28,$10,$60      ;  .
         DB      $20,$00,$30      ;  .
         DB      $40,$38,$50      ;  .
         DB      $7F,$1C,$70      ;  .
;
;
;  BULLET GAME LOGIC
;  =================
;
         SETDP   $D0
;        =====   ===
;
GBULLET  LDA     #BULLETS         ;  DISPLAY 'BULLETS' TABLE
         LDU     #BLT.TBL         ;  .
         LDX     #S.FIRE          ;  .
;
SBULLET  STA     TEMP1            ;  .
         JSR     INTMAX           ;  .
;
GBLT1    LDA     BLT.FLG,U        ;  .    BULLET ACTIVE ?
         BEQ     GBLT4            ;  .    .
;
         DEC     BLT.DC,U         ;  .    DECREMENT BULLET DOWN-COUNTER
         BEQ     GBLT3            ;  .    .
;
         LDD     BLT.WY,U         ;  .    CALCULATE NEW BULLET POSITION
         ADDD    BLT.YD,U         ;  .    .    'Y' POSITION
         STD     BLT.WY,U         ;  .    .    .
;
         LDD     BLT.WX,U         ;  .    .    'X' POSITION
         ADDD    BLT.XD,U         ;  .    .    .
         STD     BLT.WX,U         ;  .    .    .
;
         LEAY    BLT.WY,U         ;  .    DISPLAY BULLET FOR THIS ENTRY
         JSR     DDOT             ;  .    .    POSITION BULLET
;
GBLT2    LEAU    BLT.LEN,U        ;  .    BUMP TO NEXT ENTRY
         DEC     TEMP1            ;  .    .    END-OF-BULLET TABLE ?
         BNE     GBLT1            ;  .    .    .
         RTS                      ;  .    .    RETURN TO CALLER
;
GBLT3    CLR     BLT.FLG,U        ;  .    THIS ENTRY HAS MOVED OFF-SCREEN
         DEC     CBULLET          ;  .    .    DECREMENT ACTIVE BULLET COUNTER
;
GBLT4    LDA     ABORT            ;  .    ZERO ENTRY FOUND, GAME ABORTED ?
         BNE     GBLT2            ;  .    .
;
         LDA     HYPFLAG          ;  .    .    HYPER-SPACE SEQUENCE ACTIVE ?
         BNE     GBLT2            ;  .    .    .
;
         LDA     0,X              ;  .    INSERT NEW BULLET ?
         BEQ     GBLT2            ;  .    .    IS FIRE BUTTON DEPRESSED ?
;
         CLR     0,X              ;  .    .    CLEAR 'FIRE' FLAG
         INC     BLTSND           ;  .    .    SET BULLET SOUND FLAG
;
         INC     BLT.FLG,U        ;  .    .    SET BULLET 'ON'
         LDD     WSHIPY           ;  .    .    SET SHIP WORKING POSITION
         STD     BLT.WY,U         ;  .    .    .    'Y' AXIS
         LDD     WSHIPX           ;  .    .    .    'X' AXIS
         STD     BLT.WX,U         ;  .    .    .    .
         LDD     DBLTY            ;  .    .    SET BULLET DISPLACEMENT VALUES
         STD     BLT.YD,U         ;  .    .    .    'Y' AXIS
         LDD     DBLTX            ;  .    .    .    'X' AXIS
         STD     BLT.XD,U         ;  .    .    .    .
         LDA     #$18             ;  .    .    SET DOWN-COUNTERS
         STA     BLT.DC,U         ;  .    .    .
         INC     CBULLET          ;  .    .    BUMP ACTIVE BULLET COUNTER
         BRA     GBLT2            ;  .    .
;
;
;  MINE GAME LOGIC
;  ===============
;
         SETDP   $D0
;        =====   ===
;
GMINE    LDA     #MINES           ;  SET-UP TO DISPLAY MINE TABLE
         STA     TEMP1            ;  .
         LDU     #MIN.TBL         ;  .
;
GMIN1    LDA     MIN.FLG,U        ;  FETCH MINE FLAG
         BNE     GMIN3            ;  .    SKIP THIS ENTRY ?
;
GMIN2    LEAU    MIN.LEN,U        ;  .    .    BUMP TO NEXT ENTRY
         DEC     TEMP1            ;  .    .    .    END-OF-OBJECT TABLE ?
         BNE     GMIN1            ;  .    .    .    .
         RTS                      ;  .    .    .    RETURN TO CALLER
;
GMIN3    LBMI    MINIT            ;  .    MINE MOVING TO INITIAL POSITION ?
         BITA    #$40             ;  .    IDLE MINE ?
         LBNE    MIDLE            ;  .    .
         BITA    #$20             ;  .    MINE ZOOMING UP FROM SEED ?
         LBNE    MZOOM            ;  .    .
         BITA    #$10             ;  .    IDLE MINE ?
         LBNE    MWAIT            ;  .    .
         BITA    #$01             ;  .    MINE COLLISION DETECTED ?
         LBNE    MBOOM            ;  .    .
;
MMOVE    LDA     MIN.PAK,U        ;  MINE IN MOTION
;
         CMPA    #FIRBALL         ;  .    'RELEASED' FIRE-BALL ?
         BEQ     MFBALL           ;  .    .
;
         BITA    #$01             ;  .    'DUMB' MINE MOTION ?
         BEQ     MOVDUMB          ;  .    .
;
;
MOVMAG   LDA     HYPFLAG          ;  HYPER-SPACE ACTIVE ?
         BNE     MOVDUMB          ;  .    IF SO, USE 'DUMB' MINE MOTION
;
         LDA     ABORT            ;  GAME ABORTED ?
         BNE     MOVDUMB          ;  .    IF SO, USE 'DUMB' MINE MOTION
;
         PSHS    DP               ;  SAVE ENTRY "DP"
         JSR     DPRAM            ;  SET "DP" REGISTER TO RAM
         SETDP   $C8              ;  .
;
         LDA     <WSHIPY          ;  CALCULATE DELTA YX VALUES
         SUBA    MIN.YW,U         ;  .
         LDB     <WSHIPX          ;  .
         SUBB    MIN.XW,U         ;  .
;
         JSR     CMPASS           ;  .    CALCULATE ANGLE TO SHIP
         SUBA    #$10             ;  .    .
         STA     <ETMP1           ;  .    .
;
         LDX     #MINSPD          ;  .    CALCULATE NEW DISPLACEMENTS
         LDB     MIN.BSZ,U        ;  .    .    FETCH MINE SPEED FOR SIZE
         LDA     B,X              ;  .    .    .
         LDB     <ETMP1           ;  .    .    FETCH DIRECTION
         JSR     MLTY8            ;  .    .    FETCH NEW DISPLACEMENTS
         STY     MIN.YD,U         ;  .    .    .    SAVE 'Y' DISPLACEMENT
         STX     MIN.XD,U         ;  .    .    .    SAVE 'X' DISPLACEMENT
;
         PULS    DP               ;  .    RECOVER DIRECT REGISTER
         SETDP   $D0              ;  .    .
;
;
MOVDUMB  LDD     MIN.YW,U         ;  CALCULATE NEW ABSOLUTE 'Y' VALUE
         ADDD    MIN.YD,U         ;  .
         STD     MIN.YW,U         ;  .
;
         LDD     MIN.XW,U         ;  CALCULATE NEW ABSOLUTE 'X' VALUE
         ADDD    MIN.XD,U         ;  .
         STD     MIN.XW,U         ;  .
;
;
MDRAW    JSR     INT3Q            ;  DISPLAY MINE PACKET FOR THIS ENTRY
         LDX     #MINOBJ          ;  .    LOOK-UP PACKET ADDRESS
         LDA     MIN.PAK,U        ;  .    .
         ASLA                     ;  .    .
         LDX     A,X              ;  .    .
         LEAY    MIN.YW,U         ;  .    SET POSITION
         LDB     MIN.SIZ,U        ;  .    SET ZOOM VALUE
         JSR     DPACK            ;  .    .
;
         JMP     GMIN2            ;  DO NEXT MINE ENTRY
;
;
MFBALL   LDD     MIN.YW,U         ;  HANDLE 'RELEASED' FIRE-BALL
         ADDD    MIN.YD,U         ;  .    'Y' AXIS
         BVS     MFBALL1          ;  .    .    OFF-SCREEN ?
         STD     MIN.YW,U         ;  .    .
;
         LDD     MIN.XW,U         ;  .    'X' AXIS
         ADDD    MIN.XD,U         ;  .    .
         BVS     MFBALL1          ;  .    .    OFF-SCREEN ?
         STD     MIN.XW,U         ;  .    .
;
         JSR     INTMAX           ;  .    DRAW FIRE-BALL
         LEAY    MIN.YW,U         ;  .    .    SET POSITION
         LDX     #PACKET2         ;  .    .    DRAW PACKET
         LDB     #$04             ;  .    .    .
         JSR     DPACK            ;  .    .    .
         JMP     GMIN2            ;  .
;
MFBALL1  CLR     MIN.FLG,U        ;  .    MINE OFF-SCREEN - CLEAR ENTRY
         DEC     CMINES           ;  .    .
         JMP     GMIN2            ;  .    .
;
;
MINIT    LDA     MIN.XW,U         ;  HANDLE INITIAL MINE MOTION
         ADDA    MIN.T1,U         ;  .    ADD DISPLACEMENT VALUE
         STA     MIN.XW,U         ;  .
;
         CMPA    MIN.T2,U         ;  .    HAS MINE REACHED DESTINATION ?
         BNE     MIDLE            ;  .    .
;
         LSR     MIN.FLG,U        ;  .    MINE HAS REACHED IDLE DESTINATION
;
;
MIDLE    JSR     INT3Q            ;  IDLE MINE ACTION
         LEAY    MIN.YW,U         ;  .    DRAW MINE SEED
         JSR     DDOT             ;  .    .
         JMP     GMIN2            ;  .    .
;
;
MZOOM    LDA     MIN.BSZ,U        ;  HANDLE THE MINE ZOOMING
         CMPA    #$03             ;  .    SMALL OR MEDIUM MINE ?
         BNE     MZOOM1           ;  .    .     SKIP ZOOMING
;
         LDA     MIN.SIZ,U        ;  IS MINE ZOOMING DONE ?
         CMPA    MIN.T1,U         ;  .
         BGE     MZOOM1           ;  .
;
         ADDA    #$08             ;  .    ZOOM MINE TO PRESET VALUE
         STA     MIN.SIZ,U        ;  .    .
         BRA     MZOOM9           ;  .    .
;
MZOOM1   LSR     MIN.FLG,U        ;  MINE HAS REACHED ITS PROPER SIZE
;
         LDA     MIN.T1,U         ;  .    SET ACTUAL MINE SIZE
         STA     MIN.SIZ,U        ;  .    .
;
         LDA     #$18             ;  .    SET MINE IDLE TIME
         STA     MIN.T1,U         ;  .    .
;
         LDA     MINMAX           ;  .    LAST MINE-SEED ?
         BNE     MZOOM9           ;  .    .
;
         LDA     RESEED           ;  .    .    MINE RE-SEEDING ALREADY STARTED ?
         BNE     MZOOM9           ;  .    .    .
;
         LDA     #$7F             ;  .    .    SET-UP FOR MINE-LAYER INSERTION
         STA     TMR3             ;  .    .    .
;
MZOOM9   JMP     MDRAW            ;  .    DRAW MINE
;
;
MWAIT    DEC     MIN.T1,U         ;  IDLE MINE
         BNE     MWAIT9           ;  .
;
         LSR     MIN.FLG,U        ;  .    SET MINE FLAG FOR NEXT ACTIVITY
;
MWAIT9   JMP     MDRAW            ;  .    DRAW MINE
;
;
MBOOM    CLR     MIN.FLG,U        ;  HANDLE MINE COLLISION
;
         LDA     MIN.PAK,U        ;  DETERMINE TYPE AND SIZE OF CURRENT MINE
         CMPA    #$04             ;  .    RELEASED FIRE-BALL ?
         BEQ     MBOOM9           ;  .    .
         LDB     MIN.BSZ,U        ;  .    SET NEW MINE SIZE
         DECB                     ;  .    .    SET TO NEXT SMALLER SIZE
         BEQ     MBOOM9           ;  .    .    .
;
         PSHS    A,DP             ;  ESTABLISH TWO NEW MINES
         LDA     #$C8             ;  .    SET "DP" REGISTER TO RAM
         TFR     A,DP             ;  .    .
;
         LDA     0,S              ;  .    GROW TWO NEW MINES
         JSR     RANSEED          ;  .    .
         JSR     RANSEED          ;  .    .
         PULS    A,DP             ;  .
;
MBOOM9   JMP     GMIN2            ;  .    DO NEXT MINE ENTRY
;
;
;  TAIL-END OF GAME LOGIC SEQUENCE
;  ===============================
;
;
TAIL     PSHS    DP               ;  SET "DP" REGISTER TO I/O
         JSR     DPIO             ;  .
         SETDP   $D0              ;  .
;
DEXPL    JSR     INTMAX           ;  DRAW EXPLOSIONS
         LDU     #EXP.TBL         ;  .
         LDA     #EXPLSN          ;  .
         STA     TEMP1            ;  .
;
EXPL1    LDA     EXP.FLG,U        ;  .    EXPLOSION ACTIVE ?
         LBEQ    EXPL9            ;  .    .
;
         LDB     EXP.CNT,U        ;  .    BUMP EXPLOSION COUNTER
         CMPB    EXP.SIZ,U        ;  .    .    EXPLOSION FULLY EXPANDED ?
         BHS     EXPL10           ;  .    .    .
         ADDB    #$03             ;  .    .
         STB     EXP.CNT,U        ;  .    .
;
         LDY     EXP.YX,U         ;  .    DRAW EXPANDING EXPLOSION CLOUD
         LDX     #EXPLODE         ;  .    .
         JSR     APACK            ;  .    .
;
EXPL10   TSTA                     ;  .    SWEEPER EXPLODING ?
         LBPL    EXPL2            ;  .    .
;
         DEC     SEXPCNT          ;  .    .    SWEEPER EXPLODING
         LBEQ    EXPL3            ;  .    .    .    EXPLOSION COMPLETE ?
;
         LDA     FRAME            ;  .    .    .    BUMP EXPLOSION ON EVEN FRAME
         ANDA    #$01             ;  .    .    .    .
         BNE     EXPL11           ;  .    .    .    .
         INC     SEXP1            ;  .    .    .    .
;
EXPL11   LDA     SEXP1            ;  .    .    .    DISPLAY SWEEPER EXPLOSION
         LDY     #$7F00           ;  .    .    .    .
         LDX     #SHPEX1          ;  .    .    .    .
         JSR     DSHPEXP          ;  .    .    .    .
;
         LDY     #$6080           ;  .    .    .    .
         LDX     #SHPEX2          ;  .    .    .    .
         JSR     DSHPEXP          ;  .    .    .    .
;
         LDY     #$8050           ;  .    .    .    .
         LDX     #SHPEX3          ;  .    .    .    .
         JSR     DSHPEXP          ;  .    .    .    .
;
         LDY     #$A080           ;  .    .    .    .
         LDX     #SHPEX4          ;  .    .    .    .
         JSR     DSHPEXP          ;  .    .    .    .
         BRA     EXPL9            ;  .    .    .    .
;
EXPL3    DEC     SHIPCNT          ;  .    RESET SWEEPER EXPLOSION
;
         CLR     CMINES           ;  .    .    CLEAR ACTIVE MINE COUNT
         CLR     MINMAX           ;  .    .    CLEAR MAXIMUM MINE COUNT
;
         LDA     PLAYRS           ;  .    .    SWITCH PLAYERS ?
         BEQ     EXPL30           ;  .    .    .
;
         LDA     ACTPLY           ;  .    .    .    SAVE CURRENT PLAYER STATUS
         LSRA                     ;  .    .    .    .
         LDX     #SHIPCNT0        ;  .    .    .    .    SAVE SHIP COUNTER
         LDB     SHIPCNT          ;  .    .    .    .    .
         STB     A,X              ;  .    .    .    .    .
;
         LDA     SHIPCNT0         ;  .    CONTINUE GAME ?
         BNE     EXPL31           ;  .    .
         LDA     SHIPCNT1         ;  .    .
         BEQ     EXPL32           ;  .    .
;
EXPL31   LDA     ACTPLY           ;  .    .    .    BUMP PLAYER FLAG
         ADDA    #$02             ;  .    .    .    .
         ANDA    #$02             ;  .    .    .    .
         STA     ACTPLY           ;  .    .    .    .
;
         LSRA                     ;  .    .    .    FETCH NEW PLAYER STATUS
         LDX     #SHIPCNT0        ;  .    .    .    .    FETCH SHIP COUNTER
         LDB     A,X              ;  .    .    .    .    .
         STB     SHIPCNT          ;  .    .    .    .    .
         BEQ     EXPL31           ;  .    .    .    .    .    SKIP IF NO SHIPS
;
EXPL30   LDA     SHIPCNT          ;  .    .    ONE PLAYER - SHIPS LEFT ?
         BNE     EXPL8            ;  .    .    .
;
EXPL32   LDA     #$01             ;  .    .    LOCK-UP ON GAME SEQUENCE
         STA     LOCK             ;  .    .    .
         BRA     EXPL8            ;  .    .    .
;
;
EXPL2    LDB     EXP.CNT,U        ;  .    EXPLOSION COMPLETE ?
         CMPB    EXP.SIZ,U        ;  .    .
         BLO     EXPL9            ;  .    .
;
EXPL8    CLR     EXP.FLG,U        ;  .    .    RESET EXPLOSION ENTRY
         DEC     CEXPLS           ;  .    .    .
;
EXPL9    LEAU    EXP.LEN,U        ;  .    BUMP TO NEXT ENTRY
         DEC     TEMP1            ;  .    .
         LBNE    EXPL1            ;  .    .
;
         JSR     SOUND            ;  UPDATE SOUND HANDLER
         BRA     SHPCNT0          ;  .
;
;
STAIL    PSHS    DP               ;  SHORT 'TAIL' ENTRY
         JSR     DPIO             ;  .    SET "DP" REGISTER TO I/O
;
SHPCNT0  JSR     INT3Q            ;  DISPLAY REMAINING SHIPS
         LDX     #$8038           ;  .    SET INITIAL POSITION
         STX     TEMP2            ;  .    .
;==========================================================================JJH
;        LDA     SHIPCNT          ;  CODE DELETED - REV. C CHANGES   ======JJH
;        BEQ     SHPCNT9          ;  .                               ======JJH
;        STA     TEMP1            ;  .                               ======JJH
;==========================================================================JJH
;
;==========================================================================JJH
         JSR     REVC.1           ;  CODE ADDED - REV. C CHANGES     ======JJH
         BEQ     SHPCNT9          ;  .                               ======JJH
         NOP                      ;  .                               ======JJH
         NOP                      ;  .                               ======JJH
         NOP                      ;  .                               ======JJH
;==========================================================================JJH
;
SHPCNT1  DEC     TEMP1            ;  .    DRAW THIS SHIP ?
         BEQ     SHPCNT9          ;  .    .
;
         LDA     TEMP2 + 1        ;  .    MOVE SHIP POSITION
         ADDA    #$06             ;  .    .
         STA     TEMP2 + 1        ;  .    .
;
         LDB     #$04             ;  .    DRAW SHIP COUNTER
         LDY     TEMP2            ;  .    .    SET POSITION
         LDX     #NSHIP           ;  .    .    SET PACKET ADDRESS
         JSR     APACK            ;  .    .    .
         BRA     SHPCNT1          ;  .    .    DO IT AGAIN
;
SHPCNT9  PULS    DP               ;  SET "DP" REGISTER TO RAM
         SETDP   $C8              ;  .
;
         LDA     <FRAME           ;  ROTATE FIREBALL
         ANDA    #$01             ;  .    FORM ROTATION ANGLE
         LSLA                     ;  .    .
         LSLA                     ;  .    .
         LSLA                     ;  .    .
         LDX     #MINE5           ;  .    FETCH SOURCE PACKET ADDRESS
         LDU     #PACKET2         ;  .    FETCH DESTINATION PACKET ADDRESS
         JSR     PROT             ;  .    ROTATE PACKET
;
         LDB     <CEXPLS          ;  END-OF-SEQUENCE
         BNE     TAIL1            ;  .    EXPLOSIONS DONE ?
         LDA     <ABORT           ;  .    GAME ABORTED ?
         BNE     TAIL0            ;  .    .
;
;==========================================================================JJH
;        LDB     <CMINES          ;  CODE DELETED - REV. C CHANGES   ======JJH
;        BNE     TAIL1            ;  .                               ======JJH
;        LDB     <MINMAX          ;  .                               ======JJH
;        BNE     TAIL1            ;  .                               ======JJH
;==========================================================================JJH
;
;==========================================================================JJH
         LDB     <CMINES          ;  CODE ADDED - REV. C CHANGES     ======JJH
         ORB     <MINMAX          ;  .                               ======JJH
         ORB     <LAYRSPD         ;  .                               ======JJH
         BNE     TAIL1            ;  .                               ======JJH
;==========================================================================JJH
;
TAIL0    ANDCC   #$FE             ;  SET 'C' TO '0' - LEVEL COMPLETE
         RTS                      ;  .    RETURN TO CALLER
;
TAIL1    ORCC    #$01             ;  SET 'C' TO '1' - MORE GAME LOGIC
         RTS                      ;  .    RETURN TO CALLER
;
;
;        SHIP EXPLOSION HANDLER
;        ----------------------
;
         SETDP   $D0
;
DSHPEXP  PSHS    A,X,Y            ;  SAVE ENTRY VALUES
         LDX     #WSHIPY          ;  POSITION TO CENETER OF EXPLOSION
         JSR     POSWID           ;  .
;
         LDA     0,S              ;  POSITION SHIP FRAGMENT
         STA     <T1LOLC          ;  .
         TFR     Y,D              ;  .
         JSR     POSITN           ;  .
;
         LDB     #P.SHPSZ         ;  DRAW SHIP FRAGMENT
         LDX     1,S              ;  .
         JSR     TPACK            ;  .
;
         PULS    A,X,Y,PC         ;  RETURN TO CALLER
;
;
;  SET EXPLOSION IN TABLE
;  ======================
;
;        ENTRY VALUES:
;             A = STARTING SIZE OF EXPLOSION
;             B = MAXIMUM SIZE OF EXPLOSION
;             X = POSITION OF EXPLOSION
;
;        RETURN VALUES:
;             SAME AS ENTRY VALUES
;
         SETDP   $C8
;        =====   ===
;
SETEXP   PSHS    A,B,X            ;  SAVE ENTRY VALUES
;
         LDX     #EXP.TBL         ;  FIND OPENING IN EXPLOSION TABLE
         LDA     #EXPLSN          ;  .
;
STEX1    LDB     EXP.FLG,X        ;  .    EXPLOSION ENTRY ACTIVE ?
         BEQ     STEX2            ;  .    .
;
         LEAX    EXP.LEN,X        ;  .    BUMP TO NEXT ENTRY
         DECA                     ;  .    .
         BNE     STEX1            ;  .    .
         BRA     STEX4            ;  .    .    NO ROOM FOR MORE EXPLOSIONS
;
STEX2    LDA     0,S              ;  ENTER EXPLOSION PARAMETERS
         ANDA    #$80             ;  .    SET EXPLOSION FLAG
         INCA                     ;  .    .
         STA     EXP.FLG,X        ;  .    .
;
         BPL     STEX3            ;  .    .    EXPLOSION FATAL TO SWEEPER ?
         INC     <ABORT           ;  .    .    .    SET ABORT FLAG
;
STEX3    LDA     0,S              ;  .    SET STARTING EXPLOSION SIZE
         ANDA    #$7F             ;  .    .
         STA     EXP.CNT,X        ;  .    .
;
         LDA     1,S              ;  .    SET MAXIMUM EXPLOSION SIZE
         STA     EXP.SIZ,X        ;  .    .
;
         LDD     2,S              ;  .    SET EXPLOSION CENTRE
         STD     EXP.YX,X         ;  .    .
;
         INC     <CEXPLS          ;  .    BUMP ACTIVE EXPLOSION COUNTER
         INC     EXPLSND          ;  .    TRIGGER EXPLOSION SOUND
;
STEX4    PULS    A,B,X,PC         ;  RETURN TO CALLER
;
;
;  FORM 'YX' DISPLACEMENTS
;  =======================
;
;        ENTRY VALUES:
;             A = SPEED VECTOR
;             B = DIRECTION
;
;        RETURN VALUES:
;             Y = 'Y' DISPLACEMENT VALUE (MSB/LSB)
;             X = 'X' DISPLACEMENT VALUE (MSB/LSB)
;
         SETDP   $C8
;        =====   ===
;
MLTY8    PSHS    A,B,X,Y          ;  SAVE ENTRY VALUES
;
         JSR     LNROT            ;  CALCULATE SHIP DISPLACEMENTS
         STA     4,S              ;  .
;
         SEX                      ;  .    FORM 'X' DISPLACEMENT (8X)
         ASLB                     ;  .    .    MULTIPLY BY EIGHT
         ROLA                     ;  .    .    .
         ASLB                     ;  .    .    .
         ROLA                     ;  .    .    .
         ASLB                     ;  .    .    .
         ROLA                     ;  .    .    .
         STD     2,S              ;  .    .    .
;
         LDB     4,S              ;  .    FORM 'Y' DISPLACEMENT (8X)
         SEX                      ;  .    .    EXTEND SIGN
         ASLB                     ;  .    .    MULTIPLY BY EIGHT
         ROLA                     ;  .    .    .
         ASLB                     ;  .    .    .
         ROLA                     ;  .    .    .
         ASLB                     ;  .    .    .
         ROLA                     ;  .    .    .
         STD     4,S              ;  .    .    .
;
         PULS    A,B,X,Y,PC       ;  .    RETURN TO CALLER
;
;
;
MLTY16   PSHS    A,B,X,Y          ;  SAVE ENTRY VALUES
;
         BSR     MLTY8            ;  CALCULATE 16X SHIP DISPLACEMENTS
;
         LDD     -4,S             ;  .    FORM 'Y' DISPLACEMENT (16X)
         ASLB                     ;  .    .    MULTIPLY BY TWO
         ROLA                     ;  .    .    .
         STD     4,S              ;  .    .    .
;
         LDD     -6,S             ;  .    FORM 'X' DISPLACEMENT (16X)
         ASLB                     ;  .    .    MULTIPLY BY TWO
         ROLA                     ;  .    .    .
         STD     2,S              ;  .    .    .
;
         PULS    A,B,X,Y,PC       ;  .    RETURN TO CALLER
;
;
;  INITIALIZE STAR-SWEEPER
;  =======================
;
;
SWPINT   LDA     #$D0             ;  SET "DP" REGISTER TO I/O
         TFR     A,DP             ;  .
         SETDP   $D0              ;  .
;
         JSR     INTPSG           ;  INITIALIZE SOUND GENERATOR
;
         LDA     #$C8             ;  SET "DP" REGISTER TO RAM
         TFR     A,DP             ;  .
         SETDP   $C8              ;  .
;
         CLR     <TMR1            ;  CLEAR PROGRAMMABLE TIMERS
         CLR     <TMR2            ;  .
         CLR     <TMR3            ;  .
         CLR     <TMR4            ;  .
;
         LDX     #BLT.TBL         ;  CLEAR TABLES
CLROBJ   CLR     X+               ;  .
         CMPX    #FSTAR           ;  .
         BNE     CLROBJ           ;  .
;
         LDD     #$0000           ;  CLEAR MINE-LAYER PARAMETERS
         STD     <WLAYRY          ;  .
         STD     <WLAYRX          ;  .
         STD     <DLAYRY          ;  .
         STD     <DLAYRX          ;  .
         STA     <LAYRSPD         ;  .    CLEAR LAYER SPEED
;
         STA     <ABORT           ;  RESET ABORT FLAG
         STA     <LOCK            ;  RESET LOCK-UP FLAG
;
         STA     <CBULLET         ;  CLEAR ACTIVE BULLET COUNTER
         STA     <CMINES          ;  CLEAR ACTIVE MINE COUNTER
         STA     <CEXPLS          ;  CLEAR ACTIVE EXPLOSION COUNTER
;
         STA     SEXP1            ;  SET SHIP EXPLOSION COUNTERS
         LDB     #$40             ;  .    SHIP EXPLOSION DURATION
         STB     SEXPCNT          ;  .    .
;
         STA     <MINMAX          ;  RESET MINE-SEED COUNTER
         STA     <RESEED          ;  RESET MINE RE-SEEDING COUNTER
;
         LDX     #$0800           ;  SET LONG TIME-OUT DELAY
         STX     TIMEOUT          ;  .
;
         LDA     #$07             ;  SET MINE RE-SEED COUNT
         STA     <RSMINES         ;  .
;
         LDX     #BEGLAYR         ;  SET-UP FOR FIRST MINE-LAYER MODIFICATION
         STX     <TMR3 + 1        ;  .
;
;
;  RESET STAR-SWEEPER PARAMETERS
;  =============================
;
;
SWPRST   LDD     #0               ;  CLEAR STAR-SWEEPER PARAMETERS
         STD     <WSHIPY          ;  .    WORKING POSITIONS
         STD     <WSHIPX          ;  .    .
;
HSWPRST  LDD     #$0000           ;  .    SHIP ROTATION
         STA     <SHIPROT         ;  .    .
         STD     <DSHIPY1         ;  .    AXIS #1 DISPLACEMENTS
         STD     <DSHIPX1         ;  .    .
         STA     <SHIPSPD1        ;  .    .    CLEAR SHIP SPEED
         STA     <SHIPDIR1        ;  .    .    CLEAR SHIP DIRECTION
         STD     <DSHIPY2         ;  .    AXIS #2 DISPLACEMENTS
         STD     <DSHIPX2         ;  .    .
         STA     <SHIPSPD2        ;  .    .    CLEAR SHIP SPEED
         STA     <SHIPDIR2        ;  .    .    CLEAR SHIP DIRECTION
;
SWPROT   LDA     <SHIPROT         ;  ROTATE SWEEPER
         LDX     #NSHIP           ;  .
         LDU     #PACKET1         ;  .
         JSR     PROT             ;  .
;
         LDA     #$7F             ;  CALCULATE NEW BULLET DISPLACEMENTS
         LDB     <SHIPROT         ;  .    FETCH DIRECTION
         JSR     MLTY16           ;  .    FORM DISPLACEMENTS
         STY     DBLTY            ;  .    .    SAVE 'Y' DISPLACEMENT
         STX     DBLTX            ;  .    .    SAVE 'X' DISPLACEMENT
;
         RTS                      ;  RETURN TO CALLER
;
;
;  FALL THRU STAR FIELD AS LEAD-IN TO NEXT SEQUENCE
;  ================================================
;
         SETDP   $C8
;        =====   ===
;
FALL     PSHS    X,Y              ;  SAVE THE INDEX REGISTERS
         PSHS    DP               ;  SAVE THE ENTRY "DP"
;
         JSR     DPIO             ;  SET "DP" REGISTER TO I/O
         JSR     INTPSG           ;  CLEAR-OUT SOUND
;
         PULS    DP               ;  SET "DP" REGISTER TO RAM
;
         LDA     #$A0             ;  SET MINIMUM FALL-THRU TIME
         STA     <TEMP1           ;  .
;
FALL1    LDA     <WSHIPY          ;  MOVE SHIP TO CENTER POSITION
         BEQ     FALL2            ;  .    'Y' AXIS
         BMI     FALL10           ;  .    .
         DECA                     ;  .    .    CURRENT POSITION POSITIVE
         BRA     FALL11           ;  .    .    .
;
FALL10   INCA                     ;  .    .    CURRENT POSITION NEGATIVE
FALL11   STA     <WSHIPY          ;  .    .    .
         CLR     <WSHIPY + 1      ;  .    .    .
;
FALL2    LDA     <WSHIPX          ;  .    'X' AXIS
         BEQ     FALL3            ;  .    .
         BMI     FALL20           ;  .
         DECA                     ;  .    .    CURRENT POSITION POSITIVE
         BRA     FALL21           ;  .    .    .
;
FALL20   INCA                     ;  .    .    CURRENT POSITION NEGATIVE
FALL21   STA     <WSHIPX          ;  .    .    .
         CLR     <WSHIPX + 1      ;  .    .    .
;
FALL3    LDA     <SHIPROT         ;  .    ROTATION
         BEQ     FALL4            ;  .    .
         CMPA    #$1F             ;  .    .
         BGT     FALL30           ;  .    .    ROTATE LEFT
         DECA                     ;  .    .    .
         BRA     FALL31           ;  .    .    .
;
FALL30   INCA                     ;  .    .    ROTATE RIGHT
FALL31   ANDA    #$3F             ;  .    .    .
         STA     <SHIPROT         ;  .    .    .
;
FALL4    JSR     SHPONLY          ;  ROTATE AND DISPLAY STAR-SWEEPER
;
         LDX     #ZSTAR           ;  ADVANCE STAR FIELD
         LDB     #$08             ;  .
FALL5    LDA     0,X              ;  .
         ADDA    #$03             ;  .
         STA     X+               ;  .
         DECB                     ;  .
         BNE     FALL5            ;  .
;
         PSHS    DP               ;  SET "DP" REGISTER TO I/O
         JSR     DPIO             ;  .
         SETDP   $D0              ;  .
;
         JSR     SCRBTH           ;  DISPLAY PLAYER SCORES
;
         CLRB                     ;  DISPLAY STAR FIELDS
         LDA     #$20             ;  .
         JSR     D.STARS          ;  .
         JSR     F.STARS          ;  .
;
         PULS    DP               ;  SET "DP" REGISTER TO RAM
         SETDP   $C8              ;  .
;
FALL91   LDA     <WSHIPY          ;  FALL-THRU COMPLETED ?
         LBNE    FALL1            ;  .
         LDA     <WSHIPX          ;  .
         LBNE    FALL1            ;  .
         LDA     <SHIPROT         ;  .
         LBNE    FALL1            ;  .
         DEC     <TEMP1           ;  .    END-OF-SEQUENCE ?
         LBNE    FALL1            ;  .    .
;
         JSR     SWPINT           ;  RESET VALUES
         PULS    X,Y,PC           ;  .    RETURN TO CALLER
;
;
;  INITIALIZE STAR FIELDS
;  ======================
;
;
I.STARS  LDX     #STAR.1
         LDY     #FSTAR
         LDU     #ZSTAR
;
         LDB     #$08
         LDA     #$16
;
ST.101   STX     Y++
         LEAX    8,X
         STA     U+
         ADDA    #$0F
         DECB
         BNE     ST.101
         RTS
;
;
;  ZOOM STAR FIELDS FORWARD AND DISPLAY
;  ====================================
;
;        ENTRY VALUES
;             A = STAR FIELD LIMIT
;             B = ZOOM VALUE
;
;        RETURN VALUES
;             SAME AS ENTRY
;
         SETDP   $D0
;        =====   ===
;
F.STARS  PSHS    A,B,X,DP         ;  SAVE ENTRY VALUES
;
         LDX     #ZSTAR           ;  BUMP ZOOM VALUES
         LDA     #$08             ;  .
ST.201   INC     X+               ;  .
         DECA                     ;  .
         BNE     ST.201           ;  .
;
         BRA     DSTARS1          ;  DISPLAY NEW STAR FIELDS
;
;
;  DISPLAY STAR FIELDS
;  ===================
;
;        ENTRY VALUES
;             A = STAR FIELD INNER LIMIT
;             B = ZOOM VALUE
;
;        RETURN VALUES
;             SAME AS ENTRY
;
         SETDP   $D0
;        =====   ===
;
D.STARS  PSHS    A,B,X,DP         ;  SAVE ENTRY VALUES
;
DSTARS1  LDA     #$D0             ;  SET "DP" REGISTER TO I/O
         TFR     A,DP             ;  .
;
         LDA     #$09             ;  SET FIELD COUNT
         PSHS    A                ;  .
;
ST.000   DEC     0,S              ;  MOVE TO NEXT STAR FIELD
         BNE     ST.010           ;  .
;
         JSR     ZERGND           ;  ZERO INTEGRATORS
;
         PULS    A                ;  RETURN TO CALLER
         PULS    A,B,X,DP,PC      ;  .
;
;
ST.010   JSR     ZERGND           ;  TURN-OFF CRT GUN AND ZERO INTEGRATORS
;
         LDA     #$03             ;  SET DOT COUNT
         STA     LIST             ;  .
;
         LDA     0,S              ;  FETCH ZOOM VALUE FOR THIS FIELD
         DECA                     ;  .
         LDX     #ZSTAR           ;  .
         LDB     A,X              ;  .
         ANDB    #$7F             ;  .
;
         CMPB    1,S              ;  HAS STAR FIELD REACHED ITS LIMIT ?
         BLS     ST.000           ;  .    IF SO, FETCH NEXT STAR FIELD
         SUBB    2,S              ;  .    MODIFY VECTOR LENGTH WITH ZOOM VALUE
         BLE     ST.000           ;  .    .
         STB     <T1LOLC          ;  .    SET VECTOR LENGTH
;
         LDX     #FSTAR           ;  FETCH STAR FIELD POINTER
         LSLA                     ;  .
         LDX     A,X              ;  .
;
         JSR     INTMAX           ;  SET BRIGHTNESS
         JSR     DIFDOT           ;  DRAW STAR FIELD
         BRA     ST.000           ;  SET-UP FOR NEXT STAR-FIELD
;
;
;  DISPLAY STAR FIELDS FOR HYPERSPACE SEQUENCE
;  ===========================================
;
;        ENTRY VALUES
;             A = OVER-RIDING INTENSITY
;             B = ZOOM VALUE
;
;        RETURN VALUES
;             SAME AS ENTRY
;
         SETDP   $D0
;        =====   ===
;
H.STARS  PSHS    A,B,X,DP         ;  SAVE ENTRY VALUES
;
         LDA     #$D0             ;  SET "DP" REGISTER TO I/O
         TFR     A,DP             ;  .
;
         LDA     #$09             ;  SET FIELD COUNT
         PSHS    A                ;  .
;
ST.200   DEC     0,S              ;  MOVE TO NEXT STAR FIELD
         BNE     ST.210           ;  .
;
         JSR     ZERGND           ;  ZERO INTEGRATORS
;
         PULS    A                ;  RETURN TO CALLER
         PULS    A,B,X,DP,PC      ;  .
;
;
ST.210   JSR     ZERGND           ;  TURN-OFF CRT GUN AND ZERO INTEGRATORS
;
         LDA     #$03             ;  SET DOT COUNTER
         STA     LIST             ;  .
;
         LDX     #WSHIPY          ;  POSITION FOR SWEEPER CENTER
         JSR     POSWID           ;  .
;
         LDB     0,S              ;  FETCH ZOOM VALUE FOR THIS FIELD
         LSLB                     ;  .
         LSLB                     ;  .
         ADDB    2,S              ;  .
         BLE     ST.200           ;  .    SKIP THIS STAR FIELD ?
         ANDB    #$7F             ;  .    SET VECTOR LENGTH
         STB     <T1LOLC          ;  .    .
;
         LDX     #FSTAR           ;  FETCH STAR FIELD POINTER
         LDA     0,S              ;  .
         DECA                     ;  .
         LSLA                     ;  .
         LDX     A,X              ;  .
;
         JSR     INTMAX           ;  SET BRIGHTNESS
         JSR     DIFDOT           ;  DRAW STAR FIELD
         BRA     ST.200           ;  SET-UP FOR NEXT STAR-FIELD
;
;
;  DETERMINE RANDOM 'Y:X' POSITION
;  ===============================
;
         SETDP   $C8
;        =====   ===
;
RANPOS   PSHS    D                ;  SAVE ENTRY VALUES
;
         JSR     RANDOM           ;  'Y' POSITION
         STA     0,S              ;  .
;
RANPOS1  JSR     RANDOM           ;  'X' POSITION
         CMPA    #$60             ;  .
         BGT     RANPOS1          ;  .
         CMPA    #$A0             ;  .
         BLT     RANPOS1          ;  .
         STA     1,S              ;  .
;
         PULS    D                ;  RETURN TO CALLER
         RTS                      ;  .
;
;
;  SELECT RANDOM SEED/MINE ENTRY
;  =============================
;
;        ENTRY VALUES:
;             A = MINE TYPE
;             B = MINE SIZE
;
;        RETURN VALUES:
;             SAME AS ENTRY VALUES
;
         SETDP   $C8
;        =====   ===
;
RANSEED  PSHS    A,B,X,Y,U        ;  SAVE ENTRY VALUES
;
         LDA     <MINMAX          ;  ALL THE MINES DISPLAYED ?
         LBEQ    RANS9            ;  .
         DEC     <MINMAX          ;  .
;
         JSR     RANDOM           ;  SET-UP FOR RANDOM ENTRY
         ANDA    #$1F             ;  .    ENTRY MUST BE BETWEEN $00 AND $1B
RANS1    STA     <ETMP9           ;  .    .
         CMPA    #27              ;  .    .
         BLS     RANS2            ;  .    .
         SUBA    #$4              ;  .    .    TOO BIG - FUDGE DOWN
         BRA     RANS1            ;  .    .    .
;
RANS2    LDB     #MIN.LEN         ;  .    CALCULATE ACTUAL MINE ENTRY
         MUL                      ;  .    .
         ADDD    #MIN.TBL         ;  .    .
         TFR     D,U              ;  .    .
;
         LDA     MIN.FLG,U        ;  .    MINE ENTRY ACTIVE ?
         ANDA    #$C0             ;  .    .    MOVING TO INITIAL POSITION OR IDLE ?
         BNE     RANS3            ;  .    .
         INC     <ETMP9           ;  .    .    TRY ANOTHER ENTRY
         LDA     <ETMP9           ;  .    .    .
         CMPA    #27              ;  .    .    .    STILL WITHIN RANGE ?
         BLE     RANS2            ;  .    .    .    .
;
         CLR     <ETMP9           ;  .    .    .    OUT-OF-RANGE
         CLRA                     ;  .    .    .    .
         BRA     RANS2            ;  .    .    .    .
;
RANS3    LDA     0,S              ;  .    SET MINE TYPE
         STA     MIN.PAK,U        ;  .    .
;
         LDX     #MINSCR          ;  .    SELECT MINE'S BASIC SCORE
         ASLA                     ;  .    .
         LDY     A,X              ;  .    .
         STY     <ETMP7           ;  .    .
;
         LDB     #$20             ;  .    SET ZOOM FLAG
         STB     MIN.FLG,U        ;  .    .
;
         LDX     #MINSPD          ;  .    SELECT MINE SPEED
         LDA     1,S              ;  .    .    FETCH MINE SIZE
         LDB     A,X              ;  .    .
         STB     <ETMP9           ;  .    .
;
         LDX     #MINSZ           ;  .    SET MINE SIZE
         LDB     A,X              ;  .    .
         STB     MIN.T1,U         ;  .    .
         STA     MIN.BSZ,U        ;  .    .
;
         LDX     #MINBOX          ;  .    SELECT COLLISION BOX PARAMETERS
         LSLA                     ;  .    .
         LDY     A,X              ;  .    .
         STY     MIN.BOX,U        ;  .    .
;
         LDX     #MINSSCR         ;  .    SELECT MINE'S SCORE VS. SPEED VALUE
         LDY     A,X              ;  .    .
         STY     <ETMP5           ;  .    .
;
         CMPA    #$06             ;  .    SET 'POP' SOUND
         BNE     RANS4            ;  .    .    BIG MINES ONLY
         INC     POPSND           ;  .    .    .
;
RANS4    LDA     <ETMP5 + 1       ;  .    CALCULATE MINE SCORE VALUE
         ADDA    <ETMP7 + 1       ;  .    .    LSB
         DAA                      ;  .    .    .
         STA     MIN.SCR+1,U      ;  .    .    .
         LDA     <ETMP5           ;  .    .    MSB
         ADCA    <ETMP7           ;  .    .    .
         DAA                      ;  .    .    .
         STA     MIN.SCR,U        ;  .    .    .
;
         LDA     <ETMP9           ;  .    CALCULATE MINE DISPLACEMENTS
         JSR     CONE             ;  .    .    SELECT ANGLE
         JSR     MLTY8            ;  .    .    FORM DISPLACEMENTS
         STY     MIN.YD,U         ;  .    .    .    SAVE 'Y' DISPLACEMENTS
         STX     MIN.XD,U         ;  .    .    .    SAVE 'X' DISPLACEMENTS
;
         INC     <CMINES          ;  .    BUMP ACTIVE MINE COUNTER
;
         LDA     <RESEED          ;  .    RESET FORCED MINE GROWTH TIMER
         BEQ     RANS9            ;  .    .    SKIP IF NOT RE-SEEDED
;
         LDA     #$FF             ;  .    .    RESET TIMER #1
         STA     <TMR1            ;  .    .    .
         LDA     #$03             ;  .    .    RESET FORCE COUNTER
         STA     <FRCTIME         ;  .    .    .
;
RANS9    PULS    A,B,X,Y,U,PC     ;  RETURN TO CALLER
;
;
;  SELECT DIRECTION WITHIN LIMIT CONES
;  ===================================
;
;        ENTRY VALUES
;             NONE REQUIRED
;
;        RETURN VALUES
;             B = RANDOM ANGLE WITHIN LIMIT CONES
;
         SETDP   $C8
;        =====   ===
;
CONE     PSHS    A,B              ;  SAVE ENTRY VALUES
;
         JSR     RANDOM           ;  FETCH RANDOM NUMBER
         TFR     A,B              ;  .    SET-UP FOR CONE TESTS
         ANDA    #$30             ;  .    .
         STA     1,S              ;  .    .
;
         ANDB    #$0F             ;  LIMIT DIRECTION WITHIN CONE
         CMPB    #$04             ;  .    TEST AGAINST LOW-END LIMIT
         BHS     CONE1            ;  .    .
         ADDB    #$04             ;  .    .    MOVE LOW-END UP
;
CONE1    CMPB    #$0C             ;  .    TEST AGAINST UPPER-END LIMIT
         BLS     CONE2            ;  .    .
         SUBB    #$04             ;  .    .    MOVE UPPER-END DOWN
;
CONE2    ADDB    1,S              ;  ADD QUADRANT TO DIRECTION
         STB     1,S              ;  .
         PULS    A,B,PC           ;  .    RETURN TO CALLER
;
;
;  POSITION AND DRAW DOT
;  =====================
;
;        ENTRY VALUES
;             Y = ABSOLUTE 'YX' POSITION
;
;        RETURN VALUES
;             SAME AS ENTRY VALUES
;
;
         SETDP   $D0
;        =====   ===
;
ADOT     PSHS    A,B              ;  SAVE ENTRY VALUES
;
         LDA     #$7F             ;  POSITION DOT
         STA     <T1LOLC          ;  .    SET VECTOR LENGTH
         TFR     Y,D              ;  .    SET 'YX' POSITION
         JSR     DOTAB            ;  .    .
;
         JSR     ZERGND           ;  ZERO INTEGRATORS
;
         PULS    A,B,PC           ;  RETURN TO CALLER
;
;
;  POSITION WITH 16-BIT VALUES AND DRAW DOT
;  ========================================
;
;        ENTRY VALUES
;             Y = POINTER TO 32-BIT ABSOLUTE 'YX' POSITION
;
;        RETURN VALUES
;             SAME AS ENTRY VALUES
;
;
         SETDP   $D0
;        =====   ===
;
DDOT     PSHS    A,B              ;  SAVE ENTRY VALUES
;
         LDA     #$7F             ;  POSITION DOT
         STA     <T1LOLC          ;  .    SET VECTOR LENGTH
;
         LDA     0,Y              ;  .    SET 'YX' POSITION
         LDB     2,Y              ;  .    .
         JSR     DOTAB            ;  .    .
;
         JSR     ZERGND           ;  ZERO INTEGRATORS
;
         PULS    A,B,PC           ;  RETURN TO CALLER
;
;
;  POSITION AND DRAW PACKET
;  ========================
;
;        ENTRY VALUES
;             B = ZOOM VALUE
;             X = PACKET ADDRESS
;             Y = ABSOLUTE 'YX' POSITION
;
;        RETURN VALUES
;             SAME AS ENTRY VALUES
;
;
         SETDP   $D0
;        =====   ===
;
APACK    PSHS    A,B,X            ;  SAVE ENTRY VALUES
;
         TFR     Y,D              ;  .    SET 'YX' POSITION
         JSR     POSITD           ;  .    .
;
         LDB     1,S              ;  DRAW PACKET
         JSR     TPACK            ;  .    DRAW PACKET
;
         PULS    A,B,X,PC         ;  RETURN TO CALLER
;
;
;  POSITION WITH 16-BIT VALUES AND DRAW PACKET
;  ===========================================
;
;        ENTRY VALUES
;             B = ZOOM VALUE
;             X = ADDRESS OF PACKET
;             Y = POINTER TO 32-BIT ABSOLUTE 'YX' POSITION
;
;        RETURN VALUES
;             SAME AS ENTRY VALUES
;
;
         SETDP   $D0
;        =====   ===
;
DPACK    PSHS    A,B,X            ;  SAVE ENTRY VALUES
;
         TFR     Y,X              ;  POSITION PACKET
         JSR     POSWID           ;  .
;
         LDB     1,S              ;  DRAW PACKET
         LDX     2,S              ;  .    FETCH PACKET POINTER
         JSR     TPACK            ;  .    DRAW PACKET
;
         PULS    A,B,X,PC         ;  RETURN TO CALLER
;
;
;  DRAW COMPACT RASTER MESSAGE
;  ===========================
;
;        ENTRY VALUES
;             U = ADDRESS OF MESSAGE
;
;        RETURN VALUES
;             SAME AS ENTRY VALUES
;
;
         SETDP   $D0
;        =====   ===
;
MESS     PSHS    A,B,X,U          ;  SAVE ENTRY VALUES
;
         LDA     #$7F             ;  POSITION PACKET
         STA     <T1LOLC          ;  .    SET VECTOR LENGTH
;
         JSR     RSTSIZ           ;  DRAW RASTER MESSAGE
;
         PULS    A,B,X,U,PC       ;  RETURN TO CALLER
;
;
;  POSITION AND DRAW RASTER MESSAGE
;  ================================
;
;        ENTRY VALUES
;             U = ADDRESS OF MESSAGE
;             Y = ABSOLUTE 'YX' POSITION
;
;        RETURN VALUES
;             SAME AS ENTRY VALUES
;
;
         SETDP   $D0
;        =====   ===
;
AMESS    PSHS    A,B,X,U          ;  SAVE ENTRY VALUES
;
         TFR     Y,D              ;  .    SET 'YX' POSITION
         JSR     POSITD           ;  .    .
;
         JSR     RASTER           ;  .    DRAW PACKET
;
         PULS    A,B,X,Y,PC       ;  RETURN TO CALLER
;
;
;  DRAW ACTIVE PLAYER'S SCORES
;  ===========================
;
         SETDP   $D0
;        =====   ===
;
SCRMES   JSR     INTMAX           ;  SET MAXIMUM INTENSITY
;
         LDD     #$FC38           ;  SET RASTER SIZE
         STD     SIZRAS           ;  .
;
         LDA     ACTPLY           ;  FETCH POSITION OF SCORE
         LDY     #PSCRPTR         ;  .
         LDY     A,Y              ;  .
;
         LDU     #SCRPTR          ;  FETCH ADDRESS OF SCORE
         LDU     A,U              ;  .
         BSR     AMESS            ;  .
;
         RTS                      ;  RETURN TO CALLER
;
;
;  DRAW BOTH PLAYER'S SCORES
;  =========================
;
         SETDP   $D0
;        =====   ===
;
SCRBTH   JSR     INTMAX           ;  SET MAXIMUM INTENSITY
;
         LDD     #$FC38           ;  SET RASTER SIZE
         STD     SIZRAS           ;  .
;
         LDY     #PSCOR1          ;  DRAW PLAYER #1 SCORE
         LDU     #SCOR1           ;  .
         BSR     AMESS            ;  .
;
         LDA     PLAYRS           ;  ONE OR TWO PLAYERS ?
         BEQ     BOTH9            ;  .
         LDY     #PSCOR2          ;  .    DRAW PLAYER #2 SCORE
         LDU     #SCOR2           ;  .    .
         BSR     AMESS            ;  .    .
;
BOTH9    RTS                      ;  RETURN TO CALLER
;
;
;  WAIT FOR FRAME BOUNDARY AND INPUT FROM CONTROLLER
;  =================================================
;
;
WAIT     JSR     FRWAIT           ;  WAIT FOR FRAME BOUNDARY
         PSHS    DP               ;  .
         SETDP   $D0              ;  .
;
         JSR     DEFLOK           ;  PREVENT SCAN COLLAPSE
         JSR     SCRMES           ;  DRAW PLAYER'S SCORES
;
         LDA     SBTN             ;  INPUT CONSOLE SWITCHES
         JSR     DBNCE            ;  .
         LDD     SJOY             ;  READ JOYSTICK
         STD     EPOT0            ;  .    ENABLE BOTH POTS ON JOYSTICK #1
         STD     EPOT2            ;  .    ENABLE BOTH POTS ON JOYSTICK #2
         JSR     JOYBIT           ;  .
;
         LDA     #$C8             ;  SET "DP" REGISTER TO RAM
         TFR     A,DP             ;  .
         SETDP   $C8              ;  .
;
TIMER    LDA     <TMR1            ;  DOWN-COUNT TIMER #1
         BEQ     DCT2             ;  .    IS TIMER INHIBITED ?
         DEC     <TMR1            ;  .
         BNE     DCT2             ;  .
         JSR     [TMR1+1]         ;  .    EXECUTE THE USER PROGRAM
;
DCT2     LDA     <TMR2            ;  DOWN-COUNT TIMER #2
         BEQ     DCT3             ;  .    IS TIMER INHIBITED ?
         DEC     <TMR2            ;  .
         BNE     DCT3             ;  .
         JSR     [TMR2+1]         ;  .    EXECUTE THE USER PROGRAM
;
DCT3     LDA     <TMR3            ;  DOWN-COUNT TIMER #3
         BEQ     DCT4             ;  .    IS TIMER INHIBITED ?
         DEC     <TMR3            ;  .
         BNE     DCT4             ;  .
         JSR     [TMR3+1]         ;  .    EXECUTE THE USER PROGRAM
;
DCT4     LDA     <TMR4            ;  DOWN-COUNT TIMER #4
         BEQ     WAIT9            ;  .    IS TIMER INHIBITED ?
         DEC     <TMR4            ;  .
         BNE     WAIT9            ;  .
         JSR     [TMR4+1]         ;  .    EXECUTE THE USER PROGRAM
;
WAIT9    PULS    DP,PC            ;  RETURN TO CALLER
;
;
;  HANDLE BULLET VS. MINE COLLISIONS
;  =================================
;
         SETDP   $C8
;        =====   ===
;
CBULMIN  LDA     <CBULLET         ;  ACTIVE BULLETS ?
         BEQ     CBUL20           ;  .
;
         LDY     #BLT.TBL         ;  FIND BULLET TO COMPARE WITH
         LDA     #BULLETS         ;  .
         STA     <TEMP1           ;  .
;
CBUL1    TST     BLT.FLG,Y        ;  .    BULLET ACTIVE ?
         BNE     CBUL3            ;  .    .
;
CBUL2    LEAY    BLT.LEN,Y        ;  .    BUMP TO NEXT ENTRY
         DEC     <TEMP1           ;  .    .    END OF TABLE ?
         BNE     CBUL1            ;  .    .    .
CBUL20   RTS                      ;  .    RETURN - NO ACTIVE BULLET FOUND
;
;
CBUL3    LDA     <LAYRSPD         ;  COMPARE BULLET VS. MINE-LAYER
         BEQ     CBUL30           ;  .    IS MINE-LAYER OFF-SCREEN ?
;
         PSHS    Y                ;  .    FINE COLLISION TEST
         LDA     BLT.WY,Y         ;  .    .    FETCH BULLET POSITION
         LDB     BLT.WX,Y         ;  .    .    .
         TFR     D,X              ;  .    .    .
         LDD     #P.LYRBX         ;  .    .    FETCH MINE-LAYER BOX SIZE
         LDY     <LAYRYX          ;  .    .    FETCH MINE-LAYER POSITION
         JSR     BXTEST           ;  .    .    DO BOX TEST
         PULS    Y                ;  .    .    .    FAILED COLLISION ?
         BCC     CBUL30           ;  .    .    .    .
;
         CLR     BLT.FLG,Y        ;  .    COLLISION DETECTED - RESET CONDITIONS
         CLR     <LAYRSPD         ;  .    .    RESET MINE LAYER
         CLR     <TMR3            ;  .    .    .    INSERTION TIMER
;
         LDX     #SCRPTR          ;  .    .    ADD POINTS TO ACTIVE PLAYER SCORE
         LDA     <ACTPLY          ;  .    .    .    PLAYER #1 OR #2 ?
         LDX     A,X              ;  .    .    .    .
         LDD     #$1000           ;  .    .    .
         JSR     SCRADD           ;  .    .    .
;
         LDA     #$30             ;  .    .    ENTER COLLISION IN EXPLOSION TABLE
         LDB     #$70             ;  .    .    .    SET EXPLOSION SIZE
         LDX     <LAYRYX          ;  .    .    .    SET EXPLOSION CENTRE
         JSR     SETEXP           ;  .    .    .    SET EXPLOSION IN TABLE
;
         DEC     <CBULLET         ;  .    .    DECREMENT ACTIVE BULLET COUNTER
         BRA     CBUL20           ;  .    .    .
;
;
CBUL30   LDU     #MIN.TBL         ;  FIND MINE TO COMPARE AGAINST BULLET
         LDA     #MINES           ;  .
         STA     <TEMP2           ;  .
;
CBUL4    LDA     MIN.FLG,U        ;  .    MINE ACTIVE ?
         ANDA    #$3F             ;  .    .
         BNE     CBUL6            ;  .    .
;
CBUL5    LEAU    MIN.LEN,U        ;  .    BUMP TO NEXT ENTRY
         DEC     <TEMP2           ;  .    .    END OF TABLE ?
         BNE     CBUL4            ;  .    .    .
         BRA     CBUL2            ;  .    NO ACTIVE MINE FOUND - NEXT BULLET
;
CBUL6    PSHS    Y                ;  .    FINE COLLISION TEST
         LDA     BLT.WY,Y         ;  .    .    FETCH BULLET POSITION
         LDB     BLT.WX,Y         ;  .    .    .
         TFR     D,X              ;  .    .    .
         LDA     MIN.YW,U         ;  .    .    FETCH MINE POSITION
         LDB     MIN.XW,U         ;  .    .    .
         TFR     D,Y              ;  .    .    .
         LDD     MIN.BOX,U        ;  .    .    FETCH MINE BOX SIZE
         JSR     BXTEST           ;  .    .    DO BOX TEST
         PULS    Y                ;  .    .    .    FAILED COLLISION ?
         BCC     CBUL5            ;  .    .    .    .
;
         LDA     MIN.PAK,U        ;  .    COLLISION DETECTED
         ANDA    #$02             ;  .    .     FIREBALL RELEASED ?
         BEQ     CBUL7            ;  .    .     .
;
;
         LDX     #SCRPTR          ;  'FIRE-BALL' RELEASED
         LDA     <ACTPLY          ;  .    ADD MINE TO ACTIVE PLAYER SCORE
         LDX     A,X              ;  .    .    PLAYER #1 OR #2 ?
         LDD     MIN.SCR,U        ;  .    .
         JSR     SCRADD           ;  .    .
;
         INC     FIRSND           ;  .    SET 'FIRE-BALL' SOUND
;
         LDA     MIN.YW,U         ;  .    SET SMALL EXPLOSION
         LDB     MIN.XW,U         ;  .    .    SET POSITION
         TFR     D,X              ;  .    .    .
         LDA     MIN.SIZ,U        ;  .    .    SET STARTING SIZE
         LDB     #$20             ;  .    .    SET MAXIMUM SIZE
         JSR     SETEXP           ;  .    .    .
;
         LDD     #$0110           ;  .    CHANGE SCORE VALUE FOR FIRE-BALL
         STD     MIN.SCR,U        ;  .    .
;
         LDA     <WSHIPY          ;  .    CALCULATE DELTA YX VALUES
         SUBA    MIN.YW,U         ;  .    .
         LDB     <WSHIPX          ;  .    .
         SUBB    MIN.XW,U         ;  .    .
;
         JSR     CMPASS           ;  .    CALCULATE ANGLE TO SHIP
         SUBA    #$10             ;  .    .
         TFR     A,B              ;  .    .
;
         PSHS    Y                ;  .    CALCULATE NEW DISPLACEMENTS
         LDA     #$3F             ;  .    .    SET FIRE-BALL SPEED
         JSR     MLTY8            ;  .    .    FETCH NEW DISPLACEMENTS
;
         STY     MIN.YD,U         ;  .    .    SAVE NEW 'Y' DISPLACEMENT
         STX     MIN.XD,U         ;  .    .    SAVE NEW 'X' DISPLACEMENT
         PULS    Y                ;  .    .
;
         CLR     BLT.FLG,Y        ;  .    RESET BULLET FLAG
;
         LDD     #$0404           ;  .    SET NEW COLLISION BOX
         STD     MIN.BOX,U        ;  .    .
;
         LDA     MIN.PAK,U        ;  .    GROW 2 NEW MINES
         LDB     MIN.BSZ,U        ;  .    .
         DECB                     ;  .    .
         BEQ     CBUL60           ;  .    .
         JSR     RANSEED          ;  .    .
         JSR     RANSEED          ;  .    .
;
CBUL60   LDA     #$04             ;  .    SET FIRE-BALL FLAG
         STA     MIN.PAK,U        ;  .    .
;
         DEC     <CBULLET         ;  .    DECREMENT ACTIVE BULLET COUNT
         JMP     CBUL2            ;  .    TRY NEXT BULLET FOR COLLISION
;
;
CBUL7    LDA     #$01             ;  'DUMB' OR 'MAGNETIC' MINE COLLISION
         STA     MIN.FLG,U        ;  .    FLAG MINE FOR EXPLOSION
         CLR     BLT.FLG,Y        ;  .    RESET BULLET
;
         LDX     #SCRPTR          ;  .    ADD MINE TO ACTIVE PLAYER SCORE
         LDA     <ACTPLY          ;  .    .    PLAYER #1 OR #2 ?
         LDX     A,X              ;  .    .    .
         LDD     MIN.SCR,U        ;  ADD MINE TO SCORE
         JSR     SCRADD           ;  .
;
         LDA     MIN.YW,U         ;  ENTER COLLISION IN EXPLOSION TABLE
         LDB     MIN.XW,U         ;  .    SET EXPLOSION CENTRE
         TFR     D,X              ;  .    .
         LDA     MIN.SIZ,U        ;  .    SET EXPLOSION STARTING SIZE
         LDB     #$40             ;  .    SET EXPLOSION MAXIMUM SIZE
         JSR     SETEXP           ;  .    SET EXPLOSION IN TABLE
;
         DEC     <CMINES          ;  .    DECREMENT ACTIVE MINE COUNT
         DEC     <CBULLET         ;  .    DECREMENT ACTIVE BULLET COUNT
CBUL9    JMP     CBUL2            ;  .    TRY NEXT BULLET FOR COLLISION
;
;
;  HANDLE MINE VS. SHIP COLLISIONS
;  ===============================
;
         SETDP   $C8
;        =====   ===
;
CMINSHIP LDA     <ABORT           ;  GAME ABORTED ?
         BNE     CMIN3            ;  .    SKIP COLLISION DETECTION
;
         LDA     <HYPFLAG         ;  .    HYPER-SPACE SEQUENCE ?
         BNE     CMIN3            ;  .    .
:
         LDY     #MIN.TBL         ;  FIND MINE TO COMPARE WITH
         LDA     #MINES           ;  .
         STA     <TEMP1           ;  .
;
CMIN1    LDA     MIN.FLG,Y        ;  .    MINE ACTIVE ?
         ANDA    #$3F             ;  .    .
         BNE     CMIN4            ;  .    .
;
CMIN2    LEAY    MIN.LEN,Y        ;  .    BUMP TO NEXT ENTRY
         DEC     <TEMP1           ;  .    .    END OF TABLE ?
         BNE     CMIN1            ;  .    .    .
CMIN3    RTS                      ;  .    RETURN - NO ACTIVE MINE
;
CMIN4    PSHS    Y                ;  FINE COLLISION TEST
         LDA     <WSHIPY          ;  .    FETCH SHIP POSITION
         LDB     <WSHIPX          ;  .    .
         TFR     D,X              ;  .    .
         LDA     MIN.YW,Y         ;  .    FETCH MINE POSITION
         LDB     MIN.XW,Y         ;  .    .
         LDY     MIN.BOX,Y        ;  .    FETCH MINE BOX SIZE
         EXG     Y,D              ;  .    .
         JSR     BXTEST           ;  .    DO BOX TEST
         PULS    Y                ;  .    .    FAILED COLLISION ?
         BCC     CMIN2            ;  .    .    .
;
         CLR     MIN.FLG,Y        ;  COLLISION DETECTED - RESET CONDITIONS
         CLR     <MINMAX          ;  .    RESET TOTAL MINE COUNT
;
         LDA     <WSHIPY          ;  ENTER COLLISION IN EXPLOSION TABLE
         LDB     <WSHIPX          ;  .    SET EXPLOSION CENTRE
         TFR     D,X              ;  .    .
         LDA     MIN.SIZ,Y        ;  .    SET STARTING EXPLOSION SIZE
         ORA     #$80             ;  .    .    FATAL HIT TO SWEEPER
         LDB     #$30             ;  .    SET EXPLOSION SIZE
         JSR     SETEXP           ;  .    SET EXPLOSION IN TABLE
;
         INC     EXPLSND          ;  SET EXPLOSION SOUND FLAG
;
         DEC     <CMINES          ;  DECREMENT ACTIVE MINE COUNT
         BRA     CMIN3            ;  TRY NEXT MINE ENTRY
;
;
;  HANDLE SHIP VS. MINE-LAYER COLLISION
;  ====================================
;
         SETDP   $C8
;        =====   ===
;
CSHPLYR  LDA     <ABORT           ;  GAME ABORTED ?
         BNE     CSHP0            ;  .    SKIP COLLISION DETECTION
;
         LDA     <HYPFLAG         ;  .    HYPER-SPACE SEQUENCE ?
         BNE     CSHP0            ;  .    .
;
         LDA     <LAYRSPD         ;  MINE-LAYER OFF-SCREEN ?
         BEQ     CSHP0            ;  .    IF SO, SKIP COLLISION DETECTION
;
         LDA     <WSHIPY          ;  PERFORM FINE BOX TEST
         LDB     <WSHIPX          ;  .    FETCH SHIP POSITION
         TFR     D,X              ;  .    .
         LDD     #P.LYRBX         ;  .    FETCH MINE-LAYER COLLISION BOX
         LDY     <LAYRYX          ;  .    FETCH MINE-LAYER POSITION
         JSR     BXTEST           ;  .    DO BOX TEST
         BCS     CSHP1            ;  .    .    PASS COLLISION TEST ?
CSHP0    RTS                      ;  .    .    .    NO COLLISION - RETURN
;
CSHP1    CLR     <LAYRSPD         ;  COLLISION DETECTED - RESET MINE-LAYER
         CLR     <TMR3            ;  .
;
         LDA     <WSHIPY          ;  ENTER COLLISION IN EXPLOSION TABLE
         LDB     <WSHIPX          ;  .    SET EXPLOSION CENTRE
         TFR     D,X              ;  .    .
         LDA     #P.LYRSZ         ;  .    SET STARTING EXPLOSION SIZE
         ORA     #$80             ;  .    .    FATAL TO SWEEPER
         LDB     #$30             ;  .    SET EXPLOSION SIZE
         JSR     SETEXP           ;  .    SET EXPLOSION IN TABLE
;
         INC     EXPLSND          ;  SET EXPLOSION SOUND FLAG
;
         RTS                      ;  RETURN TO CALLER
;
;
;
;  SOUND HANDLER
;  =============
;
         SETDP   $D0
;        =====   ===
;
SOUND    LDA     THRSND           ;  THRUSTER SOUND ?
         BEQ     SND1             ;  .
;
         CLR     THRSND           ;  .    RESET THRUSTER SOUND FLAG
         LDU     #SS.THR          ;  .    SET THRUSTER SOUND
         BRA     SND10            ;  .    .
;
SND1     LDA     EXPLSND          ;  EXPLOSION SOUND ?
         BEQ     SND2             ;  .
;
         CLR     EXPLSND          ;  .    RESET EXPLOSION SOUND FLAG
         LDU     #SS.EXP          ;  .    SET EXPLOSION SOUND
         BRA     SND10            ;  .    .
;
SND2     LDA     BLTSND           ;  BULLET SOUND ?
         BEQ     SND3             ;  .
;
         CLR     BLTSND           ;  .    RESET BULLET SOUND FLAG
         LDU     #SS.BLT          ;  .    SET BULLET SOUND
         BRA     SND10            ;  .    .
;
SND3     LDA     POPSND           ;  MINE-SEED 'POP' SOUND ?
         BEQ     SND31            ;  .
;
SND32    CLR     POPSND           ;  .    RESET 'POP' SOUND FLAG
         CLR     HYPSND           ;  .    RESET 'HYPER-SPACE' SOUND FLAG
         LDU     #SS.POP          ;  .    SET 'POP' SOUND
         BRA     SND10            ;  .    .
;
SND31    LDA     HYPSND           ;  HYPER-SPACE SOUND ?
         BNE     SND32            ;  .
;
         BRA     SND18            ;  UPDATE SOUND
;
;
SND10    JSR     PSGLST           ;  UPDATE PSG
;
SND18    LDB     REG0             ;  SLIDE TONE 'A' FREQUENCY
         ADDB    #$10             ;  .
         CMPB    #$A0             ;  .
         BHS     STTNA            ;  .
         LDA     #00              ;  .
         JSR     WRREG            ;  .
         BRA     CKTNB            ;  .
;
STTNA    LDD     #$0800           ;  .    SET 'A' AMPLITUDE = $00
         JSR     WRREG            ;  .    .
;
CKTNB    LDB     REG2             ;  SLIDE TONE 'B' FREQUENCY
         ADDB    #$20             ;  .
         CMPB    #$F0             ;  .
         BHS     STTNB            ;  .
         LDA     #$02             ;  .
         JSR     WRREG            ;  .
         BRA     RUSND            ;  .
;
STTNB    LDD     #$0900           ;  .    SET 'B' AMPLITUDE = $00
         JSR     WRREG            ;  .    .
;
RUSND    RTS                      ;  RETURN TO CALLER
;
;
;        SOUND LIBRARY
;        -------------
;
;
SS.THR   DW      $0010            ;  THRUSTER SOUND
         DW      $0100            ;  .
         DW      $061F            ;  .
         DW      $0706            ;  .
         DW      $080F            ;  .
         DB      $FF              ;  .    TERMINATOR
;
;
SS.BLT   DW      $0239            ;  BULLET SOUND
         DW      $0300            ;  .
         DW      $061F            ;  .
         DW      $0705            ;  .
         DW      $090F            ;  .
         DB      $FF              ;  .    TERMINATOR
;
;
SS.EXP   DW      $061F            ;  OJECT EXPLOSION SOUND
         DW      $0707            ;  .
         DW      $0A10            ;  .
         DW      $0B00            ;  .
         DW      $0C38            ;  .
         DW      $0D00            ;  .
         DB      $FF              ;  .    TERMINATOR
;
;
SS.POP   DW      $0000            ;  MINE 'POP' SOUND
         DW      $0100            ;  .
         DW      $0230            ;  .
         DW      $0300            ;  .
         DW      $0400            ;  .
         DW      $0500            ;  .
         DW      $061F            ;  .
         DW      $073D            ;  .
         DW      $0800            ;  .
         DW      $090F            ;  .
         DW      $0A00            ;  .
         DW      $0B00            ;  .
         DW      $0C00            ;  .
         DW      $0D00            ;  .
         DB      $FF              ;  .    TERMINATOR
;
;
;       LAYER TUNE
;       ----------
;
;
QSC      EQU     50
SC8      EQU     25
;
G2       EQU     $00
GS2      EQU     $01
CS3      EQU     $06
C3       EQU     $05
;
LAYTUNE  DW      FADE66
         DW      VIBENL
         DB      G2,SC8
         DB      GS2,SC8
         DB      G2,SC8
         DB      GS2,QSC
         DB      G2,SC8
         DB      GS2,SC8
         DB      G2,SC8
         DB      CS3,SC8
         DB      C3,SC8
         DB      G2,$80
;
;
FADE66   DW      $FFEE,$DDCC,$BBAA,$9988,$7777
         DW      $7777,$7777,$7777
;
;
;
SCRPTR   DW      SCOR1            ;  POINTERS TO PLAYER SCORES
         DW      SCOR2            ;  .
;
PSCRPTR  DW      PSCOR1           ;  SCREEN POSITIONS OF PLAYER SCORES
         DW      PSCOR2           ;  .
;
PMNLVL   DW      MNLVL1           ;  POINTERS TO PLAYERS MINE-LEVEL MESSAGES
         DW      MNLVL2           ;  .
;
;==========================================================================JJH
;                                   =======================================JJH
;  GAME SEQUENCE PARAMETER TABLES   ==  DELETED - REV. C CHANGES  =========JJH
;  ==============================   =======================================JJH
;                                                                    ======JJH
;        LEVEL #1 PARAMETER TABLES                                   ======JJH
;        -------------------------                                   ======JJH
;                                                                    ======JJH
;MINTBL1 DB      M.DUMB           ;  MINE TYPE TABLE                 ======JJH
;        DB      M.DUMB           ;  .                               ======JJH
;        DB      M.DUMB           ;  .                               ======JJH
;        DB      M.DUMB           ;  .                               ======JJH
;                                                                    ======JJH
;        LEVEL #2 PARAMETER TABLE                                    ======JJH
;        ------------------------                                    ======JJH
;                                                                    ======JJH
;MINTBL2 DB      M.FIRE           ;  MINE TYPE TABLE                 ======JJH
;        DB      M.DUMB           ;  .                               ======JJH
;        DB      M.DUMB           ;  .                               ======JJH
;        DB      M.DUMB           ;  .                               ======JJH
;                                                                    ======JJH
;        LEVEL #3 PARAMETER TABLE                                    ======JJH
;        ------------------------                                    ======JJH
;                                                                    ======JJH
;MINTBL3 DB      M.MAG            ;  MINE TYPE TABLE                 ======JJH
;        DB      M.DUMB           ;  .                               ======JJH
;        DB      M.DUMB           ;  .                               ======JJH
;        DB      M.DUMB           ;  .                               ======JJH
;                                                                    ======JJH
;        LEVEL #4 PARAMETER TABLE                                    ======JJH
;        ------------------------                                    ======JJH
;                                                                    ======JJH
;MINTBL4 DB      M.MFIRE          ;  MINE TYPE TABLE                 ======JJH
;        DB      M.DUMB           ;  .                               ======JJH
;        DB      M.DUMB           ;  .                               ======JJH
;        DB      M.DUMB           ;  .                               ======JJH
;                                                                    ======JJH
;        LEVEL #5 PARAMETER TABLE                                    ======JJH
;        ------------------------                                    ======JJH
;                                                                    ======JJH
;MINTBL5 DB      M.FIRE           ;  MINE TYPE TABLE                 ======JJH
;        DB      M.MAG            ;  .                               ======JJH
;        DB      M.DUMB           ;  .                               ======JJH
;        DB      M.DUMB           ;  .                               ======JJH
;                                                                    ======JJH
;        LEVEL #6 PARAMETER TABLE                                    ======JJH
;        ------------------------                                    ======JJH
;                                                                    ======JJH
;MINTBL6 DB      M.FIRE           ;  MINE TYPE TABLE                 ======JJH
;        DB      M.MFIRE          ;  .                               ======JJH
;        DB      M.DUMB           ;  .                               ======JJH
;        DB      M.DUMB           ;  .                               ======JJH
;                                                                    ======JJH
;        LEVEL #7 PARAMETER TABLE                                    ======JJH
;        ------------------------                                    ======JJH
;                                                                    ======JJH
;MINTBL7 DB      M.MAG            ;  MINE TYPE TABLE                 ======JJH
;        DB      M.MFIRE          ;  .                               ======JJH
;        DB      M.DUMB           ;  .                               ======JJH
;        DB      M.DUMB           ;  .                               ======JJH
;                                                                    ======JJH
;        LEVEL #8 PARAMETER TABLE                                    ======JJH
;        ------------------------                                    ======JJH
;                                                                    ======JJH
;MINTBL8 DB      M.FIRE           ;  MINE TYPE TABLE                 ======JJH
;        DB      M.FIRE           ;  .                               ======JJH
;        DB      M.DUMB           ;  .                               ======JJH
;        DB      M.DUMB           ;  .                               ======JJH
;                                                                    ======JJH
;        LEVEL #9 PARAMETER TABLE                                    ======JJH
;        ------------------------                                    ======JJH
;                                                                    ======JJH
;MINTBL9 DB      M.MAG            ;  MINE TYPE TABLE                 ======JJH
;        DB      M.MAG            ;  .                               ======JJH
;        DB      M.DUMB           ;  .                               ======JJH
;        DB      M.DUMB           ;  .                               ======JJH
;                                                                    ======JJH
;        LEVEL #10 PARAMETER TABLE                                   ======JJH
;        -------------------------                                   ======JJH
;                                                                    ======JJH
;MINTBL10DB      M.MFIRE          ;  MINE TYPE TABLE                 ======JJH
;        DB      M.MFIRE          ;  .                               ======JJH
;        DB      M.DUMB           ;  .                               ======JJH
;        DB      M.DUMB           ;  .                               ======JJH
;                                                                    ======JJH
;        LEVEL #11 PARAMETER TABLE                                   ======JJH
;        -------------------------                                   ======JJH
;                                                                    ======JJH
;MINTBL11DB      M.FIRE           ;  MINE TYPE TABLE                 ======JJH
;        DB      M.FIRE           ;  .                               ======JJH
;        DB      M.FIRE           ;  .                               ======JJH
;        DB      M.DUMB           ;  .                               ======JJH
;                                                                    ======JJH
;        LEVEL #12 PARAMETER TABLE                                   ======JJH
;        -------------------------                                   ======JJH
;                                                                    ======JJH
;MINTBL12DB      M.MAG            ;  MINE TYPE TABLE                 ======JJH
;        DB      M.MAG            ;  .                               ======JJH
;        DB      M.MAG            ;  .                               ======JJH
;        DB      M.DUMB           ;  .                               ======JJH
;                                                                    ======JJH
;        LEVEL #13 PARAMETER TABLE                                   ======JJH
;        -------------------------                                   ======JJH
;                                                                    ======JJH
;MINTBL13DB      M.MFIRE          ;  MINE TYPE TABLE                 ======JJH
;        DB      M.MFIRE          ;  .                               ======JJH
;        DB      M.MFIRE          ;  .                               ======JJH
;        DB      M.DUMB           ;  .                               ======JJH
;                                                                    ======JJH
;        DB      $80              ;  LEVEL PARAMETER TABLE TERMINATOR======JJH
;==========================================================================JJH
;
;==========================================================================JJH
         SETDP   $C8              ;  CODE ADDED - REV. C CHANGES     ======JJH
;        =====   ===                                                 ======JJH
;                                                                    ======JJH
REVC.0   LDA     #$0C             ;  .    LAST GAME SEQUENCE ?       ======JJH
         SUBA    0,X              ;  .    .                          ======JJH
         SUBA    1,X              ;  .    .                          ======JJH
         SUBA    2,X              ;  .    .                          ======JJH
         SUBA    3,X              ;  .    .                          ======JJH
         BEQ     REVC.09          ;  .    .                          ======JJH
;                                                                    ======JJH
         LDB     0,X              ;  .    INCREMENT MINE #1 TYPE     ======JJH
         ADDB    #$FD             ;  .    .                          ======JJH
         ANDB    #$03             ;  .    .                          ======JJH
         STB     0,X              ;  .    .                          ======JJH
;                                                                    ======JJH
         LDB     #$FC             ;  .    INCREMENT MINE #2 TYPE     ======JJH
         ADCB    1,X              ;  .    .                          ======JJH
         ANDB    #$03             ;  .    .                          ======JJH
         STB     1,X              ;  .    .                          ======JJH
;                                                                    ======JJH
         LDB     #$FC             ;  .    INCREMENT MINE #3 TYPE     ======JJH
         ADCB    2,X              ;  .    .                          ======JJH
         ANDB    #$03             ;  .    .                          ======JJH
         STB     2,X              ;  .    .                          ======JJH
;                                                                    ======JJH
         LDB     #$FC             ;  .    INCREMENT MINE #4 TYPE     ======JJH
         ADCB    3,X              ;  .    .                          ======JJH
         ANDB    #$03             ;  .    .                          ======JJH
         STB     3,X              ;  .    .                          ======JJH
;                                                                    ======JJH
REVC.09  RTS                      ;  .    RETURN TO CALLER           ======JJH
;==========================================================================JJH
;
;==========================================================================JJH
         DS      8                ;  CODE ADDED - REV. C CHANGES     ======JJH
;==========================================================================JJH
;
;
;
;  STAR-FIELD TABLES
;  =================
;
;
STAR.1   DB      $C8,$40          ;  STAR FIELD #1
         DB      $3F,$00          ;  .
         DB      $20,$80          ;  .
         DB      $10,$1F          ;  .
;
STAR.2   DB      $3F,$3F          ;  STAR FIELD #2
         DB      $00,$BF          ;  .
         DB      $BF,$BF          ;  .
         DB      $C0,$20          ;  .
;
STAR.3   DB      $48,$08          ;  STAR FIELD #3
         DB      $F8,$30          ;  .
         DB      $A8,$10          ;  .
         DB      $D0,$A0          ;  .
;
STAR.4   DB      $BF,$BF          ;  STAR FIELD #4
         DB      $00,$3F          ;  .
         DB      $3F,$48          ;  .
         DB      $20,$80          ;  .
;
STAR.5   DB      $00,$B0          ;  STAR FIELD #5
         DB      $48,$38          ;  .
         DB      $FB,$38          ;  .
         DB      $80,$28          ;  .
;
STAR.6   DB      $30,$48          ;  STAR FIELD #6
         DB      $80,$80          ;  .
         DB      $45,$F0          ;  .
         DB      $28,$7F          ;  .
;
STAR.7   DB      $3F,$BF          ;  STAR FIELD #7
         DB      $A5,$00          ;  .
         DB      $D0,$60          ;  .
         DB      $20,$28          ;  .
;
STAR.8   DB      $B8,$40          ;  STAR FIELD #8
         DB      $15,$80          ;  .
         DB      $40,$F8          ;  .
         DB      $40,$18          ;  .
;
;
;  RASTER MESSAGES
;  ===============
;
;
M.MNFLD  DW      $FA38
         DW      $E0C0
         DB      "MINE FIELD",$80
;
M.END    DW      $FA38
         DW      $E0D8
         DB      "GAME OVER",$80
;
;
;
;
;  MINES
;  =====
;
;
MINE1    DB      $00,$10,$00      ;  'DUMB' MINE
         DB      $FF,$20,$A0      ;  .
         DB      $FF,$C0,$40      ;  .
         DB      $FF,$90,$20      ;  .
         DB      $FF,$70,$20      ;  .
         DB      $FF,$50,$50      ;  .
         DB      $FF,$D0,$90      ;  .
         DB      $01              ;  .    PACKET TERMINATOR
;
MINE2    DB      $00,$20,$00      ;  'MAGNETIC' MINE
         DB      $FF,$30,$B0      ;  .
         DB      $FF,$B0,$30      ;  .
         DB      $FF,$B0,$D0      ;  .
         DB      $FF,$30,$50      ;  .
         DB      $FF,$D0,$50      ;  .
         DB      $FF,$50,$D0      ;  .
         DB      $FF,$50,$30      ;  .
         DB      $FF,$D0,$B0      ;  .
         DB      $01              ;  .    PACKET TERMINATOR
;
MINE3    DB      $FF,$00,$00      ;  'DUMB FIRE-BALL' MINE
         DB      $00,$30,$00      ;  .
         DB      $FF,$10,$C0      ;  .
         DB      $FF,$C0,$10      ;  .
         DB      $FF,$C0,$F0      ;  .
         DB      $FF,$10,$40      ;  .
         DB      $FF,$F0,$40      ;  .
         DB      $FF,$40,$F0      ;  .
         DB      $FF,$40,$10      ;  .
         DB      $FF,$F0,$C0      ;  .
         DB      $01              ;  .    PACKET TERMINATOR
;
MINE4    DB      $FF,$00,$00      ;  'MAGNETIC FIRE-BALL' MINE
         DB      $00,$F0,$D0      ;  .
         DB      $FF,$C0,$40      ;  .
         DB      $FF,$20,$00      ;  .
         DB      $FF,$40,$40      ;  .
         DB      $FF,$00,$E0      ;  .
         DB      $FF,$40,$C0      ;  .
         DB      $FF,$E0,$00      ;  .
         DB      $FF,$C0,$C0      ;  .
         DB      $FF,$00,$20      ;  .
         DB      $01              ;  .    PACKET TERMINATOR
;
MINE5    DB      $00,$3F,$00      ;  'RELEASED FIRE-BALL' MINE
         DB      $FF,$80,$00      ;  .
         DB      $00,$3F,$3F      ;  .
         DB      $FF,$00,$80      ;  .
         DB      $01              ;  .    PACKET TERMINATOR
;
;
;  EXPLOSION CLOUD
;  ===============
;
;
EXPLODE  DB      $FF,$7F,$20
         DB      $00,$C0,$10
         DB      $FF,$C0,$D0
         DB      $FF,$20,$7F
         DB      $00,$E0,$C0
         DB      $FF,$00,$C0
         DB      $FF,$E0,$30
         DB      $00,$C0,$00
         DB      $FF,$60,$CD
         DB      $FF,$A0,$00
         DB      $00,$20,$D0
         DB      $FF,$3C,$30
         DB      $FF,$00,$82
         DB      $00,$30,$30
         DB      $FF,$D0,$50
         DB      $FF,$20,$F0
         DB      $01
;
;
;  STAR-SWEEPER SHIP
;  =================
;
;
NSHIP    DB      $00,$3F,$00      ;  ANOTHER NEW SHIP
         DB      $FF,$C4,$08      ;  .
         DB      $FF,$D8,$D8      ;  .
         DB      $FF,$20,$00      ;  .
         DB      $00,$00,$40      ;  .
         DB      $FF,$E0,$00      ;  .
         DB      $FF,$28,$D8      ;  .
         DB      $FF,$3C,$08      ;  .
         DB      $01              ;  .
;
;
;        SHIP PACKETS FOR EXPLOSION
;        --------------------------
;
SHPEX1   DB      $00,$3F,$00
         DB      $FF,$C4,$08
         DB      $01
;
SHPEX2   DB      $00,$04,$08
         DB      $FF,$D8,$D8
         DB      $FF,$20,$00
         DB      $01
;
SHPEX3   DB      $00,$3F,$00
         DB      $FF,$C4,$F8
         DB      $01
;
SHPEX4   DB      $00,$04,$F8
         DB      $FF,$D8,$28
         DB      $FF,$20,$00
         DB      $01
;
;
;  MINE-LAYER
;  ==========
;
;
LLAYR    DB      $00,$20,$00      ;  LEFT PORTION OF MINE-LAYER
         DB      $FF,$00,$D8      ;  .
         DB      $FF,$D0,$A8      ;  .
         DB      $FF,$F0,$40      ;  .
         DB      $FF,$08,$18      ;  .
         DB      $FF,$18,$F0      ;  .
         DB      $FF,$F0,$B8      ;  .
         DB      $00,$10,$48      ;  .
         DB      $FF,$08,$00      ;  .
         DB      $FF,$E8,$10      ;  .
         DB      $FF,$F8,$00      ;  .
         DB      $00,$08,$00      ;  .
         DB      $FF,$00,$06      ;  .
         DB      $00,$10,$FA      ;  .
         DB      $FF,$08,$00      ;  .
         DB      $FF,$00,$F0      ;  .
         DB      $00,$10,$18      ;  .
         DB      $FF,$F0,$08      ;  .
         DB      $01              ;  .    PACKET TERMINATOR
;
RLAYR    DB      $00,$20,$00      ;  RIGHT PORTION OF MINE-LAYER
         DB      $FF,$00,$28      ;  .
         DB      $FF,$D0,$58      ;  .
         DB      $FF,$F0,$C0      ;  .
         DB      $FF,$08,$E8      ;  .
         DB      $FF,$18,$10      ;  .
         DB      $FF,$F0,$48      ;  .
         DB      $00,$10,$B8      ;  .
         DB      $FF,$08,$00      ;  .
         DB      $FF,$E8,$F0      ;  .
         DB      $FF,$F8,$00      ;  .
         DB      $FF,$08,$00      ;  .
         DB      $FF,$00,$FA      ;  .
         DB      $00,$10,$06      ;  .
         DB      $FF,$08,$00      ;  .
         DB      $FF,$00,$10      ;  .
         DB      $00,$10,$E8      ;  .
         DB      $FF,$F0,$F8      ;  .
         DB      $01              ;  .    PACKET TERMINATOR
;
MLAYR    DB      $FF,$00,$D8      ;  MID-SECTION OF MINE-LAYER
         DB      $FF,$E8,$08      ;  .
         DB      $FF,$00,$40      ;  .
         DB      $FF,$18,$08      ;  .
         DB      $FF,$00,$D8      ;  .
         DB      $00,$08,$E0      ;  .
         DB      $FF,$10,$00      ;  .
         DB      $FF,$00,$40      ;  .
         DB      $FF,$F0,$00      ;  .
         DB      $FF,$00,$C0      ;  .
         DB      $01              ;  .    PACKET TERMINATOR
;
LAYER    DB      $00,$18,$00      ;  LOW RESOLUTION MINE-LAYER PACKET
         DB      $FF,$00,$20      ;  .
         DB      $FF,$C8,$70      ;  .
         DB      $FF,$10,$A0      ;  .
         DB      $FF,$00,$A0      ;  .
         DB      $FF,$EC,$A4      ;  .
         DB      $FF,$39,$6D      ;  .
         DB      $FF,$00,$20      ;  .
         DB      $01              ;  .    PACKET TERMINATOR
;
;
;==========================================================================JJH
;                                                                    ======JJH
         SETDP   $00              ;  CODE ADDED - REV. B CHANGES     ======JJH
;        =====   ===                                                 ======JJH
;                                                                    ======JJH
REVB.0   CLR     FRAME - 1        ;  .    CLEAR HOUSE FOR RESTART    ======JJH
         CLR     FRAME            ;  .    .                          ======JJH
         CLR     LEG              ;  .    .                          ======JJH
         JMP     COLD0            ;  .    .    RESTART VECTREX       ======JJH
;==========================================================================JJH
;
;==========================================================================JJH
         SETDP   $D0              ;  CODE ADDED - REV. C CHANGES     ======JJH
;        =====   ===                                                 ======JJH
;                                                                    ======JJH
REVC.1   LDA     SHIPCNT          ;  .    LIMIT NUMBER OF MARKERS    ======JJH
         BEQ     REVC.19          ;  .    .    SKIP DISPLAY ?        ======JJH
;                                                                    ======JJH
         CMPA    #$08             ;  .    .                          ======JJH
         BLE     REVC.11          ;  .    .                          ======JJH
         LDA     #$08             ;  .    .                          ======JJH
REVC.11  STA     TEMP1            ;  .    .                          ======JJH
;                                                                    ======JJH
REVC.19  RTS                      ;  .    RETURN TO CALLER           ======JJH
;==========================================================================JJH
;
;
         END





 

Copyright 2024
All Rights Reserved

Thank you for visiting our website.

In closing, please keep in mind that we can not guarantee the accuracy or timeliness of the information on this website, so use with care. We encourage you to double-check the information that is critical to you.

If you've found an error or have additional information that you would like to share, please don't hesitate to write: Click here to contact us.

This page was last modified/updated: 04 Feb 2024