first commit
parent
d2bd33ff01
commit
20f616bb9c
|
@ -0,0 +1,147 @@
|
|||
$ CMD_NAME = "[LIBRARY.SINISTAR.COM]ASM.COM"
|
||||
$!!!
|
||||
$!
|
||||
$! SYNOPSIS
|
||||
$!
|
||||
$! ASM [-ABS] [-REL] [-NEW] [-OLD] [-FAST] [-MED] [-SLOW] [-BATCH] [-INT] sourcename
|
||||
$!
|
||||
$! REQUIRED PARAMETERS
|
||||
$!
|
||||
$! The source is read from sourcename.SRC
|
||||
$!
|
||||
$! OPTIONAL PARAMETERS
|
||||
$!
|
||||
$! -ABS = An absolute object is generated.
|
||||
$! -REL = A relocatable object is generated (default).
|
||||
$!
|
||||
$! -NEW = Assemble using the 4/83 version of the BSO assembler (default).
|
||||
$! -OLD = Assemble using the 1982 version of the BSO assembler.
|
||||
$!
|
||||
$! -FAST = Assemble in the queue SYS$FAST (default).
|
||||
$! -MED = Assemble in the queue SYS$MED
|
||||
$! -SLOW = Assemble in the queue SYS$SLOW
|
||||
$! -BATCH = Assemble in the queue SYS$BATCH
|
||||
$! -INT = Assemble interactively
|
||||
$!
|
||||
$!!!
|
||||
$ SET NOON
|
||||
$ DIR := DEFAULT
|
||||
$NOP1: IF 'F$LOCATE(":=",P1).EQ.'F$LENGTH(P1) THEN $GOTO _OKP1
|
||||
$ 'P1 !DEFINE OPTION
|
||||
$ P1 := 'P2
|
||||
$ P2 := 'P3
|
||||
$ P3 := 'P4
|
||||
$ P4 := 'P5
|
||||
$ P5 := 'P6
|
||||
$ P6 := 'P7
|
||||
$ P7 := 'P8
|
||||
$ P8 := 'P9
|
||||
$ GOTO NOP1
|
||||
$_OKP1:
|
||||
$ IF "''P9'".EQS."" THEN GOTO _DEFAULTS
|
||||
$ write SYS$OUTPUT "''CMD_NAME': Too many arguments."
|
||||
$ EXIT
|
||||
$_DEFAULTS:
|
||||
$ P9 = "<EOA>" ! End of Arguments marker
|
||||
$ QUEUE = "INTERACTIVE" ! Assemble interactively
|
||||
$ MODE = "/R" ! Assemble in relocatable (not absolute) mode
|
||||
$ BSO = "NEW" ! Use the new BSO assembler
|
||||
$_ARG_CHECK:
|
||||
$ IF "''P1'".EQS."" THEN GOTO _SHIFT
|
||||
$!!!
|
||||
$! The QUEUE
|
||||
$!!!
|
||||
$_INT:
|
||||
$ IF "''P1'".NES."-INT" THEN GOTO _FAST
|
||||
$ QUEUE = "INTERACTIVE"
|
||||
$ GOTO _SHIFT
|
||||
$_FAST:
|
||||
$ IF "''P1'".NES."-FAST" THEN GOTO _MED
|
||||
$ QUEUE = "FAST"
|
||||
$ GOTO _SHIFT
|
||||
$_MED:
|
||||
$ IF "''P1'".NES."-MED" THEN GOTO _SLOW
|
||||
$ QUEUE = "MED"
|
||||
$ GOTO _SHIFT
|
||||
$_SLOW:
|
||||
$ IF "''P1'".NES."-SLOW" THEN GOTO _BATCH
|
||||
$ QUEUE = "SLOW"
|
||||
$ GOTO _SHIFT
|
||||
$_BATCH:
|
||||
$ IF "''P1'".NES."-BATCH" THEN GOTO _ABS
|
||||
$ QUEUE = "BATCH"
|
||||
$ GOTO _SHIFT
|
||||
$_ABS:
|
||||
$ IF "''P1'".NES."-ABS" THEN GOTO _REL
|
||||
$ MODE = "/A"
|
||||
$ GOTO _SHIFT
|
||||
$_REL:
|
||||
$ IF "''P1'".NES."-REL" THEN GOTO _NEW
|
||||
$ MODE = "/R"
|
||||
$ GOTO _SHIFT
|
||||
$_NEW:
|
||||
$ IF "''P1'".NES."-NEW" THEN GOTO _OLD
|
||||
$ BSO = "-NEW"
|
||||
$ GOTO _SHIFT
|
||||
$_OLD:
|
||||
$ IF "''P1'".NES."-OLD" THEN GOTO _SOURCE
|
||||
$ BSO = "-OLD"
|
||||
$ GOTO _SHIFT
|
||||
$_SOURCE:
|
||||
$ SOURCE = "''P1'" ! Assign the source file name
|
||||
$_SHIFT:
|
||||
$ P1 = "''P2'" ! Shift
|
||||
$ P2 = "''P3'" ! all
|
||||
$ P3 = "''P4'" ! the
|
||||
$ P4 = "''P5'" ! arguments
|
||||
$ P5 = "''P6'" ! down
|
||||
$ P6 = "''P7'" ! and
|
||||
$ P7 = "''P8'" ! leave
|
||||
$ P8 = "''P9'" ! the last one marked by "<EOA>".
|
||||
$ IF "''P1'".NES."<EOA>" THEN GOTO _ARG_CHECK ! Examine all the arguments.
|
||||
$!
|
||||
$! The arguments are parsed.
|
||||
$!
|
||||
$ IF "''SOURCE'".NES."" THEN GOTO _ASM
|
||||
$ write SYS$OUTPUT "ERROR: Source filename is missing."
|
||||
$ EXIT
|
||||
$_ASM:
|
||||
$ IF "''QUEUE'".EQS."INTERACTIVE" THEN GOTO _ASMINT
|
||||
$! WRITE SYS$OUTPUT "ASM Q(''QUEUE') M(''MODE') B(''BSO') ''SOURCE'"
|
||||
$ IF "''MODE'".EQS."/A" THEN MODE = "-ABS"
|
||||
$ IF "''MODE'".EQS."/R" THEN MODE = "-REL"
|
||||
$ S := SUBMIT/QUEUE=SYS$'QUEUE'/NOTIFY/LOG='F$DIR()''SOURCE'.LOG/NOPRINT
|
||||
$ S/PARA=(DIR:='F$DIR()',-INT,'BSO','MODE','SOURCE')/NAME='SOURCE''QUEUE' 'CMD_NAME'
|
||||
$ EXIT
|
||||
$!
|
||||
$_ASMINT:
|
||||
$ ON ERROR THEN GOTO INTERR
|
||||
$ WRITE SYS$OUTPUT "Assembling ''SOURCE'.SRC"
|
||||
$ IF "''DIR'".NES."DEFAULT" THEN SET DEFAULT 'DIR'
|
||||
$!
|
||||
$ IF "''MODE'".EQS."/A" THEN OBJEXT = "ABS"
|
||||
$ IF "''MODE'".EQS."/R" THEN OBJEXT = "ROB"
|
||||
$!
|
||||
$ IF "''BSO'".NES."-OLD" THEN GOTO _NEWBSO
|
||||
$ BSODIR = "CROSS"
|
||||
$ BSOVER = ""
|
||||
$ GOTO _BSOSET
|
||||
$_NEWBSO:
|
||||
$ IF "''BSO'".NES."-NEW" THEN GOTO _BSOSET
|
||||
$ BSODIR = "CROSS.NEW"
|
||||
$ BSOVER = "V"
|
||||
$_BSOSET:
|
||||
$!
|
||||
$! Get rid of old LOG files.
|
||||
$ IF F$SEARCH("''SOURCE'.LOG").NES."" THEN $DELETE 'SOURCE'.LOG;*
|
||||
$!
|
||||
$ SET VERIFY
|
||||
$ MCR SY:['BSODIR']CY6809'BSOVER' 'SOURCE'.'OBJEXT','SOURCE'.LIS='SOURCE'/D/X'MODE'
|
||||
$!
|
||||
$ MCR SY:['BSODIR']OBJCNV 'SOURCE'.MOT/F:MOT='SOURCE'.ABS/F:BSO
|
||||
$ SET NOVERIFY
|
||||
$! DELETE 'SOURCE'.ABS;*
|
||||
$ PURGE 'SOURCE'.LIS,'SOURCE'.MOT,'SOURCE'.'OBJEXT'
|
||||
$ EXIT
|
||||
$INTERR:
|
||||
$ WRITE SYS$ERROR "Assembly error(s) in ''SOURCE'.LOG"
|
|
@ -0,0 +1,12 @@
|
|||
$! CAPTURE FAST/SLOW/BATCH COMMAND PARMS
|
||||
$!
|
||||
$ OPEN/W/ERR=_ABORT FILE: CAPTURE.TMP
|
||||
$ DIR:='F$DIR()
|
||||
$ WRITE FILE: "$ SET DEFAULT ",DIR
|
||||
$ WRITE FILE: "$ SHOW DEFAULT"
|
||||
$ WRITE FILE: "$ ",P2," ",P3," ",P4," ",P5," ",P6," ",P7," ",P8
|
||||
$ WRITE FILE: "$ DELETE CAPTURE.TMP;*"
|
||||
$ CLOSE FILE:
|
||||
$ SUBMIT/NOTIFY/QUEUE=SYS$'P1'/LOG=t.tmp CAPTURE.TMP
|
||||
$_ABORT:
|
||||
$ EXIT
|
|
@ -0,0 +1,11 @@
|
|||
$ ON ERROR THEN GOTO NO_FILE
|
||||
$ ON CONTROL_Y THEN GOTO _ABORT
|
||||
$!
|
||||
$ open/error=NO_FILE test 'P1'
|
||||
$ close test
|
||||
$ delete 'P1';*
|
||||
$ EXIT ! OK
|
||||
$NO_FILE:
|
||||
$ EXIT ! OK
|
||||
$_ABORT:
|
||||
$ STOP ! ABORT
|
|
@ -0,0 +1,8 @@
|
|||
$ IF P1.EQS."" THEN GOTO _ERROR
|
||||
$ ASSIGN/USER SYS$COMMAND SYS$INPUT
|
||||
$ EDIT/EDT/COMMAND=['SAMDIR']EQUATE.EDT/OUTPUT='P1'.equ 'P1'.lis
|
||||
$ EXIT
|
||||
$!
|
||||
$_ERROR:
|
||||
$ write SYS$OUTPUT "Missing argument."
|
||||
$ STOP
|
|
@ -0,0 +1,14 @@
|
|||
$ assign/user nl: SYS$OUTPUT ! Get rid of FILE NOT FOUND message.
|
||||
$ ON ERROR THEN GOTO NONE
|
||||
$ ON CONTROL_Y THEN GOTO ABORT
|
||||
$!
|
||||
$ IF "''F$SEARCH(P1)'".EQS."" THEN GOTO NONE
|
||||
$ open FROM 'P1'
|
||||
$ read/end=NONE FROM record
|
||||
$ close FROM
|
||||
$ exit 1 ! IF .NOT. $STATUS THEN $ GOTO GOT_SOMETHING
|
||||
$NONE:
|
||||
$ close FROM
|
||||
$ exit 0 ! GOT_NOTHING (error)
|
||||
$ABORT:
|
||||
$ stop ! ABORT
|
|
@ -0,0 +1,10 @@
|
|||
$ ON ERROR THEN GOTO _ABORT
|
||||
$ ON CONTROL_Y THEN GOTO _ABORT
|
||||
$!
|
||||
$ ESC[0,8] = %X1B ! VT100 control character.
|
||||
$ WRITE SYS$OUTPUT ESC,"[23;1H",ESC,"[0KResponses: ''P3'"
|
||||
$ WRITE SYS$OUTPUT ESC,"[21;1H" ! Position cursor for inquiry.
|
||||
$ INQUIRE/GLO 'P1' "''ESC'[1;5m''P2'''ESC'[0m" ! Inquire in bold blink.
|
||||
$ EXIT 1 ! OK
|
||||
$_ABORT:
|
||||
$ EXIT 0 ! BAD
|
|
@ -0,0 +1,13 @@
|
|||
$ ON ERROR THEN GOTO _EXIT
|
||||
$ ON CONTROL_Y THEN GOTO _ABORT
|
||||
$!
|
||||
$ WRITE SYS$OUTPUT ESC,"[24;1H " ! Clear bottom two lines of the screen
|
||||
$ WRITE SYS$OUTPUT " " ! for informational use.
|
||||
$ WRITE SYS$OUTPUT ESC,"[1;22r" ! Set scrolling region
|
||||
$ WRITE SYS$OUTPUT ESC,"[24;1H",ESC,"#6",ESC,"[7mLIBRARY COPY of SINISTAR",ESC,"[0m"
|
||||
$ WRITE SYS$OUTPUT ESC,"[23;1H",ESC,"[0K",ESC,"[5m",P1,ESC,"[0m: ",P2
|
||||
$ WRITE SYS$OUTPUT ESC,"[21;1H"
|
||||
$_EXIT:
|
||||
$ EXIT
|
||||
$_ABORT:
|
||||
$ STOP
|
|
@ -0,0 +1,29 @@
|
|||
$ SAVE_VERIFY = F$VERIFY(0)
|
||||
$ CONTEXT = ""
|
||||
$!
|
||||
$ WRITE SYS$OUTPUT " PID Username"
|
||||
$LOOP:
|
||||
$ PID = F$PID(CONTEXT)
|
||||
$ IF PID .EQS. "" THEN GOTO DONE
|
||||
$!
|
||||
$ IMAGNAME = F$GETJPI(PID,"IMAGNAME")
|
||||
$ IMAGNAME = F$EXTRACT(F$LOCATE("]",IMAGNAME)+1,999,IMAGNAME)
|
||||
$ IMAGNAME = F$EXTRACT(0,F$LOCATE(".",IMAGNAME),IMAGNAME)
|
||||
$!
|
||||
$ TERMINAL = F$GETJPI(PID,"TERMINAL")
|
||||
$ IF TERMINAL .EQS. "" THEN -
|
||||
TERMINAL = "-"+F$EXTRACT(0,3,F$GETJPI(PID,"MODE"))+"-"
|
||||
$ IF TERMINAL .EQS. "-INT-" THEN TERMINAL = "-DET-"
|
||||
$ IF F$GETJPI(PID,"OWNER") .NE. 0 THEN TERMINAL = "-SUB-"
|
||||
$!
|
||||
$ LINE = F$FAO("!AS !12AS !5AS !9AS !15AS !5AS !2UL/!UL !10AS",-
|
||||
PID,F$GETJPI(PID,"USERNAME"),TERMINAL,-
|
||||
F$GETJPI(PID,"UIC"),F$GETJPI(PID,"PRCNAM"),-
|
||||
F$GETJPI(PID,"STATE"),F$GETJPI(PID,"PRI"),-
|
||||
F$GETJPI(PID,"PRIB"),IMAGNAME)
|
||||
$ WRITE SYS$OUTPUT LINE
|
||||
$ GOTO LOOP
|
||||
$!
|
||||
$DONE:
|
||||
$ IF SAVE_VERIFY THEN SET VERIFY
|
||||
$ EXIT
|
|
@ -0,0 +1,46 @@
|
|||
$!
|
||||
$! MAKE SURE THIS FILE IS AN ASSEMBLY & DELETE THE LISTING,
|
||||
$! LOG, .ABS, & .MOT
|
||||
$!
|
||||
$ FILES := [...]*.MOT;
|
||||
$LOOP: FILE := 'F$SEARCH(FILES,2)'
|
||||
$ IF FILE .EQS. "" THEN $ GOTO DONE
|
||||
$ LOG_FILE := 'F$PARSE(FILE,,,"DIRECTORY")''F$PARSE(FILE,,,"NAME")'.LOG;
|
||||
$ LIS_FILE := 'F$PARSE(FILE,,,"DIRECTORY")''F$PARSE(FILE,,,"NAME")'.LIS;
|
||||
$ LOS_FILE := 'F$PARSE(FILE,,,"DIRECTORY")''F$PARSE(FILE,,,"NAME")'.LOS;
|
||||
$ MOT_FILE := 'F$PARSE(FILE,,,"DIRECTORY")''F$PARSE(FILE,,,"NAME")'.MOT;
|
||||
$ LST_FILE := 'F$PARSE(FILE,,,"DIRECTORY")''F$PARSE(FILE,,,"NAME")'.LST;
|
||||
$ ABS_FILE := 'F$PARSE(FILE,,,"DIRECTORY")''F$PARSE(FILE,,,"NAME")'.ABS;
|
||||
$!
|
||||
$ IF F$SEARCH(LIS_FILE).EQS."" THEN $ GOTO LOOP
|
||||
$ IF F$SEARCH(LOG_FILE).EQS."" THEN $ GOTO LOOP
|
||||
$!
|
||||
$ IF F$SEARCH(LOG_FILE).NES."" THEN DELETE 'LOG_FILE'*/LOG
|
||||
$ IF F$SEARCH(LIS_FILE).NES."" THEN DELETE 'LIS_FILE'*/LOG
|
||||
$ IF F$SEARCH(LOS_FILE).NES."" THEN DELETE 'LOS_FILE'*/LOG
|
||||
$ IF F$SEARCH(MOT_FILE).NES."" THEN DELETE 'MOT_FILE'*/LOG
|
||||
$ IF F$SEARCH(LST_FILE).NES."" THEN DELETE 'LST_FILE'*/LOG
|
||||
$ IF F$SEARCH(ABS_FILE).NES."" THEN DELETE 'ABS_FILE'*/LOG
|
||||
$ GOTO LOOP
|
||||
$!
|
||||
$DONE:
|
||||
$ FILES := [...]*.ABS;
|
||||
$LOOP2: FILE := 'F$SEARCH(FILES,3)'
|
||||
$ IF FILE .EQS. "" THEN $ GOTO DONE2
|
||||
$ LOG_FILE := 'F$PARSE(FILE,,,"DIRECTORY")''F$PARSE(FILE,,,"NAME")'.LOG;
|
||||
$ LIS_FILE := 'F$PARSE(FILE,,,"DIRECTORY")''F$PARSE(FILE,,,"NAME")'.LIS;
|
||||
$ LOS_FILE := 'F$PARSE(FILE,,,"DIRECTORY")''F$PARSE(FILE,,,"NAME")'.LOS;
|
||||
$ MOT_FILE := 'F$PARSE(FILE,,,"DIRECTORY")''F$PARSE(FILE,,,"NAME")'.MOT;
|
||||
$ LST_FILE := 'F$PARSE(FILE,,,"DIRECTORY")''F$PARSE(FILE,,,"NAME")'.LST;
|
||||
$ ABS_FILE := 'F$PARSE(FILE,,,"DIRECTORY")''F$PARSE(FILE,,,"NAME")'.ABS;
|
||||
$!
|
||||
$ IF F$SEARCH(LOG_FILE).NES."" THEN DELETE 'LOG_FILE'*/LOG
|
||||
$ IF F$SEARCH(LIS_FILE).NES."" THEN DELETE 'LIS_FILE'*/LOG
|
||||
$ IF F$SEARCH(LOS_FILE).NES."" THEN DELETE 'LOS_FILE'*/LOG
|
||||
$ IF F$SEARCH(MOT_FILE).NES."" THEN DELETE 'MOT_FILE'*/LOG
|
||||
$ IF F$SEARCH(LST_FILE).NES."" THEN DELETE 'LST_FILE'*/LOG
|
||||
$ IF F$SEARCH(ABS_FILE).NES."" THEN DELETE 'ABS_FILE'*/LOG
|
||||
$ GOTO LOOP2
|
||||
$!
|
||||
$DONE2:
|
||||
$ EXIT 1
|
|
@ -0,0 +1,46 @@
|
|||
$! EBurn= "@DISK$USER:[witt.dark]burnit BOX:=YES DEBUG:=BURN"
|
||||
$ EBurn= "@DISK$USER:[common.com]dirdownu"
|
||||
$!
|
||||
$ ON ERROR THEN GOTO _EXIT
|
||||
$ ON CONTROL_Y THEN GOTO _EXIT
|
||||
$ SET VERIFY
|
||||
$!!!!!
|
||||
$!
|
||||
$! SINISTAR MEMORY MAP ...
|
||||
$! 0000 - 8BFF Reserved for Sinistar images, executive, tactics, intelligences
|
||||
$! 8C00 - 8FFF Second part of message utility.
|
||||
$! 9000 - 97FF Screen mapped scratch RAM
|
||||
$! 9800 - 98FF Direct Page RAM
|
||||
$! 9900 - BEFF Extended RAM
|
||||
$! BF00 - BF7F Message/Bookkeeping RAM
|
||||
$! BF80 - BFFE DCON scratch pad RAM
|
||||
$! BFFF DCON mirror $C800
|
||||
$! C000 - CFFF I/O ports
|
||||
$! D000 - DEFF Static RAM
|
||||
$! E000 - E1FF Sinistar IRQ routine.
|
||||
$! E200 - EFEF First part of message utility.
|
||||
$! EFF0 - EFFF ROM Vectors
|
||||
$!
|
||||
$!!!!!
|
||||
$ SET NOVERIFY
|
||||
$! EBurn [LIBRARY.SINISTAR.sam]DIAG.MOT !$F000
|
||||
$ IF .NOT. $STATUS THEN $ GOTO _EXIT
|
||||
$ EBurn [LIBRARY.SINISTAR.sam]IMAGE.MOT
|
||||
$ IF .NOT. $STATUS THEN $ GOTO _EXIT
|
||||
$ EBurn [LIBRARY.SINISTAR.sam]MESSAGE.MOT
|
||||
$ IF .NOT. $STATUS THEN $ GOTO _EXIT
|
||||
$ EBurn [LIBRARY.SINISTAR.sam]SAMS.MOT
|
||||
$ IF .NOT. $STATUS THEN $ GOTO _EXIT
|
||||
$! EBurn [LIBRARY.SINISTAR.witt]RICHS.MOT
|
||||
$ IF .NOT. $STATUS THEN $ GOTO _EXIT
|
||||
$! EBurn [LIBRARY.SINISTAR.witt]RICHS2.MOT
|
||||
$ IF .NOT. $STATUS THEN $ GOTO _EXIT
|
||||
$! EBurn [LIBRARY.SINISTAR.fals]NOAHS.MOT
|
||||
$ IF .NOT. $STATUS THEN $ GOTO _EXIT
|
||||
$! EBurn [LIBRARY.SINISTAR.mica]BOBS.MOT
|
||||
$ IF .NOT. $STATUS THEN $ GOTO _EXIT
|
||||
$! EBurn [LIBRARY.SINISTAR.witt]AOE.mot
|
||||
$!
|
||||
$_EXIT:
|
||||
$ SET NOVERIFY
|
||||
$ EXIT
|
|
@ -0,0 +1,29 @@
|
|||
Include [sam]Start
|
||||
InclVer SAM,SiniStar.equ
|
||||
|
||||
FixBomCal.Src
|
||||
|
||||
* Fixes SiniBombs calling player ship in demo mode
|
||||
|
||||
PushOrg $76A4 * Org over jump to 7686 (1$) in caller
|
||||
fdb 1$ * make it jump to our routine instead
|
||||
PullOrg
|
||||
|
||||
PushOrg RomSav
|
||||
|
||||
1$ pshs A * Don't screw up callee
|
||||
lda Temp+OCler
|
||||
cmpa #06 * See if caller is sinibomb
|
||||
bne 2$ * if not just continue call
|
||||
|
||||
tst AMDemo * See if we are in demo mode
|
||||
beq 2$ * if not, continue call
|
||||
puls A
|
||||
jmp $77C5 * else abort call
|
||||
|
||||
2$ puls A
|
||||
jmp $7686 * Go back to continue call
|
||||
|
||||
PullOrg RomSav
|
||||
|
||||
Local
|
|
@ -0,0 +1,94 @@
|
|||
include [sam]start
|
||||
Inclver SAM,SiniStar.equ
|
||||
|
||||
nlist
|
||||
inclver SAM,Sam.sym
|
||||
inclver RICH,Rich.sym
|
||||
inclver NOAH,Noah.sym
|
||||
inclver BOB,Bob.sym
|
||||
list
|
||||
|
||||
* Cut down initials entry time by 1/2
|
||||
PushOrg $88D1
|
||||
fdb Maxetv/2
|
||||
PullOrg
|
||||
*
|
||||
* Change flashing rate
|
||||
*
|
||||
PushOrg $7F7B
|
||||
fcb $5A
|
||||
PullOrg
|
||||
*
|
||||
*
|
||||
* Fix "Lost SiniBombs" bug by forcing end to game
|
||||
* 20 seconds after player dies.
|
||||
*
|
||||
PushOrg PlxQue * patch in front of player explosion
|
||||
jmp 1$
|
||||
PullOrg
|
||||
|
||||
PushOrg $FF90 * take over f000 space
|
||||
|
||||
1$ pshs X
|
||||
New_Sleep Task4,2$,OMtLen+1
|
||||
clr OMtLen,X
|
||||
puls X
|
||||
jmp ZPlxQue * Jump to actual player explosion
|
||||
*
|
||||
* Sleep task to insure death
|
||||
*
|
||||
2$ dec OMtLen,Y * Decrement pass counter
|
||||
bne 3$ * If not a full count yet, keep going
|
||||
*
|
||||
clr DeathFlag * Artificially make sure death occurs
|
||||
*
|
||||
3$ Sleep LOOP
|
||||
PullOrg
|
||||
*
|
||||
* Fix non-black screen on initialization
|
||||
*
|
||||
PushOrg $F07F * Org over jsr clrscr before "initial tests indicate"
|
||||
jmp $FFC0
|
||||
PullOrg
|
||||
|
||||
PushOrg $FFC0
|
||||
clr $C000 * Clear color 0
|
||||
clr $CA01 * Clear constant substit. byte
|
||||
jsr ClrScr * Clear screen
|
||||
jmp $F082 * Go back to where we jumped from
|
||||
PullOrg
|
||||
*
|
||||
*
|
||||
* Fix soundless sound line tests
|
||||
*
|
||||
local
|
||||
PushOrg $FEE4 * org over incb, cmpb #7 in sound test
|
||||
jmp $FFD0 * jump to patch routine instead
|
||||
PullOrg
|
||||
*
|
||||
PushOrg $FFD0
|
||||
incb
|
||||
cmpb #3 * see if we are at third line test
|
||||
bne 1$ * if not, go on to other tests
|
||||
jmp $FEE1 * if so, skip third line, go to fourth
|
||||
1$ cmpb #6 * See if we are done (do 5 lines only)
|
||||
jmp $FEE7 * Go back for branch on comparison
|
||||
PullOrg
|
||||
|
||||
local
|
||||
* Fix to prevent player knocked offscreen
|
||||
*
|
||||
PushOrg $4BCF
|
||||
fdb ForceOn * Player off-screen routine vector
|
||||
PullOrg
|
||||
|
||||
PushOrg $FFB0
|
||||
ForceOn ldd #$387A
|
||||
std OBottom,Y * Stick player at mid-screen
|
||||
stb OSPos,Y
|
||||
clr OStatus,Y * Clear his clipping flags
|
||||
jmp [OPDrwVe,Y] * Execute post-display routine, uses A,B,X,U
|
||||
|
||||
PullOrg
|
||||
|
||||
END
|
|
@ -0,0 +1,9 @@
|
|||
$ ! ---------------------------------------
|
||||
$ ! Logdir command file for disk$user:[fals.v(SVersion)]
|
||||
$ ! Author: Noah Falstein
|
||||
$ ! Last mod: 10/31/82
|
||||
$ ! ---------------------------------------
|
||||
$ !
|
||||
$ set default disk$user:[fals.v'SVersion']
|
||||
$ write sys$output "Directory: "
|
||||
$ show default
|
|
@ -0,0 +1,12 @@
|
|||
*
|
||||
ADDVIB *****
|
||||
EXPOBJ *****
|
||||
GIVCRY *****
|
||||
INCALL *****
|
||||
INWARR *****
|
||||
KRCRYS *****
|
||||
KRWORK *****
|
||||
POSBOU *****
|
||||
PREBOU *****
|
||||
RSTPOP *****
|
||||
TAUNT *****
|
|
@ -0,0 +1,23 @@
|
|||
*****
|
||||
*
|
||||
* This module checks that each of the symbols needed are defined.
|
||||
* If they weren't defined, the result would be that routines in this
|
||||
* directory would be created instead of replacing (overriding) the
|
||||
* stubs in earlier parts of the version release.
|
||||
*
|
||||
*****
|
||||
SYMVER MESLEN,MESLEN is missing from NOAHS.SYM
|
||||
SYMVER PHRLEN,PHRLEN is missing from NOAHS.SYM
|
||||
*
|
||||
SYMVER ADDVIB,AddVibration is missing from NOAHS.SYM
|
||||
SYMVER EXPOBJ,ExpObject is missing from NOAHS.SYM
|
||||
SYMVER GIVCRY,GivCrystal is missing from NOAHS.SYM
|
||||
SYMVER INCALL,InCaller is missing from NOAHS.SYM
|
||||
SYMVER INWARR,InWarrior is missing from NOAHS.SYM
|
||||
SYMVER KRCRYS,KRCrystal is missing from NOAHS.SYM
|
||||
SYMVER KRWORK,KRWorker is missing from NOAHS.SYM
|
||||
SYMVER POSBOU,PosBounce is missing from NOAHS.SYM
|
||||
SYMVER PREBOU,PreBounce is missing from NOAHS.SYM
|
||||
SYMVER RSTPOP,RstPop is missing from NOAHS.SYM
|
||||
SYMVER TAUNT,Taunt is missing from NOAHS.SYM
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
**********
|
||||
* N1.SRC - Noah's current version release
|
||||
**********
|
||||
|
||||
Include [Sam]Start
|
||||
|
||||
InclVer NOAH,N1sym.equ
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,10 @@
|
|||
Include [Sam]Start
|
||||
|
||||
PushOrg RamSav
|
||||
|
||||
CalOne rmb 1 * Flag - if not zero, first call for a caller
|
||||
RnSpch rmb 1 * Random speech call number of last call
|
||||
EndPop rmb 2 * The End of Population pointer
|
||||
|
||||
PullOrg RamSav
|
||||
|
|
@ -0,0 +1,138 @@
|
|||
****
|
||||
Include [Sam]Start
|
||||
|
||||
PushOrg RomSav
|
||||
|
||||
OWorker equ 0 * Offsets
|
||||
OWarrior equ 1
|
||||
DstMod equ $40 * Modifiers to calculate priorities
|
||||
QuoMod equ $06 * This modifier uses the B fraction
|
||||
DMoMax equ DstMod * Maximum distance mod, given Dist**2
|
||||
WrstPri equ 1 * Worst priority to consider
|
||||
MUAD equ $F8 * Minimum uncondit. accept dist. mod. `
|
||||
SintrP equ $FF-DMoMax * SiniStar intercept mission priority
|
||||
VibDamp equ $02 * How much vibration is damped
|
||||
RchMax equ $60 * Maximum Richter before shattering
|
||||
MisVib equ $10 * Amount missile adds to vibration
|
||||
CryDamp equ 10 * Crystal damping factor
|
||||
CrProb equ $10 * Chance (/255) of tossing a crystal
|
||||
MaxCrA equ 10 * Number of seconds in maxium crystal age
|
||||
CatPrb equ 60 * Probability (/100 hex/sec)of catching crystal
|
||||
* offscreen if worker is close enough
|
||||
CryDis equ $0C * Distance in scanner scale of minimum
|
||||
* for worker to catch crystal
|
||||
MinPrb equ $B0 * Probability (/255 per sec) of trying to mine
|
||||
MinDis equ $20 * Distance workers and warriors must be from
|
||||
* Planet to mine it offscreen - scanner coords
|
||||
SwrPrb equ $10 * Probability of swarm in /255 per 4 sec ($10 = 1/min)
|
||||
*
|
||||
MinFree equ 0600 * Max out population when freespace goes below 1.5K
|
||||
* This is minimum freespace allowed when creating things
|
||||
*
|
||||
* Attract mode equates
|
||||
*
|
||||
|
||||
SSize equ 08 * Size between small lines
|
||||
LSize equ 0B * Size between large lines
|
||||
FirLin equ 60 * First line on screen
|
||||
LefEdg equ 2C * Left edge
|
||||
|
||||
* Intelligence task - additions
|
||||
PushORG OMTLEN
|
||||
OWSCON rmb 2 * index to controlled workspaceO
|
||||
PAD OWIS,2
|
||||
PullOrg
|
||||
|
||||
* Explosion intelligence task
|
||||
PushOrg OMtLen
|
||||
OSWSA rmb 2 * Screen WS Address of this explosion
|
||||
OImNo rmb 1 * Which image number we are now displaying
|
||||
PullOrg OExpLen
|
||||
|
||||
|
||||
* Equates for Caller routine
|
||||
|
||||
* Scanner WS for Callees - additions
|
||||
PushOrg OSCLEN
|
||||
OSCNIN rmb 2 * Index of sleep task with intelligence
|
||||
OIWScIn rmb 2 * Index to W/W secondary intelligence
|
||||
OSCWCR rmb 2 * Scanner WS of Caller index
|
||||
OCALPRI rmb 1 * Priority of current call
|
||||
OSCTYPT rmb 2 * Pointer to next WS of same type (W/W)
|
||||
OSCSQI rmb 2 * Pointer to next squadron member
|
||||
OSCLDC RMB 1 \ * Long Distance to Caller
|
||||
OSCSDC RMB 1 / * Short Distance to Caller
|
||||
OSFLANG rmb 1 * Flight angle
|
||||
OSOFLAN rmb 1 * Old Flight angle
|
||||
OSSQSIZ rmb 1 * Squadron size
|
||||
OSMIS rmb 1 * Mission type
|
||||
OSSQPOS rmb 1 * Position of warrior in squadron.
|
||||
OSANANG rmb 1 * Animation angle (for turret and shooting)
|
||||
OSFAST rmb 1 * Warrior Flight Angle STep change for aiming.
|
||||
PAD OSWW,6
|
||||
PullOrg
|
||||
|
||||
* Scanner WS for Callers - additions
|
||||
PushOrg OSCLEN
|
||||
OSCoCaI rmb 2 * Controlling Caller Intelligence index
|
||||
OICScIn rmb 2 * Index to Callr secondary intelligence
|
||||
OQUOTA rmb 2 * Quota bytes for W/W on call
|
||||
OCLELS rmb 4 * Callee list - room for 6 callees
|
||||
PAD OSWC,2 * End of scanner ws of callers
|
||||
PullOrg
|
||||
|
||||
* Intelligence WS for crystal secondary intelligence
|
||||
PUSHORG OWISSav * Org at end of intelligence WS
|
||||
OCrAge rmb 1 * Crystal Age
|
||||
PULLORG OCrSILn * Crystal Secondary Intelligence Length
|
||||
|
||||
* Intelligence type table
|
||||
PushOrg 0
|
||||
IQPlan rmb 2 * Planetoid
|
||||
IQPlay rmb 2 * Player
|
||||
IQSini rmb 2 * Sinistar
|
||||
IQSBomb rmb 2 * Sinibomb
|
||||
IQCrys rmb 2 * Crystals
|
||||
|
||||
* Callees should be last on the list - not currently in tables
|
||||
IQWork rmb 2 * Workers
|
||||
IQWarr rmb 2 * Warriors
|
||||
PullOrg
|
||||
|
||||
* Vibration Block Offsets
|
||||
PushOrg 0
|
||||
OSVibA rmb 2 * Pointer to vibrating task
|
||||
OSLVib rmb 2 * Vibration that has been added in Long
|
||||
OSSVib rmb 2 * Vibration added to short velocity
|
||||
OSRcht rmb 1 * Richter scale - violence of vibration
|
||||
PullOrg OVBLen
|
||||
|
||||
* Vibration Block Locations
|
||||
PushOrg OScLen * Scanner WS end for dumb planets
|
||||
VDPlan rmb OVBLen
|
||||
PAD OSDP,2 * Length of Dumb Planet scanner WS
|
||||
PullOrg
|
||||
*
|
||||
PushOrg OSWCLen * Scanner WS end for callers
|
||||
VCaller rmb OVBLen
|
||||
PAD OSVC,2 * Length of Vibrating Caller Scan WS
|
||||
PullOrg
|
||||
|
||||
* TEMP equates
|
||||
PushOrg 0
|
||||
OCler rmb 1 * Caller type
|
||||
OClee rmb 1 * Callee type
|
||||
OCombo rmb 1 * Combination of caller/callee codes
|
||||
OQtaFct rmb 1 * Modified quota factor
|
||||
OPriMod rmb 1 * Modified priority
|
||||
OPriMax rmb 1 * Mod. priority with max distance add
|
||||
OBstPri rmb 1 * Highest calling priority generated
|
||||
OBstClee rmb 2 * Index of best callee found
|
||||
OMoDst rmb 1 * Modified distance factor
|
||||
OurPri rmb 1 * Priority of caller on this call
|
||||
OHisDs rmb 2 * Distance of callee being processed
|
||||
OBstDs rmb 2 * Distance from caller of best callee
|
||||
OHisPri rmb 1 * Callee's actual prio with dist. mod.
|
||||
PullOrg
|
||||
|
||||
PullOrg RomSav
|
|
@ -0,0 +1,10 @@
|
|||
**********
|
||||
* N2.SRC - Noah's current version release of rmb and src
|
||||
**********
|
||||
|
||||
Include [Sam]Start
|
||||
|
||||
InclVer NOAH,N1Ram
|
||||
|
||||
InclVer NOAH,N1all
|
||||
|
|
@ -0,0 +1,158 @@
|
|||
INCLUDE [SAM]START
|
||||
INCLVER SAM,SINISTAR.EQU
|
||||
|
||||
* player ship
|
||||
PUSHORG CPLAYER
|
||||
FDB MPLAYER collision mask
|
||||
FDB 4000!>LPLAYER my collision type
|
||||
FCB LPLAYER collision type
|
||||
FDB IRPlay * Vector to initialization routine
|
||||
FDB KRPlay * Vector to killing routine
|
||||
PULLORG
|
||||
* planetoid 1
|
||||
PUSHORG CPLAN1
|
||||
FDB MPLANET collision mask
|
||||
FDB 4000!>LPLANET my collision type
|
||||
FCB LPLANET collision type
|
||||
FDB IRPl1 * Vector to initialization routine
|
||||
FDB KRPl1 * Vector to killing routine
|
||||
PULLORG
|
||||
PUSHORG CPLAN1+OOFFSCR
|
||||
FDB VibOff offscreen routine
|
||||
PULLORG
|
||||
* planetoid 2
|
||||
PUSHORG CPLAN2
|
||||
FDB MPLANET collision mask
|
||||
FDB 4000!>LPLANET my collision type
|
||||
FCB LPLANET collision type
|
||||
FDB IRPl2 * Vector to initialization routine
|
||||
FDB KRPl2 * Vector to killing routine
|
||||
PULLORG
|
||||
PUSHORG CPLAN2+OOFFSCR
|
||||
FDB VibOff offscreen routine
|
||||
PULLORG
|
||||
* planetoid 3
|
||||
PUSHORG CPLAN3
|
||||
FDB MPLANET collision mask
|
||||
FDB 4000!>LPLANET my collision type
|
||||
FCB LPLANET collision type
|
||||
FDB IRPl3 * Vector to initialization routine
|
||||
FDB KRPl3 * Vector to killing routine
|
||||
PULLORG
|
||||
PUSHORG CPLAN3+OOFFSCR
|
||||
FDB VibOff offscreen routine
|
||||
PULLORG
|
||||
* planetoid 4
|
||||
PUSHORG CPLAN4
|
||||
FDB MPLANET collision mask
|
||||
FDB 4000!>LPLANET my collision type
|
||||
FCB LPLANET collision type
|
||||
FDB IRPl4 * Vector to initialization routine
|
||||
FDB KRPl4 * Vector to killing routine
|
||||
PULLORG
|
||||
PUSHORG CPLAN4+OOFFSCR
|
||||
FDB VibOff offscreen routine
|
||||
PULLORG
|
||||
* planetoid 5
|
||||
PUSHORG CPLAN5
|
||||
FDB MPLANET collision mask
|
||||
FDB 4000!>LPLANET my collision type
|
||||
FCB LPLANET collision type
|
||||
FDB IRPl5 * Vector to initialization routine
|
||||
FDB KRPl5 * Vector to killing routine
|
||||
PULLORG
|
||||
PUSHORG CPLAN5+OOFFSCR
|
||||
FDB VibOff offscreen routine
|
||||
PULLORG
|
||||
* sinibomb
|
||||
PUSHORG CSBOMB
|
||||
FDB MSBOMB collision mask
|
||||
FDB 4000!>LSBOMB my collision type
|
||||
FCB LSBOMB collision type
|
||||
FDB IRSBomb * Vector to initialization routine
|
||||
FDB KRSBomb * Vector to killing routine
|
||||
PULLORG
|
||||
Pushorg CSBomb+OCDInd
|
||||
fdb DeathFlag
|
||||
PullOrg
|
||||
* worker
|
||||
PUSHORG CWORKER
|
||||
FDB MWORKER collision mask
|
||||
FDB 4000!>LWORKER my collision type
|
||||
FCB LWORKER collision type
|
||||
FDB IRWork * Vector to initialization routine
|
||||
FDB KRWork * Vector to killing routine
|
||||
PULLORG
|
||||
* warrior
|
||||
PUSHORG CWARRIO
|
||||
FDB MWARRIO collision mask
|
||||
FDB 4000!>LWARRIO my collision type
|
||||
FCB LWARRIO collision type
|
||||
FDB IRWarr * Vector to initialization routine
|
||||
FDB KRWarr * Vector to killing routine
|
||||
PULLORG
|
||||
* sinistar
|
||||
PUSHORG CSINI
|
||||
FDB MSINI collision mask
|
||||
FDB 4000!>LSINI my collision type
|
||||
FCB LSINI collision type
|
||||
FDB IRSini * Vector to initialization routine
|
||||
FDB KRSini * Vector to killing routine
|
||||
PULLORG
|
||||
PUSHORG CSINI+OOFFSCR
|
||||
FDB VibOff offscreen routine
|
||||
PULLORG
|
||||
* player shot
|
||||
PUSHORG CPLSHOT
|
||||
FDB MPLSHOT collision mask
|
||||
FDB 4000!>LPLSHOT my collision type
|
||||
FCB LPLSHOT collision type
|
||||
PULLORG
|
||||
* warrior shot
|
||||
PUSHORG CWARSH
|
||||
FDB MWASHO collision mask
|
||||
FDB 4000!>LWASHO my collision type
|
||||
FCB LWASHO collision type
|
||||
PULLORG
|
||||
* crystal
|
||||
PUSHORG CCRYSTA
|
||||
FDB MCRYSTA collision mask
|
||||
FDB 4000!>LCRYSTA my collision type
|
||||
FCB LCRYSTA collision type
|
||||
FDB IRCrys * Vector to initialization routine
|
||||
FDB KRCrys * Vector to killing routine
|
||||
PULLORG
|
||||
* worker with crystal
|
||||
PUSHORG CWORKCR
|
||||
FDB MWORKCR collision mask
|
||||
FDB 4000!>LWORKCR my collision type
|
||||
FCB LWORKCR collision type
|
||||
FDB IRWoCr * Vector to initialization routine
|
||||
FDB KRWoCr * Vector to killing routine
|
||||
PULLORG
|
||||
|
||||
* make sure no fragments when piece explodes
|
||||
PUSHORG CPIECE
|
||||
FDB MFragment collision mask
|
||||
FDB 4000!>LFragment my collision type bit
|
||||
FCB LFragment collision type
|
||||
FDB TRAP * Vector to initialization routine
|
||||
FDB KRPiec * Vector to killing routine
|
||||
PULLORG
|
||||
PUSHORG CPIECE+OONSCR
|
||||
FDB SPiecOn onscreen routine
|
||||
PULLORG
|
||||
PushOrg CPiece+OPFrag
|
||||
fcb 0 * No fragments when a piece explodes
|
||||
PullOrg
|
||||
|
||||
PUSHORG CFragment
|
||||
FDB MFragment collision mask
|
||||
FDB 4000!>LFragment my collision type bit
|
||||
FCB LFragment collision type
|
||||
FDB TRAP * Vector to initialization routine
|
||||
FDB TRAP * Vector to killing routine
|
||||
FCB 0 object mass
|
||||
FDB IPLSHOT first image descriptor
|
||||
FDB KOBJECT offscreen routine
|
||||
PULLORG
|
|
@ -0,0 +1 @@
|
|||
* No One Home
|
|
@ -0,0 +1,5 @@
|
|||
* Noah.Src - Noah's current public access file for release
|
||||
*
|
||||
Include [Sam]Start
|
||||
|
||||
InclVer SAM,Sinistar.equ
|
|
@ -0,0 +1,22 @@
|
|||
SYMVER ALIVE,$4FE2
|
||||
SYMVER CLRSCR,$3245
|
||||
SYMVER DEATHF,$9895
|
||||
SYMVER DIE,$4755
|
||||
SYMVER FINISH,$A016
|
||||
SYMVER INDEXS,$A225
|
||||
SYMVER INWARP,$A1B2
|
||||
SYMVER IPLAN5,$109D
|
||||
SYMVER KENCHK,$A1B3
|
||||
SYMVER KENTBL,$52E3
|
||||
SYMVER LSSINI,$5DBE
|
||||
SYMVER MESLEN,$EF8C
|
||||
SYMVER OCLER,$0000
|
||||
SYMVER PLAGRA,$A1BA
|
||||
SYMVER PLXQUE,$7C6A
|
||||
SYMVER SINHIB,$5DA6
|
||||
SYMVER STARTS,$2EDA
|
||||
SYMVER STARTD,$2F1F
|
||||
SYMVER TASK4,$A16D
|
||||
SYMVER ZAPSIN,$5230
|
||||
SYMVER ZPLXQU,$7C6D
|
||||
Noah.Sym
|
|
@ -0,0 +1,4 @@
|
|||
Include [Sam]Start
|
||||
|
||||
NoahFixes.src
|
||||
* InclVer NOAH,Fixbomcal * fix sinibomb calling player
|
|
@ -0,0 +1,546 @@
|
|||
NLIST
|
||||
NOAHS.EQU
|
||||
|
||||
ADDPAR EQU $5D7B
|
||||
ADDSCO EQU $3B2A
|
||||
ADDVIB EQU $6C56
|
||||
ADJPOP EQU $78EC
|
||||
ALIVE EQU $4FE2
|
||||
AMDEMO EQU $9896
|
||||
ANISCS EQU $536C
|
||||
ATTRAC EQU $7C64
|
||||
BASSAV SET $9897
|
||||
BUMOUT EQU $734D
|
||||
CALDM EQU $77D4
|
||||
CALLER EQU $7675
|
||||
CALONE EQU $A1BE
|
||||
CATPRB EQU $0060
|
||||
CCRYST EQU $4D2D
|
||||
CDTEND EQU $7ABE
|
||||
CEXPLO EQU $4D8D
|
||||
CFRAGM EQU $4D9B
|
||||
CHGA EQU $483E
|
||||
CHGOBJ EQU $43B8
|
||||
CLCOUN SET $000B
|
||||
COMSTA EQU $7240
|
||||
CPIECE EQU $4D6E
|
||||
CPLAN1 EQU $4BE5
|
||||
CPLAN2 EQU $4C07
|
||||
CPLAN3 EQU $4C29
|
||||
CPLAN4 EQU $4C4B
|
||||
CPLAN5 EQU $4C6D
|
||||
CPLAYE EQU $4BC3
|
||||
CPLSHO EQU $4D11
|
||||
CRONSE EQU $783D
|
||||
CRPROB EQU $0010
|
||||
CRSECI EQU $77EC
|
||||
CRYDIS EQU $000C
|
||||
CR2 SET $2DFB
|
||||
CR3 SET $3435
|
||||
CR4 SET $42F9
|
||||
CR5 SET $50DF
|
||||
CR6 SET $6026
|
||||
CR7 SET $7A7F
|
||||
CSBOMB EQU $4C8F
|
||||
CSINI EQU $4CEF
|
||||
CWARRI EQU $4CD0
|
||||
CWARSH EQU $4D1F
|
||||
CWORKC EQU $4D4F
|
||||
CWORKE EQU $4CB1
|
||||
C1SLEE EQU $46A8
|
||||
C2SLEE EQU $46AA
|
||||
DCRYWO EQU $4547
|
||||
DEATHF EQU $9895
|
||||
DIE EQU $4755
|
||||
DISP EQU $5583
|
||||
DMOMAX EQU $0040
|
||||
DSTMOD EQU $0040
|
||||
DTIME EQU $A019
|
||||
DTIMER EQU $7A3C
|
||||
D$P SET $0098
|
||||
EDGE EQU $987F
|
||||
EDIFVL EQU $A054
|
||||
ENDPOP EQU $A1C0
|
||||
EPOPVL EQU $A03C
|
||||
EXEC2 EQU $34AA
|
||||
EXENTR EQU $7365
|
||||
EXEVEC SET $510F
|
||||
EXPOBJ EQU $6C61
|
||||
FINAL SET $7FFF
|
||||
FINISH EQU $A016
|
||||
FRAGEX EQU $3EE1
|
||||
FRAME EQU $33B4
|
||||
FREE EQU $9873
|
||||
GAMVEC SET $5145
|
||||
GA1 EQU $CC06
|
||||
GETSCN EQU $3FB1
|
||||
GIVCRY EQU $6C64
|
||||
GROUND EQU $0000
|
||||
HANSOL EQU $7965
|
||||
HISAV SET $E1B7
|
||||
IAMVEC SET $7C58
|
||||
ICFLAS EQU $26B1
|
||||
ICRYST EQU $26A1
|
||||
ID0END EQU $7AF4
|
||||
ID1END EQU $7B14
|
||||
IEXPLO EQU $296C
|
||||
INBOMB EQU $A1B8
|
||||
INCALL EQU $6C67
|
||||
INDEXS EQU $A225
|
||||
INDIF0 EQU $7ADF
|
||||
INHIBI EQU $6A3C
|
||||
INIVEC SET $7415
|
||||
INOEND EQU $7BAA
|
||||
INPOPD EQU $7B74
|
||||
INPOP0 EQU $7ABE
|
||||
INPOP1 EQU $7AF4
|
||||
INPOP2 EQU $7B14
|
||||
INPOP3 EQU $7B34
|
||||
INPOP4 EQU $7B54
|
||||
INTVEC SET $E137
|
||||
INULL EQU $2D6F
|
||||
INVTBL EQU $4E28
|
||||
INWARR EQU $6C6A
|
||||
INWORK EQU $7574
|
||||
IPLSHO EQU $2438
|
||||
IP0END EQU $7ADF
|
||||
IRCRYS EQU $74E9
|
||||
IRPLAY EQU $755F
|
||||
IRPL1 EQU $74A1
|
||||
IRPL2 EQU $74AA
|
||||
IRPL3 EQU $74B3
|
||||
IRPL4 EQU $74BC
|
||||
IRPL5 EQU $74C5
|
||||
IRSBOM EQU $750C
|
||||
IRSINI EQU $7534
|
||||
IRWARR EQU $748C
|
||||
IRWOCR EQU $7495
|
||||
IRWORK EQU $7483
|
||||
KEXPLO EQU $7A66
|
||||
KEYCLE EQU $A1A5
|
||||
KILCAL EQU $72B0
|
||||
KILLOB EQU $4386
|
||||
KILNOR EQU $7332
|
||||
KILVIB EQU $7221
|
||||
KILWAR EQU $723C
|
||||
KILWOR EQU $7235
|
||||
KOBJEC EQU $4665
|
||||
KRCRYS EQU $6C70
|
||||
KRPIEC EQU $721D
|
||||
KRPLAY EQU $7219
|
||||
KRPL1 EQU $71C7
|
||||
KRPL2 EQU $71CE
|
||||
KRPL3 EQU $71D5
|
||||
KRPL4 EQU $71DC
|
||||
KRPL5 EQU $71E3
|
||||
KRSBOM EQU $7206
|
||||
KRSINI EQU $59B0
|
||||
KRWARR EQU $7191
|
||||
KRWOCR EQU $7195
|
||||
KRWORK EQU $6C73
|
||||
LCRYST EQU $0003
|
||||
LEVEL SET $0001
|
||||
LFRAGM EQU $000A
|
||||
LINCOL EQU $7302
|
||||
LOOK4Y EQU $7342
|
||||
LPLANE EQU $0001
|
||||
LPLAYE EQU $0000
|
||||
LPLSHO EQU $0008
|
||||
LSBOMB EQU $0002
|
||||
LSINI EQU $0007
|
||||
LWARRI EQU $0006
|
||||
LWASHO EQU $0009
|
||||
LWORKC EQU $0005
|
||||
LWORKE EQU $0004
|
||||
MAXCRA EQU $0010
|
||||
MAXSIN EQU $000C
|
||||
MCRYST SET $6F80
|
||||
MESLEN EQU $EF8C
|
||||
MESSAV SET $EDC4
|
||||
MESS1 SET $E54D
|
||||
MESS1E SET $EFEA
|
||||
MESS2 SET $8EA0
|
||||
MESS2E SET $8FF4
|
||||
MFRAGM SET $0720
|
||||
MINDIS EQU $0020
|
||||
MINFRE EQU $0600
|
||||
MINPRB EQU $00B0
|
||||
MISASS EQU $7A52
|
||||
MPLANE SET $7FE0
|
||||
MPLAYE SET $2FA0
|
||||
MPLSHO SET $2720
|
||||
MSBOMB SET $27A0
|
||||
MSINI SET $7D80
|
||||
MUAD EQU $00F8
|
||||
MWARRI SET $7FD0
|
||||
MWASHO SET $7650
|
||||
MWORKC SET $7F70
|
||||
MWORKE SET $7FF0
|
||||
NEWTUN EQU $3891
|
||||
NOPOST EQU $45EA
|
||||
NULL EQU $E195
|
||||
OBSTCL EQU $0007
|
||||
OBSTDS EQU $000D
|
||||
OBSTPR EQU $0006
|
||||
OCALPR EQU $0013
|
||||
OCDIND EQU $0012
|
||||
OCHAR EQU $0012
|
||||
OCLEE EQU $0001
|
||||
OCLELS EQU $0013
|
||||
OCLER EQU $0000
|
||||
OCOMBO EQU $0002
|
||||
OCRAGE EQU $0006
|
||||
OCRSIL SET $0007
|
||||
ODFSAV SET $0003
|
||||
ODRWVE EQU $0018
|
||||
OEXEC EQU $0002
|
||||
OEXPLE SET $0007
|
||||
OHISDS EQU $000B
|
||||
OHISPR EQU $000F
|
||||
OILEN SET $0008
|
||||
OIMNO EQU $0006
|
||||
OINDEX EQU $FFFE
|
||||
OINTYP EQU $001D
|
||||
OINVEC EQU $0005
|
||||
OIWSCI EQU $000F
|
||||
OKIVEC EQU $0007
|
||||
OLEN SET $0022
|
||||
OLVEL EQU $000E
|
||||
OMASS EQU $0009
|
||||
OMODST EQU $0009
|
||||
OMTLEN SET $0004
|
||||
OMWAAT EQU $0002
|
||||
OMWADR EQU $0000
|
||||
OMWAIN EQU $0008
|
||||
OMWAMI EQU $0004
|
||||
OMWASA SET $000C
|
||||
OMWATA EQU $0006
|
||||
OMWOCR EQU $0006
|
||||
OMWODR EQU $0000
|
||||
OMWOEV EQU $0008
|
||||
OMWOIN EQU $0004
|
||||
OMWOSA SET $000A
|
||||
OMWOTA EQU $0002
|
||||
ONIDES EQU $0016
|
||||
OOFFSC EQU $000C
|
||||
OONSCR EQU $000E
|
||||
OPDRWV EQU $001A
|
||||
OPFRAG EQU $001E
|
||||
OPRIMA EQU $0005
|
||||
OPRIMO EQU $0004
|
||||
OQTAFC EQU $0003
|
||||
OQUOTA EQU $0011
|
||||
ORSPAC SET $0004
|
||||
OSCAN EQU $001C
|
||||
OSCDLE SET $0023
|
||||
OSCHAR EQU $0004
|
||||
OSCLDC EQU $0018
|
||||
OSCLEN SET $000D
|
||||
OSCNIN EQU $000D
|
||||
OSCOCA EQU $000D
|
||||
OSCSDC EQU $0019
|
||||
OSCSQI EQU $0016
|
||||
OSCTYP EQU $0014
|
||||
OSCWCR EQU $0011
|
||||
OSDPSA SET $0014
|
||||
OSEED1 EQU $0000
|
||||
OSEED2 EQU $0002
|
||||
OSLPOS EQU $0008
|
||||
OSLVIB EQU $0002
|
||||
OSMIS EQU $001D
|
||||
OSPERS EQU $000C
|
||||
OSPLEN SET $0004
|
||||
OSRCHT EQU $0006
|
||||
OSSCWS EQU $000A
|
||||
OSSPOS EQU $0009
|
||||
OSSQSI EQU $001C
|
||||
OSSVIB EQU $0004
|
||||
OSTBLZ SET $0006
|
||||
OSTLEN SET $0004
|
||||
OSULEN SET $0006
|
||||
OSVCSA SET $0020
|
||||
OSVEL EQU $000C
|
||||
OSVIBA EQU $0000
|
||||
OSWCSA SET $0017
|
||||
OSWSA EQU $0004
|
||||
OSWWSA SET $0021
|
||||
OTIMER SET $0008
|
||||
OTLEN SET $0007
|
||||
OTNRLE SET $0003
|
||||
OURPRI EQU $000A
|
||||
OUTP35 EQU $E20C
|
||||
OVBLEN SET $0007
|
||||
OVIBAS EQU $0021
|
||||
OWARRI EQU $0001
|
||||
OWISLE EQU $0008
|
||||
OWISSA SET $0006
|
||||
OWORKE EQU $0000
|
||||
OWSCON EQU $0004
|
||||
PHRLEN EQU $EC5D
|
||||
PHRNUM SET $008F
|
||||
PHRSAV SET $EB9B
|
||||
PLAIND EQU $5035
|
||||
PLAVEC SET $740B
|
||||
PLAYSA SET $A054
|
||||
PLODE EQU $73CC
|
||||
PLSECI EQU $7899
|
||||
PLSIZE SET $009D
|
||||
PLXQUE EQU $7C6A
|
||||
POP EQU $A01B
|
||||
POPFIL EQU $7900
|
||||
POSBOU EQU $6C76
|
||||
POSCAL EQU $7658
|
||||
POWVEC SET $52A4
|
||||
PREBOU EQU $6C79
|
||||
PRECAL EQU $764F
|
||||
PREPLO EQU $73B9
|
||||
PRIOS EQU $7A5C
|
||||
PRTASK EQU $9842
|
||||
PSINII EQU $000F
|
||||
QBANG EQU $4DB3
|
||||
QCRYFL EQU $4DF7
|
||||
QMESG EQU $4DE6
|
||||
QUOMOD EQU $0006
|
||||
QUOTA EQU $7A48
|
||||
RAMSAV SET $A1C2
|
||||
RAND8 EQU $4808
|
||||
RAND8B EQU $4802
|
||||
RCHMAX EQU $0060
|
||||
RCMOSA EQU $4A5F
|
||||
RCMOSB EQU $4A70
|
||||
RICPAT EQU $7471
|
||||
RNDNEG EQU $70F3
|
||||
RNDSCL EQU $710A
|
||||
RNSPCH EQU $A1BF
|
||||
ROMSAV SET $7C6D
|
||||
RSOEND EQU $7AB6
|
||||
RSTPOP EQU $6C7C
|
||||
RTS EQU $2E44
|
||||
SAVEDY SET $0004
|
||||
SCANDI EQU $474D
|
||||
SCOCDT EQU $7AA8
|
||||
SCROFF EQU $462B
|
||||
SEEDS EQU $982E
|
||||
SEXPOB EQU $7356
|
||||
SHATTE EQU $7074
|
||||
SINCON EQU $79BB
|
||||
SINI EQU $6B68
|
||||
SINIBO EQU $6A71
|
||||
SINIKI EQU $A03E
|
||||
SININD EQU $9878
|
||||
SINIPA EQU $7556
|
||||
SINISE EQU $9894
|
||||
SLEEP1 EQU $46BB
|
||||
SLEEP2 EQU $46DB
|
||||
SLOLOD EQU $7C4D
|
||||
SPIECO EQU $7A76
|
||||
SPLAYE EQU $A138
|
||||
SRAMSA SET $DC94
|
||||
STACK SET $BF00
|
||||
STACKA SET $0040
|
||||
STACKY SET $0002
|
||||
SWRPRB EQU $0010
|
||||
SYSVEC SET $31D3
|
||||
TASK0 EQU $A19E
|
||||
TASK1 EQU $A15F
|
||||
TASK25 EQU $A197
|
||||
TASK4 EQU $A16D
|
||||
TASK64 EQU $A189
|
||||
TASK8 EQU $A174
|
||||
TAUNT EQU $6C80
|
||||
TDISPE EQU $5593
|
||||
TEMP EQU $9800
|
||||
TODEND SET $CFB6
|
||||
TOSCRY EQU $711E
|
||||
TRAP EQU $E196
|
||||
VERSIO SET $0011
|
||||
VIBDAM EQU $0002
|
||||
VIBINI EQU $708D
|
||||
VIBNEW EQU $709B
|
||||
VIBOFF EQU $6FA2
|
||||
VIBRAT EQU $6FDF
|
||||
VIBREV EQU $70BF
|
||||
VIBSTP EQU $70DE
|
||||
VIBZER EQU $7635
|
||||
WAGG EQU $A03C
|
||||
WARRIO EQU $6612
|
||||
WORKER EQU $616B
|
||||
WPLAYE EQU $9900
|
||||
WRSTPR EQU $0001
|
||||
WRXQUE EQU $7C67
|
||||
YELLOW EQU $00FF
|
||||
ZADDVI EQU $6F4C
|
||||
ZCOLTB EQU $50DB
|
||||
ZEXPOB EQU $735F
|
||||
ZGIVCR EQU $6FB0
|
||||
ZINCAL EQU $7602
|
||||
ZINWAR EQU $75B6
|
||||
ZKRCRY EQU $71F6
|
||||
ZKRWOR EQU $718D
|
||||
ZNMTSK SET $5C06
|
||||
ZONECO EQU $A018
|
||||
ZPOSBO EQU $6F30
|
||||
ZPREBO EQU $6F14
|
||||
ZRSTPO EQU $7BB0
|
||||
ZTAUNT EQU $79EF
|
||||
_A SET $ED96
|
||||
_AT SET $EC6D
|
||||
_ATTAC SET $ECBD
|
||||
_B SET $EDB3
|
||||
_BATTL SET $ED08
|
||||
_BONUS SET $EC67
|
||||
_C SET $EDB9
|
||||
_COMPU SET $ED39
|
||||
_CONGR SET $ED0F
|
||||
_CREDI SET $EC7B
|
||||
_CRYST SET $EC89
|
||||
_DAMAG SET $ECC4
|
||||
_DEFEA SET $ED23
|
||||
_DICKE SET $ED8B
|
||||
_E SET $ED6D
|
||||
_EMPTY SET $EC83
|
||||
_ENGAG SET $ED45
|
||||
_ENGIN SET $ECA0
|
||||
_ENTER SET $ECD3
|
||||
_F SET $ED9A
|
||||
_FOR SET $EC97
|
||||
_GAME SET $EC5D
|
||||
_H SET $ED98
|
||||
_I SET $EDA2
|
||||
_ILLIA SET $ED65
|
||||
_IN SET $ED52
|
||||
_INTER SET $ECB1
|
||||
_IS SET $ED42
|
||||
_J SET $EDB5
|
||||
_L SET $ED9C
|
||||
_LECTR SET $ED6F
|
||||
_M SET $EDB7
|
||||
_MAKE SET $ED82
|
||||
_MINE SET $ED7A
|
||||
_N SET $ED92
|
||||
_NOW SET $ED4E
|
||||
_O SET $ED94
|
||||
_OF SET $EDC1
|
||||
_OVER SET $EC62
|
||||
_PLANE SET $ECF0
|
||||
_PLAYE SET $EC70
|
||||
_PREPA SET $ED00
|
||||
_R SET $EDB1
|
||||
_RANGE SET $ED5D
|
||||
_RICHA SET $EDA4
|
||||
_S SET $ED9E
|
||||
_SAM SET $ED87
|
||||
_SAVED SET $EC91
|
||||
_SCANN SET $ED55
|
||||
_SINIB SET $ECA8
|
||||
_SINIS SET $ED30
|
||||
_SWARM SET $EDBB
|
||||
_T SET $EDA0
|
||||
_TARGE SET $ECCC
|
||||
_THE SET $ED2C
|
||||
_TO SET $ED7F
|
||||
_VOID SET $ECDC
|
||||
_W SET $ED63
|
||||
_WARP SET $EC9B
|
||||
_WARRI SET $ECE8
|
||||
_WITT SET $EDAC
|
||||
_WORKE SET $ECE1
|
||||
_YOU SET $ED1F
|
||||
_ZONE SET $ECFB
|
||||
_1 SET $EC77
|
||||
_2 SET $EC79
|
||||
.A SET $007F
|
||||
.AT SET $0050
|
||||
.ATTAC SET $005D
|
||||
.B SET $0089
|
||||
.BATTL SET $0067
|
||||
.BONUS SET $004F
|
||||
.C SET $008C
|
||||
.COMPU SET $006D
|
||||
.CONGR SET $0068
|
||||
.CREDI SET $0054
|
||||
.CRYST SET $0056
|
||||
.DAMAG SET $005E
|
||||
.DEFEA SET $006A
|
||||
.DICKE SET $007C
|
||||
.DIFTM EQU $A03F
|
||||
.DTISA SET $5994
|
||||
.E SET $0076
|
||||
.EMPTY SET $0055
|
||||
.ENGAG SET $006F
|
||||
.ENGIN SET $005A
|
||||
.ENTER SET $0060
|
||||
.F SET $0081
|
||||
.FOR SET $0058
|
||||
.GAME SET $004D
|
||||
.H SET $0080
|
||||
.I SET $0085
|
||||
.ILLIA SET $0075
|
||||
.IN SET $0071
|
||||
.INTER SET $005C
|
||||
.IS SET $006E
|
||||
.J SET $008A
|
||||
.L SET $0082
|
||||
.LECTR SET $0077
|
||||
.M SET $008B
|
||||
.MAKE SET $007A
|
||||
.MINE SET $0078
|
||||
.N SET $007D
|
||||
.NOW SET $0070
|
||||
.O SET $007E
|
||||
.OF SET $008E
|
||||
.OVER SET $004E
|
||||
.PLANE SET $0064
|
||||
.PLAYE SET $0051
|
||||
.PPL1 EQU $7BAA
|
||||
.PPL3 EQU $7BAD
|
||||
.PPL5 EQU $59AA
|
||||
.PREPA SET $0066
|
||||
.PWAR EQU $59A7
|
||||
.PWOR EQU $59A4
|
||||
.R SET $0088
|
||||
.RANGE SET $0073
|
||||
.RICHA SET $0086
|
||||
.S SET $0083
|
||||
.SAM SET $007B
|
||||
.SAVED SET $0057
|
||||
.SCANN SET $0072
|
||||
.SINIB SET $005B
|
||||
.SINIS SET $006C
|
||||
.SWARM SET $008D
|
||||
.T SET $0084
|
||||
.TARGE SET $005F
|
||||
.THE SET $006B
|
||||
.TO SET $0079
|
||||
.VOID SET $0061
|
||||
.W SET $0074
|
||||
.WAGG EQU $59AD
|
||||
.WARP SET $0059
|
||||
.WARRI SET $0063
|
||||
.WITT SET $0087
|
||||
.WORKE SET $0062
|
||||
.YOU SET $0069
|
||||
.ZONE SET $0065
|
||||
.$CHR SET $0023
|
||||
.$COLR SET $00FF
|
||||
.$DISP SET $5583
|
||||
.$DLOF SET $0072
|
||||
.$DSOF SET $0000
|
||||
.$ORG0 SET $0000
|
||||
.$ORG1 SET $0000
|
||||
.$ORG2 SET $0000
|
||||
.$ORG3 SET $0000
|
||||
.$ORG4 SET $0000
|
||||
.$ORG5 SET $0000
|
||||
.$ORG6 SET $0000
|
||||
.$ORG7 SET $0000
|
||||
.$PP SET $0000
|
||||
.$PRIO SET $FFFF
|
||||
.$PTR SET $D77C
|
||||
.$SOUN SET $FFFF
|
||||
.$TMOD SET $0000
|
||||
.$WECO SET $0045
|
||||
.$$ SET $7C58
|
||||
.1 SET $0052
|
||||
.2 SET $0053
|
||||
LIST
|
|
@ -0,0 +1,222 @@
|
|||
BASSAV SET $9897
|
||||
CLCOUN SET $000B
|
||||
CR2 SET $2DFB
|
||||
CR3 SET $3435
|
||||
CR4 SET $42F9
|
||||
CR5 SET $50DF
|
||||
CR6 SET $6026
|
||||
D$P SET $0098
|
||||
EXEVEC SET $510F
|
||||
FINAL SET $7FFF
|
||||
GAMVEC SET $5145
|
||||
HISAV SET $E1B7
|
||||
IAMVEC SET $514F
|
||||
INIVEC SET $51ED
|
||||
INTVEC SET $E137
|
||||
LEVEL SET $0000
|
||||
MCRYST SET $6F80
|
||||
MESSAV SET $EDBB
|
||||
MESS1 SET $E54D
|
||||
MESS1E SET $EFEA
|
||||
MESS2 SET $8EA0
|
||||
MESS2E SET $8FF4
|
||||
MFRAGM SET $0720
|
||||
MPLANE SET $7FE0
|
||||
MPLAYE SET $2FA0
|
||||
MPLSHO SET $2720
|
||||
MSBOMB SET $27A0
|
||||
MSINI SET $7D80
|
||||
MWARRI SET $7FD0
|
||||
MWASHO SET $7650
|
||||
MWORKC SET $7F70
|
||||
MWORKE SET $7FF0
|
||||
OCRSIL SET $0007
|
||||
ODFSAV SET $0003
|
||||
OEXPLE SET $0007
|
||||
OILEN SET $0008
|
||||
OLEN SET $0022
|
||||
OMTLEN SET $0004
|
||||
OMWASA SET $000C
|
||||
OMWOSA SET $000A
|
||||
ORSPAC SET $0004
|
||||
OSCDLE SET $0023
|
||||
OSCLEN SET $000D
|
||||
OSDPSA SET $0014
|
||||
OSPLEN SET $0004
|
||||
OSTBLZ SET $0006
|
||||
OSTLEN SET $0004
|
||||
OSULEN SET $0006
|
||||
OSVCSA SET $0020
|
||||
OSWCSA SET $0017
|
||||
OSWWSA SET $0021
|
||||
OTIMER SET $0008
|
||||
OTLEN SET $0007
|
||||
OTNRLE SET $0003
|
||||
OVBLEN SET $0007
|
||||
OWISSA SET $0006
|
||||
PHRNUM SET $008D
|
||||
PHRSAV SET $EB97
|
||||
PLAVEC SET $529D
|
||||
PLAYSA SET $A03F
|
||||
PLSIZE SET $009D
|
||||
POWVEC SET $52A4
|
||||
RAMSAV SET $A1BE
|
||||
ROMSAV SET $6F14
|
||||
SAVEDY SET $0004
|
||||
SRAMSA SET $D518
|
||||
STACK SET $BF00
|
||||
STACKA SET $0040
|
||||
STACKY SET $0002
|
||||
SYSVEC SET $31D3
|
||||
TODEND SET $CFB6
|
||||
VERSIO SET $0011
|
||||
ZNMTSK SET $5C06
|
||||
_A SET $ED96
|
||||
_AT SET $EC6D
|
||||
_ATTAC SET $ECBD
|
||||
_B SET $EDB3
|
||||
_BATTL SET $ED08
|
||||
_BONUS SET $EC67
|
||||
_C SET $EDB9
|
||||
_COMPU SET $ED39
|
||||
_CONGR SET $ED0F
|
||||
_CREDI SET $EC7B
|
||||
_CRYST SET $EC89
|
||||
_DAMAG SET $ECC4
|
||||
_DEFEA SET $ED23
|
||||
_DICKE SET $ED8B
|
||||
_E SET $ED6D
|
||||
_EMPTY SET $EC83
|
||||
_ENGAG SET $ED45
|
||||
_ENGIN SET $ECA0
|
||||
_ENTER SET $ECD3
|
||||
_F SET $ED9A
|
||||
_FOR SET $EC97
|
||||
_GAME SET $EC5D
|
||||
_H SET $ED98
|
||||
_I SET $EDA2
|
||||
_ILLIA SET $ED65
|
||||
_IN SET $ED52
|
||||
_INTER SET $ECB1
|
||||
_IS SET $ED42
|
||||
_J SET $EDB5
|
||||
_L SET $ED9C
|
||||
_LECTR SET $ED6F
|
||||
_M SET $EDB7
|
||||
_MAKE SET $ED82
|
||||
_MINE SET $ED7A
|
||||
_N SET $ED92
|
||||
_NOW SET $ED4E
|
||||
_O SET $ED94
|
||||
_OVER SET $EC62
|
||||
_PLANE SET $ECF0
|
||||
_PLAYE SET $EC70
|
||||
_PREPA SET $ED00
|
||||
_R SET $EDB1
|
||||
_RANGE SET $ED5D
|
||||
_RICHA SET $EDA4
|
||||
_S SET $ED9E
|
||||
_SAM SET $ED87
|
||||
_SAVED SET $EC91
|
||||
_SCANN SET $ED55
|
||||
_SINIB SET $ECA8
|
||||
_SINIS SET $ED30
|
||||
_T SET $EDA0
|
||||
_TARGE SET $ECCC
|
||||
_THE SET $ED2C
|
||||
_TO SET $ED7F
|
||||
_VOID SET $ECDC
|
||||
_W SET $ED63
|
||||
_WARP SET $EC9B
|
||||
_WARRI SET $ECE8
|
||||
_WITT SET $EDAC
|
||||
_WORKE SET $ECE1
|
||||
_YOU SET $ED1F
|
||||
_ZONE SET $ECFB
|
||||
_1 SET $EC77
|
||||
_2 SET $EC79
|
||||
.A SET $007F
|
||||
.AT SET $0050
|
||||
.ATTAC SET $005D
|
||||
.B SET $0089
|
||||
.BATTL SET $0067
|
||||
.BONUS SET $004F
|
||||
.C SET $008C
|
||||
.COMPU SET $006D
|
||||
.CONGR SET $0068
|
||||
.CREDI SET $0054
|
||||
.CRYST SET $0056
|
||||
.DAMAG SET $005E
|
||||
.DEFEA SET $006A
|
||||
.DICKE SET $007C
|
||||
.DTISA SET $5994
|
||||
.E SET $0076
|
||||
.EMPTY SET $0055
|
||||
.ENGAG SET $006F
|
||||
.ENGIN SET $005A
|
||||
.ENTER SET $0060
|
||||
.F SET $0081
|
||||
.FOR SET $0058
|
||||
.GAME SET $004D
|
||||
.H SET $0080
|
||||
.I SET $0085
|
||||
.ILLIA SET $0075
|
||||
.IN SET $0071
|
||||
.INTER SET $005C
|
||||
.IS SET $006E
|
||||
.J SET $008A
|
||||
.L SET $0082
|
||||
.LECTR SET $0077
|
||||
.M SET $008B
|
||||
.MAKE SET $007A
|
||||
.MINE SET $0078
|
||||
.N SET $007D
|
||||
.NOW SET $0070
|
||||
.O SET $007E
|
||||
.OVER SET $004E
|
||||
.PLANE SET $0064
|
||||
.PLAYE SET $0051
|
||||
.PREPA SET $0066
|
||||
.R SET $0088
|
||||
.RANGE SET $0073
|
||||
.RICHA SET $0086
|
||||
.S SET $0083
|
||||
.SAM SET $007B
|
||||
.SAVED SET $0057
|
||||
.SCANN SET $0072
|
||||
.SINIB SET $005B
|
||||
.SINIS SET $006C
|
||||
.T SET $0084
|
||||
.TARGE SET $005F
|
||||
.THE SET $006B
|
||||
.TO SET $0079
|
||||
.VOID SET $0061
|
||||
.W SET $0074
|
||||
.WARP SET $0059
|
||||
.WARRI SET $0063
|
||||
.WITT SET $0087
|
||||
.WORKE SET $0062
|
||||
.YOU SET $0069
|
||||
.ZONE SET $0065
|
||||
.$CHR SET $0023
|
||||
.$COLR SET $00FF
|
||||
.$DISP SET $2E44
|
||||
.$DLOF SET $001F
|
||||
.$DSOF SET $009B
|
||||
.$ORG0 SET $0000
|
||||
.$ORG1 SET $0000
|
||||
.$ORG2 SET $0000
|
||||
.$ORG3 SET $0000
|
||||
.$ORG4 SET $0000
|
||||
.$ORG5 SET $0000
|
||||
.$ORG6 SET $0000
|
||||
.$ORG7 SET $0000
|
||||
.$PP SET $0000
|
||||
.$PRIO SET $FFFF
|
||||
.$PTR SET $D77C
|
||||
.$SOUN SET $FFFF
|
||||
.$TMOD SET $0000
|
||||
.$WECO SET $0045
|
||||
.$$ SET $6D7D
|
||||
.1 SET $0052
|
||||
.2 SET $0053
|
|
@ -0,0 +1,33 @@
|
|||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* *
|
||||
* *
|
||||
* N N OOO AAA H H '' SSSS V V 11 77777 *
|
||||
* NN N O O A A H H '' S V V 1 7 *
|
||||
* N N N O O AAAAA HHHHH ' SSS V V 1 7 *
|
||||
* N NN O O A A H H S V V 1 7 *
|
||||
* N N OOO A A H H SSSS V 11111 7 *
|
||||
* *
|
||||
* S I N I S T A R 17 *
|
||||
* *
|
||||
* A game by Noah Falstein, Rich Witt, Sam Dicker and Bob Mical *
|
||||
* Copyright (c) 1982 by Williams Electronics Inc. *
|
||||
* *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
SINISTAR.EQU SET *
|
||||
|
||||
INCLUDE [SAM]tSTART
|
||||
NLIST
|
||||
INCLVER NOAH,NOAHS.SET * Equates extracted from SAM and RICH
|
||||
INCLVER NOAH,NOAHS.SYM
|
||||
LIST
|
||||
|
||||
INCLVER NOAH,N0 * Check for replacement symbols
|
||||
* This doesn't work, so I'm assembling it separately
|
||||
|
||||
* INCLVER NOAH,N1
|
||||
INCLVER NOAH,N2
|
||||
INCLVER NOAH,N3
|
||||
|
||||
LEVEL SET 1 * For Sinistar.Equ
|
||||
ENDTEST
|
||||
END
|
|
@ -0,0 +1,212 @@
|
|||
SYMVER .PPL5,$59AA
|
||||
SYMVER .PWAR,$59A7
|
||||
SYMVER .PWOR,$59A4
|
||||
SYMVER .WAGG,$59AD
|
||||
SYMVER ADDPAR,$5D7B
|
||||
SYMVER ADDSCO,$3B2A
|
||||
SYMVER ADDVIB,$6C56
|
||||
SYMVER ALIVE,$4FE2
|
||||
SYMVER AMDEMO,$9896
|
||||
SYMVER ANISCS,$536C
|
||||
SYMVER C1SLEE,$46A8
|
||||
SYMVER C2SLEE,$46AA
|
||||
SYMVER CATPRB,$0060
|
||||
SYMVER CCRYST,$4D2D
|
||||
SYMVER CEXPLO,$4D8D
|
||||
SYMVER CFRAGM,$4D9B
|
||||
SYMVER CHGA,$483E
|
||||
SYMVER CHGOBJ,$43B8
|
||||
SYMVER CPIECE,$4D6E
|
||||
SYMVER CPLAN3,$4C29
|
||||
SYMVER CPLAN2,$4C07
|
||||
SYMVER CPLAN5,$4C6D
|
||||
SYMVER CPLAN1,$4BE5
|
||||
SYMVER CPLAN4,$4C4B
|
||||
SYMVER CPLAYE,$4BC3
|
||||
SYMVER CPLSHO,$4D11
|
||||
SYMVER CRPROB,$0010
|
||||
SYMVER CRYDIS,$000C
|
||||
SYMVER CSBOMB,$4C8F
|
||||
SYMVER CSINI,$4CEF
|
||||
SYMVER CWARRI,$4CD0
|
||||
SYMVER CWARSH,$4D1F
|
||||
SYMVER CWORKC,$4D4F
|
||||
SYMVER CWORKE,$4CB1
|
||||
SYMVER DCRYWO,$4547
|
||||
SYMVER DEATHF,$9895
|
||||
SYMVER DIE,$4755
|
||||
SYMVER DISP,$5583
|
||||
SYMVER DMOMAX,$0040
|
||||
SYMVER DSTMOD,$0040
|
||||
SYMVER DTIME,$A019
|
||||
SYMVER EDGE,$987F
|
||||
SYMVER EXEC2,$34AA
|
||||
SYMVER EXPOBJ,$6C61
|
||||
SYMVER FINISH,$A016
|
||||
SYMVER FRAGEX,$3EE1
|
||||
SYMVER FRAME,$33B4
|
||||
SYMVER FREE,$9873
|
||||
SYMVER GA1,$CC06
|
||||
SYMVER GETSCN,$3FB1
|
||||
SYMVER GIVCRY,$6C64
|
||||
SYMVER GROUND,$0000
|
||||
SYMVER ICFLAS,$26B1
|
||||
SYMVER ICRYST,$26A1
|
||||
SYMVER IEXPLO,$296C
|
||||
SYMVER INBOMB,$A1B8
|
||||
SYMVER INCALL,$6C67
|
||||
SYMVER INDEXS,$A225
|
||||
SYMVER INHIBI,$6A3C
|
||||
SYMVER INULL,$2D6F
|
||||
SYMVER INVTBL,$4E28
|
||||
SYMVER INWARR,$6C6A
|
||||
SYMVER IPLSHO,$2438
|
||||
SYMVER KEYCLE,$A1A5
|
||||
SYMVER KILLOB,$4386
|
||||
SYMVER KOBJEC,$4665
|
||||
SYMVER KRCRYS,$6C70
|
||||
SYMVER KRSINI,$59B0
|
||||
SYMVER KRWORK,$6C73
|
||||
SYMVER LCRYST,$0003
|
||||
SYMVER LFRAGM,$000A
|
||||
SYMVER LPLANE,$0001
|
||||
SYMVER LPLAYE,$0000
|
||||
SYMVER LPLSHO,$0008
|
||||
SYMVER LSBOMB,$0002
|
||||
SYMVER LSINI,$0007
|
||||
SYMVER LWARRI,$0006
|
||||
SYMVER LWASHO,$0009
|
||||
SYMVER LWORKE,$0004
|
||||
SYMVER LWORKC,$0005
|
||||
SYMVER MAXCRA,$0010
|
||||
SYMVER MAXSIN,$000C
|
||||
SYMVER MESLEN,$EF8C
|
||||
SYMVER MINDIS,$0020
|
||||
SYMVER MINFRE,$0600
|
||||
SYMVER MINPRB,$00B0
|
||||
SYMVER MUAD,$00F8
|
||||
SYMVER NEWTUN,$3891
|
||||
SYMVER NOPOST,$45EA
|
||||
SYMVER NULL,$E195
|
||||
SYMVER OBSTCL,$0007
|
||||
SYMVER OBSTDS,$000D
|
||||
SYMVER OBSTPR,$0006
|
||||
SYMVER OCALPR,$0013
|
||||
SYMVER OCDIND,$0012
|
||||
SYMVER OCHAR,$0012
|
||||
SYMVER OCLEE,$0001
|
||||
SYMVER OCLELS,$0013
|
||||
SYMVER OCLER,$0000
|
||||
SYMVER OCOMBO,$0002
|
||||
SYMVER OCRAGE,$0006
|
||||
SYMVER ODRWVE,$0018
|
||||
SYMVER OEXEC,$0002
|
||||
SYMVER OHISDS,$000B
|
||||
SYMVER OHISPR,$000F
|
||||
SYMVER OIMNO,$0006
|
||||
SYMVER OINDEX,$FFFE
|
||||
SYMVER OINTYP,$001D
|
||||
SYMVER OINVEC,$0005
|
||||
SYMVER OIWSCI,$000F
|
||||
SYMVER OKIVEC,$0007
|
||||
SYMVER OLVEL,$000E
|
||||
SYMVER OMASS,$0009
|
||||
SYMVER OMODST,$0009
|
||||
SYMVER OMWAAT,$0002
|
||||
SYMVER OMWADR,$0000
|
||||
SYMVER OMWAIN,$0008
|
||||
SYMVER OMWAMI,$0004
|
||||
SYMVER OMWATA,$0006
|
||||
SYMVER OMWOCR,$0006
|
||||
SYMVER OMWODR,$0000
|
||||
SYMVER OMWOEV,$0008
|
||||
SYMVER OMWOIN,$0004
|
||||
SYMVER OMWOTA,$0002
|
||||
SYMVER ONIDES,$0016
|
||||
SYMVER OOFFSC,$000C
|
||||
SYMVER OONSCR,$000E
|
||||
SYMVER OPDRWV,$001A
|
||||
SYMVER OPFRAG,$001E
|
||||
SYMVER OPRIMO,$0004
|
||||
SYMVER OPRIMA,$0005
|
||||
SYMVER OQTAFC,$0003
|
||||
SYMVER OQUOTA,$0011
|
||||
SYMVER OSCAN,$001C
|
||||
SYMVER OSCHAR,$0004
|
||||
SYMVER OSCLDC,$0018
|
||||
SYMVER OSCNIN,$000D
|
||||
SYMVER OSCOCA,$000D
|
||||
SYMVER OSCSDC,$0019
|
||||
SYMVER OSCSQI,$0016
|
||||
SYMVER OSCTYP,$0014
|
||||
SYMVER OSCWCR,$0011
|
||||
SYMVER OSEED2,$0002
|
||||
SYMVER OSEED1,$0000
|
||||
SYMVER OSLPOS,$0008
|
||||
SYMVER OSLVIB,$0002
|
||||
SYMVER OSMIS,$001D
|
||||
SYMVER OSPERS,$000C
|
||||
SYMVER OSRCHT,$0006
|
||||
SYMVER OSSCWS,$000A
|
||||
SYMVER OSSPOS,$0009
|
||||
SYMVER OSSQSI,$001C
|
||||
SYMVER OSSVIB,$0004
|
||||
SYMVER OSVEL,$000C
|
||||
SYMVER OSVIBA,$0000
|
||||
SYMVER OSWSA,$0004
|
||||
SYMVER OURPRI,$000A
|
||||
SYMVER OUTP35,$E20C
|
||||
SYMVER OVIBAS,$0021
|
||||
SYMVER OWARRI,$0001
|
||||
SYMVER OWISLE,$0008
|
||||
SYMVER OWORKE,$0000
|
||||
SYMVER OWSCON,$0004
|
||||
SYMVER PHRLEN,$EC5D
|
||||
SYMVER PLAIND,$5035
|
||||
SYMVER POP,$A01B
|
||||
SYMVER POSBOU,$6C76
|
||||
SYMVER PREBOU,$6C79
|
||||
SYMVER PRTASK,$9842
|
||||
SYMVER PSINII,$000F
|
||||
SYMVER QBANG,$4DB3
|
||||
SYMVER QCRYFL,$4DF7
|
||||
SYMVER QMESG,$4DE6
|
||||
SYMVER QUOMOD,$0006
|
||||
SYMVER RAND8B,$4802
|
||||
SYMVER RAND8,$4808
|
||||
SYMVER RCHMAX,$0060
|
||||
SYMVER RCMOSA,$4A5F
|
||||
SYMVER RCMOSB,$4A70
|
||||
SYMVER RSTPOP,$6C7C
|
||||
SYMVER RTS,$2E44
|
||||
SYMVER SCANDI,$474D
|
||||
SYMVER SCROFF,$462B
|
||||
SYMVER SEEDS,$982E
|
||||
SYMVER SINI,$6B68
|
||||
SYMVER SINIBO,$6A71
|
||||
SYMVER SINIKI,$A03E
|
||||
SYMVER SININD,$9878
|
||||
SYMVER SINISE,$9894
|
||||
SYMVER SLEEP1,$46BB
|
||||
SYMVER SLEEP2,$46DB
|
||||
SYMVER SPLAYE,$A138
|
||||
SYMVER SWRPRB,$0010
|
||||
SYMVER TASK0,$A19E
|
||||
SYMVER TASK1,$A15F
|
||||
SYMVER TASK25,$A197
|
||||
SYMVER TASK4,$A16D
|
||||
SYMVER TASK64,$A189
|
||||
SYMVER TASK8,$A174
|
||||
SYMVER TAUNT,$6C80
|
||||
SYMVER TDISPE,$5593
|
||||
SYMVER TEMP,$9800
|
||||
SYMVER TRAP,$E196
|
||||
SYMVER VIBDAM,$0002
|
||||
SYMVER WAGG,$A03C
|
||||
SYMVER WARRIO,$6612
|
||||
SYMVER WORKER,$616B
|
||||
SYMVER WPLAYE,$9900
|
||||
SYMVER WRSTPR,$0001
|
||||
SYMVER YELLOW,$00FF
|
||||
SYMVER ZCOLTB,$50DB
|
||||
SYMVER ZONECO,$A018
|
|
@ -0,0 +1,62 @@
|
|||
Include [sam]Start
|
||||
|
||||
PushOrg RomSav
|
||||
Local
|
||||
*
|
||||
* Speech Calls
|
||||
*
|
||||
SC1 .IPRIO 3C
|
||||
.SOUND $0D * I AM SINISTAR
|
||||
.PRIO 3B
|
||||
.TIME 80
|
||||
.STOP
|
||||
*
|
||||
SC2 .IPRIO 3C
|
||||
.SOUND $0E * BEWARE, I LIVE
|
||||
.PRIO 3B
|
||||
.TIME 80
|
||||
.STOP
|
||||
*
|
||||
SC3 .IPRIO 3A
|
||||
.SOUND $0F * I HUNGER
|
||||
.PRIO 3B
|
||||
.TIME 60
|
||||
.STOP
|
||||
*
|
||||
SC4 .IPRIO 3A
|
||||
.SOUND $13 * BEWARE, COWARD
|
||||
.PRIO 3B
|
||||
.TIME 80
|
||||
.STOP
|
||||
*
|
||||
SC5 .IPRIO 3A
|
||||
.SOUND $0B * RUN, COWARD
|
||||
.PRIO 3B
|
||||
.TIME 80
|
||||
.STOP
|
||||
*
|
||||
SC6 .IPRIO 3A
|
||||
.SOUND $1D * RUN**3
|
||||
.PRIO 3B
|
||||
.TIME 80
|
||||
.STOP
|
||||
*
|
||||
SC7 .IPRIO 3A
|
||||
.SOUND $06 * I HUNGER, COWARD
|
||||
.PRIO 3B
|
||||
.TIME 80
|
||||
.STOP
|
||||
*
|
||||
SC8 .IPRIO 3A
|
||||
.SOUND $02 * EEERRAAURGH!
|
||||
.PRIO 3B
|
||||
.TIME $A0
|
||||
.STOP
|
||||
*
|
||||
SC9 .IPRIO 3C
|
||||
.SOUND $02 * EEERRAAURGH!
|
||||
.PRIO 3B
|
||||
.TIME $A0
|
||||
.STOP
|
||||
|
||||
PullOrg RomSav
|
|
@ -0,0 +1,82 @@
|
|||
$ Version = 17
|
||||
$ V := .V'VERSION
|
||||
$ DISP "
|
||||
from: ''P1' into: ''P2'.SYM"
|
||||
$ SYMCOUNT = 0
|
||||
$ ERRCOUNT = 0
|
||||
$ SEARCH/NOHEAD/OUTPUT=UNDEFINED.TMP 'P1' " ***** "
|
||||
$ ON CONT_Y THEN GOTO ERROREND
|
||||
$ COPY :==
|
||||
$ COPY/CONC [SAM'V']MESSAGE.EQU,[SAM'V']IMAGE.EQU,[SAM'V']EQUATES.EQU,[SAM'V']SAMS.EQU EQU.TMP
|
||||
$ COPY/CONC EQU.TMP,[WITT'V']RICHS.EQU,[WITT'V']RICHS2.EQU EQU.TMP
|
||||
$ COPY :== @[WITT.COM]COPY
|
||||
$ OPEN UNDEF UNDEFINED.TMP
|
||||
$ OPEN/WRITE NEWSYM NEWSYMVER.TMP
|
||||
$LINELOOP:
|
||||
$ READ/END=GOODEND UNDEF LINE
|
||||
$ POS = 0
|
||||
$SYMLOOP:
|
||||
$ LINE := "XXXXX "'F$EX(POS,99,LINE)
|
||||
$ POS = 'F$LOC(" *****",LINE)+7
|
||||
$ IF POS.EQ.'F$LEN(LINE)+7 THEN GOTO LINELOOP
|
||||
$ SYM := 'F$EX(POS-13,6,LINE)
|
||||
$ SPACE = 'F$LOC(" ",SYM)
|
||||
$ IF SPACE.NE.'F$LEN(SYM) THEN SYM := 'F$EX(SPACE+1,6-SPACE,SYM)
|
||||
$ SEA/NOH/O=S.TMP EQU.TMP 'SYM'
|
||||
$ OPEN SRCH S.TMP
|
||||
$ LENSYM = 'F$LEN(SYM)
|
||||
$ VALUE := ""
|
||||
$SEALOOP:
|
||||
$ READ/END=SEAEND SRCH SLINE
|
||||
$ IF 'F$LOC(SYM,SLINE).NE.0 THEN GOTO SEALOOP
|
||||
$ IF LENSYM.NE.6.AND.'F$LOC(" ",SLINE).NE.LENSYM THEN GOTO SEALOOP
|
||||
$ NEWVAL := 'F$EX(F$LOC(" $",SLINE)+2,4,SLINE)
|
||||
$ IF VALUE.EQS."".OR.NEWVAL.EQS.VALUE THEN GOTO NOTMULT
|
||||
$ DISP SYM," has multiple values"
|
||||
$ ERRCOUNT = ERRCOUNT+1
|
||||
$ GOTO SYMEND
|
||||
$NOTMULT:
|
||||
$ VALUE := 'NEWVAL
|
||||
$ GOTO SEALOOP
|
||||
$SEAEND:
|
||||
$ IF VALUE.NES."" THEN GOTO DEFINED
|
||||
$ DISP SYM," is not defined"
|
||||
$ ERRCOUNT = ERRCOUNT+1
|
||||
$ GOTO SYMEND
|
||||
$DEFINED:
|
||||
$ DISP SYM," = $",VALUE
|
||||
$ WRITE NEWSYM " SYMVER ",SYM,",$",VALUE
|
||||
$ SYMCOUNT = SYMCOUNT+1
|
||||
$SYMEND:
|
||||
$ CLOSE SRCH
|
||||
$ DEL S.TMP;*
|
||||
$ GOTO SYMLOOP
|
||||
$GOODEND:
|
||||
$ DISP SYMCOUNT," new symbols"
|
||||
$ DISP ERRCOUNT," errors"
|
||||
$ IF SYMCOUNT.EQ.0 THEN GOTO ABORT
|
||||
$ IF ERRCOUNT.EQ.0 THEN GOTO MERGEIT
|
||||
$ IF P3.EQS."" THEN INQ P3 "Do you want to merge anyway?"
|
||||
$ IF F$EX(0,1,P3).NES."Y" THEN GOTO ABORT
|
||||
$MERGEIT:
|
||||
$ CLOSE NEWSYM
|
||||
$ OPEN/ERROR=NEWFILE TEST 'P2'.SYM
|
||||
$ CLOSE TEST
|
||||
$ APPEND 'P2'.SYM NEWSYMVER.TMP
|
||||
$ DISP "merging into ",P2,".SYM"
|
||||
$ GOTO SORTIT
|
||||
$NEWFILE:
|
||||
$ DISP "creating ",P2,".SYM"
|
||||
$SORTIT:
|
||||
$ SORT/KEY=(POS=8,SIZE=6) NEWSYMVER.TMP 'P2'.SYM
|
||||
$ GOTO END
|
||||
$ABORT:
|
||||
$ DISP "merge aborted"
|
||||
$ERROREND:
|
||||
$ CLOSE NEWSYM
|
||||
$END:
|
||||
$ CLOSE UNDEF
|
||||
$ DEL EQU.TMP;*
|
||||
$ DEL UNDEFINED.TMP;*
|
||||
$ DEL NEWSYMVER.TMP;*
|
||||
$ DISP ""
|
|
@ -0,0 +1,521 @@
|
|||
$ IF VERSION .EQ. 17 THEN GOTO _VOK
|
||||
$ show symbol VERSION
|
||||
$ write SYS$OUTPUT "The symbol VERSION must be 17 in your login."
|
||||
$ write SYS$OUTPUT "PROCEEDURE ABORTING."
|
||||
$ write SYS$OUTPUT "Restart when condition has been corrected."
|
||||
$ EXIT
|
||||
$_VOK:
|
||||
$ ESC[0,8] = %X1B
|
||||
$ write SYS$OUTPUT ESC,"[24;1H " ! Clear bottom two lines of the screen
|
||||
$ write SYS$OUTPUT " " ! for informational use.
|
||||
$ write SYS$OUTPUT ESC,"[1;22r" ! Set scrolling region
|
||||
$ write SYS$OUTPUT ESC,"[24;1H",ESC,"#6",ESC,"[7mVERSION ''VERSION'",ESC,"[0m"
|
||||
$ ON ERROR THEN GOTO _EXIT
|
||||
$ ON CONTROL_Y THEN GOTO _EXIT
|
||||
$_NAME:
|
||||
$ write SYS$OUTPUT ESC,"[23;1H",ESC,"[0KResponses: [MESSAGE,SAM,RICH,RICH2,NOAH,BOB,LIBCHK,Control-Y]"
|
||||
$ write SYS$OUTPUT ESC,"[21;1H" ! Position cursor
|
||||
$ INQUIRE PGMR_NAME "What is your name?" ! for inquiry.
|
||||
$ IF PGMR_NAME .EQS. "NOAH" THEN GOTO _NOAH
|
||||
$ IF PGMR_NAME .EQS. "RICH" THEN GOTO _'PGMR_NAME'
|
||||
$ IF PGMR_NAME .EQS. "RICH2" THEN GOTO _'PGMR_NAME'
|
||||
$ IF PGMR_NAME .EQS. "SAM" THEN GOTO _SAM
|
||||
$ IF PGMR_NAME .EQS. "BOB" THEN GOTO _BOB
|
||||
$ IF PGMR_NAME .EQS. "LIBCHK" THEN GOTO _LIBCHK
|
||||
$ IF PGMR_NAME .EQS. "RXX" THEN GOTO _R_XX
|
||||
$ GOTO _NAME
|
||||
$!
|
||||
$! N N OOO AAA H H
|
||||
$! NN N O O A A H H
|
||||
$! N N N O O AAAAA HHHHH
|
||||
$! N NN O O A A H H
|
||||
$! N N OOO A A H H
|
||||
$!
|
||||
$_NOAH:
|
||||
$ set DEFAULT [fals]
|
||||
$ @login
|
||||
$ set DEFAULT [fals.v'VERSION']
|
||||
$ write SYS$OUTPUT " "
|
||||
$ write SYS$OUTPUT "I will now search and RICHS.EQU and RICHS2.EQU for the symbol _1"
|
||||
$ write SYS$OUTPUT "If it is not found, then the $Symbols were not edited to _Symbols."
|
||||
$ search [witt.v'VERSION']richs.equ,[witt.v'VERSION']richs2.equ "_1"
|
||||
$N_SYMBOLS:
|
||||
$ write SYS$OUTPUT ESC,"[23;1H",ESC,"[0KResponses: [YES,NO,Control-Y]"
|
||||
$ write SYS$OUTPUT ESC,"[21;1H"
|
||||
$ INQUIRE YES_NO "Was the _1 symbol found?"
|
||||
$ IF YES_NO .EQS. "YES" THEN GOTO N_SET
|
||||
$ IF YES_NO .EQS. "Y" THEN GOTO N_SET
|
||||
$ IF YES_NO .EQS. "NO" THEN GOTO N_NO_SET
|
||||
$ IF YES_NO .EQS. "N" THEN GOTO N_NO_SET
|
||||
$ GOTO N_SYMBOLS
|
||||
$N_NO_SET:
|
||||
$ WRITE SYS$OUTPUT "Please go back and edit RICHS.EQU and/or RICHS2.EQU and change"
|
||||
$ WRITE SYS$OUTPUT "all the $Symbols to _Symbols now."
|
||||
$ GOTO _EXIT
|
||||
$!
|
||||
$! Reset NOAHS.SET and NOAHS.SYM
|
||||
$!
|
||||
$N_SET:
|
||||
$ search/output=noahs.set [witt.v'VERSION']richs2.equ " SET "
|
||||
$! copy [witt]null.src [fals.v'VERSION']noahs.sym
|
||||
$! ABOVE LINE COMMENTED OUT FOR N0 pass
|
||||
$ copy [witt]null.src [fals.v'VERSION']noah.sym ! For the work files.
|
||||
$ a9s [fals.v'VERSION']noahs
|
||||
$ write SYS$OUTPUT " "
|
||||
$ write SYS$OUTPUT "I will now wait for the first assembly to finish."
|
||||
$ synchronize ASM09/queue=SYS$SLOW
|
||||
$ @[witt.v'VERSION']capture SLOW @[fals.v'VERSION']symver noahs.lis noahs y
|
||||
$ write SYS$OUTPUT " "
|
||||
$ write SYS$OUTPUT "I will now wait for the symbol capturing to finish."
|
||||
$ synchronize CAPTURE/queue=SYS$SLOW
|
||||
$ a9s [fals.v'VERSION']noahs
|
||||
$ write SYS$OUTPUT " "
|
||||
$ write SYS$OUTPUT "I will now wait for the second assembly to finish."
|
||||
$ synchronize ASM09/queue=SYS$SLOW
|
||||
$ write SYS$OUTPUT " "
|
||||
$ search [fals.v'VERSION']noahs.log "errors detected"
|
||||
$N_DETECT:
|
||||
$ write SYS$OUTPUT ESC,"[23;1H",ESC,"[0KResponses: [YES,NO,Control-Y]"
|
||||
$ write SYS$OUTPUT ESC,"[21;1H"
|
||||
$ INQUIRE YES_NO "Were there any errors detected?"
|
||||
$ IF YES_NO .EQS. "YES" THEN GOTO N_ERROR
|
||||
$ IF YES_NO .EQS. "Y" THEN GOTO N_ERROR
|
||||
$ IF YES_NO .EQS. "NO" THEN GOTO N_NO_ERROR
|
||||
$ IF YES_NO .EQS. "N" THEN GOTO N_NO_ERROR
|
||||
$ GOTO N_DETECT
|
||||
$N_ERROR:
|
||||
$ write SYS$OUTPUT "Please examine NOAHS.LOG and correct the errors."
|
||||
$ write SYS$OUTPUT " "
|
||||
$ write SYS$OUTPUT "Once the assembly works, don't forget to run:"
|
||||
$ write SYS$OUTPUT "@[WITT.V''VERSION']EQUATES NOAHS"
|
||||
$ purge [fals.v'VERSION']noahs.*
|
||||
$ GOTO _EXIT
|
||||
$N_NO_ERROR:
|
||||
$ write SYS$OUTPUT " "
|
||||
$ write SYS$OUTPUT "I will now generate the equate file."
|
||||
$ write SYS$OUTPUT "Follow the instructions which follow ..."
|
||||
$ write SYS$OUTPUT " "
|
||||
$ @[WITT.V'VERSION']EQUATES NOAHS
|
||||
$ GOTO _EXIT
|
||||
$!
|
||||
$! RRRR IIIII CCCC H H
|
||||
$! R R I C H H
|
||||
$! RRRR I C HHHHH
|
||||
$! R R I C H H
|
||||
$! R R IIIII CCCC H H
|
||||
$!
|
||||
$_RICH:
|
||||
$ set DEFAULT [witt.v'VERSION']
|
||||
$ write SYS$OUTPUT " "
|
||||
$ write SYS$OUTPUT "I will now search SAMS.EQU for the symbols _1 and VERSION."
|
||||
$ write SYS$OUTPUT "If VERSION is the wrong value, then [SAM]TSTART.SRC is wrong."
|
||||
$ write SYS$OUTPUT " SAMS.EQU will have to be edited also."
|
||||
$ write SYS$OUTPUT "If _1 is not found, then the $Symbols were not edited to _Symbols."
|
||||
$ write SYS$OUTPUT " SAMS.EQU will have to be edited."
|
||||
$ search [sam.v'VERSION']sams.equ VERSIO,_1
|
||||
$R_SYMBOLS:
|
||||
$ write SYS$OUTPUT ESC,"[23;1H",ESC,"[0KResponses: [YES,NO,Control-Y]"
|
||||
$ write SYS$OUTPUT ESC,"[21;1H"
|
||||
$ INQUIRE YES_NO "Was the _1 symbol found and VERSIO the right value?"
|
||||
$ IF YES_NO .EQS. "YES" THEN GOTO R_SET
|
||||
$ IF YES_NO .EQS. "Y" THEN GOTO R_SET
|
||||
$ IF YES_NO .EQS. "NO" THEN GOTO R_NO_SET
|
||||
$ IF YES_NO .EQS. "N" THEN GOTO R_NO_SET
|
||||
$ GOTO R_SYMBOLS
|
||||
$R_NO_SET:
|
||||
$ write SYS$OUTPUT "Please go back and edit SAMS.EQU and change"
|
||||
$ write SYS$OUTPUT "all the $Symbols to _Symbols now."
|
||||
$ GOTO _EXIT
|
||||
$!
|
||||
$! Reset RICHS.SET and RICHS.SYM
|
||||
$!
|
||||
$R_SET:
|
||||
$ search/output=richs.set [sam.v'VERSION']sams.equ " SET "
|
||||
$ copy [witt]null.src [witt.v'VERSION']richs.sym
|
||||
$ copy [witt]null.src [witt.v'VERSION']rich.sym ! For the work files.
|
||||
$ abl richs slow
|
||||
$ write SYS$OUTPUT " "
|
||||
$ write SYS$OUTPUT "I will now wait for the first assembly to finish."
|
||||
$ synchronize RICHSSLOW/queue=SYS$SLOW
|
||||
$ @[witt.v'VERSION']capture SLOW @[witt.v'VERSION']symver richs.lis richs y
|
||||
$ write SYS$OUTPUT " "
|
||||
$ write SYS$OUTPUT "I will now wait for the symbol capturing to finish."
|
||||
$ synchronize CAPTURE/queue=SYS$SLOW
|
||||
$ ab richs slow
|
||||
$ write SYS$OUTPUT " "
|
||||
$ write SYS$OUTPUT "I will now wait for the second assembly to finish."
|
||||
$ synchronize RICHSSLOW/queue=SYS$SLOW
|
||||
$ write SYS$OUTPUT " "
|
||||
$ search [witt.v'VERSION']richs.log "errors detected"
|
||||
$R_DETECT:
|
||||
$ write SYS$OUTPUT ESC,"[23;1H",ESC,"[0KResponses: [YES,NO,Control-Y]"
|
||||
$ write SYS$OUTPUT ESC,"[21;1H"
|
||||
$ INQUIRE YES_NO "Were there any errors detected?"
|
||||
$ IF YES_NO .EQS. "YES" THEN GOTO R_ERROR
|
||||
$ IF YES_NO .EQS. "Y" THEN GOTO R_ERROR
|
||||
$ IF YES_NO .EQS. "NO" THEN GOTO R_NO_ERROR
|
||||
$ IF YES_NO .EQS. "N" THEN GOTO R_NO_ERROR
|
||||
$ GOTO R_DETECT
|
||||
$R_ERROR:
|
||||
$ write SYS$OUTPUT "Please examine RICHS.LOG and correct the errors."
|
||||
$ write SYS$OUTPUT " "
|
||||
$ write SYS$OUTPUT "Once the assembly works, don't forget to run:"
|
||||
$ write SYS$OUTPUT "@[WITT.V''VERSION']EQUATES RICHS"
|
||||
$ purge [witt.v'VERSION']richs.*
|
||||
$ GOTO _EXIT
|
||||
$R_NO_ERROR:
|
||||
$ write SYS$OUTPUT " "
|
||||
$ write SYS$OUTPUT "I will now generate the equate file."
|
||||
$ write SYS$OUTPUT "Follow the instructions which follow ..."
|
||||
$ write SYS$OUTPUT " "
|
||||
$ @[WITT.V'VERSION']EQUATES RICHS
|
||||
$ GOTO _RICH2
|
||||
$_RICH2:
|
||||
$ set DEFAULT [witt.v'VERSION']
|
||||
$ write SYS$OUTPUT " "
|
||||
$ write SYS$OUTPUT "I will now search RICHS.EQU for the symbol _1."
|
||||
$ write SYS$OUTPUT "If _1 is not found, then the $Symbols were not edited to _Symbols."
|
||||
$ write SYS$OUTPUT " RICHS.EQU will have to be edited."
|
||||
$ search [witt.v'VERSION']richs.equ _1
|
||||
$R2_SYMBOLS:
|
||||
$ write SYS$OUTPUT ESC,"[23;1H",ESC,"[0KResponses: [YES,NO,Control-Y]"
|
||||
$ write SYS$OUTPUT ESC,"[21;1H"
|
||||
$ INQUIRE YES_NO "Was the _1 symbol found?"
|
||||
$ IF YES_NO .EQS. "YES" THEN GOTO R2_SET
|
||||
$ IF YES_NO .EQS. "Y" THEN GOTO R2_SET
|
||||
$ IF YES_NO .EQS. "NO" THEN GOTO R2_NO_SET
|
||||
$ IF YES_NO .EQS. "N" THEN GOTO R2_NO_SET
|
||||
$ GOTO R2_SYMBOLS
|
||||
$R2_NO_SET:
|
||||
$ write SYS$OUTPUT "Please go back and edit RICHS.EQU and change"
|
||||
$ write SYS$OUTPUT "all the $Symbols to _Symbols now."
|
||||
$ GOTO _EXIT
|
||||
$!
|
||||
$! Reset RICHS2.SET and RICHS2.SYM
|
||||
$!
|
||||
$R2_SET:
|
||||
$ search/output=richs2.set [witt.v'VERSION']richs.equ " SET "
|
||||
$ copy [witt]null.src [witt.v'VERSION']richs2.sym
|
||||
$ abl richs2 slow
|
||||
$ write SYS$OUTPUT " "
|
||||
$ write SYS$OUTPUT "I will now wait for the first assembly to finish."
|
||||
$ synchronize RICHS2SLOW/queue=SYS$SLOW
|
||||
$ @[witt.v'VERSION']capture FAST @[witt.v'VERSION']symver richs2.lis richs2 y 2
|
||||
$ write SYS$OUTPUT " "
|
||||
$ write SYS$OUTPUT "I will now wait for the symbol capturing to finish."
|
||||
$ synchronize CAPTURE/queue=SYS$FAST
|
||||
$ ab richs2 fast
|
||||
$ write SYS$OUTPUT " "
|
||||
$ write SYS$OUTPUT "I will now wait for the second assembly to finish."
|
||||
$ synchronize RICHS2FAST/queue=SYS$FAST
|
||||
$_R_XX:
|
||||
$ write SYS$OUTPUT " "
|
||||
$ search [witt.v'VERSION']richs2.log "errors detected"
|
||||
$R2_DETECT:
|
||||
$ write SYS$OUTPUT ESC,"[23;1H",ESC,"[0KResponses: [YES,NO,Control-Y]"
|
||||
$ write SYS$OUTPUT ESC,"[21;1H"
|
||||
$ INQUIRE YES_NO "Were there any errors detected?"
|
||||
$ IF YES_NO .EQS. "YES" THEN GOTO R2_ERROR
|
||||
$ IF YES_NO .EQS. "Y" THEN GOTO R2_ERROR
|
||||
$ IF YES_NO .EQS. "NO" THEN GOTO R2_NO_ERROR
|
||||
$ IF YES_NO .EQS. "N" THEN GOTO R2_NO_ERROR
|
||||
$ GOTO R2_DETECT
|
||||
$R2_ERROR:
|
||||
$ write SYS$OUTPUT "Please examine RICHS2.LOG and correct the errors."
|
||||
$ write SYS$OUTPUT " "
|
||||
$ write SYS$OUTPUT "Once the assembly works, don't forget to run:"
|
||||
$ write SYS$OUTPUT "@[WITT.V''VERSION']EQUATES RICHS2"
|
||||
$ purge [witt.v'VERSION']richs2.*
|
||||
$ GOTO _EXIT
|
||||
$R2_NO_ERROR:
|
||||
$ write SYS$OUTPUT " "
|
||||
$ write SYS$OUTPUT "I will now generate the equate file."
|
||||
$ write SYS$OUTPUT "Follow the instructions which follow ..."
|
||||
$ write SYS$OUTPUT " "
|
||||
$ @[WITT.V'VERSION']EQUATES RICHS2
|
||||
$ GOTO _EXIT
|
||||
$!
|
||||
$! SSSS AAA M M
|
||||
$! S A A MM MM
|
||||
$! SSS AAAAA M M M
|
||||
$! S A A M M
|
||||
$! SSSS A A M M
|
||||
$!
|
||||
$_SAM:
|
||||
$ if proc$name.eqs."SAM" then goto S_START
|
||||
$ @[sam]
|
||||
$S_START:
|
||||
$ mo sam.v'VERSION'
|
||||
$!
|
||||
$ open/error=S_NO_MESLIS test MESSAGE.LIS
|
||||
$ close test
|
||||
$ goto S_MESEQU
|
||||
$!
|
||||
$! Assemble MESSAGE
|
||||
$!
|
||||
$S_NO_MESLIS:
|
||||
$ k message.equ
|
||||
$ k sams.lis
|
||||
$ sb
|
||||
$ ab message
|
||||
$ sq
|
||||
$ disp "waiting for MESSAGE assembly"
|
||||
$ sync/queue=sys$asm sambuasm
|
||||
$ open/read/error=S_ASMERRORS test wk:buasmok.tmp
|
||||
$ close test
|
||||
$ ren lis$dir:pgm.lis [sam.v'version]message
|
||||
$!
|
||||
$S_MESEQU:
|
||||
$ open/error=S_NO_MESEQU test MESSAGE.EQU
|
||||
$ close test
|
||||
$ goto S_EQULIS
|
||||
$!
|
||||
$! Generate MESSAGE.EQU
|
||||
$!
|
||||
$S_NO_MESEQU:
|
||||
$ k sams.sym
|
||||
$ inquire null "type RETURN CTRL-A to continue"
|
||||
$ equ message.lis message
|
||||
$!
|
||||
$S_EQULIS:
|
||||
$ open/error=S_NO_EQULIS test EQUATES.LIS
|
||||
$ close test
|
||||
$ goto S_EQUEQU
|
||||
$!
|
||||
$! Assemble EQUATES
|
||||
$!
|
||||
$S_NO_EQULIS:
|
||||
$ k equates.equ
|
||||
$ k sams.lis
|
||||
$ fb
|
||||
$ ab equates
|
||||
$ sq
|
||||
$ disp "waiting for EQUATES assembly"
|
||||
$ sync/queue=sys$asm sambuasm
|
||||
$ open/read/error=S_ASMERRORS test wk:buasmok.tmp
|
||||
$ close test
|
||||
$ ren lis$dir:pgm.lis [sam.v'version]equates
|
||||
$!
|
||||
$S_EQUEQU:
|
||||
$ open/error=S_NO_EQUEQU test EQUATES.EQU
|
||||
$ close test
|
||||
$ goto S_IMALIS
|
||||
$!
|
||||
$! Generate EQUATES.EQU
|
||||
$!
|
||||
$S_NO_EQUEQU:
|
||||
$ k sams.sym
|
||||
$ inquire null "type RETURN CTRL-A to continue"
|
||||
$ equ equates.lis equates
|
||||
$!
|
||||
$S_IMALIS:
|
||||
$ open/error=S_NO_IMALIS test IMAGE.LIS
|
||||
$ close test
|
||||
$ goto S_IMAEQU
|
||||
$!
|
||||
$! Assemble IMAGE
|
||||
$!
|
||||
$S_NO_IMALIS:
|
||||
$ k image.equ
|
||||
$ k sams.lis
|
||||
$ fb
|
||||
$ ab image
|
||||
$ sq
|
||||
$ disp "waiting for IMAGE assembly"
|
||||
$ sync/queue=sys$asm sambuasm
|
||||
$ open/read/error=S_ASMERRORS test wk:buasmok.tmp
|
||||
$ close test
|
||||
$ ren lis$dir:pgm.lis [sam.v'version]image
|
||||
$!
|
||||
$S_IMAEQU:
|
||||
$ open/error=S_NO_IMAEQU test IMAGE.EQU
|
||||
$ close test
|
||||
$ goto S_SAMLIS
|
||||
$!
|
||||
$! Generate IMAGE.EQU
|
||||
$!
|
||||
$S_NO_IMAEQU:
|
||||
$ k sams.lis
|
||||
$ k sams.sym
|
||||
$ inquire null "type RETURN CTRL-A to continue"
|
||||
$ equ image.lis image
|
||||
$!
|
||||
$S_SAMLIS:
|
||||
$ open/error=S_NO_SAMLIS test SAMS.LIS
|
||||
$ close test
|
||||
$ goto S_SAMEQU
|
||||
$!
|
||||
$! Assemble SAMS
|
||||
$!
|
||||
$S_NO_SAMLIS:
|
||||
$ k sams.equ
|
||||
$ sea/nohead/out=sams.set message.equ,equates.equ,image.equ " set "
|
||||
$ sb
|
||||
$ ab sams
|
||||
$ sq
|
||||
$ disp "waiting for SAMS assembly"
|
||||
$ sync/queue=sys$asm sambuasm
|
||||
$ open/read/error=S_SAMSERROR test wk:buasmok.tmp
|
||||
$ close test
|
||||
$ goto S_SAMSLISOK
|
||||
$!
|
||||
$S_SAMSERROR:
|
||||
$ open/read/error=S_TSYMVER test wk:buasmok.tmp
|
||||
$ close test
|
||||
$ goto S_ASMERROR
|
||||
$S_TSYMVER:
|
||||
$ cap @asm$dir:tsymver lis$dir:pgm.lis sams y
|
||||
$ disp "waiting for SAMS symbol capture"
|
||||
$ sync/queue=sys$asm CAPTURE
|
||||
$ ab sams
|
||||
$ sq
|
||||
$ disp "waiting for SAMS assembly"
|
||||
$ sync/queue=sys$asm sambuasm
|
||||
$ open/read/error=S_ASMERRORS test wk:buasmok.tmp
|
||||
$ close test
|
||||
$S_SAMSLISOK:
|
||||
$ ren lis$dir:pgm.lis [sam.v'version]sams
|
||||
$!
|
||||
$S_SAMEQU:
|
||||
$ open/error=S_NO_SAMEQU test SAMS.EQU
|
||||
$ close test
|
||||
$ goto S_SAMSEDIT
|
||||
$!
|
||||
$! Generate SAMS.EQU
|
||||
$!
|
||||
$S_NO_SAMEQU:
|
||||
$ inquire null "type RETURN CTRL-A to continue"
|
||||
$ equ sams.lis sams
|
||||
$!
|
||||
$S_SAMSEDIT:
|
||||
$ sea/out=u.tmp sams.equ "$AT"
|
||||
$ open/read test u.tmp
|
||||
$ read/end=S_DONE test match
|
||||
$ close test
|
||||
$ if match.eqs."No strings matched" then goto S_DONE
|
||||
$!
|
||||
$! change $'s to _
|
||||
$!
|
||||
$ disp "change all <CR>$ to (CR>_"
|
||||
$ inquire null "type RETURN to continue"
|
||||
$ e sams.equ
|
||||
$ goto S_SAMSEDIT
|
||||
$!
|
||||
$S_DONE:
|
||||
$ disp "All done!!!"
|
||||
$ goto _EXIT
|
||||
$!
|
||||
$S_ASMERRORS:
|
||||
$ disp "Errors assembling ",ASM_DEFAULT,".src
|
||||
$ disp "correct errors and restart this program"
|
||||
$ close test
|
||||
$ goto _EXIT
|
||||
$!
|
||||
$! BBBB OOO BBBB
|
||||
$! B B O O B B
|
||||
$! BBBB O O BBBB
|
||||
$! B B O O B B
|
||||
$! BBBB OOO BBBB
|
||||
$!
|
||||
$_BOB:
|
||||
$ set DEFAULT [mica]
|
||||
$ @login
|
||||
$ set DEFAULT [mica.v'VERSION']
|
||||
$ write SYS$OUTPUT " "
|
||||
$ write SYS$OUTPUT "I will now search NOAHS.EQU for the symbol _1"
|
||||
$ write SYS$OUTPUT "If it is not found, then the $Symbols were not edited to _Symbols."
|
||||
$ search [fals.v'VERSION']noahs.equ "_1"
|
||||
$B_SYMBOLS:
|
||||
$ write SYS$OUTPUT ESC,"[23;1H",ESC,"[0KResponses: [YES,NO,Control-Y]"
|
||||
$ write SYS$OUTPUT ESC,"[21;1H"
|
||||
$ INQUIRE YES_NO "Was the _1 symbol found?"
|
||||
$ IF YES_NO .EQS. "YES" THEN GOTO B_SET
|
||||
$ IF YES_NO .EQS. "Y" THEN GOTO B_SET
|
||||
$ IF YES_NO .EQS. "NO" THEN GOTO B_NO_SET
|
||||
$ IF YES_NO .EQS. "N" THEN GOTO B_NO_SET
|
||||
$ GOTO B_SYMBOLS
|
||||
$B_NO_SET:
|
||||
$ WRITE SYS$OUTPUT "Please go back and edit NOAHS.EQU and change"
|
||||
$ WRITE SYS$OUTPUT "all the $Symbols to _Symbols now."
|
||||
$ GOTO _EXIT
|
||||
$!
|
||||
$! Reset BOBS.SET and BOBS.SYM
|
||||
$!
|
||||
$B_SET:
|
||||
$ search/output=bobs.set [fals.v'VERSION']noahs.equ " SET "
|
||||
$ copy [witt]null.src [mica.v'VERSION']bobs.sym
|
||||
$ copy [witt]null.src [mica.v'VERSION']bob.sym ! For the work files.
|
||||
$ asms [mica.v'VERSION']bobs
|
||||
$ write SYS$OUTPUT " "
|
||||
$ write SYS$OUTPUT "I will now wait for the first assembly to finish."
|
||||
$ synchronize BOBS/queue=SYS$SLOW
|
||||
$ @[witt.v'VERSION']capture SLOW @[mica.v'VERSION']symver bobs.lis bobs y
|
||||
$ write SYS$OUTPUT " "
|
||||
$ write SYS$OUTPUT "I will now wait for the symbol capturing to finish."
|
||||
$ synchronize CAPTURE/queue=SYS$SLOW
|
||||
$ asms [mica.v'VERSION']bobs
|
||||
$ write SYS$OUTPUT " "
|
||||
$ write SYS$OUTPUT "I will now wait for the second assembly to finish."
|
||||
$ synchronize BOBS/queue=SYS$SLOW
|
||||
$ write SYS$OUTPUT " "
|
||||
$ search [mica.v'VERSION']bobs.log "errors detected"
|
||||
$B_DETECT:
|
||||
$ write SYS$OUTPUT ESC,"[23;1H",ESC,"[0KResponses: [YES,NO,Control-Y]"
|
||||
$ write SYS$OUTPUT ESC,"[21;1H"
|
||||
$ INQUIRE YES_NO "Were there any errors detected?"
|
||||
$ IF YES_NO .EQS. "YES" THEN GOTO B_ERROR
|
||||
$ IF YES_NO .EQS. "Y" THEN GOTO B_ERROR
|
||||
$ IF YES_NO .EQS. "NO" THEN GOTO B_NO_ERROR
|
||||
$ IF YES_NO .EQS. "N" THEN GOTO B_NO_ERROR
|
||||
$ GOTO B_DETECT
|
||||
$B_ERROR:
|
||||
$ write SYS$OUTPUT "Please examine BOBS.LOG and correct the errors."
|
||||
$ write SYS$OUTPUT " "
|
||||
$ write SYS$OUTPUT "Once the assembly works, don't forget to run:"
|
||||
$ write SYS$OUTPUT "@[WITT.V''VERSION']EQUATES BOBS"
|
||||
$ purge [mica.v'VERSION']bobs.*
|
||||
$ GOTO _EXIT
|
||||
$B_NO_ERROR:
|
||||
$ write SYS$OUTPUT " "
|
||||
$ write SYS$OUTPUT "I will now generate the equate file."
|
||||
$ write SYS$OUTPUT "Follow the instructions which follow ..."
|
||||
$ write SYS$OUTPUT " "
|
||||
$ @[WITT.V'VERSION']EQUATES BOBS
|
||||
$ GOTO _EXIT
|
||||
$!
|
||||
$! L IIIII BBBB CCCC H H K K
|
||||
$! L I B B C H H K K
|
||||
$! L I BBBB C HHHHH KKK
|
||||
$! L I B B C H H K K
|
||||
$! LLLLL IIIII BBBB CCCC H H K K
|
||||
$!
|
||||
$_LIBCHK:
|
||||
$ ERR_COUNT = 0
|
||||
$ ON ERROR THEN GOTO _LIBABORT1
|
||||
$ ON CONTROL_Y THEN GOTO _LIBABORT1
|
||||
$ SORT/KEY=(pos:1,size:6) [SAM.V'VERSION']library.equ temp.tmp
|
||||
$ OPEN/READ TMP: temp.tmp
|
||||
$ ON ERROR THEN GOTO _LIBABORT2
|
||||
$ ON CONTROL_Y THEN GOTO _LIBABORT2
|
||||
$ NEXT_LABEL = ""
|
||||
$ NEXT_LINE = ""
|
||||
$_LIBLOOP:
|
||||
$ LAST_LABEL = "''NEXT_LABEL'"
|
||||
$ LAST_LINE = "''NEXT_LINE'"
|
||||
$ READ TMP: NEXT_LINE
|
||||
$ NEXT_LABEL = "''F$EXTRACT(0,6,NEXT_LINE)'"
|
||||
$ IF NEXT_LABEL .NES. LAST_LABEL THEN GOTO _LIBLOOP
|
||||
$ WRITE SYS$OUTPUT "Duplicate: ""''LAST_LINE'"""
|
||||
$ WRITE SYS$OUTPUT " ""''NEXT_LINE'"""
|
||||
$ ERR_COUNT = ERR_COUNT+1
|
||||
$ GOTO _LIBLOOP
|
||||
$_LIBABORT2:
|
||||
$ CLOSE TMP:
|
||||
$_LIBABORT1:
|
||||
$ DELETE temp.tmp;*
|
||||
$ IF ERR_COUNT .NE. 0 THEN WRITE SYS$OUTPUT "[SAM.V''VERSION']Library.equ is BAD."
|
||||
$ GOTO _EXIT
|
||||
$!
|
||||
$_EXIT:
|
||||
$ write SYS$OUTPUT ESC,"[1;24r",ESC,"[24;79H " ! Reset screen scroll region.
|
||||
$ EXIT
|
|
@ -0,0 +1,844 @@
|
|||
$! A few equates
|
||||
$ VERSION = 17 ! Hopefully unnecessary
|
||||
$ TOPCOM :== COMMON
|
||||
$ TOPDIR :== LIBRARY.SINISTAR
|
||||
$ SAMDIR :== 'TOPDIR'.SAM
|
||||
$ WITTDIR :== 'TOPDIR'.WITT
|
||||
$ FALSDIR :== 'TOPDIR'.FALS
|
||||
$ MICADIR :== 'TOPDIR'.MICA
|
||||
$ ESC[0,8] = %X1B ! VT100 control character.
|
||||
$!xxx turn off external messages.
|
||||
$ disp :== WRITE SYS$OUTPUT
|
||||
$!
|
||||
$ DISP ESC,"[24;1H " ! Clear bottom two lines of the screen
|
||||
$ DISP " " ! for informational use.
|
||||
$ DISP ESC,"[1;22r" ! Set scrolling region
|
||||
$ DISP ESC,"[24;1H",ESC,"#6",ESC,"[7mLIBRARY COPY of SINISTAR",ESC,"[0m"
|
||||
$!
|
||||
$ ON ERROR THEN GOTO _ABORT
|
||||
$ ON CONTROL_Y THEN GOTO _ABORT
|
||||
$ SET NOON ! Setup for use of $STATUS and $SEVERITY
|
||||
$!
|
||||
$_NAME:
|
||||
$ @['TOPDIR'.COM]INQUIRE PGMR_NAME "What do you want to do?" -
|
||||
"[ALLNEW,CHECK,CONTINUE,HELP,Control-Y]"
|
||||
$ IF .NOT. $STATUS THEN $ GOTO _ABORT
|
||||
$!!! IF PGMR_NAME .EQS. "NOAH" THEN GOTO _NOAH
|
||||
$!!! IF PGMR_NAME .EQS. "RICH" THEN GOTO _'PGMR_NAME'
|
||||
$!!! IF PGMR_NAME .EQS. "RICH2" THEN GOTO _'PGMR_NAME'
|
||||
$!!! IF PGMR_NAME .EQS. "SAM" THEN GOTO _SAM
|
||||
$!!! IF PGMR_NAME .EQS. "BOB" THEN GOTO _BOB
|
||||
$!!! IF PGMR_NAME .EQS. "LIBCHK" THEN GOTO _LIBCHK
|
||||
$!!! IF PGMR_NAME .EQS. "RXX" THEN GOTO _R_XX
|
||||
$ IF PGMR_NAME .EQS. "ALLNEW" THEN GOTO _'PGMR_NAME'
|
||||
$ IF PGMR_NAME .EQS. "CHECK" THEN GOTO _'PGMR_NAME'
|
||||
$ IF PGMR_NAME .EQS. "CONTINUE" THEN GOTO _'PGMR_NAME'
|
||||
$ IF PGMR_NAME .EQS. "HELP" THEN GOTO _HELP1
|
||||
$ DISP " "
|
||||
$ DISP "You may only enter one of the designated responses."
|
||||
$!
|
||||
$_HELP1:
|
||||
$ DISP " "
|
||||
$ DISP "ALLNEW will destroy previous builds, forcing an all new library copy"
|
||||
$ DISP " to be built. This will take several hours."
|
||||
$ DISP "CONTINUE will test the current condition of the library copy and if it"
|
||||
$ DISP " is in the middle of being built, will continue doing so. You"
|
||||
$ DISP " must correct any errors it reports and stops at. Then, you"
|
||||
$ DISP " need to CONTINUE again."
|
||||
$ DISP " To change a source and remake the library MOT file, just edit"
|
||||
$ DISP " the SRC file, then delete the LOG and LIS files before running"
|
||||
$ DISP " this proceedure."
|
||||
$ DISP "CHECK will test the current condition of the library copy and report"
|
||||
$ DISP " as if it were building (CONTINUEing) but will not actually try"
|
||||
$ DISP " to build anything. It stops when it finds and reports errors."
|
||||
$ DISP "HELP will print this out."
|
||||
$ DISP " "
|
||||
$ GOTO _NAME
|
||||
$!
|
||||
$!
|
||||
$_ALLNEW:
|
||||
$ SET DEFAULT ['SAMDIR']
|
||||
$ @['TOPDIR'.COM]DELETER message.lis
|
||||
$ @['TOPDIR'.COM]DELETER message.log
|
||||
$ @['TOPDIR'.COM]DELETER image.lis
|
||||
$ @['TOPDIR'.COM]DELETER image.log
|
||||
$ GOTO _CONTINUE
|
||||
$!
|
||||
$!
|
||||
$_CHECK:
|
||||
$ DISP "Sorry. This isn't implimented."
|
||||
$ GOTO _NAME
|
||||
$!
|
||||
$!
|
||||
$_CONTINUE:
|
||||
$ RUN_STOP := RUN
|
||||
$ GOTO _SAM
|
||||
$!
|
||||
$!
|
||||
$_CHECK:
|
||||
$ RUN_STOP := STOP
|
||||
$ GOTO _SAM
|
||||
$!
|
||||
$! N N OOO AAA H H
|
||||
$! NN N O O A A H H
|
||||
$! N N N O O AAAAA HHHHH
|
||||
$! N NN O O A A H H
|
||||
$! N N OOO A A H H
|
||||
$!
|
||||
$_NOAH:
|
||||
$ set DEFAULT [fals]
|
||||
$ @login
|
||||
$ set DEFAULT [LIBRARY.SINISTAR.fals]
|
||||
$ DISP " "
|
||||
$ DISP "I will now search and RICHS.EQU and RICHS2.EQU for the symbol _1"
|
||||
$ DISP "If it is not found, then the $Symbols were not edited to _Symbols."
|
||||
$ search ['WITTDIR']richs.equ,['WITTDIR']richs2.equ "_1"
|
||||
$N_SYMBOLS:
|
||||
$ DISP ESC,"[23;1H",ESC,"[0KResponses: [YES,NO,Control-Y]"
|
||||
$ DISP ESC,"[21;1H"
|
||||
$ INQUIRE YES_NO "Was the _1 symbol found?"
|
||||
$ IF YES_NO .EQS. "YES" THEN GOTO N_SET
|
||||
$ IF YES_NO .EQS. "Y" THEN GOTO N_SET
|
||||
$ IF YES_NO .EQS. "NO" THEN GOTO N_NO_SET
|
||||
$ IF YES_NO .EQS. "N" THEN GOTO N_NO_SET
|
||||
$ GOTO N_SYMBOLS
|
||||
$N_NO_SET:
|
||||
$ DISP "Please go back and edit RICHS.EQU and/or RICHS2.EQU and change"
|
||||
$ DISP "all the $Symbols to _Symbols now."
|
||||
$ GOTO _EXIT
|
||||
$!
|
||||
$! Reset NOAHS.SET and NOAHS.SYM
|
||||
$!
|
||||
$N_SET:
|
||||
$ search/output=noahs.set ['WITTDIR']richs2.equ " SET "
|
||||
$ copy [witt]null.src ['FALSDIR']noahs.sym
|
||||
$ copy [witt]null.src ['FALSDIR']noah.sym ! For the work files.
|
||||
$ a9s ['FALSDIR']noahs
|
||||
$ DISP " "
|
||||
$ DISP "I will now wait for the first assembly to finish."
|
||||
$ synchronize ASM09/queue=SYS$SLOW
|
||||
$ @['TOPDIR'.COM]CAPTURE SLOW @['FALSDIR']symver noahs.lis noahs y
|
||||
$ DISP " "
|
||||
$ DISP "I will now wait for the symbol capturing to finish."
|
||||
$ synchronize CAPTURE/queue=SYS$SLOW
|
||||
$ a9s ['FALSDIR']noahs
|
||||
$ DISP " "
|
||||
$ DISP "I will now wait for the second assembly to finish."
|
||||
$ synchronize ASM09/queue=SYS$SLOW
|
||||
$ DISP " "
|
||||
$ search ['FALSDIR']noahs.log "errors detected"
|
||||
$N_DETECT:
|
||||
$ DISP ESC,"[23;1H",ESC,"[0KResponses: [YES,NO,Control-Y]"
|
||||
$ DISP ESC,"[21;1H"
|
||||
$ INQUIRE YES_NO "Were there any errors detected?"
|
||||
$ IF YES_NO .EQS. "YES" THEN GOTO N_ERROR
|
||||
$ IF YES_NO .EQS. "Y" THEN GOTO N_ERROR
|
||||
$ IF YES_NO .EQS. "NO" THEN GOTO N_NO_ERROR
|
||||
$ IF YES_NO .EQS. "N" THEN GOTO N_NO_ERROR
|
||||
$ GOTO N_DETECT
|
||||
$N_ERROR:
|
||||
$ DISP "Please examine NOAHS.LOG and correct the errors."
|
||||
$ DISP " "
|
||||
$ DISP "Once the assembly works, don't forget to run:"
|
||||
$ DISP "@['TOPDIR'.COM]EQUATES NOAHS"
|
||||
$ purge ['FALSDIR']noahs.*
|
||||
$ GOTO _EXIT
|
||||
$!
|
||||
$!
|
||||
$!
|
||||
$N_NO_ERROR:
|
||||
$ @['TOPDIR'.COM]INQUIRE null "Press both RETURN and CTRL-A to continue" -
|
||||
"[<Return><Control-A>,Control-Y if necessary]"
|
||||
$ IF .NOT. $STATUS THEN $ GOTO _ABORT
|
||||
$ @['TOPDIR'.COM]MESSAGE "Editing" "[Control-Y if necessary]"
|
||||
$ @['TOPDIR'.COM]EQUATES 'SOURCE'
|
||||
$ @['TOPDIR'.COM]MESSAGE "Working" "[Control-Y if necessary]"
|
||||
$ STOP
|
||||
$ GOTO _BOBS
|
||||
$!
|
||||
$! RRRR IIIII CCCC H H
|
||||
$! R R I C H H
|
||||
$! RRRR I C HHHHH
|
||||
$! R R I C H H
|
||||
$! R R IIIII CCCC H H
|
||||
$!
|
||||
$_RICH:
|
||||
$ DISP "Beginning RICH's !!!"
|
||||
$!
|
||||
$ @['TOPDIR'.COM]MESSAGE "Working" "[Control-Y if necessary]"
|
||||
$ SET DEFAULT ['WITTDIR']
|
||||
$ @['TOPDIR'.COM]DELETER error.tmp
|
||||
$ search/output=error.tmp ['SAMDIR']SAMS.EQU "_1"
|
||||
$ @['TOPDIR.COM]ERRORCHK error.tmp
|
||||
$ IF .NOT. $STATUS THEN $ GOTO S_EDIT_CHK
|
||||
$!
|
||||
$!
|
||||
$ SOURCE := RICHS
|
||||
$!!!!!
|
||||
$!
|
||||
$! Test for assembled RICHS.SRC
|
||||
$!
|
||||
$!!!!!
|
||||
$ @['TOPDIR'.COM]DELETER error.tmp
|
||||
$ search/output=error.tmp ['WITTDIR']'SOURCE'.log "No errors detected"
|
||||
$ @['TOPDIR.COM]ERRORCHK error.tmp
|
||||
$ IF .NOT. $STATUS THEN $ GOTO R_RICHS
|
||||
$!
|
||||
$ disp "''SOURCE'.SRC is already assembled."
|
||||
$ goto R_RICHS_EQU_CHK
|
||||
$!
|
||||
$!
|
||||
$R_RICHS:
|
||||
$!
|
||||
$! Test for first pass completed and RICHS.SYM generated.
|
||||
$!
|
||||
$ @['TOPDIR'.COM]DELETER error.tmp
|
||||
$ search/output=error.tmp ['WITTDIR']'SOURCE'.sym "SYMVER"
|
||||
$ @['TOPDIR.COM]ERRORCHK error.tmp
|
||||
$ IF .NOT. $STATUS THEN $ GOTO R_RICHS_ASM1 ! If no SYMVER then ASM1.
|
||||
$ disp "''SOURCE'.SYM is already generated."
|
||||
$ GOTO R_RICHS_ASM2
|
||||
$!
|
||||
$! Assemble RICHS.SRC the first time.
|
||||
$!
|
||||
$R_RICHS_ASM1:
|
||||
$ DISP "''SOURCE'.SRC needs assembly with a new ''SOURCE'.SET ..."
|
||||
$!
|
||||
$! Reset RICHS.SET and RICHS.SYM
|
||||
$!
|
||||
$ @['TOPDIR'.COM]DELETER rich.sym ! Work file.
|
||||
$ search/output='SOURCE'.set;1 ['SAMDIR']sams.equ " SET "
|
||||
$ search/output='SOURCE'.set;2/match=nand 'SOURCE'.set;1 "displa" ! From sam
|
||||
$ CREATE 'SOURCE'.sym
|
||||
$ CREATE rich.sym ! For the work files.
|
||||
$!
|
||||
$! Now, assemble RICHS
|
||||
$!
|
||||
$ @['TOPDIR'.COM]MESSAGE "Working" "[Control-Y if necessary]"
|
||||
$ @['TOPDIR'.COM]ASM -ABS -OLD -SLOW 'SOURCE'
|
||||
$ DISP "Waiting for ''SOURCE' 1st pass assembly ..."
|
||||
$ @['TOPDIR'.COM]MESSAGE "Batch Assembling" "[Control-Y if necessary]"
|
||||
$ synchronize 'SOURCE'SLOW/queue=SYS$SLOW
|
||||
$ @['TOPDIR'.COM]MESSAGE "Working" "[Control-Y if necessary]"
|
||||
$!
|
||||
$! Capture RICHS symbols
|
||||
$!
|
||||
$ DISP "''SOURCE' symbols are about to be captured..."
|
||||
$ @['TOPDIR'.COM]CAPTURE SLOW @['WITTDIR']symver 'SOURCE'.lis 'SOURCE' y
|
||||
$ disp "Waiting for ''SOURCE' symbol capture ..."
|
||||
$
|
||||
$ @['TOPDIR'.COM]MESSAGE "Batch Capturing" "[Control-Y if necessary]"
|
||||
$ synchronize/queue=sys$SLOW CAPTURE
|
||||
$ @['TOPDIR'.COM]MESSAGE "Working" "[Control-Y if necessary]"
|
||||
$!
|
||||
$! Assemble RICHS.SRC the second time.
|
||||
$!
|
||||
$R_RICHS_ASM2:
|
||||
$ @['TOPDIR'.COM]ASM -ABS -OLD -SLOW 'SOURCE'
|
||||
$ DISP "Waiting for ''SOURCE' 2nd pass assembly ..."
|
||||
$ @['TOPDIR'.COM]MESSAGE "Batch Assembling" "[Control-Y if necessary]"
|
||||
$ synchronize 'SOURCE'SLOW/queue=SYS$SLOW
|
||||
$ @['TOPDIR'.COM]MESSAGE "Working" "[Control-Y if necessary]"
|
||||
$!
|
||||
$ @['TOPDIR'.COM]DELETER error.tmp
|
||||
$ search/output=error.tmp 'SOURCE'.log "No errors detected"
|
||||
$ @['TOPDIR.COM]ERRORCHK error.tmp
|
||||
$ IF .NOT. $STATUS THEN $ GOTO _ASMERRORS ! Any errors the 2nd time?
|
||||
$!
|
||||
$! Test for generated RICHS.EQU
|
||||
$!
|
||||
$R_RICHS_EQU_CHK:
|
||||
$ @['TOPDIR.COM]ERRORCHK 'SOURCE'.EQU
|
||||
$ IF .NOT. $STATUS THEN $ GOTO R_RICHS_EQU
|
||||
$ disp "''SOURCE'.EQU is already generated."
|
||||
$ goto R_EDIT1_CHK
|
||||
$!
|
||||
$! Generate RICHS.EQU
|
||||
$!
|
||||
$R_RICHS_EQU:
|
||||
$ purge ['WITTDIR']'SOURCE'.*
|
||||
$ @['TOPDIR'.COM]DELETER RICHS2.equ
|
||||
$ @['TOPDIR'.COM]DELETER RICHS2.lis
|
||||
$ @['TOPDIR'.COM]DELETER RICHS2.log
|
||||
$ @['TOPDIR'.COM]DELETER RICHS2.set
|
||||
$ @['TOPDIR'.COM]DELETER RICHS2.sym
|
||||
$!
|
||||
$ @['TOPDIR'.COM]INQUIRE null "Press both RETURN and CTRL-A to continue" -
|
||||
"[<Return><Control-A>,Control-Y if necessary]"
|
||||
$ IF .NOT. $STATUS THEN $ GOTO _ABORT
|
||||
$ @['TOPDIR'.COM]MESSAGE "Editing" "[Control-Y if necessary]"
|
||||
$ @['TOPDIR'.COM]EQUATES 'SOURCE'
|
||||
$ @['TOPDIR'.COM]MESSAGE "Working" "[Control-Y if necessary]"
|
||||
$!
|
||||
$! Test for _1 edited from $1 in listing.
|
||||
$!
|
||||
$R_EDIT1_CHK:
|
||||
$ @['TOPDIR'.COM]MESSAGE "Working" "[Control-Y if necessary]"
|
||||
$ SET DEFAULT ['WITTDIR']
|
||||
$ @['TOPDIR'.COM]DELETER error.tmp
|
||||
$ search/output=error.tmp 'SOURCE'.EQU "_1"
|
||||
$ @['TOPDIR.COM]ERRORCHK error.tmp
|
||||
$ IF $STATUS THEN $ GOTO R_EDIT1_OK
|
||||
$!
|
||||
$! Convert $symbols to _symbols.
|
||||
$!
|
||||
$ RUN ['TOPDIR'.COM]DOLLAR
|
||||
RICHS.EQU
|
||||
RICHS.EQU
|
||||
RICHS
|
||||
$!
|
||||
$! Part 2 of RICHS section of Sinistar.
|
||||
$!
|
||||
$R_EDIT1_OK:
|
||||
$ SOURCE := RICHS2
|
||||
$!
|
||||
$! Test for assembled RICHS2
|
||||
$!
|
||||
$ @['TOPDIR'.COM]DELETER error.tmp
|
||||
$ search/output=error.tmp ['WITTDIR']'SOURCE'.log "No errors detected"
|
||||
$ @['TOPDIR.COM]ERRORCHK error.tmp
|
||||
$ IF .NOT. $STATUS THEN $ GOTO R_RICHS2
|
||||
$!
|
||||
$ disp "''SOURCE'.SRC is already assembled."
|
||||
$ goto R_RICHS2_EQU_CHK
|
||||
$!
|
||||
$!
|
||||
$R_RICHS2:
|
||||
$!
|
||||
$! Test for first pass completed and RICHS2.SYM generated.
|
||||
$!
|
||||
$ @['TOPDIR'.COM]DELETER error.tmp
|
||||
$ search/output=error.tmp ['WITTDIR']'SOURCE'.sym "SYMVER"
|
||||
$ @['TOPDIR.COM]ERRORCHK error.tmp
|
||||
$ IF .NOT. $STATUS THEN $ GOTO R_RICHS2_ASM1 ! If no SYMVER then ASM1.
|
||||
$ disp "''SOURCE'.SYM is already generated."
|
||||
$ GOTO R_RICHS2_ASM2
|
||||
$!
|
||||
$! Assemble RICHS2 the first time.
|
||||
$!
|
||||
$R_RICHS2_ASM1:
|
||||
$ DISP "''SOURCE'.SRC needs assembly with a new ''SOURCE'.SET ..."
|
||||
$!
|
||||
$! Reset RICHS2.SET and RICHS2.SYM
|
||||
$!
|
||||
$ search/output='SOURCE'.set;1 ['WITTDIR']RICHS.equ " SET "
|
||||
$ CREATE 'SOURCE'.sym
|
||||
$!
|
||||
$! Now, assemble RICHS2
|
||||
$!
|
||||
$ @['TOPDIR'.COM]MESSAGE "Working" "[Control-Y if necessary]"
|
||||
$ @['TOPDIR'.COM]ASM -ABS -OLD -SLOW 'SOURCE'
|
||||
$ DISP "Waiting for ''SOURCE' 1st pass assembly ..."
|
||||
$ @['TOPDIR'.COM]MESSAGE "Batch Assembling" "[Control-Y if necessary]"
|
||||
$ synchronize 'SOURCE'SLOW/queue=SYS$SLOW
|
||||
$ @['TOPDIR'.COM]MESSAGE "Working" "[Control-Y if necessary]"
|
||||
$!
|
||||
$! Capture RICHS2 symbols
|
||||
$!
|
||||
$ DISP "''SOURCE' symbols are about to be captured..."
|
||||
$ @['TOPDIR'.COM]CAPTURE SLOW @['WITTDIR']symver 'SOURCE'.lis 'SOURCE' y RICHS2
|
||||
$ disp "Waiting for ''SOURCE' symbol capture ..."
|
||||
$
|
||||
$ @['TOPDIR'.COM]MESSAGE "Batch Capturing" "[Control-Y if necessary]"
|
||||
$ synchronize/queue=sys$SLOW CAPTURE
|
||||
$ @['TOPDIR'.COM]MESSAGE "Working" "[Control-Y if necessary]"
|
||||
$!
|
||||
$! Assemble RICHS2 the second time.
|
||||
$!
|
||||
$R_RICHS2_ASM2:
|
||||
$ @['TOPDIR'.COM]ASM -ABS -OLD -SLOW 'SOURCE'
|
||||
$ DISP "Waiting for ''SOURCE' 2nd pass assembly ..."
|
||||
$ @['TOPDIR'.COM]MESSAGE "Batch Assembling" "[Control-Y if necessary]"
|
||||
$ synchronize 'SOURCE'SLOW/queue=SYS$SLOW
|
||||
$ @['TOPDIR'.COM]MESSAGE "Working" "[Control-Y if necessary]"
|
||||
$!
|
||||
$ @['TOPDIR'.COM]DELETER error.tmp
|
||||
$ search/output=error.tmp 'SOURCE'.log "No errors detected"
|
||||
$ @['TOPDIR.COM]ERRORCHK error.tmp
|
||||
$ IF .NOT. $STATUS THEN $ GOTO _ASMERRORS ! Any errors the 2nd time?
|
||||
$!
|
||||
$! Test for generated RICHS2.EQU
|
||||
$!
|
||||
$R_RICHS2_EQU_CHK:
|
||||
$ @['TOPDIR.COM]ERRORCHK 'SOURCE'.EQU
|
||||
$ IF .NOT. $STATUS THEN $ GOTO R_RICHS2_EQU
|
||||
$ disp "''SOURCE'.EQU is already generated."
|
||||
$ goto R_EDIT2_CHK
|
||||
$!
|
||||
$! Generate RICHS2.EQU
|
||||
$!
|
||||
$R_RICHS2_EQU:
|
||||
$ purge ['WITTDIR']'SOURCE'.*
|
||||
$ @['TOPDIR'.COM]DELETER ['FALSDIR']NOAHS.equ ! Pre-empt the
|
||||
$ @['TOPDIR'.COM]DELETER ['FALSDIR']NOAHS.log ! third phase
|
||||
$ @['TOPDIR'.COM]DELETER ['FALSDIR']NOAHS.set ! of Sinistar,
|
||||
$ @['TOPDIR'.COM]DELETER ['FALSDIR']NOAHS.sym ! which is NOAHS.
|
||||
$!
|
||||
$ @['TOPDIR'.COM]INQUIRE null "Press both RETURN and CTRL-A to continue" -
|
||||
"[<Return><Control-A>,Control-Y if necessary]"
|
||||
$ IF .NOT. $STATUS THEN $ GOTO _ABORT
|
||||
$ @['TOPDIR'.COM]MESSAGE "Editing" "[Control-Y if necessary]"
|
||||
$ @['TOPDIR'.COM]EQUATES 'SOURCE'
|
||||
$ @['TOPDIR'.COM]MESSAGE "Working" "[Control-Y if necessary]"
|
||||
$!
|
||||
$! Test for _1 edited from $1 in listing.
|
||||
$!
|
||||
$R_EDIT2_CHK:
|
||||
$ @['TOPDIR'.COM]MESSAGE "Working" "[Control-Y if necessary]"
|
||||
$ SET DEFAULT ['WITTDIR']
|
||||
$ @['TOPDIR'.COM]DELETER error.tmp
|
||||
$ search/output=error.tmp 'SOURCE'.EQU "_1"
|
||||
$ @['TOPDIR.COM]ERRORCHK error.tmp
|
||||
$ IF $STATUS THEN $ GOTO R_EDIT2_OK
|
||||
$!
|
||||
$! Convert $symbols to _symbols.
|
||||
$!
|
||||
$ RUN ['TOPDIR'.COM]DOLLAR
|
||||
RICHS2.EQU
|
||||
RICHS2.EQU
|
||||
RICHS2
|
||||
$!
|
||||
$R_EDIT2_OK:
|
||||
$ STOP
|
||||
$ GOTO _NOAH
|
||||
$!
|
||||
$! SSSS TTTTT AAA RRRR TTTTT
|
||||
$! S T A A R R T
|
||||
$! SSS T AAAAA RRRR T
|
||||
$! S T A A R R T
|
||||
$! SSSS T A A R R T
|
||||
$!
|
||||
$_START:
|
||||
$ SET DEFAULT ['SAMDIR']
|
||||
$ @['TOPDIR'.COM]DELETER MESSAGE.LIS
|
||||
$ @['TOPDIR'.COM]DELETER MESSAGE.LOG
|
||||
$ @['TOPDIR'.COM]DELETER MESSAGE.EQU
|
||||
$!
|
||||
$! SSSS AAA M M
|
||||
$! S A A MM MM
|
||||
$! SSS AAAAA M M M
|
||||
$! S A A M M
|
||||
$! SSSS A A M M
|
||||
$!
|
||||
$_SAM:
|
||||
$ @['TOPDIR'.COM]MESSAGE "Working" "[Control-Y if necessary]"
|
||||
$ DISP "Beginning SAM's !!!"
|
||||
$ SET DEFAULT ['SAMDIR']
|
||||
$ SOURCE = ""
|
||||
$!
|
||||
$! Test for assembled MESSAGE.SRC
|
||||
$!
|
||||
$ SOURCE := MESSAGE
|
||||
$ @['TOPDIR'.COM]DELETER error.tmp
|
||||
$ search/output=error.tmp ['SAMDIR']'SOURCE'.log "No errors detected"
|
||||
$ @['TOPDIR.COM]ERRORCHK error.tmp
|
||||
$ IF .NOT. $STATUS THEN $ GOTO S_NO_MESLIS
|
||||
$ disp "''SOURCE'.SRC is already assembled."
|
||||
$ goto S_MESEQU
|
||||
$!
|
||||
$! Assemble MESSAGE.SRC
|
||||
$!
|
||||
$S_NO_MESLIS:
|
||||
$ DISP "''SOURCE'.SRC is not correctly assembled."
|
||||
$ IF RUN_STOP .EQS. "STOP" THEN $ GOTO _EXIT
|
||||
$ @['TOPDIR'.COM]DELETER 'SOURCE'.equ
|
||||
$ @['TOPDIR'.COM]DELETER SAMS.equ
|
||||
$ @['TOPDIR'.COM]DELETER SAMS.lis
|
||||
$ @['TOPDIR'.COM]DELETER SAMS.log
|
||||
$ @['TOPDIR'.COM]DELETER SAMS.set
|
||||
$ @['TOPDIR'.COM]DELETER SAMS.sym
|
||||
$ @['TOPDIR'.COM]ASM -ABS -OLD -SLOW 'SOURCE' ! sb ab sq
|
||||
$ disp "Waiting for ''SOURCE' assembly ..."
|
||||
$ @['TOPDIR'.COM]MESSAGE "Batch Assembling" "[Control-Y if necessary]"
|
||||
$ synchronize/queue=sys$SLOW 'SOURCE'SLOW ! sambuasm
|
||||
$ @['TOPDIR'.COM]MESSAGE "Working" "[Control-Y if necessary]"
|
||||
$ @['TOPDIR'.COM]DELETER error.tmp
|
||||
$ search/output=error.tmp ['SAMDIR']'SOURCE'.log "No errors detected"
|
||||
$ @['TOPDIR.COM]ERRORCHK error.tmp
|
||||
$ IF .NOT. $STATUS THEN $ GOTO _ASMERRORS
|
||||
$!
|
||||
$S_MESEQU:
|
||||
$!
|
||||
$! Test for generated MESSAGE.EQU
|
||||
$!
|
||||
$ @['TOPDIR.COM]ERRORCHK 'SOURCE'.EQU
|
||||
$ IF .NOT. $STATUS THEN $ GOTO S_NO_MESEQU
|
||||
$ disp "''SOURCE'.EQU is already generated."
|
||||
$ goto S_EQULIS
|
||||
$!
|
||||
$! Generate MESSAGE.EQU
|
||||
$!
|
||||
$S_NO_MESEQU:
|
||||
$ DISP "''SOURCE'.EQU is not generated."
|
||||
$ IF RUN_STOP .EQS. "STOP" THEN $ GOTO _EXIT
|
||||
$ @['TOPDIR'.COM]DELETER EQUATES.equ
|
||||
$ @['TOPDIR'.COM]DELETER EQUATES.lis
|
||||
$ @['TOPDIR'.COM]DELETER EQUATES.log
|
||||
$ @['TOPDIR'.COM]DELETER SAMS.equ
|
||||
$ @['TOPDIR'.COM]DELETER SAMS.lis
|
||||
$ @['TOPDIR'.COM]DELETER SAMS.log
|
||||
$ @['TOPDIR'.COM]DELETER SAMS.set
|
||||
$ @['TOPDIR'.COM]DELETER SAMS.sym
|
||||
$!
|
||||
$ @['TOPDIR'.COM]INQUIRE null "Press both RETURN and CTRL-A to continue" -
|
||||
"[<Return><Control-A>,Control-Y if necessary]"
|
||||
$ IF .NOT. $STATUS THEN $ GOTO _ABORT
|
||||
$ @['TOPDIR'.COM]MESSAGE "Editing" "[Control-Y if necessary]"
|
||||
$ @['TOPDIR'.COM]EQUATES 'SOURCE'
|
||||
$ @['TOPDIR'.COM]MESSAGE "Working" "[Control-Y if necessary]"
|
||||
$!
|
||||
$! Test for assembled EQUATES.SRC
|
||||
$!
|
||||
$S_EQULIS:
|
||||
$ SOURCE := EQUATES
|
||||
$ @['TOPDIR'.COM]DELETER error.tmp
|
||||
$ search/output=error.tmp ['SAMDIR']'SOURCE'.log "No errors detected"
|
||||
$ @['TOPDIR.COM]ERRORCHK error.tmp
|
||||
$ IF .NOT. $STATUS THEN $ GOTO S_NO_EQULIS
|
||||
$ disp "''SOURCE'.SRC is already assembled."
|
||||
$ goto S_EQUEQU
|
||||
$!
|
||||
$! Assemble EQUATES.SRC
|
||||
$!
|
||||
$S_NO_EQULIS:
|
||||
$ DISP "''SOURCE'.SRC needs assembly ..."
|
||||
$ IF RUN_STOP .EQS. "STOP" THEN $ GOTO _EXIT
|
||||
$ @['TOPDIR'.COM]DELETER 'SOURCE'.equ
|
||||
$ @['TOPDIR'.COM]DELETER IMAGE.equ
|
||||
$ @['TOPDIR'.COM]DELETER IMAGE.lis
|
||||
$ @['TOPDIR'.COM]DELETER IMAGE.log
|
||||
$ @['TOPDIR'.COM]DELETER SAMS.equ
|
||||
$ @['TOPDIR'.COM]DELETER SAMS.lis
|
||||
$ @['TOPDIR'.COM]DELETER SAMS.log
|
||||
$ @['TOPDIR'.COM]DELETER SAMS.set
|
||||
$ @['TOPDIR'.COM]DELETER SAMS.sym
|
||||
$ @['TOPDIR'.COM]ASM -ABS -OLD -MED 'SOURCE' ! fb ab sq
|
||||
$ disp "Waiting for ''SOURCE' assembly ..."
|
||||
$ @['TOPDIR'.COM]MESSAGE "Batch Assembling" "[Control-Y if necessary]"
|
||||
$ synchronize/queue=sys$MED 'SOURCE'MED ! sambuasm
|
||||
$ @['TOPDIR'.COM]MESSAGE "Working" "[Control-Y if necessary]"
|
||||
$ @['TOPDIR'.COM]DELETER error.tmp
|
||||
$ search/output=error.tmp ['SAMDIR']'SOURCE'.log "No errors detected"
|
||||
$ @['TOPDIR.COM]ERRORCHK error.tmp
|
||||
$ IF .NOT. $STATUS THEN $ GOTO _ASMERRORS
|
||||
$!
|
||||
$! Test for generated EQUATES.EQU
|
||||
$!
|
||||
$S_EQUEQU:
|
||||
$ @['TOPDIR.COM]ERRORCHK 'SOURCE'.EQU
|
||||
$ IF .NOT. $STATUS THEN $ GOTO S_NO_EQUEQU
|
||||
$ disp "''SOURCE'.EQU is already generated."
|
||||
$ goto S_IMALIS
|
||||
$!
|
||||
$! Generate EQUATES.EQU
|
||||
$!
|
||||
$S_NO_EQUEQU:
|
||||
$ DISP "''SOURCE'.EQU is not generated."
|
||||
$ IF RUN_STOP .EQS. "STOP" THEN $ GOTO _EXIT
|
||||
$ @['TOPDIR'.COM]DELETER SAMS.equ
|
||||
$ @['TOPDIR'.COM]DELETER SAMS.lis
|
||||
$ @['TOPDIR'.COM]DELETER SAMS.log
|
||||
$ @['TOPDIR'.COM]DELETER SAMS.set
|
||||
$ @['TOPDIR'.COM]DELETER SAMS.sym
|
||||
$!
|
||||
$ @['TOPDIR'.COM]INQUIRE null "Press both RETURN and CTRL-A to continue" -
|
||||
"[<Return><Control-A>,Control-Y if necessary]"
|
||||
$ IF .NOT. $STATUS THEN $ GOTO _ABORT
|
||||
$ @['TOPDIR'.COM]MESSAGE "Editing" "[Control-Y if necessary]"
|
||||
$ @['TOPDIR'.COM]EQUATES 'SOURCE'
|
||||
$ @['TOPDIR'.COM]MESSAGE "Working" "[Control-Y if necessary]"
|
||||
$!
|
||||
$! Test for assembled IMAGE.SRC
|
||||
$!
|
||||
$S_IMALIS:
|
||||
$ SOURCE := IMAGE
|
||||
$ @['TOPDIR'.COM]DELETER error.tmp
|
||||
$ search/output=error.tmp ['SAMDIR']'SOURCE'.log "No errors detected"
|
||||
$ @['TOPDIR.COM]ERRORCHK error.tmp
|
||||
$ IF .NOT. $STATUS THEN $ GOTO S_NO_IMALIS
|
||||
$ disp "''SOURCE'.SRC is already assembled."
|
||||
$ goto S_IMAEQU
|
||||
$!
|
||||
$! Assemble IMAGE.SRC
|
||||
$!
|
||||
$S_NO_IMALIS:
|
||||
$ DISP "''SOURCE'.SRC is not correctly assembled."
|
||||
$ IF RUN_STOP .EQS. "STOP" THEN $ GOTO _EXIT
|
||||
$ @['TOPDIR'.COM]DELETER 'SOURCE'.equ
|
||||
$ @['TOPDIR'.COM]DELETER SAMS.equ
|
||||
$ @['TOPDIR'.COM]DELETER SAMS.lis
|
||||
$ @['TOPDIR'.COM]DELETER SAMS.log
|
||||
$ @['TOPDIR'.COM]DELETER SAMS.set
|
||||
$ @['TOPDIR'.COM]DELETER SAMS.sym
|
||||
$ @['TOPDIR'.COM]ASM -ABS -OLD -MED 'SOURCE' ! fb ab sq
|
||||
$ disp "Waiting for ''SOURCE' assembly ..."
|
||||
$ @['TOPDIR'.COM]MESSAGE "Batch Assembling" "[Control-Y if necessary]"
|
||||
$ synchronize/queue=sys$MED 'SOURCE'MED ! sambuasm
|
||||
$ @['TOPDIR'.COM]MESSAGE "Working" "[Control-Y if necessary]"
|
||||
$ @['TOPDIR'.COM]DELETER error.tmp
|
||||
$ search/output=error.tmp ['SAMDIR']'SOURCE'.log "No errors detected"
|
||||
$ @['TOPDIR.COM]ERRORCHK error.tmp
|
||||
$ IF .NOT. $STATUS THEN $ GOTO _ASMERRORS
|
||||
$!
|
||||
$! Test for generated IMAGE.EQU
|
||||
$!
|
||||
$S_IMAEQU:
|
||||
$ @['TOPDIR.COM]ERRORCHK 'SOURCE'.EQU
|
||||
$ IF .NOT. $STATUS THEN $ GOTO S_NO_IMAEQU
|
||||
$ disp "''SOURCE'.EQU is already generated."
|
||||
$ goto S_SAMLIS
|
||||
$!
|
||||
$! Generate IMAGE.EQU
|
||||
$!
|
||||
$S_NO_IMAEQU:
|
||||
$ @['TOPDIR'.COM]INQUIRE null "Press both RETURN and CTRL-A to continue" -
|
||||
"[<Return><Control-A>,Control-Y if necessary]"
|
||||
$ IF .NOT. $STATUS THEN $ GOTO _ABORT
|
||||
$ @['TOPDIR'.COM]MESSAGE "Editing" "[Control-Y if necessary]"
|
||||
$ @['TOPDIR'.COM]EQUATES 'SOURCE'
|
||||
$ @['TOPDIR'.COM]MESSAGE "Working" "[Control-Y if necessary]"
|
||||
$!!!!!
|
||||
$!
|
||||
$! Test for assembled SAMS.SRC
|
||||
$!
|
||||
$!!!!!
|
||||
$S_SAMLIS:
|
||||
$ SOURCE := SAMS
|
||||
$ @['TOPDIR'.COM]DELETER error.tmp
|
||||
$ search/output=error.tmp ['SAMDIR']'SOURCE'.log "No errors detected"
|
||||
$ @['TOPDIR.COM]ERRORCHK error.tmp
|
||||
$ IF .NOT. $STATUS THEN $ GOTO S_SAMS
|
||||
$!
|
||||
$ disp "''SOURCE'.SRC is already assembled."
|
||||
$ goto S_SAMS_EQU_CHK
|
||||
$!
|
||||
$! Test for first pass completed and SAMS.SYM generated.
|
||||
$!
|
||||
$S_SAMS:
|
||||
$ @['TOPDIR'.COM]DELETER error.tmp
|
||||
$ search/output=error.tmp ['SAMDIR']'SOURCE'.sym "SYMVER"
|
||||
$ @['TOPDIR.COM]ERRORCHK error.tmp
|
||||
$ IF .NOT. $STATUS THEN $ GOTO S_SAMS_ASM1 ! If no SYMVER then ASM1.
|
||||
$ disp "''SOURCE'.SYM is already generated."
|
||||
$ GOTO S_SAMS_ASM2
|
||||
$!
|
||||
$! Assemble SAMS.SRC
|
||||
$!
|
||||
$S_SAMS_ASM1:
|
||||
$ DISP "''SOURCE'.SRC needs assembly with a new ''SOURCE'.SET ..."
|
||||
$!
|
||||
$! Reset SAMS.SET and SAMS.SYM
|
||||
$!
|
||||
$ CREATE library.equ
|
||||
$ CREATE sinistar.equ
|
||||
$!
|
||||
$ @['TOPDIR'.COM]DELETER 'SOURCE'.equ
|
||||
$ @['TOPDIR'.COM]DELETER 'SOURCE'.set
|
||||
$!
|
||||
$ @['TOPDIR'.COM]DELETER s.tmp
|
||||
$ search/nohead/out=s.tmp message.equ,equates.equ,image.equ " set "
|
||||
$ sort/key=(pos=1,size=16) s.tmp 'SOURCE'.set
|
||||
$ @['TOPDIR'.COM]DELETER s.tmp
|
||||
$!
|
||||
$ @['TOPDIR'.COM]ASM -ABS -OLD -SLOW 'SOURCE' ! sb ab sq
|
||||
$ disp "Waiting for ''SOURCE' assembly ..."
|
||||
$ @['TOPDIR'.COM]MESSAGE "Batch Assembling" "[Control-Y if necessary]"
|
||||
$ synchronize/queue=sys$SLOW 'SOURCE'SLOW ! sambuasm
|
||||
$ @['TOPDIR'.COM]MESSAGE "Working" "[Control-Y if necessary]"
|
||||
$!
|
||||
$ @['TOPDIR'.COM]DELETER error.tmp
|
||||
$ search/output=error.tmp ['SAMDIR']'SOURCE'.log "No errors detected"
|
||||
$ @['TOPDIR.COM]ERRORCHK error.tmp
|
||||
$ IF $STATUS THEN $ GOTO S_SAMS_EQU_CHK
|
||||
$!
|
||||
$! Capture symbols.
|
||||
$!
|
||||
$S_TSYMVER:
|
||||
$ DISP "''SOURCE' symbols are not captured."
|
||||
$ IF RUN_STOP .EQS. "STOP" THEN $ GOTO _EXIT
|
||||
$!
|
||||
$ @['TOPDIR'.COM]DELETER capture.tmp
|
||||
$ @['SAMDIR']CAPTURE @['SAMDIR']tsymver ['SAMDIR']'SOURCE'.lis 'SOURCE' y
|
||||
$ disp "Waiting for ''SOURCE' symbol capture ..."
|
||||
$ @['TOPDIR'.COM]MESSAGE "Batch Capturing" "[Control-Y if necessary]"
|
||||
$ synchronize/queue=sys$SLOW CAPTURE
|
||||
$ @['TOPDIR'.COM]MESSAGE "Working" "[Control-Y if necessary]"
|
||||
$!
|
||||
$!
|
||||
$S_SAMS_ASM2:
|
||||
$ @['TOPDIR'.COM]ASM -ABS -OLD -SLOW 'SOURCE' ! 2nd pass assemble of SAMS
|
||||
$ disp "Waiting for ''SOURCE' assembly ..."
|
||||
$ @['TOPDIR'.COM]MESSAGE "Batch Assembling" "[Control-Y if necessary]"
|
||||
$ synchronize/queue=sys$SLOW 'SOURCE'SLOW ! sambuasm
|
||||
$ @['TOPDIR'.COM]MESSAGE "Working" "[Control-Y if necessary]"
|
||||
$!
|
||||
$ @['TOPDIR'.COM]DELETER error.tmp
|
||||
$ search/output=error.tmp 'SOURCE'.log "No errors detected"
|
||||
$ @['TOPDIR.COM]ERRORCHK error.tmp
|
||||
$ IF .NOT. $STATUS THEN $ GOTO _ASMERRORS ! Any errors 2nd time?
|
||||
$!
|
||||
$ ren ['SAMDIR']'SOURCE'.lis ['SAMDIR']'SOURCE'
|
||||
$ @['TOPDIR'.COM]DELETER 'SOURCE'.equ
|
||||
$!
|
||||
$! Test for generated SAMS.EQU
|
||||
$!
|
||||
$S_SAMS_EQU_CHK:
|
||||
$ @['TOPDIR.COM]ERRORCHK 'SOURCE'.EQU
|
||||
$ IF .NOT. $STATUS THEN $ GOTO S_SAMS_EQU
|
||||
$ disp "''SOURCE'.EQU is already generated."
|
||||
$ goto S_EDIT_CHK
|
||||
$!
|
||||
$! Generate SAMS.EQU
|
||||
$!
|
||||
$S_SAMS_EQU:
|
||||
$ DISP "''SOURCE'.EQU is being generated ..."
|
||||
$ IF RUN_STOP .EQS. "STOP" THEN $ GOTO _EXIT
|
||||
$ @['TOPDIR'.COM]INQUIRE null "Press both RETURN and CTRL-A to continue" -
|
||||
"[<Return><Control-A>,Control-Y if necessary]"
|
||||
$ IF .NOT. $STATUS THEN $ GOTO _ABORT
|
||||
$ @['TOPDIR'.COM]MESSAGE "Editing" "[Control-Y if necessary]"
|
||||
$ @['TOPDIR'.COM]MESSAGE "Working" "[Control-Y if necessary]"
|
||||
$!
|
||||
$S_EDIT_CHK:
|
||||
$ SET DEFAULT ['SAMDIR'] ! Multiple entry points to here.
|
||||
$ @['TOPDIR'.COM]DELETER error.tmp
|
||||
$ search/output=error.tmp 'SOURCE'.equ "$AT"
|
||||
$ open/read test error.tmp
|
||||
$ read/end=S_DONE test match
|
||||
$ if match.eqs."No strings matched" then goto S_DONE
|
||||
$!
|
||||
$! Convert $symbols to _symbols.
|
||||
$!
|
||||
$ @['TOPDIR'.COM]DELETER ['WITTDIR']RICHS.equ ! Pre-empt the next
|
||||
$ @['TOPDIR'.COM]DELETER ['WITTDIR']RICHS.log ! phase of Sinistar.
|
||||
$ @['TOPDIR'.COM]DELETER ['WITTDIR']RICHS.set
|
||||
$ @['TOPDIR'.COM]DELETER ['WITTDIR']RICHS.sym
|
||||
$ RUN ['TOPDIR'.COM]DOLLAR
|
||||
SAMS.EQU
|
||||
SAMS.EQU
|
||||
SAMS
|
||||
$!
|
||||
$!
|
||||
$S_DONE:
|
||||
$ close test
|
||||
$ @['TOPDIR'.COM]DELETER error.tmp
|
||||
$ goto _RICH
|
||||
$!
|
||||
$_ASMERRORS:
|
||||
$ disp "Errors assembling ",SOURCE,".src"
|
||||
$ disp "Correct the errors and restart this program."
|
||||
$ goto _EXIT
|
||||
$!
|
||||
$! BBBB OOO BBBB
|
||||
$! B B O O B B
|
||||
$! BBBB O O BBBB
|
||||
$! B B O O B B
|
||||
$! BBBB OOO BBBB
|
||||
$!
|
||||
$_BOB:
|
||||
$ set DEFAULT [mica]
|
||||
$ @login
|
||||
$ set DEFAULT ['MICADIR']
|
||||
$ DISP " "
|
||||
$ DISP "I will now search NOAHS.EQU for the symbol _1"
|
||||
$ DISP "If it is not found, then the $Symbols were not edited to _Symbols."
|
||||
$ search ['FALSDIR']noahs.equ "_1"
|
||||
$B_SYMBOLS:
|
||||
$ DISP ESC,"[23;1H",ESC,"[0KResponses: [YES,NO,Control-Y]"
|
||||
$ DISP ESC,"[21;1H"
|
||||
$ INQUIRE YES_NO "Was the _1 symbol found?"
|
||||
$ IF YES_NO .EQS. "YES" THEN GOTO B_SET
|
||||
$ IF YES_NO .EQS. "Y" THEN GOTO B_SET
|
||||
$ IF YES_NO .EQS. "NO" THEN GOTO B_NO_SET
|
||||
$ IF YES_NO .EQS. "N" THEN GOTO B_NO_SET
|
||||
$ GOTO B_SYMBOLS
|
||||
$B_NO_SET:
|
||||
$ DISP "Please go back and edit NOAHS.EQU and change"
|
||||
$ DISP "all the $Symbols to _Symbols now."
|
||||
$ GOTO _EXIT
|
||||
$!
|
||||
$! Reset BOBS.SET and BOBS.SYM
|
||||
$!
|
||||
$B_SET:
|
||||
$ search/output=bobs.set ['FALSDIR']noahs.equ " SET "
|
||||
$ copy [witt]null.src ['MICADIR']bobs.sym
|
||||
$ copy [witt]null.src ['MICADIR']bob.sym ! For the work files.
|
||||
$ asms ['MICADIR']bobs
|
||||
$ DISP " "
|
||||
$ DISP "I will now wait for the first assembly to finish."
|
||||
$ synchronize BOBS/queue=SYS$SLOW
|
||||
$ @['TOPDIR'.COM]CAPTURE SLOW @['MICADIR']vsymver bobs.lis bobs y
|
||||
$ DISP " "
|
||||
$ DISP "I will now wait for the symbol capturing to finish."
|
||||
$ synchronize CAPTURE/queue=SYS$SLOW
|
||||
$ asms ['MICADIR']bobs
|
||||
$ DISP " "
|
||||
$ DISP "I will now wait for the second assembly to finish."
|
||||
$ synchronize BOBS/queue=SYS$SLOW
|
||||
$ DISP " "
|
||||
$ search ['MICADIR']bobs.log "errors detected"
|
||||
$B_DETECT:
|
||||
$ DISP ESC,"[23;1H",ESC,"[0KResponses: [YES,NO,Control-Y]"
|
||||
$ DISP ESC,"[21;1H"
|
||||
$ INQUIRE YES_NO "Were there any errors detected?"
|
||||
$ IF YES_NO .EQS. "YES" THEN GOTO B_ERROR
|
||||
$ IF YES_NO .EQS. "Y" THEN GOTO B_ERROR
|
||||
$ IF YES_NO .EQS. "NO" THEN GOTO B_NO_ERROR
|
||||
$ IF YES_NO .EQS. "N" THEN GOTO B_NO_ERROR
|
||||
$ GOTO B_DETECT
|
||||
$B_ERROR:
|
||||
$ DISP "Please examine BOBS.LOG and correct the errors."
|
||||
$ DISP " "
|
||||
$ DISP "Once the assembly works, don't forget to run:"
|
||||
$ DISP "@['TOPDIR'.COM]EQUATES BOBS"
|
||||
$ purge ['MICADIR']bobs.*
|
||||
$ GOTO _EXIT
|
||||
$B_NO_ERROR:
|
||||
$ DISP " "
|
||||
$ DISP "I will now generate the equate file."
|
||||
$ DISP "Follow the instructions which follow ..."
|
||||
$ DISP " "
|
||||
$ @['TOPDIR'.COM]EQUATES BOBS
|
||||
$ GOTO _EXIT
|
||||
$!
|
||||
$! L IIIII BBBB CCCC H H K K
|
||||
$! L I B B C H H K K
|
||||
$! L I BBBB C HHHHH KKK
|
||||
$! L I B B C H H K K
|
||||
$! LLLLL IIIII BBBB CCCC H H K K
|
||||
$!
|
||||
$_LIBCHK:
|
||||
$ ERR_COUNT = 0
|
||||
$ ON ERROR THEN GOTO _LIBABORT1
|
||||
$ ON CONTROL_Y THEN GOTO _LIBABORT1
|
||||
$ SORT/KEY=(pos:1,size:6) ['SAMDIR']library.equ temp.tmp
|
||||
$ OPEN/READ TMP: temp.tmp
|
||||
$ ON ERROR THEN GOTO _LIBABORT2
|
||||
$ ON CONTROL_Y THEN GOTO _LIBABORT2
|
||||
$ NEXT_LABEL = ""
|
||||
$ NEXT_LINE = ""
|
||||
$_LIBLOOP:
|
||||
$ LAST_LABEL = "''NEXT_LABEL'"
|
||||
$ LAST_LINE = "''NEXT_LINE'"
|
||||
$ READ TMP: NEXT_LINE
|
||||
$ NEXT_LABEL = "''F$EXTRACT(0,6,NEXT_LINE)'"
|
||||
$ IF NEXT_LABEL .NES. LAST_LABEL THEN GOTO _LIBLOOP
|
||||
$ DISP "Duplicate: ""''LAST_LINE'"""
|
||||
$ DISP " ""''NEXT_LINE'"""
|
||||
$ ERR_COUNT = ERR_COUNT+1
|
||||
$ GOTO _LIBLOOP
|
||||
$_LIBABORT2:
|
||||
$ CLOSE TMP:
|
||||
$_LIBABORT1:
|
||||
$ @['TOPDIR'.COM]DELETER temp.tmp
|
||||
$ IF ERR_COUNT .NE. 0 THEN DISP SYS$OUTPUT "['SAMDIR']Library.equ is BAD."
|
||||
$ GOTO _EXIT
|
||||
$!
|
||||
$_ABORT:
|
||||
$_EXIT:
|
||||
$ DISP ESC,"[23;1H",ESC,"[0K",ESC,"[5mTerminated",ESC,"[0m"
|
||||
$ DISP ESC,"[1;24r",ESC,"[24;79H " ! Reset screen scroll region.
|
||||
$ @['TOPDIR'.COM]DELETER *.tmp
|
||||
$ set default ['TOPDIR']
|
||||
$ show default
|
||||
$ EXIT
|
|
@ -0,0 +1,142 @@
|
|||
|
||||
INCLUDE [SAM]START
|
||||
INCLVER SAM,SINISTAR.EQU
|
||||
|
||||
|
||||
PUSHORG ROMSAVE
|
||||
|
||||
* Here's the linker for the attract mode messages
|
||||
VECTOR INIVECT Hook into game start
|
||||
TST AMDEMO Test if this is game demo
|
||||
BEQ 1$ and skip if not
|
||||
|
||||
NEW_SLEEP TASK4,ATTMSG,OMTLEN+1 * Make attract message task
|
||||
NEW_SLEEP TASK4,NATMSG,OMTLEN+1 * Make attract message task
|
||||
|
||||
1$ RTS
|
||||
|
||||
* These are the messages displayed at the top of the screen
|
||||
ATTMSG JSR PCLR2
|
||||
LDA #(60.*10.)/4
|
||||
STA OMTLEN,Y
|
||||
SLEEP HERE
|
||||
|
||||
DEC OMTLEN,Y * Count off a frame
|
||||
BEQ 2$ * of life for this task.
|
||||
PSHS A,B,X,Y * Save message registers
|
||||
TEXT $6D,$4C
|
||||
PHRASE YELLOW,35,BLAST,CRYSTALS,OFF,PLANETOIDS
|
||||
TEXT $69,$20
|
||||
PHRASE YELLOW,35,PICK,UP,CRYSTALS,TO,FILL,BOMBBAY,WITH,SINIBOMBS
|
||||
PULS A,B,X,Y * Restore message registers
|
||||
SLEEP LOOP
|
||||
|
||||
2$ JSR PCLR2
|
||||
LDA #(60.*10.)/4
|
||||
STA OMTLEN,Y
|
||||
SLEEP HERE
|
||||
|
||||
DEC OMTLEN,Y * Count off a frame
|
||||
BEQ 3$ * of life for this task.
|
||||
PSHS A,B,X,Y * Save message registers
|
||||
TEXT $6D,$2A
|
||||
PHRASE YELLOW,35,FIRING,DOES,NOT,AFFECT,THE,MIGHTY
|
||||
WORD RED,35,SINISTAR
|
||||
TEXT $69,$32
|
||||
PHRASE YELLOW,35,ONLY,SINIBOMBS,CAN,AFFECT,THIS,NEMESIS
|
||||
PULS A,B,X,Y * Restore message registers
|
||||
SLEEP LOOP
|
||||
|
||||
3$ JSR PCLR2
|
||||
LDA #(60.*13.)/4
|
||||
STA OMTLEN,Y
|
||||
SLEEP HERE
|
||||
|
||||
DEC OMTLEN,Y * Count off a frame
|
||||
BEQ 4$ * of life for this task.
|
||||
PSHS A,B,X,Y * Save message registers
|
||||
TEXT $6D,$27
|
||||
PHRASE YELLOW,35,ONCE,THE
|
||||
WORD RED,35,SINISTAR
|
||||
TEXT $6D,$70
|
||||
PHRASE YELLOW,35,IS,BUILT,YOU,MUST,DESTROY,IT
|
||||
TEXT $69,$7C
|
||||
PHRASE YELLOW,35,OR
|
||||
TEXT $65,$5C
|
||||
PHRASE YELLOW,35,YOU,HAD,BETTER
|
||||
WORD RED,35,RUN
|
||||
PULS A,B,X,Y * Restore message registers
|
||||
SLEEP LOOP
|
||||
|
||||
4$ JSR PCLR2
|
||||
JMP DIE
|
||||
|
||||
******************************************************************************
|
||||
* PCLR2
|
||||
* A faster partial-screen clearer
|
||||
|
||||
PCLR2 PSHS D
|
||||
LDD #$0BFF!X$404
|
||||
STD DHIGH
|
||||
LDD #$6500
|
||||
STD DDEST
|
||||
CLR DCONS
|
||||
LDA #$11
|
||||
STA DCTRL
|
||||
|
||||
PULS D,PC
|
||||
|
||||
|
||||
******************************************************************************
|
||||
* These are the messages displayed at the bottom of the screen
|
||||
*
|
||||
|
||||
NATMSG CLR OMTLEN,Y
|
||||
|
||||
SLEEP HERE
|
||||
|
||||
PSHS Y
|
||||
|
||||
LDA CREDIT
|
||||
CMPA OMTLEN,Y
|
||||
BEQ 100$
|
||||
STA OMTLEN,Y
|
||||
|
||||
* A faster partial-screen clearer
|
||||
LDD #$04FF!X$404
|
||||
STD DHIGH
|
||||
LDD #$1700
|
||||
STD DDEST
|
||||
CLR DCONS
|
||||
LDA #$11
|
||||
STA DCTRL
|
||||
|
||||
100$ LDX #ALHSTD
|
||||
JSR RCMOSA
|
||||
BEQ 110$
|
||||
|
||||
TEXT $1C,$3E
|
||||
PHRASE CREAM,35,PRESS,FIRE,BUTTON,TO,SEE,HIGH,SCORE
|
||||
|
||||
110$ LDA CREDIT
|
||||
BEQ 2$
|
||||
DECA
|
||||
BEQ 1$
|
||||
|
||||
TEXT $18,$52
|
||||
PHRASE CREAM,35,PRESS,1,OR,2,PLAYER,START
|
||||
BRA 3$
|
||||
|
||||
1$ TEXT $18,$5C
|
||||
PHRASE CREAM,35,PRESS,1,PLAYER,START
|
||||
BRA 3$
|
||||
|
||||
2$ TEXT $18,$5E
|
||||
PHRASE CREAM,35,INSERT,COIN,TO,PLAY
|
||||
|
||||
3$ PULS Y
|
||||
SLEEP LOOP
|
||||
|
||||
|
||||
|
||||
PULLORG ROMSAVE
|
|
@ -0,0 +1,24 @@
|
|||
*****
|
||||
*
|
||||
* This module checks that each of the symbols needed are defined.
|
||||
* If they weren't defined, the result would be that routines in this
|
||||
* directory would be created instead of replacing (overriding) the
|
||||
* stubs in earlier parts of the version release.
|
||||
*
|
||||
*****
|
||||
SYMVER MESLEN,MESLEN is missing from BOBS.SYM
|
||||
SYMVER PHRLEN,PHRLEN is missing from BOBS.SYM
|
||||
*
|
||||
SYMVER KABOOM,KABOOM is missing from BOBS.SYM
|
||||
SYMVER PLXQUE,PLXQUE is missing from BOBS.SYM
|
||||
SYMVER WRXQUE,WRXQUE is missing from BOBS.SYM
|
||||
SYMVER SNXQUE,SNXQUE is missing from BOBS.SYM
|
||||
SYMVER HSTDEN,HSTDEN is missing from BOBS.SYM
|
||||
SYMVER ATTRAC,ATTRAC is missing from BOBS.SYM
|
||||
SYMVER STATPG,STATPG is missing from BOBS.SYM
|
||||
SYMVER RSHS,RSHS is missing from BOBS.SYM
|
||||
SYMVER AMSINI,AMSINI is missing from BOBS.SYM
|
||||
SYMVER GAMOVE,GAMOVE is missing from BOBS.SYM
|
||||
SYMVER OPENT,OPENT is missing from BOBS.SYM
|
||||
SYMVER PNTSCR,PNTSCR is missing from BOBS.SYM
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
INCLUDE [SAM]START
|
||||
|
||||
INCLVER BOB,BOBSYMS
|
||||
INCLVER BOB,BOBEQUATE
|
||||
INCLVER BOB,BOBOFFSET
|
|
@ -0,0 +1,34 @@
|
|||
INCLUDE [SAM]START
|
||||
|
||||
INCLVER RICH,SPEAK
|
||||
|
||||
|
||||
INCLVER BOB,BOBRAM
|
||||
|
||||
INCLVER BOB,ZPLXQUE
|
||||
INCLVER BOB,PLXTSK
|
||||
INCLVER BOB,ZWRXQUE
|
||||
INCLVER BOB,WRXTSK
|
||||
INCLVER BOB,ZSNXQUE
|
||||
INCLVER BOB,SNXTSK
|
||||
|
||||
INCLVER BOB,EXPATCH * PATCHES BOBS EXPLOSION INTO SYSTEM
|
||||
|
||||
INCLVER BOB,ZZATTRACT
|
||||
INCLVER BOB,MARQUEE
|
||||
|
||||
INCLVER BOB,ATTMSGS
|
||||
|
||||
INCLVER BOB,STATUS
|
||||
|
||||
INCLVER BOB,HSTDTE
|
||||
INCLVER BOB,HSTDIM
|
||||
|
||||
|
||||
INCLVER BOB,ZGAMOVER This is for Sam
|
||||
|
||||
|
||||
INCLVER BOB,ZZAMSINI
|
||||
INCLVER BOB,ZPNTSCRN
|
||||
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
INCLUDE [SAM]START
|
||||
|
||||
INCLVER SAM,SINISTAR.EQU
|
||||
BOB
|
||||
INCLVER SAM,SAM.SYM
|
||||
INCLVER RICH,RICH.SYM
|
||||
INCLVER NOAH,NOAH.SYM
|
||||
INCLVER BOB,BOB.SYM
|
||||
|
||||
INCLVER BOB,ZBOBEQU
|
||||
INCLVER BOB,ZBOBOFF
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
SYMVER SINILN,$988D
|
||||
SYMVER SINISN,$988E
|
||||
SYMVER ADDPIE,$3D4E
|
||||
SYMVER BADJ,$8EA0
|
||||
SYMVER BOMBS,$A013
|
||||
SYMVER DIE,$4755
|
||||
SYMVER HSTDMR,$A1BD
|
||||
SYMVER INWARP,$A1B2
|
||||
SYMVER MAXBNC,$0003
|
||||
SYMVER MAXETV,$0708
|
||||
SYMVER OCALPR,$0013
|
||||
SYMVER OLPOS,$0005
|
||||
SYMVER OLPOSF,$0004
|
||||
SYMVER OMWABO,$000A
|
||||
SYMVER OSCWCR,$0011
|
||||
SYMVER OSMIS,$001D
|
||||
SYMVER OSPOSF,$0008
|
||||
SYMVER OSSCWS,$000A
|
||||
SYMVER OUTCHR,$E200
|
||||
SYMVER PCRAM,$981E
|
||||
SYMVER PIECEP,$A014
|
||||
SYMVER PIECET,$4FB2
|
||||
SYMVER PLAGRA,$A1BA
|
||||
SYMVER PLAIND,$5035
|
||||
SYMVER RETARG,$6438
|
||||
SYMVER SININD,$9878
|
||||
SYMVER TASK1,$A15F
|
||||
SYMVER UNTARG,$6479
|
|
@ -0,0 +1,55 @@
|
|||
|
||||
INCLUDE [SAM]START
|
||||
|
||||
DRAW EQU $06 These 3 equates are
|
||||
SCRUB EQU $12 for DMA control in the
|
||||
DRAW1 EQU $26 HIgh Score and Marquee pages
|
||||
|
||||
|
||||
SCRNLH EQU $74 Screen LONG High value
|
||||
SCRNSL EQU $10 Screen SHORT Low Value
|
||||
SCRNSH EQU $F0 Screen SHORT High value
|
||||
|
||||
|
||||
* Warrior Explosion Equates
|
||||
WRXPCT EQU 10.
|
||||
WRXISZ EQU $0305
|
||||
WRXICT EQU 6
|
||||
|
||||
|
||||
* Player Explosion Equates
|
||||
PXPPCT EQU 15. Piece count -- number of fragments per wave
|
||||
PXPWVS EQU 4 Number of waves -- MUST be an even power of 2
|
||||
PLXISZ EQU $0203 Constant size of fragment images
|
||||
|
||||
|
||||
* High Score To Date/Operator Message entry table equates
|
||||
HSENTCT EQU 30. HSTD entry count (per table)
|
||||
|
||||
MAXBNC EQU 3 Bounce between input acceptance
|
||||
MAXETV EQU 30.*60. Thirty seconds to enter your initials, jack
|
||||
|
||||
FORWARD EQU %00000001 Joystick up bit (bit 0)
|
||||
REVERSE EQU %00000010 Joystick down bit (bit 1)
|
||||
JYLEFT EQU %00000100 Joystick Left (bit 2)
|
||||
JYRIGHT EQU %00001000 Joystick Right (bit 3)
|
||||
ENTER1 EQU %00010000 Fire button bit (bit 5)
|
||||
|
||||
MINLET EQU 0 Minimum letter in character set
|
||||
MAXLET EQU 46. Maximum letter
|
||||
|
||||
CBLANK EQU 10. Blank character
|
||||
CRUB EQU 37. Rubout character
|
||||
|
||||
OPENMTM EQU 0 Operator Message Maximum Time to Make entry
|
||||
OPENLEN EQU 27. Operator Message Length per Line
|
||||
|
||||
|
||||
* Player Extra-Explosion equates
|
||||
PLEXTMR EQU 24. Timer value; defines how long task stays alive
|
||||
PLEXWSZ EQU 9. Wave size; number of objects created per wave
|
||||
PLEXWCT EQU 3. Wave count; number of waves created
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,129 @@
|
|||
INCLUDE [SAM]START
|
||||
|
||||
INCLVER SAM,SINISTAR.EQU
|
||||
BOBFIXES
|
||||
|
||||
INCLVER SAM,SAM.SYM
|
||||
INCLVER RICH,RICH.SYM
|
||||
INCLVER NOAH,NOAH.SYM
|
||||
INCLVER BOB,BOB.SYM
|
||||
|
||||
INCLVER BOB,ZBOBEQU
|
||||
INCLVER BOB,ZBOBOFF
|
||||
|
||||
|
||||
* Take the SINISECTOR <- -1 and INC DEATHFLAG out of Sinistar Explosion
|
||||
PUSHORG $7F51
|
||||
RPT 6,NOP
|
||||
PULLORG
|
||||
|
||||
|
||||
* This causes ZZAMSINI to constantly force-feed the bomb mission on the player
|
||||
LOCAL
|
||||
PUSHORG $8CC8
|
||||
JSR 1$
|
||||
PUSHORG HISAV
|
||||
1$ LDX [PLAINDEX] Player's workspace
|
||||
LDA #OMWABOMB Bomb mission
|
||||
STA OSMIS,X
|
||||
LDD SININDEX Pointer to Sinistar's workspace
|
||||
STD OSCWCR,X This is the player's tail target
|
||||
LDA #$FF Force feed
|
||||
STA OCALPRI,X the priority of this task
|
||||
*
|
||||
TST BOMBS Restore trashed instruction
|
||||
RTS
|
||||
PULLORG HISAV
|
||||
PULLORG
|
||||
|
||||
|
||||
* FIX ZZAMSINI -- Change LDD B,U to LDD A,U
|
||||
PUSHORG $8CD8
|
||||
LDD A,U
|
||||
PULLORG
|
||||
|
||||
|
||||
* This changes the location of FINIT in ZZATTRACT to include the copyright
|
||||
PUSHORG $8183
|
||||
LBHS $81A4
|
||||
PULLORG
|
||||
|
||||
|
||||
* THIS TINY LITTLE PATCH changes the Crystal Image from the yucky yellow
|
||||
* to a beautiful white
|
||||
LOCAL
|
||||
PUSHORG $8E15
|
||||
FDB 1$ Address of crystal descriptor
|
||||
PUSHORG HISAV
|
||||
1$ FDB $0102,2$ Height/Width,Address of Image
|
||||
2$ FDB $1111 Image
|
||||
PULLORG HISAV
|
||||
PULLORG
|
||||
|
||||
|
||||
* Change the bounce value after letter entry from MAXBNC*4 to 6
|
||||
PUSHORG $8B0F
|
||||
FCB MAXBNC*6
|
||||
PULLORG
|
||||
|
||||
|
||||
* This changes Rich's OMWaBomb routine to check for Sinistar onscreen
|
||||
* before dropping bomb
|
||||
LOCAL
|
||||
PUSHORG $682B
|
||||
JSR 2$
|
||||
BEQ 1$ If result of either test was zero, skip bombing
|
||||
1$ EQU *+3
|
||||
PUSHORG HISAV
|
||||
2$ LDX PIECEPTR Get the Sinistar Piece Pointer
|
||||
CMPX #PIECETBL If it points to the bottom of the table
|
||||
BEQ 3$ then there's nothing to shoot, so skip
|
||||
LDX [SININD] Get Sinistar scanner WS
|
||||
LDX OSSCWSA,X Get screen workspace address
|
||||
3$ RTS Go back with an equal or not-equal
|
||||
PULLORG HISAV
|
||||
PULLORG
|
||||
|
||||
|
||||
* These are the Attract Demo adjusts
|
||||
PUSHORG $525E
|
||||
FCB 5 Number of bombs to start
|
||||
PULLORG
|
||||
PUSHORG $5279
|
||||
FDB (33.*60.)/2 Timer for Phase 1
|
||||
PULLORG
|
||||
PUSHORG $5287
|
||||
FDB (60.*60.) Watchdog waits for 60. seconds
|
||||
PULLORG
|
||||
PUSHORG $8C99
|
||||
FCB 8. 8 Sinibombs to initiate Phase 2
|
||||
PULLORG
|
||||
PUSHORG $8CBF
|
||||
FCB 16. 16. Crystal-Laden Workers
|
||||
PULLORG
|
||||
PUSHORG $8CE3
|
||||
FDB (4*60.)/8 Time for Phase 3
|
||||
PULLORG
|
||||
|
||||
|
||||
* Change Sinistar Background Flasher from TASK4 to TASK1
|
||||
PUSHORG $7F78
|
||||
FDB TASK1
|
||||
PUSHORG $7F7B
|
||||
FCB $A8 Adjust the timer value to about 2.75 seconds
|
||||
PULLORG
|
||||
PULLORG
|
||||
* This sucks. Try task2 and put in variable wait before effecting next flash
|
||||
* Also try different timer values to keep message from lasting to end of
|
||||
* CONGRATS text.
|
||||
|
||||
|
||||
|
||||
* INCLVER BOB,ZSTBLBOMB New OMWaBomb Table
|
||||
|
||||
|
||||
|
||||
*SinibombS and crystalS
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,93 @@
|
|||
INCLUDE [SAM]START
|
||||
INCLVER SAM,SINISTAR.EQU
|
||||
|
||||
* These define the offsets into the Player Explosion fragment table
|
||||
PUSHORG 0
|
||||
|
||||
OPXPSP RMB 2 Fragment screen position
|
||||
OPXPMM RMB 2 Fragment momentum (velocity)
|
||||
|
||||
PULLORG OPXPSZ
|
||||
|
||||
* These define the offsets into the Player Explosion Task RAM space
|
||||
PUSHORG OMTLEN
|
||||
|
||||
OPXPCK RMB 1 Pick index for which image to display
|
||||
OPXALV RMB 1 Count for number of turns that task is alive
|
||||
OPXOTB RMB PXPPCT*OPXPSZ*PXPWVS Fragment table
|
||||
|
||||
PULLORG OPXRRQ
|
||||
|
||||
* These define the offsets into the Warrior Explosion fragment table
|
||||
PUSHORG 0
|
||||
|
||||
OWXPSP RMB 2 Fragment screen position
|
||||
OWXPMM RMB 2 Fragment momentum (velocity)
|
||||
|
||||
PULLORG OWXPSZ
|
||||
|
||||
* These define the offsets into the Warrior Explosion Task RAM space
|
||||
PUSHORG OMTLEN
|
||||
|
||||
OWXPCK RMB 1 Pick index for which image to display
|
||||
OWXALV RMB 1 Count for number of turns that task is alive
|
||||
OWXOTB RMB WRXPCT*OWXPSZ Fragment table
|
||||
|
||||
PULLORG OWXRRQ
|
||||
|
||||
* These define the offsets into the Sinistar Explosion Task RAM space
|
||||
PUSHORG OMTLEN
|
||||
|
||||
OSXIVL RMB 1 Explosion Increment Value
|
||||
OSXALV RMB 1 Turns that Explosion Stays Alive
|
||||
OSXIPT RMB 2 Pointer to the Sinistar RAM image
|
||||
|
||||
PULLORG OSXRRQ
|
||||
|
||||
|
||||
|
||||
* These are for the High Score To Date master task
|
||||
PUSHORG OTIMER
|
||||
|
||||
OHSMP1 RMB 2
|
||||
OHSMP2 RMB 2
|
||||
OHSMFLG RMB 1
|
||||
|
||||
OHSMNP RMB 1
|
||||
PULLORG OHSMMR
|
||||
|
||||
|
||||
|
||||
* These are for the High Score To Date slave task
|
||||
PUSHORG OTIMER
|
||||
|
||||
OHSCPS RMB 1
|
||||
OHSCLT RMB 1
|
||||
|
||||
OHSTPTR RMB 2
|
||||
OHSPSCR RMB 2
|
||||
|
||||
OHSBNC RMB 1
|
||||
OHSETM RMB 1
|
||||
|
||||
OHSRTN RMB 2
|
||||
|
||||
OHSINIT RMB OPENLEN
|
||||
|
||||
OHSESZ RMB 1
|
||||
OHSPPR RMB 2
|
||||
OHSBADR RMB 2
|
||||
PULLORG OHSTDMR
|
||||
|
||||
|
||||
PUSHORG 0
|
||||
OPEXPOS RMB 2
|
||||
OPEXVEL RMB 2
|
||||
PULLORG
|
||||
|
||||
PUSHORG OMTLEN
|
||||
OPEXCTR RMB 1
|
||||
OPEXWSP RMB PLEXWSZ*PLEXWCT*4
|
||||
PULLORG OPEXTSZ
|
||||
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* *
|
||||
* *
|
||||
* BBBB OOO BBBB RRRR AAA M M V V 11 77777 *
|
||||
* B B O O B B R R A A MM MM V V 1 1 7 *
|
||||
* BBBB O O BBBB RRRR AAAAA M M M V V 1 7 *
|
||||
* B B O O B B R R A A M M V V 1 7 *
|
||||
* BBBB OOO BBBB R R A A M M V 11111 7 *
|
||||
* *
|
||||
* S I N I S T A R 17 *
|
||||
* *
|
||||
* A game by Sam Dicker, Noah Falstein, Richard Witt and Bob Mical *
|
||||
* Copyright (c) 1983 by Williams Electronics Inc. *
|
||||
* *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
|
||||
BOBRAM
|
||||
PUSHORG SRAMSAV
|
||||
RAMHSC RMB HSENTCT*SCRSIZ Grab a block of Ram HSTD table
|
||||
RAMLSC EQU RAMHSC+((HSENTCT-1)*SCRSIZ) Pointer to the lowest score
|
||||
PULLORG SRAMSAV
|
||||
|
||||
|
||||
|
||||
PUSHORG RAMSAVE Grab a byte of RAM
|
||||
HSTDFLG RMB 1 for the HSTD slave-task completion flag
|
||||
HSLEN1 RMB 2 High Score Last Entry Locations 1
|
||||
HSLEN2 RMB 2 and 2
|
||||
HSRLN1 RMB 2 High Score Last Entry RAM Locations 1
|
||||
HSRLN2 RMB 2 and 2
|
||||
|
||||
|
||||
C1 RMB $0010 Cleverly-named variable used by Lantz/Metz Marq
|
||||
DISSIZ RMB 1 HSTD Variable DESCRIBING DISPLAY SIZE
|
||||
MARQCNT RMB 2
|
||||
DISCLR RMB 1 Display routines color saver
|
||||
|
||||
* Rich has this declaration 22 March 1983
|
||||
*HSTDMRQ RMB 1 Flag set when HSTD/Marquee page is displayed
|
||||
|
||||
OPENRTN RMB 2 Holds return address from OPENT routine
|
||||
PULLORG RAMSAVE
|
||||
|
||||
|
||||
PUSHORG PLAYSAVE
|
||||
PLUWPF RMB 1 Add the PlayerUpWarpFlag to the player's RAM
|
||||
PULLORG PLAYSAVE
|
||||
|
||||
|
||||
* This stuff isn't RAM, but Sam asked me to move it out of my B1.SRC file
|
||||
* and this was the most reasonable place to keep it.
|
||||
CMOSHSC EQU CMSCOR HSTD CMOS High Score entry
|
||||
CMOSLSC EQU CMOSHSC+((HSENTCT-1)*SCRSIZ) Low Score entry
|
||||
CMOSOPE EQU CMOSHSC+(HSENTCT*SCRSIZ)
|
||||
CMOSO2 EQU CMOSOPE+OPENLEN*2
|
||||
CMOSSD EQU CMOSO2+OPENLEN*2 Reserve 1 byte
|
||||
CMOSNXT EQU CMOSSD+1 Dummy variable, next available CMOS
|
||||
|
|
@ -0,0 +1,687 @@
|
|||
NLIST
|
||||
BOBS.EQU
|
||||
|
||||
ALHSTD EQU $CC0A
|
||||
ALIVE EQU $4FE2
|
||||
ALLCUR EQU $8A70
|
||||
AMDEMO EQU $9896
|
||||
AMSINI EQU $6C59
|
||||
AMSWTB EQU $8CEB
|
||||
ANISCS EQU $536C
|
||||
ANPLAY EQU $31D8
|
||||
APIA2 EQU $48F3
|
||||
ATTMSG EQU $8309
|
||||
ATTRAC EQU $7C64
|
||||
BASSAV SET $9897
|
||||
BGREY EQU $0066
|
||||
BLKMOV EQU $8942
|
||||
BLUE EQU $0099
|
||||
BOBRAM EQU $FFFF
|
||||
BOMBS EQU $A013
|
||||
BURGUN EQU $00CC
|
||||
CBLANK EQU $000A
|
||||
CCURS EQU $0033
|
||||
CDASH EQU $0027
|
||||
CDTASK EQU $528F
|
||||
CENINS EQU $8A1A
|
||||
CENTRY EQU $8ABA
|
||||
CLCOUN SET $000B
|
||||
CLRHSL EQU $8BF4
|
||||
CLRSCR EQU $3245
|
||||
CMOS EQU $CC00
|
||||
CMOSHS EQU $CD32
|
||||
CMOSLS EQU $CEC8
|
||||
CMOSNX EQU $CF43
|
||||
CMOSOP EQU $CED6
|
||||
CMOSO2 EQU $CF0C
|
||||
CMOSSD EQU $CF42
|
||||
CMPSCR EQU $892A
|
||||
CMSCOR EQU $CD32
|
||||
CREAM EQU $0022
|
||||
CREDIT EQU $BF1B
|
||||
CRUB EQU $0025
|
||||
CR2 SET $2DFB
|
||||
CR3 SET $3435
|
||||
CR4 SET $42F9
|
||||
CR5 SET $50DF
|
||||
CR6 SET $6026
|
||||
CR7 SET $7A7F
|
||||
CR8 SET $802E
|
||||
C1 EQU $A1CB
|
||||
C1SLEE EQU $46A8
|
||||
DCONS EQU $CA01
|
||||
DCREDI EQU $338E
|
||||
DCTRL EQU $CA00
|
||||
DDEST EQU $CA04
|
||||
DEATH EQU $5832
|
||||
DEATHF EQU $9895
|
||||
DEFSIZ EQU $0012
|
||||
DHIGH EQU $CA06
|
||||
DIE EQU $4755
|
||||
DISCLR EQU $A1DE
|
||||
DISINT EQU $82B1
|
||||
DISNUM EQU $826C
|
||||
DISP EQU $5583
|
||||
DISSIZ EQU $A1DB
|
||||
DRAW EQU $0006
|
||||
DRAW1 EQU $0026
|
||||
DSOUR EQU $CA02
|
||||
D$P SET $0098
|
||||
ENTER1 EQU $0010
|
||||
ERCLT EQU $8A4A
|
||||
EXEVEC SET $510F
|
||||
EXPATC EQU $FFFF
|
||||
FAOBCD EQU $8729
|
||||
FINAL SET $7FFF
|
||||
FINISH EQU $A016
|
||||
FINIT EQU $81C5
|
||||
FORWAR EQU $0001
|
||||
FRAME EQU $33B4
|
||||
FREE EQU $9873
|
||||
GAMOVE EQU $320C
|
||||
GAMVEC SET $5145
|
||||
HEXBCD EQU $4B9E
|
||||
HISAV SET $E1B7
|
||||
HSENTC EQU $001E
|
||||
HSISBM EQU $8C3B
|
||||
HSISNF EQU $8C1A
|
||||
HSISRW EQU $8C5C
|
||||
HSISSD EQU $8C14
|
||||
HSISUS EQU $8C0B
|
||||
HSISWE EQU $8C03
|
||||
HSLEN1 EQU $A1C3
|
||||
HSLEN2 EQU $A1C5
|
||||
HSRLN1 EQU $A1C7
|
||||
HSRLN2 EQU $A1C9
|
||||
HSTDDT EQU $897B
|
||||
HSTDEN EQU $2FE1
|
||||
HSTDFL EQU $A1C2
|
||||
HSTDIM EQU $8B9E
|
||||
HSTDIN EQU $88D8
|
||||
HSTDMR EQU $A1BD
|
||||
HSTDMS EQU $87B2
|
||||
HSTDTL EQU $894D
|
||||
HSTEST EQU $8822
|
||||
HSTK EQU $BF00
|
||||
IAMODE EQU $2ED4
|
||||
IAMVEC SET $7C58
|
||||
IBARRE EQU $8E2B
|
||||
ICRYST EQU $26A1
|
||||
INDEXS EQU $A225
|
||||
INIMPU EQU $A1BC
|
||||
INISIN EQU $327E
|
||||
INIVEC SET $82F1
|
||||
INTVEC SET $E137
|
||||
IPLAN2 EQU $0CCB
|
||||
IRWOCR EQU $7495
|
||||
IWARRI EQU $19E1
|
||||
IWORKE EQU $129D
|
||||
JFTEXT EQU $8A88
|
||||
JYLEFT EQU $0004
|
||||
JYRIGH EQU $0008
|
||||
KABOOM EQU $6C6D
|
||||
KRSINI EQU $59B0
|
||||
LEFEDG EQU $002C
|
||||
LEVEL SET $0001
|
||||
MAKBAK EQU $81DB
|
||||
MAKSCX EQU $8A62
|
||||
MARQCN EQU $A1DC
|
||||
MAXBNC EQU $0003
|
||||
MAXETV EQU $0708
|
||||
MAXLET EQU $002E
|
||||
MCRYST SET $6F80
|
||||
MEMCTL EQU $C900
|
||||
MESLEN EQU $EF8C
|
||||
MESSAV SET $EF78
|
||||
MESS1 SET $E54D
|
||||
MESS1E SET $EFEA
|
||||
MESS2 SET $8EA0
|
||||
MESS2E SET $8FF4
|
||||
MFRAGM SET $0720
|
||||
MINLET EQU $0000
|
||||
MPLANE SET $7FE0
|
||||
MPLAYE SET $2FA0
|
||||
MPLSHO SET $2720
|
||||
MSBOMB SET $27A0
|
||||
MSINI SET $7D80
|
||||
MWARRI SET $7FD0
|
||||
MWASHO SET $7650
|
||||
MWORKC SET $7F70
|
||||
MWORKE SET $7FF0
|
||||
NAPV EQU $F009
|
||||
NATMSG EQU $848A
|
||||
NEWTUN EQU $3891
|
||||
NEXTL EQU $81F2
|
||||
NEXTL2 EQU $81F5
|
||||
NPLAYE EQU $988A
|
||||
OBOTTO EQU $0005
|
||||
OCALPR EQU $0013
|
||||
OCRSIL SET $0007
|
||||
ODFSAV SET $0003
|
||||
ODYNOV EQU $0004
|
||||
OEXEC EQU $0002
|
||||
OEXPLE SET $0007
|
||||
OHSBAD EQU $0030
|
||||
OHSBNC EQU $000E
|
||||
OHSCLT EQU $0009
|
||||
OHSCPS EQU $0008
|
||||
OHSESZ EQU $002D
|
||||
OHSETM EQU $000F
|
||||
OHSINI EQU $0012
|
||||
OHSMFL EQU $000C
|
||||
OHSMMR SET $000E
|
||||
OHSMNP EQU $000D
|
||||
OHSMP1 EQU $0008
|
||||
OHSMP2 EQU $000A
|
||||
OHSPPR EQU $002E
|
||||
OHSPSC EQU $000C
|
||||
OHSRTN EQU $0010
|
||||
OHSTDM SET $0032
|
||||
OHSTPT EQU $000A
|
||||
OILEN SET $0008
|
||||
OINDEX EQU $FFFE
|
||||
OLEN SET $0022
|
||||
OLVEL EQU $000E
|
||||
OMTLEN SET $0004
|
||||
OMWABO EQU $000A
|
||||
OMWASA SET $000C
|
||||
OMWOSA SET $000A
|
||||
OPENIN EQU $89F4
|
||||
OPENI2 EQU $8A09
|
||||
OPENLE EQU $001B
|
||||
OPENMS EQU $89A3
|
||||
OPENMT EQU $0000
|
||||
OPENRT EQU $A1DF
|
||||
OPENT EQU $49C7
|
||||
OPEXCT EQU $0004
|
||||
OPEXPO EQU $0000
|
||||
OPEXTS SET $0071
|
||||
OPEXVE EQU $0002
|
||||
OPEXWS EQU $0005
|
||||
OPMDRW EQU $82D7
|
||||
OPXALV EQU $0005
|
||||
OPXOTB EQU $0006
|
||||
OPXPCK EQU $0004
|
||||
OPXPMM EQU $0002
|
||||
OPXPSP EQU $0000
|
||||
OPXPSZ SET $0004
|
||||
OPXRRQ SET $00F6
|
||||
ORSPAC SET $0004
|
||||
OSCDLE SET $0023
|
||||
OSCLEN SET $000D
|
||||
OSCWCR EQU $0011
|
||||
OSDPSA SET $0014
|
||||
OSEED1 EQU $0000
|
||||
OSEED2 EQU $0002
|
||||
OSMIS EQU $001D
|
||||
OSPLEN SET $0004
|
||||
OSSCWS EQU $000A
|
||||
OSTBLZ SET $0006
|
||||
OSTLEN SET $0004
|
||||
OSULEN SET $0006
|
||||
OSVCSA SET $0020
|
||||
OSVEL EQU $000C
|
||||
OSWCSA SET $0017
|
||||
OSWWSA SET $0021
|
||||
OSXALV EQU $0005
|
||||
OSXIPT EQU $0006
|
||||
OSXIVL EQU $0004
|
||||
OSXRRQ SET $0008
|
||||
OTIMER SET $0008
|
||||
OTLEN SET $0007
|
||||
OTNRLE SET $0003
|
||||
OUTBCD EQU $E206
|
||||
OUTB35 EQU $E20F
|
||||
OUTCHR EQU $E200
|
||||
OUTC35 EQU $E209
|
||||
OUTP35 EQU $E20C
|
||||
OUTP68 EQU $E203
|
||||
OVBLEN SET $0007
|
||||
OWISSA SET $0006
|
||||
OWXALV EQU $0005
|
||||
OWXOTB EQU $0006
|
||||
OWXPCK EQU $0004
|
||||
OWXPMM EQU $0002
|
||||
OWXPSP EQU $0000
|
||||
OWXPSZ SET $0004
|
||||
OWXRRQ SET $002E
|
||||
PANMAS EQU $9880
|
||||
PCLRSC EQU $320F
|
||||
PCLR2 EQU $8472
|
||||
PCRAM EQU $981E
|
||||
PHRLEN EQU $EC5D
|
||||
PHRNUM SET $00D9
|
||||
PHRSAV SET $EC2F
|
||||
PIECEN EQU $5002
|
||||
PIECEP EQU $A014
|
||||
PIECET EQU $4FB2
|
||||
PINK EQU $0033
|
||||
PLAGRA EQU $A1BA
|
||||
PLAIND EQU $5035
|
||||
PLAVEC SET $8559
|
||||
PLAYSA SET $A055
|
||||
PLEXEE EQU $7E1D
|
||||
PLEXIM EQU $7E1C
|
||||
PLEXTM EQU $0018
|
||||
PLEXTR EQU $7D85
|
||||
PLEXWC EQU $0003
|
||||
PLEXWS EQU $0009
|
||||
PLNURA EQU $A099
|
||||
PLSIZE SET $009D
|
||||
PLURAM EQU $9FFC
|
||||
PLUWPF EQU $A054
|
||||
PLXIM0 EQU $7D5D
|
||||
PLXIM1 EQU $7D63
|
||||
PLXIM2 EQU $7D69
|
||||
PLXIM3 EQU $7D6F
|
||||
PLXISZ EQU $0203
|
||||
PLXITB EQU $7D55
|
||||
PLXPLP EQU $7C91
|
||||
PLXQUE EQU $7C6A
|
||||
PLXTSK EQU $7CD8
|
||||
PLXXIT EQU $7CD6
|
||||
PMEMCT EQU $BFFF
|
||||
PNTIMT EQU $8E11
|
||||
PNTSCR EQU $583A
|
||||
PNTSCT EQU $8E1F
|
||||
POWVEC SET $8B58
|
||||
PRTASK EQU $9842
|
||||
PSCORE EQU $9FFD
|
||||
PXPALT EQU $7D75
|
||||
PXPAL0 EQU $7D79
|
||||
PXPAL1 EQU $7D7F
|
||||
PXPPCT EQU $000F
|
||||
PXPWVS EQU $0004
|
||||
QPLSTR EQU $4DEB
|
||||
RAMHSC EQU $DC94
|
||||
RAMLSC EQU $DE2A
|
||||
RAMSAV SET $A1E1
|
||||
RAND8 EQU $4808
|
||||
RAND8R EQU $47FA
|
||||
RCMOSA EQU $4A5F
|
||||
RED EQU $00DD
|
||||
REVERS EQU $0002
|
||||
ROMSAV SET $8E31
|
||||
RSHS EQU $49C4
|
||||
RSTPOP EQU $6C7C
|
||||
RTS EQU $2E44
|
||||
SAVEDY SET $0004
|
||||
SCOREA EQU $A00A
|
||||
SCRNLH EQU $0074
|
||||
SCRNSH EQU $00F0
|
||||
SCRNSL EQU $0010
|
||||
SCRSIZ EQU $000E
|
||||
SCRUB EQU $0012
|
||||
SILVER EQU $0055
|
||||
SINIHI EQU $001A
|
||||
SINIKI EQU $A03E
|
||||
SINIMA EQU $D77C
|
||||
SININD EQU $9878
|
||||
SININT EQU $7FD6
|
||||
SINISE EQU $9894
|
||||
SINIWI EQU $0031
|
||||
SINOUT EQU $81CF
|
||||
SLEEP1 EQU $46BB
|
||||
SLEEP2 EQU $46DB
|
||||
SLVEL EQU $9844
|
||||
SNXBFT EQU $7F97
|
||||
SNXBRX EQU $8013
|
||||
SNXQUE EQU $3D4B
|
||||
SNXTSK EQU $7FDE
|
||||
SNXWBM EQU $7FB3
|
||||
SRAMSA SET $DE38
|
||||
SSLPOS EQU $9881
|
||||
SSSPOS EQU $9883
|
||||
SSVEL EQU $9846
|
||||
STACK SET $BF00
|
||||
STACKA SET $0040
|
||||
STACKY SET $0002
|
||||
STARTS EQU $2EDA
|
||||
STATPG EQU $2FF9
|
||||
STTBCL EQU $8765
|
||||
STTDRS EQU $8745
|
||||
STTSPK EQU $8737
|
||||
SUBPIE EQU $3CD9
|
||||
SYSTIN EQU $3149
|
||||
SYSVEC SET $31D3
|
||||
S1L EQU $1E13
|
||||
TASK1 EQU $A15F
|
||||
TASK2 EQU $A166
|
||||
TASK4 EQU $A16D
|
||||
TASK8 EQU $A174
|
||||
TDISPE EQU $5593
|
||||
TGREY EQU $0044
|
||||
TIMER EQU $3419
|
||||
TODEND SET $CFB6
|
||||
VERSIO SET $0011
|
||||
WCMOSA EQU $4A78
|
||||
WCMOSD EQU $4A84
|
||||
WHITE EQU $0011
|
||||
WPLAYE EQU $9900
|
||||
WRCLT EQU $8A3C
|
||||
WRCURS EQU $8A2C
|
||||
WRXICT EQU $0006
|
||||
WRXIM0 EQU $7F0F
|
||||
WRXIM1 EQU $7F1E
|
||||
WRXIM2 EQU $7F2D
|
||||
WRXIM3 EQU $7F3C
|
||||
WRXISZ EQU $0305
|
||||
WRXITB EQU $7F03
|
||||
WRXPCT EQU $000A
|
||||
WRXPLP EQU $7E5D
|
||||
WRXQUE EQU $7C67
|
||||
WRXTSK EQU $7E98
|
||||
WRXXIT EQU $7E96
|
||||
YELLOW EQU $00FF
|
||||
ZAMSIN EQU $8C8C
|
||||
ZATTRA EQU $805E
|
||||
ZGAMOV EQU $8C74
|
||||
ZHSTDE EQU $8784
|
||||
ZKABOO EQU $7F4B
|
||||
ZNMTSK SET $5C06
|
||||
ZNOTBL EQU $8721
|
||||
ZNTTBL EQU $8725
|
||||
ZOPENT EQU $898E
|
||||
ZPLXQU EQU $7C6D
|
||||
ZPNTSC EQU $8CF0
|
||||
ZRSHS EQU $8B64
|
||||
ZSTATP EQU $8560
|
||||
ZWRXQU EQU $7E29
|
||||
_A SET $ED96
|
||||
_AFFEC SET $EE5D
|
||||
_AMONG SET $EF09
|
||||
_AT SET $EC6D
|
||||
_ATTAC SET $ECBD
|
||||
_B SET $EDB3
|
||||
_BATTL SET $ED08
|
||||
_BETTE SET $EEA3
|
||||
_BLAST SET $EE16
|
||||
_BOMBB SET $EE36
|
||||
_BONUS SET $EC67
|
||||
_BUILT SET $EE86
|
||||
_BUTTO SET $EEB9
|
||||
_C SET $EDB9
|
||||
_CAN SET $EE70
|
||||
_COIN SET $EEDC
|
||||
_COMPU SET $ED39
|
||||
_CONGR SET $ED0F
|
||||
_COPYR SET $EDEE
|
||||
_CREDI SET $EC7B
|
||||
_CRYST SET $EE1C
|
||||
_DAMAG SET $ECC4
|
||||
_DEFEA SET $ED23
|
||||
_DESTR SET $EE91
|
||||
_DICKE SET $ED8B
|
||||
_DOES SET $EE54
|
||||
_E SET $ED6D
|
||||
_ELECT SET $EE06
|
||||
_EMPTY SET $EC83
|
||||
_ENGAG SET $ED45
|
||||
_ENGIN SET $ECA0
|
||||
_ENTER SET $ECD3
|
||||
_ENTRY SET $EF37
|
||||
_F SET $ED9A
|
||||
_FILL SET $EE31
|
||||
_FIRE SET $EEB4
|
||||
_FIRIN SET $EE4D
|
||||
_FOR SET $EC97
|
||||
_GAME SET $EC5D
|
||||
_GIVE SET $EF16
|
||||
_H SET $ED98
|
||||
_HAD SET $EE9F
|
||||
_HAS SET $EEEB
|
||||
_HAVE SET $EEE6
|
||||
_HIGH SET $EEC4
|
||||
_I SET $EDA2
|
||||
_ILLIA SET $ED65
|
||||
_IN SET $ED52
|
||||
_INC SET $EE12
|
||||
_INITI SET $EF1D
|
||||
_INSER SET $EED5
|
||||
_INTER SET $ECB1
|
||||
_IS SET $ED42
|
||||
_IT SET $EE99
|
||||
_J SET $EDB5
|
||||
_JOYST SET $EF41
|
||||
_L SET $ED9C
|
||||
_LECTR SET $ED6F
|
||||
_LETTE SET $EF4A
|
||||
_M SET $EDB7
|
||||
_MAKE SET $ED82
|
||||
_MESSA SET $EF2F
|
||||
_MIGHT SET $EE64
|
||||
_MINE SET $ED7A
|
||||
_MUST SET $EE8C
|
||||
_N SET $ED92
|
||||
_NEMES SET $EE79
|
||||
_NOT SET $EE59
|
||||
_NOW SET $ED4E
|
||||
_O SET $ED94
|
||||
_OF SET $EDC1
|
||||
_OFF SET $EE25
|
||||
_ONCE SET $EE81
|
||||
_ONLY SET $EE6B
|
||||
_OPERA SET $EF26
|
||||
_OR SET $EE9C
|
||||
_OVER SET $EC62
|
||||
_PICK SET $EE29
|
||||
_PIECE SET $EEEF
|
||||
_PLANE SET $ECF0
|
||||
_PLAY SET $EEE1
|
||||
_PLAYE SET $EC70
|
||||
_POINT SET $EF5F
|
||||
_PREPA SET $ED00
|
||||
_PRESS SET $EEAE
|
||||
_R SET $EDB1
|
||||
_RANGE SET $ED5D
|
||||
_RANKS SET $EF03
|
||||
_RESET SET $EF57
|
||||
_RICHA SET $EDA4
|
||||
_RUN SET $EEAA
|
||||
_S SET $ED9E
|
||||
_SAM SET $ED87
|
||||
_SAVED SET $EC91
|
||||
_SCANN SET $ED55
|
||||
_SCORE SET $EEC9
|
||||
_SEE SET $EEC0
|
||||
_SINI SET $EDC4
|
||||
_SINIB SET $EE43
|
||||
_SINIM SET $EDCE
|
||||
_SINIS SET $ED30
|
||||
_SMASH SET $EEF6
|
||||
_STAR SET $EDC9
|
||||
_START SET $EECF
|
||||
_SURVI SET $EDDB
|
||||
_SWARM SET $EDBB
|
||||
_T SET $EDA0
|
||||
_TABLE SET $EF51
|
||||
_TARGE SET $ECCC
|
||||
_THE SET $ED2C
|
||||
_THIS SET $EE74
|
||||
_TM SET $EDEB
|
||||
_TO SET $ED7F
|
||||
_TODAY SET $EDE5
|
||||
_TOP SET $EF0F
|
||||
_UP SET $EE2E
|
||||
_USE SET $EF3D
|
||||
_VOID SET $ECDC
|
||||
_W SET $ED63
|
||||
_WARP SET $EC9B
|
||||
_WARRI SET $ECE8
|
||||
_WILLI SET $EDFD
|
||||
_WITH SET $EE3E
|
||||
_WITT SET $EDAC
|
||||
_WORKE SET $ECE1
|
||||
_YOU SET $ED1F
|
||||
_YOUR SET $EEFE
|
||||
_ZONE SET $ECFB
|
||||
_1 SET $EC77
|
||||
_150 SET $EF66
|
||||
_15000 SET $EF72
|
||||
_1982 SET $EDF8
|
||||
_2 SET $EC79
|
||||
_200 SET $EF6A
|
||||
_3 SET $EF1B
|
||||
_30 SET $EF13
|
||||
_5 SET $EF5D
|
||||
_500 SET $EF6E
|
||||
.A SET $007F
|
||||
.AFFEC SET $00A6
|
||||
.AMONG SET $00C5
|
||||
.AT SET $0050
|
||||
.ATTAC SET $005D
|
||||
.B SET $0089
|
||||
.BATTL SET $0067
|
||||
.BETTE SET $00B3
|
||||
.BLAST SET $009A
|
||||
.BOMBB SET $00A0
|
||||
.BONUS SET $004F
|
||||
.BUILT SET $00AD
|
||||
.BUTTO SET $00B7
|
||||
.C SET $008C
|
||||
.CAN SET $00A9
|
||||
.COIN SET $00BD
|
||||
.COMPU SET $006D
|
||||
.CONGR SET $0068
|
||||
.COPYR SET $0095
|
||||
.CREDI SET $0054
|
||||
.CRYST SET $009B
|
||||
.DAMAG SET $005E
|
||||
.DEFEA SET $006A
|
||||
.DESTR SET $00AF
|
||||
.DICKE SET $007C
|
||||
.DOES SET $00A4
|
||||
.DTISA SET $5994
|
||||
.E SET $0076
|
||||
.ELECT SET $0098
|
||||
.EMPTY SET $0055
|
||||
.ENGAG SET $006F
|
||||
.ENGIN SET $005A
|
||||
.ENTER SET $0060
|
||||
.ENTRY SET $00CD
|
||||
.F SET $0081
|
||||
.FILL SET $009F
|
||||
.FIRE SET $00B6
|
||||
.FIRIN SET $00A3
|
||||
.FOR SET $0058
|
||||
.GAME SET $004D
|
||||
.GIVE SET $00C8
|
||||
.H SET $0080
|
||||
.HAD SET $00B2
|
||||
.HAS SET $00C0
|
||||
.HAVE SET $00BF
|
||||
.HIGH SET $00B9
|
||||
.I SET $0085
|
||||
.ILLIA SET $0075
|
||||
.IN SET $0071
|
||||
.INC SET $0099
|
||||
.INITI SET $00CA
|
||||
.INSER SET $00BC
|
||||
.INTER SET $005C
|
||||
.IS SET $006E
|
||||
.IT SET $00B0
|
||||
.J SET $008A
|
||||
.JOYST SET $00CF
|
||||
.L SET $0082
|
||||
.LECTR SET $0077
|
||||
.LETTE SET $00D0
|
||||
.M SET $008B
|
||||
.MAKE SET $007A
|
||||
.MESSA SET $00CC
|
||||
.MIGHT SET $00A7
|
||||
.MINE SET $0078
|
||||
.MUST SET $00AE
|
||||
.N SET $007D
|
||||
.NEMES SET $00AB
|
||||
.NOT SET $00A5
|
||||
.NOW SET $0070
|
||||
.O SET $007E
|
||||
.OF SET $008E
|
||||
.OFF SET $009C
|
||||
.ONCE SET $00AC
|
||||
.ONLY SET $00A8
|
||||
.OPERA SET $00CB
|
||||
.OR SET $00B1
|
||||
.OVER SET $004E
|
||||
.PICK SET $009D
|
||||
.PIECE SET $00C1
|
||||
.PLANE SET $0064
|
||||
.PLAY SET $00BE
|
||||
.PLAYE SET $0051
|
||||
.POINT SET $00D4
|
||||
.PREPA SET $0066
|
||||
.PRESS SET $00B5
|
||||
.R SET $0088
|
||||
.RANGE SET $0073
|
||||
.RANKS SET $00C4
|
||||
.RESET SET $00D2
|
||||
.RICHA SET $0086
|
||||
.RUN SET $00B4
|
||||
.S SET $0083
|
||||
.SAM SET $007B
|
||||
.SAVED SET $0057
|
||||
.SCANN SET $0072
|
||||
.SCORE SET $00BA
|
||||
.SEE SET $00B8
|
||||
.SINI SET $008F
|
||||
.SINIB SET $00A2
|
||||
.SINIM SET $0091
|
||||
.SINIS SET $006C
|
||||
.SMASH SET $00C2
|
||||
.STAR SET $0090
|
||||
.START SET $00BB
|
||||
.SURVI SET $0092
|
||||
.SWARM SET $008D
|
||||
.T SET $0084
|
||||
.TABLE SET $00D1
|
||||
.TARGE SET $005F
|
||||
.THE SET $006B
|
||||
.THIS SET $00AA
|
||||
.TM SET $0094
|
||||
.TO SET $0079
|
||||
.TODAY SET $0093
|
||||
.TOP SET $00C6
|
||||
.UP SET $009E
|
||||
.USE SET $00CE
|
||||
.VOID SET $0061
|
||||
.W SET $0074
|
||||
.WARP SET $0059
|
||||
.WARRI SET $0063
|
||||
.WILLI SET $0097
|
||||
.WITH SET $00A1
|
||||
.WITT SET $0087
|
||||
.WORKE SET $0062
|
||||
.YOU SET $0069
|
||||
.YOUR SET $00C3
|
||||
.ZONE SET $0065
|
||||
.$CHR SET $0023
|
||||
.$COLR SET $0055
|
||||
.$DISP SET $2E44
|
||||
.$DLOF SET $0029
|
||||
.$DSOF SET $0059
|
||||
.$ORG0 SET $0000
|
||||
.$ORG1 SET $0000
|
||||
.$ORG2 SET $0000
|
||||
.$ORG3 SET $0000
|
||||
.$ORG4 SET $0000
|
||||
.$ORG5 SET $0000
|
||||
.$ORG6 SET $0000
|
||||
.$ORG7 SET $0000
|
||||
.$PP SET $0000
|
||||
.$PRIO SET $FFFF
|
||||
.$PTR SET $D77C
|
||||
.$SOUN SET $FFFF
|
||||
.$TMOD SET $0000
|
||||
.$WECO SET $0045
|
||||
.$$ SET $8CF0
|
||||
.1 SET $0052
|
||||
.150 SET $00D5
|
||||
.15000 SET $00D8
|
||||
.1982 SET $0096
|
||||
.2 SET $0053
|
||||
.200 SET $00D6
|
||||
.3 SET $00C9
|
||||
.30 SET $00C7
|
||||
.5 SET $00D3
|
||||
.500 SET $00D7
|
||||
LIST
|
|
@ -0,0 +1,227 @@
|
|||
BASSAV SET $9897
|
||||
CLCOUN SET $000B
|
||||
CR2 SET $2DFB
|
||||
CR3 SET $3435
|
||||
CR4 SET $42F9
|
||||
CR5 SET $50DF
|
||||
CR6 SET $6026
|
||||
CR7 SET $7A7F
|
||||
D$P SET $0098
|
||||
EXEVEC SET $510F
|
||||
FINAL SET $7FFF
|
||||
GAMVEC SET $5145
|
||||
HISAV SET $E1B7
|
||||
IAMVEC SET $7C58
|
||||
INIVEC SET $7415
|
||||
INTVEC SET $E137
|
||||
LEVEL SET $0001
|
||||
MCRYST SET $6F80
|
||||
MESSAV SET $EDC4
|
||||
MESS1 SET $E54D
|
||||
MESS1E SET $EFEA
|
||||
MESS2 SET $8EA0
|
||||
MESS2E SET $8FF4
|
||||
MFRAGM SET $0720
|
||||
MPLANE SET $7FE0
|
||||
MPLAYE SET $2FA0
|
||||
MPLSHO SET $2720
|
||||
MSBOMB SET $27A0
|
||||
MSINI SET $7D80
|
||||
MWARRI SET $7FD0
|
||||
MWASHO SET $7650
|
||||
MWORKC SET $7F70
|
||||
MWORKE SET $7FF0
|
||||
OCRSIL SET $0007
|
||||
ODFSAV SET $0003
|
||||
OEXPLE SET $0007
|
||||
OILEN SET $0008
|
||||
OLEN SET $0022
|
||||
OMTLEN SET $0004
|
||||
OMWASA SET $000C
|
||||
OMWOSA SET $000A
|
||||
ORSPAC SET $0004
|
||||
OSCDLE SET $0023
|
||||
OSCLEN SET $000D
|
||||
OSDPSA SET $0014
|
||||
OSPLEN SET $0004
|
||||
OSTBLZ SET $0006
|
||||
OSTLEN SET $0004
|
||||
OSULEN SET $0006
|
||||
OSVCSA SET $0020
|
||||
OSWCSA SET $0017
|
||||
OSWWSA SET $0021
|
||||
OTIMER SET $0008
|
||||
OTLEN SET $0007
|
||||
OTNRLE SET $0003
|
||||
OVBLEN SET $0007
|
||||
OWISSA SET $0006
|
||||
PHRNUM SET $008F
|
||||
PHRSAV SET $EB9B
|
||||
PLAVEC SET $740B
|
||||
PLAYSA SET $A054
|
||||
PLSIZE SET $009D
|
||||
POWVEC SET $52A4
|
||||
RAMSAV SET $A1C2
|
||||
ROMSAV SET $7C6D
|
||||
SAVEDY SET $0004
|
||||
SRAMSA SET $DC94
|
||||
STACK SET $BF00
|
||||
STACKA SET $0040
|
||||
STACKY SET $0002
|
||||
SYSVEC SET $31D3
|
||||
TODEND SET $CFB6
|
||||
VERSIO SET $0011
|
||||
ZNMTSK SET $5C06
|
||||
_A SET $ED96
|
||||
_AT SET $EC6D
|
||||
_ATTAC SET $ECBD
|
||||
_B SET $EDB3
|
||||
_BATTL SET $ED08
|
||||
_BONUS SET $EC67
|
||||
_C SET $EDB9
|
||||
_COMPU SET $ED39
|
||||
_CONGR SET $ED0F
|
||||
_CREDI SET $EC7B
|
||||
*_CRYST SET $EC89 Removed by =rj= 3/24 so I can get the plural
|
||||
_DAMAG SET $ECC4
|
||||
_DEFEA SET $ED23
|
||||
_DICKE SET $ED8B
|
||||
_E SET $ED6D
|
||||
_EMPTY SET $EC83
|
||||
_ENGAG SET $ED45
|
||||
_ENGIN SET $ECA0
|
||||
_ENTER SET $ECD3
|
||||
_F SET $ED9A
|
||||
_FOR SET $EC97
|
||||
_GAME SET $EC5D
|
||||
_H SET $ED98
|
||||
_I SET $EDA2
|
||||
_ILLIA SET $ED65
|
||||
_IN SET $ED52
|
||||
_INTER SET $ECB1
|
||||
_IS SET $ED42
|
||||
_J SET $EDB5
|
||||
_L SET $ED9C
|
||||
_LECTR SET $ED6F
|
||||
_M SET $EDB7
|
||||
_MAKE SET $ED82
|
||||
_MINE SET $ED7A
|
||||
_N SET $ED92
|
||||
_NOW SET $ED4E
|
||||
_O SET $ED94
|
||||
_OF SET $EDC1
|
||||
_OVER SET $EC62
|
||||
_PLANE SET $ECF0
|
||||
_PLAYE SET $EC70
|
||||
_PREPA SET $ED00
|
||||
_R SET $EDB1
|
||||
_RANGE SET $ED5D
|
||||
_RICHA SET $EDA4
|
||||
_S SET $ED9E
|
||||
_SAM SET $ED87
|
||||
_SAVED SET $EC91
|
||||
_SCANN SET $ED55
|
||||
*_SINIB SET $ECA8 Removed by =rj= 3/24 so I can get the plural
|
||||
_SINIS SET $ED30
|
||||
_SWARM SET $EDBB
|
||||
_T SET $EDA0
|
||||
_TARGE SET $ECCC
|
||||
_THE SET $ED2C
|
||||
_TO SET $ED7F
|
||||
_VOID SET $ECDC
|
||||
_W SET $ED63
|
||||
_WARP SET $EC9B
|
||||
_WARRI SET $ECE8
|
||||
_WITT SET $EDAC
|
||||
_WORKE SET $ECE1
|
||||
_YOU SET $ED1F
|
||||
_ZONE SET $ECFB
|
||||
_1 SET $EC77
|
||||
_2 SET $EC79
|
||||
.A SET $007F
|
||||
.AT SET $0050
|
||||
.ATTAC SET $005D
|
||||
.B SET $0089
|
||||
.BATTL SET $0067
|
||||
.BONUS SET $004F
|
||||
.C SET $008C
|
||||
.COMPU SET $006D
|
||||
.CONGR SET $0068
|
||||
.CREDI SET $0054
|
||||
*.CRYST SET $0056 Removed by =rj= 3/24 so I can get the plural
|
||||
.DAMAG SET $005E
|
||||
.DEFEA SET $006A
|
||||
.DICKE SET $007C
|
||||
.DTISA SET $5994
|
||||
.E SET $0076
|
||||
.EMPTY SET $0055
|
||||
.ENGAG SET $006F
|
||||
.ENGIN SET $005A
|
||||
.ENTER SET $0060
|
||||
.F SET $0081
|
||||
.FOR SET $0058
|
||||
.GAME SET $004D
|
||||
.H SET $0080
|
||||
.I SET $0085
|
||||
.ILLIA SET $0075
|
||||
.IN SET $0071
|
||||
.INTER SET $005C
|
||||
.IS SET $006E
|
||||
.J SET $008A
|
||||
.L SET $0082
|
||||
.LECTR SET $0077
|
||||
.M SET $008B
|
||||
.MAKE SET $007A
|
||||
.MINE SET $0078
|
||||
.N SET $007D
|
||||
.NOW SET $0070
|
||||
.O SET $007E
|
||||
.OF SET $008E
|
||||
.OVER SET $004E
|
||||
.PLANE SET $0064
|
||||
.PLAYE SET $0051
|
||||
.PREPA SET $0066
|
||||
.R SET $0088
|
||||
.RANGE SET $0073
|
||||
.RICHA SET $0086
|
||||
.S SET $0083
|
||||
.SAM SET $007B
|
||||
.SAVED SET $0057
|
||||
.SCANN SET $0072
|
||||
*.SINIB SET $005B Removed by =rj= 3/24 so I can get the plural
|
||||
.SINIS SET $006C
|
||||
.SWARM SET $008D
|
||||
.T SET $0084
|
||||
.TARGE SET $005F
|
||||
.THE SET $006B
|
||||
.TO SET $0079
|
||||
.VOID SET $0061
|
||||
.W SET $0074
|
||||
.WARP SET $0059
|
||||
.WARRI SET $0063
|
||||
.WITT SET $0087
|
||||
.WORKE SET $0062
|
||||
.YOU SET $0069
|
||||
.ZONE SET $0065
|
||||
.$CHR SET $0023
|
||||
.$COLR SET $00FF
|
||||
.$DISP SET $5583
|
||||
.$DLOF SET $0072
|
||||
.$DSOF SET $0000
|
||||
.$ORG0 SET $0000
|
||||
.$ORG1 SET $0000
|
||||
.$ORG2 SET $0000
|
||||
.$ORG3 SET $0000
|
||||
.$ORG4 SET $0000
|
||||
.$ORG5 SET $0000
|
||||
.$ORG6 SET $0000
|
||||
.$ORG7 SET $0000
|
||||
.$PP SET $0000
|
||||
.$PRIO SET $FFFF
|
||||
.$PTR SET $D77C
|
||||
.$SOUN SET $FFFF
|
||||
.$TMOD SET $0000
|
||||
.$WECO SET $0045
|
||||
.$$ SET $7C58
|
||||
.1 SET $0052
|
||||
.2 SET $0053
|
|
@ -0,0 +1,32 @@
|
|||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* *
|
||||
* *
|
||||
* BBBB OOO BBBB '' SSSS V V 11 77777 *
|
||||
* B B O O B B '' S V V 1 1 7 *
|
||||
* BBBB O O BBBB ' SSS V V 1 7 *
|
||||
* B B O O B B S V V 1 7 *
|
||||
* BBBB OOO BBBB SSSS V 11111 7 *
|
||||
* *
|
||||
* S I N I S T A R 17 *
|
||||
* *
|
||||
* A game by Sam Dicker, Noah Falstein, Richard Witt and Bob Mical *
|
||||
* Copyright (c) 1983 by Williams Electronics Inc. *
|
||||
* *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
SINISTA SET *
|
||||
INCLUDE [SAM]tSTART
|
||||
|
||||
* NLIST
|
||||
|
||||
LEVEL SET 0
|
||||
|
||||
INCLVER BOB,BOBS.SYM
|
||||
INCLVER BOB,BOBS.SET
|
||||
* LIST
|
||||
|
||||
INCLVER BOB,B0
|
||||
INCLVER BOB,B1 << TAKEN OUT ON SAM'S REQUEST 27 FEB 83 >>
|
||||
INCLVER BOB,B2
|
||||
|
||||
ENDTEST
|
||||
END
|
|
@ -0,0 +1,122 @@
|
|||
SYMVER ALHSTD,$CC0A
|
||||
SYMVER ALIVE,$4FE2
|
||||
SYMVER AMDEMO,$9896
|
||||
SYMVER AMSINI,$6C59
|
||||
SYMVER ANISCS,$536C
|
||||
SYMVER ANPLAY,$31D8
|
||||
SYMVER APIA2,$48F3
|
||||
SYMVER ATTRAC,$7C64
|
||||
SYMVER BOMBS,$A013
|
||||
SYMVER C1SLEE,$46A8
|
||||
SYMVER CDTASK,$528F
|
||||
SYMVER CLRSCR,$3245
|
||||
SYMVER CMSCOR,$CD32
|
||||
SYMVER CREDIT,$BF1B
|
||||
SYMVER DCONS,$CA01
|
||||
SYMVER DCREDI,$338E
|
||||
SYMVER DCTRL,$CA00
|
||||
SYMVER DDEST,$CA04
|
||||
SYMVER DEATH,$5832
|
||||
SYMVER DEATHF,$9895
|
||||
SYMVER DHIGH,$CA06
|
||||
SYMVER DIE,$4755
|
||||
SYMVER DISP,$5583
|
||||
SYMVER DSOUR,$CA02
|
||||
SYMVER FINISH,$A016
|
||||
SYMVER FRAME,$33B4
|
||||
SYMVER FREE,$9873
|
||||
SYMVER GAMOVE,$320C
|
||||
SYMVER HEXBCD,$4B9E
|
||||
SYMVER HSTDEN,$2FE1
|
||||
SYMVER HSTDMR,$A1BD
|
||||
SYMVER HSTK,$BF00
|
||||
SYMVER IAMODE,$2ED4
|
||||
SYMVER ICRYST,$26A1
|
||||
SYMVER INDEXS,$A225
|
||||
SYMVER INIMPU,$A1BC
|
||||
SYMVER INISIN,$327E
|
||||
SYMVER IPLAN2,$0CCB
|
||||
SYMVER IRWOCR,$7495
|
||||
SYMVER IWARRI,$19E1
|
||||
SYMVER IWORKE,$129D
|
||||
SYMVER KABOOM,$6C6D
|
||||
SYMVER KRSINI,$59B0
|
||||
SYMVER LEFEDG,$002C
|
||||
SYMVER MEMCTL,$C900
|
||||
SYMVER MESLEN,$EF8C
|
||||
SYMVER NAPV,$F009
|
||||
SYMVER NEWTUN,$3891
|
||||
SYMVER NPLAYE,$988A
|
||||
SYMVER OBOTTO,$0005
|
||||
SYMVER OCALPR,$0013
|
||||
SYMVER ODYNOV,$0004
|
||||
SYMVER OEXEC,$0002
|
||||
SYMVER OINDEX,$FFFE
|
||||
SYMVER OLVEL,$000E
|
||||
SYMVER OMWABO,$000A
|
||||
SYMVER OPENT,$49C7
|
||||
SYMVER OSCWCR,$0011
|
||||
SYMVER OSEED1,$0000
|
||||
SYMVER OSEED2,$0002
|
||||
SYMVER OSMIS,$001D
|
||||
SYMVER OSSCWS,$000A
|
||||
SYMVER OSVEL,$000C
|
||||
SYMVER OUTB35,$E20F
|
||||
SYMVER OUTBCD,$E206
|
||||
SYMVER OUTC35,$E209
|
||||
SYMVER OUTCHR,$E200
|
||||
SYMVER OUTP35,$E20C
|
||||
SYMVER OUTP68,$E203
|
||||
SYMVER PANMAS,$9880
|
||||
SYMVER PCLRSC,$320F
|
||||
SYMVER PCRAM,$981E
|
||||
SYMVER PHRLEN,$EC5D
|
||||
SYMVER PIECEN,$5002
|
||||
SYMVER PIECEP,$A014
|
||||
SYMVER PIECET,$4FB2
|
||||
SYMVER PINK,$0033
|
||||
SYMVER PLAGRA,$A1BA
|
||||
SYMVER PLAIND,$5035
|
||||
SYMVER PLNURA,$A099
|
||||
SYMVER PLURAM,$9FFC
|
||||
SYMVER PLXQUE,$7C6A
|
||||
SYMVER PMEMCT,$BFFF
|
||||
SYMVER PNTSCR,$583A
|
||||
SYMVER PRTASK,$9842
|
||||
SYMVER PSCORE,$9FFD
|
||||
SYMVER QPLSTR,$4DEB
|
||||
SYMVER RAND8R,$47FA
|
||||
SYMVER RAND8,$4808
|
||||
SYMVER RCMOSA,$4A5F
|
||||
SYMVER RSHS,$49C4
|
||||
SYMVER RSTPOP,$6C7C
|
||||
SYMVER RTS,$2E44
|
||||
SYMVER S1L,$1E13
|
||||
SYMVER SCOREA,$A00A
|
||||
SYMVER SINIHI,$001A
|
||||
SYMVER SINIKI,$A03E
|
||||
SYMVER SINIMA,$D77C
|
||||
SYMVER SININD,$9878
|
||||
SYMVER SINISE,$9894
|
||||
SYMVER SINIWI,$0031
|
||||
SYMVER SLEEP1,$46BB
|
||||
SYMVER SLEEP2,$46DB
|
||||
SYMVER SLVEL,$9844
|
||||
SYMVER SNXQUE,$3D4B
|
||||
SYMVER SSLPOS,$9881
|
||||
SYMVER SSSPOS,$9883
|
||||
SYMVER SSVEL,$9846
|
||||
SYMVER STARTS,$2EDA
|
||||
SYMVER STATPG,$2FF9
|
||||
SYMVER SUBPIE,$3CD9
|
||||
SYMVER SYSTIN,$3149
|
||||
SYMVER TASK1,$A15F
|
||||
SYMVER TASK2,$A166
|
||||
SYMVER TASK4,$A16D
|
||||
SYMVER TASK8,$A174
|
||||
SYMVER TDISPE,$5593
|
||||
SYMVER TIMER,$3419
|
||||
SYMVER WCMOSD,$4A84
|
||||
SYMVER WCMOSA,$4A78
|
||||
SYMVER WPLAYE,$9900
|
||||
SYMVER WRXQUE,$7C67
|
|
@ -0,0 +1,14 @@
|
|||
SYMVER BGREY,$0066
|
||||
SYMVER BLUE,$0099
|
||||
SYMVER BURGUNDY,$00CC
|
||||
SYMVER CCURS,$0033
|
||||
SYMVER CDASH,$0027
|
||||
SYMVER CMOS,$CC00
|
||||
SYMVER CREAM,$0022
|
||||
SYMVER DEFSIZ,$0012
|
||||
SYMVER RED,$00DD
|
||||
SYMVER SCRSIZ,$000E
|
||||
SYMVER SILVER,$0055
|
||||
SYMVER TGREY,$0044
|
||||
SYMVER WHITE,$0011
|
||||
SYMVER YELLOW,$00FF
|
|
@ -0,0 +1,30 @@
|
|||
$!!!!!
|
||||
$!
|
||||
$! SINISTAR MEMORY MAP ...
|
||||
$! 0000 - 8BFF Reserved for Sinistar images, executive, tactics, intelligences
|
||||
$! 8C00 - 8FFF Second part of message utility.
|
||||
$! 9000 - 97FF Screen mapped scratch RAM
|
||||
$! 9800 - 98FF Direct Page RAM
|
||||
$! 9900 - BEFF Extended RAM
|
||||
$! BF00 - BF7F Message/Bookkeeping RAM
|
||||
$! BF80 - BFFE DCON scratch pad RAM
|
||||
$! BFFF DCON mirror $C800
|
||||
$! C000 - CFFF I/O ports
|
||||
$! D000 - DEFF Static RAM
|
||||
$! E000 - E1FF Sinistar IRQ routine.
|
||||
$! E200 - EFEF First part of message utility.
|
||||
$! EFF0 - EFFF ROM Vectors
|
||||
$!
|
||||
$!!!!!
|
||||
$ Down [sam.V'VERSION']DIAG.MOT ! lives at $F000
|
||||
$ Down [sam.V'VERSION']IMAGE.MOT
|
||||
$ Down [SAM.V'VERSION']MESSAGE.MOT
|
||||
$ Down [sam.V'VERSION']SAMS.MOT
|
||||
$ Down [witt.V'VERSION']RICHS.MOT
|
||||
$ Down [witt.V'VERSION']RICHS2.MOT
|
||||
$ Down [fals.V'VERSION']NOAHS.MOT
|
||||
$ Down [mica.V'VERSION']BOBS.MOT
|
||||
$ Down [sam.V'VERSION']ontest.mot
|
||||
$!
|
||||
$ WRITE SYS$OUTPUT BELL
|
||||
$ EXIT
|
|
@ -0,0 +1,6 @@
|
|||
INCLUDE [SAM]START
|
||||
|
||||
INCLVER SAM,SINISTAR.EQU
|
||||
EXPATCH
|
||||
|
||||
|
|
@ -0,0 +1,151 @@
|
|||
INCLUDE [SAM]START
|
||||
|
||||
|
||||
* On POWERUP, reset the RAM High Score Table
|
||||
PUSHORG ROMSAVE
|
||||
|
||||
VECTOR POWVECT
|
||||
|
||||
LDX #RAMHSC Address of RAM table
|
||||
LDD #$0001 Use 0001 for initialization base
|
||||
JMP HSTDIM Go set table (returns through HSTDIM)
|
||||
|
||||
|
||||
* On RESET HIGH SCORE Request
|
||||
ROUTINE RSHS
|
||||
|
||||
LDX #CMOSHSC Address of CMOS High Score table
|
||||
LDD #$0003 Use 30,000 as base value
|
||||
JSR HSTDIM Do it
|
||||
LDX #RAMHSC Address of RAM High Score table
|
||||
LDD #$0001 Use 10,000 as base value
|
||||
JSR HSTDIM Do it
|
||||
|
||||
CLR $CA01 Clear the screen
|
||||
JSR CLRSCR
|
||||
|
||||
TEXT $4F,$30
|
||||
PHRASE WHITE,68,HIGH,SCORE,TABLE,RESET
|
||||
|
||||
LDA #$7F Sleep for 7f
|
||||
JSR NAPV
|
||||
|
||||
RTS
|
||||
|
||||
|
||||
*******************************************************************************
|
||||
* HSTDIM
|
||||
* Routine sets up HSENTCT values starting at X, uses D as base value
|
||||
|
||||
HSTDIM PSHS D,X,Y,U
|
||||
|
||||
LDU #$9045 Starting addition to base value
|
||||
|
||||
LDX #CMOSSD Load saved random seed
|
||||
JSR RCMOSA from CMOS
|
||||
INCA Bump to next
|
||||
ANDA #3 Keep the value from 0 to 3
|
||||
LEAX -2,X Restore pointer to CMOSSD
|
||||
JSR WCMOSA Write the new value
|
||||
ASLA Turn into word index
|
||||
LDY #HSISWE Get address of starting addresses table
|
||||
LDY A,Y Get this starting address
|
||||
|
||||
LDX 2,S Restore starting location passed in X
|
||||
|
||||
LDB #HSENTCT Number of entries
|
||||
PSHS B
|
||||
|
||||
1$ LDD 1,S Restore base value
|
||||
JSR WCMOSD Stuff it at X
|
||||
|
||||
TFR U,D Get addition
|
||||
JSR WCMOSD Stuff it at X
|
||||
EXG A,B Add the shuffle value
|
||||
ADDA #$35 to the low order digits
|
||||
DAA
|
||||
EXG A,B
|
||||
ADDA #$97 and then decrease the two high digits
|
||||
DAA by three
|
||||
TFR D,U Save the additive value
|
||||
|
||||
LDB #3 3 initials per pass
|
||||
|
||||
4$ LDA ,Y+ Get next initial
|
||||
JSR WCMOSA Stuff it at X
|
||||
DECB Another initial for this entry?
|
||||
BNE 4$ Branch if so
|
||||
|
||||
CMPY #HSISUS+(3*HSENTCT) Are we at the end of the table?
|
||||
BNE 207$ Branch if not
|
||||
LDY #HSISUS else start from beginning of table
|
||||
|
||||
207$ DEC ,S Decrement the number of entries made
|
||||
BNE 1$ and loop until all have been done
|
||||
|
||||
LEAS 1,S Restore stack
|
||||
|
||||
JSR CLRHSLE Clear High Score Last Entered pointers
|
||||
|
||||
PULS D,X,Y,U,PC Bye for now
|
||||
|
||||
|
||||
*******************************************************************************
|
||||
* CLRHSLE
|
||||
* Clear the High Score Last Entered pointers
|
||||
CLRHSLE CLRD
|
||||
STD HSLEN1
|
||||
STD HSLEN2
|
||||
STD HSRLN1
|
||||
STD HSRLN2
|
||||
RTS
|
||||
|
||||
|
||||
* Pointers to initial initials
|
||||
HSISWE FDB HSISSD,HSISNF,HSISBM,HSISRW
|
||||
|
||||
|
||||
* Table of initials, including everyone in the software department plus
|
||||
* many other people who were key to the successful completion of Sinistar!
|
||||
* NB: This table must have at least as many entries as the maximum number
|
||||
* of entries in either the RAM or CMOS tables (currently 30 18 March 1983)
|
||||
HSISUS FCB 17.,25.,14. GOD Because He Is
|
||||
FCB 21.,11.,35. KAY Kay Anderson
|
||||
FCB 18.,15.,13. HEC Harry Cline
|
||||
HSISSD FCB 29.,11.,23. SAM Sam Dicker
|
||||
FCB 21.,32.,14. KVD Kristina Donofrio
|
||||
HSISNF FCB 24.,39.,16. N-F Noah Falstein
|
||||
FCB 21.,20.,16. KJF Ken Fedesna
|
||||
FCB 21.,11.,17. KAG Ken Graham
|
||||
FCB 16.,28.,17. FRG Rich Grande
|
||||
FCB 35.,11.,21. YAK Jack Haeger
|
||||
FCB 20.,20.,21. JJK John Kotlarik
|
||||
FCB 21.,16.,22. KFL Ken Lantz
|
||||
FCB 26.,20.,23. PJM Pierre Maloka
|
||||
FCB 14.,25.,13. DOC Keith McMillen
|
||||
FCB 20.,22.,23. JLM John Meissen
|
||||
FCB 15.,39.,36. E-Z Mike Metz
|
||||
HSISBM FCB 38.,23.,38. =M= Robert J. Mical
|
||||
FCB 30.,19.,23. TIM Tim Murphy
|
||||
FCB 20.,28.,24. JRN John Newcomer
|
||||
FCB 30.,25.,23. TOM Tom O'Meara
|
||||
FCB 26.,16.,36. PFZ Bill Pfutzengesundheit
|
||||
FCB 28.,30.,26. RTP Rudy Plemich
|
||||
FCB 12.,16.,14. BFD Dave Rzepka
|
||||
FCB 23.,12.,29. MBS Marc Stanis
|
||||
FCB 23.,28.,29. MRS Mike Stroll
|
||||
FCB 15.,20.,29. EJS Ed Suchocki
|
||||
FCB 29.,30.,31. STU Stewart West
|
||||
HSISRW FCB 33.,19.,30. WIT Rich Witt
|
||||
FCB 23.,25.,23. MOM Because She Is
|
||||
FCB 16.,11.,13. FAC Future Absurdity Commission
|
||||
|
||||
FCC 'ROBERT J. MICAL' Hey, who's that guy?
|
||||
|
||||
PULLORG ROMSAVE
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,614 @@
|
|||
INCLUDE [SAM]START
|
||||
|
||||
INCLVER SAM,SINISTAR.EQU
|
||||
|
||||
|
||||
PUSHORG ROMSAVE
|
||||
|
||||
|
||||
ROUTINE HSTDENT
|
||||
*******************************************************************************
|
||||
* HSTDENT
|
||||
* High Score To Date Entry routine
|
||||
* Clears the system and takes complete control
|
||||
|
||||
JSR CLRHSLE Clear High Score Last Entered pointers
|
||||
|
||||
LDX #PSCORE Get address of current player's score
|
||||
LDY #PSCORE-PLURAM+PLNURAM Get addr of other player's score
|
||||
LDA SCOREAD Get current player value
|
||||
BPL 2$ and branch if PSCORE has player 1's score
|
||||
EXG X,Y else swap registers so Y points to p.1 score
|
||||
2$ PSHS X,Y Protect them through the tempest
|
||||
JSR SYSTINI Boom
|
||||
NEW_SLEEP TASK1,HSTDMS,OHSMMR Start up the master task
|
||||
PULS Y,U Restore Score pointers
|
||||
STY OHSMP1,X Save player one pointer
|
||||
STU OHSMP2,X and Player two
|
||||
LDA NPLAYER
|
||||
STA OHSMNP,X
|
||||
CLR NPLAYER
|
||||
JMP STARTS Go start up the task system
|
||||
|
||||
*
|
||||
* High Score To Date Master Task
|
||||
* This one runs until the others are die, and then restarts the system
|
||||
*
|
||||
|
||||
HSTDMS LDD #(60.*1)
|
||||
JSR TIMER
|
||||
|
||||
LDX #ALHSTD Test if operator allows HSTD entry
|
||||
JSR RCMOSA and if not
|
||||
BEQ 10$ then branch to exit timer
|
||||
|
||||
TFR Y,U
|
||||
|
||||
LDA #$13 Initialize for Player ONE
|
||||
STA SCOREAD
|
||||
LDY OHSMP1,U
|
||||
JSR HSTEST Go test/install player 1 score
|
||||
STA OHSMFLG,U
|
||||
|
||||
TFR U,Y Restore workspace pointer
|
||||
SLEEP HERE
|
||||
TST HSTDFLG
|
||||
BNE 3$
|
||||
SLEEP LOOP
|
||||
|
||||
3$ TFR Y,U
|
||||
LDA OHSMNP,U Test if this was a one or two player game
|
||||
DECA and
|
||||
BEQ 1$ if one player then skip to page-display
|
||||
|
||||
LDA #7
|
||||
STA PCRAM
|
||||
LDA #$B4 Initialize for Player Two
|
||||
STA SCOREAD
|
||||
LDY OHSMP2,U
|
||||
JSR HSTEST Go test/install player 2 score
|
||||
ORA OHSMFLG,U
|
||||
STA OHSMFLG,U
|
||||
|
||||
TFR U,Y
|
||||
SLEEP HERE
|
||||
TST HSTDFLG
|
||||
BNE 1$
|
||||
SLEEP LOOP
|
||||
|
||||
1$ TST OHSMFLG,Y Was the flag ever set?
|
||||
BNE 2$ If so, then we've made High Score entry, skip
|
||||
|
||||
10$ LDD #(60.*4) Sleep for 4 seconds to display GAME OVER
|
||||
JSR TIMER
|
||||
|
||||
2$ JMP IAMODE Restart system
|
||||
|
||||
|
||||
*
|
||||
* Test For High Score to Date
|
||||
* If a High Score is found, creates a task to get the initials and make
|
||||
* the entry into the appropriate table
|
||||
* On entry, Y points to the player's score
|
||||
*
|
||||
* On exit, A is zero and HSTDFLG is non-zero if not high-score,
|
||||
* opposite if high-score
|
||||
*
|
||||
|
||||
HSTEST PSHS B,X,Y,U
|
||||
|
||||
CLR HSTDFLG Clear the HSTD Flag
|
||||
|
||||
LDX #CMOSLSC Pointer to CMOS Lowest Score
|
||||
JSR CMPSCR Go see if this one is greater than CMOS lowest
|
||||
BCS 1$ and branch install if it is
|
||||
|
||||
LDX #RAMLSC else test this one with RAM lowest score
|
||||
JSR CMPSCR and
|
||||
BCS 1$ branch install if it is
|
||||
|
||||
CLRA else return a sliver of sleep time
|
||||
COM HSTDFLG
|
||||
PULS B,X,Y,U,PC and return without High Score installation
|
||||
|
||||
*
|
||||
* OK, this is a high score
|
||||
* Set up to get player's initials
|
||||
* On entry, Y points to player's score
|
||||
* X points to low entry of table where score is to be installed
|
||||
|
||||
1$ PSHS X,Y Save our pointers
|
||||
|
||||
JSR PCLRSCR Clear the bottom of the screen
|
||||
JSR ANPLAY and announce the current player
|
||||
|
||||
TEXT $4F,$4F
|
||||
PHRASE BLUE,68,CONGRATULATIONS
|
||||
TEXT $50,$4E
|
||||
PHRASE YELLOW,68,CONGRATULATIONS
|
||||
TEXT $48,$49
|
||||
PHRASE WHITE,68,YOUR,SCORE,RANKS
|
||||
TEXT $40,$49
|
||||
PHRASE WHITE,68,AMONG,THE,TOP,30
|
||||
TEXT $38,$53
|
||||
PHRASE CREAM,68,GIVE,3,INITIALS
|
||||
JSR JFTEXT Joystick/Fire Buttons Message subroutine
|
||||
|
||||
|
||||
NEW_SLEEP TASK2,CENTRY,OHSTDMR Make the task to get the entry
|
||||
PULS Y,U Restore our pointers
|
||||
|
||||
STY OHSTPTR,X Table pointer
|
||||
STU OHSPSCR,X Player's score
|
||||
|
||||
LDA #3 Size of this entry request (3 initials)
|
||||
STA OHSESZ,X
|
||||
LDD #HSTDINS Post-Processing address
|
||||
STD OHSPPR,X
|
||||
LDD #$1E77 Screen Base address
|
||||
STD OHSBADR,X
|
||||
LDA #CBLANK+1 Initialize current letter
|
||||
STA OHSCLT,X
|
||||
LDD #MAXETV Maximum time to enter initials
|
||||
STD OHSETM,X
|
||||
COMA Mark A register to designate task queued
|
||||
PULS B,X,Y,U,PC and return it to calling routine
|
||||
|
||||
|
||||
* The CENTRY task returns here for post-processing
|
||||
* Install this very entry
|
||||
HSTDINS LDX OHSTPTR,U Get pointer to correct table
|
||||
CMPX #CMOSLSC Is this table CMOS?
|
||||
BNE 5$ Nope, so go do RAM only
|
||||
|
||||
JSR HSTDTL Yes, CMOS. Get table pointer into Y
|
||||
|
||||
LDX HSLEN1 Is first CMOS entry used?
|
||||
BNE 1$ Yes, so branch to special test
|
||||
STY HSLEN1 else No, so make this one the first entry
|
||||
BRA 2$ and skip to RAM test
|
||||
|
||||
1$ STY HSLEN2 Save this as second entry
|
||||
CMPY HSLEN1 Is this one below (higher) in table?
|
||||
BHI 2$ If not above (lower) or same, skip
|
||||
LEAX SCRSIZ,X else bump other one
|
||||
STX HSLEN1 down one entry
|
||||
|
||||
2$ JSR HSTDDT Go move this entry in
|
||||
|
||||
LDX #RAMLSC Now install into RAM table
|
||||
|
||||
5$ JSR HSTDTL Go get pointer into RAM table
|
||||
|
||||
LDX HSRLN1 Is first RAM entry already dirty?
|
||||
BNE 3$ Yes, so branch to do extra stuff
|
||||
STY HSRLN1 else No, so
|
||||
BRA 4$ store pointer here and split
|
||||
|
||||
3$ STY HSRLN2 Save this pointer
|
||||
CMPY HSRLN1 See above for below (higher)/above (lower)
|
||||
BHI 4$ decsription of what's being done here
|
||||
LEAX SCRSIZ,X
|
||||
STX HSRLN1
|
||||
|
||||
4$ JSR HSTDDT Go install this entry into RAM
|
||||
|
||||
COM HSTDFLG Flip flag to designate task done
|
||||
TFR U,Y Restore Y register and
|
||||
JMP DIE go die
|
||||
|
||||
|
||||
|
||||
|
||||
******************************************************************************
|
||||
* CMPSCR
|
||||
* Compares player score at Y with CMOS/RAM score at X,
|
||||
* returns with carry set if Y-score >= X-score
|
||||
|
||||
CMPSCR PSHS D,X,Y
|
||||
|
||||
LDB #4
|
||||
|
||||
1$ JSR RCMOSA
|
||||
CMPA ,Y+
|
||||
BLO 2$
|
||||
BHI 3$
|
||||
DECB
|
||||
BNE 1$
|
||||
|
||||
2$ ORCC #1
|
||||
PULS D,X,Y,PC
|
||||
|
||||
3$ ANDCC #$FE
|
||||
PULS D,X,Y,PC
|
||||
|
||||
******************************************************************************
|
||||
* BLKMOV
|
||||
* MOVE A BYTES FROM [X] TO [Y]
|
||||
* All registers are restored on exit
|
||||
|
||||
BLKMOV PSHS D,X,Y
|
||||
|
||||
1$ LDB ,X+
|
||||
STB ,Y+
|
||||
DECA
|
||||
BNE 1$
|
||||
|
||||
PULS D,X,Y,PC
|
||||
|
||||
|
||||
******************************************************************************
|
||||
* HSTDTL
|
||||
* High Score To Date Table Lookup
|
||||
HSTDTL PSHS X
|
||||
|
||||
LDY OHSPSCR,U
|
||||
|
||||
LDA #HSENTCT Get number of entries per table
|
||||
PSHS A
|
||||
|
||||
100$ DEC ,S Decrement entry count
|
||||
BEQ 101$ and if 0, then this score is the table-topper
|
||||
|
||||
LEAX -SCRSIZ,X Get next higher entry in table
|
||||
JSR CMPSCR Test this score against player's
|
||||
BCS 100$ Loop while player score is >= score at X
|
||||
LEAX SCRSIZ,X
|
||||
|
||||
101$ PSHS X
|
||||
LDX 3,S Restore table bottom pointer
|
||||
TFR X,Y Get copy of it in Y
|
||||
LDA #SCRSIZ Get entry size
|
||||
|
||||
102$ LEAX -SCRSIZ,X Bump X up [down] table
|
||||
CMPX ,S
|
||||
BLO 103$
|
||||
JSR BLKMOV else move this block from X to Y
|
||||
LEAY -SCRSIZ,Y and bump up [down] Y too
|
||||
BRA 102$ and do it again
|
||||
|
||||
103$ LEAS 5,S
|
||||
RTS
|
||||
|
||||
|
||||
******************************************************************************
|
||||
* HSTDDT
|
||||
HSTDDT TFR Y,X
|
||||
LDY OHSPSCR,U Restore pointer to player's score
|
||||
|
||||
LDB #4 CMOS-move 4 bytes
|
||||
|
||||
104$ LDA ,Y+ Go
|
||||
JSR WCMOSA do
|
||||
DECB it
|
||||
BNE 104$ to it
|
||||
|
||||
JSR CENINS
|
||||
|
||||
RTS
|
||||
|
||||
|
||||
|
||||
ROUTINE OPENT
|
||||
******************************************************************************
|
||||
* OPENT
|
||||
* This routine gets the Operator Message and saves it to CMOS
|
||||
*
|
||||
|
||||
LDD ,S Get return address
|
||||
STD OPENRTN and save for later
|
||||
|
||||
CLR PANMASK Turn off all switch-control
|
||||
|
||||
JSR SYSTINI Wipe clean thy slate, oh master
|
||||
NEW_SLEEP TASK2,OPENMS,OHSTDMR Start up the master task
|
||||
JMP STARTS Start up the system
|
||||
|
||||
*
|
||||
* This is a pseudo-entry point for the CENTRY task ... whereas the HSTD Entry
|
||||
* queues CENTRY directly, operator entry does the pre-processing
|
||||
* within head of the task itself. Once the CENTRY variables are set,
|
||||
* a jump into the CENTRY routine is taken
|
||||
|
||||
OPENMS CLR $CA01 Clear the DMA constant
|
||||
JSR CLRSCR Clear the screen
|
||||
|
||||
TEXT $50,$36
|
||||
PHRASE WHITE,68,OPERATOR,MESSAGE,ENTRY
|
||||
JSR JFTEXT Joystick/fire text
|
||||
|
||||
|
||||
LDA #CBLANK Save a blank for this current letter
|
||||
LDB #OPENLEN*2
|
||||
LDX #CMOSOPE
|
||||
1$ JSR WCMOSA
|
||||
DECB
|
||||
BNE 1$
|
||||
|
||||
STA OHSCLT,Y
|
||||
LDA #OPENLEN Operator message entry length
|
||||
STA OHSESZ,Y
|
||||
LDD #OPENINS Post-processing address after input is complete
|
||||
STD OHSPPR,Y
|
||||
LDD #OPENMTM Maximum time for Operator message entry
|
||||
STD OHSETM,Y
|
||||
|
||||
LDD #$3818 Force second screen base address
|
||||
STD OHSBADR,Y into task workspace
|
||||
JSR ALLCURS and then go draw the second line of cursors
|
||||
|
||||
LDD #$4018 Set up the first screen base address
|
||||
STD OHSBADR,Y
|
||||
|
||||
JMP CENTRY Go continue with the Character Entry task
|
||||
|
||||
|
||||
* OPENINS
|
||||
* The CENTRY routine returns here for post-processing of the Operator Message
|
||||
* first line
|
||||
|
||||
OPENINS LDX #CMOSOPE Get address for first line of operator message
|
||||
|
||||
JSR CENINS Go install the operator input into CMOS
|
||||
|
||||
LDD #OPENI2 Get the post-processing address for the second
|
||||
STD OHSPPR,Y line of operator message entry
|
||||
LDD #$3818 Get the secpond screen base address
|
||||
STD OHSBADR,Y
|
||||
JMP CENTRY Go continue the task
|
||||
|
||||
* The CENTRY task returns here for post-processing of the Operator's second
|
||||
* line of text
|
||||
|
||||
OPENI2 LDX #CMOSO2 Get CMOS address for second line of operator
|
||||
JSR CENINS text. Go install this input
|
||||
|
||||
JSR SYSTINI Bomb out the system
|
||||
LDS #HSTK Restore the stack pointer
|
||||
JMP [OPENRTN] and go back from whence we came
|
||||
|
||||
|
||||
******************************************************************************
|
||||
* CENINS
|
||||
* Character Entry Install subroutine
|
||||
* Installs OHSESZ characters starting at OHSINIT into the CMOS locations
|
||||
* pointed to by X
|
||||
* ENTRY:
|
||||
* X has address in CMOS for move
|
||||
* U has task workspace address
|
||||
|
||||
CENINS PSHS D,Y
|
||||
|
||||
LEAY OHSINIT,U Get literal address of characters
|
||||
|
||||
LDB OHSESZ,U Get character count
|
||||
|
||||
10$ LDA ,Y+ Get next character
|
||||
JSR WCMOSA Write it to CMOS
|
||||
DECB Countdown
|
||||
BNE 10$ and loop until done
|
||||
|
||||
PULS D,Y,PC
|
||||
|
||||
|
||||
******************************************************************************
|
||||
* WRCURS
|
||||
* Write cursor of color B at the current offset
|
||||
*
|
||||
|
||||
WRCURS PSHS D,X
|
||||
|
||||
JSR MAKSCX
|
||||
LEAX -$200,X Adjust for cursor being below letters
|
||||
LDA #CCURS
|
||||
JSR OUTCHR
|
||||
|
||||
PULS D,X,PC
|
||||
|
||||
******************************************************************************
|
||||
* WRCLT
|
||||
* Write the current letter at the current offset
|
||||
|
||||
WRCLT PSHS D,X,Y,U
|
||||
|
||||
JSR MAKSCX
|
||||
LDA OHSCLT,U
|
||||
LDB #YELLOW
|
||||
JSR OUTCHR
|
||||
|
||||
PULS D,X,Y,U,PC
|
||||
|
||||
******************************************************************************
|
||||
* ERCLT
|
||||
* Erases the letter at the current offset
|
||||
|
||||
ERCLT PSHS D,X
|
||||
|
||||
JSR MAKSCX
|
||||
STX DDEST
|
||||
LDX #$0608!X$404
|
||||
STX DHIGH
|
||||
CLR DCONS
|
||||
LDA #$12
|
||||
STA DCTRL
|
||||
|
||||
PULS D,X,PC
|
||||
|
||||
|
||||
******************************************************************************
|
||||
* MAKSCX
|
||||
* Makes a screen address in X based on the base address in OHSBADR,U and
|
||||
* the current offset in OHSCPS,U (times 8)
|
||||
|
||||
MAKSCX PSHS D
|
||||
|
||||
LDA OHSCPS,U
|
||||
LDB #8
|
||||
MUL
|
||||
ADDD OHSBADR,U
|
||||
TFR D,X
|
||||
|
||||
PULS D,PC
|
||||
|
||||
|
||||
|
||||
******************************************************************************
|
||||
* ALLCURS
|
||||
|
||||
ALLCURS PSHS D,U
|
||||
|
||||
TFR Y,U
|
||||
|
||||
LDB OHSESZ,Y
|
||||
STB OHSCPS,Y
|
||||
LDB #BLUE
|
||||
|
||||
10$ DEC OHSCPS,Y
|
||||
BMI 20$
|
||||
JSR WRCURS
|
||||
BRA 10$
|
||||
|
||||
20$ INC OHSCPS,Y
|
||||
|
||||
PULS D,U,PC
|
||||
|
||||
|
||||
******************************************************************************
|
||||
* JFTEXT
|
||||
* Write the Joystick/Fire Button Message to the screen
|
||||
|
||||
JFTEXT PSHS D,X,Y
|
||||
|
||||
TEXT $30,$50
|
||||
PHRASE CREAM,68,USE,JOYSTICK,TO
|
||||
TEXT $28,$46
|
||||
PHRASE CREAM,68,MAKE,LETTER,ENTRY
|
||||
|
||||
|
||||
PULS D,X,Y,PC
|
||||
|
||||
******************************************************************************
|
||||
* CENTRY
|
||||
* Character entry routine
|
||||
* Gets entry from Joystick/Buttons, enters into current task workspace
|
||||
*
|
||||
* This is a segment of a task. Either the player's initials or the operator
|
||||
* entry can be made through here. The return address from this task segment
|
||||
* is specified in OHSBADR. When the return is finally taken, the
|
||||
* results of the character input remain in the task workspace
|
||||
*
|
||||
* WANTS:
|
||||
* OHSCLT (1) current letter set (initials set to "A", op-entry to " ")
|
||||
* OHSETM (2) maximum time to make entry
|
||||
* OHSESZ (1) entry size (Initials set to 3, operator entry to 20.)
|
||||
* OHSPPR (2) Return address when this portion of the task is completed
|
||||
* OHSBADR (2) Base address for character input
|
||||
*
|
||||
* RETURNS:
|
||||
* Returns to the address specified in OHSPPR for post-processing of
|
||||
* characters.
|
||||
* OHSINIT (20.) characters entered through this routine
|
||||
* if this is the player's initials, only the first 3 count
|
||||
* U Register has address of task workspace
|
||||
|
||||
CENTRY CLR OHSCPS,Y Cursor positioned initialized
|
||||
|
||||
LDA #CBLANK Get a blank character
|
||||
LDB OHSESZ,Y
|
||||
LEAU OHSINIT-1,Y Get the address for the characters
|
||||
10$ STA B,U Store a blank here
|
||||
DECB and
|
||||
BNE 10$ repeat
|
||||
|
||||
LDA #MAXBNC
|
||||
STA OHSBNC,Y
|
||||
|
||||
JSR ALLCURS
|
||||
|
||||
SLEEP HERE Now go to sleep for a bit
|
||||
|
||||
TFR Y,U Save Y register in U
|
||||
LDX OHSETM,U Get our time-out counter and
|
||||
LEAX -1,X decrement and
|
||||
BNE 20$
|
||||
JMP [OHSPPR,U] when time's up, install what we've got
|
||||
20$ STX OHSETM,U else save decremented value
|
||||
|
||||
|
||||
LDB #WHITE Write the cursor at this location
|
||||
JSR WRCURS
|
||||
|
||||
JSR WRCLT
|
||||
|
||||
TST OHSBNC,U Test if the bounce counter has counted down
|
||||
BEQ 30$ and if so then go feel for another input
|
||||
DEC OHSBNC,U else bounce down
|
||||
BRA 100$ and go back to sleep
|
||||
|
||||
30$ JSR APIA2 Go feel for input
|
||||
ANDA #FORWARD+REVERSE+JYLEFT+JYRIGHT Is it one of the ones we like?
|
||||
BEQ 100$ Nah, so get outta here
|
||||
|
||||
LDB #MAXBNC
|
||||
STB OHSBNC,U
|
||||
LDB OHSCLT,U
|
||||
|
||||
CMPA #FORWARD
|
||||
BEQ 50$
|
||||
CMPA #REVERSE
|
||||
BEQ 60$
|
||||
|
||||
PSHS A
|
||||
LDB #MAXBNC*4
|
||||
STB OHSBNC,U
|
||||
LDB #BLUE The current letter has been entered. First, go
|
||||
JSR WRCURS erase the cursor
|
||||
LDB OHSCLT,U
|
||||
LDA OHSCPS,U
|
||||
ADDA #OHSINIT
|
||||
STB A,U
|
||||
PULS A
|
||||
|
||||
CMPA #JYLEFT
|
||||
BEQ 40$
|
||||
|
||||
* Entry is "Joystick Right" bit for Next Letter
|
||||
LDA OHSCPS,U Increment the cursor displacement
|
||||
INCA until
|
||||
CMPA OHSESZ,U it reaches 3, at which point all initials
|
||||
BNE 45$
|
||||
JMP [OHSPPR,U]
|
||||
|
||||
* Entry is Joystick Left for Move to Previous Letter
|
||||
40$ LDA OHSCPS,U Yes. Is cursor displacement at left edge?
|
||||
BEQ 100$
|
||||
DECA
|
||||
|
||||
45$ STA OHSCPS,U
|
||||
ADDA #OHSINIT
|
||||
LDB A,U
|
||||
STB OHSCLT,U
|
||||
BRA 100$ and restart project
|
||||
|
||||
|
||||
* Entry is Joystick Up for Increase Current Letter
|
||||
50$ INCB Go forward
|
||||
CMPB #MAXLET Does this take us beyond the last letter?
|
||||
BLS 65$ no
|
||||
CLRB yes, so wrap-around to first character
|
||||
BRA 65$
|
||||
|
||||
* Entry is Joystick Down for Decrease Current Letter
|
||||
60$ DECB Go backward
|
||||
BPL 65$
|
||||
LDB #MAXLET yes, so wrap-around to last character
|
||||
|
||||
65$ STB OHSCLT,U Save this character as the current one
|
||||
JSR ERCLT
|
||||
|
||||
100$ TFR U,Y Restore the Y register
|
||||
SLEEP LOOP and go sleepy-bye
|
||||
|
||||
PULLORG ROMSAVE
|
||||
|
||||
|
|
@ -0,0 +1,252 @@
|
|||
INCLUDE [SAM]START
|
||||
INCLVER SAM,SINISTAR.EQU
|
||||
|
||||
|
||||
|
||||
PUSHORG ROMSAV
|
||||
|
||||
IFDEF KENSMARQ * Whole file is not included if KENSMARQ is undefined
|
||||
|
||||
******************************************************************************
|
||||
*
|
||||
* Marquee Page
|
||||
* By Ken Lantz and Mike Metz
|
||||
*
|
||||
MARQUEE PSHS Y Now resave Y through the next trial
|
||||
|
||||
* TABLE CONCISTS OF COLUMN OFFSETS BYTES FOLLOWED BY
|
||||
* LENGTH BYTE(S) <BYTES ENCODED WITH LENGTH (IN PIXELS), COLOR,
|
||||
* AND FLAG IF LAST LENGTH IN THIS COLUMN (IE:NEXT BYTE
|
||||
* IS AN OFFSET)>
|
||||
* TABLE TERMINATES WITH ZERO LENGTH OFFSET
|
||||
*
|
||||
*
|
||||
|
||||
LDA #$7 Force Special Effects color E to go red
|
||||
STA PCRAM+$E
|
||||
|
||||
LDY #MARKEY Marquee table
|
||||
LDX #$7225 COLUMN OFFSETS $26 THRU $D0
|
||||
|
||||
OWELL TFR X,D
|
||||
LDA #$72
|
||||
INCB
|
||||
CMPB #$D0
|
||||
LBHI FINSIT
|
||||
TFR D,X
|
||||
|
||||
11$ CLRB ASSUME BLACK AT FIRST
|
||||
LDA ,Y LENGTH CODE= LCXX XXXX
|
||||
BITA #$40 COLOR SELECTION !!-!!!! SIX BIT LENGTH
|
||||
BEQ 2$ !COLOR BIT 0=BLACK,1=RED
|
||||
LDB #$EE !LAST LENGTH IN COLUMN IF=1
|
||||
|
||||
2$ ANDA #$3F STRIP OUT THE LENGTH
|
||||
|
||||
22$ DECA ODD PIXEL LENGTH TEST
|
||||
BEQ 3$
|
||||
STB ,X AT LEST AN EVEN PIXEL LENGTH
|
||||
LEAX -$100,X MOVING DOWN THE COLUMN
|
||||
DECA AN EVEN BOUNDRY PERCHANCE
|
||||
BNE 22$ NOPE, CHECK FOR AN ODD ONE (OR TWO (OR TOO( OR TO)))
|
||||
|
||||
4$ TST ,Y+ RECOGNIZE AND ADVANCE (OR VISIVERSE) COLUMN END?
|
||||
BMI OWELL NEW OFFSET TO BE CAD (HAD) SAD...
|
||||
BRA 11$ OWELL BACK FOR ANOTHER
|
||||
|
||||
3$ EORB #$E0 WWE GOT AN ODD ONE DON'T WWE
|
||||
STB ,X END IT EVEN, LENGTH ALWAY START ON EVEN BOUNDRIES
|
||||
LEAX -$100,X AND ADVANCE
|
||||
BRA 4$ OF COURSE YOU GOTDA CHECK THIS ONE TOO.
|
||||
|
||||
|
||||
FINSIT TEXT $52,$CD
|
||||
PHRASE RED,35,TM
|
||||
TEXT $4A,LEFEDG
|
||||
PHRASE RED,35,COPYRIGHT,1982,WILLIAMS,ELECTRONICS,INC
|
||||
|
||||
PULS Y,PC
|
||||
|
||||
|
||||
******************************************************************************
|
||||
* THE MARKEY TABLE
|
||||
* Everything you wanted to know about the Sinistar Marquee
|
||||
* compacted into fewer bytes than ever known to man before
|
||||
*
|
||||
|
||||
MARKEY FCB $2A,$C3
|
||||
FCB $2A,$C6
|
||||
FCB $0D,$48,$16,$C7
|
||||
FCB $0D,$4D,$12,$C8
|
||||
FCB $0D,$50,$10,$C8
|
||||
FCB $0E,$51,$0F,$C9
|
||||
FCB $06,$43,$05,$53,$0E,$CA
|
||||
FCB $06,$45,$04,$53,$0E,$CA
|
||||
FCB $05,$48,$02,$54,$0E,$CA
|
||||
FCB $05,$5F,$0D,$CB
|
||||
FCB $05,$60,$0D,$CB
|
||||
FCB $05,$61,$0C,$CB
|
||||
FCB $05,$61,$0D,$CB
|
||||
FCB $05,$60,$0E,$CB
|
||||
FCB $06,$5E,$0F,$CB
|
||||
FCB $06,$60,$0D,$CC
|
||||
FCB $06,$65,$08,$CC
|
||||
FCB $06,$F9
|
||||
FCB $06,$FA
|
||||
FCB $07,$4D,$02,$EA
|
||||
FCB $07,$4D,$04,$E8
|
||||
FCB $08,$4C,$06,$E7
|
||||
FCB $09,$4B,$07,$E6
|
||||
FCB $0A,$4A,$07,$E6
|
||||
FCB $0C,$48,$07,$E6
|
||||
FCB $0D,$48,$07,$E5
|
||||
FCB $0E,$47,$09,$E3
|
||||
FCB $10,$46,$0A,$E1
|
||||
FCB $11,$46,$0C,$DE
|
||||
FCB $13,$45,$0D,$DB
|
||||
FCB $15,$44,$0F,$D7
|
||||
FCB $2D,$CE
|
||||
FCB $9F
|
||||
FCB $13,$CC
|
||||
FCB $11,$D1
|
||||
FCB $10,$58,$0B,$CA
|
||||
FCB $0F,$EC
|
||||
FCB $0E,$EC
|
||||
FCB $0D,$ED
|
||||
FCB $0C,$EE
|
||||
FCB $0B,$46,$0D,$DC
|
||||
FCB $0B,$44,$12,$DA
|
||||
FCB $0B,$42,$17,$D7
|
||||
FCB $0B,$41,$07,$49,$0A,$D5
|
||||
FCB $11,$4E,$0A,$CA
|
||||
FCB $0F,$52,$0B,$C5
|
||||
FCB $0E,$56,$12,$C2
|
||||
FCB $0D,$5C,$0B,$C4
|
||||
FCB $0D,$EB
|
||||
FCB $0C,$EC
|
||||
FCB $0C,$46,$06,$E0
|
||||
FCB $0C,$42,$0C,$DF
|
||||
FCB $0C,$41,$0F,$49,$02,$D1
|
||||
FCB $1D,$49,$03,$CE
|
||||
FCB $1E,$49,$05,$C6
|
||||
FCB $1F,$C9
|
||||
FCB $14,$49,$03,$CA
|
||||
FCB $12,$DC
|
||||
FCB $11,$E0
|
||||
FCB $10,$E3
|
||||
FCB $0F,$E5
|
||||
FCB $0E,$E7
|
||||
FCB $0D,$45,$05,$DE
|
||||
FCB $18,$4C,$07,$CA
|
||||
FCB $2F,$C6
|
||||
FCB $B0
|
||||
FCB $14,$CA
|
||||
FCB $12,$D0
|
||||
FCB $11,$D3
|
||||
FCB $10,$57,$0A,$C3
|
||||
FCB $0F,$E5
|
||||
FCB $0F,$E5
|
||||
FCB $0E,$46,$04,$DC
|
||||
FCB $0E,$44,$0B,$D7
|
||||
FCB $0E,$43,$0E,$D5
|
||||
FCB $0E,$41,$12,$D2
|
||||
FCB $23,$CC
|
||||
FCB $25,$C8
|
||||
FCB $13,$48,$0C,$C5
|
||||
FCB $12,$CC
|
||||
FCB $13,$CE
|
||||
FCB $14,$CE
|
||||
FCB $0F,$43,$03,$4A,$08,$C3
|
||||
FCB $0E,$55,$05,$C4
|
||||
FCB $0E,$54,$06,$C5
|
||||
FCB $0E,$53,$08,$C5
|
||||
FCB $0E,$53,$08,$C6
|
||||
FCB $0E,$54,$07,$C7
|
||||
FCB $0E,$56,$05,$C8
|
||||
FCB $0F,$49,$02,$4D,$02,$C9
|
||||
FCB $0F,$49,$03,$D7
|
||||
FCB $10,$48,$04,$D7
|
||||
FCB $11,$47,$05,$D6
|
||||
FCB $12,$46,$05,$D6
|
||||
FCB $13,$45,$04,$D7
|
||||
FCB $14,$45,$03,$D8
|
||||
FCB $15,$44,$04,$D7
|
||||
FCB $17,$43,$05,$D5
|
||||
FCB $21,$D3
|
||||
FCB $26,$CD
|
||||
FCB $B0
|
||||
FCB $18,$C2
|
||||
FCB $12,$46,$01,$41,$19,$C1
|
||||
FCB $11,$49,$18,$C2
|
||||
FCB $10,$4A,$15,$C5
|
||||
FCB $10,$49,$13,$C8
|
||||
FCB $10,$49,$04,$D7
|
||||
FCB $10,$49,$01,$DA
|
||||
FCB $11,$67,$01,$C1
|
||||
FCB $11,$E2
|
||||
FCB $11,$E1
|
||||
FCB $11,$E0
|
||||
FCB $11,$E0
|
||||
FCB $10,$4E,$06,$CC
|
||||
FCB $10,$4A,$0D,$C8
|
||||
FCB $10,$C8
|
||||
FCB $0F,$C8
|
||||
FCB $0F,$C7
|
||||
FCB $0F,$47,$11,$CA
|
||||
FCB $0E,$48,$0B,$D4
|
||||
FCB $0E,$48,$08,$D9
|
||||
FCB $0D,$49,$05,$DC
|
||||
FCB $0E,$44,$08,$DA
|
||||
FCB $05,$41,$16,$D5
|
||||
FCB $05,$41,$17,$D3
|
||||
FCB $04,$42,$0F,$47,$02,$D2
|
||||
FCB $0C,$41,$07,$DB
|
||||
FCB $0C,$42,$05,$D3
|
||||
FCB $0B,$44,$02,$D3
|
||||
FCB $0B,$D8
|
||||
FCB $0B,$D8
|
||||
FCB $0B,$4B,$05,$C8
|
||||
FCB $0B,$4A,$05,$DB
|
||||
FCB $0B,$49,$06,$DD
|
||||
FCB $0C,$4B,$04,$DE
|
||||
FCB $0C,$EE
|
||||
FCB $0D,$EE
|
||||
FCB $0E,$EE
|
||||
FCB $0F,$ED
|
||||
FCB $10,$4E,$03,$51,$08,$C2
|
||||
FCB $08,$41,$09,$4A,$06,$CD
|
||||
FCB $08,$41,$1B,$C9
|
||||
FCB $08,$42,$2D,$C2
|
||||
FCB $08,$41,$01,$41,$2A,$C5
|
||||
FCB $08,$44,$25,$CA
|
||||
FCB $09,$44,$15,$DA
|
||||
FCB $09,$45,$13,$DC
|
||||
FCB $0A,$47,$05,$47,$03,$DE
|
||||
FCB $0A,$54,$01,$DE
|
||||
FCB $0B,$F2
|
||||
FCB $0B,$F1
|
||||
FCB $0C,$F0
|
||||
FCB $0C,$EF
|
||||
FCB $0C,$64,$01,$C1
|
||||
FCB $0D,$5C,$17,$C1
|
||||
FCB $0D,$48,$05,$4F,$16,$C2
|
||||
FCB $0D,$48,$05,$4F,$15,$C3
|
||||
FCB $0E,$47,$05,$50,$12,$C5
|
||||
FCB $0E,$48,$04,$51,$0F,$C6
|
||||
FCB $0E,$49,$03,$53,$0B,$C8
|
||||
FCB $0F,$49,$03,$E4
|
||||
FCB $0F,$4B,$01,$E3
|
||||
FCB $10,$52,$02,$D9
|
||||
FCB $11,$51,$03,$D8
|
||||
FCB $12,$50,$03,$D7
|
||||
FCB $14,$4F,$02,$D6
|
||||
FCB $16,$4D,$02,$D4
|
||||
FCB $18,$4B,$02,$D3
|
||||
FCB $1C,$46,$04,$D0
|
||||
FCB $27,$CC
|
||||
FCB $28,$C8
|
||||
FCB $00
|
||||
|
||||
ENDIF * Whole file is not included if KENSMARQ is undefined
|
||||
|
||||
PULLORG ROMSAV
|
|
@ -0,0 +1,436 @@
|
|||
INCLUDE [SAM]START
|
||||
|
||||
INCLVER SAM,SINISTAR.EQU
|
||||
|
||||
|
||||
PUSHORG ROMSAVE
|
||||
ROUTINE OPENTRY
|
||||
|
||||
OPENTRY JSR SYSTINI Boom
|
||||
NEW_SLEEP TASK1,OPENMS,OHSMMR Start up the master task
|
||||
JMP STARTS Go start up the task system
|
||||
|
||||
*
|
||||
* High Score To Date Master Task
|
||||
* This one runs until the others are die, and then restarts the system
|
||||
*
|
||||
|
||||
HSTDMS LDD #(60.*1)
|
||||
JSR TIMER
|
||||
|
||||
LDX #ALHSTD Test if operator allows HSTD entry
|
||||
JSR RCMOSA and if not
|
||||
BEQ 10$ then branch to exit timer
|
||||
|
||||
TFR Y,U
|
||||
|
||||
LDA #$13 Initialize for Player ONE
|
||||
STA SCOREAD
|
||||
LDY OHSMP1,U
|
||||
JSR HSTEST Go test/install player 1 score
|
||||
STA OHSMFLG,U
|
||||
|
||||
TFR U,Y
|
||||
SLEEP HERE
|
||||
TST HSTDFLG
|
||||
BNE 3$
|
||||
SLEEP LOOP
|
||||
|
||||
3$ TFR Y,U
|
||||
LDA NPLAYER Test if this was a one or two player game
|
||||
DECA and
|
||||
BEQ 1$ if one player then skip to page-display
|
||||
|
||||
LDA #7
|
||||
STA PCRAM
|
||||
LDA #$B4 Initialize for Player Two
|
||||
STA SCOREAD
|
||||
LDY OHSMP2,U
|
||||
JSR HSTEST Go test/install player 2 score
|
||||
ORA OHSMFLG,U
|
||||
STA OHSMFLG,U
|
||||
|
||||
TFR U,Y
|
||||
SLEEP HERE
|
||||
TST HSTDFLG
|
||||
BNE 1$
|
||||
SLEEP LOOP
|
||||
|
||||
1$ TST OHSMFLG,Y
|
||||
BNE 2$
|
||||
|
||||
10$ LDD #(60.*4) Sleep for 4 seconds to display GAME OVER
|
||||
JSR TIMER
|
||||
|
||||
2$ CLR NPLAYER
|
||||
JMP IAMODE
|
||||
|
||||
|
||||
*
|
||||
* Test For High Score to Date
|
||||
* If a High Score is found, creates a task to get the initials and make
|
||||
* the entry into the appropriate table
|
||||
* On entry, Y points to the player's score
|
||||
*
|
||||
* On exit, A is zero and HSTDFLG is non-zero if not high-score,
|
||||
* opposite if high-score
|
||||
*
|
||||
|
||||
HSTEST PSHS B,X,Y,U
|
||||
|
||||
CLR HSTDFLG
|
||||
|
||||
LDX #CMOSLSC Pointer to CMOS Lowest Score
|
||||
JSR CMPSCR Go see if this one is greater than CMOS lowest
|
||||
BCS 1$ and branch install if it is
|
||||
|
||||
LDX #RAMLSC else test this one with RAM lowest score
|
||||
JSR CMPSCR and
|
||||
BCS 1$ branch install if it is
|
||||
|
||||
CLRA else return a sliver of sleep time
|
||||
COM HSTDFLG
|
||||
PULS B,X,Y,U,PC and return without High Score installation
|
||||
|
||||
*
|
||||
* OK, this is a high score
|
||||
* Set up to get player's initials
|
||||
* On entry, Y points to player's score
|
||||
* X points to low entry of table where score is to be installed
|
||||
|
||||
1$ PSHS X,Y Save our pointers
|
||||
NEW_SLEEP TASK2,HSTDSLV,OHSTDMR Make the task to get the entry
|
||||
PULS Y,U Restore our pointers
|
||||
|
||||
STY OHSTPTR,X Table pointer
|
||||
STU OHSPSCR,X Player's score
|
||||
|
||||
CLR OHSCPS,X Cursor positioned initialized
|
||||
|
||||
LDA #CBLANK Get a blank character
|
||||
LDB #2 Get a displacement of 2
|
||||
LEAU OHSINIT,X Get the address for the 3 initials
|
||||
12$ STA B,U Store a blank here
|
||||
DECB and
|
||||
BPL 12$ repeat for B = 2 to 0
|
||||
|
||||
LDA #MAXBNC
|
||||
STA OHSBNC,X
|
||||
|
||||
LDD #MAXETV Maximum time to enter initials
|
||||
STD OHSETM,X Save this max time in task workspace
|
||||
COMA
|
||||
PULS B,X,Y,U,PC and return it to calling routine
|
||||
|
||||
|
||||
* This is the SLAVE task for High Score to Date
|
||||
* Player-Initials entry routine and score installation task
|
||||
*
|
||||
|
||||
HSTDSLV PSHS Y
|
||||
|
||||
JSR PCLRSCR Clear the screen
|
||||
|
||||
LDB NPLAYER Test if this game was one or two player
|
||||
DECB and
|
||||
BEQ 2$ if one then skip
|
||||
JSR ANPLAY else go announce the current player
|
||||
|
||||
2$ TEXT $4F,$4F
|
||||
PHRASE BLUE,68,CONGRATULATIONS
|
||||
TEXT $50,$4E
|
||||
PHRASE YELLOW,68,CONGRATULATIONS
|
||||
TEXT $48,$49
|
||||
PHRASE WHITE,68,YOUR,SCORE,RANKS
|
||||
TEXT $40,$49
|
||||
PHRASE WHITE,68,AMONG,THE,TOP,30
|
||||
TEXT $38,$53
|
||||
PHRASE CREAM,68,GIVE,3,INITIALS
|
||||
TEXT $30,$34
|
||||
PHRASE CREAM,68,JOYSTICK,SELECTS,LETTER
|
||||
TEXT $28,$34
|
||||
PHRASE CREAM,68,FIRE,MAKES,LETTER,ENTRY
|
||||
|
||||
|
||||
PULS Y
|
||||
LDB #CBLANK+1 Save a blank for this current letter
|
||||
STB OHSCLT,Y
|
||||
|
||||
SLEEP HERE Now go to sleep for a bit
|
||||
|
||||
TFR Y,U Save Y register in U
|
||||
LDX OHSETM,U Get our time-out counter and
|
||||
LEAX -1,X decrement and
|
||||
LBEQ HSTDINS when time's up, install what we've got
|
||||
STX OHSETM,U else save decremented value
|
||||
|
||||
3$ LDB #WHITE Write the cursor at this location
|
||||
JSR WRCURS
|
||||
JSR WRCLT
|
||||
|
||||
4$ TST OHSBNC,U Test if the bounce counter has counted down
|
||||
BEQ 5$ and if so then go feel for another input
|
||||
DEC OHSBNC,U else bounce down
|
||||
BRA 10$ and go back to sleep
|
||||
|
||||
5$ JSR APIA2 Go feel for input
|
||||
ANDA #FORWARD+REVERSE+ENTER1 Is it one of the ones we like?
|
||||
BEQ 10$ Nah, so get outta here
|
||||
|
||||
CMPA #ENTER1 Yes! Was it perchance the Enter input?
|
||||
BEQ 8$ Yes! So let's enter the current character
|
||||
|
||||
LDB #MAXBNC
|
||||
STB OHSBNC,U
|
||||
LDB OHSCLT,U Get other char. Get the current cursor pos
|
||||
CMPA #REVERSE and test if we want to go back
|
||||
BEQ 6$ yes
|
||||
|
||||
INCB No, so go forward
|
||||
CMPB #MAXLET Does this take us beyond the last letter?
|
||||
BLS 7$ no
|
||||
LDB #MINLET yes, so wrap-around to first character
|
||||
BRA 7$
|
||||
|
||||
6$ DECB Go backward
|
||||
BPL 7$
|
||||
LDB #MAXLET yes, so wrap-around to last character
|
||||
|
||||
7$ STB OHSCLT,U Save this character as the current one
|
||||
JSR ERCLT
|
||||
BRA 10$
|
||||
|
||||
8$ LDB #MAXBNC*4
|
||||
STB OHSBNC,U
|
||||
|
||||
CLRB The current letter has been entered. First, go
|
||||
JSR WRCURS erase the cursor
|
||||
|
||||
LDA OHSCLT,U Now, get this current letter
|
||||
|
||||
CMPA #CRUB Was it the Rubout character?
|
||||
BNE 9$ Nah, so go install it
|
||||
LDA OHSCPS,U Yes. Is cursor displacement at left edge?
|
||||
BEQ 10$
|
||||
JSR ERCLT
|
||||
DECA
|
||||
STA OHSCPS,U
|
||||
ADDA #OHSINIT
|
||||
LDB A,U
|
||||
STB OHSCLT,U
|
||||
BRA 10$ and restart project
|
||||
|
||||
9$ LDB OHSCPS,U What? Not Rubout? Well, let's save character
|
||||
ADDB #OHSINIT into task workspace
|
||||
STA B,U
|
||||
|
||||
LDB OHSCPS,U Increment the cursor displacement
|
||||
INCB until
|
||||
STB OHSCPS,U
|
||||
CMPB #3 it reaches 3, at which point all initials
|
||||
BEQ HSTDINS
|
||||
|
||||
10$ TFR U,Y Restore the Y register
|
||||
SLEEP LOOP and go sleepy-bye
|
||||
|
||||
|
||||
* Install this very entry
|
||||
HSTDINS LDX OHSTPTR,U Get pointer to correct table
|
||||
CMPX #CMOSLSC Is this table CMOS?
|
||||
BNE 5$ Nope, so go do RAM only
|
||||
|
||||
JSR HSTDTL Yes, CMOS. Get table pointer into Y
|
||||
|
||||
LDX HSLEN1 Is first CMOS entry used?
|
||||
BNE 1$ Yes, so branch to special test
|
||||
STY HSLEN1 else No, so make this one the first entry
|
||||
BRA 2$ and skip to RAM test
|
||||
|
||||
1$ STY HSLEN2 Save this as second entry
|
||||
CMPY HSLEN1 Is this one below (higher) in table?
|
||||
BHI 2$ If not above (lower) or same, skip
|
||||
LEAX SCRSIZ,X else bump other one
|
||||
STX HSLEN1 down one entry
|
||||
|
||||
2$ JSR HSTDDT Go move this entry in
|
||||
|
||||
LDX #RAMLSC
|
||||
|
||||
5$ JSR HSTDTL Go get pointer into RAM table
|
||||
|
||||
LDX HSRLN1 Is first RAM entry already dirty?
|
||||
BNE 3$ Yes, so branch to do extra stuff
|
||||
STY HSRLN1 else No, so
|
||||
BRA 4$ store pointer here and split
|
||||
|
||||
3$ STY HSRLN2 Save this pointer
|
||||
CMPY HSRLN1 See above for below (higher)/above (lower)
|
||||
BHI 4$ decsription of what's being done here
|
||||
LEAX SCRSIZ,X
|
||||
STX HSRLN1
|
||||
|
||||
4$ JSR HSTDDT Go install this entry into RAM
|
||||
|
||||
COM HSTDFLG Flip flag to designate task done
|
||||
TFR U,Y Restore Y register and
|
||||
JMP DIE go die
|
||||
|
||||
|
||||
******************************************************************************
|
||||
* WRCURS
|
||||
* Write cursor of color B at displacement OHSCPS
|
||||
*
|
||||
|
||||
WRCURS PSHS D,X
|
||||
|
||||
LDX #$1C77
|
||||
JSR MAKSCX
|
||||
LDA #CCURS
|
||||
LDB 1,S
|
||||
JSR OUTCHR
|
||||
|
||||
PULS D,X,PC
|
||||
|
||||
******************************************************************************
|
||||
* WRCLT
|
||||
* Write the current letter
|
||||
*
|
||||
|
||||
WRCLT PSHS D,X,Y,U
|
||||
|
||||
LDX #$1E77
|
||||
JSR MAKSCX
|
||||
LDA OHSCLT,U
|
||||
LDB #YELLOW
|
||||
JSR OUTCHR
|
||||
|
||||
PULS D,X,Y,U,PC
|
||||
|
||||
******************************************************************************
|
||||
* ERCLT
|
||||
|
||||
ERCLT PSHS D,X
|
||||
|
||||
LDX #$1E77
|
||||
JSR MAKSCX
|
||||
STX DDEST
|
||||
LDX #$0608!X$404
|
||||
STX DHIGH
|
||||
CLR DCONS
|
||||
LDA #$12
|
||||
STA DCTRL
|
||||
|
||||
PULS D,X,PC
|
||||
|
||||
|
||||
******************************************************************************
|
||||
* CMPSCR
|
||||
* Compares player score at Y with CMOS/RAM score at X,
|
||||
* returns with carry set if Y-score >= X-score
|
||||
|
||||
CMPSCR PSHS D,X,Y
|
||||
|
||||
LDB #4
|
||||
|
||||
1$ JSR RCMOSA
|
||||
CMPA ,Y+
|
||||
BLO 2$
|
||||
BHI 3$
|
||||
DECB
|
||||
BNE 1$
|
||||
|
||||
2$ ORCC #1
|
||||
PULS D,X,Y,PC
|
||||
|
||||
3$ ANDCC #$FE
|
||||
PULS D,X,Y,PC
|
||||
|
||||
******************************************************************************
|
||||
* BLKMOV
|
||||
* MOVE A BYTES FROM [X] TO [Y]
|
||||
|
||||
BLKMOV PSHS D,X,Y
|
||||
|
||||
1$ LDB ,X+
|
||||
STB ,Y+
|
||||
DECA
|
||||
BNE 1$
|
||||
|
||||
PULS D,X,Y,PC
|
||||
|
||||
|
||||
******************************************************************************
|
||||
* MAKSCX
|
||||
|
||||
MAKSCX PSHS D
|
||||
|
||||
LDA OHSCPS,U
|
||||
LDB #8
|
||||
MUL
|
||||
LEAX B,X
|
||||
|
||||
PULS D,PC
|
||||
|
||||
|
||||
******************************************************************************
|
||||
* HSTDTL
|
||||
* High Score To Date Table Lookup
|
||||
HSTDTL PSHS X
|
||||
|
||||
LDY OHSPSCR,U
|
||||
|
||||
LDA #HSENTCT Get number of entries per table
|
||||
PSHS A
|
||||
|
||||
100$ DEC ,S Decrement entry count
|
||||
BEQ 101$ and if 0, then this score is the table-topper
|
||||
|
||||
LEAX -SCRSIZ,X Get next higher entry in table
|
||||
JSR CMPSCR Test this score against player's
|
||||
BCS 100$ Loop while player score is >= score at X
|
||||
LEAX SCRSIZ,X
|
||||
|
||||
101$ PSHS X
|
||||
LDX 3,S Restore table bottom pointer
|
||||
TFR X,Y Get copy of it in Y
|
||||
LDA #SCRSIZ Get entry size
|
||||
|
||||
102$ LEAX -SCRSIZ,X Bump X up [down] table
|
||||
CMPX ,S
|
||||
BLO 103$
|
||||
JSR BLKMOV else move this block from X to Y
|
||||
LEAY -SCRSIZ,Y and bump up [down] Y too
|
||||
BRA 102$ and do it again
|
||||
|
||||
103$ LEAS 5,S
|
||||
RTS
|
||||
|
||||
|
||||
******************************************************************************
|
||||
* HSTDDT
|
||||
HSTDDT TFR Y,X
|
||||
LDY OHSPSCR,U Restore pointer to player's score
|
||||
|
||||
LDB #4 CMOS-move 4 bytes
|
||||
|
||||
104$ LDA ,Y+ Go
|
||||
JSR WCMOSA do
|
||||
DECB it
|
||||
BNE 104$ to it
|
||||
|
||||
LDB #3
|
||||
LEAY OHSINIT,U
|
||||
|
||||
105$ LDA ,Y+
|
||||
JSR WCMOSA
|
||||
DECB
|
||||
BNE 105$
|
||||
|
||||
RTS
|
||||
|
||||
|
||||
PULLORG ROMSAVE
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
|
||||
* color palette
|
||||
RADIX 8
|
||||
* bgr # intensity color
|
||||
PALETTE FCB 000 0 0 black
|
||||
FCB 377 1 100 white
|
||||
FCB 277 2 92 cream
|
||||
FCB 256 3 76 salmon pink*
|
||||
FCB 255 4 70 tan grey
|
||||
FCB 244 5 60 grey
|
||||
FCB 232 6 46 blue-grey
|
||||
FCB 000 7 ? special effect
|
||||
FCB 000 8 ? special effect
|
||||
FCB 311 9 53 blue-intense
|
||||
FCB 120 A 24 dark grey
|
||||
FCB 113 B 32 dark purple
|
||||
FCB 005 C 43 burgundy
|
||||
FCB 007 D 60 red
|
||||
FCB 000 E ? special effect
|
||||
FCB 067 F 80 yellow
|
||||
RADIX 16
|
||||
|
|
@ -0,0 +1,136 @@
|
|||
|
||||
PUSHORG $785E
|
||||
JSR 1$ Overwrite PLXQUE routine
|
||||
NOP
|
||||
PULLORG
|
||||
|
||||
|
||||
PUSHORG BOBSAVE
|
||||
|
||||
1$ LDD FREE Test if there's enough memory left
|
||||
CMPD #2*(OPEXTSZ+ODYNOVH) for this task
|
||||
BLT 2$ and skip it if not
|
||||
|
||||
PSHS X
|
||||
NEW_SLEEP TASK2,PLEXTRA,OPEXTSZ else queue up the task
|
||||
PULS X
|
||||
|
||||
2$ CLR OPXALV,X Restore instructions trashed in PLXQUE
|
||||
LEAY OPXOTB,X
|
||||
RTS
|
||||
|
||||
|
||||
* This is the Player Explosion Extra Effects Task
|
||||
PLEXTRA LDX #WPLAYER Get pointer to player workspace
|
||||
LDX OBOTTOM,X and get screen address of player
|
||||
LEAX $102,X
|
||||
LDA #PLEXWCT Get wave count (for looping)
|
||||
PSHS A,X Save these on the stack
|
||||
|
||||
LEAX OPEXWSP,Y Get pointer to workspace of first piece
|
||||
|
||||
|
||||
5$ LDA #2 Loop on A
|
||||
10$ DECA for values 1,0,-1
|
||||
|
||||
LDB #6 Loop on B
|
||||
20$ SUBB #3 for values 3,0,-3
|
||||
|
||||
PSHS D Save this offset
|
||||
ADDD 3,S Add it to the screen position
|
||||
STD OPEXPOS,X Save as this piece's starting position
|
||||
|
||||
RANDOM OSEED1,8. Get random LONG velocity from 0 to 3
|
||||
ASRA
|
||||
BCC 25$
|
||||
NEGA
|
||||
25$ STA OPEXVEL,X
|
||||
|
||||
RANDOM OSEED2,12. Get random SHORT velocity from 0 to 5
|
||||
ASRA
|
||||
BCC 26$
|
||||
NEGA
|
||||
26$ STA OPEXVEL+1,X
|
||||
|
||||
LEAX 4,X Advance X to next workspace
|
||||
|
||||
PULS D Restore offset
|
||||
TSTB Has B bottomed out yet?
|
||||
BPL 20$
|
||||
TSTA Has A bottomed out yet?
|
||||
BPL 10$
|
||||
|
||||
DEC ,S Loop on waves
|
||||
BNE 5$
|
||||
LEAS 3,S
|
||||
|
||||
LDA #PLEXTMR Get count for drawing the pieces
|
||||
STA OPEXCTR,Y
|
||||
|
||||
SLEEP HERE
|
||||
|
||||
* The remainder of this task draws the pieces
|
||||
LOCAL
|
||||
|
||||
DEC OPEXCTR,Y Countdown
|
||||
BPL 10$ and stay alive until less than zero
|
||||
JSR PCLRSCR else clear the screen
|
||||
JMP DIE and Die
|
||||
|
||||
10$ LDD #$0505 Get image size (1 by 1) EOR-ed for DMA fix
|
||||
STD $CA06 and write it to DMA control
|
||||
|
||||
LDD #PLEXIMG Get pointer to image
|
||||
STD $CA02 and write it to DMA control
|
||||
|
||||
LDA OPEXCTR,Y Fetch the timer value for use as offset into
|
||||
ASRA Special Effects color table. Divide by 2 to
|
||||
LDU #PLEXEE use each entry twice. Get the color from
|
||||
LDA A,U the table and save it to the PCRAM location
|
||||
STA PCRAM+$7
|
||||
|
||||
LDX #PLEXWSZ*PLEXWCT Get total pieces to move
|
||||
|
||||
LEAU OPEXWSP,Y Get pointer to first piece's workspace
|
||||
|
||||
30$ LDD OPEXPOS,U Get position of this piece
|
||||
ADDD OPEXVEL,U Add the velocity
|
||||
TSTA
|
||||
BMI 40$ and skip when offscreen in LONG direction
|
||||
CMPB #$F0 and skip when we're about to wrap around
|
||||
BHI 40$
|
||||
STD OPEXPOS,U Save as new position
|
||||
STD $CA04 Write it to DMA control
|
||||
|
||||
LDA #$0E Get write byte
|
||||
STA $CA00 and draw this dot!
|
||||
|
||||
40$ LEAU 4,U Advance to next piece workspace
|
||||
LEAX -1,X
|
||||
BNE 30$ and loop until done
|
||||
|
||||
SLEEP LOOP Sleep
|
||||
|
||||
* This is the one-byte image of the dot, specifying color 7
|
||||
PLEXIMG FCB $70
|
||||
|
||||
* Table of colors for special effect color 7
|
||||
* bbgggrrr Color bits
|
||||
PLEXEE FCB %00000000
|
||||
FCB %01001000
|
||||
FCB %10010001
|
||||
FCB %11001010
|
||||
FCB %10000100
|
||||
FCB %01000110
|
||||
FCB %00000111
|
||||
FCB %00010111
|
||||
FCB %01100111
|
||||
FCB %10101111
|
||||
FCB %11111111
|
||||
FCB %11111111
|
||||
|
||||
|
||||
*******************************************************************************
|
||||
|
||||
PULLORG BOBSAVE
|
||||
|
|
@ -0,0 +1,232 @@
|
|||
|
||||
INCLUDE [SAM]START
|
||||
INCLVER SAM,SINISTAR.EQU
|
||||
|
||||
PUSHORG ROMSAVE
|
||||
|
||||
******************************************************************************
|
||||
*
|
||||
* PLAYER EXPLOSION TASK
|
||||
*
|
||||
* Entry: Y points to task workspace
|
||||
|
||||
PLXTSK LDA OPXPCK,Y A <- the image pick value
|
||||
INCA Else get index to next image
|
||||
ANDA #PXPWVS-1 (Wrap around to zero if necessary)
|
||||
STA OPXPCK,Y Save new index
|
||||
|
||||
10$ ASLA Turn index into word index
|
||||
LDX #PLXITB Get the address of the image addresses tables
|
||||
LDX A,X X <- address of the image
|
||||
STX DSOUR Save this to the DMA for the draw-loop below
|
||||
LDD #PLXISZ Get the constant size of the image
|
||||
EORA #4 and set it up for
|
||||
EORB #4 the screwy DMA output
|
||||
STD DHIGH (Why did they do this to us?)
|
||||
|
||||
LDB OPXALV,Y Get number of turns this task has been awake
|
||||
ASRB to select how many of the piece-waves to move
|
||||
INCB Start a new wave every second turn,
|
||||
CMPB #PXPWVS don't let the number of waves exceed the
|
||||
BLE 20$ maximum number of waves created
|
||||
LDB #PXPWVS If greater then set to the maximum
|
||||
20$ LDA #PXPPCT Get the piece-per-wave count
|
||||
MUL Multiply to get the total number of pieces to
|
||||
PSHS B move and then save this number on the stack
|
||||
|
||||
LEAX OPXOTB,Y X <- address of the first entry in the
|
||||
* task object table
|
||||
|
||||
30$ LDA ,S
|
||||
CMPA #PXPPCT*PXPWVS/2
|
||||
BNE 31$
|
||||
LDA OPXALV,Y
|
||||
ANDA #4
|
||||
LSRA
|
||||
NOP
|
||||
LDU #PXPALT
|
||||
LDU A,U
|
||||
STU DSOUR
|
||||
31$ LDD OPXPSP,X Get the screen position for this fragment
|
||||
BEQ 50$ If zero then this fragment is off-screen
|
||||
STD DDEST Else write this destination to the DMA
|
||||
CLR DCONS Clear the DMA Constant for a zero write
|
||||
LDA #$12 DMA
|
||||
STA DCTRL away!
|
||||
|
||||
LDA OPXPSP,X Restore the top half of the screen position
|
||||
ADDD OPXPMM,X Mix in the momentum of this fragment
|
||||
CMPA #SCRNLH-2 Stir gently, abandon all hope if off-screen
|
||||
BHI 40$
|
||||
CMPB #SCRNSH
|
||||
BHI 40$
|
||||
|
||||
STD OPXPSP,X Now D has the new screen position. Save it to
|
||||
STD DDEST both the task workspace and the DMA
|
||||
LDA #$0E Now draw this next fragment
|
||||
STA DCTRL
|
||||
BRA 50$ Go do next
|
||||
|
||||
40$ CLR OPXPSP,X Mark this fragment as
|
||||
CLR OPXPSP+1,X off-screen
|
||||
|
||||
50$ LEAX OPXPSZ,X Advance X to point to next fragment entry
|
||||
DEC ,S Decrement the number of pieces we want to move
|
||||
BNE 30$ and go do another if there's more to do
|
||||
|
||||
LEAS 1,S Clean up stack
|
||||
|
||||
INC OPXALV,Y Increment how many turns these fragments have
|
||||
LBMI DIE been moving and while less than 128 continue
|
||||
* else go die now
|
||||
|
||||
60$ SLEEP LOOP Go back to sleep, wake again at top of routine
|
||||
|
||||
|
||||
PLXITB FDB PLXIM0,PLXIM1,PLXIM2,PLXIM3 Addresses of the images
|
||||
|
||||
PLXIM0 FCB $00,$00 Image 0
|
||||
FCB $0C,$00
|
||||
FCB $00,$00
|
||||
|
||||
PLXIM1 FCB $C0,$C0 Image 1
|
||||
FCB $0F,$00
|
||||
FCB $C0,$C0
|
||||
|
||||
PLXIM2 FCB $0F,$00 Image 2
|
||||
FCB $F6,$F0
|
||||
FCB $0F,$00
|
||||
|
||||
PLXIM3 FCB $60,$60 Image 3
|
||||
FCB $0B,$00
|
||||
FCB $60,$60
|
||||
|
||||
PXPALT FDB PXPAL0,PXPAL1
|
||||
|
||||
PXPAL0 FCB $00,00
|
||||
FCB $0F,00
|
||||
FCB $00,00
|
||||
|
||||
PXPAL1 FCB $00,00
|
||||
FCB $0D,00
|
||||
FCB $00,00
|
||||
|
||||
******************************************************************************
|
||||
*
|
||||
* PLAYER EXTRA-EXPLOSION TASK
|
||||
* This is the Player Explosion Extra Effects Task
|
||||
*
|
||||
* Entry: Y points to task workspace
|
||||
|
||||
PLEXTRA LDX #WPLAYER Get pointer to player workspace
|
||||
LDX OBOTTOM,X and get screen address of player
|
||||
LEAX $102,X
|
||||
LDA #PLEXWCT Get wave count (for looping)
|
||||
PSHS A,X Save these on the stack
|
||||
|
||||
LEAX OPEXWSP,Y Get pointer to workspace of first piece
|
||||
|
||||
|
||||
5$ LDA #2 Loop on A
|
||||
10$ DECA for values 1,0,-1
|
||||
|
||||
LDB #6 Loop on B
|
||||
20$ SUBB #3 for values 3,0,-3
|
||||
|
||||
PSHS D Save this offset
|
||||
ADDD 3,S Add it to the screen position
|
||||
STD OPEXPOS,X Save as this piece's starting position
|
||||
|
||||
RANDOM OSEED1,8. Get random LONG velocity from 0 to 3
|
||||
ASRA
|
||||
BCC 25$
|
||||
NEGA
|
||||
25$ STA OPEXVEL,X
|
||||
|
||||
RANDOM OSEED2,12. Get random SHORT velocity from 0 to 5
|
||||
ASRA
|
||||
BCC 26$
|
||||
NEGA
|
||||
26$ STA OPEXVEL+1,X
|
||||
|
||||
LEAX 4,X Advance X to next workspace
|
||||
|
||||
PULS D Restore offset
|
||||
TSTB Has B bottomed out yet?
|
||||
BPL 20$
|
||||
TSTA Has A bottomed out yet?
|
||||
BPL 10$
|
||||
|
||||
DEC ,S Loop on waves
|
||||
BNE 5$
|
||||
LEAS 3,S
|
||||
|
||||
LDA #PLEXTMR Get count for drawing the pieces
|
||||
STA OPEXCTR,Y
|
||||
|
||||
SLEEP HERE
|
||||
|
||||
* The remainder of this task draws the pieces
|
||||
LOCAL
|
||||
|
||||
DEC OPEXCTR,Y Countdown
|
||||
BPL 10$ and stay alive until less than zero
|
||||
JSR PCLRSCR else clear the screen
|
||||
JMP DIE and Die
|
||||
|
||||
10$ LDD #$0505 Get image size (1 by 1) EOR-ed for DMA fix
|
||||
STD $CA06 and write it to DMA control
|
||||
|
||||
LDD #PLEXIMG Get pointer to image
|
||||
STD $CA02 and write it to DMA control
|
||||
|
||||
LDA OPEXCTR,Y Fetch the timer value for use as offset into
|
||||
ASRA Special Effects color table. Divide by 2 to
|
||||
LDU #PLEXEE use each entry twice. Get the color from
|
||||
LDA A,U the table and save it to the PCRAM location
|
||||
STA PCRAM+$7
|
||||
|
||||
LDX #PLEXWSZ*PLEXWCT Get total pieces to move
|
||||
|
||||
LEAU OPEXWSP,Y Get pointer to first piece's workspace
|
||||
|
||||
30$ LDD OPEXPOS,U Get position of this piece
|
||||
ADDD OPEXVEL,U Add the velocity
|
||||
TSTA
|
||||
BMI 40$ and skip when offscreen in LONG direction
|
||||
CMPB #$F0 and skip when we're about to wrap around
|
||||
BHI 40$
|
||||
STD OPEXPOS,U Save as new position
|
||||
STD $CA04 Write it to DMA control
|
||||
|
||||
LDA #$0E Get write byte
|
||||
STA $CA00 and draw this dot!
|
||||
|
||||
40$ LEAU 4,U Advance to next piece workspace
|
||||
LEAX -1,X
|
||||
BNE 30$ and loop until done
|
||||
|
||||
SLEEP LOOP Sleep
|
||||
|
||||
* This is the one-byte image of the dot, specifying color 7
|
||||
PLEXIMG FCB $70
|
||||
|
||||
* Table of colors for special effect color 7
|
||||
* bbgggrrr Color bits
|
||||
PLEXEE FCB %00000000
|
||||
FCB %01001000
|
||||
FCB %10010001
|
||||
FCB %11001010
|
||||
FCB %10000100
|
||||
FCB %01000110
|
||||
FCB %00000111
|
||||
FCB %00010111
|
||||
FCB %01100111
|
||||
FCB %10101111
|
||||
FCB %11111111
|
||||
FCB %11111111
|
||||
|
||||
|
||||
|
||||
PULLORG ROMSAVE
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
$!!!!!
|
||||
$!
|
||||
$! SINISTAR MEMORY MAP ...
|
||||
$! 0000 - 8BFF Reserved for Sinistar images, executive, tactics, intelligences
|
||||
$! 8C00 - 8FFF Second part of message utility.
|
||||
$! 9000 - 97FF Screen mapped scratch RAM
|
||||
$! 9800 - 98FF Direct Page RAM
|
||||
$! 9900 - BEFF Extended RAM
|
||||
$! BF00 - BF7F Message/Bookkeeping RAM
|
||||
$! BF80 - BFFE DCON scratch pad RAM
|
||||
$! BFFF DCON mirror $C800
|
||||
$! C000 - CFFF I/O ports
|
||||
$! D000 - DEFF Static RAM
|
||||
$! E000 - E1FF Sinistar IRQ routine.
|
||||
$! E200 - EFEF First part of message utility.
|
||||
$! EFF0 - EFFF ROM Vectors
|
||||
$!
|
||||
$!!!!!
|
||||
$ Down [sam.V'VERSION']DIAG.MOT ! lives at $F000
|
||||
$ Down [sam.V'VERSION']IMAGE.MOT
|
||||
$ Down [SAM.V'VERSION']MESSAGE.MOT
|
||||
$ Down [sam.V'VERSION']SAMS.MOT
|
||||
$ Down [witt.V'VERSION']RICHS.MOT
|
||||
$ Down [witt.V'VERSION']RICHS2.MOT
|
||||
$ Down [fals.V'VERSION']NOAHS.MOT
|
||||
$ Down [mica.V'VERSION']BOBS.MOT
|
||||
$ Down [witt.V'VERSION']aoe.mot
|
||||
$ Down [fals.V'VERSION']last.mot
|
||||
$!
|
||||
$ WRITE SYS$OUTPUT BELL
|
||||
$ EXIT
|
|
@ -0,0 +1,50 @@
|
|||
I'm fried.
|
||||
|
||||
I really enjoy my work (can you tell?). I like Sinistar,
|
||||
I am pleased with my accomplishments, I enjoy working with
|
||||
you guys.
|
||||
But to tell you the truth, I'm getting burned out. I've
|
||||
been running in fifth gear for almost every day of this year.
|
||||
My mind drifts away from the work at hand too often. Any excuse
|
||||
to sit and talk or go Joust is starting to be excuse enough.
|
||||
This is not good. This has to stop.
|
||||
However, it's too early to stop now. We're almost there.
|
||||
I refuse to bring this game so close to excellence and then
|
||||
stop short and have it be less than great for want of a few
|
||||
hours of fine tuning. We can't think that we'll have time for
|
||||
changes after AOE because if Sinistar is anything less than
|
||||
stupendous at AOE we'll get panned in every trade magazine
|
||||
and sales will be necessarily crippled. Besides, it's a matter
|
||||
of pride now, and, if nothing else, I'm a proud man.
|
||||
So I'm staying to do as much as I can until we send PROMS
|
||||
to catch up with the boxes at the show.
|
||||
|
||||
BUT! After Sinistar, I want some time off, some Real time.
|
||||
I want to go away to Canada or the Green Mountains or maybe
|
||||
West Virginia, anywhere quiet and far away from CRTs and VAXs
|
||||
and Noah Falstein. I NEED this time as much as I want it.
|
||||
We are professionals, and so we are expected to give more
|
||||
of ourselves to our jobs. But the expectations imposed on
|
||||
us have been far, far above the call of our responsibilities.
|
||||
I can count the number of 40-hour weeks I've worked this
|
||||
year on one finger. I don't mind very much, but I do want
|
||||
compensation. I will fry out without it, I'm sure.
|
||||
So, Noah: you're the team leader here. It's up to you.
|
||||
You must speak for me. You know now exactly how I feel.
|
||||
And, Rich: you're both my Group Leader and the primary
|
||||
I/O channel for our next game, so you have to speak for me
|
||||
too. I understand how important it is to get started fast
|
||||
and hard on Vroom, but it's absolutely essential for the
|
||||
sake of my mental well-being that I cool out for a bit before
|
||||
I dig in again. Speak for me too.
|
||||
And you, Sam: well, you're addle-headed enough to get
|
||||
married, so there's not much left to say to you.
|
||||
|
||||
Please let me know how things are working out. If I have
|
||||
to commit suicide to get some time off, I'll reconsider.
|
||||
|
||||
-RJM-
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1 @@
|
|||
falstein,sam,witt,mical
|
|
@ -0,0 +1,58 @@
|
|||
|
||||
INCLUDE [SAM]START
|
||||
INCLVER SAM,SINISTAR
|
||||
|
||||
PUSHORG ROMSAVE
|
||||
|
||||
*****************************************************************************
|
||||
*
|
||||
* SINISTAR EXPLOSION TASK
|
||||
*
|
||||
* ENTRY: Y points to the task workspace
|
||||
SNXTSK TST INIMPULSE If we're still in impulse drive phase -1
|
||||
BNE 1$ then go mutate the face
|
||||
|
||||
LDD #PIECEND else SS is onscreen and dead dead dead
|
||||
STD FINISH so make marks as such
|
||||
STD PIECEPTR
|
||||
|
||||
NEW_SLEEP TASK1,SNXBRX,OMTLEN+1 Task to blow the pieces
|
||||
LDA #14. Set to blow 13 pieces
|
||||
STA OMTLEN,X
|
||||
JMP DIE Die
|
||||
|
||||
* Still alive and mutating the RAM image. Do it one more time
|
||||
1$ LDU #$D870 Get the Sinistar Image Pointer
|
||||
LDX #$312 Get the byte-count of the Sinistar image
|
||||
|
||||
* This loop modifies the RAM image of the Sinistar (X bytes long)
|
||||
2$ LDB ,U+ Get the next byte
|
||||
BEQ 3$ If both pixels are zero then skip
|
||||
|
||||
COMB Get complement
|
||||
ADDB OMTLEN,Y Add in the explosion increment
|
||||
STB -1,U Save back into Ram image
|
||||
3$ LEAX -1,X Count down byte-count
|
||||
BNE 2$ until it reaches zero
|
||||
|
||||
SLEEP LOOP Nighty-night
|
||||
|
||||
******************************************************************************
|
||||
* SNXBRX
|
||||
* This task blows off the pieces, then resets the piece pointers & calls KRSINI
|
||||
SNXBRX DEC OMTLEN,Y Another to do?
|
||||
BEQ 2$ Nope, so go die
|
||||
JSR SUBPIECE else let loose another piece
|
||||
SLEEP LOOP and rest
|
||||
|
||||
2$ LDD #PIECETBL Reset the Sinistar piece pointers
|
||||
STD PIECEPTR
|
||||
|
||||
JSR PCLRSCR Clear the lower screen
|
||||
JSR INISINI * To clean out the SiniStar image
|
||||
JMP DIE When we hit zero we're through
|
||||
|
||||
|
||||
PULLORG ROMSAVE
|
||||
|
||||
|
|
@ -0,0 +1,277 @@
|
|||
INCLUDE [SAM]START
|
||||
|
||||
INCLVER RICH,SPEAK
|
||||
|
||||
PUSHORG ROMSAVE
|
||||
|
||||
VECTOR PLAVECT On player initialization
|
||||
CLR PLUWPF Clear the player up warp flag
|
||||
RTS
|
||||
|
||||
|
||||
*******************************************************************************
|
||||
*
|
||||
* STATUS PAGE
|
||||
* DISPLAYED AT START OF PLAYER TURN
|
||||
|
||||
ROUTINE STATPG
|
||||
TST AMDEMO Test the mysterious AMDEMO flag
|
||||
BNE 200$ and exit immediately if non-zero
|
||||
|
||||
BSR 201$ with the Status Page call
|
||||
* 201$ returns with D set to the appropriate TIMER value
|
||||
PULS Y
|
||||
|
||||
JSR TIMER Replace STATPG wiped out TIMER call
|
||||
TST PLUWPF Did the player kill Baldy after dying?
|
||||
BEQ 255$ If zero, then nope
|
||||
NEW_SLEEP TASK1,10$,OTIMER+2 else yes, so make messages
|
||||
CLR PLUWPF and turn flag off
|
||||
JSR RSTPOP and reset the population
|
||||
|
||||
255$ PSHS Y
|
||||
|
||||
200$ JMP STATPG+3
|
||||
|
||||
* This queues up the zone message task
|
||||
10$ NEW_SLEEP TASK4,ZNMTSK This is the zone message task
|
||||
LDX OINDEX,X Save Display Task Index
|
||||
STX OTIMER,Y
|
||||
LDD #(60.*2) Sleep 2 seconds
|
||||
JSR TIMER
|
||||
LDX [OTIMER,Y] Get display task workspace into X
|
||||
LDD #DIE and force it to
|
||||
STD OEXEC,X commit suicide
|
||||
JSR PCLRSCR Clear screen
|
||||
JMP DIE Die
|
||||
|
||||
|
||||
* This is the main status page subroutine
|
||||
201$ PSHS X,Y,U
|
||||
|
||||
TUNE QPLSTR Play the player start song
|
||||
SPEAK 10. Silence the Sinifart!
|
||||
|
||||
JSR INISINI Go initialize the Sinistar
|
||||
|
||||
LDA NPLAYER Test if two-player
|
||||
DECA and
|
||||
BNE 1$ branch if so
|
||||
JSR PCLRSCR else clear the screen
|
||||
|
||||
1$ JSR FRAME Draw the current frame
|
||||
|
||||
TST PLUWPF If player should have warped
|
||||
BEQ 5$ but was dead instead then take branch
|
||||
|
||||
TEXT $50,$4E Write CONGRATS
|
||||
PHRASE WHITE,68,CONGRATULATIONS
|
||||
TEXT $42,$2B
|
||||
PHRASE WHITE,68,YOU,DEFEATED,THE,SINISTAR
|
||||
JMP 25$ Jump over bombs/pieces text
|
||||
|
||||
5$ TEXT $58,$53
|
||||
PHRASE BLUE,35,YOU,HAVE
|
||||
|
||||
PSHS D
|
||||
LDA BOMBS Go write the number of bombs to the screen
|
||||
JSR FAOBCD in RED
|
||||
PULS D
|
||||
|
||||
LEAX 4,X Advance cursor 4 pixels
|
||||
|
||||
WORD BLUE,35,SINIBOMBS
|
||||
|
||||
TEXT $52,$52
|
||||
PHRASE BLUE,35,SINISTAR,HAS
|
||||
|
||||
PSHS D
|
||||
|
||||
LDD PIECEPT Get SINISTAR recent-piece pointer and subtract
|
||||
SUBD #PIECETB the end-of-table pointer, yielding a
|
||||
ASRA displacement which, when divided by 4 for
|
||||
RORB the 4 bytes of each table entry, gives the
|
||||
ASRA number of Sinipieces. If FINISH is set
|
||||
RORB equal to ALIVE then the SS is alive and the
|
||||
PSHS B piece count must be incremented by one to
|
||||
LDD FINISH account for the skull
|
||||
CMPD #ALIVE
|
||||
BNE 15$
|
||||
INC ,S
|
||||
15$ LDA ,S Fetch the piece count for output in RED
|
||||
JSR FAOBCD
|
||||
|
||||
LDD 1,S Restore D
|
||||
|
||||
LEAX 4,X Advance cursor 4 pixels
|
||||
|
||||
WORD BLUE,35,PIECES
|
||||
|
||||
PULS A Restore Sinipiece-count, and if less than
|
||||
CMPA BOMBS or equal to number of Sbombs then skip
|
||||
BLE 20$ MINE CRYSTALS message
|
||||
|
||||
TEXT $48,$3C else remind the dummy of his/her primary task
|
||||
PHRASE RED,35,MINE,CRYSTALS,TO,MAKE,SINIBOMBS
|
||||
|
||||
20$ LEAS 2,S Restore the stack from previous PSHS D
|
||||
|
||||
25$ JSR STTDRS Draw the Sinistar image
|
||||
|
||||
LDA SINIKIL Test for player Sinikills
|
||||
BEQ 30$ and if none then skip extra message
|
||||
|
||||
TEXT $20,$44 else let him/her know the score
|
||||
PHRASE SILVER,35,YOU,HAVE,SMASHED
|
||||
|
||||
LDA SINIKIL Write the number of kills
|
||||
JSR FAOBCD
|
||||
|
||||
LEAX 4,X and put another word
|
||||
LDB #SILVER with the color silver
|
||||
WORD SILVER,35,SINISTAR
|
||||
|
||||
LDA SINIKIL and if #kills = 1 then branch out
|
||||
DECA
|
||||
BEQ 30$
|
||||
|
||||
LEAX -4,X else write an S for proper grammar
|
||||
WORD SILVER,35,S
|
||||
|
||||
30$ LDA SINIKILL Get kill count
|
||||
BEQ 31$ If none then nozone
|
||||
ANDA #3 Strip to zone
|
||||
PSHS A Save for second use
|
||||
LDX #$1B51 Text location
|
||||
LDU #ZNOTBL Address of offset table
|
||||
LDB A,U Get offset for this text
|
||||
LEAX B,X and adjust screen location with it
|
||||
LDD #(.ENTER*$100)+SILVER
|
||||
TST PLUWPF
|
||||
BNE 35$
|
||||
LEAX 3,X
|
||||
LDA #.NOW
|
||||
JSR OUTP35
|
||||
LDA #.IN
|
||||
35$ JSR OUTP35
|
||||
|
||||
PULS A Restore zone value
|
||||
LDU #ZNTTBL Get word values table
|
||||
LDA A,U Get word value
|
||||
LDB #RED Get color for this word
|
||||
JSR OUTP35 Go print it
|
||||
LDD #(.ZONE*$100)+SILVER Set up for word ZONE in color SILVER
|
||||
JSR OUTP35 Go print it
|
||||
|
||||
31$ TST PLUWPF Should player have warped?
|
||||
BNE 80$ If so, then do special function
|
||||
|
||||
LDD FINISH Now test if the Sinistar is alive
|
||||
CMPD #ALIVE and skip the SPEAK call if not
|
||||
BNE 83$
|
||||
|
||||
* Say "Beware, I Live"
|
||||
SPEAK 11.
|
||||
|
||||
* Now, create a task to animate the Sinistar while he speaks
|
||||
NEW_SLEEP TASK1,STTSPK,OMTLEN+1
|
||||
LDA #60.*3 Set up to animate for 3 seconds
|
||||
STA OMTLEN,X
|
||||
|
||||
LDD #60.*4 Set up to run TIMER for 4 seconds
|
||||
BRA 86$
|
||||
|
||||
80$ LDD #(60.*4)
|
||||
BRA 89$
|
||||
|
||||
83$ LDD #60.*3 Set up to run TIMER for 3 secondS
|
||||
|
||||
86$ PSHS D
|
||||
NEW_SLEEP TASK1,STTBCL,OMTLEN+2
|
||||
PULS D
|
||||
STD OMTLEN,X
|
||||
|
||||
|
||||
89$ PULS X,Y,U,PC Now it's time to say goodbye
|
||||
|
||||
|
||||
ZNOTBL FCB 10.,6,4,0 Offsets for zone text
|
||||
ZNTTBL FCB .VOID,.WORKER,.WARRIOR,.PLANETOID Word values for zone
|
||||
|
||||
|
||||
******************************************************************************
|
||||
* FAOBAD
|
||||
* fix and output BCD in color red
|
||||
* returns through OUTB35
|
||||
|
||||
FAOBCD JSR HEXBCD Translate register A from HEX to BCD
|
||||
BITA #$F0
|
||||
BNE 1$
|
||||
ORA #$F0
|
||||
1$ LDB #RED Get color RED for output
|
||||
JMP OUTB35 Go write the digit(s)
|
||||
|
||||
|
||||
|
||||
******************************************************************************
|
||||
* STTSPK
|
||||
* Task to animate the Sinistar while he speaks
|
||||
* Expects pointer to task workspace in Y
|
||||
|
||||
STTSPK DEC OMTLEN,Y Count down
|
||||
LBEQ DIE and go die when done
|
||||
|
||||
JSR STTDRS Else, draw the Sinistar image one more time
|
||||
SLEEP LOOP and then back to sleepy-by
|
||||
|
||||
|
||||
|
||||
******************************************************************************
|
||||
* STTDRS
|
||||
* Draw the Sinistar image
|
||||
|
||||
STTDRS PSHS D
|
||||
|
||||
LDA #SINIHI Sinistar Height & Width
|
||||
LDB #SINIWI
|
||||
EORA #$4
|
||||
EORB #$4
|
||||
STD DHIGH
|
||||
|
||||
LDD #$2A66 Screen location
|
||||
STD DDEST
|
||||
|
||||
LDD #SINIMAG Image Address
|
||||
STD DSOUR
|
||||
|
||||
LDA #$0E DO RAM to RAM draw
|
||||
STA DCTRL
|
||||
|
||||
PULS D,PC Return
|
||||
|
||||
|
||||
|
||||
******************************************************************************
|
||||
* STTBCL
|
||||
* Status Page Background Color Task
|
||||
* If Sinistar is not built yet, turn screen blue
|
||||
* else turn screen RED
|
||||
|
||||
STTBCL LDD OMTLEN,Y Count down task and split when done
|
||||
SUBD #1
|
||||
STD OMTLEN,Y
|
||||
LBEQ DIE
|
||||
|
||||
LDA #$40 Get background color of blue
|
||||
LDU FINISH Test if Sinistar is alive yet
|
||||
CMPU #ALIVE If FINISH and ALIVE are not equal
|
||||
BNE 1$ then SS is not built so use BLUE
|
||||
LDA #$02 else SS LIVES! Use scary RED
|
||||
1$ STA PCRAM
|
||||
SLEEP LOOP
|
||||
|
||||
|
||||
|
||||
* That's all, folks!
|
||||
PULLORG ROMSAVE
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
|
||||
28943F ***
|
||||
28944F * Psuedo Warrior bombing in orbit. (TASKLIST 8/16)
|
||||
28945F ***
|
||||
28946F+ TABLE stblbomber
|
||||
60B5 28949G stblbomber
|
||||
60B5 7FFF 1FFF 48EC 28975F fdb ($7FFF),($1FFF),asrd3
|
||||
60BB 0064 0100 48F0 28976F fdb (0100.),($0100),asrd1
|
||||
60C1 0040 00C0 48F0 28977F fdb (0064.),($00C0),asrd1
|
||||
60C7 0020 00A0 48F0 28978F fdb (0032.),($00A0),asrd1
|
||||
60CD 0010 0080 48F2 28979F fdb (0016.),($0080),asrd0
|
||||
60D3 0000 0000 48F2 28980F fdb (0000.),($0000),asrd0
|
||||
28981F+ ENDTBL
|
||||
29002F
|
|
@ -0,0 +1,78 @@
|
|||
$ disp := write sys$output
|
||||
$ IF P1.EQS."".OR.P1.EQS."*" THEN P1:= LIS$DIR:PGM.LIS
|
||||
$ IF P2.EQS."".OR.P2.EQS."*" THEN P2:= [SAM.V'VERSION']SAM
|
||||
$ DISP "
|
||||
from: ''P1' into: ''P2'.SYM"
|
||||
$ SYMCOUNT = 0
|
||||
$ ERRCOUNT = 0
|
||||
$ SEARCH/NOHEAD/OUTPUT=UNDEFINED.TMP 'P1' " ***** "
|
||||
$ ON CONT_Y THEN GOTO ERROREND
|
||||
$ OPEN UNDEF UNDEFINED.TMP
|
||||
$ OPEN/WRITE NEWSYM NEWSYMVER.TMP
|
||||
$LINELOOP:
|
||||
$ READ/END=GOODEND UNDEF LINE
|
||||
$ POS = 0
|
||||
$SYMLOOP:
|
||||
$ LINE := "XXXXX "'F$EX(POS,99,LINE)
|
||||
$ POS = 'F$LOC(" *****",LINE)+7
|
||||
$ IF POS.EQ.'F$LEN(LINE)+7 THEN GOTO LINELOOP
|
||||
$ SYM := 'F$EX(POS-13,6,LINE)
|
||||
$ SPACE = 'F$LOC(" ",SYM)
|
||||
$ IF SPACE.NE.'F$LEN(SYM) THEN SYM := 'F$EX(SPACE+1,6-SPACE,SYM)
|
||||
$ SEA/NOH/O=S.TMP [SAM.V'VERSION']LIBRARY.EQU 'SYM'
|
||||
$ OPEN SRCH S.TMP
|
||||
$ LENSYM = 'F$LEN(SYM)
|
||||
$ VALUE := ""
|
||||
$SEALOOP:
|
||||
$ READ/END=SEAEND SRCH SLINE
|
||||
$ IF 'F$LOC(SYM,SLINE).NE.0 THEN GOTO SEALOOP
|
||||
$ IF LENSYM.NE.6.AND.'F$LOC(" ",SLINE).NE.LENSYM THEN GOTO SEALOOP
|
||||
$ NEWVAL := 'F$EX(F$LOC(" $",SLINE)+2,4,SLINE)
|
||||
$ IF VALUE.EQS."".OR.NEWVAL.EQS.VALUE THEN GOTO NOTMULT
|
||||
$ DISP SYM," has multiple values"
|
||||
$ ERRCOUNT = ERRCOUNT+1
|
||||
$ GOTO SYMEND
|
||||
$NOTMULT:
|
||||
$ VALUE := 'NEWVAL
|
||||
$ GOTO SEALOOP
|
||||
$SEAEND:
|
||||
$ IF VALUE.NES."" THEN GOTO DEFINED
|
||||
$ DISP SYM," is not defined"
|
||||
$ ERRCOUNT = ERRCOUNT+1
|
||||
$ GOTO SYMEND
|
||||
$DEFINED:
|
||||
$ DISP SYM," = $",VALUE
|
||||
$ WRITE NEWSYM " SYMVER ",SYM,",$",VALUE
|
||||
$ SYMCOUNT = SYMCOUNT+1
|
||||
$SYMEND:
|
||||
$ CLOSE SRCH
|
||||
$ DEL S.TMP;*
|
||||
$ GOTO SYMLOOP
|
||||
$GOODEND:
|
||||
$ DISP SYMCOUNT," new symbols"
|
||||
$ DISP ERRCOUNT," errors"
|
||||
$ IF SYMCOUNT.EQ.0 THEN GOTO ABORT
|
||||
$ IF ERRCOUNT.EQ.0 THEN GOTO MERGEIT
|
||||
$ IF P3.EQS."" THEN INQ P3 "Do you want to merge anyway?"
|
||||
$ IF F$EX(0,1,P3).NES."Y" THEN GOTO ABORT
|
||||
$MERGEIT:
|
||||
$ CLOSE NEWSYM
|
||||
$ OPEN/ERROR=NEWFILE TEST 'P2'.SYM
|
||||
$ CLOSE TEST
|
||||
$ APPEND 'P2'.SYM NEWSYMVER.TMP
|
||||
$ DISP "merging into ",P2,".SYM"
|
||||
$ GOTO SORTIT
|
||||
$NEWFILE:
|
||||
$ DISP "creating ",P2,".SYM"
|
||||
$SORTIT:
|
||||
$ SORT/KEY=(POS=8,SIZE=6) NEWSYMVER.TMP 'P2'.SYM
|
||||
$ GOTO END
|
||||
$ABORT:
|
||||
$ DISP "merge aborted"
|
||||
$ERROREND:
|
||||
$ CLOSE NEWSYM
|
||||
$END:
|
||||
$ CLOSE UNDEF
|
||||
$ DEL UNDEFINED.TMP;*
|
||||
$ DEL NEWSYMVER.TMP;*
|
||||
$ DISP ""
|
|
@ -0,0 +1,111 @@
|
|||
|
||||
INCLUDE [SAM]START
|
||||
|
||||
INCLVER SAM,SINISTAR.EQU
|
||||
|
||||
|
||||
INCLVER BOB,BOBFIXES
|
||||
|
||||
TPATCH
|
||||
|
||||
|
||||
PUSHORG ROMSAVE
|
||||
VECTOR POWVECT
|
||||
LDA #$69 Gimme them old 69 credits
|
||||
STA CREDITS
|
||||
RTS
|
||||
PULLORG ROMSAVE
|
||||
|
||||
|
||||
*BOBSFF SET $FFA0
|
||||
BOBSFF SET $0F23
|
||||
|
||||
|
||||
PUSHORG BOBSFF
|
||||
SWITCH FIREB,OPEN
|
||||
* JMP DEATH
|
||||
JSR ADDPIEC
|
||||
LDA #$7F
|
||||
STA $A013
|
||||
RTS
|
||||
PULLORG BOBSFF
|
||||
|
||||
|
||||
* LOCAL
|
||||
* PUSHORG $7FA5
|
||||
*
|
||||
* RANDOM OSEED1,WORD
|
||||
*
|
||||
* LDB #7
|
||||
* ANDA #%00000111
|
||||
* JMP 15$
|
||||
* PUSHORG BOBSFF
|
||||
*15$ BNE 2$
|
||||
* CLRB
|
||||
* BRA 3$
|
||||
*2$ ANDA #%00000011
|
||||
* BNE 3$
|
||||
* LDB #$35
|
||||
*
|
||||
*3$ STB PCRAM
|
||||
* SLEEP LOOP
|
||||
*
|
||||
* PULLORG BOBSFF
|
||||
* PULLORG
|
||||
*
|
||||
|
||||
* LOCAL
|
||||
* PUSHORG $7FE9
|
||||
* JSR 1$
|
||||
* PUSHORG BOBSFF
|
||||
*1$ STD PIECEPTR
|
||||
* LDX [SININDEX]
|
||||
* LDU OSSCWSA,X
|
||||
* LDA OLPOS,U
|
||||
* LDB OLPOSF,U
|
||||
* RPT 2,ASLB,ROLA
|
||||
* ADDA SINILN
|
||||
* STA OSLPOS,X
|
||||
* LDA OSPOS,U
|
||||
* LDB OSPOSF,U
|
||||
* RPT 2,ASLB,ROLA
|
||||
* ADDA SINISN
|
||||
* STA OSSPOS,X
|
||||
* RTS
|
||||
* PULLORG BOBSFF
|
||||
* PULLORG
|
||||
|
||||
* LOCAL
|
||||
* PUSHORG $802B
|
||||
* JMP 1$
|
||||
* PUSHORG BOBSFF
|
||||
*1$ LDX [SININDEX]
|
||||
* JSR UNTARGET
|
||||
* JMP DIE
|
||||
* PULLORG BOBSFF
|
||||
* PULLORG
|
||||
|
||||
|
||||
PUSHORG $88D1
|
||||
FDB MAXETV/2
|
||||
PULLORG
|
||||
|
||||
|
||||
* LOCAL
|
||||
* PUSHORG $5B06
|
||||
*50$ RMB 0
|
||||
* PULLORG
|
||||
* PUSHORG $5B63
|
||||
* JMP 100$
|
||||
* PULLORG
|
||||
* PUSHORG BOBSFF
|
||||
*100$ SLEEP HERE
|
||||
* SLEEP 50$
|
||||
* PULLORG BOBSFF
|
||||
|
||||
|
||||
PUSHORG $7F7B
|
||||
FCB $5A
|
||||
PULLORG
|
||||
|
||||
|
|
@ -0,0 +1,107 @@
|
|||
|
||||
INCLUDE [SAM]START
|
||||
|
||||
INCLVER SAM,SINISTAR.EQU
|
||||
|
||||
|
||||
INCLVER BOB,BOBFIXES
|
||||
|
||||
TPATCH
|
||||
|
||||
|
||||
PUSHORG ROMSAVE
|
||||
VECTOR POWVECT
|
||||
LDA #$69 Gimme them old 69 credits
|
||||
STA CREDITS
|
||||
RTS
|
||||
PULLORG ROMSAVE
|
||||
|
||||
|
||||
*BOBSFF SET $FFA0
|
||||
BOBSFF SET $0F23
|
||||
|
||||
|
||||
PUSHORG BOBSFF
|
||||
SWITCH FIREB,OPEN
|
||||
* JMP DEATH
|
||||
JSR ADDPIEC
|
||||
LDA #$7F
|
||||
STA $A013
|
||||
RTS
|
||||
PULLORG BOBSFF
|
||||
|
||||
|
||||
LOCAL
|
||||
PUSHORG $7FA5
|
||||
TFR A,B
|
||||
ANDA #3
|
||||
LBNE 4$
|
||||
LDA #7
|
||||
JMP 2$
|
||||
PUSHORG BOBSFF
|
||||
2$ ANDB #%00000011
|
||||
BNE 3$
|
||||
LDA #$35
|
||||
|
||||
3$ STA PCRAM
|
||||
4$ SLEEP LOOP
|
||||
|
||||
PULLORG BOBSFF
|
||||
PULLORG
|
||||
|
||||
|
||||
LOCAL
|
||||
PUSHORG $7FE9
|
||||
JSR 1$
|
||||
PUSHORG BOBSFF
|
||||
1$ STD PIECEPTR
|
||||
LDX [SININDEX]
|
||||
LDU OSSCWSA,X
|
||||
LDA OLPOS,U
|
||||
LDB OLPOSF,U
|
||||
RPT 2,ASLB,ROLA
|
||||
ADDA SINILN
|
||||
STA OSLPOS,X
|
||||
LDA OSPOS,U
|
||||
LDB OSPOSF,U
|
||||
RPT 2,ASLB,ROLA
|
||||
ADDA SINISN
|
||||
STA OSSPOS,X
|
||||
RTS
|
||||
PULLORG BOBSFF
|
||||
PULLORG
|
||||
|
||||
* LOCAL
|
||||
* PUSHORG $802B
|
||||
* JMP 1$
|
||||
* PUSHORG BOBSFF
|
||||
*1$ LDX [SININDEX]
|
||||
* JSR UNTARGET
|
||||
* JMP DIE
|
||||
* PULLORG BOBSFF
|
||||
* PULLORG
|
||||
|
||||
|
||||
PUSHORG $88D1
|
||||
FDB MAXETV/2
|
||||
PULLORG
|
||||
|
||||
|
||||
LOCAL
|
||||
PUSHORG $5B06
|
||||
50$ RMB 0
|
||||
PULLORG
|
||||
PUSHORG $5B63
|
||||
JMP 100$
|
||||
PULLORG
|
||||
PUSHORG BOBSFF
|
||||
100$ SLEEP HERE
|
||||
SLEEP 50$
|
||||
PULLORG BOBSFF
|
||||
|
||||
|
||||
PUSHORG $7F7B
|
||||
FCB $5A
|
||||
PULLORG
|
||||
|
||||
|
|
@ -0,0 +1,80 @@
|
|||
$ V := .V'VERSION
|
||||
$ DISP "
|
||||
from: ''P1' into: ''P2'.SYM"
|
||||
$ SYMCOUNT = 0
|
||||
$ ERRCOUNT = 0
|
||||
$ SEARCH/NOHEAD/OUTPUT=UNDEFINED.TMP 'P1' " ***** "
|
||||
$ ON CONT_Y THEN GOTO ERROREND
|
||||
$ COPY :==
|
||||
$ COPY/CONC [SAM'V']MESSAGE.EQU,[SAM'V']IMAGE.EQU,[SAM'V']EQUATES.EQU,[SAM'V']SAMS.EQU,[WITT'V']RICHS.EQU,[FALS'V']NOAHS.EQU EQU.TMP
|
||||
$ COPY :== @[WITT.COM]COPY
|
||||
$ OPEN UNDEF UNDEFINED.TMP
|
||||
$ OPEN/WRITE NEWSYM NEWSYMVER.TMP
|
||||
$LINELOOP:
|
||||
$ READ/END=GOODEND UNDEF LINE
|
||||
$ POS = 0
|
||||
$SYMLOOP:
|
||||
$ LINE := "XXXXX "'F$EX(POS,99,LINE)
|
||||
$ POS = 'F$LOC(" *****",LINE)+7
|
||||
$ IF POS.EQ.'F$LEN(LINE)+7 THEN GOTO LINELOOP
|
||||
$ SYM := 'F$EX(POS-13,6,LINE)
|
||||
$ SPACE = 'F$LOC(" ",SYM)
|
||||
$ IF SPACE.NE.'F$LEN(SYM) THEN SYM := 'F$EX(SPACE+1,6-SPACE,SYM)
|
||||
$ SEA/NOH/O=S.TMP EQU.TMP 'SYM'
|
||||
$ OPEN SRCH S.TMP
|
||||
$ LENSYM = 'F$LEN(SYM)
|
||||
$ VALUE := ""
|
||||
$SEALOOP:
|
||||
$ READ/END=SEAEND SRCH SLINE
|
||||
$ IF 'F$LOC(SYM,SLINE).NE.0 THEN GOTO SEALOOP
|
||||
$ IF LENSYM.NE.6.AND.'F$LOC(" ",SLINE).NE.LENSYM THEN GOTO SEALOOP
|
||||
$ NEWVAL := 'F$EX(F$LOC(" $",SLINE)+2,4,SLINE)
|
||||
$ IF VALUE.EQS."".OR.NEWVAL.EQS.VALUE THEN GOTO NOTMULT
|
||||
$ DISP SYM," has multiple values"
|
||||
$ ERRCOUNT = ERRCOUNT+1
|
||||
$ GOTO SYMEND
|
||||
$NOTMULT:
|
||||
$ VALUE := 'NEWVAL
|
||||
$ GOTO SEALOOP
|
||||
$SEAEND:
|
||||
$ IF VALUE.NES."" THEN GOTO DEFINED
|
||||
$ DISP SYM," is not defined"
|
||||
$ ERRCOUNT = ERRCOUNT+1
|
||||
$ GOTO SYMEND
|
||||
$DEFINED:
|
||||
$ DISP SYM," = $",VALUE
|
||||
$ WRITE NEWSYM " SYMVER ",SYM,",$",VALUE
|
||||
$ SYMCOUNT = SYMCOUNT+1
|
||||
$SYMEND:
|
||||
$ CLOSE SRCH
|
||||
$ DEL S.TMP;*
|
||||
$ GOTO SYMLOOP
|
||||
$GOODEND:
|
||||
$ DISP SYMCOUNT," new symbols"
|
||||
$ DISP ERRCOUNT," errors"
|
||||
$ IF SYMCOUNT.EQ.0 THEN GOTO ABORT
|
||||
$ IF ERRCOUNT.EQ.0 THEN GOTO MERGEIT
|
||||
$ IF P3.EQS."" THEN INQ P3 "Do you want to merge anyway?"
|
||||
$ IF F$EX(0,1,P3).NES."Y" THEN GOTO ABORT
|
||||
$MERGEIT:
|
||||
$ CLOSE NEWSYM
|
||||
$ OPEN/ERROR=NEWFILE TEST 'P2'.SYM
|
||||
$ CLOSE TEST
|
||||
$ APPEND 'P2'.SYM NEWSYMVER.TMP
|
||||
$ DISP "merging into ",P2,".SYM"
|
||||
$ GOTO SORTIT
|
||||
$NEWFILE:
|
||||
$ DISP "creating ",P2,".SYM"
|
||||
$SORTIT:
|
||||
$ SORT/KEY=(POS=8,SIZE=6) NEWSYMVER.TMP 'P2'.SYM
|
||||
$ GOTO END
|
||||
$ABORT:
|
||||
$ DISP "merge aborted"
|
||||
$ERROREND:
|
||||
$ CLOSE NEWSYM
|
||||
$END:
|
||||
$ CLOSE UNDEF
|
||||
$ DEL EQU.TMP;*
|
||||
$ DEL UNDEFINED.TMP;*
|
||||
$ DEL NEWSYMVER.TMP;*
|
||||
$ DISP ""
|
|
@ -0,0 +1,28 @@
|
|||
INCLUDE [SAM]START
|
||||
|
||||
INCLVER SAM,SINISTAR.EQU
|
||||
|
||||
INCLVER SAM,SAM.SYM
|
||||
INCLVER RICH,RICH.SYM
|
||||
INCLVER NOAH,NOAH.SYM
|
||||
INCLVER BOB,BOB.SYM
|
||||
|
||||
INCLVER BOB,ZBOBEQU
|
||||
INCLVER BOB,ZBOBOFF
|
||||
|
||||
INCLVER SAM,SAMFIXES
|
||||
INCLVER RICH,RICHFIXES
|
||||
INCLVER NOAH,NOAHFIXES
|
||||
INCLVER BOB,BOBFIXES
|
||||
|
||||
|
||||
INCLVER SAM,SAM
|
||||
INCLVER RICH,RICH
|
||||
INCLVER NOAH,NOAH
|
||||
INCLVER BOB,BOB
|
||||
|
||||
INCLVER BOB,TPATCH
|
||||
|
||||
ENDTEST
|
||||
|
||||
END
|
|
@ -0,0 +1,105 @@
|
|||
|
||||
INCLUDE [SAM]START
|
||||
INCLVER SAM,SINISTAR.EQU
|
||||
|
||||
PUSHORG ROMSAVE
|
||||
|
||||
******************************************************************************
|
||||
*
|
||||
* WARRIOR EXPLOSION TASK
|
||||
*
|
||||
* Entry: Y points to task workspace
|
||||
|
||||
WRXTSK LDA OWXPCK,Y
|
||||
DECA
|
||||
ASLA Turn index into word index
|
||||
LDX #WRXITB Get the address of the image addresses tables
|
||||
LDX A,X X <- address of the image
|
||||
STX DSOUR Save this to the DMA for the draw-loop below
|
||||
LDD #WRXISZ Get the constant size of the image
|
||||
EORA #4 and set it up for
|
||||
EORB #4 the screwy DMA output
|
||||
STD DHIGH (Why did they do this to us?)
|
||||
|
||||
INC OWXALV,Y
|
||||
LDB OWXALV,Y
|
||||
ASRB
|
||||
BCS 10$
|
||||
DEC OWXPCK,Y
|
||||
|
||||
10$ LDA #WRXPCT Get the piece-per-wave count
|
||||
PSHS A move and then save this number on the stack
|
||||
|
||||
LEAX OPXOTB,Y X <- address of the first entry in the
|
||||
* task object table
|
||||
|
||||
30$ LDD OWXPSP,X Get the screen position for this fragment
|
||||
BEQ 50$ If zero then this fragment is off-screen
|
||||
STD DDEST Else write this destination to the DMA
|
||||
CLR DCONS Clear the DMA Constant for a zero write
|
||||
LDA #$12 DMA
|
||||
STA DCTRL away!
|
||||
|
||||
TST OWXPCK,Y
|
||||
BEQ 50$
|
||||
|
||||
LDA OWXPSP,X Restore the top half of the screen position
|
||||
ADDD OWXPMM,X Mix in the momentum of this fragment
|
||||
CMPA #SCRNLH-3 Stir gently, abandon all hope if off-screen
|
||||
BHI 40$
|
||||
CMPB #SCRNSL
|
||||
BLO 40$
|
||||
CMPB #SCRNSH
|
||||
BHI 40$
|
||||
|
||||
STD OWXPSP,X Now D has the new screen position. Save it to
|
||||
STD DDEST both the task workspace and the DMA
|
||||
LDA #$0E Now draw this next fragment
|
||||
STA DCTRL
|
||||
BRA 50$ Go do next
|
||||
|
||||
40$ CLR OWXPSP,X Mark this fragment as
|
||||
CLR OWXPSP+1,X off-screen
|
||||
|
||||
50$ LEAX OWXPSZ,X Advance X to point to next fragment entry
|
||||
DEC ,S Decrement the number of pieces we want to move
|
||||
BNE 30$ and go do another if there's more to do
|
||||
|
||||
LEAS 1,S Clean up stack
|
||||
|
||||
TST OWXPCK,Y Increment how many turns these fragments have
|
||||
LBEQ DIE been moving and while less than 128 continue
|
||||
* else go die now
|
||||
|
||||
60$ SLEEP LOOP Go back to sleep, wake again at top of routine
|
||||
|
||||
|
||||
WRXITB FDB WRXIM3,WRXIM2,WRXIM1,WRXIM0,WRXIM0,WRXIM0
|
||||
|
||||
WRXIM0 FCB $0A,$0A,$00
|
||||
FCB $AA,$AA,$A0
|
||||
FCB $0A,$FA,$00
|
||||
FCB $AA,$AA,$A0
|
||||
FCB $0A,$0A,$00
|
||||
|
||||
WRXIM1 FCB $0A,$0A,$00
|
||||
FCB $A1,$D1,$A0
|
||||
FCB $0D,$DD,$00
|
||||
FCB $A1,$D1,$A0
|
||||
FCB $0A,$0A,$00
|
||||
|
||||
WRXIM2 FCB $00,$00,$00
|
||||
FCB $0C,$CC,$00
|
||||
FCB $0C,$0C,$00
|
||||
FCB $0C,$CC,$00
|
||||
FCB $00,$00,$00
|
||||
|
||||
WRXIM3 FCB $0D,$0D,$00
|
||||
FCB $D0,$00,$D0
|
||||
FCB $00,$00,$00
|
||||
FCB $D0,$00,$D0
|
||||
FCB $0D,$0D,$00
|
||||
|
||||
|
||||
PULLORG ROMSAVE
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
ZBOBEQU
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
ZBOBOFF
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
INCLUDE [SAM]START
|
||||
INCLVER SAM,SINISTAR.EQU
|
||||
|
||||
PUSHORG ROMSAVE
|
||||
|
||||
* display game over in player window
|
||||
ROUTINE GAMOVER
|
||||
DISPLAY 0 point to text window
|
||||
PHRASE RED,35,GAME,OVER
|
||||
RTS
|
||||
|
||||
PULLORG ROMSAVE
|
|
@ -0,0 +1,71 @@
|
|||
INCLUDE [SAM]START
|
||||
INCLVER SAM,SINISTAR
|
||||
|
||||
PUSHORG ROMSAVE
|
||||
|
||||
*******************************************************************************
|
||||
*
|
||||
* PLAYER EXPLOSION TASK QUEUER
|
||||
*
|
||||
* Entry: X points to the player ship image descriptor
|
||||
ROUTINE PLXQUE
|
||||
|
||||
PSHS D,X,Y,U
|
||||
|
||||
LDA #7 Turn palette zero into bright-red
|
||||
STA PCRAM
|
||||
|
||||
LDD FREE Test for enough free memory for the task
|
||||
CMPD #2*(OPXRRQ+ODYNOVH) and
|
||||
BLT PLXXIT exit without creating the task if not
|
||||
|
||||
TFR X,U U <- pointer to Image Descriptor
|
||||
NEW_SLEEP TASK2,PLXTSK,OPXRRQ Create the player explosion task
|
||||
|
||||
CLR OPXALV,X Clear the PlayerX turns-alive counter
|
||||
|
||||
LEAY OPXOTB,X Y <- address of the fragments table
|
||||
|
||||
LDD OBOTTOM,U D <- screen position of the player ship
|
||||
PSHS D Save on stack
|
||||
|
||||
LDA #PXPPCT*PXPWVS Get the total number of fragments to create
|
||||
PSHS A and save this on the stack
|
||||
|
||||
* This loop picks at random the velocity vector and starting position
|
||||
* displacement for each fragment
|
||||
PLXPLP RANDOM OSEED2,15.,-7 Random SHORT velocity of -7 to 7
|
||||
PSHS A
|
||||
RANDOM OSEED1,7,-3 Random LONG velocity of -3 to 3
|
||||
PULS B Restore SHORT velocity
|
||||
STD OPXPMM,Y Save it into this table entry
|
||||
BEQ PLXPLP If momentum is zero, try again
|
||||
|
||||
RANDOM OSEED1,4 Now, get a SHORT position offset
|
||||
ASLA Multiply by 2
|
||||
PSHS A
|
||||
RANDOM OSEED2,4 Get the LONG offset
|
||||
PULS B Restore short
|
||||
ADDD 1,S Add the screen position
|
||||
STD OPXPSP,Y Save this fragment's screen position
|
||||
|
||||
LEAY OPXPSZ,Y Advance Y to the next entry
|
||||
|
||||
DEC ,S Decrement the fragment count
|
||||
BNE PLXPLP While not zero set up another fragment
|
||||
|
||||
LEAS 3,S Else reset stack
|
||||
|
||||
LDD FREE Test if there's enough memory left
|
||||
CMPD #2*(OPEXTSZ+ODYNOVH) for this task
|
||||
BLT PLXXIT and skip it if not
|
||||
|
||||
NEW_SLEEP TASK2,PLEXTRA,OPEXTSZ else queue up the task
|
||||
|
||||
|
||||
PLXXIT PULS D,X,Y,U,PC and split
|
||||
|
||||
|
||||
|
||||
PULLORG ROMSAVE
|
||||
|
|
@ -0,0 +1,95 @@
|
|||
|
||||
|
||||
PUSHORG ROMSAVE
|
||||
|
||||
ROUTINE PNTSCRN
|
||||
******************************************************************************
|
||||
* PNTSCRN
|
||||
* clears out the system, sets up the information tasks, restarts the system
|
||||
|
||||
JSR SYSTINI
|
||||
NEW_SLEEP TASK1,255$,OTIMER
|
||||
NEW_SLEEP TASK1,NATMSG,OMTLEN+1 NATMSG
|
||||
NEW_SLEEP TASK1,CDTask,OMTLEN+1 DCREDITS
|
||||
JMP STARTS
|
||||
|
||||
|
||||
255$ PSHS Y
|
||||
|
||||
LDA #%00110011 Allow Player 1/2, Fire and Sinibomb buttons
|
||||
STA PANMASK
|
||||
|
||||
JSR CLRSCR
|
||||
|
||||
LDA PMEMCTL Turn off DMA-inhibit
|
||||
PSHS A
|
||||
ANDA #!N4
|
||||
STA PMEMCTL
|
||||
STA MEMCTL
|
||||
|
||||
LDX #PNTIMT Image Addresses Table
|
||||
LDY #PNTSCT Screen Position Table
|
||||
|
||||
1$ LDU ,X++ Get next image address
|
||||
BEQ 100$ Done when zero
|
||||
LDD ,U++ Get size
|
||||
EORA #4
|
||||
EORB #4
|
||||
STD $CA06
|
||||
LDD ,U++ Get image data address
|
||||
STD $CA02
|
||||
LDD ,Y++ Get screen location
|
||||
STD $CA04
|
||||
LDA #$0E
|
||||
STA $CA00
|
||||
BRA 1$
|
||||
|
||||
|
||||
100$ TEXT $80,$60
|
||||
PHRASE PINK,35,PLANETOIDS
|
||||
WORD BLUE,35,5
|
||||
WORD SILVER,35,POINTS
|
||||
TEXT $72,$60
|
||||
PHRASE PINK,35,WORKER
|
||||
WORD BLUE,35,150
|
||||
WORD SILVER,35,POINTS
|
||||
TEXT $64,$60
|
||||
PHRASE PINK,35,CRYSTAL
|
||||
WORD BLUE,35,200
|
||||
WORD SILVER,35,POINTS
|
||||
TEXT $56,$60
|
||||
PHRASE PINK,35,WARRIOR
|
||||
WORD BLUE,35,500
|
||||
WORD SILVER,35,POINTS
|
||||
TEXT $48,$60
|
||||
PHRASE PINK,35,SINISTAR,PIECE
|
||||
WORD BLUE,35,500
|
||||
WORD SILVER,35,POINTS
|
||||
TEXT $37,$3E
|
||||
PHRASE RED,68,DESTROY,THE,SINISTAR
|
||||
TEXT $31,$59
|
||||
PHRASE BLUE,68,15000
|
||||
WORD SILVER,68,POINTS
|
||||
|
||||
PULS A,Y Fetch DMA inhibit and workspace pointer
|
||||
STA PMEMCTL Restore DMA
|
||||
STA MEMCTL
|
||||
|
||||
LDD #(60.*7.)
|
||||
JSR TIMER
|
||||
JMP IAMODE
|
||||
|
||||
|
||||
PNTIMT FDB IPLAN2,IWORKER
|
||||
FDB ICRYSTAL,IWARRIOR,IBARREL,S1L
|
||||
FDB 0
|
||||
PNTSCT FDB $7C3A,$7140
|
||||
FDB $6544,$543D,$5945,$473E
|
||||
|
||||
IBARREL FDB $0201,1$
|
||||
1$ FCB $42,$20
|
||||
|
||||
PULLORG ROMSAVE
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
$!!!!!
|
||||
$!
|
||||
$! SINISTAR MEMORY MAP ...
|
||||
$! 0000 - 8BFF Reserved for Sinistar images, executive, tactics, intelligences
|
||||
$! 8C00 - 8FFF Second part of message utility.
|
||||
$! 9000 - 97FF Screen mapped scratch RAM
|
||||
$! 9800 - 98FF Direct Page RAM
|
||||
$! 9900 - BEFF Extended RAM
|
||||
$! BF00 - BF7F Message/Bookkeeping RAM
|
||||
$! BF80 - BFFE DCON scratch pad RAM
|
||||
$! BFFF DCON mirror $C800
|
||||
$! C000 - CFFF I/O ports
|
||||
$! D000 - DEFF Static RAM
|
||||
$! E000 - E1FF Sinistar IRQ routine.
|
||||
$! E200 - EFEF First part of message utility.
|
||||
$! EFF0 - EFFF ROM Vectors
|
||||
$!
|
||||
$!!!!!
|
||||
$ Down [sam.V'VERSION']DIAG.MOT ! lives at $F000
|
||||
$ Down [sam.V'VERSION']IMAGE.MOT
|
||||
$ Down [SAM.V'VERSION']MESSAGE.MOT
|
||||
$ Down [sam.V'VERSION']SAMS.MOT
|
||||
$ Down [witt.V'VERSION']RICHS.MOT
|
||||
$ Down [witt.V'VERSION']RICHS2.MOT
|
||||
$ Down [fals.V'VERSION']NOAHS.MOT
|
||||
$ Down [mica.V'VERSION']BOBS.MOT
|
||||
$ Down [witt.V'VERSION']aoe.mot
|
||||
$!
|
||||
$ WRITE SYS$OUTPUT BELL
|
||||
$ EXIT
|
|
@ -0,0 +1,100 @@
|
|||
|
||||
INCLUDE [SAM]START
|
||||
INCLVER SAM,SINISTAR
|
||||
|
||||
PUSHORG ROMSAVE
|
||||
|
||||
|
||||
ROUTINE KABOOM
|
||||
*****************************************************************************
|
||||
*
|
||||
* SINISTAR EXPLOSION TASK QUEUER
|
||||
*
|
||||
* ENTRY: X points to SINISTAR image descriptor
|
||||
|
||||
PSHS D,X,Y,U
|
||||
|
||||
SPEAK 9. Kill Sinispeech (roar queued elsewhere)
|
||||
|
||||
|
||||
* fixes SNXQUE by hooking it into SUBPART(KABOOM) instead of SUBPIECE,
|
||||
* sets sinistar out of sector flag to prevent multiple KRSINI's
|
||||
* and disables player death during BOBS explosion
|
||||
|
||||
LDA #-1 flag sinistar as out of sector
|
||||
STA SINISECTOR
|
||||
INC DEATHFLAG disable player death
|
||||
jsr IniSini * To clean out the SiniStar image
|
||||
|
||||
|
||||
NEW_SLEEP TASK4,SNXTSK,OMTLEN+1 Awaken the Sinistar explosion task
|
||||
|
||||
RANDOM OSEED1,8,0 Get a random value from 0 to 7
|
||||
LDY #SININT Y <- address of the explosion increments table
|
||||
LDB A,Y Get this increment
|
||||
STB OMTLEN,X and save into the task workspace
|
||||
|
||||
|
||||
|
||||
NEW_SLEEP TASK4,SNXBFT,OMTLEN+1 Make Flasher Task
|
||||
LDA #(60.*3)/4 Let live for 2 seconds
|
||||
STA OMTLEN,X
|
||||
|
||||
|
||||
NEW_SLEEP TASK2,SNXWBM,OMTLEN+1 Make Warrior Boom Task
|
||||
LDA #14. Have it make n booms
|
||||
STA OMTLEN,X
|
||||
|
||||
TST PLAGRAVE Test if player is dead already
|
||||
BEQ 4$ and branch if not
|
||||
INC PLUWPF else set warp flag
|
||||
|
||||
4$ JSR KRSINI Do KRSINI here
|
||||
|
||||
PULS D,X,Y,U,PC That's all for now, folks
|
||||
|
||||
|
||||
******************************************************************************
|
||||
* This is the Sinistar Explosion Background Flash Task
|
||||
SNXBFT TST INIMPULSE If we're still InImpulse
|
||||
BNE 1$ then go flash one more time
|
||||
LDA OMTLEN,Y Decrement Alive Counter
|
||||
DECA
|
||||
LBEQ DIE and DIE when done
|
||||
STA OMTLEN,Y
|
||||
1$ LDB #$3F Get one selection of background color (yellow)
|
||||
ASRA and
|
||||
BCC 2$ every second time
|
||||
LDB #$07 use the other selection (red)
|
||||
2$ STB PCRAM Flash the background
|
||||
SLEEP LOOP Wait for another opportunity to serve
|
||||
|
||||
|
||||
******************************************************************************
|
||||
* This is the Warrior Booms task
|
||||
SNXWBM LDX [SININD] Get Sinistar scanner WS
|
||||
LDX OSSCWSA,X Get screen workspace address
|
||||
BEQ 3$ If zero then not onscreen, so do wait
|
||||
|
||||
LDD OBOTTOM,X Temporarily adjust
|
||||
PSHS D the screen location. Save it first,
|
||||
ADDD #$0A12 then add an offset
|
||||
STD OBOTTOM,X to center the explosions better
|
||||
JSR WRXQUE Go queue up a warrior explosion
|
||||
PULS D Restore the original location
|
||||
STD OBOTTOM,X
|
||||
|
||||
DEC OMTLEN,Y COUNTDOWN
|
||||
LBEQ DIE
|
||||
|
||||
3$ SLEEP LOOP
|
||||
|
||||
|
||||
|
||||
******************************************************************************
|
||||
SININT FCB $00,$FF,$DE,$EF,$22,$11,$CD,$BC
|
||||
|
||||
|
||||
PULLORG ROMSAVE
|
||||
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
INCLVER RICH,table * ORG Macro
|
||||
|
||||
* PUSHORG ROMSAVE
|
||||
PUSHORG $60B5
|
||||
***
|
||||
* Psuedo Warrior bombing in orbit. (TASKLIST 8/16)
|
||||
***
|
||||
TABLE stblbomber
|
||||
fdb ($7FFF),($1FFF),asrd3
|
||||
fdb (0100.),($00E8),asrd2
|
||||
fdb (0064.),($00A0),asrd0
|
||||
fdb (0032.),($0070),asrd0
|
||||
fdb (0016.),($0040),asrd1
|
||||
fdb (0000.),($0000),asrd2
|
||||
ENDTBL
|
||||
|
||||
PULLORG
|
||||
* PULLORG ROMSAVE
|
|
@ -0,0 +1,81 @@
|
|||
INCLUDE [SAM]START
|
||||
INCLVER SAM,SINISTAR
|
||||
|
||||
PUSHORG ROMSAVE
|
||||
|
||||
*******************************************************************************
|
||||
*
|
||||
* WARRIOR EXPLODING-FRAGMENTS TASK QUEUER
|
||||
*
|
||||
* Entry: X points to the WARRIOR ship object workspace
|
||||
ROUTINE WRXQUE
|
||||
|
||||
PSHS D,X,Y,U
|
||||
|
||||
LDD FREE Test for enough free memory for the task
|
||||
CMPD #2*(OWXRRQ+ODYNOVH) and
|
||||
BLT WRXXIT exit without creating the task if not
|
||||
|
||||
TFR X,U U <- pointer to Image Descriptor
|
||||
NEW_SLEEP TASK2,WRXTSK,OWXRRQ Create the WARRIOR explosion task
|
||||
|
||||
CLR OWXALV,X Clear the WARRIORX turns-alive counter
|
||||
LDA #WRXICT
|
||||
STA OWXPCK,X
|
||||
|
||||
LEAY OWXOTB,X Y <- address of the fragments table
|
||||
|
||||
LDD SSVEL
|
||||
ADDD OSVEL,U
|
||||
LSLB
|
||||
ROLA
|
||||
PSHS A
|
||||
|
||||
LDD SLVEL
|
||||
ADDD OLVEL,U
|
||||
LSLB
|
||||
ROLA
|
||||
PSHS A
|
||||
|
||||
* LDA OLVEL,U Get LONG/SHORT velocity of warrior
|
||||
* LDB OSVEL,U and
|
||||
* PSHS D save on stack
|
||||
|
||||
LDD OBOTTOM,U D <- screen position of the WARRIOR ship
|
||||
PSHS D Save on stack
|
||||
|
||||
LDA #WRXPCT Get the total number of fragments to create
|
||||
PSHS A and save this on the stack
|
||||
|
||||
* This loop picks at random the velocity vector and starting position
|
||||
* displacement for each fragment
|
||||
WRXPLP RANDOM OSEED2,15.,-7 Random SHORT velocity of -7 to 7
|
||||
PSHS A
|
||||
RANDOM OSEED1,7,-3 Random LONG velocity of -3 to 3
|
||||
PULS B Restore SHORT velocity
|
||||
ADDA 3,S
|
||||
ADDB 4,S
|
||||
STD OWXPMM,Y Save it into this table entry
|
||||
BEQ WRXPLP If momentum is zero, try again
|
||||
|
||||
RANDOM OSEED1,4 Now, get a SHORT position offset
|
||||
ASLA Multiply by 2
|
||||
PSHS A
|
||||
RANDOM OSEED2,4 Get the LONG offset
|
||||
PULS B Restore short
|
||||
ADDD 1,S Add the screen position
|
||||
STD OWXPSP,Y Save this fragment's screen position
|
||||
|
||||
LEAY OWXPSZ,Y Advance Y to the next entry
|
||||
|
||||
DEC ,S Decrement the fragment count
|
||||
BNE WRXPLP While not zero set up another fragment
|
||||
|
||||
LEAS 5,S Else reset stack
|
||||
|
||||
WRXXIT PULS D,X,Y,U,PC and split
|
||||
|
||||
|
||||
|
||||
PULLORG ROMSAVE
|
||||
|
|
@ -0,0 +1,105 @@
|
|||
|
||||
|
||||
PUSHORG ROMSAVE
|
||||
|
||||
******************************************************************************
|
||||
* AttModeSinistar Task
|
||||
*
|
||||
* This task runs concurrently with Rich's Watchdog task. Rich's Watchdog
|
||||
* does nothing but wait for a certain amount of time, at which point it
|
||||
* kills the Attract Demo. Therefore, this task may wait with impugnity
|
||||
* for events that might never happen (for example: the player might never
|
||||
* get the Sinistar onscreen long enough to launch off all bombs, while this
|
||||
* task waits for this event), since the Watchdog task will shut down the
|
||||
* Attract Demo sooner or later anyway.
|
||||
*
|
||||
* This task does:
|
||||
* Phase 1:
|
||||
* Gives the player a certain amount of time to collect
|
||||
* Sinibombs. If enough bombs are collected, Phase 2 is
|
||||
* started. If not enough bombs are collected but Phase 1
|
||||
* times out, Phase 2 is entered anyway.
|
||||
* Phase 2 Setup:
|
||||
* The player's mission is changed to OMWaBomb. If the
|
||||
* Sinistar is offsector, it is moved to sector's edge.
|
||||
* The counter value is initialized to control the launching
|
||||
* of crystal-laden workers. The task is changed to list TASK8.
|
||||
* Phase 2:
|
||||
* Every 8th screen a crystal-laden worker is launched. If the
|
||||
* Sinibomb count drops to zero, Phase 3 is entered. After the
|
||||
* maximum number of workers have been launched, Phase 2 loops
|
||||
* until there are no Sinimbombs.
|
||||
* Phase 3:
|
||||
* Sleep for 3 seconds, and then jump to Death
|
||||
|
||||
ROUTINE AMSINI
|
||||
|
||||
* Phase 1:
|
||||
LDD OMTLEN,Y Countdown
|
||||
SUBD #1
|
||||
BEQ 100$ When we've counted down start Phase 2
|
||||
STD OMTLEN,Y else save countdown
|
||||
|
||||
LDA BOMBS Have we collected enough Sinibombs yet?
|
||||
CMPA #4
|
||||
BGE 100$ If so then start Phase 2
|
||||
|
||||
SLEEP LOOP
|
||||
|
||||
|
||||
* Phase 2 Setup:
|
||||
* Here, we force the player's mission to Bomb the Sinistar!
|
||||
100$ LDX [PLAINDEX] Player's workspace
|
||||
LDA #OMWABOMB Bomb mission
|
||||
STA OSMIS,X
|
||||
LDD SININDEX Pointer to Sinistar's workspace
|
||||
STD OSCWCR,X This is the player's tail target
|
||||
LDA #$FF Force feed
|
||||
STA OCALPRI,X the priority of this task
|
||||
|
||||
* If the Sinistar isn't in sector, push it there
|
||||
TST SINISECTOR Is Sini onsector?
|
||||
BEQ 105$ Branch if so
|
||||
CLRD else force to the edge
|
||||
STD SSLPOS
|
||||
STD SSSPOS
|
||||
|
||||
* Set up to launch 16 workers
|
||||
105$ LDA #16.
|
||||
STA OMTLEN,Y
|
||||
|
||||
* Change the sleep to TASK8
|
||||
CHANGE_SLEEP TASK8,HERE
|
||||
|
||||
* Phase 2:
|
||||
* If the player has no Sinibombs, enter Phase 3
|
||||
TST BOMBS
|
||||
BEQ 200$
|
||||
|
||||
* Get the launch counter and launch a worker if another is wanted
|
||||
LDA OMTLEN,Y Is there another to do?
|
||||
BEQ 110$ Branch to sleep if not
|
||||
|
||||
DEC OMTLEN,Y Else bump the counter down
|
||||
ANDA #3 Make A into an index to the start-pos table
|
||||
LDU #AMSWTB Get address of offset table
|
||||
LDD B,U Get next packed offset
|
||||
JSR IRWOCR Create a crystallized worker there
|
||||
|
||||
110$ SLEEP LOOP and go back to sleep
|
||||
|
||||
|
||||
* Phase 3:
|
||||
200$ LDD #(3.*60.)/8 Sleep for approximately 3 seconds
|
||||
JSR TIMER
|
||||
JMP DEATH then go kill the attract demo
|
||||
|
||||
|
||||
|
||||
AMSWTB FCB $5F,$5F,$9F,$9F,$5F Table of screen location pairs
|
||||
PULLORG ROMSAVE
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,378 @@
|
|||
INCLUDE [SAM]START
|
||||
INCLVER SAM,SINISTAR.EQU
|
||||
|
||||
|
||||
|
||||
PUSHORG ROMSAV
|
||||
|
||||
VECTOR POWVECT
|
||||
CLR HSTDMRQ Clear HSTD Page display flag on powerup
|
||||
RTS
|
||||
|
||||
******************************************************************************
|
||||
*
|
||||
* HIGH SCORE TO DATE/MARQUEE PAGES Task
|
||||
* This routine displays the HSTD page, pauses, then draws the SiniMarquee
|
||||
* After a second pause, a jump to IAMODE is taken
|
||||
*
|
||||
* This routine is called by Rich's attract mode stuff
|
||||
*
|
||||
* Expects: Task Workspace pointer in Y
|
||||
|
||||
ROUTINE ATTRACT
|
||||
|
||||
LDX #ALHSTD Get operator flag to allow
|
||||
JSR RCMOSA HSTD table
|
||||
LBEQ 10$ and branch out if not allowed
|
||||
|
||||
INC HSTDMRQ Set the HSTD/Marquee flag
|
||||
|
||||
LDA #%00110011 Allow Player 1/2 start, FIRE, SINIBOMB
|
||||
STA PANMASK
|
||||
|
||||
JSR CLRSCR Clear the entire screen
|
||||
|
||||
LDA PMEMCTL Get the DMA-Inhibit control byte
|
||||
PSHS A,Y and save it with the ever popular Y register
|
||||
ANDA #!N4 Turn off the inhibit
|
||||
STA PMEMCTL and store the off-value
|
||||
STA MEMCTL and de-inhibit the DMA
|
||||
|
||||
LDX #$822E Screen address for HIGHEST SCORE
|
||||
LDY #CMOSHSC Highest Score itself
|
||||
INC DISSIZ If non-zero then DISNUM/INT use 6x8 characters
|
||||
JSR DISNUM Display this number
|
||||
LEAY 8,Y HIGHEST SCORE initials
|
||||
LDX #$826A Screen Address for initials
|
||||
JSR DISINT Do them
|
||||
TEXT $84,$8A Now tell the world that's this is our Sinihero
|
||||
PHRASE RED,68,SINI,STAR
|
||||
LEAX -42.,X Put the "-" [dash] character
|
||||
LDA PMEMCTL Turn off DMA-inhibit again
|
||||
ANDA #!N4
|
||||
STA PMEMCTL
|
||||
STA MEMCTL
|
||||
LDA #CDASH between SINI
|
||||
JSR OUTCHR and STAR
|
||||
|
||||
TEXT $78,$59 Now for the CMOS saved scores
|
||||
PHRASE RED,68,SINIMMORTALS
|
||||
LDA PMEMCTL Turn off DMA-inhibit again
|
||||
ANDA #!N4
|
||||
STA PMEMCTL
|
||||
STA MEMCTL
|
||||
|
||||
LDX #$7000 Starting line for CMOS scores
|
||||
LDY #CMOSHSC Starting address of scores
|
||||
CLR DISSIZ Now we want 3x5 characters
|
||||
JSR NEXTL Go draw the bunch
|
||||
|
||||
TEXT $43,$50
|
||||
PHRASE RED,68,SURVIVORS,TODAY
|
||||
|
||||
LDX #$3B00 Starting line for RAM scores
|
||||
LDY #RAMHSC Starting address of scores
|
||||
JSR NEXTL Draw this bunch
|
||||
|
||||
PULS A,Y Fetch DMA inhibit and workspace pointer
|
||||
STA PMEMCTL Restore DMA
|
||||
STA MEMCTL
|
||||
|
||||
* Now, create a task that will force the background to color $48 for
|
||||
* as long as the HSTD page stays up
|
||||
NEW_SLEEP TASK1,MAKBAK,OMTLEN+2
|
||||
LDD #(60.*5) Let the task live for 5 seconds
|
||||
STD OMTLEN,X and let the page stay up for the same
|
||||
JSR TIMER
|
||||
|
||||
******************************************************************************
|
||||
*
|
||||
* Marquee Page
|
||||
* By Ken Lantz and Mike Metz
|
||||
*
|
||||
10$ PSHS Y Now resave Y through the next trial
|
||||
|
||||
LDA #%00110011 Set PANMASK to allow
|
||||
STA PANMASK PLAYER 1/2 Start, Fire and Sinibomb buttons
|
||||
|
||||
JSR CLRSCR Clear that ol' whole-screen again
|
||||
JSR DCREDITS
|
||||
|
||||
|
||||
IFDEF KENSMARQ * Defining this includes Ken's Marquee Display
|
||||
JSR MARQUEE
|
||||
ELSE
|
||||
* To patch in Ken's Marquee, overwrite this Text/Phrase combination
|
||||
* with a JSR MARQUEE and several NOPs.
|
||||
TEXT $58,$65
|
||||
PHRASE RED,68,SINISTAR
|
||||
TEXT $54,$99
|
||||
PHRASE RED,35,TM
|
||||
ENDIF
|
||||
|
||||
LDB #$CC Get message "shadow" color
|
||||
LDX #CMOSOPE Cmos location of operator message line 1
|
||||
LDY #$3425 Screen address for text
|
||||
JSR OPMDRW Draw it
|
||||
LDB #$33 Line 1 "foreground" color
|
||||
LEAY -1,Y Bump screen location one left
|
||||
JSR OPMDRW Draw text again
|
||||
|
||||
LDB #$CC Same as above, but with message line 2
|
||||
LDX #CMOSO2
|
||||
LDY #$2C25
|
||||
JSR OPMDRW
|
||||
LDB #$22
|
||||
LEAY -1,Y
|
||||
JSR OPMDRW
|
||||
|
||||
|
||||
LDD #$1C0 Countdown value
|
||||
STD MARQCNT Save it for guess what
|
||||
|
||||
PULS Y Restore Y
|
||||
|
||||
CHANGE_SLEEP TASK1,HERE
|
||||
|
||||
PSHS Y
|
||||
|
||||
LDD MARQCNT Wake up here. When MARQCNT bottoms out,
|
||||
SUBD #1 restart the system.
|
||||
STD MARQCNT
|
||||
BNE 124$
|
||||
CLR HSTDMRQ
|
||||
JMP IAMODE
|
||||
|
||||
124$ CMPD #$100 For the first bunch of passes, leave the screen
|
||||
LBHS FINIT as is.
|
||||
|
||||
123$ RANDOM OSEED1,WORD Get a random screen location
|
||||
CMPA #$8E
|
||||
BHI 123$
|
||||
TFR D,X
|
||||
RANDOM OSEED2,$C,0 Get a random color
|
||||
LDU #SINOUT
|
||||
LDB A,U
|
||||
LDA #.SINISTAR Get the Sinistar word value
|
||||
JSR OUTP68 Go print it out
|
||||
|
||||
|
||||
TEXT $4A,LEFEDG
|
||||
PHRASE RED,35,COPYRIGHT,1982,WILLIAMS,ELECTRONICS,INC
|
||||
|
||||
FINIT JSR DCREDITS
|
||||
|
||||
PULS Y
|
||||
SLEEP LOOP
|
||||
|
||||
|
||||
SINOUT FCB $11,$22,$33,$44,$55,$66,$99,$AA,$BB,$CC,$DD,$FF
|
||||
|
||||
******************************************************************************
|
||||
* MAKBAK
|
||||
*
|
||||
* A task to force the background to stay a certain color
|
||||
*
|
||||
* Expects: Y to point to workspace
|
||||
* OMTLEN+0/1 to have number of passes to stay alive
|
||||
*
|
||||
|
||||
MAKBAK LDD OMTLEN,Y Have we timed out yet?
|
||||
SUBD #1
|
||||
STD OMTLEN,Y
|
||||
LBEQ DIE Yes, so die
|
||||
|
||||
JSR DCREDITS
|
||||
LDA #$48 Otherwise, force feed that byte to Color 0
|
||||
STA PCRAM
|
||||
SLEEP LOOP and go away
|
||||
|
||||
|
||||
*******************************************************************************
|
||||
* NEXTL
|
||||
* PRINT OUT A COLUMN OF 10 SCORES AT A TIME
|
||||
* UNTIL 30 ARE PRINTED.
|
||||
* X = STARTING SCREEN LINE (LSBYTE S/B 00)
|
||||
* Y = STARTIN/HIGHEST SCORE OF 30
|
||||
*
|
||||
* Registers D,X,Y are trashed
|
||||
|
||||
NEXTL CLRA Set up counter to zero
|
||||
PSHS A and save on stack
|
||||
|
||||
NEXTL2 INC ,S Increment our line counter
|
||||
LDA ,S
|
||||
|
||||
* Get the tens-component of A into A, the units-component into B
|
||||
CLRB
|
||||
PSHS B
|
||||
|
||||
100$ TFR A,B
|
||||
SUBA #10.
|
||||
BMI 101$
|
||||
INC ,S
|
||||
BRA 100$
|
||||
|
||||
101$ PULS A
|
||||
|
||||
TSTA Is A a digit?
|
||||
BNE 2$ if yes then branch
|
||||
LDA #CBLANK else make it a blank
|
||||
|
||||
2$ PSHS D Save this divided up digit
|
||||
LEAX $18,X SCREEN POS OF NUMBER
|
||||
* Ah ... color $63 gives us the wonderful marble effect =RJM=
|
||||
LDB #$63
|
||||
JSR OUTC35 Go print the first digit
|
||||
LDA 1,S Fetch the second digit
|
||||
JSR OUTC35 and print that
|
||||
LDA #$2B Bracket character
|
||||
JSR OUTC35 and print that
|
||||
|
||||
LDB #YELLOW Normal Display Color
|
||||
CMPY HSLEN1 Is this one of the most-recently entered scores
|
||||
BEQ 200$ Yes, so change the display color
|
||||
CMPY HSLEN2 Is this perchance the other one?
|
||||
BEQ 200$ No, so use standard color
|
||||
CMPY HSRLN1 Is this one of the most-recently entered scores
|
||||
BEQ 200$ Yes, so change the display color
|
||||
CMPY HSRLN2 Is this perchance the other one?
|
||||
BNE 201$ No, so use standard color
|
||||
|
||||
200$ LDB #$47 Get a magenta color
|
||||
STB PCRAM+$E
|
||||
LDB #$EE Use the special effects color
|
||||
|
||||
201$ STB DISCLR Save it where the display routines can get it
|
||||
|
||||
LEAX 3,X SCREEN POS OF INITIALS
|
||||
LEAY 8,Y ADDRESS OF INITIALS
|
||||
JSR DISINT DIPLAY INITIALS
|
||||
LEAX $10,X SCREEN POS OF SCORE
|
||||
LEAY -8,Y ADDRESS OF SCORE
|
||||
JSR DISNUM DISPLAY NUMBER
|
||||
LEAY SCRSIZ,Y POINT TO NEXT SET OF DATA
|
||||
PULS D Restore our split digits
|
||||
TSTB If the second digit has hit zero
|
||||
BEQ 1$ we're at the end of the column
|
||||
LEAX -$337,X else goto START OF NEXT LINE
|
||||
BRA NEXTL2 and do it all again
|
||||
|
||||
1$ CMPA #$3 Wow! Column done! Have we finished 3rd col?
|
||||
BEQ 4$ DID 30, ALL DONE
|
||||
LEAX $1B10,X BACK UP TO START OF NEXT COLUMN
|
||||
BRA NEXTL2 and go do it all again
|
||||
|
||||
4$ PULS A,PC ALL DONE
|
||||
|
||||
|
||||
******************************************************************************
|
||||
* DISNUM
|
||||
*
|
||||
* DISPLAY THE SCORE
|
||||
* X = ADDRESS OF SCREEN
|
||||
* Y = ADDRESS OF DATA TO BE DISPLAYED
|
||||
* DISSIZ... 0 = 3X5 >0 = 5X7
|
||||
*
|
||||
|
||||
DISNUM PSHS X,Y,D
|
||||
LDB #4
|
||||
|
||||
EXG X,Y RCMOSA NEEDS DATA ADRESS IN X
|
||||
|
||||
2$ JSR RCMOSA
|
||||
BNE 1$ ZEROS
|
||||
TST DISSIZ
|
||||
BNE 200$
|
||||
LEAY 8,Y
|
||||
BRA 201$
|
||||
|
||||
200$ LEAY 14.,Y
|
||||
|
||||
201$ DECB
|
||||
BNE 2$
|
||||
BRA 9$
|
||||
|
||||
1$ CMPA #$0F
|
||||
BHI 3$
|
||||
ORA #$F0 SUPPRESS FIRST ZERO
|
||||
|
||||
3$ PSHS B
|
||||
EXG X,Y OUT ROUTINES NEED SCREEN ADDRESS BACK IN X
|
||||
TST DISSIZ
|
||||
BNE 4$
|
||||
|
||||
LDB DISCLR Get display color
|
||||
JSR OUTB35 WRITE TWO DIGITS
|
||||
BRA 5$
|
||||
|
||||
4$ LDB #WHITE
|
||||
JSR OUTBCD
|
||||
|
||||
5$ PULS B
|
||||
DECB
|
||||
BEQ 9$ NO MORE TO DISPLAY
|
||||
EXG X,Y RCMOSA NEEDS DATA ADRESS IN X
|
||||
JSR RCMOSA
|
||||
BRA 3$
|
||||
9$ PULS X,Y,D,PC
|
||||
|
||||
|
||||
******************************************************************************
|
||||
* DISINT
|
||||
*
|
||||
* DISPLAY THE INITIALS
|
||||
* X = ADDRESS OF SCREEN
|
||||
* Y = ADDRESS OF DATA TO BE DISPLAYED
|
||||
* DISSIZ... 0 = 3X5, >0 = 5X7
|
||||
*
|
||||
|
||||
DISINT PSHS X,Y,D
|
||||
LDB #$3
|
||||
|
||||
1$ EXG X,Y RCMOSA NEEDS DATA ADDRESS IN X
|
||||
JSR RCMOSA
|
||||
EXG X,Y OUT ROUTINES NEED SCREEN ADDRESS IN X
|
||||
PSHS B
|
||||
TST DISSIZ
|
||||
BNE 2$
|
||||
|
||||
LDB DISCLR Get current display color
|
||||
JSR OUTC35
|
||||
BRA 3$
|
||||
|
||||
2$ LDB #WHITE
|
||||
JSR OUTCHR
|
||||
|
||||
3$ PULS B
|
||||
DECB
|
||||
BNE 1$
|
||||
PULS X,Y,D,PC
|
||||
|
||||
|
||||
******************************************************************************
|
||||
* OPMDRW
|
||||
* Operator Message Drawor
|
||||
* ENTRY:
|
||||
* X has address in CMOS of text start
|
||||
* Y has screen address for start of text
|
||||
|
||||
OPMDRW PSHS D,X,Y
|
||||
|
||||
LDA #OPENLEN
|
||||
PSHS A
|
||||
|
||||
10$ JSR RCMOSA
|
||||
EXG X,Y
|
||||
LDB 2,S
|
||||
JSR OUTCHR
|
||||
EXG X,Y
|
||||
DEC ,S
|
||||
BNE 10$
|
||||
|
||||
LEAS 1,S
|
||||
|
||||
PULS D,X,Y,PC
|
||||
|
||||
|
||||
PULLORG ROMSAV
|
|
@ -0,0 +1,32 @@
|
|||
[LIBRARY.SINISTAR] is the library version of:
|
||||
|
||||
SSSS IIIII N N IIIII SSSS TTTTT AAA RRRR
|
||||
S I NN N I S T A A R R
|
||||
SSS I N N N I SSS T AAAAA RRRR
|
||||
S I N NN I S T A A R R
|
||||
SSSS IIIII N N IIIII SSSS T A A R R
|
||||
|
||||
INTRODUCTION
|
||||
|
||||
The problem history with managing sources for 4 people while using
|
||||
an assembler with a very limited symbol table size is not amusing. Let it
|
||||
suffice that we did what was neccessary at the time.
|
||||
|
||||
Our tools have progressed since Sinistar days, but the library will
|
||||
have to reflect the state of those days in the way it builds a working version
|
||||
of Sinistar for you. So it is that the subdirectories for the main programmers
|
||||
contain their last development version of Sinistar.
|
||||
|
||||
FILE ORGANIZATION
|
||||
|
||||
[.SAM] Contains all the V17 files from Sam Dicker \
|
||||
[.WITT] Contains all the V17 files from Rich Witt \ Assembly order
|
||||
[.FALS] Contains all the V17 files from Noah Falstein / of overlays.
|
||||
[.MICA] Contains all the V17 files from Bob Mical /
|
||||
[.COM] Contains a mangerie of related comand files from them all.
|
||||
|
||||
At the top level, [LIBRARY.SINISTAR] you will find these main files:
|
||||
|
||||
READ.ME You're reading it now. A preliminary description of things.
|
||||
MAKE.COM A command file that can rebuild Sinistar.
|
||||
|
|
@ -0,0 +1,284 @@
|
|||
INCLUDE START
|
||||
|
||||
PUSHORG ROMSAVE
|
||||
|
||||
SUBTTL ADD AND SUBTRACT SINISTAR PIECES
|
||||
|
||||
* subtract a sinistar piece
|
||||
ROUTINE SUBPIEC
|
||||
PSHS D,X,U save regs > uses none
|
||||
LDX PIECEPT is sinistar gone?
|
||||
CMPX #PIECETB
|
||||
BNE 1$
|
||||
LDX FINISH yes?, was it alive?
|
||||
CMPX #ALIVE
|
||||
BNE 5$
|
||||
BSR SNXQUE Bob's sinistar explosion queuer
|
||||
BRA 5$
|
||||
1$ LEAX -OSPLEN,X backup piece pointer to previous piece
|
||||
LDD #0FF00+DZSP+DCNS setup for erasing
|
||||
JSR MODSINI save X, uses none
|
||||
JSR TARGET retarget workers with crystals
|
||||
LDU [SININDE] erase piece: is sinistar on screen?
|
||||
LDU OSSCWSA,U
|
||||
BEQ 2$
|
||||
LDD OSPLOFF,X yes? compute screen position of piece
|
||||
LSRA
|
||||
ADDA OLPOS,U
|
||||
ADDB OSPOS,U
|
||||
STD DDEST setup dma destination
|
||||
LDD [OSPDESC,X] compute piece size
|
||||
INCA allow for flavoring
|
||||
EORA #4 * * *FOR DMA BUG
|
||||
EORB #4 * * *FOR DMA BUG
|
||||
STD DHIGH
|
||||
LDA #DCNS+DWBL erase block
|
||||
STA DCTRL
|
||||
2$ LDX [SININDE] get sinistar scanner workspace address in X
|
||||
LDD OSLPOS,X yes?,get scanner position of sinistar
|
||||
TST OSSCWSA,X is sinistar on screen?
|
||||
BEQ 3$
|
||||
ADDA SINILN yes, add offset of dead piece
|
||||
ADDB SINISN
|
||||
3$ NEW_SCAN CPIECE create piece object
|
||||
LDU PIECEPT piece pointer
|
||||
LDU OSSCWSA,X get piece object workspace, on screen?
|
||||
BEQ 4$
|
||||
LDA SINILN yes, compute piece screen velocity from offset
|
||||
CLRB
|
||||
RPT 2,ASRA,RORB
|
||||
STD OLVEL,U
|
||||
LDA SINISN
|
||||
CLRB
|
||||
RPT 1,ASRA,RORB
|
||||
STD OSVEL,U
|
||||
4$ LDD SINILN compute piece scanner velocity from offset
|
||||
STD OSLVEL,X
|
||||
5$ PULS D,X,U,PC
|
||||
|
||||
* Bob's 'queuer' sinistar explosion
|
||||
ROUTINE SNXQUE
|
||||
NOP
|
||||
NOP
|
||||
RTS
|
||||
|
||||
* add a sinistar piece
|
||||
ROUTINE ADDPIEC
|
||||
PSHS D,X save regs > uses none
|
||||
LDX PIECEPT is sinistar still being built?
|
||||
CMPX FINISH
|
||||
BEQ 1$
|
||||
LDD #0FF00+DZSP setup for drawing
|
||||
BSR MODSINI save X, uses none
|
||||
LEAX OSPLEN,X advance piece pointer to next piece
|
||||
CMPX FINISH is sinistar finished now?
|
||||
BNE 1$
|
||||
CMPX #PIECEND yes?, completely?
|
||||
BNE 1$
|
||||
LDX #ALIVE yes?
|
||||
STX PIECEPT set next piece to border end
|
||||
STX FINISH set finish point to border end
|
||||
LDD #ANIMTBL initialize animation pointer
|
||||
STD ANIMPTR
|
||||
BRA 2$
|
||||
1$ JSR TARGET retarget workers with crystals
|
||||
2$ PULS D,X,PC
|
||||
|
||||
*****
|
||||
*
|
||||
* TARGET
|
||||
* Retarget workers with crystals
|
||||
*
|
||||
* Needs:
|
||||
* X -> target piece
|
||||
*
|
||||
* Returns:
|
||||
* SiniLP - Current Sinistar piece LONG offset (scanner) in 8 bits
|
||||
* SiniSP - Current Sinistar piece SHORT offset (scanner) in 8 bits
|
||||
* SiniLN - Next Sinistar piece LONG offset (scanner) in 8 bits
|
||||
* SiniSN - Next Sinistar piece SHORT offset (scanner) in 8 bits
|
||||
*
|
||||
* SinLP - Current Sinistar piece LONG offset (screen) in 8 bits
|
||||
* SinSP - Current Sinistar piece SHORT offset (screen) in 8 bits
|
||||
* SinLN - Next Sinistar piece LONG offset (screen) in 8 bits
|
||||
* SinSN - Next Sinistar piece SHORT offset (screen) in 8 bits
|
||||
*
|
||||
*****
|
||||
ROUTINE TARGET
|
||||
PSHS A,B,X,U save regs > uses none
|
||||
STX PIECEPT save target piece pointer
|
||||
LDD OSPLOFF,X get target piece offsets
|
||||
ASRA convert to screen coordinates
|
||||
STA SINLN save l screen target piece offset
|
||||
ROLA convert back to bytes
|
||||
LDU OSPDESC,X get target image descriptor
|
||||
ADDD OLCENT,U add piece offsets to center
|
||||
SUBA #SiniLCE-2 compute l scanner offset from coordinate
|
||||
RPT 2,ASRA (with roundoff)
|
||||
STA SINILN save scanner target piece offset
|
||||
STB SINSN save s screen target piece offset
|
||||
SUBB #SiniSCE-2 compute s scanner offset from coordinate
|
||||
RPT 2,ASRB (with roundoff)
|
||||
STB SINISN save scanner target piece offset
|
||||
*
|
||||
LDD FINISH is it alive?
|
||||
CMPD #ALIVE
|
||||
BNE 1$
|
||||
LDX #PIECEND target last piece to nose
|
||||
1$ LDD OSPLOFF-OSPLEN,X get target piece offsets
|
||||
LDU OSPDESC-OSPLEN,X get target image descriptor
|
||||
ADDD OLCENT,U add piece offsets to center
|
||||
ASRA convert to screen coordinates
|
||||
STA SinLP save l screen target piece offset
|
||||
ROLA convert back to bytes
|
||||
SUBA #SiniLCE-2 compute l scanner offset from coordinate
|
||||
RPT 2,ASRA (with roundoff)
|
||||
STA SiniLP save scanner target piece offset
|
||||
STB SinSP save s screen target piece offset
|
||||
SUBB #SiniSCE-2 compute s scanner offset from coordinate
|
||||
RPT 2,ASRB (with roundoff)
|
||||
STB SiniSP save scanner target piece offset
|
||||
PULS A,B,X,U,PC
|
||||
|
||||
* modify sinistar
|
||||
* pass piece descriptor in X, change collis flag in A, dma ctrl byte in B
|
||||
ROUTINE MODSINI
|
||||
PSHS D,X,Y,U save regs
|
||||
LEAS -(MHPIECE+8),S get temporary space
|
||||
LDA OSPSOFF,X get s position offset
|
||||
STA 2,S save for collision table adjustment
|
||||
LDB #SINIHIG multiply by sinistar height
|
||||
MUL
|
||||
LDY #SINIMAGE Y points to sinistar image
|
||||
LEAY D,Y add s sequential offset
|
||||
LDB OSPLOFF,X get l position offset
|
||||
STB 3,S save for collision table adjustment
|
||||
LSRB convert to bytes
|
||||
LDA 1+(MHPIECE+8),S compute dma control constant
|
||||
BCC 1$
|
||||
ORA #DTFL
|
||||
1$ STA S save it
|
||||
LEAY B,Y add l byte offset
|
||||
LDU OSPDESC,X get piece image descriptor
|
||||
LDA #1!X4 * * *TEMPORARY FOR DMA BUG
|
||||
STA DWIDE initialize dma for width of 1
|
||||
LDA OWIDTH,U get piece width
|
||||
STA 1,S save it
|
||||
STA 6,S save for collision table adjustment
|
||||
LDB OHEIGHT,U get piece height
|
||||
EORB #4 * * *TEMPORARY FOR DMA BUG
|
||||
STB DHIGH initialize dma for piece height
|
||||
EORB #4 * * *TEMPORARY FOR DMA BUG
|
||||
LDA #SINIWID/2+1 get center of sinistar offset
|
||||
SUBA 2,S compute number of lines till center
|
||||
CMPA #3 start past center?
|
||||
BGT 17$
|
||||
CLRA yes, don't check for past center
|
||||
NEGB reverse direction of source
|
||||
17$ CMPX #PIECEND is this a buildup piece?
|
||||
BHS 19$
|
||||
CLRA yes, don't check for end
|
||||
19$ STA 7,S save number of lines till center
|
||||
LDX OCOLTBL,U get piece collision table
|
||||
STX 4,S save for collision table adjustment
|
||||
LDX OIMAGE,U get start of piece image
|
||||
LEAU 8,S get start of ram buffer
|
||||
LDA PMEMCTL write inhibit off
|
||||
PSHS A
|
||||
ANDA #!N4
|
||||
STA PMEMCTL
|
||||
STA MEMCTL
|
||||
2$ STY DSOUR set source to sinistar image
|
||||
STU DDEST set destination to ram buffer
|
||||
CLR DCTRL copy line of sinistar image to ram buffer
|
||||
LDA 0+1,S get dma control byte / wait for dma
|
||||
STX DSOUR set source to piece
|
||||
STA DCTRL write one line of piece
|
||||
LDA #DSCY get slow cycle dma constant / wait for dma
|
||||
STU DSOUR set source to ram buffer
|
||||
STY DDEST set destination to sinistar image
|
||||
STA DCTRL copy ram buffer to sinistar image
|
||||
LEAY SINIHIG,Y advance destination sinistar height
|
||||
DEC 1+7,S count down one line till center
|
||||
BNE 18$
|
||||
NEGB at center, reverse direction of source
|
||||
18$ LEAX B,X advance source piece height
|
||||
DEC 1+1,S count down one line
|
||||
BNE 2$ done?
|
||||
PULS A write inhibit on
|
||||
STA PMEMCTL
|
||||
STA MEMCTL
|
||||
LDA (MHPIECE+8),S does collsion table need to be adjusted?
|
||||
LBEQ 3$
|
||||
SEX yes, set left or mirrored right flag (1 or -1)
|
||||
ORA #1
|
||||
STA 1,S
|
||||
LDX #SINICLI adjust collision table: get collision tbl in X
|
||||
LDB 2,S offset for piece s offset
|
||||
ABX
|
||||
LDA S check if adding piece or subtracting
|
||||
BITA #DCNS
|
||||
BNE 9$
|
||||
LDU 4,S adding, get piece collision table address
|
||||
LDA 6,S get piece width
|
||||
LEAY A,U offset for piece top edge collision table
|
||||
6$ LDB U adding loop: get piece bottom edge
|
||||
ADDB 3,S offset into sinistar
|
||||
CMPB X is it the bottom edge of the sinistar?
|
||||
BGE 7$
|
||||
STB X yes, adjust sinistar bottom edge table
|
||||
7$ LDB Y get piece top edge
|
||||
ADDB 3,S offset into sinistar
|
||||
CMPB SINIWID,X is it the top edge of the sinistar?
|
||||
BLE 8$
|
||||
STB SINIWID,X yes, adjust sinistar top edge table
|
||||
8$ LDB 1,S get left or mirrored right flag
|
||||
LEAU B,U advance to next line
|
||||
LEAY B,Y
|
||||
LEAX 1,X
|
||||
DECA done?
|
||||
BNE 6$
|
||||
BRA 3$
|
||||
9$ LDA #SINIHIG subtracting loop:
|
||||
MUL compute position of first line in image
|
||||
ADDD #SINIMAG
|
||||
TFR D,U get position in U
|
||||
16$ LDA SINIWID,X get top collision offset
|
||||
LSRA convert to bytes
|
||||
PSHS A save it
|
||||
LDB X get bottom collision offset
|
||||
LSRB convert to bytes
|
||||
10$ LDA B,U bottom adjust - read image
|
||||
BNE 11$ something there?
|
||||
INCB no?, try one byte up
|
||||
CMPB S is that top collision boundry?
|
||||
BLS 10$
|
||||
LEAS 1,S yes, pull stack
|
||||
LDB #7F-2*SINIHIG turn off collisions for this line
|
||||
STB X
|
||||
NEGB
|
||||
BRA 15$
|
||||
11$ ASLB convert new bottom collision offset to pixels
|
||||
BITA #0F0 check flavor
|
||||
BNE 13$
|
||||
INCB
|
||||
13$ STB X save new bottom collison offset
|
||||
PULS B get top collision offset
|
||||
12$ LDA B,U read image
|
||||
BNE 14$ something there?
|
||||
DECB no?, try one down
|
||||
BRA 12$
|
||||
14$ INCB convert new top collision offset to pixels
|
||||
ASLB
|
||||
BITA #0F check flavor
|
||||
BNE 15$
|
||||
DECB
|
||||
15$ STB SINIWID,X save new top collison offset
|
||||
LEAU SINIHIG,U advance image for next line
|
||||
LEAX 1,X advance collision table pointer
|
||||
DEC 6,S count off one line
|
||||
BNE 16$
|
||||
3$ LEAS (MHPIECE+8),S release temporary space
|
||||
PULS D,X,Y,U,PC restore regs
|
||||
|
||||
PULLORG ROMSAVE
|
|
@ -0,0 +1,217 @@
|
|||
INCLUDE START
|
||||
|
||||
PUSHORG ROMSAV
|
||||
|
||||
SUBTTL PLAYER SCORE AND SINIBOMB STATUS DISPLAY AND CHANGE
|
||||
|
||||
* add bcd score to players score pass score in D
|
||||
ROUTINE ADDSCOR
|
||||
PSHS A,B,X,U > uses none
|
||||
INC SCOREFL set score flag
|
||||
LDU #NSCORE get next ship score
|
||||
LDX #PSCORE get player score data address
|
||||
BSR ADDBCD add new points to score, save X, uses none
|
||||
BCC 1$ wrap around?
|
||||
CLR WRAPFLG yes, set wrap flag and award extra ship
|
||||
BRA 2$
|
||||
1$ LDX #PSCORE get player score data address
|
||||
BSR CMPBCD compare with players score, save U, uses none
|
||||
BLO 5$
|
||||
LDA WRAPFLG player's score higher?, test wrap flag
|
||||
BNE 5$
|
||||
2$ LDX #EXTRADD get next ship level adder address
|
||||
LDD EXTRINC add next ship level adder increment
|
||||
BSR ADDBCD
|
||||
LDA 1,X is sum over 999,900
|
||||
BEQ 3$
|
||||
CLR 1,X yes, clear over flow
|
||||
LDD #-1 set to 999,900
|
||||
STD 2,X
|
||||
3$ LDD EXTRADD+2 clear?, get next ship level adder
|
||||
LEAX -1,U add to next ship level (offset to mult by 100)
|
||||
BSR ADDBCD
|
||||
LDA X did it overflow? (9th digit)
|
||||
BEQ 4$
|
||||
STA WRAPFLG yes, set wrap flag
|
||||
CLR X zero 9 digit
|
||||
4$ BSR UPBONUS display next bonus level, save none, uses none
|
||||
TUNE QNEWSHI play extra ship tune
|
||||
LDA SHIPS get ship count
|
||||
LDB #DWBL re-draw player up ship
|
||||
JSR UPSHIPS save none, uses none
|
||||
INCA
|
||||
BEQ 1$ over 255?, don't add more!
|
||||
STA SHIPS save new ship count
|
||||
LDB #5 add a free ship to the books
|
||||
JSR AUD1$ save U, uses none
|
||||
LDB #DWBL draw another ship
|
||||
JSR UPSHIPS save none, uses none
|
||||
BRA 1$ did he earn another ship?
|
||||
5$ PULS A,B,X,U,PC
|
||||
|
||||
* add bcd number in D to 8 dig numb pointed to by X, returns overflow in carry
|
||||
ADDBCD PSHS A,B,X > uses none
|
||||
LDA 3,X
|
||||
ADDA 1,S
|
||||
DAA
|
||||
STA 3,X
|
||||
LDA 2,X
|
||||
ADCA S
|
||||
DAA
|
||||
STA 2,X
|
||||
LDA 1,X
|
||||
ADCA #0
|
||||
DAA
|
||||
STA 1,X
|
||||
LDA X
|
||||
ADCA #0
|
||||
DAA
|
||||
STA X
|
||||
PULS A,B,X,PC
|
||||
|
||||
* compare 8 digit bcd number pointed to by X to number pointed to by U
|
||||
CMPBCD PSHS A,B > uses none
|
||||
LDD X compare top 4 digits
|
||||
CMPD U
|
||||
BNE 1$ if different, exit
|
||||
LDD 2,X same?, compare bottom 4 digits
|
||||
CMPD 2,U
|
||||
1$ PULS A,B,PC
|
||||
|
||||
* update 'bonus at' score
|
||||
UPBONUS PSHS D,X,U
|
||||
LDA PMEMCTL dma inhibit off
|
||||
PSHS A
|
||||
ANDA #!N4
|
||||
STA PMEMCTL
|
||||
STA MEMCTL
|
||||
LDD #(3!<8+8*4-1)!X404 erase score: set dma size * * *FOR DMA BUG
|
||||
STD DHIGH
|
||||
LDA #81 set dma destination
|
||||
LDB SCOREAD
|
||||
ADDB #22
|
||||
TFR D,X
|
||||
STX DDEST
|
||||
LDA #DCNS+DWBL erase it
|
||||
STA DCTRL
|
||||
LDB #BLUE setup color
|
||||
LDU #NSCORE get address of bonus score
|
||||
1$ LDA U+ find first non-zero byte
|
||||
BEQ 1$
|
||||
BITA #0F0 is upper nibble zero?
|
||||
BNE 3$
|
||||
ORA #0F0 yes, mask it
|
||||
BRA 3$
|
||||
2$ LDA U+ get next score byte
|
||||
3$ JSR OUTB35 display score byte
|
||||
CMPU #NSCORE+4
|
||||
BLO 2$
|
||||
PULS A turn on dma inihibit
|
||||
STA PMEMCTL
|
||||
STA MEMCTL
|
||||
PULS D,X,U,PC
|
||||
|
||||
* update ship display pass count in A, dma constant in B
|
||||
ROUTINE UPSHIPS
|
||||
PSHS A,B save dma constant > uses none
|
||||
DECA too few or to many to display?
|
||||
CMPA #9
|
||||
BHI NOUPSTA
|
||||
LDB #6 compute s axis offset
|
||||
MUL
|
||||
ADDB SCOREAD add to score s axis screen position
|
||||
LDA #7D l axis screen position
|
||||
STD DDEST set dma destination
|
||||
LDD #ISHIPS set dma source
|
||||
BRA UPSTATS update status image, uses A,B
|
||||
|
||||
* update sinibomb display pass sinibomb count in A, dma constant in B
|
||||
ROUTINE UPBOMBS
|
||||
PSHS D save dma constant > uses none
|
||||
DECA decrement count
|
||||
LDB #89 get l axis screen address for first row
|
||||
CMPA #10. not in this row?
|
||||
BLT 1$
|
||||
SUBA #10. yes, subtract number in this row
|
||||
ADDB #3 add l axis spacing for one row
|
||||
1$ PSHS B save l axis address
|
||||
LDB #6 compute s axis offset
|
||||
MUL (remainder * s axis spacing)
|
||||
ADDB SCOREAD add to score s address screen position
|
||||
PULS A get l axis offset
|
||||
STD DDEST set dma destination
|
||||
LDD #ISBOMST set image data
|
||||
* update status display pass image address in D, dma ctrl byte in 2,S
|
||||
UPSTAT STD DSOUR
|
||||
LDD #305!X404 set dma block size
|
||||
STD DHIGH
|
||||
LDA PMEMCTL turn off dma inhibit
|
||||
PSHS A
|
||||
ANDA #!N4
|
||||
STA PMEMCTL
|
||||
STA MEMCTL
|
||||
LDA 2,S get dma constant
|
||||
STA DCTRL draw it
|
||||
PULS A turn on dma inhibit
|
||||
STA PMEMCTL
|
||||
STA MEMCTL
|
||||
NOUPSTA PULS D,PC
|
||||
|
||||
* score display task
|
||||
ROUTINE SCOREDI
|
||||
LDA SCOREFL did the player score?
|
||||
BEQ 1$
|
||||
BSR UPSCORE update score
|
||||
CLR SCOREFL yes?, clear score flag
|
||||
1$ SLEEP LOOP
|
||||
|
||||
* update score routine
|
||||
ROUTINE UPSCORE
|
||||
PSHS D,X,U > uses none
|
||||
LDA PMEMCTL dma inhibit off
|
||||
PSHS A
|
||||
ANDA #!N4
|
||||
STA PMEMCTL
|
||||
STA MEMCTL
|
||||
LDD #8503 compute screen address of score
|
||||
ADDB SCOREAD
|
||||
TFR D,X
|
||||
LDU #PSCORE get address of score data
|
||||
1$ LDA U get byte of score
|
||||
CMPA LSCORE-PSCORE,U compare with last displayed score
|
||||
BEQ 2$
|
||||
LDA #0F different?, set mask to mask off lower nibble
|
||||
BSR 4$ erase and redraw upper nibble if different
|
||||
LDA #0F0 set mask to mask off upper nibble
|
||||
BSR 4$ erase and redraw lower nibble if different
|
||||
LDA U get byte of score
|
||||
STA LSCORE-PSCORE,U update byte of last displayed score
|
||||
2$ LEAX 0E,X advance screen address for next pair of digits
|
||||
LEAU 1,U advance score data pointer
|
||||
CMPU #PSCORE+4 done?
|
||||
BLO 1$
|
||||
CLR DCONS yes?, zero dma constant
|
||||
PULS A turn on dma inihibit
|
||||
STA PMEMCTL
|
||||
STA MEMCTL
|
||||
3$ PULS D,X,U,PC
|
||||
*
|
||||
4$ STA TEMP update digit: save nibble mask
|
||||
LDA U get byte of score
|
||||
ORA TEMP different?, mask off one nibble
|
||||
STA TEMP+1 save it
|
||||
LDA LSCORE-PSCORE,U get byte of last displayed score
|
||||
ORA TEMP mask off one nibble
|
||||
CMPA TEMP+1 compare with nibb of score
|
||||
BEQ 5$
|
||||
CLRB different?, zero color
|
||||
JSR OUTBCD erase old digit save U, uses X
|
||||
LEAX -0E,X restore screen position
|
||||
LDA U get byte of score
|
||||
ORA TEMP mask off on nibble
|
||||
LDB #RED get score color
|
||||
JSR OUTBCD draw new digit
|
||||
LEAX -0E,X restore sceen position
|
||||
5$ RTS
|
||||
|
||||
PULLORG ROMSAV
|
|
@ -0,0 +1,81 @@
|
|||
INCLUDE START
|
||||
INCLVER SAM,SINISTAR
|
||||
|
||||
BARGRAPH
|
||||
PUSHORG RAMSAVE
|
||||
PGRAPH RMB 10 \ previous bar graph lengths ( values/4)
|
||||
GRAPH RMB 10 / bar graph values
|
||||
PULLORG RAMSAVE
|
||||
|
||||
PUSHORG ROMSAVE
|
||||
|
||||
VECTOR INIVECT
|
||||
LDD #9999 draw bar graph right end line
|
||||
LDX #75DA
|
||||
1$ STD X
|
||||
LEAX 100,X
|
||||
CMPX #8EDA
|
||||
BLO 1$
|
||||
LDX #PGRAPH set bar graph lengths/zero initial values
|
||||
LDU #GRAPH
|
||||
LDD #0F3F
|
||||
2$ STB A,X
|
||||
CLR A,U
|
||||
DECA
|
||||
BPL 2$
|
||||
RTS
|
||||
|
||||
VECTOR EXEVECT
|
||||
LDA PANMASK player flying on?
|
||||
BITA #8
|
||||
BNE 10$
|
||||
RTS no?, that's all folks
|
||||
*
|
||||
10$ LDA PMEMCTL update bar graphs: dma inhibit off
|
||||
PSHS A
|
||||
ANDA #!N4
|
||||
STA PMEMCTL
|
||||
STA MEMCTL
|
||||
LDA #1!X4 * * *TEMPORARY FOR DMA BUG
|
||||
STA DHIGH set DMA height
|
||||
LDA #0F initialize bar number
|
||||
LDX #PGRAPH
|
||||
LDU #GRAPH
|
||||
1$ LDB A,U get new value
|
||||
LSRB convert to lengths
|
||||
LSRB
|
||||
CMPB A,X has it changed?
|
||||
BEQ 4$
|
||||
PSHS CC save change
|
||||
STB A,X save new length
|
||||
STA TEMP save bar #
|
||||
PULS CC longer or shorter?
|
||||
BMI 2$
|
||||
EORB #4 * * *TEMPORARY FOR DMA BUG
|
||||
STB DWIDE set DMA width
|
||||
LDB #11 longer, compute color
|
||||
MUL
|
||||
STB DCONS set DMA constant
|
||||
LDA TEMP get bar #
|
||||
ADDA #79 compute screen position
|
||||
LDB #9B
|
||||
STD DDEST set DMA destination
|
||||
BRA 3$
|
||||
2$ ADDD #799B compute screen position
|
||||
STD DDEST set DMA destination
|
||||
COMB compute width
|
||||
ADDB #40+9B
|
||||
EORB #4 * * *TEMPORARY FOR DMA BUG
|
||||
STB DWIDE set DMA width
|
||||
3$ LDA #DCNS+DWBL draw or erase bar
|
||||
STA DCTRL
|
||||
LDA TEMP restore bar # / wait for DMA
|
||||
CLR DCONS zero constant
|
||||
4$ DECA done?
|
||||
BGE 1$
|
||||
PULS A dma inhibit on
|
||||
STA PMEMCTL
|
||||
STA MEMCTL
|
||||
RTS
|
||||
|
||||
PULLORG ROMSAVE
|
|
@ -0,0 +1,109 @@
|
|||
INCLUDE START
|
||||
|
||||
PUSHORG ROMSAVE
|
||||
|
||||
SUBTTL BOUNCE ROUTINE
|
||||
|
||||
* bounce routine pass ship wsa addresses in X and Y
|
||||
ROUTINE BOUNCE
|
||||
LDA OSTATUS,X if both object bounced then exit > uses A,B,U
|
||||
BITA #3
|
||||
BEQ 1$
|
||||
LDA OSTATUS,Y
|
||||
BITA #3
|
||||
LBNE 8$
|
||||
1$ LDU OCHAR,X find masses
|
||||
LDA OMASS,U
|
||||
STA TEMP+2
|
||||
LDU OCHAR,Y
|
||||
LDA OMASS,U
|
||||
STA TEMP+3
|
||||
ADDA TEMP+2 find inverse of total mass
|
||||
BCC 2$ scale down masses till sum is on inverse table
|
||||
RORA
|
||||
BRA 3$
|
||||
2$ CMPA #20
|
||||
BLO 4$
|
||||
LSRA
|
||||
3$ LSR TEMP+2
|
||||
LSR TEMP+3
|
||||
BRA 2$
|
||||
4$ LDU #INVTBL
|
||||
LEAU A,U
|
||||
LDA U find portion of mass for both objects:
|
||||
LDB TEMP+2
|
||||
BNE 5$ is X object massless?
|
||||
LDD OLVEL,Y yes, make Y object center of momentum
|
||||
STD TEMP+4
|
||||
LDD OSVEL,Y
|
||||
BRA 7$
|
||||
5$ MUL
|
||||
STB TEMP+8
|
||||
LDA U
|
||||
LDB TEMP+3
|
||||
BNE 6$ is Y object massless?
|
||||
LDD OLVEL,X yes, make X object center of momentum
|
||||
STD TEMP+4
|
||||
LDD OSVEL,X
|
||||
BRA 7$
|
||||
6$ MUL
|
||||
STB TEMP+9
|
||||
LDU #TEMP+8 reverse velocitys rel to cen of momentum vel:
|
||||
LDD OLVEL,X compute x object, l axis momentum
|
||||
BSR 9$
|
||||
STD TEMP+4
|
||||
LDD OSVEL,X compute x object, s axis momentum
|
||||
BSR 9$
|
||||
STD TEMP+6
|
||||
LDU #TEMP+9
|
||||
LDD OLVEL,Y compute y object, l axis momentum
|
||||
BSR 9$
|
||||
ADDD TEMP+4 add x object, l axis momentum
|
||||
STD TEMP+4 save l axis center of momentum
|
||||
LDD OSVEL,Y compute y object, s axis momentum
|
||||
BSR 9$
|
||||
ADDD TEMP+6 add y object, s axis momentum
|
||||
7$ ASLB multiply s axis center of momentum * 2
|
||||
ROLA
|
||||
ADCB #0
|
||||
ADCA #0
|
||||
STD TEMP+6
|
||||
SUBD OSVEL,X reverse x object, s axis velocity
|
||||
STD OSVEL,X
|
||||
LDD TEMP+6
|
||||
SUBD OSVEL,Y reverse y object, s axis velocity
|
||||
STD OSVEL,Y
|
||||
LDD TEMP+4 multiply l axis center of momentum * 2
|
||||
ASLB
|
||||
ROLA
|
||||
ADCB #0
|
||||
ADCA #0
|
||||
STD TEMP+4
|
||||
SUBD OLVEL,X reverse x object, l axis velocity
|
||||
STD OLVEL,X
|
||||
LDD TEMP+4 reverse y object, l axis velocity
|
||||
SUBD OLVEL,Y
|
||||
STD OLVEL,Y
|
||||
TUNE QBOUNCE play bounce tune
|
||||
8$ LDA OSTATUS,X flag both object as bounced
|
||||
ORA #2
|
||||
STA OSTATUS,X
|
||||
LDA OSTATUS,Y
|
||||
ORA #2
|
||||
STA OSTATUS,Y
|
||||
RTS
|
||||
* multiply subroutine D <= (D*[U])/$100 (D signed word ,[U] unsigned byte)
|
||||
9$ STA TEMP
|
||||
LDA U
|
||||
MUL
|
||||
STA TEMP+1
|
||||
LDA U
|
||||
LDB TEMP
|
||||
MUL
|
||||
BPL 10$
|
||||
SUBA U
|
||||
10$ ADDB TEMP+1
|
||||
ADCA #0
|
||||
RTS
|
||||
|
||||
PULLORG ROMSAV
|
|
@ -0,0 +1,7 @@
|
|||
$ DELETE CAPTURE.TMP;*
|
||||
$ OPEN/W FILE: CAPTURE.TMP
|
||||
$ DIR:='F$DIR()
|
||||
$ WRITE FILE: "SET DEFAULT ",DIR
|
||||
$ WRITE FILE: "$ ",P1," ",P2," ",P3," ",P4," ",P5," ",P6," ",P7," ",P8
|
||||
$ CLOSE FILE:
|
||||
$ SUBMIT/NOTIFY/QUEUE=SYS$SLOW/PRIO=4/LOG='DIR'T.TMP CAPTURE.TMP
|
|
@ -0,0 +1,2 @@
|
|||
SET DEFAULT [LIBRARY.SINISTAR.SAM]
|
||||
$ @[LIBRARY.SINISTAR.SAM]TSYMVER [LIBRARY.SINISTAR.SAM]SAMS.LIS SAMS Y
|
|
@ -0,0 +1,32 @@
|
|||
* Collision macros:
|
||||
|
||||
* initialize collision for an object type
|
||||
MAKECOL MACRO N1
|
||||
BLIST
|
||||
LN1 EQU CLCOUNT
|
||||
MN1 SET 0
|
||||
CLCOUNT SET CLCOUNT+1
|
||||
IFGT CLCOUNT-NCOLLIS
|
||||
MESSG "CLCOUNT OVFL"
|
||||
ENDIF
|
||||
MLIST
|
||||
ENDM
|
||||
|
||||
* handle a collision
|
||||
COLLIDE MACRO N1,N2
|
||||
BLIST
|
||||
IFN 4000!>LN2!.MN1
|
||||
MESSG "DUP COL N1,N2"
|
||||
ENDIF
|
||||
MN1 SET 4000!>LN2!+MN1
|
||||
MN2 SET 4000!>LN1!+MN2
|
||||
.$$ SET *
|
||||
IFLE LN1-LN2
|
||||
ORG CLTABLE+LN2*(LN2+1)+2*LN1
|
||||
FDB .$$
|
||||
ORG .$$
|
||||
ELSE
|
||||
ERR SWAP N1,N2
|
||||
ENDIF
|
||||
MLIST
|
||||
ENDM
|
|
@ -0,0 +1,69 @@
|
|||
INCLUDE START
|
||||
|
||||
NLIST
|
||||
|
||||
INCLVER SAM,SINISTAR.EQU
|
||||
INCLVER SAM,SAM.SYM
|
||||
|
||||
LIST
|
||||
|
||||
PUSHORG CMOS
|
||||
*
|
||||
*
|
||||
* DEFAULT HERE FOR NOW
|
||||
*
|
||||
* * *DEFALT FCB $30 FIRST EXTRA SHIP AT
|
||||
FCB $F3
|
||||
FCB $F0
|
||||
* * * FCB $05 ADDITIONAL POINTS PER EXTRA SHIP
|
||||
FCB $F0
|
||||
FCB $F5
|
||||
* * * FCB $03 SHIPS PER GAME
|
||||
FCB $F0
|
||||
FCB $F3
|
||||
* * * FCB $05 DIFFICULTY OF PLAY
|
||||
FCB $F0
|
||||
FCB $F5
|
||||
* * * FCB $01 CONTINUOUS FIRE
|
||||
FCB $F0
|
||||
FCB $F1
|
||||
* * * FCB $01 HIGH SCORE TO DATE ALLOWED
|
||||
FCB $F0
|
||||
FCB $F1
|
||||
* * * FCB $03 CSELCT
|
||||
FCB $F0
|
||||
FCB $F3
|
||||
* * * FCB $01 SLOT1M
|
||||
FCB $F0
|
||||
FCB $F1
|
||||
* * * FCB $04 SLOT2M
|
||||
FCB $F0
|
||||
FCB $F4
|
||||
* * * FCB $01 SLOT3M
|
||||
FCB $F0
|
||||
FCB $F1
|
||||
* * * FCB $01 CUNITC
|
||||
FCB $F0
|
||||
FCB $F1
|
||||
* * * FCB $00 CUNITB
|
||||
FCB $F0
|
||||
FCB $F0
|
||||
* * * FCB $00 MINUNT
|
||||
FCB $F0
|
||||
FCB $F0
|
||||
* * * FCB $00 FACTORY SETTINGS
|
||||
FCB $F0
|
||||
FCB $F0
|
||||
* * * FCB $00 CLEAR AUDIT TOTALS
|
||||
FCB $F0
|
||||
FCB $F0
|
||||
* * * FCB $00 CLEAR HSTD
|
||||
FCB $F0
|
||||
FCB $F0
|
||||
* * * FCB $00 AUTOCYCLE
|
||||
FCB $F0
|
||||
FCB $F0
|
||||
PULLORG
|
||||
|
||||
ENDTEST
|
||||
END
|
|
@ -0,0 +1,31 @@
|
|||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* *
|
||||
* *
|
||||
* DDDD IIIII AAA GGGG V V 11 77777 *
|
||||
* D D I A A G V V 1 7 *
|
||||
* D D I AAAAA G GGG V V 1 7 *
|
||||
* D D I A A G G V V 1 7 *
|
||||
* DDDD IIIII A A GGG V 11111 7 *
|
||||
* *
|
||||
* S I N I S T A R 17 *
|
||||
* *
|
||||
* A game by Sam Dicker, Noah Falstein and Rich Witt *
|
||||
* Copyright (c) 1983 by Williams Electronics Inc. *
|
||||
* *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
|
||||
INCLUDE START
|
||||
|
||||
NLIST
|
||||
|
||||
INCLVER SAM,DIAG.SYM
|
||||
|
||||
LIST
|
||||
|
||||
CRF SET 0 no extra copyright
|
||||
ROM SET 0 assemble at $F000
|
||||
ROMSAVE SET TSTORG
|
||||
|
||||
INCLVER SAM,T13
|
||||
|
||||
END
|
|
@ -0,0 +1,106 @@
|
|||
SYMVER ADVSC,$494C
|
||||
SYMVER APIA2,$48F3
|
||||
SYMVER BCDCNT,$BF16
|
||||
SYMVER BCDD,$BF13
|
||||
SYMVER BCDN,$BF10
|
||||
SYMVER BCDR,$BF0D
|
||||
SYMVER BCDTMP,$BF17
|
||||
SYMVER CCOLN,$0032
|
||||
SYMVER CCURSR,$0030
|
||||
SYMVER CKCMOS,$49F9
|
||||
SYMVER CLRSCR,$3245
|
||||
SYMVER CMOS,$CC00
|
||||
SYMVER COINSL,$CC0C
|
||||
SYMVER COLR,$BF1A
|
||||
SYMVER CRAM,$C000
|
||||
SYMVER CTHOU,$002F
|
||||
SYMVER DMAFIX,$0404
|
||||
SYMVER ENDADJ,$CC24
|
||||
SYMVER ENDBOK,$CD2C
|
||||
SYMVER EXPFON,$E222
|
||||
SYMVER FDTEST,$BF08
|
||||
SYMVER FHSEED,$BF0B
|
||||
SYMVER FLSEED,$BF0C
|
||||
SYMVER FSEED,$BF0A
|
||||
SYMVER HSTK,$BF00
|
||||
SYMVER INDIAG,$BF09
|
||||
SYMVER IRQ,$E00B
|
||||
SYMVER LOWRAM,$9C00
|
||||
SYMVER MEMCTL,$C900
|
||||
SYMVER MINUNT,$CC18
|
||||
SYMVER MSADJS,$0030
|
||||
SYMVER MSADV,$0012
|
||||
SYMVER MSALL,$0001
|
||||
SYMVER MSAUD,$0026
|
||||
SYMVER MSAUT,$0011
|
||||
SYMVER MSCNT,$0016
|
||||
SYMVER MSFRPL,$004C
|
||||
SYMVER MSHGHR,$0014
|
||||
SYMVER MSIND,$0000
|
||||
SYMVER MSLFT,$0015
|
||||
SYMVER MSNO,$0008
|
||||
SYMVER MSPLY1,$0018
|
||||
SYMVER MSPLY2,$0019
|
||||
SYMVER MSRIG,$0013
|
||||
SYMVER MSROM,$0003
|
||||
SYMVER MSRRM,$0002
|
||||
SYMVER MSSLAM,$0017
|
||||
SYMVER MSSND,$0024
|
||||
SYMVER MSTIM,$002E
|
||||
SYMVER MSYES,$0044
|
||||
SYMVER OUTBCD,$E206
|
||||
SYMVER OUTB35,$E20F
|
||||
SYMVER OUTCHR,$E200
|
||||
SYMVER OUTC35,$E209
|
||||
SYMVER OUTPHR,$E203
|
||||
SYMVER OUTP35,$E20C
|
||||
SYMVER PIA0,$C80C
|
||||
SYMVER PIA1,$C80E
|
||||
SYMVER PIA2,$C804
|
||||
SYMVER PIA3,$C806
|
||||
SYMVER PMEMCT,$BFFF
|
||||
SYMVER RAM,$BF01
|
||||
SYMVER RAMALS,$BF01
|
||||
SYMVER RCMOSA,$4A5F
|
||||
SYMVER RCMOSB,$4A70
|
||||
SYMVER RCMOSD,$4A6E
|
||||
SYMVER SBOMB,$0023
|
||||
SYMVER SFIRE,$0022
|
||||
SYMVER SLOT1,$CD02
|
||||
SYMVER SLOT1M,$CC0E
|
||||
SYMVER SLRDRC,$0021
|
||||
SYMVER SLRSWA,$001E
|
||||
SYMVER SLRSWB,$001F
|
||||
SYMVER SLRSWC,$0020
|
||||
SYMVER SPECFN,$CC1A
|
||||
SYMVER SUDDRC,$001D
|
||||
SYMVER SUDSWA,$001A
|
||||
SYMVER SUDSWB,$001B
|
||||
SYMVER SUDSWC,$001C
|
||||
SYMVER SW0SCN,$BF20
|
||||
SYMVER SW0ST,$BF1F
|
||||
SYMVER SW2SCI,$BF26
|
||||
SYMVER SW2SCN,$BF22
|
||||
SYMVER SW2ST,$BF21
|
||||
SYMVER SW2STI,$BF25
|
||||
SYMVER SW3SCI,$BF28
|
||||
SYMVER SW3SCN,$BF24
|
||||
SYMVER SW3ST,$BF23
|
||||
SYMVER SW3STI,$BF27
|
||||
SYMVER TEXT35,$E215
|
||||
SYMVER TEXT68,$E212
|
||||
SYMVER TSTORG,$F000
|
||||
SYMVER TXADJT,$0008
|
||||
SYMVER TXBADJ,$0009
|
||||
SYMVER TXBOOK,$0007
|
||||
SYMVER TXCMDR,$0004
|
||||
SYMVER TXCMER,$0003
|
||||
SYMVER TXCMOK,$0002
|
||||
SYMVER TXCMT,$0005
|
||||
SYMVER TXRAMK,$0001
|
||||
SYMVER TXROMK,$0000
|
||||
SYMVER TXSWTS,$0006
|
||||
SYMVER WCMOSA,$4A78
|
||||
SYMVER WDATA,$0039
|
||||
SYMVER WDOG,$CBFF
|
||||
SYMVER XTEMP,$BF06
|
|
@ -0,0 +1,37 @@
|
|||
NLIST
|
||||
|
||||
include start
|
||||
INCLVER RICH,TEXT * The TEXT, PHRASE and WORD macros.
|
||||
*****
|
||||
*
|
||||
* DISPLAY
|
||||
*
|
||||
* This begins any text which may be displayed via a PHRASE macro
|
||||
* invocation. WORD macro calls may follow PHRASE calls (but there
|
||||
* must be at least one.
|
||||
*
|
||||
* These calls destroy the A, B and X registers.
|
||||
*
|
||||
*****
|
||||
DISPLAY MACRO CO
|
||||
BLIST
|
||||
TEXT $7A,$00
|
||||
IFIDN <CO>,<RED>
|
||||
LDA #30
|
||||
ELSE
|
||||
IFIDN <CO>,<YELLOW>
|
||||
LDA #20
|
||||
ELSE
|
||||
IFIDN <CO>,<GREY>
|
||||
LDA #10
|
||||
ELSE
|
||||
LDA #CO
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
jsr tdispe
|
||||
MLIST
|
||||
.$DISP SET disp
|
||||
ENDM
|
||||
|
||||
LIST
|
|
@ -0,0 +1,367 @@
|
|||
INCLUDE START
|
||||
|
||||
PUSHORG ROMSAVE
|
||||
|
||||
SUBTTL DISPLAY ROUTINES
|
||||
|
||||
* erase kill object
|
||||
EKOBJ LDX OIDESC,Y > uses A,B,X,Y
|
||||
LDA OHEIGHT,X
|
||||
LDB ODWIDTH,Y
|
||||
EORA #4 * * * FOR DMA BUG
|
||||
EORB #4 * * *
|
||||
STD DHIGH
|
||||
LDD OBOTTOM,Y
|
||||
STD DDEST
|
||||
LDD ODSOUR,Y
|
||||
STD DSOUR
|
||||
LDB OLPOSF,Y
|
||||
SEX
|
||||
ANDA #DTFL
|
||||
ORA #DWBL+DZSP+DCNS
|
||||
STA DCTRL
|
||||
JMP KOBJECT link-out object
|
||||
|
||||
* change image pass object wsa in Y
|
||||
ROUTINE CHGOBJ
|
||||
LDX OIDESC,Y erase old image > uses A,B,X
|
||||
LDA OHEIGHT,X
|
||||
LDB ODWIDTH,Y
|
||||
EORA #4 * * * FOR DMA BUG
|
||||
EORB #4 * * *
|
||||
STD DHIGH
|
||||
LDD OBOTTOM,Y
|
||||
STD DDEST
|
||||
LDD ODSOUR,Y
|
||||
STD DSOUR
|
||||
LDB OLPOSF,Y
|
||||
SEX
|
||||
ANDA #DTFL
|
||||
ORA #DWBL+DZSP+DCNS
|
||||
STA DCTRL
|
||||
LDD OLCENT,X save old position offset
|
||||
LDX ONIDESC,Y get new image descriptor
|
||||
STX OIDESC,Y save it
|
||||
SUBA OLCENT,X compute change in bottom left position
|
||||
SUBB OSCENT,X
|
||||
STB TEMP+1 save s change in TEMP
|
||||
ADDB OSVEL,Y add to s velocity
|
||||
STB OSVEL,Y
|
||||
CLRB convert l change to bytes
|
||||
ASRA
|
||||
RORB
|
||||
STD TEMP+2 save l change in TEMP
|
||||
ADDD OLVEL,Y add to l velocity
|
||||
STD OLVEL,Y
|
||||
LDD OIMAGE,X new source
|
||||
STD ODSOUR,Y
|
||||
STD DSOUR
|
||||
LDD OHEIGHT,X new width
|
||||
STB ODWIDTH,Y
|
||||
EORA #4 * * *
|
||||
EORB #4 * * *
|
||||
STD DHIGH
|
||||
LDD OPDRWVE,Y save post-draw vector in TEMP
|
||||
STD TEMP+4
|
||||
LDD #POSTCHG change post-draw vector to POSTCHG
|
||||
STD OPDRWVE,Y
|
||||
LDA OSTATUS,Y left clipped?
|
||||
BPL DRAWOBJ
|
||||
LDA OSPOS,Y yes, off left edge?
|
||||
ADDA OWIDTH,X
|
||||
BCS DRAWOBJ
|
||||
JMP OBJOFF yes
|
||||
BRA DRAWOBJ uses normal draw routine
|
||||
|
||||
* display object pass object wsa in Y
|
||||
DOBJECT LDX OIDESC,Y > uses A,B,X
|
||||
LDA OHEIGHT,X
|
||||
LDB ODWIDTH,Y
|
||||
EORA #4 * * * FOR DMA BUG
|
||||
EORB #4 * * *
|
||||
STD DHIGH
|
||||
LDD OBOTTOM,Y
|
||||
STD DDEST
|
||||
LDD ODSOUR,Y
|
||||
STD DSOUR
|
||||
LDB OLPOSF,Y
|
||||
SEX
|
||||
ANDA #DTFL
|
||||
ORA #DWBL+DZSP+DCNS
|
||||
STA DCTRL
|
||||
* left-right clipping state transitions:
|
||||
*
|
||||
* /B\ /A\ /C\
|
||||
* \ V \ V \ V
|
||||
* off left -----D----> on -----F---> right ---I---> off
|
||||
* left <----H---- clip <----E--- screen <--G---- clip right
|
||||
* <------------J------------- -----------K----------->
|
||||
DRAWOBJ LDX OIDESC,Y ABCDEFGHIJK
|
||||
LDD OSVEL,Y
|
||||
ADDD SSVEL
|
||||
BPL 3$
|
||||
ADDD OSPOS,Y ABC E GH J
|
||||
STD OSPOS,Y
|
||||
BCS 2$
|
||||
LDB OSTATUS,Y E J
|
||||
ORB #80
|
||||
STB OSTATUS,Y
|
||||
CLRB
|
||||
STB OLEFT,Y
|
||||
STB DDEST+1
|
||||
1$ STA TEMP B E H J
|
||||
ADDA OWIDTH,X
|
||||
BCS 10$
|
||||
JMP OBJOFF H J
|
||||
2$ LDB OSTATUS,Y ABC GH
|
||||
BMI 1$
|
||||
STA OLEFT,Y A C G
|
||||
STA DDEST+1
|
||||
BITB #40
|
||||
BEQ 11$
|
||||
ADDA OWIDTH,X C G
|
||||
BCS 4$
|
||||
BRA 8$ G
|
||||
3$ ADDD OSPOS,Y ABCD F I K
|
||||
STD OSPOS,Y
|
||||
BCS 5$
|
||||
LDB OSTATUS,Y ABC F K
|
||||
BMI 9$
|
||||
STA OLEFT,Y A C F K
|
||||
STA DDEST+1
|
||||
BITB #40
|
||||
BNE 4$
|
||||
ADDA OWIDTH,X A F
|
||||
BCC 11$
|
||||
ORB #40 F
|
||||
STB OSTATUS,Y
|
||||
4$ LDA OSPOS,Y C F K
|
||||
COMA
|
||||
BLE 6$
|
||||
STA ODWIDTH,Y C F
|
||||
EORA #4 * * * FOR DMA BUG
|
||||
STA DWIDE
|
||||
BRA 11$
|
||||
5$ LDB OSTATUS,Y D I K
|
||||
BMI 7$
|
||||
6$ LDA #-1 I K
|
||||
STA OSPOS,Y
|
||||
JMP OBJOFF
|
||||
7$ STA OLEFT,Y D
|
||||
STA DDEST+1
|
||||
LDD OIMAGE,X
|
||||
STD ODSOUR,Y
|
||||
STD DSOUR
|
||||
8$ ANDB #3F D G
|
||||
STB OSTATUS,Y
|
||||
LDA OWIDTH,X
|
||||
STA ODWIDTH,Y
|
||||
EORA #4 * * * FOR DMA BUG
|
||||
STA DWIDE
|
||||
BRA 11$
|
||||
9$ STA TEMP B
|
||||
ADDA OWIDTH,X
|
||||
10$ STA ODWIDTH,Y B E
|
||||
EORA #4 * * * FOR DMA BUG
|
||||
STA DWIDE
|
||||
LDA TEMP
|
||||
NEGA
|
||||
LDB OHEIGHT,X
|
||||
MUL
|
||||
ADDD OIMAGE,X
|
||||
STD ODSOUR,Y
|
||||
STD DSOUR
|
||||
* bottom-top clipping state transitions:
|
||||
*
|
||||
* /B\ /A\
|
||||
* \ V \ V
|
||||
* off bottom ------C------> on -------E-----> off
|
||||
* bottom <-----F------ clip <------D----- screen top
|
||||
* <----------------G----------------
|
||||
11$ LDB OLPOSF,Y ABCDEFG
|
||||
LDA OLPOS,Y
|
||||
BMI 12$
|
||||
ADDD OLVEL,Y A DE G
|
||||
ADDD SLVEL
|
||||
BMI 13$
|
||||
CMPA #DINHIB A E
|
||||
BLO 14$
|
||||
BRA OBJOFF
|
||||
12$ ADDD OLVEL,Y BC F
|
||||
ADDD SLVEL
|
||||
BPL 14$
|
||||
13$ STA OLPOS,Y B D FG
|
||||
STA DDEST
|
||||
ADDA OHEIGHT,X
|
||||
BCS 15$
|
||||
BRA OBJOFF
|
||||
14$ STA OLPOS,Y A C
|
||||
STA DDEST
|
||||
ADDA OHEIGHT,X
|
||||
BPL 15$
|
||||
LDA #7F
|
||||
15$ STA OTOP,Y ABCD
|
||||
STB OLPOSF,Y
|
||||
SEX
|
||||
ANDA #DTFL
|
||||
ORA #DWBL+DZSP
|
||||
STA DCTRL
|
||||
JMP [OPDRWVE,Y] execute post-display routine, uses A,B,X,U
|
||||
|
||||
* off screen
|
||||
OBJOFF LDX OCHAR,Y
|
||||
JMP [OOFFSCR,X] execute scroll off screen routine, uses A,B,X,U
|
||||
|
||||
* change object post draw routine
|
||||
POSTCHG LDA OSVEL,Y restore s velocity > uses A,B
|
||||
SUBA TEMP+1
|
||||
STA OSVEL,Y
|
||||
LDD OLVEL,Y restore l velocity
|
||||
SUBD TEMP+2
|
||||
STD OLVEL,Y
|
||||
LDD #DOBJECT restore draw vector
|
||||
STD ODRWVEC,Y
|
||||
LDD TEMP+4
|
||||
STD OPDRWVE,Y
|
||||
JMP [OPDRWVE,Y] execute post-display routine, uses A,B,X,U
|
||||
|
||||
* draw crystal on worker pass object wsa in Y, image descriptor in X
|
||||
DCRYWOR LDA OSTATUS,Y left or right clipped? > uses A,B,X
|
||||
BITA #0C0
|
||||
BNE 1$ yes, skip crystal
|
||||
LDA OLPOSF,Y get worker flavor
|
||||
ASLA
|
||||
LDD OBOTTOM,Y get worker screen address
|
||||
ROLA convert to pixel address
|
||||
ADDD OLCENT,X add center offset
|
||||
CMPA #DINHIB!<1 crystal off top
|
||||
BHS 1$ yes, skip crystal
|
||||
LSRA convert back to screen address ( bytes)
|
||||
ROR TEMP save flavor
|
||||
TFR D,X
|
||||
JMP [CRYANI] draw it, uses A,B,X
|
||||
1$ JMP NOPOST skip crystal
|
||||
|
||||
* crystal animation routines
|
||||
CRY1ANI LDA CRYCOLO make pixel 0 random color > uses A,B,X
|
||||
STA OEFFECT,Y
|
||||
LDA OEFFECT+3,Y make pixel 1 and 2 like pixel 3
|
||||
STA OEFFECT+1,Y
|
||||
STA OEFFECT+2,Y
|
||||
BRA CRYDRAW uses A,B,X
|
||||
*
|
||||
CRY2ANI LDA CRYCOLO make pixel 1 random color > uses A,B,X
|
||||
STA OEFFECT+1,Y
|
||||
LDA OEFFECT+2,Y make pixel 0 and 3 like pixel 2
|
||||
STA OEFFECT,Y
|
||||
STA OEFFECT+3,Y
|
||||
BRA CRYDRAW uses A,B,X
|
||||
*
|
||||
CRY3ANI LDA CRYCOLO make pixel 2 random color > uses A,B,X
|
||||
STA OEFFECT+2,Y
|
||||
LDA OEFFECT+1,Y make pixel 0 and 3 like pixel 1
|
||||
STA OEFFECT,Y
|
||||
STA OEFFECT+3,Y
|
||||
BRA CRYDRAW uses A,B,X
|
||||
*
|
||||
CRY4ANI LDA CRYCOLO make pixel 3 random color > uses A,B,X
|
||||
STA OEFFECT+3,Y
|
||||
LDA OEFFECT,Y make pixel 1 and 2 like pixel 0
|
||||
STA OEFFECT+1,Y
|
||||
STA OEFFECT+2,Y
|
||||
BRA CRYDRAW
|
||||
*
|
||||
CRYDRAW LDA OEFFECT,Y combine pixels into 2 bytes > uses A,B,X
|
||||
RPT 4,ASLA
|
||||
ORA OEFFECT+1,Y
|
||||
LDB OEFFECT+2,Y
|
||||
RPT 4,ASLB
|
||||
ORB OEFFECT+3,Y
|
||||
TST TEMP flavor?
|
||||
BMI 1$
|
||||
STD X bottom flavor: draw crystal
|
||||
BRA 2$
|
||||
1$ STA CRIMAGE top flavor: setup dma image
|
||||
STB CRIMAGE+2
|
||||
LDD #202!X404 * * *FOR DMA BUG set dma size
|
||||
STD DHIGH
|
||||
LDD #CRIMAGE set dma source
|
||||
STD DSOUR
|
||||
STX DDEST set dma destination
|
||||
LDA #DTFL+DZSP+DWBL draw crystal
|
||||
STA DCTRL
|
||||
2$ LDX #CRYSTBL find a random color on the crystal color table
|
||||
RANDOM OSEED1,WORD
|
||||
ANDB #7
|
||||
LDA B,X
|
||||
STA CRYCOLO save it
|
||||
NOPOST LDA OSTATUS,Y decrement bounce counter
|
||||
BITA #3
|
||||
LBEQ EXEC1
|
||||
DEC OSTATUS,Y
|
||||
JMP EXEC1
|
||||
|
||||
* paste an image on top of a screen object pass object wsa in Y,
|
||||
* main image descriptor in X, paste on image descriptor in OEFFECT
|
||||
ROUTINE PASTEON
|
||||
LDA OSTATUS,Y left or right clipped? > uses A,B,U
|
||||
BITA #0C0
|
||||
BNE 2$ yes, skip extra image
|
||||
LDU OEFFECT,Y get image descriptor of image to paste
|
||||
LDD OHEIGHT,U get paste image height and width
|
||||
EORA #4 * * *FOR DMA BUG
|
||||
EORB #4 * * *FOR DMA BUG
|
||||
STD DHIGH setup dma size
|
||||
LDD OIMAGE,U get image data address
|
||||
STD DSOUR setup dma source
|
||||
LDA OLPOSF,Y get object flavor
|
||||
ASLA
|
||||
LDD OBOTTOM,Y get object screen address
|
||||
ROLA convert to pixel address
|
||||
ADDD OLCENT,X add object center offset
|
||||
SUBD OLCENT,U subtract paste image center offset
|
||||
LSRA convert back to screen address ( bytes)
|
||||
STD DDEST setup dma destination
|
||||
LDA #DWBL+DZSP draw it
|
||||
BCC 1$
|
||||
ORA #DTFL
|
||||
1$ STA DCTRL
|
||||
2$ JMP NOPOST continue normal post draw
|
||||
|
||||
* scanner object off screen
|
||||
SCROFF LDX OCHAR,Y get char desc table addr > uses A,B,X
|
||||
LDD #VSCAN change scanner loop address for visible loop
|
||||
TST OVSCFLG,X test visible/invisible on scanner flag
|
||||
BNE 1$
|
||||
LDD #ISCAN change scanner loop address for invisible loop
|
||||
1$ LDX [OSCAN,Y] get scanner task workspace
|
||||
STD OEXEC,X
|
||||
LDD OLVEL,Y compute scanner l velocity
|
||||
ADDD #20
|
||||
RPT 2,ASLB,ROLA
|
||||
STA OSLVEL,X save scanner l velocity
|
||||
LDD OSVEL,Y compute scanner s velocity
|
||||
ADDD #20
|
||||
RPT 1,ASLB,ROLA
|
||||
STA OSSVEL,X save scanner s velocity
|
||||
PSHS Y save screen workspace
|
||||
TFR X,Y get scanner workspace into Y
|
||||
JSR ERASCAN erase scanner image save Y, uses A,B
|
||||
JSR UPSCAN update scanner position save Y, uses A,B,X,U
|
||||
JSR DRWSCAN draw scanner image save Y, uses A,B,X
|
||||
CLRD zero screen object workspace address
|
||||
STD OSSCWSA,Y
|
||||
PULS Y restore screen workspace
|
||||
* kill object
|
||||
ROUTINE KOBJECT
|
||||
LDX OFLINK,Y > uses A,B,X,Y
|
||||
LDD FOBJKEY link-out of screen list and on to free list
|
||||
STD OFLINK,Y
|
||||
STY FOBJKEY
|
||||
LDY OBLINK,Y and set current to previous
|
||||
STX OFLINK,Y
|
||||
STY OBLINK,X
|
||||
INC SFREE add one free screen object
|
||||
JMP EXEC2 no swap
|
||||
|
||||
PULLORG ROMSAVE
|
|
@ -0,0 +1,12 @@
|
|||
$ IF P1.EQS."" THEN P1 := 'EDT_DEFAULT'
|
||||
$ IF 'F$LOC("*.",P1).EQ.0 THEN P1 := 'EDT_DEFAULT''F$EX(1,4,P1)
|
||||
$ DOT='F$LOC(".",P1)
|
||||
$ IF P2.EQS."" THEN EDT_DEFAULT :== 'F$EX(0,DOT,P1)
|
||||
$ IF DOT.EQ.'F$LEN(P1) THEN P1 := 'P1''EXT_DEFAULT'
|
||||
$ IF P2.EQS."" THEN EXT_DEFAULT :=='F$EX(DOT,4,P1)
|
||||
$ DIR:='F$DIR()
|
||||
$ DISP "
|
||||
Editing: ",DIR,P1,"
|
||||
"
|
||||
$ ASSIGN/USER SYS$COMMAND: SYS$INPUT:
|
||||
$ EDIT/EDT/JOU=['SAMDIR']JOURNAL.TMP/COMM=['SAMDIR']EDTINI.EDT 'P1'
|
|
@ -0,0 +1,130 @@
|
|||
DEFINE KEY GOLD A AS "CUTSR=WORK I##$%#
|
||||
EXT F=WORK."
|
||||
DEFINE KEY CONT A AS "SELIS/?'from: '$/?' to: '$/WH CUTSR=SUB2 EXT SUB2."
|
||||
DEFINE KEY GOLD CONT A AS "EXT SUB3."
|
||||
DEFINE KEY CONT B AS "I* * *+L."
|
||||
DEFINE KEY GOLD B AS "EXT SHOW BUFFER."
|
||||
DEFINE KEY GOLD CONT B AS "BR I
|
||||
BR."
|
||||
DEFINE KEY GOLD C AS "I_DMA1:[COMMON]."
|
||||
DEFINE KEY CONT D AS "-VD+CUNDC+EL+ELUNDC +C."
|
||||
DEFINE KEY GOLD CONT D AS "-VD+ELUNDL+VUNDL."
|
||||
DEFINE KEY CONT E AS "I#~# +EL 9ASC -'#~#' +3C SEL +' ' CUTSR +EL D-C -'#~#' D+3C."
|
||||
DEFINE KEY GOLD E AS "EXT EXIT."
|
||||
DEFINE KEY CONT F AS "(+EL I~ 10(+L-L D+W +EL -'~' +2C UNDW) +L)."
|
||||
DEFINE KEY CONT H AS "+EL."
|
||||
DEFINE KEY GOLD H AS "HELP."
|
||||
DEFINE KEY GOLD CONT H AS "SEL CUTSR=HELP EXT INC EDT$DIR:EDTINI.HLP =HELP."
|
||||
DEFINE KEY GOLD J AS "FILLSR."
|
||||
DEFINE KEY CONT J AS "(^M-C)."
|
||||
DEFINE KEY GOLD CONT J AS "10ASC."
|
||||
DEFINE KEY GOLD K AS "EXT SHOW KEY ?'<key-description> '."
|
||||
DEFINE KEY GOLD L AS "PAGETOP."
|
||||
DEFINE KEY GOLD M AS "SEL CUTSR=MISC EXT INC _DMA1:[DRES]MISC.DOC =MISC."
|
||||
DEFINE KEY GOLD CONT M AS "13ASC."
|
||||
DEFINE KEY GOLD O AS "?'#>Hit KEYPAD to restore file, ^U to abort command->'BRSELERCUTSREXT INC."
|
||||
DEFINE KEY GOLD P AS "CUTSR PASTE SEL I APPENDSR=PASTE EXT PRINT."
|
||||
DEFINE KEY GOLD Q AS "?'#>Hit KEYPAD to abort edit, ^U to continue edit->'QUIT."
|
||||
DEFINE KEY GOLD R AS "D-C 9UNDC."
|
||||
DEFINE KEY GOLD S AS "EXT WR."
|
||||
DEFINE KEY CONT T AS "' '."
|
||||
DEFINE KEY GOLD T AS "EXT SET TRUNC."
|
||||
DEFINE KEY GOLD CONT T AS "EXT SET NOTRUNC."
|
||||
DEFINE KEY CONT U AS "EXT USER."
|
||||
DEFINE KEY GOLD U AS "EXT C=USER."
|
||||
DEFINE KEY GOLD CONT U AS "EXT WRITE USER.EDT =USER."
|
||||
DEFINE KEY CONT V AS "+L-L D+5C +L."
|
||||
DEFINE KEY GOLD V AS "+L-L D+40C +L."
|
||||
DEFINE KEY GOLD X AS "EXT EXIT."
|
||||
DEFINE KEY GOLD CONT Z AS "26ASC."
|
||||
DEFINE KEY GOLD [ AS "27ASCI[."
|
||||
DEFINE KEY GOLD $ AS "I$ ."
|
||||
DEFINE KEY GOLD , AS "EXT COMMA."
|
||||
DEFINE KEY 0 AS "SEL."
|
||||
DEFINE KEY 1 AS "+L-LCHGC+EL."
|
||||
DEFINE KEY 2 AS "-8C."
|
||||
DEFINE KEY 3 AS "+8C."
|
||||
DEFINE KEY 4 AS "?'<search-string>'."
|
||||
DEFINE KEY 5 AS "''."
|
||||
DEFINE KEY 6 AS "SN''."
|
||||
DEFINE KEY 7 AS "CUTSR."
|
||||
DEFINE KEY 8 AS "PASTE."
|
||||
DEFINE KEY 9 AS "CUTSR PASTE."
|
||||
DEFINE KEY 10 AS "-16L."
|
||||
DEFINE KEY 11 AS "+16L."
|
||||
DEFINE KEY 16 AS "CHGC-C."
|
||||
DEFINE KEY 17 AS "+L-L D+NL."
|
||||
DEFINE KEY 18 AS "D+EL."
|
||||
DEFINE KEY 19 AS "D+C."
|
||||
DEFINE KEY 21 AS "?'hit keypad key: '."
|
||||
DEFINE KEY GOLD 0 AS "EXT C=?'=<buffer-name> ='."
|
||||
DEFINE KEY GOLD 1 AS "+L-EL-' 'CHGC+EL."
|
||||
DEFINE KEY GOLD 2 AS "?'Search is general. (hit keypad)#>'EXT SET SEARCH GENERAL."
|
||||
DEFINE KEY GOLD 3 AS "ASC."
|
||||
DEFINE KEY GOLD 4 AS "ADV."
|
||||
DEFINE KEY GOLD 5 AS "BACK."
|
||||
DEFINE KEY GOLD 6 AS "S\?'<delete-string>'\?'<replace-string>'\."
|
||||
DEFINE KEY GOLD 7 AS "CUTSR=PASTE2."
|
||||
DEFINE KEY GOLD 8 AS "PASTE=PASTE2."
|
||||
DEFINE KEY GOLD 9 AS "BL SEL +2EL FILLSR -C."
|
||||
DEFINE KEY GOLD 10 AS "BR."
|
||||
DEFINE KEY GOLD 11 AS "ER."
|
||||
DEFINE KEY GOLD 12 AS "EXT C=MAIN."
|
||||
DEFINE KEY GOLD 13 AS "EXT INC ?'<include-file> [=<buffer>] '."
|
||||
DEFINE KEY GOLD 14 AS "+L-L."
|
||||
DEFINE KEY GOLD 15 AS "EXT C LAST."
|
||||
DEFINE KEY GOLD 16 AS "CHGCSR."
|
||||
DEFINE KEY GOLD 17 AS "UNDL."
|
||||
DEFINE KEY GOLD 18 AS "+L-L D+NL UNDL."
|
||||
DEFINE KEY GOLD 19 AS "UNDC."
|
||||
DEFINE KEY GOLD 21 AS "RESET"
|
||||
DEFINE MACRO SUB2
|
||||
DEFINE MACRO SUB3
|
||||
DEFINE MACRO COMMA
|
||||
DEFINE MACRO USER
|
||||
DEFINE MACRO WID132
|
||||
DEFINE MACRO WID80
|
||||
DEFINE MACRO DCON
|
||||
DEFINE MACRO NODCON
|
||||
DEFINE MACRO PRINT
|
||||
I =SUB3 END ;FIND =MAIN
|
||||
I =SUB3 END ;FIND =MAIN
|
||||
I =SUB3 END ;FIND '##$%#'
|
||||
I =SUB3 END ;DEL .
|
||||
I =SUB3 END ;MOV =WORK TO .
|
||||
I =SUB3 END ;DEL .-1
|
||||
I =COMMA END;FIND =MAIN BEGIN
|
||||
I =COMMA END;I;#$#$#
|
||||
I =COMMA END;FIND =MAIN BEGIN
|
||||
I =COMMA END;INC TRANSFORM.DEF
|
||||
I =COMMA END;DEF MACRO EXIT
|
||||
I =COMMA END;SET SEARCH END
|
||||
I =COMMA END;DEFINE KEY GOLD . AS "ADV I##$$ BR
|
||||
?'transform? ' D+ELUNDL '##$$' D-4C UNDL +EL."
|
||||
I =EXIT END;DEL =MAIN BEGIN THRU '#$#$#'
|
||||
I =EXIT END;EX
|
||||
I =WID80 END;SET SCREEN 80
|
||||
I =WID80 END;DEF KEY GOL W AS "EXT WID132."
|
||||
I =WID132 END;SET SCREEN 132
|
||||
I =WID132 END;DEF KEY GOL W AS "EXT WID80."
|
||||
I =DCON END;SET LINE 10
|
||||
I =DCON END;SET CURSOR 0:10
|
||||
I =DCON END;DEFINE KEY 10 AS "-8L."
|
||||
I =DCON END;DEFINE KEY 11 AS "+8L."
|
||||
I =DCON END;DEFINE KEY GOLD D AS "EXT NODCON."
|
||||
I =NODCON END;SET LINE 22
|
||||
I =NODCON END;SET CURSOR 4:17
|
||||
I =NODCON END;DEFINE KEY 10 AS "-16L."
|
||||
I =NODCON END;DEFINE KEY 11 AS "+16L."
|
||||
I =NODCON END;DEFINE KEY GOLD D AS "EXT DCON."
|
||||
I =PRINT END;WR LPA0: =PASTE
|
||||
I =PRINT END;FIND LAST
|
||||
WID80
|
||||
NODCON
|
||||
INC USER.EDT =USER
|
||||
USER
|
||||
F=MAIN
|
||||
SET NOTRUNCATE
|
||||
SET TAB 8
|
||||
SET QUIET
|
||||
SET MODE CHANGE
|
|
@ -0,0 +1,22 @@
|
|||
SET NOTRUNCATE
|
||||
SET QUIET
|
||||
SET CURSOR 4:17
|
||||
SET MODE CHANGE
|
||||
SET NONUMBERS
|
||||
DEF KEY CONT A AS 'BR64000(4DL"") BR^M-CD+NL" "64000(DCUNDL" ") BR^M-C64000("MACRO"DL-DL) BR64000(S/[/ EQU $/) BR64000(S/]/ SET $/) EXT EXIT.'
|
||||
DEFINE KEY GOLD Q AS "EXT QUIT."
|
||||
DEFINE KEY GOLD X AS "EXT EXIT."
|
||||
DEFINE KEY GOLD E AS "EXT EXIT."
|
||||
DEFINE KEY GOLD C AS "-ELSEL+ELCHGCSR."
|
||||
DEFINE KEY GOLD L AS "PAGETOP."
|
||||
DEFINE KEY GOLD S AS "EXT WR."
|
||||
FIND END
|
||||
-"PAGE S-1"
|
||||
-2
|
||||
DELETE BEG:.
|
||||
FIND END
|
||||
-2
|
||||
DELETE #2
|
||||
S / /[/WH/NOTY
|
||||
S / =/]/WH/NOTY
|
||||
FIND BEG
|
|
@ -0,0 +1,6 @@
|
|||
$ IF P1.EQS."" THEN P1:= LIS$DIR:PGM.LIS
|
||||
$ IF P2.EQS."" THEN P2:= 'ASM_DEFAULT'
|
||||
$ DISP "
|
||||
from: ''P1' to: ''P2'.EQU"
|
||||
$ ASSIGN/USER SYS$COMMAND SYS$INPUT
|
||||
$ EDIT/EDT/COMMAND=['SAMDIR']EQUATE.EDT/OUTPUT='P2'.EQU 'P1'
|
|
@ -0,0 +1,256 @@
|
|||
|
||||
BASSAV SET $9800
|
||||
BHSCRO EQU $0008
|
||||
BLACK EQU $0000
|
||||
BLUE EQU $0099
|
||||
BLUEGR EQU $0066
|
||||
BURGAN EQU $00CC
|
||||
CARRY EQU $0001
|
||||
CATPRB EQU $0060
|
||||
CIRCLE EQU $0100
|
||||
CRAM EQU $C000
|
||||
CREAM EQU $0022
|
||||
CRPROB EQU $0010
|
||||
CRYDAM EQU $0010
|
||||
CRYDIS EQU $000C
|
||||
DAMPTI EQU $0040
|
||||
DCNS EQU $0010
|
||||
DCONS EQU $CA01
|
||||
DCTRL EQU $CA00
|
||||
DDEST EQU $CA04
|
||||
DHIGH EQU $CA06
|
||||
DINHIB EQU $0074
|
||||
DMOMAX EQU $0040
|
||||
DRBL EQU $0001
|
||||
DSCY EQU $0004
|
||||
DSOUR EQU $CA02
|
||||
DSTMOD EQU $0040
|
||||
DTFL EQU $0020
|
||||
DWBL EQU $0002
|
||||
DWIDE EQU $CA07
|
||||
DXWB EQU $0040
|
||||
DXWT EQU $0080
|
||||
DZSP EQU $0008
|
||||
FALSE EQU $0000
|
||||
FINAL SET $7FFF
|
||||
FIRLIN EQU $0060
|
||||
FUDGE EQU $0020
|
||||
GREY EQU $00AA
|
||||
HISAV SET $E000
|
||||
IQCRYS EQU $0008
|
||||
IQPLAN EQU $0000
|
||||
IQPLAY EQU $0002
|
||||
IQSBOM EQU $0006
|
||||
IQSINI EQU $0004
|
||||
IQWARR EQU $000C
|
||||
IQWORK EQU $000A
|
||||
LEFEDG EQU $002C
|
||||
LEVEL SET $0000
|
||||
LHSCRO EQU $0010
|
||||
LSIZE EQU $000B
|
||||
MAXBOM EQU $0014
|
||||
MAXCRA EQU $0010
|
||||
MEMCTL EQU $C900
|
||||
MHPIEC EQU $0010
|
||||
MINDIS EQU $0020
|
||||
MINFRE EQU $0600
|
||||
MINPRB EQU $00B0
|
||||
MISVIB EQU $0010
|
||||
MUAD EQU $00F8
|
||||
NCOLLI EQU $000B
|
||||
NINDEX EQU $0180
|
||||
NOBJS EQU $0030
|
||||
NSTARS EQU $000A
|
||||
NTNREP EQU $0004
|
||||
OBLINK EQU $0002
|
||||
OBOTON EQU $0002
|
||||
OBOTTO EQU $0005
|
||||
OBSCIM EQU $0017
|
||||
OBSTCL EQU $0007
|
||||
OBSTDS EQU $000D
|
||||
OBSTPR EQU $0006
|
||||
OCALPR EQU $0013
|
||||
OCDIND EQU $0012
|
||||
OCHAR EQU $0012
|
||||
OCLEE EQU $0001
|
||||
OCLELS EQU $0013
|
||||
OCLER EQU $0000
|
||||
OCLTYP EQU $0004
|
||||
OCOLTB EQU $0004
|
||||
OCOMBO EQU $0002
|
||||
OCRAGE EQU $0006
|
||||
OCRSIL SET $0007
|
||||
ODRWVE EQU $0018
|
||||
ODSOUR EQU $0009
|
||||
ODWIDT EQU $000B
|
||||
ODYNOV EQU $0004
|
||||
OEFFEC EQU $001E
|
||||
OEXEC EQU $0002
|
||||
OEXPLE SET $0007
|
||||
OFIDES EQU $000A
|
||||
OFLINK EQU $0000
|
||||
OFRAGI EQU $001F
|
||||
OHEIGH EQU $0000
|
||||
OHISDS EQU $000B
|
||||
OHISPR EQU $000F
|
||||
OICSCI EQU $000F
|
||||
OIDESC EQU $0014
|
||||
OILEN SET $0008
|
||||
OIMAGE EQU $0002
|
||||
OIMNO EQU $0006
|
||||
OINDEX EQU $FFFE
|
||||
OINTYP EQU $001D
|
||||
OINVEC EQU $0005
|
||||
OIWSCI EQU $000F
|
||||
OKIVEC EQU $0007
|
||||
OLCENT EQU $0006
|
||||
OLEFON EQU $0006
|
||||
OLEFT EQU $0006
|
||||
OLEN SET $0022
|
||||
OLPOS EQU $0005
|
||||
OLPOSF EQU $0004
|
||||
OLSVEC EQU $0010
|
||||
OLVEL EQU $000E
|
||||
OMASS EQU $0009
|
||||
OMODST EQU $0009
|
||||
OMTLEN SET $0004
|
||||
OMYTYP EQU $0002
|
||||
ONIDES EQU $0016
|
||||
OOFFSC EQU $000C
|
||||
OONSCR EQU $000E
|
||||
OOSCLE EQU $0014
|
||||
OPDRWV EQU $001A
|
||||
OPFRAG EQU $001E
|
||||
OPRIMA EQU $0005
|
||||
OPRIMO EQU $0004
|
||||
OQTAFC EQU $0003
|
||||
OQUOTA EQU $0011
|
||||
ORIGON EQU $0004
|
||||
ORSPAC SET $0004
|
||||
OSANAN EQU $001F
|
||||
OSCAN EQU $001C
|
||||
OSCDLE SET $0023
|
||||
OSCENT EQU $0007
|
||||
OSCHAR EQU $0004
|
||||
OSCHIG EQU $0015
|
||||
OSCLDC EQU $0018
|
||||
OSCLEN SET $000D
|
||||
OSCNIN EQU $000D
|
||||
OSCOCA EQU $000D
|
||||
OSCOLO EQU $0002
|
||||
OSCSDC EQU $0019
|
||||
OSCSQI EQU $0016
|
||||
OSCTYP EQU $0014
|
||||
OSCWCR EQU $0011
|
||||
OSCWID EQU $0016
|
||||
OSDPLE EQU $0016
|
||||
OSDPSA SET $0014
|
||||
OSEED1 EQU $0000
|
||||
OSEED2 EQU $0002
|
||||
OSFAST EQU $0020
|
||||
OSFLAN EQU $001A
|
||||
OSLPOS EQU $0008
|
||||
OSLVEL EQU $0006
|
||||
OSLVIB EQU $0002
|
||||
OSMIS EQU $001D
|
||||
OSOFLA EQU $001B
|
||||
OSPDES EQU $0000
|
||||
OSPERS EQU $000C
|
||||
OSPLEN SET $0004
|
||||
OSPLOF EQU $0002
|
||||
OSPOS EQU $0007
|
||||
OSPOSF EQU $0008
|
||||
OSPSOF EQU $0003
|
||||
OSRCHT EQU $0006
|
||||
OSSCWS EQU $000A
|
||||
OSSPOS EQU $0009
|
||||
OSSQPO EQU $001E
|
||||
OSSQSI EQU $001C
|
||||
OSSVEL EQU $0007
|
||||
OSSVIB EQU $0004
|
||||
OSTATU EQU $0010
|
||||
OSTLEN SET $0004
|
||||
OSTMAS EQU $0003
|
||||
OSULEN SET $0006
|
||||
OSULPO EQU $0004
|
||||
OSUSPO EQU $0005
|
||||
OSVCLE EQU $0022
|
||||
OSVCSA SET $0020
|
||||
OSVEL EQU $000C
|
||||
OSVIBA EQU $0000
|
||||
OSWCLE EQU $0019
|
||||
OSWCSA SET $0017
|
||||
OSWSA EQU $0004
|
||||
OSWWLE EQU $0027
|
||||
OSWWSA SET $0021
|
||||
OTBACK EQU $0006
|
||||
OTIME EQU $0004
|
||||
OTIMER SET $0008
|
||||
OTKEYI EQU $0002
|
||||
OTLEN SET $0007
|
||||
OTLINK EQU $0000
|
||||
OTNRCN EQU $0002
|
||||
OTNRLE SET $0003
|
||||
OTOP EQU $0011
|
||||
OTOPON EQU $0000
|
||||
OTPTR EQU $0004
|
||||
OTSCIM EQU $0019
|
||||
OURPRI EQU $000A
|
||||
OVBLEN SET $0007
|
||||
OVIBAS EQU $0021
|
||||
OVSCFL EQU $0017
|
||||
OWAKE EQU $0006
|
||||
OWARRI EQU $0001
|
||||
OWIDTH EQU $0001
|
||||
OWISLE EQU $0008
|
||||
OWISSA SET $0006
|
||||
OWORKE EQU $0000
|
||||
OWSCON EQU $0004
|
||||
PIA EQU $C800
|
||||
PINK EQU $0033
|
||||
PMEMCT EQU $BFFF
|
||||
PURPLE EQU $00BB
|
||||
QUOMOD EQU $0006
|
||||
RAMSAV SET $9900
|
||||
RCHMAX EQU $0060
|
||||
RED EQU $00DD
|
||||
RHSCRO EQU $00F0
|
||||
ROMSAV SET $0000
|
||||
SALLOW EQU $0110
|
||||
SAMEQU EQU $FFFF
|
||||
SAMOFF EQU $FFFF
|
||||
SCNLIN EQU $CB00
|
||||
SINIHI EQU $001A
|
||||
SINILC EQU $0019
|
||||
SINISC EQU $0018
|
||||
SINIST SET $0000
|
||||
SINIWI EQU $0031
|
||||
SINTRP EQU $00BF
|
||||
SRAMSA SET $D000
|
||||
SSIZE EQU $0008
|
||||
SSTART SET $0000
|
||||
STACK SET $BF00
|
||||
STACKA SET $0040
|
||||
SWRPRB EQU $0010
|
||||
TANGRE EQU $0044
|
||||
THSCRO EQU $006C
|
||||
TRUE EQU $FFFF
|
||||
VCALLE EQU $0019
|
||||
VDPLAN EQU $000D
|
||||
VERSIO SET $0011
|
||||
VIBDAM EQU $0002
|
||||
WDOG EQU $CBFF
|
||||
WDOGC EQU $0039
|
||||
WHITE EQU $0011
|
||||
WRSTPR EQU $0001
|
||||
YELLOW EQU $00FF
|
||||
.$ORG0 SET $0000
|
||||
.$ORG1 SET $0000
|
||||
.$ORG2 SET $0000
|
||||
.$ORG3 SET $0000
|
||||
.$ORG4 SET $0000
|
||||
.$ORG5 SET $0000
|
||||
.$ORG6 SET $0000
|
||||
.$ORG7 SET $0000
|
||||
.$PP SET $0000
|
||||
.$TMOD SET $0000
|
|
@ -0,0 +1,28 @@
|
|||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* *
|
||||
* *
|
||||
* EEEEE QQQQ U U A TTTTT EEEEE SSS V V 11 77777 *
|
||||
* E Q Q U U A A T E S V V 1 1 7 *
|
||||
* EEEE Q Q Q U U AAAAA T EEEE SSS V V 1 7 *
|
||||
* E Q Q U U A A T E S V V 1 7 *
|
||||
* EEEEE QQQ Q UUUU A A T EEEEE SSS V 11111 7 *
|
||||
* *
|
||||
* S I N I S T A R 17 *
|
||||
* *
|
||||
* A game by Sam Dicker, Noah Falstein, Rich Witt and Bob Mical *
|
||||
* Copyright (c) 1983 by Williams Electronics Inc. *
|
||||
* *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
SINISTA SET *
|
||||
* * *DISPLAY SET *
|
||||
* * * INCLUDE [SAM]START
|
||||
* * * INCLUDE [SAM]TSTART
|
||||
INCLUDE START
|
||||
* * *
|
||||
|
||||
INCLVER SAM,S1
|
||||
INCLVER NOAH,N1
|
||||
INCLVER RICH,R1
|
||||
* * * INCLVER BOB,B1
|
||||
|
||||
END
|
|
@ -0,0 +1,130 @@
|
|||
INCLUDE START
|
||||
|
||||
PUSHORG ROMSAVE
|
||||
|
||||
SUBTTL EXECUTIVE LOOP
|
||||
|
||||
* start object list
|
||||
EXEC DEC ESTATE are we overloaded?
|
||||
BLE 1$
|
||||
JMP VRLOAD overload handling, use none
|
||||
1$ BPL 3$ should we start next object list?
|
||||
2$ LDX [PRTASK] get next task
|
||||
LDY [OTLINK,X]
|
||||
JSR [OEXEC,Y] execute next task, uses A,B,X,Y,U
|
||||
LDA ESTATE should we start next object list?
|
||||
BMI 2$ yes:
|
||||
3$ JSR EXECJNK misc. exec junk, save none, uses A,B,X,U
|
||||
LDY SCRKEY start list
|
||||
BNE EXEC2A are there any objects?
|
||||
BRA EXEC end of list.
|
||||
* enter here from display routine- list swapper
|
||||
EXEC1 LDX OBLINK,Y are we already at left of list?
|
||||
BEQ EXEC2
|
||||
LDA OLEFT,Y are we above previous image?
|
||||
CMPA OLEFT,X
|
||||
BHS EXEC2
|
||||
LDU OFLINK,Y swap back in new order, U-> next
|
||||
STU TEMP save for end of swap(s)
|
||||
STU OFLINK,X forward link-out
|
||||
STX OBLINK,U backward link-out
|
||||
1$ LDX OBLINK,X X-> last backlink
|
||||
CMPA OLEFT,X do we continue searching back?
|
||||
BLO 1$ loop back if so
|
||||
LDU OFLINK,X save last fwdlink
|
||||
STY OFLINK,X forward link-in from last
|
||||
STX OBLINK,Y back link-in to last
|
||||
STU OFLINK,Y forward link-in to next
|
||||
STY OBLINK,U back link-in from next
|
||||
LDY TEMP swap done. pick up where we bottom off b4 swap.
|
||||
BNE EXEC2A
|
||||
BRA EXEC end of list.
|
||||
* enter here if it went off screen
|
||||
EXEC2 LDY OFLINK,Y point to next object
|
||||
BEQ EXEC end of list
|
||||
* come here if we have next (from swap) - collision scan
|
||||
EXEC2A LDB OLEFT,Y compute my right
|
||||
ADDB ODWIDTH,Y
|
||||
BCC 1$ right clipped?
|
||||
LDB #-1 yes
|
||||
1$ STB RIGHT save it
|
||||
LDA [OCHAR,Y] do we care about collisions?
|
||||
BMI 6$ yes:
|
||||
LDX OFLINK,Y compare my right with next objects left.
|
||||
CMPB OLEFT,X
|
||||
BLS 6$ end of check
|
||||
2$
|
||||
* * * LDA OTOP,X
|
||||
* * * SUBA [OIDESC,X]
|
||||
* * * CMPA OLPOS,X
|
||||
* * * BLS 100$
|
||||
* * * SWI
|
||||
* * *100$ LDA OTOP,Y
|
||||
* * * SUBA [OIDESC,Y]
|
||||
* * * CMPA OLPOS,Y
|
||||
* * * BLS 101$
|
||||
* * * SWI
|
||||
* * *101$ LDA OLEFT,X
|
||||
* * * CMPA OSPOS,X
|
||||
* * * TST OSTATUS,X
|
||||
* * * BMI 102$
|
||||
* * * BHS 102$
|
||||
* * * SWI
|
||||
* * *102$ LDA OLEFT,Y
|
||||
* * * CMPA OSPOS,Y
|
||||
* * * TST OSTATUS,Y
|
||||
* * * BMI 103$
|
||||
* * * BHS 103$
|
||||
* * * SWI
|
||||
* * *103$
|
||||
LDA OTOP,Y compare my top with his bottom
|
||||
CMPA OBOTTOM,X
|
||||
BLE 5$
|
||||
LDA OBOTTOM,Y compare my bottom with his top
|
||||
CMPA OTOP,X
|
||||
BGE 5$
|
||||
LDU OCHAR,X check collision mask
|
||||
LDD OMYTYPE,U
|
||||
ANDA [OCHAR,Y]
|
||||
BNE 3$
|
||||
STB TEMP
|
||||
LDD [OCHAR,Y]
|
||||
ANDB TEMP
|
||||
BEQ 4$
|
||||
3$ JSR PIXCHK yes, save X,Y, uses A,B
|
||||
4$ LDB RIGHT restore
|
||||
5$ LDX OFLINK,X collision check done, link to next.
|
||||
CMPB OLEFT,X
|
||||
BHI 2$
|
||||
6$ LDA ESTATE beam avoidance, do we care about tasks?
|
||||
BGT 11$
|
||||
LDA RIGHT collide with beam?
|
||||
ADDA #FUDGE
|
||||
BCS 8$ right clip
|
||||
CMPA SCNLIN
|
||||
BLO 11$ beam inside
|
||||
STY SAVEOBJ execute task while waiting for beam
|
||||
LDX [PRTASK] get next task
|
||||
LDY [OTLINK,X]
|
||||
JSR [OEXEC,Y] execute next task, uses A,B,X,Y,U
|
||||
7$ LDA ESTATE do we care about tasks?
|
||||
BGT 10$
|
||||
LDA RIGHT collide with beam?
|
||||
ADDA #FUDGE
|
||||
BCS 9$ right clip
|
||||
CMPA SCNLIN
|
||||
BLO 10$ beam inside
|
||||
LDX [PRTASK] get next task
|
||||
LDY [OTLINK,X]
|
||||
JSR [OEXEC,Y] execute next task, uses A,B,X,Y,U
|
||||
BRA 7$ check again
|
||||
8$ STY SAVEOBJ right clip wait loop
|
||||
9$ LDX [PRTASK] get next task
|
||||
LDY [OTLINK,X]
|
||||
JSR [OEXEC,Y] execute next task, uses A,B,X,Y,U
|
||||
LDA ESTATE
|
||||
BLE 9$
|
||||
10$ LDY SAVEOBJ
|
||||
11$ JMP [ODRWVEC,Y] erase/update/display, return to EXEC1 or EXEC2
|
||||
|
||||
PULLORG ROMSAVE
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue