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
|
|||
|
|
|||
|
|