smashtv/ROBODOOR.ASM

384 lines
6.2 KiB
NASM
Raw Permalink Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

.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