Block I Apollo Guidance Computer (AGC) : How To Build One in Your Basement
Block I Apollo Guidance Computer (AGC) : How To Build One in Your Basement
John Pultorak
December, 2004
Abstract
This report describes my successful project to build a working reproduction of the 1964
prototype for the Block I Apollo Guidance Computer. The AGC is the flight computer for the
Ap ollo m oon lan din gs, and is the wo rld’s first in tegra ted c ircuit com pu ter.
If you like, you can build one too. It will take you less time, and yours will be better than
mine.
Part 3 PROC M odule: Design and construction of the processing (CPU) modu le.
Part 4 MEM Module: Design and construction of the mem ory module.
Part 6 Assem bler: A cross-a ssem bler for AG C softw are dev elopm ent.
Part 7 C+ + S imu lator: A low-level simulator that runs assemb led AGC code.
Part 9 Test & Che ckou t: A suite of test programs in AG C assembly langu age.
Overview
I wan ted ge nuin e Block I flight softwa re for my AG C, bu t could n’t find an y. I eventu ally
woun d up recreating Block I software from Block II code listings that were available. Major
portions of Block II were originally coded as Block I anyway, so the conversion back was not
too difficult. A bou t 95% of the instru ctions w ere alread y Block I, so I just had to transla te
the rem aining 5 % into their Block I equivalen ts.
I dow nloa ded a partia l listing of th e CO LOS SU S 24 9 fligh t softwa re for the Blo ck II Apollo
Com man d Modu le AGC from a M.I.T website in late 2001. The listing (at that time)
com prised first half
of the flight
software load. The
second half was
missing.
I coded my own versions of the EXEC, WAITLIST, BANKC ALL, and other missing routines
used by PINBALL. The R-393 d ocumen t from M .I.T. provided some guidance.
Over a 6 month period, I was able to get all regular verbs and generic normal nouns
working. These are listed near the top of my assembler listing.
I add ed a dd ition al com m ents to portion s of cod e tak en from CO LOSS US . The pag e nu m bers
in my comments refer to pages in the COLOSSUS 249 assembler listing.
Original COLOSSUS 249 Assembler Code
For comparison purposes, here’s a page of the original AGC assem bly code, downloaded
from th e M.I.T. w ebsite. Th is is a tiny p ortion of th e PINB ALL co de. I m arked each line w ith
a yellow highlighter as I reentered it into a text file.
My COLOSSUS Assembler Code
Here’s the exact same portion of code, assembled for my Block I AGC. If you compare the
two listings, you’ll see that I defined some different assembler directives for allocating
storage (DS % instea d of OC T) an d tha t my code is sittin g in a different ba nk (5 vs. 40) a t a
different offset than the original Block II code.
Scenarios
Here’s how some AGC verbs and nouns are used to do commonplace operations. The
overview (part 1) and simulator (part 7) docum ents contain actual examples of some of
these operations in the simu lated and hardw are AGC s.
Load 3 component dataset at octal address 50 with octal values: 123, 456, 701:
<VERB> <2> <5> <NOUN> <0> <1> <ENTER>
Verb/no un disp lay flashes: wa iting for address.
<5> <0> <ENTER>
Verb/noun display flash continues: waiting for data.
<1> <2> <3> <ENTER>
<4> <5> <6> <ENTER>
<7> <0> <1> <ENTER>
Octal wo rd from R1 is loaded at add ress 50; Octal w ord from R2 is loaded at add ress
51, Octal word from R3 is loaded at address 52.
This is a dap ted from the A pollo 2 04 a cciden t report po sted on mu ltiple
web sites by Richard F. Drushel. The information has been changed as
necessary to be consistent with usage in COLOSSUS 249.
Verb | |
Code | Description | Remarks
| |
01 | Display octal comp 1 in R1 | Performs octal display of data on
| | REGISTER 1.
| |
02 | Display octal comp 2 in R2 | Performs octal display of data on
| | REGISTER 1.
| |
03 | Display octal comp 3 in R3 | Performs octal display of data on
| | REGISTER 1.
| |
04 | Display octal comp 1,2 | Performs octal display of data on
| in R1,R2 | REGISTER 1 and REGISTER 2
| |
05 | Display octal comp 1,2,3 | Performs octal display of data on
| in R1,R2,R3 | REGISTER 1, REGISTER 2, and REGISTER 3.
| |
06 | Display decimal in R1 or | Performs decimal display of data on
| R1,R2 or R1,R2,R3 | appropriate registers. The scale
| | factors, types of scale factor
| | routines, and component information
| | are stored within the machine for each
| | noun which it is required to display
| | in decimal.
| |
07 | Display DP decimal in R1,R2 | Performs a double precision decimal
| | display of data on REGISTER 1 and
| | REGISTER 2. It does no scale
| | factoring. It merely performs a 10-
| | character, fractional decimal
| | conversion of two consecutive, erasable
| | registers, using REGISTER 1 and
| | REGISTER 2. The sign is placed in the
| | REGISTER 1 sign position with the
| | REGISTER 2 sign position remaining
| | blank. It cannot be used with mixed
| | nouns. Its intended use is primarily
| | with "machine address to be specified"
| | nouns.
| |
08 | (Spare) |
| |
09 | (Spare) |
| |
10 | (Spare) |
| |
11 | Monitor octal comp 1 in R1 | Performs octal display of updated data
| | every 1/2 second on REGISTER 1.
| |
12 | Monitor octal comp 2 in R2 | Performs octal display of updated data
| | every 1/2 second on REGISTER 1.
| |
13 | Monitor octal comp 3 in R3 | Performs octal display of updated data
| | every 1/2 second on REGISTER 1.
| |
14 | Monitor octal comp 1,2 | Performs octal display of updated data
| in R1,R2 | every 1/2 second on REGISTER 1 and
| | REGISTER 2.
| |
15 | Monitor octal comp 1,2,3 | Performs octal display of updated data
| in R1,R2,R3 | every 1/2 second on REGISTER 1,
| | REGISTER 2, and REGISTER 3.
| |
16 | Monitor decimal in R1 or | Performs decimal display of updated
| R1,R2, or R1,R2,R3 | data every 1/2 second on appropriate
| | registers.
| |
17 | Monitor DP decimal in R1,R2 | Performs double precision display of
| | decimal data on REGISTER 1 and
| | REGISTER 2. No scale factoring is
| | performed. Provides 10-character,
| | fractional decimal conversion of two
| | consecutive erasable registers. The
| | sign is placed in the sign-bit
| | position of REGISTER 1. REGISTER 2
| | sign bit is blank.
| |
18 | (Spare) |
| |
19 | (Spare) |
| |
20 | (Spare) |
| |
21 | Load component 1 into R1 | Performs data loading. Octal
| | quantities are unsigned. Decimal
| | quantities are preceded by + or -
| | sign. Data is displayed on REGISTER
| | 1.
| |
22 | Load component 2 into R2 | Performs data loading. Octal
| | quantities are unsigned. Decimal
| | quantities are preceded by + or -
| | sign. Data is displayed on REGISTER
| | 2.
| |
23 | Load component 3 into R3 | Performs data loading. Octal
| | quantities are unsigned. Decimal
| | quantities are preceded by + or -
| | sign. Data is displayed on REGISTER
| | 3.
| |
24 | Load component 1,2 into | Performs data loading. Octal
| R1,R2 | quantities are unsigned. Decimal
| | quantities are preceded by + or -
| | sign. Data is displayed on REGISTER
| | 1 and REGISTER 2.
| |
25 | Load component 1,2,3 into | Performs data loading. Octal
| R1,R2,R3 | quantities are unsigned. Decimal
| | quantities are preceded by + or -
| | sign. Data is displayed on REGISTER
| | 1, REGISTER 2, and REGISTER 3.
| |
26 | (Spare) |
| |
27 | Display fixed memory | This verb is included to permit
| | displaying the contents of fixed
| | memory in any bank. Its intended use
| | is for checking program ropes and the
| | BANK positions of program ropes.
| |
28 | (Spare) |
| |
29 | (Spare) |
| |
30 | Request EXECUTIVE | Enters request to executive routine
| (Used only during ground | for any machine address with priority
| checkout.) | involved. This verb assumes that the
| | desired priority has been loaded into
| | bits 10-14 of the prio/delay register
| | (noun 26). This verb is used with the
| | noun, "machine address to be
| | specified". The complete address of
| | the desired location is then keyed in.
| | (Refer to "Machine address to be
| | specified" in paragraph on Verb/Noun
| | Formats.)
| |
31 | Request WAITLIST | Enters request to "waitlist routine"
| (Used only during ground | for any machine address with delay
| checkout.) | involved. This verb assumes that the
| | desired number of 10-millisecond units
| | of delay has been loaded into the low
| | order bits of the prio/delay register
| | (noun 26). This verb is used with the
| | "machine address to be specified" noun.
| | The complete address of the desired
| | location is then keyed in. (Refer to
| | "Machine address to be specified" in
| | paragraph on Verb/Noun Formats.)
| |
32 | Recycle |
| |
33 | Proceed (without data) | Informs routine requesting data that
| | the operator chooses not to load
| | fresh data, but wishes the routine to
| | continue as best it can with old data.
| | Final decision for what action should
| | be taken is left to the requesting
| | routine.
| |
34 | Terminate | Informs routine requesting data to be
| | loaded that the operator chooses not
| | to load fresh data and wishes the
| | routine to terminate. Final decision
| | for what action should be taken is
| | left to the requesting routine. If
| | monitor is on, it is turned off.
| |
35 | Test lights |
| |
36 | Request fresh start | Initializes the program control
| | software and the keyboard and display
| | system program.
| |
37 | Change program (major mode) | Change to new major mode. (Refer to
| | "Change major mode" in paragraph on
| | Verb/Noun Formats.)
| |
;--------------------------------------------------------------------------
Not im plem ented. U se of th ese v erbs trigg ers th e 'check fail ' indic ator.
This is a dap ted from the A pollo 2 04 a cciden t report po sted on mu ltiple
web sites by Richard F. Drushel. The information has been changed as
necessary to be consistent with usage in COLOSSUS 249.
Noun | |
Code | Description | Scale/Units
| |
01 | Specify machine address (frac) | .XXXXX FRAC
| | .XXXXX FRAC
| | .XXXXX FRAC
| |
02 | Specify machine address (whole) | XXXXX INTEGER
| | XXXXX INTEGER
| | XXXXX INTEGER
| |
03 | Specify machine address (degree) | XXX.XX DEG
| | XXX.XX DEG
| | XXX.XX DEG
| |
04 | (Spare) |
| |
05 | (Spare) |
| |
06 | (Spare) |
| |
07 | (Spare) |
| |
08 | (Spare) |
| |
09 | Alarm codes | OCT
| | OCT
| | OCT
| |
10 | (Spare) |
| |
11 | (Spare) |
| |
12 | (Spare) |
| |
13 | (Spare) |
| |
14 | (Spare) |
| |
15 | Increment address | OCT
| |
| |
16 | (Spare) |
| |
17 | (Spare) |
| |
18 | (Spare) |
| |
19 | (Spare) |
| |
20 | (Spare) |
| |
21 | (Spare) |
| |
22 | (Spare) |
| |
23 | (Spare) |
| |
24 | (Spare) |
| |
25 | (Spare) |
| |
26 | Prio/delay, address | OCT (prio/delay)
| | OCT (14-bit CADR)
| | (not used)
| |
27 | (Spare) |
| |
28 | (Spare) |
| |
29 | (Spare) |
| |
30 | (Spare) |
| |
31 | (Spare) |
| |
32 | (Spare) |
| |
33 | (Spare) |
| |
34 | (Spare) |
| |
35 | (Spare) |
| |
36 | Time of CMC clock: |
| REGISTER 1 | 00XXX. hours
| REGISTER 2 | 000XX. minutes
| REGISTER 3 | 0XX.XX seconds
| |
37 | (Spare) |
| |
38 | (Spare) |
| |
39 | (Spare) |
| |
;--------------------------------------------------------------------------
Not implemented.
Flight software assembler listing
B l o c k I A p o l l o Guidance Computer (AGC4) asse mbler version 1.6 for EPROM
;================= =========================================================
; AGC (file:agc.as m)
;
; Version: 1.0
; Author: John P ultorak
; Date: 6/7/20 02
;
; PURPOSE:
; AGC Block I demo nstration. Includes most of the AGC operating system:
; WAITLIST, EXEC, PINBALL (DSKY routines), NOUN tables, VERB tables,
; bank intercommun ication routines, the KEY, T3, and T4 interrupt handlers,
; and some dual pr ecision (DP) math routines.
;
; The interpreter is not currently implemented.
;
; Where available, the source is from the Apollo 8 command module computer (CMC )
; load (called COL OSSUS). In cases where COLOSSUS source is not available,
; functionally equ ivalent code was constructed using COLOSSUS calling and retur n
; parameters and a ccording to specifications in the technical reports given bel o w .
;
; OPERATION:
; TBD.
;
; ERRATA:
; - Adapted for th e AGC4R assembler. The assembler directives and syntax
; differ somewhat from the original AGC assembler.
; - some of the or iginal source was missing from the COLOSSUS listing and
; had to be revers e engineered. Those portions probably differ somewhat
; from the origina l code in implementation, but should be functionally
; identical.
; - because the CO LOSSUS source is for a block II AGC, but the AGC
; implemented here is block I, about 5% of COLOSSUS had to be translated
; to equivalent bl ock I code.
;
; SOURCES:
; Information on t he Block I architecture: instruction set, instruction
; sequences, regis ters, register transfers, control pulses, memory and
; memory addressin g, I/O assignments, interrupts, and involuntary counters
; was obtained fro m:
;
; A. Hopkins, R. Alonso, and H. Blair-Smith, "Logical Description
; for the Apollo Guidance Computer (AGC4)", R-393,
; MIT Instrumentation Laboratory, Cambridge, MA, Mar. 1963.
;
; Supplementary AG C hardware information was obtained from:
;
; R. Alonso, J. H. Laning, Jr. and H. Blair-Smith, "Preliminary
; MOD 3C Programmer's Manual", E-1077, MIT Instrumentation
; Laboratory, Cambridge, MA, Nov. 1961.
;
; B. I. Savage and A. Drake, "AGC4 Basic Training Manual, Volume I",
; E-2052, MIT Instrumentation Laboratory, Cambridge,
; MA, Jan. 1967.
;
; E. C. Hall, "MIT's Role in Project Apollo, Volume III, Computer
; Subsystem", R-700, MIT Charles Stark Draper Laboratory,
; Cambridge, MA, Aug. 1972.
;
; A. Hopkins, "Guidance Computer Design, Part VI", source unknown.
;
; E, C. Hall, "Journey to the Moon: The History of the Apollo
; Guidance Computer", AIAA, Reston VA, 1996.
;
; AGC software inf ormation was obtained from:
;
; AGC Block II COLOSSUS rev 249 assembly listing, Oct 28, 1968. (A
; listing of the 1st 50% of the build. It encludes the entire
; eraseable memory, restart initialization, T4RUPT, and the
; entire set of DSKY routines. About 5% of instructions
; had to be converted from Block II to Block I).
;
; A. I. Green and J. J. Rocchio, "Keyboard and Display System Program
; for AGC (Program Sunrise)", E-1574, MIT Instrumentation
; Laboratory, Cambridge, MA, Aug. 1964. Contains detailed
; flowcharts and design materials for the DSKY software.
;
; A. Hopkins, R. Alonso, and H. Blair-Smith, "Logical Description
; for the Apollo Guidance Computer (AGC4)", R-393,
; MIT Instrumentation Laboratory, Cambridge, MA, Mar. 1963.
; Contains the software interfaces for EXEC and WAITLIST, and
; portions of the dual precision (DP) math library.
;
;================= =========================================================
INC L doc.asm
;================= =========================================================
; AGC documentatio n (file:doc.asm)
;
; Version: 1.0
; Author: John P ultorak
; Date: 06/01/ 2002
;
; PURPOSE:
; Documents AGC op s source code.
;================= =========================================================
;----------------- ---------------------------------------------------------
; DSKY OPERATION ( examples)
;
; verb/noun (V/N) flash: When the verb and noun indicators flash
; at 1Hz, the DSKY is waiting for keyboard input.
;
;
; Display elapsed time from the AGC clock:
; <VERB> <0> <6> <NOUN> <3> <6> <ENTER>
;
; Test display lig hts
; a) <VERB> <3> <5> <ENTER>
; b) all DSKY lamps and display segments illuminate for 5 sec.
; c) after 5 sec, the DSKY lamps extinguish
;
; Load component 1 for dataset at octal address 50 with octal 123
; a) <VERB> <2> <1> <NOUN> <0> <1> <ENTER>
; b) verb/noun display flashes; waiting for address
; c) <5> <0> <ENTER>
; d) verb/noun display flash continues; waiting for data
; e) <1> <2> <3> <ENTER>
; f) octal word from R1 is loaded at address 50,
;
; Display componen t 1 of dataset at octal address 50:
; a) <VERB> <0> <1> <NOUN> <0> <1> <ENTER>
; b) verb/noun display flashes; waiting for address
; c) <5> <0> <ENTER>
; d) octal word from address 50 is displayed in R1
;
; Load 3 component dataset at octal address 50 with octal values
; 123,456,701
; a) <VERB> <2> <5> <NOUN> <0> <1> <ENTER>
; b) verb/noun display flashes; waiting for address
; c) <5> <0> <ENTER>
; d) verb/noun display flash continues; waiting for data
; e) <1> <2> <3> <ENTER>
; f) <4> <5> <6> <ENTER>
; g) <7> <0> <1> <ENTER>
; h) octal word from R1 is loaded at address 50,
; octal word from R2 is loaded at address 51,
; octal word from R3 is loaded at address 52
;
; Display 3 compon ent dataset beginning at address 50:
; a) <VERB> <0> <5> <NOUN> <0> <1> <ENTER>
; b) verb/noun display flashes; waiting for address
; c) <5> <0> <ENTER>
; d) octal word from address 50 is displayed in R1,
; octal word from address 51 is displayed in R2,
; octal word from address 52 is displayed in R3
;
;----------------- ---------------------------------------------------------
;----------------- ---------------------------------------------------------
; COLOSSUS REGULAR VERBS (00-39 decimal)
;
; This is adapted from the Apollo 204 accident report posted on multiple
; web sites by Ric hard F. Drushel. The information has been changed as
; necessary to be consistent with usage in COLOSSUS.
;
;
; Verb | |
; Code | Description | Remarks
; | |
; 01 | Display octal comp 1 in R1 | Performs octal display of data on
; | | REGISTER 1.
; | |
; 02 | Display octal comp 2 in R2 | Performs octal display of data on
; | | REGISTER 1.
; | |
; 03 | Display octal comp 3 in R3 | Performs octal display of data on
; | | REGISTER 1.
; | |
; 04 | Display octal comp 1,2 | Performs octal display of data on
; | in R1,R2 | REGISTER 1 and REGISTER 2
; | |
; 05 | Display octal comp 1,2,3 | Performs octal display of data on
; | in R1,R2 ,R3 | REGISTER 1, REGISTER 2, and REGISTER 3 .
; | |
; 06 | Display decimal in R1 or | Performs decimal display of data on
; | R1,R2 or R1,R2,R3 | appropriate registers. The scale
; | | factors, types of scale factor
; | | routines, and component information
; | | are stored within the machine for eac h
; | | noun which it is required to display
; | | in decimal.
; | |
; 07 | Display DP decimal in R1,R2 | Performs a double precision decimal
; | | display of data on REGISTER 1 and
; | | REGISTER 2. It does no scale
; | | factoring. It merely performs a 10-
; | | character, fractional decimal
; | | conversion of two consecutive, erasab l e
; | | registers, using REGISTER 1 and
; | | REGISTER 2. The sign is placed in th e
; | | REGISTER 1 sign position with the
; | | REGISTER 2 sign position remaining
; | | blank. It cannot be used with mixed
; | | nouns. Its intended use is primarily
; | | with "machine address to be specified "
; | | nouns.
; | |
; 08 | (Spare) |
; | |
; 09 | (Spare) |
; | |
; 10 | (Spare) |
; | |
; 11 | Monitor octal comp 1 in R1 | Performs octal display of updated dat a
; | | every 1/2 second on REGISTER 1.
; | |
; 12 | Monitor octal comp 2 in R2 | Performs octal display of updated dat a
; | | every 1/2 second on REGISTER 1.
; | |
; 13 | Monitor octal comp 3 in R3 | Performs octal display of updated dat a
; | | every 1/2 second on REGISTER 1.
; | |
; 14 | Monitor octal comp 1,2 | Performs octal display of updated dat a
; | in R1,R2 | every 1/2 second on REGISTER 1 and
; | | REGISTER 2.
; | |
; 15 | Monitor octal comp 1,2,3 | Performs octal display of updated dat a
; | in R1,R2 ,R3 | every 1/2 second on REGISTER 1,
; | | REGISTER 2, and REGISTER 3.
; | |
; 16 | Monitor decimal in R1 or | Performs decimal display of updated
; | R1,R2, o r R1,R2,R3 | data every 1/2 second on appropriate
; | | registers.
; | |
; 17 | Monitor DP decimal in R1,R2 | Performs double precision display of
; | | decimal data on REGISTER 1 and
; | | REGISTER 2. No scale factoring is
; | | performed. Provides 10-character,
; | | fractional decimal conversion of two
; | | consecutive erasable registers. The
; | | sign is placed in the sign-bit
; | | position of REGISTER 1. REGISTER 2
; | | sign bit is blank.
; | |
; 18 | (Spare) |
; | |
; 19 | (Spare) |
; | |
; 20 | (Spare) |
; | |
; 21 | Load com ponent 1 into R1 | Performs data loading. Octal
; | | quantities are unsigned. Decimal
; | | quantities are preceded by + or -
; | | sign. Data is displayed on REGISTER
; | | 1.
; | |
; 22 | Load com ponent 2 into R2 | Performs data loading. Octal
; | | quantities are unsigned. Decimal
; | | quantities are preceded by + or -
; | | sign. Data is displayed on REGISTER
; | | 2.
; | |
; 23 | Load com ponent 3 into R3 | Performs data loading. Octal
; | | quantities are unsigned. Decimal
; | | quantities are preceded by + or -
; | | sign. Data is displayed on REGISTER
; | | 3.
; | |
; 24 | Load com ponent 1,2 into | Performs data loading. Octal
; | R1,R2 | quantities are unsigned. Decimal
; | | quantities are preceded by + or -
; | | sign. Data is displayed on REGISTER
; | | 1 and REGISTER 2.
; | |
; 25 | Load com ponent 1,2,3 into | Performs data loading. Octal
; | R1,R2,R3 | quantities are unsigned. Decimal
; | | quantities are preceded by + or -
; | | sign. Data is displayed on REGISTER
; | | 1, REGISTER 2, and REGISTER 3.
; | |
; 26 | (Spare) |
; | |
; 27 | Display fixed memory | This verb is included to permit
; | | displaying the contents of fixed
; | | memory in any bank. Its intended use
; | | is for checking program ropes and the
; | | BANK positions of program ropes.
; | |
; 28 | (Spare) |
; | |
; 29 | (Spare) |
; | |
; 30 | Request EXECUTIVE | Enters request to executive routine
; | (Used on ly during ground | for any machine address with priority
; | checkout .) | involved. This verb assumes that the
; | | desired priority has been loaded into
; | | bits 10-14 of the prio/delay register
; | | (noun 26). This verb is used with th e
; | | noun, "machine address to be
; | | specified". The complete address of
; | | the desired location is then keyed in .
; | | (Refer to "Machine address to be
; | | specified" in paragraph on Verb/Noun
; | | Formats.)
; | |
; 31 | Request WAITLIST | Enters request to "waitlist routine"
; | (Used on ly during ground | for any machine address with delay
; | checkout .) | involved. This verb assumes that the
; | | desired number of 10-millisecond unit s
; | | of delay has been loaded into the low
; | | order bits of the prio/delay register
; | | (noun 26). This verb is used with th e
; | | "machine address to be specified" nou n .
; | | The complete address of the desired
; | | location is then keyed in. (Refer to
; | | "Machine address to be specified" in
; | | paragraph on Verb/Noun Formats.)
; | |
; 32 | Recycle |
; | |
; 33 | Proceed (without data) | Informs routine requesting data that
; | | the operator chooses not to load
; | | fresh data, but wishes the routine to
; | | continue as best it can with old data .
; | | Final decision for what action should
; | | be taken is left to the requesting
; | | routine.
; | |
; 34 | Terminat e | Informs routine requesting data to be
; | | loaded that the operator chooses not
; | | to load fresh data and wishes the
; | | routine to terminate. Final decision
; | | for what action should be taken is
; | | left to the requesting routine. If
; | | monitor is on, it is turned off.
; | |
; 35 | Test lig hts |
; | |
; 36 | Request fresh start | Initializes the program control
; | | software and the keyboard and display
; | | system program.
; | |
; 37 | Change p rogram (major mode) | Change to new major mode. (Refer to
; | | "Change major mode" in paragraph on
; | | Verb/Noun Formats.)
; | |
;----------------- ---------------------------------------------------------
;----------------- ---------------------------------------------------------
; COLOSSUS EXTENDE D VERBS (40-99 decimal)
;
; Not implemented. Use of these verbs triggers the 'check fail' indicator.
;----------------- ---------------------------------------------------------
;----------------- ---------------------------------------------------------
; COLOSSUS NORMAL NOUNS (00-39 decimal)
;
; This is adapted from the Apollo 204 accident report posted on multiple
; web sites by Ric hard F. Drushel. The information has been changed as
; necessary to be consistent with usage in COLOSSUS.
;
;
; Noun | |
; Code | Description | Scale/Units
; | |
; 01 | Specify machine address (frac) | .XXXXX FRAC
; | | .XXXXX FRAC
; | | .XXXXX FRAC
; | |
; 02 | Specify machine address (whole) | XXXXX INTEGER
; | | XXXXX INTEGER
; | | XXXXX INTEGER
; | |
; 03 | Specify machine address (degree) | XXX.XX DEG
; | | XXX.XX DEG
; | | XXX.XX DEG
; | |
; 04 | (Spare) |
; | |
; 05 | (Spare) |
; | |
; 06 | (Spare) |
; | |
; 07 | (Spare) |
; | |
; 08 | (Spare) |
; | |
; 09 | Alarm co des | OCT
; | | OCT
; | | OCT
; | |
; 10 | (Spare) |
; | |
; 11 | (Spare) |
; | |
; 12 | (Spare) |
; | |
; 13 | (Spare) |
; | |
; 14 | (Spare) |
; | |
; 15 | Incremen t address | OCT
; | |
; | |
; 16 | (Spare) |
; | |
; 17 | (Spare) |
; | |
; 18 | (Spare) |
; | |
; 19 | (Spare) |
; | |
; 20 | (Spare) |
; | |
; 21 | (Spare) |
; | |
; 22 | (Spare) |
; | |
; 23 | (Spare) |
; | |
; 24 | (Spare) |
; | |
; 25 | (Spare) |
; | |
; 26 | Prio/del ay, address | OCT (prio/delay)
; | | OCT (14-bit CADR)
; | | (not used)
; | |
; 27 | (Spare) |
; | |
; 28 | (Spare) |
; | |
; 29 | (Spare) |
; | |
; 30 | (Spare) |
; | |
; 31 | (Spare) |
; | |
; 32 | (Spare) |
; | |
; 33 | (Spare) |
; | |
; 34 | (Spare) |
; | |
; 35 | (Spare) |
; | |
; 36 | Time of CMC clock: |
; | REGIST ER 1 | 00XXX. hours
; | REGIST ER 2 | 000XX. minutes
; | REGIST ER 3 | 0XX.XX seconds
; | |
; 37 | (Spare) |
; | |
; 38 | (Spare) |
; | |
; 39 | (Spare) |
; | |
;----------------- ---------------------------------------------------------
;----------------- ---------------------------------------------------------
; COLOSSUS MIXED N OUNS (40-99 decimal)
;
; Not implemented.
;----------------- ---------------------------------------------------------
;----------------- ---------------------------------------------------------
; AGC ADDRESS ASSI GNMENTS
;
; Central Register s
;
; 000000 A accumulator
; 000001 Q subroutine return address
; 000002 Z program counter
; 000003 LP lower product register
;
; Input Registers
;
; 000004 IN0
; 000005 IN1
; 000006 IN2
; 000007 IN3
;
; Output Registers
;
; 000010 OUT0
; 000011 OUT1
; 000012 OUT2
; 000013 OUT3
; 000014 OUT4
;
; Memory Bank Sele ct
;
; 000015 BANK
;
; Interrupt Contro l
;
; 000016 RELINT re-enable interrupts
; 000017 INHINT inhibit interrupts
;
; Editing Register s
;
; 000020 CYR cycle right
; 000021 SR shift rRight
; 000022 CYL cycle left
; 000023 SL shift left
;
; Interrupt Storag e Area
;
; 000024 ZRUPT save program counter (Z)
; 000025 BRUPT save B register
; 000026 ARUPT save accumulator (A)
; 000027 QRUPT save Q register
;
; 000030 - 000033 NOT USED
;
; Involuntary Coun ters
;
; 000034 OVCTR arithmetic overflow counter
; 000035 TIME2 AGC clock (high)
; 000036 TIME1 AGC clock (low)
; 000037 TIME3 WAITLIST (T3) timer
; 000040 TIME4 DISPLAY (T4) timer
;
; Involuntary Coun ters -- currently unused
;
; 000041 - 000056 NOT USED
;
; Eraseable Memory
;
; 000057 - 001777
;
; Start of fixed m emory
;
; 002000 GOPROG AGC (re)start vector
;
; 002004 T3RUPT interrupt vector for TIME3 (T3RUPT)
; 020010 ERRUPT interrupt vector
; 020014 DSRUPT interrupt vector for DSRUPT (T4RUPT)
; 020020 KEYRUPT interrupt vector for keyboard
; 020024 UPRUPT interrupt vector for uplink
;----------------- ---------------------------------------------------------
;----------------- ---------------------------------------------------------
; AGC TABLES (name , file, description)
;
; Keyboard/display
; CHARIN2 bank40_1.asm keyboard character table
; INRELTAB bank40_1.asm DSKY register/display table map
; DSPTAB dsky_e.asm display table for DSKY
;
; Verbs:
; VERBTAB bank41_1.asm regular verb routines (00-39)
;
; Nouns:
; NNADTAB bank42_3.asm noun address table (00-99)
; NNTYPTAB bank42_3.asm noun type table (00-99)
; SFINTAB bank42_3.asm noun input scale factor select
; SFOUTAB bank42_3.asm nout output scale factor select
; IDADDTAB bank42_3.asm mixed noun address table (40-99)
; RUTMXTAB bank42_3.asm mixed noun scale factor routine (40-9 9 )
;
; Noun scale facto r routines:
; SFOUTABR bank41_1.asm scale factor output routines
; SFINTABR bank41_2.asm scale factor input routines
;
; Major Modes:
; FCADRMM bank04_1.asm entry points for MM jobs
; EPREMM1 bank04_1,asm priorities for MM jobs
;----------------- ---------------------------------------------------------
; (COLOSSUS, p. 70 )
; dynamically allo cated core sets for EXEC jobs (8 sets)
EX_currentJob EQU *
00137 0137 00000 1 MODE DS 0 ; +1 for TP, +0 for DP, or -1 for vector
00140 0140 00000 1 LOC DS 0 ; location associated with job
00141 0141 00000 1 BANKSET DS 0 ; usually contains bank setting
00142 0142 00000 1 PUSHLOC DS 0 ; word of packed interpretive parameters
00143 0143 00000 1 PRIORITY DS 0 ; priority of present job and work area
00144 0144 00000 1 JOBPRIOBASE DS 0 ; nominal job priority
JREC0 EQU *
ORG JREC0+JRECSZ
JREC1 EQU *
ORG JREC1+JRECSZ
JREC2 EQU *
ORG JREC2+JRECSZ
JREC3 EQU *
ORG JREC3+JRECSZ
JREC4 EQU *
ORG JREC4+JRECSZ
JREC5 EQU *
ORG JREC5+JRECSZ
JREC6 EQU *
ORG JREC6+JRECSZ
EX_jobList EQU *
ORG EX_jobList+MAXJOBS
; The registers be tween ADDRWD and PRIORITY must stay in the following order
; for interpretive trace.
; (COLOSSUS, p. 68 )
; (COLOSSUS, p. 69 )
00443 0443 00000 1 NNADTEM DS 0 ; temp for noun address table entry
00444 0444 00000 1 NNTYPTEM DS 0 ; temp for noun type table entry
00445 0445 00000 1 IDAD1TEM DS 0 ; temp for indir address table entry (MI X N N )
; must - IDAD2TEM- 1, = IDAD3TEM-2
00446 0446 00000 1 IDAD2TEM DS 0 ; temp for indir address table entry (MI X N N )
; must - IDAD2TEM+ 1, = IDAD3TEM-1
00447 0447 00000 1 IDAD3TEM DS 0 ; temp for indir address table entry (MI X N N )
; must - IDAD1TEM+ 2, = IDAD2TEM+1
00450 0450 00000 1 RUTMXTEM DS 0 ; temp for SF rout table entry (MIXNN on l y )
; AX*SR*T storage
; (COLOSSUS, p. 72 )
; unswitched for d isplay interface routines
; (COLOSSUS, p. 73 )
; verb 37 storage
00463 0463 00000 1 MINDEX DS 0 ; B(1) tmp index for major mode
00464 0464 00000 1 MMNUMBER DS 0 ; B(1) tmp major mode requested via V37
; The 11 register table for the display panel (COLOSSUS, p.74, p.306)
; comment key = RELADD: RELAYWD BIT11 BITS10-6 BITS5-1
DSPTAB EQU *
00512 0512 00000 1 DS 0 ; 0: 0001 -R3 R3D4( 1) R3D5( 0)
00513 0513 00000 1 DS 0 ; 1: 0010 +R3 R3D2( 3) R3D3( 2)
00514 0514 00000 1 DS 0 ; 2: 0011 --- R2D5( 5) R3D1( 4)
00515 0515 00000 1 DS 0 ; 3: 0100 -R2 R2D3( 7) R2D4( 6)
00516 0516 00000 1 DS 0 ; 4: 0101 +R2 R2D1(11) R2D2(10)
00517 0517 00000 1 DS 0 ; 5: 0110 -R1 R1D4(13) R1D5(12)
00520 0520 00000 1 DS 0 ; 6: 0111 +R1 R1D2(15) R1D3(14)
00521 0521 00000 1 DS 0 ; 7: 1000 --- -------- R1D1(16)
00522 0522 00000 1 DS 0 ; 8: 1001 --- ND1 (21) ND2 (20)
00523 0523 00000 1 DS 0 ; 9: 1010 --- VD1 (23) VD2 (22)
00524 0524 00000 1 DS 0 ; 10:1011 --- MD1 (25) MD1 (24)
00525 0525 00000 1 DS 0 ; 11: C/S lights
00534 0534 00000 1 DSPTEM1 DS 0 ; buffer storage area 1 (mostly for time )
00535 0535 00000 1 DS 0
00536 0536 00000 1 DS 0
00537 0537 00000 1 DSPTEM2 DS 0 ; buffer storage area 2 (mostly for deg)
00540 0540 00000 1 DS 0
00541 0541 00000 1 DS 0
; T4RUPT Erasable
; KEYRUPT Eraseabl e
ORG EXTENDER
05777 5777 47777 0 DS %47777 ; needed for EXTEND
;----------------- ---------------------------------------------------------
; RESTART/INTERRUP T ENTRY POINTS
;----------------- ---------------------------------------------------------
; Program (re)star t
ORG GOPROG
02000 2000 0 1,2126 0 TC goMAIN ; AGC (re)start begins here!
; Interrupt vector s
ORG T3RUPT
02004 2004 5 0,0026 0 TS ARUPT ; TIME3 interrupt vector
02005 2005 3 0,0001 0 XCH Q
02006 2006 5 0,0027 1 TS QRUPT
02007 2007 0 1,2034 1 TC goT3
ORG ERRUPT
02010 2010 5 0,0026 0 TS ARUPT
02011 2011 3 0,0001 0 XCH Q
02012 2012 5 0,0027 1 TS QRUPT
02013 2013 0 1,2036 0 TC goER
ORG UPRUPT
02024 2024 5 0,0026 0 TS ARUPT
02025 2025 3 0,0001 0 XCH Q
02026 2026 5 0,0027 1 TS QRUPT
02027 2027 0 1,2043 1 TC goUP
; restore Q and A registers and resume
endRUPT EQU *
02030 2030 3 0,0027 1 XCH QRUPT ; restore Q
02031 2031 5 0,0001 0 TS Q
02032 2032 3 0,0026 0 XCH ARUPT ; restore A
02033 2033 2 0,0000 1 RES UME ; resume normal program execution
;----------------- ---------------------------------------------------------
; RUPT (INTERRUPT) SERVICE ROUTINES
;
; Upon entry, regi sters will contain these values:
; - ZRUPT: Prior c ontents of program counter (Z register).
; - BRUPT: Prior c ontents of B register.
; - ARUPT: Prior c ontents of accumulator (A register).
; - QRUPT: Prior c ontents of Q register.
;
; When the service routine is finished, jump to endRUPT to restore the A
; and Q registers. Call RESUME to restore Z and B, which causes a return
; to normal (non-i nterrupt) execution. Interrupts are disabled upon entry
; to the service r outine; they are reenabled following RESUME.
;----------------- ---------------------------------------------------------
goT3 EQU *
02034 2034 0 1,2347 0 TCR WL_TIME3task ; handle T3RUPT for WAITLIST
02035 2035 0 1,2030 0 TC endRUPT
goER EQU *
02036 2036 0 1,2030 0 TC endRUPT
goDS EQU *
02037 2037 0 2,4047 0 TCR T4PROG ; handle T4RUPT for DSKY display
02040 2040 0 1,2030 0 TC endRUPT
goKEY EQU *
02041 2041 0 2,4132 0 TCR KEYPROG ; handle keyrupt for keyboard entry
02042 2042 0 1,2030 0 TC endRUPT
goUP EQU *
02043 2043 0 1,2030 0 TC endRUPT
;----------------- ---------------------------------------------------------
; FIXED MEMORY CON STANTS
;----------------- ---------------------------------------------------------
02102 2102 06000 1 bankAddr DS %6000 ; fixed-switchable addr range starts her e
02103 2103 01777 1 lowAddr DS %1777 ; mask for 10-bit address
02104 2104 01400 1 OCT1400 DS %1400
02105 2105 00013 0 NOUTCON DS 11
;----------------- --------------------------------------------------------
; CLRMEM - INITIAL IZE ERASEABLE MEMORY
;
; Uses QRUPT and A RUPT as scratchpad. This is OK, because interrupts
; are disabled any way. All eraseable memory above the AGC clock (TIME1,
; TIME2) is cleare d. The AGC clock is not cleared because this might
; be a restart or a startup from standby mode.
;----------------- --------------------------------------------------------
CLRMEM EQU *
02107 2107 3 0,0001 0 XCH Q
02110 2110 5 0,0027 1 TS QRUPT ; save return address
CLRMEM_CHK EQU *
02113 2113 1 0,0026 1 CCS ARUPT
02114 2114 0 1,2116 0 TC CLRMEM_WORD
02115 2115 0 0,0027 1 TC QRUPT ; return
CLRMEM_WORD EQU *
02116 2116 5 0,0026 0 TS ARUPT
02117 2117 3 1,2050 0 CAF CLRMEM_VAL
02120 2120 2 0,0026 1 IND EX ARUPT
02121 2121 5 0,0037 0 TS CLRMEM_BADDR ; clear a word
02122 2122 0 1,2113 0 TC CLRMEM_CHK ; done?
;----------------- --------------------------------------------------------
; FRESH START
;
; AGC starts execu ting here, following power-up, or restart.
;----------------- --------------------------------------------------------
02124 2124 10000 0 V37BANK DS %10000 ; BANK (4) containg PREMM1, FCADRMM1
02125 2125 37600 0 SAMASK DS %37600 ; mask to zero lower 7 bits
goMAIN EQU *
SLAP1 EQU goMAIN ; entry for V36 (fresh start request)
02127 2127 3 1,2071 0 CAF BIT8 ; add 2 to 7th power to AGC clock
02130 2130 6 0,0036 1 AD TIME1
02131 2131 5 0,0036 1 TS TIME1
02132 2132 3 1,2050 0 CAF ZERO ; skipped on ovf and C(A) set to 1
02133 2133 6 0,0035 1 AD TIME2 ; bump TIME2 with overflow, if any
02134 2134 5 0,0035 1 TS TIME2
02142 2142 0 1,2107 0 TC CLRMEM ; clear everything but the AGC clock
goMMchange EQU *
02147 2147 2 0,0000 0 INH INT ; inhibit interrupts
; Initialize WAITL IST and EXEC eraseable memory. Initialize DSKY eraseable
; memory (but don' t initialize BANK or MINDEX; they are used to start the
; main job for thi s major mode.
; Start the major mode job. This is modified from COLOSSUS because block I
; doesn't have E-b ank and my SPVAC interface is a little different from the
; original. The re ferences to PREMM1 and FCADRMM1 assume that the BANK is
; set to the one c ontaining those tables.
V37XEQ EQU *
02153 2153 2 0,0000 0 INH INT
02154 2154 2 0,0463 1 IND EX MINDEX
02155 2155 3 4,6037 0 CAF PREMM1
02156 2156 5 0,0542 1 TS MMTEMP
02165 2165 0 1,3075 0 TC SPVAC ; job CADR in C(A), job prio in NEWPRIO
V37XEQC EQU *
02166 2166 3 1,2050 0 CAF ZERO ; was CA MMTEMP in Block II
02167 2167 6 0,0542 1 AD MMTEMP ; upon return from FINDVAC, place the
02170 2170 7 1,2101 1 MAS K LOW7 ; new MM in MODREG (the low 7 bits of
02171 2171 0 2,5036 1 TC NEWMODEA ; PHSERDT1)
;----------------- --------------------------------------------------------
; AGC LIBRARIES
;
; System services in fixed-fixed memory.
;----------------- --------------------------------------------------------
;----------------- ---------------------------------------------------------
; WL_initWL - INIT IALIZE WAITLIST
;
; Subroutine initi alizes the eraseable memory segment for WAITLIST.
; Necessary in cas e the AGC is restarted.
;
; Note: the valid range for TIME3 is 10440 to 37777 (which spans
; 12000 (base 10 ) ticks, which corresponds to 120 seconds)
; positive overf low occurs at 40000, which triggers T3RUPT.
; TIME3 values o f 0 to 10437 are illegal; these values occur
; after timeout when the counter overflows. TIME3 values in this
; range indicate that timeout has occurred and that T3RUPT is
; presently occu ring, or is pending.
;----------------- ---------------------------------------------------------
WL_initWL EQU *
02204 2204 3 0,0001 0 XCH Q
02205 2205 5 0,0075 0 TS WL_IN_saveQ ; save return address
02222 2222 3 0,0076 0 XCH WL_IN_taskPtr ; bump task pointer back 1 record
02223 2223 6 1,2174 1 AD WL_taskRecSize
02224 2224 5 0,0076 0 TS WL_IN_taskPtr
;----------------- ---------------------------------------------------------
; WAITLIST - ADD T ASK TO WAITLIST
;
; Subroutine adds a task to WL_taskList. The following conditions are
; true upon entry.
; 1) The task list is sorted so the next task scheduled for execution
; is at the fro nt of the list.
; 2) If no tasks a re currently scheduled, the task record at the front
; of the list w ill be NIL.
; 3) Unused (NIL) records in the task list have their time fields set to
; MAXDELAY and their address fields set to zero.
; 4) If any tasks are on the waitlist, the time field in that task's
; record will c ontain the remaining time AFTER the next timeout. The
; task schedule d for execution at timeout will have a time remaining
; of zero.
; Any other tas ks that will execute at that time will also have a time of
; zero. Tasks t hat will execute some time in the future AFTER timeout
; will have non zero times; these times indicate the additional time
; needed after the next timeout.
;
; This is the only 'public' function. It can be called from a job or from
; a task or other interrupt. It disables interrupts to maintain the integrity
; of the taskList.
;----------------- ---------------------------------------------------------
WAITLIST EQU *
02232 2232 5 0,0102 1 TS WL_AT_newTime ; save task time
02233 2233 3 0,0001 0 XCH Q
02234 2234 5 0,0100 0 TS WL_AT_saveQ ; save return address-1
02262 2262 0 1,2473 0 TCR WL_insert ; add new task to task list
02263 2263 0 1,2343 1 TC WL_AT_done
; TIME3 has not ti med out yet. Calculate time remaining until timeout
; (timeout occurs when TIME3 overflows)
WL_AT_noOvf EQU *
02264 2264 4 0,0103 1 CS WL_AT_timeLeft ; get -TIME3
02265 2265 6 1,2201 0 AD WL_maxVal
02266 2266 6 1,2051 1 AD ONE
02267 2267 5 0,0103 0 TS WL_AT_timeLeft ; time left = -TIME3 + %37777 + 1
; Compare that tim e against the timeout for the new task.
WL_AT_chkOrder EQU *
02270 2270 4 0,0102 0 CS WL_AT_newTime
02271 2271 6 0,0103 0 AD WL_AT_timeLeft
02272 2272 1 0,0000 0 CCS A ; compare new task to current
02273 2273 0 1,2306 0 TC WL_AT_mkFirst ; >0 (make new task 1st)
02274 2274 0 1,2276 0 TC *+2 ; +0
02275 2275 0 1,2276 0 TC *+1 ; <0
; The new task doe s not need to run before the current time-out, so
; just add it to t he list. Subtract the remaining time interval from the
; new task's time, so the new task will have the same epoch as the other
; tasks on the lis t.
02304 2304 0 1,2473 0 TCR WL_insert ; add new task to task list
02305 2305 0 1,2343 1 TC WL_AT_done
; The new task nee ds to run prior to the current time-out. Add the time
; remaining to all tasks currently on the list to change their epoch
; to NOW.
WL_AT_mkFirst EQU *
02306 2306 3 1,2175 0 CAF WL_tskLstStart ; set pointer to front of list
02307 2307 5 0,0101 1 TS WL_AT_taskPtr
02326 2326 3 0,0101 1 XCH WL_AT_taskPtr ; bump task pointer back 1 record
02327 2327 6 1,2174 1 AD WL_taskRecSize
02330 2330 5 0,0101 1 TS WL_AT_taskPtr
; Now that the tas ks all share the same epoch, add the new task to the
; list and call th e scheduler to schedule the next task.
WL_AT_schTsk EQU *
02333 2333 3 1,2050 0 CAF ZERO
02334 2334 6 0,0102 1 AD WL_AT_newTime
02335 2335 5 0,0122 0 TS WL_IS_newTime ; set time field in new task record
02341 2341 0 1,2473 0 TCR WL_insert ; add new task to task list
WL_AT_done EQU *
02343 2343 3 0,0100 0 XCH WL_AT_saveQ
02344 2344 6 1,2051 1 AD ONE
02345 2345 5 0,0001 0 TS Q ; restore return address
02346 2346 0 0,0000 0 RET URN
;----------------- ---------------------------------------------------------
; WL_TIME3task - T 3 TIMEOUT
;
; Perform WAITLIST activities when TIME3 times-out. Called by the
; T3 interrupt han dler.
;----------------- ---------------------------------------------------------
WL_TIME3task EQU *
02347 2347 3 0,0001 0 XCH Q
02350 2350 5 0,0105 0 TS WL_T3_saveQ ; save return address
02351 2351 3 0,0015 0 XCH BANK
02352 2352 5 0,0106 0 TS WL_T3_oldBank ; save current bank
;----------------- ---------------------------------------------------------
; WL_runTasks - RU N TIMED-OUT TASK(S)
;
; Runs all tasks t imed-out on WL_taskList. Tasks are removed
; from the list be fore they are run.
;----------------- ---------------------------------------------------------
WL_runTasks EQU *
02362 2362 3 0,0001 0 XCH Q
02363 2363 5 0,0113 1 TS WL_RT_saveQ ; save return address
; loop, checking t he task on the front of the list. If it is
; timed out, remov e it from the list and run it.
WL_RT_loop EQU *
02364 2364 3 1,2050 0 CAF ZERO
02365 2365 2 1,2175 1 IND EX WL_tskLstStart
02366 2366 6 0,0000 1 AD TSKTIME
02367 2367 1 0,0000 0 CCS A ; task timed out?
02370 2370 0 1,2414 1 TC WL_RT_done ; >0 no, so we are done
02371 2371 0 1,2373 1 TC *+2 ; +0
02372 2372 0 1,2373 1 TC *+1 ; <0
; The task address is always 14-bit, so check whether the address falls
; within erasable or fixed-fixed memory. If so, use it as-is; otherwise,
; set the bank reg ister and change the address to 12-bit.
WL_RT_runIt EQU *
02411 2411 2 0,0114 1 IND EX WL_RT_runAddr ; apply indirect address to next instr.
02412 2412 0 0,0000 1 TC 0 ; run the task
WL_RT_done EQU *
02414 2414 3 0,0113 1 XCH WL_RT_saveQ
02415 2415 5 0,0001 0 TS Q ; restore return address
02416 2416 0 0,0000 0 RET URN
;----------------- ---------------------------------------------------------
; WL_schedTask - S CHEDULE NEXT TASK
;
; Schedule task on the front of list for the next time-out. Adjust the
; time-out for all other tasks on the list, so they contain the remaining
; time after the n ext timeout.
;----------------- ---------------------------------------------------------
WL_schedTask EQU *
02417 2417 3 0,0001 0 XCH Q
02420 2420 5 0,0107 1 TS WL_ST_saveQ ; save return address
; Iterate through all tasks on the list. Subtract the time-out time
; from each task. (The 1st task on the list will now have a time-out
; of zero)
02454 2454 3 0,0110 1 XCH WL_ST_taskPtr ; bump task pointer back 1 record
02455 2455 6 1,2174 1 AD WL_taskRecSize
02456 2456 5 0,0110 1 TS WL_ST_taskPtr
; Set TIME3 to ove rflow at the time-out of the task on the front
; of the list: TIM E3 = %37777 - WL_ST_newTime + 1
WL_ST_setT3 EQU *
02461 2461 4 0,0111 1 CS WL_ST_newTime
02462 2462 6 1,2201 0 AD WL_maxVal
02463 2463 6 1,2051 1 AD ONE
02464 2464 5 0,0037 0 TS TIME3 ; overflow at new time-out time
02465 2465 0 1,2470 0 TC WL_ST_done
WL_ST_noTask EQU *
02466 2466 3 1,2203 1 CAF WL_maxTimeOut
02467 2467 5 0,0037 0 TS TIME3 ; nothing scheduled, reset the clock
WL_ST_done EQU *
02470 2470 3 0,0107 1 XCH WL_ST_saveQ
02471 2471 5 0,0001 0 TS Q ; restore return address
02472 2472 0 0,0000 0 RET URN
;----------------- ---------------------------------------------------------
; WL_insert - INSE RT TASK INTO SORTED LIST
;
; Insert a task re cord into the sorted list. Use 'WL_IS_newTime' and
; 'WL_IS_newAddr' to set the fields of record to be inserted.
; Performs an inse rtion sort, with the records sorted by time.
; Lowest times are at the front of the list. If several records
; have the same ti me, the records inserted first will appear first
; in the list. NIL records have a time of NOTASK and a address
; of positive zero .
;----------------- ---------------------------------------------------------
WL_insert EQU *
02473 2473 3 0,0001 0 XCH Q
02474 2474 5 0,0124 0 TS WL_IS_saveQ ; save return address
; Work from the ba ck of the list to the front, pushing each record
; to the back unti l the insertion point is found.
02507 2507 3 1,2200 1 CAF WL_numTasks1 ; loop for number of tasks minus 1
WL_IS_loop EQU *
02510 2510 5 0,0127 0 TS WL_IS_loopCnt
; No, bump the rec ord toward the back of the list.
WL_IS_bumpPtr EQU *
02541 2541 3 0,0125 1 XCH WL_IS_taskPtr ; bump task pointer forward 1 record
02542 2542 2 0,0000 1 EXT END
02543 2543 6 1,2174 1 SU WL_taskRecSize
02544 2544 5 0,0125 1 TS WL_IS_taskPtr
WL_IS_insRec EQU *
02552 2552 3 1,2050 0 CAF ZERO
02553 2553 6 0,0122 0 AD WL_IS_newTime
02554 2554 2 0,0125 0 IND EX WL_IS_taskPtr
02555 2555 5 0,0000 1 TS TSKTIME ; set time field
WL_IS_done EQU *
02562 2562 3 0,0124 0 XCH WL_IS_saveQ
02563 2563 5 0,0001 0 TS Q ; restore return address
02564 2564 0 0,0000 0 RET URN
;----------------- ---------------------------------------------------------
; WL_remove - REMO VE TASK FROM FRONT OF LIST
;
; Returns the addr ess of the task in register A. If the list is
; empty, it return s zero in A. If a task is removed from the list,
; the remaining ta sks are moved up to the front.
;----------------- ---------------------------------------------------------
WL_remove EQU *
02565 2565 3 0,0001 0 XCH Q
02566 2566 5 0,0115 1 TS WL_RM_saveQ ; save return address
02602 2602 3 1,2200 1 CAF WL_numTasks1 ; loop for number of tasks minus 1
WL_RM_loop EQU *
02603 2603 5 0,0120 1 TS WL_RM_loopCnt
02604 2604 3 1,2050 0 CAF ZERO
02605 2605 2 0,0117 1 IND EX WL_RM_taskPtr2
02606 2606 6 0,0000 1 AD TSKTIME
02607 2607 2 0,0116 0 IND EX WL_RM_taskPtr
02610 2610 5 0,0000 1 TS TSKTIME ; copy time field
02621 2621 3 0,0116 1 XCH WL_RM_taskPtr ; bump task pointer back 1 record
02622 2622 6 1,2174 1 AD WL_taskRecSize
02623 2623 5 0,0116 1 TS WL_RM_taskPtr
WL_RM_done EQU *
02636 2636 3 0,0115 1 XCH WL_RM_saveQ
02637 2637 5 0,0001 0 TS Q ; restore return address
02640 2640 3 0,0121 0 XCH WL_RM_retval ; return task address in A
02641 2641 0 0,0000 0 RET URN
INC L exec_f.asm ; EXEC
;================= =========================================================
; EXEC (file:exec_ f.asm)
;
; Version: 1.0
; Author: John P ultorak
; Date: 04/26/ 2002
;
; PURPOSE:
; Constants and so urce code for EXEC.
;
; Non-preemptive m ultitasking routines, originally implemented by J. H.
; Laning, Jr. for AGC3 and later adapted for AGC4. Briefly discussed in
; R-393, which giv es some of the software interfaces into the
; multitasking. Th is is my own recreation, and it only includes the job
; scheduling. The original EXEC also includes memory management for the
; eraseable memory ; this is not reproduced here.
;
; Overview: schedu led elements are called 'jobs'. Up to 7 jobs can be
; concurrently sch eduled. An 8th 'dummy' job is always scheduled. Each
; job has an assig ned priority (1-n, where 1 is the lowest priority).
; The highest prio rity job always executes. When that job terminates,
; the next highest priority job is selected for execution. If several
; jobs have the sa me priority, they are executed round-robin.
;
; A job is schedul ed for execution by calling 'NOVAC' and
; furnishing the j ob priority and starting address.
; L XCH JOB_PRIORITY
; L+1 TC NOVAC
; L+2 DS JOB_ADDRESS
; L+3 ... execution resumes here
;
; JOB_PRIORITY = a positive integer from %3 - %37776 where a higher number
; indicates hig her priority. Priorities below 3 are reserved for
; internal EXEC use: 0=no job, 1=sleeping job, 2=dummy job.
; Priority %377 77 is also reserved for woken jobs.
; JOB_ADDRESS = st arting address of the job.
;
; **** WARNING *** * If NOVAC is not being called from an interrupt, be sure to
; inhibit interrup ts before calling it to protect the integrity of the list.
;
; When a new job i s added, the new job's record (core set) is
; initialized with a copy of the current job's record (MPAC and other
; parameters), exc ept for the new job priority and address, which are
; set by the 'add job' routine. Therefore, data can be stored into
; MPAC prior to st arting a new job as a method of passing data into
; the new job.
;
; Jobs terminate t hemselves by jumping to ENDOFJOB. This removes them
; from the EXEC sc heduler:
; TC ENDOFJOB
;
; Jobs can suspend themselves (yield to a higher priority job) by
; executing the fo llowing sequence. If there is no other job of
; higher priority, executing of the yielded job resumes at L+2
; L CCS newJob
; L+1 TC CHANG1
; L+2 ... execution resumes here
;
; If there is no o ther job of equal or higher priority, the branch is
; not taken.
;
; Jobs can put the mselves to sleep by calling JOBSLEEP. The address
; where execution of the sleeping job should resume must be in register
; A before calling JOBSLEEP. The job will remain sleeping until JOBWAKE
; is called:
;
; L CAF WAKECADR
; L+1 TC JOBSLEEP
; (does not return from JOBSLEEP)
;
; Sleeping jobs ar e awakened by calling JOBWAKE. The address where
; execution of the sleeping job should resume must be in register A.
; JOBWAKE returns to the address after the call and execution continues
; for the calling job. The job that was sleeping will now be the next
; job to execute.
;
; L CAF WAKECADR
; L+1 TC JOBWAKE
; L+2 ... execution continues here
;
;================= =========================================================
02645 2645 00130 0 EX_jobCurStart DS EX_currentJob ; starting address for current job
;----------------- ---------------------------------------------------------
; EX_exec -- EXEC SCHEDULER
;
; Executes the hig hest priority job. Enables interrupts while the job is
; running. Once ca lled, this function never returns.
;----------------- ---------------------------------------------------------
EX_MN_findJob EQU *
02662 2662 0 1,3410 1 TCR EX_remove
EX_MN_setFlg EQU *
02677 2677 3 1,2654 1 CAF EX_changeJob ; set change flag
02700 2700 5 0,0307 0 TS newJob
; The job address is always 14-bit, so check whether the address falls
; within erasable or fixed-fixed memory. If so, use it as-is; otherwise,
; set the bank reg ister and change the address to 12-bit.
EX_MN_runJob EQU *
02701 2701 3 1,2050 0 CAF ZERO
02702 2702 6 0,0140 1 AD LOC
02703 2703 5 0,0333 1 TS EX_MN_runAddr ; save job's 14 bit address
EX_MN_runIt EQU *
02720 2720 2 0,0000 1 REL INT ; enable interrupts
02721 2721 2 0,0333 0 IND EX EX_MN_runAddr ; apply indirect address to next instr.
02722 2722 0 0,0000 1 TC 0 ; run the job
ENDOFJOB EQU *
02723 2723 2 0,0000 0 INH INT ; inhibit interrupts
02724 2724 0 1,2662 1 TC EX_MN_findJob ; get next job
; job is sleeping. Keep the job record, but drop the priority so it
; is below the pri ority of the dummy job. This will keep the job
; from running unt il JOBWAKE is called. The address where it should
; resume running w hen awoken is in register A.
JOBSLEEP EQU *
02725 2725 2 0,0000 0 INH INT ; inhibit interrupts
02726 2726 5 0,0140 1 TS LOC ; save restart address
; Job is suspended . Keep the job record, but update the address, so
; execution will r esume at the point after suspension.
CHANG1 EQU *
02733 2733 2 0,0000 0 INH INT ; inhibit interrupts
02734 2734 3 0,0001 0 XCH Q
02735 2735 5 0,0333 1 TS EX_MN_runAddr ; save job's 12 bit restart address
EX_MN_notBank EQU *
02750 2750 3 1,2050 0 CAF ZERO
02751 2751 6 0,0333 1 AD EX_MN_runAddr ; get restart address
EX_MN_saveIt EQU *
02752 2752 5 0,0140 1 TS LOC ; save job's new starting address
; given the priori ty, find the insertion point in the list. Copy
; the current job into the list at the correct insertion point.
EX_MN_mvRec EQU *
02757 2757 0 1,3332 0 TCR EX_findIns
02760 2760 5 0,0352 0 TS EX_IS_jobPtr ; save address of insertion point
EX_MN_loop3 EQU *
02763 2763 1 0,0334 1 CCS EX_MN_field ; done?
02764 2764 0 1,2766 1 TC *+2 ; not yet
02765 2765 0 1,3002 0 TC EX_MN_done3 ; yes
02766 2766 5 0,0334 0 TS EX_MN_field
EX_MN_done3 EQU *
03002 3002 0 1,2662 1 TC EX_MN_findJob ; get next job
;----------------- ---------------------------------------------------------
; JOBWAKE - wake u p the job identified by address in register A
;
; Search jobList f or a job with address matching the address in A.
; If found, bump t he priority up to the highest level, so the job
; will be the next to run.
;
; This is a 'publi c' function. It assumes that interrupts are already
; disabled before it is called. Disabling interrupts during JOBWAKE
; is necessary to preserve the integrity of the joblist.
;----------------- ---------------------------------------------------------
JOBWAKE EQU *
03003 3003 5 0,0312 1 TS EX_JW_CADR ; save job address
03004 3004 3 0,0001 0 XCH Q
03005 3005 5 0,0310 0 TS EX_JW_saveQ ; save return address
; Search the jobli st for the job to wake (job address matches
; EX_JW_CADR).
03014 3014 3 1,2653 0 CAF EX_numJobs1 ; loop for number of jobs minus 1
EX_JW_loop EQU *
03015 3015 5 0,0311 1 TS EX_JW_loopCnt
EX_JW_moveRec EQU *
03035 3035 2 0,0315 1 IND EX EX_JW_jobPtr2
03036 3036 3 0,0000 1 XCH 0
03037 3037 2 0,0314 0 IND EX EX_JW_jobPtr
03040 3040 3 0,0000 1 XCH 0
EX_JW_bumpPtr EQU *
03041 3041 3 0,0314 1 XCH EX_JW_jobPtr ; bump job pointer forward 1 record
03042 3042 6 1,2046 1 AD NEG1
03043 3043 5 0,0314 1 TS EX_JW_jobPtr
03053 3053 3 0,0316 0 XCH EX_JW_fndIndx ; put awoken job on front of list
03054 3054 2 1,2647 1 IND EX EX_jobLstStart
03055 3055 5 0,0000 1 TS 0
EX_JW_done EQU *
EX_JW_return EQU *
03074 3074 0 0,0310 0 TC EX_JW_saveQ ; return
;----------------- ---------------------------------------------------------
; SPVAC - ADD A JO B TO THE JOBLIST
;
; Similar to NOVAC , but used by VERB 37. The job CADR is in register A.
; The job priority is in NEWPRIO. Return to the address in Q.
;
; NOVAC differs fr om SPVAC, because NOVAC has the job CADR at the address
; in Q, and return s to Q+1. Also, in NOVAC the job priority is in A.
;
; This is a 'publi c' function. It can be called from a job
; or from an inter rupt.
;----------------- ---------------------------------------------------------
SPVAC EQU *
03075 3075 5 0,0350 1 TS EX_IS_newLoc ; store new job address
03076 3076 3 0,0001 0 XCH Q
03077 3077 5 0,0317 1 TS EX_AJ_saveQ ; save return address
; Initialize field s for new job record. New job inherits copy of
; MPAC from curren t job, so copy all fields in current job to new
; job in list
EX_SP_loop1 EQU *
03110 3110 1 0,0323 1 CCS EX_AJ_field ; done?
03111 3111 0 1,3113 1 TC *+2 ; not yet
03112 3112 0 1,3127 0 TC EX_SP_done1 ; yes
03113 3113 5 0,0323 0 TS EX_AJ_field
EX_SP_done1 EQU *
03127 3127 3 1,2050 0 CAF ZERO
03130 3130 6 0,0346 0 AD EX_IS_newPrio
03131 3131 2 0,0352 1 IND EX EX_IS_jobPtr
03132 3132 2 0,0000 0 IND EX 0
03133 3133 5 0,0143 1 TS PRIORITY ; set priority field
EX_SP_done2 EQU *
03156 3156 3 0,0317 1 XCH EX_AJ_saveQ
03157 3157 5 0,0001 0 TS Q
03160 3160 0 0,0000 0 RET URN
;----------------- ---------------------------------------------------------
; FINDVAC - not im plemented
;
;----------------- ---------------------------------------------------------
;----------------- ---------------------------------------------------------
; NOVAC - ADD A JO B TO THE JOBLIST
;
; Search jobList f or an empty slot. If found, put the new job in the
; empty slot. If t he new job has the same, or higher, priority than the
; current job, set the change flag to 'CHGJOB' (change jobs at the next
; opportunity).
;
; This is a 'publi c' function. It can be called from a job
; or from an inter rupt.
;----------------- ---------------------------------------------------------
NOVAC EQU *
03162 3162 5 0,0321 1 TS EX_AJ_jobPrio ; save job priority
03163 3163 3 0,0001 0 XCH Q
03164 3164 5 0,0317 1 TS EX_AJ_saveQ ; save return address-1
; Initialize field s for new job record. New job inherits copy of
; MPAC from curren t job, so copy all fields in current job to new
; job in list
EX_AJ_loop1 EQU *
03200 3200 1 0,0323 1 CCS EX_AJ_field ; done?
03201 3201 0 1,3203 0 TC *+2 ; not yet
03202 3202 0 1,3217 0 TC EX_AJ_done1 ; yes
03203 3203 5 0,0323 0 TS EX_AJ_field
EX_AJ_done1 EQU *
03217 3217 3 1,2050 0 CAF ZERO
03220 3220 6 0,0346 0 AD EX_IS_newPrio
03221 3221 2 0,0352 1 IND EX EX_IS_jobPtr
03222 3222 2 0,0000 0 IND EX 0
03223 3223 5 0,0143 1 TS PRIORITY ; set priority field
EX_AJ_testFlg EQU *
03236 3236 4 0,0143 0 CS PRIORITY ; get -priority of current job
EX_AJ_done2 EQU *
03246 3246 3 0,0317 1 XCH EX_AJ_saveQ
03247 3247 6 1,2051 1 AD ONE
03250 3250 5 0,0001 0 TS Q
03251 3251 0 0,0000 0 RET URN
;----------------- ---------------------------------------------------------
; EX_initEX - INIT IALIZE EXEC
;
; Initialize the e raseable memory segment for EXEC. Necessary in
; case the AGC is restarted.
;----------------- ---------------------------------------------------------
EX_initEX EQU *
03252 3252 3 0,0001 0 XCH Q
03253 3253 5 0,0325 0 TS EX_IN_saveQ ; save return address
03274 3274 3 0,0327 1 XCH EX_IN_jobPtr ; bump job pointer back 1 record
03275 3275 6 1,2051 1 AD ONE
03276 3276 5 0,0327 1 TS EX_IN_jobPtr
EX_IN_loop3 EQU *
03307 3307 1 0,0331 1 CCS EX_IN_field ; done?
03310 3310 0 1,3312 1 TC *+2 ; not yet
03311 3311 0 1,3324 1 TC EX_IN_done ; yes
03312 3312 5 0,0331 0 TS EX_IN_field
EX_IN_done EQU *
03324 3324 3 0,0327 1 XCH EX_IN_jobPtr ; bump job pointer back 1 record
03325 3325 6 1,2051 1 AD ONE
03326 3326 5 0,0327 1 TS EX_IN_jobPtr
;----------------- ---------------------------------------------------------
; EX_findIns - FIN D INSERTION POINT INTO SORTED LIST
;
; Insert a job rec ord into the sorted list. Use 'EX_IS_newPrio',
; EX_IS_newPrioB a nd 'EX_IS_newLoc' to set the fields of record to
; be inserted.
; Performs an inse rtion sort, with the records sorted by priority.
; Highest priority is at the front of the list. If several records
; have the same pr iority, the records inserted first will appear first
; in the list. NIL records have a priority of zero.
;----------------- ---------------------------------------------------------
EX_findIns EQU *
03332 3332 3 0,0001 0 XCH Q
03333 3333 5 0,0351 0 TS EX_IS_saveQ ; save return address
; Work from the ba ck of the list to the front, pushing each record
; to the back unti l the insertion point is found.
03346 3346 3 1,2653 0 CAF EX_numJobs1 ; loop for number of jobs minus 1
EX_FI_loop EQU *
03347 3347 5 0,0354 0 TS EX_IS_loopCnt
; No, bump the rec ord toward the back of the list.
EX_FI_bumpPtr EQU *
03376 3376 3 0,0352 0 XCH EX_IS_jobPtr ; bump job pointer forward 1 record
03377 3377 6 1,2046 1 AD NEG1
03400 3400 5 0,0352 0 TS EX_IS_jobPtr
EX_FI_insRec EQU *
EX_FI_done EQU *
03405 3405 3 1,2050 0 CAF ZERO
03406 3406 6 0,0352 0 AD EX_IS_jobPtr ; get insertion spot in list
03407 3407 0 0,0351 0 TC EX_IS_saveQ ; return
;----------------- ---------------------------------------------------------
; EX_remove - REMO VE JOB FROM FRONT OF LIST
;
; Remove job from front of list and copy it to the current job. Bubble
; any remaining jo bs toward the front of the list.
;----------------- ---------------------------------------------------------
EX_remove EQU *
03410 3410 3 0,0001 0 XCH Q
03411 3411 5 0,0336 1 TS EX_RM_saveQ ; save return address
; Dequeue the reco rd at the top of the list (the next job to run).
; Make it the curr ent job by copying it to the current job record.
EX_RM_loop1 EQU *
03420 3420 1 0,0344 0 CCS EX_RM_field ; done?
03421 3421 0 1,3423 1 TC *+2 ; not yet
03422 3422 0 1,3437 1 TC EX_RM_done1 ; yes
03423 3423 5 0,0344 1 TS EX_RM_field
; done copying rec ord for current job. Restore the current job to
; its default prio rity, in case it was previously elevated.
EX_RM_done1 EQU *
03437 3437 3 1,2050 0 CAF ZERO
03440 3440 6 0,0144 0 AD JOBPRIOBASE
03441 3441 5 0,0143 1 TS PRIORITY
03445 3445 3 1,2653 0 CAF EX_numJobs1 ; loop for number of jobs minus 1
EX_RM_loop2 EQU *
03446 3446 5 0,0342 1 TS EX_RM_loopCnt
03456 3456 3 0,0337 0 XCH EX_RM_jobPtr ; bump job pointer back 1 record
03457 3457 6 1,2051 1 AD ONE
03460 3460 5 0,0337 0 TS EX_RM_jobPtr
EX_RM_done2 EQU *
03465 3465 3 0,0341 1 XCH EX_RM_savePtr
03466 3466 2 0,0337 1 IND EX EX_RM_jobPtr ; move the index for the top record
03467 3467 5 0,0000 1 TS 0 ; to the bottom of the list
EX_RM_loop3 EQU *
03472 3472 1 0,0344 0 CCS EX_RM_field ; done?
03473 3473 0 1,3475 1 TC *+2 ; not yet
03474 3474 0 1,3507 0 TC EX_RM_done3 ; yes
03475 3475 5 0,0344 1 TS EX_RM_field
EX_RM_done3 EQU *
03507 3507 0 0,0336 1 TC EX_RM_saveQ ; return
;----------------- ---------------------------------------------------------
; DUMMY JOB - runs at the lowest priority and never terminates. Ensures
; that there is al ways at least one job executing. Sleeping jobs are
; given a lower pr iority than the dummy job.
;
; The dummy job co ntrols the computer activity light on the DSKY. When
; the dummy job is running, the light is off. When the dummy job is
; preempted by a h igher priority job, the light is on.
;
; I couldn't find good information on the computer activity light
; in COLOSSUS, so this is my best guess concerning its operation. It
; seems consistent witht the MPEG video of the Apollo 11 DSKY.
;----------------- ---------------------------------------------------------
dumJob EQU *
03510 3510 3 1,2050 0 CAF ZERO
03511 3511 6 0,0011 1 AD DSALMOUT
03512 3512 7 1,3525 1 MAS K NOTACTLT
03513 3513 5 0,0011 1 TS DSALMOUT ; turn bit1 off
dumJob1 EQU *
03514 3514 1 0,0307 1 CCS newJob ; check for context switch
03515 3515 0 1,3517 1 TC dumJob2 ; yes
03516 3516 0 1,3514 1 TC dumJob1 ; no
dumJob2 EQU *
03517 3517 4 0,0011 0 CS DSALMOUT ; inclusive OR bit 1 with 1 using
03520 3520 7 1,3525 1 MAS K NOTACTLT ; Demorgan's theorem
03521 3521 4 0,0000 0 COM
03522 3522 5 0,0011 1 TS DSALMOUT
03525 3525 77776 1 NOTACTLT DS %77776 ; 1's compliment of bit1 (comp activity l i g h t )
INC L bank_f.asm ; bank intercommunication routines
;================= =========================================================
; BANK INTERCOMMUN ICATION (file:bank_f.asm)
;
; Version: 1.0
; Author: John P ultorak
; Date: 01/19/ 2002
;
; PURPOSE:
; Contains bank in tercommunication routines.
; The source is mi ssing from my (incomplete) listing of COLOSSUS. The
; implementation h ere is inferred from the usage in the COLOSSUS pinball
; routines. Some o f these routines could probably be combined or optimized
; away if I unders tood the pinball software architecture a little better.
;================= =========================================================
;----------------- ---------------------------------------------------------
; DXCHJUMP
; Do a bank jump t o the CADR in register A. After the bank jump, the return
; CADR is in regis ter A. Contents of register Q are destroyed.
; This is my attem pt to implement the block I equivalent for
; DCA MY2CADR
; DXCH Z
;... which is used in some places in COLOSSUS to implement bank jumps. In that
; implementation, MY2CADR has the lower portion of the address in MYCADR and
; the bank portion in MY2CADR+1. DCA loads the lower address into A and the
; bank address int o L. DXCH loads the lower address into Z and the bank portion
; into BB (both ba nk register), thereby doing a bank call. After the call,
; the lower return address is in A and the return bank is in L.
;----------------- ---------------------------------------------------------
DXCHJUMP EQU *
03526 3526 5 0,0576 0 TS ADDRWD1 ; save 14-bit destination address
DODXCHCALL EQU *
03547 3547 4 0,0617 0 CS DCRET ; get 12-bit return address
03550 3550 6 1,2102 0 AD bankAddr ; -(12bitAddr)+%6000
03551 3551 1 0,0000 0 CCS A ; return address is bank addressed?
03552 3552 0 1,3561 0 TC DC_NOTBANK ; >0 no, just use it, as is
03553 3553 0 1,3555 1 TC *+2 ; +0 yes
03554 3554 0 1,3555 1 TC *+1 ; <0 yes
DC_NOTBANK EQU *
03561 3561 3 1,2050 0 CAF ZERO
03562 3562 6 0,0617 1 AD DCRET ; put return CADR in A
03563 3563 2 0,0576 1 IND EX ADDRWD1 ; apply indirect address to next instr.
03564 3564 0 0,0000 1 TC 0 ; make the jump
;----------------- ---------------------------------------------------------
; BANKCALL
; Do a bank jump t o the location referenced by the 14-bit address referenced
; in Q. Does not a ffect register A (but assumes A does not contain an
; overflow). Funct ionally identical to POSTJUMP.
; Usage:
; TC BANKCALL ; bank jump to CADR
; DS MYCADR ; the 14-bit address
; returns here if MYCADR calls TC Q.
;
; Inferred from th e AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968.
;----------------- ---------------------------------------------------------
BANKCALL EQU *
03565 3565 5 0,0612 1 TS BCA ; save A
DOBANKCALL EQU *
03611 3611 3 0,0612 1 XCH BCA ; restore A
03612 3612 2 0,0576 1 IND EX ADDRWD1 ; apply indirect address to next instr.
03613 3613 0 0,0000 1 TC 0 ; make the jump
;----------------- ---------------------------------------------------------
; MYBANKCALL
; Functionally ide ntical to BANKCALL. Used for converting the FLASHON/FLASHOFF
; COLOSSUS block I I code to block I. In Block II, the V/N flash is controlled b y
; setting a bit in an I/O channel. In Block I, a bit in the display table must
; be set using _11 DSPIN. Because _11DSPIN is in fixed/switchable memory, but is
; called from fixe d/fixed, a bank call function is needed. The original BANKCAL L
; could not be use d because it is not reentrant and I dont understand its usage
; in COLOSSUS well enough to be certain that FLASHON/FLASHOFF isn't already
; being called som ewhere through BANKCALL.
;----------------- ---------------------------------------------------------
MYBANKCALL EQU *
03624 3624 5 0,0615 0 TS MBCA ; save A
;----------------- ---------------------------------------------------------
; POSTJUMP
; Do a bank jump t o the location referenced by the 14-bit address referenced
; in Q. Does not affect register A (but assumes A does not contain an
; overflow). Funct ionally identical to BANKCALL
; Usage:
; TC POSTJUMP ; bank jump to CADR
; DS MYCADR ; the 14-bit address
; returns here if MYCADR calls TC Q.
;
; Inferred from th e AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968.
;----------------- ---------------------------------------------------------
POSTJUMP EQU *
03653 3653 5 0,0607 0 TS PJA ; save A
DOPOSTJUMP EQU *
03677 3677 3 0,0607 0 XCH PJA ; restore A
03700 3700 2 0,0576 1 IND EX ADDRWD1 ; apply indirect address to next instr.
03701 3701 0 0,0000 1 TC 0 ; make the jump
;----------------- ---------------------------------------------------------
; BANKJUMP
; Do a bank jump t o the location referenced by the 14-bit address in A.
; Usage:
; CADRSTOR DS MYCADR
;
; CAF CADRSTOR ; load the 14-bit address
; TC BANKJUMP ; bank jump to CADR
; returns here if MYCADR calls TC Q
;
; Inferred from th e AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968.
;----------------- ---------------------------------------------------------
BANKJUMP EQU *
03712 3712 5 0,0576 0 TS ADDRWD1 ; save 14-bit destination address
DOBANKJUMP EQU *
03733 3733 2 0,0576 1 IND EX ADDRWD1 ; apply indirect address to next instr.
03734 3734 0 0,0000 1 TC 0 ; make the jump
;----------------- ---------------------------------------------------------
; DATACALL
; Retrieve memory contents at location referenced by the 14-bit address in A.
; Usage:
; CADRSTOR DS MYCADR
;
; CAF CADRSTOR ; load the 14-bit address
; TC DATACALL ; return data in A
;
; Inferred from th e AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968.
;----------------- ---------------------------------------------------------
DATACALL EQU *
03742 3742 5 0,0576 0 TS ADDRWD1 ; save 14-bit address
DODATACALL EQU *
03763 3763 3 1,2050 0 CAF ZERO
03764 3764 2 0,0576 1 IND EX ADDRWD1 ; apply indirect address to next instr.
03765 3765 6 0,0000 1 AD 0 ; load the word
RELTAB EQU *
03772 3772 04025 1 DS %04025
03773 3773 10003 0 DS %10003
03774 3774 14031 0 DS %14031
03775 3775 20033 0 DS %20033
03776 3776 24017 1 DS %24017
03777 3777 30036 1 DS %30036
04000 4000 34034 1 DS %34034
04001 4001 40023 1 DS %40023
04002 4002 44035 1 DS %44035
04003 4003 50037 0 DS %50037
04004 4004 54000 0 DS %54000
04005 4005 60000 1 RELTAB11 DS %60000
;----------------- ---------------------------------------------------------
; DK_initDK - INIT IALIZE DSKY
;
; Subroutine initi alizes the eraseable memory segment for DSKY displays.
; Blank DSKY regis ters program, verb, noun, R1, R2, R3.
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, Fr esh Start and Restart, p.187.
;----------------- ---------------------------------------------------------
04006 4006 05265 0 DKTESTINIT DS %5265 ; init DSKY to all zeroes (TEST ONLY)
DK_initDK EQU *
04007 4007 3 0,0001 0 XCH Q
04010 4010 5 0,0546 0 TS DK_IN_saveQ ; save return address
; set DSKY display bit (sign bit). Word must be negative, but
; not minus zero ( find out where they do this in COLOSSUS)
04042 4042 3 2,4074 0 CAF _120MRUPT ; reschedule interrupt for 120 mSec
04043 4043 5 0,0040 0 TS TIME4
;----------------- ---------------------------------------------------------
; T4PROG -- T4RUPT PROGRAM
;
; Performs T4RUPT (DSRUPT) functions.
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 129.
;----------------- ---------------------------------------------------------
T4PROG EQU *
04047 4047 3 0,0001 0 XCH Q
04050 4050 5 0,0544 1 TS T4RET ; save return address
04052 4052 3 2,4074 0 CAF _120MRUPT ; reschedule interrupt for 120 mSec
04053 4053 5 0,0040 0 TS TIME4
;----------------- ---------------------------------------------------------
; DSPOUT -- PUTS O UT DISPLAYS
;
; Writes changes i n the software display buffer to the AGC DSKY hardware
; display.
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 131.
;----------------- ---------------------------------------------------------
DSPOUTSR EQU *
04057 4057 5 0,0505 1 TS NOUT ; decrement NOUT
DSPSCAN EQU *
04065 4065 2 0,0465 1 IND EX DSPCNT
04066 4066 1 0,0512 0 CCS DSPTAB ; test sign of DSPTAB + DSPCNT
04067 4067 1 0,0465 1 CCS DSPCNT ; >0, already displayed, test DSPCNT
04070 4070 0 2,4063 0 TC DSPSCAN-2 ; if DSPCNT +, again
04071 4071 0 2,4103 1 TC DSPLAY ; <0, not yet displayed
04075 4075 5 0,0505 1 TS NOUT ; DSRUPTEM=+0, every table entry was che c k e d
04076 4076 0 2,4126 0 TC DSPOUTEXIT ; return
DSPLAY EQU *
04103 4103 6 1,2051 1 AD ONE
04104 4104 2 0,0465 1 IND EX DSPCNT
04105 4105 5 0,0512 1 TS DSPTAB ; replace positively
04106 4106 7 2,4672 1 MAS K LOW11 ; remove bits 12 to 15
04107 4107 5 0,0370 0 TS DSRUPTEM
04110 4110 3 2,4666 0 CAF HI5
04111 4111 2 0,0465 1 IND EX DSPCNT
04112 4112 7 1,3772 1 MAS K RELTAB ; pick up bits 12 to 15 of RELTAB entry
04113 4113 6 0,0370 0 AD DSRUPTEM
04114 4114 5 0,0010 0 TS OUT0 ; was EXTEND/WRITE OUT0 in block II
DSPOUT EQU *
04116 4116 3 0,0001 0 XCH Q
04117 4117 5 0,0545 0 TS DSPOUTRET ; save return address
04120 4120 1 0,0355 0 CCS FLAGWRD5 ; no display unless DSKY flag (sign bit) o n
04121 4121 3 1,2050 0 CAF ZERO ; >0, DSKY disabled
04122 4122 0 2,4126 0 TC NODSPOUT ; +0, DSKY disabled
04123 4123 1 0,0505 0 CCS NOUT ; <0, DSKY enabled, so test NOUT
04124 4124 0 2,4057 1 TC DSPOUTSR ; >0, handle display requests
04125 4125 0 2,4126 0 TC NODSPOUT ; +0, no display requests
NODSPOUT EQU *
DSPOUTEXIT EQU *
04126 4126 3 0,0545 0 XCH DSPOUTRET ; return to calling routine
04127 4127 5 0,0001 0 TS Q
04130 4130 0 0,0000 0 RET URN
;----------------- ---------------------------------------------------------
; KEYRUPT -- KEYBO ARD INTERRUPT HANDLER
;
; Performs keyRUPT functions. Triggered by a keyboard key entry. N-key
; rollover, implem ented as follows: When an interrupt occurs, the current
; job record is sa ved and then restored when the job resumes after the
; interrupt. The j ob record includes MPAC, a set of general purpose
; registers assign ed to the job. When the keyboard interrupt occurs, the
; interrupt handle r stores the keyboard character in MPAC. A job is then
; started to proce ss the character. The new job copies its MPAC fields from
; the current job, so the character is copied to storage owned by the job.
; When additional keyboard interrupts occur, they start their own jobs.
; Up to 7 jobs can be waiting in a queue for execution, so as many as
; 7 keyboard chara cters can be enqueued for processing. Since all keyboard
; jobs have the sa me priority, they are enqueued in the order received.
; Its OK for the k eyboard handler to modify the MPAC of the interrupted job
; because the inte rrupted job's record is restored at the end of the
; interrupt servic e routine.
;
; Not included in my partial AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, so I had to improvise it from the original flow charts in
; E-1574, p.77.
;----------------- ---------------------------------------------------------
KEYPROG EQU *
04132 4132 3 0,0001 0 XCH Q
04133 4133 5 0,0601 0 TS KEYRET ; save return address
;----------------- ---------------------------------------------------------
; TPAGREE
; Force the signs in a triple precision (TP) word to agree. The word is
; in MPAC, MPAC+1, MPAC+2
;
; The sign of the corrected number is always the sign of the most-significant
; non-zero word.
;
; This isn't inclu ded in my partial COLOSSUS listing, so I had to invent
; my own version.
;----------------- ---------------------------------------------------------
TPAGREE EQU *
04150 4150 3 0,0001 0 XCH Q
04151 4151 5 0,0577 1 TS MATH_Q ; return address
TPA_SGN0 EQU *
04152 4152 1 0,0130 1 CCS MPAC
04153 4153 0 2,4157 0 TC TPA_P0 ; >0, sign will be +
04154 4154 0 2,4241 1 TC TPA_SGN1 ; +0, still don't know sign, check MPAC+ 1
04155 4155 0 2,4210 0 TC TPA_M0 ; <0, sign will be -
04156 4156 0 2,4241 1 TC TPA_SGN1 ; -0, still don't know sign, check MPAC+ 1
TPA_P0 EQU *
04157 4157 1 0,0131 0 CCS MPAC+1
04160 4160 0 2,4250 1 TC TPA_P1+2 ; >0, MPAC+1 is OK, check MPAC+2
04161 4161 0 2,4167 0 TC TPA_PZ0 ; +0,
04162 4162 0 2,4164 0 TC *+2 ; <0, fix MPAC+1
04163 4163 0 2,4167 0 TC TPA_PZ0 ; -0,
04164 4164 3 2,4317 0 CAF TPA_MPAC0 ; borrow from MPAC to correct MPAC+1
04165 4165 0 2,4337 1 TC TPA_FIXP
04166 4166 0 2,4250 1 TC TPA_P1+2 ; MPAC+1 is now non-zero positive; check
MPAC+2
TPA_PZ0 EQU *
04167 4167 1 0,0132 0 CCS MPAC+2
04170 4170 0 2,4175 0 TC *+5 ; >0, zero MPAC+1, MPAC+2 is OK
04171 4171 0 2,4173 0 TC *+2 ; +0, MPAC+1, +2 both zero
04172 4172 0 2,4200 1 TC TPA_PZ0FIX ; <0,
TPA_PZ0FIX EQU *
04200 4200 3 0,0132 1 XCH MPAC+2 ; move MPAC+2 to MPAC+1 so we can use
04201 4201 5 0,0131 1 TS MPAC+1 ; our standard correction function
04202 4202 3 2,4317 0 CAF TPA_MPAC0 ; borrow from MPAC to correct MPAC+1
04203 4203 0 2,4337 1 TC TPA_FIXP
04204 4204 3 2,4315 1 CAF MAXPOS ; move corrected value from MPAC+1 back
04205 4205 3 0,0131 1 XCH MPAC+1 ; to MPAC+2. Set MPAC+1 to correct value
04206 4206 5 0,0132 1 TS MPAC+2 ; borrowed from MPAC.
04207 4207 0 0,0577 1 TC MATH_Q
TPA_M0 EQU *
04210 4210 1 0,0131 0 CCS MPAC+1
04211 4211 0 2,4215 0 TC *+4 ; >0, fix MPAC+1
04212 4212 0 2,4220 0 TC TPA_MZ0 ; +0,
04213 4213 0 2,4264 0 TC TPA_M1+2 ; <0, MPAC+1 is OK, check MPAC+2
04214 4214 0 2,4220 0 TC TPA_MZ0 ; -0,
04215 4215 3 2,4317 0 CAF TPA_MPAC0 ; borrow from MPAC to correct MPAC+1
04216 4216 0 2,4321 0 TC TPA_FIXM
04217 4217 0 2,4264 0 TC TPA_M1+2
TPA_MZ0 EQU *
04220 4220 1 0,0132 0 CCS MPAC+2
04221 4221 0 2,4231 0 TC TPA_MZ0FIX ; >0,
04222 4222 0 2,4224 1 TC *+2 ; +0, MPAC+1, +2 both zero
04223 4223 0 2,4226 0 TC *+3 ; <0, zero MPAC+1, MPAC+2 is OK
TPA_MZ0FIX EQU *
04231 4231 3 0,0132 1 XCH MPAC+2 ; move MPAC+2 to MPAC+1 so we can use
04232 4232 5 0,0131 1 TS MPAC+1 ; our standard correction function
04233 4233 3 2,4317 0 CAF TPA_MPAC0 ; borrow from MPAC to correct MPAC+1
04234 4234 0 2,4321 0 TC TPA_FIXM
04235 4235 3 2,4316 1 CAF MAXNEG ; move corrected value from MPAC+1 back
04236 4236 3 0,0131 1 XCH MPAC+1 ; to MPAC+2. Set MPAC+1 to correct value
04237 4237 5 0,0132 1 TS MPAC+2 ; borrowed from MPAC.
04240 4240 0 0,0577 1 TC MATH_Q
; MPAC was zero, s o we still don't know the sign. Check MPAC+1.
TPA_SGN1 EQU *
04241 4241 1 0,0131 0 CCS MPAC+1
04242 4242 0 2,4246 0 TC TPA_P1 ; >0, sign will be +
04243 4243 0 2,4277 1 TC TPA_SGN2 ; +0, still don't know sign, check MPAC+ 2
04244 4244 0 2,4262 0 TC TPA_M1 ; <0, sign will be -
04245 4245 0 2,4277 1 TC TPA_SGN2 ; -0, still don't know sign, check MPAC+ 2
; MPAC+1 is non-ze ro positive, so reconcile signs to a positive number.
TPA_P1 EQU *
04246 4246 3 1,2050 0 CAF ZERO
04247 4247 5 0,0130 0 TS MPAC ; set MPAC to +0
04257 4257 3 2,4320 1 CAF TPA_MPAC1 ; borrow from MPAC+1 to correct MPAC+2
04260 4260 0 2,4337 1 TC TPA_FIXP
04261 4261 0 0,0577 1 TC MATH_Q
TPA_M1 EQU *
04262 4262 3 1,2045 1 CAF NEG0
04263 4263 5 0,0130 0 TS MPAC ; set MPAC to -0
04271 4271 3 1,2045 1 CAF NEG0 ; +0, change to -0 and we're done
04272 4272 5 0,0132 1 TS MPAC+2
04273 4273 0 0,0577 1 TC MATH_Q
04274 4274 3 2,4320 1 CAF TPA_MPAC1 ; borrow from MPAC+1 to correct MPAC+2
04275 4275 0 2,4321 0 TC TPA_FIXM
04276 4276 0 0,0577 1 TC MATH_Q
; MPAC and MPAC+1 were both zero, so we still don't know the sign.
; Check MPAC+2.
TPA_SGN2 EQU *
04277 4277 1 0,0132 0 CCS MPAC+2
04300 4300 0 2,4304 1 TC TPA_P2 ; >0, sign is +
04301 4301 0 2,4310 1 TC TPA_P3 ; +0, number is all zeros
04302 4302 0 2,4306 0 TC TPA_M2 ; <0, sign is -
04303 4303 0 2,4310 1 TC TPA_P3 ; -0, number is all zeros
;----------------- ---------------------------------------------------------
; TPA_FIXM
; Reconcile the si gns in a double precision word. The most significant word
; is in C(A), the lesser word in C(A+1). Reconcilliation occurs by borrowing
; from C(A) and ad ding the borrowed amount to C(A+1). C(A) is assumed to be
; negative non-zer o number and C(A+1) positive non-zero. The reconciliation
; makes both numbe rs negative.
;
; This is part of my implementation of TPAGREE.
;----------------- ---------------------------------------------------------
TPA_FIXM EQU *
04321 4321 5 0,0576 0 TS ADDRWD1
;----------------- ---------------------------------------------------------
; TPA_FIXP
; Reconcile the si gns in a double precision word. The most significant word
; is in C(A), the lesser word in C(A+1). Reconcilliation occurs by borrowing
; from C(A) and ad ding the borrowed amount to C(A+1). C(A) is assumed to be
; positive non-zer o number and C(A+1) negative non-zero. The reconciliation
; makes both numbe rs positive.
;
; This is part of my implementation of TPAGREE.
;----------------- ---------------------------------------------------------
TPA_FIXP EQU *
04337 4337 5 0,0576 0 TS ADDRWD1
;----------------- ---------------------------------------------------------
; SHORTMP -- MULTI PLY DOUBLE WORD BY A SINGLE WORD
; Multiply C(MPAC, MPAC+1) by the contents of A. Put the product in MPAC,
; MPAC+1, MPAC+2.
;;
; These aren't inc luded in my partial COLOSSUS listing, so I had to invent
; my own version.
;----------------- ---------------------------------------------------------
SHORTMP EQU *
04353 4353 5 0,0573 0 TS SHORTMP_A
; MPAC+2 = MPAC+1 * A
; MPAC = overflow
;----------------- ---------------------------------------------------------
; DMP -- DOUBLE PR ECISION MULTIPLY
; Multiply val, va l+1 with C(MPAC, MPAC+1). 'ADDRWD1' contains the
; address of 'val' . The product appears in MPAC, MPAC+1, MPAC+2
;
; This isn't inclu ded in my partial COLOSSUS listing, but is taken from
; the double preci sion math examples in R-393.
;----------------- ---------------------------------------------------------
DMP EQU *
04374 4374 2 0,0001 1 IND EX Q
04375 4375 3 0,0000 1 CAF 0
04376 4376 6 2,5777 0 AD EXTENDER
04377 4377 5 0,0576 0 TS ADDRWD1
BANKFF_1 EQU *
;----------------- --------------------------------------------------------
; PINBALL
;
; Now, do the "pin ball game" (DSKY) routines.
;
; Mimic the bank a ssignments in COLOSSUS. Since this is a block I AGC that
; has fewer banks, different bank numbers are used, but the sequence and
; relative allocat ion of routines to various banks is preserved.
;----------------- --------------------------------------------------------
;----------------- ---------------------------------------------------------
; VERB 37
;
; In COLOSSUS, a s uccessful V37 apparently also restarts the AGC. Here,
; we implement a s ubset of COLOSSUS to kick off a job associated with the
; verb.
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 192-204.
;----------------- ---------------------------------------------------------
V37 EQU * ; verb 37
10000 4,0000 5 0,0464 1 TS MMNUMBER ; save major mode
V37BAD EQU *
10002 4,0002 0 2,5003 1 TC RELDSP ; releases display from astronaut
10003 4,0003 0 1,3653 1 TC POSTJUMP ; bring back last normal display if ther e
10004 4,0004 05067 0 CAD R PINBRNCH ; was one, OY
; Search table for entry matching major mode number. Table entries
; are sorted by ma jor mode number, so the search occurs in order from
; lowest number to highest.
CHECKTAB EQU *
10005 4,0005 3 1,2050 0 CAF ZERO ; was CA NOV37MM in Block II
10006 4,0006 6 4,6046 0 AD NOV37MM ; the no. of MM in table (minus 1)
; Found the index into the major mode table for entry matching the
; major mode numbe r input by the user.
V37NONO EQU *
10026 4,0026 0 2,4701 0 TC FALTON ; come here if MM requested doesn't exis t
10027 4,0027 0 4,6002 0 TC V37BAD
;----------------- ---------------------------------------------------------
; FCADRMM
;
; For verb 37, two tables are maintained. Each table has an entry for each
; major mode that can be started from the keyboard. The entries are put
; into the table w ith the entry for the highest major mode coming first,
; to the lowest ma jor mode which is the last entry in the table.
;
; The FCADRMM tabl e contains the FCADR of the starting job of the major mode.
;
; The entries in t his table must match the entries in PREMM1 below.
;----------------- ---------------------------------------------------------
FCADRMM1 EQU *
10030 4,0030 22147 0 CAD R P79
10031 4,0031 22142 0 CAD R P78
10032 4,0032 22127 0 CAD R P04
10033 4,0033 22066 1 CAD R P03
10034 4,0034 22036 1 CAD R P02
10035 4,0035 22022 1 CAD R P01
10036 4,0036 22000 1 CAD R P00
; etc *********
;----------------- ---------------------------------------------------------
; PREMM1
;
; The PREMM1 table contains the E-bank, major mode, and priority information.
; It is in the fol lowing form:
;
; PPP PPE EEM MMM MMM
;
; Where,
; the 7 'M' bits contain the major mode number
; the 3 'E' bits contain the E-bank number (ignored in Block I)
; the 5 'P' bits contain the priority at which the job is to be started
;
; The entries in t his table must match the entries in FCADRMM1 above.
;----------------- ---------------------------------------------------------
PREMM1 EQU *
10037 4,0037 26117 1 DS %26117 ; MM 79, PRIO 13
10040 4,0040 26116 0 DS %26116 ; MM 78, PRIO 13
10041 4,0041 26004 1 DS %26004 ; MM 04, PRIO 13
10042 4,0042 26003 0 DS %26003 ; MM 03, PRIO 13
10043 4,0043 26002 1 DS %26002 ; MM 02, PRIO 13
10044 4,0044 26001 1 DS %26001 ; MM 01, PRIO 13
10045 4,0045 26000 0 DS %26000 ; MM 00, PRIO 13
; etc *********
EPREMM1 EQU *
BANK04_2 EQU *
;----------------- ---------------------------------------------------------
; CHARIN -- PROCES S KEYBOARD CHARACTER FROM KEYRUPT
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 310.
;----------------- ---------------------------------------------------------
CHARIN EQU *
12000 5,0000 3 1,2051 1 CAF ONE ; block display syst
12001 5,0001 3 0,0501 0 XCH DSPLOCK ; make dsp syst busy, but save old
12002 5,0002 5 0,0412 0 TS _2122REG ; C(DSPLOCK) for error light reset
12003 5,0003 1 0,0531 1 CCS CADRSTOR ; all keys except ER turn on KR lite if
12004 5,0004 0 5,6006 1 TC *+2 ; CADRSTOR is full. This reminds operato r
12005 5,0005 0 5,6016 0 TC CHARIN2 ; to re-establish a flashing display
12006 5,0006 4 5,6062 1 CS ELRCODE1 ; which he has obscured with displays of
12007 5,0007 6 0,0130 0 AD MPAC ; his own (see remarks preceding routine
; VBRELDSP).
CHARIN2 EQU *
12016 5,0016 3 0,0130 0 XCH MPAC
12017 5,0017 5 0,0414 0 TS CHAR
12020 5,0020 2 0,0000 0 IND EX A
12021 5,0021 0 5,6022 1 TC *+1 ; input_code function
12022 5,0022 0 5,7307 1 TC CHARALRM ; 0
12023 5,0023 0 5,6101 1 TC NUM ; 1
12024 5,0024 0 5,6101 1 TC NUM ; 2
12025 5,0025 0 5,6101 1 TC NUM ; 3
12026 5,0026 0 5,6101 1 TC NUM ; 4
12027 5,0027 0 5,6101 1 TC NUM ; 5
12030 5,0030 0 5,6101 1 TC NUM ; 6
12031 5,0031 0 5,6101 1 TC NUM ; 7
12032 5,0032 0 5,6065 1 TC _89TEST
12033 5,0033 0 5,6065 1 TC _89TEST ; 11 9
12034 5,0034 0 5,7307 1 TC CHARALRM ; 12
12035 5,0035 0 5,7307 1 TC CHARALRM ; 13
12036 5,0036 0 5,7307 1 TC CHARALRM ; 14
12037 5,0037 0 5,7307 1 TC CHARALRM ; 15
12040 5,0040 0 5,7307 1 TC CHARALRM ; 16
12041 5,0041 0 5,7307 1 TC CHARALRM ; 17
12042 5,0042 0 5,6077 1 TC NUM-2 ; 20 0
12043 5,0043 0 5,6272 0 TC VERB ; 21 VERB
12044 5,0044 0 5,7462 0 TC ERROR ; 22 ERROR LIGHT RESET
12045 5,0045 0 5,7307 1 TC CHARALRM ; 23
12046 5,0046 0 5,7307 1 TC CHARALRM ; 24
12047 5,0047 0 5,7307 1 TC CHARALRM ; 25
12050 5,0050 0 5,7307 1 TC CHARALRM ; 26
12051 5,0051 0 5,7307 1 TC CHARALRM ; 27
12052 5,0052 0 5,7307 1 TC CHARALRM ; 30
12053 5,0053 0 5,7327 0 TC VBRELDSP ; 31 KEY RELEASE
12054 5,0054 0 5,6326 0 TC POSGN ; 32 +
12055 5,0055 0 5,6312 1 TC NEGSGN ; 33 -
12056 5,0056 0 5,6063 1 TC ENTERJMP ; 34 ENTER
12057 5,0057 0 5,7307 1 TC CHARALRM ; 35
12060 5,0060 0 5,6412 0 TC CLEAR ; 36 CLEAR
12061 5,0061 0 5,6306 1 TC NOUN ; 37 NOUN
_89TEST EQU *
12065 5,0065 1 0,0466 1 CCS DSPCOUNT
12066 5,0066 0 5,6072 1 TC *+4 ; >0
12067 5,0067 0 5,6072 1 TC *+3 ; +0
12070 5,0070 0 1,2723 0 TC ENDOFJOB ; <0, block data in if DSPCOUNT is <0 or - 0
12071 5,0071 0 1,2723 0 TC ENDOFJOB ; -0
;----------------- ---------------------------------------------------------
; NUM -- PROCESS N UMERICAL KEYBOARD CHARACTER
; Assembles octal, 3 bits at a time. For decimal, it converts incoming word
; as a fraction, k eeping results to DP (double precision).
; Octal results ar e left in XREG, YREG, or ZREG. High part of DEC in XREG,
; YREG, ZREG; the low parts in XREGLP, YREGLP, or ZREGLP).
; DECBRNCH is left at +0 for octal, +1 for +DEC, +2 for -DEC.
; If DSPCOUNT was left -, no more data is accepted.
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 311.
;----------------- ---------------------------------------------------------
NUM EQU *
12101 5,0101 1 0,0466 1 CCS DSPCOUNT
12102 5,0102 0 5,6106 0 TC *+4 ; >0
12103 5,0103 0 5,6106 0 TC *+3 ; +0
12104 5,0104 0 5,6105 0 TC *+1 ; <0, block datain if DSPCOUNT is <0 or - 0
12105 5,0105 0 1,2723 0 TC ENDOFJOB ; -0
12106 5,0106 0 5,6241 0 TC GETINREL
12107 5,0107 1 0,0504 1 CCS CLPASS ; if CLPASS is >0 or +0, make it +0
12110 5,0110 3 1,2050 0 CAF ZERO
12111 5,0111 5 0,0504 0 TS CLPASS
12112 5,0112 0 5,6113 1 TC *+1
12113 5,0113 2 0,0414 1 IND EX CHAR
12114 5,0114 3 1,3772 0 CAF RELTAB
12115 5,0115 7 2,4664 0 MAS K LOW5
12116 5,0116 5 0,0421 0 TS CODE
12117 5,0117 3 1,2050 0 CAF ZERO ; was CA DSPCOUNT in Block II
12120 5,0120 6 0,0466 0 AD DSPCOUNT
12121 5,0121 5 0,0440 1 TS COUNT
12122 5,0122 0 5,7161 0 TC DSPIN
12123 5,0123 3 1,2053 0 CAF THREE
12124 5,0124 7 0,0467 0 MAS K DECBRNCH
12125 5,0125 1 0,0000 0 CCS A ; +0=octal, +1=+dec, +2=-dec
12126 5,0126 0 5,6137 1 TC DECTOBIN ; >0
12127 5,0127 2 0,0434 0 IND EX INREL ; +0 (octal)
12130 5,0130 3 0,0470 1 XCH VERBREG
12131 5,0131 5 0,0022 1 TS CYL
12132 5,0132 4 0,0022 0 CS CYL
12133 5,0133 4 0,0022 0 CS CYL
12134 5,0134 3 0,0022 1 XCH CYL
12135 5,0135 6 0,0414 0 AD CHAR
12136 5,0136 0 5,6155 0 TC ENDNMTST
DECTOBIN EQU *
12137 5,0137 2 0,0434 0 IND EX INREL
12140 5,0140 3 0,0470 1 XCH VERBREG
12141 5,0141 5 0,0130 0 TS MPAC ; sum x 2EXP-14 in MPAC
12142 5,0142 3 1,2050 0 CAF ZERO
12143 5,0143 5 0,0131 1 TS MPAC+1
12144 5,0144 3 1,2060 0 CAF TEN ; 10 x 3EXP-14
12145 5,0145 0 2,4353 0 TC SHORTMP ; 10SUM x 2EXP-28 in MPAC, MPAC+1
ENDNMTST EQU *
12155 5,0155 2 0,0434 0 IND EX INREL
12156 5,0156 5 0,0470 1 TS VERBREG
12157 5,0157 4 0,0466 1 CS DSPCOUNT
12160 5,0160 2 0,0434 0 IND EX INREL
12161 5,0161 6 5,6232 1 AD CRITCON
ENDNUM EQU *
12170 5,0170 3 1,2053 0 CAF THREE
12171 5,0171 7 0,0467 0 MAS K DECBRNCH
12172 5,0172 1 0,0000 0 CCS A
12173 5,0173 0 5,6176 1 TC DECEND
ENDALL EQU *
12174 5,0174 4 0,0466 1 CS DSPCOUNT ; block NUMIN by placing DSPCOUNT
12175 5,0175 0 5,6230 0 TC MORNUM+1 ; negatively
DECEND EQU *
12176 5,0176 4 1,2051 0 CS ONE
12177 5,0177 6 0,0434 1 AD INREL
12214 5,0214 4 0,0131 0 CS MPAC+1 ; - case (was DCS, DXCH in Block II)
12215 5,0215 5 0,0131 1 TS MPAC+1
12216 5,0216 4 0,0132 0 CS MPAC+2
12217 5,0217 5 0,0132 1 TS MPAC+2
PDECSGN EQU *
12220 5,0220 3 0,0132 1 XCH MPAC+2
12221 5,0221 2 0,0434 0 IND EX INREL
12222 5,0222 5 0,0473 1 TS XREGLP-2
12223 5,0223 3 0,0131 1 XCH MPAC+1
12224 5,0224 2 0,0434 0 IND EX INREL
12225 5,0225 5 0,0470 1 TS VERBREG
12226 5,0226 0 5,6174 0 TC ENDALL
MORNUM EQU *
12227 5,0227 1 0,0466 1 CCS DSPCOUNT ; decrement DSPCOUNT
12230 5,0230 5 0,0466 0 TS DSPCOUNT
12231 5,0231 0 1,2723 0 TC ENDOFJOB
CRITCON EQU *
12232 5,0232 00022 1 DS %22 ; dec 18
12233 5,0233 00020 0 DS %20 ; dec 16
12234 5,0234 00012 1 DS %12 ; dec 10
12235 5,0235 00005 1 DS %5
12236 5,0236 00000 1 DS %0
DECON EQU *
12237 5,0237 05174 0 DS %05174 ; 2EXP14/10EXP5 = .16384 DEC
12240 5,0240 13261 0 DS %13261
;----------------- ---------------------------------------------------------
; GETINREL
; Gets proper data register relative address for current C(DSPCOUNT) and
; puts into INREL: +0 VERBREG, 1 NOUNREG, 2 XREG, 3 YREG, 4 ZREG
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 313.
;----------------- ---------------------------------------------------------
GETINREL EQU *
12241 5,0241 2 0,0466 1 IND EX DSPCOUNT
12242 5,0242 3 5,6245 1 CAF INRELTAB
12243 5,0243 5 0,0434 1 TS INREL ; (A TEMP, REG)
12244 5,0244 0 0,0001 0 TC Q
INRELTAB EQU *
12245 5,0245 00004 0 DS %4 ; R3D5, 0 = DSPCOUNT
12246 5,0246 00004 0 DS %4 ; R3D4, 1
12247 5,0247 00004 0 DS %4 ; R3D3, 2
12250 5,0250 00004 0 DS %4 ; R3D2, 3
12251 5,0251 00004 0 DS %4 ; R3D1, 4
12252 5,0252 00003 1 DS %3 ; R2D5, 5
12253 5,0253 00003 1 DS %3 ; R2D4, 6
12254 5,0254 00003 1 DS %3 ; R2D3, 7
12255 5,0255 00003 1 DS %3 ; R2D2, 8D
12256 5,0256 00003 1 DS %3 ; R2D1, 9D
12257 5,0257 00002 0 DS %2 ; R1D5, 10D
12260 5,0260 00002 0 DS %2 ; R1D4, 11D
12261 5,0261 00002 0 DS %2 ; R1D3, 12D
12262 5,0262 00002 0 DS %2 ; R1D2, 13D
12263 5,0263 00002 0 DS %2 ; R1D1, 14D
12264 5,0264 0 5,6271 0 TC CCSHOLE ; no DSPCOUNT numbers
12265 5,0265 00001 0 DS %1 ; ND2, 16D
12266 5,0266 00001 0 DS %1 ; ND1, 17D
12267 5,0267 00000 1 DS %0 ; VD2, 18D
12270 5,0270 00000 1 DS %0 ; VD1, 19D
12271 5,0271 0 1,2723 0 CCSHOLE TC ENDOFJOB ; can't find this anywhere; best guess
;----------------- ---------------------------------------------------------
; VERB
; Verb key was pre ssed; prepare to enter a 2 decimal digit verb.
; Blank the verb d isplay and call ENDOFJOB.
;
; NOUN
; Noun key was pre ssed; prepare to enter a 2 decimal digit noun.
; Blank the noun d isplay and call ENDOFJOB.
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 314.
;----------------- ---------------------------------------------------------
VERB EQU *
12272 5,0272 3 1,2050 0 CAF ZERO
12273 5,0273 5 0,0470 1 TS VERBREG
12274 5,0274 3 2,4675 1 CAF VD1
NVCOM EQU *
12275 5,0275 5 0,0466 0 TS DSPCOUNT
12276 5,0276 0 5,6540 0 TC _2BLANK
12277 5,0277 3 1,2051 1 CAF ONE
12300 5,0300 5 0,0467 1 TS DECBRNCH ; set for dec V/N code
12301 5,0301 3 1,2050 0 CAF ZERO
12302 5,0302 5 0,0502 0 TS REQRET ; set for ENTPAS0
12303 5,0303 3 2,4553 0 CAF ENDINST ; if DSPALARM occurs before first ENTPAS 0
12304 5,0304 5 0,0433 0 TS ENTRET ; or NVSUB, ENTRET must already be set
; to TC ENDOFJOB
12305 5,0305 0 1,2723 0 TC ENDOFJOB
NOUN EQU *
12306 5,0306 3 1,2050 0 CAF ZERO
12307 5,0307 5 0,0471 0 TS NOUNREG
12310 5,0310 3 2,4676 1 CAF ND1 ; ND1, OCT 21 (DEC 17)
12311 5,0311 0 5,6275 1 TC NVCOM
;----------------- ---------------------------------------------------------
; NEGSGN
; Turn the minus s ign on for the register selected by DSPCOUNT.
; Call ENDOFJOB wh en done.
;
; POSGN
; Turn the plus si gn on for the register selected by DSPCOUNT.
; Call ENDOFJOB wh en done.
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 314.
;----------------- ---------------------------------------------------------
NEGSGN EQU *
12312 5,0312 0 5,6367 0 TC SIGNTEST
12313 5,0313 0 5,6353 1 TC M_ON
12314 5,0314 3 1,2052 1 CAF TWO
BOTHSGN EQU *
12315 5,0315 2 0,0434 0 IND EX INREL ; set DEC compu bit to 1 (in DECBRNCH)
12316 5,0316 6 1,2072 0 AD BIT7 ; Bit 5 for R1, bit 4 for R2, bit 3 for R 3
12317 5,0317 6 0,0467 1 AD DECBRNCH
12320 5,0320 5 0,0467 1 TS DECBRNCH
PIXCLPAS EQU *
12321 5,0321 1 0,0504 1 CCS CLPASS ; if CLPASS is + or +0, make it +0
12322 5,0322 3 1,2050 0 CAF ZERO
12323 5,0323 5 0,0504 0 TS CLPASS
12324 5,0324 0 5,6325 0 TC *+1
12325 5,0325 0 1,2723 0 TC ENDOFJOB
POSGN EQU *
12326 5,0326 0 5,6367 0 TC SIGNTEST
12327 5,0327 0 5,6332 0 TC P_ON
12330 5,0330 3 1,2051 1 CAF ONE
12331 5,0331 0 5,6315 0 TC BOTHSGN
;----------------- ---------------------------------------------------------
; P_ON
; Turn the plus si gn on for register selected by DSPCOUNT.
; Return when done .
;
; M_ON
; Turn the minus s ign on for register selected by DSPCOUNT.
; Return when done .
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 314.
;----------------- ---------------------------------------------------------
P_ON EQU *
12332 5,0332 3 0,0001 0 XCH Q ; was LXCH Q in block II
12333 5,0333 5 0,0547 1 TS LXCH_LPRET ; save return address in faux LP
SGNCOM EQU *
12342 5,0342 3 1,2050 0 CAF ZERO
12343 5,0343 5 0,0421 0 TS CODE
12344 5,0344 3 0,0420 1 XCH SGNOFF
12345 5,0345 0 5,7253 1 TC _11DSPIN
M_ON EQU *
12353 5,0353 3 0,0001 0 XCH Q ; was LXCH Q in block II
12354 5,0354 5 0,0547 1 TS LXCH_LPRET ; save return address in faux LP
SGNTAB EQU *
12364 5,0364 00005 1 DS %5 ; -R1
12365 5,0365 00003 1 DS %3 ; -R2
12366 5,0366 00000 1 DS %0 ; -R3
;----------------- ---------------------------------------------------------
; SIGNTEST
; Test whether thi s is a valid point for entering a + or - sign character.
; Returns if valid ; calls ENDOFJOB if invalid.
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 314.
;----------------- ---------------------------------------------------------
SIGNTEST EQU *
12367 5,0367 3 0,0001 0 XCH Q ; was LXCH Q in block II
12370 5,0370 5 0,0547 1 TS LXCH_LPRET ; save return address in faux LP
SGNTST1 EQU *
12404 5,0404 6 0,0466 0 AD DSPCOUNT
;----------------- ---------------------------------------------------------
; CLEAR -- PROCESS CLEAR KEY
; Clear blanks whi ch R1, R2, R3 is current or last to be displayed (pertinent
; XREG, YREG, ZREG is cleared). Successive clears take care of each RX L/
; RC until R1 is d one, then no further action.
;
; The single compo nent load verbs allow only the single RC that is appropriate
; to be cleared.
;
; CLPASS = 0, PASS O, can be backed up
; CLPASS = +NZ, HI PASS, can be backed up
; CLPASS = -NZ, PA SSO, cannot be backed up
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 316.
;----------------- ---------------------------------------------------------
CLEAR EQU *
12412 5,0412 1 0,0466 1 CCS DSPCOUNT
12413 5,0413 6 1,2051 1 AD ONE
12414 5,0414 0 5,6416 1 TC *+2
12415 5,0415 6 1,2051 1 AD ONE
12416 5,0416 2 0,0000 0 IND EX A ; do not change DSPCOUNT because may lat e r
12417 5,0417 3 5,6245 1 CAF INRELTAB ; fail LEGALTST
12420 5,0420 5 0,0434 1 TS INREL ; must set INREL, even for HIPASS
12421 5,0421 1 0,0504 1 CCS CLPASS
12422 5,0422 0 5,6431 1 TC CLPASHI ; +
12423 5,0423 0 5,6425 1 TC *+2 ; +0, if CCLPASS is +0 or -, it is PASS0
12424 5,0424 0 5,6425 1 TC *+1 ; -
12425 5,0425 3 1,2050 0 CAF ZERO ; was CA INREL in Block II
12426 5,0426 6 0,0434 1 AD INREL
12427 5,0427 0 5,6464 1 TC LEGALTST
12430 5,0430 0 5,6454 1 TC CLEAR1
CLPASHI EQU *
12431 5,0431 1 0,0434 0 CCS INREL
12432 5,0432 5 0,0434 1 TS INREL
12433 5,0433 0 5,6464 1 TC LEGALTST
CLEAR1 EQU *
12454 5,0454 0 5,6461 1 TC CLR5
;----------------- ---------------------------------------------------------
; CLR5
; blanks 5 char di splay word by calling _5BLANK, but avoids TC GETINREL.
; Returns when don e.
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 316.
;----------------- ---------------------------------------------------------
CLR5 EQU *
12461 5,0461 3 0,0001 0 XCH Q ; was LXCH Q in block II
12462 5,0462 5 0,0547 1 TS LXCH_LPRET ; save return address in faux LP
12463 5,0463 0 5,6476 1 TC _5BLANK+3 ; uses _5BLANK, but avoids its TC GETINR E L
;----------------- ---------------------------------------------------------
; LEGALTST
; Returns if LEGAL , calls ENDOFJOB if illegal.
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 316.
;----------------- ---------------------------------------------------------
LEGALTST EQU *
12464 5,0464 6 1,2047 0 AD NEG2
12465 5,0465 1 0,0000 0 CCS A
12466 5,0466 0 0,0001 0 TC Q ; LEGAL, INREL G/ 2
12467 5,0467 0 5,6271 0 TC CCSHOLE
12470 5,0470 0 1,2723 0 TC ENDOFJOB ; ILLEGAL, INREL = 0, 1
12471 5,0471 0 0,0001 0 TC Q ; LEGAL, INREL = 2
;----------------- ---------------------------------------------------------
; _5BLANK
; blanks 5 char di splay word in R1,R2,or R3. It also zeroes XREG, YREG or
; ZREG. Place any + DSPCOUNT number for pertinent RC into DSPCOUNT.
; DSPCOUNT is left set to left most DSP numb for RC just blanked.
; Returns when don e.
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 316.
;----------------- ---------------------------------------------------------
_5BLANK EQU *
12473 5,0473 3 0,0001 0 XCH Q ; was LXCH Q in block II
12474 5,0474 5 0,0547 1 TS LXCH_LPRET ; save return address in faux LP
_5BLANK1 EQU *
12515 5,0515 2 0,0434 0 IND EX INREL
12516 5,0516 3 5,6532 0 CAF DOUBLK-2
12517 5,0517 5 0,0466 0 TS DSPCOUNT
12520 5,0520 0 5,6540 0 TC _2BLANK
SINBLANK EQU *
12531 5,0531 00016 0 DS %16 ; DEC 14
12532 5,0532 00005 1 DS %5
12533 5,0533 00004 0 DS %4
DOUBLK EQU *
12534 5,0534 00015 0 DS %15 ; DEC 13
12535 5,0535 00011 1 DS %11 ; DEC 9
12536 5,0536 00003 1 DS %3
;----------------- ---------------------------------------------------------
; _2BLANK
; blanks 2 char, p lace DSP number of left char of the pair into DSPCOUNT.
; This number is l eft in DSPCOUNT. Returns when done.
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 317.
;----------------- ---------------------------------------------------------
_2BLANK EQU *
12540 5,0540 3 0,0001 0 XCH Q
12541 5,0541 5 0,0602 0 TS SAVEQ
BANK40_2 EQU *
;----------------- ---------------------------------------------------------
; ENTER -- PROCESS ENTER KEY
; Enter pass 0 is the execute function. Higher order enters are to load
; data. The sign o f REQRET determines the pass, + for pass 0, - for higher
; passes.
; Machine CADR to be specified (MCTBS) nouns desire an ECADR to be loaded
; when used with l oad verbs, monitor verbs, or display verbs (except
; verb = fixed mem ory display, which requires a FCADR).
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 318.
;----------------- ---------------------------------------------------------
ENTPASHI EQU *
14012 6,0012 3 6,6036 1 CAF MMADREF
14013 6,0013 6 0,0502 0 AD REQRET ; if L/2 char in for MM code, alarm
14021 6,0021 3 1,2053 0 CAF THREE ; if DEC, alarm if L/5 char in for data,
14022 6,0022 7 0,0467 0 MAS K DECBRNCH ; but leave REQRET - and flash on, so
14023 6,0023 1 0,0000 0 CCS A ; operator can supply missing numerical
14024 6,0024 0 6,6026 0 TC *+2 ; characters and continue.
14025 6,0025 0 6,6032 0 TC ACCEPTWD ; octal, any number of char OK.
14026 6,0026 1 0,0466 1 CCS DSPCOUNT
14027 6,0027 0 6,6341 1 TC GODSPALM ; less than 5 char DEC(DSPCOUNT is +)
14030 6,0030 0 6,6341 1 TC GODSPALM ; less than 5 char DEC(DSPCOUNT is +)
14031 6,0031 0 6,6032 0 TC *+1 ; 5 char in (DSPCOUNT is -)
ACCEPTWD EQU *
14032 6,0032 4 0,0502 1 CS REQRET ; 5 char in (DSPCOUNT is -)
14033 6,0033 5 0,0502 0 TS REQRET ; set REQRET +
14034 6,0034 0 2,4770 0 TC FLASHOFF
14035 6,0035 0 0,0502 0 TC REQRET
14037 6,0037 00034 0 LOWVERB DS 28 ; lower verb that avoids nount test.
ENTPAS0 EQU *
14040 6,0040 3 1,2050 0 CAF ZERO ; noun verb sub enters here
14041 6,0041 5 0,0467 1 TS DECBRNCH
14042 6,0042 4 2,4675 0 CS VD1 ; block further num char, so that stray
14043 6,0043 5 0,0466 0 TS DSPCOUNT ; char do not get into verb or nount lig h t s .
; test VERB
TESTVB EQU *
14044 6,0044 4 0,0470 0 CS VERBREG ; if verb is G/E LOWVB, skip noun test
14045 6,0045 5 0,0530 1 TS VERBSAVE ; save verb for possible recycle.
14046 6,0046 6 6,6037 0 AD LOWVERB ; LOWVERB - VB
; test NOUN
TESTNN EQU *
14054 6,0054 3 6,6124 0 CAF LODNNLOC ; was DCA LODNNLOC, DXCH Z in Block II
14055 6,0055 0 1,3526 0 TC DXCHJUMP ; bank jump to noun table read rtne
; NNADTEM was -0, so just increment noun address (in NOUNCADR) and
; set the result i n NOUNADD
REQADD EQU *
14073 6,0073 3 1,2062 1 CAF BIT15 ; set CLPASS for pass0 only
14074 6,0074 5 0,0504 0 TS CLPASS
14075 6,0075 4 2,4553 1 CS ENDINST ; test if reach here from internal or
14076 6,0076 6 0,0433 0 AD ENTEXIT ; from external
14106 6,0106 1 0,0467 0 CCS DECBRNCH ; alarm and recycle if decimal used
14107 6,0107 0 2,4474 1 TC ALMCYCLE ; for MCTBS
14110 6,0110 4 2,4675 0 CS VD1 ; octal used OK
14111 6,0111 5 0,0466 0 TS DSPCOUNT ; block num char in
; noun address has now been loaded into the Z register. Copy it into
; NOUNCADR and NOU NADD and then jump to the VERBFAN.
USEADD EQU *
14117 6,0117 3 0,0474 0 XCH ZREG
14120 6,0120 0 2,4616 1 TC SETNCADR ; ECADR into NOUNCADR, set EB, NOUNADD
14121 6,0121 3 6,6124 0 CAF LODNNLOC ; was DCA LODNNLOC, DXCH Z in Block II
14122 6,0122 0 1,3526 0 TC DXCHJUMP ; bank jump to noun table read rtne
14124 6,0124 16114 1 LODNNLOC DS LODNNTAB ; *** uses 2 words in Block II ***
14125 6,0125 00000 1 DS 0
INTMCTBS EQU *
14131 6,0131 0 2,4616 1 TC SETNCADR ; store addr (A) into NOUNCADR and NOUNA D D
14132 6,0132 4 1,2055 1 CS FIVE ; NVSUB call left CADR in MAPC+2 for mac h
14133 6,0133 6 0,0470 1 AD VERBREG ; CADR to be specified.
14134 6,0134 1 0,0000 0 CCS A ; was BZF VERBFAN in Block II
14135 6,0135 0 6,6141 0 TC *+4 ; >0
14136 6,0136 0 6,6140 1 TC *+2 ; +0
14137 6,0137 0 6,6141 0 TC *+2 ; <0
14140 6,0140 0 6,6151 1 TC VERBFAN ; -0, don't display CADR if verb = 05
14141 6,0141 3 2,4637 1 CAF R3D1 ; verb not = 05, display CADR
14142 6,0142 5 0,0466 0 TS DSPCOUNT
; NNADTEM was + (n ormal), so just use the noun address straight from the
; noun table (curr ently in A). The CCS instruction used to test the
; address also dec remented it, so we add one to restore the correct address.
VERBFAN EQU *
14151 6,0151 4 6,6163 1 CS LST2CON
14152 6,0152 6 0,0470 1 AD VERBREG ; verb-LST2CON
VBFANDIR EQU *
14164 6,0164 2 0,0470 0 IND EX VERBREG
14165 6,0165 3 6,6167 1 CAF VERBTAB
14166 6,0166 0 1,3712 0 TC BANKJUMP
VERBTAB EQU *
14167 6,0167 14341 1 CAD R GODSPALM ; VB00 Illegal
14170 6,0170 14355 1 CAD R DSPA ; VB01 display oct comp 1 (R1)
14171 6,0171 14363 1 CAD R DSPB ; VB02 display oct comp 2 (R1)
14172 6,0172 14370 0 CAD R DSPC ; VB03 display oct comp 3 (R1)
14173 6,0173 14350 1 CAD R DSPAB ; VB04 display oct comp 1,2 (R1,R2)
14174 6,0174 14343 0 CAD R DSPABC ; VB05 display oct comp 1,2,3 (R1,R2,R3)
14175 6,0175 14510 0 CAD R DECDSP ; VB06 decimal display
14176 6,0176 12704 1 CAD R DSPDPDEC ; VB07 DP decimal display (R1,R2)
14177 6,0177 14341 1 CAD R GODSPALM ; VB08 spare
14200 6,0200 14341 1 CAD R GODSPALM ; VB09 spare
14201 6,0201 14341 1 CAD R GODSPALM ; VB10 spare
14202 6,0202 15146 0 CAD R MONITOR ; VB11 monitor oct comp 1 (R1)
14203 6,0203 15146 0 CAD R MONITOR ; VB12 monitor oct comp 2 (R2)
14204 6,0204 15146 0 CAD R MONITOR ; VB13 monitor oct comp 3 (R3)
14205 6,0205 15146 0 CAD R MONITOR ; VB14 monitor oct comp 1,2 (R1,R2)
14206 6,0206 15146 0 CAD R MONITOR ; VB15 monitor oct comp 1,2,3 (R1,R2,R3)
14207 6,0207 15146 0 CAD R MONITOR ; VB16 monitor decimal
14210 6,0210 15146 0 CAD R MONITOR ; VB17 monitor DP decimal (R1,R2)
14211 6,0211 14341 1 CAD R GODSPALM ; VB18 spare
14212 6,0212 14341 1 CAD R GODSPALM ; VB19 spare
14213 6,0213 14341 1 CAD R GODSPALM ; VB20 spare
14214 6,0214 14663 1 CAD R ALOAD ; VB21 load comp 1 (R1)
14215 6,0215 14673 0 CAD R BLOAD ; VB22 load comp 2 (R2)
14216 6,0216 14707 1 CAD R CLOAD ; VB23 load comp 3 (R3)
14217 6,0217 14635 1 CAD R ABLOAD ; VB24 load comp 1,2 (R1,R2)
14220 6,0220 14600 1 CAD R ABCLOAD ; VB25 load comp 1,2,3 (R1,R2,R3)
14221 6,0221 14341 1 CAD R GODSPALM ; VB26 spare
14222 6,0222 15301 1 CAD R DSPFMEM ; VB27 fixed memory display
14223 6,0223 14341 1 CAD R GODSPALM ; VB28 spare
14224 6,0224 14341 1 CAD R GODSPALM ; VB29 spare
14225 6,0225 15420 0 CAD R VBRQEXEC ; VB30 request executive
14226 6,0226 15446 0 CAD R VBRQWAIT ; VB31 request waitlist
14227 6,0227 13325 1 CAD R VBRESEQ ; VB32 resequence
14230 6,0230 13315 1 CAD R VBPROC ; VB33 proceed (without data)
14231 6,0231 13323 1 CAD R VBTERM ; VB34 terminate
14232 6,0232 15572 0 CAD R VBTSTLTS ; VB35 test lights
14233 6,0233 02126 0 CAD R SLAP1 ; VB36 fresh start
14234 6,0234 15356 0 CAD R MMCHANG ; VB37 change major mode
14235 6,0235 14341 1 CAD R GODSPALM ; VB38 spare
14236 6,0236 14341 1 CAD R GODSPALM ; VB39 spare
;----------------- ---------------------------------------------------------
; MIXNOUN
; NNADTAB contains a relative address, IDADDREL(in low 10 bits), referring
; to where 3 conse cutive addresses are stored (in IDADDTAB).
; MIXNOUN gets dat a and stores in MIXTEMP, +1, +2. It sets NOUNADD for
; MIXTEMP.
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 322.
;----------------- ---------------------------------------------------------
MIXNOUN EQU *
14237 6,0237 0 6,6341 1 TC GODSPALM ; not currently implemented
;----------------- ---------------------------------------------------------
; DPTEST
; enter with SF ro utine code number (SF ROUT) in A. Returns to L+1 if no DP.
; Returns to L+2 i f DP.
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 322. Also, see p. 263.
;----------------- ---------------------------------------------------------
DPTEST EQU *
14240 6,0240 5 0,0552 0 TS DPTEST_A
14241 6,0241 3 0,0001 0 XCH Q
14242 6,0242 5 0,0553 1 TS DPTEST_Q
DPTEST1 EQU *
14262 6,0262 2 0,0553 0 IND EX DPTEST_Q
14263 6,0263 0 0,0001 0 TC 1 ; return to L+2
;----------------- ---------------------------------------------------------
; REQDATX, REQDATY , REQDATZ
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 323.
;----------------- ---------------------------------------------------------
REQDATX EQU *
14264 6,0264 3 0,0001 0 XCH Q
14265 6,0265 5 0,0554 0 TS REQ_Q
REQDATY EQU *
14270 6,0270 3 0,0001 0 XCH Q
14271 6,0271 5 0,0554 0 TS REQ_Q
REQDATZ EQU *
14274 6,0274 3 0,0001 0 XCH Q
14275 6,0275 5 0,0554 0 TS REQ_Q
;----------------- ---------------------------------------------------------
; UPDATNN, UPDATVB
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 323.
;----------------- ---------------------------------------------------------
14311 6,0311 3 6,6124 0 CAF LODNNLOC ; was DCA LODNNLOC, DXCH Z in Block II
14312 6,0312 0 1,3526 0 TC DXCHJUMP ; bank jump to noun table read rtne
PUTADD EQU *
14320 6,0320 0 2,4616 1 TC SETNCADR ; ECADR into NOUNCADR, sets NOUNADD
UPDAT1 EQU *
14335 6,0335 0 1,3653 1 TC POSTJUMP ; can't use SWCALL to go to DSPDECVN, si n c e
14336 6,0336 13156 1 DS GOVNUPDT ; UPDATVB can itself be called by SWCALL
14337 6,0337 0 0,0414 0 TC UPDATRET
;----------------- ---------------------------------------------------------
; GOALMCYC, GODSPA LM
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 324.
;----------------- ---------------------------------------------------------
14340 6,0340 0 2,4474 1 GOALMCYC TC ALMCYCLE ; needed because bankjump cant handle F/ F
;----------------- ---------------------------------------------------------
; DISPLAY VERBS
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 326.
;----------------- ---------------------------------------------------------
DSPABC EQU *
14343 6,0343 4 1,2052 0 CS TWO
14344 6,0344 0 6,6414 0 TC COMPTEST
14345 6,0345 2 0,0442 1 IND EX NOUNADD
14346 6,0346 4 0,0002 1 CS 2
14347 6,0347 3 0,0427 0 XCH BUF+2
DSPAB EQU *
14350 6,0350 4 1,2051 0 CS ONE
14351 6,0351 0 6,6414 0 TC COMPTEST
14352 6,0352 2 0,0442 1 IND EX NOUNADD
14353 6,0353 4 0,0001 1 CS 1
14354 6,0354 3 0,0426 1 XCH BUF+1
DSPA EQU *
14355 6,0355 0 6,6435 0 TC DECTEST
14356 6,0356 0 6,6462 1 TC TSTFORDP
14357 6,0357 2 0,0442 1 IND EX NOUNADD
14360 6,0360 4 0,0000 0 CS 0
DSPCOM1 EQU *
14361 6,0361 3 0,0425 1 XCH BUF
14362 6,0362 0 6,6375 0 TC DSPCOM2
DSPB EQU *
14363 6,0363 4 1,2051 0 CS ONE
14364 6,0364 0 6,6430 0 TC DCOMPTST
14365 6,0365 2 0,0442 1 IND EX NOUNADD
14366 6,0366 4 0,0001 1 CS 1
14367 6,0367 0 6,6361 0 TC DSPCOM1
DSPC EQU *
14370 6,0370 4 1,2052 0 CS TWO
14371 6,0371 0 6,6430 0 TC DCOMPTST
14372 6,0372 2 0,0442 1 IND EX NOUNADD
14373 6,0373 4 0,0002 1 CS 2
14374 6,0374 0 6,6361 0 TC DSPCOM1
DSPCOM2 EQU *
14375 6,0375 4 1,2052 0 CS TWO ; A B C AB ABC
14376 6,0376 6 0,0470 1 AD VERBREG ; -1 -0 +1 +2 +3 IN A
14377 6,0377 1 0,0000 0 CCS A ; +0 +0 +0 +1 +2 IN A AFTER CCS
14400 6,0400 0 6,6403 0 TC DSPCOM3
14401 6,0401 0 0,0433 0 TC ENTEXIT
14402 6,0402 0 6,6403 0 TC *+1
DSPCOM3 EQU *
14403 6,0403 5 0,0417 0 TS DISTEM ; +0, +1, +2 into DISTEM
14404 6,0404 2 0,0000 0 IND EX A
14405 6,0405 3 2,4635 0 CAF R1D1
14406 6,0406 5 0,0466 0 TS DSPCOUNT
14407 6,0407 2 0,0417 1 IND EX DISTEM
14410 6,0410 4 0,0425 0 CS BUF
14411 6,0411 0 6,7310 1 TC DSPOCTWD
14412 6,0412 3 0,0417 0 XCH DISTEM
14413 6,0413 0 6,6377 1 TC DSPCOM2+2
;----------------- ---------------------------------------------------------
; COMPTEST
; alarms if compon ent number of verb (load or oct display) is
; greater than the highest component number of noun.
;
; DCOMPTST
; alarms if decima l only bit (bit 4 of comp code number) = 1.
; If not, it perfo rms regular COMPTEST.
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 326.
;----------------- ---------------------------------------------------------
COMPTEST EQU *
14414 6,0414 5 0,0420 1 TS SFTEMP1 ; - verb comp
14415 6,0415 3 0,0001 0 XCH Q ; was LXCH Q in block II
14416 6,0416 5 0,0547 1 TS LXCH_LPRET ; save return address in faux LP
COMPTST1 EQU *
14417 6,0417 0 6,6501 0 TC GETCOMP
14420 6,0420 0 2,4647 0 TC LEFT5
14421 6,0421 7 1,2053 1 MAS K THREE ; noun comp
14422 6,0422 6 0,0420 1 AD SFTEMP1 ; noun comp - verb comp
14423 6,0423 1 0,0000 0 CCS A
14424 6,0424 0 0,0547 1 TC LXCH_LPRET ; noun comp G/ verb comp; return
14425 6,0425 0 5,6271 0 TC CCSHOLE
14426 6,0426 0 6,6341 1 TC GODSPALM ; noun comp L/ verb comp
NDOMPTST EQU *
14427 6,0427 0 0,0547 1 TC LXCH_LPRET ; noun comp = verb comp; return
DCOMPTST EQU *
14430 6,0430 5 0,0420 1 TS SFTEMP1 ; - verb comp
;----------------- ---------------------------------------------------------
; DECTEST
; alarms if dec on ly bit = 1 (bit 4 of comp code number1). Returns if not.
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 327.
;----------------- ---------------------------------------------------------
DECTEST EQU *
14435 6,0435 3 0,0001 0 XCH Q ; was QXCH MPAC+2 in block II
14436 6,0436 5 0,0132 1 TS MPAC+2
;----------------- ---------------------------------------------------------
; DCTSTCYC
; alarms and recyc les if dec only bit = 1 (bit 4 of comp code number).
; Returns if not. Used by load verbs.
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 327.
;----------------- ---------------------------------------------------------
DCTSTCYC EQU *
14444 6,0444 3 0,0001 0 XCH Q ; was LXCH Q in block II
14445 6,0445 5 0,0547 1 TS LXCH_LPRET ; save return address in faux LP
;----------------- ---------------------------------------------------------
; NOUNTEST
; alarms if no-loa d bit (bit 5 of comp code number) = 1
; if not, it retur ns.
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 327.
;----------------- ---------------------------------------------------------
NOUNTEST EQU *
14453 6,0453 3 0,0001 0 XCH Q ; was LXCH Q in block II
14454 6,0454 5 0,0547 1 TS LXCH_LPRET ; save return address in faux LP
;----------------- ---------------------------------------------------------
; TSTFORDP
; test for DP. If so, get minor part only.
; The Block II ver sion had some code that checked for a -1 in NNADTEM
; which meant use an I/O channel instead of memory. This was removed
; for the Block I.
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 327.
;----------------- ---------------------------------------------------------
TSTFORDP EQU *
14462 6,0462 3 0,0001 0 XCH Q ; was LXCH Q in block II
14463 6,0463 5 0,0547 1 TS LXCH_LPRET ; save return address in faux LP
;----------------- ---------------------------------------------------------
; GETCOMP
;
; noun address is in NNADTEM
; noun type is in NNTYPTEM
;
; MIXBR is an enum erated type:
; 1 = normal nouns
; 2 = mixed nouns
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 328.
;----------------- ---------------------------------------------------------
GETCOMP EQU *
14501 6,0501 2 0,0435 1 IND EX MIXBR ; normal mixed
14502 6,0502 3 6,6476 1 CAF COMPICK-1 ; ADRES NNTYPTEM ADRES NNADTEM
;----------------- ---------------------------------------------------------
; DECDSP -- DECIMA L DISPLAY
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 328.
;----------------- ---------------------------------------------------------
DECDSP EQU *
14510 6,0510 0 6,6501 0 TC GETCOMP
14511 6,0511 0 2,4647 0 TC LEFT5
14512 6,0512 7 1,2053 1 MAS K THREE
14513 6,0513 5 0,0414 0 TS DECOUNT ; comp number into DECOUNT
DSPDCGET EQU *
14514 6,0514 5 0,0417 0 TS DECTEM ; picks up data
14515 6,0515 6 0,0442 0 AD NOUNADD ; DECTEM 1COMP +0, 2COMP +1, 3COMP +2
14516 6,0516 2 0,0000 0 IND EX A
14517 6,0517 4 0,0000 0 CS 0
14520 6,0520 2 0,0417 1 IND EX DECTEM
14521 6,0521 3 0,0472 0 XCH XREG ; cant use BUF since DMP uses it
14522 6,0522 1 0,0417 1 CCS DECTEM
14523 6,0523 0 6,6514 1 TC DSPDCGET ; more to get
DSPDCPUT EQU *
14524 6,0524 3 1,2050 0 CAF ZERO ; displays data
14525 6,0525 5 0,0131 1 TS MPAC+1 ; DECOUNT 1COMP +0, 2COMP +1, 3COMP +2
14526 6,0526 5 0,0132 1 TS MPAC+2
14527 6,0527 2 0,0414 1 IND EX DECOUNT
14530 6,0530 3 2,4635 0 CAF R1D1
14531 6,0531 5 0,0466 0 TS DSPCOUNT
14532 6,0532 2 0,0414 1 IND EX DECOUNT
14533 6,0533 4 0,0472 1 CS XREG
14534 6,0534 5 0,0130 0 TS MPAC
14535 6,0535 0 6,7003 0 TC SFCONUM ; 2X (SF CON NUMB) in A
14536 6,0536 5 0,0420 1 TS SFTEMP1
14537 6,0537 3 6,6550 1 CAF GTSFOUTL ; was DCA GTSFOUTL, DXCH Z in Block II
14540 6,0540 0 1,3526 0 TC DXCHJUMP ; bank jump to SF constant table read rt n e
DSPSFNOR EQU *
14546 6,0546 0 6,6762 1 TC SFRUTNOR
14547 6,0547 0 6,6560 1 TC DECDSP3
14550 6,0550 16162 0 GTSFOUTL DS GTSFOUT
DSPDCEND EQU *
14551 6,0551 0 1,3565 1 TC BANKCALL ; all SFOUT routines end here
14552 6,0552 13064 1 DS DSPDECWD
14553 6,0553 1 0,0414 1 CCS DECOUNT
14554 6,0554 0 6,6556 1 TC *+2
14555 6,0555 0 0,0433 0 TC ENTEXIT
14556 6,0556 5 0,0414 0 TS DECOUNT
14557 6,0557 0 6,6524 1 TC DSPDCPUT ; more to display
DECDSP3 EQU *
14560 6,0560 2 0,0000 0 IND EX A
14561 6,0561 3 6,6563 1 CAF SFOUTABR
14562 6,0562 0 1,3712 0 TC BANKJUMP
SFOUTABR EQU *
14563 6,0563 13265 1 CAD R PREDSPAL ; 0, alarm if dec display with octal onl y n o u n
14564 6,0564 14551 0 CAD R DSPDCEND ; 1
14565 6,0565 12564 0 CAD R DEGOUTSF ; 2
14566 6,0566 12644 1 CAD R ARTOUTSF ; 3
14567 6,0567 00000 1 CAD R 0 ; 4 **********
14570 6,0570 00000 1 CAD R 0 ; 5 **********
14571 6,0571 00000 1 CAD R 0 ; 6 **********
14572 6,0572 00000 1 CAD R 0 ; 7 **********
14573 6,0573 16000 0 CAD R HMSOUT ; 8
14574 6,0574 00000 1 CAD R 0 ; 9 **********
14575 6,0575 00000 1 CAD R 0 ; 10 *********
14576 6,0576 00000 1 CAD R 0 ; 11 *********
14577 6,0577 00000 1 CAD R 0 ; 12 *********
BANK41_2 EQU *
DEGOUTSF EQU *
12564 5,0564 3 1,2050 0 CAF ZERO
12565 5,0565 5 0,0132 1 TS MPAC+2 ; set index for full scale
12566 5,0566 0 5,6603 1 TC FIXRANGE
12567 5,0567 0 5,6571 1 TC *+2 ; no augment needed (SFTEMP1 and 2 are 0 )
12570 5,0570 0 5,6572 1 TC SETAUG ; set augmenter according to C(MPAC+2)
12571 5,0571 0 5,6616 0 TC DEGCOM
SETAUG EQU *
12572 5,0572 3 1,2050 0 CAF ZERO ; loads SFTEMP1 and SFTEMP2 with the
12573 5,0573 2 0,0132 0 IND EX MPAC+2 ; DP augmenter constant
12574 5,0574 6 5,6640 0 AD DEGTAB ; was DCA DEGTAB, DXCH SFTEMP1 in Block I I
12575 5,0575 3 0,0420 1 XCH SFTEMP1
FIXRANGE EQU *
12603 5,0603 3 0,0001 0 XCH Q
12604 5,0604 5 0,0563 1 TS FR_RETQ
DEGCOM EQU *
12616 5,0616 3 1,2050 0 CAF ZERO ; was INDEX MPAC+2, DCA DEGTAB, DXCH MPA C i n
Block II
12617 5,0617 2 0,0132 0 IND EX MPAC+2 ; loads multiplier, does SHORTMP, and
12620 5,0620 6 5,6641 1 AD DEGTAB+1 ; adds augmenter
12621 5,0621 3 0,0131 1 XCH MPAC+1 ; adjusted angle in A
12627 5,0627 3 0,0421 0 XCH SFTEMP1+1 ; was DXCH SFTEMP1, DAS MPAC in Block II
12630 5,0630 6 0,0131 1 AD MPAC+1
12631 5,0631 5 0,0131 1 TS MPAC+1 ; skip on overflow
12632 5,0632 3 1,2050 0 CAF ZERO ; otherwise, make interword carry=0
DEGTAB EQU *
12640 5,0640 05605 1 DS %05605 ; Hi part of .18
12641 5,0641 03656 1 DS %03656 ; Lo part of .18
12642 5,0642 16314 0 DS %16314 ; Hi part of .45
12643 5,0643 31463 1 DS %31463 ; Lo part of .45
ARTOUTSF EQU *
12644 5,0644 3 0,0421 0 XCH SFTEMP1+1 ; was DXCH SFTEMP1, DXCH MPAC in Block I I
12645 5,0645 3 0,0131 1 XCH MPAC+1 ; assumes point at left of DP SFCON
12646 5,0646 3 0,0420 1 XCH SFTEMP1
12647 5,0647 3 0,0130 0 XCH MPAC
;----------------- ---------------------------------------------------------
; READLO
; Picks up fresh d ata for both HI and LO and leaves it in MPAC, MPAC+1.
; This is needed f or time display. It zeroes MPAC+2, but does not force
; TPAGREE.
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 332.
;----------------- ---------------------------------------------------------
READLO EQU *
12653 5,0653 3 0,0001 0 XCH Q
12654 5,0654 5 0,0441 0 TS TEM4 ; save return address
READLO1 EQU *
12665 5,0665 5 0,0576 0 TS ADDRWD1 ; temp store addr for immediate use belo w
12666 5,0666 3 1,2050 0 CAF ZERO ; was INDEX A, DCA Q, DXCH MPAC in Block I I
12667 5,0667 2 0,0576 1 IND EX ADDRWD1
12670 5,0670 6 0,0000 1 AD 0
12671 5,0671 5 0,0130 0 TS MPAC
BANK40_3 EQU *
;----------------- ---------------------------------------------------------
; HMSOUT -- OUTPUT SCALE FACTOR ROUTINE
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 333.
;----------------- ---------------------------------------------------------
HMSOUT EQU *
16000 7,0000 0 1,3565 1 TC BANKCALL ; read fresh data for HI and LO into MPA C ,
16001 7,0001 12653 1 DS READLO ; MPAC+1.
16025 7,0025 3 7,6051 0 CAF HRCON1 ; was DCA HRCON1, DXCH MPAC in Block II
16026 7,0026 5 0,0130 0 TS MPAC
16027 7,0027 3 7,6052 0 CAF HRCON1+1
16030 7,0030 5 0,0131 1 TS MPAC+1 ; minutes, seconds have been removed
16036 7,0036 0 1,3565 1 TC BANKCALL ; use regular DSPDECWD, with round off
16037 7,0037 13064 1 DS DSPDECWD
SEPSECNR EQU *
16053 7,0053 3 0,0001 0 XCH Q ; this entry avoid rounding by .5 secs
16054 7,0054 5 0,0441 0 TS SEPSCRET
SEPMIN EQU *
16074 7,0074 3 0,0001 0 XCH Q ; finds whole minutes in bit13
16075 7,0075 5 0,0441 0 TS SEPMNRET ; of LOWTEMOUT and above.
BANK42_2 EQU *
;----------------- ---------------------------------------------------------
; DSPDPDEC
; This is a specia l purpose verb for displaying a double precision AGC
; word as 10 decim al digits on the AGC display panel. It can be used with
; any noun, except mixed nouns. It displays the contents of the register
; NOUNADD is point ing to. If used with nouns which are inherently not DP
; such as the CDU counters, the display will be garbage.
; Display is in R1 and R2 only with the sign in R1.
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 353.
;----------------- ---------------------------------------------------------
DSPDPDEC EQU *
12704 5,0704 2 0,0435 1 IND EX MIXBR
12705 5,0705 0 5,6705 0 TC *+0
12706 5,0706 0 5,6710 1 TC *+2 ; normal noun
12707 5,0707 0 5,7267 0 TC DSPALARM
BANK40_4 EQU *
;================= =========================================================
; PINBALL GAME LOA D VERBS (file:bank41_2.asm)
;
; If alarm conditi on is detected during execute, check fail light is
; turned on and EN DOFJOB. If alarm condition is detected during enter
; of data, check f ail is turned on and it recycles to execute of
; original load ve rb. Recycle caused by 1) decimal machine CADR,
; 2) mixture of oc tal/decimal data, 3) octal data into decimal only
; noun, 4) decimal data into octal only noun, 5) data too large for
; scale, 6) fewer than two data words loaded for HRS, MIN, SEC noun.
; For #2-6, alarm and recycle occur at final enter of set; for #1,
; alarm and recycl e occur at enter of CADR.
;
; AGC Block II COL OSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 337-343.
;================= =========================================================
ABCLOAD EQU *
14600 6,0600 4 1,2052 0 CS TWO
14601 6,0601 0 6,6414 0 TC COMPTEST
14602 6,0602 0 6,6453 0 TC NOUNTEST ; test if noun can be loaded
PUTXYZ EQU *
14614 6,0614 4 1,2056 1 CS SIX ; test that the 3 data words loaded are
14615 6,0615 0 6,6736 0 TC ALLDC_OC ; all dec or all oct
14616 6,0616 3 6,6124 0 CAF LODNNLOC ; was DCA LODNNLOC, DXCH Z in Block II
14617 6,0617 0 1,3526 0 TC DXCHJUMP ; bank jump to noun table read rtne
; Omitted a bunch of code from here that does special stuff if the noun=7.
; (a noun that ope rates on I/O channels and flagbits)
ABLOAD EQU *
14635 6,0635 4 1,2051 0 CS ONE
14636 6,0636 0 6,6414 0 TC COMPTEST
14637 6,0637 0 6,6453 0 TC NOUNTEST ; test if noun can be loaded
PUTXY EQU *
14646 6,0646 4 1,2055 1 CS FIVE ; test that the 2 data words loaded are
14647 6,0647 0 6,6736 0 TC ALLDC_OC ; all dec or all oct
14650 6,0650 3 6,6124 0 CAF LODNNLOC ; was DCA LODNNLOC, DXCH Z in Block II
14651 6,0651 0 1,3526 0 TC DXCHJUMP ; bank jump to noun table read rtne
ALOAD EQU *
14663 6,0663 0 6,6264 1 TC REQDATX
14664 6,0664 3 6,6124 0 CAF LODNNLOC ; was DCA LODNNLOC, DXCH Z in Block II
14665 6,0665 0 1,3526 0 TC DXCHJUMP ; bank jump to noun table read rtne
BLOAD EQU *
14673 6,0673 4 1,2051 0 CS ONE
14674 6,0674 0 6,6414 0 TC COMPTEST
14675 6,0675 3 1,2062 1 CAF BIT15 ; set CLPASS for PASS0 only
14676 6,0676 5 0,0504 0 TS CLPASS
14677 6,0677 0 6,6270 1 TC REQDATY
14700 6,0700 3 6,6124 0 CAF LODNNLOC ; was DCA LODNNLOC, DXCH Z in Block II
14701 6,0701 0 1,3526 0 TC DXCHJUMP ; bank jump to noun table read rtne
14702 6,0702 3 1,2051 1 CAF ONE
14703 6,0703 0 6,7031 1 TC PUTCOM
14704 6,0704 2 0,0442 1 IND EX NOUNADD
14705 6,0705 5 0,0001 0 TS 1
14706 6,0706 0 6,6723 1 TC LOADLV
CLOAD EQU *
14707 6,0707 4 1,2052 0 CS TWO
14710 6,0710 0 6,6414 0 TC COMPTEST
14711 6,0711 3 1,2062 1 CAF BIT15 ; set CLPASS for PASS0 only
14712 6,0712 5 0,0504 0 TS CLPASS
14713 6,0713 0 6,6274 0 TC REQDATZ
14714 6,0714 3 6,6124 0 CAF LODNNLOC ; was DCA LODNNLOC, DXCH Z in Block II
14715 6,0715 0 1,3526 0 TC DXCHJUMP ; bank jump to noun table read rtne
14716 6,0716 3 1,2052 1 CAF TWO
14717 6,0717 0 6,7031 1 TC PUTCOM
14720 6,0720 2 0,0442 1 IND EX NOUNADD
14721 6,0721 5 0,0002 0 TS 2
14722 6,0722 0 6,6723 1 TC LOADLV ; yes, COLOSSUS actually did this
LOADLV EQU *
14723 6,0723 3 1,2050 0 CAF ZERO
14724 6,0724 5 0,0467 1 TS DECBRNCH
14725 6,0725 4 1,2050 1 CS ZERO
14726 6,0726 5 0,0503 1 TS LOADSTAT
14727 6,0727 4 2,4675 0 CS VD1 ; to block numerical chars and
14730 6,0730 5 0,0466 0 TS DSPCOUNT ; clears after a completed load
14731 6,0731 0 1,3653 1 TC POSTJUMP ; after completed load, go to RECALTST
14732 6,0732 13413 0 DS RECALTST ; to see if there is RECALL from ENDIDLE
ALLDC_OC EQU *
14736 6,0736 5 0,0414 0 TS DECOUNT ; test that data words loaded are either
14737 6,0737 3 0,0001 0 XCH Q ; (needed to handle TCF conversion below )
14740 6,0740 5 0,0556 1 TS ALLDC_OC_Q ; save return address
14741 6,0741 4 0,0467 0 CS DECBRNCH ; all dec or all oct; alarms if not
14742 6,0742 5 0,0021 1 TS SR
14743 6,0743 4 0,0021 0 CS SR
14744 6,0744 4 0,0021 0 CS SR ; shifted right 2
14745 6,0745 1 0,0000 0 CCS A ; dec comp bits in low 3
14746 6,0746 0 6,6750 0 TC *+2 ; some ones in low 3 (was TCF in Block I I )
14747 6,0747 0 0,0556 1 TC ALLDC_OC_Q ; all zeros, all oct, OK so return
14750 6,0750 6 0,0414 0 AD DECOUNT ; dec comp = 7 for 3comp, =6 for 2comp
; (but it has been decremented by CCS)
14751 6,0751 1 0,0000 0 CCS A ; must match 6 for 3comp, 5 for 2comp
14752 6,0752 0 6,6756 0 TC *+4 ; >0
14753 6,0753 0 6,6755 0 TC *+2 ; +0
14754 6,0754 0 6,6756 0 TC *+2 ; <0
14755 6,0755 0 6,6757 1 TC *+2 ; -0, was BZF *+2 in Block II
14756 6,0756 0 2,4474 1 TC ALMCYCLE ; alarm and recycle (does not return)
;----------------- ---------------------------------------------------------
; SFRUTNOR
; gets SF routine number for normal case.
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 340.
;----------------- ---------------------------------------------------------
SFRUTNOR EQU *
14762 6,0762 3 0,0001 0 XCH Q
14763 6,0763 5 0,0411 0 TS EXITEM ; can't use L for return. TESTFORDP uses L .
14764 6,0764 3 2,4665 0 CAF MID5
14765 6,0765 7 0,0444 1 MAS K NNTYPTEM
14766 6,0766 0 2,4640 1 TC RIGHT5
14767 6,0767 0 0,0411 0 TC EXITEM ; SF routine number in A
;----------------- ---------------------------------------------------------
; SFRUTMIX
; gets SF routine number for mixed case.
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 340.
;----------------- ---------------------------------------------------------
SFRUTMIX EQU *
14770 6,0770 3 0,0001 0 XCH Q ; gets SF routine number for mixed case
14771 6,0771 5 0,0411 0 TS EXITEM
SFCONUM EQU *
15003 6,1003 3 0,0001 0 XCH Q ; gets 2X (SF constant number)
15004 6,1004 5 0,0411 0 TS EXITEM
15005 6,1005 2 0,0435 1 IND EX MIXBR
15006 6,1006 0 6,7006 0 TC *+0
15007 6,1007 0 6,7025 1 TC CONUMNOR ; normal noun
15010 6,1010 2 0,0414 1 IND EX DECOUNT ; mixed noun
15011 6,1011 3 6,7022 0 CAF DISPLACE
15012 6,1012 5 0,0560 1 TS SFCONUM_L ; put TC GOQ, TC RIGHT5, or TC LEFT5 in L
15013 6,1013 2 0,0414 1 IND EX DECOUNT
15014 6,1014 3 2,4664 1 CAF LOW5
15015 6,1015 7 0,0444 1 MAS K NNTYPTEM
15016 6,1016 2 0,0560 0 IND EX SFCONUM_L
15017 6,1017 0 0,0000 1 TC 0
DISPLACE EQU *
15022 6,1022 0 6,6761 1 TC GOQ
15023 6,1023 0 2,4640 1 TC RIGHT5
15024 6,1024 0 2,4647 0 TC LEFT5
CONUMNOR EQU *
15025 6,1025 3 2,4664 1 CAF LOW5 ; normal noun always gets low 5 of
15026 6,1026 7 0,0444 1 MAS K NNTYPTEM ; NNTYPTAB for SF CONUM
15027 6,1027 6 0,0000 1 DOU BLE
15030 6,1030 0 0,0411 0 TC EXITEM ; 2X (SF constant number) in A
PUTCOM EQU *
15031 6,1031 5 0,0414 0 TS DECOUNT
15032 6,1032 3 0,0001 0 XCH Q
15033 6,1033 5 0,0412 0 TS DECRET
15034 6,1034 3 1,2050 0 CAF ZERO
15035 6,1035 5 0,0136 0 TS MPAC+6
15036 6,1036 2 0,0414 1 IND EX DECOUNT
15037 6,1037 3 0,0475 1 XCH XREGLP
15040 6,1040 5 0,0131 1 TS MPAC+1
15041 6,1041 2 0,0414 1 IND EX DECOUNT
15042 6,1042 3 0,0472 0 XCH XREG
15043 6,1043 5 0,0130 0 TS MPAC
15044 6,1044 2 0,0435 1 IND EX MIXBR
15045 6,1045 0 6,7045 1 TC *
15046 6,1046 0 6,7077 0 TC PUTNORM ; normal noun
; if mixnoun, plac e address for component K into NOUNADD, set EBANK bits.
15047 6,1047 2 0,0414 1 IND EX DECOUNT ; set IDADDTAB entry for component K
15050 6,1050 3 1,2050 0 CAF ZERO ; of noun
15051 6,1051 6 0,0445 1 AD IDAD1TEM ; was CA IDAD1TEM in Block II
15052 6,1052 7 2,4672 1 MAS K LOW11 ; (ECADR) SUBK for current comp of noun
15053 6,1053 0 2,4616 1 TC SETNCADR ; ECADR into NOUNCADR, sets EB, NOUNADD
15054 6,1054 2 0,0000 1 EXT END ; C(NOUNADD) in A upon return
15055 6,1055 6 0,0414 0 SU DECOUNT ; place (ESUBK)-K into NOUNADD
15056 6,1056 5 0,0442 0 TS NOUNADD
15057 6,1057 1 0,0467 0 CCS DECBRNCH
15060 6,1060 0 6,7114 1 TC PUTDECSF ; + dec
15061 6,1061 0 6,6444 0 TC DCTSTCYC ; +0 octal
15062 6,1062 0 6,6770 1 TC SFRUTMIX ; test if dec only bit = 1. If so,
15063 6,1063 0 6,6240 1 TC DPTEST ; alarm and recycle. If not, continue.
15064 6,1064 0 6,7111 1 TC PUTCOM2 ; no DP
; test for DP scal e for oct load. If so,
; +0 into major pa rt. Set NOUNADD for
; loading octal wo rd into minor part.
PUTDPCOM EQU *
15065 6,1065 3 1,2050 0 CAF ZERO ; was INCR NOUNADD in Block II
15066 6,1066 6 0,0442 0 AD NOUNADD ; DP (RSUBK)-K+1 or E+1
15067 6,1067 6 1,2051 1 AD ONE
15070 6,1070 5 0,0442 0 TS NOUNADD
15073 6,1073 3 1,2050 0 CAF ZERO ; NOUNADD set for minor part
15074 6,1074 2 0,0414 1 IND EX DECOUNT
15075 6,1075 5 17,7776 0 TS -1 ; zero major part (ESUBK or E1)
15076 6,1076 0 6,7111 1 TC PUTCOM2
PUTNORM EQU *
15077 6,1077 0 2,4625 1 TC SETNADD ; ECADR from NOUNCADR, sets EB, NOUNADD
15100 6,1100 1 0,0467 0 CCS DECBRNCH
15101 6,1101 0 6,7114 1 TC PUTDECSF ; +DEC
15102 6,1102 0 6,6444 0 TC DCTSTCYC ; +0 octal
15103 6,1103 0 6,6762 1 TC SFRUTNOR ; test if dec only bit = 1. If so,
15104 6,1104 0 6,6240 1 TC DPTEST ; alarm and recycle. If not, continue.
15105 6,1105 0 6,7111 1 TC PUTNORM_1 ; no DP
15106 6,1106 3 1,2050 0 CAF ZERO
15107 6,1107 5 0,0414 0 TS DECOUNT
15110 6,1110 0 6,7065 0 TC PUTDPCOM
PUTCOM2 EQU *
15111 6,1111 3 0,0130 0 XCH MPAC
15112 6,1112 0 0,0412 0 TC DECRET
PUTDECSF EQU *
15114 6,1114 0 6,7003 0 TC SFCONUM ; 2X (SF CON NUM) in A
15115 6,1115 5 0,0420 1 TS SFTEMP1
15116 6,1116 3 6,7113 0 CAF GTSFINLC ; was DCA GTSFINLC, DXCH Z in Block II
15117 6,1117 0 1,3526 0 TC DXCHJUMP ; bank jump to SF const table read rtne
; loads SFTEMP1, S FTEMP2
15120 6,1120 2 0,0435 1 IND EX MIXBR
15121 6,1121 0 6,7121 1 TC *
15122 6,1122 0 6,7125 0 TC PUTSFNOR
15123 6,1123 0 6,6770 1 TC SFRUTMIX
15124 6,1124 0 6,7126 0 TC PUTDCSF2
15125 6,1125 0 6,6762 1 PUTSFNOR TC SFRUTNOR
BANK41_3 EQU *
DEGINSF EQU *
12727 5,0727 0 2,4374 0 TC DMP ; SF routine for dec degrees
12730 5,0730 06772 0 ADR ES DEGCON1 ; mult by 5.5 5(10)X2EXP-3
12731 5,0731 1 0,0131 0 CCS MPAC+1 ; this rounds off MPAC+1 before shift
12732 5,0732 3 1,2066 0 CAF BIT11 ; left 3, and causes 360.00 to OF/UF
12733 5,0733 0 5,6735 0 TC *+2 ; when shifted left and alarm
12734 5,0734 4 1,2066 1 CS BIT11
12735 5,0735 6 0,0131 1 AD MPAC+1
12736 5,0736 0 5,7016 1 TC _2ROUND+2
12737 5,0737 0 2,4721 1 TC TPSL1 ; left 1
12740 5,0740 0 2,4721 1 DEGINSF2 TC TPSL1 ; left 2
12741 5,0741 0 5,7025 1 TC TESTOFUF
12742 5,0742 0 2,4721 1 TC TPSL1 ; returns if no OF/UF (left 3)
12743 5,0743 1 0,0130 1 CCS MPAC
12744 5,0744 0 5,6750 0 TC SIGNFIX ; if +, go to SIGNFIX
12745 5,0745 0 5,6750 0 TC SIGNFIX ; if +0, go to SIGNFIX
12746 5,0746 4 0,0000 0 COM ; if -, use -MAGNITUDE + 1
12747 5,0747 5 0,0130 0 TS MPAC ; -f -0; use +0
12750 5,0750 1 0,0136 1 SIGNFIX CCS MPAC+6
12751 5,0751 0 5,6766 0 TC SGNTO1 ; if overflow
12752 5,0752 0 5,6762 1 TC ENDSCALE ; no overflow/underflow
12753 5,0753 1 0,0130 1 CCS MPAC ; if UF, force sign to 0 except -180
12754 5,0754 0 5,6271 0 TC CCSHOLE
12755 5,0755 0 5,6764 1 TC NEG180
12756 5,0756 0 5,6757 1 TC *+1
12757 5,0757 3 0,0130 0 XCH MPAC
12760 5,0760 7 1,2106 0 MAS K POSMAX
12761 5,0761 5 0,0130 0 TS MPAC
ENDSCALE EQU *
12762 5,0762 0 1,3653 1 TC POSTJUMP
12763 5,0763 15111 1 CAD R PUTCOM2
ARTHINSF EQU *
12776 5,0776 0 2,4374 0 TC DMP ; scales MPAC, +1 by SFTEMP1, SFTEMP2
12777 5,0777 00420 1 ADR ES SFTEMP1 ; assumes point between HI and LO parts
13000 5,1000 3 0,0132 1 XCH MPAC+2 ; of SFCON, shifts results left by 14.
13001 5,1001 3 0,0131 1 XCH MPAC+1 ; (by taking results from MPAC+1, MPAC+2 )
13002 5,1002 3 0,0130 0 XCH MPAC
13010 5,1010 0 2,4474 1 TC ALMCYCLE ; too large a load, alarm and recycle
BINROUND EQU *
13011 5,1011 0 5,7014 0 TC _2ROUND
13012 5,1012 0 5,7025 1 TC TESTOFUF
13013 5,1013 0 5,6762 1 TC ENDSCALE
_2ROUND EQU *
13014 5,1014 3 0,0131 1 XCH MPAC+1
13015 5,1015 6 0,0000 1 DOU BLE
13016 5,1016 5 0,0131 1 TS MPAC+1
13017 5,1017 0 0,0001 0 TC Q ; if MPAC+1 does not OF/UF
13020 5,1020 6 0,0130 0 AD MPAC
13021 5,1021 5 0,0130 0 TS MPAC
13022 5,1022 0 0,0001 0 TC Q ; if MPAC does not OF/UF
13023 5,1023 5 0,0136 0 TS MPAC+6
13024 5,1024 0 0,0001 0 _2RNDEND TC Q
TESTOFUF EQU *
13025 5,1025 1 0,0136 1 CCS MPAC+6 ; returns if no OF/UF
13026 5,1026 0 2,4474 1 TC ALMCYCLE ; OF, alarm and recycle
13027 5,1027 0 0,0001 0 TC Q
13030 5,1030 0 2,4474 1 TC ALMCYCLE ; UF, alarm and recycle
BANK40_5 EQU *
ORG BANK42_2
BANK42_3 EQU *
ORG BANK41_3
INC L bank41_3.asm ; COLOSSUS pp. 349-351
;================= =========================================================
; DISPLAY ROUTINES (file:bank41_3.asm)
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, pp . 349-351.
;================= =========================================================
MONITOR EQU *
15146 6,1146 4 6,7155 0 CS BIT15_14
15147 6,1147 7 0,0506 0 MAS K NOUNCADR
MONIT1 EQU *
15150 6,1150 5 0,0131 1 TS MPAC+1 ; temp storage
MONIT2 EQU *
15164 6,1164 3 1,2101 0 CAF LOW7
15165 6,1165 7 0,0470 0 MAS K VERBREG
15166 6,1166 0 2,4647 0 TC LEFT5
15167 6,1167 5 0,0022 1 TS CYL
15170 6,1170 4 0,0022 0 CS CYL
15171 6,1171 3 0,0022 1 XCH CYL
15172 6,1172 6 0,0471 0 AD NOUNREG
15173 6,1173 5 0,0130 0 TS MPAC ; temp storage
15174 6,1174 3 1,2050 0 CAF ZERO
15175 6,1175 5 0,0501 0 TS DSPLOCK ; +0 into DSPLOCK so monitor can run
15176 6,1176 1 0,0531 1 CCS CADRSTOR ; turn off KR lite if CADRSTOR and DSPLI S T
15177 6,1177 0 6,7201 0 TC *+2 ; are both empty. (Lite comes on if new
15200 6,1200 0 2,5026 0 TC RELDSP1 ; monitor is keyed in over old monitor.)
15201 6,1201 2 0,0000 0 INH INT
15202 6,1202 1 0,0507 1 CCS MONSAVE
15203 6,1203 0 6,7207 0 TC *+4 ; if MONSAVE was +, no request
15207 6,1207 3 0,0131 1 XCH MPAC+1 ; was DXCH MPAC, DXCH MONSAVE
15210 6,1210 3 0,0510 0 XCH MONSAVE+1
15211 6,1211 3 0,0130 0 XCH MPAC ; place monitor verb and noun into MONSA V E
15212 6,1212 3 0,0507 0 XCH MONSAVE ; zero the kill monitor bit
MONREQ EQU *
15215 6,1215 0 6,7300 0 TC LODSAMPT ; called by waitlist (see COLOSSUS p. 37 4 )
15216 6,1216 1 0,0510 1 CCS MONSAVE1 ; time is snatched in RUPT for NOUN 65
15217 6,1217 0 6,7223 0 TC *+4 ; if killer bit = 0, enter requests
15220 6,1220 0 6,7223 0 TC *+3 ; if killer bit = 0, enter requests
15221 6,1221 0 6,7232 0 TC KILLMON ; if killer bit = 1, no requests
15222 6,1222 0 6,7232 0 TC KILLMON ; if killer bit = 1, no requests
KILLMON EQU *
15232 6,1232 3 1,2050 0 CAF ZERO ; zero MONSAVE and turn killer bit off
15233 6,1233 5 0,0507 0 TS MONSAVE
15234 6,1234 5 0,0510 0 TS MONSAVE1 ; turn off kill monitor bit
15235 6,1235 0 1,2413 0 TC TASKOVER ; turn off external monitor bit
ORG BANKFF_1
INC L bankff_1.asm ; COLOSSUS pp. 351
;================= =========================================================
; DISPLAY ROUTINES (file:bankff_1.asm)
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, pp . 351.
;================= =========================================================
PASTEVB EQU *
04435 4435 3 2,4473 0 CAF MID7
04436 4436 7 0,0511 0 MAS K MONSAVE2 ; NVMONOPT paste option
04437 4437 5 0,0571 1 TS PASTE_TMP
PASTEOPT EQU *
04451 4451 5 0,0020 0 TS CYR ; shift right 7, was TS EDOP, CA EDOP in B I I
04452 4452 4 0,0020 1 CS CYR
04453 4453 4 0,0020 1 CS CYR
04454 4454 4 0,0020 1 CS CYR
04455 4455 4 0,0020 1 CS CYR
04456 4456 4 0,0020 1 CS CYR
04457 4457 4 0,0020 1 CS CYR
04460 4460 3 0,0020 0 XCH CYR
04461 4461 7 1,2101 1 MAS K LOW7 ; place monitor verb or please verb into
ORG BANK41_4
INC L bank41_4.asm ; COLOSSUS pp. 352
;================= =========================================================
; DISPLAY ROUTINES (file:bank41_4.asm)
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, pp . 352.
;================= =========================================================
;----------------- ---------------------------------------------------------
; DSPFMEM -- DISPL AY FIXED MEMORY
; Used to display (in octal) any fixed register. It is used with NOUN =
; machine CADR to be specified. The FCADR of the desired location is then
; punched in. It h andles F/F (FCADR 4000-7777)
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 352.
;----------------- ---------------------------------------------------------
DSPFMEM EQU *
15301 6,1301 3 2,4635 0 CAF R1D1 ; If F/F, DATACALL uses bank 02 or 03
15302 6,1302 5 0,0466 0 TS DSPCOUNT
DSPSIGN EQU *
13031 5,1031 3 0,0001 0 XCH Q
13032 5,1032 5 0,0441 0 TS DSPWDRET
;----------------- ---------------------------------------------------------
; DSPRND
; Round up decimal fraction by 5 EXP -6. This was entirely coded in
; Block II instruc tions, so I translated it to the functional
; equivalent in Bl ock I code.
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 353.
;----------------- ---------------------------------------------------------
DSPRND EQU *
13046 5,1046 3 5,7117 1 CAF DECROUND
13047 5,1047 6 0,0131 1 AD MPAC+1
13050 5,1050 5 0,0131 1 TS MPAC+1 ; skip on overflow
13051 5,1051 3 1,2050 0 CAF ZERO ; otherwise, make interword carry=0
13052 5,1052 6 0,0130 0 AD MPAC
13053 5,1053 5 0,0130 0 TS MPAC ; skip on overflow
13054 5,1054 0 0,0001 0 TC Q ; return
;----------------- ---------------------------------------------------------
; DSPDECTWD -- DIS PLAY DECIMAL WORD
; Converts C(MPAC, MPAC+1) into a sign and 5 char decimal starting in loc
; specified in DSP COUNT. it rounds by 5 exp 6.
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 353.
;----------------- ---------------------------------------------------------
DSPDECWD EQU *
13064 5,1064 3 0,0001 0 XCH Q
13065 5,1065 5 0,0412 0 TS WDRET
DSPDCWD1 EQU *
13071 5,1071 5 0,0434 1 TS WDCNT
13072 5,1072 3 2,4700 1 CAF BINCON
13073 5,1073 0 2,4353 0 TC SHORTMP
TRACE1 EQU *
13074 5,1074 2 0,0130 1 IND EX MPAC
13075 5,1075 3 1,3772 0 CAF RELTAB
13076 5,1076 7 2,4664 0 MAS K LOW5
13077 5,1077 5 0,0421 0 TS CODE
13100 5,1100 3 1,2050 0 CAF ZERO
13101 5,1101 3 0,0132 1 XCH MPAC+2
13102 5,1102 3 0,0131 1 XCH MPAC+1
13103 5,1103 5 0,0130 0 TS MPAC
13104 5,1104 3 0,0466 0 XCH DSPCOUNT
TRACE1S EQU *
13105 5,1105 5 0,0440 1 TS COUNT
13106 5,1106 1 0,0000 0 CCS A ; decrement DSPCOUNT except at +0
13107 5,1107 5 0,0466 0 TS DSPCOUNT
13110 5,1110 0 5,7161 0 TC DSPIN
13111 5,1111 1 0,0434 0 CCS WDCNT
13112 5,1112 0 5,7071 0 TC DSPDCWD1 ; >0, not done yet
;----------------- ---------------------------------------------------------
; DSPDECNR
; Converts C(MPAC, MPAC+1) into a sign and 5 char decimal starting in loc
; specified in DSP COUNT. It does not round.
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 354.
;----------------- ---------------------------------------------------------
DSPDECNR EQU *
13120 5,1120 3 0,0001 0 XCH Q
13121 5,1121 5 0,0412 0 TS WDRET
13122 5,1122 0 5,7031 1 TC DSPSIGN
13123 5,1123 0 5,7070 1 TC DSPDCWD1-1
;----------------- ---------------------------------------------------------
; DSPDC2NR
; Converts C(MPAC, MPAC+1) into a sign and 2 char decimal starting in loc
; specified by DSP COUNT. It does not round.
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 354.
;----------------- ---------------------------------------------------------
DSPDC2NR EQU *
13124 5,1124 3 0,0001 0 XCH Q
13125 5,1125 5 0,0412 0 TS WDRET
13126 5,1126 0 5,7031 1 TC DSPSIGN
13127 5,1127 3 1,2051 1 CAF ONE
13130 5,1130 0 5,7071 0 TC DSPDCWD1
;----------------- ---------------------------------------------------------
; DSP2DEC
; Converts C(MPAC) and C(MPAC+1) into a sign and 10 char decimal starting
; in the loc speci fied in DSPCOUNT.
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 354.
;----------------- ---------------------------------------------------------
DSP2DEC EQU *
13131 5,1131 3 0,0001 0 XCH Q
13132 5,1132 5 0,0412 0 TS WDRET
13133 5,1133 3 1,2050 0 CAF ZERO
13134 5,1134 5 0,0421 0 TS CODE
13135 5,1135 3 1,2053 0 CAF THREE
13136 5,1136 0 5,7253 1 TC _11DSPIN ; -R2 off
13137 5,1137 3 1,2054 1 CAF FOUR
13140 5,1140 0 5,7253 1 TC _11DSPIN ; +R2 off
13141 5,1141 0 5,7031 1 TC DSPSIGN
13142 5,1142 3 2,4636 0 CAF R2D1
13143 5,1143 0 5,7071 0 END2DEC TC DSPDCWD1
;----------------- ---------------------------------------------------------
; DSPDECVN
; Displays C(A) up on entry as a 2 char decimal beginning in the
; loc specified in DSPCOUNT.
; C(A) should be i n form N x 2EXP-14. This is scaled to form N/100 before
; display conversi on.
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 353.
;----------------- ---------------------------------------------------------
DSPDECVN EQU *
13144 5,1144 2 0,0000 1 EXT END
13145 5,1145 4 5,7155 0 MP VNDSPCON ; mult by .01
GOVNUPDT EQU *
13156 5,1156 0 5,7144 1 TC DSPDECVN ; this is not for general use. Really pa r t
13157 5,1157 0 1,3653 1 TC POSTJUMP ; of UPDATVB
13160 5,1160 14337 0 DS UPDAT1+2
BANK40_6 EQU *
;----------------- ---------------------------------------------------------
; DSPOCTWD -- DISP LAY OCTAL WORD
; Displays C(A) up on entry as a 5 char octal starting in the DSP char
; specified in DSP COUNT. It stops after 5 char have been displayed.
;
;
; DSP2BIT -- DISPL AY 2 OCTAL CHARS
; Displays C(A) up on entry as a 2 char oct beginning in the DSP
; loc specified in DSPCOUNT by pre-cycling right C(A) and using
; the logic of the 5 char octal display.
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 355/356.
;----------------- ---------------------------------------------------------
DSPOCTWD EQU *
15310 6,1310 5 0,0022 1 TS CYL
15311 6,1311 3 0,0001 0 XCH Q
15312 6,1312 5 0,0412 0 TS WDRET ; must use the same return as DSP2BIT
WDAGAIN EQU *
15317 6,1317 5 0,0434 1 TS WDCNT
15320 6,1320 4 0,0022 0 CS CYL
15321 6,1321 4 0,0022 0 CS CYL
15322 6,1322 4 0,0022 0 CS CYL
15323 6,1323 4 0,0000 0 CS A
OCTBACK EQU *
15337 6,1337 1 0,0434 0 CCS WDCNT
15340 6,1340 0 6,7317 0 TC WDAGAIN
DSPLW EQU *
15341 6,1341 4 2,4675 0 CS VD1 ; to block numerical characters, clears
15342 6,1342 5 0,0466 0 TS DSPCOUNT
15343 6,1343 0 0,0412 0 TC WDRET ; * return
DSP2BIT EQU *
15344 6,1344 5 0,0020 0 TS CYR
15345 6,1345 3 0,0001 0 XCH Q
15346 6,1346 5 0,0412 0 TS WDRET
15347 6,1347 3 1,2051 1 CAF ONE
15350 6,1350 5 0,0434 1 TS WDCNT
15351 6,1351 4 0,0020 1 CS CYR
15352 6,1352 4 0,0020 1 CS CYR
15353 6,1353 3 0,0020 0 XCH CYR
15354 6,1354 5 0,0022 1 TS CYL
15355 6,1355 0 6,7324 0 TC WDAGAIN+5
BANK41_6 EQU *
;----------------- ---------------------------------------------------------
; DSPIN -- DISPLAY RELAY CODE
;
; For DSPIN, place 0-25 oct into COUNT to select the character (same as DSPCOUN T ) ,
; 5 bit relay code into CODE. Both are destroyed. If bit 14 of COUNT is 1, sign i s
; blanked with lef t char.
; For DSPIN11, pla ce 0,1 into CODE, 2 into COUNT, rel address of DSPTAB entry
; into DSREL.
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 356.
;----------------- ---------------------------------------------------------
DSPIN EQU *
13161 5,1161 3 0,0001 0 XCH Q ; cant use L for RETURN, since many of t h e
13162 5,1162 5 0,0411 0 TS DSEXIT ; routines calling DSPIN use L as RETURN
; Set DSREL to ind ex into DSPTAB; the index corresponds to the display characte r
; referenced by CO UNT (which is derived from DSPCOUNT)
; Check COUNT (der ived from DSPCOUNT) to find whether the character to be
; displayed is in the right (Bits 5-1) or left (Bits 10-6) bits of the
; DSPTAB word.
; Set COUNT as an enumerated type; tells how to mask the new character
; into the relay w ord.
; 0 = mask new cha racter into right side of relayword (bits 5-1)
; 1 = mask into le ft side (bits 10-6) and leave old sign (bit 11) alone.
; 2 = mask into le ft side (bits 10-6) and blank sign bit (bit 11)
; New display char acter in CODE has been bit-shifted into the correct (left
; or right) bit po sition. All other bits are zeroed.
DSPIN1 EQU *
13206 5,1206 2 0,0000 0 INH INT
; Get the existing display word from DSPTAB. Words that have already been
; displayed will b e positive; words yet to be displayed will be negative.
; Use CCS to load the absolute value of the display word. Since CCS decrements
; it, we need to a dd 1 to restore the value.
; Now, mask off th e portion of the old relay word corresponding to the
; new character. S ubtract the new character from the old to see whether
; they are the sam e.
; Old code same as new code? If so, we don't need to redisplay it.
; Store new DSPTAB word and get the old (previous) word. If the old word is
; negative, it had not been displayed yet, so NOUT (the count of undisplayed
; words) has alrea dy been incremented for this DSPTAB word. If the old word
; is positive, it has already been displayed, so we need to increment NOUT
; to tell DSPOUT t o display the new word.
13242 5,1242 3 0,0505 1 XCH NOUT ; DSPTAB entry was + (was INCR NOUT in B l o c k
II)
13243 5,1243 6 1,2051 1 AD ONE
13244 5,1244 5 0,0505 1 TS NOUT
DSMSK EQU *
13247 5,1247 00037 0 DS %00037 ; COUNT=0
13250 5,1250 01740 0 DS %01740 ; COUNT=1
13251 5,1251 02000 0 DS %02000 ; COUNT=2
13252 5,1252 03740 1 DS %03740 ; COUNT=3
_11DSPIN EQU *
13253 5,1253 5 0,0436 0 TS DSREL
13254 5,1254 3 1,2052 1 CAF TWO
13255 5,1255 5 0,0440 1 TS COUNT
13256 5,1256 3 0,0001 0 XCH Q ; must use same return as DSPIN
13257 5,1257 5 0,0411 0 TS DSEXIT
13260 5,1260 0 5,7206 1 TC DSPIN1
DSPOCTIN EQU *
13261 5,1261 0 5,7161 0 TC DSPIN ; so DSPOCTWD doesn't use SWCALL
13262 5,1262 3 5,7264 0 CAF *+2
13263 5,1263 0 1,3712 0 TC BANKJUMP
13264 5,1264 15337 1 ENDSPOCT DS OCTBACK
PREDSPAL EQU *
13265 5,1265 4 2,4675 0 CS VD1
13266 5,1266 5 0,0466 0 TS DSPCOUNT
DSPALARM EQU *
13267 5,1267 4 5,7314 1 CS NVSBENDL
13270 5,1270 6 0,0433 0 AD ENTEXIT
CHARALRM EQU *
13307 5,1307 0 2,4701 0 TC FALTON ; not NVSUB initiated, turn on OPR error
13310 5,1310 0 1,2723 0 TC ENDOFJOB
;----------------- ---------------------------------------------------------
; ALMCYCLE
; Turns on check f ail light, redisplays the original verb that was executed,
; and recycles to execute the original verb/noun combination that was last
; executed. Used f or bad data during load verbs and by MCTBS. Also by MMCHANG
; if 2 numerical c hars were not punched in for MM code.
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 358.
;----------------- ---------------------------------------------------------
ALMCYCLE EQU *
04474 4474 0 2,4701 0 TC FALTON ; turn on check fail light
04475 4475 4 0,0530 0 CS VERBSAVE ; get original verb that was executed
04476 4476 5 0,0502 0 TS REQRET ; set for ENTPAS0
04477 4477 0 1,3565 1 TC BANKCALL ; puts original verb into VERBREG and
04500 4500 14326 0 DS UPDATVB-1 ; displays it in verb lights
04501 4501 0 1,3653 1 TC POSTJUMP
04502 4502 14002 0 ENDALM DS ENTER
BANKFF_3 EQU *
;----------------- ---------------------------------------------------------
; MMCHANG -- MAJOR MODE CHANGE
; Uses noun displa y until ENTER; then it uses MODE display. It goes to
; MODROUT with the new MM code in A, but not displayed in MM lights.
; It demands 2 num erical characters be punched in for new MM code.
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 359.
;----------------- ---------------------------------------------------------
MMCHANG EQU *
15356 6,1356 0 6,7404 0 TC REQMM ; ENTPASHI assumes the TC GRQMM at MMCHA N G
; if this moves at all, must change
; MMADREF at ENTPA SHI
15357 6,1357 3 1,2074 0 CAF BIT5 ; OCT 20 = ND2
15360 6,1360 6 0,0466 0 AD DSPCOUNT ; DSPCOUNT must = -ND2
15366 6,1366 0 2,4474 1 TC ALMCYCLE ; DSPCOUNT not -ND2. Alarm and recycle.
;----------------- ---------------------------------------------------------
; VBRQEXEC -- REQU EST EXECUTIVE
;
; Enters request t o EXEC for any address with any priority. It does ENDOFJOB
; after entering r equest. Display syst is released. It assumes NOUN 26 has been
; preloaded with:
; COMPONENT 1 -- p riority (bits 10-14), bit1=0 for NOVAC, bit1=1 for FINDVAC
; COMPONENT 2 -- j ob CADR (14 bit; was 12 bit in Block II)
; COMPONENT 3 -- n ot used (was BBCON in Block II)
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 360.
;----------------- ---------------------------------------------------------
VBRQEXEC EQU *
15420 6,1420 3 1,2100 1 CAF BIT1
15421 6,1421 7 0,0534 1 MAS K DSPTEM1
15422 6,1422 1 0,0000 0 CCS A
15423 6,1423 0 6,7444 1 TC SETVAC ; if bit1=1, FINDVAC
15424 6,1424 3 2,4667 1 CAF TCNOVAC ; if bit1=0, NOVAC
REQEX1 EQU *
15425 6,1425 5 0,0130 0 TS MPAC ; TC NOVAC or TC FINDVAC into MPAC
15426 6,1426 4 1,2100 0 CS BIT1
15427 6,1427 7 0,0534 1 MAS K DSPTEM1
15430 6,1430 5 0,0133 0 TS MPAC+3 ; PRIO into MPAC+3 as a temp (was +4)
REQUESTC EQU *
15431 6,1431 0 2,5003 1 TC RELDSP
15432 6,1432 3 1,2050 0 CAF ZERO ; was CA ENDINST in Block II
15433 6,1433 6 2,4553 0 AD ENDINST
15434 6,1434 5 0,0132 1 TS MPAC+2 ; TC ENDOFJOB into MPAC+2 (was +3)
15435 6,1435 3 1,2050 0 CAF ZERO ; set BBCON for Block II dropped
15436 6,1436 6 0,0535 1 AD DSPTEM1+1 ; job adres into MPAC+1
15437 6,1437 5 0,0131 1 TS MPAC+1
SETVAC EQU *
15444 6,1444 3 2,4671 0 CAF TCFINDVAC
15445 6,1445 0 6,7425 0 TC REQEX1
;----------------- ---------------------------------------------------------
; VBRQWAIT -- REQU EST WAITLIST
;
; Enters request t o WAITLIST for any address with any delay. It does ENDOFJOB
; after entering r equest. Display syst is released. It assumes NOUN 26 has been
; preloaded with:
; COMPONENT 1 -- d elay (low bits)
; COMPONENT 2 -- t ask CADR (14 bit; was 12 bit in Block II)
; COMPONENT 3 -- n ot used (was BBCON in Block II)
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 360.
;----------------- ---------------------------------------------------------
VBRQWAIT EQU *
15446 6,1446 3 2,4670 1 CAF TCWAIT
15447 6,1447 5 0,0130 0 TS MPAC ; TC WAITLIST into MPAC
15450 6,1450 3 1,2050 0 CAF ZERO ; was CA DSPTEM1 in Block II
15451 6,1451 6 0,0534 0 AD DSPTEM1 ; time delay
15452 6,1452 0 6,7430 1 ENDRQWT TC REQUESTC-1
BANK41_7 EQU *
;----------------- ---------------------------------------------------------
; VBPROC -- PROCEE D WITHOUT DATA
; VBTERM -- TERMIN ATE
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 360.
;----------------- ---------------------------------------------------------
VBPROC EQU *
13315 5,1315 3 1,2051 1 CAF ONE ; proceed without data
13316 5,1316 5 0,0503 1 TS LOADSTAT
13317 5,1317 0 2,4536 0 TC KILMONON ; turn on kill monitor bit
13320 5,1320 0 2,5003 1 TC RELDSP
13321 5,1321 0 2,4770 0 TC FLASHOFF
13322 5,1322 0 5,7413 0 TC RECALTST ; see if there is any recall from endidl e
VBTERM EQU *
13323 5,1323 4 1,2051 0 CS ONE
13324 5,1324 0 5,7316 1 TC VBPROC+1 ; term verb sets loadstat neg
;----------------- ---------------------------------------------------------
; VBRESEQ
; Wakes ENDIDLE at same line as final enter of load (L+3). Main use is
; intended as resp onse to internally initiated flashing displays in ENDIDLE.
; Should not be us ed with load verbs, please perform, or please mark verbs
; because they alr eady use L+3 in another context.
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 361.
;----------------- ---------------------------------------------------------
VBRESEQ EQU *
13325 5,1325 4 1,2050 1 CS ZERO ; make it look like data in.
13326 5,1326 0 5,7316 1 TC VBPROC+1
;----------------- ---------------------------------------------------------
; VBRELDSP
; This routine alw ays turns off the UPACT light and always clears
; DSPLOCK.
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 362.
;----------------- ---------------------------------------------------------
VBRELDSP EQU *
UNSUSPEN EQU *
13342 5,1342 3 1,2050 0 CAF ZERO ; external monitor is suspended
13343 5,1343 5 0,0501 0 TS DSPLOCK ; just unsuspend it by clearing DSPLOCK
13344 5,1344 1 0,0531 1 CCS CADRSTOR ; turn key release light off if both
13345 5,1345 0 1,2723 0 TC ENDOFJOB ; CADRSTOR and DSPLIST are empty
13346 5,1346 0 2,5026 0 TC RELDSP1
13347 5,1347 0 1,2723 0 TC ENDOFJOB
BANK40_8 EQU *
; COLOSSUS p. 364 - comments are taken from the Block I flow charts with some
; additional annot ations by me.
NVSUB EQU *
04503 4503 5 0,0565 1 TS NVSUB_A ; more gymnastics for Block II conversio n
; save C(A). C(A) should be holding the noun/verb code; C(L) should
; be holding NVMON OPT options. In this Block I version, the NVMONOPT
; options should b e placed in NVSUB_L before calling NVMONOPT.
NVMONOPT EQU *
04507 4507 5 0,0420 1 TS NVTEMP
NVSUBCOM EQU *
04524 4524 3 1,2050 0 CAF ZERO
04525 4525 6 0,0015 0 AD BANK
04526 4526 5 0,0527 1 TS NVBNKTEM
04531 4531 15505 0 NVSRRBNK CAD R NVSUB1 ; ****** WHAT'S THIS FOR?? ********
NVSUBEND EQU *
04532 4532 3 1,2050 0 CAF ZERO
04533 4533 6 0,0527 1 AD NVBNKTEM
04534 4534 5 0,0015 0 TS BANK ; restore calling bank
04535 4535 0 0,0526 0 TC NVQTEM
BANKFF_4 EQU *
BLANKDSP EQU *
15453 6,1453 6 1,2057 1 AD SEVEN ; 7,8,9,or 10 (A had 0,1,2,or 3)
15454 6,1454 2 0,0000 0 INH INT
15455 6,1455 5 0,0421 0 TS CODE ; blank specified DSPTABS
15456 6,1456 4 1,2065 1 CS BIT12
15457 6,1457 2 0,0421 1 IND EX CODE
15460 6,1460 3 0,0512 1 XCH DSPTAB
INCR_NOUT EQU *
15501 6,1501 3 0,0505 1 XCH NOUT ; was INCR NOUT in Block II
15502 6,1502 6 1,2051 1 AD ONE ; have to make it a separate routine
15503 6,1503 5 0,0505 1 TS NOUT ; because it was nested inside
15504 6,1504 0 6,7463 1 TC INCR_NOUT_RET ; a CCS.
NVSUB1 EQU *
15505 6,1505 3 6,7542 0 CAF ENTSET ; in bank
15506 6,1506 5 0,0433 0 TS ENTRET ; set return to NVSUBEND
15540 6,1540 3 1,2050 0 CAF ZERO ; zero REQRET so that pasted verbs can
15541 6,1541 5 0,0502 0 TS REQRET ; be executed by operator
BANK41_8 EQU *
; COLOSSUS p. 367
ENDIDLE EQU *
04541 4541 3 0,0001 0 XCH Q ; was LXCH Q in Block II
04542 4542 5 0,0566 1 TS ENDIDLE_L ; return address into L
ISCADR_P0 EQU *
04554 4554 1 0,0531 1 CCS CADRSTOR ; aborts (code 1206 if CADRSTOR not= +0
04555 4555 0 2,4563 0 TC DSPABORT ; returns if CADRSTOR = +0
04556 4556 0 0,0001 0 TC Q
04557 4557 0 2,4563 0 TC DSPABORT
ISLIST_P0 EQU *
04560 4560 1 0,0532 1 CCS DSPLIST ; aborts (code 1206 if DSPLIST not= +0
04561 4561 0 2,4563 0 TC DSPABORT ; returns if DSPLIST = +0
04562 4562 0 0,0001 0 TC Q
04563 4563 0 2,5050 1 DSPABORT TC POODOO
04564 4564 01206 1 DS %1206
; BLANKSUB blanks any combination of R1, R2, R3. Call with blanking code in A.
; BIT1=1 blanks R1 , BIT2=1 blanks R2, BIT3=1 blanks R3. Any combination of thes e
; three bits is ac cepted.
;
; DSPCOUNT is rest ored to the state it was in before BLANKSUB was executed.
BLANKSUB EQU *
04565 4565 7 1,2057 0 MAS K SEVEN
04566 4566 5 0,0420 1 TS NVTEMP ; store blanking code in NVTEMP
04567 4567 3 1,2063 0 CAF BIT14
04570 4570 7 0,0510 1 MAS K MONSAVE1 ; external monitor bit
04571 4571 6 0,0501 0 AD DSPLOCK
04572 4572 1 0,0000 0 CCS A
04573 4573 0 0,0001 0 TC Q ; dsp syst blocked. Return to 1+calling l o c
04574 4574 3 0,0001 0 XCH Q ; was INCR Q in Block II
04575 4575 6 1,2051 1 AD ONE ; set return for 2+calling location
04576 4576 5 0,0561 0 TS BLANKSUB_Q ; was TC Q in Block II
BS_SUPDXCHZ EQU *
04613 4613 3 0,0425 1 XCH BUF
04614 4614 3 0,0015 0 XCH BANK ; restore the calling bank bits
04615 4615 0 0,0426 1 TC BUF+1 ; return to calling loc+2 (set in BLANKS U B )
BANKFF_5 EQU *
DSPMM EQU *
10047 4,0047 3 0,0001 0 XCH Q
10050 4,0050 5 0,0130 0 TS MPAC
10051 4,0051 2 0,0000 0 INH INT
10052 4,0052 3 2,4131 0 CAF CHRPRIO
10053 4,0053 0 1,3162 1 TC NOVAC
10054 4,0054 13400 1 CAD R DSPMMJB
10055 4,0055 2 0,0000 1 REL INT
10056 4,0056 0 0,0130 0 ENDSPMM TC MPAC
BANK04_3 EQU *
BLNKSUB1 EQU *
13350 5,1350 3 1,2050 0 CAF ZERO ; was CA DSPCOUNT in Block II
13351 5,1351 6 0,0466 0 AD DSPCOUNT ; save old DSPCOUNT for later restoratio n
13352 5,1352 5 0,0427 0 TS BUF+2
TESTBIT EQU *
13373 5,1373 7 0,0420 0 MAS K NVTEMP ; NVTEMP contains blanking code
13374 5,1374 1 0,0000 0 CCS A
13375 5,1375 0 0,0001 0 TC Q ; if current bit = 1, return to L+1
13376 5,1376 2 0,0001 1 IND EX Q ; if current bit = 0, return to L+3
13377 5,1377 0 0,0002 0 TC 2
DSPMMJB EQU *
13400 5,1400 3 2,4677 0 CAF MD1 ; gets here thru DSPMM
13401 5,1401 3 0,0466 0 XCH DSPCOUNT
13402 5,1402 5 0,0435 0 TS DSPMMTEM ; save DSPCOUNT
13403 5,1403 1 0,0500 0 CCS MODREG
13404 5,1404 6 1,2051 1 AD ONE
13405 5,1405 0 5,7144 1 TC DSPDECVN ; if MODREG is + or +0, display MODREG
13406 5,1406 0 5,7410 0 TC *+2 ; if MODREG is -NZ, do nothing
13407 5,1407 0 5,6540 0 TC _2BLANK ; if MODREG is -0, blank MM
13410 5,1410 3 0,0435 0 XCH DSPMMTEM ; restore DSPCOUNT
13411 5,1411 5 0,0466 0 TS DSPCOUNT
13412 5,1412 0 1,2723 0 TC ENDOFJOB
;----------------- ---------------------------------------------------------
; RECALTST
; Entered directly after data is loaded (or resequence verb is executed),
; terminate verb i s executed, or proceed without data verb is executed.
; It wakes up job that did TC ENDIDLE.
; If CADRSTOR not = +0, it puts +0 into DSPLOCK, and turns off KEY RLSE
; light if DSPLIST is empty (leaves KEY RLSE light alone if not empty).
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 370.
;----------------- ---------------------------------------------------------
RECALTST EQU *
13413 5,1413 1 0,0531 1 CCS CADRSTOR
13414 5,1414 0 5,7416 0 TC RECAL1
13415 5,1415 0 1,2723 0 TC ENDOFJOB ; normal exit if keyboard initiated.
RECAL1 EQU *
13416 5,1416 3 1,2050 0 CAF ZERO
13417 5,1417 3 0,0531 0 XCH CADRSTOR
13420 5,1420 2 0,0000 0 INH INT
13421 5,1421 0 1,3003 1 TC JOBWAKE
13422 5,1422 1 0,0503 0 CCS LOADSTAT
13423 5,1423 0 5,7450 1 TC DOPROC ; + proceed without data
13424 5,1424 0 1,2723 0 TC ENDOFJOB ; pathological case exit
13425 5,1425 0 5,7446 0 TC DOTERM ; - terminate
13426 5,1426 3 1,2052 1 CAF TWO ; -0, data in or resequence
RECAL2 EQU *
13427 5,1427 2 0,0300 0 IND EX LOCCTR
13430 5,1430 6 0,0140 1 AD LOC ; loc is + for basic jobs
13431 5,1431 2 0,0300 0 IND EX LOCCTR
13432 5,1432 5 0,0140 1 TS LOC
13433 5,1433 3 1,2050 0 CAF ZERO ; save verb in MPAC, noun in MPAC+1 at
13434 5,1434 6 0,0471 0 AD NOUNREG ; time of response to ENDIDLE for
13435 5,1435 2 0,0300 0 IND EX LOCCTR ; possible later testing by job that has
13436 5,1436 5 0,0131 1 TS MPAC+1 ; been waked up
RECAL3 EQU *
13444 5,1444 0 2,5003 1 TC RELDSP
13445 5,1445 0 1,2723 0 TC ENDOFJOB
DOTERM EQU *
13446 5,1446 3 1,2050 0 CAF ZERO
13447 5,1447 0 5,7427 1 TC RECAL2
DOPROC EQU *
13450 5,1450 3 1,2051 1 CAF ONE
13451 5,1451 0 5,7427 1 TC RECAL2
BANK40_8a EQU *
;----------------- ---------------------------------------------------------
; MISCELLANEOUS SE RVICE ROUTINES IN FIXED-FIXED
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 372.
;----------------- ---------------------------------------------------------
; SETNCADR
; Store the erasea ble memory address from A into NOUNCADR and NOUNADD.
; (changed from Bl ock II, because there is no bank addressing for block I)
; SETNADD
; Get the eraseabl e memory address from NOUNCADR and store it into NOUNADD.
; (changed from Bl ock II, because there is no bank addressing for block I)
;
; SETEBANK
; E CADR arrives i n A. E ADRES is "derived" and left in A.
; (changed from Bl ock II, because there is no bank addressing for block I)
SETNCADR EQU *
04616 4616 3 0,0001 0 XCH Q
04617 4617 5 0,0555 1 TS SETNCADR_Q ; save return address
04620 4620 3 0,0001 0 XCH Q ; restore A
SETNADD EQU *
04625 4625 3 0,0001 0 XCH Q
04626 4626 5 0,0555 1 TS SETNCADR_Q ; save return address
04627 4627 3 0,0001 0 XCH Q ; restore A
SETEBANK EQU *
04633 4633 7 2,4674 1 MAS K LOW10
04634 4634 0 0,0001 0 TC Q
04635 4635 00016 0 R1D1 DS %16 ; these 3 constants form a packed table
04636 4636 00011 1 R2D1 DS %11 ; don't separate
04637 4637 00004 0 R3D1 DS %4 ; must stay here
RIGHT5 EQU *
04640 4640 5 0,0020 0 TS CYR
04641 4641 4 0,0020 1 CS CYR
04642 4642 4 0,0020 1 CS CYR
04643 4643 4 0,0020 1 CS CYR
04644 4644 4 0,0020 1 CS CYR
04645 4645 3 0,0020 0 XCH CYR
04646 4646 0 0,0001 0 TC Q
LEFT5 EQU *
04647 4647 5 0,0022 1 TS CYL
04650 4650 4 0,0022 0 CS CYL
04651 4651 4 0,0022 0 CS CYL
04652 4652 4 0,0022 0 CS CYL
04653 4653 4 0,0022 0 CS CYL
04654 4654 3 0,0022 1 XCH CYL
04655 4655 0 0,0001 0 TC Q
SLEFT5 EQU *
04656 4656 6 0,0000 1 DOU BLE
04657 4657 6 0,0000 1 DOU BLE
04660 4660 6 0,0000 1 DOU BLE
04661 4661 6 0,0000 1 DOU BLE
04662 4662 6 0,0000 1 DOU BLE
04663 4663 0 0,0001 0 TC Q
04664 4664 00037 0 LOW5 DS %00037 ; these 3 constants form a packed table
04665 4665 01740 0 MID5 DS %01740 ; don't separate
04666 4666 76000 0 HI5 DS %76000 ; must stay here
04675 4675 00023 0 VD1 DS %23 ; these 3 constants form a packed table
04676 4676 00021 1 ND1 DS %21 ; don't separate
04677 4677 00025 0 MD1 DS %25 ; must stay here
FALTON EQU *
04701 4701 4 0,0011 0 CS DSALMOUT ; inclusive OR bit 7 with 1 using
04702 4702 7 2,4712 0 MAS K FALTOR ; Demorgan's theorem
04703 4703 4 0,0000 0 COM
04704 4704 5 0,0011 1 TS DSALMOUT ; was bit 7 of channel 11 in Block II
04705 4705 0 0,0001 0 TC Q
FALTOF EQU *
04706 4706 4 1,2072 1 CS BIT7
04707 4707 7 0,0011 0 MAS K DSALMOUT
04710 4710 5 0,0011 1 TS DSALMOUT ; was bit 7 of channel 11 in Block II
04711 4711 0 0,0001 0 TC Q
RELDSPON EQU *
04713 4713 4 0,0011 0 CS DSALMOUT ; inclusive OR bit 5 with 1 using
04714 4714 7 2,4720 1 MAS K RELDSPOR ; Demorgan's theorem
04715 4715 4 0,0000 0 COM
04716 4716 5 0,0011 1 TS DSALMOUT ; was bit 5 of channel 11 in Block II
04717 4717 0 0,0001 0 TC Q
; TPSL1
; Shift triple wor d MPAC, MPAC+1, MPAC+2 left 1 bit
TPSL1 EQU *
04721 4721 3 1,2050 0 CAF ZERO
04722 4722 6 0,0132 1 AD MPAC+2
04723 4723 6 0,0132 1 AD MPAC+2
04724 4724 5 0,0132 1 TS MPAC+2 ; skip on overflow
; PRSHRTMP
; if MPAC, +1 are each +NZ or +0 and C(A)=-0, SHORTMP wrongly gives +0.
; if MPAC, +1 are each -NZ or -0 and C(A)=+0, SHORTMP wrongly gives +0.
; PRSHRTMP fixes f irst case only, by merely testing C(A) and if it = -0,
; setting result t o -0.
; (Do not use PRSH RTMP unless MPAC, +1 are each +NZ or +0, as they are
; when they contai n the SF constants).
PRSHRTMP EQU *
04740 4740 5 0,0432 1 TS MPTEMP
04741 4741 3 0,0001 0 XCH Q
04742 4742 5 0,0600 1 TS PRSHRTMP_Q
DOSHRTMP EQU *
04754 4754 3 1,2050 0 CAF ZERO
04755 4755 6 0,0432 1 AD MPTEMP
04756 4756 0 2,4353 0 TC SHORTMP
04757 4757 0 0,0600 1 TC PRSHRTMP_Q
FLASHON EQU *
04760 4760 3 0,0001 0 XCH Q
04761 4761 5 0,0570 0 TS FLASHRET
FLASHOFF EQU *
04770 4770 3 0,0001 0 XCH Q
04771 4771 5 0,0570 0 TS FLASHRET
NVSUBUSY EQU *
05001 5001 0 1,3653 1 TC POSTJUMP
05002 5002 13452 0 CAD R NVSUBSY1
BANKFF_5a EQU *
;----------------- ---------------------------------------------------------
; MISCELLANEOUS SE RVICE ROUTINES IN FIXED-FIXED
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 376.
;----------------- ---------------------------------------------------------
NVSUBSY1 EQU *
13452 5,1452 5 0,0567 0 TS NBSUBSY1_L ; save CADR
13453 5,1453 0 2,4554 1 TC ISCADR_P0 ; abort if CADRSTOR not = +0
13454 5,1454 0 2,4560 0 TC ISLIST_P0 ; abort if DSPLIST not = +0
13455 5,1455 0 2,4713 0 TC RELDSPON
13456 5,1456 3 1,2050 0 CAF ZERO ; was CA L in Block II
13457 5,1457 6 0,0567 0 AD NBSUBSY1_L
13460 5,1460 5 0,0532 0 TS DSPLIST
13461 5,1461 0 1,2725 0 ENDNVBSY TC JOBSLEEP
BANK40_9 EQU *
;----------------- ---------------------------------------------------------
; MISCELLANEOUS SE RVICE ROUTINES IN FIXED-FIXED
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 376.
;----------------- ---------------------------------------------------------
; RELDSP
; used by VBPROC, VBTERM, VBRQEXEC, VBRQWAIT, VBRELDSP, EXTENDED VERB
; DISPATCHER, VBRE SEQ, and RECALTST.
; RELDSP1
; used by monitor set up, VBRELDSP
RELDSP EQU *
05003 5003 3 0,0001 0 XCH Q ; set DSPLOCK to +0, turn RELDSP light
05004 5004 5 0,0441 0 TS RELRET ; off, search DSPLIST
05005 5005 4 1,2063 1 CS BIT14
05006 5006 2 0,0000 0 INH INT
05007 5007 7 0,0510 1 MAS K MONSAVE1
05010 5010 5 0,0510 0 TS MONSAVE1 ; turn off external monitor bit
05011 5011 1 0,0532 1 CCS DSPLIST
05012 5012 0 2,5014 1 TC *+2
05013 5013 0 2,5017 1 TC RELDSP2 ; list empty
05014 5014 3 1,2050 0 CAF ZERO
05015 5015 3 0,0532 0 XCH DSPLIST
05016 5016 0 1,3003 1 TC JOBWAKE
RELDSP2 EQU *
05017 5017 2 0,0000 1 REL INT
05020 5020 4 1,2074 1 CS BIT5 ; turn off KEY RLSE light
05021 5021 7 0,0011 0 MAS K DSALMOUT ; was WAND DSALMOUT in Block II
05022 5022 5 0,0011 1 TS DSALMOUT
RELDSP1 EQU *
05026 5026 3 0,0001 0 XCH Q ; set DSPLOCK to +0, No DSPLIST search
05027 5027 5 0,0441 0 TS RELRET ; turn KEY RLSE light off if DSPLIST is
; empty. Leave KEY RLSE light alone if
; DSPLIST is not e mpty.
05030 5030 1 0,0532 1 CCS DSPLIST
05031 5031 0 2,5033 1 TC *+2 ; + not empty, leave KEY RLSE light alon e
05032 5032 0 2,5017 1 TC RELDSP2 ; +0, list empty, turn off KEY RLSE ligh t
05033 5033 3 1,2050 0 CAF ZERO ; - not empty, leave KEY RLSE light alon e
05034 5034 5 0,0501 0 TS DSPLOCK
05035 5035 0 0,0441 0 TC RELRET
;----------------- ---------------------------------------------------------
; NEWMODEA
;
; The new major mo de is in register A. Store the major mode in MODREG and updat e
; the major mode d isplay.
;
; I couldn't find this in my COLOSSUS listing, so I borrowed it from UPDATVB-1
; (but modified it to work with the major mode instead of the verb).
;----------------- ---------------------------------------------------------
NEWMODEA EQU *
05036 5036 5 0,0500 1 TS MODREG ; store new major mode
05037 5037 3 0,0001 0 XCH Q
05040 5040 5 0,0572 1 TS NEWMODEA_Q ; save Q
;----------------- --------------------------------------------------------
; POODOO - Program alarm.
;
; Turn on program alarm light and store alarm code in FAILREG. The alarm code
; is retrieved fro m the address pointed to by Q. The most recent code is stored
; in FAILREG. Olde r codes are scrolled to FAILREG+1,+2. Older CADRs are
; scrolled down.
;
; This was missing from my COLOSSUS listing, so I had to guess at the
; implementation, based upon calling references in COLOSSUS, and textual
; descriptions of normal noun 9 which retrieves alarm codes.
;----------------- --------------------------------------------------------
POODOO EQU *
05050 5050 3 0,0001 0 XCH Q
05051 5051 5 0,0130 0 TS MPAC
05052 5052 4 0,0011 0 CS DSALMOUT ; inclusive OR bit 9 with 1 using
05053 5053 7 2,5066 0 MAS K NOTPALT ; Demorgan's theorem
05054 5054 4 0,0000 0 COM
05055 5055 5 0,0011 1 TS DSALMOUT ; turn on PROG ALM light
05056 5056 3 0,0461 1 XCH FAILREG+1 ; scroll previous codes down
05057 5057 5 0,0462 1 TS FAILREG+2
05060 5060 3 0,0460 0 XCH FAILREG
05061 5061 5 0,0461 1 TS FAILREG+1
05062 5062 2 0,0130 1 IND EX MPAC ; indirectly address Q
05063 5063 3 0,0000 1 CAF 0 ; (gets alarm code)
05064 5064 5 0,0460 0 TS FAILREG ; store alarm code
05065 5065 0 1,2723 0 TC ENDOFJOB
05066 5066 77377 1 NOTPALT DS %77377 ; 1's compliment of bit9 (PROG ALM)
;----------------- --------------------------------------------------------
; PINBRNCH
;
; This is supposed to restore the DSKY display to its former state in the
; event of error. According to COLOSSUS, it works if you use "Margaret's"
; code. I don't ha ve that portion of the listing, so I just terminate
; the job, which s eems to be an acceptable work-around, even though the
; old display is n ot restored.
;----------------- --------------------------------------------------------
BANKFF_6 EQU *
; 1's Comp of UPTE L=bit3, KEY REL=bit5, oper err=bit7, PROG ALM=bit 9
TSTLTS2 EQU *
15625 6,1625 3 2,4131 0 CAF CHRPRIO ; called by WAITLIST
15626 6,1626 0 1,3162 1 TC NOVAC
15627 6,1627 15631 1 CAD R TSTLTS3
15630 6,1630 0 1,2413 0 TC TASKOVER
TSTLTS3 EQU *
15631 6,1631 2 0,0000 0 INH INT
15632 6,1632 3 6,7623 1 CAF TSTCON1 ; turn off lights
15633 6,1633 7 0,0011 0 MAS K DSALMOUT
15634 6,1634 5 0,0011 1 TS DSALMOUT
;----------------- ---------------------------------------------------------
; ERROR - Error li ght reset.
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 381.
;----------------- ---------------------------------------------------------
ERROR EQU *
13462 5,1462 3 0,0412 0 XCH _2122REG ; restore original C(DSPLOCK), thus erro r
13463 5,1463 5 0,0501 0 TS DSPLOCK ; light reset leaves DSPLOCK unchanged
13464 5,1464 4 5,7520 0 CS ERCON ; turn off UPTL, OPER ERR, PROG ALM
13465 5,1465 7 0,0011 0 MAS K DSALMOUT
13466 5,1466 5 0,0011 1 TS DSALMOUT
13512 5,1512 3 1,2050 0 CAF ZERO ; clear the error codes for PROG ALM
13513 5,1513 5 0,0460 0 TS FAILREG
13514 5,1514 5 0,0461 1 TS FAILREG+1
13515 5,1515 5 0,0462 1 TS FAILREG+2
ORG BANK42_3
INC L bank42_3.asm ; COLOSSUS pp. 263-279
;================= =========================================================
; PINBALL NOUN TAB LES (file:bank42_3.asm)
;
; The following ro utines are for reading the noun tables and the scale
; factor (SF) tabl es (which are in a separate bank from the rest of
; PINBALL). These reading routines are in the same bank as the tables.
; They are called by DXCH Z (translated to DXCHJUMP for Block I).
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, pp . 263-279.
;================= =========================================================
;----------------- ---------------------------------------------------------
; Noun table info from COLOSSUS, p.325
;
; noun code < 40 : normal noun case
; noun code >= 40: mixed noun case
;----------------- ---------------------------------------------------------
; NNADTAB:
; for normal noun case, NNADTAB contains one CADR for each noun.
; +entry = noun CADR
; +0 = noun not used.
; -entry = machine CADR (E or F) to be specified.
; -1 = channel to be specified (not used for Block I);
; -0 = augment of last machine CADR supplied.
; for mixed noun c ase, NNADTAB contains one indirect address (IDADDREL)
; in low 10 bits, and the component code number in the high 5 bits.
; Examples:
; NNADTAB = %00042 ; CADR for octal address 42
; NNADTAB = %00000 ; noun not used
; NNADTAB = %40000 ; specify machine address
; NNADTAB = %77777 ; augment last address
;----------------- ---------------------------------------------------------
; NNTYPETAB (norma l case):
; a packed table o f the form: MMMMM NNNNN PPPPP
; Examples:
; NNTYPTAB = %00000 ; 1 comp, octal only
; NNTYPTAB = %02000 ; 2 comp, octal only
; NNTYPTAB = %04000 ; 3 comp, octal only
; NNTYPTAB = %00040 ; 1 comp ,straight fractional
; NNTYPTAB = %04040 ; 3 comp ,straight fractional
;----------------- ---------------------------------------------------------
; NNTYPETAB (mixed case):
; a packed table o f the form: MMMMM NNNNN PPPPP
;----------------- ---------------------------------------------------------
; IDADDTAB (mixed case only):
; there is also an indirect address table for mixed case only.
; Each entry conta ins one ECADR. IDADDREL is the relative address of
; the first of the se entries.
; There is one ent ry in this table for each component of a mixed noun.
; They are listed in order of ascending K.
;----------------- ---------------------------------------------------------
; RUTMXTAB (mixed case only):
; there is also a scale factor routine number table for mixed case only.
; There is one ent ry per mixed noun. The form is: QQQQQ RRRRR SSSSS
; In octal display and load (oct or dec) verbs, exclude use of verbs whose
; component number is greater than the number of components in noun.
; (All machine add ress to be specified nouns are 3 component)
; In multi-compone nt load verbs, no mixing of octal and decimal data
; component words is allowed; alarm if violation.
;----------------- ---------------------------------------------------------
; LODNNTAB
; loads NNADTEM wi th the NNADTAB entry, NNTYPTEM with the NNTYPTAB
; entry. If the no un is mixed, IDAD1TEM is loaded with the first IDADTAB
; entry, IDAD2TEM the second IDADTAB entry, IDAD3TEM the third IDADTAB
; entry, RUTMXTEM with the RUTMXTAB entry. MIXBR is set for mixed=2
; or normal=1 noun .
;
; NOTE: in BlockII , NNADTEM = -1 means use an I/O channel instead of a
; memory address ( channel specified in NOUNCADR). Block I does not have
; I/O channels.
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 265.
;----------------- ---------------------------------------------------------
LODNNTAB EQU *
16114 7,0114 5 0,0562 0 TS GTSF_RET ; save return CADR
16132 7,0132 3 1,2051 1 CAF ONE ; noun number L/ first mixed noun
16133 7,0133 5 0,0435 0 TS MIXBR ; normal, +1 into MIXBR
LODMIXNN EQU *
16135 7,0135 3 1,2052 1 CAF TWO ; mixed, +2 into MIXBR
16136 7,0136 5 0,0435 0 TS MIXBR
LODNLV EQU *
16156 7,0156 3 1,2050 0 CAF ZERO
16157 7,0157 6 0,0562 0 AD GTSF_RET ; load return CADR
16160 7,0160 0 1,3526 0 TC DXCHJUMP ; return
16161 7,0161 00050 1 MIXCON DS %50 ; 1st mixed noun = 40 (DEC 40)
;----------------- ---------------------------------------------------------
; GTSFOUT
; On entry, SFTEMP 1 contains SFCONUM X 2.
; Loads SFTEMP1, S FTEMP2 with the DP SFOUTAB entries
;
; GTSFIN
; On entry, SFTEMP 1 contains SFCONUM X 2.
; Loads SFTEMP1, S FTEMP2 with the DP SFINTAB entries
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 266.
;----------------- ---------------------------------------------------------
GTSFOUT EQU *
16162 7,0162 5 0,0562 0 TS GTSF_RET ; save return CADR
16163 7,0163 3 0,0420 1 XCH SFTEMP1
16164 7,0164 5 0,0001 0 TS Q ; temp
SFCOM EQU *
16173 7,0173 3 1,2050 0 CAF ZERO
16174 7,0174 6 0,0562 0 AD GTSF_RET ; load return CADR
16175 7,0175 0 1,3526 0 TC DXCHJUMP ; return
GTSFIN EQU *
16176 7,0176 5 0,0562 0 TS GTSF_RET ; save return CADR
;----------------- ---------------------------------------------------------
; NOUN ADDRESS TAB LE (NNADTAB)
; Indexed by noun number (0-39 decimal for normal nouns).
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 266.
;----------------- ---------------------------------------------------------
;----------------- ---------------------------------------------------------
; NOUN TYPE TABLE (NNTYPTAB)
; Indexed by noun number (0-39 decimal for normal nouns).
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 269.
;----------------- ---------------------------------------------------------
SFINTAB EQU *
16520 7,0520 00006 1 DS %00006 ; 00 - whole, DP time (sec)
16521 7,0521 03240 1 DS %03240 ; 00
;----------------- ---------------------------------------------------------
; SCALE FACTOR OUT PUT TABLE (SFOUTAB)
; Indexed by SF co nstant code number x 2 PPPPP (0-19 decimal; 0-23 octal)
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 273.
;----------------- ---------------------------------------------------------
SFOUTAB EQU *
16570 7,0570 05174 0 DS %05174 ; 00 - whole, DP time (sec)
16571 7,0571 13261 0 DS %13261 ; 00
;----------------- ---------------------------------------------------------
; MIXED NOUN ADDRE SS TABLE (IDADDTAB)
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 274.
;----------------- ---------------------------------------------------------
IDADDTAB EQU *
16640 7,0640 00000 1 DS %0 ; 40 - spare component
16641 7,0641 00000 1 DS %0 ; 40 - spare component
16642 7,0642 00000 1 DS %0 ; 40 - spare component
;----------------- ---------------------------------------------------------
; MIXED NOUN SCALE FACTOR ROUTINE TABLE (RUTMXTAB)
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 278.
;----------------- ---------------------------------------------------------
RUTMXTAB EQU *
17124 7,1124 00000 1 DS %0 ; 40 - spare
17125 7,1125 00000 1 DS %0 ; 41 - spare
17126 7,1126 00000 1 DS %0 ; 42 - spare
17127 7,1127 00000 1 DS %0 ; 43 - spare
17130 7,1130 00000 1 DS %0 ; 44 - spare
17131 7,1131 00000 1 DS %0 ; 45 - spare
17132 7,1132 00000 1 DS %0 ; 46 - spare
17133 7,1133 00000 1 DS %0 ; 47 - spare
17134 7,1134 00000 1 DS %0 ; 48 - spare
17135 7,1135 00000 1 DS %0 ; 49 - spare
17136 7,1136 00000 1 DS %0 ; 50 - spare
17137 7,1137 00000 1 DS %0 ; 51 - spare
17140 7,1140 00000 1 DS %0 ; 52 - spare
17141 7,1141 00000 1 DS %0 ; 53 - spare
17142 7,1142 00000 1 DS %0 ; 54 - spare
17143 7,1143 00000 1 DS %0 ; 55 - spare
17144 7,1144 00000 1 DS %0 ; 56 - spare
17145 7,1145 00000 1 DS %0 ; 57 - spare
17146 7,1146 00000 1 DS %0 ; 58 - spare
17147 7,1147 00000 1 DS %0 ; 59 - spare
17150 7,1150 00000 1 DS %0 ; 60 - spare
17151 7,1151 00000 1 DS %0 ; 61 - spare
17152 7,1152 00000 1 DS %0 ; 62 - spare
17153 7,1153 00000 1 DS %0 ; 63 - spare
17154 7,1154 00000 1 DS %0 ; 64 - spare
17155 7,1155 00000 1 DS %0 ; 65 - spare
17156 7,1156 00000 1 DS %0 ; 66 - spare
17157 7,1157 00000 1 DS %0 ; 67 - spare
17160 7,1160 00000 1 DS %0 ; 68 - spare
17161 7,1161 00000 1 DS %0 ; 69 - spare
17162 7,1162 00000 1 DS %0 ; 70 - spare
17163 7,1163 00000 1 DS %0 ; 71 - spare
17164 7,1164 00000 1 DS %0 ; 72 - spare
17165 7,1165 00000 1 DS %0 ; 73 - spare
17166 7,1166 00000 1 DS %0 ; 74 - spare
17167 7,1167 00000 1 DS %0 ; 75 - spare
17170 7,1170 00000 1 DS %0 ; 76 - spare
17171 7,1171 00000 1 DS %0 ; 77 - spare
17172 7,1172 00000 1 DS %0 ; 78 - spare
17173 7,1173 00000 1 DS %0 ; 79 - spare
17174 7,1174 00000 1 DS %0 ; 80 - spare
17175 7,1175 00000 1 DS %0 ; 81 - spare
17176 7,1176 00000 1 DS %0 ; 82 - spare
17177 7,1177 00000 1 DS %0 ; 83 - spare
17200 7,1200 00000 1 DS %0 ; 84 - spare
17201 7,1201 00000 1 DS %0 ; 85 - spare
17202 7,1202 00000 1 DS %0 ; 86 - spare
17203 7,1203 00000 1 DS %0 ; 87 - spare
17204 7,1204 00000 1 DS %0 ; 88 - spare
17205 7,1205 00000 1 DS %0 ; 89 - spare
17206 7,1206 00000 1 DS %0 ; 90 - spare
17207 7,1207 00000 1 DS %0 ; 91 - spare
17210 7,1210 00000 1 DS %0 ; 92 - spare
17211 7,1211 00000 1 DS %0 ; 93 - spare
17212 7,1212 00000 1 DS %0 ; 94 - spare
17213 7,1213 00000 1 DS %0 ; 95 - spare
17214 7,1214 00000 1 DS %0 ; 96 - spare
17215 7,1215 00000 1 DS %0 ; 97 - spare
17216 7,1216 00000 1 DS %0 ; 98 - spare
17217 7,1217 00000 1 DS %0 ; 99 - spare
; end of mixed nou n scale factor routine table
BANK42_4 EQU *
ORG BANK43_1
INC L bank43_1.asm ; COLOSSUS pp. 230-232
;================= =========================================================
; DISPLAY ROUTINES (file:bank43_1.asm)
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, pp . 230.
;================= =========================================================
;----------------- ---------------------------------------------------------
; GOEXTVB -- EXTEN DED VERBS
;
; Adapted from the AGC Block II COLOSSUS rev 249 assembly listing,
; Oct 28, 1968, p. 230.
;----------------- ---------------------------------------------------------
GOEXTVB EQU *
2 0 0 0 0 1 0 , 0 0 0 0 2 0,0130 1 IND EX MPAC ; verb-40 is in MPAC
2 0 0 0 1 1 0 , 0 0 0 1 0 10,6002 0 TC LST2FAN ; fan as before
LST2FAN EQU *
20002 10,0002 0 10,6076 0 TC ALM_END ; VB40 - spare
20003 10,0003 0 10,6076 0 TC ALM_END ; VB41 - spare
20004 10,0004 0 10,6076 0 TC ALM_END ; VB42 - spare
20005 10,0005 0 10,6076 0 TC ALM_END ; VB43 - spare
20006 10,0006 0 10,6076 0 TC ALM_END ; VB44 - spare
20007 10,0007 0 10,6076 0 TC ALM_END ; VB45 - spare
20010 10,0010 0 10,6076 0 TC ALM_END ; VB46 - spare
20011 10,0011 0 10,6076 0 TC ALM_END ; VB47 - spare
20012 10,0012 0 10,6076 0 TC ALM_END ; VB48 - spare
20013 10,0013 0 10,6076 0 TC ALM_END ; VB49 - spare
20014 10,0014 0 10,6076 0 TC ALM_END ; VB50 - spare
20015 10,0015 0 10,6076 0 TC ALM_END ; VB51 - spare
20016 10,0016 0 10,6076 0 TC ALM_END ; VB52 - spare
20017 10,0017 0 10,6076 0 TC ALM_END ; VB53 - spare
20020 10,0020 0 10,6076 0 TC ALM_END ; VB54 - spare
20021 10,0021 0 10,6076 0 TC ALM_END ; VB55 - spare
20022 10,0022 0 10,6076 0 TC ALM_END ; VB56 - spare
20023 10,0023 0 10,6076 0 TC ALM_END ; VB57 - spare
20024 10,0024 0 10,6076 0 TC ALM_END ; VB58 - spare
20025 10,0025 0 10,6076 0 TC ALM_END ; VB59 - spare
20026 10,0026 0 10,6076 0 TC ALM_END ; VB60 - spare
20027 10,0027 0 10,6076 0 TC ALM_END ; VB61 - spare
20030 10,0030 0 10,6076 0 TC ALM_END ; VB62 - spare
20031 10,0031 0 10,6076 0 TC ALM_END ; VB63 - spare
20032 10,0032 0 10,6076 0 TC ALM_END ; VB64 - spare
20033 10,0033 0 10,6076 0 TC ALM_END ; VB65 - spare
20034 10,0034 0 10,6076 0 TC ALM_END ; VB66 - spare
20035 10,0035 0 10,6076 0 TC ALM_END ; VB67 - spare
20036 10,0036 0 10,6076 0 TC ALM_END ; VB68 - spare
20037 10,0037 0 10,6076 0 TC ALM_END ; VB69 - spare
20040 10,0040 0 10,6076 0 TC ALM_END ; VB70 - spare
20041 10,0041 0 10,6076 0 TC ALM_END ; VB71 - spare
20042 10,0042 0 10,6076 0 TC ALM_END ; VB72 - spare
20043 10,0043 0 10,6076 0 TC ALM_END ; VB73 - spare
20044 10,0044 0 10,6076 0 TC ALM_END ; VB74 - spare
20045 10,0045 0 10,6076 0 TC ALM_END ; VB75 - spare
20046 10,0046 0 10,6076 0 TC ALM_END ; VB76 - spare
20047 10,0047 0 10,6076 0 TC ALM_END ; VB77 - spare
20050 10,0050 0 10,6076 0 TC ALM_END ; VB78 - spare
20051 10,0051 0 10,6076 0 TC ALM_END ; VB79 - spare
20052 10,0052 0 10,6076 0 TC ALM_END ; VB80 - spare
20053 10,0053 0 10,6076 0 TC ALM_END ; VB81 - spare
20054 10,0054 0 10,6076 0 TC ALM_END ; VB82 - spare
20055 10,0055 0 10,6076 0 TC ALM_END ; VB83 - spare
20056 10,0056 0 10,6076 0 TC ALM_END ; VB84 - spare
20057 10,0057 0 10,6076 0 TC ALM_END ; VB85 - spare
20060 10,0060 0 10,6076 0 TC ALM_END ; VB86 - spare
20061 10,0061 0 10,6076 0 TC ALM_END ; VB87 - spare
20062 10,0062 0 10,6076 0 TC ALM_END ; VB88 - spare
20063 10,0063 0 10,6076 0 TC ALM_END ; VB89 - spare
20064 10,0064 0 10,6076 0 TC ALM_END ; VB90 - spare
20065 10,0065 0 10,6076 0 TC ALM_END ; VB91 - spare
20066 10,0066 0 10,6076 0 TC ALM_END ; VB92 - spare
20067 10,0067 0 10,6076 0 TC ALM_END ; VB93 - spare
20070 10,0070 0 10,6076 0 TC ALM_END ; VB94 - spare
20071 10,0071 0 10,6076 0 TC ALM_END ; VB95 - spare
20072 10,0072 0 10,6076 0 TC ALM_END ; VB96 - spare
20073 10,0073 0 10,6076 0 TC ALM_END ; VB97 - spare
20074 10,0074 0 10,6076 0 TC ALM_END ; VB98 - spare
20075 10,0075 0 10,6076 0 TC ALM_END ; VB99 - spare
ALM_END EQU *
20076 10,0076 0 2,4701 0 TC FALTON ; turn on operator error light
20077 10,0077 0 1,3653 1 GOPIN TC POSTJUMP
20100 10,0100 05067 0 FCA DR PINBRNCH
BANK43_2 EQU *
;----------------- ---------------------------------------------------------
; TEST JOBS & TASK S
;----------------- ---------------------------------------------------------
ORG BANKFF_6
;----------------- ---------------------------------------------------------
; MAJOR MODES
;----------------- ---------------------------------------------------------
ORG BANK11
;----------------- ---------------------------------------------------------
; P00 CMC IDLE PRO GRAM
;
; Does nothing
;----------------- ---------------------------------------------------------
P00 EQU *
task1 EQU *
2 2 0 0 5 1 1 , 0 0 0 5 3 11,6011 1 XCH prio1 ; job priority
2 2 0 0 6 1 1 , 0 0 0 6 0 1,3162 1 TC NOVAC
22007 11,0007 22012 1 CAD R job1 ; 14 bit job address
job1 EQU *
22012 11,0012 3 1,2050 0 CAF ZERO
22013 11,0013 6 0,0053 1 AD %53
22014 11,0014 6 1,2051 1 AD ONE
22015 11,0015 5 0,0053 1 TS %53 ; incr data at this address
22016 11,0016 0 1,2723 0 TC ENDOFJOB
;----------------- ---------------------------------------------------------
; P01 DEMO PROGRAM
;
; Calls pinball: v erb 1, noun 4.
;----------------- ---------------------------------------------------------
P01 EQU *
2 2 0 2 2 1 1 , 0 0 2 2 3 11,6021 1 CAF tcadr1 ; load 'machine address to be specified'
2 2 0 2 3 1 1 , 0 0 2 3 5 0,0132 1 TS MPAC+2
P01_restart EQU *
2 2 0 2 4 1 1 , 0 0 2 4 3 11,6017 1 CAF nvcode1
2 2 0 2 5 1 1 , 0 0 2 5 0 2,4503 0 TC NVSUB
;----------------- ---------------------------------------------------------
; P02 DEMO PROGRAM
;
; Calls pinball: v erb 21, noun 2.
;
; Sleeps if DSKY i s busy until KEYREL. Executes verb 21, noun 2 to do
; an external load . Then it sleeps with ENDIDLE until the user loads
; the data or term inatest the load with PROCEED or TERMINATE.
; NOTE: routines t hat call ENDIDLE must be in fixed-switchable memory
;----------------- ---------------------------------------------------------
P02 EQU *
2 2 0 3 6 1 1 , 0 0 3 6 3 11,6035 1 CAF tcadr2
2 2 0 3 7 1 1 , 0 0 3 7 5 0,0132 1 TS MPAC+2
P02_restart EQU *
2 2 0 4 0 1 1 , 0 0 4 0 3 11,6033 1 CAF nvcode2
2 2 0 4 1 1 1 , 0 0 4 1 0 2,4503 0 TC NVSUB
P02_wait EQU *
22047 11,0047 0 2,4541 0 TC ENDIDLE
22050 11,0050 0 11,6060 1 TC P02_ter ; terminate
22051 11,0051 0 11,6055 1 TC P02_pwd ; proceed without data
22052 11,0052 3 1,2051 1 CAF ONE ; data in
22053 11,0053 5 0,0043 0 TS %43 ; set loc=1
22054 11,0054 0 1,2723 0 TC ENDOFJOB
;----------------- ---------------------------------------------------------
; P03 DEMO PROGRAM
;
; Nearly identical to P02, except that the job does not go to sleep
; waiting for the load with ENDIDLE. Instead, it busy-waits on LOADSTAT.
; NOTE: routines t hat call ENDIDLE must be in fixed-switchable memory
;----------------- ---------------------------------------------------------
P03 EQU *
2 2 0 6 6 1 1 , 0 0 6 6 3 11,6065 1 CAF tcadr3
2 2 0 6 7 1 1 , 0 0 6 7 5 0,0132 1 TS MPAC+2
P03_restart EQU *
2 2 0 7 0 1 1 , 0 0 7 0 3 11,6063 1 CAF nvcode3
2 2 0 7 1 1 1 , 0 0 7 1 0 2,4503 0 TC NVSUB
P03_wait EQU *
22077 1 1 , 0 0 7 7 1 0,0503 0 CCS LOADSTAT
22100 1 1 , 0 1 0 0 0 11,6115 1 TC P03_pwd ; >0, verb "proceed w/o data" has been k e y e d
in
22101 1 1 , 0 1 0 1 0 11,6107 1 TC P03_yield ; +0, waiting for data
22102 1 1 , 0 1 0 2 0 11,6120 1 TC P03_ter ; <0, verb "terminate" has been keyed in
22103 1 1 , 0 1 0 3 3 0,0000 1 NOO P ; -0, load has been completed
P03_yield EQU *
22107 11,0107 3 1,2051 1 CAF ONE
22110 11,0110 6 0,0043 0 AD %43
22111 11,0111 5 0,0043 0 TS %43 ; incr loc while busy-waiting
;----------------- ---------------------------------------------------------
; P04 DEMO PROGRAM
;
; Calls pinball: m onitor verb 11, noun 04.
;----------------- ---------------------------------------------------------
P04 EQU *
2 2 1 2 7 1 1 , 0 1 2 7 3 11,6125 1 CAF tcadr4 ; load 'machine address to be specified'
2 2 1 3 0 1 1 , 0 1 3 0 5 0,0132 1 TS MPAC+2
P04_restart EQU *
2 2 1 3 1 1 1 , 0 1 3 1 3 11,6126 1 CAF mon_option ; paste verb 09, blank R2, R3
2 2 1 3 2 1 1 , 0 1 3 2 5 0,0564 0 TS NVSUB_L
;----------------- ---------------------------------------------------------
; P78 DEMO PROGRAM
;
;----------------- ---------------------------------------------------------
P78 EQU *
22142 11,0142 3 1,2050 0 CAF ZERO
22143 11,0143 6 0,0051 0 AD %51
22144 11,0144 6 1,2051 1 AD ONE
22145 11,0145 5 0,0051 0 TS %51 ; incr data at this address
22146 11,0146 0 1,2723 0 TC ENDOFJOB
;----------------- ---------------------------------------------------------
; P79 DEMO PROGRAM
;
;----------------- ---------------------------------------------------------
P79 EQU *
22147 11,0147 3 1,2050 0 CAF ZERO
22150 11,0150 6 0,0052 0 AD %52
22151 11,0151 6 1,2051 1 AD ONE
22152 11,0152 5 0,0052 0 TS %52 ; incr data at this address
22153 11,0153 0 1,2723 0 TC ENDOFJOB
A s s e m b l y c o m p lete. Errors = 0
Symbol table:
BANK0 000057 MAXTASK 00000 7 MAXVAL 037777
MAXDELAY 027340 MAXTIMEOUT 01044 0 TSKTIME 000000
TSKADDR 000001 TRECSZ 00000 2 WL_taskList 000057
WL_IN_saveQ 000075 WL_IN_taskPtr 00007 6 WL_IN_loopCnt 000077
WL_AT_saveQ 000100 WL_AT_taskPtr 00010 1 WL_AT_newTime 000102
WL_AT_timeLeft 000103 WL_AT_loopCnt 00010 4 WL_T3_saveQ 000105
WL_T3_oldBank 000106 WL_ST_saveQ 00010 7 WL_ST_taskPtr 000110
WL_ST_newTime 000111 WL_ST_loopCnt 00011 2 WL_RT_saveQ 000113
WL_RT_runAddr 000114 WL_RM_saveQ 00011 5 WL_RM_taskPtr 000116
WL_RM_taskPtr2 000117 WL_RM_loopCnt 00012 0 WL_RM_retval 000121
WL_IS_newTime 000122 WL_IS_newAddr 00012 3 WL_IS_saveQ 000124
WL_IS_taskPtr 000125 WL_IS_taskPtr2 00012 6 WL_IS_loopCnt 000127
MAXJOBS 000007 JRECSZ 00001 5 EX_currentJob 000130
MPAC 000130 MODE 00013 7 LOC 000140
BANKSET 000141 PUSHLOC 00014 2 PRIORITY 000143
JOBPRIOBASE 000144 JREC0 00014 5 JREC1 000162
JREC2 000177 JREC3 00021 4 JREC4 000231
JREC5 000246 JREC6 00026 3 EX_jobList 000300
LOCCTR 000300 CHGJOB 00000 1 KEEPJOB 000000
newJob 000307 EX_JW_saveQ 00031 0 EX_JW_loopCnt 000311
EX_JW_CADR 000312 EX_JW_foundit 00031 3 EX_JW_jobPtr 000314
EX_JW_jobPtr2 000315 EX_JW_fndIndx 00031 6 EX_AJ_saveQ 000317
EX_AJ_loopCnt 000320 EX_AJ_jobPrio 00032 1 EX_AJ_jobPtr 000322
EX_AJ_field 000323 EX_AJ_findx 00032 4 EX_IN_saveQ 000325
EX_IN_loopCnt 000326 EX_IN_jobPtr 00032 7 EX_IN_recIndex 000330
EX_IN_field 000331 EX_IN_findx 00033 2 EX_MN_runAddr 000333
EX_MN_field 000334 EX_MN_findx 00033 5 EX_RM_saveQ 000336
EX_RM_jobPtr 000337 EX_RM_jobPtr2 00034 0 EX_RM_savePtr 000341
EX_RM_loopCnt 000342 EX_RM_retval 00034 3 EX_RM_field 000344
EX_RM_findx 000345 EX_IS_newPrio 00034 6 EX_IS_newPrioB 000347
EX_IS_newLoc 000350 EX_IS_saveQ 00035 1 EX_IS_jobPtr 000352
EX_IS_jobPtr2 000353 EX_IS_loopCnt 00035 4 FLAGWRD5 000355
ITEMP1 000356 WAITEXIT 00035 6 EXECTEM1 000356
ITEMP2 000357 WAITBANK 00035 7 EXECTEM2 000357
ITEMP3 000360 RUPTSTOR 00036 0 WAITADR 000360
NEWPRIO 000360 ITEMP4 00036 1 WAITTEMP 000361
ITEMP5 000362 NEWLOC 00036 2 ITEMP6 000363
NEWLOCP1 000363 NEWJOB 00036 4 RUPTREG1 000365
RUPTREG2 000366 RUPTREG3 00036 7 RUPTREG4 000370
KEYTEMP1 000370 DSRUPTEM 00037 0 STATE 000371
FLAGFILL 000405 EMDOT 00040 5 STATEXIT 000407
INTB15P 000411 DSEXIT 00041 1 EXITEM 000411
BLANKRET 000411 INTBIT15 00041 2 WRDRET 000412
WDRET 000412 DECRET 00041 2 _2122REG 000412
ADDRWD 000413 POLISH 00041 4 UPDATRET 000414
CHAR 000414 ERCNT 00041 4 DECOUNT 000414
FIXLOC 000415 OVFIND 00041 6 VBUF 000417
SGNON 000417 NOUNTEM 00041 7 DISTEM 000417
DECTEM 000417 SGNOFF 00042 0 NVTEMP 000420
SFTEMP1 000420 HITEMIN 00042 0 CODE 000421
SFTEMP2 000421 LOWTEMIN 00042 1 MIXTEMP 000422
SIGNRET 000422 BUF 00042 5 BUF2 000430
INDEXLOC 000425 SWWORD 00042 5 SWBIT 000426
MPTEMP 000432 DMPNTEMP 00043 2 DOTINC 000433
DVSIGN 000433 ESCAPE 00043 3 ENTRET 000433
DOTRET 000434 DVNORMCT 00043 4 ESCAPE2 000434
WDCNT 000434 INREL 00043 4 MATINC 000435
MAXDVSW 000435 POLYCNT 00043 5 DSPMMTEM 000435
MIXBR 000435 TEM1 00043 6 POLYRET 000436
DSREL 000436 TEM2 00043 7 DSMAG 000437
IDADDTEM 000437 TEM3 00044 0 COUNT 000440
TEM4 000441 LSTPTR 00044 1 RELRET 000441
FREERET 000441 DSPWDRET 00044 1 SEPSCRET 000441
SEPMNRET 000441 TEM5 00044 2 NOUNADD 000442
NNADTEM 000443 NNTYPTEM 00044 4 IDAD1TEM 000445
IDAD2TEM 000446 IDAD3TEM 00044 7 RUTMXTEM 000450
DEXDEX 000437 DEX1 00044 0 DEX2 000441
RTNSAVER 000442 TERM1TMP 00043 0 RESTREG 000451
NVWORD 000452 MARXNV 00045 3 NVSAVE 000454
CADRFLSH 000455 CADRMARK 00045 6 TEMPFLSH 000457
FAILREG 000460 MINDEX 00046 3 MMNUMBER 000464
DSPCNT 000465 DSPCOUNT 00046 6 DECBRNCH 000467
VERBREG 000470 NOUNREG 00047 1 XREG 000472
YREG 000473 ZREG 00047 4 XREGLP 000475
YREGLP 000476 HITEMOUT 00047 6 ZREGLP 000477
LOTEMOUT 000477 MODREG 00050 0 DSPLOCK 000501
REQRET 000502 LOADSTAT 00050 3 CLPASS 000504
NOUT 000505 NOUNCADR 00050 6 MONSAVE 000507
MONSAVE1 000510 MONSAVE2 00051 1 DSPTAB 000512
NVQTEM 000526 NVBNKTEM 00052 7 VERBSAVE 000530
CADRSTOR 000531 DSPLIST 00053 2 EXTVRACT 000533
DSPTEM1 000534 DSPTEM2 00053 7 DSPTEMX 000537
NORMTEM1 000534 OPTIONX 00053 7 MMTEMP 000542
DSRUPTSW 000543 T4RET 00054 4 DSPOUTRET 000545
DK_IN_saveQ 000546 LXCH_LPRET 00054 7 LXCH_A 000550
KP_MPAC 000551 DPTEST_A 00055 2 DPTEST_Q 000553
REQ_Q 000554 SETNCADR_Q 00055 5 ALLDC_OC_Q 000556
SFRUTMIX_L 000557 SFCONUM_L 00056 0 BLANKSUB_Q 000561
GTSF_RET 000562 FR_RETQ 00056 3 NVSUB_L 000564
NVSUB_A 000565 ENDIDLE_L 00056 6 NBSUBSY1_L 000567
FLASHRET 000570 PASTE_TMP 00057 1 NEWMODEA_Q 000572
SHORTMP_A 000573 SHORTMP_OVFL 00057 4 SHORTMP_OVFH 000575
ADDRWD1 000576 MATH_Q 00057 7 PRSHRTMP_Q 000600
KEYRET 000601 SAVEQ 00060 2 BJBANK 000603
BJRET 000604 PJBANK 00060 5 PJRET 000606
PJA 000607 BCBANK 00061 0 BCRET 000611
BCA 000612 MBCBANK 00061 3 MBCRET 000614
MBCA 000615 DCBANK 00061 6 DCRET 000617
EXTENDER 005777 GOPROG 00200 0 T3RUPT 002004
ERRUPT 002010 DSRUPT 00201 4 KEYRUPT 002020
UPRUPT 002024 endRUPT 00203 0 goT3 002034
goER 002036 goDS 00203 7 goKEY 002041
goUP 002043 ofbit 00204 4 NEG0 002045
NEG1 002046 NEG2 00204 7 ZERO 002050
ONE 002051 TWO 00205 2 THREE 002053
FOUR 002054 FIVE 00205 5 SIX 002056
SEVEN 002057 TEN 00206 0 ELEVEN 002061
BIT15 002062 BIT14 00206 3 BIT13 002064
BIT12 002065 BIT11 00206 6 BIT10 002067
BIT9 002070 BIT8 00207 1 BIT7 002072
BIT6 002073 BIT5 00207 4 BIT4 002075
BIT3 002076 BIT2 00207 7 BIT1 002100
LOW7 002101 bankAddr 00210 2 lowAddr 002103
OCT1400 002104 NOUTCON 00210 5 POSMAX 002106
CLRMEM 002107 CLRMEM_CHK 00211 3 CLRMEM_WORD 002116
CLRMEM_VAL 002050 TIME3 00003 7 CLRMEM_BADDR 000037
CLRMEM_WC 002123 V37BANK 00212 4 SAMASK 002125
goMAIN 002126 SLAP1 00212 6 goMMchange 002147
V37XEQ 002153 V37XEQC 00216 6 WL_taskRecSize 002174
WL_tskLstStart 002175 WL_tskLstEnd 00217 6 WL_numTasks 002177
WL_numTasks1 002200 WL_maxVal 00220 1 WL_maxDelay 002202
WL_maxTimeOut 002203 WL_initWL 00220 4 WL_IN_loop 002213
WAITLIST 002232 WL_AT_noOvf 00226 4 WL_AT_chkOrder 002270
WL_AT_mkFirst 002306 WL_AT_loop 00231 1 WL_AT_schTsk 002333
WL_AT_done 002343 WL_TIME3task 00234 7 WL_runTasks 002362
WL_RT_loop 002364 WL_RT_runIt 00241 1 TASKOVER 002413
WL_RT_done 002414 WL_schedTask 00241 7 WL_ST_loop 002436
WL_ST_setT3 002461 WL_ST_noTask 00246 6 WL_ST_done 002470
WL_insert 002473 WL_IS_loop 00251 0 WL_IS_bumpPtr 002541
WL_IS_insRec 002552 WL_IS_done 00256 2 WL_remove 002565
WL_RM_loop 002603 WL_RM_done 00263 6 EX_WAKE_PRIO 002642
EX_DUMMY_PRIO 002643 EX_SLEEP_PRIO 00264 4 EX_jobCurStart 002645
EX_jobRecSize 002646 EX_jobLstStart 00264 7 EX_jobLstEnd 002650
EX_jobLstEnd1 002651 EX_numJobs 00265 2 EX_numJobs1 002653
EX_changeJob 002654 EX_keepJob 00265 5 EX_exec 002656
EX_MN_findJob 002662 EX_MN_setFlg 00267 7 EX_MN_runJob 002701
EX_MN_runIt 002720 ENDOFJOB 00272 3 JOBSLEEP 002725
CHANG1 002733 EX_MN_notBank 00275 0 EX_MN_saveIt 002752
EX_MN_mvRec 002757 EX_MN_loop3 00276 3 EX_MN_done3 003002
JOBWAKE 003003 EX_JW_loop 00301 5 EX_JW_moveRec 003035
EX_JW_bumpPtr 003041 EX_JW_done 00305 6 EX_JW_return 003074
SPVAC 003075 EX_SP_loop1 00311 0 EX_SP_done1 003127
EX_SP_testFlg 003146 EX_SP_done2 00315 6 FINDVAC 003161
NOVAC 003162 EX_AJ_loop1 00320 0 EX_AJ_done1 003217
EX_AJ_testFlg 003236 EX_AJ_done2 00324 6 EX_initEX 003252
EX_IN_loop1 003266 EX_IN_loop2 00330 4 EX_IN_loop3 003307
EX_IN_done 003324 EX_findIns 00333 2 EX_FI_loop 003347
EX_FI_bumpPtr 003376 EX_FI_insRec 00340 5 EX_FI_done 003405
EX_remove 003410 EX_RM_loop1 00342 0 EX_RM_done1 003437
EX_RM_loop2 003446 EX_RM_done2 00346 5 EX_RM_loop3 003472
EX_RM_done3 003507 dumJob 00351 0 dumJob1 003514
dumJob2 003517 NOTACTLT 00352 5 DXCHJUMP 003526
DODXCHCALL 003547 DC_NOTBANK 00356 1 BANKCALL 003565
DOBANKCALL 003611 MYBANKCALL 00362 4 POSTJUMP 003653
DOPOSTJUMP 003677 BANKJUMP 00371 2 DOBANKJUMP 003733
DATACALL 003742 DODATACALL 00376 3 RELTAB 003772
RELTAB11 004005 DKTESTINIT 00400 6 DK_initDK 004007
DSPOFF 004012 T4PROG 00404 7 DSPOUTSR 004057
DSPSCAN 004065 TABLNTH 00407 2 _120MRUPT 004074
DSPLAY 004103 DSPOUT 00411 6 NODSPOUT 004126
DSPOUTEXIT 004126 CHRPRIO 00413 1 KEYPROG 004132
TPAGREE 004150 TPA_SGN0 00415 2 TPA_P0 004157
TPA_PZ0 004167 TPA_PZ0FIX 00420 0 TPA_M0 004210
TPA_MZ0 004220 TPA_MZ0FIX 00423 1 TPA_SGN1 004241
TPA_P1 004246 TPA_M1 00426 2 TPA_SGN2 004277
TPA_P2 004304 TPA_M2 00430 6 TPA_P3 004310
MAXPOS 004315 MAXNEG 00431 6 TPA_MPAC0 004317
TPA_MPAC1 004320 TPA_FIXM 00432 1 TPA_FIXP 004337
SHORTMP 004353 DMP 00437 4 BANKFF_1 004435
BANK4 010000 BANK04_1 01000 0 BANK5 012000
BANK40_1 012000 BANK6 01400 0 BANK41_1 014000
BANK7 016000 BANK42_1 01600 0 BANK10 020000
BANK43_1 020000 V37 01000 0 V37BAD 010002
CHECKTAB 010005 AGAINMM 01000 7 V37NONO 010026
FCADRMM1 010030 PREMM1 01003 7 EPREMM1 010046
NOV37MM 010046 BANK04_2 01004 7 CHARIN 012000
CHARIN2 012016 ELRCODE1 01206 2 ENTERJMP 012063
_89TEST 012065 NUM 01210 1 DECTOBIN 012137
ENDNMTST 012155 ENDNUM 01217 0 ENDALL 012174
DECEND 012176 PDECSGN 01222 0 MORNUM 012227
CRITCON 012232 DECON 01223 7 GETINREL 012241
INRELTAB 012245 CCSHOLE 01227 1 VERB 012272
NVCOM 012275 NOUN 01230 6 NEGSGN 012312
BOTHSGN 012315 PIXCLPAS 01232 1 POSGN 012326
P_ON 012332 SGNCOM 01234 2 M_ON 012353
SGNTAB 012364 SIGNTEST 01236 7 SGNTST1 012404
CLEAR 012412 CLPASHI 01243 1 CLEAR1 012454
CLR5 012461 LEGALTST 01246 4 _5BLANK 012473
_5BLANK1 012515 SINBLANK 01253 1 DOUBLK 012534
BRNCHCON 012537 _2BLANK 01254 0 BLANKCON 012563
BANK40_2 012564 NVSUBR 01400 0 LOADLV1 014001
ENTER 014002 ENTPASHI 01401 2 ACCEPTWD 014032
ENTEXIT 000433 MMADREF 01403 6 LOWVERB 014037
ENTPAS0 014040 TESTVB 01404 4 TESTNN 014054
REQADD 014073 USEADD 01411 7 LODNNLOC 014124
NEG5 014126 INTMCTBS 01412 7 VERBFAN 014151
LST2CON 014163 VBFANDIR 01416 4 VERBTAB 014167
MIXNOUN 014237 DPTEST 01424 0 DPTEST1 014262
REQDATX 014264 REQDATY 01427 0 REQDATZ 014274
REQCOM 014277 ENDRQDAT 01430 5 UPDATNN 014307
PUTADD 014320 UPDATVB 01432 7 UPDAT1 014335
GOALMCYC 014340 GODSPALM 01434 1 DSPABC 014343
DSPAB 014350 DSPA 01435 5 DSPCOM1 014361
DSPB 014363 DSPC 01437 0 DSPCOM2 014375
DSPCOM3 014403 COMPTEST 01441 4 COMPTST1 014417
NDOMPTST 014427 DCOMPTST 01443 0 DECTEST 014435
DCTSTCYC 014444 NOUNTEST 01445 3 TSTFORDP 014462
COMPICK 014477 GETCOMP 01450 1 DECDSP 014510
DSPDCGET 014514 DSPDCPUT 01452 4 DSPSFNOR 014546
GTSFOUTL 014550 DSPDCEND 01455 1 DECDSP3 014560
SFOUTABR 014563 BANK41_2 01460 0 DEGOUTSF 012564
SETAUG 012572 FIXRANGE 01260 3 DEGCOM 012616
DEGTAB 012640 ARTOUTSF 01264 4 SCOUTEND 012651
READLO 012653 READLO1 01266 5 RDLONOR 012701
ENDRDLO 012703 BANK40_3 01270 4 HMSOUT 016000
SECON1 016041 SECON2 01604 3 MINCON2 016045
MINCON1 016047 HRCON1 01605 1 SEPSECNR 016053
SEPMIN 016074 ENDSPMIN 01611 3 BANK42_2 016114
DSPDPDEC 012704 ENDDPDEC 01272 6 BANK40_4 012727
ABCLOAD 014600 PUTXYZ 01461 4 ABLOAD 014635
PUTXY 014646 ALOAD 01466 3 BLOAD 014673
CLOAD 014707 LOADLV 01472 3 VBSP1LD 014733
VBSP2LD 014734 VBSP3LD 01473 5 ALLDC_OC 014736
GOQ 014761 SFRUTNOR 01476 2 SFRUTMIX 014770
SFRET1 015002 SFCONUM 01500 3 SFRET 015020
DISPLACE 015022 CONUMNOR 01502 5 PUTCOM 015031
PUTDPCOM 015065 PUTNORM 01507 7 PUTNORM_1 015111
PUTCOM2 015111 GTSFINLC 01511 3 PUTDECSF 015114
PUTSFNOR 015125 PUTDCSF2 01512 6 SFINTABR 015131
BANK41_3 015146 DEGINSF 01272 7 DEGINSF2 012740
SIGNFIX 012750 ENDSCALE 01276 2 NEG180 012764
SGNTO1 012766 DEGCON1 01277 2 DEGCON2 012774
ARTHINSF 012776 BINROUND 01301 1 _2ROUND 013014
_2RNDEND 013024 TESTOFUF 01302 5 BANK40_5 013031
BANK42_3 016114 MONITOR 01514 6 MONIT1 015150
BIT15_14 015155 MONIT2 01516 4 MONREQ 015215
KILLMON 015232 MONDEL 01523 6 MONDO 015237
ENDMONDO 015273 MONREF 01527 4 MONBACK 015275
MONBUSY 015276 LODSAMPT 01530 0 BANK41_4 015301
PASTEVB 004435 PASTEOPT 00445 1 ENDPASTE 004472
MID7 004473 BANKFF_2 00447 4 DSPFMEM 015301
ENDSPF 015307 BANK41_5 01531 0 DSPSIGN 013031
DSPRND 013046 DPOSMAX 01306 2 DSPDECWD 013064
DSPDCWD1 013071 TRACE1 01307 4 TRACE1S 013105
DECROUND 013117 DSPDECNR 01312 0 DSPDC2NR 013124
DSP2DEC 013131 END2DEC 01314 3 DSPDECVN 013144
VNDSPCON 013155 GOVNUPDT 01315 6 BANK40_6 013161
DSPOCTWD 015310 WDAGAIN 01531 7 OCTBACK 015337
DSPLW 015341 DSPMSK 00205 7 DSP2BIT 015344
BANK41_6 015356 DSPIN 01316 1 DSPIN1 013206
DFRNT 013226 DSLV 01324 5 DSMSK 013247
_11DSPIN 013253 DSPOCTIN 01326 1 ENDSPOCT 013264
PREDSPAL 013265 DSPALARM 01326 7 CHARALRM 013307
MONADR 013313 NVSBENDL 01331 4 BANK40_7 013315
ALMCYCLE 004474 ENDALM 00450 2 BANKFF_3 004503
MMCHANG 015356 MODROUTR 01000 0 REQMM 015404
VBRQEXEC 015420 REQEX1 01542 5 REQUESTC 015431
SETVAC 015444 VBRQWAIT 01544 6 ENDRQWT 015452
BANK41_7 015453 VBPROC 01331 5 VBTERM 013323
VBRESEQ 013325 VBRELDSP 01332 7 TSTLTS4 013334
UNSUSPEN 013342 BANK40_8 01335 0 NVSUB 004503
NVMONOPT 004507 NVSBCOM 00451 6 NVSUBCOM 004524
NVSRRBNK 004531 NVSUBEND 00453 2 BANKFF_4 004536
BLANKDSP 015453 INCR_NOUT_RET 01546 3 INCR_NOUT 015501
NVSUB1 015505 ENTSET 01554 2 NVSUB2 015543
ENDNVSB1 015571 BANK41_8 01557 2 KILMONON 004536
ENDIDLE 004541 ENDINST 00455 3 ISCADR_P0 004554
ISLIST_P0 004560 DSPABORT 00456 3 BLANKSUB 004565
BSUB1ADDR 004612 BS_SUPDXCHZ 00461 3 BANKFF_5 004616
DSPMM 010047 ENDSPMM 01005 6 BANK04_3 010057
BLNKSUB1 013350 TESTBIT 01337 3 DSPMMJB 013400
RECALTST 013413 RECAL1 01341 6 RECAL2 013427
RECAL3 013444 DOTERM 01344 6 DOPROC 013450
BANK40_8a 013452 SETNCADR 00461 6 SETNADD 004625
SETEBANK 004633 R1D1 00463 5 R2D1 004636
R3D1 004637 RIGHT5 00464 0 LEFT5 004647
SLEFT5 004656 LOW5 00466 4 MID5 004665
HI5 004666 TCNOVAC 00466 7 TCWAIT 004670
TCFINDVAC 004671 LOW11 00467 2 B12M1 004672
LOW8 004673 LOW10 00467 4 VD1 004675
ND1 004676 MD1 00467 7 BINCON 004700
OUT1 000011 DSALMOUT 00001 1 FALTON 004701
FALTOF 004706 FALTOR 00471 2 RELDSPON 004713
RELDSPOR 004720 TPSL1 00472 1 PRSHRTMP 004740
DOSHRTMP 004754 FLASHON 00476 0 FLASHOFF 004770
FLSHTAB 005000 NVSUBUSY 00500 1 BANKFF_5a 005003
NVSUBSY1 013452 ENDNVBSY 01346 1 BANK40_9 013462
RELDSP 005003 RELDSP2 00501 7 RELDSP1 005026
NEWMODEA 005036 POODOO 00505 0 NOTPALT 005066
PINBRNCH 005067 BANKFF_6 00507 0 VBTSTLTS 015572
TSTLTS1 015600 FULLDSP 01562 1 FULLDSP1 015622
TSTCON1 015623 SHOLTS 01562 4 TSTLTS2 015625
TSTLTS3 015631 BANK41_9 01564 4 ERROR 013462
TSTAB 013467 ERMINUS 01347 7 ERPLUS 013502
ERCOM 013505 NOTBIT12 01351 7 ERCON 013520
BANK40_10 013521 LODNNTAB 01611 4 LODMIXNN 016135
LODNLV 016156 MIXCON 01616 1 GTSFOUT 016162
SFCOM 016173 GTSFIN 01617 6 NNADTAB 016210
NNTYPTAB 016354 SFINTAB 01652 0 SFOUTAB 016570
IDADDTAB 016640 RUTMXTAB 01712 4 BANK42_4 017220
GOEXTVB 020000 LST2FAN 02000 2 ALM_END 020076
GOPIN 020077 BANK43_2 02010 1 BANK11 022000
P00 022000 time1 02200 4 task1 022005
prio1 022011 job1 02201 2 nvcode1 022017
restart1_addr 022020 tcadr1 02202 1 P01 022022
P01_restart 022024 nvcode2 02203 3 restart2_addr 022034
tcadr2 022035 P02 02203 6 P02_restart 022040
P02_wait 022047 P02_pwd 02205 5 P02_ter 022060
nvcode3 022063 restart3_addr 02206 4 tcadr3 022065
P03 022066 P03_restart 02207 0 P03_wait 022077
P03_yield 022107 P03_pwd 02211 5 P03_ter 022120
nvcode4 022123 restart4_addr 02212 4 tcadr4 022125
mon_option 022126 P04 02212 7 P04_restart 022131
P78 022142 P79 02214 7 ARUPT 000026
Q 000001 QRUPT 00002 7 TIME1 000036
TIME2 000035 BANK 00001 5 A 000000
TIME4 000040 OUT0 00001 0 IN0 000004
LP 000003 OVCTR 00003 4 CYL 000022
SR 000021 CYR 00002 0