384 lines
6.2 KiB
NASM
384 lines
6.2 KiB
NASM
.FILE 'ROBODOOR.ASM (ENTRANCE/EXIT DOOR)'
|
||
.TITLE 'ROBO-RAMA GAME PROGRAM'
|
||
.WIDTH 132
|
||
.OPTION B,D,L,T
|
||
.MNOLIST
|
||
|
||
;
|
||
; INITIATED: APRIL 26,1989
|
||
; MODIFIED: !
|
||
; SOFTWARE: MARK TURMELL
|
||
;
|
||
; COPYRIGHT (C) 1989 WILLIAMS ELECTRONICS GAMES, INC.
|
||
;
|
||
;
|
||
; GET THE SYSTEM STUFF
|
||
|
||
.INCLUDE "MPROC.EQU" ;MPROC EQUATES
|
||
.INCLUDE "DISP.EQU" ;DISPLAY PROC. EQUATES
|
||
.INCLUDE "\VIDEO\SYS\SYS.INC" ;Z UNIT SYSTEM EQUATES
|
||
.INCLUDE "\VIDEO\SYS\MACROS.HDR" ;MACROS DEFINITIONS
|
||
.INCLUDE "IMGTBL.GLO"
|
||
.INCLUDE "ROBO.EQU"
|
||
;
|
||
;SOUNDS EXTERNAL
|
||
;
|
||
.REF DOOR1
|
||
|
||
;SYMBOLS EXTERNALLY DEFINED
|
||
;
|
||
.REF PRCSLP,CLIPOBJ,GETPRC,CIRCUIT
|
||
.REF KEEP_TOPL_GATE,KEEP_TOPR_GATE
|
||
.REF EXISTP
|
||
.REF HALT,KEEP_LFT_GATE,KEEP_RGT_GATE
|
||
;
|
||
;SYMBOLS DEFINED IN THIS FILE
|
||
;
|
||
.DEF SET_GATE_2
|
||
.DEF KP_LS,KP_RS,KP_TS
|
||
; .DEF SUBDOOR
|
||
.DEF LSIDEVW,RSIDEVW
|
||
;
|
||
;UNINITIALIZED RAM DEFINITIONS
|
||
;
|
||
.BSS LTVW,8
|
||
.BSS KP_LS,8
|
||
.BSS KP_RS,8
|
||
.BSS KP_TS,8
|
||
.BSS LSIDEVW,8
|
||
.BSS RSIDEVW,8
|
||
;
|
||
.TEXT
|
||
;
|
||
SET_GATE_2:
|
||
;A1=TIME OPEN IN FIELDS/5
|
||
;OUT! GET THIS OUT OF HERE!
|
||
DEC A0
|
||
CMPI 3,A0
|
||
JREQ NO_GT ;NO BOTTOM GATE TO OPEN!
|
||
PUSH A0
|
||
CALLA GATES ;CREATES PROCESS TO OPEN CORRECT GATE
|
||
PULL A0
|
||
RETS
|
||
NO_GT:
|
||
MOVI DOOR1,A0
|
||
CALLA ONESND
|
||
|
||
RETS
|
||
;
|
||
GATES:
|
||
;ENTER:
|
||
; A0=
|
||
; 0=LEFT SIDE GATE
|
||
; 1=RIGHT SIDE GATE
|
||
; 2=TOP GATE
|
||
|
||
; A1=
|
||
; TIME OPEN IN FIELDS/5
|
||
MOVE A1,A10 ;KEEP IN NEW PROCESS
|
||
|
||
MOVE A0,A0
|
||
JRNE D2
|
||
MOVB @KP_LS,A0
|
||
JRZ F1
|
||
BTST 7,A1 ;FFFFFFF IF OPENING DOOR UPON EXIT
|
||
JRNZ G1
|
||
CMP A0,A1
|
||
JRLT RT
|
||
G1 MOVB A1,@KP_LS
|
||
RT
|
||
;IF LEFT DOOR IMAGE SAYS 'CLOSED', THEN FIX CNTR, OPEN DOOR!
|
||
MOVE @KEEP_LFT_GATE,A0,L
|
||
MOVE *A0(OIMG),A0,L
|
||
CMPI SDOOR1,A0
|
||
JREQ F1A ;BR=DOOR IS CLOSED NOT OPEN!!!
|
||
;COULD CMP TO SDRBT1 ALSO!
|
||
RETS
|
||
F1A
|
||
MOVI DRLPID,A0
|
||
CLR A1
|
||
NOT A1
|
||
CALLA EXISTP
|
||
JRZ F1
|
||
;DOOR PROC STILL AROUND!
|
||
RETS
|
||
F1
|
||
CREATE DRLPID,OPENLSIDE
|
||
RETS
|
||
D2 CMPI 1,A0
|
||
JRNE D3
|
||
MOVB @KP_RS,A0
|
||
JRZ F2
|
||
BTST 7,A1 ;FFFFFFF IF OPENING DOOR UPON EXIT
|
||
JRNZ G2
|
||
CMP A0,A1
|
||
JRLT RT0
|
||
G2 MOVB A1,@KP_RS
|
||
RT0
|
||
;IF RGT DOOR IMAGE SAYS 'CLOSED', THEN FIX CNTR, OPEN DOOR!
|
||
MOVE @KEEP_RGT_GATE,A0,L
|
||
MOVE *A0(OIMG),A0,L
|
||
CMPI SDOOR1,A0
|
||
JREQ F1B ;BR=DOOR IS CLOSED NOT OPEN!!!
|
||
;COULD CMP TO SDRBT1 ALSO!
|
||
RETS
|
||
F1B
|
||
; JRUC $
|
||
MOVI DRRPID,A0
|
||
CLR A1
|
||
NOT A1
|
||
CALLA EXISTP
|
||
JRZ F2
|
||
;DOOR PROC STILL AROUND!
|
||
RETS
|
||
F2 CREATE DRRPID,OPENRSIDE
|
||
RETS
|
||
D3 MOVB @KP_TS,A0
|
||
JRZ F3
|
||
BTST 7,A1 ;FFFFFFF IF OPENING DOOR UPON EXIT
|
||
JRNZ G3
|
||
CMP A0,A1
|
||
JRLT RT1
|
||
G3 MOVB A1,@KP_TS
|
||
RT1
|
||
MOVE @KEEP_TOPL_GATE,A0,L
|
||
MOVE *A0(OIMG),A0,L
|
||
CMPI FDR,A0
|
||
JREQ F1C ;BR=DOOR IS CLOSED NOT OPEN!!!
|
||
;COULD CMP TO RBTDR1 ALSO!
|
||
RETS
|
||
F1C
|
||
; JRUC $
|
||
F3 CREATE DRTOPID,OPENTOP
|
||
RETS
|
||
|
||
OPENLSIDE:
|
||
MOVI DOOR1,A0
|
||
CALLA ONESND
|
||
MOVE @KEEP_LFT_GATE,A8,L
|
||
MOVK 1,A0
|
||
MOVB A0,@LSIDEVW
|
||
MOVB A10,@KP_LS ;LEFT SIDE OPEN TIMER
|
||
DOORS1C:
|
||
MOVB @LSIDEVW,A0
|
||
INC A0
|
||
CMPI 5,A0 ;5
|
||
JRNE DONOC
|
||
SL2
|
||
SLEEP 5
|
||
MOVE @HALT,A0
|
||
JRNZ SL2
|
||
|
||
MOVB @KP_LS,A10 ;LEFT SIDE OPEN TIMER
|
||
JRN SL2 ;IF FF, DO NOT CLOSE!
|
||
DEC A10
|
||
MOVB A10,@KP_LS ;LEFT SIDE OPEN TIMER
|
||
CMPI 1,A10
|
||
JRNZ SL2
|
||
|
||
DL MOVE @HALT,A0,W
|
||
JRZ CLOSELSIDE
|
||
SLOOP 1,DL
|
||
CLOSELSIDE:
|
||
MOVI DOOR1,A0
|
||
CALLA ONESND
|
||
MOVE @KEEP_LFT_GATE,A8,L
|
||
;NEED TO RESTUFF?
|
||
MOVK 5,A0 ;5
|
||
MOVB A0,@LSIDEVW
|
||
DOORS1B:
|
||
MOVB @LSIDEVW,A0
|
||
DEC A0
|
||
JRNZ DONOB
|
||
MOVB A0,@KP_LS
|
||
DIE
|
||
DONOB:
|
||
MOVB A0,@LSIDEVW
|
||
CALLA LGATEANI
|
||
SLEEP 3
|
||
JRUC DOORS1B
|
||
DONOC
|
||
MOVB A0,@LSIDEVW
|
||
CALLA LGATEANI
|
||
SLEEP 3
|
||
JRUC DOORS1C
|
||
;
|
||
OPENRSIDE:
|
||
MOVI DOOR1,A0
|
||
CALLA ONESND
|
||
MOVE @KEEP_RGT_GATE,A8,L
|
||
CLR A0
|
||
MOVB A0,@RSIDEVW
|
||
MOVB A10,@KP_RS ;RGT SIDE OPEN TIMER
|
||
DOORS1E:
|
||
MOVB @RSIDEVW,A0
|
||
INC A0
|
||
CMPI 4,A0 ;4
|
||
JRNE DONOE
|
||
SL3
|
||
SLEEP 5
|
||
MOVE @HALT,A0
|
||
JRNZ SL3
|
||
MOVB @KP_RS,A10 ;RGT SIDE OPEN TIMER
|
||
JRN SL3
|
||
DEC A10
|
||
MOVB A10,@KP_RS ;RGT SIDE OPEN TIMER
|
||
CMPI 1,A10
|
||
JRNZ SL3
|
||
|
||
DL1 MOVE @HALT,A0,W
|
||
JRZ CLOSERSIDE
|
||
SLOOP 1,DL1
|
||
CLOSERSIDE:
|
||
MOVI DOOR1,A0
|
||
CALLA ONESND
|
||
MOVE @KEEP_RGT_GATE,A8,L
|
||
;NEED TO RESTUFF?
|
||
MOVK 4,A0 ;4
|
||
MOVB A0,@RSIDEVW
|
||
DOORS1D:
|
||
MOVB @RSIDEVW,A0
|
||
DEC A0
|
||
JRP DONOD
|
||
CLR A0
|
||
MOVB A0,@KP_RS
|
||
DIE
|
||
DONOD:
|
||
MOVB A0,@RSIDEVW
|
||
CALLA LGATEANI
|
||
SLEEP 3
|
||
JRUC DOORS1D
|
||
DONOE
|
||
MOVB A0,@RSIDEVW
|
||
CALLA LGATEANI
|
||
SLEEP 3
|
||
JRUC DOORS1E
|
||
|
||
LGATEANI:
|
||
SLL 5,A0
|
||
|
||
MOVE @CIRCUIT,A1
|
||
SLL 5,A1
|
||
ADDI CTBL,A1
|
||
MOVE *A1,A1,L
|
||
ADD A1,A0
|
||
|
||
; ADDI SIDETBL,A0
|
||
CLR A11
|
||
MOVE *A0,A1,L
|
||
MOVE *A8(OFLAGS),A4
|
||
CALLA ANI
|
||
RETS
|
||
TGATEANI:
|
||
SLL 5,A0
|
||
|
||
MOVE @CIRCUIT,A1
|
||
SLL 5,A1
|
||
ADDI CTBLT,A1
|
||
MOVE *A1,A1,L
|
||
ADD A1,A0
|
||
|
||
; ADDI TDR,A0
|
||
CLR A11
|
||
MOVE *A0,A1,L
|
||
MOVE *A8(OFLAGS),A4
|
||
CALLA ANI
|
||
RETS
|
||
TGATEANI2:
|
||
SWAP A8,A9
|
||
SLL 5,A0
|
||
|
||
MOVE @CIRCUIT,A1
|
||
SLL 5,A1
|
||
ADDI CTBLT,A1
|
||
MOVE *A1,A1,L
|
||
ADD A1,A0
|
||
|
||
; ADDI TDR,A0
|
||
CLR A11
|
||
MOVE *A0,A1,L
|
||
MOVE *A8(OFLAGS),A4
|
||
; ORI M_FLIPH,A4
|
||
CALLA ANI
|
||
SWAP A8,A9
|
||
RETS
|
||
CTBL .LONG SIDETBL,SIDE2,SIDE3
|
||
CTBLT .LONG TDR,RTDR,TTDR
|
||
|
||
SIDE2 .LONG SDRBT1,SDRBT1,SDRBT2,SDRBT3,SDRBT3
|
||
SIDE3 .LONG TSDR1,TSDR1,TSDR2,TSDR3,TSDR3
|
||
SIDETBL .LONG SDOOR1,SDOOR1,SDOOR2,SDOOR3,SDOOR3
|
||
|
||
TDR .LONG FDR,FDR1,FDR2,FDR3,FDR4,FDR5,FDR6,FDR7,FDR7
|
||
RTDR .LONG RBTDR1,RBTDR2,RBTDR3,RBTDR4,RBTDR5,RBTDR6,RBTDR7,RBTDR8,RBTDR8
|
||
TTDR .LONG TMPDR,TPDR1,TPDR2,TPDR3,TPDR4,TPDR5,TPDR6,TPDR7,TPDR7
|
||
|
||
OPENTOP:
|
||
MOVI DOOR1,A0
|
||
CALLA ONESND
|
||
MOVE @KEEP_TOPL_GATE,A8,L
|
||
MOVE @KEEP_TOPR_GATE,A9,L
|
||
CLR A0
|
||
MOVB A0,@LTVW
|
||
MOVB A10,@KP_TS ;TOP OPEN TIMER
|
||
RS1C:
|
||
MOVB @LTVW,A0
|
||
INC A0
|
||
CMPI 9,A0 ;5
|
||
JRNE NOC
|
||
;DOOR IS OPEN
|
||
L2
|
||
SLEEP 5
|
||
MOVE @HALT,A0
|
||
JRNZ L2
|
||
|
||
MOVB @KP_TS,A10 ;LEFT SIDE OPEN TIMER
|
||
JRN L2 ;IF FF, DO NOT CLOSE!
|
||
DEC A10
|
||
MOVB A10,@KP_TS ;LEFT SIDE OPEN TIMER
|
||
CMPI 1,A10
|
||
JRNZ L2
|
||
;TIME TO CLOSE IT
|
||
|
||
L3 MOVE @HALT,A0,W
|
||
JRZ CLOSET
|
||
SLOOP 1,L3
|
||
CLOSET:
|
||
MOVI DOOR1,A0
|
||
CALLA ONESND
|
||
;A8 NEEDED TO RESTUFF?
|
||
MOVK 9,A0 ;5
|
||
MOVB A0,@LTVW
|
||
RS1B:
|
||
MOVB @LTVW,A0
|
||
DEC A0
|
||
JRNZ OB
|
||
|
||
CALLA TGATEANI
|
||
CLR A0
|
||
CALLA TGATEANI2 ;RIGHT SIDE OF TOP DOOR
|
||
;ALL DONE
|
||
SLEEP 1
|
||
CLR A0
|
||
MOVB A0,@KP_TS
|
||
DIE
|
||
OB:
|
||
MOVB A0,@LTVW
|
||
CALLA TGATEANI
|
||
MOVB @LTVW,A0
|
||
CALLA TGATEANI2 ;RIGHT SIDE OF TOP DOOR
|
||
SLEEP 1
|
||
JRUC RS1B
|
||
NOC
|
||
MOVB A0,@LTVW
|
||
CALLA TGATEANI
|
||
MOVB @LTVW,A0
|
||
CALLA TGATEANI2 ;RIGHT SIDE OF TOP DOOR
|
||
SLEEP 1
|
||
JRUC RS1C
|
||
;
|
||
|
||
|
||
.END
|
||
|
||
|