first commit

master
teamarchive2.fnf.archive.org root 2021-04-03 01:13:06 +00:00
parent d2bd33ff01
commit 20f616bb9c
276 changed files with 38465 additions and 0 deletions

147
COM/ASM.COM Executable file
View File

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

12
COM/CAPTURE.COM Executable file
View File

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

11
COM/DELETER.COM Executable file
View File

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

8
COM/EQUATES.COM Executable file
View File

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

14
COM/ERRORCHK.COM Executable file
View File

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

10
COM/INQUIRE.COM Executable file
View File

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

13
COM/MESSAGE.COM Executable file
View File

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

29
COM/SYS.COM Executable file
View File

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

46
DELETE.COM Executable file
View File

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

46
DOWN.COM Executable file
View File

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

29
FALS/FIXBOMCA.SRC Executable file
View File

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

94
FALS/LAST.SRC Executable file
View File

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

9
FALS/LOGDIR.COM Executable file
View File

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

12
FALS/N0.LIS Executable file
View File

@ -0,0 +1,12 @@
*
ADDVIB *****
EXPOBJ *****
GIVCRY *****
INCALL *****
INWARR *****
KRCRYS *****
KRWORK *****
POSBOU *****
PREBOU *****
RSTPOP *****
TAUNT *****

23
FALS/N0.SRC Executable file
View File

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

7
FALS/N1.SRC Executable file
View File

@ -0,0 +1,7 @@
**********
* N1.SRC - Noah's current version release
**********
Include [Sam]Start
InclVer NOAH,N1sym.equ

2245
FALS/N1ALL.SRC Executable file

File diff suppressed because it is too large Load Diff

10
FALS/N1RAM.SRC Executable file
View File

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

138
FALS/N1SYM.EQU Executable file
View File

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

10
FALS/N2.SRC Executable file
View File

@ -0,0 +1,10 @@
**********
* N2.SRC - Noah's current version release of rmb and src
**********
Include [Sam]Start
InclVer NOAH,N1Ram
InclVer NOAH,N1all

158
FALS/N3.SRC Executable file
View File

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

1
FALS/NOAH.EQU Executable file
View File

@ -0,0 +1 @@
* No One Home

5
FALS/NOAH.SRC Executable file
View File

@ -0,0 +1,5 @@
* Noah.Src - Noah's current public access file for release
*
Include [Sam]Start
InclVer SAM,Sinistar.equ

22
FALS/NOAH.SYM Executable file
View File

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

4
FALS/NOAHFIXE.SRC Executable file
View File

@ -0,0 +1,4 @@
Include [Sam]Start
NoahFixes.src
* InclVer NOAH,Fixbomcal * fix sinibomb calling player

546
FALS/NOAHS.EQU Executable file
View File

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

222
FALS/NOAHS.SET Executable file
View File

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

33
FALS/NOAHS.SRC Executable file
View File

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

212
FALS/NOAHS.SYM Executable file
View File

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

62
FALS/SC1.SRC Executable file
View File

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

82
FALS/SYMVER.COM Executable file
View File

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

521
FALS/V17.COM Executable file
View File

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

844
MAKE.COM Executable file
View File

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

142
MICA/ATTMSGS.SRC Executable file
View File

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

24
MICA/B0.SRC Executable file
View File

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

5
MICA/B1.SRC Executable file
View File

@ -0,0 +1,5 @@
INCLUDE [SAM]START
INCLVER BOB,BOBSYMS
INCLVER BOB,BOBEQUATE
INCLVER BOB,BOBOFFSET

34
MICA/B2.SRC Executable file
View File

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

15
MICA/BOB.SRC Executable file
View File

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

28
MICA/BOB.SYM Executable file
View File

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

55
MICA/BOBEQUAT.SRC Executable file
View File

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

129
MICA/BOBFIXES.SRC Executable file
View File

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

93
MICA/BOBOFFSE.SRC Executable file
View File

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

58
MICA/BOBRAM.SRC Executable file
View File

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

687
MICA/BOBS.EQU Executable file
View File

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

227
MICA/BOBS.SET Executable file
View File

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

32
MICA/BOBS.SRC Executable file
View File

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

122
MICA/BOBS.SYM Executable file
View File

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

14
MICA/BOBSYMS.SRC Executable file
View File

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

30
MICA/BURN.COM Executable file
View File

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

6
MICA/EXPATCH.SRC Executable file
View File

@ -0,0 +1,6 @@
INCLUDE [SAM]START
INCLVER SAM,SINISTAR.EQU
EXPATCH

151
MICA/HSTDIM.SRC Executable file
View File

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

614
MICA/HSTDTE.SRC Executable file
View File

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

252
MICA/MARQUEE.SRC Executable file
View File

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

436
MICA/OPENTRY.SRC Executable file
View File

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

22
MICA/PALETTE.SRC Executable file
View File

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

136
MICA/PLEXTRA.SRC Executable file
View File

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

232
MICA/PLXTSK.SRC Executable file
View File

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

31
MICA/SINIFINA.COM Executable file
View File

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

50
MICA/SINIMAIL.SRC Executable file
View File

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

1
MICA/SINISTAR.42 Executable file
View File

@ -0,0 +1 @@
falstein,sam,witt,mical

58
MICA/SNXTSK.SRC Executable file
View File

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

277
MICA/STATUS.SRC Executable file
View File

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

14
MICA/STBLBOMB.LIS Executable file
View File

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

78
MICA/SYMVER.COM Executable file
View File

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

111
MICA/TPATCH.SRC Executable file
View File

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

107
MICA/TPATCH2.SRC Executable file
View File

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

80
MICA/VSYMVER.COM Executable file
View File

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

28
MICA/WORK.SRC Executable file
View File

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

105
MICA/WRXTSK.SRC Executable file
View File

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

2
MICA/ZBOBEQU.SRC Executable file
View File

@ -0,0 +1,2 @@
ZBOBEQU

2
MICA/ZBOBOFF.SRC Executable file
View File

@ -0,0 +1,2 @@
ZBOBOFF

12
MICA/ZGAMOVER.SRC Executable file
View File

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

71
MICA/ZPLXQUE.SRC Executable file
View File

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

95
MICA/ZPNTSCRN.SRC Executable file
View File

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

30
MICA/ZSINIFIN.COM Executable file
View File

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

100
MICA/ZSNXQUE.SRC Executable file
View File

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

18
MICA/ZSTBLBOM.SRC Executable file
View File

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

81
MICA/ZWRXQUE.SRC Executable file
View File

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

105
MICA/ZZAMSINI.SRC Executable file
View File

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

378
MICA/ZZATTRAC.SRC Executable file
View File

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

32
READ.ME Executable file
View File

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

284
SAM/ADDPIEC.SRC Executable file
View File

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

217
SAM/ADDSCOR.SRC Executable file
View File

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

81
SAM/BARGRAPH.SRC Executable file
View File

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

109
SAM/BOUNCE.SRC Executable file
View File

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

7
SAM/CAPTURE.COM Executable file
View File

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

2
SAM/CAPTURE.TMP Executable file
View File

@ -0,0 +1,2 @@
SET DEFAULT [LIBRARY.SINISTAR.SAM]
$ @[LIBRARY.SINISTAR.SAM]TSYMVER [LIBRARY.SINISTAR.SAM]SAMS.LIS SAMS Y

32
SAM/COLLIDE.SRC Executable file
View File

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

69
SAM/DEFAULT.SRC Executable file
View File

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

31
SAM/DIAG.SRC Executable file
View File

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

106
SAM/DIAG.SYM Executable file
View File

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

37
SAM/DISPLAY.SRC Executable file
View File

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

367
SAM/DRAWOBJ.SRC Executable file
View File

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

12
SAM/E.COM Executable file
View File

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

130
SAM/EDTINI.EDT Executable file
View File

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

22
SAM/EQUATE.EDT Executable file
View File

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

6
SAM/EQUATE.TMP Executable file
View File

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

256
SAM/EQUATES.EQU Executable file
View File

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

28
SAM/EQUATES.SRC Executable file
View File

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

130
SAM/EXEC.SRC Executable file
View File

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