From RoadsideThoughts ...
A Bit of Vectrex History
 
Introduction
Programmer's
Guide
 
The RUM
 
Mine Storm
Fortress of
Narzod
 
Dark Tower
   
Sitemap
     
 

Vectrex 6809 Source Code

Mine Storm - Rev. C


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