smashtv/ROBODOOR.ASM

384 lines
6.2 KiB
NASM
Raw Permalink Normal View History

2021-04-06 15:09:56 -07:00
.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