.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