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

Fortress of Narzod




Index of Narzod Files

The top most file for the Fortress of Narzod:

NARZOD.ASM

The associated files:

CITDEL.NAR GBULET.NAR MAIN.NAR TAIL.NAR
COLLIDE.NAR GGUARD.NAR PACKS.NAR TIMERS.NAR
GAME.NAR GSPIKE.NAR PRSPCT.NAR WALLS.NAR
GBIRD.NAR INIT.NAR SOUND.NAR  
GBLAST.NAR KILLER.NAR SUBR.NAR  

GGUARD.NAR - Rev. B

;
;
         IF      L.GRD = OFF      ;-------------------------------------------
         LIST    -L               ;--  GGUARD  -------------------------------
         ENDIF                    ;-------------------------------------------
;
;
;
;  GUARDIAN GAME LOGIC
;  ===================
;
         SETDP   $C8
;        =====   ===
;
GGUARD   LDA     #GUARDS          ;  FIND ACTIVE GUARDIAN
         STA     TEMP1            ;  .
         LDU     #GRDTBL          ;  .
         LDY     #SPKTBL          ;  .
;
NEWGRD   LDA     GRDFLG,U         ;  .    GUARDIAN ACTIVE ?
         LBEQ    NXTGRD           ;  .    .
         LBMI    GDYING           ;  .    .    GUARDIAN DYING ?
;
         LDB     KILFLG           ;  .    .    KILLER SEQUENCE ?
         BNE     GMOV3            ;  .    .    .
;
         ANDA    #$40             ;  .    .    IS GUARDIAN FALLING ?
         BEQ     GMOV1            ;  .    .    .
;
         DEC     GRDTMR,U         ;  HANDLE FALLING GUARDIANS
         BNE     GFALL2           ;  .    CHANGE GUARDIAN MOTION ?
;
         LDD     GUARDY           ;  .    RESET FALLING GUARDIAN
         STD     GRDYD,U          ;  .    .    'Y' AXIS DISPLACEMENT
         LDD     GUARDX           ;  .    .    'X' AXIS DISPLACEMENT
         STD     GRDXD,U          ;  .    .    .
         LDA     GRDFLG,U         ;  .    .    RESET FALLING FLAG
         ANDA    #$BF             ;  .    .    .
         STA     GRDFLG,U         ;  .    .    .
         JSR     RANDOM           ;  .    .    SET NEW TIMER VALUE
         ORA     #$40             ;  .    .    .
         STA     GRDTMR,U         ;  .    .    .
         BRA     GFALL6           ;  .    .
;
GFALL2   JSR     MOVOBJ           ;  .    CALCULATE NEW GUARDIAN POSITION
;
         LDA     GRDYW,U          ;  .    .    LEFT WALL CHECK
         LDX     #CL.LIM          ;  .    .    .
         JSR     PRSPCT           ;  .    .    .
         CMPB    GRDXW,U          ;  .    .    .
         BLT     GFALL3           ;  .    .    .
         STB     GRDXW,U          ;  .    .    .
         BRA     GFALL4           ;  .    .    .
;
GFALL3   LDX     #CR.LIM          ;  .    .    RIGHT WALL CHECK
         LDB     A,X              ;  .    .    .
         CMPB    GRDXW,U          ;  .    .    .
         BGT     GFALL4           ;  .    .    .
         STB     GRDXW,U          ;  .    .    .
;
GFALL4   LDA     GRDYW,U          ;  .    .    LOWER LIMIT CHECK
         CMPA    #LLIMIT          ;  .    .    .
         BGE     GFALL6           ;  .    .    .
;
         LDD     GUARDY           ;  .    .    START GUARDIAN BACK UP
         COMA                     ;  .    .    .    SET 'Y' DISPLACEMENT
         COMB                     ;  .    .    .    .
         ADDD    #$0001           ;  .    .    .    .
         STD     GRDYD,U          ;  .    .    .    .
         LDD     GUARDX           ;  .    .    .    SET 'X' DISPLACEMENT
         STD     GRDXD,U          ;  .    .    .    .
         LDA     GRDFLG,U         ;  .    .    .    SET GUARDIAN TO MARCHING
         ANDA    #$BF             ;  .    .    .    .
         STA     GRDFLG,U         ;  .    .    .    .
         JSR     RANDOM           ;  .    .    .    SET MOTION TIMER
         ORA     #$08             ;  .    .    .    .
         STA     GRDTMR,U         ;  .    .    .    .
GFALL6   BRA     GDSP1            ;  .    .    .    DISPLAY CURRENT GUARDIAN
;
;
GMOV1    DEC     GRDTMR,U         ;  HANDLE MARCHING GUARDIANS
         BNE     GMOV3            ;  .    CHANGE GUARDIAN MOTION ?
;
         LDA     GRDYD,U          ;  .    IS GUARDIAN GOING UP ?
         BPL     GMOV3            ;  .    .
;
         JSR     GRFALL           ;  .    SET-UP FOR FALLING GUARDIAN
         BRA     GDSP1            ;  .
;
GMOV3    LDD     GRDXD,U          ;  .    CALCULATE NEW GUARDIAN POSITION
         ADDD    GRDXW,U          ;  .    .
         STD     GRDXW,U          ;  .    .
;
         LDX     #CL.LIM          ;  .    .    LEFT WALL CHECK
         LDA     GRDYW,U          ;  .    .    .
         JSR     PRSPCT           ;  .    .    .
         CMPB    GRDXW,U          ;  .    .    .
         BLT     GMOV4            ;  .    .    .
         STB     GRDXW,U          ;  .    .    .
         BRA     GMOV5            ;  .    .    .
;
GMOV4    LDX     #CR.LIM          ;  .    .    RIGHT WALL CHECK
         LDB     A,X              ;  .    .    .
         CMPB    GRDXW,U          ;  .    .    .
         BGT     GDSP1            ;  .    .    .
         STB     GRDXW,U          ;  .    .    .
;
GMOV5    LDD     GRDYD,U          ;  .    GUARDIAN HAS MOVED OFF ROADWAY
         ADDD    GRDYW,U          ;  .    .    UPDATE 'Y' POSITION
         STD     GRDYW,U          ;  .    .    .
;
         LDB     GRDYD,U          ;  .    .    IS GUARDIAN GOING UP ALREADY ?
         BMI     GMOV7            ;  .    .    .
         CMPA    #ULIMIT          ;  .    .    .    START GUARDIAN BACK DOWN ?
         BGE     GMOV8            ;  .    .    .    .
         BRA     GMOV9            ;  .    .    .    .
;
GMOV7    CMPA    #LLIMIT          ;  .    .    START GUARDIAN BACK UP ?
         BGE     GMOV9            ;  .    .    .
;
GMOV8    LDD     GRDYD,U          ;  .    .    .    UPDATE 'Y' DISPLACEMENT
         COMA                     ;  .    .    .    .    TWO'S COMPLEMENT
         COMB                     ;  .    .    .    .    .
         ADDD    #$0001           ;  .    .    .    .    .
         STD     GRDYD,U          ;  .    .    .    .    .
;
GMOV9    LDD     GRDXD,U          ;  .    .    UPDATE 'X' DISPLACEMENT
         COMA                     ;  .    .    .    TWO'S COMPLEMENT
         COMB                     ;  .    .    .    .
         ADDD    #$0001           ;  .    .    .    .
         STD     GRDXD,U          ;  .    .    .
         STD     KILXD            ;  .    .    .    SAVE VALUE FOR KILLER
;
;
GDSP1    LDX     #G.SIZ           ;  DISPLAY GUARDIAN FOR THIS ENTRY
         LDA     GRDYW,U          ;  .    UPDATE GUARDIAN SIZE
         STA     GRDYX,U          ;  .    .    SAVE ABSOLUTE 'YX' POSITION
         JSR     PRSPCT           ;  .    .
         STA     TEMP2            ;  .    .    SAVE PERSPECTIVE POINTER
         STB     GRDSIZ,U         ;  .    .
;
         LDB     SPKFLG,Y         ;  .    IS GUARDIAN HOLDING SPIKER ?
         BPL     GDSP2            ;  .    .
;
         LDD     GRDYW,U          ;  .    UPDATE SPIKER POSITION
         STD     SPKYW,Y          ;  .    .
         LDD     GRDXW,U          ;  .    .
         STD     SPKXW,Y          ;  .    .
;
GDSP2    LDA     GRDXW,U          ;  .    SAVE ABSOLUTE 'YX' POSITION
         STA     GRDYX+1,U        ;  .    .
;
         LDX     #CHRLIM          ;  IS GUARDIAN HIDDEN BY WALL ?
         LDB     TEMP2            ;  .    RIGHT WALL ?
         CMPA    B,X              ;  .    .
         BGT     NXTGRD           ;  .    .
         LDX     #CHLLIM          ;  .    LEFT WALL ?
         CMPA    B,X              ;  .    .
         BLT     NXTGRD           ;  .    .
;
;==========================================================================JJH
;GDSP3   PSHS    DP               ;  CODE DELETED - REV. B CHANGES   ======JJH
;        LDA     #$D0             ;  .                               ======JJH
;        TFR     A,DP             ;  .                               ======JJH
;        SETDP   $D0              ;  .                               ======JJH
;        LDX     #G.ERG           ;  .                               ======JJH
;        LDA     GRDERG,U         ;  .                               ======JJH
;        LDA     A,X              ;  .                               ======JJH
;        JSR     INTENS           ;  .                               ======JJH
;        LDD     GRDYX,U          ;  .                               ======JJH
;        JSR     POSITD           ;  .                               ======JJH
;        LDX     #PGUARD          ;  .                               ======JJH
;        LDA     FRAME            ;  .                               ======JJH
;        LSRA                     ;  .                               ======JJH
;        LSRA                     ;  .                               ======JJH
;        ANDA    #$06             ;  .                               ======JJH
;        ADDA    GRDFLG,U         ;  .                               ======JJH
;        ANDA    #$3E             ;  .                               ======JJH
;        LDX     A,X              ;  .                               ======JJH
;        LDA     X+               ;  .                               ======JJH
;        LDB     GRDSIZ,U         ;  .                               ======JJH
;        JSR     TDUFFY           ;  .                               ======JJH
;        PULS    DP               ;  .                               ======JJH
;==========================================================================JJH
;
;==========================================================================JJH
GDSP3    PSHS    Y,DP             ;  CODE ADDED - REV. B CHANGES     ======JJH
         LDA     #$D0             ;  .                               ======JJH
         TFR     A,DP             ;  .                               ======JJH
         SETDP   $D0              ;  .                               ======JJH
         LDX     #G.ERG           ;  .                               ======JJH
         LDA     GRDERG,U         ;  .                               ======JJH
         LDA     A,X              ;  .                               ======JJH
         JSR     INTENS           ;  .                               ======JJH
         LDX     #PGUARD          ;  .                               ======JJH
         LDA     FRAME            ;  .                               ======JJH
         LSRA                     ;  .                               ======JJH
         LSRA                     ;  .                               ======JJH
         ANDA    #$06             ;  .                               ======JJH
         ADDA    GRDFLG,U         ;  .                               ======JJH
         ANDA    #$3E             ;  .                               ======JJH
         LDX     A,X              ;  .                               ======JJH
         LDY     GRDYX,U          ;  .                               ======JJH
         LDB     GRDSIZ,U         ;  .                               ======JJH
         JSR     DFSHRT           ;  .                               ======JJH
         PULS    Y,DP             ;  .                               ======JJH
;==========================================================================JJH
         SETDP   $C8              ;  .    .
;
;
NXTGRD   LEAU    GRDLEN,U         ;  BUMP TO NEXT ENTRY
         LEAY    SPKLEN,Y         ;  .
         DEC     TEMP1            ;  .    END-OF-GUARDIAN TABLE ?
         LBNE    NEWGRD           ;  .    .
         RTS                      ;  .    .    RETURN TO CALLER
;
;
GDYING   LDA     SPKFLG,Y         ;  GUARDIAN FOR THIS ENTRY IS DYING
         BPL     GDIE0            ;  .    IS IT HOLDING A SPIKER ?
         PSHS    U                ;  .    .    IF SO, DROP IT
         JSR     DRPSPK           ;  .    .    .
         PULS    U                ;  .    .    .
;
GDIE0    LDA     GRDERG,U         ;  .    DONE DYING YET ?
         SUBA    #$01             ;  .    .
         STA     GRDERG,U         ;  .    .
         CMPA    #$48             ;  .    .
         BLE     GDIE1            ;  .    .
;
         LDB     GRDFLG,U         ;  SET-UP FOR GUARDIAN DISMEMBERMENT ROTATION
         LSRB                     ;  .    CALCULATE DUFFY DISPLACEMENTS
         LSRB                     ;  .    .
         ANDB    #$06             ;  .    .
         STB     TEMP2            ;  .    .
;
         PSHS    Y,U              ;  .    ROTATE GUARDIAN SEGMENTS
         TFR     U,Y              ;  .    .
         LDX     #EXGRD1          ;  .    .    FETCH INDICATED DUFFY 
         LDX     B,X              ;  .    .    .
         LDU     #RGRD1           ;  .    .    .
         LDA     GRDYD,Y          ;  .    .    DECREMENT ROTATIONAL VALUE
         SUBA    #$02             ;  .    .    .
         STA     GRDYD,Y          ;  .    .    .
         LDB     X+               ;  .    .    SET DUFFY LENGTH
         STB     U+               ;  .    .    .
         JSR     DROT             ;  .    .    ROTATE DUFFY
;
         LDX     #EXGRD2          ;  .    .    FETCH INDICATED DUFFY
         LDB     TEMP2            ;  .    .    .
         LDX     B,X              ;  .    .    .
         LDU     #RGRD2           ;  .    .    .
         LDA     GRDYD+1,Y        ;  .    .    INCREMENT ROTATIONAL VALUE
         ADDA    #$02             ;  .    .    .
         STA     GRDYD+1,Y        ;  .    .    .
         LDB     X+               ;  .    .    SET DUFFY LENGTH
         STB     U+               ;  .    .    .
         JSR     DROT             ;  .    .    ROTATE DUFFY
;
         LDX     #EXGRD3          ;  .    .    FETCH INDICATED DUFFY
         LDB     TEMP2            ;  .    .    .
         LDX     B,X              ;  .    .    .
         LDU     #RGRD3           ;  .    .    .
         LDA     GRDYD+2,Y        ;  .    .    DECREMENT ROTATIONAL VALUE
         SUBA    #$03             ;  .    .    .
         STA     GRDYD+2,Y        ;  .    .    .
         LDB     X+               ;  .    .    SET DUFFY LENGTH
         STB     U+               ;  .    .    .
         JSR     DROT             ;  .    .    ROTATE DUFFY
         PULS    Y,U              ;  .    .
;
         PSHS    U,DP             ;  .    SET-UP TO DRAW DYING GUARDIAN
         LDB     #$D0             ;  .    .
         TFR     B,DP             ;  .    .
         SETDP   $D0              ;  .    .
;
         LDA     GRDERG,U         ;  DRAW GUARDIAN DISMEMBERMENT
         JSR     INTENS           ;  .
;
         LDX     GRDYX,U          ;  .    DRAW VECTOR STRING
         LDA     GRDSIZ,U         ;  .    .    SET GUARDIAN SIZE
         JSR     SPRTBL           ;  .    .
;
         PULS    U,DP             ;  .
         SETDP   $C8              ;  .
         BRA     GDIE9            ;  .
;
;
GDIE1    CLR     GRDFLG,U         ;  GUARDIAN HAS DIED
         PSHS    U                ;  .    INSERT NEW GUARDIAN, IF POSSIBLE
         JSR     GRDINS           ;  .    .
         PULS    U                ;  .    .
         DEC     CGRD             ;  .    RESET GUARDIAN ENTRY
;
GDIE9    JMP     NXTGRD           ;  .    BUMP TO NEXT ENTRY
;
;
;
;
;  SET-UP FOR FALLING GUARDIAN
;  ===========================
;
GRFALL   JSR     SWING            ;  SET FALL ANGLE
         ADDB    #$20             ;  .
         ANDB    #$3F             ;  .
         STB     GRDANG,U         ;  .
;
         LDA     #$30             ;  CALCULATE NEW DISPLACEMENTS
         JSR     CALDSP           ;  .
;
         LDA     GRDFLG,U         ;  SET FALLING FLAG
         ORA     #$40             ;  .
         STA     GRDFLG,U         ;  .
;
         JSR     RANDOM           ;  SET NEW TIMER VALUE
         ANDA    #$1F             ;  .
         ORA     #$08             ;  .    SET MINIMUM TIME
         STA     GRDTMR,U         ;  .
;
         RTS                      ;  RETURN TO CALLER
;
;
         IF      L.GRD = OFF      ;-------------------------------------------
         LIST    *                ;-------------------------------------------
         ENDIF                    ;-------------------------------------------