mirror of
https://github.com/PDP-10/its.git
synced 2026-05-02 22:33:27 +00:00
Build ITS monitor from source code.
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1 +1,2 @@
|
|||||||
*~
|
*~
|
||||||
|
out
|
||||||
|
|||||||
6
.gitmodules
vendored
Normal file
6
.gitmodules
vendored
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
[submodule "itstar"]
|
||||||
|
path = tools/itstar
|
||||||
|
url = https://github.com/PDP-10/itstar
|
||||||
|
[submodule "tapeutils"]
|
||||||
|
path = tools/tapeutils
|
||||||
|
url = https://github.com/brouhaha/tapeutils
|
||||||
8
.travis.yml
Normal file
8
.travis.yml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
language: c
|
||||||
|
sudo: required
|
||||||
|
install:
|
||||||
|
- sudo apt-get update -myq
|
||||||
|
- sudo apt-get install -my simh expect
|
||||||
|
script: make
|
||||||
|
notifications:
|
||||||
|
email: lars@nocrew.org
|
||||||
29
Makefile
Normal file
29
Makefile
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
ITSTAR=${PWD}/tools/itstar/itstar
|
||||||
|
WRITETAPE=${PWD}/tools/tapeutils/tapewrite
|
||||||
|
|
||||||
|
all: out/rp0.dsk
|
||||||
|
|
||||||
|
out/rp0.dsk: build/simh/init out/minsys.tape out/salv.tape out/dskdmp.tape build/build.tcl
|
||||||
|
expect -f build/build.tcl
|
||||||
|
|
||||||
|
out/minsys.tape: $(ITSTAR)
|
||||||
|
mkdir -p out
|
||||||
|
cd bin; $(ITSTAR) -cf ../$@ _ sys sys3 sysbin
|
||||||
|
cd src; $(ITSTAR) -rf ../$@ system
|
||||||
|
|
||||||
|
out/salv.tape: $(WRITETAPE) bin/boot/ram.262 bin/boot/salv.rp06
|
||||||
|
mkdir -p out
|
||||||
|
$(WRITETAPE) -n 2560 $@ bin/boot/ram.262 bin/boot/salv.rp06
|
||||||
|
|
||||||
|
out/dskdmp.tape: $(WRITETAPE) bin/boot/ram.262 bin/boot/dskdmp.rp06
|
||||||
|
mkdir -p out
|
||||||
|
$(WRITETAPE) -n 2560 $@ bin/boot/ram.262 bin/boot/dskdmp.rp06
|
||||||
|
|
||||||
|
$(ITSTAR):
|
||||||
|
cd tools/itstar; make
|
||||||
|
|
||||||
|
$(WRITETAPE):
|
||||||
|
cd tools/tapeutils; make
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -rf out
|
||||||
11
README.md
11
README.md
@@ -12,5 +12,12 @@ to operate ITS systems to this day.
|
|||||||
This repository contains source code, tools, and scripts to build ITS
|
This repository contains source code, tools, and scripts to build ITS
|
||||||
from scratch.
|
from scratch.
|
||||||
|
|
||||||
...or at least, that's the plan. There will be some initial
|
1. First, magnetic tape images are created from files in `src` and
|
||||||
experimentation in the [`test` branch](http://github.com/PDP-10/its/tree/test).
|
`bin`. There are two bootable tapes, and one tape with files in
|
||||||
|
DSKDMP backup format.
|
||||||
|
|
||||||
|
2. Then the tapes are used to create a file system on an RP06 disk and
|
||||||
|
populate it with a minimal system, and also source code.
|
||||||
|
|
||||||
|
3. Finally, the system is booted from the disk, and MIDAS is invoked
|
||||||
|
to assemble ITS from source code.
|
||||||
|
|||||||
BIN
bin/_/@.ddt
Normal file
BIN
bin/_/@.ddt
Normal file
Binary file not shown.
BIN
bin/_/bt.rm03
Normal file
BIN
bin/_/bt.rm03
Normal file
Binary file not shown.
BIN
bin/_/bt.rm80
Normal file
BIN
bin/_/bt.rm80
Normal file
Binary file not shown.
BIN
bin/_/bt.rp06
Normal file
BIN
bin/_/bt.rp06
Normal file
Binary file not shown.
BIN
bin/_/bt.rp07
Normal file
BIN
bin/_/bt.rp07
Normal file
Binary file not shown.
BIN
bin/_/dskdmp.rm03
Normal file
BIN
bin/_/dskdmp.rm03
Normal file
Binary file not shown.
BIN
bin/_/dskdmp.rm80
Normal file
BIN
bin/_/dskdmp.rm80
Normal file
Binary file not shown.
BIN
bin/_/dskdmp.rp06
Normal file
BIN
bin/_/dskdmp.rp06
Normal file
Binary file not shown.
BIN
bin/_/dskdmp.rp07
Normal file
BIN
bin/_/dskdmp.rp07
Normal file
Binary file not shown.
BIN
bin/_/its.rm03
Normal file
BIN
bin/_/its.rm03
Normal file
Binary file not shown.
BIN
bin/_/its.rm80
Normal file
BIN
bin/_/its.rm80
Normal file
Binary file not shown.
BIN
bin/_/its.rp06
Normal file
BIN
bin/_/its.rp06
Normal file
Binary file not shown.
BIN
bin/_/its.rp07
Normal file
BIN
bin/_/its.rp07
Normal file
Binary file not shown.
BIN
bin/_/ram.ram
Normal file
BIN
bin/_/ram.ram
Normal file
Binary file not shown.
BIN
bin/_/salv.rm03
Normal file
BIN
bin/_/salv.rm03
Normal file
Binary file not shown.
BIN
bin/_/salv.rm80
Normal file
BIN
bin/_/salv.rm80
Normal file
Binary file not shown.
BIN
bin/_/salv.rp06
Normal file
BIN
bin/_/salv.rp06
Normal file
Binary file not shown.
BIN
bin/_/salv.rp07
Normal file
BIN
bin/_/salv.rp07
Normal file
Binary file not shown.
BIN
bin/boot/dskdmp.rp06
Normal file
BIN
bin/boot/dskdmp.rp06
Normal file
Binary file not shown.
BIN
bin/boot/ram.262
Normal file
BIN
bin/boot/ram.262
Normal file
Binary file not shown.
BIN
bin/boot/salv.rp06
Normal file
BIN
bin/boot/salv.rp06
Normal file
Binary file not shown.
BIN
bin/sys/atsign.ddt
Normal file
BIN
bin/sys/atsign.ddt
Normal file
Binary file not shown.
BIN
bin/sys/atsign.device
Normal file
BIN
bin/sys/atsign.device
Normal file
Binary file not shown.
1
bin/sys/atsign.hactrn
Symbolic link
1
bin/sys/atsign.hactrn
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
sys/atsign.ddt
|
||||||
1
bin/sys/ts.dump
Symbolic link
1
bin/sys/ts.dump
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
sysbin/dump.bin
|
||||||
BIN
bin/sys/ts.ksfedr
Normal file
BIN
bin/sys/ts.ksfedr
Normal file
Binary file not shown.
BIN
bin/sys/ts.lock
Normal file
BIN
bin/sys/ts.lock
Normal file
Binary file not shown.
BIN
bin/sys/ts.pdset
Normal file
BIN
bin/sys/ts.pdset
Normal file
Binary file not shown.
BIN
bin/sys3/ts.midas
Executable file
BIN
bin/sys3/ts.midas
Executable file
Binary file not shown.
BIN
bin/sysbin/dump.bin
Normal file
BIN
bin/sysbin/dump.bin
Normal file
Binary file not shown.
93
build/build.tcl
Normal file
93
build/build.tcl
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
proc type s {
|
||||||
|
sleep .2
|
||||||
|
foreach c [split $s ""] {
|
||||||
|
send $c
|
||||||
|
expect -re .
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
proc respond { w r } {
|
||||||
|
expect $w
|
||||||
|
type $r
|
||||||
|
}
|
||||||
|
|
||||||
|
proc pdset {} {
|
||||||
|
respond "YOU MAY HAVE TO :PDSET" "\032"
|
||||||
|
respond "Fair" ":pdset\r"
|
||||||
|
set t [timestamp]
|
||||||
|
respond "PDSET" [expr [timestamp -seconds $t -format "%Y"] / 100]C
|
||||||
|
type [timestamp -seconds $t -format "%y%m%dD"]
|
||||||
|
type [timestamp -seconds $t -format "%H%M%ST"]
|
||||||
|
type "!."
|
||||||
|
expect "DAYLIGHT SAVINGS" {
|
||||||
|
type "N"
|
||||||
|
respond "IT IS NOW" "Q"
|
||||||
|
} "IT IS NOW" {
|
||||||
|
type "Q"
|
||||||
|
}
|
||||||
|
expect ":KILL"
|
||||||
|
}
|
||||||
|
|
||||||
|
proc shutdown {} {
|
||||||
|
respond "*" ":lock\r"
|
||||||
|
expect "_"
|
||||||
|
send "5kill"
|
||||||
|
respond "GO DOWN?\r\n" "y"
|
||||||
|
respond "BRIEF MESSAGE" "\003"
|
||||||
|
respond "NOW IN DDT" "\005"
|
||||||
|
}
|
||||||
|
|
||||||
|
spawn pdp10 build/simh/init
|
||||||
|
|
||||||
|
respond "sim>" "b tu1\r"
|
||||||
|
respond "MTBOOT" "mark\033g"
|
||||||
|
respond "Format pack on unit #" "0"
|
||||||
|
respond "Are you sure you want to format pack on drive" "y"
|
||||||
|
respond "Pack no?" "0\r"
|
||||||
|
respond "Verify pack?" "n"
|
||||||
|
respond "Alloc?" "3000\r"
|
||||||
|
respond "ID?" "foobar\r"
|
||||||
|
respond "DDT" "tran\033g"
|
||||||
|
respond "onto unit" "0"
|
||||||
|
respond "OK" "y"
|
||||||
|
expect "EOT"
|
||||||
|
respond "DDT" "\005"
|
||||||
|
|
||||||
|
respond "sim>" "b tu2\r"
|
||||||
|
respond "MTBOOT" "\033g"
|
||||||
|
respond "DSKDMP" "l\033ddt\r"
|
||||||
|
expect "\n"; type "t\033its rp06\r"
|
||||||
|
expect "\n"; type "\033u"
|
||||||
|
respond "DSKDMP" "m\033salv rp06\r"
|
||||||
|
expect "\n"; type "d\033its\r"
|
||||||
|
expect "\n"; type "its\r"
|
||||||
|
expect "\n"; type "\033g"
|
||||||
|
pdset
|
||||||
|
respond "*" ":ksfedr\r"
|
||||||
|
respond "File not found" "create\r"
|
||||||
|
expect -re {Directory address: ([0-7]*)\r\n}
|
||||||
|
set dir $expect_out(1,string)
|
||||||
|
type "write\r"
|
||||||
|
respond "Are you sure" "yes\r"
|
||||||
|
respond "Which file" "bt\r"
|
||||||
|
respond "Input from" ".;bt rp06\r"
|
||||||
|
respond "!" "quit\r"
|
||||||
|
expect ":KILL"
|
||||||
|
shutdown
|
||||||
|
|
||||||
|
respond "sim>" "b tu1\r"
|
||||||
|
respond "MTBOOT" "feset\033g"
|
||||||
|
respond "on unit #" "0"
|
||||||
|
respond "address: " "$dir\r"
|
||||||
|
respond "DDT" \005
|
||||||
|
respond "sim>" "quit"
|
||||||
|
|
||||||
|
spawn pdp10 build/simh/boot
|
||||||
|
respond "DSKDMP" "its\r"
|
||||||
|
type "\033g"
|
||||||
|
pdset
|
||||||
|
respond "*" ":midas system;_its\r"
|
||||||
|
respond "MACHINE NAME =" "AI\r"
|
||||||
|
expect ":KILL"
|
||||||
|
shutdown
|
||||||
|
respond "sim>" "quit"
|
||||||
5
build/simh/boot
Normal file
5
build/simh/boot
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
set cpu its
|
||||||
|
set tim y2k
|
||||||
|
set rp0 rp06
|
||||||
|
at rp0 out/rp0.dsk
|
||||||
|
b rp0
|
||||||
7
build/simh/init
Normal file
7
build/simh/init
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
set cpu its
|
||||||
|
set tim y2k
|
||||||
|
at tu0 out/minsys.tape
|
||||||
|
at tu1 out/salv.tape
|
||||||
|
at tu2 out/dskdmp.tape
|
||||||
|
set rp0 rp06
|
||||||
|
at rp0 out/rp0.dsk
|
||||||
1068
doc/build.doc
Normal file
1068
doc/build.doc
Normal file
File diff suppressed because it is too large
Load Diff
84
doc/build.info
Normal file
84
doc/build.info
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
How to build a bootable NSALV tape for ITS on a KS10 with one RM80:
|
||||||
|
|
||||||
|
Write the following to a tape using dd and mt or whatever. All files have
|
||||||
|
2560-byte records (in TM03 format, the KS will see them as 512 words).
|
||||||
|
Rumors of PDP-10s using all 9 tracks as data tracks are utterly false, that
|
||||||
|
would be stupid. You can write the tapes on any machine that can write
|
||||||
|
unlabeled 1600bpi tapes with 8-bit data. I used an IBM ES/9000 running MTS,
|
||||||
|
about as far from the 10 as you can get!
|
||||||
|
|
||||||
|
ram.262 (ITS microcode)
|
||||||
|
<tape mark>
|
||||||
|
mtboot.bin (boot block)
|
||||||
|
@.ddt (standalone DDT)
|
||||||
|
salv.rm80 (NSALV built for RM80)
|
||||||
|
<2 tape marks> cosmetic, not used but this way the tape is easily copied
|
||||||
|
using any machine you have handy since 2 tape marks
|
||||||
|
traditionally mean "end of tape"
|
||||||
|
|
||||||
|
Building the DSKDMP tape is the same but substitute dskdmp.rm80 for salv.rm80.
|
||||||
|
|
||||||
|
This directory also contains the other versions of DSKDMP and [N]SALV from
|
||||||
|
the MINSYS; directory, converted to TM03 magtape format, but since all I
|
||||||
|
have that works is an RM80 I haven't tested the others so I don't know for
|
||||||
|
sure that the files aren't mangled and I don't know whether the patch given
|
||||||
|
below is required for those versions of MARK to work. If you know, tell me!
|
||||||
|
|
||||||
|
DSKDMP and NSALV tapes will help you build a blank disk but you'll still need
|
||||||
|
to make DUMP tapes of the MINSYS files if you want to load ITS, and you'll
|
||||||
|
need a lot more files to run and/or rebuild a real system. Writing DUMP tapes
|
||||||
|
from a non-ITS machine isn't too difficult, send me email and I'll give you
|
||||||
|
my code.
|
||||||
|
|
||||||
|
*** NOTE ***
|
||||||
|
|
||||||
|
As distributed there is a bug in the salvager, which needs to be patched before
|
||||||
|
you run MARK. Here's what to do (user input shown in lower case):
|
||||||
|
|
||||||
|
KS10>mt <cr>
|
||||||
|
KS10>USR MOD
|
||||||
|
ITS MTBOOT.176
|
||||||
|
qcnvt/' MOVSI B,-1 <lf>
|
||||||
|
QCNVT+1/ CAMN A,QTRAN(B) came a,qtran(b) <cr>
|
||||||
|
mark<esc>g
|
||||||
|
Format pack on unit #
|
||||||
|
|
||||||
|
... and so on, from here on out it's just like what BUILD DOC says.
|
||||||
|
|
||||||
|
Note that the distributed ITS 1644 binaries are built with the tape RH11 at a
|
||||||
|
non-standard address, and the system will crash if you try to run DUMP w/o
|
||||||
|
either moving the RH11 or reassembling a new system with the addr fixed.
|
||||||
|
So either edit SYSTEM; TM03S DEFS4 to change %TMBAS back to 772440 (instead
|
||||||
|
of 772400), or just delete the file since SYSTEM; TM03S DEFS3 has it right, and
|
||||||
|
reassemble the system.
|
||||||
|
|
||||||
|
IMPORTANT STUFF THAT APPARENTLY NOT EVERYONE KNOWS:
|
||||||
|
|
||||||
|
Before you go borrowing peripherals off of a VAX or PDP-11, you need to make
|
||||||
|
sure that your tape drive has the "universal data formatter" board (also known
|
||||||
|
as the "universal bit fiddler"), since otherwise it won't support 36-bit words
|
||||||
|
(packed into 5 tape frames each with 4 wasted bits) and you will lose. In
|
||||||
|
the TM03 formatter this board is M8915-YA, and it's quite rare since VAXen
|
||||||
|
don't need it.
|
||||||
|
|
||||||
|
You *can* use VAX Massbus disks with the KS since they all support 18-bit mode
|
||||||
|
and MARK handles the reformatting (rumors of needing an HDA swap are greatly
|
||||||
|
exaggerated), but with RM drives (including the RM80) you need to add a jumper
|
||||||
|
or else 18-bit operation will not work correctly. This jumper must connect
|
||||||
|
pins E06E1 and E06C2 on the RM Adapter backplane, which is the card cage that
|
||||||
|
goes under the drive in an RM02/03/80 or next to the drive in an RM05.
|
||||||
|
THIS IS NOT OPTIONAL!
|
||||||
|
|
||||||
|
The RH11s used in the KS10 are not quite vanilla either (naturally), the M7294
|
||||||
|
board used in the RH11-AB (used in some PDP-11s and VAXen) is replaced by an
|
||||||
|
M7294-YA in the RH11C (used in the KS). I'm fairly sure that all the other
|
||||||
|
parts interchange though so feel free to gut your VAX for spares.
|
||||||
|
|
||||||
|
DRIVES OTHER THAN THE RM80:
|
||||||
|
RM80s are all I have that works, so I have no way to test the other versions
|
||||||
|
of the "dskdmp.*" and "salv.*" files in this directory, so I don't know if
|
||||||
|
the bug in "MARK" is fixed in them. Give it a try... Anyway otherwise the
|
||||||
|
instructions for making the tapes are the same as for the RM80 versions, as
|
||||||
|
far as I know RP06 drives need no jumper changes but the RM drives do.
|
||||||
|
|
||||||
|
John Wilson <wilson@dbit.dbit.com> 31-Jan-1995
|
||||||
1111
src/system/bits.117
Executable file
1111
src/system/bits.117
Executable file
File diff suppressed because it is too large
Load Diff
26
src/system/ch10.defs1
Executable file
26
src/system/ch10.defs1
Executable file
@@ -0,0 +1,26 @@
|
|||||||
|
;Hardware definitions for CH10 PDP-10 CHAOSNET interface
|
||||||
|
|
||||||
|
CHX==470 ;I/O Device number
|
||||||
|
|
||||||
|
;CONI/CONO BITS
|
||||||
|
;1.1-1.3 PIA
|
||||||
|
CHXTEN==10 ;1.4 Transmit interrupt enable
|
||||||
|
CHXREN==20 ;1.5 Receive interrupt enable
|
||||||
|
CHXSPY==40 ;1.6 Match any destination (on receive)
|
||||||
|
CHXLUP==100 ;1.7 Loop back
|
||||||
|
CHXSWB==200 ;1.8 Swap bytes
|
||||||
|
CHXHLF==400 ;1.9 Halfword DATAO
|
||||||
|
CHXXMT==1000 ;2.1 Transmit done (CONI)
|
||||||
|
; Transmit or retransmit packet (CONO)
|
||||||
|
CHXRCV==2000 ;2.2 Receive done (CONI)
|
||||||
|
; Enable to receive next packet (CONO)
|
||||||
|
CHXABT==4000 ;2.3 Transmit aborted (CONI)
|
||||||
|
; Reset transmitter (CONO)
|
||||||
|
$CHXLC==140400 ;2.4-2.7 Lost count (CONI)
|
||||||
|
CHXRST==10000 ;2.4 Reset (CONO)
|
||||||
|
CHXCRC==200000 ;2.8 CRC error (CONI)
|
||||||
|
CHXWLE==400000 ;2.9 Word length error (CONI)
|
||||||
|
CHXPLE==1,, ;3.1 Packet length error (CONI)
|
||||||
|
CHXOVR==2,, ;3.2 Overrun (CONI)
|
||||||
|
$CHXAD==242000 ;3.3-4.9 Chaosnet address (CONI)
|
||||||
|
|
||||||
58
src/system/ch11.defs1
Executable file
58
src/system/ch11.defs1
Executable file
@@ -0,0 +1,58 @@
|
|||||||
|
;; CH11 Unibus Chaosnet Interface definitions
|
||||||
|
|
||||||
|
CAICSR=3,,764140 ;COMMAND STATUS REG
|
||||||
|
CH%CSR==0
|
||||||
|
%CABSY==1 ;0 XMT BUSY (RO)
|
||||||
|
%CALUP==2 ;1 LOOP BACK (R/W)
|
||||||
|
%CASPY==4 ;2 RECIEVE MSGS FOR ANY DESTINATION (R/W)
|
||||||
|
%CARCL==10 ;3 CLEAR THE RECEIVER, IT CAN NOW GOBBLE ANOTHER MSG (WO)
|
||||||
|
%CAREN==20 ;4 RCV INT ENB (R/W)
|
||||||
|
%CATEN==40 ;5 XMT INT ENB (R/W)
|
||||||
|
%CATAB==100 ;6 TRANSMIT ABORTED BY ETHER CONFLICT (RO)
|
||||||
|
%CATDN==200 ;7 TRANSMIT DONE. SET WHEN TRANSMITTER IS DONE
|
||||||
|
%CATCL==400 ;8 CLEAR THE TRANSMITTER, MAKING IT READY (WO)
|
||||||
|
$CALOS==110400 ;9-12 LOST COUNT (RO) [# MSGS RCVED WITH RCV BFR FULL]
|
||||||
|
; WHEN MSG IS WAITING IN BUFFER, THIS COUNTS
|
||||||
|
; THE MESSAGES THAT MATCHED OUR DESTINATION OR
|
||||||
|
; WERE BROADCAST, BUT COULDN'T BE RECIEVED.
|
||||||
|
; WHEN RECEIVER IS RE-ENABLED (WRITE 1 INTO %CARDN)
|
||||||
|
; THE COUNT IS THEN CLEARED.
|
||||||
|
; WHEN A MESSAGE IS LOST, RECEIVER ZAPS ETHER
|
||||||
|
; SO TRANSMITTER WILL ABORT (IF MESSAGE WAS DESTINED
|
||||||
|
; TO US.)
|
||||||
|
%CARST==20000 ;13 I/O RESET (WO)
|
||||||
|
%CAERR==40000 ;14 CRC ERROR (RO)
|
||||||
|
%CARDN==100000 ;15 RCV DONE.
|
||||||
|
|
||||||
|
CAIMYN==3,,764142 ;MY # (READ ONLY)
|
||||||
|
CH%MYN==2 ;RETURNS THE [SOURCE] HOST# OF THIS INTERFACE.
|
||||||
|
|
||||||
|
CAIWBF=3,,764142 ;WRITE BUFFER (WRITE ONLY)
|
||||||
|
CH%WBF==2 ;FIRST WAIT FOR TDONE. (OR SET IT VIA CSR)
|
||||||
|
;FIRST WORD IN RESETS TRANSMITTER AND CLEARS TDONE.
|
||||||
|
;STORE INTO THIS REGISTER TO WRITE WORDS OF MESSAGE,
|
||||||
|
;LAST WORD IN IS DESTINATION ADDRESS, THEN READ CAIXMT.
|
||||||
|
;SOURCE ADDRESS AND CHECK WORD PUT IN BY HARDWARE.
|
||||||
|
|
||||||
|
CAIRBF=3,,764144 ;READ BUFFER (READ ONLY)
|
||||||
|
CH%RBF==4 ;THE FIRST WORD READ WILL BE FILLED TO THE LEFT
|
||||||
|
;TO MAKE THE MESSAGE RECIEVED A MULTIPLE OF 16 BITS.
|
||||||
|
;IF THE NUMBER OF DATA BITS IN THE MESSAGE WAS A
|
||||||
|
;MULTIPLE OF 16, THIS WORD WILL BE THE FIRST WORD PUT
|
||||||
|
;INTO THE BUFFER BY THE TRANSMITTING HOST.
|
||||||
|
;THE LAST 3 WORDS READ ARE DESTINATION, SOURCE, CHECK.
|
||||||
|
|
||||||
|
CAIRBC=3,,764146 ;RECEIVE BIT COUNTER (READ ONLY)
|
||||||
|
CH%RBC==6 ;WHEN A MESSAGE HAS BEEN RECEIVED THIS IS ONE LESS THAN
|
||||||
|
;THE NUMBER OF BITS IN THE MESSAGE (16 X THE
|
||||||
|
;NUMBER OF WORDS INCLUDING THE THREE OVERHEAD WORDS.)
|
||||||
|
;AFTER THE LAST WORD (THE CRC WORD) HAS BEEN READ, IT IS 7777
|
||||||
|
;BITS 10 AND 11 ARE THE HIGH ORDER BITS, AND IF THEY ARE ONE,
|
||||||
|
;THEN THERE WAS A BUFFER OVERFLOW
|
||||||
|
|
||||||
|
CAIXMT=3,,764152 ;READING THIS INITIATES TRANSMISSION (!!)
|
||||||
|
CH%XMT==12 ;THE VALUE READ IS ONE'S OWN HOST#.
|
||||||
|
|
||||||
|
;REFERENCING ADDRESSES IN THE GROUP OF 8 WORDS NOT LISTED HERE, OR
|
||||||
|
;USING COMBINATIONS OF READ/WRITE NOT LISTED HERE, WILL TYPICALLY CAUSE
|
||||||
|
;STRANGE AND BIZARRE EFFECTS.
|
||||||
2782
src/system/chaos.288
Executable file
2782
src/system/chaos.288
Executable file
File diff suppressed because it is too large
Load Diff
68
src/system/chsdef.15
Executable file
68
src/system/chsdef.15
Executable file
@@ -0,0 +1,68 @@
|
|||||||
|
;;; CHAOS NET PACKET DEFINITION
|
||||||
|
|
||||||
|
;NOTE, IF YOU MAKE CHANGES TO OPCODES OR CONNECTION STATE SYMBOLS,
|
||||||
|
;ALSO CHANGE AI:MAINT;CHS DEFS.
|
||||||
|
;THIS FILE IS FOR PDP-10'S - CHS DEFS IS FOR PDP-11'S.
|
||||||
|
|
||||||
|
|
||||||
|
;PACKET HEADER
|
||||||
|
;NOTE THESE ARE FULL WORD BYTE POINTERS, INCLUDING A WORD OFFSET
|
||||||
|
|
||||||
|
$CPKOP==341000,,0 ;OPCODE
|
||||||
|
%CO==,,-1
|
||||||
|
%CORFC==1 ;REQUEST FOR CONNECTION
|
||||||
|
%COOPN==2 ;OPEN
|
||||||
|
%COCLS==3 ;CLOSE
|
||||||
|
%COFWD==4 ;FORWARD
|
||||||
|
%COANS==5 ;ANSWER
|
||||||
|
%COSNS==6 ;SENSE STATUS
|
||||||
|
%COSTS==7 ;REPORT STATUS
|
||||||
|
%CORUT==10 ;ROUTING INFO (NOT YET USED)
|
||||||
|
%COLOS==11 ;REPORT LOSSAGE
|
||||||
|
%COLSN==12 ;LISTEN FOR RFC
|
||||||
|
%COMNT==13 ;MAINTENANCE USE, IGNORED BY NORMAL NCPS
|
||||||
|
%COEOF==14 ;END OF FILE
|
||||||
|
%COUNC==15 ;UNCONTROLLED USER PACKET
|
||||||
|
%COBRD==16 ;Software broadcast packet
|
||||||
|
%COMAX==17 ;HIGHEST NON-DATA OPCODE +1
|
||||||
|
%CODAT==200 ;NORMAL DATA OPCODE (NOTE SIGN BIT OF WORD IS SET)
|
||||||
|
%CODWD==300 ;16-BIT DATA
|
||||||
|
$CPKMV==241000,,0 ;"MUPPET" VERSION (MUST BE ZERO, NO MUPPETS EXIST!)
|
||||||
|
$CPKFC==200400,,0 ;FORWARDING COUNT
|
||||||
|
$CPKNB==041400,,0 ;NUMBER OF BYTES
|
||||||
|
$CPKDA==242000,,1 ;DESTINATION ADDRESS
|
||||||
|
$CPKDN==341000,,1 ;DESTINATION SUBNET
|
||||||
|
$CPKDH==241000,,1 ;DESTINATION HOST
|
||||||
|
$CPKDI==042000,,1 ;DESTINATION INDEX
|
||||||
|
%CPKD==1 ;DESTINATION ADDRESS WORD
|
||||||
|
$CPKSA==242000,,2 ;SOURCE ADDRESS
|
||||||
|
$CPKSN==341000,,2 ;SOURCE SUBNET
|
||||||
|
$CPKSH==241000,,2 ;SOURCE HOST
|
||||||
|
$CPKSI==042000,,2 ;SOURCE INDEX
|
||||||
|
%CPKS==2 ;SOURCE ADDRESS WORD
|
||||||
|
$CPKPN==242000,,3 ;PACKET NUMBER
|
||||||
|
$CPKAN==042000,,3 ;ACKNOWLEDGE NUMBER
|
||||||
|
%CPKDT==4 ;FIRST WORD OF DATA
|
||||||
|
|
||||||
|
;PACKET SIZE
|
||||||
|
|
||||||
|
;THESE NUMBERS ARE FOR 1K PACKET BUFFERS
|
||||||
|
;%CPMXW==30. ;MAXIMUM NUMBER OF PDP10 WORDS IN WHOLE PACKET
|
||||||
|
;%CPMXC==104. ;MAXIMUM NUMBER OF CHARACTERS OF DATA
|
||||||
|
|
||||||
|
;THESE NUMBERS ARE FOR 4K PACKET BUFFERS
|
||||||
|
%CPMXW==126. ;MAXIMUM NUMBER OF PDP10 WORDS IN WHOLE PACKET
|
||||||
|
%CPMXC==488. ;MAXIMUM NUMBER OF CHARACTERS OF DATA
|
||||||
|
|
||||||
|
;CONNECTION STATES
|
||||||
|
|
||||||
|
%CS==,,-1
|
||||||
|
%CSCLS==0 ;CLOSED
|
||||||
|
%CSLSN==1 ;LISTENING
|
||||||
|
%CSRFC==2 ;RFC RECEIVED
|
||||||
|
%CSRFS==3 ;RFC SENT
|
||||||
|
%CSOPN==4 ;OPEN
|
||||||
|
%CSLOS==5 ;BROKEN BY RECEIPT OF "LOS"
|
||||||
|
%CSINC==6 ;BROKEN BY INCOMPLETE TRANSMISSION (NO RESPONSE TO SNS)
|
||||||
|
%CSFRN==7 ;OPEN IN FOREIGN PROTOCOL MODE
|
||||||
|
%CSBRS==10 ;BRD sent state
|
||||||
926
src/system/config.196
Executable file
926
src/system/config.196
Executable file
@@ -0,0 +1,926 @@
|
|||||||
|
.AUXIL
|
||||||
|
|
||||||
|
;;; "INSTALLATION" RELATED SWITCHES
|
||||||
|
|
||||||
|
IFNDEF DEFSYM,[ ;ALLOW USER TO USE SYMBOLS IN OTHER WAYS IF HE WISHES.
|
||||||
|
;BUT NORMALLY, DEFSYM FOO==BAR DOES FOO==BAR WITH ERROR CHECK.
|
||||||
|
DEFINE DEFSYM X/
|
||||||
|
IRPS Z,,[X]
|
||||||
|
IFNDEF Z,X
|
||||||
|
.ELSE [
|
||||||
|
$$TEM1==Z
|
||||||
|
X
|
||||||
|
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
|
||||||
|
]
|
||||||
|
.ISTOP
|
||||||
|
TERMIN TERMIN
|
||||||
|
|
||||||
|
IFLE .MLLIT,.ERR .MLLIT MUST BE 1; SETTING IT TO 1.
|
||||||
|
.MLLIT==1
|
||||||
|
$$TEMP==1
|
||||||
|
]
|
||||||
|
.ELSE $$TEMP==0
|
||||||
|
|
||||||
|
IFNDEF DEFOPT,[ ;ALLOW USER TO USE SYMBOLS IN OTHER WAYS IF HE WISHES.
|
||||||
|
;BUT NORMALLY, DEFOPT FOO==BAR DOES IT UNLESS FOO ALREADY DEFINED
|
||||||
|
DEFINE DEFOPT X/
|
||||||
|
IRPS Z,,[X]
|
||||||
|
IFNDEF Z, X
|
||||||
|
.ISTOP
|
||||||
|
TERMIN TERMIN
|
||||||
|
|
||||||
|
IFLE .MLLIT,.ERR .MLLIT MUST BE 1; SETTING IT TO 1.
|
||||||
|
.MLLIT==1
|
||||||
|
$$TEM2==1
|
||||||
|
]
|
||||||
|
.ELSE $$TEM2==0
|
||||||
|
|
||||||
|
IFE MCOND AIKA,[
|
||||||
|
DEFOPT KA10P==1 ;AI-KA HAS KA10 PROCESSOR
|
||||||
|
DEFOPT MAXJ==85. ;MAX NUMBER OF JOBS ALLOWED
|
||||||
|
DEFOPT SWBLK==1 ;1=> SWAP BLOCKING, 0=> PRIVILEGED USER
|
||||||
|
DEFOPT SWPWSP==0 ;NO WORKING-SET SWAP SCHEDULER
|
||||||
|
DEFOPT PAGPRE==1 ;PAGE-IN PREEMPTION
|
||||||
|
DEFOPT SCHBLN==10. ;NUMBER OF RUNNABLE JOBS TO REMEMBER
|
||||||
|
|
||||||
|
DEFOPT NQS==8. ;# 2314 UNITS
|
||||||
|
DEFOPT NTUTBL==2 ;TUTS ARE 2 BLOCKS LONG (THIS DEFN BETTER AGREE WITH DC10 DEFS)
|
||||||
|
DEFSYM NUDSL==440. ;# USER DIRECTORIES ON DISK. NOTE: JUST CHANGING THIS
|
||||||
|
; IS NOT SUFFICIENT!!
|
||||||
|
DEFOPT NQCHN==40. ;NUMBER 2314 CHNLS
|
||||||
|
DEFOPT DC10P==1 ;HAS SYSTEMS CONCEPTS DISK CONTROL
|
||||||
|
DEFOPT DMDSK==0 ;DOES NOT USE DM DSK FORMAT (I.E. HAS EXTRA WORDS)
|
||||||
|
DEFOPT QRSRVP==1 ;HAS RESERVED DISK PACKS (SECONDARY PACK)
|
||||||
|
DEFOPT QAUTHP==1 ;KEEPS TRACK OF FILE AUTHORS
|
||||||
|
|
||||||
|
DEFOPT C1MXP==1 ;CHNL 1 MPX FEATURE
|
||||||
|
DEFOPT NMTCS==1 ;NUMBER MAG TAPE UNITS
|
||||||
|
DEFOPT TM10A==1 ;IO-BUS MAG TAPE
|
||||||
|
DEFOPT PTRP==1 ;HAS PAPER TAPE
|
||||||
|
DEFOPT PTPP==0 ; But punch doesn't work!
|
||||||
|
DEFOPT PDCLKP==1 ;"DeCoriolis" CLOCK
|
||||||
|
DEFOPT DPKPP==1 ;DATA POINT KLUDGE (TTY mux)
|
||||||
|
|
||||||
|
DEFOPT NETP==1 ; Connected to a network
|
||||||
|
DEFOPT IMPP==1 ; Has IMP interface
|
||||||
|
DEFOPT KAIMP==1
|
||||||
|
DEFOPT IMPUS==206 ; ARPA net host number
|
||||||
|
DEFOPT IMPUS3==<1200,,400006> ; Internet host number
|
||||||
|
DEFOPT NCPP==1 ; Include NCP code
|
||||||
|
DEFOPT NNETCH==30. ; # NCP network channels
|
||||||
|
DEFOPT INETP==1 ; Include Internet code
|
||||||
|
DEFOPT TCPP==1 ; Include TCP code
|
||||||
|
DEFOPT XBL==20. ; # TCP network channels
|
||||||
|
|
||||||
|
DEFOPT TK10P==1 ;HAS TK10 TTY SCANNER (NO MORE, BUT LEAVE IT SO TTY#S DON'T CHANGE)
|
||||||
|
DEFOPT NOTYS==1 ;# KA-10 CONSOLE 0 TTYS
|
||||||
|
DEFOPT NNTYS==16. ;# TTYS ON KNIGHT KLUDGE
|
||||||
|
DEFOPT NDPTYS==9. ;# TTYS ON DATAPOINT KLUDGE
|
||||||
|
DEFOPT NSTTYS==16. ;# OF STY'S (PSEUDO-TTY'S)
|
||||||
|
DEFOPT APL==10 ;AP TTY # (really?)
|
||||||
|
|
||||||
|
DEFOPT CODP==1 ; Has Morse code output device (no antenna though)
|
||||||
|
|
||||||
|
; The following AI-KA stuff is broken since the 10-11 interface doesn't work,
|
||||||
|
; but is retained in case it gets fixed.
|
||||||
|
DEFOPT TEN11P==0 ; Rubin 10-11 interface
|
||||||
|
IFN TEN11P,[
|
||||||
|
DEFOPT XGP==1 ; Has XGP
|
||||||
|
DEFOPT CHAOSP==1 ; Has CHAOS net
|
||||||
|
DEFOPT MYCHAD==2026 ; CHAOS net address
|
||||||
|
DEFOPT NINDX==50. ; Number of Chaosnet indices
|
||||||
|
DEFOPT T11CHP==1 ; CHAOS net goes through TEN-11 interface
|
||||||
|
DEFOPT CH11NM==7 ; # of 10-11 PDP11 handling CHAOS net.
|
||||||
|
DEFOPT TT11NM==0 ; # of 10-11 PDP11 that handles TV TTYs.
|
||||||
|
DEFOPT N11TYS==16. ; # PDP11 TV TTYS
|
||||||
|
DEFOPT MXVBN==40 ; Max video bfr # for assignment purposes.
|
||||||
|
] ;TEN11P ; These actually correspond to video switch inputs.
|
||||||
|
|
||||||
|
|
||||||
|
; The following stuff used to be on AI-KA and is unlikely to ever
|
||||||
|
; come back.
|
||||||
|
;DEFOPT PDP6P==0 ;HAS PDP6 (ALAS, NO MORE)
|
||||||
|
;DEFOPT 340P==0 ;HAS 340 DISPLAY (ALAS, NO MORE)
|
||||||
|
;DEFOPT TABP==0 ;DOESN'T HAVE SYLVANIA TABLET ANY MORE
|
||||||
|
;DEFOPT DSDP==0 ;HAS DESELECTION DEVICE (ALAS, NO MORE)
|
||||||
|
;DEFOPT NEWDTP==0 ;HAD OLD DECTAPE CONTROLLER
|
||||||
|
;DEFOPT RBTCP==0 ;ROBOT CONSOLE
|
||||||
|
;DEFOPT HCLKP==0 ;HOLLOWAY CLOCK (ALAS, NO MORE)
|
||||||
|
;DEFOPT ARMP==0 ;HAS NO ARM (AMF MOSTLY) (R.I.P.)
|
||||||
|
;DEFOPT OMXP==0 ;HAS OMX (OUTPUT MULTIPLEXOR) (ALAS, NO MORE)
|
||||||
|
;DEFOPT IMXP==0 ;HAS IMX (INPUT MULTIPLEXOR) (ALAS, NO MORE)
|
||||||
|
;DEFOPT VIDP==0 ;HAD VIDI (R.I.P.)
|
||||||
|
;DEFOPT CCLKP==0 ;NO CHESS TOURN CLOCK STUFF
|
||||||
|
;DEFOPT NDAP==0 ;NEW D/A CONVERTERS (ALAS, NO MORE)
|
||||||
|
|
||||||
|
; Physical memory variables
|
||||||
|
|
||||||
|
DEFOPT TSYSM==768. ;TOTAL PDP10 1K MEM BLOCKS
|
||||||
|
DEFOPT ECCMEM==1 ;HAS HIC'S ERROR CORRECTING MEMORY
|
||||||
|
DEFOPT NMMP==4 ;# EXEC PAGES FOR MMP TABLE (# VIR PGS/512.);
|
||||||
|
|
||||||
|
DEFSYM PMRCM==1777 ;CORE ADR FIELD IN PAGE MAP (AI-KA HAS 10 BITS)
|
||||||
|
DEFSYM PMAGEM==16000 ;AI-KA HAS ONE LESS AGE BITS
|
||||||
|
DEFSYM PMCSHM==0 ;NO CACHE BIT
|
||||||
|
DEFSYM PMUNSD==160000 ;UNUSED BITS
|
||||||
|
|
||||||
|
IFDEF TEN11P,IFN TEN11P,DEFSYM T11CPA==3776000 ;ADRS OF TEN-11 CONTROL PAGE
|
||||||
|
IFDEF PDP6P,IFN PDP6P,DEFSYM PDP6BM==3000000 ;BASE ADR OF PDP6 MEM AS SEEN FROM 10
|
||||||
|
IFDEF PDP6P,IFN PDP6P,DEFSYM LPDP6M==16. ;LENGTH OF PDP6 MEM IN PAGES
|
||||||
|
] ;AIKA
|
||||||
|
|
||||||
|
IFE MCOND MLKA,[
|
||||||
|
DEFOPT KA10P==1 ;ML-KA HAS KA PROCESSOR
|
||||||
|
DEFOPT MAXJ==60. ;MAX NUMBER OF JOBS ALLOWED
|
||||||
|
DEFOPT SWBLK==1 ;1 => SWAP BLOCKING, 0 => PRIV USER
|
||||||
|
DEFOPT SWPWSP==0 ;NO WORKING-SET SWAP SCHEDULER
|
||||||
|
DEFOPT PAGPRE==1 ; Page-in preemption
|
||||||
|
DEFOPT SCHBLN==10. ;NUMBER OF RUNNABLE JOBS TO REMEMBER
|
||||||
|
|
||||||
|
DEFOPT NQCHN==30. ;NUMBER 2314 CHNLS
|
||||||
|
DEFOPT NQS==7 ;# DISK UNITS
|
||||||
|
DEFOPT NTUTBL==1 ;TUTS ARE ONE BLOCK LONG
|
||||||
|
DEFSYM NUDSL==250. ;# USER DIRECTORIES ON DISK
|
||||||
|
DEFOPT RP10P==1 ;HAS DEC RP10 DISK CONTROL (RP02)
|
||||||
|
DEFOPT QRDCMP==1 ;SOFTWARE READ-COMPARE
|
||||||
|
DEFOPT DMDSK==1 ;USES DM DISK FORMAT
|
||||||
|
DEFOPT QRSRVP==1 ;HAS RESERVED DISK PACKS (SECONDARY PACK)
|
||||||
|
DEFOPT QAUTHP==1 ;KEEPS TRACK OF FILE AUTHORS
|
||||||
|
|
||||||
|
DEFOPT C1MXP==1 ;CHANNEL 1 MPX FEATURE
|
||||||
|
DEFOPT NEWDTP==1 ;HAS NEW DECTAPE CONTROLLER
|
||||||
|
;DEFOPT NUNITS==4 ; Number of utape units (R.I.P.)
|
||||||
|
DEFOPT NMTCS==1 ;NUMBER OF MAG TAPE UNITS
|
||||||
|
DEFOPT TM10A==1 ;IO-BUS MAG TAPE
|
||||||
|
DEFOPT NLPTP==1 ;HAS NEW LPT (ODEC)
|
||||||
|
DEFOPT TPLP==1 ;PSEUDO LPT
|
||||||
|
DEFOPT PTRP==1 ;HAS PAPER TAPE
|
||||||
|
DEFOPT PTPP==1 ; And punch works.
|
||||||
|
DEFOPT MTYP==1 ;HAS MORTON MULTIPLEX BOX
|
||||||
|
DEFOPT PDCLKP==1 ;"DeCoriolis" CLOCK
|
||||||
|
|
||||||
|
DEFOPT NETP==1 ; Has net connection
|
||||||
|
DEFOPT IMPP==1 ; Has IMP interface
|
||||||
|
DEFOPT KAIMP==1
|
||||||
|
DEFOPT IMPUS==306 ; ARPA net host number
|
||||||
|
DEFOPT IMPUS3==<1200,,600006> ; Internet host number
|
||||||
|
DEFOPT NCPP==0 ; Flush NCP code
|
||||||
|
DEFOPT NNETCH==20. ; # NCP net channels
|
||||||
|
DEFOPT INETP==1 ; Include Internet code
|
||||||
|
DEFOPT TCPP==1 ; Include TCP code
|
||||||
|
DEFOPT XBL==20. ; # TCP network channels
|
||||||
|
DEFOPT CHAOSP==1 ;CHAOS NET
|
||||||
|
DEFOPT MYCHAD==3114 ;CHAOS NET ADDRESS
|
||||||
|
DEFOPT NINDX==30. ;NUMBER OF INDICES
|
||||||
|
DEFOPT CH10P==1 ;CHAOS NET VIA PDP-10 I/O BUS, NOT FRONT-END
|
||||||
|
|
||||||
|
DEFOPT NOTYS==1 ;# KA-10 CONSOLE 0 TTYS
|
||||||
|
;DEFOPT NNVTTS==0 ;# NOVA TTYS (used to have?)
|
||||||
|
DEFOPT NMTYS==33 ;# TTYS ON MORTON BOX
|
||||||
|
DEFOPT NSTTYS==8 ;# STY'S (PSEUDO-TTY'S)
|
||||||
|
|
||||||
|
DEFOPT TSYSM==512. ;TOTAL PDP10 1K MEM BLOCKS
|
||||||
|
DEFOPT NMMP==4 ;# EXEC PAGES FOR MMP TABLE (# VIR PGS/512.)
|
||||||
|
|
||||||
|
DEFSYM PMRCM==777 ;9 BIT REAL CORE ADR
|
||||||
|
DEFSYM PMAGEM==17000 ;4 BIT AGE
|
||||||
|
DEFSYM PMCSHM==0 ;NO CACHE BIT
|
||||||
|
DEFSYM PMUNSD==160000 ;UNUSED BITS
|
||||||
|
] ;MLKA
|
||||||
|
|
||||||
|
IFE MCOND DM,[
|
||||||
|
DEFOPT KA10P==1 ;DM HAS KA10 PROCESSOR
|
||||||
|
DEFOPT MAXJ==63. ;MAX NUMBER OF JOBS ALLOWED
|
||||||
|
DEFOPT SWBLK==0 ;1 => SWAP BLOCKING, 0 => PRIVILEGED USER
|
||||||
|
DEFOPT SWPWSP==0 ;NO WORKING-SET SWAP SCHEDULER
|
||||||
|
DEFOPT PAGPRE==0 ;NO PAGE-IN PREEMPTION
|
||||||
|
DEFOPT SCHBLN==10. ;NUMBER OF RUNNABLE JOBS TO REMEMBER
|
||||||
|
|
||||||
|
DEFOPT NQS==6 ;# OF DISK UNITS
|
||||||
|
DEFOPT NTUTBL==1 ;TUTS ARE ONE BLOCK LONG
|
||||||
|
DEFSYM NUDSL==200. ;# USER DIRECTORIES ON DISK
|
||||||
|
DEFOPT NQCHN==30. ;NUMBER 2314 CHNLS
|
||||||
|
DEFOPT RP10P==1 ;HAS DEC RP10 DISK CONTROL (RP02)
|
||||||
|
DEFOPT DMDSK==1 ;USES DM DISK FORMAT
|
||||||
|
DEFOPT QRSRVP==1 ;HAS RESERVED DISK PACKS
|
||||||
|
DEFOPT QAUTHP==1 ;KEEPS TRACK OF FILE AUTHORS
|
||||||
|
|
||||||
|
DEFOPT C1MXP==1 ;HAS CHANNEL 1 MPX FEATURE
|
||||||
|
DEFOPT NMTCS==1 ;NUMBER MAG TAPE UNITS
|
||||||
|
DEFOPT TM10B==1 ;DF10-BASED CONTROLLER
|
||||||
|
DEFOPT TTLPTP==1 ;LPT IS A TTY (I.E. ON A TTY LINE) VALUE IS LINE #.
|
||||||
|
DEFOPT PTRP==1 ;HAS PAPER TAPE
|
||||||
|
DEFOPT PTPP==1 ;PUNCH DOES WORK.
|
||||||
|
DEFOPT MTYP==1 ;HAS MORTON MULTIPLEX BOX
|
||||||
|
;DEFOPT CODP==0 ;NO COD DEVICE (used to?)
|
||||||
|
DEFOPT PDCLKP==1 ;"DeCoriolis" CLOCK
|
||||||
|
|
||||||
|
DEFOPT NETP==1 ; Has net connection
|
||||||
|
DEFOPT IMPP==1 ; Has IMP interface
|
||||||
|
DEFOPT DMIMP==1 ; This is a DM IMP interface
|
||||||
|
DEFOPT IMPUS==106 ; ARPA net host number
|
||||||
|
DEFOPT IMPUS3==<1200,,200006> ; Internet host number
|
||||||
|
DEFOPT NCPP==0 ; Flush NCP code
|
||||||
|
DEFOPT NNETCH==30. ; # NCP network channels
|
||||||
|
DEFOPT INETP==1 ; Include Internet code
|
||||||
|
DEFOPT TCPP==1 ; Include TCP code
|
||||||
|
DEFOPT XBL==20. ; # TCP network channels
|
||||||
|
|
||||||
|
DEFOPT MSPP==1 ;HAS MESSAGE SLURPER
|
||||||
|
DEFOPT DEMON==1 ;HAS DEMON ROUTINES
|
||||||
|
DEFOPT NOTYS==1 ;# KA-10 CONSOLE 0 TTYS
|
||||||
|
DEFOPT NMTYS==12. ;# TTYS ON MORTON BOX
|
||||||
|
DEFOPT NSTTYS==16. ;# OF STY'S (PSEUDO-TTY'S)
|
||||||
|
|
||||||
|
|
||||||
|
DEFOPT TSYSM==512. ;TOTAL PDP10 1K MEM BLOCKS
|
||||||
|
DEFOPT NMMP==4 ;# EXEC PAGES FOR MMP TABLE (# VIR PGS/512.)
|
||||||
|
|
||||||
|
DEFSYM PMRCM==777 ;9 BIT REAL CORE ADR
|
||||||
|
DEFSYM PMAGEM==17000 ;4 BIT AGE
|
||||||
|
DEFSYM PMCSHM==0 ;NO CACHE BIT
|
||||||
|
DEFSYM PMUNSD==160000 ;UNUSED BITS
|
||||||
|
] ;DM
|
||||||
|
|
||||||
|
IFE MCOND MX,[
|
||||||
|
DEFOPT KL10P==1 ;MX IS WHAT WE CALL THE KL10 NOW
|
||||||
|
DEFOPT MAXJ==120. ;MAX NUMBER OF JOBS ALLOWED
|
||||||
|
DEFOPT SWBLK==1 ;1 => SWAP BLOCKING, 0 => PRIVILEGED USER
|
||||||
|
DEFOPT SWPWSP==0 ;NO WORKING-SET SWAP SCHEDULER
|
||||||
|
DEFOPT PAGPRE==1 ;PAGE-IN PREEMPTION
|
||||||
|
DEFOPT SCHBLN==20. ;NUMBER OF RUNNABLE JOBS TO REMEMBER
|
||||||
|
|
||||||
|
DEFOPT NQS==6 ;# OF DISK UNITS (3 RP04'S AND 3 T-300'S)
|
||||||
|
DEFOPT NTUTBL==2 ;TUTS ARE TWO BLOCKS LONG
|
||||||
|
DEFSYM NUDSL==500. ;# USER DIRECTORIES ON DISK
|
||||||
|
DEFOPT NQCHN==50. ;NUMBER 2314 CHNLS
|
||||||
|
DEFOPT RH10P==1 ;HAS DEC RH10 DISK CONTROL (RP04)
|
||||||
|
DEFOPT T300P==3 ;TRIDENT T-300S VIA PDP-11 START AT DRIVE 3
|
||||||
|
DEFOPT QRDCMP==0 ;SOFTWARE READ-COMPARE, HARDWARE IS PINING FOR THE
|
||||||
|
; FJORDS (But this isn't debugged yet.)
|
||||||
|
DEFOPT DMDSK==1 ;USES DM DISK FORMAT
|
||||||
|
DEFOPT QRSRVP==1 ;HAS RESERVED DISK PACKS
|
||||||
|
DEFOPT QAUTHP==1 ;KEEPS TRACK OF FILE AUTHORS
|
||||||
|
|
||||||
|
DEFOPT NMTCS==1 ;NUMBER MAG TAPE UNITS
|
||||||
|
DEFOPT TM10B==1 ;DF10-BASED TAPE CONTROLLER
|
||||||
|
|
||||||
|
DEFOPT DL10P==1 ;HAS DL10/DC76 TTY CONTROLLER
|
||||||
|
DEFOPT PDCLKP==1 ;HAS "DeCoriolis" CLOCK
|
||||||
|
|
||||||
|
DEFOPT NETP==1 ; Has net connection
|
||||||
|
DEFOPT INETP==1 ; Include Internet IP code
|
||||||
|
DEFOPT TCPP==1 ; Include Internet TCP code
|
||||||
|
DEFOPT XBL==25. ; # TCP connections
|
||||||
|
DEFOPT IMPP==1 ; Has IMP interface
|
||||||
|
DEFOPT KAIMP==1
|
||||||
|
DEFOPT IMPUS==106 ; ARPA net host number
|
||||||
|
DEFOPT IMPUS3==<1200,,200006> ; Internet host number
|
||||||
|
DEFOPT NCPP==0 ; Flush NCP code
|
||||||
|
DEFOPT NNETCH==30. ; # NCP network channels
|
||||||
|
DEFOPT CHAOSP==1 ;HAS CHAOS NET
|
||||||
|
DEFOPT MYCHAD==1440 ;CHAOS NET ADDRESS
|
||||||
|
DEFOPT NINDX==50. ;NUMBER OF INDICES
|
||||||
|
DEFOPT DLCP==1 ;CHAOS NET GOES THROUGH DL10
|
||||||
|
|
||||||
|
DEFOPT NOTYS==0 ;# KA-10 CONSOLE 0 TTYS
|
||||||
|
DEFOPT NETYS==33. ;# KL-10 DTE20 TTYS
|
||||||
|
NEWDTE==1 ;TEMPORARY CONDITIONAL TO ENABLE NEW DTE20 PROTOCOL
|
||||||
|
DEFOPT NDLTYS==4. ;# TTYS ON DL10/DC76
|
||||||
|
;Note: 3d TTY on DL10 is VT52 by console.
|
||||||
|
DEFOPT NSTTYS==25. ;# OF STY'S (PSEUDO-TTY'S)
|
||||||
|
|
||||||
|
DEFOPT TSYSM==2048. ;TOTAL PDP10 1K MEM BLOCKS
|
||||||
|
DEFOPT NMMP==7 ;# EXEC PAGES FOR MMP TABLE (# VIR PGS/512.)
|
||||||
|
|
||||||
|
DEFSYM PMRCM==7777 ;12 BIT REAL CORE ADDR
|
||||||
|
DEFSYM PMCSHM==10000 ;CACHE ENABLE BIT
|
||||||
|
DEFSYM PMAGEM==160000 ;3 BIT AGE
|
||||||
|
DEFSYM PMUNSD==0 ;NO UNUSED BITS
|
||||||
|
|
||||||
|
DEFINE ITSIRP BODY
|
||||||
|
IRPS ITS,,[MX]
|
||||||
|
BODY
|
||||||
|
TERMIN
|
||||||
|
TERMIN
|
||||||
|
] ;MX
|
||||||
|
|
||||||
|
IFE MCOND AI,[
|
||||||
|
DEFOPT KS10P==1 ;The new AI has a KS10 processor.
|
||||||
|
|
||||||
|
DEFOPT MAXJ==60. ;Max number of jobs allowed
|
||||||
|
DEFOPT NQCHN==30. ;Max number of user disk channels open in system
|
||||||
|
DEFOPT SCHBLN==10. ;Number of runnable jobs to remember
|
||||||
|
DEFOPT SWBLK==1 ;1= 1=> swap blocking, 0=> privileged user
|
||||||
|
DEFOPT SWPWSP==0 ;1= Use working-set swap scheduler
|
||||||
|
DEFOPT PAGPRE==1 ;1= Use page-in preemption
|
||||||
|
|
||||||
|
DEFOPT DMDSK==1 ;1= Use DM DSK format
|
||||||
|
DEFOPT QRSRVP==1 ;1= Has reserved disk packs (Secondary pack)
|
||||||
|
DEFOPT QAUTHP==1 ;1= Keep track of file authors
|
||||||
|
|
||||||
|
DEFOPT NQS==2 ;# of disk drive units
|
||||||
|
DEFOPT NTUTBL==4 ;# 1K blocks in a TUT (better agree with RP06 DEFS)
|
||||||
|
DEFSYM NUDSL==500. ;# directories in file system (better agree with
|
||||||
|
; SALV and DSKDMP)
|
||||||
|
DEFOPT RH11P==1 ; Has RH11 controller
|
||||||
|
DEFOPT RP06P==1 ; with two RP06s
|
||||||
|
|
||||||
|
DEFOPT NMTCS==1 ;Number of magtape units (so why not NMTUS?)
|
||||||
|
DEFOPT TM03S==1 ;TM03/RH11 Unibus tape controller
|
||||||
|
|
||||||
|
DEFOPT NETP==1 ;Has one kind of network anyway
|
||||||
|
;AI's IMP is gone 5/5/89
|
||||||
|
;DEFOPT INETP==1 ; Include Internet code
|
||||||
|
;DEFOPT TCPP==1 ; Include TCP code
|
||||||
|
;DEFOPT XBL==30. ; # TCP network channels
|
||||||
|
;DEFOPT IMPP==1 ; Has an IMP interface
|
||||||
|
;DEFOPT KSIMP==1 ; ACC LH/DH interface on KS unibus
|
||||||
|
;DEFOPT IMPUS==206 ; ARPA net host number
|
||||||
|
;DEFOPT IMPUS3==<1200,,400006> ; Internet host number of IMP
|
||||||
|
;DEFOPT PKTTRC==-1 ;Packet tracing code enabled
|
||||||
|
DEFOPT CHAOSP==1 ;Has CHAOS net
|
||||||
|
DEFOPT MYCHAD==3130 ;CHAOS net address
|
||||||
|
DEFOPT NINDX==50. ;Number of indices
|
||||||
|
DEFOPT CH11P==1 ;CHAOS net goes through Unibus
|
||||||
|
|
||||||
|
DEFOPT DZ11P==1 ;Has DZ11 TTY controllers
|
||||||
|
DEFOPT DZ11NB==1 ; 1 of them
|
||||||
|
DEFSYM DZ0BA=:760010
|
||||||
|
|
||||||
|
DEFOPT NKSTYS==1 ;# KS-10 8080 console 0 TTYs
|
||||||
|
DEFOPT NDZTYS==8. ;# DZ-11 TTYs
|
||||||
|
DEFOPT NSTTYS==12. ;# of STY's (Pseudo-TTY's)
|
||||||
|
|
||||||
|
DEFOPT TSYSM==512. ;Total PDP10 1K memory blocks
|
||||||
|
DEFOPT NMMP==4 ;# exec pages for MMP table (# vir pgs/512.)
|
||||||
|
|
||||||
|
;;; Next four better agree with SYSTEM;KSDEFS:
|
||||||
|
DEFSYM PMAGEM==020000 ;2.5 Age bit
|
||||||
|
DEFSYM PMCSHM==010000 ;2.4 Cache enable bit
|
||||||
|
DEFSYM PMRCM==001777 ;2.1 - 1.1 Physical page number
|
||||||
|
; (The page table supports 20 bit physical
|
||||||
|
; addresses.)
|
||||||
|
DEFSYM PMUNSD==146000 ;Unused bits
|
||||||
|
|
||||||
|
DEFINE ITSIRP BODY
|
||||||
|
IRPS ITS,,[AI MC]
|
||||||
|
BODY
|
||||||
|
TERMIN
|
||||||
|
TERMIN
|
||||||
|
] ;AI
|
||||||
|
|
||||||
|
IFE MCOND MC,[
|
||||||
|
DEFOPT KS10P==1 ;MC is now a KS10.
|
||||||
|
|
||||||
|
DEFOPT MAXJ==60. ;Max number of jobs allowed
|
||||||
|
DEFOPT NQCHN==30. ;Max number of user disk channels open in system
|
||||||
|
DEFOPT SCHBLN==10. ;Number of runnable jobs to remember
|
||||||
|
DEFOPT SWBLK==1 ;1= 1=> swap blocking, 0=> privileged user
|
||||||
|
DEFOPT SWPWSP==0 ;1= Use working-set swap scheduler
|
||||||
|
DEFOPT PAGPRE==1 ;1= Use page-in preemption
|
||||||
|
|
||||||
|
DEFOPT DMDSK==1 ;1= Use DM DSK format
|
||||||
|
DEFOPT QRSRVP==1 ;1= Has reserved disk packs (Secondary pack)
|
||||||
|
DEFOPT QAUTHP==1 ;1= Keep track of file authors
|
||||||
|
|
||||||
|
DEFOPT NQS==1 ;# of disk drive units
|
||||||
|
DEFOPT NTUTBL==4 ;# 1K blocks in a TUT (better agree with RP06 DEFS)
|
||||||
|
DEFSYM NUDSL==500. ;# directories in file system (better agree with
|
||||||
|
; SALV and DSKDMP)
|
||||||
|
DEFOPT RH11P==1 ; Has RH11 controller
|
||||||
|
DEFOPT RP06P==1 ; with one RP06
|
||||||
|
|
||||||
|
DEFOPT NETP==1 ;Has one kind of network anyway
|
||||||
|
DEFOPT INETP==1 ; Include Internet code
|
||||||
|
DEFOPT TCPP==1 ; Include TCP code
|
||||||
|
DEFOPT XBL==30. ; # TCP network channels
|
||||||
|
;MC's IMP is gone 5/18/89
|
||||||
|
;DEFOPT IMPP==1 ; Has an IMP interface
|
||||||
|
;DEFOPT KSIMP==1 ; ACC LH/DH interface on KS unibus
|
||||||
|
;DEFOPT IMPUS==354 ; ARPA net host number
|
||||||
|
;DEFOPT IMPUS3==<1200,,600054> ; Internet host number of IMP
|
||||||
|
DEFOPT IPUNCP==1 ; IP in Chaos UNC is our only Internet address
|
||||||
|
DEFOPT PKTTRC==-1 ;Packet tracing code enabled
|
||||||
|
DEFOPT CHAOSP==1 ;Has CHAOS net
|
||||||
|
DEFOPT MYCHAD==3131 ;CHAOS net address
|
||||||
|
DEFOPT NINDX==50. ;Number of indices
|
||||||
|
DEFOPT CH11P==1 ;CHAOS net goes through Unibus
|
||||||
|
|
||||||
|
DEFOPT DZ11P==1 ;Has DZ11 TTY controllers
|
||||||
|
DEFOPT DZ11NB==1 ; 1 of them
|
||||||
|
DEFSYM DZ0BA=:760010
|
||||||
|
|
||||||
|
DEFOPT NKSTYS==1 ;# KS-10 8080 console 0 TTYs
|
||||||
|
DEFOPT NDZTYS==6. ;# DZ-11 TTYs
|
||||||
|
DEFOPT NSTTYS==4. ;# of STY's (Pseudo-TTY's)
|
||||||
|
|
||||||
|
DEFOPT TSYSM==512. ;Total PDP10 1K memory blocks
|
||||||
|
DEFOPT NMMP==4 ;# exec pages for MMP table (# vir pgs/512.)
|
||||||
|
|
||||||
|
;;; Next four better agree with SYSTEM;KSDEFS:
|
||||||
|
DEFSYM PMAGEM==020000 ;2.5 Age bit
|
||||||
|
DEFSYM PMCSHM==010000 ;2.4 Cache enable bit
|
||||||
|
DEFSYM PMRCM==001777 ;2.1 - 1.1 Physical page number
|
||||||
|
; (The page table supports 20 bit physical
|
||||||
|
; addresses.)
|
||||||
|
DEFSYM PMUNSD==146000 ;Unused bits
|
||||||
|
|
||||||
|
DEFINE ITSIRP BODY
|
||||||
|
IRPS ITS,,[AI MC]
|
||||||
|
BODY
|
||||||
|
TERMIN
|
||||||
|
TERMIN
|
||||||
|
] ;MC
|
||||||
|
|
||||||
|
IFE MCOND ML,[
|
||||||
|
DEFOPT KS10P==1 ;ML is now a KS10.
|
||||||
|
|
||||||
|
DEFOPT MAXJ==60. ;Max number of jobs allowed
|
||||||
|
DEFOPT NQCHN==30. ;Max number of user disk channels open in system
|
||||||
|
DEFOPT SCHBLN==10. ;Number of runnable jobs to remember
|
||||||
|
DEFOPT SWBLK==1 ;1= 1=> swap blocking, 0=> privileged user
|
||||||
|
DEFOPT SWPWSP==0 ;1= Use working-set swap scheduler
|
||||||
|
DEFOPT PAGPRE==1 ;1= Use page-in preemption
|
||||||
|
|
||||||
|
DEFOPT DMDSK==1 ;1= Use DM DSK format
|
||||||
|
DEFOPT QRSRVP==1 ;1= Has reserved disk packs (Secondary pack)
|
||||||
|
DEFOPT QAUTHP==1 ;1= Keep track of file authors
|
||||||
|
|
||||||
|
DEFOPT NQS==1 ;# of disk drive units
|
||||||
|
DEFOPT NTUTBL==4 ;# 1K blocks in a TUT (better agree with RP06 DEFS)
|
||||||
|
DEFSYM NUDSL==500. ;# directories in file system (better agree with
|
||||||
|
; SALV and DSKDMP)
|
||||||
|
DEFOPT RH11P==1 ; Has RH11 controller
|
||||||
|
DEFOPT RP06P==1 ; with one RP06
|
||||||
|
|
||||||
|
DEFOPT NETP==1 ;Has one kind of network anyway
|
||||||
|
DEFOPT CHAOSP==1 ;Has CHAOS net
|
||||||
|
DEFOPT MYCHAD==3133 ;CHAOS net address
|
||||||
|
DEFOPT NINDX==50. ;Number of indices
|
||||||
|
DEFOPT CH11P==1 ;CHAOS net goes through Unibus
|
||||||
|
|
||||||
|
DEFOPT DZ11P==1 ;Has DZ11 TTY controllers
|
||||||
|
DEFOPT DZ11NB==4 ; 4 of them
|
||||||
|
DEFSYM DZ0BA=:760010
|
||||||
|
DEFSYM DZ1BA=:760020
|
||||||
|
DEFSYM DZ2BA=:760030
|
||||||
|
DEFSYM DZ3BA=:760040
|
||||||
|
|
||||||
|
DEFOPT NKSTYS==1 ;# KS-10 8080 console 0 TTYs
|
||||||
|
DEFOPT NDZTYS==4. ;# DZ-11 TTYs
|
||||||
|
DEFOPT NSTTYS==4. ;# of STY's (Pseudo-TTY's)
|
||||||
|
|
||||||
|
DEFOPT TSYSM==512. ;Total PDP10 1K memory blocks
|
||||||
|
DEFOPT NMMP==4 ;# exec pages for MMP table (# vir pgs/512.)
|
||||||
|
|
||||||
|
;;; Next four better agree with SYSTEM;KSDEFS:
|
||||||
|
DEFSYM PMAGEM==020000 ;2.5 Age bit
|
||||||
|
DEFSYM PMCSHM==010000 ;2.4 Cache enable bit
|
||||||
|
DEFSYM PMRCM==001777 ;2.1 - 1.1 Physical page number
|
||||||
|
; (The page table supports 20 bit physical
|
||||||
|
; addresses.)
|
||||||
|
DEFSYM PMUNSD==146000 ;Unused bits
|
||||||
|
|
||||||
|
DEFINE ITSIRP BODY
|
||||||
|
IRPS ITS,,[AI MC ML]
|
||||||
|
BODY
|
||||||
|
TERMIN
|
||||||
|
TERMIN
|
||||||
|
] ;ML
|
||||||
|
|
||||||
|
IFE MCOND MD,[
|
||||||
|
|
||||||
|
DEFOPT KS10P==1 ;MD is a KS10.
|
||||||
|
|
||||||
|
DEFOPT MAXJ==60. ;Max number of jobs allowed
|
||||||
|
DEFOPT NQCHN==30. ;Max number of user disk channels open in system
|
||||||
|
DEFOPT SCHBLN==10. ;Number of runnable jobs to remember
|
||||||
|
DEFOPT SWBLK==1 ;1= 1=> swap blocking, 0=> privileged user
|
||||||
|
DEFOPT SWPWSP==0 ;1= Use working-set swap scheduler
|
||||||
|
DEFOPT PAGPRE==1 ;1= Use page-in preemption
|
||||||
|
|
||||||
|
DEFOPT DMDSK==1 ;1= Use DM DSK format
|
||||||
|
DEFOPT QRSRVP==1 ;1= Has reserved disk packs (Secondary pack)
|
||||||
|
DEFOPT QAUTHP==1 ;1= Keep track of file authors
|
||||||
|
|
||||||
|
DEFOPT NQS==1 ;# of disk drive units
|
||||||
|
DEFOPT NTUTBL==3 ;# 1K blocks in a TUT (better agree with disk DEFS)
|
||||||
|
DEFSYM NUDSL==500. ;# directories in file system (better agree with
|
||||||
|
; SALV and DSKDMP)
|
||||||
|
DEFOPT RH11P==1 ; Has RH11 controller
|
||||||
|
DEFOPT RM80P==1 ; with one RM80
|
||||||
|
|
||||||
|
DEFOPT NETP==1 ;Has one kind of network anyway
|
||||||
|
DEFOPT CHAOSP==1 ;Has CHAOS net
|
||||||
|
DEFOPT MYCHAD==3132 ;CHAOS net address
|
||||||
|
DEFOPT NINDX==50. ;Number of indices
|
||||||
|
DEFOPT CH11P==1 ;CHAOS net goes through Unibus
|
||||||
|
|
||||||
|
DEFOPT DZ11P==1 ;Has DZ11 TTY controllers
|
||||||
|
DEFOPT DZ11NB==4 ; 4 of them
|
||||||
|
DEFSYM DZ0BA=:760010
|
||||||
|
DEFSYM DZ1BA=:760020
|
||||||
|
DEFSYM DZ2BA=:760030
|
||||||
|
DEFSYM DZ3BA=:760040
|
||||||
|
|
||||||
|
DEFOPT NKSTYS==1 ;# KS-10 8080 console 0 TTYs
|
||||||
|
DEFOPT NDZTYS==4. ;# DZ-11 TTYs
|
||||||
|
DEFOPT NSTTYS==4. ;# of STY's (Pseudo-TTY's)
|
||||||
|
|
||||||
|
DEFOPT TSYSM==512. ;Total PDP10 1K memory blocks
|
||||||
|
DEFOPT NMMP==4 ;# exec pages for MMP table (# vir pgs/512.)
|
||||||
|
|
||||||
|
;;; Next four better agree with SYSTEM;KSDEFS:
|
||||||
|
DEFSYM PMAGEM==020000 ;2.5 Age bit
|
||||||
|
DEFSYM PMCSHM==010000 ;2.4 Cache enable bit
|
||||||
|
DEFSYM PMRCM==001777 ;2.1 - 1.1 Physical page number
|
||||||
|
; (The page table supports 20 bit physical
|
||||||
|
; addresses.)
|
||||||
|
DEFSYM PMUNSD==146000 ;Unused bits
|
||||||
|
|
||||||
|
DEFINE ITSIRP BODY
|
||||||
|
IRPS ITS,,[AI MC ML MD]
|
||||||
|
BODY
|
||||||
|
TERMIN
|
||||||
|
TERMIN
|
||||||
|
] ;MD
|
||||||
|
|
||||||
|
IFE MCOND SI,[ ;Stacken ITS
|
||||||
|
DEFOPT KS10P==1 ;SI is a KS10
|
||||||
|
|
||||||
|
DEFOPT MAXJ==60. ;Max number of jobs allowed
|
||||||
|
DEFOPT NQCHN==30. ;Max number of user disk channels open in system
|
||||||
|
DEFOPT SCHBLN==10. ;Number of runnable jobs to remember
|
||||||
|
DEFOPT SWBLK==1 ;1= 1=> swap blocking, 0=> privileged user
|
||||||
|
DEFOPT SWPWSP==0 ;1= Use working-set swap scheduler
|
||||||
|
DEFOPT PAGPRE==1 ;1= Use page-in preemption
|
||||||
|
|
||||||
|
DEFOPT DMDSK==1 ;1= Use DM DSK format
|
||||||
|
DEFOPT QRSRVP==1 ;1= Has reserved disk packs (Secondary pack)
|
||||||
|
DEFOPT QAUTHP==1 ;1= Keep track of file authors
|
||||||
|
|
||||||
|
DEFOPT NQS==1 ;# of disk drive units
|
||||||
|
DEFOPT NTUTBL==4 ;# 1K blocks in a TUT (better agree with RP06 DEFS)
|
||||||
|
DEFSYM NUDSL==500. ;# directories in file system (better agree with
|
||||||
|
; SALV and DSKDMP)
|
||||||
|
DEFOPT RH11P==1 ; Has RH11 controller
|
||||||
|
DEFOPT RP06P==1 ; with one RP06
|
||||||
|
|
||||||
|
DEFOPT NMTCS==1 ;Number of magtape units (so why not NMTUS?)
|
||||||
|
DEFOPT TM03S==1 ;TM03/RH11 Unibus tape controller
|
||||||
|
|
||||||
|
DEFOPT DZ11P==1 ;Has DZ11 TTY controllers
|
||||||
|
DEFOPT DZ11NB==2 ; 2 of them
|
||||||
|
DEFSYM DZ0BA=:760010
|
||||||
|
DEFSYM DZ1BA=:760020
|
||||||
|
|
||||||
|
DEFOPT NKSTYS==1 ;# KS-10 8080 console 0 TTYs
|
||||||
|
DEFOPT NDZTYS==16. ;# DZ-11 TTYs
|
||||||
|
DEFOPT NSTTYS==8. ;# of STY's (Pseudo-TTY's)
|
||||||
|
|
||||||
|
DEFOPT TSYSM==512. ;Total PDP10 1K memory blocks
|
||||||
|
DEFOPT NMMP==4 ;# exec pages for MMP table (# vir pgs/512.)
|
||||||
|
|
||||||
|
;;; Next four better agree with SYSTEM;KSDEFS:
|
||||||
|
DEFSYM PMAGEM==020000 ;2.5 Age bit
|
||||||
|
DEFSYM PMCSHM==010000 ;2.4 Cache enable bit
|
||||||
|
DEFSYM PMRCM==001777 ;2.1 - 1.1 Physical page number
|
||||||
|
; (The page table supports 20 bit physical
|
||||||
|
; addresses.)
|
||||||
|
DEFSYM PMUNSD==146000 ;Unused bits
|
||||||
|
|
||||||
|
DEFINE ITSIRP BODY
|
||||||
|
IRPS ITS,,[SI]
|
||||||
|
BODY
|
||||||
|
TERMIN
|
||||||
|
TERMIN
|
||||||
|
] ;SI
|
||||||
|
|
||||||
|
IFE MCOND FU,[ ;Australian KS10
|
||||||
|
DEFOPT KS10P==1 ;FU is a KS10
|
||||||
|
|
||||||
|
DEFOPT MAXJ==60. ;Max number of jobs allowed
|
||||||
|
DEFOPT NQCHN==30. ;Max number of user disk channels open in system
|
||||||
|
DEFOPT SCHBLN==10. ;Number of runnable jobs to remember
|
||||||
|
DEFOPT SWBLK==1 ;1= 1=> swap blocking, 0=> privileged user
|
||||||
|
DEFOPT SWPWSP==0 ;1= Use working-set swap scheduler
|
||||||
|
DEFOPT PAGPRE==1 ;1= Use page-in preemption
|
||||||
|
|
||||||
|
DEFOPT DMDSK==1 ;1= Use DM DSK format
|
||||||
|
DEFOPT QRSRVP==1 ;1= Has reserved disk packs (Secondary pack)
|
||||||
|
DEFOPT QAUTHP==1 ;1= Keep track of file authors
|
||||||
|
|
||||||
|
DEFOPT NQS==1 ;# of disk drive units
|
||||||
|
DEFOPT NTUTBL==4 ;# 1K blocks in a TUT (better agree with RP06 DEFS)
|
||||||
|
DEFSYM NUDSL==500. ;# directories in file system (better agree with
|
||||||
|
; SALV and DSKDMP)
|
||||||
|
DEFOPT RH11P==1 ; Has RH11 controller
|
||||||
|
DEFOPT RP06P==1 ; with one RP06
|
||||||
|
|
||||||
|
DEFOPT NMTCS==1 ;Number of magtape units (so why not NMTUS?)
|
||||||
|
DEFOPT TM03S==1 ;TM03/RH11 Unibus tape controller
|
||||||
|
|
||||||
|
DEFOPT DZ11P==1 ;Has DZ11 TTY controllers
|
||||||
|
DEFOPT DZ11NB==1 ; 1 of them
|
||||||
|
DEFSYM DZ0BA=:760010
|
||||||
|
|
||||||
|
DEFOPT NKSTYS==1 ;# KS-10 8080 console 0 TTYs
|
||||||
|
DEFOPT NDZTYS==8. ;# DZ-11 TTYs
|
||||||
|
DEFOPT NSTTYS==4. ;# of STY's (Pseudo-TTY's)
|
||||||
|
|
||||||
|
DEFOPT TSYSM==512. ;Total PDP10 1K memory blocks
|
||||||
|
DEFOPT NMMP==4 ;# exec pages for MMP table (# vir pgs/512.)
|
||||||
|
|
||||||
|
;;; Next four better agree with SYSTEM;KSDEFS:
|
||||||
|
DEFSYM PMAGEM==020000 ;2.5 Age bit
|
||||||
|
DEFSYM PMCSHM==010000 ;2.4 Cache enable bit
|
||||||
|
DEFSYM PMRCM==001777 ;2.1 - 1.1 Physical page number
|
||||||
|
; (The page table supports 20 bit physical
|
||||||
|
; addresses.)
|
||||||
|
DEFSYM PMUNSD==146000 ;Unused bits
|
||||||
|
|
||||||
|
DEFINE ITSIRP BODY
|
||||||
|
IRPS ITS,,[FU]
|
||||||
|
BODY
|
||||||
|
TERMIN
|
||||||
|
TERMIN
|
||||||
|
] ;FU
|
||||||
|
|
||||||
|
IFE MCOND PM,[ ;MRC's KS10 (PandaMonium)
|
||||||
|
DEFOPT KS10P==1 ;PM is a KS10
|
||||||
|
|
||||||
|
DEFOPT MAXJ==60. ;Max number of jobs allowed
|
||||||
|
DEFOPT NQCHN==30. ;Max number of user disk channels open in system
|
||||||
|
DEFOPT SCHBLN==10. ;Number of runnable jobs to remember
|
||||||
|
DEFOPT SWBLK==1 ;1= 1=> swap blocking, 0=> privileged user
|
||||||
|
DEFOPT SWPWSP==0 ;1= Use working-set swap scheduler
|
||||||
|
DEFOPT PAGPRE==1 ;1= Use page-in preemption
|
||||||
|
|
||||||
|
DEFOPT DMDSK==1 ;1= Use DM DSK format
|
||||||
|
DEFOPT QRSRVP==1 ;1= Has reserved disk packs (Secondary pack)
|
||||||
|
DEFOPT QAUTHP==1 ;1= Keep track of file authors
|
||||||
|
|
||||||
|
DEFOPT NQS==1 ;# of disk drive units
|
||||||
|
DEFOPT NTUTBL==2 ;# 1K blocks in a TUT (better agree with RM03 DEFS)
|
||||||
|
DEFSYM NUDSL==500. ;# directories in file system (better agree with
|
||||||
|
; SALV and DSKDMP)
|
||||||
|
DEFOPT RH11P==1 ; Has RH11 controller
|
||||||
|
DEFOPT RM03P==1 ; with one RM03
|
||||||
|
|
||||||
|
DEFOPT NMTCS==1 ;Number of magtape units (so why not NMTUS?)
|
||||||
|
DEFOPT TM03S==1 ;TM03/RH11 Unibus tape controller
|
||||||
|
|
||||||
|
DEFOPT DZ11P==1 ;Has DZ11 TTY controllers
|
||||||
|
DEFOPT DZ11NB==1 ; 1 of them
|
||||||
|
DEFSYM DZ0BA=:760010
|
||||||
|
|
||||||
|
DEFOPT NKSTYS==1 ;# KS-10 8080 console 0 TTYs
|
||||||
|
DEFOPT NDZTYS==5. ;# DZ-11 TTYs
|
||||||
|
DEFOPT NSTTYS==4. ;# of STY's (Pseudo-TTY's)
|
||||||
|
|
||||||
|
DEFOPT TSYSM==512. ;Total PDP10 1K memory blocks
|
||||||
|
DEFOPT NMMP==4 ;# exec pages for MMP table (# vir pgs/512.)
|
||||||
|
|
||||||
|
;;; Next four better agree with SYSTEM;KSDEFS:
|
||||||
|
DEFSYM PMAGEM==020000 ;2.5 Age bit
|
||||||
|
DEFSYM PMCSHM==010000 ;2.4 Cache enable bit
|
||||||
|
DEFSYM PMRCM==001777 ;2.1 - 1.1 Physical page number
|
||||||
|
; (The page table supports 20 bit physical
|
||||||
|
; addresses.)
|
||||||
|
DEFSYM PMUNSD==146000 ;Unused bits
|
||||||
|
|
||||||
|
DEFINE ITSIRP BODY
|
||||||
|
IRPS ITS,,[PM]
|
||||||
|
BODY
|
||||||
|
TERMIN
|
||||||
|
TERMIN
|
||||||
|
] ;PM
|
||||||
|
|
||||||
|
IFE MCOND DX,[ ;Digex's KS10
|
||||||
|
DEFOPT KS10P==1 ;DX is a KS10
|
||||||
|
|
||||||
|
DEFOPT MAXJ==60. ;Max number of jobs allowed
|
||||||
|
DEFOPT NQCHN==30. ;Max number of user disk channels open in system
|
||||||
|
DEFOPT SCHBLN==10. ;Number of runnable jobs to remember
|
||||||
|
DEFOPT SWBLK==1 ;1= 1=> swap blocking, 0=> privileged user
|
||||||
|
DEFOPT SWPWSP==0 ;1= Use working-set swap scheduler
|
||||||
|
DEFOPT PAGPRE==1 ;1= Use page-in preemption
|
||||||
|
|
||||||
|
DEFOPT DMDSK==1 ;1= Use DM DSK format
|
||||||
|
DEFOPT QRSRVP==1 ;1= Has reserved disk packs (Secondary pack)
|
||||||
|
DEFOPT QAUTHP==1 ;1= Keep track of file authors
|
||||||
|
|
||||||
|
DEFOPT NQS==1 ;# of disk drive units
|
||||||
|
DEFOPT NTUTBL==2 ;# 1K blocks in a TUT (better agree with RM03 DEFS)
|
||||||
|
DEFSYM NUDSL==500. ;# directories in file system (better agree with
|
||||||
|
; SALV and DSKDMP)
|
||||||
|
DEFOPT RH11P==1 ; Has RH11 controller
|
||||||
|
DEFOPT RM03P==1 ; with one RM02/3
|
||||||
|
|
||||||
|
DEFOPT NMTCS==1 ;Number of magtape units (so why not NMTUS?)
|
||||||
|
DEFOPT TM03S==1 ;TM03/RH11 Unibus tape controller
|
||||||
|
|
||||||
|
DEFOPT DZ11P==1 ;Has DZ11 TTY controllers
|
||||||
|
DEFOPT DZ11NB==1 ; 1 of them
|
||||||
|
DEFSYM DZ0BA=:760010
|
||||||
|
|
||||||
|
DEFOPT NKSTYS==1 ;# KS-10 8080 console 0 TTYs
|
||||||
|
DEFOPT NDZTYS==8. ;# DZ-11 TTYs
|
||||||
|
DEFOPT NSTTYS==4. ;# of STY's (Pseudo-TTY's)
|
||||||
|
|
||||||
|
DEFOPT TSYSM==512. ;Total PDP10 1K memory blocks
|
||||||
|
DEFOPT NMMP==4 ;# exec pages for MMP table (# vir pgs/512.)
|
||||||
|
|
||||||
|
;;; Next four better agree with SYSTEM;KSDEFS:
|
||||||
|
DEFSYM PMAGEM==020000 ;2.5 Age bit
|
||||||
|
DEFSYM PMCSHM==010000 ;2.4 Cache enable bit
|
||||||
|
DEFSYM PMRCM==001777 ;2.1 - 1.1 Physical page number
|
||||||
|
; (The page table supports 20 bit physical
|
||||||
|
; addresses.)
|
||||||
|
DEFSYM PMUNSD==146000 ;Unused bits
|
||||||
|
|
||||||
|
DEFINE ITSIRP BODY
|
||||||
|
IRPS ITS,,[DX]
|
||||||
|
BODY
|
||||||
|
TERMIN
|
||||||
|
TERMIN
|
||||||
|
] ;DX
|
||||||
|
|
||||||
|
; Default settings for all configuration-dependent assembly parameters.
|
||||||
|
; If a system definition has already set a value for a parameter, the
|
||||||
|
; default here will NOT be used.
|
||||||
|
|
||||||
|
DEFOPT KL10P==0 ;1= KL10 processor
|
||||||
|
DEFOPT KS10P==0 ;1= KS10 processor
|
||||||
|
DEFOPT KA10P==0 ;1= KA10 processor
|
||||||
|
|
||||||
|
IFE KL10P\KS10P\KA10P, .ERR Processor type required - KL10P, KS10P or KA10P
|
||||||
|
|
||||||
|
IFN KS10P, DEFOPT KSFREQ==4100000./60. ; KS-ticks per PD-tick.
|
||||||
|
|
||||||
|
DEFOPT C1MXP==0 ;1= Has PI channel 1 MPX feature
|
||||||
|
|
||||||
|
DEFOPT MAXJ==63. ; Max number of jobs allowed
|
||||||
|
DEFOPT NQCHN==30. ; Max number of user disk channels open in system
|
||||||
|
DEFOPT SCHBLN==10. ; Number of runnable jobs to remember
|
||||||
|
DEFOPT SWBLK==0 ;1= 1=> swap blocking, 0=> privileged user
|
||||||
|
DEFOPT SWPWSP==0 ;1= Use working-set swap scheduler
|
||||||
|
DEFOPT PAGPRE==0 ;1= Use page-in preemption
|
||||||
|
|
||||||
|
; Disk parameters
|
||||||
|
|
||||||
|
IFNDEF NQS, .ERR NQS required - # of disk drive units
|
||||||
|
IFNDEF NTUTBL,.ERR NTUTBL required - # 1K blocks in a TUT
|
||||||
|
; (This defn better agree with DC/RP/RH/T3 defs)
|
||||||
|
IFNDEF NUDSL, .ERR NUDSL required - # directories in file system
|
||||||
|
; Just changing this will not work!!
|
||||||
|
DEFOPT DC10P==0 ;1= Has Systems Concepts disk control
|
||||||
|
DEFOPT RP10P==0 ;1= DEC RP10 disk control (RP02)
|
||||||
|
DEFOPT RH10P==0 ;1= DEC RH10 disk control (RP04)
|
||||||
|
DEFOPT RH11P==0 ;1= DEC RH11 disk control
|
||||||
|
DEFOPT RP06P==0 ;1= RH11 with RP06's
|
||||||
|
DEFOPT RM03P==0 ;1= RH11 with RM03's
|
||||||
|
DEFOPT RM80P==0 ;1= RH11 with RM80's
|
||||||
|
DEFOPT T300P==0 ;1= Trident T-300 via PDP-11
|
||||||
|
DEFOPT QRDCMP==0 ;1= Software read-compare
|
||||||
|
DEFOPT DMDSK==0 ;1= Use DM DSK format
|
||||||
|
DEFOPT QRSRVP==0 ;1= Has reserved disk packs (Secondary pack)
|
||||||
|
DEFOPT QAUTHP==0 ;1= Keep track of file authors
|
||||||
|
|
||||||
|
|
||||||
|
; Magtape parameters
|
||||||
|
DEFOPT NMTCS==0 ; # Mag tape units
|
||||||
|
DEFOPT TM10A==0 ;1= IO-bus TM10 Mag tape
|
||||||
|
DEFOPT TM10B==0 ;1= DF10/TM10 Magtape
|
||||||
|
DEFOPT TM03S==0 ;1= TM03/RH11 KS Magtape
|
||||||
|
IFN NMTCS,IFE TM10A\TM10B\TM03S,.ERR No Magtape Controller type specified?
|
||||||
|
|
||||||
|
|
||||||
|
; Network parameters
|
||||||
|
DEFOPT NETP==0 ;1= Connected to some network, include net code.
|
||||||
|
DEFOPT CHAOSP==0 ;1= Has CHAOS net (Must have some interface def'd)
|
||||||
|
DEFOPT NCPP==0 ;1= Include NCP code (must have IMPP)
|
||||||
|
DEFOPT INETP==0 ;1= Include Internet Protocol code
|
||||||
|
DEFOPT TCPP==0 ;1= Include TCP code (must have INETP)
|
||||||
|
DEFOPT IPUNCP==0 ;1= IP in Chaos UNC is our only Internet address
|
||||||
|
|
||||||
|
;NCP-specific parameters
|
||||||
|
DEFOPT NNETCH==30. ; # of NCP network channels system supports
|
||||||
|
|
||||||
|
;IP-specific paramters
|
||||||
|
IFN INETP,[
|
||||||
|
IFE IPUNCP,IFNDEF IMPUS3,.ERR IMPUS3 must be defined as Internet host addr
|
||||||
|
IFN IPUNCP,IFE CHAOSP,.ERR Chaosnet must exist for IP encapsulation scheme
|
||||||
|
]
|
||||||
|
|
||||||
|
;Chaos-specific parameters
|
||||||
|
IFN CHAOSP,IFNDEF MYCHAD, .ERR MYCHAD must be defined as CHAOSnet host addr
|
||||||
|
DEFOPT NINDX==0 ; Number of indices for CHAOS connections
|
||||||
|
DEFOPT CH10P==0 ;1= CHAOS net via PDP-10 I/O bus
|
||||||
|
DEFOPT CH11P==0 ;1= CHAOS net via Unibus Chaos board on KS10
|
||||||
|
DEFOPT DLCP==0 ;1= CHAOS net via DL10
|
||||||
|
DEFOPT T11CHP==0 ;1= CHAOS net via Rubin 10-11 interface
|
||||||
|
IFN T11CHP,DEFOPT CH11NM==7 ; CHAOS net is on PDP-11 #7 of 10-11 interface
|
||||||
|
|
||||||
|
;IMP interface specific parameters
|
||||||
|
DEFOPT IMPP==0 ;1= Has IMP interface to ARPAnet
|
||||||
|
IFN IMPP,IFNDEF IMPUS, .ERR IMPUS must be defined as ARPAnet host #
|
||||||
|
DEFOPT DMIMP==0 ;1= Has DM IMP interface
|
||||||
|
DEFOPT KAIMP==0 ;1= Has AI-KA/ML-KA/MX-KL IMP interface
|
||||||
|
DEFOPT KSIMP==0 ;1= Has KS10 UNIBUS ACC LH-DH IMP interface
|
||||||
|
IFN IMPP,IFE DMIMP+KAIMP+KSIMP,.ERR IMPP requires an interface type
|
||||||
|
IFN IMPP,IFN IPUNCP,.ERR IPUNCP and IMPP are incompatible
|
||||||
|
|
||||||
|
; TTY line parameters
|
||||||
|
DEFOPT MTYP==0 ;1= Has Morton box multiplexor
|
||||||
|
DEFOPT DL10P==0 ;1= Has DL10/DC76 TTY controller
|
||||||
|
DEFOPT TK10P==0 ;1= Has TK10 TTY scanner
|
||||||
|
DEFOPT DPKPP==0 ;1= Has Datapoint kludge TTY mpxr
|
||||||
|
DEFOPT DZ11P==0 ;1= Has DZ11 Multiplexors
|
||||||
|
|
||||||
|
IFN DZ11P, IFNDEF DZ11NB, .ERR DZ11P requires a value for DZ11NB
|
||||||
|
IFE DZ11P, DEFSYM DZ11NB==0 ; # DZ11s
|
||||||
|
|
||||||
|
DEFOPT NOTYS==0 ; # KA-10 console 0 TTYs
|
||||||
|
DEFOPT NETYS==0 ; # KL-10 DTE20 console 0 TTYs
|
||||||
|
DEFOPT NKSTYS==0 ; # KS-10 8080 console 0 TTYs
|
||||||
|
DEFOPT NNVTTS==0 ; # Nova TTYs
|
||||||
|
DEFOPT NNTYS==0 ; # TTYs on Knight kludge
|
||||||
|
DEFOPT NDZTYS==0 ; # TTYs on DZ11s
|
||||||
|
DEFOPT NDPTYS==0 ; # TTYs on Datapoint kludge
|
||||||
|
DEFOPT NMTYS==0 ; # TTYs on Morton box
|
||||||
|
DEFOPT NDLTYS==0 ; # TTYs on DL10/DC76
|
||||||
|
DEFOPT NSTTYS==0 ; # of STY's (Pseudo-TTY's)
|
||||||
|
DEFOPT N11TYS==0 ; # PDP11 TV TTYs (formerly 16. of them)
|
||||||
|
IFN N11TYS,[
|
||||||
|
DEFOPT TT11NM==0 ; # of PDP11 that handles TTYs.
|
||||||
|
DEFOPT MXVBN==40 ; Max video buffer # for assignment purposes.
|
||||||
|
] ; These actually correspond to video switch inputs.
|
||||||
|
DEFOPT NF2741==0 ; First 2741 console #
|
||||||
|
DEFOPT N2741==0 ; # 2741's (formerly 3; flushed 3/21/76)
|
||||||
|
DEFOPT SYSCON==0 ; TTY # of system job console
|
||||||
|
DEFOPT APL==0 ; AP TTY #
|
||||||
|
|
||||||
|
; Miscellaneous devices
|
||||||
|
|
||||||
|
DEFOPT TEN11P==0 ;1= Rubin 10-11 interface (late of AI-KA)
|
||||||
|
DEFOPT XGP==0 ;1= Has XGP
|
||||||
|
DEFOPT NEWDTP==0 ;1= Has new dectape controller
|
||||||
|
DEFOPT NUNITS==0 ; # Utape (DECtape) units
|
||||||
|
DEFOPT OLPTP==0 ;1= Has old LPT (Data Products)
|
||||||
|
DEFOPT NLPTP==0 ;1= Has new LPT (ODEC)
|
||||||
|
DEFOPT GLPTP==0 ;1= Has Gould LPT
|
||||||
|
DEFOPT TTLPTP==0 ;1= LPT is on a TTY line (value = line #)
|
||||||
|
DEFOPT PTRP==0 ;1= Has paper tape reader/punch
|
||||||
|
DEFOPT PTPP==0 ;1= Paper tape punch works
|
||||||
|
DEFOPT PDCLKP==0 ;1= Has "DeCoriolis" clock
|
||||||
|
DEFOPT HCLKP==0 ;1= Has Holloway clock (device 710, 714)
|
||||||
|
DEFOPT CCLKP==0 ;1= Hack chess tournament clock stuff (device 374)
|
||||||
|
DEFOPT 340P==0 ;1= Has 340 display
|
||||||
|
DEFOPT TABP==0 ;1= Has Sylvania tablet
|
||||||
|
DEFOPT PLTP==0 ;1= Has Calcomp plotter
|
||||||
|
DEFOPT DSDP==0 ;1= Has deselection device
|
||||||
|
DEFOPT ARMP==0 ;1= Has arm (AMF mostly) (R.I.P.)
|
||||||
|
DEFOPT IMXP==0 ;1= Has IMX (input A/D multiplexor) (alas, no more)
|
||||||
|
DEFOPT OMXP==0 ;1= Has OMX (output D/A multiplexor) (alas, no more)
|
||||||
|
DEFOPT VIDP==0 ;1= Has VIDI (R.I.P.)
|
||||||
|
DEFOPT NTYP==0 ;1= Has DM kludge for talking to 11
|
||||||
|
DEFOPT CODP==0 ;1= Has Morse code F1 92Mhz broadcast output device
|
||||||
|
DEFOPT PDP6P==0 ;1= Has PDP-6 (alas, no more)
|
||||||
|
; (turning this on probably won't work)
|
||||||
|
DEFOPT RBTCP==0 ;1= Has Robot console
|
||||||
|
DEFOPT NDAP==0 ;1= Has "new" D/A converters (alas, no more)
|
||||||
|
DEFOPT STKP==0 ;1= Has Stanford keyboard (not any more)
|
||||||
|
DEFOPT E.SP==0 ;1= Has E&S LDS-1 display
|
||||||
|
|
||||||
|
; Some software options
|
||||||
|
|
||||||
|
DEFOPT MSPP==0 ;1= Want message slurper
|
||||||
|
DEFOPT DEMON==0 ;1= Want crufty DM demon facility
|
||||||
|
DEFOPT TPLP==0 ;1= Want pseudo LPT
|
||||||
|
|
||||||
|
|
||||||
|
; Physical memory parameters
|
||||||
|
|
||||||
|
DEFOPT ECCMEM==0 ;1= Has HIC's error correcting memory
|
||||||
|
DEFOPT NMMP==4 ; # exec pages for MMP table (# vir pgs/512.)
|
||||||
|
IFNDEF TSYSM, .ERR TSYSM required - Total PDP10 1K mem blocks
|
||||||
|
|
||||||
|
IFNDEF PMRCM, .ERR PMRCM required - Mem addr field in page map
|
||||||
|
IFNDEF PMAGEM,.ERR PMAGEM required - Age bits in page map
|
||||||
|
IFNDEF PMCSHM,.ERR PMCSHM required - Cache bit
|
||||||
|
IFNDEF PMUNSD,.ERR PMUNSD required - Unused bits
|
||||||
|
|
||||||
|
IFNDEF ITSIRP,.ERR ITSIRP required - Names of local ITS machines
|
||||||
|
|
||||||
|
; Any parameter conflict checks can be made here.
|
||||||
|
|
||||||
|
IFN DZ11P,[
|
||||||
|
IFG NDZTYS-<DZ11NB*8>, .ERR More DZ11 TTYs than controllers?
|
||||||
|
REPEAT DZ11NB,[
|
||||||
|
IFNDEF CONC DZ,\.RPCNT,BA, .ERR DZ11 bus address not specified.
|
||||||
|
]
|
||||||
|
]
|
||||||
|
IFN $$TEMP,EXPUNGE DEFSYM
|
||||||
|
IFN $$TEM2,EXPUNGE DEFOPT
|
||||||
2989
src/system/core.82
Executable file
2989
src/system/core.82
Executable file
File diff suppressed because it is too large
Load Diff
270
src/system/dc10.defs27
Executable file
270
src/system/dc10.defs27
Executable file
@@ -0,0 +1,270 @@
|
|||||||
|
.AUXIL
|
||||||
|
|
||||||
|
IFNDEF DEFSYM,[ ;ALLOW USER TO USE SYMBOLS IN OTHER WAYS IF HE WISHES.
|
||||||
|
;BUT NORMALLY, DEFSYM FOO==BAR DOES FOO==BAR WITH ERROR CHECK.
|
||||||
|
DEFINE DEFSYM X/
|
||||||
|
IRPS Z,,[X]
|
||||||
|
IFNDEF Z,X
|
||||||
|
.ELSE [
|
||||||
|
$$TEM1==Z
|
||||||
|
X
|
||||||
|
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
|
||||||
|
]
|
||||||
|
.ISTOP
|
||||||
|
TERMIN TERMIN
|
||||||
|
|
||||||
|
IFLE .MLLIT,.ERR .MLLIT MUST BE 1; SETTING IT TO 1.
|
||||||
|
.MLLIT==1
|
||||||
|
$$TEMP==1
|
||||||
|
]
|
||||||
|
.ELSE $$TEMP==0
|
||||||
|
|
||||||
|
|
||||||
|
;SYSTEMS CONCEPTS DC10 PHYSICAL CHARACTERISTICS
|
||||||
|
|
||||||
|
DEFSYM NCYLS==400. ;# CYLINDERS NORMALLY USED
|
||||||
|
DEFSYM XCYLS==6 ;# EXTRA CYLINDERS FOR SPARES, HACKS, ETC.
|
||||||
|
DEFSYM NHEDS==20. ;# TRACKS/CYLINDER
|
||||||
|
DEFSYM NSECS==2 ;# BLKS/TRK
|
||||||
|
DEFSYM SECBLK==1 ;# SECTORS/BLOCK
|
||||||
|
DEFSYM NBLKSC==NHEDS*NSECS ;# BLKS/CYL
|
||||||
|
DEFSYM NBLKS==NCYLS*NBLKSC ;TOTAL # REG BLKS
|
||||||
|
DEFSYM XBLKS==XCYLS*NBLKSC ;# XTRA BLKS
|
||||||
|
DEFSYM TBLKS==NBLKS+XBLKS ;TOTAL BLOCKS
|
||||||
|
|
||||||
|
DEFSYM NTUTBL==2 ;2 BLOCKS PER TUT (DUAL-DENSITY CALCOMPS THESE DAYS)
|
||||||
|
DEFSYM DECADE==20. ;NUMBER OF BLOCKS TO ALLOCATE AT A TIME
|
||||||
|
;QSWAPA AND QLASTB MUST BE MULTIPLES OF THIS
|
||||||
|
|
||||||
|
;EXTRA WORDS IN BLOCK
|
||||||
|
|
||||||
|
DEFSYM XWBWC==0
|
||||||
|
DEFSYM XWBLK==1700,, ;BP TO PREV BLK # IN FILE FLD
|
||||||
|
DEFSYM XWAWC==171200,, ;BP TO ACTIVE WD CNT
|
||||||
|
DEFSYM XWSYSN==1
|
||||||
|
DEFSYM XWFN1==2
|
||||||
|
DEFSYM XWFN2==3
|
||||||
|
DEFSYM NXWDS==4 ;NUMBER OF EXTRA WORDS
|
||||||
|
|
||||||
|
DEFSYM DC0==610 ;MAIN DEVICE CODE
|
||||||
|
DEFSYM DC1==614 ;READS ERR STATUS ETC, SETS TIMER DRIVER # ON CONO
|
||||||
|
|
||||||
|
;FIELDS IN HEADER WORD 0
|
||||||
|
|
||||||
|
DEFSYM DPKID==240700,, ;PACK ID FIELD
|
||||||
|
DEFSYM DCYL==131100,, ;CYLINDER CHECK FIELD
|
||||||
|
DEFSYM DSURF==60500,, ;SURFACE CHECK FIELD
|
||||||
|
DEFSYM DSECT==600,, ;SECTOR FIELD
|
||||||
|
|
||||||
|
;WORD 1 HEADER
|
||||||
|
|
||||||
|
DEFSYM DHIND==1000,, ;4.1 INDIRECT IF 1, CYL, SURF, SECTOR SAME AS ABOVE
|
||||||
|
DEFSYM DHSPRT==400,, ;BIT 3.9 SOFTWARE PROTECT
|
||||||
|
DEFSYM DHHPRT==200,, ;3.8 HARDWARE PROTECT
|
||||||
|
DEFSYM DHNXAD==270200,, ;3.7, 3.6 HOW TO COMPUTE NEXT DISK ADR
|
||||||
|
;=00 ADD 1 TO SECTOR
|
||||||
|
;01 SET SECTOR TO 0, ADD 1 TO SURF
|
||||||
|
;10 SET SECTOR AND SURFACE TO 0, ADD 1 TO CYL
|
||||||
|
;11 END OF DISK
|
||||||
|
DEFSYM DHEPB==10,, ;PARITY BIT FOR EVEN BITS OF 56 BIT HEADER
|
||||||
|
DEFSYM DHOPB==4,, ;PARITY BIT FOR ODD BITS OF 56 BIT HEADER
|
||||||
|
DEFSYM DHSLNG==1600,, ;-LENGTH OF SECTOR FIELD
|
||||||
|
|
||||||
|
;DISK ADDRESS DATA COMMANDS (OP CODES)
|
||||||
|
|
||||||
|
DEFSYM DRC==400000,, ;READ COMPARE
|
||||||
|
DEFSYM DWRITE==440000,, ;WRITE
|
||||||
|
DEFSYM DREAD==500000,, ;READ
|
||||||
|
DEFSYM DSEEK==540000,, ;SEEK
|
||||||
|
DEFSYM DRCC==600000,, ;READ COMPARE CONTINUOUS
|
||||||
|
DEFSYM DWRITC==640000,, ;WRITE CONTINUOUS
|
||||||
|
DEFSYM DREADC==700000,, ;READ CONTINUOUS
|
||||||
|
|
||||||
|
DEFSYM DUNENB==20000,, ;ENABLE LOAD UNIT FIELD
|
||||||
|
DEFSYM DUNFLD==330400,, ;UNIT FIELD
|
||||||
|
;PKID, CYL, SURF, AND SECTOR SAME AS ABOVE
|
||||||
|
|
||||||
|
;COPY / COMPARE / SKIP COMMAND
|
||||||
|
|
||||||
|
DEFSYM DCOPY==40000,, ;COPY
|
||||||
|
DEFSYM DCCOMP==100000,, ;COMPARE
|
||||||
|
DEFSYM DCSKIP==140000,, ;SKIP
|
||||||
|
|
||||||
|
DEFSYM DCWC==241400,, ;-WC FIELD
|
||||||
|
DEFSYM DCCA==2400,, ;CORE ADDRES
|
||||||
|
DEFSYM DCBN==121200,, ;BLOCK NUMBER
|
||||||
|
|
||||||
|
;JUMP COMMANDS
|
||||||
|
DEFSYM DHLT==0 ;0 IN 4.9-4.5 = JUMP AND IN 3.5,3.6 = HALT
|
||||||
|
DEFSYM DXCT==20,, ;XCT
|
||||||
|
DEFSYM DJMP==40,, ;JUMP
|
||||||
|
DEFSYM DJSR==60,, ;JSR
|
||||||
|
|
||||||
|
;"B" COMMAND BITS 3.3, 3.4
|
||||||
|
;0 ALWAYS
|
||||||
|
DEFSYM DAOJNC==4,, ;AOJN THE CONTROL COUNTER
|
||||||
|
DEFSYM DDOK==10,, ;ON NO DATA ERROR
|
||||||
|
DEFSYM DSRQF==14,, ;IF SEEK RQ FLAG ON
|
||||||
|
|
||||||
|
;STORE REGISTER COMMAND
|
||||||
|
DEFSYM DSREG==240400,, ;STORE REG
|
||||||
|
;USE, UNIT BITS SAME
|
||||||
|
DEFSYM DSREGS==240300,, ;SOURCE REGISTER SELECT FIELD
|
||||||
|
DEFSYM DSRDB==0 ;STORE DATA BUFFER
|
||||||
|
DEFSYM DSRDL==4,, ;STORE DISK LOCATION
|
||||||
|
DEFSYM DSRCC==10,, ;STORE COMMAND COUNT
|
||||||
|
DEFSYM DSRPC==24,, ;STORE PC (IN FORM OF JMP INST.)
|
||||||
|
DEFSYM DSRWC==30,, ;STORE WORD COUNT
|
||||||
|
DEFSYM DSRCA==34,, ;STORE CORE ADDRESS (TO XFER DATA TO OR FROM)
|
||||||
|
|
||||||
|
;ALU COMMAND
|
||||||
|
DEFSYM DALU==300000,, ;BASIC ALU OP CODE
|
||||||
|
DEFSYM DALUX==40000,, ;INDEX BIT (ADD CC TO ADR)
|
||||||
|
DEFSYM DALUD==40,, ;DIRECT BIT IF 1, REF MEM OT GET B OP
|
||||||
|
|
||||||
|
DEFSYM DASL==4000,, ;SKIP ON <0
|
||||||
|
DEFSYM DASE==10000,, ;SKIP ON = 0
|
||||||
|
DEFSYM DASLE==14000,, ;SKIP ON < OR = 0
|
||||||
|
DEFSYM DASA==20000,, ;ALWAYS SKIP
|
||||||
|
DEFSYM DASGE==24000,, ;SKIP ON > OR = 0
|
||||||
|
DEFSYM DASN==30000,, ;SKIP ON NOT = 0
|
||||||
|
DEFSYM DASG==34000,, ;SKIP ON > 0
|
||||||
|
|
||||||
|
;DESTINATION SUB OP (ALSO SPECIFIES SOURCE A)
|
||||||
|
DEFSYM DLDB==0 ;OP A FROM DB, STORE IN DB
|
||||||
|
DEFSYM DLDL==4,, ;OP FROM DL, STORE IN DL
|
||||||
|
DEFSYM DLCC==10,, ;OP FROM CC, STORE IN CC
|
||||||
|
DEFSYM DLCA==14,, ;OP A =0, STORE IN CA
|
||||||
|
DEFSYM DLTDB==20,, ;TEST DB (OP A FROM DB, NO STORE)
|
||||||
|
DEFSYM DLDBPC==24,, ;OP A FROM DB, STORE IN PC
|
||||||
|
DEFSYM DLDBWC==30,, ;OP A FROM DB, STORE IN WC
|
||||||
|
DEFSYM DLDBM==34,, ;OP A FROM DB, STORE IN MEM (DIRECT MUST BE ONE TO REALLY MAKE IT)
|
||||||
|
|
||||||
|
;SOME USEFUL (?) OPS
|
||||||
|
DEFSYM DLADD==100,, ;A+B
|
||||||
|
DEFSYM DLSOS==200,, ;B-1
|
||||||
|
DEFSYM DLLB==300,, ;B
|
||||||
|
DEFSYM DLSUB==400,, ;B-A
|
||||||
|
|
||||||
|
DEFSYM DLAND==2300,, ;A&B
|
||||||
|
DEFSYM DLIOR==2500,, ;A IOR B
|
||||||
|
DEFSYM DLLA==3100,, ;LOAD A
|
||||||
|
DEFSYM DLSETO==3200,, ;-1
|
||||||
|
DEFSYM DLSETZ==3300,, ;0
|
||||||
|
|
||||||
|
;OPR COMMAND
|
||||||
|
DEFSYM DOPR==200000,, ;BASIC OPR
|
||||||
|
DEFSYM DOHXFR==400,, ;HALT DURING XFER (SO MB WILL BE SAFE)
|
||||||
|
DEFSYM DOCSRQ==200,, ;CLEAR SEEK RQ
|
||||||
|
DEFSYM DOSSRQ==100,, ;SET SEEK RQ
|
||||||
|
DEFSYM DOSCFL==40,, ;SET C FLAG
|
||||||
|
|
||||||
|
;STORE DRIVE STATUS
|
||||||
|
DEFSYM DSDRST==240000,, ;STORE DRIVE STATUS
|
||||||
|
;UNIT ENABLE, UNIT FIELD SAME
|
||||||
|
DEFSYM DSDCNT==240400,, ;COUNT-1 FIELD
|
||||||
|
|
||||||
|
;BITS IN DRIVE STATUS STORED
|
||||||
|
|
||||||
|
DEFSYM DDSWC==40,, ;WRITE CURRENT SENSED
|
||||||
|
DEFSYM DDSUNS==20,, ;DRIVE UNSAFE
|
||||||
|
DEFSYM DDSRDO==10,, ;READ ONLY
|
||||||
|
DEFSYM DDSSIC==4,, ;SEEK INCOMPLETE
|
||||||
|
DEFSYM DDSRDY==2,, ;DRIVE READY
|
||||||
|
DEFSYM DDSONL==1,, ;DRIVE ON LINE
|
||||||
|
DEFSYM DDSSEL==400000 ;DRIVE SELECTED
|
||||||
|
DEFSYM DDSCYL==101000,, ;PRESENT CYLINDER
|
||||||
|
DEFSYM DDSLAT==1000,, ;LATENCY TIMER
|
||||||
|
|
||||||
|
;DISK ADR "SPECIAL COMMAND"
|
||||||
|
|
||||||
|
DEFSYM DSPC==740000,, ;BASIC OP CODE
|
||||||
|
;USE, UNIT FIELDS AS NORMAL
|
||||||
|
|
||||||
|
; E CONDITION (WAIT)
|
||||||
|
;0 NONE
|
||||||
|
DEFSYM DSWIDX==20,, ;WAIT UNTIL INDEX PULSE
|
||||||
|
DEFSYM DSWSEC==40,, ;WAIT UNTIL SECTOR PULSE
|
||||||
|
DEFSYM DSWINF==60,, ;NEVER (USE WITH G=3 OR 7)
|
||||||
|
|
||||||
|
; F CONDITION (OTHER WAIT)
|
||||||
|
DEFSYM DSWHDM==0 ;WAIT FOR MATCHING HEADER
|
||||||
|
DEFSYM DSWAGH==4,, ;ANY GOOD HEADER
|
||||||
|
DEFSYM DSWAH==10,, ;ANY HEADER
|
||||||
|
DEFSYM DSWNUL==14,, ;NO WAIT
|
||||||
|
|
||||||
|
;G OPERATION
|
||||||
|
DEFSYM DSCRDC==0 ;READ DATA THRU DECODERS
|
||||||
|
DEFSYM DSCRIM==100,, ;READ DATA IMAGE
|
||||||
|
DEFSYM DSCRHD==200,, ;READ HEADER WORDS
|
||||||
|
DEFSYM DSRCAL==300,, ;(RECALIBRATE)
|
||||||
|
DEFSYM DSCWDC==400,, ;WRITE THRU DECODERS
|
||||||
|
DEFSYM DSCWIM==500,, ;WRITE IMAGE
|
||||||
|
DEFSYM DSMAIT==700,, ;MAINTENANCE (PUT CYL FIELD ON BUS LINES WITH CONTROL TAG)
|
||||||
|
|
||||||
|
;BITS IN CONI DC0,
|
||||||
|
DEFSYM DASSGN==400000,, ;ASSIGNED TO PROC (WITH SWITCH)
|
||||||
|
DEFSYM DPIRQC==400000 ;PI REQ BEING GENERATED
|
||||||
|
DEFSYM DSSRQ==200000 ;SEEK REQUEST
|
||||||
|
DEFSYM DSDEEB==10000 ;ENABLE INTERRUPT ON DATA ERROR OR READ/ COMP ERROR
|
||||||
|
DEFSYM DSSERR==4000 ;ERROR FLAG
|
||||||
|
DEFSYM DSSAEB==2000 ;ATTENTION ENABLE FLAG
|
||||||
|
DEFSYM DSSATT==1000 ;ATTENTION FLAG
|
||||||
|
DEFSYM DSIENB==400 ;IDLE FLAG ENABLE
|
||||||
|
DEFSYM DSSRUN==200 ;RUN
|
||||||
|
DEFSYM DSSACT==100 ;ACTIVE
|
||||||
|
DEFSYM DSSCEB==40 ;CHANNEL ENABLE
|
||||||
|
DEFSYM DSSCHF==20 ;CHANNEL FLAG
|
||||||
|
DEFSYM DSSCFL==10 ;CPU FLAG
|
||||||
|
;PIA 1.3-1.1
|
||||||
|
|
||||||
|
;DATAO DC0, SENDS COMMAND TO DISK
|
||||||
|
; (IGNORED IF EXECUTING COMMANDS FROM MEMORY)
|
||||||
|
|
||||||
|
;CONO DC0,
|
||||||
|
DEFSYM DCSET==400000 ;SET SELECTED
|
||||||
|
DEFSYM DCCLR==200000 ;CLEAR SELECTED
|
||||||
|
DEFSYM DCCSET==600000 ;RESET CONTROLLER THEN SET SELECTED
|
||||||
|
DEFSYM DCDENB==10000 ;DATA ERROR ENABLE
|
||||||
|
DEFSYM DCERR==4000 ;SET ERROR FLAG OR CLEAR ALL ERRORS
|
||||||
|
DEFSYM DCATEB==2000 ;ATTENTION ENABLE
|
||||||
|
DEFSYM DCCATT==1000 ;CLEAR ATTENTION
|
||||||
|
DEFSYM DCSSRQ==1000 ;SET SEEK REQUEST
|
||||||
|
DEFSYM DCIENB==400 ;IDLE ENABLE
|
||||||
|
DEFSYM DCSTAR==200 ;START (SET)
|
||||||
|
DEFSYM DCSSTP==200 ;STOP (CLEAR)
|
||||||
|
DEFSYM DCSGL==100 ;DO SINGLE COMMAND
|
||||||
|
DEFSYM DCCENB==40 ;CHANNEL ENABLE
|
||||||
|
DEFSYM DCCFLG==20 ;CHANNEL FLAG
|
||||||
|
DEFSYM DCCPUF==10 ;CPU FLAG
|
||||||
|
;1.1-1.3 PIA
|
||||||
|
|
||||||
|
;CONO DC1,
|
||||||
|
|
||||||
|
;SET TIMER DRIVE # FROM 1.1-1.3
|
||||||
|
|
||||||
|
;CONI DC1,
|
||||||
|
;LH
|
||||||
|
DEFSYM DSATDN==360400,, ;ATTENTION DRIVE #
|
||||||
|
DEFSYM DSTMDN==320400,, ;TIMER DRIVE #
|
||||||
|
DEFSYM DSLAT==221000,, ;LATENCY TIMER FOR DRIVE ABOVE
|
||||||
|
|
||||||
|
;RH (ERROR FLAGS)
|
||||||
|
DEFSYM DIPE==4000 ;INTERNAL PARITY ERROR
|
||||||
|
DEFSYM DRLNER==2000 ;RECORD LENGTH
|
||||||
|
DEFSYM DRCER==1000 ;READ COMPARE ERROR
|
||||||
|
DEFSYM DOVRRN==400 ;OVERRUN
|
||||||
|
DEFSYM DCKSER==200 ;CKSUM OR DECODER ERR
|
||||||
|
DEFSYM DWTHER==100 ;WATCHDOG TIMER
|
||||||
|
DEFSYM DFUNSF==40 ;FILE UNSAFE, SEEK INCOMPLETE OR END OR DSK
|
||||||
|
DEFSYM DOFFL==20 ;OFF LINE OR MULT SEL
|
||||||
|
DEFSYM DPROT==10 ;WRT KEY OR RD ONLY OR PROTECT
|
||||||
|
DEFSYM DDOBSY==4 ;DATAO WHEN BSY
|
||||||
|
DEFSYM DNXM==2 ;NON-EX MEM
|
||||||
|
DEFSYM DCPERR==1 ;CORE PARITY ERR
|
||||||
|
|
||||||
|
DEFSYM LRIBLK==16 ;CONSISTENCY CHECK DSKDMP VS MARK
|
||||||
|
|
||||||
|
|
||||||
|
IFN $$TEMP,EXPUNG DEFSYM
|
||||||
|
|
||||||
BIN
src/system/ddt.68
Executable file
BIN
src/system/ddt.68
Executable file
Binary file not shown.
BIN
src/system/ddtdsk.31
Executable file
BIN
src/system/ddtdsk.31
Executable file
Binary file not shown.
6412
src/system/disk.1224
Executable file
6412
src/system/disk.1224
Executable file
File diff suppressed because it is too large
Load Diff
153
src/system/dmpcpy.11
Executable file
153
src/system/dmpcpy.11
Executable file
@@ -0,0 +1,153 @@
|
|||||||
|
; -*- MIDAS -*-
|
||||||
|
|
||||||
|
TITLE DMPCPY - COPY DUMPS FROM SWAP AREA TO FILE AREA
|
||||||
|
|
||||||
|
A=1
|
||||||
|
B=2
|
||||||
|
C=3
|
||||||
|
D=4
|
||||||
|
E=5
|
||||||
|
T=6
|
||||||
|
TT=7
|
||||||
|
P=17
|
||||||
|
|
||||||
|
CHDIRI=10
|
||||||
|
CHDSKI=11
|
||||||
|
CHDSKO=12
|
||||||
|
|
||||||
|
.INSRT SYSENG;FSDEFS >
|
||||||
|
|
||||||
|
PDL: -20,,.
|
||||||
|
BLOCK 20
|
||||||
|
|
||||||
|
;DIRECTORIES WHERE STUFF MIGHT GET DUMPED OUT OF TIMESHARING
|
||||||
|
DIRLST: SIXBIT/./
|
||||||
|
SIXBIT/CRASH/
|
||||||
|
SIXBIT/CRASH2/
|
||||||
|
NDIRS==.-DIRLST
|
||||||
|
|
||||||
|
DIR: BLOCK 2000
|
||||||
|
BUF: BLOCK 2000
|
||||||
|
|
||||||
|
USRVAR: SIXBIT /OPTION/ ? TLO %OPINT\%OPOPC
|
||||||
|
SIXBIT /MASK/ ? MOVE [%PIIOC\%PIPDL]
|
||||||
|
LUSRVAR==:.-USRVAR
|
||||||
|
|
||||||
|
GO: .CLOSE 1, ;RUNS AS DAEMON
|
||||||
|
MOVE P,PDL
|
||||||
|
MOVE TT,[-LUSRVAR,,USRVAR]
|
||||||
|
.CALL [ SETZ ? SIXBIT /USRVAR/
|
||||||
|
MOVEI %JSELF
|
||||||
|
SETZ TT ]
|
||||||
|
.LOSE %LSSYS
|
||||||
|
CHKTIM: .CALL [ SETZ ? SIXBIT /RQDATE/ ; don't frob with files
|
||||||
|
SETZM A ] ; if system doesn't know the time
|
||||||
|
.LOSE %LSSYS
|
||||||
|
AOJN A,KNOTIM
|
||||||
|
MOVEI A,30.*15. ; 15 seconds
|
||||||
|
.SLEEP A,
|
||||||
|
JRST CHKTIM
|
||||||
|
|
||||||
|
KNOTIM: MOVSI E,-NDIRS
|
||||||
|
CHKDIR: .CALL [ SETZ ? SIXBIT/OPEN/
|
||||||
|
[.BII,,CHDIRI]
|
||||||
|
[SIXBIT/DSK/]
|
||||||
|
[SIXBIT/.FILE./]
|
||||||
|
[SIXBIT/(DIR)/]
|
||||||
|
SETZ DIRLST(E)]
|
||||||
|
JRST NXTDIR ; Hey, there might not -be- such a directory!
|
||||||
|
MOVE TT,[-2000,,DIR]
|
||||||
|
.IOT CHDIRI,TT
|
||||||
|
.CLOSE CHDIRI,
|
||||||
|
MOVE D,UDNAMP+DIR
|
||||||
|
CHKFIL: CAIL D,2000
|
||||||
|
JRST NXTDIR
|
||||||
|
MOVE TT,UNRNDM+DIR(D)
|
||||||
|
SKIPGE UNDATE+DIR(D)
|
||||||
|
TLNE TT,UNDUMP\UNIGFL\UNREAP\UNLINK ; Don't screw with files
|
||||||
|
JRST NXTFIL ; you don't understand.
|
||||||
|
;HERE WE HAVE FOUND A FILE WRITTEN OUT OF TIMESHARING
|
||||||
|
;COPY IT SO AS TO (1) SET THE FILE DATE AND (2) GET IT OUT
|
||||||
|
; OF THE SWAPPING AREA. NTS FILES ARE WRITTEN IN THE SWAPPING
|
||||||
|
; AREA TO DECREASE THE PROBABILITY OF CLOBBERING SOME OTHER FILE.
|
||||||
|
.CALL [ SETZ ? SIXBIT/OPEN/
|
||||||
|
MOVES TT
|
||||||
|
[.BII,,CHDSKI]
|
||||||
|
[SIXBIT/DSK/]
|
||||||
|
UNFN1+DIR(D)
|
||||||
|
UNFN2+DIR(D)
|
||||||
|
SETZ DIRLST(E) ]
|
||||||
|
JSP T,[ CAIE TT,%ENSFL ; perhaps a hacker deleted it
|
||||||
|
CAIN TT,%ENAPK ; perhaps that pack had to go offline
|
||||||
|
JRST NXTFIL
|
||||||
|
JRST LOSE ]
|
||||||
|
.CALL [ SETZ ? SIXBIT/OPEN/
|
||||||
|
MOVES TT
|
||||||
|
[.BIO,,CHDSKO]
|
||||||
|
[SIXBIT/DSK/]
|
||||||
|
[SIXBIT/_DMPCP/]
|
||||||
|
[SIXBIT/OUTPUT/]
|
||||||
|
SETZ DIRLST(E) ]
|
||||||
|
JSP T,[ CAIE TT,%EFLDR
|
||||||
|
JRST LOSE
|
||||||
|
MOVEI TT,30.*60.*5 ; 5 minutes
|
||||||
|
.SLEEP TT,
|
||||||
|
JRST .-1 ]
|
||||||
|
CPYFIL: MOVE TT,[-2000,,BUF]
|
||||||
|
.IOT CHDSKI,TT
|
||||||
|
MOVEI T,-BUF(TT)
|
||||||
|
JUMPE T,ENDFIL
|
||||||
|
MOVNS T
|
||||||
|
MOVSS T
|
||||||
|
HRRI T,BUF
|
||||||
|
.IOT CHDSKO,T
|
||||||
|
JRST CPYFIL
|
||||||
|
|
||||||
|
ENDFIL: .CLOSE CHDSKI,
|
||||||
|
.CALL [ SETZ ? 'RENMWO
|
||||||
|
MOVEI CHDSKO
|
||||||
|
UNFN1+DIR(D)
|
||||||
|
SETZ UNFN2+DIR(D) ]
|
||||||
|
.LOSE %LSSYS
|
||||||
|
.CLOSE CHDSKO,
|
||||||
|
NXTFIL: ADDI D,LUNBLK
|
||||||
|
JRST CHKFIL
|
||||||
|
|
||||||
|
NXTDIR: AOBJN E,CHKDIR
|
||||||
|
.LOGOUT 1,
|
||||||
|
.VALUE
|
||||||
|
|
||||||
|
; JSP T,LOSE is like .LOSE %LSFIL(TT)
|
||||||
|
LOSE: .CALL [ SETZ ? SIXBIT /LOSE/
|
||||||
|
MOVEI %LSFIL(TT)
|
||||||
|
SETZI -2(T) ]
|
||||||
|
.LOSE %LSSYS
|
||||||
|
|
||||||
|
TSINT:
|
||||||
|
LOC 42
|
||||||
|
-LTSINT,,TSINT
|
||||||
|
LOC TSINT
|
||||||
|
P
|
||||||
|
%PIIOC ? 0 ? %PIIOC ? 0 ? IOCINT
|
||||||
|
LTSINT==:.-TSINT
|
||||||
|
|
||||||
|
; If there is a disk or directory full problem, wait for someone to notice.
|
||||||
|
IOCINT: PUSH P,T
|
||||||
|
.SUSET [.RBCHN,,T]
|
||||||
|
CAIE T,CHDSKO
|
||||||
|
.LOSE
|
||||||
|
.STATUS CHDSKO,T
|
||||||
|
LDB T,[330500,,T]
|
||||||
|
CAIE T,11 ; DEVICE FULL
|
||||||
|
CAIN T,14 ; DIRECTORY FULL
|
||||||
|
JRST WAIT
|
||||||
|
.VALUE
|
||||||
|
|
||||||
|
WAIT: MOVEI T,30.*60.*5 ; 5 minutes
|
||||||
|
.SLEEP T,
|
||||||
|
POP P,T
|
||||||
|
.CALL [ SETZ ? SIXBIT /DISMIS/
|
||||||
|
SETZ P ]
|
||||||
|
.LOSE %LSSYS
|
||||||
|
|
||||||
|
END GO
|
||||||
1882
src/system/dskdmp.215
Executable file
1882
src/system/dskdmp.215
Executable file
File diff suppressed because it is too large
Load Diff
56
src/system/dz11.10
Executable file
56
src/system/dz11.10
Executable file
@@ -0,0 +1,56 @@
|
|||||||
|
;-*-MIDAS-*-
|
||||||
|
; DZ11 definitions
|
||||||
|
|
||||||
|
DZLNLN==3
|
||||||
|
DZNLN==1_DZLNLN ;Number of DZ terminal lines per board
|
||||||
|
DZLNM==DZNLN-1 ;Line number mask given DZ number of TTY
|
||||||
|
|
||||||
|
%DZLM==3400 ;Line Number Mask
|
||||||
|
%DZLS==8. ;Line number shift
|
||||||
|
|
||||||
|
%DZRCS==0 ;Control & Status register
|
||||||
|
; CSR Bits and fields
|
||||||
|
%DZCMN==10 ;Maintenance
|
||||||
|
%DZCCL==20 ;Clear
|
||||||
|
%DZCMS==40 ;Master Scan Enable
|
||||||
|
%DZCRE==100 ;Receiver Interrupt Enable
|
||||||
|
%DZCRD==200 ;Receiver Done
|
||||||
|
%DZCSE==10000 ;Silo Alarm Enable
|
||||||
|
%DZCSA==20000 ;Silo Alarm
|
||||||
|
%DZCTE==40000 ;Transmitter Interrupt Enable
|
||||||
|
%DZCTR==100000 ;Transmitter Ready
|
||||||
|
|
||||||
|
%DZRLP==2 ;Line Parameter register
|
||||||
|
; LPR Bits and fields
|
||||||
|
%DZLLM==7 ;Line number mask
|
||||||
|
%DZLCL==10 ;Character Length position
|
||||||
|
%DZLSC==40 ;Stop code bit
|
||||||
|
%DZLPY==100 ;Parity bit
|
||||||
|
%DZLOP==200 ;Odd parity
|
||||||
|
%DZLSP==400 ;Speed code position
|
||||||
|
%DZLSS==8. ;Speed code shift
|
||||||
|
%DZLRO==10000 ;Receiver on
|
||||||
|
|
||||||
|
%DZRDR==2 ;Read Data register
|
||||||
|
; RDR Bits and fields
|
||||||
|
%DZDCM==377 ;Character mask
|
||||||
|
%DZDPE==10000 ;Parity Error
|
||||||
|
%DZDFE==20000 ;Frame Error (break key)
|
||||||
|
%DZDOR==40000 ;Overrun
|
||||||
|
%DZDDV==100000 ;Data valid
|
||||||
|
|
||||||
|
%DZRTC==4 ;Transmitter Control & Data Terminal registers
|
||||||
|
|
||||||
|
%DZRTD==6 ;Transmitter Buffer & Break registers
|
||||||
|
; TDR and BR fields
|
||||||
|
%DZTCM==377 ;Character mask
|
||||||
|
%DZTBM==177400 ;Break mask
|
||||||
|
|
||||||
|
%DZRMS==6 ;Modem status
|
||||||
|
; MSR fields
|
||||||
|
%DZMRI==377 ;Ring detect
|
||||||
|
%DZMCD==177400 ;Carrier detect
|
||||||
|
|
||||||
|
; To do:
|
||||||
|
; - Add modem control.
|
||||||
|
|
||||||
160
src/system/ept.defs16
Executable file
160
src/system/ept.defs16
Executable file
@@ -0,0 +1,160 @@
|
|||||||
|
IFN 0,[
|
||||||
|
.AUXIL
|
||||||
|
]
|
||||||
|
|
||||||
|
IF1,[
|
||||||
|
.TYO6 .IFNM1
|
||||||
|
.TYO 40
|
||||||
|
.TYO6 .IFNM2
|
||||||
|
PRINTX / included in this assembly.
|
||||||
|
/
|
||||||
|
];IF1
|
||||||
|
|
||||||
|
IFNDEF DEFSYM,[ ;ALLOW USER TO USE SYMBOLS IN OTHER WAYS IF HE WISHES.
|
||||||
|
;BUT NORMALLY, DEFSYM FOO==BAR DOES FOO==BAR WITH ERROR CHECK.
|
||||||
|
DEFINE DEFSYM X/
|
||||||
|
IRPS Z,,[X]
|
||||||
|
IFNDEF Z,X
|
||||||
|
.ELSE [
|
||||||
|
$$TEM1==Z
|
||||||
|
X
|
||||||
|
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
|
||||||
|
]
|
||||||
|
.ISTOP
|
||||||
|
TERMIN TERMIN
|
||||||
|
|
||||||
|
IFLE .MLLIT,.ERR .MLLIT MUST BE 1; SETTING IT TO 1.
|
||||||
|
.MLLIT==1
|
||||||
|
$$TEMP==1
|
||||||
|
]
|
||||||
|
.ELSE $$TEMP==0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
IFNDEF EPT, EPT=1000 ;ABSOLUTE LOCATION OF EPT
|
||||||
|
;LOCS 0-1777 UNCACHED
|
||||||
|
;BUT THE HARDWARE CACHES EPT REFERENCES ANYWAY
|
||||||
|
|
||||||
|
DEFSYM PI0LOC=EPT+40 ;PI0LOC+2*PICHN = ADDRESS OF INSTR PAIR FOR PICHN
|
||||||
|
|
||||||
|
DEFSYM DTEBPO=EPT+140 ;DTE20 OUTPUT (BYTE TRANSFER) BYTE POINTER
|
||||||
|
DEFSYM DTEBPI=EPT+141 ;DTE20 INPUT (BYTE TRANSFER) BYTE POINTER
|
||||||
|
DEFSYM DTELOC=EPT+142 ;DTE20 INTERRUPT INSTRUCTION
|
||||||
|
DEFSYM DTEPRO=EPT+144 ;DTE20 OUTPUT (EXAMINE) PROTECTION WORD
|
||||||
|
DEFSYM DTERLO=EPT+145 ;DTE20 OUTPUT (EXAMINE) RELOCATION WORD
|
||||||
|
DEFSYM DTEPRI=EPT+146 ;DTE20 INPUT (DEPOSIT) PROTECTION WORD
|
||||||
|
DEFSYM DTERLI=EPT+147 ;DTE20 INPUT (DEPOSIT) RELOCATION WORD
|
||||||
|
|
||||||
|
DEFSYM EPTCLK=EPT+510 ;DOUBLE WORD FOR CALENDAR CLOCK (TIME BASE)
|
||||||
|
DEFSYM EPTPRF=EPT+512 ;DOUBLE WORD FOR PERFORMANCE COUNTER
|
||||||
|
DEFSYM EPTEBC==EPT+504 ;DOUBLE WORD EBOX COUNT WHEN UPT=EPT
|
||||||
|
DEFSYM EPTMBC==EPT+506 ;DOUBLE WORD MBOX COUNT WHEN UPT=EPT
|
||||||
|
DEFSYM TIMLOC=EPT+514 ;INTERRUPT INSTRUCTION FOR INTERVAL TIMER
|
||||||
|
|
||||||
|
DEFSYM EPTTR1=EPT+421 ;EXEC MODE ARITH OVFL TRAP
|
||||||
|
DEFSYM EPTTR2=EPT+422 ;EXEC MODE PDL OV TRAP
|
||||||
|
DEFSYM EPTTR3=EPT+423 ;EXEC MODE TRAP 3 (1 PROCEED)
|
||||||
|
|
||||||
|
;UPT LOCATIONS - IN NON-TIME SHARING AND AT CLOCK LEVEL IN ITS UPT=EPT
|
||||||
|
|
||||||
|
;424 MUUO STORED HERE
|
||||||
|
;425 MUUO PC STORED HERE
|
||||||
|
;426 MUUO DATAI PAG, HERE
|
||||||
|
;430 MUUO NEW PC KERNEL NO TRAP
|
||||||
|
;431 . . K T
|
||||||
|
;432 . . S N T
|
||||||
|
;433 . . S T
|
||||||
|
;434 . . C N T
|
||||||
|
;435 . . C T
|
||||||
|
;436 . . P N T
|
||||||
|
;437 . . P T
|
||||||
|
;500 PAGE FAIL WORD STORED HERE IN DEC PAGING MODE
|
||||||
|
;501 PAGE FAIL PC STORED HERE IN DEC PAGING MODE
|
||||||
|
;502 PAGE FAIL NEW PC FROM HERE IN DEC PAGING MODE
|
||||||
|
;504-5 EBOX COUNT
|
||||||
|
;506-7 MBOX COUNT
|
||||||
|
|
||||||
|
DEFSYM EPTPFW=EPT+500 ;PAGE FAIL WORD STORED HERE IN ITS PAGING MODE
|
||||||
|
DEFSYM PFOPC=EPT+501 ;PAGE FAIL OLD PC STORED HERE IN ITS PAGING MODE
|
||||||
|
DEFSYM PFNPC=EPT+502 ;PAGE FAIL NEW PC OBTAINED FROM HERE IN ITS PAGING MODE
|
||||||
|
|
||||||
|
;LOW CORE
|
||||||
|
;0-200 DF10S CHANNEL PROGRAMS, INTERRUPT LOCATIONS FOR IMP INTERFACE
|
||||||
|
;400-500 DTE20 COMMUNICATION AREA (COMMUNICATE WITH KLDCP AND IOELEV)
|
||||||
|
;500-1000 DL10 COMMUNICATION AREA AND BUFFERS (COMMUNICATE WITH IOELEV)
|
||||||
|
|
||||||
|
DEFSYM QICWA=32 ;ITS DISK ICWA
|
||||||
|
DEFSYM QIOWD=160 ;ITS DISK IOWD AREA
|
||||||
|
DEFSYM RCIOWD=162 ;.. FOR READ COMPARE
|
||||||
|
|
||||||
|
DEFSYM MICWA=30 ;ITS TAPE ICWA
|
||||||
|
DEFSYM MIOWD=170 ;ITS TAPE IOWD AREA
|
||||||
|
|
||||||
|
;LUUO IN EXEC MODE LOCATIONS 40,41
|
||||||
|
|
||||||
|
DEFSYM SLVICW=60 ;SALVAGER ICWA
|
||||||
|
DEFSYM SLVIOW=62 ;SALVAGER IOWD AREA
|
||||||
|
|
||||||
|
;EXEC DDT'S DISK ROUTINES USE LOCATIONS 20 AND 21, BUT THEY SAVE AND RESTORE THEM
|
||||||
|
|
||||||
|
DEFSYM IMPILC=70 ;IMPTERFACE INPUT INTERRUPT INSTRUCTION PAIR
|
||||||
|
DEFSYM IMPOLC=72 ;IMPTERFACE OUTPUT INTERRUPT INSTRUCTION PAIR
|
||||||
|
|
||||||
|
;DTE20 STUFF AS DEFINED BY KLDCP, ETC.
|
||||||
|
;THE DOCUMENTATION CLAIMS THIS STUFF IS IN THE EPT, BUT ACTUALLY
|
||||||
|
;IT'S IN FIXED LOCATIONS IN LOW CORE.
|
||||||
|
|
||||||
|
DEFSYM EPTDIA=440 ;DIAGNOSTIC (SALV) START ADDRESS
|
||||||
|
DEFSYM EPTDDT=441 ;DDT START ADDRESS
|
||||||
|
DEFSYM EPTSTL=442 ;LOADER (DSKDMP) START ADDRESS
|
||||||
|
DEFSYM EPTITS=443 ;MONITOR (ITS) START ADDRESS
|
||||||
|
|
||||||
|
DEFSYM DTEFLG=444 ;DTE20 OPERATION COMPLETE FLAG (SET BY 11, CLEARED BY 10)
|
||||||
|
DEFSYM DTECLK=445 ;DTE20 CLOCK INTERRUPT FLAG (SET BY 11, CLEARED BY 10)
|
||||||
|
;DEFSYM DTECI=446 ;DTE20 CLOCK INTERRUPT INSTRUCTION (USED BY 10 SOFTWARE)
|
||||||
|
DEFSYM DTET11=447 ;DTE20 10->11 ARGUMENT (SET BY 10) (NOT USED?)
|
||||||
|
DEFSYM DTEF11=450 ;DTE20 11->10 ARGUMENT (SET BY 11)
|
||||||
|
DEFSYM DTECMD=451 ;DTE20 10->11 COMMAND WORD (SET BY 10)
|
||||||
|
DEFSYM DTESEQ=452 ;DTE20 OPERATION SEQUENCE NUMBER (AOS BY 10)
|
||||||
|
DEFSYM DTEOPR=453 ;DTE20 OPERATION IN PROGRESS FLAG (SET/CLEARED BY 10)
|
||||||
|
DEFSYM DTECHR=454 ;DTE20 LAST TYPED CHARACTER (SET BY 11, CLEARED BY 10)
|
||||||
|
DEFSYM DTEMTO=455 ;DTE20 MONITOR-MODE TYPEOUT DONE FLAG (SET BY 11, CLEARED BY 10)
|
||||||
|
DEFSYM DTEMTI=456 ;DTE20 MONITOR-MODE TYPEIN DONE FLAG (SET BY 11, CLEARED BY 10)
|
||||||
|
DEFSYM DTESWR=457 ;DTE20 SIMULATED SWITCH REGISTER (SET BY 11 ON START)
|
||||||
|
|
||||||
|
DEFSYM DTE==200 ;DTE20 #0 DEVICE CODE
|
||||||
|
DEFSYM %DBL11==20000 ;CONO BIT TO "DOORBELL" 11
|
||||||
|
DEFSYM %DBL10==1000 ;CONI BIT FOR DOORBEL FROM 11. CONO BIT TO CLEAR.
|
||||||
|
;1.1-1.3 DTE20 PIA
|
||||||
|
|
||||||
|
;WORDS STORED IN DTECMD
|
||||||
|
|
||||||
|
DEFSYM %DTTTI==2400 ;BUFFERED INPUT. CHAR RETURNED IN DTEF11 AFTER LINE TYPED.
|
||||||
|
;NUMBER 0-377 IS CHAR TO BE TYPED OUT (FLUSHES INPUT. BUFFER NOT PRINTED UNTIL LF/^G/^@)
|
||||||
|
DEFSYM %DTTTO==2000 ;THIS + CHAR ALSO = TTY OUTPUT
|
||||||
|
DEFSYM %DTTYI==3400 ;"DDT" INPUT, CHAR RETURNED IN DTEF11, ZERO IF NO CHAR TYPED
|
||||||
|
DEFSYM %DTTYO==4000 ;THIS + CHAR = ITS (MONITOR) TTY OUTPUT.
|
||||||
|
;WHEN TYPEOUT DONE, INTERRUPT WITH DTEMTO SET.
|
||||||
|
;TYPEIN CAUSES INTERRUPT WITH DTEMTI SET, CHAR IN DTEF11.
|
||||||
|
DEFSYM %DTMMN==4400 ;MONITOR MODE ON (DEFAULT WHEN START)
|
||||||
|
DEFSYM %DTMMF==5000 ;MONITOR MODE OFF (TYPEIN OF A ^X DOES THIS ALSO)
|
||||||
|
DEFSYM %DTMMS==5400 ;RETURN MONITOR MODE STATE IN DTEF11
|
||||||
|
;DEFSYM %DTNRM==3000 ;NORMAL PRINT MODE
|
||||||
|
;DEFSYM %DTFRC==3001 ;FORCED PRINT MODE
|
||||||
|
DEFSYM %DTCLN==1001 ;CLOCK ON (60 CYCLE SIMULATED CLOCK)
|
||||||
|
DEFSYM %DTCLF==1000 ;CLOCK OFF
|
||||||
|
;DEFSYM %DTCLW==1002 ;"CLOCK WAIT" DTET11 HAS COUNT (? WHAT THE HECK IS THIS?)
|
||||||
|
;DEFSYM %DTCLR==1003 ;RETURN "CLOCK COUNT" IN DTEF11 (? WHAT THE HECK IS THIS?)
|
||||||
|
DEFSYM %DTHLT==400 ;HALT
|
||||||
|
;DEFSYM %DTFTL==401 ;DIAG FATAL ERROR (ACTUALLY JUST TURNS OFF CLOCK)
|
||||||
|
;DEFSYM %DTERR==402 ;DIAG ERROR HALT (ACTUALLY JUST TURNS OFF CLOCK)
|
||||||
|
;DEFSYM %DTEPG==403 ;END OF DIAGNOSTIC PROGRAM
|
||||||
|
;DEFSYM %DTEOP==404 ;END OF DIAGNOSTIC PASS
|
||||||
|
;DEFSYM %DTCLK==405 ;GET "CLOCK DEFAULT WORD"
|
||||||
|
;DEFSYM %DTFSL==406 ;DIAMON FILE SELECT (NAME.EXT MUST HAVE BEEN %DTTTO'ED)
|
||||||
|
;DEFSYM %DTFRD==407 ;DIAMON FILE READ (5 CHARS OR -1 (EOF) RETURNED IN DTEF11)
|
||||||
|
;DEFSYM %DTCMD==410 ;KLDCP COMMAND EXECUTED FROM OUTPUT BUFFER (%DTTTO IT)
|
||||||
|
;DEFSYM %DTRSW==1400 ;RETURN SIMULATED SWITCHES IN DTEF11. 10 SHOULD THEN STORE IN DTESWR
|
||||||
|
|
||||||
|
|
||||||
|
IFN $$TEMP,EXPUNG DEFSYM
|
||||||
278
src/system/evsyms.21
Executable file
278
src/system/evsyms.21
Executable file
@@ -0,0 +1,278 @@
|
|||||||
|
;This purports to be a table of all ITS symbols
|
||||||
|
;referenced by user programs, not counting sys$j in DDT.
|
||||||
|
;to sort in TECO, do J6FXA 12U0 <:S0; -DK> CS;$:LL :FWLFWLL J<50L .-Z; 12I 13I 10I> JGA
|
||||||
|
;The "5" is chosen to count these 4 comment lines, and the blank line.
|
||||||
|
;Commented-out symbols are those for obsolete devices, used from PEEK/FIDO but not essential.
|
||||||
|
|
||||||
|
%QAACC ;used by PEEK
|
||||||
|
%QACTH ;used by PEEK
|
||||||
|
%QADEL ;used by PEEK
|
||||||
|
%QAEFR ;used by PEEK
|
||||||
|
%QAEFW ;used by PEEK
|
||||||
|
%QAFUL ;used by PEEK
|
||||||
|
%QAPAR ;used by PEEK
|
||||||
|
%QAWOV ;used by PEEK
|
||||||
|
%QMMDR ;used by PEEK
|
||||||
|
%QMMDW ;used by PEEK
|
||||||
|
%QMTTR ;used by PEEK
|
||||||
|
%QMTTW ;used by PEEK
|
||||||
|
%QMUDR ;used by PEEK
|
||||||
|
%QMUDW ;used by PEEK
|
||||||
|
AC0S ;used by PEEK
|
||||||
|
APRC ;used by PEEK
|
||||||
|
AUSOPG ;used by PEEK
|
||||||
|
BADBTS ;used by DDT
|
||||||
|
CALSXB ;used by PEEK
|
||||||
|
CLSTB ;used by PEEK
|
||||||
|
CUSER ;used by PEEK
|
||||||
|
DCHSTB ;used by FIDO (.EVAL and core mapping)
|
||||||
|
DCHSTB ;used by PEEK
|
||||||
|
DEDTIM ;used by PFTHMG DRAGON
|
||||||
|
DEVTAB ;used by PEEK
|
||||||
|
;DG2 ;used by PEEK
|
||||||
|
DIRCHN ;used by PEEK
|
||||||
|
;DISUSR ;used by FIDO (.EVAL and core mapping)
|
||||||
|
;DISUSR ;used by PEEK
|
||||||
|
DMNBC ;used by PFTHMG DRAGON
|
||||||
|
DMNBD ;used by NAMDRG
|
||||||
|
DMNBD ;used by PFTHMG DRAGON
|
||||||
|
DMNBEL ;used by NAMDRG
|
||||||
|
DMNBEL ;used by PFTHMG DRAGON
|
||||||
|
DMNBF ;used by NAMDRG
|
||||||
|
DMNBF ;used by PFTHMG DRAGON
|
||||||
|
DMNBFE ;used by PFTHMG DRAGON
|
||||||
|
DMNSZ ;used by NAMDRG
|
||||||
|
DPKBAS ;used by LOCK
|
||||||
|
;DRTM ;used by PEEK
|
||||||
|
EDEVS ;used by PEEK
|
||||||
|
;EUPOS ;used by PEEK
|
||||||
|
FLSINS ;used by PEEK
|
||||||
|
HUSRAD ;used by PEEK
|
||||||
|
IDF1 ;used by PEEK
|
||||||
|
IDF2 ;used by PEEK
|
||||||
|
IDLRCE ;used by PEEK
|
||||||
|
IFPIR ;used by PEEK
|
||||||
|
IMPBPQ ;used by PEEK
|
||||||
|
IMPSTL ;used by PEEK
|
||||||
|
IMPUP ;used by FIDO (.EVAL and core mapping)
|
||||||
|
IMPUP ;used by PEEK
|
||||||
|
IMPUP ;used by TELNET (and by other network programs I think - MRC)
|
||||||
|
IMPUS ;used by COMSAT (.EVAL)
|
||||||
|
IMPUS ;used by DDT
|
||||||
|
IMPUS ;used by NAMDRG
|
||||||
|
IMPUS ;used by NAME
|
||||||
|
IMPUS ;used by QMAIL (.EVAL)
|
||||||
|
IMSOC1 ;used by PEEK
|
||||||
|
IMSOC2 ;used by PEEK
|
||||||
|
IMSOC3 ;used by PEEK
|
||||||
|
IMSOC4 ;used by PEEK
|
||||||
|
IMSOC4 ;used by NAME and NAMDRG
|
||||||
|
IMSOC5 ;used by PEEK
|
||||||
|
IMSOC6 ;used by PEEK
|
||||||
|
IMSOC7 ;used by PEEK
|
||||||
|
IMSOC8 ;used by PEEK
|
||||||
|
IOCHNM ;used by FIDO (.EVAL and core mapping)
|
||||||
|
IOCHNM ;used by PEEK
|
||||||
|
IOCHNM ;used by NAME and NAMDRG
|
||||||
|
IOCHST ;used by FIDO (.EVAL and core mapping)
|
||||||
|
IOCHST ;used by PEEK
|
||||||
|
IOTLSR ;used by PEEK
|
||||||
|
IOTTB ;used by PEEK
|
||||||
|
JBDEV ;used by PEEK
|
||||||
|
JNAME ;used by FIDO (.EVAL and core mapping)
|
||||||
|
JNAME ;used by NAMDRG
|
||||||
|
JNAME ;used by NAME
|
||||||
|
JNAME ;used by PEEK
|
||||||
|
JNAME ;used by PFTHMG DRAGON
|
||||||
|
JTMU ;used by PEEK
|
||||||
|
LIOBLK ;used by PFTHMG DRAGON
|
||||||
|
LOSRCE ;used by PEEK
|
||||||
|
LOUTIM ;used by PEEK
|
||||||
|
LPTUSR ;used by FIDO (.EVAL and core mapping)
|
||||||
|
LPTUSR ;used by PEEK
|
||||||
|
LSCALL ;used by PEEK
|
||||||
|
LUBLK ;used by COMSAT
|
||||||
|
LUBLK ;used by FIDO (.EVAL)
|
||||||
|
LUBLK ;used by NAMDRG
|
||||||
|
LUBLK ;used by NAME
|
||||||
|
LUBLK ;used by PEEK
|
||||||
|
LUBLK ;used by PFTHMG DRAGON
|
||||||
|
LUBLK ;used by CLU
|
||||||
|
LUIOP ;used by PEEK
|
||||||
|
MAXJ ;used by COMSAT
|
||||||
|
MEMBLT ;used by PEEK
|
||||||
|
MEMFR ;used by PEEK
|
||||||
|
MEMPNT ;used by PEEK
|
||||||
|
MMMPG ;used by PEEK
|
||||||
|
MMPNP ;used by PEEK
|
||||||
|
MMSWP ;used by PEEK
|
||||||
|
;MPXBUF ;used by PEEK
|
||||||
|
MSKST ;used by PEEK
|
||||||
|
MSKST2 ;used by PEEK
|
||||||
|
MTUSR ;used by PEEK
|
||||||
|
MUR ;used by PEEK
|
||||||
|
MURUSR ;used by PEEK
|
||||||
|
N11TYS ;used by FIDO (.EVAL)
|
||||||
|
N11TYS ;used by NAMDRG
|
||||||
|
N11TYS ;used by NAME
|
||||||
|
NCBCOM ;used by PEEK
|
||||||
|
NCT ;used by FIDO (.EVAL)
|
||||||
|
NCT ;used by LOCK
|
||||||
|
NCT ;used by NAMDRG
|
||||||
|
NCT ;used by NAME
|
||||||
|
NCT ;used by PEEK
|
||||||
|
NDPTYS ;used by LOCK
|
||||||
|
NETDBO ;used by NAME and NAMDRG
|
||||||
|
NETDUI ;used by NAME and NAMDRG
|
||||||
|
NETP ;used by COMSAT (.EVAL)
|
||||||
|
NETP ;used by QMAIL (.EVAL)
|
||||||
|
NF11TY ;used by FIDO (.EVAL)
|
||||||
|
NF11TY ;used by NAMDRG
|
||||||
|
NF11TY ;used by NAME
|
||||||
|
NFDPTY ;used by LOCK
|
||||||
|
NFSTTY ;used by NAMDRG
|
||||||
|
NFSTTY ;used by NAME
|
||||||
|
NFSTTY ;used by PEEK
|
||||||
|
NIOCHN ;used by NAME and NAMDRG
|
||||||
|
NMPGS ;used by PEEK
|
||||||
|
NNTYS ;used by LOCK
|
||||||
|
NPGSWO ;used by PEEK
|
||||||
|
NQCHN ;used by PEEK
|
||||||
|
NQMFWR ;used by COMSAT (.EVAL and core mapping)
|
||||||
|
NQS ;used by PEEK
|
||||||
|
NSTTYS ;used by NAMDRG
|
||||||
|
NSTTYS ;used by NAME
|
||||||
|
NSTTYS ;used by PEEK
|
||||||
|
NSWPGS ;used by PEEK
|
||||||
|
NULTIM ;used by PEEK
|
||||||
|
NUNITS ;used by PEEK
|
||||||
|
NUTIC ;used by PEEK
|
||||||
|
NUTOC ;used by PEEK
|
||||||
|
;NVDUSR ;used by PEEK
|
||||||
|
NXGPFW ;used by XGPSPL
|
||||||
|
OIPBIT ;used by DDT
|
||||||
|
OPRSXB ;used by PEEK
|
||||||
|
PARERR ;used by PEEK
|
||||||
|
;PDPUSR ;used by FIDO (.EVAL and core mapping)
|
||||||
|
;PDPUSR ;used by PEEK
|
||||||
|
PICLR ;used by PEEK
|
||||||
|
PIRQC ;used by PEEK
|
||||||
|
PLTUSR ;used by PEEK
|
||||||
|
PRVUSR ;used by PEEK
|
||||||
|
PSWOUS ;used by PEEK
|
||||||
|
PTPUSR ;used by PEEK
|
||||||
|
PTRUSR ;used by PEEK
|
||||||
|
QFBLNO ;used by PEEK
|
||||||
|
QIRRCV ;used by PEEK
|
||||||
|
QSCRW ;used by PEEK
|
||||||
|
QSMDN ;used by PEEK
|
||||||
|
QSMPRP ;used by PEEK
|
||||||
|
QSNLCN ;used by PEEK
|
||||||
|
QSNUD ;used by PEEK
|
||||||
|
QSRAC ;used by PEEK
|
||||||
|
QUDFPR ;used by PEEK
|
||||||
|
QUDPR ;used by PEEK
|
||||||
|
QUSR ;used by PEEK
|
||||||
|
RNABLU ;used by PEEK
|
||||||
|
RPCL ;used by PEEK
|
||||||
|
SCHHB ;used by PEEK
|
||||||
|
SCLNET ;used by LOCK
|
||||||
|
SHUTDN ;used by NAMDRG
|
||||||
|
SHUTDN ;used by NAME
|
||||||
|
SILNG ;used by PEEK
|
||||||
|
SLOADU ;used by DDT
|
||||||
|
SLOADU ;used by PEEK
|
||||||
|
SOLNG ;used by PEEK
|
||||||
|
SSCHDB ;used by PEEK
|
||||||
|
STYSTS ;used by NAMDRG
|
||||||
|
STYSTS ;used by NAME
|
||||||
|
STYSTS ;used by PEEK
|
||||||
|
SUEXIT ;used by PEEK
|
||||||
|
SUPCOR ;used by LOCK
|
||||||
|
SUPPRO ;used by COMSAT
|
||||||
|
SUPPRO ;used by FIDO (.EVAL and core mapping)
|
||||||
|
SUPPRO ;used by NAMDRG
|
||||||
|
SUPPRO ;used by NAME
|
||||||
|
SUPPRO ;used by PEEK
|
||||||
|
SUPPRO ;used by PFTHMG DRAGON
|
||||||
|
SUUOH ;used by PEEK
|
||||||
|
SV40 ;used by PEEK
|
||||||
|
SWPOPR ;used by PEEK
|
||||||
|
SWRCE ;used by PEEK
|
||||||
|
SYSUSB ;used by DDT
|
||||||
|
SYSUSE ;used by DDT
|
||||||
|
SYSYMB ;used by DDT
|
||||||
|
SYSYME ;used by DDT
|
||||||
|
;TABUSR ;used by PEEK
|
||||||
|
TCTYP ;used by FIDO (.EVAL and core mapping)
|
||||||
|
TIME ;used by NAMDRG
|
||||||
|
TIME ;used by NAME
|
||||||
|
TIME ;used by PEEK
|
||||||
|
TIME ;used by PFTHMG DRAGON
|
||||||
|
TRNLS1 ;used by PEEK
|
||||||
|
TRNLST ;used by PEEK
|
||||||
|
TRUMM ;used by PEEK
|
||||||
|
TRUNTM ;used by PEEK
|
||||||
|
TRUNTM ;used by PFTHMG DRAGON
|
||||||
|
TSIPRQ ;used by PFTHMG DRAGON
|
||||||
|
TSYSM ;used by PEEK
|
||||||
|
TT11P ;used by NAMDRG
|
||||||
|
TT11P ;used by NAME
|
||||||
|
TTITM ;used by NAMDRG
|
||||||
|
TTITM ;used by NAME
|
||||||
|
TTYCHN ;used by LOCK
|
||||||
|
TTYSTS ;used by FIDO (.EVAL and core mapping)
|
||||||
|
TTYSTS ;used by NAMDRG
|
||||||
|
TTYSTS ;used by NAME
|
||||||
|
TTYTBL ;used by FIDO (.EVAL and core mapping)
|
||||||
|
TTYTBL ;used by NAMDRG
|
||||||
|
TTYTBL ;used by NAME
|
||||||
|
TTYTBL ;used by PEEK
|
||||||
|
TTYTYP ;used by FIDO (.EVAL and core mapping)
|
||||||
|
TTYTYP ;used by LOCK
|
||||||
|
TTYTYP ;used by NAMDRG
|
||||||
|
TTYTYP ;used by NAME
|
||||||
|
;UDIR ;used by PEEK
|
||||||
|
;UDIRO ;used by PEEK
|
||||||
|
;UGOAL ;used by PEEK
|
||||||
|
;ULCTM ;used by PEEK
|
||||||
|
UMASTER ;used by FIDO (.EVAL and core mapping)
|
||||||
|
UMASTER ;used by PEEK
|
||||||
|
UMNTR ;used by PEEK
|
||||||
|
UNAME ;used by COMSAT
|
||||||
|
UNAME ;used by FIDO (.EVAL and core mapping)
|
||||||
|
UNAME ;used by NAMDRG
|
||||||
|
UNAME ;used by NAME
|
||||||
|
UNAME ;used by PEEK
|
||||||
|
UNAME ;used by PFTHMG DRAGON
|
||||||
|
UPC ;used by PEEK
|
||||||
|
UPGCP ;used by PEEK
|
||||||
|
UPGSEC ;used by PEEK
|
||||||
|
UREALT ;used by PEEK
|
||||||
|
USRSTG ;used by COMSAT
|
||||||
|
USIPRQ ;used by PEEK
|
||||||
|
USIPRQ ;used by PFTHMG DRAGON
|
||||||
|
USIPRQ ;used by CLU
|
||||||
|
USRHI ;used by COMSAT
|
||||||
|
USRHI ;used by FIDO (.EVAL and core mapping)
|
||||||
|
USRHI ;used by PEEK
|
||||||
|
USRHI ;used by PFTHMG DRAGON
|
||||||
|
USRRCE ;used by PEEK
|
||||||
|
USTP ;used by PEEK
|
||||||
|
USWPRI ;used by PEEK
|
||||||
|
USWSCD ;used by PEEK
|
||||||
|
USWST ;used by PEEK
|
||||||
|
USYSN1 ;used by PEEK
|
||||||
|
USYSNM ;used by PEEK
|
||||||
|
;UTASS ;used by PEEK
|
||||||
|
;UTBFS ;used by PEEK
|
||||||
|
UTMPTR ;used by NAMDRG
|
||||||
|
UTMPTR ;used by NAME
|
||||||
|
UTMPTR ;used by PEEK
|
||||||
|
UTRNTM ;used by PEEK
|
||||||
|
UTRNTM ;used by PFTHMG DRAGON
|
||||||
|
;UTTNO ;used by PEEK
|
||||||
|
;UTUSR ;used by PEEK
|
||||||
|
UUAC ;used by PEEK
|
||||||
|
XJNAME ;used by COMSAT
|
||||||
|
XUNAME ;used by COMSAT
|
||||||
216
src/system/fsdefs.43
Executable file
216
src/system/fsdefs.43
Executable file
@@ -0,0 +1,216 @@
|
|||||||
|
.AUXIL
|
||||||
|
|
||||||
|
IFNDEF DEFSYM,[ ;ALLOW USER TO USE SYMBOLS IN OTHER WAYS IF HE WISHES.
|
||||||
|
;BUT NORMALLY, DEFSYM FOO==BAR DOES FOO==BAR WITH ERROR CHECK.
|
||||||
|
DEFINE DEFSYM X/
|
||||||
|
IRPS Z,,[X]
|
||||||
|
IFNDEF Z,X
|
||||||
|
.ELSE [
|
||||||
|
$$TEM1==Z
|
||||||
|
X
|
||||||
|
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
|
||||||
|
]
|
||||||
|
.ISTOP
|
||||||
|
TERMIN TERMIN
|
||||||
|
|
||||||
|
IFLE .MLLIT,.ERR .MLLIT MUST BE 1; SETTING IT TO 1.
|
||||||
|
.MLLIT==1
|
||||||
|
$$TEMP==1
|
||||||
|
]
|
||||||
|
.ELSE $$TEMP==0
|
||||||
|
|
||||||
|
;FILE SYSTEM PARAMETERS - APPLIES TO ALL ITS MACHINES
|
||||||
|
|
||||||
|
;9/5/79 - tut format changed!
|
||||||
|
;8/19/90 - DM "funny" bit flushed
|
||||||
|
|
||||||
|
;MFD INFO
|
||||||
|
|
||||||
|
IFDEF NBLKS,[ ;MFDBLK KNOWN ONLY IF .INSRT APPROPRIATE PHYSICAL PARAMS FILE
|
||||||
|
DEFSYM MFDBLK==NBLKS/2-1 ;LOC ON DISK
|
||||||
|
DEFSYM MFDCYL==MFDBLK/NBLKSC
|
||||||
|
DEFSYM MFDSRF==<MFDBLK-MFDCYL*NBLKSC>*SECBLK/NSECS
|
||||||
|
DEFSYM MFDSEC==<MFDBLK-MFDCYL*NBLKSC>*SECBLK-MFDSRF*NSECS
|
||||||
|
]
|
||||||
|
;RANDOM INFO IN MFD
|
||||||
|
DEFSYM MDNUM==0 ;ASCENDING DIR NUM
|
||||||
|
DEFSYM MDNAMP==1 ;PNTR TO ORG OF USER NAME BLOCK AREA
|
||||||
|
DEFSYM MDYEAR==2 ;CURRENT YEAR
|
||||||
|
DEFSYM MPDOFF==3 ;DE-CORIOLIS CLOCK OFFSET
|
||||||
|
DEFSYM MPDWDK==4 ;PREFERRED WRITING DISK (PHYSICAL DRIVE #)
|
||||||
|
DEFSYM MDCHK==5 ;THIS WORD MUST BE M.F.D. (FOR CHECKING)
|
||||||
|
DEFSYM MDNUDS==6 ;NUMBER USER DIRECTORIES (FOR CHECKING ONLY)
|
||||||
|
DEFSYM LMIBLK==7 ;TOTAL STG USED BY HACKS LIKE THIS
|
||||||
|
;USER NAME BLKS FROM C(MDNAMP) TO END
|
||||||
|
DEFSYM LMNBLK==2 ;# WDS/BLK
|
||||||
|
DEFSYM MNUNAM==0 ;6BIT USER NAME
|
||||||
|
;SECOND WORD OF A USER-NAME BLOCK IS ZERO.
|
||||||
|
;DECUUO CONTAINS A KLUDGE WHICH DEPENDS ON THIS,
|
||||||
|
;PLEASE NOTIFY BUG-DECUUO BEFORE CHANGING IT.
|
||||||
|
|
||||||
|
;TUT INFO
|
||||||
|
|
||||||
|
IFDEF NBLKS,[
|
||||||
|
DEFSYM TUTBLK==MFDBLK-NTUTBL ;LOC ON DISK
|
||||||
|
DEFSYM TUTCYL==TUTBLK/NBLKSC
|
||||||
|
DEFSYM TUTSRF==<TUTBLK-TUTCYL*NBLKSC>*SECBLK/NSECS
|
||||||
|
DEFSYM TUTSEC==<TUTBLK-TUTCYL*NBLKSC>*SECBLK-TUTSRF*NSECS
|
||||||
|
]
|
||||||
|
DEFSYM TUTBYT==3 ;SIZE OF BYTES (USED TO BE 4)
|
||||||
|
DEFSYM TUTBP==<440000+TUTBYT_6>,,
|
||||||
|
DEFSYM TUTEPW==36./TUTBYT ;NUMBER OF ENTRIES PER WORD
|
||||||
|
DEFSYM TUTMAX==1_TUTBYT
|
||||||
|
DEFSYM TUTLK==TUTMAX-1 ;HIGHEST CODE MEANS LOCKED OUT
|
||||||
|
DEFSYM TUTMNY==TUTLK-1 ;TUT MANY OR MORE REFS
|
||||||
|
|
||||||
|
;RANDOM INFO IN TUT (AT THE FRONT)
|
||||||
|
DEFSYM QPKNUM==0 ;PACK #
|
||||||
|
DEFSYM QPAKID==1 ;PACK ID
|
||||||
|
DEFSYM QTUTP==2 ;FREE SPACE POINTER TO TRACK AREA. ADVANCE BY CYLINDERS
|
||||||
|
DEFSYM QSWAPA==3 ;SWAPPING AREA. FIRST TRACK OF NON-SWAPPING AREA
|
||||||
|
;NEW FILES WILL NOT BE WRITTEN LOWER THAN THIS.
|
||||||
|
DEFSYM QFRSTB==4 ;FIRST BLOCK TUT'ED
|
||||||
|
DEFSYM QLASTB==5 ;LAST BLOCK TUT'ED
|
||||||
|
DEFSYM QTRSRV==6 ;-1 IF ONLY ALLOCATED DIRS CAN HAVE FILES ON THIS PACK
|
||||||
|
;IF NOT 0 AND NOT -1, SIXBIT NAME OF "SECONDARY" PACK
|
||||||
|
;STG FOR RANDOM INFO ^
|
||||||
|
DEFSYM LTIBLK==20 ;BYTES MAPPING THE DISK START HERE
|
||||||
|
|
||||||
|
;UFD INFO
|
||||||
|
;IF A IS RELATIVE LOCATION OF MFD ENTRY, USER DIR IS LOCATED IN
|
||||||
|
;TRACK NUMBERED <A-2000+2*MDNUDS>/2 (SEE QFL2)
|
||||||
|
|
||||||
|
DEFSYM UFDBYT==6 ;SIZE OF BYTES (Do not change!)
|
||||||
|
DEFSYM UFDBPW==36./UFDBYT ;NUMBER OF BYTES PER WORD
|
||||||
|
|
||||||
|
;RANDOM INFO IN UFD
|
||||||
|
DEFSYM UDESCP==0 ;FS PNTR TO DESC AREA
|
||||||
|
DEFSYM UDNAMP==1 ;PNTR TO ORG OF NAME AREA
|
||||||
|
DEFSYM UDNAME==2 ;USER NAME (FOR CHECKING)
|
||||||
|
DEFSYM UDBLKS==3 ;LEFT HALF HAS AMOUNT OF SPACE ALLOCATED (NOT USED
|
||||||
|
; CURRENTLY BY SYSTEM), RIGHT HALF HAS NUMBER OF BLOCKS USED.
|
||||||
|
DEFSYM UDALLO==4 ;IF NONZERO, LEFT HALF HAS DISK NUMBER, RIGHT
|
||||||
|
; HALF HAS AMOUNT OF SPACE ALLOCATED
|
||||||
|
DEFSYM UDDESC==11. ;FIRST LOC AVAIL FOR DESC
|
||||||
|
|
||||||
|
; 8/19/90 Due to the larger size of RP07s it was necessary to officially
|
||||||
|
; flush the DM "funny" bit. This change only changes the comments in this
|
||||||
|
; file, but any program that interprets UFD descriptors needs to be fixed
|
||||||
|
; to not mask that bit out (as most of them currently do). Fortunately all
|
||||||
|
; the known ITS filesystems have zeros in all their "funny" bits, so the
|
||||||
|
; change is upward compatible.
|
||||||
|
|
||||||
|
; UFD descriptor format described:
|
||||||
|
;
|
||||||
|
; Each 6-bit byte is taken in turn and used to compute a sequence of block
|
||||||
|
; numbers. If N is the current descriptor byte, and B is the current block
|
||||||
|
; number (initially undefined), then N is interpreted as follows:
|
||||||
|
;
|
||||||
|
; 0 Marks the end of the file description.
|
||||||
|
;
|
||||||
|
; 1 to UDTKMX (1 to 14) "Take" N blocks.
|
||||||
|
; Blocks B through B + N - 1 are the next N blocks of the file.
|
||||||
|
; Set B := B + N .
|
||||||
|
;
|
||||||
|
; UDTKMX+1 to UDWPH-1 (15 to 36) "Skip" B - UDTKMX blocks.
|
||||||
|
; Set N := N + B - UDTKMX .
|
||||||
|
; (ITS has been broken for years such that it never uses this
|
||||||
|
; UFD descriptor code!)
|
||||||
|
;
|
||||||
|
; UDWPH (37) Write Place Holder
|
||||||
|
; A noop. Used to reserve space in directories for files that are
|
||||||
|
; being written. Just skip over it and read the next byte.
|
||||||
|
;
|
||||||
|
; 40 - 77 Load address and take 1.
|
||||||
|
; Read the next NXLBYT descriptor bytes (NXLBYT=2), N2 and N3.
|
||||||
|
; Set B := LSH(AND(N, 37), 12.) + LSH(N2, 6) + N3 .
|
||||||
|
; Block B is the next block in the file.
|
||||||
|
; Set B := B + 1 .
|
||||||
|
;
|
||||||
|
; A zero length file is described as two bytes: UDWPH then 0. UDWPH does
|
||||||
|
; not otherwise normally appear in UFD descriptions for closed files.
|
||||||
|
; Note that a legal description must use codes 40 - 77 before it can use
|
||||||
|
; any code other than UDWPH.
|
||||||
|
|
||||||
|
; Links are described as a sequence of SIXBIT characters terminated with a
|
||||||
|
; 0 byte. The directory, first and second name are stored in order.
|
||||||
|
; The first two components are terminated with a ";" if they are less than
|
||||||
|
; 6 characters long. ";" (73), ":" (72) and " " (0) are quoted by
|
||||||
|
; preceding them with a ":". Some examples:
|
||||||
|
;
|
||||||
|
; Link target names: Bytes stored in directory:
|
||||||
|
;
|
||||||
|
; 123456 123456 123456 "123456123456123456 "
|
||||||
|
; ALAN FOO BAR "ALAN;FOO;BAR "
|
||||||
|
; .MAIL. NAMES > ".MAIL.NAMES;> "
|
||||||
|
; .MAIL. LISTS MSGS ".MAIL.: LISTS: : MSGS "
|
||||||
|
; MOON LUNAR :EJ "MOON;LUNAR;::EJ "
|
||||||
|
;
|
||||||
|
; There are a lot of illegal or wasteful possibilities for link descriptors
|
||||||
|
; ("A;B ", "A;B;C;D ", ":A;:B;:C ", etc.), which is suprising since
|
||||||
|
; somebody was clearly trying to compress them into as few bytes as
|
||||||
|
; possible.
|
||||||
|
|
||||||
|
; Here is the pre 8/19/90 comment describing UFD descriptors:
|
||||||
|
;
|
||||||
|
; ;UFD DESCRIPTORS
|
||||||
|
; ;0 => FREE 1-UDTKMX => TAKE NEXT N
|
||||||
|
; ;UDTKMX+1 THRU UDWPH-1 => SKIP N-UDTKMX AND TAKE ONE
|
||||||
|
; ;UDWPH => WRITE-PLACE-HOLDER
|
||||||
|
; ;40 BIT SET => LOAD ADDRESS. LOWER 5 BITS PLUS NEXT NXLBYT (2)
|
||||||
|
; ; CHARS (17 BITS IN ALL)
|
||||||
|
; ;40 BIT & 20 BIT => "FUNNY" BLOCK IF DMDSK. WHAT IS THIS, ANYWAY?
|
||||||
|
; ;END BY 0
|
||||||
|
;
|
||||||
|
; ;IF LINK DESCR
|
||||||
|
; ;6 CHAR OR UNTIL ; = SYS NAME. MUST HAVE NO CHAR = 0 IN THIS OR
|
||||||
|
; ; NEXT 2 NAMES
|
||||||
|
; ;NEXT CHAR QUOTED BY : (FOR NAMES WITH : OR ;)
|
||||||
|
; ;NEXT CHAR N1
|
||||||
|
; ;NEXT CHAR N2
|
||||||
|
; ;END BY 0
|
||||||
|
|
||||||
|
DEFSYM UDTKMX==12. ;HIGHEST "TAKE N" CODE
|
||||||
|
DEFSYM UDWPH==31. ;PLACE HOLDER ON WRITE (OR NULL FILE)
|
||||||
|
DEFSYM UDSKMX==UDWPH-UDTKMX-1 ;# BLOCKS THAT CAN BE SKIPPED
|
||||||
|
DEFSYM NXLBYT==2 ;# ADDITIONAL BYTES FOR LOAD ADDR
|
||||||
|
;IN SYSTEM THIS IS DEFINED AT FRONT OF FILE
|
||||||
|
|
||||||
|
;NAME AREA DATA
|
||||||
|
|
||||||
|
DEFSYM LUNBLK==5 ;WDS/NAME BLK
|
||||||
|
DEFSYM UNFN1==0 ;FIRST FN
|
||||||
|
DEFSYM UNFN2==1 ;SECOND FN
|
||||||
|
DEFSYM UNRNDM==2 ;ALL KINDS OF RANDOM INFO
|
||||||
|
DEFSYM UNDSCP==1500,, ;PNTR TO DESC
|
||||||
|
DEFSYM UNPKN==150500,, ;PACK #
|
||||||
|
DEFSYM UNLINK==1 ;LINK BIT
|
||||||
|
DEFSYM UNLNKB==220100,,
|
||||||
|
DEFSYM UNREAP==2 ;IF 1, DONT REAP FILE
|
||||||
|
DEFSYM UNWRIT==4 ;OPEN FOR WRITING
|
||||||
|
DEFSYM UNMARK==10 ;GC MARK BIT
|
||||||
|
DEFSYM UNCDEL==20 ;DEL WHEN CLOSED
|
||||||
|
DEFSYM DELBTS==20 ;DELETED -- IGNORE
|
||||||
|
DEFSYM UNIGFL==24 ;BITS TO IGNORE FILE
|
||||||
|
DEFSYM UNWRDC==301200,, ;WORD COUNT OF LAST BLOCK MOD 2000
|
||||||
|
DEFSYM UNDUMP==400000 ;HAS BEEN DUMPED
|
||||||
|
DEFSYM UNDATE==3 ;DATE ETC.
|
||||||
|
DEFSYM UNTIM==2200,, ;COMPACTED TIME OF CREATION
|
||||||
|
DEFSYM UNYMD==222000,, ;Y,M,D OF CREATION
|
||||||
|
DEFSYM UNMON==270400,, ;MONTH
|
||||||
|
DEFSYM UNDAY==220500,, ;DAY
|
||||||
|
DEFSYM UNYRB==330700,, ;YEAR
|
||||||
|
DEFSYM UNREF==4 ;REFERENCE DATE SAME AS LEFT HALF OF UNDATE
|
||||||
|
DEFSYM UNREFD==222000,, ;REFERENCE DATE BYTE POINTER
|
||||||
|
DEFSYM UNAUTH==111100,, ;MFD INDEX OF AUTHOR, ALL 1=> NO DIRECTORY
|
||||||
|
DEFSYM UNBYTE==001100,, ;FILE BYTE SIZE AND LENGTH INFO.
|
||||||
|
;LET S=BITS PER BYTE, C=COUNT OF UNUSED BYTES IN LAST WD
|
||||||
|
;400+100xS+C S=1 TO 3 C=0 TO 35.
|
||||||
|
;200+20xS+C S=4 TO 7 C=0 TO 8
|
||||||
|
;44+4xS+C S=8 TO 18. C=0 TO 3
|
||||||
|
;44-S S=19. TO 36. C=0
|
||||||
|
;NOTE THAT OLD FILES HAVE UNBYTE=0 => S=36.
|
||||||
|
|
||||||
|
IF1 IFDEF NUDSL, IFG NUDSL*LMNBLK+LMIBLK-2000,.ERR MFD LOSES
|
||||||
|
|
||||||
|
IFN $$TEMP,EXPUNG DEFSYM
|
||||||
931
src/system/imp.365
Executable file
931
src/system/imp.365
Executable file
@@ -0,0 +1,931 @@
|
|||||||
|
;;; -*- Mode:MIDAS -*-
|
||||||
|
|
||||||
|
IMPVRS==.IFNM2 ; Version of IMP code
|
||||||
|
|
||||||
|
IFN NCPP,.FATAL IMP Code doesn't support NCP any more!
|
||||||
|
IFE KSIMP,.FATAL Wrong IMP driver file included!
|
||||||
|
|
||||||
|
OVHMTR IMP ;Charge all this stuff to the IMP
|
||||||
|
|
||||||
|
$INSRT LHDH
|
||||||
|
|
||||||
|
; IMP 1822 PROTOCOL INFORMATION (EXTENDED-LEADER VERSION)
|
||||||
|
|
||||||
|
; The IMP leader is 96 bits long, usually organized as 3 words of 32 bits.
|
||||||
|
; For further details, these documents are available from the Network
|
||||||
|
; Information Center:
|
||||||
|
; IMP-HOST protocol: BBN Report No. 1822
|
||||||
|
; NCP protocol: NIC 8246, Host-to-Host Protocol for the ARPANET
|
||||||
|
; IP, TCP: Internet Protocol Transition Workbook, and
|
||||||
|
; Internet Protocol Implementor's Guide
|
||||||
|
;
|
||||||
|
; Here is the leader format used by the IMP code. This format uses
|
||||||
|
; no IMP padding, assumes IP only, and expects all IMP<->HOST data
|
||||||
|
; transfers in 32-bit mode.
|
||||||
|
;
|
||||||
|
; Previous versions of this code which supported NCP used a much more
|
||||||
|
; complicated leader formatting scheme based on 36 bit transfers and
|
||||||
|
; IMP padding. That scheme is dead, see SYSTEM;IMPOLD WTHNCP for details.
|
||||||
|
;
|
||||||
|
; All data from the IMP interface ends up in the -10 as left-justified
|
||||||
|
; 32-bit words. Objects of less than 32 bits length, such as IP octets,
|
||||||
|
; are stored in PDP10 ILDB byte order.
|
||||||
|
;
|
||||||
|
;------------------------------------------------------------------------
|
||||||
|
;1: 4.9-4.6 not used (0)
|
||||||
|
; 4.5-4.2 all 1's for new format, else old msg type (4=old nop)
|
||||||
|
; 4.1-3.3 network number (0)
|
||||||
|
; 3.2-2.8 not used (0)
|
||||||
|
; 2.7 trace (ignored)
|
||||||
|
; 2.6-2.4 leader flags (2.6 is to be ignored, 2.5-2.4 are not used!)
|
||||||
|
; 2.3-1.5 message type
|
||||||
|
;
|
||||||
|
;2: 4.9-4.2 Handling type (7 for big buffers, 4 for small buffers,
|
||||||
|
; 0 for the control link)
|
||||||
|
; 4.1-3.3 Host number on IMP
|
||||||
|
; 3.2-1.5 IMP number
|
||||||
|
;
|
||||||
|
;3: 4.9-4.2 Link Number (High 8 bits of Message ID)
|
||||||
|
; 4.1-3.7 Low 4 bits of Message ID (0)
|
||||||
|
; 3.6-3.3 Sub-type
|
||||||
|
; 3.2-1.5 Message length
|
||||||
|
;------------------------------------------------------------------------
|
||||||
|
;4: 4.9-1.5 First word of IP datagram
|
||||||
|
; ....
|
||||||
|
;------------------------------------------------------------------------
|
||||||
|
;
|
||||||
|
;In message types 2 and 6, the going-down status 16-bit word is
|
||||||
|
;in word 3 bits 4.9-3.3.
|
||||||
|
|
||||||
|
;3.6-3.3 of word 3 are the padding count for type 4 (nop) from host.
|
||||||
|
;This is currently 0 (none). Padding is only put on type-0 messages.
|
||||||
|
|
||||||
|
IMPLDS==3 ;IMP local leader size
|
||||||
|
|
||||||
|
;Byte pointers to fields of input leader
|
||||||
|
IMOTBP: 340400,,IMPILB+0 ;Message format type
|
||||||
|
IMTBP: 041000,,IMPILB+0 ;Message type field
|
||||||
|
IMSABP: 043000,,IMPILB+1 ;Source address field (host+IMP)
|
||||||
|
IMSHBP: 241000,,IMPILB+1 ;Source host field
|
||||||
|
IMSIBP: 042000,,IMPILB+1 ;Source IMP field
|
||||||
|
IMLNBP: 341000,,IMPILB+2 ;Link number field
|
||||||
|
IMSTBP: 240400,,IMPILB+2 ;Subtype field
|
||||||
|
IMMLBP: 042000,,IMPILB+2 ;Message length field
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SUBTTL ARPANET VARIABLES AND TABLES
|
||||||
|
|
||||||
|
EBLK
|
||||||
|
|
||||||
|
%IMXLN==:<<8159.-96.>+31.>/32. ; Max # of 32-bit words in IMP regular msg,
|
||||||
|
; exclusive of leader and leader padding. = 252.
|
||||||
|
|
||||||
|
%IMMTU==:251.*4 ; Used by IP/TCP. Driver currently rounds to PDP10 words,
|
||||||
|
; forcing this to be 1004 instead of 1007.
|
||||||
|
|
||||||
|
; ACTIVE HOST TABLE. Entries herein are allocated as needed, using garbage
|
||||||
|
; collection. Most "host number" fields are really indices into this table.
|
||||||
|
;
|
||||||
|
LIMPHT==<XBL+10.> ; TCP conns plus a few extra
|
||||||
|
|
||||||
|
IMPHTF: -1 ;Host table free list, threaded through IMPHTB, end with -1
|
||||||
|
|
||||||
|
IMPHTS: ;Start of table area
|
||||||
|
IMPHTN: BLOCK LIMPHT ; Host number. 1.1-1.8 HOST, 2.1-3.7 IMP
|
||||||
|
IMPHTB: BLOCK LIMPHT ;Bits:
|
||||||
|
;4.9 UNUSED
|
||||||
|
;4.8 GC MARK BIT
|
||||||
|
;4.7-4.3 UNUSED
|
||||||
|
;4.2-4.1 STATUS OF HOST 0 DOWN, 1 RST SENT, 2 UP
|
||||||
|
;3.9-3.1 UNUSED
|
||||||
|
.SEE IMPHDS ;RH Last message from IMP about "host dead status"
|
||||||
|
IMPHTC: BLOCK LIMPHT ; # active messages outstanding for host (8 max)
|
||||||
|
IMPHTT: BLOCK LIMPHT ; Time of last RFNM received
|
||||||
|
IMPHTE==.-1 ;Last location in table
|
||||||
|
|
||||||
|
;Status variables
|
||||||
|
;
|
||||||
|
IMPUP: -1 ;0 => IMP up ;-1 => down ;-2 => coming up, PI still off
|
||||||
|
;1 => down for good, until next time IMP ready line changes
|
||||||
|
IMPTCU: 0 ;0 IMP up/down status not changing
|
||||||
|
;>0 Trying to reinitialize, SYSJOB hasn't done so yet
|
||||||
|
;-1 Has been reinitialized, haven't exchanged NOPs yet
|
||||||
|
IMPUCT: 0 ;IMP coming up timeout, if 4 NOPs don't go through promptly.
|
||||||
|
IMPDWN: BLOCK 3 ;Last message from IMP that it is going down
|
||||||
|
;WD0: "Reason" claimed by IMP (see ch 3 of BBN report 1822)
|
||||||
|
;WD1: Time when expected down
|
||||||
|
;WD2: Time when expected up (SYS time=1/30 sec since up)
|
||||||
|
|
||||||
|
IMERCN: -1 ;CONI into here when net goes down
|
||||||
|
|
||||||
|
BBLK
|
||||||
|
|
||||||
|
EBLK
|
||||||
|
|
||||||
|
;Input side variables
|
||||||
|
;
|
||||||
|
IMPILB: BLOCK IMPLDS ;Input leader buffer
|
||||||
|
IMPCSH: -1 ;Current source host (IMPHTB index). -1 when idle.
|
||||||
|
IMPCLN: 0 ;Current link number
|
||||||
|
IMIFLS: 0 ;Flushing output at interrupt handler
|
||||||
|
IMPIEC: 0 ;Count of input errors while down.
|
||||||
|
IMPIBC: 0 ;Count of words available in DMA input buffer
|
||||||
|
IMPIBP: 0 ;Pointer into DMA input buffer
|
||||||
|
|
||||||
|
;Output side variables
|
||||||
|
;
|
||||||
|
;Output leader buffer
|
||||||
|
IMOLDR: <17_10.>,,0 ;Regular new-format message
|
||||||
|
IMOLAD: 0 ;Filled in with destination IMP address
|
||||||
|
<233_10.>,,0 ;IP link field
|
||||||
|
|
||||||
|
IMNOPC: 0 ;< 0 => Send NOPs
|
||||||
|
IMPOAC: -1 ;>= 0 => Output active, don't restart
|
||||||
|
IMPBZY: 0 ;-1 == Waiting for output interrupt
|
||||||
|
IMPODP: 0 ;Pointer to IP datagram being output at PI level
|
||||||
|
IMPOS: 0 ;Output state
|
||||||
|
%ISODL==:0 ; Not expecting output done (i.e. between messages)
|
||||||
|
%ISONP==:1 ; Sending NOP
|
||||||
|
%ISOID==:2 ; Sending IP Datagram
|
||||||
|
|
||||||
|
;Meters
|
||||||
|
|
||||||
|
;IP meters
|
||||||
|
IMNIPI: 0 ; # of IP datagrams input (rcvd)
|
||||||
|
IMNIPF: 0 ; # of IP datagrams flushed (input threw away)
|
||||||
|
IMNIPO: 0 ; # of IP datagrams output (sent)
|
||||||
|
IMNIPR: 0 ; # of IP RFNMs received
|
||||||
|
IMNIP7: 0 ; # of IP Type 7 (Dest Host Dead) messages received
|
||||||
|
IMNIP8: 0 ; # of IP Type 8 (Error) msgs rcvd
|
||||||
|
IMNIP9: 0 ; # of IP Type 9 (Incomplete Transmission) msgs rcvd
|
||||||
|
IMNWIG: 0 ; # words ignored by "Ignore" state (%ISIGN)
|
||||||
|
IMNWIF: 0 ; # words flushed by IMPRM5
|
||||||
|
|
||||||
|
;IMP meters
|
||||||
|
IMNSRF: 0 ;Number of spurious RFNMs on non-IP links
|
||||||
|
IMNBLK: 0 ;Number of times blockage avoided (output held up by ITS)
|
||||||
|
|
||||||
|
IMPMSR: BLOCK 20;Count of IMP messages rcvd
|
||||||
|
IMPM1S: BLOCK 4 ; # Type 1 (Error in Leader) subtype msgs
|
||||||
|
IMPM9S: BLOCK 2 ; # Type 9 (Incomplete Transmission) subtype msgs
|
||||||
|
IMPMSS: BLOCK 1 ;Count of IMP msg sent (we only send regular msgs)
|
||||||
|
IMCT1: 0 ;# Unvectored interrupts
|
||||||
|
IMCT2: 0 ;# Valid input interrupts
|
||||||
|
IMCT3: 0 ;# Valid output interrupts
|
||||||
|
BBLK
|
||||||
|
|
||||||
|
SUBTTL ARPANET MAIN-PROGRAM LEVEL
|
||||||
|
;IMPIBF, IMPOBF defined as low-memory buffer page in ITS
|
||||||
|
IF2,IFN IMPIBF&777,.FATAL IMPIBF not on DEC page boundary
|
||||||
|
|
||||||
|
;(Re)Start IMP. Called from SYSJOB to start IMP, or on error or
|
||||||
|
; user requested cycle through LOCK
|
||||||
|
;
|
||||||
|
IMPINI: SETOM IMPUP ;Not up yet,
|
||||||
|
SETOM IMPTCU ; but thinking about it.
|
||||||
|
MOVEI A,IMPIBF_-9. ;DEC page # of IMP buffer page
|
||||||
|
TRO A,%UQ16B\%UQVAL ;Valid mapping, 16 bit device
|
||||||
|
IOWRI A,UBAPAG+IUIMPG_1 ;Set up 1 DEC page of UBA mapping. Note that
|
||||||
|
; the second half of IUIMPG isn't mapped at all
|
||||||
|
CONO PI,NETOFF ;Freeze things while IMP bashing occurs
|
||||||
|
MOVEI A,%LHRST
|
||||||
|
IOWRI A,%LHOCS ;Reset output side
|
||||||
|
IOWRI A,%LHICS ;Reset Input side
|
||||||
|
|
||||||
|
;IMP now shut down. Reset variables
|
||||||
|
SKIPE A,IMPODP ;Have an output datagram ?
|
||||||
|
PUSHJ P,IPIODN ;Yep, release it.
|
||||||
|
SETZM IMPODP ;No output datagram
|
||||||
|
SETZM IMPOS ;Output idle
|
||||||
|
SETOM IMPOAC ;Output interrupt level inactive
|
||||||
|
SETZM IMPBZY ;No pending output interrupt
|
||||||
|
|
||||||
|
SETZM IMPIBC ;No input available
|
||||||
|
SETZM IMPIEC ;No input errors yet
|
||||||
|
SETZM IMIFLS ;Not flushing input at interrupt level
|
||||||
|
SETOM IMPCSH ;No current host table index
|
||||||
|
SETOM IMPDWN+1 ;Time for IMP to go down, not known
|
||||||
|
CONO PI,NETON ;Allow interrupts again
|
||||||
|
|
||||||
|
;Wait one sec for IMP to notice rdy line drop
|
||||||
|
MOVE T,TIME
|
||||||
|
ADDI T,30.
|
||||||
|
CAMLE T,TIME
|
||||||
|
PUSHJ P,UFLS
|
||||||
|
|
||||||
|
MOVNI A,30. ;Allow 15 seconds to come up
|
||||||
|
MOVEM A,IMPUCT
|
||||||
|
MOVE T,TIME ;Note when we last started IMP
|
||||||
|
MOVEM T,LNETIM
|
||||||
|
PUSHJ P,IMPHRS ;Set host ready
|
||||||
|
PUSHJ P,IMPIST ;Start input
|
||||||
|
|
||||||
|
MOVE T,TIME
|
||||||
|
ADDI T,15. ;Wait 1/2 sec before we try to output
|
||||||
|
CAMLE T,TIME
|
||||||
|
PUSHJ P,UFLS
|
||||||
|
MOVNI A,4
|
||||||
|
MOVEM A,IMNOPC ;Send 4 NOPs to start
|
||||||
|
;Falls through to start output
|
||||||
|
|
||||||
|
;Start IMP output
|
||||||
|
;
|
||||||
|
IMPOST:
|
||||||
|
IMPIOS: CONO PI,PIOFF ;Freeze.
|
||||||
|
AOSE IMPOAC ;Do nothing if output already active.
|
||||||
|
JRST PIONJ
|
||||||
|
SETOM IMPBZY ;Note we want an IMP interrupt
|
||||||
|
CONO PI,NETRQ ;Force nonvectored IMP interrupt
|
||||||
|
JRST PIONJ
|
||||||
|
|
||||||
|
;Check if IMP ready line is set
|
||||||
|
; Called from SYSJOB.
|
||||||
|
; Return +1 if IMP not ready, +2 if so
|
||||||
|
;
|
||||||
|
IMPCKR: IORDI A,%LHICS ;Get input CSR
|
||||||
|
TRNN A,%LHINR ;Skip if IMP not ready
|
||||||
|
AOS (P) ;Return +2 if ready
|
||||||
|
POPJ P, ;That's all
|
||||||
|
|
||||||
|
;Set HOST READY. From SYS job only, please, loops waiting.
|
||||||
|
;
|
||||||
|
IMPHRS: IORDI T,%LHICS
|
||||||
|
TRNN T,%LHRDY ;Can we mung?
|
||||||
|
BUG
|
||||||
|
IORI T,%LHHRC\%LHSE ;Turn on HR. SE prevents dropping messages
|
||||||
|
IOWRI T,%LHICS
|
||||||
|
MOVEI A,777777 ;I don't know why this takes so long.
|
||||||
|
IMPHR1: IORDI T,%LHICS ;Get the bits back
|
||||||
|
TRNE T,%LHHR ;LHDH thinks host ready is ready
|
||||||
|
RET ;HR line set
|
||||||
|
SOJG A,IMPHR1 ;Timed out yet?
|
||||||
|
BUG CHECK,[IMP: Timed out setting Host Ready]
|
||||||
|
RET
|
||||||
|
|
||||||
|
SUBTTL HOST-TABLE MANAGEMENT
|
||||||
|
|
||||||
|
;IMPHTI - Initialize host table
|
||||||
|
; Performed whenever IMP announces that it has been reset
|
||||||
|
;
|
||||||
|
IMPHTI: SETOM IMPHTF ;Force GC of IMPHTB on first reference
|
||||||
|
SETZM IMPHTS ;Clear table of old information
|
||||||
|
MOVE A,[IMPHTS,,IMPHTS+1]
|
||||||
|
BLT A,IMPHTE
|
||||||
|
POPJ P,
|
||||||
|
|
||||||
|
; FNDHST - Look up host-table index for a given IMP host address.
|
||||||
|
; Call with NETOFF or NETCHN PI in progress.
|
||||||
|
; T/ IMP host address (maybe someday other nets?)
|
||||||
|
; Returns .+1 if failed (no room in table)
|
||||||
|
; Returns .+2
|
||||||
|
; H/ host-table index
|
||||||
|
; Smashes W.
|
||||||
|
|
||||||
|
FNDHST: MOVEI H,LIMPHT-1 ;Search for an entry for this host
|
||||||
|
CAME T,IMPHTN(H)
|
||||||
|
SOJGE H,.-1
|
||||||
|
JUMPGE H,POPJ1 ;Found
|
||||||
|
SKIPGE H,IMPHTF ;Not found, cons one off free list
|
||||||
|
JRST FNDHS1 ;Oops, must garbage collect
|
||||||
|
MOVE W,IMPHTB(H)
|
||||||
|
CAIGE H,LIMPHT ;Make sure H is valid idx
|
||||||
|
CAIL W,LIMPHT ;ditto W
|
||||||
|
BUG HALT,[NET: FNDHST idx clobbered!!!]
|
||||||
|
MOVEM W,IMPHTF
|
||||||
|
MOVEM T,IMPHTN(H)
|
||||||
|
SETZM IMPHTB(H) ;Nothing is known about this host
|
||||||
|
SETZM IMPHTC(H) ;Assume no RFNMs outstanding
|
||||||
|
SETZM IMPHTT(H) ;Clear out time of last RFNM.
|
||||||
|
JRST POPJ1
|
||||||
|
|
||||||
|
; Host-Table full, attempt to GC it and flush unused entries, by
|
||||||
|
; scanning all possible pointers into table.
|
||||||
|
; IMP pointers are IMPCSH and IMPHTC(H)
|
||||||
|
; TCP pointers are XBNADR(I)
|
||||||
|
|
||||||
|
; GC mark phase - mark entries in use
|
||||||
|
FNDHS1: PUSH P,I
|
||||||
|
MOVSI W,200000 ;Mark bit
|
||||||
|
MOVEI H,LIMPHT-1 ;Clear all mark bits
|
||||||
|
ANDCAM W,IMPHTB(H)
|
||||||
|
SOJGE H,.-1
|
||||||
|
SKIPL H,IMPCSH ;Mark from IMPCSH
|
||||||
|
IORM W,IMPHTB(H)
|
||||||
|
IFN TCPP,[
|
||||||
|
MOVEI I,XBL-1
|
||||||
|
SKIPL H,XBNADR(I) ; See if TCP conn has a net addr specified
|
||||||
|
IORM W,IMPHTB(H) ; Yes, set the mark bit.
|
||||||
|
SOJGE I,.-2
|
||||||
|
] ;IFN TCPP
|
||||||
|
|
||||||
|
; GC sweep phase - free all unmarked entries
|
||||||
|
SETO I, ;Free pointer
|
||||||
|
MOVEI H,LIMPHT-1
|
||||||
|
MOVSI W,601000 ;Protect if RFNM-WAIT, RST-WAIT, or marked
|
||||||
|
FNDHS4:
|
||||||
|
SKIPG IMPHTC(H) ;Also protect if any outstanding RFNMs
|
||||||
|
TDNE W,IMPHTB(H)
|
||||||
|
SOJGE H,FNDHS4
|
||||||
|
JUMPL H,FNDHS5
|
||||||
|
SETZM IMPHTN(H) ;Don't belong to any host
|
||||||
|
MOVEM I,IMPHTB(H) ;Cons onto free list
|
||||||
|
MOVE I,H
|
||||||
|
SOJGE H,FNDHS4
|
||||||
|
FNDHS5: MOVEM I,IMPHTF ;Free list
|
||||||
|
POP P,I
|
||||||
|
SKIPGE IMPHTF
|
||||||
|
POPJ P, ;GC-overflow
|
||||||
|
JRST FNDHST ;Try again, should win
|
||||||
|
|
||||||
|
;See if IMP code is willing to handle a particular datagram right now.
|
||||||
|
; A/ IP DGM pointer
|
||||||
|
; C/ Immediate destination address
|
||||||
|
; Returns +1, can't send right now, +2, OK to send
|
||||||
|
;
|
||||||
|
IMPCTS: MOVE T,C ;Set up for FNDHST
|
||||||
|
AND T,[<377_16.>+377] ;Mask out all but host and IMP field
|
||||||
|
CALL FNDHST ;Get host index in H
|
||||||
|
POPJ P, ;No host entry, don't send
|
||||||
|
JSP T,IMPBLI ;See if OK to send
|
||||||
|
POPJ P, ;IMP wants to block, no send
|
||||||
|
JRST POPJ1 ;Skip return if OK to send.
|
||||||
|
|
||||||
|
|
||||||
|
;;; IMP Blockage avoidance
|
||||||
|
; The current IMP software will not accept more than 8 active
|
||||||
|
; messages to a single host; attempting to send a 9th message will block
|
||||||
|
; ALL output to the interface, until the first message has been ack'd
|
||||||
|
; by means of one of the following message types:
|
||||||
|
; Type 5, RFNM - Message delivered OK
|
||||||
|
; Type 7, Host dead - transmit failed ("permanent")
|
||||||
|
; Type 8, Error in data - interface spazzed
|
||||||
|
; Type 9, Incomplete Transmission - temporary failure
|
||||||
|
; If for some reason the first message simply becomes lost, the IMP timeout
|
||||||
|
; (and blockage) can last for up to 30-45 seconds.
|
||||||
|
; More details in BBN Report 1822.
|
||||||
|
; ITS attempts to fix this by keeping a count of active un-ACKed
|
||||||
|
; messages for each host it is communicating with. A timeout is also
|
||||||
|
; associated with each host; if output to a given host is blocked by ITS
|
||||||
|
; because there are 8 active messages, trying to send a 9th message
|
||||||
|
; will check the last-RFNM-received time and if this was more than
|
||||||
|
; 30 or so seconds then the IMP is probably not giving us what it should
|
||||||
|
; and we should reset things for that host.
|
||||||
|
|
||||||
|
%IMPMA==:8. ; # of maximum active IMP messages allowed
|
||||||
|
|
||||||
|
; IMPBLI, IMPBLD - routines to hack active-message counts, called via JSP T,
|
||||||
|
; IMPBLD decrements count.
|
||||||
|
; IMPBLI increments count and skips if successful (else failed,
|
||||||
|
; and must NOT output another message to this host!)
|
||||||
|
; Also clobbers Q.
|
||||||
|
;
|
||||||
|
IMPBLI: AOS Q,IMPHTC(H)
|
||||||
|
CAIGE Q,%IMPMA ;Trying to send max or more messages?
|
||||||
|
JRST 1(T) ;No, can return safely.
|
||||||
|
CAIG Q,%IMPMA ;Is this the maximum # allowed?
|
||||||
|
JRST [ MOVE Q,TIME ;Yes, set up blockage timeout
|
||||||
|
ADDI Q,60.*30. ; for one minute.
|
||||||
|
MOVEM Q,IMPHTT(H)
|
||||||
|
JRST 1(T)] ;And allow this one to be sent
|
||||||
|
|
||||||
|
; Trying to send too many messages, block it (check for timeout though)
|
||||||
|
SOS IMPHTC(H) ;Restore original count
|
||||||
|
AOS IMNBLK ;Increment # of times softwarily blocked.
|
||||||
|
MOVE Q,IMPHTT(H)
|
||||||
|
CAML Q,TIME ;See if timeout still in the future
|
||||||
|
JRST (T) ;Yes, just take failure-return to block.
|
||||||
|
BUG INFO,[IMP: RFNM-wait timeout! Hst=],OCT,IMPHTN(H)
|
||||||
|
SETZM IMPHTC(H) ;This may be dangerous... oh well.
|
||||||
|
SETZM IMPHTT(H)
|
||||||
|
JRST (T) ;Block one last time, next try will win.
|
||||||
|
|
||||||
|
;Decrement block count on receipt of any kind of ACK
|
||||||
|
;
|
||||||
|
IMPBLD: SOSL Q,IMPHTC(H)
|
||||||
|
JRST IMPBL2
|
||||||
|
BUG INFO,[IMP: negative RFNM-wait cnt, Hst=],OCT,IMPHTN(H)
|
||||||
|
SETZB Q,IMPHTC(H)
|
||||||
|
IMPBL2: CAIL Q,%IMPMA-1 ;If we were blocking on this host,
|
||||||
|
PUSHJ P,IMPIOS ;Ensure IMP output started up so blocked stuff
|
||||||
|
JRST (T) ; gets sent promptly.
|
||||||
|
|
||||||
|
|
||||||
|
SUBTTL ARPANET INPUT INTERRUPT LEVEL
|
||||||
|
|
||||||
|
;First level interrupt handling for input side. Here from UBA vector hardware.
|
||||||
|
|
||||||
|
IFN NETCHN-UTCCHN,.ERR NETCHN assumed == UTCCHN at IMPIBK
|
||||||
|
|
||||||
|
EBLK
|
||||||
|
IMPIBK: 0
|
||||||
|
BBLK
|
||||||
|
JSR UTCSAV ;Save AC's, get a stack
|
||||||
|
AOS IMCT2 ;Count input interrupts
|
||||||
|
IORDI TT,%LHICS ;Get CS register
|
||||||
|
TRNE TT,%LHERR\%LHNXM
|
||||||
|
JRST IMPRST ;Try resetting the IMP
|
||||||
|
TRNE TT,%LHMRE ;Ready line flapped
|
||||||
|
JRST IMPIER ;Go directly to error routine
|
||||||
|
TRNN TT,%LHRDY ;Device ready for new operation?
|
||||||
|
JRST IMPRST ;Try resetting.
|
||||||
|
TRNN TT,%LHEOM ;Saw EOM from IMP?
|
||||||
|
JRST IMPIB1 ;No, word count ran out before message
|
||||||
|
SKIPGE IMIFLS ;Flushing output?
|
||||||
|
JRST [ SETZM IMIFLS ;Not any more!
|
||||||
|
JRST IMPIRT ] ;But flush last piece by queueing new request
|
||||||
|
IORDI A,%LHIWC ;End of message. Get remaining UB word count
|
||||||
|
SKIPE A ;This would be a surprise, really
|
||||||
|
TDO A,[-1,,600000] ;36bit number of UBA words remaining in bfr
|
||||||
|
IDIVI A,2 ;Number of PDP10 words (cleverly rounded)
|
||||||
|
ADDI A,IMPBFS ;Number of PDP10 words of message
|
||||||
|
MOVEM A,IMPIBC ;Set current count of available data words
|
||||||
|
MOVEI A,IMPIBF
|
||||||
|
MOVEM A,IMPIBP ;Set pointer to available data words
|
||||||
|
JRST IMPLDD ;Go process input message
|
||||||
|
|
||||||
|
;Here when finished processing current message.
|
||||||
|
IMPIRT: SETOM IMPCSH ;Note no current host
|
||||||
|
PUSHJ P,IMPIST ;Restart input listener
|
||||||
|
JRST IMPEX
|
||||||
|
|
||||||
|
;Message didn't fit in input buffer. Shouldn't ever get here, but
|
||||||
|
;might if messages concatenated due to ready line randomness
|
||||||
|
;
|
||||||
|
IMPIB1: BUG INFO,[IMP: Huge message]
|
||||||
|
SETOM IMIFLS ;Say we are flushing output
|
||||||
|
JRST IMPIRT ;And go queue up another read
|
||||||
|
|
||||||
|
;Here if error during IMP message transfer
|
||||||
|
; Currently the only error handled is the IMP going non-ready
|
||||||
|
|
||||||
|
IMPIER: SKIPE IMPUP ;Is the IMP supposed to be up?
|
||||||
|
JRST IMPIE1 ;No, handle errors differently
|
||||||
|
BUG INFO,[IMP: Input Ready Error]
|
||||||
|
JRST IMPRST ;Ready line flapped while up, cycle interface
|
||||||
|
|
||||||
|
IMPIE1: AOS T,IMPIEC
|
||||||
|
CAIG T,10. ;Huge number of errors while down?
|
||||||
|
JRST IMPIRT ;No, just ignore this input and start another
|
||||||
|
SETZM IMPIEC ;Reset
|
||||||
|
BUG INFO,[IMP: Excessive input errors while down]
|
||||||
|
JRST IMPRST ;Cycle the interface
|
||||||
|
|
||||||
|
IMPRST: IORDI T,%LHICS ;Record IMP status for sysjob
|
||||||
|
HRLZM T,IMERCN
|
||||||
|
IORDI T,%LHOCS
|
||||||
|
HRRM T,IMERCN
|
||||||
|
MOVEI A,%LHRST ;Avoid randomness by resetting HW now.
|
||||||
|
IOWRI A,%LHOCS ;Reset output side
|
||||||
|
IOWRI A,%LHICS ;Reset Input side
|
||||||
|
SETOM IMPUP ;IMP is down
|
||||||
|
MOVEI T,1
|
||||||
|
MOVEM T,IMPTCU ;But trying to come up (sysjob poked)
|
||||||
|
MOVSI J,SCLNET ;Ask SYSJOB to cycle the IMP
|
||||||
|
IORM J,SUPCOR
|
||||||
|
JRST IMPEX
|
||||||
|
|
||||||
|
SUBTTL IMP leader dispatch handling
|
||||||
|
|
||||||
|
IMPLDD: SKIPG B,IMPIBC ;Get count of available data
|
||||||
|
POPJ P, ;None, nothing to do.
|
||||||
|
CAILE B,IMPLDS ;More than a leader worth?
|
||||||
|
MOVEI B,IMPLDS ;Yep, only want leader now
|
||||||
|
MOVS A,IMPIBP ;Copy and reformat leader to IMPILB
|
||||||
|
HRRI A,IMPILB
|
||||||
|
BLTUB A,IMPILB-1(B)
|
||||||
|
ADDM B,IMPIBP ;Increment buffer pointer,
|
||||||
|
MOVN C,B
|
||||||
|
ADDM C,IMPIBC ; and decrement count
|
||||||
|
|
||||||
|
LDB T,IMOTBP ;Examine new-format flag bits of leader
|
||||||
|
CAIL B,IMPLDS ;Large enough to be a valid leader?
|
||||||
|
CAIE T,17 ;Verify that leader is "new" 96-bit fmt.
|
||||||
|
JRST IMPLDE ;Go process error in leader
|
||||||
|
|
||||||
|
LDB T,IMLNBP ;Extract link number (high 8 bits of msg-id)
|
||||||
|
MOVEM T,IMPCLN ;Save link message arrived on
|
||||||
|
LDB T,IMSABP ;Get arpanet address (source host+imp)
|
||||||
|
IFN 0,[
|
||||||
|
LDB T,IMSHBP ;Source host
|
||||||
|
LDB A,IMSIBP ;Source imp
|
||||||
|
DPB A,[112000,,T] ;Form host address
|
||||||
|
];IFN 0
|
||||||
|
PUSHJ P,FNDHST ;H gets host table index
|
||||||
|
JRST IMPLHE ;Host table full
|
||||||
|
MOVEM H,IMPCSH ;Save current host
|
||||||
|
LDB A,IMTBP ;Get message type in A
|
||||||
|
CAIL A,IMTDTS
|
||||||
|
JRST IMPUN ;Unknown type?
|
||||||
|
AOS IMPMSR(A) ;Count IMP msgs rcvd
|
||||||
|
JRST @IMTDT(A) ;Dispatch
|
||||||
|
|
||||||
|
IMTDT: IMPRM ; 0 Regular Message
|
||||||
|
IMPBE1 ; 1 Error in Leader (no msg-id)
|
||||||
|
IMPGD ; 2 IMP Going Down
|
||||||
|
IMPUN ; 3 -
|
||||||
|
IMPIN ; 4 NOP
|
||||||
|
IMPRFN ; 5 RFNM - Ready For Next Message (transmit succeeded)
|
||||||
|
IMPHDS ; 6 Host Dead Status (general info)
|
||||||
|
IMPDHD ; 7 Destination Host Dead (transmit failed)
|
||||||
|
IMPBE8 ; 8 Error in Data (has msg-id)
|
||||||
|
IMPINC ; 9 Incomplete Transmission (transmit failed temporarily)
|
||||||
|
IMPIRS ;10 Interface Reset - IMP dropped its ready line
|
||||||
|
IMTDTS==.-IMTDT
|
||||||
|
|
||||||
|
IMPLHE: BUG INFO,[IMP: Message discarded due to host table full],OCT,IMPILB,OCT,IMPILB+1,OCT,IMPILB+2
|
||||||
|
JRST IMPIRT
|
||||||
|
|
||||||
|
;Here if leader is too short or of wrong format.
|
||||||
|
; B/ Leader length
|
||||||
|
IMPLDE: SKIPE IMPUP ;If IMP is not up, we'll take anything.
|
||||||
|
JRST IMPIRT
|
||||||
|
CAIGE B,IMPLDS ;Announce short leader if so.
|
||||||
|
BUG INFO,[IMP: Short leader, ],DEC,B,[wds. WD1=],OCT,IMPILB,[WD2=],OCT,IMPILB+1
|
||||||
|
LDB A,IMOTBP ;Get message format type
|
||||||
|
CAIN A,4 ;Old-type NOP?
|
||||||
|
JRST IMPIRT ; Just ignore it.
|
||||||
|
IFN 0,[ ;;For the moment this is a problem because the IMP is marked
|
||||||
|
;;up too soon, before all incoming NOPS are received.
|
||||||
|
CAIN A,16 ;Is it 1822L format?
|
||||||
|
BUG INFO,[IMP: 1822L leader],OCT,IMPILB
|
||||||
|
CAIE A,17 ;Is it not the long-leader format?
|
||||||
|
BUG INFO,[IMP: Old-type leader],OCT,IMPILB
|
||||||
|
]
|
||||||
|
JRST IMPIRT ;Ignore rest of message, if any
|
||||||
|
|
||||||
|
;;; IMP->Host Type X (e.g. 3, 11-255) - bad type
|
||||||
|
|
||||||
|
IMPUN: BUG INFO,[IMP: Unknown msg type ],OCT,A,[ leader ],OCT,IMPILB,OCT,IMPILB+1,OCT,IMPILB+2
|
||||||
|
JRST IMPIRT
|
||||||
|
|
||||||
|
;;; IMP->Host Type 1 - Error in leader (msg-id not given)
|
||||||
|
;;; IMP->Host Type 8 - Error in data (msg-id given)
|
||||||
|
|
||||||
|
IMPBE1: LDB T,IMSTBP ;Get subtype (4 bits)
|
||||||
|
ANDI T,3 ;Only 2 bits should be used
|
||||||
|
AOS IMPM1S(T) ;Increment count of Type 1 subtype messages
|
||||||
|
IMPBE8: SKIPN IMPUP ;Ignore error during initial syncronization
|
||||||
|
BUG INFO,[IMP: Type ],DEC,A,[err msg, leader],OCT,IMPILB,OCT,IMPILB+1,OCT,IMPILB+2
|
||||||
|
MOVE B,IMPCLN ;Get link msg came in on
|
||||||
|
CAIN B,233 ;Internet link?
|
||||||
|
AOS IMNIP8 ;Yes, count IP meter
|
||||||
|
CAIN A,8. ;Error identified with a particular message?
|
||||||
|
JSP T,IMPBLD ;Decrement count of active messages
|
||||||
|
JRST IMPIRT
|
||||||
|
|
||||||
|
;;; IMP->Host Type 2 - IMP going down
|
||||||
|
|
||||||
|
IMPGD: LDB B,[420200,,IMPILB+2] ;Reason (see 1822)
|
||||||
|
MOVEM B,IMPDWN
|
||||||
|
LDB B,[360400,,IMPILB+2] ;How soon going down * 5 mins
|
||||||
|
MOVE H,B
|
||||||
|
IMULI B,5*60.*30. ;Ticks in 5 mins
|
||||||
|
ADD B,TIME
|
||||||
|
MOVEM B,IMPDWN+1
|
||||||
|
LDB C,[241200,,IMPILB+2] ;How long to be down * 5 minutes
|
||||||
|
MOVE Q,C
|
||||||
|
IMULI C,5*60.*30. ;Downtime in ticks
|
||||||
|
ADD C,B ;Add to time down
|
||||||
|
MOVEM C,IMPDWN+2 ;Store time when will be up
|
||||||
|
IMULI H,5 ;Minutes
|
||||||
|
IMULI Q,5
|
||||||
|
BUG INFO,[IMP: Going down in ],DEC,H,[mins for ],DEC,Q,[mins, reason],DEC,IMPDWN
|
||||||
|
JRST IMPIRT
|
||||||
|
|
||||||
|
;;; IMP->Host Type 4 - NOP
|
||||||
|
|
||||||
|
IMPIN: JRST IMPIRT ;One more NOP from IMP
|
||||||
|
|
||||||
|
;;; IMP->Host Type 5 - RFNM (Ready For Next Message)
|
||||||
|
|
||||||
|
IMPRFN: JSP T,IMPBLD ;Decrement outstanding message count for host
|
||||||
|
MOVE A,IMPCLN ;Get link #
|
||||||
|
CAIE A,233 ;IP link number?
|
||||||
|
JRST IMRFNX ;No, skip IP code
|
||||||
|
AOS IMNIPR ;Bump count of IP RFNMs received
|
||||||
|
JRST IMPIRT ; and do nothing else about it, ugh.
|
||||||
|
|
||||||
|
IMRFNX: BUG INFO,[IMP: Spurious RFNM from ],OCT,IMPHTN(H),[link],OCT,IMPCLN
|
||||||
|
AOS IMNSRF
|
||||||
|
JRST IMPIRT
|
||||||
|
|
||||||
|
;;; IMP->Host Type 6 - Host Down Status
|
||||||
|
; H/ host index
|
||||||
|
|
||||||
|
IMPHDS: LDB A,[301400,,IMPILB+2];Bits 65-76 of leader, 4.9-3.7 3rd word
|
||||||
|
HRRM A,IMPHTB(H) ;Store, hope user read RFC 611
|
||||||
|
JRST IMPIRT
|
||||||
|
|
||||||
|
;;; IMP->Host Type 7 - Destination Host Dead
|
||||||
|
|
||||||
|
IMPDHD: MOVEI E,%NCDED
|
||||||
|
JRST IMPHNR
|
||||||
|
|
||||||
|
;;; IMP->Host Type 9 - Incomplete Transmission
|
||||||
|
|
||||||
|
IMPINC: LDB T,IMSTBP ;Get subtype field (4 bit reason for failure)
|
||||||
|
AOS IMPM9S(T) ;Bump count of subtypes
|
||||||
|
MOVEI E,%NCINC ;This is an incomplete msg response
|
||||||
|
|
||||||
|
IMPHNR: JSP T,IMPBLD ;Decrement active IMP msg count for this host
|
||||||
|
MOVE A,IMPCLN ;Link for this message?
|
||||||
|
CAIE A,233 ;IP Link?
|
||||||
|
JRST IMPHN1
|
||||||
|
CAIN E,%NCINC ;Yes, count IP meters
|
||||||
|
AOS IMNIP9
|
||||||
|
CAIN E,%NCDED
|
||||||
|
AOS IMNIP7
|
||||||
|
JRST IMPIRT
|
||||||
|
|
||||||
|
IMPHN1: BUG INFO,[IMP: DHD or IT msg rcvd on non-IP link]
|
||||||
|
JRST IMPIRT
|
||||||
|
|
||||||
|
;;; IMP->Host Type 10 - Interface Reset
|
||||||
|
|
||||||
|
IMPIRS: PUSHJ P,IMPHTI ;Initialize host table
|
||||||
|
BUG INFO,[IMP: Interface reset]
|
||||||
|
JRST IMPIRT
|
||||||
|
|
||||||
|
|
||||||
|
;;; IMP->Host Type 0 - Regular Host-Host message
|
||||||
|
; Unless the source host screwed up and sent a dataless message,
|
||||||
|
; there is at least one word waiting to be read in the buffer.
|
||||||
|
;
|
||||||
|
IMPRM: SKIPG A,IMPIBC ;Get available input word count
|
||||||
|
JRST IMPIRT ;None left, just ignore message
|
||||||
|
MOVE B,IMPCLN ;Is link number the magic cookie for IP?
|
||||||
|
CAIE B,233
|
||||||
|
JRST IMPIRT ;No, ignore it
|
||||||
|
|
||||||
|
;IP datagram. Copy into IP buffer and pass it up.
|
||||||
|
;
|
||||||
|
AOS IMNIPI ;Bump count of IP datagrams received
|
||||||
|
PUSHJ P,IPGIPT ;Ask IP for buffer of size (A)
|
||||||
|
JRST [ AOS IMNIPF ;Punted, bump cnt of datagrams lost
|
||||||
|
JRST IMPIRT ] ;Flush this message (err msg already printed)
|
||||||
|
MOVE B,PK.BUF(A) ;Destination
|
||||||
|
HRL B,IMPIBP ;Source
|
||||||
|
MOVE C,IMPIBC ;Input words available
|
||||||
|
ADDI C,-1(B) ;Last destination address
|
||||||
|
BLTUB B,(C) ;Copy and reformat data to IP buffer
|
||||||
|
MOVE B,IMPIBC ;Get word count back to B
|
||||||
|
SETZB C,IMPIBC ;Say zero offset to IP header, and clear count.
|
||||||
|
MOVE J,IMPCSH ;Set idx to host-table entry dgm received from.
|
||||||
|
PUSHJ P,IPRDGM ;Hand off rcvd datagram to IP
|
||||||
|
JRST IMPIRT ;Return from PI level, setting up for next msg
|
||||||
|
|
||||||
|
;Start listening for new input from IMP
|
||||||
|
;
|
||||||
|
IMPIST: HRREI T,-IMPBFS*2
|
||||||
|
IOWRI T,%LHIWC ;Read up to a buffer full of data
|
||||||
|
MOVEI T,<IUIMPG_12.>+<4*<IMPIBF&777>>
|
||||||
|
IOWRI T,%LHICA ;Read data to here
|
||||||
|
MOVEI T,%LHIE\%LHHRC\%LHSE\%LHGO ;Interrupt, store data, go
|
||||||
|
IOWRI T,%LHICS ;Start read
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
SUBTTL ARPANET OUTPUT INTERRUPT LEVEL
|
||||||
|
|
||||||
|
;Here on unvectored interrupt caused by call to IMPIOS
|
||||||
|
|
||||||
|
IMPINT: AOS IMCT1 ;Count unvectored interrupts
|
||||||
|
JRST IMPOBZ ;Go try to start output
|
||||||
|
;Returns directly to interrupt dispatcher
|
||||||
|
|
||||||
|
;First-level interrupt handling, from hardware dispatch.
|
||||||
|
; Crash on severe interface errors
|
||||||
|
; Restart IMP on ready line flappage.
|
||||||
|
; Else, go look for more output to send.
|
||||||
|
|
||||||
|
IFN NETCHN-UTCCHN,.ERR NETCHN assumed == UTCCHN at IMPOBK
|
||||||
|
|
||||||
|
EBLK
|
||||||
|
IMPOBK: 0
|
||||||
|
BBLK
|
||||||
|
JSR UTCSAV ;Save AC's, get a stack
|
||||||
|
AOS IMCT3 ;Count output interrupts
|
||||||
|
IORDI TT,%LHOCS ;Get CS register
|
||||||
|
TRNE TT,%LHERR\%LHNXM ;Interface lost?
|
||||||
|
JRST IMPOEC ;Try cycling
|
||||||
|
TRNE TT,%LHMRE ;Somebody bounce a ready line?
|
||||||
|
JRST IMPOER
|
||||||
|
IMPOBE: TRNN TT,%LHRDY ;Device ready for new operation?
|
||||||
|
JRST IMPOEC ;Try cycling
|
||||||
|
PUSHJ P,IMPOBZ ;No IMP error. Perform planned action.
|
||||||
|
JRST IMPEX ;Dismiss interrupt.
|
||||||
|
|
||||||
|
;Error while outputting datagram. Currently, just means ready line flapped.
|
||||||
|
; If IMP was up, finish up IP output if necessary to free buffer, then
|
||||||
|
; cycle the interface.
|
||||||
|
; If trying to send NOPS to come up, just send a few more to resynch.
|
||||||
|
;
|
||||||
|
IMPOER: SKIPE IMPUP ;IMP up?
|
||||||
|
JRST IMPOE1 ;Not running normally, maybe OK.
|
||||||
|
BUG INFO,[IMP: Output RDY error]
|
||||||
|
IMPOEC: SKIPE A,IMPODP ;Have an output datagram ?
|
||||||
|
PUSHJ P,IPIODN ;Yep, release it.
|
||||||
|
SETZM IMPOS ;Doing nothing useful
|
||||||
|
JRST IMPRST ;Go poke SYSJOB to cycle the IMP
|
||||||
|
|
||||||
|
;Here if interface wasn't fully up.
|
||||||
|
IMPOE1: MOVE T,IMPOS
|
||||||
|
CAIE T,%ISONP ;Were we sending a NOP?
|
||||||
|
BUG CHECK,[IMP: Confusing output error]
|
||||||
|
SOS IMNOPC ;Add another NOP to make up for this one
|
||||||
|
SETZM IMPOS ;NOt doing anything anymore
|
||||||
|
JRST IMPOBE ;Go continue processing.
|
||||||
|
|
||||||
|
;IMPOBZ - Toplevel output processing routing.
|
||||||
|
; Called from output done interrupt handler or from MP/CLOCK level with
|
||||||
|
; NETOFF to start output.
|
||||||
|
|
||||||
|
IMPOBZ: SKIPL B,IMPOS
|
||||||
|
CAIL B,IMPODL
|
||||||
|
BUG HALT,[IMP: Bad output state]
|
||||||
|
JRST @IMPODT(B)
|
||||||
|
|
||||||
|
IMPODT: OFFSET -.
|
||||||
|
%ISODL:: IMPOB0 ; 0 Idle, look for something to send
|
||||||
|
%ISONP:: IMPOB1 ; 1 Finished NOP
|
||||||
|
%ISOID:: IMPOB2 ; 2 Finished IP datagram messge
|
||||||
|
IMPODL::OFFSET 0
|
||||||
|
|
||||||
|
;Here when interrupt has finished processing a complete message.
|
||||||
|
; Attempt to find something else to do.
|
||||||
|
;
|
||||||
|
IMORET:
|
||||||
|
;JRST IMPOB0 ;Fall through to try for more
|
||||||
|
|
||||||
|
; Idle - Look for output to send. First ensure we can send stuff,
|
||||||
|
; then try things in the order:
|
||||||
|
; (1) Send NOP if net coming up
|
||||||
|
; (2) Check IP datagram queue
|
||||||
|
;
|
||||||
|
IMPOB0: HRRZ T,IMPUP ;Get current IMP state.
|
||||||
|
CAIE T,-2 ;Don't say it's up when it's still going down
|
||||||
|
CAIN T,1 ;or when it is broken
|
||||||
|
JRST IMPOBN
|
||||||
|
|
||||||
|
; First check to see if NOP needs to be sent.
|
||||||
|
AOSG IMNOPC ;Check to see if sending NOPs
|
||||||
|
JRST IMONOP ;Output a NOP
|
||||||
|
SETZM IMPUP ;Say IMP is up
|
||||||
|
SETZM IMPTCU ;Say no longer trying to come up
|
||||||
|
|
||||||
|
; Now see if there is any real traffic to send
|
||||||
|
PUSHJ P,IPGIOQ ;Check IP. Get IP IMP output queue entry if any
|
||||||
|
JRST IMPOBN ;Nothing there, we're done.
|
||||||
|
|
||||||
|
; Returns A/ ptr to IP dgm struct
|
||||||
|
; B/ BLKO pointer to 32-bit words (unused)
|
||||||
|
; C/ Arpanet address
|
||||||
|
;
|
||||||
|
;Build an IMP-format datagram at IMPOBF.
|
||||||
|
; Set correct address in prototype leader.
|
||||||
|
; BLT and reformat leader to IMPOBF.
|
||||||
|
; BLT and reformat datagram to IMPOBF + leader size.
|
||||||
|
|
||||||
|
MOVEM A,IMPODP ;Save ptr to datagram being output
|
||||||
|
AOS IMNIPO ;# of IP datagrams sent
|
||||||
|
|
||||||
|
;Put together the IMP leader in IMOLDR.
|
||||||
|
IFN 0,[ ;First and third word initialized at assembly time
|
||||||
|
MOVE B,[17_10.,,0] ;Regular message
|
||||||
|
MOVEM B,IMOLDR
|
||||||
|
MOVSI B,233_10. ;IP link # in left 8 bits
|
||||||
|
MOVEM B,IMOLDR+2 ;Set up third word
|
||||||
|
]
|
||||||
|
AND C,[<377_16.>+377] ;Mask out all but host and IMP field
|
||||||
|
LSH C,4. ;Move net address to correct field
|
||||||
|
MOVEM C,IMOLAD ;set up second word of leader
|
||||||
|
|
||||||
|
;Copy leader and datagram to IMPOBF
|
||||||
|
MOVE B,[IMOLDR,,IMPOBF]
|
||||||
|
BLTBU B,IMPOBF+IMPLDS-1 ;Move IMP leader into place
|
||||||
|
MOVS B,PK.BUF(A) ;SOURCE,,COUNT
|
||||||
|
MOVEI A,IMPLDS(B) ;Size including leader to A
|
||||||
|
HRRI B,IMPOBF+IMPLDS ;Put d'gram immediately after leader.
|
||||||
|
BLTBU B,IMPOBF-1(A)
|
||||||
|
PUSHJ P,IMPSOH ;Go start hardware
|
||||||
|
MOVEI C,%ISOID ;Remember we are outputting IP leader
|
||||||
|
MOVEM C,IMPOS
|
||||||
|
POPJ P,
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;Here if nothing to output.
|
||||||
|
; Flag output inactive and disable interface
|
||||||
|
;
|
||||||
|
IMPOBN: SETOM IMPOAC ;No more output
|
||||||
|
IORDI TT,%LHOCS
|
||||||
|
TRZ TT,%LHIE\%LHGO ;Deactivate interface for a bit
|
||||||
|
IOWRI TT,%LHOCS
|
||||||
|
POPJ P,
|
||||||
|
|
||||||
|
;IMONOP - Send a NOP, here from IMPOBZ only.
|
||||||
|
;
|
||||||
|
IMONOP: MOVEI A,IMPNOS ;Length of NOP message
|
||||||
|
MOVE B,[IMPNOP,,IMPOBF] ;BLT (and reformat) NOP to output buffer
|
||||||
|
BLTBU B,IMPOBF-1(A)
|
||||||
|
PUSHJ P,IMPSOH ;Start output of (A) words from IMPOBF to IMP
|
||||||
|
MOVEI C,%ISONP ;Set correct output FSM state
|
||||||
|
MOVEM C,IMPOS
|
||||||
|
POPJ P,
|
||||||
|
|
||||||
|
;Prefabricated NOP Host-IMP leader
|
||||||
|
IMPNOP: 17_10.,,4_4 ;New format, type 4 = NOP
|
||||||
|
0
|
||||||
|
0 ;No padding required on regular messages
|
||||||
|
IMPNOS==.-IMPNOP
|
||||||
|
|
||||||
|
;Finished sending NOP, from IMPOBZ
|
||||||
|
;
|
||||||
|
IMPOB1: SETZM IMPOS ;Reset state
|
||||||
|
JRST IMORET ;Go look for something else to do.
|
||||||
|
|
||||||
|
;Was sending IP datagram, from IMPOBZ
|
||||||
|
;
|
||||||
|
IMPOB2: SETZB A,IMPOS ;Reset output state.
|
||||||
|
EXCH A,IMPODP ;Get active datagram and reset pointer
|
||||||
|
PUSHJ P,IPIODN ;Tell IP level that datagram was output
|
||||||
|
JRST IMORET ;Go see if there is anything else to do.
|
||||||
|
|
||||||
|
;Start output hardware.
|
||||||
|
; A/ Count of PDP10 words to write to net.
|
||||||
|
; Data to output in IMPOBF.
|
||||||
|
; Must be NETOFF or at NETCHN interrupt level. Bashes A only.
|
||||||
|
|
||||||
|
IMPSOH: ASH A,1 ;Convert PDP10 word count to...
|
||||||
|
MOVNS A ; negative unibus word count.
|
||||||
|
IOWRI A,%LHOWC ;Tell the interface
|
||||||
|
MOVEI A,<IUIMPG_12.>+<4*<IMPOBF&777>>
|
||||||
|
IOWRI A,%LHOCA ;Unibus address of output buffer
|
||||||
|
MOVEI A,%LHIE\%LHELB\%LHGO ;Enable interrupts, send EOM, GO
|
||||||
|
IOWRI A,%LHOCS ;Start DMA transfer
|
||||||
|
POPJ P, ;And forget it.
|
||||||
|
|
||||||
|
SUBTTL ARPANET CLOCK LEVEL
|
||||||
|
|
||||||
|
IMRSTO: RET ;Nothing to do any more?
|
||||||
|
|
||||||
|
OVHMTR UUO
|
||||||
|
|
||||||
|
;NETHST (HOST INFO)
|
||||||
|
; ARG 1 - HOST => VAL 1 - STATUS, VAL 2 - HOST NUMBER
|
||||||
|
; ARG 1 - -1 => VAL 1 - (STATUS), VAL 2 - OUR HOST NUMBER
|
||||||
|
;NOT CURRENTLY IMPLEMENTED- ARG 1 - -1, ARG 2 - OUR GOING-DOWN REASON
|
||||||
|
;
|
||||||
|
ANETHST:HRRE T,A ;Let immediate -1 win (777777 not a valid host)
|
||||||
|
AOJE T,ANETH2 ;Jump if want local status and host number
|
||||||
|
MOVE T,A
|
||||||
|
JSP J,STDHST ;Standardize and error-check host number
|
||||||
|
MOVE B,T ;Return new format
|
||||||
|
TLO B,(NW%ARP)
|
||||||
|
MOVEI H,LIMPHT-1
|
||||||
|
CONO PI,NETOFF ;Do we have status for this host?
|
||||||
|
CAME T,IMPHTN(H) ;Scan table
|
||||||
|
SOJGE H,.-1
|
||||||
|
JUMPGE H,ANETH1 ;Yes, return it
|
||||||
|
CONO PI,NETON ;No, have to go get it
|
||||||
|
MOVEM T,SRN3(U)
|
||||||
|
POPJ P, ;Oh, too bad
|
||||||
|
|
||||||
|
;Here to return status of foreign ARPAnet host
|
||||||
|
ANETH1: MOVE A,IMPHTB(H) ;Get status
|
||||||
|
CONO PI,NETON
|
||||||
|
EXCH A,B
|
||||||
|
CALL CVH2NA ;Convert to HOSTS2 for compat
|
||||||
|
EXCH A,B
|
||||||
|
JRST LSWCJ1 ;Return IMSOC, NETLST if not done already
|
||||||
|
|
||||||
|
;Here to return our status, host
|
||||||
|
ANETH2:
|
||||||
|
REPEAT 0,[
|
||||||
|
CAIL W,2 ;(This is a crock)
|
||||||
|
MOVEM B,NTHDSW ;If 2 args, set our reason for going down.
|
||||||
|
]
|
||||||
|
SKIPE IMPUP ;Fake up our status
|
||||||
|
TDZA A,A ;We're down
|
||||||
|
MOVSI A,2000 ;We are up
|
||||||
|
MOVEI B,IMPUS ;And our host umber
|
||||||
|
JRST POPJ1
|
||||||
|
|
||||||
|
|
||||||
|
;NETIMP (REASON,TIMEDOWN,TIMEUP) READ/SET
|
||||||
|
;
|
||||||
|
ANETIM: JUMPLE W,ANETM1 ;No args, return current data
|
||||||
|
CAIGE W,3 ;Must have 3 args if any
|
||||||
|
JRST OPNL30
|
||||||
|
MOVEM A,IMPDWN ;Set data
|
||||||
|
MOVEM B,IMPDWN+1
|
||||||
|
MOVEM C,IMPDWN+2
|
||||||
|
JRST POPJ1
|
||||||
|
|
||||||
|
ANETM1: MOVE A,IMPDWN ;Get data to return
|
||||||
|
MOVE B,IMPDWN+1
|
||||||
|
MOVE C,IMPDWN+2
|
||||||
|
SKIPE IMPUP ;Note current condition of IMP, too
|
||||||
|
TLO A,400000
|
||||||
|
JRST POPJ1
|
||||||
1974
src/system/impold.wthncp
Executable file
1974
src/system/impold.wthncp
Executable file
File diff suppressed because it is too large
Load Diff
1430
src/system/inet.138
Executable file
1430
src/system/inet.138
Executable file
File diff suppressed because it is too large
Load Diff
4944
src/system/ioelev.432
Executable file
4944
src/system/ioelev.432
Executable file
File diff suppressed because it is too large
Load Diff
21930
src/system/its.1644
Executable file
21930
src/system/its.1644
Executable file
File diff suppressed because it is too large
Load Diff
5321
src/system/itsdev.974
Executable file
5321
src/system/itsdev.974
Executable file
File diff suppressed because it is too large
Load Diff
320
src/system/itsdis.50
Executable file
320
src/system/itsdis.50
Executable file
@@ -0,0 +1,320 @@
|
|||||||
|
|
||||||
|
;DEVICE CODES
|
||||||
|
DIS==130 ;DISPLAY PROCESSOR
|
||||||
|
DISMAP==134 ;MEM PROT & REL
|
||||||
|
LIPSH==(040000)
|
||||||
|
NWSTK==LIPSH 3,
|
||||||
|
|
||||||
|
ADSTAR: CONO PI,CLKOFF ;TURN OFF CLOCK TO PREVENT POSSIBLE GOBBLING BY ANOTHER USER
|
||||||
|
PUSHJ P,DISCHK ;CHECK IF THIS USER OWNS THE DISPLAY
|
||||||
|
JRST CLKONJ ;RESTART THE CLOCK
|
||||||
|
SETZM E.SPGH ; QSWI1 switch
|
||||||
|
SETZM E.SCLS ; clear clobber switch
|
||||||
|
SKIPL DISUSR ; no user
|
||||||
|
CAMN U,DISUSR ; skips if different index
|
||||||
|
JRST NOCLBR ; dont untie pages
|
||||||
|
MOVEM U,E.SCLS ; else remember to untie
|
||||||
|
SKIPA ; and dont hack disusr
|
||||||
|
NOCLBR: MOVEM U,DISUSR ;GIVE IT TO HIM IF NO ONE ELSE OWNS IT
|
||||||
|
CONO PI,CLKON ;RESTORE THE CLOCK
|
||||||
|
CONO DIS,5010 ;SET STOP, CLEAR PIA
|
||||||
|
XCTR XR,[HRRZ A,(C)] ; causes pg ld, fetches droot
|
||||||
|
HRRM A,DSTADD ; remember for restarts
|
||||||
|
XCTR XR,[MOVE B,(A)] ; load display page
|
||||||
|
PUSHJ P,SWTL ; circular switch gobble
|
||||||
|
CIRPSW
|
||||||
|
LSH A,-10. ; page number
|
||||||
|
SKIPN E.SCLS ; clobbering old user index ?
|
||||||
|
JRST RDSCLB ; if not, skip it
|
||||||
|
MOVE U,DISUSR ; old useri
|
||||||
|
PUSHJ P,E.SCLB ; untie pages
|
||||||
|
MOVEI U,0
|
||||||
|
EXCH U,E.SCLS ; clear switch, fetch new usri
|
||||||
|
MOVEM U,DISUSR
|
||||||
|
RDSCLB: PUSHJ P,UPLC ; users pg n into circular pointer
|
||||||
|
PUSHJ P,CHACK ; go in circles
|
||||||
|
SKIPL C ; 4.9 implies real core in loop
|
||||||
|
JRST NOTIED ; if not, dont tie down -- still swapped out
|
||||||
|
MOVE T,J ; MEMPNT INDEX
|
||||||
|
MOVE E,D ; MMP INDEX
|
||||||
|
PUSHJ P,E.SPG1 ; go tie it down
|
||||||
|
NOTIED: PUSHJ P,LSWPOP ; clear switch
|
||||||
|
; now set up E&S dbrs
|
||||||
|
MOVEI T,UDBR1A(U)
|
||||||
|
HRLI T,<NUVPG/2>_1 ;DBL left 1 relative to 10
|
||||||
|
MOVEM T,E.SPM+2
|
||||||
|
HRRI T,UDBR2A(U)
|
||||||
|
MOVEM T,E.SPM+3
|
||||||
|
|
||||||
|
; now start (or restart if from E.SPGI) E&S
|
||||||
|
|
||||||
|
RDSTAR: CONO DIS,515330 ;RESET THE WORLD
|
||||||
|
SETOM E.SSYS ;FLAG=MAP ON (USER MODE)
|
||||||
|
CONO DIS,515330 ;CLEAR 3D CLIPPER
|
||||||
|
MOVEI I,1000 ;SET COUNT FOR TIMEOUT
|
||||||
|
MOVE H,DSTADD ; fetch c(0)
|
||||||
|
MOVEM H,E.SPM ; store in status block
|
||||||
|
MOVSI H,140000 ; status bits -- map high and low
|
||||||
|
MOVEM H,E.SPM+1 ; set status
|
||||||
|
SKIPA H,[-ADSTN,,ADSTL-1]
|
||||||
|
BLKO DIS,H
|
||||||
|
CONSO DIS,604000 ;SKIP IF DONE OR ERROR
|
||||||
|
SOJG I,.-1
|
||||||
|
JUMPL H,.-3
|
||||||
|
JUMPE I,CPOPJ ;FAIL IF TIME OUT ON START
|
||||||
|
CONSZ DIS,600000 ;CHECK FOR EXECUTIVE ERRORS
|
||||||
|
JRST ADXIT ;GIVE INTERRUPT, NO SKIP
|
||||||
|
|
||||||
|
AOS (P)
|
||||||
|
ADCON1: CONO DIS,400 ;RUN
|
||||||
|
ADXIT: CONO DIS,222010+DISCHN ;ALARM+MPV+STOP+PIA
|
||||||
|
POPJ P,
|
||||||
|
|
||||||
|
ADSTPX: CONSZ DIS,1040 ;FAIL TO SKIP IF MEM OR SEL STOP
|
||||||
|
JRST ILUUO ;ERROR IF STOP
|
||||||
|
ADSTOP: CAME U,DISUSR ;SKIP IF USER OF SCOPE
|
||||||
|
JRST URET ;EXIT IF NOT SCOPE USER
|
||||||
|
ADSTPY: CONO DIS,5000 ; IOSTOP+STOP.INT.OFF
|
||||||
|
CONO DIS,300 ;LR.PROG+CLR.HIT
|
||||||
|
CONSO DIS,640000 ;SKIP IF PARITY, NXM, MPV ON
|
||||||
|
JRST E.SUSM ;MAP IS STILL ON
|
||||||
|
CONO DIS,400000 ;CLEAR MASTER STUFF (TURNS OFF MAP)
|
||||||
|
CONO DIS,400000 ;CLEAR 3D CLIPPER
|
||||||
|
|
||||||
|
AOS E.SSYS ;REMEMBER PAGING IS OFF
|
||||||
|
E.SUSM: CONSO DIS,4000 ;SKIP IF STOPPED AND READY
|
||||||
|
PUSHJ P,UFLS ;ELSE WAIT UNTIL READY
|
||||||
|
POPJ P,
|
||||||
|
|
||||||
|
ADCONT: PUSHJ P,ADSTPX ;ILLEGAL IF MEM OR SEL STOP
|
||||||
|
PUSHJ P,E.SFU ; force user mode if necessary
|
||||||
|
POPJ P,0 ; gross lossage (hardware)
|
||||||
|
JRST ADCON1
|
||||||
|
|
||||||
|
ADSTEP: PUSHJ P,ADSTPX ;ILLEGAL IF MEM OR SEL STOP
|
||||||
|
PUSHJ P,E.SFU ; Force User mode (reloads map and skips)
|
||||||
|
POPJ P,0 ; lossage if here
|
||||||
|
CONO DIS,40
|
||||||
|
POPJ P,
|
||||||
|
|
||||||
|
ADWORD: XCTR XR,[MOVE J,(J)] ; fetch c(AC)
|
||||||
|
PUSHJ P,ADSTOP ;MAKE SURE IT IS STOPPED
|
||||||
|
PUSHJ P,E.SFU ;RELOAD MAP IF NECESSARY
|
||||||
|
POPJ P,0 ;MAP NOT IN USER MODE
|
||||||
|
DATAO DIS,J
|
||||||
|
POPJ P,
|
||||||
|
|
||||||
|
ADCLOS: CAME U,DISUSR
|
||||||
|
POPJ P,
|
||||||
|
CONO DIS,5010 ;STOP, PI OFF
|
||||||
|
SETZM E.SPGW ;CLEAR PAGE WAIT
|
||||||
|
PUSHJ P,SWTL ;LOCK CIRCULAR SWITCH
|
||||||
|
CIRPSW
|
||||||
|
PUSHJ P,E.SCLB
|
||||||
|
PUSHJ P,LSWPOP ;RESTORE SWITCH
|
||||||
|
SETOM DISUSR
|
||||||
|
POPJ P,
|
||||||
|
|
||||||
|
DISCHK: MOVE B,UNAME(U)
|
||||||
|
SKIPL T,DISUSR
|
||||||
|
CAMN B,UNAME(T)
|
||||||
|
AOS (P)
|
||||||
|
|
||||||
|
ADRSTA: ;READ STATE, WRITE STATE NOT IN.
|
||||||
|
ADSSTA: POPJ P,
|
||||||
|
|
||||||
|
;E&S PAGER HAS TO REFERENCE 0 TO INITIALLIZE MAP.
|
||||||
|
;E&S FORCE USER MODE
|
||||||
|
|
||||||
|
E.SFU: SKIPGE E.SSYS
|
||||||
|
JRST POPJ1 ;SKIP IF MAP OFF
|
||||||
|
E.SFU2: MOVSI T,140000 ;ENTRY FOR DCRRST
|
||||||
|
MOVEM T,E.SPM+1 ;RESETS STATUS
|
||||||
|
DATAO DIS,[NWSTK 1] ;STORE SP AT 0
|
||||||
|
PUSHJ P,E.SWT ;CANNOT UFLS -- NWSTK MIGHT BE REISSUED
|
||||||
|
POPJ P,0 ;HARDWARE LOSSAGE
|
||||||
|
DATAO DIS,E.SPM ;OUTPUTS C(0) (RELOADS SP)
|
||||||
|
PUSHJ P,E.SWT
|
||||||
|
POPJ P,0 ;LOST
|
||||||
|
SETOM E.SSYS ;REMEMBER MAP ON
|
||||||
|
JRST POPJ1
|
||||||
|
|
||||||
|
E.SWT: PUSH P,J
|
||||||
|
MOVEI J,100 ;COUNT FOR TIMEOUT
|
||||||
|
CONSZ DIS,4000 ;STOPPED AND READY? ELSE SKIP
|
||||||
|
JRST POPJJ1 ;SKIP RET IF READY
|
||||||
|
CONSO DIS,640000 ;OTHER FLAVORS OF LOSSAGE
|
||||||
|
SOJG J,E.SWT+2 ;COUNT IF STILL OK
|
||||||
|
CONO DIS,10 ;STOP FOR GOOD
|
||||||
|
JRST POPJJ ;LOSES, NO SKIP RETURN
|
||||||
|
|
||||||
|
ADSTL: 000501052405 ;LI DIR,052405(PROGM)
|
||||||
|
300541,,[-1,,] ;LOCLA SELINT,[-1,,](1)
|
||||||
|
300441,,[102521,,] ;LOCLA CDIR,[102521,,](1)
|
||||||
|
302641,,[3777,,3777] ;LOCLSA VIEW,[3777,,3777](1)
|
||||||
|
302701,,[377777377777] ;LOCLSA WIND,[377777377777](1)
|
||||||
|
100,,0 ; (JMP 0) load page map and go
|
||||||
|
ADSTN==.-ADSTL
|
||||||
|
EBLK
|
||||||
|
|
||||||
|
DSTADD: 000100,, ;JMP TO CODE (FILL IN ADDRESS)
|
||||||
|
|
||||||
|
; E&S PAGE MAP STATUS BLOCK
|
||||||
|
E.SPM: 0 ; c(0)
|
||||||
|
0 ; status word
|
||||||
|
0 ; dbr low
|
||||||
|
0 ; dbr high
|
||||||
|
|
||||||
|
MXDISP==16. ; maximum number of tied pages
|
||||||
|
DISPGP: -MXDISP,,0 ; page pointer for mmp pages
|
||||||
|
DISSWP: BLOCK MXDISP ; MMSWP INDICES TIED
|
||||||
|
E.SPGW: 0 ; if non zero, E&S page wait page
|
||||||
|
E.SPGH: 0 ; flag for QSWI1
|
||||||
|
E.SCLS: 0 ; if non zero, new userI flushing disusr
|
||||||
|
E.SSYS: 0 ; flag for pager on/off
|
||||||
|
E.SIST: 0 ; ststus word at last interrupt
|
||||||
|
|
||||||
|
; counts for debugging
|
||||||
|
|
||||||
|
E.SNTI: 0 ; # pages tied down (total during system run)
|
||||||
|
E.SNUT: 0 ; # pages untied (should = .-1 after dclose)
|
||||||
|
|
||||||
|
E.SREL: 0 ; # times pages in DISSWP table were relocated
|
||||||
|
|
||||||
|
; end of debug counts
|
||||||
|
|
||||||
|
|
||||||
|
DSTPCT: -1 ; STOP COUNT TO HANDLE REDUNDANT STOPS
|
||||||
|
DSCONI: 0 ;LAST CONI FROM DISPLAY
|
||||||
|
EBRKA: 0 ;INTERRUPT SAVE AC
|
||||||
|
EBRKU: 0 ; DITTO
|
||||||
|
|
||||||
|
ESBRK: 0 ;HANDLE E&S INTERRUPT
|
||||||
|
|
||||||
|
BBLK
|
||||||
|
|
||||||
|
CONSO DIS,7 ;PI CHAN ASSIGNED?
|
||||||
|
JRST 12,@ESBRK ;NO, CANNOT INTERRUPT
|
||||||
|
CONI DIS,DSCONI
|
||||||
|
CONO DIS,10 ;DEASSIGN PI CHANNEL
|
||||||
|
MOVEM U,EBRKU ;SAVE AC'S
|
||||||
|
MOVEM A,EBRKA
|
||||||
|
MOVEI A,%PILTP ;GIVE "LTPEN" INT (CLASS 3)
|
||||||
|
CONSZ DIS,640040 ;PAR, NXM, MPV, SELECT
|
||||||
|
JRST E.SFLT ; check page fault
|
||||||
|
E.SUIN: SKIPL U,DISUSR
|
||||||
|
IORM A,PIRQC(U)
|
||||||
|
E.SPFR: MOVE A,EBRKA ;UNSAVE AC'S
|
||||||
|
MOVE U,EBRKU
|
||||||
|
JRST 12,@ESBRK ;RETURN
|
||||||
|
|
||||||
|
E.SFLT: CONSZ DIS,200000 ; skip if not NXM (ie not fault)
|
||||||
|
SKIPL E.SPM+1 ; error bit set in status word ?
|
||||||
|
JRST E.SILM ; if not, real illegal mem
|
||||||
|
LDB U,[121000,,E.SPM+1] ; get page #
|
||||||
|
HRROM U,E.SPGW ; save for loading (LH is flag)
|
||||||
|
MOVE U,E.SPM+1 ; get status
|
||||||
|
MOVEM U,E.SIST ; save status for later (debugging)
|
||||||
|
LDB U,[330300,,U] ; access and pgerr
|
||||||
|
CAIE U,2 ; read write/first error
|
||||||
|
SKIPN U ; no access -- page fault
|
||||||
|
JRST E.SPFR ; gives a page fault
|
||||||
|
E.SILM: SETZM E.SPGW ; if not page fault, don't rq load
|
||||||
|
MOVEI A,%PIDIS; mem fault bits
|
||||||
|
JRST E.SUINT ; give user interrupt
|
||||||
|
|
||||||
|
DCRSTP: CAMN U,DISUSR ;IS THIS U ON DIS
|
||||||
|
AOSE DSTPCT ; HERE IF THIS USER, SKIP IF FIRST CALL TO STOP
|
||||||
|
POPJ P, ;RETURN IF NOT
|
||||||
|
CONSO DIS,7 ; SKIP IF CURRENTLY RUNNING
|
||||||
|
POPJ P, ; RETURN IF NOT RUNNING NOW
|
||||||
|
CONI DIS,DSCONI ;SAVE STATE FOR RESTART
|
||||||
|
CONO DIS,5000 ;OTHERWISE STOP IT
|
||||||
|
DISSTQ: MOVEI TT,100
|
||||||
|
CONSO DIS,4000 ;SKIP IF STOP ACTUALLY TAKES HOLD
|
||||||
|
SOJG TT,.-1 ;TIME-OUT LOOP
|
||||||
|
JUMPG TT,CPOPJ ;DID NOT TIME OUT, OK
|
||||||
|
CONO DIS,10 ;DISABLE DISPLAY (CLEAR PIA)
|
||||||
|
AOS DISSTQ ;CAUSE "SYSTEM CLOBBERED" ... ON SYS CONSOLE
|
||||||
|
POPJ P,
|
||||||
|
|
||||||
|
|
||||||
|
E.SLPM: PUSHJ P,DCRSTP ; stop before loading page map
|
||||||
|
DCRRST: CAMN U,DISUSR ;IS THE CURRENT U ON DISPLAY?
|
||||||
|
SOSL T,DSTPCT ; SKIP IF LAST START CALL, (FROM MORE THAN 1 STOP)
|
||||||
|
POPJ P, ;NO
|
||||||
|
AOSE T ;SKIP IF ONLY ONE STOP
|
||||||
|
JRST 4,. ;SOME ONE IS OUT OF PHASE!
|
||||||
|
MOVE T,DSCONI
|
||||||
|
CONSZ DIS,7 ;SKIP IF NOT RUNNABLE
|
||||||
|
TRNE T,4000 ;1=> WAS STOPPED
|
||||||
|
POPJ P, ;SO QUIT
|
||||||
|
PUSHJ P,E.SFU2 ; load E&S page map
|
||||||
|
POPJ P,0 ; lost somehow
|
||||||
|
CONO DIS,400 ;ELSE SET RUN
|
||||||
|
CONO DIS,2000 ;THEN ALLOW STOP INT
|
||||||
|
POPJ P,
|
||||||
|
|
||||||
|
; tie down hacks
|
||||||
|
|
||||||
|
;E.SPCH checks MMSWP ind in T against DISSWP
|
||||||
|
; R0 if already there, R1 if not. ret index in H
|
||||||
|
|
||||||
|
E.SPCH: MOVSI H,-MXDISP
|
||||||
|
CAMN T,DISSWP(H)
|
||||||
|
POPJ P,0 ; found
|
||||||
|
AOBJN H,.-2 ; look some more
|
||||||
|
JRST POPJ1 ; not found, skip
|
||||||
|
|
||||||
|
E.SCLB: MOVSI H,-MXDISP
|
||||||
|
SKIPE T,DISSWP(H) ; VALID IF NON-ZERO
|
||||||
|
PUSHJ P,UNTIE ; UNTIE PAGE IN T (MMSWP INDEX)
|
||||||
|
AOBJN H,E.SCLB+1
|
||||||
|
POPJ P,0
|
||||||
|
|
||||||
|
; UNTIE PG T/ MMSWP index
|
||||||
|
; H/ display table index
|
||||||
|
|
||||||
|
UNTIE: AOS E.SNUT ; count unties
|
||||||
|
PUSH P,H
|
||||||
|
MOVSI H,-1
|
||||||
|
ADDB H,MMSWP(T) ; sos # exec pgs
|
||||||
|
SKIPGE H ; if less than zero, untied an untied page
|
||||||
|
JRST 4,. ; exec pg count < 0
|
||||||
|
POP P,H
|
||||||
|
SETZM DISSWP(H) ; clear table entries
|
||||||
|
POPJ P,0
|
||||||
|
|
||||||
|
; ties down page. T/ MMSWP ind.
|
||||||
|
|
||||||
|
E.SPG1: SKIPL MEMBLT(T) ; frozen, so dont tie
|
||||||
|
PUSHJ P,E.SPCH ; skips if not there
|
||||||
|
POPJ P,0 ; dont tie
|
||||||
|
AOS E.SNTI ; count number of ties.
|
||||||
|
MOVSI H,1
|
||||||
|
ADDM H,MMSWP(T) ; aos # exec pgs
|
||||||
|
MOVE H,DISPGP ; fetch dis pg pointer
|
||||||
|
AOBJN H,.+2
|
||||||
|
MOVSI H,-MXDISP ; reset pointer if table full
|
||||||
|
MOVEM H,DISPGP ; update pointer
|
||||||
|
PUSH P,T ; now checks if slot in use
|
||||||
|
SKIPE T,DISSWP(H)
|
||||||
|
PUSHJ P,UNTIE ; untie page in T
|
||||||
|
POP P,T
|
||||||
|
MOVEM T,DISSWP(H) ; remember mmswp ind
|
||||||
|
POPJ P,0
|
||||||
|
|
||||||
|
; E.SPGI called from CFHPI on page in core after fault
|
||||||
|
|
||||||
|
E.SPGI: SKIPGE U,DISUSR
|
||||||
|
JRST 4,. ; why here ?
|
||||||
|
HRRO I,CFHUVP ; user virtul page from CFH...
|
||||||
|
CAME I,E.SPGW ; is the sam as E&S rq ?
|
||||||
|
POPJ P,0 ; no, return
|
||||||
|
SETOM E.SPGH ; set flag for QSWI1 (read/write/first hack)
|
||||||
|
PUSHJ P,E.SPG1 ; tie down
|
||||||
|
SETZM E.SPGW ; clear page wait
|
||||||
|
PUSHJ P,RDSTART ; restart display
|
||||||
|
POPJ P,0
|
||||||
|
POPJ P,0 ; skip return from rdstart if wins
|
||||||
|
|
||||||
315
src/system/itsmsp.30
Executable file
315
src/system/itsmsp.30
Executable file
@@ -0,0 +1,315 @@
|
|||||||
|
;.OPEN CHNL,PNTR1
|
||||||
|
|
||||||
|
;PNTR1: MODE,,(SIXBIT /NET/)
|
||||||
|
; PNTR2
|
||||||
|
; MYNAME1
|
||||||
|
; MYNAME2
|
||||||
|
|
||||||
|
;PNTR2: HISNAME1
|
||||||
|
; HISNAME2
|
||||||
|
; COUNT
|
||||||
|
; buffer
|
||||||
|
|
||||||
|
;MODES=> BITS 3.1== READ FROM ANY
|
||||||
|
; 3.2== READ FROM SPECIFIC
|
||||||
|
; 3.3== SEND AND HANG
|
||||||
|
; 3.4== SEND IMMEDIATE
|
||||||
|
; 3.5== USE UNAME JNAME AS MY1 AND MY2
|
||||||
|
; 3.6== USE UNAME AS HIS1
|
||||||
|
|
||||||
|
;OPEN FAILURES:
|
||||||
|
; 4 HIS NAME 1 & HIS NAME 2 WERE ZERO
|
||||||
|
; 6 TABLE FULL
|
||||||
|
; 7 ON WRITE, RELOCATION OF READ BUFFER FAILED
|
||||||
|
; 11 ATTEMPT TO SEND TO SELF
|
||||||
|
; 12 NOT A LEGAL MODE
|
||||||
|
; 20 SEND IMMEDIATE, GUY WASN'T THERE
|
||||||
|
; 22 BUFFER NOT IN YOUR CORE IMAGE
|
||||||
|
|
||||||
|
|
||||||
|
EBLK
|
||||||
|
|
||||||
|
MSENTS==40 ;# OF ENTRIES IN THE TABLE
|
||||||
|
|
||||||
|
MSUSER: BLOCK MSENTS ;USER INDEX
|
||||||
|
MSCHNL: BLOCK MSENTS ;USERS CHANNEL
|
||||||
|
MSBADR: BLOCK MSENTS ;RELATIVE ADDRR OF USER'S BUFR
|
||||||
|
MSBCNT: BLOCK MSENTS ;SIZE OF USERS BUFFER
|
||||||
|
|
||||||
|
MSWRIT: BLOCK MSENTS ;SENDING NAME 1
|
||||||
|
MSWRT2: BLOCK MSENTS ;SENDING NAME 2
|
||||||
|
MSREAD: BLOCK MSENTS ;READING NAME 1
|
||||||
|
MSRED2: BLOCK MSENTS ;READING NAME 2
|
||||||
|
|
||||||
|
MSPSW: -1 ;SWITCH FOR MSP VARIABLES
|
||||||
|
0 ;EXTRA WORD, FOR SWTL ROUTINE
|
||||||
|
|
||||||
|
BBLK
|
||||||
|
|
||||||
|
IPCO: PUSHJ P,SWTL ;LOCK THE MSP SWITCH
|
||||||
|
MSPSW
|
||||||
|
TLNE C,1 ; read from any?
|
||||||
|
JRST MSRA ; yes
|
||||||
|
TLNE C,2 ; read from specific?
|
||||||
|
JRST MSRS ; yes
|
||||||
|
TLNE C,4 ; send and hang?
|
||||||
|
JRST MSSH ; yes
|
||||||
|
TLNE C,8 ; send immediate?
|
||||||
|
JRST MSSI ; yes
|
||||||
|
JRST OPNL12 ; none of the above
|
||||||
|
|
||||||
|
; read from any (RA) and read from specific (RS)
|
||||||
|
MSRA: SETOM H ; H/-1 =>RA 0=>RS
|
||||||
|
SKIPA
|
||||||
|
MSRS: SETZM H
|
||||||
|
|
||||||
|
; find first free user slot
|
||||||
|
MOVSI W,-MSENTS ; W/ slot index
|
||||||
|
MSR1: SKIPG MSUSER(W) ; is this slot free?
|
||||||
|
JRST MSR2 ; yes
|
||||||
|
AOBJN W,MSR1
|
||||||
|
JRST OPNL6 ; no free slots, device full
|
||||||
|
|
||||||
|
; W/ slot index of a free slot
|
||||||
|
MSR2: MOVEM U,MSUSER(W) ; occupies this slot
|
||||||
|
; make sure we have a legal buffer
|
||||||
|
HRRZ D,A ; relative address of second buffer
|
||||||
|
MOVEI E,3(D) ; E/ relative address of data area
|
||||||
|
XCTR XRW,[MOVES (D)] ;CHECK COUNT FETCH?
|
||||||
|
XCTR XRW,[MOVES TT,2(D)] ;CHECK ACTUAL COUNT PLACE
|
||||||
|
|
||||||
|
; bufr ok, now put data in table
|
||||||
|
MOVEM E,MSBADR(W) ; stores buffer address
|
||||||
|
MOVEM TT,MSBCNT(W)
|
||||||
|
|
||||||
|
; store sender name only if RS
|
||||||
|
JUMPL H,MSR3
|
||||||
|
XCTR XR,[MOVE TT,(D)] ; his name 1
|
||||||
|
XCTR XR,[MOVE I,1(D)] ; his name 2
|
||||||
|
TLNE C,40 ; his1 = UNAME?
|
||||||
|
MOVE TT,UNAME(U) ; yes
|
||||||
|
SKIPA
|
||||||
|
MSR3: SETZB TT,I ; zero if RA
|
||||||
|
MOVEM TT,MSWRIT(W)
|
||||||
|
MOVEM I,MSWRT2(W)
|
||||||
|
|
||||||
|
; 3.5 bit in C means use UNAME JNAME as myname1 and myname2
|
||||||
|
TLNN C,20 ; skips if want default
|
||||||
|
JRST .+4
|
||||||
|
MOVE TT,UNAME(U)
|
||||||
|
MOVE I,JNAME(U)
|
||||||
|
JRST .+3
|
||||||
|
; else me1 is in B and me2 is in SRN3(U)
|
||||||
|
MOVE TT,B
|
||||||
|
MOVE I,SRN3(U)
|
||||||
|
MOVEM TT,MSREAD(W)
|
||||||
|
MOVEM I,MSRED2(W)
|
||||||
|
|
||||||
|
MOVEI TT,(R) ;GET CHANNEL
|
||||||
|
SUBI TT,IOCHNM(U)
|
||||||
|
MOVEM TT,MSCHNL(W) ;STORE FOR LATER INTERRUPT
|
||||||
|
|
||||||
|
PUSHJ P,LSWPOP ;UNLOCK MSP SWITCH
|
||||||
|
|
||||||
|
; now put tabl index in lh of IOCHNM(U)(R)
|
||||||
|
HRLZ A,W
|
||||||
|
JSP Q,OPSLD1
|
||||||
|
MSPIO,,MSPIO ; attempted IOT will get IOCER 10.
|
||||||
|
; send and hang (SH) and send immediate (SI)
|
||||||
|
MSSI: SETOM H ; H/-1=>SI 0=>SH
|
||||||
|
SKIPA
|
||||||
|
MSSH: SETZM H
|
||||||
|
|
||||||
|
; validate his buffer specs
|
||||||
|
HRRZ D,A ; relative buffer address
|
||||||
|
MOVEI E,3(D) ; E/ relative data addr
|
||||||
|
XCTR XRW,[MOVES (D)] ;CHECK NAME
|
||||||
|
XCTR XRW,[MOVES Q,2(D)] ;CHECK COUNT
|
||||||
|
|
||||||
|
; other data
|
||||||
|
; E/ absolute data addr
|
||||||
|
; Q/ count
|
||||||
|
XCTR XR,[MOVE T,(D)] ; T/ his name 1
|
||||||
|
TLNE C,40 ; 3.6 bit means use UNAME
|
||||||
|
MOVE T,UNAME(U) ; yes
|
||||||
|
XCTR XR,[MOVE TT,1(D)] ; TT/ his name 2
|
||||||
|
JUMPN T,.+3 ; T and TT can not both be zero
|
||||||
|
SKIPN TT
|
||||||
|
JRST OPNL4
|
||||||
|
MOVEM TT,EPDL(U) ; EPDL(U)/ hisname2
|
||||||
|
|
||||||
|
; 3.5 bit in C means use UNAME JNAME as myname1 and myname2
|
||||||
|
TLNN C,20 ; skips if wants default
|
||||||
|
JRST .+4
|
||||||
|
MOVE TT,UNAME(U)
|
||||||
|
MOVE I,JNAME(U)
|
||||||
|
JRST .+3
|
||||||
|
; else myname1 is in B and myname2 is in SRN(U)
|
||||||
|
MOVE TT,B
|
||||||
|
MOVE I,SRN3(U)
|
||||||
|
MOVEM TT,EPDL3(U) ; EPDL3/ myname1
|
||||||
|
MOVEM I,SRN4(U) ; SRN4/ myname2
|
||||||
|
|
||||||
|
; see if entry is in the table
|
||||||
|
PUSHJ P,MSSTBL
|
||||||
|
SKIPA ; no, will havee to wait
|
||||||
|
JRST MSS2 ; yes, service the transfer
|
||||||
|
JUMPL H,OPNL20 ; was an SI, lose
|
||||||
|
MSS1: XCTR XR,[MOVE T,(D)] ; in case it got munged
|
||||||
|
TLNE C,40 ; 3.6 bit means use UNAME
|
||||||
|
MOVE T,UNAME(U)
|
||||||
|
|
||||||
|
|
||||||
|
; wait for entry to appear in table
|
||||||
|
MSDM3: PUSH P,T ;LSWPOP CLOBBERS T
|
||||||
|
PUSHJ P,LSWPOP ;UNLOCK MSPSW FOR WAITING
|
||||||
|
MOVE T,(P) ;RESTOR T
|
||||||
|
SKIPA ; forces a call to ufls
|
||||||
|
PUSHJ P,MSSTBL
|
||||||
|
PUSHJ P,UFLS ; hang . . . .
|
||||||
|
PUSHJ P,SWTL ;RELOCK SWITCH NOW
|
||||||
|
MSPSW
|
||||||
|
POP P,T ;RESTORE T AFTER CLOBBERING BY SWTL
|
||||||
|
PUSHJ P,MSSTBL ; read has been done, get details
|
||||||
|
JRST MSS1 ; oops, must have been aborted
|
||||||
|
|
||||||
|
; FALLS THRU IF MSSTBL SKIPS
|
||||||
|
; table index of the user is now in T
|
||||||
|
MSS2: MOVE H,T ; H/ table index
|
||||||
|
MOVE A,MSUSER(H) ; A/ user index
|
||||||
|
CAMN A,U
|
||||||
|
JRST [PUSHJ P,LSWPOP ;POP MSPSW
|
||||||
|
JRST OPNL11]
|
||||||
|
PUSHJ P,RPCLSR ; stop or i'll shoot
|
||||||
|
PUSHJ P,SOSSET ;SET TO SOS USTP(A) ON PCLSR
|
||||||
|
USTP(A)
|
||||||
|
|
||||||
|
; get the absolute address of the read data buffer
|
||||||
|
MSS3: MOVE A,MSBADR(H) ; relative
|
||||||
|
;SET UP PAGE MAP FOR RECEIVER (USER IN MSUSER(H))
|
||||||
|
PUSH P,R
|
||||||
|
MOVE J,MSUSER(H) ;USER TO RECEIVE
|
||||||
|
PUSHJ P,MPLDJ ;LOAD MAP
|
||||||
|
; fix count (sender cnt in Q, receiver cnt in MSBCNT(H))
|
||||||
|
CAMG Q,MSBCNT(H) ; will it fit?
|
||||||
|
JRST MSS4 ; yes
|
||||||
|
XCTRI XRW,[SETOM -1(A)] ; no, indicate overflow will be lost
|
||||||
|
CAIA ;REFERENCE WORKED, SKIP
|
||||||
|
JRST MSS7 ;FAIL, RESTORE STOPS ETC.
|
||||||
|
MOVE B,MSBCNT(H) ; B/ count
|
||||||
|
JRST MSS5
|
||||||
|
MSS4: MOVE B,Q ; B/ count
|
||||||
|
MOVE TT,MSBCNT(H)
|
||||||
|
SUB TT,B
|
||||||
|
XCTRI XRW,[MOVEM TT,-1(A)] ; amount that will be xfered
|
||||||
|
CAIA ;REFERENCE WORKED, SKIP
|
||||||
|
JRST MSS7 ;FAIL, RESTORE STOPS ETC.
|
||||||
|
|
||||||
|
; if MSWRIT was zero (RA), fill it in
|
||||||
|
MSS5: SKIPN MSWRIT(H)
|
||||||
|
SKIPE MSWRT2(H)
|
||||||
|
JRST MSS6
|
||||||
|
MOVE TT,EPDL3(U)
|
||||||
|
XCTRI XRW,[MOVEM TT,-3(A)] ; read's him1
|
||||||
|
CAIA ;REFERENCE WORKED, SKIP
|
||||||
|
JRST MSS7 ;FAIL, RESTORE STOPS ETC.
|
||||||
|
MOVE TT,SRN4(U) ;
|
||||||
|
XCTRI XRW,[MOVEM TT,-2(A)] ; read's him2
|
||||||
|
CAIA ;REFERENCE WORKED, SKIP
|
||||||
|
JRST MSS7 ;FAIL, RESTORE STOPS ETC.
|
||||||
|
|
||||||
|
; RESTORE USER MAP TO CURRENT USER
|
||||||
|
MSS6: PUSHJ P,MPLDZ
|
||||||
|
POP P,R
|
||||||
|
; XFER => B/ CNT A/READ BUFR E/WRIT BUFR J/UNRELOCATED BUFFER (READ)
|
||||||
|
HRRM A,IOCHST-IOCHNM(R) ;STORE RECEIVER ADDRESS FOR UBO
|
||||||
|
MOVN W,B ;-COUNT
|
||||||
|
MOVSS W ;-COUNT,,
|
||||||
|
HRR W,E ;-COUNT,,ADR
|
||||||
|
MOVE C,[SETZ W] ;POINTER FOR UBO
|
||||||
|
MOVE A,MSUSER(H) ;GET OTHER USERS NUMBER FOR UBO
|
||||||
|
PUSHJ P,UBO ;USER BLOCK OUTPUT - DO WRITE TRANSFER
|
||||||
|
|
||||||
|
; RESTART THE LOSER
|
||||||
|
PUSHJ P,LSWPOP ;UNDO RPCLSR (SOS USTP(MSUSR(H)))
|
||||||
|
MOVE A,MSUSER(H) ;GET TARGET USER
|
||||||
|
MOVE B,MSCHNL(H) ;CHANNEL HE OPENED
|
||||||
|
MOVE B,CHNBIT(B) ;BIT CORRESPONDING TO CHAN
|
||||||
|
TDNE B,MSKST2(A) ;SKIP IF NOT ENABLED
|
||||||
|
IORM B,IFPIR(A) ;SET HIS INTERRUPT
|
||||||
|
|
||||||
|
; flush read entry from the table
|
||||||
|
SETZM MSCHNL(H)
|
||||||
|
SETZM MSREAD(H)
|
||||||
|
SETZM MSRED2(H)
|
||||||
|
SETZM MSWRIT(H)
|
||||||
|
SETZM MSWRT2(H)
|
||||||
|
SETZM MSBADR(H)
|
||||||
|
SETZM MSBCNT(H)
|
||||||
|
SETZM MSUSER(H)
|
||||||
|
|
||||||
|
PUSHJ P,LSWPOP ;UNLOCK MSPSW
|
||||||
|
|
||||||
|
; end open
|
||||||
|
SETOM A ; LH IOCHNM==-1 MEANS SEND (FOR CLOS)
|
||||||
|
JSP Q,OPSLD1 ;DOES POPJ BACK TO UUOH
|
||||||
|
MSPIO,,MSPIO
|
||||||
|
; (DOES NOT COME BACK)
|
||||||
|
|
||||||
|
;HERE FOR FAILURE OF XCTRI WHILE MAP SET TO RECEIVER
|
||||||
|
MSS7: POP P,R ;RESTORE STACK
|
||||||
|
PUSHJ P,LSWPOP ;RESTART USER (SOS USTP)
|
||||||
|
PUSHJ P,TPFLT ;TAKE PAGE FAULT, CAUSE PAGE LOAD
|
||||||
|
PUSHJ P,MPLDZ ;RESTORE MY PAGE MAP
|
||||||
|
JRST MSS1 ;TRY AGAIN
|
||||||
|
|
||||||
|
; FIND LOSER IN TABLE SKIP IF WINS
|
||||||
|
; IN => T/READ1 EPDL/READ2 EPDL3/WRITE1 SRN4/WRITE2
|
||||||
|
; OUT => IF WINS, T/TABLE OFFSET
|
||||||
|
MSSTBL: PUSH P,A
|
||||||
|
PUSH P,B
|
||||||
|
PUSH P,C
|
||||||
|
PUSH P,D
|
||||||
|
MOVSI A,-MSENTS
|
||||||
|
MOVE B,EPDL(U) ; B/ READ2
|
||||||
|
MOVE C,EPDL3(U) ; C/ WRITE1
|
||||||
|
MOVE D,SRN4(U) ; D/ WRITE2
|
||||||
|
MSSTB1: CAMN T,MSREAD(A)
|
||||||
|
CAME B,MSRED2(A)
|
||||||
|
JRST MSSTB2
|
||||||
|
SKIPN MSWRIT(A) ; if it was read from any
|
||||||
|
SKIPE MSWRT2(A) ; win if WRIT and WRT2 are both zero
|
||||||
|
JRST .+2
|
||||||
|
JRST MSSTB3
|
||||||
|
CAMN C,MSWRIT(A)
|
||||||
|
CAME D,MSWRT2(A)
|
||||||
|
JRST MSSTB2
|
||||||
|
MSSTB3: HRRZ T,A
|
||||||
|
AOSA -4(P)
|
||||||
|
MSSTB2: AOBJN A,MSSTB1
|
||||||
|
POP P,D
|
||||||
|
POP P,C
|
||||||
|
JRST POPBAJ
|
||||||
|
|
||||||
|
; close routine
|
||||||
|
; A/ lf IOCHNM
|
||||||
|
; R/ addr of IOCHNM(USER)(CHNL)
|
||||||
|
|
||||||
|
MSCLOS: TRNE A,400000 ; -1 means write
|
||||||
|
POPJ P,
|
||||||
|
CAIL A,MSENTS ; in bounds of table?
|
||||||
|
POPJ P, ; no
|
||||||
|
CAME U,MSUSER(A) ; is this still me?
|
||||||
|
POPJ P,
|
||||||
|
|
||||||
|
; yes, make this a free slot
|
||||||
|
SETZM MSCHNL(A)
|
||||||
|
SETZM MSREAD(A)
|
||||||
|
SETZM MSRED2(A)
|
||||||
|
SETZM MSWRIT(A)
|
||||||
|
SETZM MSWRT2(A)
|
||||||
|
SETZM MSBADR(A)
|
||||||
|
SETZM MSBCNT(A)
|
||||||
|
SETZM MSUSER(A)
|
||||||
|
POPJ P,
|
||||||
|
|
||||||
63
src/system/kaimp.defs1
Executable file
63
src/system/kaimp.defs1
Executable file
@@ -0,0 +1,63 @@
|
|||||||
|
;;; -*- Mode: Midas -*-
|
||||||
|
.AUXIL
|
||||||
|
|
||||||
|
;;; Canonical symbol definition macro, FOO==BAR with error check.
|
||||||
|
IFNDEF DEFSYM,[
|
||||||
|
DEFINE DEFSYM X/
|
||||||
|
IRPS Z,,[X]
|
||||||
|
IFNDEF Z,X
|
||||||
|
.ELSE [ $$TEM1==Z
|
||||||
|
X
|
||||||
|
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
|
||||||
|
]
|
||||||
|
.ISTOP
|
||||||
|
TERMIN TERMIN
|
||||||
|
$$TEMP==1
|
||||||
|
] ;IFNDEF DEFSYM
|
||||||
|
.ELSE, $$TEMP==0
|
||||||
|
|
||||||
|
; Hardware description of AI-KA/ML/MC IMP interface, device "IMP".
|
||||||
|
; For a more detailed description, see AI Hardware Memo #10,
|
||||||
|
; "ARPA Network Interface".
|
||||||
|
; In particular, the "channel 1 multiplexing" feature of the ITS KA's
|
||||||
|
; is used, so that:
|
||||||
|
; When PI level 2 (NETCHN) is assigned, the IMP interface takes
|
||||||
|
; all interrupts on the normal channel (goes to IMPINT).
|
||||||
|
; When PI level 1 (IMPCHN) is assigned,
|
||||||
|
; IMPID+(-IMPLIW) => Pseudo channel 4, location 70 (IMPILC)-> various
|
||||||
|
; IMPOD => Pseudo channel 5, location 72 (IMPOLC)-> various
|
||||||
|
; else normal PI channel 1 (PI0LOC+2)-> IMPBRK
|
||||||
|
|
||||||
|
; CONI bits - starred items cause interrupt on PIA channel
|
||||||
|
; 1.1-1.3 => PIA
|
||||||
|
DEFSYM IMPID==10 ;* INPUT DONE - on when word avail for DATAI
|
||||||
|
DEFSYM IMPI32==20 ; Input in 32 bit mode
|
||||||
|
;DEFSYM IMPIB==40 ; Input Busy
|
||||||
|
DEFSYM IMPOD==100 ;* OUTPUT DONE - Word sent to IMP
|
||||||
|
;DEFSYM IMPO32==200 ; Output in 32 bit mode
|
||||||
|
;DEFSYM IMPOB==400 ; Output Busy
|
||||||
|
DEFSYM IMPERR==1000 ;* Imp Error (interrupt if IMPIC zero)
|
||||||
|
DEFSYM IMPR==2000 ;* Imp Ready (interrupt if IMPIC set)
|
||||||
|
;DEFSYM IMPIC==4000 ; Imp interrupt condition
|
||||||
|
; (0 = int on IMPERR, 1= int on IMPR)
|
||||||
|
DEFSYM IMPHER==10000 ;* Host Error (interrupt if IMPIHE zero)
|
||||||
|
;DEFSYM IMPHR==20000 ; Host Ready
|
||||||
|
;DEFSYM IMPIHE==40000 ; Inhibit interrupt on Host Error (IMPHER)
|
||||||
|
DEFSYM IMPLW==100000 ;* Last Imp Word
|
||||||
|
|
||||||
|
; CONO bits - starred flags are always copied directly to set states
|
||||||
|
;* 1.1-1.3 => PIA set from these bits
|
||||||
|
DEFSYM IMPIDC==10 ; Clear Input Done
|
||||||
|
DEFSYM IMI32S==20 ; Set input to 32 bit mode
|
||||||
|
DEFSYM IMI32C==40 ; Clear input in 32 bit mode
|
||||||
|
DEFSYM IMPODC==100 ; Clear Output Done
|
||||||
|
DEFSYM IMO32S==200 ; Set output to 32 bit mode
|
||||||
|
DEFSYM IMO32C==400 ; Clear output in 32 bit mode
|
||||||
|
DEFSYM IMPODS==1000 ; Set Output Done
|
||||||
|
DEFSYM IMPIR==4000 ;* Copied to IMPIC; 1= Enable int on imp ready
|
||||||
|
DEFSYM IMPHEC==10000 ; Clear Host Error
|
||||||
|
;DEFSYM IMIIHE==40000 ;* Copied to IMPIHE
|
||||||
|
; 1= Inhibit int on host error
|
||||||
|
DEFSYM IMPLHW==200000 ; Set Last Host Word
|
||||||
|
; (do this before last DATAO of msg)
|
||||||
|
IFN $$TEMP,EXPUNG DEFSYM
|
||||||
561
src/system/ksdefs.193
Executable file
561
src/system/ksdefs.193
Executable file
@@ -0,0 +1,561 @@
|
|||||||
|
; -*- Midas -*- This is the file AI:KSHACK;KSDEFS >
|
||||||
|
|
||||||
|
;;; "Devices"
|
||||||
|
|
||||||
|
PI==:4 ;Interrupts
|
||||||
|
PAG==:10 ;Paging
|
||||||
|
..D010==:0 ;(For DDT)
|
||||||
|
.RD.==:20 ;Read various kludges.
|
||||||
|
..D020==:0
|
||||||
|
.WR.==:24 ;Write various kludges.
|
||||||
|
..D024==:0
|
||||||
|
|
||||||
|
;;; XCTR and paging instructions
|
||||||
|
|
||||||
|
UMOVE=:704^9 ;"BLKI 40,"
|
||||||
|
;Same as XCTR XR,[MOVE ...]
|
||||||
|
|
||||||
|
UMOVEM=:705^9 ;"BLKI 50,"
|
||||||
|
;Same as XCTR XW,[MOVEM ...]
|
||||||
|
|
||||||
|
XCTR=:103^9 ;XCT with mapping.
|
||||||
|
XCTRI=:102^9 ;Same, but page fails cause it to skip. Done by
|
||||||
|
;software as on the KL.
|
||||||
|
;;XCTR bits for the KS are theoretically the same as those on the KL.
|
||||||
|
;;These values were generated by reading the documentation rather
|
||||||
|
;;than by copying the bits for XCTR on MC.
|
||||||
|
XR==:4
|
||||||
|
XW==:4
|
||||||
|
XRW==:4
|
||||||
|
XBYTE==:7 ;On MC-KL this is 5. The manual don't list 5 as a
|
||||||
|
;reasonable value at all. The 2 bit causes the EA
|
||||||
|
;calculation for the byte pointer to take place in
|
||||||
|
;the user's context. Since ITS does the EA
|
||||||
|
;calculation for byte pointers it XCTRs ahead of
|
||||||
|
;time, perhaps it doesn't matter?
|
||||||
|
XBR==:1
|
||||||
|
XBW==:4
|
||||||
|
XBRW==:5
|
||||||
|
XEA==:10 ; On MC-KL this is #o16. The processor manual for
|
||||||
|
; the KL contains some waffling about how 10 won't
|
||||||
|
; work and you should use 14 instead. The KS
|
||||||
|
; manual is silent on this point. Seemingly no
|
||||||
|
; bits other than 10 can effect an immediate
|
||||||
|
; instruction. This option doesn't exist on the KA
|
||||||
|
; and is used by ITS in only two places, both in
|
||||||
|
; the KL-specific page fail code. One occurance is
|
||||||
|
; commented out with the claim that it is buggy.
|
||||||
|
; For the moment let us assume that this value will
|
||||||
|
; just work on the KS.
|
||||||
|
|
||||||
|
;;; Traditional instructions.
|
||||||
|
|
||||||
|
RDAPR==:CONI 0, ;= 700240,, C(E) <- System flags
|
||||||
|
;4.3 - 3.5 Flags enabled
|
||||||
|
; (on KL 2.8 says the cache is being swept)
|
||||||
|
;2.3 - 1.5 Flags set
|
||||||
|
;1.4 Some flag is interrupting
|
||||||
|
;1.3 - 1.1 PI level
|
||||||
|
|
||||||
|
WRAPR==:CONO 0, ;= 700200,, System flags <- E
|
||||||
|
; (on KL 2.8 Clears all IO devices)
|
||||||
|
;2.7 - 2.4 Function to perform on flags:
|
||||||
|
; 2.7 Enable
|
||||||
|
; 2.6 Disable
|
||||||
|
; 2.5 Clear
|
||||||
|
; 2.4 Set
|
||||||
|
;2.3 - 1.5 Flags to perform function upon:
|
||||||
|
; 2.3 "Flag 24"
|
||||||
|
; 2.2 KS interrupting the 8080
|
||||||
|
; 2.1 Power failure
|
||||||
|
; 1.9 No memory
|
||||||
|
; 1.8 Bad memory data
|
||||||
|
; 1.7 Corrected memory data
|
||||||
|
; 1.6 Interval done
|
||||||
|
; 1.5 8080 interrupting the KS
|
||||||
|
; (on KL flags are:
|
||||||
|
; 2.3 S bus error
|
||||||
|
; 2.2 No memory
|
||||||
|
; 2.1 IO page failure
|
||||||
|
; 1.9 MB parity
|
||||||
|
; 1.8 Cache directory parity
|
||||||
|
; 1.7 Address parity
|
||||||
|
; 1.6 Power failure
|
||||||
|
; 1.5 Cache sweep done)
|
||||||
|
;1.3 - 1.1 PI level
|
||||||
|
|
||||||
|
80INT==:12000 ;Interrupt 8080 from KS.
|
||||||
|
|
||||||
|
RDPI==:CONI PI, ;= 700640,, C(E) <- PI status
|
||||||
|
;3.7 - 3.1 interrupts requested with CONO PI,
|
||||||
|
; (on KL 2.9 - 2.7 control parity)
|
||||||
|
;2.6 - 1.9 Interrupt in progress
|
||||||
|
;1.8 PI system is on
|
||||||
|
;1.7 - 1.1 Levels turned on
|
||||||
|
|
||||||
|
WRPI==:CONO PI, ;= 700600,, PI status <- E
|
||||||
|
; (on KL 2.9 - 2.7 control parity)
|
||||||
|
;2.5 Drop requests on selected levels
|
||||||
|
;2.4 Clear PI system
|
||||||
|
;2.3 Initiate interrupts on selected levels
|
||||||
|
;2.2 Turn on selected levels
|
||||||
|
;2.1 Turn off selected levels
|
||||||
|
;1.9 Turn off PI system
|
||||||
|
;1.8 Turn on PI system
|
||||||
|
;1.7 - 1.1 Select level
|
||||||
|
|
||||||
|
;;; More traditional looking instructions, sort of...
|
||||||
|
|
||||||
|
APRID==:BLKI 0, ;= 700000,, C(E) <- Processor ID
|
||||||
|
;4.9 - 4.1 Microcode options:
|
||||||
|
; 4.5 ITS microcode
|
||||||
|
; (on KL options are:
|
||||||
|
; 4.9 Tops-20 Paging
|
||||||
|
; 4.8 Extended addressing
|
||||||
|
; 4.7 Exotic microcode
|
||||||
|
; 4.5 ITS microcode)
|
||||||
|
;3.9 - 3.1 Microcode version number
|
||||||
|
;2.9 - 2.7 Hardware options:
|
||||||
|
; None defined.
|
||||||
|
; (on KL options are:
|
||||||
|
; 2.9 50 Hz line frequency
|
||||||
|
; 2.8 Cache
|
||||||
|
; 2.7 Channel
|
||||||
|
; 2.6 Extended KL10
|
||||||
|
; 2.5 Master Oscillator)
|
||||||
|
;2.6 - 1.1 Processor serial number
|
||||||
|
|
||||||
|
RDEBR=:CONI PAG, ;= 701240,, C(E) <- EBR
|
||||||
|
WREBR=:CONO PAG, ;= 701200,, EBR <- E
|
||||||
|
;2.6 Tops-20 style
|
||||||
|
;2.5 Enable pager (and traps)
|
||||||
|
;2.2 - 1.1 EBR physical DEC page number
|
||||||
|
;WREBR resets the cache and page table.
|
||||||
|
;
|
||||||
|
; In the ITS microcode setting bit 2.6 only effects
|
||||||
|
; the style in which MUUOs are trapped. It should
|
||||||
|
; never be set.
|
||||||
|
|
||||||
|
RDUBR=:DATAI PAG, ;= 701040,, C(E) <- UBR
|
||||||
|
WRUBR=:DATAO PAG, ;= 701140,, UBR <- C(E)
|
||||||
|
;4.9 Set AC blocks
|
||||||
|
;4.7 Set UBR
|
||||||
|
;4.3 - 4.1 Current ACs
|
||||||
|
;3.9 - 3.7 Previous ACs
|
||||||
|
;3.2 - 1.1 UBR physical base address
|
||||||
|
;RDUBR always returns a word with 4.9 and 4.7 set.
|
||||||
|
;WRUBR resets the cache and page table.
|
||||||
|
|
||||||
|
CLRPT=:BLKO PAG, ;= 701100,, Clear page table entry
|
||||||
|
;Invalidate the page table entry for the page
|
||||||
|
;referenced by E and reset the cache.
|
||||||
|
;
|
||||||
|
;In the ITS microcode this will only invalidate the
|
||||||
|
;page table entry for half page referenced by E.
|
||||||
|
|
||||||
|
CLRCSH=:BLKI PAG, ;= 701000,, Clear Cache
|
||||||
|
;In the ITS microcode only.
|
||||||
|
;Resets the cache.
|
||||||
|
|
||||||
|
|
||||||
|
;;; Instructions for maintaining the DBRs. LPMR and SPM.
|
||||||
|
|
||||||
|
LDBR1=:BLKI .WR., ;= 702400,, DBR1 <- E
|
||||||
|
SDBR1=:BLKI .RD., ;= 702000,, C(E) <- DBR1
|
||||||
|
LDBR2=:DATAI .WR., ;= 702440,, DBR2 <- E
|
||||||
|
SDBR2=:DATAI .RD., ;= 702040,, C(E) <- DBR2
|
||||||
|
LDBR3=:BLKO .WR., ;= 702500,, DBR3 <- E
|
||||||
|
SDBR3=:BLKO .RD., ;= 702100,, C(E) <- DBR3
|
||||||
|
LDBR4=:DATAO .WR., ;= 702540,, DBR4 <- E
|
||||||
|
SDBR4=:DATAO .RD., ;= 702140,, C(E) <- DBR4
|
||||||
|
;LDBR1, LDBR2, LDBR3 and LDBR4 all reset the cache
|
||||||
|
;and page table. someday they may be careful and
|
||||||
|
;not reset the half of the page table they don't
|
||||||
|
;effect.
|
||||||
|
|
||||||
|
;;; And there is also the traditional:
|
||||||
|
|
||||||
|
LPMR=:CONSO .WR., ;702740,, DBR1, DBR2, ... <- C(E, E+1, ...)
|
||||||
|
SPM=:CONSO .RD., ;702340,, C(E, E+1, ...) <- DBR1, DBR2, ...
|
||||||
|
;The format of the block read and written by these
|
||||||
|
;two instructions is:
|
||||||
|
; (E) DBR1
|
||||||
|
; (E+1) DBR2
|
||||||
|
; (E+2) Quantum timer
|
||||||
|
; (E+3) U.JPC (If this ucode supports it)
|
||||||
|
; (E+4) E.JPC ( " " )
|
||||||
|
;LPMR resets the cache and page table.
|
||||||
|
|
||||||
|
RDTIM=:CONO .RD., ;= 702200,, C(E, E+1) <- Time
|
||||||
|
WRTIM=:CONO .WR., ;= 702600,, Time <- C(E, E+1)
|
||||||
|
; The time is a 71. bit unsigned number. The bottom
|
||||||
|
; 12. bits cannot be set. The bottom 2 bits cannot
|
||||||
|
; even be read. It increments at 4.1 MHz. The top
|
||||||
|
; 59. bits (the ones you can set) thus measure
|
||||||
|
; (almost) milliseconds. The top 69. bits (the
|
||||||
|
; ones you can read) thus measure "short"
|
||||||
|
; microseconds. The time wraps around every 18.
|
||||||
|
; million years. To make the top 59. bits actually
|
||||||
|
; measure milliseconds, the clock would have to run
|
||||||
|
; at 4.096 MHz. However it -really- -does- run at
|
||||||
|
; exactly 4.1 MHz!
|
||||||
|
|
||||||
|
RDINT=:CONI .RD., ;= 702240,, C(E) <- Interval
|
||||||
|
WRINT=:CONI .WR., ;= 702640,, Interval <- C(E)
|
||||||
|
;The interval is a 35. bit number in the same units
|
||||||
|
;as the time. At the end of every interval the
|
||||||
|
;interval done interrupt occurs (CONI APR, bit
|
||||||
|
;1.5). The biggest interval you can set is about 2
|
||||||
|
;hours and 20 minutes. In the DEC microcode the
|
||||||
|
;interval is effectively rounded up to the next
|
||||||
|
;millisecond, so it is really only worth your while
|
||||||
|
;to set the top 23. bits. In the ITS microcode all
|
||||||
|
;bits of the interval are signifigant. Although
|
||||||
|
;the length of a -single- interval cannot be
|
||||||
|
;controlled more accurately than under the DEC
|
||||||
|
;microcode, the average time between interval done
|
||||||
|
;interrupts should converge to the full 35. bit
|
||||||
|
;value.
|
||||||
|
|
||||||
|
RDHSB=:CONSZ .RD., ;= 702300,, C(E) <- HSB base address
|
||||||
|
WRHSB=:CONSZ .WR., ;= 702700,, HSB base address <- C(E)
|
||||||
|
;4.9 Base address is invalid. If this is set
|
||||||
|
; nothing will be written anywhere when the
|
||||||
|
; machine halts.
|
||||||
|
;3.1 - 1.1 Physical address of first location in
|
||||||
|
; which to store debugging info when the
|
||||||
|
; machine halts.
|
||||||
|
;In the ITS microcode, the initial HSB base address
|
||||||
|
; is #o500.
|
||||||
|
;When the machine halts it stores a halt code in
|
||||||
|
; physical location 0 and the PC in location 1.
|
||||||
|
; Then if 4.9 is not set (and the machine has not
|
||||||
|
; just powered on) the contents of the 2901's
|
||||||
|
; registers are dumped in the halt status block,
|
||||||
|
; followed by the VMA.
|
||||||
|
|
||||||
|
;;; Halt Codes
|
||||||
|
|
||||||
|
;CODES 0 TO 77 ARE "NORMAL" HALTS
|
||||||
|
; POWER=0 ;POWER UP
|
||||||
|
; HALT=1 ;HALT INSTRUCTION
|
||||||
|
; CSL=2 ;CONSOLE HALT
|
||||||
|
;CODES 100 TO 777 ARE SOFTWARE ERRORS
|
||||||
|
; IOPF=100 ;I/O PAGE FAIL
|
||||||
|
; ILLII=101 ;ILLEGAL INTERRUPT INSTRUCTION
|
||||||
|
; ILLINT=102 ;BAD POINTER TO UNIBUS INTERRUPT VECTOR
|
||||||
|
;CODES 1000 TO 1777 ARE HARDWARE ERRORS
|
||||||
|
; BW14=1000 ;ILLEGAL BWRITE FUNCTION (BAD DROM)
|
||||||
|
; NICOND 5=1004 ;ILLEGAL NICOND DISPATCH
|
||||||
|
; MULERR=1005 ;VALUE COMPUTED FOR 10**21 WAS WRONG
|
||||||
|
|
||||||
|
;;; Halt Status Block definition
|
||||||
|
|
||||||
|
IFNDEF HSB, HSB==:500
|
||||||
|
HSBMAG=:HSB+0
|
||||||
|
HSBPC=:HSB+1
|
||||||
|
HSBHR=:HSB+2
|
||||||
|
HSBAR=:HSB+3
|
||||||
|
HSBARX=:HSB+4
|
||||||
|
HSBBR=:HSB+5
|
||||||
|
HSBBRX=:HSB+6
|
||||||
|
HSBONE=:HSB+7
|
||||||
|
HSBEBR=:HSB+10
|
||||||
|
HSBUBR=:HSB+11
|
||||||
|
HSBMASK=:HSB+12
|
||||||
|
HSBFLG=:HSB+13
|
||||||
|
HSBPI=:HSB+14
|
||||||
|
HSBXWD1=:HSB+15
|
||||||
|
HSBT0=:HSB+16
|
||||||
|
HSBT1=:HSB+17
|
||||||
|
HSBVMA=:HSB+20
|
||||||
|
|
||||||
|
;;; ITS I/O instructions.
|
||||||
|
|
||||||
|
UBAQ==:1 ; QSK is on Unibus #1
|
||||||
|
UBAI==:3 ; Everything else is on Unibus #3
|
||||||
|
|
||||||
|
IORDI=:710^9 ; C(AC) <- IO(UBAI,,E)
|
||||||
|
IORDQ=:711^9 ; C(AC) <- IO(UBAQ,,E)
|
||||||
|
IORD=:712^9 ; C(AC) <- IO(C(E))
|
||||||
|
IOWR=:713^9 ; IO(C(E)) <- C(AC)
|
||||||
|
IOWRI=:714^9 ; IO(UBAI,,E) <- C(AC)
|
||||||
|
IOWRQ=:715^9 ; IO(UBAQ,,E) <- C(AC)
|
||||||
|
|
||||||
|
IORDBI=:720^9
|
||||||
|
IORDBQ=:721^9
|
||||||
|
IORDB=:722^9
|
||||||
|
IOWRB=:723^9
|
||||||
|
IOWRBI=:724^9
|
||||||
|
IOWRBQ=:725^9
|
||||||
|
|
||||||
|
;;; Byte packing and unpacking instructions.
|
||||||
|
|
||||||
|
;;; These are new with microcode 262, but came from DEC.
|
||||||
|
;;; Variations of BLT that the convert format of each word moved.
|
||||||
|
;;; These are legal in user mode, too. Good thing DECUUO doesn't use them.
|
||||||
|
BLTBU=:716^9 ;Source 8-bit bytes, Destination Unibus format
|
||||||
|
BLTUB=:717^9 ;Source Unibus format, Destination 8-bit bytes
|
||||||
|
|
||||||
|
;;; Future byte packing and unpacking instructions
|
||||||
|
|
||||||
|
;;; =:730^9
|
||||||
|
;;; =:731^9
|
||||||
|
;;; =:732^9
|
||||||
|
;;; =:733^9
|
||||||
|
;;; =:734^9
|
||||||
|
;;; =:735^9
|
||||||
|
;;; =:736^9
|
||||||
|
;;; =:737^9
|
||||||
|
|
||||||
|
;;; Format of ITS page fail word:
|
||||||
|
|
||||||
|
%PF==:1,,525252 ;Left handed bits.
|
||||||
|
%PFUSR==:400000 ;4.9 Indicates user address space.
|
||||||
|
%PFNXI==:200000 ;4.8 Nonexistent IO register.
|
||||||
|
%PFNXM==:100000 ;4.7 Nonexistent memory.
|
||||||
|
%PFPAR==:040000 ;4.6 Uncorrectable memory error.
|
||||||
|
; (AC0 in block 7 has the word unless 4.7 is
|
||||||
|
; also set.)
|
||||||
|
;4.5
|
||||||
|
%PFWRT==:010000 ;4.4 Soft fault reference called for writing.
|
||||||
|
%PF2.9==:004000 ;4.3 - 4.2 Access bits for referenced page in soft
|
||||||
|
%PF2.8==:002000 ; fault.
|
||||||
|
%PFPHY==:001000 ;4.1 Address given was physical.
|
||||||
|
;3.9
|
||||||
|
%PFIO==:000200 ;3.8 Indicates an IO operation.
|
||||||
|
;3.7
|
||||||
|
;3.6
|
||||||
|
%PFBYT==:000020 ;3.5 Indicates a byte IO operation.
|
||||||
|
;3.4 - 1.1 IO address
|
||||||
|
; or
|
||||||
|
;3.1 - 1.1 Memory address
|
||||||
|
$PFPNO==:121000 ;2.9 - 2.2 Virtual page number
|
||||||
|
|
||||||
|
;;; Format of ITS page table entry:
|
||||||
|
|
||||||
|
;2.9 - 2.8 Access bits
|
||||||
|
; 00 Inaccessible
|
||||||
|
; 01 Read only
|
||||||
|
; 10 Read/Write/First
|
||||||
|
; 11 Read/Write
|
||||||
|
PMAGEM==:020000 ;2.5 Age bit
|
||||||
|
PMCSHM==:010000 ;2.4 Cache enable bit
|
||||||
|
PMRCM==:001777 ;2.1 - 1.1 Physical page number
|
||||||
|
; (The page table supports 20 bit physical
|
||||||
|
; addresses.)
|
||||||
|
PMUNSD==:146000 ;Unused bits
|
||||||
|
|
||||||
|
;;; UPT Offsets
|
||||||
|
;;; In non-time sharing and at clock level in ITS UPT=EPT.
|
||||||
|
|
||||||
|
UPTTR1==:421 ;Exec mode arith ovfl trap.
|
||||||
|
UPTTR2==:422 ;Exec mode pdl ov trap.
|
||||||
|
UPTTR3==:423 ;Exec mode trap 3 in non-one-proceed microcode.
|
||||||
|
|
||||||
|
UPTUUO==:424 ;MUUO stored here.
|
||||||
|
UPTUPC==:425 ;MUUO old PC stored here.
|
||||||
|
UPTUCX==:426 ;MUUO context (from RDUBR (= DATAI PAG,)) stored here.
|
||||||
|
|
||||||
|
;;; 427 ;Unused.
|
||||||
|
|
||||||
|
UPTUEN==:430 ;MUUO new PC obtained from here in exec mode when
|
||||||
|
;traps are not enabled. (MUUO as a trap
|
||||||
|
;instruction for example.)
|
||||||
|
UPTUET==:431 ;MUUO new PC obtained from here in exec mode when
|
||||||
|
;traps are enabled.
|
||||||
|
|
||||||
|
UPT1PO==:432 ;One-proceed old PC stored here in one-proceed
|
||||||
|
;microcode.
|
||||||
|
UPT1PN==:433 ;One-proceed new PC obtained from here in
|
||||||
|
;one-proceed microcode.
|
||||||
|
|
||||||
|
UPTUUN==:434 ;MUUO new PC obtained from here in user mode when
|
||||||
|
;traps are not enabled.
|
||||||
|
UPTUUT==:435 ;MUUO new PC obtained from here in user mode when
|
||||||
|
;traps are enabled.
|
||||||
|
|
||||||
|
;;; 436 ;Unused.
|
||||||
|
;;; 437 ;Unused.
|
||||||
|
|
||||||
|
;;; EPT Locations
|
||||||
|
|
||||||
|
IFNDEF EPT, EPT==:0 ;Absolute location of EPT.
|
||||||
|
|
||||||
|
PI0LOC=:EPT+40 ;PI0LOC+2*PICHN = Address of instr pair for PICHN.
|
||||||
|
IRP I,,[1,2,3,4,5,6,7]
|
||||||
|
PI!I!LOC=:PI0LOC+<2*I>
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
EPTUIT=:EPT+100 ;EPTUIT+I contains address of the interrupt table
|
||||||
|
; for unibus adapter I. Only adapters 1 and 3 ever
|
||||||
|
; exist.
|
||||||
|
|
||||||
|
EPTTR1=:EPT+421 ;Exec mode arith ovfl trap.
|
||||||
|
EPTTR2=:EPT+422 ;Exec mode pdl ov trap.
|
||||||
|
EPTTR3=:EPT+423 ;Exec mode trap 3 (1 proceed?).
|
||||||
|
|
||||||
|
;;; When EPT = UPT the following are useful to have defined:
|
||||||
|
|
||||||
|
EPTUUO=:EPT+UPTUUO
|
||||||
|
EPTUPC=:EPT+UPTUPC
|
||||||
|
EPTUCX=:EPT+UPTUCX
|
||||||
|
EPTUEN=:EPT+UPTUEN
|
||||||
|
EPTUET=:EPT+UPTUET
|
||||||
|
EPT1PO=:EPT+UPT1PO
|
||||||
|
EPT1PN=:EPT+UPT1PN
|
||||||
|
EPTUUN=:EPT+UPTUUN
|
||||||
|
EPTUUT=:EPT+UPTUUT
|
||||||
|
|
||||||
|
;;; In the ITS microcode the three words used to deliver a page fail are
|
||||||
|
;;; determined from the current interrupt level. At level I, the page fail
|
||||||
|
;;; word is stored in EPTPFW+<3*I>, the old PC is stored in EPTPFO+<3*I>,
|
||||||
|
;;; and the new PC is obtained from EPTPFN+<3*I>. If no interrupts are in
|
||||||
|
;;; progress we just use EPTPFW, EPTPFO and EPTPFN.
|
||||||
|
|
||||||
|
EPTPFW=:EPT+440 ;Page fail word stored here.
|
||||||
|
EPTPFO=:EPT+441 ;Page fail old PC stored here.
|
||||||
|
EPTPFN=:EPT+442 ;Page fail new PC obtained from here.
|
||||||
|
|
||||||
|
IRP I,,[1,2,3,4,5,6,7]
|
||||||
|
EPTP!I!W=:EPTPFW+<3*I>
|
||||||
|
EPTP!I!O=:EPTPFO+<3*I>
|
||||||
|
EPTP!I!N=:EPTPFN+<3*I>
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
;;; 8080 communication area
|
||||||
|
|
||||||
|
8SWIT0=:30 ;Simulated switch 0. Set by 8080 SH command.
|
||||||
|
8KALIV=:31 ;Keep Alive & Status.
|
||||||
|
8CTYIN=:32 ;CTY input.
|
||||||
|
8CTYOT=:33 ;CTY output.
|
||||||
|
8KLKIN=:34 ;KLINIK user input word (from 8080).
|
||||||
|
8KLKOT=:35 ;KLINIK user output word (to 8080).
|
||||||
|
8RHBAS=:36 ;BOOT RH11 base address.
|
||||||
|
8QNUM=:37 ;BOOT Unit Number.
|
||||||
|
8BOOTP=:40 ;Magtape Boot Format and Slave Number.
|
||||||
|
|
||||||
|
;;; 8080 front end (FE) filesystem format
|
||||||
|
|
||||||
|
;;; Disk addresses for the 8080 are stored in 36-bit words in "FE format":
|
||||||
|
;;; (These fields are larger than those given in the DEC document because
|
||||||
|
;;; the cylinder field given there is too small! These numbers reflect the
|
||||||
|
;;; way that the 8080 manipulates 8 bit quantities instead.)
|
||||||
|
%88==:777700,,177400
|
||||||
|
%88CYL==:100,,
|
||||||
|
$88CYL==:301400,, ; 4.9 - 3.7 Cylinder
|
||||||
|
%88TRK==:400
|
||||||
|
$88TRK==:101000,, ; 2.7 - 1.9 Track
|
||||||
|
%88SEC==:1
|
||||||
|
$88SEC==:001000,, ; 1.8 - 1.1 Sector
|
||||||
|
|
||||||
|
;;; The 8080 looks for the "home sector" on cylinder 0, track 0, sector 1.
|
||||||
|
;;; If it fails to find it there it tries sector 10. The home sector is
|
||||||
|
;;; recognized by having SIXBIT /HOM/ in location 0. Location 103 of the
|
||||||
|
;;; home sector contains an FE format address of the first sector of the
|
||||||
|
;;; "FE directory", which is 1000 words (4 sectors) long. Odd numbered
|
||||||
|
;;; locations in the FE directory are not looked at by the 8080. Even
|
||||||
|
;;; numbered locations contain FE format addresses of the first sector of
|
||||||
|
;;; the various "FE files". The following are apparently the only FE files
|
||||||
|
;;; used by the 8080:
|
||||||
|
88RAM==:2 ; Microcode. Always 6 blocks long.
|
||||||
|
; The rest are always 1000 words long. (1/2 block)
|
||||||
|
88BT==:4 ; Bootstrap used by BT command and autoboot.
|
||||||
|
88BT1==:6 ; Bootstrap used by BT1 command.
|
||||||
|
88B2==:12 ; Bootstrap used by B2 command.
|
||||||
|
88FI0==:22 ; First indirect file. Contains a sequence of
|
||||||
|
; 8-bit bytes containing ASCII characters packed
|
||||||
|
; backwards and right justified:
|
||||||
|
; -------------------------------
|
||||||
|
; | 0's | 4th | 3rd | 2nd | 1st |
|
||||||
|
; -------------------------------
|
||||||
|
; The 8080 stops on a zero byte (or perhaps 377?).
|
||||||
|
; Lines must be no longer than 80 characters.
|
||||||
|
; Lines are separated by a single ^M.
|
||||||
|
;
|
||||||
|
; Additional indirect files follow. FIn either
|
||||||
|
; runs the file at 88FI0+n or at 88FI0+2*n, I can't
|
||||||
|
; tell which.
|
||||||
|
|
||||||
|
;;; Note that the only thing described here that doesn't fit inside a
|
||||||
|
;;; single ITS block is the microcode. All we need from the filesystem are
|
||||||
|
;;; the first 2 blocks (for the home sector and the alternate home sectors)
|
||||||
|
;;; and 6 contiguous blocks elsewhere (for the microcode).
|
||||||
|
|
||||||
|
;;; External register addresses
|
||||||
|
|
||||||
|
KSECCS==:100000 ;Memory Status Register (Controller 0)
|
||||||
|
%KE==:1,,520040 ; Left half bits. Right half unnamed.
|
||||||
|
; [R=Read, W=Write, C=Cleared by writing a 1]
|
||||||
|
%KEHLD==:400000 ; 4.9 Error currently being held [R/C]
|
||||||
|
%KEUNC==:200000 ; 4.8 Uncorrectable error [R]
|
||||||
|
%KEREF==:100000 ; 4.7 Refresh error [R/C]
|
||||||
|
%KEPAR==:040000 ; 4.6 Parity error [R/W]
|
||||||
|
%KEENA==:020000 ; 4.5 ECC enabled [R]
|
||||||
|
%KEECC==:017700 ; 4.4 - 3.7 ECC bits [R]
|
||||||
|
%KEPWR==:000040 ; 3.6 Memory backup power is low [R/C]
|
||||||
|
; 3.4 - 1.1 Error address [R]
|
||||||
|
; 1.8 - 1.2 Force ECC bits if non-zero [W]
|
||||||
|
; 1.1 Disable ECC [W]
|
||||||
|
|
||||||
|
;; The 7 ECC bits are decoded as follows: The top bit is a parity bit for
|
||||||
|
;; the bottom 6. The bottom 6 are decoded:
|
||||||
|
;;
|
||||||
|
;; ECC code: Location of failing bit:
|
||||||
|
;;
|
||||||
|
;; 01 ECC 01 bit
|
||||||
|
;; 02 ECC 02 bit
|
||||||
|
;; 04 ECC 04 bit
|
||||||
|
;; 10 ECC 10 bit
|
||||||
|
;; 20 ECC 20 bit
|
||||||
|
;; 40 ECC 40 bit
|
||||||
|
;; 11 - 16 4.9 - 4.4
|
||||||
|
;; 21 - 26 4.3 - 3.7
|
||||||
|
;; 31 - 36 3.6 - 3.1
|
||||||
|
;; 41 - 46 2.9 - 2.4
|
||||||
|
;; 51 - 56 2.3 - 1.7
|
||||||
|
;; 61 - 66 1.6 - 1.1
|
||||||
|
|
||||||
|
UBAPAG==:763000 ;(to 763077) UBA Paging RAM (One per Unibus)
|
||||||
|
UBALEN==:64. ;Length of UBA Paging RAM
|
||||||
|
;When read:
|
||||||
|
%UP==:1,,525377 ; Left half bits.
|
||||||
|
%UPPAR==:020000 ; 4.5 RAM parity bit
|
||||||
|
%UPRPW==:010000 ; 4.4 Force read-pause-write
|
||||||
|
%UP16B==:004000 ; 4.3 Disable upper two bits on Unibus transfers
|
||||||
|
%UPFST==:002000 ; 4.2 Fast mode enable
|
||||||
|
%UPVAL==:001000 ; 4.1 Entry is valid
|
||||||
|
%UPPVL==:000400 ; 3.9 Parity is valid
|
||||||
|
$UPPAG==:121200,, ; 3.2 - 2.2 ITS page number
|
||||||
|
; 2.1 ITS half page
|
||||||
|
; 3.2 - 2.1 DEC page number
|
||||||
|
;When written:
|
||||||
|
%UQ==:0,,537777 ; Right half bits
|
||||||
|
%UQRPW==:400000 ; 2.9 Force read-pause-write
|
||||||
|
%UQ16B==:200000 ; 2.8 Disable upper two bits on Unibus transfers
|
||||||
|
%UQFST==:100000 ; 2.7 Fast mode enable
|
||||||
|
%UQVAL==:040000 ; 2.6 Entry is valid
|
||||||
|
; 2.2 - 1.2 ITS page number
|
||||||
|
; 1.1 ITS half page
|
||||||
|
; 2.2 - 1.1 DEC page number
|
||||||
|
|
||||||
|
UBASTA==:763100 ;UBA Status Register (One per Unibus)
|
||||||
|
; [R=Read, W=Write, C=Cleared by writing a 1,
|
||||||
|
; *=Cleared by any write]
|
||||||
|
%UB==:0,,525270 ; Right half bits.
|
||||||
|
%UBTIM==:400000 ; 2.9 Unibus timeout [R/C]
|
||||||
|
%UBBAD==:200000 ; 2.8 Bad mem data (on NPR transfer) [R/C]
|
||||||
|
; (Master will timeout instead if %UBDXF set)
|
||||||
|
%UBPAR==:100000 ; 2.7 KS10 bus parity error [R/C]
|
||||||
|
%UBNXD==:040000 ; 2.6 CPU addressed non-ex device [R/C]
|
||||||
|
%UBHIG==:004000 ; 2.3 Interrupt request on BR7 or BR6 (high) [R]
|
||||||
|
%UBLOW==:002000 ; 2.2 Interrupt request on BR5 or BR4 (low) [R]
|
||||||
|
%UBPWR==:001000 ; 2.1 Power low [R/*]
|
||||||
|
%UBDXF==:000200 ; 1.8 Disable tranfer on uncorrectable data [R/W]
|
||||||
|
%UBINI==:000100 ; 1.7 Issue Unibus init [W]
|
||||||
|
%UBPIH==:000070 ; 1.6 - 1.4 PI level for BR7 or BR6 (high) [R/W]
|
||||||
|
%UBPIL==:000007 ; 1.3 - 1.1 PI level for BR5 or BR4 (low) [R/W]
|
||||||
|
|
||||||
|
UBAMNT==:763101 ;UBA Maintenance (One per Unibus)
|
||||||
|
; 1.2 Spare maintenance bit (?)
|
||||||
|
; 1.1 Change NPR address (?)
|
||||||
58
src/system/ksnet.1
Executable file
58
src/system/ksnet.1
Executable file
@@ -0,0 +1,58 @@
|
|||||||
|
;;; Chaosnet interface on Unibus
|
||||||
|
|
||||||
|
CAICSR=3,,764140 ;COMMAND STATUS REG
|
||||||
|
CH%CSR==0
|
||||||
|
%CABSY==1 ;0 XMT BUSY (RO)
|
||||||
|
%CALUP==2 ;1 LOOP BACK (R/W)
|
||||||
|
%CASPY==4 ;2 RECIEVE MSGS FOR ANY DESTINATION (R/W)
|
||||||
|
%CARCL==10 ;3 CLEAR THE RECEIVER, IT CAN NOW GOBBLE ANOTHER MSG (WO)
|
||||||
|
%CAREN==20 ;4 RCV INT ENB (R/W)
|
||||||
|
%CATEN==40 ;5 XMT INT ENB (R/W)
|
||||||
|
%CATAB==100 ;6 TRANSMIT ABORTED BY ETHER CONFLICT (RO)
|
||||||
|
%CATDN==200 ;7 TRANSMIT DONE. SET WHEN TRANSMITTER IS DONE
|
||||||
|
%CATCL==400 ;8 CLEAR THE TRANSMITTER, MAKING IT READY (WO)
|
||||||
|
$CALOS==110400 ;9-12 LOST COUNT (RO) [# MSGS RCVED WITH RCV BFR FULL]
|
||||||
|
; WHEN MSG IS WAITING IN BUFFER, THIS COUNTS
|
||||||
|
; THE MESSAGES THAT MATCHED OUR DESTINATION OR
|
||||||
|
; WERE BROADCAST, BUT COULDN'T BE RECIEVED.
|
||||||
|
; WHEN RECEIVER IS RE-ENABLED (WRITE 1 INTO %CARDN)
|
||||||
|
; THE COUNT IS THEN CLEARED.
|
||||||
|
; WHEN A MESSAGE IS LOST, RECEIVER ZAPS ETHER
|
||||||
|
; SO TRANSMITTER WILL ABORT (IF MESSAGE WAS DESTINED
|
||||||
|
; TO US.)
|
||||||
|
%CARST==20000 ;13 I/O RESET (WO)
|
||||||
|
%CAERR==40000 ;14 CRC ERROR (RO)
|
||||||
|
%CARDN==100000 ;15 RCV DONE.
|
||||||
|
|
||||||
|
CAIMYN==3,,764142 ;MY # (READ ONLY)
|
||||||
|
CH%MYN==2 ;RETURNS THE [SOURCE] HOST# OF THIS INTERFACE.
|
||||||
|
|
||||||
|
CAIWBF=3,,764142 ;WRITE BUFFER (WRITE ONLY)
|
||||||
|
CH%WBF==2 ;FIRST WAIT FOR TDONE. (OR SET IT VIA CSR)
|
||||||
|
;FIRST WORD IN RESETS TRANSMITTER AND CLEARS TDONE.
|
||||||
|
;STORE INTO THIS REGISTER TO WRITE WORDS OF MESSAGE,
|
||||||
|
;LAST WORD IN IS DESTINATION ADDRESS, THEN READ CAIXMT.
|
||||||
|
;SOURCE ADDRESS AND CHECK WORD PUT IN BY HARDWARE.
|
||||||
|
|
||||||
|
CAIRBF=3,,764144 ;READ BUFFER (READ ONLY)
|
||||||
|
CH%RBF==4 ;THE FIRST WORD READ WILL BE FILLED TO THE LEFT
|
||||||
|
;TO MAKE THE MESSAGE RECIEVED A MULTIPLE OF 16 BITS.
|
||||||
|
;IF THE NUMBER OF DATA BITS IN THE MESSAGE WAS A
|
||||||
|
;MULTIPLE OF 16, THIS WORD WILL BE THE FIRST WORD PUT
|
||||||
|
;INTO THE BUFFER BY THE TRANSMITTING HOST.
|
||||||
|
;THE LAST 3 WORDS READ ARE DESTINATION, SOURCE, CHECK.
|
||||||
|
|
||||||
|
CAIRBC=3,,764146 ;RECEIVE BIT COUNTER (READ ONLY)
|
||||||
|
CH%RBC==6 ;WHEN A MESSAGE HAS BEEN RECEIVED THIS IS ONE LESS THAN
|
||||||
|
;THE NUMBER OF BITS IN THE MESSAGE (16 X THE
|
||||||
|
;NUMBER OF WORDS INCLUDING THE THREE OVERHEAD WORDS.)
|
||||||
|
;AFTER THE LAST WORD (THE CRC WORD) HAS BEEN READ, IT IS 7777
|
||||||
|
;BITS 10 AND 11 ARE THE HIGH ORDER BITS, AND IF THEY ARE ONE,
|
||||||
|
;THEN THERE WAS A BUFFER OVERFLOW
|
||||||
|
|
||||||
|
CAIXMT=3,,764152 ;READING THIS INITIATES TRANSMISSION (!!)
|
||||||
|
CH%XMT==12 ;THE VALUE READ IS ONE'S OWN HOST#.
|
||||||
|
|
||||||
|
;REFERENCING ADDRESSES IN THE GROUP OF 8 WORDS NOT LISTED HERE, OR
|
||||||
|
;USING COMBINATIONS OF READ/WRITE NOT LISTED HERE, WILL TYPICALLY CAUSE
|
||||||
|
;STRANGE AND BIZARRE EFFECTS.
|
||||||
80
src/system/lhdh.defs5
Executable file
80
src/system/lhdh.defs5
Executable file
@@ -0,0 +1,80 @@
|
|||||||
|
;;; -*- Mode: Midas -*-
|
||||||
|
.AUXIL
|
||||||
|
|
||||||
|
;;; Canonical symbol definition macro, FOO==BAR with error check.
|
||||||
|
IFNDEF DEFSYM,[
|
||||||
|
DEFINE DEFSYM X/
|
||||||
|
IRPS Z,,[X]
|
||||||
|
IFNDEF Z,X
|
||||||
|
.ELSE [ $$TEM1==Z
|
||||||
|
X
|
||||||
|
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
|
||||||
|
]
|
||||||
|
.ISTOP
|
||||||
|
TERMIN TERMIN
|
||||||
|
$$TEMP==1
|
||||||
|
] ;IFNDEF DEFSYM
|
||||||
|
.ELSE, $$TEMP==0
|
||||||
|
|
||||||
|
; The ACC IMP interface on the KS implements two separate Unibus IO
|
||||||
|
; devices, for input and output. Both of these devices transfer data in
|
||||||
|
; 32-bit mode only over the Unibus via DMA. Because of the DMA data
|
||||||
|
; transfer the interrupt structure is trivial, and uses NETCHN only.
|
||||||
|
;
|
||||||
|
; Apparently the reset bits in the two CSRs are wired together, so
|
||||||
|
; resetting one side of the machine resets both. This action also drops
|
||||||
|
; the HOST READY line to the IMP.
|
||||||
|
;
|
||||||
|
; You must set %LHSE whenever hte HOST READY line is high, or the IMP
|
||||||
|
; will be allowed to freely throw away data. This is true across IMP
|
||||||
|
; message boundaries, and even if no input request is active.
|
||||||
|
;
|
||||||
|
|
||||||
|
;ACC LH-DH IMP Interface Bits
|
||||||
|
|
||||||
|
;Interrupt information
|
||||||
|
DEFSYM %LHVEC==250 ;Input side interrupt vector (non-standard)
|
||||||
|
;Output side assumed to be %LHVEC+4
|
||||||
|
DEFSYM %LHPRI==6 ;Interrupt priority (non-standard)
|
||||||
|
|
||||||
|
DEFSYM %LHBAS==767600 ;Base of LH/DH Unibus register address space
|
||||||
|
|
||||||
|
;Unibus Registers
|
||||||
|
DEFSYM %LHICS=:%LHBAS ;Control and Status, Input side
|
||||||
|
DEFSYM %LHIDB=:%LHBAS+2 ;Data Buffer, Input
|
||||||
|
DEFSYM %LHICA=:%LHBAS+4 ;Current Word Address, Input
|
||||||
|
DEFSYM %LHIWC=:%LHBAS+6 ;Word Count, Input
|
||||||
|
|
||||||
|
DEFSYM %LHOCS=:%LHBAS+10 ;Control and Status, Output side
|
||||||
|
DEFSYM %LHODB=:%LHBAS+12 ;Data Buffer, Output
|
||||||
|
DEFSYM %LHOCA=:%LHBAS+14 ;Current Word Address, Output
|
||||||
|
DEFSYM %LHOWC=:%LHBAS+16 ;Word Count, Output
|
||||||
|
|
||||||
|
;Bits in CSRs
|
||||||
|
; Bits common to input and output
|
||||||
|
DEFSYM %LHERR==1_15. ;Error present
|
||||||
|
DEFSYM %LHNXM==1_14. ;Non Existant Memory on DMA
|
||||||
|
DEFSYM %LHMRE==1_9. ;Master Ready Error (ready bounce during xfr)
|
||||||
|
DEFSYM %LHRDY==1_7. ;Device Ready (modifying LHDH regs allowed)
|
||||||
|
DEFSYM %LHIE==1_6. ;Interrupt Enable
|
||||||
|
DEFSYM %LHA17==1_5. ;Address bit 17 for extended unibus xfrs
|
||||||
|
DEFSYM %LHA16==1_4. ;Address bit 16 for extended unibus xfrs
|
||||||
|
DEFSYM %LHRST==1_1. ;Interface Reset
|
||||||
|
DEFSYM %LHGO==1 ;GO - Start DMA Transfer
|
||||||
|
|
||||||
|
; Input side
|
||||||
|
DEFSYM %LHEOM==1_13. ;End-of-Message received from IMP
|
||||||
|
DEFSYM %LHHR==1_11. ;Host Ready (ACC's relay closed, debounced)
|
||||||
|
DEFSYM %LHINR==1_10. ;IMP not ready
|
||||||
|
DEFSYM %LHIBF==1_8. ;Input Buffer Full
|
||||||
|
DEFSYM %LHSE==1_3. ;Store Enable (0 == flush data instead)
|
||||||
|
DEFSYM %LHHRC==1_2. ;Host Ready Relay Control (1 to close relay)
|
||||||
|
|
||||||
|
; Output side
|
||||||
|
DEFSYM %LHWC0==1_13. ;Output Word Count is zero
|
||||||
|
DEFSYM %LHOBE==1_8. ;Output Buffer Empty
|
||||||
|
DEFSYM %LHBB==1_3. ;Bus Back (loopback enable for testing)
|
||||||
|
DEFSYM %LHELB==1_2. ;Send EOM indication to IMP at end of xfr
|
||||||
|
; (enable Last Bit Flag)
|
||||||
|
IFN $$TEMP,EXPUNG DEFSYM
|
||||||
|
|
||||||
1461
src/system/mtape.197
Executable file
1461
src/system/mtape.197
Executable file
File diff suppressed because it is too large
Load Diff
2761
src/system/ncp.9
Executable file
2761
src/system/ncp.9
Executable file
File diff suppressed because it is too large
Load Diff
501
src/system/net.32
Executable file
501
src/system/net.32
Executable file
@@ -0,0 +1,501 @@
|
|||||||
|
;; For ITS network stuff, the following parameters are defined:
|
||||||
|
;
|
||||||
|
; NETP - General network code (net independent, both CHAOS, NCP, TCP, etc)
|
||||||
|
; INETP - Internet Protocol code. Must have IMPP or some other device.
|
||||||
|
; NCPP - Include NCP code (IMPP must be on)
|
||||||
|
; TCPP - Include TCP code (INETP must be on)
|
||||||
|
|
||||||
|
; CHAOSP - Include CHAOS net code
|
||||||
|
; - other CHAOS stuff, all independent of internet stuff.
|
||||||
|
|
||||||
|
NE%UNT==:<1_32.> ; Escape bit indicating non-Internet address
|
||||||
|
NW$BYT==:301400 ; Byte pointer to network number (approx!)
|
||||||
|
NE%STR==:<1_33.> ; Escape bit indicating string-type address
|
||||||
|
|
||||||
|
DEFINE HOSTN A,B,C,D
|
||||||
|
.RADIX 10.,<<<<<A_8>+B>_8>+C>_8>+D,!TERMIN
|
||||||
|
|
||||||
|
; HOSTS3 full word network # values for certain networks
|
||||||
|
|
||||||
|
NW%CHS==:<NE%UNT+<7_24.>>
|
||||||
|
NW%ARP==:<12_24.>
|
||||||
|
NW%LCS==:<22_24.>
|
||||||
|
NW%AI==:HOSTN 128,52,0,0
|
||||||
|
|
||||||
|
DEFINE GETNET AC,(ADDR) ; Macro to extract net number
|
||||||
|
IFNB [ADDR] MOVE AC,ADDR
|
||||||
|
TLNN AC,(17_32.) ; Check for non-Internet type addrs
|
||||||
|
TLNN AC,(1_31.) ; Internet address, see if class A net
|
||||||
|
TDZA AC,[77,,-1] ; Unternet or class A, zap low 3 octets
|
||||||
|
TLNN AC,(1_30.) ; Class B or C, see which.
|
||||||
|
TRZA AC,177777 ; Class B network, zap low 2 octets
|
||||||
|
TRZ AC,377 ; Class C net, only zap 1 low octet
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
;;; Misc defs
|
||||||
|
CALL==<PUSHJ P,>
|
||||||
|
RET==<POPJ P,>
|
||||||
|
CALRET==<JRST>
|
||||||
|
|
||||||
|
OVHMTR NET
|
||||||
|
|
||||||
|
IFN IMPP,[ ; ARPAnet IMP interface code
|
||||||
|
IFN KAIMP,[
|
||||||
|
$INSRT IMPOLD
|
||||||
|
]
|
||||||
|
IFN KSIMP,[
|
||||||
|
$INSRT IMP
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
OVHMTR NET
|
||||||
|
|
||||||
|
IFN NCPP,[ ; Old Arpanet NCP protocol code
|
||||||
|
$INSRT NCP
|
||||||
|
]
|
||||||
|
OVHMTR NET
|
||||||
|
|
||||||
|
IFN INETP,[ ; Internet Protocol code
|
||||||
|
$INSRT INET
|
||||||
|
]
|
||||||
|
|
||||||
|
OVHMTR NET
|
||||||
|
|
||||||
|
IFN TCPP,[ ; Transmission Control Protocol code
|
||||||
|
$INSRT TCP
|
||||||
|
]
|
||||||
|
|
||||||
|
OVHMTR UUO
|
||||||
|
|
||||||
|
IFN CHAOSP,[ ; CHAOSnet interface and protocol code
|
||||||
|
$INSRT CHAOS
|
||||||
|
]
|
||||||
|
OVHMTR UUO
|
||||||
|
|
||||||
|
SUBTTL General Network System Calls
|
||||||
|
|
||||||
|
; .CALL NETRFC - Get a pending Request For Connection for a specific network
|
||||||
|
; Arg 1 - SIXBIT name of network
|
||||||
|
; Arg 2 - optional network-dependent arg
|
||||||
|
; (for CHAOS, points to packet buffer)
|
||||||
|
; Val 1 - network-dependent value
|
||||||
|
; For TCP and ARPNCP, this is <id>,,<port/socket #>
|
||||||
|
; Control bits:
|
||||||
|
%NQREF==:1 ; Arg 2 is previously returned identifier,
|
||||||
|
; refuse connection and flush from queue.
|
||||||
|
|
||||||
|
NETRFC: MOVE C,CTLBTS(U) ; Set up control bits in C
|
||||||
|
IFN TCPP,[
|
||||||
|
CAMN A,[SIXBIT /TCP/]
|
||||||
|
JRST TCPRQ
|
||||||
|
]
|
||||||
|
IFN CHAOSP,[
|
||||||
|
CAMN A,[SIXBIT /CHAOS/]
|
||||||
|
JRST [ TRNE C,%NQREF ; If refusing conn,
|
||||||
|
JRST OPNL12 ; Ignore, can't handle yet. "Mode not avail"
|
||||||
|
CAIGE W,2 ; Must have a 2nd arg
|
||||||
|
JRST OPNL30 ; "Too few args"
|
||||||
|
MOVE A,B ; Fake out old CHAOSQ call
|
||||||
|
JRST CHAOSQ]
|
||||||
|
]
|
||||||
|
IFN NCPP,[ ; NOP for now
|
||||||
|
; CAMN A,[SIXBIT /ARPNCP/]
|
||||||
|
; JRST IMPRQ
|
||||||
|
]
|
||||||
|
JRST OPNL33 ; No match, say "meaningless args".
|
||||||
|
|
||||||
|
; .CALL NETBLK - Wait for net channel state to change, or time out.
|
||||||
|
; Arg 1 - Channel (comes in R)
|
||||||
|
; Arg 2 - Undesired state
|
||||||
|
; Arg 3 - Optional timeout (as in .SLEEP), written back unless immediate
|
||||||
|
; Val 1 - New state
|
||||||
|
; Val 2 - Time left
|
||||||
|
|
||||||
|
NETBLK: HRRZ T,(R) ; Get IOCHNM RH = device index
|
||||||
|
HLRZ I,(R) ; Get LH = often connection index
|
||||||
|
IFN NCPP,[
|
||||||
|
CAIL T,NETDUI
|
||||||
|
CAILE T,NETDBO
|
||||||
|
CAIA
|
||||||
|
JRST [MOVE T,[HRRZ A,IMSOC4]
|
||||||
|
JRST NETBLI]
|
||||||
|
] ;NCPP
|
||||||
|
IFN CHAOSP,[
|
||||||
|
CAIE T,CHAIDN
|
||||||
|
CAIN T,CHAODN
|
||||||
|
JRST [MOVE T,[HRRZ A,CHSSTA]
|
||||||
|
JRST NETBLI]
|
||||||
|
] ;CHAOSP
|
||||||
|
IFN TCPP,[
|
||||||
|
CAIN T,TCPDUI
|
||||||
|
JRST [ MOVE T,[HLRZ A,XBSTAU]
|
||||||
|
JRST NETBLI]
|
||||||
|
CAIN T,TCPDUO
|
||||||
|
JRST [ MOVE T,[HRRZ A,XBSTAU]
|
||||||
|
JRST NETBLI]
|
||||||
|
] ;TCP
|
||||||
|
JRST OPNL34 ; Not a net chan, say "Wrong Type Device".
|
||||||
|
|
||||||
|
|
||||||
|
; T/ Instruction to XCT (not indexed) to get state in A
|
||||||
|
; Entry at NETBLI adds (I) to the instruction.
|
||||||
|
|
||||||
|
NETBLI: ADDI T,(I) ; Provide "index" for instruction.
|
||||||
|
NETBL0: CAIGE W,3
|
||||||
|
JRST [ HRLOI D,377777 ; No time given, use infinity
|
||||||
|
JRST NETBL4 ]
|
||||||
|
TLNE C,1000 ; Skip if pointer rather than immediate
|
||||||
|
JRST [ HRRZ D,C ; Get immediate time
|
||||||
|
ADD D,TIME
|
||||||
|
JRST NETBL4 ]
|
||||||
|
XCTR XRW,[MOVES D,(C)] ; Get time, check writeability
|
||||||
|
JUMPGE D,[ MOVNS D ; Relative time, make negative absolute
|
||||||
|
SUB D,TIME
|
||||||
|
JRST .+1 ]
|
||||||
|
UMOVEM D,(C) ; Store back absolute time
|
||||||
|
MOVNS D ; Make positive
|
||||||
|
NETBL4: MOVEM D,AC0S+D(U) ; Save absolute time to wait until
|
||||||
|
MOVEM B,AC0S+B(U) ; Save undesired state
|
||||||
|
PUSHJ P,NETBL2 ; Skip if state change or timeout
|
||||||
|
PUSHJ P,UFLS
|
||||||
|
MOVE B,D
|
||||||
|
SUB B,TIME ; How much used?
|
||||||
|
XCT T ; Return new state
|
||||||
|
JRST POPJ1
|
||||||
|
|
||||||
|
NETBL2: XCT T ; Get current state
|
||||||
|
CAME A,AC0S+B(U) ; Skip if still match
|
||||||
|
JRST POPJ1
|
||||||
|
MOVE A,AC0S+D(U) ; Timeout time
|
||||||
|
CAMG A,TIME
|
||||||
|
AOS (P)
|
||||||
|
POPJ P,
|
||||||
|
|
||||||
|
SUBTTL Utilities - CVTH2A, CVTH3A
|
||||||
|
|
||||||
|
|
||||||
|
; CVH2NA - Convert network host address in A to HOSTS2 format.
|
||||||
|
; A/ net address (any format)
|
||||||
|
; Returns A
|
||||||
|
|
||||||
|
CVH2NA: PUSH P,B
|
||||||
|
LDB B,[301400,,A] ; Get high 12 bits of net address
|
||||||
|
CAIGE B,70 ; If less than lowest HOSTS2-fmt value
|
||||||
|
JUMPN B,CVH2N3 ; then must be HOSTS3, go convert.
|
||||||
|
CAIL B,1000 ; If any of high 3 bits set,
|
||||||
|
JRST CVH2N3 ; then it's a HOSTS3 strange-fmt number.
|
||||||
|
JUMPN B,CVH2N2
|
||||||
|
CAILE A,377 ; Zero network, so must be ARPA net
|
||||||
|
JRST CVH2N1 ; Not just 8 bits, just add net number.
|
||||||
|
|
||||||
|
; Old-style 8-bit Arpanet host number
|
||||||
|
LSHC A,-6.
|
||||||
|
ROT B,6.
|
||||||
|
DPB B,[112000,,A]
|
||||||
|
CVH2N1: TLO A,(12_33)
|
||||||
|
JRST POPBJ
|
||||||
|
|
||||||
|
; Probably HOSTS2 format number
|
||||||
|
CVH2N2: JRST POPBJ ; For now, that's good enough.
|
||||||
|
|
||||||
|
; HOSTS3 format number, convert it.
|
||||||
|
CVH2N3: CAIN B,12 ; Arpa net?
|
||||||
|
JRST [ LSHC A,-16.
|
||||||
|
ANDI A,377
|
||||||
|
ROT B,16.
|
||||||
|
DPB B,[112000,,A]
|
||||||
|
TLO A,(12_33)
|
||||||
|
JRST POPBJ]
|
||||||
|
CAIN B,7+<NE%UNT_-24.> ; Chaos net?
|
||||||
|
JRST [ ANDI A,177777 ; Yup, fix it up.
|
||||||
|
TLO A,(7_33)
|
||||||
|
JRST POPBJ]
|
||||||
|
CAIN B,22 ; LCS net?
|
||||||
|
JRST [ LSHC A,-8.
|
||||||
|
ANDI A,-1
|
||||||
|
LSH A,2
|
||||||
|
LSHC A,8.
|
||||||
|
TLO A,(22_33)
|
||||||
|
JRST POPBJ]
|
||||||
|
|
||||||
|
; Not a known net, but try to do something plausible.
|
||||||
|
ANDCM A,[-1_24.] ; Preserve low 24 bits
|
||||||
|
DPB B,[331100,,A] ; put net # into HOSTS2 field.
|
||||||
|
POP P,B
|
||||||
|
RET
|
||||||
|
|
||||||
|
; CVH3NA - Convert network host address in A to HOSTS3 (Internet) format.
|
||||||
|
; A/ net address (any format)
|
||||||
|
; Returns A
|
||||||
|
|
||||||
|
CVH3NA: PUSH P,B
|
||||||
|
LDB B,[301400,,A] ; Get high 12 bits of net address
|
||||||
|
CAIGE B,70 ; If less than lowest HOSTS2 value,
|
||||||
|
JUMPN B,CVH3N3 ; it's already HOSTS3 format! (unless zero)
|
||||||
|
CAIL B,1000 ; If any of high 3 bits were set,
|
||||||
|
JRST CVH3N3 ; it must be a HOSTS3 strange-fmt addr.
|
||||||
|
JUMPN B,CVH3N2 ; If not zero, then must assume HOSTS2 fmt.
|
||||||
|
|
||||||
|
; Old-format 8-bit Arpanet host number, or HOSTS2 with zero net.
|
||||||
|
CAILE A,377
|
||||||
|
JRST CVH3N6 ; If greater than 8 bits, assume HOSTS2, zero net.
|
||||||
|
LSHC A,-6 ; Put 10 bits spacing between host/imp #s.
|
||||||
|
LSH B,-<2+8.>
|
||||||
|
LSHC A,<2+8.+6>
|
||||||
|
TLO A,(12_24.) ; and add ARPA network number.
|
||||||
|
JRST CVH3N3
|
||||||
|
|
||||||
|
; HOSTS2 format number
|
||||||
|
CVH3N2: TRZE B,7 ; Zap low 3 bits to ensure correct comparison
|
||||||
|
JRST CVH3N5 ; If any were set, can't be Chaosnet.
|
||||||
|
CAIN B,7_3 ; Chaos net?
|
||||||
|
JRST [ ANDI A,177777 ; Yes, kill all but bottom 16 bits
|
||||||
|
TLO A,(NE%UNT+<7_24.>) ; Add Chaos net #
|
||||||
|
JRST CVH3N3]
|
||||||
|
CVH3N5: CAIN B,12_3 ; Arpa net?
|
||||||
|
CVH3N6: JRST [ LSHC A,-9.
|
||||||
|
ANDI A,177777
|
||||||
|
ROT B,9.
|
||||||
|
DPB B,[201000,,A]
|
||||||
|
TLO A,(12_24.)
|
||||||
|
JRST CVH3N3]
|
||||||
|
CAIN B,22_3 ; LCS net?
|
||||||
|
JRST [ LSHC A,-8.
|
||||||
|
LSH A,-2
|
||||||
|
ANDI A,377
|
||||||
|
LSHC A,-8.
|
||||||
|
TLO A,(22_24.)
|
||||||
|
JRST CVH3N3]
|
||||||
|
|
||||||
|
; No match, assume it's HOSTS3.
|
||||||
|
|
||||||
|
CVH3N3: POP P,B
|
||||||
|
RET
|
||||||
|
|
||||||
|
;.CALL STYNET
|
||||||
|
;ARG 1 - STY CHANNEL
|
||||||
|
;ARG 2 - NET INPUT CHANNEL TO CONNECT STY OUTPUT TO, OR -1 TO DISCONNECT
|
||||||
|
;ARG 3 - NET OUTPUT CHANNEL TO CONNECT STY INPUT TO
|
||||||
|
;ARG 4 - CHARS TO SEND WHEN OUTPUT .RESET HAPPENS ON STY'S TTY
|
||||||
|
; UP TO 3 8-BIT CHARACTERS, LEFT JUSTIFIED.
|
||||||
|
|
||||||
|
NSTYNT: TLNN R,%CLSST
|
||||||
|
JRST OPNL34 ;1ST ARG NOT A STY CHANNEL.
|
||||||
|
HLRZ I,(R) ;GET TTY # OF STY
|
||||||
|
HRRES B ;ALLOW IMMEDIATE -1
|
||||||
|
JUMPGE B,NSTYN2 ;JUMP IF CONNECTING.
|
||||||
|
PUSHJ P,NSTYN0 ;DISCONNECT
|
||||||
|
JRST OPNL41 ;WASN'T CONNECTED
|
||||||
|
JRST POPJ1
|
||||||
|
|
||||||
|
;VARIOUS ROUTINES CALL HERE WITH THE TTY# OF A STY IN I, TO DISCONNECT THE
|
||||||
|
; STY FROM THE NETWORK. NOTE THIS ROUTINE MUST NOT CHANGE U AND MUST NOT
|
||||||
|
; LSWCLR, SINCE IT COULD BE CALLED FROM IODCL VIA STYCLS OR NETCLS.
|
||||||
|
|
||||||
|
NSTYN0: MOVSI B,%SSNET ;DISCONNECTING BOTH SIDES.
|
||||||
|
CONO PI,NETOFF
|
||||||
|
TDNN B,STYSTS-NFSTTY(I)
|
||||||
|
POPJ P, ;THIS STY NOT CONNECTED?
|
||||||
|
ANDCAB B,STYSTS-NFSTTY(I) ;MARK AS NO LONGER CONNECTED
|
||||||
|
MOVE C,STYNTL-NFSTTY(I) ;REMOVE THIS STY FROM ACTIVATION LIST
|
||||||
|
MOVEI D,STYNTA-STYNTL+NFSTTY
|
||||||
|
NSTYN1: CAMN I,STYNTL-NFSTTY(D) ;FIND THE STY THAT POINTS TO THIS ONE,
|
||||||
|
MOVEM C,STYNTL-NFSTTY(D) ;AND PATCH US OUT OF THE LIST.
|
||||||
|
SKIPE D,STYNTL-NFSTTY(D) ;SEARCH WHOLE LIST TILL FIND WHO POINTS TO US.
|
||||||
|
JRST NSTYN1
|
||||||
|
SETOB C,STYNTL-NFSTTY(I)
|
||||||
|
EXCH C,STYNTI-NFSTTY(I) ;MARK THIS STY AS HAVING NO CONNECTION, GET SOCKET INDICES
|
||||||
|
IFN CHAOSP,[
|
||||||
|
TLNE B,%SSCHA
|
||||||
|
JRST [ MOVSI B,%SSCHA ;DISCONNECT FROM CHAOS NET
|
||||||
|
ANDCAM B,STYSTS-NFSTTY(I)
|
||||||
|
MOVSI B,%CFSTY
|
||||||
|
TDNN B,CHSSTA(C)
|
||||||
|
JRST 4,. ;CHAOS DOESN'T THINK IT WAS CONNECTED?
|
||||||
|
ANDCAM B,CHSSTA(C)
|
||||||
|
JRST NETOJ1 ]
|
||||||
|
];CHAOSP
|
||||||
|
IFN TCPP,[
|
||||||
|
TLNE B,%SSTCP
|
||||||
|
JRST [ MOVSI B,%SSTCP ; Disconnect from TCP connection
|
||||||
|
ANDCAM B,STYSTS-NFSTTY(I) ; Flush STY's "connect" bit
|
||||||
|
MOVSI B,(XB%STY)
|
||||||
|
TDNN B,XBUSER(C) ; Make sure TCP thinks connected
|
||||||
|
BUG ; It isn't??
|
||||||
|
ANDCAM B,XBUSER(C)
|
||||||
|
JRST NETOJ1]
|
||||||
|
] ;TCPP
|
||||||
|
IFN NCPP,[
|
||||||
|
MOVE B,[40000,,777]
|
||||||
|
TDNN B,IMSOC5(C)
|
||||||
|
JRST 4,. ;SOCKET DOESN'T THINK IT WAS CONNECTED?
|
||||||
|
ANDCAM B,IMSOC5(C) ;AND MARK SOCKETS WE WERE CONNECTED TO AS DISCONNECTED
|
||||||
|
MOVSS C
|
||||||
|
TDNN B,IMSOC5(C)
|
||||||
|
JRST 4,. ;SOCKET DOESN'T THINK IT WAS CONNECTED?
|
||||||
|
ANDCAM B,IMSOC5(C)
|
||||||
|
JRST NETOJ1
|
||||||
|
] ;NCPP
|
||||||
|
.ELSE BUG
|
||||||
|
|
||||||
|
; Here to set up STY connection.
|
||||||
|
|
||||||
|
NSTYN2: MOVE Q,I ;SAVE TTY # OF STY
|
||||||
|
MOVEI E,1
|
||||||
|
MOVE A,B ;DECODE THE NETWORK INPUT CHANNEL
|
||||||
|
JSP T,CHNDCD
|
||||||
|
HRRZ A,(R)
|
||||||
|
IFN CHAOSP,[
|
||||||
|
CAIE A,CHAIDN
|
||||||
|
CAIN A,CHAODN
|
||||||
|
JRST [ HLRZ I,(R) ;CONNECT TO CHAOS NET
|
||||||
|
CONO PI,NETOFF
|
||||||
|
MOVSI B,%CFSTY
|
||||||
|
TDNE B,CHSSTA(I)
|
||||||
|
JRST OPNL23 ;ALREADY CONNECTED, FILE LOCKED
|
||||||
|
MOVSI C,%SSNET+%SSCHA
|
||||||
|
TDNE C,STYSTS-NFSTTY(Q)
|
||||||
|
JRST OPNL23 ;ALREADY CONNECTED, FILE LOCKED
|
||||||
|
IORM B,CHSSTA(I) ;OK, HOOK UP
|
||||||
|
DPB Q,[$CFTTN,,CHSSTA(I)]
|
||||||
|
JRST NSTYN3 ]
|
||||||
|
];CHAOSP
|
||||||
|
IFN TCPP,[
|
||||||
|
CAIE A,TCPDUI
|
||||||
|
CAIN A,TCPDUO
|
||||||
|
JRST [HLRZ I,(R) ; Connect to TCP, get TCB index
|
||||||
|
CONO PI,NETOFF
|
||||||
|
MOVSI B,(XB%STY)
|
||||||
|
TDNE B,XBUSER(I)
|
||||||
|
JRST OPNL23 ; TCB Already connected, say "File Locked"
|
||||||
|
MOVSI C,%SSNET+%SSTCP
|
||||||
|
TDNE C,STYSTS-NFSTTY(Q)
|
||||||
|
JRST OPNL23 ; STY already connected, say "File Locked"
|
||||||
|
DPB Q,[XB$STY (I)] ; Store TTY # to connect TCB.
|
||||||
|
JRST NSTYN3]
|
||||||
|
] ;TCPP
|
||||||
|
IFN NCPP,[
|
||||||
|
JSP T,NETCHK ;TEST LEGALITY; OPNL IF LOSES
|
||||||
|
TDNE E,IMSOC2(I)
|
||||||
|
JRST OPNL2 ;WRONG DIRECTION IF IT'S AN OUTPUT CHANNEL
|
||||||
|
MOVE B,I ;SAVE INPUT IMSOC INDEX
|
||||||
|
MOVE A,C ;DECODE OUTPUT CHANNEL
|
||||||
|
JSP T,CHNDCD
|
||||||
|
JSP T,NETCHK
|
||||||
|
TDNN E,IMSOC2(I)
|
||||||
|
JRST OPNL2 ;WRONG DIRECTION IF INPUT SOCKET
|
||||||
|
CONO PI,NETOFF
|
||||||
|
MOVE E,[40000,,777]
|
||||||
|
TDNN E,IMSOC5(B) ;ERROR IF EITHER CHANNEL ALREADY CONNECTED
|
||||||
|
TDNE E,IMSOC5(I)
|
||||||
|
JRST OPNL23 ;"FILE LOCKED"
|
||||||
|
MOVSI C,%SSNET
|
||||||
|
TDNE C,STYSTS-NFSTTY(Q)
|
||||||
|
JRST OPNL23 ;SIMILAR ERROR IF STY ALREADY CONNECTED
|
||||||
|
HRR E,Q ;GET 40000,,TTY #
|
||||||
|
IORM E,IMSOC5(I)
|
||||||
|
IORM E,IMSOC5(B) ;MARK SOCKETS AS CONNECTED
|
||||||
|
] ;NCPP
|
||||||
|
|
||||||
|
NSTYN3: SKIPGE STYNTL-NFSTTY(Q) ;HALT IF STY'S VARS ARE NOT CORRECT FOR A
|
||||||
|
SKIPL STYNTI-NFSTTY(Q) ;NON-CONNECTED STY.
|
||||||
|
JRST 4,.
|
||||||
|
IORM C,STYSTS-NFSTTY(Q) ;ALL ERROR CAUGHT, SO MARK STY CONNECTED.
|
||||||
|
HRL B,I ;PUT INPUT IMSOC IDX,, OUTPUT IMSOC IDX
|
||||||
|
MOVSM B,STYNTI-NFSTTY(Q) ;INTO THE STY
|
||||||
|
TRZ D,7777 ;STORE THE OUTPUT RESET CHARACTERS - AT MOST 3
|
||||||
|
MOVEM D,STYORC-NFSTTY(Q)
|
||||||
|
|
||||||
|
;ACTIVATE IN CASE HAS UNREAD INPUT
|
||||||
|
IFN NCPP,[
|
||||||
|
TLNN C,%SSCHA+%SSTCP
|
||||||
|
PUSHJ P,IMPUIN
|
||||||
|
] ;NCPP
|
||||||
|
IFN CHAOSP,[
|
||||||
|
TLNE C,%SSCHA
|
||||||
|
PUSHJ P,CHINTI
|
||||||
|
];CHAOSP
|
||||||
|
IFN TCPP,[
|
||||||
|
TLNE C,%SSTCP
|
||||||
|
PUSHJ P,TCPUII
|
||||||
|
] ;TCPP
|
||||||
|
JRST NETOJ1
|
||||||
|
|
||||||
|
SUBTTL Clock interrupt level code
|
||||||
|
|
||||||
|
; NETCLK - Slow net clock. Called at clock level every 1/2 sec.
|
||||||
|
; Can clobber all ACs
|
||||||
|
|
||||||
|
NETCLK:
|
||||||
|
IFN CHAOSP, PUSHJ P,CHACLK ; Run Chaos net 1/2-second clock
|
||||||
|
IFN TCPP, PUSHJ P,TCPCLK ; Run TCP 1/2-sec clock
|
||||||
|
SETCMB A,NETCL1 ; Flip the 1 sec switch
|
||||||
|
JUMPE A,CPOPJ ; Return unless time for 1-sec clock
|
||||||
|
IFN INETP,CALL IPFCLK ; Run IP reassembly timeout every 1 sec
|
||||||
|
RET
|
||||||
|
EBLK
|
||||||
|
NETCL1: 0 ; Flip-flop to get 1-sec ticks
|
||||||
|
BBLK
|
||||||
|
|
||||||
|
; STYNTC - Called at clock level every 1/60 sec to process all
|
||||||
|
; necessary transfers of data between STYs and associated
|
||||||
|
; net connections
|
||||||
|
|
||||||
|
STYNTC: CONO PI,NETOFF
|
||||||
|
SKIPN I,STYNTA ;GET HEAD OF ACTIVATE LIST
|
||||||
|
JRST NETONJ ;EMPTY
|
||||||
|
SETZM STYNTA ;COPY LIST IN CASE A STY IS PUT BACK ON
|
||||||
|
CONO PI,NETON
|
||||||
|
STYNT7: MOVE A,STYNTL-NFSTTY(I) ;GET NEXT ON LIST
|
||||||
|
MOVEM A,STYNTB ;SAVE FOR NEXT TIME AROUND LOOP
|
||||||
|
SETOM STYNTL-NFSTTY(I) ;THIS ONE IS NO LONGER ON ACTIVATE LIST
|
||||||
|
MOVE A,STYSTS-NFSTTY(I)
|
||||||
|
TLNN A,%SSNET
|
||||||
|
JRST 4,. ;STY CLAIMS NOT TO BE CONNECTED??
|
||||||
|
MOVE R,I ;SAVE TTY #
|
||||||
|
|
||||||
|
IFN CHAOSP,[
|
||||||
|
TLNE A,%SSCHA
|
||||||
|
JRST STYCHA ;CONNECTED TO CHAOS NET
|
||||||
|
];CHAOSP
|
||||||
|
IFN TCPP,[
|
||||||
|
TLNE A,%SSTCP
|
||||||
|
JRST STYTCP
|
||||||
|
] ;TCPP
|
||||||
|
IFN NCPP,[
|
||||||
|
JRST STYNCP
|
||||||
|
];NCPP
|
||||||
|
|
||||||
|
STYNT8: SKIPE I,STYNTB ;GET NEXT STY FROM COPIED ACTIVATION LIST
|
||||||
|
JRST STYNT7
|
||||||
|
POPJ P,
|
||||||
|
|
||||||
|
;SUBROUTINE TO STANDARDIZE HOST NUMBER, OPNL25 IF NO GOOD
|
||||||
|
;PROCESSES HOST NUMBER IN T, MUNGS H, CALLED BY JSP J,STDHST
|
||||||
|
STDHST:
|
||||||
|
IFN 1,[
|
||||||
|
EXCH A,T
|
||||||
|
CALL CVH3NA ; Convert # to HOSTS3 fmt
|
||||||
|
EXCH A,T
|
||||||
|
LDB H,[301400,,T] ; Get high 12 bits (net #)
|
||||||
|
CAIE H,12 ; Should be ARPA net
|
||||||
|
JRST OPNL25
|
||||||
|
TDZ T,[NW%ARP+<377_8.>] ; Flush the net # and logical host field
|
||||||
|
JRST (J)
|
||||||
|
] ;IFN 1
|
||||||
|
IFN 0,[
|
||||||
|
LDB H,[331000,,T] ;GET NETWORK-NUMBER FIELD
|
||||||
|
CAIE H,12 ;ONLY 12 OR 0 IS ACCEPTABLE
|
||||||
|
JUMPN H,OPNL25
|
||||||
|
TDNE T,[400600,,400] ;MAKE SURE OTHER RANDOM BITS AREN'T ON
|
||||||
|
JRST OPNL25
|
||||||
|
TLZ T,777000 ;CLEAR NETWORK NUMBER
|
||||||
|
JUMPE T,OPNL25 ;0 IS NOT ACCEPTABLE
|
||||||
|
CAIL T,400 ;SKIP IF OLD-STYLE HOST NUMBER
|
||||||
|
JRST (J)
|
||||||
|
LDB H,[060200,,T] ;GET HOST FIELD
|
||||||
|
ANDI T,77 ;GET IMP FIELD
|
||||||
|
EXCH H,T
|
||||||
|
DPB H,[112000,,T] ;RECOMBINE
|
||||||
|
JRST (J)
|
||||||
|
] ;IFN 0
|
||||||
98
src/system/ni1010.defs2
Executable file
98
src/system/ni1010.defs2
Executable file
@@ -0,0 +1,98 @@
|
|||||||
|
;;; -*- Mode: Midas -*-
|
||||||
|
.AUXIL
|
||||||
|
|
||||||
|
;;; Canonical symbol definition macro, FOO==BAR with error check.
|
||||||
|
IFNDEF DEFSYM,[
|
||||||
|
DEFINE DEFSYM X/
|
||||||
|
IRPS Z,,[X]
|
||||||
|
IFNDEF Z,X
|
||||||
|
.ELSE [ $$TEM1==Z
|
||||||
|
X
|
||||||
|
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
|
||||||
|
]
|
||||||
|
.ISTOP
|
||||||
|
TERMIN TERMIN
|
||||||
|
$$TEMP==1
|
||||||
|
] ;IFNDEF DEFSYM
|
||||||
|
.ELSE, $$TEMP==0
|
||||||
|
|
||||||
|
; Junk for Interlan NI1010A Unibus Ethernet Interface
|
||||||
|
|
||||||
|
;Interrupt information
|
||||||
|
DEFSYM %ILVEC==300 ;Input side interrupt vector (non-standard)
|
||||||
|
;Output side assumed to be %LHVEC+4
|
||||||
|
DEFSYM %ILPRI==5 ;Interrupt priority (should be 6, but
|
||||||
|
; hard to change to anything but 4!)
|
||||||
|
|
||||||
|
DEFSYM %ILBAS==764000 ;Base of NI1010A Registers in UB space
|
||||||
|
|
||||||
|
;Unibus Registers
|
||||||
|
DEFSYM %ILCSR=:%ILBAS ;Control and Status Register
|
||||||
|
DEFSYM %ILBAR=:%ILBAS+2 ;Buffer Address Register
|
||||||
|
DEFSYM %ILBCR=:%ILBAS+4 ;Byte COunt Register
|
||||||
|
|
||||||
|
;Bitz
|
||||||
|
;CSR bits
|
||||||
|
DEFSYM %ILEUA==:140000 ;Extended UB address field
|
||||||
|
DEFSYM %ILCMD==:37400 ;Command Function Code
|
||||||
|
DEFSYM %ILCD==:200 ;Command Done
|
||||||
|
DEFSYM %ILCIE==:100 ;Command Interrupt Enable
|
||||||
|
DEFSYM %ILRD==:40 ;Receive DMA done
|
||||||
|
DEFSYM %ILRIE==:20 ;Receive Interrupt Enable
|
||||||
|
DEFSYM %ILSTS==:17 ;Command Status Code
|
||||||
|
|
||||||
|
;Commands (in %ILCMD field of CSR)
|
||||||
|
DEFSYM %ILSML==400 ;Module Loopback (through interface)
|
||||||
|
DEFSYM %ILSIL==1000 ;Set Internal Loopback
|
||||||
|
DEFSYM %ILCLM==1400 ;Clear loopback mode
|
||||||
|
DEFSYM %ILSPR==2000 ;Promiscuous Receive Mode
|
||||||
|
DEFSYM %ILCPR==2400 ;Clear Promiscuous Receive Mode
|
||||||
|
DEFSYM %ILSRE==3000 ;Set Receive-on-error bit
|
||||||
|
DEFSYM %ILCRE==3400 ;Clear Receive-on-error bit
|
||||||
|
DEFSYM %ILOFL==4000 ;Go Offline
|
||||||
|
DEFSYM %ILONL==4400 ;Go Online
|
||||||
|
DEFSYM %ILROD==5000 ;Run onboard diagnostics
|
||||||
|
DEFSYM %ILSIS==6000 ;Set Insert-source-address mode
|
||||||
|
DEFSYM %ILCIS==7000 ;Clear Insert-source-address mode
|
||||||
|
DEFSYM %ILDPA==7400 ;Set physical address to default
|
||||||
|
DEFSYM %ILSRM==10000 ;Receive all multicast packets
|
||||||
|
DEFSYM %ILCRM==10400 ;Clear Receive all multicast packets
|
||||||
|
DEFSYM %ILRRS==14000 ;Report and reset statistics
|
||||||
|
DEFSYM %ILRCD==14400 ;Report Collision Delay Times
|
||||||
|
DEFSYM %ILRCV==20000 ;Supply Receive Buffer
|
||||||
|
DEFSYM %ILLXD==24000 ;Load Transmit Data
|
||||||
|
DEFSYM %ILLXS==24400 ;Load Transmit Data and Send
|
||||||
|
DEFSYM %ILLGA==25000 ;Load Group Addreses
|
||||||
|
DEFSYM %ILDGA==25400 ;Delete Group Adresses
|
||||||
|
DEFSYM %ILLPA==26000
|
||||||
|
DEFSYM %ILFRQ==30000 ;Flush Receive BAR/BCR Queue
|
||||||
|
DEFSYM %ILRST==37400 ;Reset
|
||||||
|
|
||||||
|
;Error codes. Found in %ILSTS field of CSR
|
||||||
|
DEFSYM %ILEOK==0 ;Success
|
||||||
|
DEFSYM %ILERT==1 ;Success, with retries
|
||||||
|
DEFSYM %ILEBC==2 ;Illegal Command
|
||||||
|
DEFSYM %ILEIC==3 ;Invalid Command
|
||||||
|
DEFSYM %ILERE==4 ;Receiver Error
|
||||||
|
DEFSYM %ILEBB==5 ;Buffer Size Too Big
|
||||||
|
DEFSYM %ILEFS==6 ;Frams Size Too Small
|
||||||
|
DEFSYM %ILEEC==10 ;Excessive Collisions
|
||||||
|
DEFSYM %ILEBA==12 ;Buffer Not Word Aligned
|
||||||
|
DEFSYM %ILENX==17 ;Non-eXistant Memory
|
||||||
|
|
||||||
|
;Diagnostic codes. Results from %ILROD command
|
||||||
|
DEFSYM %ILDOK==0 ;No Problem
|
||||||
|
DEFSYM %ILDCE==1 ;ROM/RAM Checksum Error
|
||||||
|
DEFSYM %ILDDE==2 ;DMA Circuitry Failed
|
||||||
|
DEFSYM %ILDXE==3 ;Transmit Circuitry Failed
|
||||||
|
DEFSYM %ILDRE==4 ;Receive Circuitry Failed
|
||||||
|
DEFSYM %ILDLE==5 ;Loopback checks failed
|
||||||
|
|
||||||
|
;Frame status bits, returned in frame status byte
|
||||||
|
; at the top of each received packet.
|
||||||
|
DEFSYM %ILFCE==1 ;CRC Error in packet
|
||||||
|
DEFSYM %ILFAE==2 ;Alignment Error
|
||||||
|
DEFSYM %ILFFL==4 ;1+ frames lost just before
|
||||||
|
|
||||||
|
IFN $$TEMP,EXPUNG DEFSYM
|
||||||
|
|
||||||
2432
src/system/nmtape.30
Executable file
2432
src/system/nmtape.30
Executable file
File diff suppressed because it is too large
Load Diff
230
src/system/rh10.defs26
Executable file
230
src/system/rh10.defs26
Executable file
@@ -0,0 +1,230 @@
|
|||||||
|
.AUXIL
|
||||||
|
|
||||||
|
;ALLOW USER TO USE SYMBOLS IN OTHER WAYS IF HE WISHES.
|
||||||
|
;BUT NORMALLY, DEFSYM FOO==BAR DOES FOO==BAR WITH ERROR CHECK.
|
||||||
|
|
||||||
|
IFNDEF DEFSYM,[
|
||||||
|
DEFINE DEFSYM X/
|
||||||
|
IRPS Z,,[X]
|
||||||
|
IFNDEF Z,X
|
||||||
|
.ELSE [
|
||||||
|
$$TEM1==Z
|
||||||
|
X
|
||||||
|
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
|
||||||
|
]
|
||||||
|
.ISTOP
|
||||||
|
TERMIN TERMIN
|
||||||
|
|
||||||
|
IFLE .MLLIT,.ERR .MLLIT MUST BE 1; SETTING IT TO 1.
|
||||||
|
.MLLIT==1
|
||||||
|
$$TEMP==1
|
||||||
|
];IF Not DEFined DEFSYM
|
||||||
|
.ELSE $$TEMP==0
|
||||||
|
|
||||||
|
|
||||||
|
;DISK PHYSICAL PARAMETERS (RH10 CONTROLLER)
|
||||||
|
|
||||||
|
DEFSYM NCYLS==406. ;# CYLINDERS NORMALLY USED
|
||||||
|
DEFSYM XCYLS==411.-NCYLS ;# CYLINDERS FOR SPARES, HACKS, ETC.
|
||||||
|
DEFSYM NHEDS==19. ;# TRACKS/CYLINDER
|
||||||
|
DEFSYM NSECS==20. ;# SECTORS/TRACK
|
||||||
|
DEFSYM SECBLK==8 ;# SECTORS/BLOCK
|
||||||
|
DEFSYM NBLKSC==NHEDS*NSECS/SECBLK ;# BLOCKS/CYLINDER
|
||||||
|
DEFSYM NBLKS==NCYLS*NBLKSC ;# BLOCKS NORMALLY USED
|
||||||
|
DEFSYM XBLKS==XCYLS*NBLKSC ;# BLOCKS FOR HACKS
|
||||||
|
DEFSYM TBLKS==NBLKS+XBLKS ;TOTAL BLOCKS
|
||||||
|
|
||||||
|
DEFSYM NTUTBL==2 ;2 BLOCKS PER TUT
|
||||||
|
DEFSYM DECADE==NBLKSC ;NUMBER OF BLOCKS TO ALLOCATE AT A TIME
|
||||||
|
;QSWAPA AND QLASTB MUST BE MULTIPLES OF THIS.
|
||||||
|
;DECADE SIZE = CYLINDER SIZE FOR KLFEDR'S SAKE
|
||||||
|
DEFSYM DSK=270 ;I/O DEVICE NUMBER OF RH10
|
||||||
|
|
||||||
|
;CONI - LEFT HALF (ERROR BITS ONLY)
|
||||||
|
|
||||||
|
DEFSYM %HID22==4000,, ;4.3 1=>22-BIT DATA CHANNEL, 0=>18-BIT
|
||||||
|
DEFSYM %HIILF==400,, ;3.9 ILLEGAL FUNCTION CODE IN CONTROL REGISTER
|
||||||
|
DEFSYM %HISDE==200,, ;3.8 SELECTED DRIVE PREVIOUS ERROR NOT RESET
|
||||||
|
DEFSYM %HIDPE==4,, ;3.3 CHANNEL DATA PARITY ERROR
|
||||||
|
DEFSYM %HICPE==2,, ;3.2 CHANNEL CONTROL WORD PARITY ERROR
|
||||||
|
DEFSYM %HINXM==1,, ;3.1 CHANNEL NXM ERROR
|
||||||
|
|
||||||
|
;CONI - RIGHT HALF
|
||||||
|
|
||||||
|
DEFSYM %HIBPE==400000 ;2.9 DATA BUSS PARITY ERROR
|
||||||
|
DEFSYM %HIEXC==200000 ;2.8 "EXCEPTION" IN DRIVE DURING DATA TRANSFER
|
||||||
|
DEFSYM %HICER==100000 ;2.7 CHANNEL ERROR (OR OF 3 BITS IN LH)
|
||||||
|
DEFSYM %HICWW==040000 ;2.6 CONTROL WORD HAS BEEN WRITTEN
|
||||||
|
DEFSYM %HIOVR==020000 ;2.5 OVER-RUN (MEMORY DATA LATE)
|
||||||
|
DEFSYM %HIDRE==010000 ;2.4 DRIVE RESPONSE ERROR - NO RESPONSE FROM DRIVE
|
||||||
|
DEFSYM %HIILC==004000 ;2.3 ILLEGAL COMMAND OR REGISTER ACCESS ERROR
|
||||||
|
DEFSYM %HIPWR==002000 ;2.2 POWER FAIL
|
||||||
|
DEFSYM %HICOV==000200 ;1.8 CONTROL BUS OVER-RUN
|
||||||
|
DEFSYM %HIRAE==000100 ;1.7 REGISTER ACCESS ERROR (ONLY IF INTR ENB)
|
||||||
|
DEFSYM %HIATN==000040 ;1.6 ATTENTION (INTERRUPTS)
|
||||||
|
DEFSYM %HIBSY==000020 ;1.5 CONTROL BUSY WITH DATA TRANSFER
|
||||||
|
DEFSYM %HIDON==000010 ;1.4 DATA TRANSFER DONE, NORMAL OR ERROR
|
||||||
|
;1.1-1.3 PIA AS USUAL
|
||||||
|
DEFSYM %HIERR==736300 ;CONI ERROR BITS
|
||||||
|
|
||||||
|
;CONO
|
||||||
|
|
||||||
|
;2.7-2.9 CLEAR CORRESPONDING ERROR BITS
|
||||||
|
DEFSYM %HOWCW==040000 ;2.6 WRITE CONTROL WORD
|
||||||
|
;2.3-2.5 CLEAR CORRESPONDING ERROR BITS
|
||||||
|
DEFSYM %HORST==002000 ;2.2 RESET THE CONTROLLER
|
||||||
|
;1.8 CLEARS CORRESPONDING ERROR BIT
|
||||||
|
DEFSYM %HORAE==000100 ;1.7 ENABLE RAE TO INTERRUPT
|
||||||
|
DEFSYM %HOATN==000040 ;1.6 ENABLE ATTENTION TO INTERRUPT
|
||||||
|
DEFSYM %HOSTP==000020 ;1.5 STOP DATA TRANSFER, CLR BSY, SET DONE
|
||||||
|
;1.4 CLEARS CORRESP BIT (DONE)
|
||||||
|
;1.1-1.3 SET PIA
|
||||||
|
DEFSYM %HOCLR==734210 ;CONO TO CLEAR ALL ERROR BITS
|
||||||
|
|
||||||
|
;CONTROLLER REGISTER NUMBERS (LH OF DATAO)
|
||||||
|
|
||||||
|
DEFSYM %HRLOD==1_13 ;4.3 BIT TO SAY "LOAD SELECTED REGISTER"
|
||||||
|
DEFSYM %HRCTL==40_14 ;CONTROL REGISTER
|
||||||
|
DEFSYM $HCDRV==.BP <7,,> ;3.1-3.3 DRIVE SELECT FIELD
|
||||||
|
DEFSYM $HCICWA==.BP 077700 ;1.7-2.6 INITIAL CONTROL WORD ADDR
|
||||||
|
;AS USUAL, 1.7 IS REALLY THE WRITE EVEN PARITY BIT
|
||||||
|
;1.1-1.6 FUNCTION CODE (%HMxxx) AND GO BIT
|
||||||
|
DEFSYM %HRBUF==50_14 ;DATA BUFFER REGISTER (MAINTENANCE)
|
||||||
|
DEFSYM %HRIAD==44_14 ;INTERRUPT ADDRESS REGISTER
|
||||||
|
;3.2 1=>KI-10 MODE, 0=>KA-10 MODE
|
||||||
|
;1.1-1.9 9-BIT VECTOR ADDRESS (KI)
|
||||||
|
DEFSYM %HRRAE==54_14 ;REGISTER ACCESS ERROR REGISTER
|
||||||
|
;DATAI 1.1-1.8 RAE DRIVE 0-7
|
||||||
|
;DATAO 1.1-1.8 CLEAR THAT BIT
|
||||||
|
DEFSYM %HRCBF==74_14 ;CHANNEL BUFFER
|
||||||
|
|
||||||
|
;COMMANDS
|
||||||
|
; COMMANDS THAT DO I/O ARE PUT IN %HRCTL ALONG WITH $HCICWA
|
||||||
|
; OTHER COMMANDS ARE STORED INTO %HRDCL
|
||||||
|
; IN EITHER CASE $HCDRV SAYS WHICH DRIVE
|
||||||
|
|
||||||
|
DEFSYM %HMNOP==0 ;NO OPERATION
|
||||||
|
DEFSYM %HMUNL==3 ;UNLOAD (DOES PACK FLY OFF?)
|
||||||
|
DEFSYM %HMREC==7 ;RECALIBRATE
|
||||||
|
DEFSYM %HMCLR==11 ;DRIVE CLEAR (RESET ERRORS ETC.)
|
||||||
|
DEFSYM %HMRLS==13 ;DRIVE RELEASE (DUAL PORT)
|
||||||
|
DEFSYM %HMSRC==31 ;SEARCH (FOR R.P.S.)
|
||||||
|
DEFSYM %HMWCH==51 ;WRITE CHECK -- DOESN'T WORK (DEC BRAIN DAMAGE)
|
||||||
|
DEFSYM %HMWCF==53 ;WRITE CHECK FORMAT (HEADER AND DATA) -- DOESN'T WORK
|
||||||
|
DEFSYM %HMWRT==61 ;WRITE DATA
|
||||||
|
DEFSYM %HMWHD==63 ;WRITE HEADER AND DATA (FORMAT THE PACK)
|
||||||
|
DEFSYM %HMRED==71 ;READ DATA
|
||||||
|
DEFSYM %HMRHD==73 ;READ HEADER AND DATA
|
||||||
|
DEFSYM %HMSEK==5 ;SEEK TO CYLINDER
|
||||||
|
DEFSYM %HMOFS==15 ;OFFSET HEADS SLIGHTLY
|
||||||
|
DEFSYM %HMCEN==17 ;RETURN HEADS TO CENTERLINE
|
||||||
|
DEFSYM %HMACK==23 ;ACKNOWLEDGE MOUNTING OF PACK (REQUIRED BEFORE I/O)
|
||||||
|
DEFSYM %HMRDP==21 ;"READ-IN PRESET"
|
||||||
|
|
||||||
|
;STANDARD FIELDS IN DRIVE REGISTERS
|
||||||
|
|
||||||
|
;3.1-3.3 DRIVE NUMBER ($HCDRV)
|
||||||
|
DEFSYM %HDCBT==002000 ;4.2 CONTROL BUS TIMEOUT
|
||||||
|
DEFSYM %HDPAR==001000 ;4.1 MASS BUS CONTROL PARITY ERROR
|
||||||
|
DEFSYM %HDDLT==000400 ;3.9 DATA LATE (NEED 3 US BETWEEN DATAO AND DATAI)
|
||||||
|
DEFSYM %HDILC==000200 ;3.8 ILLEGAL COMMAND
|
||||||
|
DEFSYM %HDERR==003600 ;ALL BITS FOR ERRORS IN TALKING TO DRIVE
|
||||||
|
;DRIVE-DEPENDENT DATA IS IN LOW 16 BITS (1.1-2.7)
|
||||||
|
|
||||||
|
;DRIVE REGISTERS (NUMBER IN LH OF DATAO)
|
||||||
|
|
||||||
|
DEFSYM %HRDCL==0_14 ;DRIVE CONTROL REGISTER
|
||||||
|
;1.1-1.6 COMMAND (%HMxxx) 1.1=GO BIT
|
||||||
|
DEFSYM %HCDVA==1_11. ;2.3 DRIVE AVAILABLE
|
||||||
|
|
||||||
|
DEFSYM %HRSTS==1_14 ;STATUS REGISTER
|
||||||
|
;1.1-1.6 BITS ON DURING HEAD LOAD SEQUENCE
|
||||||
|
DEFSYM %HSVV==100 ;1.7 VOLUME VALID. SET BY %HMACK, CLEARED BY
|
||||||
|
; DRIVE TURN ON. 0 => PACK MAY HAVE BEEN CHANGED
|
||||||
|
DEFSYM %HSRDY==200 ;1.8 DRIVE READY
|
||||||
|
DEFSYM %HSDPR==400 ;1.9 "DRIVE PRESET" = CONNECTED TO THIS CONTROLLER
|
||||||
|
DEFSYM %HSPGM==1000 ;2.1 "PROGRAMMABLE" = EITHER CTRLR CAN CONNECT
|
||||||
|
DEFSYM %HSLST==2000 ;2.2 LAST SECTOR TRANSFERRED
|
||||||
|
DEFSYM %HSWRL==4000 ;2.3 WRITE LOCK
|
||||||
|
DEFSYM %HSMOL==10000 ;2.4 MEDIUM ON-LINE
|
||||||
|
DEFSYM %HSPIP==20000 ;2.5 POSITIONING IN PROGRESS
|
||||||
|
DEFSYM %HSERR==40000 ;2.6 BIT ON %HRER1, %HRER2, OR %HRER3
|
||||||
|
DEFSYM %HSATN==100000 ;2.7 ATTENTION - ERROR, POSITIONING COMPLETE,
|
||||||
|
; STARTUP COMPLETE, OR DRIVE AVAILABLE
|
||||||
|
|
||||||
|
DEFSYM %HRER1==2_14 ;ERROR REGISTER 1
|
||||||
|
;GENERALLY THESE BITS ARE ONLY RESET BY %HMCLR
|
||||||
|
;1.1 ILLEGAL COMMAND IN %HRDCL
|
||||||
|
;1.2 ATTEMPT TO ACCESS NON-EXISTENT DRIVE REGISTER
|
||||||
|
;1.3 ATTEMPT TO WRITE IN DRIVE REGISTER WHILE DRIVE BUSY
|
||||||
|
;1.4 PARITY ERROR ON MASSBUS
|
||||||
|
;1.5 FORMAT ERROR (PACK & CPU NOT BOTH 16- OR BOTH 18-BIT)
|
||||||
|
;1.6 WRITE CLOCK FAIL
|
||||||
|
DEFSYM %H1ECH==100 ;1.7 ECC HARD ERROR (NOT 11-BIT BURST)
|
||||||
|
;1.8 HEADER COMPARE ERROR
|
||||||
|
;1.9 HEADER CRC ERROR
|
||||||
|
;2.1 ADDRESS OVERFLOW
|
||||||
|
;2.2 INVALID ADDRESS
|
||||||
|
DEFSYM %H1WLK==4000 ;2.3 ATTEMPT TO WRITE WHILE WRITE-LOCKED
|
||||||
|
;2.4 DRIVE TIMING ERROR. MAY DE-FORMAT THE TRACK.
|
||||||
|
;2.5 OPERATION NOT COMPLETE (3 REVS NO ACTION)
|
||||||
|
;2.6 DRIVE UNSAFE - WRITE LOCK OR FIELD SERVICE
|
||||||
|
DEFSYM %H1ECC==100000 ;2.7 DATA CHECK, ECC COMPUTATION INITIATED
|
||||||
|
DEFSYM %H1SOF==110730 ;SOFT ERRORS
|
||||||
|
|
||||||
|
DEFSYM %HRMNT==3_14 ;MAINTENANCE REGISTER (SEE RP04 MAINT MANUAL)
|
||||||
|
|
||||||
|
DEFSYM %HRATN==4_14 ;ATTENTION SUMMARY REGISTER (NOT REALLY PER-DRIVE)
|
||||||
|
;1.1-1.8 %HSATN DRIVES 0-7
|
||||||
|
;CLEARED BY ACCESSING DRIVE OR WRITING A 1
|
||||||
|
|
||||||
|
DEFSYM %HRADR==5_14 ;DESIRED SECTOR/TRACK ADDRESS
|
||||||
|
DEFSYM $HATRK==.BP 17400 ;TRACK 0-22 OCTAL
|
||||||
|
DEFSYM $HASEC==.BP 37 ;SECTOR 0-23 OCTAL (128 WORDS EACH)
|
||||||
|
;NOTE THESE FIELDS ARE 8-BITS EACH
|
||||||
|
|
||||||
|
DEFSYM %HRLAH==7_14 ;LOOK AHEAD (READ ONLY)
|
||||||
|
;NUMBER OF 64'THS OF A SECTOR
|
||||||
|
|
||||||
|
DEFSYM %HRTYP==6_14 ;DRIVE TYPE (RO)
|
||||||
|
;1.1-1.9 DRIVE TYPE NUMBER (20 FOR "RP04")
|
||||||
|
;2.3 DUAL-PORT DRIVE
|
||||||
|
;2.5 MOVING HEAD
|
||||||
|
;2.6 TAPE
|
||||||
|
;2.7 NOT BLOCK ADDRESSED
|
||||||
|
|
||||||
|
DEFSYM %HRSER==10_14 ;DRIVE SERIAL NUMBER (RO)
|
||||||
|
|
||||||
|
DEFSYM %HROFS==11_14 ;HEAD OFFSET
|
||||||
|
;1.1-1.8 OFFSET CODE
|
||||||
|
;1.9-2.7 MISC CRUFTIES
|
||||||
|
|
||||||
|
DEFSYM %HRCYL==12_14 ;DESIRED CYLINDER ADDRESS
|
||||||
|
; 0 TO 410 DECIMAL
|
||||||
|
|
||||||
|
DEFSYM %HRCCY==13_14 ;CURRENT CYLINDER ADDRESS
|
||||||
|
|
||||||
|
DEFSYM %HRER2==14_14 ;ERROR REGISTER 2
|
||||||
|
;MISC UNSAFE CONDITIONS IN DRIVE
|
||||||
|
|
||||||
|
DEFSYM %HRER3==15_14 ;ERROR REGISTER 3
|
||||||
|
;1.1-1.7 MORE MISC UNSAFES IN DRIVE
|
||||||
|
DEFSYM %H3SKI==40000 ;2.6 SEEK INCOMPLETE
|
||||||
|
DEFSYM %H3OFC==100000 ;2.7 OFF CYLINDER
|
||||||
|
|
||||||
|
DEFSYM %HRPOS==16_14 ;ECC POSITION
|
||||||
|
;LOCATION OF ERROR BURST WITHIN SECTOR
|
||||||
|
|
||||||
|
DEFSYM %HRPAT==17_14 ;ECC PATTERN
|
||||||
|
;11-BIT ERROR BURST
|
||||||
|
|
||||||
|
;DF10-C CHANNEL DEFINITIONS (22-BIT- (KI-) MODE)
|
||||||
|
|
||||||
|
DEFSYM $DFCAD==002600,, ;CURRENT ADDRESS - 1 (IN CONTROL WORD)
|
||||||
|
DEFSYM $DFWC==261600,, ;- WORD COUNT (IN CONTROL WORD)
|
||||||
|
DEFSYM $DFLAD==002600,, ;LAST DATA ADDRESS (IN STORED CONTROL WD)
|
||||||
|
DEFSYM $DFCWA==261600,, ;LAST CONTROL WORD ADDRESS (IN STORED CONTROL WORD)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
IFN $$TEMP,EXPUNG DEFSYM
|
||||||
289
src/system/rh11.defs48
Executable file
289
src/system/rh11.defs48
Executable file
@@ -0,0 +1,289 @@
|
|||||||
|
; -*- Midas -*-
|
||||||
|
.AUXIL
|
||||||
|
|
||||||
|
; Canonical symbol definition macro, FOO==BAR with error check.
|
||||||
|
IFNDEF DEFSYM,[
|
||||||
|
DEFINE DEFSYM X/
|
||||||
|
IRPS Z,,[X]
|
||||||
|
IFNDEF Z,X
|
||||||
|
.ELSE [ $$TEM1==Z
|
||||||
|
X
|
||||||
|
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
|
||||||
|
]
|
||||||
|
.ISTOP
|
||||||
|
TERMIN TERMIN
|
||||||
|
$$TEMP==1
|
||||||
|
] ;IFNDEF DEFSYM
|
||||||
|
.ELSE, $$TEMP==0
|
||||||
|
|
||||||
|
; For now, must have a disk type defined to get the correct register
|
||||||
|
; definitions.
|
||||||
|
|
||||||
|
IFNDEF RP06P,RP06P==0
|
||||||
|
IFNDEF RP07P,RP07P==0
|
||||||
|
IFNDEF RM03P,RM03P==0
|
||||||
|
IFNDEF RM80P,RM80P==0
|
||||||
|
|
||||||
|
IFN RP06P+RP07P+RM03P+RM80P-1,.FATAL Only one disk type allowed in RH11 DEFS
|
||||||
|
|
||||||
|
|
||||||
|
;;; Disk RH11 Interrupt vector:
|
||||||
|
DEFSYM PHVEC==254 ; Interrupts occur on level 6
|
||||||
|
; (high priority) on UBA #1.
|
||||||
|
|
||||||
|
;;; Disk RH11 Unibus register addresses:
|
||||||
|
|
||||||
|
DEFSYM %HRCS1=:776700 ;CTRL AND STATUS 1.
|
||||||
|
DEFSYM %HXSC== 1_15. ; Special Condition
|
||||||
|
DEFSYM %HXTRE==1_14. ; Transfer Error
|
||||||
|
DEFSYM %HXMCP==1_13. ; Mass I/O Control Bus Parity Error
|
||||||
|
DEFSYM %HXDVA==1_11. ; Drive Available
|
||||||
|
DEFSYM %HXPSE==1_10. ; Port Select
|
||||||
|
DEFSYM %HXA17==1_9. ; UB Address Extension Bit 17
|
||||||
|
DEFSYM %HXA16==1_8. ; UB Address Extension Bit 16
|
||||||
|
DEFSYM %HXRDY==1_7. ; Ready
|
||||||
|
DEFSYM %HXIE== 1_6. ; Interrupt Enable
|
||||||
|
DEFSYM $HXCMD==.BP 77 ; Bits 1-5 specify commands.
|
||||||
|
DEFSYM %HXGO== 1_0. ; GO bit
|
||||||
|
|
||||||
|
;;; Commands with bit 0 (GO) included:
|
||||||
|
|
||||||
|
DEFSYM %HMNOP==0 ; No Operation
|
||||||
|
DEFSYM %HMUNL==3 ; Unload ("Standby" -- the pack doesn't fly off).
|
||||||
|
DEFSYM %HMREC==7 ; Recalibrate
|
||||||
|
DEFSYM %HMCLR==11 ; Drive clear (reset errors etc.)
|
||||||
|
DEFSYM %HMRLS==13 ; Drive release (dual port)
|
||||||
|
DEFSYM %HMSRC==31 ; Search (for r.p.s.)
|
||||||
|
DEFSYM %HMWCH==51 ; Write Check (?doesn't work)
|
||||||
|
DEFSYM %HMWCF==53 ; Write Check Format, Header and Data (?doesn't work)
|
||||||
|
DEFSYM %HMWRT==61 ; Write Data
|
||||||
|
DEFSYM %HMRED==71 ; Read Data
|
||||||
|
DEFSYM %HMWHD==63 ; Write Header And Data (format the pack)
|
||||||
|
DEFSYM %HMRHD==73 ; Read Header and Data
|
||||||
|
IFN RP07P,[
|
||||||
|
DEFSYM %HMWTD==65 ; Write Track Descriptor
|
||||||
|
DEFSYM %HMRTD==75 ; Read Track Descriptor
|
||||||
|
]
|
||||||
|
DEFSYM %HMSEK==5 ; Seek to Cylinder
|
||||||
|
DEFSYM %HMOFS==15 ; Offset Heads Slightly
|
||||||
|
; Just sets %HSOFS on RP07
|
||||||
|
DEFSYM %HMCEN==17 ; Return Heads To Centerline
|
||||||
|
; Just clears %HSOFS on RP07
|
||||||
|
DEFSYM %HMACK==23 ; Acknowledge mounting of pack (required before I/O)
|
||||||
|
; No-op on RP07
|
||||||
|
DEFSYM %HMRDP==21 ; Read-In Preset
|
||||||
|
|
||||||
|
DEFSYM %HRWC=:776702 ;WORD COUNT.
|
||||||
|
|
||||||
|
DEFSYM %HRBA=:776704 ;UNIBUS ADDRESS.
|
||||||
|
|
||||||
|
DEFSYM %HRADR=:776706 ;DESIRED ADDRESS.
|
||||||
|
DEFSYM $HATRK==.BP 37400 ; Track
|
||||||
|
DEFSYM $HASEC==.BP 00177 ; Sector
|
||||||
|
;; These are the sizes on the RP07 -- other drives are smaller.
|
||||||
|
;; This is OK, as most places calculate this as Track_8+Sector
|
||||||
|
|
||||||
|
DEFSYM %HRCS2=:776710 ;CTRL AND STATUS 2.
|
||||||
|
DEFSYM %HYDLT==1_15. ; Data Late
|
||||||
|
DEFSYM %HYWCE==1_14. ; Write Check Error
|
||||||
|
DEFSYM %HYPE== 1_13. ; Parity Error
|
||||||
|
DEFSYM %HYNED==1_12. ; Non-existant Drive
|
||||||
|
DEFSYM %HYNEM==1_11. ; %HRBA is NXM during DMA
|
||||||
|
DEFSYM %HYPGE==1_10. ; Program Error
|
||||||
|
DEFSYM %HYMXF==1_9. ; Missed Transfer
|
||||||
|
DEFSYM %HYMDP==1_8. ; Mass Data Bus Parity Error
|
||||||
|
DEFSYM %HYOR== 1_7. ; Output Ready (for Silo buffer diag.)
|
||||||
|
DEFSYM %HYIR== 1_6. ; Input Ready (for Silo buffer diag.)
|
||||||
|
DEFSYM %HYCLR==1_5. ; Controller Clear
|
||||||
|
DEFSYM %HYPAT==1_4. ; Parity Test
|
||||||
|
DEFSYM %HYBAI==1_3. ; Unibus Address Increment Inhibit
|
||||||
|
DEFSYM $HYDSK==.BP 7 ; Bits 2-0 are the Unit Select.
|
||||||
|
|
||||||
|
DEFSYM %HRSTS=:776712 ;DRIVE STATUS.
|
||||||
|
DEFSYM %HSATN==1_15. ; Attention Active
|
||||||
|
DEFSYM %HSERR==1_14. ; Error
|
||||||
|
DEFSYM %HSPIP==1_13. ; Positioning In Progress
|
||||||
|
DEFSYM %HSMOL==1_12. ; Medium On-Line
|
||||||
|
DEFSYM %HSWRL==1_11. ; Write Locked
|
||||||
|
DEFSYM %HSLST==1_10. ; Last Sector Transferred
|
||||||
|
DEFSYM %HSPGM==1_9. ; Programmable
|
||||||
|
DEFSYM %HSDPR==1_8. ; Drive Present
|
||||||
|
DEFSYM %HSRDY==1_7. ; Drive Ready
|
||||||
|
DEFSYM %HSVV== 1_6. ; Volume Valid
|
||||||
|
; These are RP04-only bits in %HRSTS
|
||||||
|
; DEFSYM %HSDE1==1_5. ; Difference Equals 1
|
||||||
|
; DEFSYM %HSL64==1_4. ; Difference Less Than 64
|
||||||
|
; DEFSYM %HSGRV==1_3. ; Go Reverse
|
||||||
|
; DEFSYM %HSDIG==1_2. ; Drive To Inner Guard Band
|
||||||
|
; DEFSYM %HSF20==1_1. ; Drive Forward 20in/sec
|
||||||
|
; DEFSYM %HSF5== 1_0. ; Drive Forward 5in/sec
|
||||||
|
IFN RP07P,[
|
||||||
|
DEFSYM %HSILS==1_2. ; Interleaved Sectors
|
||||||
|
DEFSYM %HSWRN==1_1. ; Early Warning
|
||||||
|
DEFSYM %HSOFS==1_0. ; Offset Mode
|
||||||
|
]
|
||||||
|
|
||||||
|
DEFSYM %HRER1=:776714 ;ERROR 1.
|
||||||
|
DEFSYM %H1ECC==1_15. ; Data Check
|
||||||
|
DEFSYM %H1UNS==1_14. ; Unsafe
|
||||||
|
DEFSYM %H1OPI==1_13. ; Operation Incomplete
|
||||||
|
DEFSYM %H1DTE==1_12. ; Drive Timing Error
|
||||||
|
DEFSYM %H1WLK==1_11. ; Write Lock Error
|
||||||
|
DEFSYM %H1IAE==1_10. ; Invalid Address Error
|
||||||
|
DEFSYM %H1AOE==1_9. ; Address Overflow Error
|
||||||
|
DEFSYM %H1CRC==1_8. ; Header CRC Error
|
||||||
|
DEFSYM %H1HCE==1_7. ; Header Compare Error
|
||||||
|
DEFSYM %H1ECH==1_6. ; ECC Hard Error
|
||||||
|
DEFSYM %H1WCF==1_5. ; Write Clock Fail
|
||||||
|
DEFSYM %H1FER==1_4. ; Format Error
|
||||||
|
DEFSYM %H1PAR==1_3. ; Parity Error
|
||||||
|
DEFSYM %H1RMR==1_2. ; Register Modification Refused
|
||||||
|
DEFSYM %H1ILR==1_1. ; Illegal Register
|
||||||
|
DEFSYM %H1ILF==1_0. ; Illegal Function
|
||||||
|
|
||||||
|
DEFSYM %HRATN=:776716 ;ATTENTION SUMMARY.
|
||||||
|
; Each bit 7-0 corresponds to a drive asserting ATA.
|
||||||
|
|
||||||
|
DEFSYM %HRLAH=:776720 ;LOOK AHEAD.
|
||||||
|
; 2.2 - 1.7 Sector Count.
|
||||||
|
; 1.6 - 1.5 Encoded Extension Field.
|
||||||
|
|
||||||
|
DEFSYM %HRBUF=:776722 ;DATA BUFFER.
|
||||||
|
|
||||||
|
DEFSYM %HRMNT=:776724 ;MAINTENANCE.
|
||||||
|
|
||||||
|
DEFSYM %HRTYP=:776726 ;DRIVE TYPE.
|
||||||
|
; 2.7 NOT BLOCK ADDRESSED
|
||||||
|
; 2.6 TAPE
|
||||||
|
; 2.5 Moving Head (better be a 1!!)
|
||||||
|
; 2.3 Drive Request Required
|
||||||
|
; 1.9 - 1.1 Drive Type Number:
|
||||||
|
; RP04 = 20, RP05 = 21,
|
||||||
|
; RP06 = 22, RM03 = 24,
|
||||||
|
; RM80 = 26, RP07 = 42
|
||||||
|
|
||||||
|
DEFSYM %HRSER=:776730 ;SERIAL NUMBER.
|
||||||
|
|
||||||
|
DEFSYM %HROFS=:776732 ;OFFSET.
|
||||||
|
; 2.9-2.8 Unused
|
||||||
|
; 2.7 Sign Change (RP06 only)
|
||||||
|
; 2.7 Command Modifier (RP07 only)
|
||||||
|
; Must be set before %HMWHD, %HMWTD or %HMRTD
|
||||||
|
; 2.6 Move Track Descriptor (RP07 only)
|
||||||
|
; 0 = 128. bit track descriptor
|
||||||
|
; 1 = 344. bit track descriptor
|
||||||
|
; 2.4 Format Bit (1=16, 0=18)
|
||||||
|
; 2.3 ECC Inhibit
|
||||||
|
; 2.2 Header Compare Inhibit
|
||||||
|
; 2.1 Skip Sector Inhibit (RM 16bit only)
|
||||||
|
; 1.9 Unused
|
||||||
|
;
|
||||||
|
; 1.8 - 1.1 Unused on RP07
|
||||||
|
; RP07 doesn't support offsets
|
||||||
|
;
|
||||||
|
; RP06 Offsets
|
||||||
|
; 1.8 - 1.1 Offset Info
|
||||||
|
; +400 u" 00010000
|
||||||
|
; -400 u" 10010000
|
||||||
|
; +800 u" 00100000
|
||||||
|
; -800 u" 10100000
|
||||||
|
; +1200 u" 00110000
|
||||||
|
; -1200 u" 10110000
|
||||||
|
; Centerline 00000000
|
||||||
|
;
|
||||||
|
; RMxx Offsets
|
||||||
|
; 1.1-1.7 Unused
|
||||||
|
; 1.8 Offset Direction
|
||||||
|
; 0 - Away from spindle
|
||||||
|
; 1 - Towards spindle
|
||||||
|
|
||||||
|
DEFSYM %HRCYL=:776734 ;DESIRED CYLINDER.
|
||||||
|
|
||||||
|
IFN RP06P,[
|
||||||
|
|
||||||
|
DEFSYM %HRCCY=:776736 ;CURRENT CYLINDER.
|
||||||
|
|
||||||
|
DEFSYM %HRER2=:776740 ;ERROR 2.
|
||||||
|
DEFSYM %H2NHS==1_10. ; No Head Selection
|
||||||
|
DEFSYM %H2WRU==1_8. ; Write Ready Unsafe
|
||||||
|
|
||||||
|
DEFSYM %HRER3=:776742 ;ERROR 3.
|
||||||
|
DEFSYM %H3OFC==1_15. ; Off Cylinder
|
||||||
|
DEFSYM %H3SKI==1_14. ; Seek Incomplete (also sets UNS+ATA+PIP+RDY)
|
||||||
|
DEFSYM %H3DCL==1_6. ; DC power low (or perhaps AC?)
|
||||||
|
DEFSYM %H3ACL==1_5. ; AC power low (or perhaps DC?)
|
||||||
|
; (the documentation is confused about
|
||||||
|
; which is which.)
|
||||||
|
|
||||||
|
];RP06P
|
||||||
|
|
||||||
|
IFN RP07P,[
|
||||||
|
|
||||||
|
DEFSYM %HRCCY=:776736 ;CURRENT CYLINDER.
|
||||||
|
|
||||||
|
DEFSYM %HRER2=:776740 ;ERROR 2.
|
||||||
|
DEFSYM %H2PRG==1_15. ; Program Error
|
||||||
|
DEFSYM %H2CRM==1_14. ; Control ROM parity error
|
||||||
|
DEFSYM %H2H88==1_13. ; 8080 in drive is hung
|
||||||
|
;; DEC unimaginatively calls the following three bits
|
||||||
|
;; READ/WRITE UNSAFE 1, 2 and 3.
|
||||||
|
DEFSYM %H2WU3==1_12. ; Write current when no write in progress
|
||||||
|
DEFSYM %H2WU2==1_11. ; More than one head selected
|
||||||
|
DEFSYM %H2WU1==1_10. ; No write transitions during a write
|
||||||
|
DEFSYM %H2WOV==1_9. ; Write Overrun
|
||||||
|
DEFSYM %H2WRU==1_8. ; Write Ready Unsafe
|
||||||
|
DEFSYM $H2COD==.BP 377 ; Error Code
|
||||||
|
;; Error codes are:
|
||||||
|
;; 012 Seek operation too long.
|
||||||
|
;; 013 Guard band detected during seek operation.
|
||||||
|
;; 014 Seek operation overshoot.
|
||||||
|
;; 104 Guard band detection failure during recalibrate operation.
|
||||||
|
;; 105 Reference gap or guard band pattern detection failure during
|
||||||
|
;; recalibrate operation.
|
||||||
|
;; 106 Seek error during recalibrate operation.
|
||||||
|
;; 112 Heads have attempted to land on guard band during recalibrate
|
||||||
|
;; operation.
|
||||||
|
|
||||||
|
DEFSYM %HRER3=:776742 ;ERROR 3.
|
||||||
|
DEFSYM %H3BDS==1_15. ; Bad Sector
|
||||||
|
DEFSYM %H3SKI==1_14. ; Seek Incomplete (see error code in ER2)
|
||||||
|
DEFSYM %H3DSE==1_13. ; Defect Skip Error
|
||||||
|
DEFSYM %H3WCF==1_12. ; Write Current Failure
|
||||||
|
DEFSYM %H3LCF==1_11. ; Logic Control Failure
|
||||||
|
DEFSYM %H3LBC==1_10. ; Loss of Bit Clock
|
||||||
|
DEFSYM %H3LCE==1_9. ; Loss of Cylinder Error
|
||||||
|
DEFSYM %H3X88==1_8. ; 8080 in drive failed to respond to a command
|
||||||
|
DEFSYM %H3DCK==1_7. ; Device Check
|
||||||
|
DEFSYM %H3WHD==1_6. ; Index Unsafe (Bad %HMWHD)
|
||||||
|
DEFSYM %H3DCL==1_5. ; DC Low voltage
|
||||||
|
DEFSYM %H3SDF==1_4. ; Serdes Data (data buffer timing) Failure
|
||||||
|
DEFSYM %H3PAR==1_3. ; Data Parity Error during write operation
|
||||||
|
DEFSYM %H3SYB==1_2. ; Sync Byte error
|
||||||
|
DEFSYM %H3SYC==1_1. ; Sync Clock failure
|
||||||
|
DEFSYM %H3RTM==1_0. ; Run timeout
|
||||||
|
|
||||||
|
];RP07P
|
||||||
|
|
||||||
|
IFN RM03P\RM80P,[
|
||||||
|
; RM has no Current Cylinder Register, the Error 2 Register is
|
||||||
|
; in a different place with different bits, and there is no
|
||||||
|
; Error 3 register
|
||||||
|
|
||||||
|
DEFSYM %HRER2=:776742 ;ERROR 2.
|
||||||
|
DEFSYM %H2BSE==1_15. ; Bad Sector (sector marked bad on disk)
|
||||||
|
DEFSYM %H2SKI==1_14. ; Seek Incomplete (also sets UNS+ATA+PIP+RDY)
|
||||||
|
DEFSYM %H2OPE==1_13. ; Drive address plug was removed
|
||||||
|
DEFSYM %H2IVC==1_12. ; Invalid Command (really drive not valid)
|
||||||
|
DEFSYM %H2LSC==1_11. ; LSC Sucks
|
||||||
|
DEFSYM %H2LBC==1_10. ; Loss of Bitcheck (hardware lossage)
|
||||||
|
DEFSYM %H2DVC==1_7 ; Device Check (generic hardware lossage)
|
||||||
|
DEFSYM %H2SSE==1_5 ; Skip Sector found (can't happen in 18bit)
|
||||||
|
DEFSYM %H2DPE==1_3 ; Data Parity Error in controller
|
||||||
|
|
||||||
|
];RM03P\RM80P
|
||||||
|
|
||||||
|
DEFSYM %HRPOS=:776744 ;ECC POSITION.
|
||||||
|
|
||||||
|
DEFSYM %HRPAT=:776746 ;ECC PATTERN.
|
||||||
|
|
||||||
|
IFN $$TEMP,EXPUNG DEFSYM
|
||||||
41
src/system/rm03.defs5
Executable file
41
src/system/rm03.defs5
Executable file
@@ -0,0 +1,41 @@
|
|||||||
|
; -*- Midas -*-
|
||||||
|
.AUXIL
|
||||||
|
|
||||||
|
; Canonical symbol definition macro, FOO==BAR with error check.
|
||||||
|
IFNDEF DEFSYM,[
|
||||||
|
DEFINE DEFSYM X/
|
||||||
|
IRPS Z,,[X]
|
||||||
|
IFNDEF Z,X
|
||||||
|
.ELSE [ $$TEM1==Z
|
||||||
|
X
|
||||||
|
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
|
||||||
|
]
|
||||||
|
.ISTOP
|
||||||
|
TERMIN TERMIN
|
||||||
|
$$TEMP==1
|
||||||
|
] ;IFNDEF DEFSYM
|
||||||
|
.ELSE, $$TEMP==0
|
||||||
|
|
||||||
|
; Disk Physical Parameters for RM03
|
||||||
|
|
||||||
|
DEFSYM NCYLS==820. ; # CYLINDERS NORMALLY USED
|
||||||
|
DEFSYM XCYLS==823.-NCYLS ; # EXTRA CYLINDERS FOR SPARES, HACKS, ETC.
|
||||||
|
DEFSYM NHEDS==5 ; # TRACKS/CYLINDER
|
||||||
|
DEFSYM NSECS==30. ; # SECTORS/TRK
|
||||||
|
DEFSYM SECBLK==8 ; # SECTORS/BLOCK
|
||||||
|
DEFSYM NBLKSC==NHEDS*NSECS/SECBLK ; # BLKS/CYL
|
||||||
|
DEFSYM NBLKS==NCYLS*NBLKSC ; TOTAL # REG BLKS
|
||||||
|
DEFSYM XBLKS==XCYLS*NBLKSC ; # XTRA BLKS
|
||||||
|
DEFSYM TBLKS==NBLKS+XBLKS ; TOTAL BLKS
|
||||||
|
|
||||||
|
; TUTs are 3 bits per disk block, or 12*1024=12288 disk blocks per TUT
|
||||||
|
; block. TBLKS works out to be 14814, so it takes 2 blocks to TUT an
|
||||||
|
; RM03. This leaves plenty of room for the extra words at the beginning of
|
||||||
|
; the TUT.
|
||||||
|
DEFSYM NTUTBL==2 ; 2 BLOCKS PER TUT
|
||||||
|
|
||||||
|
; Allocate whole cylinders at a time.
|
||||||
|
DEFSYM DECADE==NBLKSC ; NUMBER OF BLOCKS TO ALLOCATE AT A TIME.
|
||||||
|
; QSWAPA AND QLASTB MUST BE MULTIPLES OF THIS.
|
||||||
|
|
||||||
|
IFN $$TEMP,EXPUNG DEFSYM
|
||||||
45
src/system/rm80.defs4
Executable file
45
src/system/rm80.defs4
Executable file
@@ -0,0 +1,45 @@
|
|||||||
|
; -*- Midas -*-
|
||||||
|
.AUXIL
|
||||||
|
|
||||||
|
; Canonical symbol definition macro, FOO==BAR with error check.
|
||||||
|
IFNDEF DEFSYM,[
|
||||||
|
DEFINE DEFSYM X/
|
||||||
|
IRPS Z,,[X]
|
||||||
|
IFNDEF Z,X
|
||||||
|
.ELSE [ $$TEM1==Z
|
||||||
|
X
|
||||||
|
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
|
||||||
|
]
|
||||||
|
.ISTOP
|
||||||
|
TERMIN TERMIN
|
||||||
|
$$TEMP==1
|
||||||
|
] ;IFNDEF DEFSYM
|
||||||
|
.ELSE, $$TEMP==0
|
||||||
|
|
||||||
|
; Disk Physical Parameters for RM80
|
||||||
|
|
||||||
|
; The RM80 actually has 561 cylinders, but it appears that the onboard
|
||||||
|
; microprocessor diagnostics may scribble on the last two cylinders, so
|
||||||
|
; we just leave them out of this.
|
||||||
|
|
||||||
|
DEFSYM NCYLS==556. ; # CYLINDERS NORMALLY USED
|
||||||
|
DEFSYM XCYLS==559.-NCYLS ; # EXTRA CYLINDERS FOR SPARES, HACKS, ETC.
|
||||||
|
DEFSYM NHEDS==14. ; # TRACKS/CYLINDER
|
||||||
|
DEFSYM NSECS==30. ; # SECTORS/TRK
|
||||||
|
DEFSYM SECBLK==8 ; # SECTORS/BLOCK
|
||||||
|
DEFSYM NBLKSC==NHEDS*NSECS/SECBLK ; # BLKS/CYL
|
||||||
|
DEFSYM NBLKS==NCYLS*NBLKSC ; TOTAL # REG BLKS
|
||||||
|
DEFSYM XBLKS==XCYLS*NBLKSC ; # XTRA BLKS
|
||||||
|
DEFSYM TBLKS==NBLKS+XBLKS ; TOTAL BLKS
|
||||||
|
|
||||||
|
; TUTs are 3 bits per disk block, or 12*1024=12288 disk blocks per TUT
|
||||||
|
; block. TBLKS works out to be 29172, so it takes 3 blocks to TUT an
|
||||||
|
; RM80. This leaves plenty of room for the extra words at the beginning of
|
||||||
|
; the TUT.
|
||||||
|
DEFSYM NTUTBL==3 ; 3 BLOCKS PER TUT
|
||||||
|
|
||||||
|
; Allocate whole cylinders at a time.
|
||||||
|
DEFSYM DECADE==NBLKSC ; NUMBER OF BLOCKS TO ALLOCATE AT A TIME.
|
||||||
|
; QSWAPA AND QLASTB MUST BE MULTIPLES OF THIS.
|
||||||
|
|
||||||
|
IFN $$TEMP,EXPUNG DEFSYM
|
||||||
41
src/system/rp06.defs1
Executable file
41
src/system/rp06.defs1
Executable file
@@ -0,0 +1,41 @@
|
|||||||
|
; -*- Midas -*-
|
||||||
|
.AUXIL
|
||||||
|
|
||||||
|
; Canonical symbol definition macro, FOO==BAR with error check.
|
||||||
|
IFNDEF DEFSYM,[
|
||||||
|
DEFINE DEFSYM X/
|
||||||
|
IRPS Z,,[X]
|
||||||
|
IFNDEF Z,X
|
||||||
|
.ELSE [ $$TEM1==Z
|
||||||
|
X
|
||||||
|
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
|
||||||
|
]
|
||||||
|
.ISTOP
|
||||||
|
TERMIN TERMIN
|
||||||
|
$$TEMP==1
|
||||||
|
] ;IFNDEF DEFSYM
|
||||||
|
.ELSE, $$TEMP==0
|
||||||
|
|
||||||
|
; Disk Physical Parameters for RP06
|
||||||
|
|
||||||
|
DEFSYM NCYLS==812. ; # CYLINDERS NORMALLY USED
|
||||||
|
DEFSYM XCYLS==815.-NCYLS ; # EXTRA CYLINDERS FOR SPARES, HACKS, ETC.
|
||||||
|
DEFSYM NHEDS==19. ; # TRACKS/CYLINDER
|
||||||
|
DEFSYM NSECS==20. ; # SECTORS/TRK
|
||||||
|
DEFSYM SECBLK==8 ; # SECTORS/BLOCK
|
||||||
|
DEFSYM NBLKSC==NHEDS*NSECS/SECBLK ; # BLKS/CYL
|
||||||
|
DEFSYM NBLKS==NCYLS*NBLKSC ; TOTAL # REG BLKS
|
||||||
|
DEFSYM XBLKS==XCYLS*NBLKSC ; # XTRA BLKS
|
||||||
|
DEFSYM TBLKS==NBLKS+XBLKS ; TOTAL BLKS
|
||||||
|
|
||||||
|
; TUTs are 3 bits per disk block, or 12*1024=12288 disk blocks per TUT
|
||||||
|
; block. TBLKS works out to be 38305, so it takes a little more than 3
|
||||||
|
; blocks to TUT an RP06. This leaves plenty of room for the extra words at
|
||||||
|
; the beginning of the TUT.
|
||||||
|
DEFSYM NTUTBL==4 ; 4 BLOCKS PER TUT
|
||||||
|
|
||||||
|
; Allocate whole cylinders at a time.
|
||||||
|
DEFSYM DECADE==NBLKSC ; NUMBER OF BLOCKS TO ALLOCATE AT A TIME.
|
||||||
|
; QSWAPA AND QLASTB MUST BE MULTIPLES OF THIS.
|
||||||
|
|
||||||
|
IFN $$TEMP,EXPUNG DEFSYM
|
||||||
41
src/system/rp07.defs1
Executable file
41
src/system/rp07.defs1
Executable file
@@ -0,0 +1,41 @@
|
|||||||
|
; -*- Midas -*-
|
||||||
|
.AUXIL
|
||||||
|
|
||||||
|
; Canonical symbol definition macro, FOO==BAR with error check.
|
||||||
|
IFNDEF DEFSYM,[
|
||||||
|
DEFINE DEFSYM X/
|
||||||
|
IRPS Z,,[X]
|
||||||
|
IFNDEF Z,X
|
||||||
|
.ELSE [ $$TEM1==Z
|
||||||
|
X
|
||||||
|
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
|
||||||
|
]
|
||||||
|
.ISTOP
|
||||||
|
TERMIN TERMIN
|
||||||
|
$$TEMP==1
|
||||||
|
] ;IFNDEF DEFSYM
|
||||||
|
.ELSE, $$TEMP==0
|
||||||
|
|
||||||
|
; Disk Physical Parameters for RP07
|
||||||
|
|
||||||
|
DEFSYM NCYLS==627. ; # CYLINDERS NORMALLY USED
|
||||||
|
DEFSYM XCYLS==630.-NCYLS ; # EXTRA CYLINDERS FOR SPARES, HACKS, ETC.
|
||||||
|
DEFSYM NHEDS==32. ; # TRACKS/CYLINDER
|
||||||
|
DEFSYM NSECS==43. ; # SECTORS/TRK
|
||||||
|
DEFSYM SECBLK==8 ; # SECTORS/BLOCK
|
||||||
|
DEFSYM NBLKSC==NHEDS*NSECS/SECBLK ; # BLKS/CYL
|
||||||
|
DEFSYM NBLKS==NCYLS*NBLKSC ; TOTAL # REG BLKS
|
||||||
|
DEFSYM XBLKS==XCYLS*NBLKSC ; # XTRA BLKS
|
||||||
|
DEFSYM TBLKS==NBLKS+XBLKS ; TOTAL BLKS
|
||||||
|
|
||||||
|
; TUTs are 3 bits per disk block, or 12*1024=12288 disk blocks per TUT
|
||||||
|
; block. TBLKS works out to be 108360, so it takes 9 blocks to TUT an
|
||||||
|
; RP07. This leaves plenty of room for the extra words at the beginning of
|
||||||
|
; the TUT.
|
||||||
|
DEFSYM NTUTBL==9 ; 9 BLOCKS PER TUT
|
||||||
|
|
||||||
|
; Allocate whole cylinders at a time.
|
||||||
|
DEFSYM DECADE==NBLKSC ; NUMBER OF BLOCKS TO ALLOCATE AT A TIME.
|
||||||
|
; QSWAPA AND QLASTB MUST BE MULTIPLES OF THIS.
|
||||||
|
|
||||||
|
IFN $$TEMP,EXPUNG DEFSYM
|
||||||
106
src/system/rp10.defs16
Executable file
106
src/system/rp10.defs16
Executable file
@@ -0,0 +1,106 @@
|
|||||||
|
.AUXIL
|
||||||
|
|
||||||
|
IFNDEF DEFSYM,[ ;ALLOW USER TO USE SYMBOLS IN OTHER WAYS IF HE WISHES.
|
||||||
|
;BUT NORMALLY, DEFSYM FOO==BAR DOES FOO==BAR WITH ERROR CHECK.
|
||||||
|
DEFINE DEFSYM X/
|
||||||
|
IRPS Z,,[X]
|
||||||
|
IFNDEF Z,X
|
||||||
|
.ELSE [
|
||||||
|
$$TEM1==Z
|
||||||
|
X
|
||||||
|
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
|
||||||
|
]
|
||||||
|
.ISTOP
|
||||||
|
TERMIN TERMIN
|
||||||
|
|
||||||
|
IFLE .MLLIT,.ERR .MLLIT MUST BE 1; SETTING IT TO 1.
|
||||||
|
.MLLIT==1
|
||||||
|
$$TEMP==1
|
||||||
|
]
|
||||||
|
.ELSE $$TEMP==0
|
||||||
|
|
||||||
|
|
||||||
|
;DISK PHYSICAL PARAMETERS
|
||||||
|
|
||||||
|
DEFSYM NCYLS==200. ;# CYLINDERS NORMALLY USED (RP02)
|
||||||
|
DEFSYM MCYLS==400. ;# CYLINDERS NORMALLY USED (RP03)
|
||||||
|
DEFSYM XCYLS==3 ;# EXTRA CYLINDERS FOR SPARES, HACKS, ETC.
|
||||||
|
DEFSYM NHEDS==20. ;# TRACKS/CYLINDER
|
||||||
|
DEFSYM NSECS==10. ;# SECTORS/TRK
|
||||||
|
DEFSYM SECBLK==8 ;# SECTORS/BLOCK
|
||||||
|
DEFSYM NBLKSC==NHEDS*NSECS/SECBLK ;# BLKS/CYL
|
||||||
|
DEFSYM NBLKS==NCYLS*NBLKSC ;TOTAL # REG BLKS (RP02)
|
||||||
|
DEFSYM MBLKS==MCYLS*NBLKSC ;TOTAL # REG BLKS (RP03)
|
||||||
|
DEFSYM XBLKS==XCYLS*NBLKSC ;# XTRA BLKS
|
||||||
|
DEFSYM TBLKS==MBLKS+XBLKS ;TOTAL BLKS
|
||||||
|
|
||||||
|
DEFSYM NTUTBL==1 ;1 BLOCK PER TUT
|
||||||
|
DEFSYM DECADE==20. ;NUMBER OF BLOCKS TO ALLOCATE AT A TIME
|
||||||
|
;QSWAPA AND QLASTB MUST BE MULTIPLES OF THIS
|
||||||
|
DEFSYM DPC==250 ;I/O DEVICE NUMBER
|
||||||
|
|
||||||
|
;DISK COMMANDS
|
||||||
|
|
||||||
|
DEFSYM DREADC==000000,, ;READ DATA
|
||||||
|
DEFSYM DWRITC==100000,, ;WRITE DATA
|
||||||
|
;OP CODE 2 UNUSED
|
||||||
|
DEFSYM DWRITH==300000,, ;WRITE HEADER AND DATA (FORMAT PACK)
|
||||||
|
DEFSYM DSEEKC==400000,, ;POSITION HEADS
|
||||||
|
DEFSYM DEASEC==500000,, ;CLEAR ATTENTIONS
|
||||||
|
DEFSYM DNOOPC==600000,, ;SELECT DRIVE
|
||||||
|
DEFSYM DRCALC==700000,, ;RECALIBRATE DRIVE
|
||||||
|
|
||||||
|
;BYTE POINTERS FOR ABOVE COMMANDS
|
||||||
|
|
||||||
|
DEFSYM DUNFLD==360300,, ;UNIT FIELD (ALL COMMANDS)
|
||||||
|
DEFSYM DCYL==261000,, ;CYLINDER FIELD (READ,WRIT,WRITH,SEEK)
|
||||||
|
DEFSYM DCYLXB==200100,, ;EXTRA BIT OF CYLINDER FIELD FOR RP03
|
||||||
|
DEFSYM DSURF==210500,, ;SURFACE FIELD (READ,WRIT,WRITH)
|
||||||
|
DEFSYM DSECT==140400,, ;SECTOR FIELD (READ,WRIT,WRITH)
|
||||||
|
|
||||||
|
;DATAI FIELDS
|
||||||
|
|
||||||
|
|
||||||
|
DEFSYM DUNFLI==410300,, ;UNIT FIELD
|
||||||
|
DEFSYM DCYLI==311000,, ;CYLINDER FIELD
|
||||||
|
DEFSYM DCYLXI==130100,, ;EXTRA BIT OF CYLINDER FIELD
|
||||||
|
|
||||||
|
DEFSYM SKINC==100,, ;SEEK INCOMPLETE
|
||||||
|
DEFSYM ONCYL==40,, ;ON CYLINDER
|
||||||
|
DEFSYM ONLINE==20,, ;ON LINE
|
||||||
|
DEFSYM FUNSAF==10,, ;FILE UNSAFE
|
||||||
|
DEFSYM NSCHDR==4,, ;NO SUCH DRIVE
|
||||||
|
DEFSYM RDONLY==2,, ;READ ONLY
|
||||||
|
DEFSYM NOWRIH==1, ;WRITE HEADER LOCKOUT
|
||||||
|
|
||||||
|
DEFSYM RP03BT==2000 ;SELECTED DRIVE IS AN RP03
|
||||||
|
DEFSYM SECTI==140500,,
|
||||||
|
|
||||||
|
DEFSYM ALLATT==776
|
||||||
|
|
||||||
|
;CONO INFORMATION
|
||||||
|
|
||||||
|
DEFSYM DCLEAR==175710 ;CLEAR ALL ERROR CONDITIONS
|
||||||
|
|
||||||
|
|
||||||
|
;CONI INFORMATION
|
||||||
|
|
||||||
|
DEFSYM PARER== 4000
|
||||||
|
DEFSYM SRCER== 40000
|
||||||
|
DEFSYM HRDER==130000
|
||||||
|
DEFSYM PROER==402300
|
||||||
|
DEFSYM WRTER== 1000
|
||||||
|
DEFSYM ALLER==577300
|
||||||
|
DEFSYM DONE==10
|
||||||
|
DEFSYM BUSY==20
|
||||||
|
|
||||||
|
;DF10 CHANNEL INFORMATION
|
||||||
|
|
||||||
|
DEFSYM $DFCAD==002600,, ;CURRENT ADDRESS - 1 (IN CONTROL WORD)
|
||||||
|
;ALSO BITS 4.7-4.9 HAVE 1'S COMPLEMENT OF MA 3.1-3.3
|
||||||
|
DEFSYM $DFWC==261600,, ;- WORD COUNT (IN CONTROL WORD)
|
||||||
|
DEFSYM $DFLAD==002600,, ;LAST DATA ADDRESS (IN STORED CONTROL WD)
|
||||||
|
DEFSYM $DFCWA==261600,, ;LAST CONTROL WORD ADDRESS (IN STORED CONTROL WORD)
|
||||||
|
|
||||||
|
|
||||||
|
IFN $$TEMP,EXPUNG DEFSYM
|
||||||
6685
src/system/salv.311
Executable file
6685
src/system/salv.311
Executable file
File diff suppressed because it is too large
Load Diff
2796
src/system/sysjob.117
Executable file
2796
src/system/sysjob.117
Executable file
File diff suppressed because it is too large
Load Diff
345
src/system/t20mac.1
Executable file
345
src/system/t20mac.1
Executable file
@@ -0,0 +1,345 @@
|
|||||||
|
;Random useful coding macros. GZ@OZ developed MACSYM.MID based on the
|
||||||
|
;Twenex monitor macro collection MACSYM.MAC - this is a non-Twenex-specific
|
||||||
|
;subset of that.
|
||||||
|
|
||||||
|
;Stuff supported (will add more stuff as need arises):
|
||||||
|
; FLD(VAL,MSK) & BIT(n) & POINT SIZE,ADDR,OFFSET
|
||||||
|
; MOVX AC,MASK & TXxx AC,MASK & JXx AC,MASK,ADDR & LOAD/STOR AC,MASK,ADDR
|
||||||
|
; DO./ENDDO. macros (and related stuff)
|
||||||
|
; IFxxx/ANxxx macros
|
||||||
|
; SAVEACS [A,B,C,D] & SAVE. [LOC,LOC,LOC]
|
||||||
|
|
||||||
|
|
||||||
|
.KILL ..XX,..TXZ,..TXO,..TXC,..X0,..X1,..X2,..X3,TOP.
|
||||||
|
.XCREF ..XX,..TXZ,..TXO,..TXC,..X0,..X1,..X2,..X3
|
||||||
|
.XCREF ..DX,..IX,..EX,.SAVX1,.SAVX2
|
||||||
|
|
||||||
|
IF2,.INEOF ;Don't bother if no code
|
||||||
|
|
||||||
|
;.NSTGW ;No storage words in this part
|
||||||
|
|
||||||
|
DEFINE FLD (VAL,MASK)
|
||||||
|
<.DPB <VAL>,<.BP <MASK>,>,0>TERMIN
|
||||||
|
|
||||||
|
DEFINE BIT (N)
|
||||||
|
<1_<35.-<N>>>TERMIN
|
||||||
|
|
||||||
|
DEFINE POINT SIZE=7,ADDR=0,COUNT=0
|
||||||
|
RADIX 8+2
|
||||||
|
..X1==SIZE
|
||||||
|
..X2==COUNT
|
||||||
|
RADIX 8
|
||||||
|
..XX==<..X2-1>/<36./..X1>
|
||||||
|
..X2==..X2-..XX*<36./..X1>
|
||||||
|
<<<36.-<..X1*..X2>>_30.>+<..X1_24.>+<ADDR>+..X1>
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
;MOVX - LOAD AC WITH CONSTANT
|
||||||
|
|
||||||
|
DEFINE MOVX AC,#MSK
|
||||||
|
IFE <-1,,0>&MSK,[MOVEI AC,MSK]
|
||||||
|
.ELSE [IFE <0,,-1>&MSK,[MOVSI AC,(MSK)]
|
||||||
|
.ELSE [IFE <<-1,,0>&MSK>-<-1,,0>,[HRROI AC,MSK]
|
||||||
|
.ELSE [IFE <<0,,-1>&MSK>-<0,,-1>,[HRLOI AC,(MSK&.LHALF)]
|
||||||
|
.ELSE [MOVE AC,[MSK]]]]]
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
;TX - TEST MASK
|
||||||
|
|
||||||
|
IRP OP,,[N,NA,OE,ON,OA,ZE,ZN,ZA,CE,CN,CA]
|
||||||
|
DEFINE TX!OP AC,#MSK
|
||||||
|
IFE <-1,,0>&MSK,[TR!OP AC,MSK]
|
||||||
|
.ELSE [IFE <0,,-1>&MSK,[TL!OP AC,(MSK)]
|
||||||
|
.ELSE [TD!OP AC,[MSK]]]
|
||||||
|
TERMIN
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
IRP OP,,[N,E]
|
||||||
|
DEFINE TXN!OP AC,#MSK
|
||||||
|
IFE <-1,,0>&MSK,[TRN!OP AC,MSK]
|
||||||
|
.ELSE [IFE <0,,-1>&MSK,[TLN!OP AC,(MSK)]
|
||||||
|
.ELSE [IFE MSK+1,[CAI!OP AC,0]
|
||||||
|
.ELSE [TDN!OP AC,[MSK]]]]
|
||||||
|
TERMIN
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
..TXZ==ANDI
|
||||||
|
..TXO==ORCMI
|
||||||
|
..TXC==EQVI
|
||||||
|
IRP OP,,[Z,O,C]
|
||||||
|
DEFINE TX!OP AC,#MSK
|
||||||
|
IFE <-1,,0>&MSK,[TR!OP AC,MSK]
|
||||||
|
.ELSE [IFE <0,,-1>&MSK,[TL!OP AC,(MSK)]
|
||||||
|
.ELSE [IFE <<-1,,0>&MSK>-<-1,,0>,[..TX!OP AC,-1#MSK]
|
||||||
|
.ELSE [TD!OP AC,[MSK]]]]
|
||||||
|
TERMIN
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
EQUALS IORX,TXO
|
||||||
|
EQUALS XORX,TXC
|
||||||
|
|
||||||
|
DEFINE ANDX AC,#MSK
|
||||||
|
TXZ AC,-1#MSK
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
SUBTTL JX -- JUMP ON MASK
|
||||||
|
|
||||||
|
;JXE -- JUMP IF MASKED BITS ARE EQUAL TO 0
|
||||||
|
;JXN -- JUMP IF MASKED BITS ARE NOT EQUAL TO 0
|
||||||
|
;JXO -- JUMP IF MASKED BITS ARE ALL ONES
|
||||||
|
;JXF -- JUMP IF MASKED BITS ARE NOT ALL ONES (FALSE)
|
||||||
|
|
||||||
|
DEFINE JXE AC,#MSK,?ADR
|
||||||
|
IFE MSK-.MINFI,[JUMPGE AC,ADR]
|
||||||
|
.ELSE [IFE MSK+1,[JUMPE AC,ADR]
|
||||||
|
.ELSE [TXNN AC,MSK
|
||||||
|
JRST ADR]]
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
DEFINE JXN AC,#MSK,?ADR
|
||||||
|
IFE MSK-.MINFI,[JUMPL AC,ADR]
|
||||||
|
.ELSE [IFE MSK+1,[JUMPN AC,ADR]
|
||||||
|
.ELSE [TXNE AC,MSK
|
||||||
|
JRST ADR]]
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
DEFINE JXO AC,#MSK,?ADR
|
||||||
|
IFE <.LZ MSK,>+<.TZ MSK,>-35.,[JXN AC,MSK,ADR]
|
||||||
|
.ELSE [TXC AC,MSK
|
||||||
|
TXCN AC,MSK
|
||||||
|
JRST ADR]
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
DEFINE JXF AC,#MSK,?ADR
|
||||||
|
IFE <.LZ MSK,>+<.TZ MSK,>-35.,[JXE AC,MSK,ADR]
|
||||||
|
.ELSE [TXC AC,MSK
|
||||||
|
TXCE AC,MSK
|
||||||
|
JRST ADR]
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
;LOAD, STOR
|
||||||
|
DEFINE LOAD AC,#MSK,?LOCN
|
||||||
|
IFE MSK+1,[MOVE AC,LOCN]
|
||||||
|
.ELSE [IFE MSK-777777,[HRRZ AC,LOCN]
|
||||||
|
.ELSE [IFE MSK-<-1,,0>,[HLRZ AC,LOCN]
|
||||||
|
.ELSE [LDB AC,[.BP MSK,LOCN]]]]
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
DEFINE STOR AC,#MSK,?LOCN
|
||||||
|
IFE MSK+1,[MOVEM AC,LOCN]
|
||||||
|
.ELSE [IFE MSK-777777,[HRRM AC,LOCN]
|
||||||
|
.ELSE [IFE MSK-<-1,,0>,[HRLM AC,LOCN]
|
||||||
|
.ELSE [DPB AC,[.BP MSK,LOCN]]]]
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
SUBTTL BLOCK MACROS
|
||||||
|
|
||||||
|
;MACROS TO PROVIDE SOME BLOCK HANDLING OF CODE
|
||||||
|
|
||||||
|
;DO. - LOOP STRUCTURE, DECLARES TOP OF LOOP
|
||||||
|
; LOOP. - JUMPS TO TOP OF LOOP
|
||||||
|
; EXIT. - EXITS LOOP
|
||||||
|
; TOP. - TAG AT TOP OF LOOP FOR JUMPS, E.G. SOJG T4,TOP.
|
||||||
|
; ENDLP. - TAG AT END OF LOOP FOR JUMPS, E.G. SOJL T4,ENDLP.
|
||||||
|
|
||||||
|
DEFINE DO.
|
||||||
|
..DX
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
DEFINE ..DX \%TGE,%SV1,%SV2,%SV3
|
||||||
|
EQUALS %SV1,TOP. ? EQUALS %SV2,ENDDO. ? EQUALS %SV3,ENDLP.
|
||||||
|
.KILL %SV1
|
||||||
|
TOP.==.
|
||||||
|
DEFINE ENDDO.
|
||||||
|
%TGE::EQUALS TOP.,%SV1 ? EQUALS ENDDO.,%SV2 ? EQUALS ENDLP.,%SV3
|
||||||
|
.KILL %TGE
|
||||||
|
TERMIN
|
||||||
|
DEFINE ENDLP.
|
||||||
|
%TGE!!TERMIN
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
DEFINE ENDDO.
|
||||||
|
.ERR ENDDO. outside loop
|
||||||
|
TERMIN
|
||||||
|
DEFINE ENDLP.
|
||||||
|
.ERR ENDLP. outside loop
|
||||||
|
TERMIN
|
||||||
|
TOP.==-1
|
||||||
|
|
||||||
|
DEFINE OD.
|
||||||
|
ENDDO.!TERMIN
|
||||||
|
|
||||||
|
DEFINE LOOP.
|
||||||
|
JRST TOP.!TERMIN
|
||||||
|
|
||||||
|
DEFINE EXIT.
|
||||||
|
JRST ENDLP.!TERMIN
|
||||||
|
|
||||||
|
|
||||||
|
;Conditionals
|
||||||
|
|
||||||
|
DEFINE IFSKP.
|
||||||
|
..IX [JRST ]
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
DEFINE IFNSK.
|
||||||
|
TRNA
|
||||||
|
..IX [JRST ]
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
DEFINE IFXN. AC,#MASK
|
||||||
|
IFE 1_35.-MASK,..IX [JUMPGE AC,]
|
||||||
|
.ELSE [IFE MASK+1,..IX [JUMPE AC,]
|
||||||
|
.ELSE [TXNN AC,MASK
|
||||||
|
..IX [JRST ]
|
||||||
|
]]
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
DEFINE IFXE. AC,#MASK
|
||||||
|
IFE 1_35.-MASK,..IX [JUMPL AC,]
|
||||||
|
.ELSE [IFE MASK+1,..IX [JUMPN AC,]
|
||||||
|
.ELSE [TXNE AC,MASK
|
||||||
|
..IX [JRST ]
|
||||||
|
]]
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
DEFINE IFE. AC
|
||||||
|
..IX [JUMPN AC,]
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
DEFINE IFN. AC
|
||||||
|
..IX [JUMPE AC,]
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
DEFINE IFG. AC
|
||||||
|
..IX [JUMPLE AC,]
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
DEFINE IFGE. AC
|
||||||
|
..IX [JUMPL AC,]
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
DEFINE IFLE. AC
|
||||||
|
..IX [JUMPG AC,]
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
DEFINE IFL. AC
|
||||||
|
..IX [JUMPGE AC,]
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
DEFINE ..IX OP,\%TAG,%SV1,%SV2
|
||||||
|
OP!%TAG
|
||||||
|
EQUALS %SV1,..TG ? EQUALS %SV2,ENDIF.
|
||||||
|
DEFINE ..TG LBL
|
||||||
|
%TAG!!LBL!TERMIN
|
||||||
|
DEFINE ENDIF.
|
||||||
|
..TG [::]
|
||||||
|
.KILL ..TG
|
||||||
|
EQUALS ..TG,%SV1 ? EQUALS ENDIF.,%SV2
|
||||||
|
TERMIN
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
DEFINE ELSE.
|
||||||
|
..EX
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
DEFINE ..EX \%TAG
|
||||||
|
JRST %TAG
|
||||||
|
..TG [::]
|
||||||
|
DEFINE ..TG LBL
|
||||||
|
%TAG!!LBL!TERMIN
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
DEFINE ..TG LBL
|
||||||
|
.ERR Conditional construct outside a conditional
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
DEFINE ENDIF.
|
||||||
|
.ERR ENDIF. outside a conditional
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
|
||||||
|
;GENERAL CASES WITHIN CONDITIONALS
|
||||||
|
|
||||||
|
DEFINE ANSKP.
|
||||||
|
JRST ..TG
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
DEFINE ANNSK.
|
||||||
|
TRNA
|
||||||
|
JRST ..TG
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
DEFINE ANDXN. AC,#MASK
|
||||||
|
IFE 1_35.-MASK,JUMPGE AC,..TG
|
||||||
|
.ELSE [IFE MASK+1,JUMPE AC,..TG
|
||||||
|
.ELSE [TXNN AC,MASK
|
||||||
|
JRST ..TG
|
||||||
|
]]
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
DEFINE ANDXE. AC,#MASK
|
||||||
|
IFE 1_35.-MASK,JUMPL AC,..TG
|
||||||
|
.ELSE [IFE MASK+1,JUMPN AC,..TG
|
||||||
|
.ELSE [TXNE AC,MASK
|
||||||
|
JRST ..TG
|
||||||
|
]]
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
DEFINE ANDE. AC
|
||||||
|
JUMPN AC,..TG
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
DEFINE ANDN. AC
|
||||||
|
JUMPE AC,..TG
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
DEFINE ANDG. AC
|
||||||
|
JUMPLE AC,..TG
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
DEFINE ANDGE. AC
|
||||||
|
JUMPL AC,..TG
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
DEFINE ANDLE. AC
|
||||||
|
JUMPG AC,..TG
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
DEFINE ANDL. AC
|
||||||
|
JUMPGE AC,..TG
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; SAVEAC [A,B,C]
|
||||||
|
; Supports +1/+2 returns.
|
||||||
|
; Unlike macro version, supports arbitrary locations (not just AC's)
|
||||||
|
; and doesn't clobber AC16. Assumes stack in P, though.
|
||||||
|
|
||||||
|
DEFINE SAVEAC ACS
|
||||||
|
IRP AC,,[ACS]
|
||||||
|
PUSH P,AC
|
||||||
|
..XX==.IRPCNT
|
||||||
|
TERMIN
|
||||||
|
.SAVX1 ..XX+1,[ACS]
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
EQUALS SAVE.,SAVEAC ;Not in MACRO version...
|
||||||
|
|
||||||
|
DEFINE .SAVX1 #N#,ACS
|
||||||
|
PUSH P,[[CAIA
|
||||||
|
AOS -N(P)
|
||||||
|
.SAVX2 [ACS]
|
||||||
|
POPJ P,
|
||||||
|
]]
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
DEFINE .SAVX2 ACS
|
||||||
|
IRP AC,REST,[ACS]
|
||||||
|
.SAVX2 [REST]
|
||||||
|
POP P,AC
|
||||||
|
.ISTOP
|
||||||
|
TERMIN
|
||||||
|
TERMIN
|
||||||
|
|
||||||
92
src/system/t300.defs7
Executable file
92
src/system/t300.defs7
Executable file
@@ -0,0 +1,92 @@
|
|||||||
|
.AUXIL
|
||||||
|
|
||||||
|
;ALLOW USER TO USE SYMBOLS IN OTHER WAYS IF HE WISHES.
|
||||||
|
;BUT NORMALLY, DEFSYM FOO==BAR DOES FOO==BAR WITH ERROR CHECK.
|
||||||
|
|
||||||
|
IFNDEF DEFSYM,[
|
||||||
|
DEFINE DEFSYM X/
|
||||||
|
IRPS Z,,[X]
|
||||||
|
IFNDEF Z,X
|
||||||
|
.ELSE [
|
||||||
|
$$TEM1==Z
|
||||||
|
X
|
||||||
|
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
|
||||||
|
]
|
||||||
|
.ISTOP
|
||||||
|
TERMIN TERMIN
|
||||||
|
|
||||||
|
IFLE .MLLIT,.ERR .MLLIT MUST BE 1; SETTING IT TO 1.
|
||||||
|
.MLLIT==1
|
||||||
|
$$TEMP==1
|
||||||
|
];IF Not DEFined DEFSYM
|
||||||
|
.ELSE $$TEMP==0
|
||||||
|
|
||||||
|
;DISK PHYSICAL PARAMETERS (CENTURY DATA T-300 AND 2561 CONTROLLER)
|
||||||
|
;SINCE WE HAVE ALSO AN RH10 CONTROLLER, THESE ARE SUFFIXED WITH A 1
|
||||||
|
|
||||||
|
DEFSYM NCYLS1==812. ;# CYLINDERS NORMALLY USED
|
||||||
|
DEFSYM XCYLS1==815.-NCYLS1 ;# CYLINDERS FOR SPARES, HACKS, ETC.
|
||||||
|
DEFSYM NHEDS1==19. ;# TRACKS/CYLINDER
|
||||||
|
DEFSYM NSECS1==32. ;# SECTORS/TRACK (256. 16-BIT WORDS)
|
||||||
|
DEFSYM SECBL1==12. ;# SECTORS/BLOCK
|
||||||
|
DEFSYM NBLKC1==NHEDS1*NSECS1/SECBL1 ;# BLOCKS/CYLINDER
|
||||||
|
DEFSYM NBLKS1==NCYLS1*NBLKC1 ;# BLOCKS NORMALLY USED
|
||||||
|
DEFSYM XBLKS1==XCYLS1*NBLKC1 ;# BLOCKS FOR HACKS
|
||||||
|
DEFSYM TBLKS1==NBLKS1+XBLKS1 ;TOTAL BLOCKS
|
||||||
|
|
||||||
|
DEFSYM NTUTB1==4 ;4 BLOCKS PER TUT HERE
|
||||||
|
DEFSYM TUTBL1==MFDBLK-NTUTB1 ;TUT ALSO STARTS AT A DIFFERENT PLACE
|
||||||
|
|
||||||
|
;TAKE DECADE FROM RH1O DEFS
|
||||||
|
;DEFSYM DECADE==NBLKSC ;NUMBER OF BLOCKS TO ALLOCATE AT A TIME
|
||||||
|
; ;QSWAPA AND QLASTB MUST BE MULTIPLES OF THIS.
|
||||||
|
; ;DECADE SIZE = CYLINDER SIZE FOR KLFEDR'S SAKE
|
||||||
|
|
||||||
|
;10/11 COMMUNICATION AREA IS 14. WORDS STARTING 48. WORDS INTO THE 64.-WORD DL10 AREA
|
||||||
|
|
||||||
|
DEFSYM DSCCHK=DL10AR+60 ;MUST BE 2561 OCTAL
|
||||||
|
DEFSYM DSCREQ=DL10AR+61 ;SET NON-ZERO BY 10 TO SIGNAL REQUEST TO 11
|
||||||
|
DEFSYM DSCDON=DL10AR+62 ;SET NON-ZERO BY 11 TO SIGNAL DONE TO 10
|
||||||
|
DEFSYM DSCFLT=DL10AR+63 ;0 NO FAULT
|
||||||
|
DEFSYM %DFRST==100000 ;POWER CYCLED OR BROKEN, SO CONTROLLER WAS RESET
|
||||||
|
DEFSYM %DFCQE==10000 ;CONSISTENCY ERROR IN COMMAND QUEUE
|
||||||
|
DEFSYM %DFNXM==4000 ;NXM ERROR IN COMMAND QUEUE
|
||||||
|
DEFSYM %DFPAR==2000 ;PARITY ERROR IN COMMAND QUEUE
|
||||||
|
; IF ONE OF THESE BITS IS ON, BITS 1-0 AND DSCSTS
|
||||||
|
; ARE THE ERROR ADDRESS
|
||||||
|
;BITS 7-0 SYSTEM FAULT CODE IF LEFT BYTE IS ZERO
|
||||||
|
; SEE THE 2561 OEM MANUAL FOR MEANING OF FAULT CODES
|
||||||
|
DEFSYM DSCSTS=DL10AR+64 ;STATUS BITS AS FOLLOWS
|
||||||
|
DEFSYM %DSRTR==100000 ;COMMAND WAS RETRIED
|
||||||
|
DEFSYM %DSECH==40000 ;UNCORRECTABLE DATA ERROR (ECC HARD)
|
||||||
|
DEFSYM %DSECC==20000 ;CORRECTED DATA ERROR
|
||||||
|
DEFSYM %DSIDE==10000 ;ID ERROR
|
||||||
|
DEFSYM %DSHCE==4000 ;ADDRESS ERROR (HEADER COMPARE ERROR)
|
||||||
|
DEFSYM %DSPRT==2000 ;WRITE-PROTECT STATUS OF SECTOR (ABORTS WRITE COMMAND)
|
||||||
|
DEFSYM %DSALT==1000 ;ALTERNATE-SECTOR STATUS (ABORTS READ, WRITE, AND CHECK)
|
||||||
|
DEFSYM %DSOVR==400 ;FIFO OVER-RUN, NOT CORRECTED BY 1 RETRY
|
||||||
|
DEFSYM %DSSKE==200 ;SEEK ERROR FROM DRIVE
|
||||||
|
DEFSYM %DSOFL==100 ;DRIVE OFF-LINE OR FAULT
|
||||||
|
DEFSYM %DSFLT==20 ;DRIVE FAULT
|
||||||
|
DEFSYM %DSNXM==10 ;NXM ON PDP11 MEMORY
|
||||||
|
DEFSYM %DSPAR==4 ;PARITY ERROR IN PDP11 MEMORY
|
||||||
|
DEFSYM %DSSFL==2 ;SYSTEM FAULT, SEE LOW BYTE OF DSCFLT
|
||||||
|
DEFSYM %DSWLK==1 ;DRIVE WRITE-LOCKED, WRITE ABORTED
|
||||||
|
|
||||||
|
DEFSYM DSCCMD=DL10AR+65 ;COMMAND CODE AS FOLLOWS
|
||||||
|
DEFSYM %DMSNS==2 ;SENSE DRIVE STATE. DSCSTS GETS CODE FOR DRIVE TYPE IN
|
||||||
|
; BITS 14-8 (10 FOR T-300), AND %DSWLK, %DSFLT, %DSOFL, %DSSKE
|
||||||
|
DEFSYM %DMTST==3 ;TEST SPECIFIED DRIVE (RUNS DIAGNOSTICS)
|
||||||
|
DEFSYM %DMREC==4 ;RECALIBRATE
|
||||||
|
DEFSYM %DMSEK==5 ;SEEK
|
||||||
|
DEFSYM %DMWRT==6 ;WRITE DATA
|
||||||
|
DEFSYM %DMRED==20 ;READ DATA. ADD 1-10 FOR VARIOUS RECOVERY FEATURES AS
|
||||||
|
; DOCUMENTED IN THE 2561 OEM MANUAL.
|
||||||
|
|
||||||
|
DEFSYM DSCDRV=DL10AR+66 ;DRIVE NUMBER (0 IS FIRST DRIVE ON 11)
|
||||||
|
DEFSYM DSCCYL=DL10AR+67 ;CYLINDER NUMBER
|
||||||
|
DEFSYM DSCHED=DL10AR+70 ;HEAD NUMBER
|
||||||
|
DEFSYM DSCSEC=DL10AR+71 ;SECTOR NUMBER
|
||||||
|
DEFSYM DSCPNT=DL10AR+72 ;4 12-BIT BYTE POINTERS TO DATA TO TRANSFER
|
||||||
|
|
||||||
|
IFN $$TEMP,EXPUNG DEFSYM
|
||||||
3629
src/system/tcp.275
Executable file
3629
src/system/tcp.275
Executable file
File diff suppressed because it is too large
Load Diff
575
src/system/tcpbuf.58
Executable file
575
src/system/tcpbuf.58
Executable file
@@ -0,0 +1,575 @@
|
|||||||
|
COMMENT |
|
||||||
|
|
||||||
|
Notes on TCP input and output buffers
|
||||||
|
|
||||||
|
Ideally the TCP segment queues should be logically separate from the IP
|
||||||
|
datagram queues, but for efficiency it should be possible to have them
|
||||||
|
both together.
|
||||||
|
|
||||||
|
Input buffers are expected to be lists of datagrams/segments.
|
||||||
|
This is reasonably simple, since pointers (in known places) can just be
|
||||||
|
set up to the data (whereever it is in the datagram/segment).
|
||||||
|
There is a problem with allocation/windows in this scheme, since it
|
||||||
|
is possible to run out of datagram buffers before running out of window,
|
||||||
|
if the remote site becomes cretinous about it and sends only a few
|
||||||
|
bytes per dgram very fast. But in that case re-transmission can just
|
||||||
|
force it to buffer up its output, so that future dgrams will be somewhat
|
||||||
|
more filled, so it is probably OK. If this does become a screw, can
|
||||||
|
add code to do compaction at clock level.
|
||||||
|
|
||||||
|
Output buffers are a little more uncertain. Could have simple
|
||||||
|
circular buffer, with appropriate pointers set up so that IMP output
|
||||||
|
message is read directly from the buffer (same as NCP). Alternatively
|
||||||
|
could have queue of segments/datagrams all ready to go. Guess I'd
|
||||||
|
like to try doing the latter, to keep things "simple" by minimizing
|
||||||
|
the number of kinds of things floating around.
|
||||||
|
|
||||||
|
Problem with putting output datagram together: can't always predict
|
||||||
|
ahead of time how big the leaders are going to be! Especially true
|
||||||
|
for IP level, which TCP is not supposed to know too much about. Thus
|
||||||
|
if not careful, it could happen that output is put into a segment too
|
||||||
|
close to the start of the buffer, so that there is not enough room for
|
||||||
|
the TCP and IP headers to fit in. Have to look at this; may need to
|
||||||
|
give up notion of keeping all the packet internals nicely contiguous.
|
||||||
|
Maximum IP header length is set at 60 bytes (15 words). The maximum
|
||||||
|
TCP header length is also 15 words.
|
||||||
|
Looking at the currently defined options, it seems unlikely that ITS
|
||||||
|
will use any of them, and if so, they can be predicted fairly easily on
|
||||||
|
a per-connection basis, so things should work out okay. Note that
|
||||||
|
the IP level can always simply fragment stuff if it really wants to be
|
||||||
|
that complex.
|
||||||
|
|
||||||
|
It would be nice to be able to keep track of stuff which is on the
|
||||||
|
device (IMP) output queue but hasn't yet gone out, in order to add
|
||||||
|
last-minute bits (like ACK) or even some more data. Idea: output "queue"
|
||||||
|
is just a list of TCP connections that need attention, so can always
|
||||||
|
go in and mung stuff (even change mind about outputting) just by playing
|
||||||
|
with connection flags/lists. This is basically how NCP does it.
|
||||||
|
|
||||||
|
Re packet buffer design:
|
||||||
|
Somewhat more hypothetical is the notion of keeping a "usage
|
||||||
|
count" for each buffer, so that pointers from the packet table entries
|
||||||
|
can point to several different buffers and not just one. When a usage
|
||||||
|
count hits zero, put the buffer on the freelist. Actually this is not
|
||||||
|
really needed for the case of a table entry pointing to more than one
|
||||||
|
buffer, but it IS needed for the case of more than one table entry
|
||||||
|
pointing to the same buffer. This might happen, for example, if
|
||||||
|
an internet bypass were set up so that datagrams going to ourselves
|
||||||
|
were simply vectored directly to the input queues. But for the
|
||||||
|
time being, it probably isn't too outrageous to simply re-copy the
|
||||||
|
datagram in question. (Also better emulates a fake network device).
|
||||||
|
|
||||||
|
Suggest that lists point directly to themselves rather than
|
||||||
|
to start of entry; this allows low-level list routines to be used
|
||||||
|
on all lists. The higher-level routines of course have to know what
|
||||||
|
offsets to use for a specific list. Alternatively provide different routines
|
||||||
|
for each offset needed, and equate references to the appropriate routine
|
||||||
|
for each use. (This is what I'm trying at the moment, hence the IRPS)
|
||||||
|
|
||||||
|
May want to use format <head>,,<list ptr> where <head> is the addr
|
||||||
|
of the initial pointer (not initial node). This allows backtracking
|
||||||
|
to figure out what TCP connection or IP queue a packet belongs to.
|
||||||
|
Brute force approach is to simply have another word for the TCB index, etc.
|
||||||
|
|
||||||
|
If this stuff is general enough it could be used for CHAOS packets also.
|
||||||
|
|
|
||||||
|
|
||||||
|
COMMENT |
|
||||||
|
|
||||||
|
-- Lots of this is wrong now... --
|
||||||
|
|
||||||
|
Buffers are all 256 (400 octal) words long, and 4 of them fit on one
|
||||||
|
ITS page. This size was chosen because the maximum length of an IMP
|
||||||
|
message (not counting IMP-Host padding) is 255 words of 4 8-bit bytes
|
||||||
|
per word. This allows one extra word; not much. Taking away the
|
||||||
|
3 IMP leader words (which has to be done anyway for NCP to continue
|
||||||
|
working) gives us 4 spare words per buffer.
|
||||||
|
|
||||||
|
This still may not be enough. Rather than shoe-horn some clever stuff
|
||||||
|
into each buffer header, I am opting to maintain "Packet Entries" in a
|
||||||
|
"Packet Table" separate from the "Packet Buffers" themselves. All
|
||||||
|
messages/datagrams/segments/packets are identified by a pointer
|
||||||
|
into the table. (Could use index, as for sockets/TCBs, but this is
|
||||||
|
awkward for lists). The entry identified by the pointer will contain
|
||||||
|
the actual pointers into the buffer associated with that packet.
|
||||||
|
[NOTE: may want to have these pointers point into various places, not
|
||||||
|
necessarily all the same buffer. Must think about this.]
|
||||||
|
|
||||||
|
Free buffers are linked by a freelist pointer in their first word,
|
||||||
|
with an identifier in the second word to help GC. The only design
|
||||||
|
issue for the buffers themselves is how to set things up so that it is
|
||||||
|
easy to GC a large freelist, i.e. identify pages that have nothing
|
||||||
|
but free buffers in them and thus can be removed from the system's
|
||||||
|
address space. Currently I have simply adopted the strategem used for
|
||||||
|
CHAOS buffers (at CHCLN) to have the core job snuffle over the freelist.
|
||||||
|
|
||||||
|
Note that the low-level routines for manipulating lists are actually
|
||||||
|
referenced via macros which are given an offset as argument. This
|
||||||
|
offset refers to the offset between the node pointer and the location
|
||||||
|
of the "next" pointer in the node; the macro will assemble into a
|
||||||
|
call to the right routine for that offset. Currently only offsets
|
||||||
|
up to 2 are supported; any lists that the packet is put on must
|
||||||
|
be threaded through the first 3 words of the node, and the macros check
|
||||||
|
for this.
|
||||||
|
|
|
||||||
|
|
||||||
|
SUBTTL Packet Tracing Code
|
||||||
|
|
||||||
|
IFNDEF PKTTRC,PKTTRC==:0 ; Nonzero turns tracing code on
|
||||||
|
IF1,IFN PKTTRC,.ERR IP packet tracing code included.
|
||||||
|
|
||||||
|
COMMENT |
|
||||||
|
|
||||||
|
This code can be used to keep a history of what happens to a packet.
|
||||||
|
The history is stored in the packet buffer as a series of indexes
|
||||||
|
into a table of named events.
|
||||||
|
|
||||||
|
To trace a particular event use the TRCPKT macro.
|
||||||
|
|
||||||
|
TRCPKT(REG,"String")
|
||||||
|
|
||||||
|
REG is the register which currently contains an index to the packet
|
||||||
|
buffer table. The code is more efficient if the register is R. String
|
||||||
|
is the description of the event.
|
||||||
|
|
||||||
|
To generate the event table, you must call the TRCCOD macro somewhere
|
||||||
|
after the last call to TRCPKT.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
||||||
|
%NTRCE==:77 ; Allow this many trace events. Value must be a bit mask (all
|
||||||
|
; ones) to work right. If you make it bigger than 77
|
||||||
|
; you have to change the "TRC%" in the macros to something
|
||||||
|
; shorter, too.
|
||||||
|
|
||||||
|
%%%TRC==1
|
||||||
|
|
||||||
|
; TRCCOD generates TRCTBL, which holds <code address,,address of event string>
|
||||||
|
; for each trace event.
|
||||||
|
DEFINE TRCCOD
|
||||||
|
IFN PKTTRC,[
|
||||||
|
TRC%0==:<0,,[ASCIZ /Null event/]>
|
||||||
|
TRCTBL: REPEAT %%%TRC,CONC TRC%,\.RPCNT
|
||||||
|
IF2, REPEAT %%%TRC,CONC EXPUNGE TRC%,\.RPCNT
|
||||||
|
]
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
DEFINE TRCPKT REG,&(EVENT)
|
||||||
|
IFN PKTTRC,[
|
||||||
|
IFG %%%TRC-%NTRCE,.ERR Too many packet trace events!
|
||||||
|
CONC TRC%,\%%%TRC,==:<.,,[ASCIZ EVENT]>
|
||||||
|
IFN REG-R,[
|
||||||
|
PUSH P,R
|
||||||
|
MOVE R,REG
|
||||||
|
]
|
||||||
|
PUSH P,TT
|
||||||
|
MOVEI TT,%%%TRC
|
||||||
|
PUSHJ P,PKTPTS
|
||||||
|
POP P,TT
|
||||||
|
IFN REG-R,[
|
||||||
|
POP P,R
|
||||||
|
]
|
||||||
|
%%%TRC==%%%TRC+1
|
||||||
|
]
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
IFN PKTTRC,[
|
||||||
|
|
||||||
|
; Store information in the packet history data buffer
|
||||||
|
; "Information" is a 6-bit quantity which indexes into a table
|
||||||
|
; of strings.
|
||||||
|
; TT/ Reason index
|
||||||
|
; R/ Pkt Buffer index
|
||||||
|
|
||||||
|
PKTPTS: CONO PI,PIOFF ; Freeze machine
|
||||||
|
DPB TT,PK.HSP(R) ; Store trace info
|
||||||
|
IBP PK.HSP(R) ; Bump BP
|
||||||
|
HRRZ TT,PK.HSP(R) ; Pick up history byte ref (address only)
|
||||||
|
CAIL TT,PK.HSP(R) ; If we've gotten to the bottom,
|
||||||
|
JRST [ MOVEI TT,PK.HST(R) ;Wrap around
|
||||||
|
HRLI TT,(<.BP %NTRCE_30.>) ; BP to left 6 bits
|
||||||
|
MOVEM TT,PK.HSP(R) ;Reset it to top
|
||||||
|
JRST .+1 ]
|
||||||
|
CONO PI,PION
|
||||||
|
POPJ P,
|
||||||
|
]
|
||||||
|
|
||||||
|
;;; Packet Table Entries
|
||||||
|
|
||||||
|
EBLK
|
||||||
|
IFNDEF PKBSIZ,PKBSIZ==1000 ; 512. words per packet buffer (2048 byte MTU)
|
||||||
|
IFNDEF NPKPGS,NPKPGS==40. ; # pages OK to use for packet buffers
|
||||||
|
NPKB==:<NPKPGS*<2000/PKBSIZ>> ; # packet buffers available
|
||||||
|
NPKE==:NPKB ; # packet entry nodes.
|
||||||
|
IFN NPKB-NPKE,.ERR You must fix the UFLS at PKTGF.
|
||||||
|
|
||||||
|
PKETBL: OFFSET -.
|
||||||
|
; General (device driver, etc)
|
||||||
|
PK.FLG:: 1,,PKETBL+PK.L ; General - <flags>,,<PE freelist or dev driver list>
|
||||||
|
%PKPIL==:<SETZ> ; Packet locked at PI level, being output
|
||||||
|
%PKODN==:<1000,,> ; Packet has been output (else not yet)
|
||||||
|
;;; %PKNOF==:<2000,,> ; Packet should not be freed when output done.
|
||||||
|
%PKFLS==:<4000,,> ; Flush pkt if seen on output queue (ie dont output)
|
||||||
|
%PKRTR==:<10000,,> ; Packet is being re-transmitted by TCP
|
||||||
|
.SEE %PQFLX ; Low bits of LH used for on-list flags.
|
||||||
|
|
||||||
|
PK.IP:: 0 ; IP Datagram - <IP Header ptr>,,<IP Datagram list>
|
||||||
|
; May be strung on Internet Queue, IP output queue
|
||||||
|
PK.TCP:: 0 ; TCP Segment - <TCP Header pointer>,,<TCP Segment list>
|
||||||
|
; May be strung on TCB input Q, output retransmit Q
|
||||||
|
PK.TCI:: 0 ; TCP Segment - <# bytes data><# bytes offset><TCB index>
|
||||||
|
PK%TDL==:<777700,,0> ; # octets of data in TCP segment
|
||||||
|
PK%TDO==:< 77,,770000> ; # octets data is offset from TCP header
|
||||||
|
PK%TCB==:< ,,007777> ; TCB connection index
|
||||||
|
PK$TDL==:<.BP PK%TDL,PK.TCI>
|
||||||
|
PK$TDO==:<.BP PK%TDO,PK.TCI>
|
||||||
|
PK$TCB==:<.BP PK%TCB,PK.TCI>
|
||||||
|
PK.BUF:: 0 ; General - <# wds>,,<addr of buffer>
|
||||||
|
PK.TIM:: 0 ; General - Time sent or received, int level (Sys time)
|
||||||
|
PK.DST:: 0 ; Immediate destination address if on output queue
|
||||||
|
PK.HWI:: 0 ; Hardware Information - currently KS Unibus address
|
||||||
|
|
||||||
|
IFN PKTTRC,[
|
||||||
|
PK.HST:: BLOCK 3 ; Packet trace history buffer
|
||||||
|
PK.HSP:: 0 ; Packet trace history pointer
|
||||||
|
]
|
||||||
|
|
||||||
|
PK.L:: OFFSET 0 ; Length of a Packet-Entry (PE) node
|
||||||
|
REPEAT <NPKE-1>,[
|
||||||
|
IFN .RPCNT-<NPKE-2>, 1,,.+PK.L ; Build initial freelist
|
||||||
|
.ELSE 1,,0
|
||||||
|
BLOCK PK.L-1
|
||||||
|
]
|
||||||
|
PKETBE==:.-PK.L ; Last legal PE pointer value
|
||||||
|
|
||||||
|
PKEQHF: PKETBE,,PKETBL ; Header for Packet-Entry node freelist
|
||||||
|
|
||||||
|
BBLK
|
||||||
|
|
||||||
|
; A "queue" is a list of nodes pointed to by a "queue header" word
|
||||||
|
; of format <last node>,,<first node>. Each node pointer points to
|
||||||
|
; the next node pointer (or zero if no more).
|
||||||
|
; There is a set of flags in the LH of a certain word, at offset
|
||||||
|
; PQ.FLG, that indicate which lists a node is currently on.
|
||||||
|
|
||||||
|
PQ.FLG==:PK.FLG ; Offset of word list-flags are in.
|
||||||
|
%PQFLX==0 ; Initial val
|
||||||
|
IFNDEF %%%QOF,%%%QOF==0 ; This gets set to highest offset supported
|
||||||
|
|
||||||
|
IRPS PKQGF,,[PKQGF0:PKQGF1:PKQGF2:]PKQPL,,[PKQPL0:PKQPL1:PKQPL2:]PKQPF,,[PKQPF0:PKQPF1:PKQPF2:]%PQFL,,[%PQFL0:%PQFL1:%PQFL2:]
|
||||||
|
IFG .IRPCNT-%%%QOF,%%%QOF==.IRPCNT
|
||||||
|
|
||||||
|
%PQFL==:<1_.IRPCNT,,> ; Def a flag in LH at offset PQ.FLG
|
||||||
|
%PQFLX==%PQFLX\%PQFL ; Mask of all list-flags def'd.
|
||||||
|
|
||||||
|
; PKQGF - Get first node from queue
|
||||||
|
; Q/ addr of queue header
|
||||||
|
; A/ addr of node (zero if none)
|
||||||
|
|
||||||
|
PKQGF: CONO PI,PIOFF ; Work at all levels
|
||||||
|
HRRZ A,(Q) ; Get 1st from queue header word
|
||||||
|
JUMPE A,PIONJ ; None, so return zero.
|
||||||
|
MOVSI T,(%PQFL) ; Now clear appropriate flag for list
|
||||||
|
XORB T,PQ.FLG(A) ; to indicate it's not on it any more.
|
||||||
|
TLNE T,(%PQFL) ; Paranoia plus
|
||||||
|
BUG HALT,[PK: GF node wasnt on list]
|
||||||
|
HRRZ T,.IRPCNT(A) ; Get 2nd
|
||||||
|
HRRM T,(Q) ; Make it 1st
|
||||||
|
CAIN T, ; If all's well, done.
|
||||||
|
SETZM (Q) ; Else must clear whole header
|
||||||
|
IFNDEF PIONJ,PIONJ:
|
||||||
|
CONO PI,PION
|
||||||
|
POPJ P,
|
||||||
|
|
||||||
|
; PKQPL - Put node on queue as last thing.
|
||||||
|
; Q/ addr of queue header
|
||||||
|
; A/ addr of node
|
||||||
|
PKQPL: TRNN A,-1 ; More paranoia
|
||||||
|
BUG HALT,[PK: zero node ptr]
|
||||||
|
HLLZS .IRPCNT(A) ; Say this node is last one
|
||||||
|
CONO PI,PIOFF ; Work at all levels
|
||||||
|
MOVSI T,(%PQFL) ; Paranoia: Set appropriate flag for list
|
||||||
|
XORB T,PQ.FLG(A) ; to indicate it's on it now.
|
||||||
|
TLNN T,(%PQFL) ; plus check...
|
||||||
|
BUG HALT,[PK: node already on list]
|
||||||
|
HLRZ T,(Q) ; Get last node
|
||||||
|
HRLM A,(Q) ; Point to new last node
|
||||||
|
JUMPN T,[HRRM A,.IRPCNT(T) ; Make prev last node point to new last
|
||||||
|
JRST .+2] ; Skip over next instr!!
|
||||||
|
HRRM A,(Q) ; Queue was empty, make this the new first too
|
||||||
|
CONO PI,PION
|
||||||
|
POPJ P,
|
||||||
|
|
||||||
|
; PKQPF - Put node on queue as first thing.
|
||||||
|
; Q/ addr of queue header
|
||||||
|
; A/ addr of node
|
||||||
|
PKQPF: TRNN A,-1 ; Yes more paranoia
|
||||||
|
BUG HALT,[PK: zero node ptr]
|
||||||
|
CONO PI,PIOFF
|
||||||
|
MOVSI T,(%PQFL) ; Paranoia: Set appropriate flag for list
|
||||||
|
XORB T,PQ.FLG(A) ; to indicate it's on it now.
|
||||||
|
TLNN T,(%PQFL) ; check...
|
||||||
|
BUG HALT,[PK: node already on list]
|
||||||
|
HRRZ T,(Q) ; Get first thing
|
||||||
|
CAIN A,(T) ; paranoia, avoid loops to self
|
||||||
|
BUG
|
||||||
|
HRRM T,.IRPCNT(A) ; Make it second thing
|
||||||
|
HRRM A,(Q) ; Make new first thing
|
||||||
|
CAIN T,
|
||||||
|
HRLM A,(Q) ; Was empty, also make it last thing.
|
||||||
|
CONO PI,PION
|
||||||
|
POPJ P,
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
; Define PKQGF, etc so that they actually reference PKQGF0, etc as
|
||||||
|
; appropriate for the given offset.
|
||||||
|
IRP RTN,,[PKQGF,PKQPF,PKQPL]
|
||||||
|
DEFINE RTN ?OFFST=0,
|
||||||
|
CONC RTN,\OFFST
|
||||||
|
IFG OFFST-%%%QOF,.ERR RTN used with bad offset
|
||||||
|
TERMIN
|
||||||
|
TERMIN
|
||||||
|
|
||||||
|
|
||||||
|
; PKEGF - Get a free Packet-Entry node
|
||||||
|
; Clears node contents.
|
||||||
|
; Clobbers Q,T
|
||||||
|
; Returns A/ PE ptr (0 if none)
|
||||||
|
|
||||||
|
PKEGF: MOVEI Q,PKEQHF
|
||||||
|
IFE PKTTRC,[
|
||||||
|
CALRET PKQGF ; Get a node
|
||||||
|
]
|
||||||
|
IFN PKTTRC,[
|
||||||
|
CALL PKQGF
|
||||||
|
JUMPE A,CPOPJ ; No packet
|
||||||
|
SETZM PK.HST(A)
|
||||||
|
SETZM PK.HST+1(A)
|
||||||
|
SETZM PK.HST+2(A)
|
||||||
|
MOVEI Q,PK.HST(A) ; Build byte ref to history trail
|
||||||
|
HRLI Q,(<.BP %NTRCE_30.>) ; (dpb ref)
|
||||||
|
MOVEM Q,PK.HSP(A) ; save ref
|
||||||
|
POPJ P,
|
||||||
|
]
|
||||||
|
|
||||||
|
; PKERT - Return a Packet-Entry node to freelist
|
||||||
|
; A/ PE ptr to node
|
||||||
|
; Clobbers Q,T
|
||||||
|
|
||||||
|
PKERT: MOVEI Q,PKEQHF ; Use Packet-Entry freelist
|
||||||
|
CALRET PKQPF ; Put back on start of list.
|
||||||
|
|
||||||
|
; Note that all MP calls to the routines below which allocate or free
|
||||||
|
; entries/buffers must be sure not to block (page fault or UFLS)
|
||||||
|
; while any "loose" entries/buffers exist (not pointed to by any list)
|
||||||
|
; unless there something on the PCLSR locked-switch list which will return the
|
||||||
|
; currently "loose" entry/buffer to its freelist -- otherwise
|
||||||
|
; it is possible for "loose" stuff to slowly accumulate.
|
||||||
|
|
||||||
|
; PKTGF - Get a free Packet-Entry node and Packet Buffer. Hangs until
|
||||||
|
; it wins. Note that it depends on fact there is one PE node
|
||||||
|
; for every packet buffer, and vice versa! If this becomes untrue
|
||||||
|
; then the way it UFLSes should be fixed up.
|
||||||
|
; PKTGFI - version that skips if wins, doesn't hang.
|
||||||
|
; Returns A/ PE ptr Clobbers Q,T
|
||||||
|
|
||||||
|
PKTGF: SKIPN PKEQHF ; Fast check, see if any packet entries/buffers free
|
||||||
|
CALL UFLS ; Nope, hang until something turns up.
|
||||||
|
CALL PKTGFI ; Get a entry/buffer!
|
||||||
|
JRST PKTGF ; None? Sigh, go hang.
|
||||||
|
RET
|
||||||
|
|
||||||
|
PKTGFI: CALL PKEGF ; Get a free node
|
||||||
|
JUMPE A,CPOPJ
|
||||||
|
PUSH P,A ; Save pointer to it
|
||||||
|
PKTGF1: CALL PKBGF ; Get a free buffer
|
||||||
|
JUMPN A,PKTGF8 ; Jump if found one right away!
|
||||||
|
CALL PKBAL ; None left on freelist, try to allocate more.
|
||||||
|
CAIA ; Sigh, failed.
|
||||||
|
JRST PKTGF1 ; Won, go pluck a buffer from freelist.
|
||||||
|
|
||||||
|
; Lost, can't get any more buffers.
|
||||||
|
POP P,A ; None available, take non-skip return
|
||||||
|
CALRET PKERT ; Put PE node back on its freelist.
|
||||||
|
|
||||||
|
; Won, store buffer pointer in PE.
|
||||||
|
PKTGF8: MOVE T,A
|
||||||
|
POP P,A ; Restore PE ptr
|
||||||
|
MOVEM T,PK.BUF(A)
|
||||||
|
MOVE T,PQ.FLG(A) ; Paranoia dept, verify not on any lists.
|
||||||
|
TLNE T,(%PQFLX)
|
||||||
|
BUG HALT,[PK: Freelist node not free!]
|
||||||
|
SETZM PK.FLG(A) ; Zap all other entries in packet node.
|
||||||
|
SETZM PK.IP(A)
|
||||||
|
SETZM PK.TCP(A)
|
||||||
|
SETZM PK.TCI(A)
|
||||||
|
SETZM PK.TIM(A)
|
||||||
|
AOS (P) ; Win, skip on return!
|
||||||
|
RET
|
||||||
|
|
||||||
|
; PKTRT - Return both a Packet-Entry and its associated buffer to freelist
|
||||||
|
; only if check shows that it doesn't belong to any lists.
|
||||||
|
; PKTRTA - Always return to freelist. If check shows that it is still
|
||||||
|
; on some list, bad error!
|
||||||
|
; Clobbers A,Q,T
|
||||||
|
; A/ PE ptr (must be off all lists)
|
||||||
|
|
||||||
|
PKTRTA: CAIL A,PKETBL ; Paranoia check for legal pointers
|
||||||
|
CAILE A,PKETBE
|
||||||
|
BUG HALT,[PK: Bad PE pointer]
|
||||||
|
MOVE T,PQ.FLG(A)
|
||||||
|
TLNE T,(%PQFLX\%PKPIL) ; On list or locked at I/O PI level?
|
||||||
|
BUG HALT,[PK: Freeing packet still in use!]
|
||||||
|
JRST PKTRTX ; Nope, can proceed to put on freelist.
|
||||||
|
|
||||||
|
PKTRT: CAIL A,PKETBL ; Paranoia check for legal pointers
|
||||||
|
CAILE A,PKETBE
|
||||||
|
BUG HALT,[PK: Bad PE pointer]
|
||||||
|
MOVE T,PQ.FLG(A)
|
||||||
|
TLNE T,(%PQFLX\%PKPIL) ; On a list or locked by interface PI level?
|
||||||
|
RET ; Yes, don't return to freelist yet.
|
||||||
|
PKTRTX: PUSH P,A ; Save PE ptr
|
||||||
|
SKIPE A,PK.BUF(A) ; Get buffer pointer associated with PE
|
||||||
|
CALL PKBRT ; Return the buffer
|
||||||
|
POP P,A
|
||||||
|
SETZM PK.BUF(A) ; Ensure buffer pointer zapped.
|
||||||
|
CALRET PKERT ; Then return the packet entry
|
||||||
|
|
||||||
|
; PKTPCL - Return a packet entry/buffer while PCLSR'ing.
|
||||||
|
; This is the standard LOSSET routine to use.
|
||||||
|
; A must hold the PE ptr at time of the block (which we are backing
|
||||||
|
; out of).
|
||||||
|
; Must only clobber A and T!!
|
||||||
|
|
||||||
|
PKTPCL: MOVE A,AC0S+A(U) ; Get ac A at time of the block
|
||||||
|
PUSH P,Q ; Mustn't clobber Q
|
||||||
|
CALL PKTRT ; Return the entry/buffer (clobbers Q,T)
|
||||||
|
JRST POPQJ
|
||||||
|
|
||||||
|
|
||||||
|
EBLK
|
||||||
|
PKBNF: 0 ; # free Packet Buffers
|
||||||
|
PKBNT: 0 ; # total Packet Buffers
|
||||||
|
PKBCTM: 0 ; Time of last no-more-core complaint
|
||||||
|
PKBQHF: 0 ; Queue Header for buffer freelist
|
||||||
|
PKBQHC: 0 ; Queue Header for core job cleanup
|
||||||
|
BBLK
|
||||||
|
|
||||||
|
; PKBGF - Get a free Packet Buffer
|
||||||
|
; Clobbers Q,T
|
||||||
|
; Returns A/ PB ptr (0 if none)
|
||||||
|
|
||||||
|
PKBGF: MOVEI Q,PKBQHF ; Point to buffer freelist
|
||||||
|
CALL PKQGF ; Get first thing off it
|
||||||
|
JUMPE A,CPOPJ ; If got nothing, just return.
|
||||||
|
SETZM 1(A) ; Aha, got it! Flush free-buffer identifier.
|
||||||
|
SOS PKBNF ; Decrement # free packet buffers.
|
||||||
|
RET
|
||||||
|
|
||||||
|
; PKBRT - Return a Packet Buffer to freelist. Puts back at END of freelist,
|
||||||
|
; as PKBCLN clean-up depends on this.
|
||||||
|
; Clobbers Q,T
|
||||||
|
PKBRT: SETZM (A) ; Paranoia aid - clear "flags" in LH of 1st wd.
|
||||||
|
; Otherwise PKQ routines complain.
|
||||||
|
MOVE T,[SIXBIT /BRUNCH/]
|
||||||
|
MOVEM T,1(A) ; Set up free-buffer identifier
|
||||||
|
AOS PKBNF ; Increment # free packet buffers.
|
||||||
|
MOVEI Q,PKBQHF ; Point to buffer freelist
|
||||||
|
CALRET PKQPL ; Put it back on, at end.
|
||||||
|
|
||||||
|
; PKBRTL - Return a list of Packet Buffers to freelist
|
||||||
|
; Q/ ptr to queue header of list
|
||||||
|
; Clobbers A,T
|
||||||
|
PKBRTL: CALL PKQGF ; Get first thing off list
|
||||||
|
JUMPE A,CPOPJ
|
||||||
|
PUSH P,Q
|
||||||
|
CALL PKBRT ; Return it to buffer freelist
|
||||||
|
POP P,Q
|
||||||
|
JRST PKBRTL
|
||||||
|
|
||||||
|
; PKBAL - Allocate more Packet Buffers
|
||||||
|
; Clobbers A,Q,T
|
||||||
|
; Returns .+1 if lost
|
||||||
|
; .+2 if won (must still call PKBGF to get a buffer from list)
|
||||||
|
|
||||||
|
PKBAL: PUSH P,B
|
||||||
|
CONI PI,Q ; Save PI channel-on status
|
||||||
|
ANDI Q,177
|
||||||
|
CONO PI,UTCOFF ; Make the world safe for IOMQ
|
||||||
|
MOVE B,PKBNT ; Check total # of buffers so far
|
||||||
|
CAIL B,NPKB ; Make sure we're not already using max allowed
|
||||||
|
JRST PKBAL4 ; Ugh, already at max! Go complain.
|
||||||
|
PUSHJ P,IOMQ ; Get 1K of memory
|
||||||
|
JRST PKBAL3 ; Mem not available, fail
|
||||||
|
CONO PI,PICON(Q) ; Won, restore PI status
|
||||||
|
MOVEI B,MUPKT ; Set page type = packet
|
||||||
|
DPB B,[MUR,,MEMBLT(A)]
|
||||||
|
LSH A,10. ; Turn allocated page # into mem address
|
||||||
|
HRLI A,-<2000/PKBSIZ> ; Make AOBJN into page (# buffers per page)
|
||||||
|
PKBAL2: PUSHJ P,PKBRT ; Put them all on free list
|
||||||
|
ADDI A,PKBSIZ-1
|
||||||
|
AOBJN A,PKBAL2
|
||||||
|
MOVEI B,<2000/PKBSIZ> ; This many more buffers have been created
|
||||||
|
ADDM B,PKBNT ; Increase total (PKBNF bumped by PKBRT)
|
||||||
|
POP P,B
|
||||||
|
AOS (P) ; Take win return.
|
||||||
|
RET
|
||||||
|
|
||||||
|
; Here if packet stuff trying to use up too much core
|
||||||
|
PKBAL4: MOVE B,PKBCTM ; Don't complain too often
|
||||||
|
ADDI B,60.*30. ; Just once a minute
|
||||||
|
CAMLE B,TIME
|
||||||
|
JRST PKBAL3
|
||||||
|
BUG CHECK,[PACKET NET ATTEMPTING TO USE TOO MUCH CORE]
|
||||||
|
MOVE B,TIME
|
||||||
|
MOVEM B,PKBCTM
|
||||||
|
PKBAL3: CONO PI,PICON(Q) ; Lost, restore PI status
|
||||||
|
POP P,B
|
||||||
|
POPJ P, ; and take error return.
|
||||||
|
|
||||||
|
|
||||||
|
; PKBCLN - Called only by core job, to clean up packet buffers.
|
||||||
|
; Smashes all ACs.
|
||||||
|
|
||||||
|
PKBCLN: SKIPE A,PKBNT ; See if 2/3 or more of buffers free
|
||||||
|
SKIPN B,PKBNF
|
||||||
|
POPJ P, ; No buffers or none free, nothing to do
|
||||||
|
SUBM A,B
|
||||||
|
IDIV A,B ; Get ratio of total to used
|
||||||
|
CAIGE A,3 ; Note if B is zero, A is unchanged
|
||||||
|
POPJ P, ; and at least 32.
|
||||||
|
IFL TSYSM-256., MOVEI D,TSYSM-1 ; Scan memory for packet buffer pages
|
||||||
|
.ELSE MOVEI D,255.
|
||||||
|
PKBCL0: LDB A,[MUR,,MEMBLT(D)]
|
||||||
|
CAIE A,MUPKT
|
||||||
|
PKBCL4: SOJGE D,PKBCL0
|
||||||
|
JUMPL D,CPOPJ
|
||||||
|
MOVE A,D ; Quickly determine if any non-free buffers
|
||||||
|
LSH A,10. ; on this page
|
||||||
|
HRLI A,-<2000/PKBSIZ>
|
||||||
|
MOVE T,[SIXBIT/BRUNCH/]
|
||||||
|
PKBCL5: CAME T,1(A)
|
||||||
|
JRST PKBCL4 ; Not free, don't bother with slow stuff
|
||||||
|
ADDI A,PKBSIZ-1
|
||||||
|
AOBJN A,PKBCL5
|
||||||
|
SETZB C,PKBQHC ; Collect all free buffers on this page
|
||||||
|
MOVE E,PKBNF ; Loop about as many times as there are free buffers
|
||||||
|
PKBCL1: PUSHJ P,PKBGF ; Get next free buffer
|
||||||
|
JUMPE A,PKBCL2
|
||||||
|
LDB B,[121000,,A]
|
||||||
|
CAMN B,D
|
||||||
|
JRST [ MOVEI Q,PKBQHC ; This one's on the page, save it
|
||||||
|
PUSHJ P,PKQPL
|
||||||
|
AOJA C,.+2 ] ; Count them
|
||||||
|
PUSHJ P,PKBRT ; Not on the page, put back. This depends on
|
||||||
|
; the fact PKBRT puts back at END of list!
|
||||||
|
SOJG E,PKBCL1
|
||||||
|
PKBCL2: CAIE C,<2000/PKBSIZ> ; Did we get the whole page?
|
||||||
|
JRST [ MOVEI Q,PKBQHC ; No, must punt this one, and
|
||||||
|
PUSHJ P,PKBRTL ; return all the buffers we saved up.
|
||||||
|
JRST PKBCL4]
|
||||||
|
MOVNS C ; Yes, get rid of these buffers
|
||||||
|
ADDM C,PKBNT ; Decrement total # of buffers in use
|
||||||
|
MOVE A,D
|
||||||
|
PUSHJ P,MEMR ; Flush the page from addr space
|
||||||
|
JRST PKBCLN ; Back to flush more, until quota done.
|
||||||
343
src/system/time.950
Executable file
343
src/system/time.950
Executable file
@@ -0,0 +1,343 @@
|
|||||||
|
;I T S .OPERS RELEVANT TO REAL TIME
|
||||||
|
|
||||||
|
;.PDTIME AC, ;RETURNS PDUPS*<# SECS SINCE BEGINNING OF YEAR>
|
||||||
|
|
||||||
|
APDTIM: PUSHJ P,GPDTIM
|
||||||
|
JRST RETM1 ;-1 IF NOT KNOWN
|
||||||
|
JRST APTUAJ
|
||||||
|
|
||||||
|
;.RDATE AC, ;RETURNS SIXBIT YYMMDD IN AC
|
||||||
|
|
||||||
|
ARDATE: PUSHJ P,GLPDTM ;GET LOCALIZED PDTIME
|
||||||
|
JRST RETM1 ;NOT AVAILABLE
|
||||||
|
IDIVI A,SPD ;GET # DAYS SINCE BEGINNING OF YEAR
|
||||||
|
PUSHJ P,RDATE ;GET THE ANSWER
|
||||||
|
JRST APTUAJ ;RETURN IT
|
||||||
|
|
||||||
|
;.RTIME AC, ;RETURNS SIXBIT HHMMSS (24 HOUR TIME) IN AC
|
||||||
|
|
||||||
|
ARTIME: PUSHJ P,GLPDTM ;GET LOCALIZED PDTIME
|
||||||
|
JRST RETM1 ;NOT AVAILABLE
|
||||||
|
IDIVI A,SPD ;GET # SECS SINCE MIDNIGHT IN B
|
||||||
|
PUSHJ P,RTIME ;CONVERT TO SIXBIT HHMMSS
|
||||||
|
JRST APTUAJ ;RETURN IT
|
||||||
|
|
||||||
|
;.RDATIM AC, ;DOES .RTIME TO AC, .RDATE TO AC+1
|
||||||
|
|
||||||
|
ARDATI: PUSHJ P,GLPDTM ;GET CRUD
|
||||||
|
JRST RETM1 ;NO LUCK (THIS IS GETTING BORING)
|
||||||
|
IDIVI A,SPD ;CONVERT TO DAYS AND SECONDS
|
||||||
|
HRLM A,(P) ;SAVE DAYS ON PDL
|
||||||
|
PUSHJ P,RTIME ;GET TIME (HHMMSS)
|
||||||
|
UMOVEM A,(J) ;GIVE TO USER
|
||||||
|
HLRZ A,(P) ;GET DAYS AGAIN
|
||||||
|
PUSHJ P,RDATE ;CONVERT TO SIXBIT
|
||||||
|
AOJA J,APTUAJ ;GIVE TO USER AND RETURN
|
||||||
|
|
||||||
|
;.RYEAR AC, ;PUSHJ'S TO RYEAR AND MOVEM'S E TO AC
|
||||||
|
|
||||||
|
ARYEAR: PUSHJ P,RYEAR ;GET THE CRUFT
|
||||||
|
UMOVEM E,(J) ;STORE YEAR AND CRUD
|
||||||
|
POPJ P,
|
||||||
|
|
||||||
|
;.RLPDT AC, ;DOES .RYEAR AC+1, AND ALSO MOVEM'S A TO AC
|
||||||
|
|
||||||
|
ARLPDT: PUSHJ P,RYEAR ;GET THE CRUFT
|
||||||
|
UMOVEM E,1(J) ;STORE YEAR AND CRUD
|
||||||
|
JRST APTUAJ ;STORE TIME AND RETURN
|
||||||
|
|
||||||
|
;ROUTINE TO RETURN -1 ON AN OPER
|
||||||
|
|
||||||
|
RETM1: XCTR XRW,[SETOM (J)]
|
||||||
|
POPJ P,
|
||||||
|
|
||||||
|
;GET THE CORRECTED PDUPS*<# SECS SINCE BEGINNING OF YEAR> IN A
|
||||||
|
;SKIP IF OFFSET AVAILABLE AND CLOCK ON
|
||||||
|
|
||||||
|
GPDTIM:
|
||||||
|
IFN PDCLKP,[
|
||||||
|
SKIPN A,PDTIME ;GET THE OFFSET
|
||||||
|
JRST GPDTM2 ;NOT AVAILABLE
|
||||||
|
DATAI PDCLK,B ;GET WHAT THE CLOCK IS SAYING
|
||||||
|
TLZ B,600000
|
||||||
|
JUMPE B,GPDTM2 ;POWER PROBABLY (BUT NOT NECESSARILY) TURNED OFF
|
||||||
|
SUBM B,A ;DO THE CORRECTION
|
||||||
|
JUMPL A,CPOPJ ;LOST, DON'T RETURN A NEGATIVE NUMBER!
|
||||||
|
JRST POPJ1 ;EXIT SKIPPING (SUCCESS)
|
||||||
|
] ;PDCLKP
|
||||||
|
IFN KS10P,[
|
||||||
|
SKIPN PDTIME ; Offset available?
|
||||||
|
JRST GPDTM2 ; No: Try backup
|
||||||
|
RDTIM A ; Read clock into A!B
|
||||||
|
TLC A,1729. ; "A most interesting number"
|
||||||
|
TLNE A,-1 ; Does the clock look like it has been set?
|
||||||
|
JRST GPDTM2 ; Must have been reset
|
||||||
|
DIVI A,KSFREQ ; Convert to 60ths
|
||||||
|
SUB A,PDTIME ; Subtract offset
|
||||||
|
JUMPL A,CPOPJ ; Wooops, don't return a negative number! (Why
|
||||||
|
; don't we use the backup in this case?)
|
||||||
|
JRST POPJ1
|
||||||
|
] ;KS10P
|
||||||
|
GPDTM2: SKIPGE A,PDYTIM ;CLOCK NOT ON, TRY BACKUP
|
||||||
|
POPJ P, ;SORRY, NOT AVAILABLE
|
||||||
|
IMULI A,30. ;CONVERT TO SIXTIETHS OF A SECOND
|
||||||
|
JRST POPJ1 ;CALL IT CORRECT AND AVAILABLE
|
||||||
|
|
||||||
|
;GET SIXBIT YYMMDD (DATE) IN A (LOCALIZED PDTIME/SPD IN A, YEAR IN RH(E))
|
||||||
|
|
||||||
|
RDATE: PUSHJ P,RDATE1 ;GET DAY IN C, MONTH IN B
|
||||||
|
MOVE T,[1400,,A];SET UP BYTE POINTER FOR OUTPUT
|
||||||
|
PUSHJ P,RDATM1 ;DEPOSIT DAY
|
||||||
|
MOVE C,B ;GET MONTH
|
||||||
|
PUSHJ P,RDATM1 ;DEPOSIT MONTH
|
||||||
|
MOVEI B,(E) ;GET YEAR
|
||||||
|
IDIVI B,100. ;GET LAST TWO DIGITS IN C
|
||||||
|
ARTIMX: PUSHJ P,RDATM1 ;DEPOSIT YEAR (ENTRY FROM RTIME TO DEPOSIT HOUR)
|
||||||
|
IOR A,[SIXBIT /000000/] ;CONVERT TO REAL SIXBIT
|
||||||
|
POPJ P,
|
||||||
|
|
||||||
|
;GET MONTH (1 => JAN) IN B, DAY (1 => THE FIRST) IN C
|
||||||
|
|
||||||
|
RDATE1: AOS C,A ;GET DAY OF YEAR (LOCALIZED) (1 => THE FIRST)
|
||||||
|
MOVEI B,12. ;INITIALLY ASSUME DECEMBER FOR MONTH
|
||||||
|
CAMG C,LMNTBL-1(B) ;IF DAY IN YEAR .LE. DAY IN YEAR AT BEGINNING OF THIS MONTH,
|
||||||
|
SOJA B,.-1 ;THEN DECREMENT TO PREVIOUS MONTH AND TRY AGAIN
|
||||||
|
SUB C,LMNTBL-1(B) ;C(C) := DAY OF MONTH
|
||||||
|
POPJ P,
|
||||||
|
|
||||||
|
LMNTBL: MNIRP [<M 1>] ;TABLE OF DAYS GONE BY AT BEGINNING OF MONTH
|
||||||
|
|
||||||
|
;GET THE SIXBIT TIME IN A (# SECS SINCE MIDNIGHT IN B)
|
||||||
|
|
||||||
|
RTIME: MOVE T,[1400,,A];SET UP BYTE POINTER FOR OUTPUT
|
||||||
|
IDIVI B,60. ;GET SECONDS IN C
|
||||||
|
PUSHJ P,RDATM1 ;DEPOSIT INTO A
|
||||||
|
IDIVI B,60. ;GET HOURS IN B, MINUTES IN C
|
||||||
|
PUSHJ P,RDATM1 ;DEPOSIT MINUTES
|
||||||
|
MOVE C,B ;GET HOURS IN C
|
||||||
|
JRST ARTIMX ;DEPOSIT HOURS, CONVERT TO SIXBIT, AND RETURN
|
||||||
|
|
||||||
|
;DEPOSIT C(C) AS TWO SIX BIT (AS OPPOSED TO SIXBIT) DECIMAL DIGITS
|
||||||
|
; VIA T (INTO A) THEN DECREMENT T
|
||||||
|
|
||||||
|
RDATM1: IDIVI C,10. ;SEPARATE DIGITS
|
||||||
|
DPB C,[60600,,D] ;DEPOSIT FIRST DIGIT TO GIVE 12 BITS
|
||||||
|
DPB D,T ;OUTPUT BYTE
|
||||||
|
ADD T,[140000,,] ;DECREMENT BYTE POINTER
|
||||||
|
POPJ P, ;THAT'S ALL
|
||||||
|
|
||||||
|
;DO A PUSHJ P,GLPDTM THEN HACK AROUND
|
||||||
|
;DO THOSE THINGS TO E COMMENTED IN GLPDTM AS BEING DONE BY RYEAR
|
||||||
|
;TRY TO GET YEAR EVEN IF GLPDTM DOESN'T SKIP, BUT IN THAT CASE CLOBBER A TO -1
|
||||||
|
|
||||||
|
RYEAR: PUSHJ P,GLPDTM ;GET THE CRUFT
|
||||||
|
JRST RYEAR2 ;DIDN'T SKIP, SEE WHAT CAN BE SALVAGED
|
||||||
|
RYEAR1: PUSH P,A ;PROTECT A FROM FUTURE CLOBBERAGE
|
||||||
|
IDIVI A,SPD ;GET LOCALIZED # DAYS SINCE BEGINNING OF YEAR
|
||||||
|
JUMPL E,[SOJA A,.+1] ;DE-LOCALIZE
|
||||||
|
LDB B,[270300,,E] ;DAY OF WEEK OF BEGINNING OF YEAR
|
||||||
|
ADD A,B ;ADD IN
|
||||||
|
IDIVI A,7 ;GET TODAY'S DAY OF WEEK (0 => SUNDAY) IN B
|
||||||
|
DPB B,[320300,,E] ;DEPOSIT IN E
|
||||||
|
TLO E,40000 ;DOCUMENT FACT THAT TIME OF YEAR KNOWN
|
||||||
|
JRST POPAJ ;RESTORE A AND RETURN
|
||||||
|
|
||||||
|
RYEAR2: PUSHJ P,GDWOBY ;GLPDTM DIDN'T SKIP, TRY TO SALVAGE CRUFT: FIRST DOWOBY
|
||||||
|
MOVNI A,1 ;DOCUMENT FACT THAT TIME OF YEAR NOT KNOWN
|
||||||
|
JUMPE E,CPOPJ ;RETURN IF YEAR NOT KNOWN EITHER
|
||||||
|
DPB B,[270300,,E] ;DAY OF WEEK OF BEGINNING OF YEAR
|
||||||
|
JRST CMPF29 ;SEE IF LEAP YEAR, AND RETURN
|
||||||
|
|
||||||
|
;NOTE: THE SYMS JAN, FEB, MAR, ETC. ARE DEFINED AFTER (AND BY) MNIRP (A MACRO)
|
||||||
|
|
||||||
|
;INCREMENT YEAR
|
||||||
|
|
||||||
|
NUPDT: TLNN E,200000 ;SEE IF LEAP YEAR
|
||||||
|
SKIPA A,[<365.*SPD*PDUPS>] ;NORMAL YEAR
|
||||||
|
MOVE A,[<366.*SPD*PDUPS>] ;LEAP YEAR
|
||||||
|
ADDM A,PDTIME ;UPDATE PDCLK OFFSET
|
||||||
|
IDIVI A,30. ;CONVERT TO HALF-SECONDS
|
||||||
|
EXCH A,PDYTIM ;ALSO UPDATE BACKUP SYSTEM
|
||||||
|
SUBM A,PDYTIM
|
||||||
|
AOS FYEAR ;INCREMENT YEAR
|
||||||
|
|
||||||
|
;INSERT OTHER CRUFT HERE IF DESIRED
|
||||||
|
;DROPS THROUGH
|
||||||
|
|
||||||
|
;CODING DROPS THROUGH FROM PREVIOUS PAGE
|
||||||
|
;GET "LOCALIZED" NUMBER OF SECONDS SINCE BEGINNING OF YEAR IN A
|
||||||
|
;IF DIVIDED BY # SECONDS IN A DAY,
|
||||||
|
;GIVES REMAINDER OF # SECONDS SINCE MIDNIGHT LOCAL TIME
|
||||||
|
;QUOTIENT WHEN FED TO DATE GENERATOR ROUTINE ASSUMING LEAP YEAR GIVES CORRECT DATE
|
||||||
|
;ALSO GET YEAR AND FLAGS (AS RETURNED BY .RYEAR) IN E
|
||||||
|
;1.1-2.9 => YEAR (E.G. 1969.)
|
||||||
|
;3.1-3.5 ZERO
|
||||||
|
;3.6-3.8 => DAY OF WEEK OF BEGINNING OF YEAR (0 => SUNDAY)
|
||||||
|
;3.9-4.2 ZERO (RYEAR SETS THIS BYTE TO TODAY'S DAY OF WEEK IF TIME OF YEAR KNOWN)
|
||||||
|
;4.6 ZERO (RYEAR SETS IT TO 1 IF TIME OF YEAR KNOWN)
|
||||||
|
;4.7 ONE => DAYLIGHT SAVINGS TIME IN EFFECT
|
||||||
|
;4.8 ONE => LEAP YEAR
|
||||||
|
;4.9 ONE => 365 DAY YEAR AND AFTER FEB 28
|
||||||
|
;SKIPS IF PDCLK ON AND BOTH PDTIME AND FYEAR NON-ZERO (IN OTHER WORDS IF SUCCESSFUL)
|
||||||
|
;PREVIOUS CODING DROPS THROUGH ON YEAR INCREMENT
|
||||||
|
|
||||||
|
GLPDTM: CONO PI,CLKOFF ;AVOID DOUBLE YEAR INCREMENT
|
||||||
|
SKIPE E,FYEAR ;GET YEAR IN E, SKIP IF NOT AVAILABLE
|
||||||
|
PUSHJ P,GPDTIM ;GET PDTIME, SHOULD SKIP
|
||||||
|
JRST CLKONJ ;SOMETHING NOT AVAILABLE, DON'T SKIP
|
||||||
|
IDIVI A,60. ;CONVERT TO SECONDS
|
||||||
|
PUSHJ P,CMPF29 ;MAYBE SET BIT 4.8 OR 4.9 OF E, IF 4.9 SET THEN ADD SPD TO A
|
||||||
|
CAML A,[366.*SPD] ;IF MORE THAN A YEAR HAS GONE,
|
||||||
|
JRST NUPDT ;THEN INCREMENT YEAR
|
||||||
|
CONO PI,CLKON ;TIMIMG ERROR PROBLEM GONE
|
||||||
|
PUSH P,A ;SAVE # SECONDS DURING NEXT CALL
|
||||||
|
PUSHJ P,GDWOBY ;GET DAY OF WEEK OF BEGINNING OF YEAR (0 => SUNDAY)
|
||||||
|
DPB B,[270300,,E] ;DEPOSIT IN RIGHT PLACE
|
||||||
|
POP P,A ;RESTORE A
|
||||||
|
AOS (P) ;CAUSE RETURN TO SKIP
|
||||||
|
|
||||||
|
;IF DAYLIGHT SAVINGS TIME THEN ADD 3600. TO A AND SET BIT 4.7 IN E
|
||||||
|
|
||||||
|
GLPDT2: JFCL ;POPJ FOR STD TIME
|
||||||
|
;JRST CRDDST FOR DAY LIGHT TIME
|
||||||
|
;JFCL "NORMAL"
|
||||||
|
CAML A,[<APR 1>*SPD+7200.] ;IF BEFORE 2AM APR 1,
|
||||||
|
CAML A,[<OCT 31.>*SPD+3600.] ;OR IF AFTER 1AM STANDARD TIME OCT 31,
|
||||||
|
POPJ P, ;THEN OBVIOUSLY STANDARD TIME IS IN EFFECT
|
||||||
|
CAML A,[<APR 7>*SPD+7200.] ;IF BEFORE 2AM APR 7 STANDARD TIME,
|
||||||
|
CAML A,[<OCT 25.>*SPD+3600.] ;OR IF AFTER 1AM STANDARD TIME OCTOBER 25,
|
||||||
|
JRST GLPDT3 ;THEN NOT OBVIOUS
|
||||||
|
CRDDST: TLO E,100000 ;DAYLIGHT SAVINGS TIME, SET BIT IN E
|
||||||
|
ADDI A,3600. ;CONTINUE TO LOCALIZE THE TIME THAT WILL BE RETURNED
|
||||||
|
POPJ P,
|
||||||
|
|
||||||
|
;IT IS NOW SOMETIME DURING THE WEEKS IN APR AND OCTOBER
|
||||||
|
;WHEN IT MAY BE EITHER STANDARD OR DAYLIGHT SAVINGS TIME
|
||||||
|
|
||||||
|
GLPDT3: PUSH P,A ;SAVE # SECS
|
||||||
|
CAMG A,[JUL*SPD] ;IF NOT YET JULY,
|
||||||
|
TDZA D,D ;THEN IT MUST BE APR, SET INDEX
|
||||||
|
MOVEI D,1 ;OCTOBER, SET INDEX
|
||||||
|
SUB A,CRDSB(D) ;COMPENSATE FOR 2AM OR 1AM
|
||||||
|
IDIVI A,SPD ;FLUSH SECONDS, LEAVE ONLY DAYS (IT LOOKS LIKE A LEAP YEAR, REMEMBER)
|
||||||
|
LDB C,[270300,,E] ;GET DAY OF WEEK OF BEGINNING OF YEAR IN C
|
||||||
|
JUMPGE E,.+3 ;IF REGULAR YEAR,
|
||||||
|
SOJGE C,.+2 ;THEN DE-LOCALIZE SO IT WILL RE-LOCALIZE LATER...
|
||||||
|
MOVEI C,6 ;MOD 7
|
||||||
|
ADD A,C ;ADD TO NUMBER OF DAYS
|
||||||
|
IDIVI A,7
|
||||||
|
IMULI A,7
|
||||||
|
SUB A,C ;C(A) := NUMBER OF DAYS IN YEAR BEFORE LAST SUNDAY (MAYBE TODAY)
|
||||||
|
;IF LAST SUNDAY (AS DEFINED ABOVE) IS BELOW THE "REGION OF AMBIGUITY",
|
||||||
|
;THEN IT HAS NOT YET CHANGED TO THE LATER TIME
|
||||||
|
XCT CRDTST(D) ;SKIP IF DAYLIGHT SAVINGS TIME
|
||||||
|
JRST POPAJ ;STANDARD TIME, NO CHANGES NECESSARY
|
||||||
|
POP P,A ;DAYLIGHT SAVINGS TIME, RESTORE A
|
||||||
|
JRST CRDDST ;MUNG A AND E AND RETURN
|
||||||
|
|
||||||
|
CRDSB: 7200. ;IN APR CHANGES AT 2AM EST
|
||||||
|
3600. ;IN OCTOBER CHANGES AT 1AM EST
|
||||||
|
|
||||||
|
CRDTST: CAIGE A,<APR 1>
|
||||||
|
CAIL A,<OCT 25.>
|
||||||
|
|
||||||
|
;IF LEAP YEAR THEN SET BIT 4.8 OF E
|
||||||
|
;IF NOT LEAP YEAR THEN IF AFTER FEB 28 THEN SET BIT 4.9 OF E AND ADD SPD TO A
|
||||||
|
|
||||||
|
CMPF29: TRNN E,3 ;IF LEAP YEAR, (HOPEFULLY THIS ONLY PLACE WHERE DIRECTLY CHECKED FOR LEAP YEAR)
|
||||||
|
TLOA E,200000 ;THEN SET BIT 4.8 OF E AND RETURN
|
||||||
|
CAMGE A,[<<MAR 1>-1>*SPD] ;365 DAY YEAR, IF BEFORE MARCH FIRST,
|
||||||
|
POPJ P, ;THEN RETURN
|
||||||
|
TLO E,400000 ;365 DAY YEAR AFTER FEB 28, SET BIT 4.9 OF E
|
||||||
|
ADDI A,SPD ;INCREMENT A ONE DAY
|
||||||
|
POPJ P,
|
||||||
|
|
||||||
|
;GET DAY OF WEEK OF BEGINNING OF YEAR (IN E) (0 => SUNDAY) IN B
|
||||||
|
;FOLLOWING ROUTINE HAS BEEN EXHAUSTIVELY CHECKED
|
||||||
|
|
||||||
|
GDWOBY: MOVEI A,-1(E)
|
||||||
|
IDIVI A,400.
|
||||||
|
MOVEI A,1(B)
|
||||||
|
IDIVI B,4
|
||||||
|
ADD A,B
|
||||||
|
IDIVI B,25.
|
||||||
|
SUB A,B
|
||||||
|
IDIVI A,7
|
||||||
|
POPJ P,
|
||||||
|
|
||||||
|
;SLOW CLOCK ROUTINE TO CHECK ON REAL-TIME CLOCK SYSTEM
|
||||||
|
|
||||||
|
PDCCHK: SKIPL PDYTIM ;IF BACKUP TIME (SINCE BEGINNING OF YEAR) CALCULATED,
|
||||||
|
AOS PDYTIM ;THEN UPDATE IT
|
||||||
|
SKIPGE TIMOFF ;IF TIMOFF NOT CALCULATED,
|
||||||
|
POPJ P, ;THEN RETURN
|
||||||
|
AOS A,TIMOFF ;UPDATE TIMOFF
|
||||||
|
CAMGE A,[2*SPD] ;Incremented beyond length of day?
|
||||||
|
JRST PDCCH1
|
||||||
|
SETZB A,TIMOFF ;Yes - reset it.
|
||||||
|
MOVEM A,RSWTIM ;Also reset last-resource-warning timestamp.
|
||||||
|
PDCCH1: TRNE A,64.*2-1 ;Is this a 64. second (based on TIMOFF) clock break?
|
||||||
|
POPJ P, ; No, so return.
|
||||||
|
INITIM:
|
||||||
|
IFN PDCLKP,[
|
||||||
|
SKIPN A,PDTIME ;MAYBE UPDATE BACKUP SYSTEM
|
||||||
|
JRST INITM2 ;PDTIME NOT AVAILABLE, DON'T
|
||||||
|
DATAI PDCLK,B
|
||||||
|
TLZ B,600000
|
||||||
|
JUMPE B,INITM2 ;JUMP IF CLOCK OFF
|
||||||
|
SUBM B,A
|
||||||
|
JUMPL A,CPOPJ
|
||||||
|
IDIVI A,30. ;CONVERT TO HALF-SECONDS SINCE BEGINNING OF YEAR
|
||||||
|
MOVEM A,PDYTIM ;STORE RE-CALCULATED BACKUP TIME
|
||||||
|
] ;PDCLKP
|
||||||
|
IFN KS10P,[
|
||||||
|
SKIPN PDTIME ; Update backup system?
|
||||||
|
JRST INITM2 ; Not without offset
|
||||||
|
RDTIM A
|
||||||
|
TLC A,1729.
|
||||||
|
TLNE A,-1
|
||||||
|
JRST INITM2 ; Not if clock reset
|
||||||
|
DIVI A,KSFREQ
|
||||||
|
SUB A,PDTIME ; 60ths since Jan 1
|
||||||
|
JUMPL A,CPOPJ
|
||||||
|
IDIVI A,30. ; halfs since Jan 1
|
||||||
|
MOVEM A,PDYTIM ; Store backup
|
||||||
|
] ;KS10P
|
||||||
|
INITM2: PUSHJ P,GLPDTM ;GET LOCALIZED PDTIME
|
||||||
|
POPJ P, ;SOMETHING'S MISSING
|
||||||
|
IDIVI A,SPD ;SEPARATE INTO DAYS AND SECONDS
|
||||||
|
LSH B,1 ;CONVERT TIME SINCE MIDNIGHT TO HALF-SECONDS
|
||||||
|
MOVEM B,TIMOFF ;STORE RE-CALCULATED NUMBER OF HALF-SECONDS SINCE MIDNIGHT
|
||||||
|
PUSHJ P,CLCQDT ;GET QDATE,,TIMOFF IN A
|
||||||
|
CONO PI,UTCOFF ;INHIBIT INTERRUPTS DURING THIS RITUAL
|
||||||
|
SKIPGE A,QMDRO ;GET ORIGIN OF MASTER DSK DIRECTORY
|
||||||
|
JRST UTCONJ ;DIRECTORY LOCKED
|
||||||
|
MOVE B,QACTB ;DIRECTORY CHANGED BIT FOR DSK DIRECTORY
|
||||||
|
SKIPE T,PDTIME ;GET OFFSET FOR DECORIOLIS CLOCK
|
||||||
|
CAMN T,MPDOFF(A) ;SEE IF IT MATCHES RELEVANT WORD IN DSKDIR
|
||||||
|
JRST .+3 ;MATCHES OR PDTIME NOT AVAILABLE
|
||||||
|
MOVEM T,MPDOFF(A) ;NO MATCH, CORRECT THE DSKDIR ONE
|
||||||
|
IORM B,QMDRO ;SET DIRECTORY CHANGED BIT
|
||||||
|
SKIPE T,FYEAR ;NOW DO THE SAME FOR THE YEAR,
|
||||||
|
CAMN T,MDYEAR(A) ;AND THE RELEVANT WORD IN DSKDIR
|
||||||
|
JRST .+3
|
||||||
|
MOVEM T,MDYEAR(A)
|
||||||
|
IORM B,QMDRO
|
||||||
|
JRST UTCONJ ;THAT'S ALL
|
||||||
|
|
||||||
|
CLCQDT: PUSHJ P,RDATE1 ;GET DAY OF MONTH IN C, MONTH IN B
|
||||||
|
SETZM QDATE ;INITIALIZE FOR FOLLOWING
|
||||||
|
PUSH P,E-1
|
||||||
|
PUSH P,E
|
||||||
|
MOVE E-1,FYEAR
|
||||||
|
IDIVI E-1,100.
|
||||||
|
DPB E,[330700,,QDATE] ;YEAR
|
||||||
|
POP P,E
|
||||||
|
POP P,E-1
|
||||||
|
DPB B,[270400,,QDATE] ;MONTH
|
||||||
|
DPB C,[220500,,QDATE] ;DAY
|
||||||
|
MOVE C,QDATE ;THE FIRST TIME QDATE IS SET UP,
|
||||||
|
HRR C,TIMOFF ;SET UP QDATEI = TIME SYSTEM CAME UP.
|
||||||
|
SKIPGE QDATEI
|
||||||
|
MOVEM C,QDATEI ;MECHANISM IS, SET QDATEI UNLESS ALREADY SET.
|
||||||
|
POPJ P,
|
||||||
151
src/system/tm03s.defs4
Executable file
151
src/system/tm03s.defs4
Executable file
@@ -0,0 +1,151 @@
|
|||||||
|
;;; -*- Mode: Midas -*-
|
||||||
|
.AUXIL
|
||||||
|
|
||||||
|
;;; Canonical symbol definition macro, FOO==BAR with error check.
|
||||||
|
IFNDEF DEFSYM,[
|
||||||
|
DEFINE DEFSYM X/
|
||||||
|
IRPS Z,,[X]
|
||||||
|
IFNDEF Z,X
|
||||||
|
.ELSE [ $$TEM1==Z
|
||||||
|
X
|
||||||
|
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
|
||||||
|
]
|
||||||
|
.ISTOP
|
||||||
|
TERMIN TERMIN
|
||||||
|
$$TEMP==1
|
||||||
|
] ;IFNDEF DEFSYM
|
||||||
|
.ELSE, $$TEMP==0
|
||||||
|
|
||||||
|
|
||||||
|
;;; RH11/TM03 Interrupt vector:
|
||||||
|
DEFSYM %TMVEC==224 ;(224/4 = 45) Interrupts occur on level 6
|
||||||
|
; (high priority) on UBA #1.
|
||||||
|
DEFSYM %TMBAS==772400 ;Unibus address of first register
|
||||||
|
|
||||||
|
;;; RH11/TM03 Unibus register addresses:
|
||||||
|
|
||||||
|
DEFSYM %TMCS1=:%TMBAS ;CONTROL AND STATUS 1
|
||||||
|
DEFSYM %TM1SC==1_15. ; Special Condition
|
||||||
|
DEFSYM %TM1TE==1_14. ; Transfer Error
|
||||||
|
DEFSYM %TM1MP==1_13. ; Massbus Control Bus Parity Error
|
||||||
|
DEFSYM %TM1DA==1_11. ; Drive Available
|
||||||
|
DEFSYM %TM1A7==1_9. ; UB Address Extension Bit 17
|
||||||
|
DEFSYM %TM1A6==1_8. ; UB Address Extension Bit 16
|
||||||
|
DEFSYM %TM1RY==1_7. ; Ready
|
||||||
|
DEFSYM %TM1IE==1_6. ; Interrupt Enable
|
||||||
|
DEFSYM $TM1CM==.BP 77 ; Bits 0-5 specify commands.
|
||||||
|
DEFSYM %TM1GO==1_0. ; GO bit
|
||||||
|
|
||||||
|
;;; Commands with bit 0 (GO) included:
|
||||||
|
|
||||||
|
DEFSYM %TMNOP==1 ;No Operation
|
||||||
|
DEFSYM %TMUNL==3 ;Unload
|
||||||
|
DEFSYM %TMREW==7 ;Rewind
|
||||||
|
DEFSYM %TMCLR==11 ;Formatter clear (reset errors etc.)
|
||||||
|
DEFSYM %TMER3==25 ;Erase three inch gap
|
||||||
|
DEFSYM %TMWTM==27 ;Write Tape Mark
|
||||||
|
DEFSYM %TMSPF==31 ;Space Forward
|
||||||
|
DEFSYM %TMSPR==33 ;Space Reverse
|
||||||
|
DEFSYM %TMWCF==51 ;Write Check FOrward
|
||||||
|
DEFSYM %TMWCR==57 ;Write Check Reverse
|
||||||
|
DEFSYM %TMWRT==61 ;Write Forward
|
||||||
|
DEFSYM %TMRDF==71 ;Read Forward
|
||||||
|
DEFSYM %TMRDR==77 ;Read Data Reverse
|
||||||
|
|
||||||
|
DEFSYM %TMWC=:%TMBAS+2 ;WORD COUNT.
|
||||||
|
|
||||||
|
DEFSYM %TMBA=:%TMBAS+4 ;UNIBUS ADDRESS.
|
||||||
|
|
||||||
|
DEFSYM %TMFC=:%TMBAS+6 ;TAPE FRAME COUNT
|
||||||
|
|
||||||
|
DEFSYM %TMCS2=:%TMBAS+10 ;CONTROL AND STATUS 2.
|
||||||
|
DEFSYM %TM2DL==1_15. ; Data Late
|
||||||
|
DEFSYM %TM2UP==1_13. ; Unibus Parity Error
|
||||||
|
DEFSYM %TM2NF==1_12. ; Non-existant Formatter
|
||||||
|
DEFSYM %TM2NM==1_11. ; %TMBA is NXM during DMA
|
||||||
|
DEFSYM %TM2PE==1_10. ; Program Error
|
||||||
|
DEFSYM %TM2MT==1_9. ; Missed Transfer
|
||||||
|
DEFSYM %TM2MP==1_8. ; Massbus Data Bus Parity Error
|
||||||
|
DEFSYM %TM2OR==1_7. ; Output Ready (for Silo buffer diag.)
|
||||||
|
DEFSYM %TM2IR==1_6. ; Input Ready (for Silo buffer diag.)
|
||||||
|
DEFSYM %TM2CC==1_5. ; Controller Clear
|
||||||
|
DEFSYM %TM2PT==1_4. ; Parity Test
|
||||||
|
DEFSYM %TM2AI==1_3. ; Unibus Address Increment Inhibit
|
||||||
|
|
||||||
|
DEFSYM %TMFS=:%TMBAS+12 ;FORMATTER STATUS
|
||||||
|
DEFSYM %TMSAA==1_15. ; Attention Active
|
||||||
|
DEFSYM %TMSES==1_14. ; Error Summary
|
||||||
|
DEFSYM %TMSPP==1_13. ; Positioning in Progress
|
||||||
|
DEFSYM %TMSOL==1_12. ; Medium On-Line
|
||||||
|
DEFSYM %TMSWL==1_11. ; Write Locked
|
||||||
|
DEFSYM %TMSET==1_10. ; End of Tape
|
||||||
|
DEFSYM %TMSFP==1_8. ; Formatter Present
|
||||||
|
DEFSYM %TMSFR==1_7. ; Formatter Ready
|
||||||
|
DEFSYM %TMSSC==1_6 ; Slave Status Change
|
||||||
|
DEFSYM %TMSPE==1_5. ; Phase Encoded (1600BPI) Mode
|
||||||
|
DEFSYM %TMSSD==1_4. ; Slowing Down
|
||||||
|
DEFSYM %TMSIB==1_3. ; PE Identification Burst Detected
|
||||||
|
DEFSYM %TMSTM==1_2. ; Tape Mark detected
|
||||||
|
DEFSYM %TMSBT==1_1. ; Beginning of Tape
|
||||||
|
DEFSYM %TMSSA==1_0. ; Slave Attention (on-line)
|
||||||
|
|
||||||
|
DEFSYM %TMERR=:%TMBAS+14 ;ERROR REGISTER
|
||||||
|
DEFSYM %TMECE==1_15. ; Correctable Data/CRC Error
|
||||||
|
DEFSYM %TMEUS==1_14. ; Unsafe
|
||||||
|
DEFSYM %TMEOI==1_13. ; Operation Incomplete
|
||||||
|
DEFSYM %TMECT==1_12. ; Controller Timing Error
|
||||||
|
DEFSYM %TMENX==1_11. ; Non Executable Function
|
||||||
|
DEFSYM %TMECS==1_10. ; Correctable Skew/Illegal Tape Mark Error
|
||||||
|
DEFSYM %TMEFC==1_9. ; Frame Count Error
|
||||||
|
DEFSYM %TMENG==1_8. ; Non-standard Gap
|
||||||
|
DEFSYM %TMEFL==1_7. ; PE Format/LRC Error
|
||||||
|
DEFSYM %TMEIC==1_6. ; Incorrectable Data/Hard Error
|
||||||
|
DEFSYM %TMEMD==1_5. ; Massbus Data Parity Error
|
||||||
|
DEFSYM %TMEFS==1_4. ; Format Select Error
|
||||||
|
DEFSYM %TMEMC==1_3. ; Massbus Control Parity Error
|
||||||
|
DEFSYM %TMERM==1_2. ; Register Modification Refused
|
||||||
|
DEFSYM %TMEIR==1_1. ; Illegal Register
|
||||||
|
DEFSYM %TMEIF==1_0. ; Illegal Function
|
||||||
|
DEFSYM %TMEHD==44077 ; Hard errors - US,NX,MD,FS,MC,RM,IR,IF
|
||||||
|
|
||||||
|
DEFSYM %TMASN=:%TMBAS+16 ;ATTENTION SUMMARY.
|
||||||
|
;Each bit 7-0 corresponds to a formatter asserting ATA.
|
||||||
|
|
||||||
|
DEFSYM %TMCCR=:%TMBAS+20 ;CHECK CHARACTER REGISTER
|
||||||
|
DEFSYM %TMCDP==1_8. ; Dead Track Parity/CRC Parity
|
||||||
|
DEFSYM $TMCEI==.BP 177 ; Error Information
|
||||||
|
|
||||||
|
DEFSYM %TMBUF=:%TMBAS+22 ;DATA BUFFER REGISTER
|
||||||
|
|
||||||
|
DEFSYM %TMMNT=:%TMBAS+24 ;MAINTENANCE.
|
||||||
|
|
||||||
|
DEFSYM %TMTYP=:%TMBAS+26 ;DRIVE TYPE.
|
||||||
|
;2.7 Not Sector addressed
|
||||||
|
;2.6 Tape
|
||||||
|
;2.5 Moving Head
|
||||||
|
;2.3 Dual controller option available
|
||||||
|
;1.9 - 1.1 Drive Type Number.
|
||||||
|
; TU77=14, TU45=12, TE16=11 Nothing=10
|
||||||
|
|
||||||
|
DEFSYM %TMSER=:%TMBAS+30 ;SERIAL NUMBER
|
||||||
|
|
||||||
|
DEFSYM %TMTC=:%TMBAS+32 ;TAPE CONTROL REGISTER
|
||||||
|
DEFSYM %TMTAC==1_15. ; Acceleration (not up to speed)
|
||||||
|
DEFSYM %TMTFC==1_14. ; Frame Count non-zero
|
||||||
|
DEFSYM %TMTSA==1_13. ; Slave Address (selected slave) Changed
|
||||||
|
DEFSYM %TMTEA==1_12. ; Enable Abort on data transfer error
|
||||||
|
DEFSYM %TMTDS==7_8. ; Density Select Field
|
||||||
|
DEFSYM $TMTDS==.BP %TMTDS
|
||||||
|
DEFSYM %TMD08==3 ; 800 BPI NRZI
|
||||||
|
DEFSYM %TMD16==4 ; 1600 BPI PE
|
||||||
|
DEFSYM %TMTFS==17_4. ; Format Select
|
||||||
|
DEFSYM $TMTFS==.BP %TMTFS
|
||||||
|
DEFSYM %TMFCD==0 ; PDP10 Core Dump
|
||||||
|
DEFSYM %TMFIC==3 ; Industry Compatible (32 bit mode)
|
||||||
|
DEFSYM %TMTEP==1_3. ; Even Parity
|
||||||
|
DEFSYM %TMTTS==7 ; Transport Select
|
||||||
|
DEFSYM $TMTTS==.BP %TMTTS
|
||||||
|
|
||||||
|
IFN $$TEMP,EXPUNG DEFSYM
|
||||||
|
|
||||||
|
|
||||||
178
src/system/tm78s.defs2
Executable file
178
src/system/tm78s.defs2
Executable file
@@ -0,0 +1,178 @@
|
|||||||
|
;;; -*- Mode: Midas -*-
|
||||||
|
.AUXIL
|
||||||
|
|
||||||
|
;;; Canonical symbol definition macro, FOO==BAR with error check.
|
||||||
|
IFNDEF DEFSYM,[
|
||||||
|
DEFINE DEFSYM X/
|
||||||
|
IRPS Z,,[X]
|
||||||
|
IFNDEF Z,X
|
||||||
|
.ELSE [ $$TEM1==Z
|
||||||
|
X
|
||||||
|
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
|
||||||
|
]
|
||||||
|
.ISTOP
|
||||||
|
TERMIN TERMIN
|
||||||
|
$$TEMP==1
|
||||||
|
] ;IFNDEF DEFSYM
|
||||||
|
.ELSE, $$TEMP==0
|
||||||
|
|
||||||
|
|
||||||
|
;;; RH11/TM78 Interrupt vector:
|
||||||
|
DEFSYM %ARVEC==224 ;(224/4 = 45) Interrupts occur on level 6
|
||||||
|
; (high priority) on UBA #1.
|
||||||
|
DEFSYM %ARBAS==772400 ;Unibus address of first register
|
||||||
|
|
||||||
|
;;; RH11/TM78 Unibus register addresses:
|
||||||
|
|
||||||
|
DEFSYM %ARCS1==%ARBAS ;CONTROL AND STATUS 1 (RH11 and MB Reg 00)
|
||||||
|
DEFSYM %A1SC==1_15. ; Special Condition
|
||||||
|
DEFSYM %A1TE==1_14. ; Transfer Error
|
||||||
|
DEFSYM %A1MCP==1_13. ; Massbus Control Bus Parity Error
|
||||||
|
DEFSYM %A1DA==1_11. ; Drive (TM78) Available
|
||||||
|
DEFSYM %A1A7==1_9. ; UB Address Extension Bit 17
|
||||||
|
DEFSYM %A1A6==1_8. ; UB Address Extension Bit 16
|
||||||
|
DEFSYM %A1RDY==1_7. ; Ready
|
||||||
|
DEFSYM %A1IE==1_6. ; Interrupt Enable
|
||||||
|
DEFSYM %A1CMD==77 ; Bits 0-5 specify commands.
|
||||||
|
DEFSYM %A1GO==1_0. ; GO bit
|
||||||
|
|
||||||
|
;;; Commands, with GO bit or'd in.
|
||||||
|
;;; --NOTE--
|
||||||
|
;;; Commands are passed to the controller in two ways. Data transfer
|
||||||
|
;;; command get written into the CS1 register, as usual. Non-data-transfer
|
||||||
|
;;; commands are written to the %ARNDC register for the desired drive
|
||||||
|
;;; unit (see below). Non-data-transfer commands are marked with a '*'.
|
||||||
|
|
||||||
|
DEFSYM %ACNOP==3 ;(*) No Operation
|
||||||
|
DEFSYM %ACUNL==5 ;(*) Unload
|
||||||
|
DEFSYM %ACREW==7 ;(*) Rewind
|
||||||
|
DEFSYM %ACSNS==11 ;(*) Sense (Get status from TM)
|
||||||
|
DEFSYM %ACDSE==13 ;(*) Data Security Erase! (Erase rest of tape)
|
||||||
|
DEFSYM %ACWPM==15 ;(*) Write Phase Encoded (1600bpi) Tape Mark
|
||||||
|
DEFSYM %ACWGM==17 ;(*) Write GCR (6250bpi Tape Mark
|
||||||
|
DEFSYM %ACSFR==21 ;(*) Space Forward Record
|
||||||
|
DEFSYM %ACSRR==23 ;(*) Space Reverse Record
|
||||||
|
DEFSYM %ACSFF==25 ;(*) Space Forward File
|
||||||
|
DEFSYM %ACSRF==27 ;(*) Space Reverse File
|
||||||
|
DEFSYM %ACSFE==31 ;(*) Space Forward Either (record or file)
|
||||||
|
DEFSYM %ACSRE==33 ;(*) Space Reverse Either
|
||||||
|
DEFSYM %ACE3P==35 ;(*) Erase Three-inch gap, set PE
|
||||||
|
DEFSYM %ACE3G==37 ;(*) Erase Three-inch gap, set GCR
|
||||||
|
DEFSYM %ACCFP==41 ;(*) Close File PE (write two marks, back one)
|
||||||
|
DEFSYM %ACCFG==43 ;(*) Close File GCR
|
||||||
|
DEFSYM %ACEOT==45 ;(*) Space to Logical EOT
|
||||||
|
DEFSYM %ACSFU==47 ;(*) Space forward usefully (to file or EOT)
|
||||||
|
DEFSYM %ACWCF==51 ;Write Check Forward
|
||||||
|
DEFSYM %ACWCR==57 ;Write Check Reverse
|
||||||
|
DEFSYM %ACWRP==61 ;Write Forward PE
|
||||||
|
DEFSYM %ACWRG==63 ;Write Forward GCR
|
||||||
|
DEFSYM %ACRDF==71 ;Read Forward
|
||||||
|
DEFSYM %ACRES==73 ;Read Extended Sense Information
|
||||||
|
DEFSYM %ACRDR==77 ;Read Data Reverse
|
||||||
|
|
||||||
|
|
||||||
|
DEFSYM %ARWC==%ARBAS+2 ;UNIBUS DMA WORD COUNT. (RH11)
|
||||||
|
; Negative count of the number of PDP11 (18-bit) words to DMA
|
||||||
|
|
||||||
|
DEFSYM %ARBA==%ARBAS+4 ;UNIBUS ADDRESS. (RH11)
|
||||||
|
; Unibus address of start of DMA transfer
|
||||||
|
|
||||||
|
DEFSYM %ARFC==%ARBAS+6 ;TAPE FRAME BYTE COUNT (MB Reg 05)
|
||||||
|
|
||||||
|
DEFSYM %ARCS2==%ARBAS+10 ;CONTROL AND STATUS 2. (RH11)
|
||||||
|
DEFSYM %A2DL==1_15. ; Data Late
|
||||||
|
DEFSYM %A2UPE==1_13. ; Unibus Parity Error
|
||||||
|
DEFSYM %A2NF==1_12. ; Non-existant Formatter (TM78)
|
||||||
|
DEFSYM %A2NM==1_11. ; Unibus mem NXM during DMA
|
||||||
|
DEFSYM %A2PE==1_10. ; Program Error
|
||||||
|
DEFSYM %A2MT==1_9. ; Missed Transfer
|
||||||
|
DEFSYM %A2MDP==1_8. ; Massbus Data Bus Parity Error
|
||||||
|
DEFSYM %A2OR==1_7. ; Output Ready (for Silo buffer diag.)
|
||||||
|
DEFSYM %A2IR==1_6. ; Input Ready (for Silo buffer diag.)
|
||||||
|
DEFSYM %A2CC==1_5. ; Controller Clear
|
||||||
|
DEFSYM %A2PT==1_4. ; Parity Test
|
||||||
|
DEFSYM %A2UAI==1_3. ; Unibus Address Increment Inhibit
|
||||||
|
|
||||||
|
DEFSYM %ARDER==%ARBAS+12 ;DATA TRANSFER ERROR REPORT (MB Reg 01)
|
||||||
|
DEFSYM %ADEIC==77 ; Interrupt Code
|
||||||
|
DEFSYM %ADEDP==1_8. ; DPR ???
|
||||||
|
DEFSYM %ADEFC==77_10. ; Failure Code
|
||||||
|
|
||||||
|
DEFSYM %ARDCA==%ARBAS+14 ;DATA COMMAND ARGUMENTS (MB Reg 02)
|
||||||
|
DEFSYM %ADACA==3 ; Command Address (TU78 unit number)
|
||||||
|
DEFSYM %ADARC==77_2. ; Record Count
|
||||||
|
DEFSYM %ADASC==17_8. ; Skip Count
|
||||||
|
DEFSYM %ADAFT==7_12. ; Format
|
||||||
|
DEFSYM %ADASR==1_15. ; Supress Repositioning on error
|
||||||
|
|
||||||
|
DEFSYM %ARASN==%ARBAS+16 ;ATTENTION SUMMARY. (MB Reg 04)
|
||||||
|
;Each bit 3-0 corresponds to a drive wanting attention
|
||||||
|
; You must explicitly -RESET- an attention bit by writing a
|
||||||
|
; one into it before the controller can interrupt you again.
|
||||||
|
|
||||||
|
DEFSYM %ARDS==%ARBAS+20 ;DRIVE STATUS (MB Reg 07)
|
||||||
|
;;; This register is valid only after a SENSE command
|
||||||
|
;;; (or possibly an unsolicited ONLINE interrupt)
|
||||||
|
DEFSYM %ASRDY==1_15. ; Tape Ready
|
||||||
|
DEFSYM %ASPRE==1_14. ; Present (TM78 powered up)
|
||||||
|
DEFSYM %ASONL==1_13. ; Online
|
||||||
|
DEFSYM %ASREW==1_12. ; Tape Rewinding
|
||||||
|
DEFSYM %ASPE==1_11. ; Tape is Phase Encoded
|
||||||
|
DEFSYM %ASBOT==1_10. ; Tape at BOT
|
||||||
|
DEFSYM %ASEOT==1_9. ; Tape at EOT
|
||||||
|
DEFSYM %ASWPT==1_8. ; Tape is Write Protected
|
||||||
|
DEFSYM %ASUA==1_7. ; Unit Available
|
||||||
|
DEFSYM %ASUS==1_6. ; Unit is shared
|
||||||
|
DEFSYM %ASMMD==1_5. ; Unit is in Maintainance mode
|
||||||
|
DEFSYM %ASDSE==1_4. ; Data Security Erase in progress.
|
||||||
|
|
||||||
|
DEFSYM %ARBUF==%ARBAS+22 ;DATA BUFFER REGISTER (RH11)
|
||||||
|
|
||||||
|
DEFSYM %ARMR1==%ARBAS+24 ;MAINTENANCE REGISTER 1 (MB Reg 03)
|
||||||
|
|
||||||
|
DEFSYM %ARTYP==%ARBAS+26 ;DRIVE TYPE. (MB Reg 06)
|
||||||
|
;;; This register is valid only after a SENSE command
|
||||||
|
;2.7 Not Sector addressed
|
||||||
|
;2.6 Tape
|
||||||
|
;2.5 Moving Head (always 0)
|
||||||
|
;2.4 7 track (always 0)
|
||||||
|
;2.3 Dual port (must do arbitration)
|
||||||
|
;2.2 Slave present (always 1)
|
||||||
|
;2.1 Writable Control Store (always 0)
|
||||||
|
;1.9 - 1.1 Drive Type Number.
|
||||||
|
; TU78=101
|
||||||
|
|
||||||
|
DEFSYM %ARSER==%ARBAS+30 ;SERIAL NUMBER (MB Reg 010)
|
||||||
|
;;; This register is valid only after a SENSE command
|
||||||
|
;0-3 SN digit 0, in BCD
|
||||||
|
;4-7 SN digit 1
|
||||||
|
;8-11 SN digit 2
|
||||||
|
;12-15 SN digit 3
|
||||||
|
|
||||||
|
DEFSYM %ARMR2==%ARBAS+32 ;MAINTAINANCE REGISTER 2 (MB Reg 011)
|
||||||
|
|
||||||
|
DEFSYM %ARMR3==%ARBAS+34 ;MAINTAINANCE REGISTER 3 (MB Reg 012)
|
||||||
|
|
||||||
|
DEFSYM %ARNDE==%ARBAS+36 ;NON-DATA CMD ERROR REGISTER (MB Reg 013)
|
||||||
|
DEFSYM %ANEIC==77 ; NDT Interrupt code
|
||||||
|
DEFSYM %ANEAA==3_8. ; Attention Address (drive that caused this)
|
||||||
|
DEFSYM %ANEFC==77_10. ; NDT Failure Code
|
||||||
|
|
||||||
|
DEFSYM %ARNDA==%ARBAS+40 ;NON-DATA CMD ARG REGISTERS (MB Reg 014 - 017)
|
||||||
|
;;; There are four of these, one for each of the possible slave TU78
|
||||||
|
;;; units on the TM78. This is where you write commands that don't
|
||||||
|
;;; move data over the massbus.
|
||||||
|
DEFSYM %ANCMD==77 ; Command to execute
|
||||||
|
DEFSYM %ANCNT==377_8. ; Count
|
||||||
|
|
||||||
|
DEFSYM %ARIA==%ARBAS+50 ;INTERNAL ADDRESS (MB Reg 020)
|
||||||
|
|
||||||
|
DEFSYM %ARID==%ARBAS+52 ;HARDWARE CONTROL (MB Reg 021)
|
||||||
|
DEFSYM %AHRDY==1_15. ; Set when controller is ready. (read only)
|
||||||
|
DEFSYM %AHCLR==1_14. ; Write 1 here to reset controller.
|
||||||
|
;;; And a bunch of other stuff
|
||||||
|
|
||||||
|
|
||||||
|
IFN $$TEMP,EXPUNG DEFSYM
|
||||||
|
|
||||||
|
|
||||||
8214
src/system/ts3tty.400
Executable file
8214
src/system/ts3tty.400
Executable file
File diff suppressed because it is too large
Load Diff
400
src/system/ttytyp.314
Executable file
400
src/system/ttytyp.314
Executable file
@@ -0,0 +1,400 @@
|
|||||||
|
|
||||||
|
;THE MASTER COPY OF THIS FILE IS KEPT ON AI:SYSTEM;TTYTYP >
|
||||||
|
;DUPLICATES ARE KEPT ON OTHER ITS MACHINES BUT THEY SHOULD
|
||||||
|
;NEVER BE EDITED. IF YOU'RE NOT TOTALLY SURE OF WHAT YOU'RE DOING
|
||||||
|
;DON'T EDIT THIS FILE; ASK A HACKER FOR ASSISTANCE.
|
||||||
|
|
||||||
|
;HOW TO DESCRIBE EACH TTY. IT ASSUMES THE FOLLOWING:
|
||||||
|
;EACH MACHINE MUST HAVE A BLOCK OF ENTRIES, WHICH STARTS WITH
|
||||||
|
;THREE SEMICOLONS, A SPACE , AND THE NAME OF THE MACHINE.
|
||||||
|
;THEN MUST COME EXACTLY ONE COMMENT PER TTY, STARTING WITH
|
||||||
|
;"TNM ". THERE MAY BE OTHER COMMENTS NOT STARTING WITH A "TNM ".
|
||||||
|
;THOSE OTHER COMMENTS WILL BE IGNORED BY "NAME".
|
||||||
|
|
||||||
|
;THIS FILE IS ARRANGED SO THAT IT CAN BE ASSEMBLED BY EITHER MIDAS OR PALX
|
||||||
|
;THE FOLLOWING MACROS ARE USED IN THIS FILE
|
||||||
|
;
|
||||||
|
;SEPARATORS:
|
||||||
|
; MCONDX CONDITIONAL FOR WHICH MACHINE
|
||||||
|
; .ENDC TERMINATE ...
|
||||||
|
;
|
||||||
|
|
||||||
|
;TERMINAL TYPES:
|
||||||
|
;FIRST ARGUMENT TO TTDXXX MACRO IS THE LINE NUMBER
|
||||||
|
;FOLLOWING THAT CAN BE SEVERAL OPTIONS, SELECTED BY THE FOLLOWING KEYWORD PARAMETERS:
|
||||||
|
;TT LH(TTYTYP) ADDED TO SPEED CODE
|
||||||
|
;TY RH(TTYTYP) ADDED TO CONTROLLER-SELECT BIT
|
||||||
|
;TO LH(TTYOPT) ADDED TO DEFAULT BITS FOR DEVICE
|
||||||
|
;TP RH(TTYOPT) ADDED TO PAD CODES, DEFAULT IS DEFAULT %TPORS AND %TPCBS
|
||||||
|
;TCT TCTYP DEFAULT IS APPROPRIATE FOR TERMINAL BEING DEFINED
|
||||||
|
;HOR SCREEN WIDTH DEFAULT ..
|
||||||
|
;VER SCREEN HEIGHT DEFAULT ..
|
||||||
|
;ROL LINES/GLITCH DEFAULT ..
|
||||||
|
;SPEED OUTPUT SPEED IN BAUDS DEFAULT IS APPROPRIATE..
|
||||||
|
;ISPEED INPUT SPEED IN BAUDS (IF DIFFERENT)
|
||||||
|
;SOME TERMINAL TYPES DON'T ACCEPT SOME OF THESE OPTIONS WHICH WOULD BE MEANINGLESS.
|
||||||
|
|
||||||
|
.XCREF TT,TY,TO,TP,TCT,HOR,VER,ROL,SPEED,ISPEED ;FOOL @
|
||||||
|
|
||||||
|
; TTDPRT PRINTING TERMINAL (SPEED=110 => TTY35). DEFAULT SPEED IS 300.
|
||||||
|
; TTDMRX MEMOREX 1240
|
||||||
|
; TTDTRM TERMINET 1200
|
||||||
|
; TTDLPT BRIGHT (OR ODEC OR GOULD) LINE PRINTER ON TTY LINE
|
||||||
|
; TTDLA36 LA 36
|
||||||
|
; TTDIML IMLAC
|
||||||
|
; TTDVT VT-52
|
||||||
|
; TTDH19 H19
|
||||||
|
; TTDTEK TEKTRONIX
|
||||||
|
; TTDLSR LOSING DATAPOINT
|
||||||
|
; TTDDPT DATAPOINT
|
||||||
|
; TTDGT40 GT-40
|
||||||
|
; TTD11 PDP-11 (LOOKS LIKE PRINTING TERMINAL)
|
||||||
|
; TTDRAN RANDOM TYPE, YOU BETTER SPECIFY EVERYTHING
|
||||||
|
; TTDTV PDP-11 TV "LINE" VIA TEN-11 INTERFACE
|
||||||
|
; TTDGRN PDP-11 TV (OR GRINNELL TV) ON NORMAL TTY LINE
|
||||||
|
; TTD2741 N,CODE 2741 CODE=0 => EBCDIC, CODE=1 => CORRESPONDENCE
|
||||||
|
; TTDSTY SOFTWARE PSEUDO-TTY
|
||||||
|
; TTDC100 CONCEPT-100
|
||||||
|
; TTDAAA Ann Arbor Ambassador
|
||||||
|
|
||||||
|
;NOTE: SEE COMMENT AT FRONT OF FILE FOR CONSTRAINTS ON THE COMMENTS
|
||||||
|
;THAT APPEAR ON THE FOLLOWING LINES. ALSO NOTE THAT LOWER CASE
|
||||||
|
;CHARACTERS MAY BE PRESENT IN THEM.
|
||||||
|
|
||||||
|
MCONDX AIKA,{ ;;; AI-KA
|
||||||
|
TTDLA36 0,TT=%TTLCL,HOR=80.,SPEED=110 ;T00 System Console (9th)
|
||||||
|
TTDPRT 1,SPEED=150,TY=%TYDIL ;T01 Dialup 15CPS *
|
||||||
|
; 8-7874 15CPS
|
||||||
|
TTDPRT 2,SPEED=110,TY=%TYDIL ;T02 Dialup 10CPS *
|
||||||
|
; 258-8794 10CPS
|
||||||
|
TTDPRT 3,SPEED=110,TT=%TTLCL ;T03 XGP TTY (9TH)
|
||||||
|
TTDPRT 4,SPEED=110,TT=%TTLCL+%TT340+%TT3HP ;T04 PDP6 TTY (9th)
|
||||||
|
TTDPRT 5,SPEED=110,TT=%TTLCL ;T05 TTY Near LPT (9th)
|
||||||
|
TTDPRT 6,SPEED=150,TY=%TYDIL ;T06 Dialup 15CPS *
|
||||||
|
; 258-8795 15CPS
|
||||||
|
TTDPRT 7,SPEED=110,TT=%TTLCL+%TT340 ;T07 Little Robot TTY (9th)
|
||||||
|
TTDPRT 10,SPEED=134 ;T10 Baudot AP *
|
||||||
|
;NEXT 3 USED TO BE 2741S, BUT WERE FLUSHED
|
||||||
|
TTDPRT 11,SPEED=134 ;T11 TSTC (9th) *
|
||||||
|
TTDPRT 12,SPEED=134 ;T12 2741 (9th) *
|
||||||
|
TTDPRT 13,SPEED=134,TY=%TYDIL ;T13 2741 Dialup *
|
||||||
|
TTDPRT 14 ;T14 Unused *
|
||||||
|
TTDPRT 15,SPEED=300,TY=%TYDIL ;T15 Dialup 30CPS
|
||||||
|
TTDPRT 16,SPEED=300,TY=%TYDIL ;T16 Dialup 30CPS
|
||||||
|
TTDPRT 17,SPEED=300,TY=%TYDIL ;T17 Dialup 30CPS
|
||||||
|
TTDPRT 20,SPEED=300,TY=%TYDIL ;T20 Dialup 30CPS
|
||||||
|
TTDVT 21,SPEED=4800,TT=%TTLCL ;T21 814 x7881 Barton,Berwick,Brotsky,Sjoberg
|
||||||
|
TTDTRM 22,TT=%TTLCL ;T22 Terminet in 813 (Hewitt)
|
||||||
|
TTDVT 23,SPEED=4800,TT=%TTLCL ;T23 926 Under the Miro x6765
|
||||||
|
TTDDPT 24,TT=%TTLCL+%TT340,HOR=71. ;T24 Datapoint Near XGP (9th)
|
||||||
|
TTDAAA 25,TT=%TTLCL,SPEED=4800,TP=%TPMTA ;T25 810 Marty, Toto, Kansas x7836
|
||||||
|
TTDDPT 26 ;T26 Datapoint in 822 (Stansfield)
|
||||||
|
TTDAAA 27,TT=%TTLCL,SPEED=4800 ;T27 926 Under ee cummings x6765
|
||||||
|
TTDTRM 30,ISPEED=150,TY=%TYDIL ;T30 Dialup 120/15 CPS
|
||||||
|
; 258-6091 150 IN, 1200 OUT TERMINET
|
||||||
|
TTDAAA 31,TT=%TTLCL,SPEED=4800,TP=%TPMTA ;T31 936 Lisp Machine Factory x6703
|
||||||
|
TTDTRM 32,ISPEED=150,TY=%TYDIL ;T32 Dialup 120/15 CPS
|
||||||
|
; 258-6090 150 IN, 1200 OUT TERMINET
|
||||||
|
TTDAAA 33,SPEED=4800,TT=%TTLCL ;T33 336 Sobalvarro, Delatizky x5834
|
||||||
|
TTDVT 34,SPEED=4800,TT=%TTLCL ;T34 908 Oro
|
||||||
|
TTDDTM 35,SPEED=4800 ;T35 Poggio, Ullman x5781 (Bldg E10)
|
||||||
|
TTDRAY 36,SPEED=4800,TP=%TPMTA,TT=%TTLCL ;T36 812 Attardi, Barber, Koton (x7891)
|
||||||
|
TTDRAY 37,SPEED=4800,TP=%TPMTA,TT=%TTLCL ;T37 939 Kornfeld x5835
|
||||||
|
TTDGT40 40,VER=29.,HOR=68.,TO=-%TOOVR ;T40 Micro-Automation PDP-11 (9th)
|
||||||
|
.ENDC ;}
|
||||||
|
|
||||||
|
;NOTE: SEE COMMENT AT FRONT OF FILE FOR CONSTRAINTS ON THE COMMENTS
|
||||||
|
;THAT APPEAR ON THE FOLLOWING LINES. ALSO NOTE THAT LOWER CASE
|
||||||
|
;CHARACTERS MAY BE PRESENT IN THEM.
|
||||||
|
|
||||||
|
MCONDX MLKA,{ ;;; ML-KA
|
||||||
|
TTDLA36 0,TT=%TTLCL,HOR=80.,SPEED=110 ;T00 System Console
|
||||||
|
TTDPRT 1,SPEED=1200,TY=%TYDIL ;T01 Dial-up 1.2KB Vadic
|
||||||
|
;258-6756
|
||||||
|
TTDPRT 2,SPEED=300,TY=%TYDIL ;T02 Dial-up line 30CPS
|
||||||
|
;258-6742
|
||||||
|
TTDPRT 3,SPEED=300,TY=%TYDIL ;T03 Dial-up line 30CPS
|
||||||
|
;258-6743
|
||||||
|
TTDPRT 4,SPEED=1200,TY=%TYDIL ;T04 Dial-up 1.2KB Vadic
|
||||||
|
;258-7894
|
||||||
|
TTDVT 5 ;T05 350 Waters x6037
|
||||||
|
TTDDPT 6,TT=%TTLCL ;T06 9th flr near console
|
||||||
|
TTDLA36 7 ;T07 800D DECwriter
|
||||||
|
TTDVT 10 ;T10 3rd flr VT52 #833
|
||||||
|
TTDPRT 11,SPEED=1200,TY=%TYDIL ;T11 Dial-up 1.2KB Vadic
|
||||||
|
;258-6757
|
||||||
|
TTDVT 12 ;T12 8th flr VT52
|
||||||
|
TTDVT 13 ;T13 8th flr VT52 #433
|
||||||
|
TTDVT 14 ;T14 8th flr VT52
|
||||||
|
TTDVT 15 ;T15 8th flr VT52
|
||||||
|
TTDVT 16 ;T16 3rd flr VT52 #517
|
||||||
|
TTDVT 17 ;T17 3rd flr VT52 #256
|
||||||
|
TTDVT 20 ;T20 3rd flr VT52 #342
|
||||||
|
TTDVT 21 ;T21 3rd flr VT52 #1224
|
||||||
|
TTDVT 22 ;T22 3rd flr VT52 #8462
|
||||||
|
TTDVT 23 ;T23 3rd flr VT52 #8453
|
||||||
|
TTDVT 24 ;T24 3rd flr VT52 #7559
|
||||||
|
TTDVT 25 ;T25 3rd flr VT52 #8379
|
||||||
|
TTDVT 26 ;T26 3rd flr VT52 #7320
|
||||||
|
TTDVT 27 ;T27 3rd flr VT52 #8437
|
||||||
|
TTDVT 30 ;T30 VT52 in Library
|
||||||
|
TTDVT 31 ;T31 5th flr VT52
|
||||||
|
;This is now plugged into the right-hand 4-prong in 512A. That is in
|
||||||
|
;parallel with Ann Rubin (Liskov-Dennis's secretary), so she'd
|
||||||
|
;need to be asked if someone wanted to do an - ahem - demo.
|
||||||
|
TTDPRT 32,SPEED=1200,TY=%TYDIL ;T32 Dial-up 1.2KB Vadic
|
||||||
|
;258-6733
|
||||||
|
TTDC100 33 ;T33 317 Burke x3546
|
||||||
|
.ENDC ;}
|
||||||
|
|
||||||
|
;NOTE: SEE COMMENT AT FRONT OF FILE FOR CONSTRAINTS ON THE COMMENTS
|
||||||
|
;THAT APPEAR ON THE FOLLOWING LINES. ALSO NOTE THAT LOWER CASE
|
||||||
|
;CHARACTERS MAY BE PRESENT IN THEM.
|
||||||
|
|
||||||
|
MCONDX DM,{ ;;; DM
|
||||||
|
TTDLA36 0,TT=%TTLCL,HOR=80.,SPEED=110 ;T00 930 x2910 CPU
|
||||||
|
TTDLPT 1 ;T01 215 ODEC LPT
|
||||||
|
TTDVT 2 ;T02 205 x1440 Lebling
|
||||||
|
TTDVT 3 ;T03 219 x1450 Vezza
|
||||||
|
TTDVT 4 ;T04 203 x1429 Sangal
|
||||||
|
TTDVT 5 ;T05 214A x1410 Apollo Room
|
||||||
|
TTDIML 6 ;T06 [not in use]
|
||||||
|
TTDPRT 7 ;T07 214A x1410 APOLLO
|
||||||
|
TTDVT 10 ;T10 204 x1418 Galley
|
||||||
|
TTDVT 11 ;T11 801/A x6025/4 Faris/Meyer
|
||||||
|
TTDVT 12 ;T12 218 x7706 Venckus
|
||||||
|
TTDVT 13 ;T13 222 x5800 Niamir
|
||||||
|
TTDPRT 14,SPEED=110,TT=%TTLCL ;T14 [not in use]
|
||||||
|
TTDIML 15 ;T15 [not in use]
|
||||||
|
TTDVT 16 ;T16 209 x1430 Ilson
|
||||||
|
TTDIML 17 ;T17 [not in use]
|
||||||
|
TTDVT 20 ;T20 218A x7705 Licklider
|
||||||
|
|
||||||
|
.ENDC ;}
|
||||||
|
|
||||||
|
;NOTE: SEE COMMENT AT FRONT OF FILE FOR CONSTRAINTS ON THE COMMENTS
|
||||||
|
;THAT APPEAR ON THE FOLLOWING LINES. ALSO NOTE THAT LOWER CASE
|
||||||
|
;CHARACTERS MAY BE PRESENT IN THEM.
|
||||||
|
|
||||||
|
MCONDX MX,{ ;;; MX
|
||||||
|
TTDLA36 0,TT=%TTLCL,HOR=110. ;T00 System Console
|
||||||
|
TTDPRT 1,SPEED=1200,TY=%TYDIL+%TYMDM ;T01 Vadic Dialup
|
||||||
|
;253-6045
|
||||||
|
TTDVT 2,SPEED=9600 ;T02 TRANTOR Math Dept 2-366 x3-6598
|
||||||
|
TTDPRT 3,TY=%TYDIL+%TYMDM ;T03 Dialup
|
||||||
|
TTDPRT 4,TY=%TYDIL+%TYMDM ;T04 Dialup
|
||||||
|
;253-7985
|
||||||
|
TTDPRT 5,TY=%TYDIL+%TYMDM ;T05 Dialup
|
||||||
|
;253-7986
|
||||||
|
TTDPRT 6,TY=%TYDIL+%TYMDM ;T06 Dialup
|
||||||
|
;253-7987
|
||||||
|
TTDPRT 7,TY=%TYDIL+%TYMDM ;T07 Dialup
|
||||||
|
;253-7988
|
||||||
|
TTDPRT 10,TY=%TYDIL+%TYMDM ;T10 Vadic Dialup
|
||||||
|
;253-6985
|
||||||
|
TTDPRT 11,TY=%TYDIL+%TYMDM ;T11 Vadic Dialup
|
||||||
|
;253-6986
|
||||||
|
TTDPRT 12,TY=%TYDIL+%TYMDM ;T12 Vadic Dialup
|
||||||
|
;253-6987
|
||||||
|
TTDPRT 13,TY=%TYDIL+%TYMDM ;T13 Vadic Dialup
|
||||||
|
;253-6988
|
||||||
|
TTDPRT 14,TY=%TYDIL+%TYMDM ;T14 Vadic Dialup
|
||||||
|
;253-6989
|
||||||
|
TTDPRT 15,TY=%TYDIL+%TYMDM ;T15 Vadic Dialup
|
||||||
|
;253-6990
|
||||||
|
TTDPRT 16,TY=%TYDIL+%TYMDM ;T16 Vadic Dialup
|
||||||
|
;Draper Lab
|
||||||
|
TTDPRT 17,TY=%TYDIL+%TYMDM ;T17 Vadic Dialup
|
||||||
|
TTDDPT 20 ;T20 not connected
|
||||||
|
TTDPRT 21,TY=%TYRLM,SPEED=9600 ;T21 ROLM Data Feature
|
||||||
|
; #4997
|
||||||
|
TTDPRT 22,TY=%TYRLM,SPEED=9600 ;T22 ROLM Data Feature
|
||||||
|
; #4996
|
||||||
|
TTDPRT 23,TY=%TYRLM,SPEED=9600 ;T23 ROLM Data Feature
|
||||||
|
; #4601
|
||||||
|
TTDPRT 24,TY=%TYRLM,SPEED=9600 ;T24 ROLM Data Feature
|
||||||
|
; #4999
|
||||||
|
TTDPRT 25,TY=%TYRLM,SPEED=9600 ;T25 ROLM Data Feature
|
||||||
|
TTDPRT 26,TY=%TYRLM,SPEED=9600 ;T26 ROLM Data Feature
|
||||||
|
; #4603
|
||||||
|
TTDPRT 27,TY=%TYRLM,SPEED=9600 ;T27 ROLM Data Feature
|
||||||
|
TTDPRT 30,TY=%TYRLM,SPEED=9600 ;T30 ROLM Data Feature
|
||||||
|
TTDPRT 31,TY=%TYRLM,SPEED=9600 ;T31 ROLM Data Feature
|
||||||
|
; #4991
|
||||||
|
TTDPRT 32,TY=%TYRLM,SPEED=9600 ;T32 ROLM Data Feature
|
||||||
|
; #4992
|
||||||
|
TTDPRT 33,TY=%TYRLM,SPEED=9600 ;T33 ROLM Data Feature
|
||||||
|
TTDPRT 34,TY=%TYRLM,SPEED=9600 ;T34 ROLM Data Feature
|
||||||
|
TTDPRT 35,TY=%TYRLM,SPEED=9600 ;T35 ROLM Data Feature
|
||||||
|
TTDPRT 36,TY=%TYRLM,SPEED=9600 ;T36 ROLM Data Frobozz
|
||||||
|
; #4990
|
||||||
|
TTDPRT 37,TY=%TYRLM,SPEED=9600 ;T37 ROLM Data Feature
|
||||||
|
TTDPRT 40,TY=%TYRLM,SPEED=9600 ;T40 ROLM Data Feature
|
||||||
|
TTDPRT 41,TY=%TYRLM,SPEED=300 ;T41 ROLM slow
|
||||||
|
TTDPRT 42,TY=%TYRLM,SPEED=9600 ;T42 ROLM Data Feature
|
||||||
|
TTDVT 43,TT=%TTLCL ;T43 9th Floor VT52
|
||||||
|
TTDPRT 44,SPEED=110,TT=%TTLCL ;T44 DC76 TTY
|
||||||
|
.ENDC ;}
|
||||||
|
|
||||||
|
REPEAT NSTTYS,[
|
||||||
|
TTDSTY \NFSTTY+.RPCNT
|
||||||
|
.ENDR ;]
|
||||||
|
|
||||||
|
REPEAT N11TYS,[
|
||||||
|
TTDTV \NF11TY+.RPCNT
|
||||||
|
.ENDR ;]
|
||||||
|
|
||||||
|
;NOTE: SEE COMMENT AT FRONT OF FILE FOR CONSTRAINTS ON THE COMMENTS
|
||||||
|
;THAT APPEAR ON THE FOLLOWING LINES. ALSO NOTE THAT LOWER CASE
|
||||||
|
;CHARACTERS MAY BE PRESENT IN THEM.
|
||||||
|
|
||||||
|
MCONDX AI,{ ;;; AI
|
||||||
|
TTDLA36 0,SPEED=1200,HOR=132.,TT=%TTLCL ;T00 System Console
|
||||||
|
TTDPRT 1,SPEED=1200 ;T01 Chronograph
|
||||||
|
TTDPRT 2,SPEED=9600 ;T02 DZ Line 2
|
||||||
|
TTDPRT 3,SPEED=2400,TY=%TYDIL ;T03 Dialup
|
||||||
|
;258-7814
|
||||||
|
TTDPRT 4,SPEED=2400,TY=%TYDIL ;T04 Dialup
|
||||||
|
;258-7815
|
||||||
|
TTDVT 5,SPEED=9600 ;T05 DZ Line 5 (VT52)
|
||||||
|
TTDVT 6,SPEED=9600,TT=%TTLCL ;T06 9th Floor VT52 by AI x6765
|
||||||
|
TTDVT 7,SPEED=9600 ;T07 DZ Line 7 (VT52)
|
||||||
|
TTDAAA 10,SPEED=9600 ;T10 DZ Line 8 (AAA)
|
||||||
|
|
||||||
|
.ENDC ;}
|
||||||
|
|
||||||
|
;NOTE: SEE COMMENT AT FRONT OF FILE FOR CONSTRAINTS ON THE COMMENTS
|
||||||
|
;THAT APPEAR ON THE FOLLOWING LINES. ALSO NOTE THAT LOWER CASE
|
||||||
|
;CHARACTERS MAY BE PRESENT IN THEM.
|
||||||
|
|
||||||
|
MCONDX MC,{ ;;; MC
|
||||||
|
TTDLA36 0,SPEED=1200,HOR=132.,TT=%TTLCL ;T00 System Console
|
||||||
|
TTDPRT 1,SPEED=2400,TY=%TYDIL ;T01 Dialup
|
||||||
|
;258-7585
|
||||||
|
TTDPRT 2,SPEED=2400,TY=%TYDIL ;T02 Dialup
|
||||||
|
;258-7586
|
||||||
|
TTDVT 3,SPEED=9600,TT=%TTLCL ;T03 9th Floor VT52 by MC x6765
|
||||||
|
TTDPRT 4,SPEED=9600 ;T04 DZ Line 4
|
||||||
|
TTDPRT 5,SPEED=9600 ;T05 DZ Line 5
|
||||||
|
TTDAAA 6,SPEED=9600 ;T06 DZ Line 6 (AAA)
|
||||||
|
|
||||||
|
.ENDC ;}
|
||||||
|
|
||||||
|
;NOTE: SEE COMMENT AT FRONT OF FILE FOR CONSTRAINTS ON THE COMMENTS
|
||||||
|
;THAT APPEAR ON THE FOLLOWING LINES. ALSO NOTE THAT LOWER CASE
|
||||||
|
;CHARACTERS MAY BE PRESENT IN THEM.
|
||||||
|
|
||||||
|
MCONDX ML,{ ;;; ML
|
||||||
|
TTDLA36 0,SPEED=1200,HOR=132.,TT=%TTLCL ;T00 System Console
|
||||||
|
TTDPRT 1,SPEED=2400,TY=%TYDIL ;T01 Dialup
|
||||||
|
;258-7832
|
||||||
|
TTDPRT 2,SPEED=2400,TY=%TYDIL ;T02 Dialup
|
||||||
|
;258-7833
|
||||||
|
TTDVT 3,SPEED=9600,TT=%TTLCL ;T03 9th Floor VT52 by ML x6765
|
||||||
|
TTDPRT 4,SPEED=9600 ;T04 DZ Line 4
|
||||||
|
TTDPRT 5,SPEED=9600 ;T05 DZ Line 5
|
||||||
|
TTDAAA 6,SPEED=9600 ;T06 DZ Line 6 (AAA)
|
||||||
|
|
||||||
|
.ENDC ;}
|
||||||
|
|
||||||
|
;NOTE: SEE COMMENT AT FRONT OF FILE FOR CONSTRAINTS ON THE COMMENTS
|
||||||
|
;THAT APPEAR ON THE FOLLOWING LINES. ALSO NOTE THAT LOWER CASE
|
||||||
|
;CHARACTERS MAY BE PRESENT IN THEM.
|
||||||
|
|
||||||
|
MCONDX MD,{ ;;; MD
|
||||||
|
TTDLA36 0,SPEED=1200,HOR=132.,TT=%TTLCL ;T00 System Console
|
||||||
|
TTDVT 1,SPEED=9600,TT=%TTLCL ;T01 9th Floor VT52 by MD x6765
|
||||||
|
TTDPRT 2,SPEED=9600 ;T02 DZ Line 2
|
||||||
|
TTDPRT 3,SPEED=9600 ;T03 DZ Line 3
|
||||||
|
TTDAAA 4,SPEED=9600 ;T04 DZ Line 4 (AAA)
|
||||||
|
|
||||||
|
.ENDC ;}
|
||||||
|
|
||||||
|
;NOTE: SEE COMMENT AT FRONT OF FILE FOR CONSTRAINTS ON THE COMMENTS
|
||||||
|
;THAT APPEAR ON THE FOLLOWING LINES. ALSO NOTE THAT LOWER CASE
|
||||||
|
;CHARACTERS MAY BE PRESENT IN THEM.
|
||||||
|
|
||||||
|
MCONDX SI,{ ;;; SI
|
||||||
|
TTDLA36 0,SPEED=1200,HOR=132.,TT=%TTLCL ;T00 System Console
|
||||||
|
TTDPRT 1,SPEED=9600 ;T01 DZ Line 1
|
||||||
|
TTDPRT 2,SPEED=9600 ;T02 DZ Line 2
|
||||||
|
TTDPRT 3,SPEED=9600 ;T03 DZ Line 3
|
||||||
|
TTDPRT 4,SPEED=9600 ;T04 DZ Line 4
|
||||||
|
TTDPRT 5,SPEED=9600 ;T05 DZ Line 5
|
||||||
|
TTDPRT 6,SPEED=9600 ;T06 DZ Line 6
|
||||||
|
TTDPRT 7,SPEED=9600 ;T07 DZ Line 7
|
||||||
|
TTDPRT 10,SPEED=9600 ;T10 DZ Line 10
|
||||||
|
TTDPRT 11,SPEED=9600 ;T11 DZ Line 11
|
||||||
|
TTDPRT 12,SPEED=9600 ;T12 DZ Line 12
|
||||||
|
TTDPRT 13,SPEED=9600 ;T13 DZ Line 13
|
||||||
|
TTDPRT 14,SPEED=9600 ;T14 DZ Line 14
|
||||||
|
TTDPRT 15,SPEED=9600 ;T15 DZ Line 15
|
||||||
|
TTDPRT 16,SPEED=9600 ;T16 DZ Line 16
|
||||||
|
TTDPRT 17,SPEED=9600 ;T17 DZ Line 17
|
||||||
|
TTDPRT 20,SPEED=9600 ;T20 DZ Line 20
|
||||||
|
TTDPRT 21,SPEED=9600 ;T21 DZ Line 21
|
||||||
|
TTDPRT 22,SPEED=9600 ;T22 DZ Line 22
|
||||||
|
TTDPRT 23,SPEED=9600 ;T23 DZ Line 23
|
||||||
|
TTDPRT 24,SPEED=9600 ;T24 DZ Line 24
|
||||||
|
TTDPRT 25,SPEED=9600 ;T25 DZ Line 25
|
||||||
|
TTDPRT 26,SPEED=9600 ;T26 DZ Line 26
|
||||||
|
TTDPRT 27,SPEED=9600 ;T27 DZ Line 27
|
||||||
|
TTDPRT 30,SPEED=9600 ;T30 DZ Line 30
|
||||||
|
TTDPRT 31,SPEED=9600 ;T31 DZ Line 31
|
||||||
|
TTDPRT 32,SPEED=9600 ;T32 DZ Line 32
|
||||||
|
TTDPRT 33,SPEED=9600 ;T33 DZ Line 33
|
||||||
|
TTDPRT 34,SPEED=9600 ;T34 DZ Line 34
|
||||||
|
TTDPRT 35,SPEED=9600 ;T35 DZ Line 35
|
||||||
|
TTDPRT 36,SPEED=9600 ;T36 DZ Line 36
|
||||||
|
TTDPRT 37,SPEED=9600 ;T37 DZ Line 37
|
||||||
|
TTDPRT 40,SPEED=9600 ;T40 DZ Line 40
|
||||||
|
|
||||||
|
.ENDC ;}
|
||||||
|
|
||||||
|
;NOTE: SEE COMMENT AT FRONT OF FILE FOR CONSTRAINTS ON THE COMMENTS
|
||||||
|
;THAT APPEAR ON THE FOLLOWING LINES. ALSO NOTE THAT LOWER CASE
|
||||||
|
;CHARACTERS MAY BE PRESENT IN THEM.
|
||||||
|
|
||||||
|
MCONDX FU,{ ;;; FU
|
||||||
|
TTDLA36 0,SPEED=1200,HOR=132.,TT=%TTLCL ;T00 System Console
|
||||||
|
TTDPRT 1,SPEED=9600 ;T01 DZ Line 1
|
||||||
|
TTDPRT 2,SPEED=9600 ;T02 DZ Line 2
|
||||||
|
TTDPRT 3,SPEED=9600 ;T03 DZ Line 3
|
||||||
|
TTDPRT 4,SPEED=9600 ;T04 DZ Line 4
|
||||||
|
TTDPRT 5,SPEED=9600 ;T05 DZ Line 5
|
||||||
|
TTDPRT 6,SPEED=9600 ;T06 DZ Line 6
|
||||||
|
TTDPRT 7,SPEED=9600 ;T07 DZ Line 7
|
||||||
|
TTDPRT 10,SPEED=9600 ;T10 DZ Line 10
|
||||||
|
|
||||||
|
.ENDC ;}
|
||||||
|
|
||||||
|
;NOTE: SEE COMMENT AT FRONT OF FILE FOR CONSTRAINTS ON THE COMMENTS
|
||||||
|
;THAT APPEAR ON THE FOLLOWING LINES. ALSO NOTE THAT LOWER CASE
|
||||||
|
;CHARACTERS MAY BE PRESENT IN THEM.
|
||||||
|
|
||||||
|
MCONDX PM,{ ;;; PM
|
||||||
|
TTDLA36 0,SPEED=1200,HOR=132.,TT=%TTLCL ;T00 System Console
|
||||||
|
TTDPRT 1,SPEED=9600 ;T01 (9600 baud)
|
||||||
|
TTDPRT 2,SPEED=9600 ;T02 (9600 baud)
|
||||||
|
TTDPRT 3,SPEED=1200,TY=%TYDIL ;T03 Dialup (1200 baud)
|
||||||
|
TTDPRT 4,SPEED=1200,TY=%TYDIL ;T04 Dialup (1200 baud)
|
||||||
|
TTDPRT 5,SPEED=9600 ;T05 (9600 baud)
|
||||||
|
|
||||||
|
.ENDC ;}
|
||||||
|
|
||||||
|
;NOTE: SEE COMMENT AT FRONT OF FILE FOR CONSTRAINTS ON THE COMMENTS
|
||||||
|
;THAT APPEAR ON THE FOLLOWING LINES. ALSO NOTE THAT LOWER CASE
|
||||||
|
;CHARACTERS MAY BE PRESENT IN THEM.
|
||||||
|
|
||||||
|
MCONDX DX,{ ;;; DX
|
||||||
|
TTDLA36 0,SPEED=1200,HOR=132.,TT=%TTLCL ;T00 System Console
|
||||||
|
TTDPRT 1,SPEED=300 ;T01 DZ Line 1 (300 baud)
|
||||||
|
TTDPRT 2,SPEED=1200 ;T02 DZ Line 2 (1200 baud)
|
||||||
|
TTDPRT 3,SPEED=2400 ;T03 DZ Line 3 (2400 baud)
|
||||||
|
TTDPRT 4,SPEED=4800 ;T04 DZ Line 4 (4800 baud)
|
||||||
|
TTDPRT 5,SPEED=9600 ;T05 DZ Line 5
|
||||||
|
TTDPRT 6,SPEED=9600 ;T06 DZ Line 6
|
||||||
|
TTDPRT 7,SPEED=9600 ;T07 DZ Line 7
|
||||||
|
TTDPRT 10,SPEED=9600 ;T10 DZ Line 10
|
||||||
|
|
||||||
|
.ENDC ;}
|
||||||
5995
src/system/tv.132
Executable file
5995
src/system/tv.132
Executable file
File diff suppressed because it is too large
Load Diff
2009
src/system/utape.952
Executable file
2009
src/system/utape.952
Executable file
File diff suppressed because it is too large
Load Diff
158
src/system/whovar.5
Executable file
158
src/system/whovar.5
Executable file
@@ -0,0 +1,158 @@
|
|||||||
|
;channel header pointer (location 40, read only)
|
||||||
|
;
|
||||||
|
; ADDRESS(channel header area)
|
||||||
|
; ADDRESS(pointer area)
|
||||||
|
; I/O version number
|
||||||
|
; source file version number
|
||||||
|
; 0 always 0
|
||||||
|
; INITED non-zero indicates PDP-11 is running ok(can be cleared by PDP-10)
|
||||||
|
; 0 always 0
|
||||||
|
; GDOWN used as flag by PDP-10 to acknowledge clear of INITED
|
||||||
|
;
|
||||||
|
;channel header area (aligned on PDP-10 word)
|
||||||
|
;
|
||||||
|
; KBD channel:
|
||||||
|
; KBDFLG cleared by 10/set by 11 (chain of activated KBD buffers)
|
||||||
|
; 0 allows PDP-10 to do SKIPN for activation test
|
||||||
|
; DPY channel: (1 per console)
|
||||||
|
; DPYCHN buffer assigned to channel, if zero then DPY channel is closed
|
||||||
|
; DPYKBD .BYTE KBD#, DPY# (377 for either implies not assigned)
|
||||||
|
; KBD flags: (1 per console)
|
||||||
|
; ECOFLG Set by PDP-10. Next time DPYBUF is empty clear ECOFLG
|
||||||
|
; and put flag on KBD ring to signal this condition
|
||||||
|
; CHNCLS if -1, log this guy out!!!!
|
||||||
|
; WHO flags: (1 per console)
|
||||||
|
; WHOLIN who line variables for this console
|
||||||
|
; WHOUSR -1=>do system line, 0=>user who line
|
||||||
|
;
|
||||||
|
;format of KBD buffer (aligned on PDP-10 word)
|
||||||
|
;
|
||||||
|
; KBDSTS negative=>-(data byte count), 0=>free
|
||||||
|
; 0
|
||||||
|
; KBDRNG next KBD buffer associated with this KBD
|
||||||
|
; KBDLST next buffer on activated list (0=>end of chain)
|
||||||
|
; KBDCHN keyboard channel
|
||||||
|
; 0 not used
|
||||||
|
; KBDATA key board data area (1 PDP-11 word/character)
|
||||||
|
;
|
||||||
|
;format of DPY buffer (aligned on PDP-10 word)
|
||||||
|
;
|
||||||
|
; DPY10B word PDP-10 is hacking (used only for initailization)
|
||||||
|
; DPY11B word PDP-11 is hacking
|
||||||
|
; DPYPP page printer variables
|
||||||
|
; DPYLGL last legal address in this buffer
|
||||||
|
; DPYSIZ size of data area in bytes
|
||||||
|
; 0 not used
|
||||||
|
; DPYATA display data area (1 PDP-11 word/character)
|
||||||
|
;
|
||||||
|
;format of pointer area (aligned on PDP-10 word)
|
||||||
|
;
|
||||||
|
; ADDRESS(system who line variables)
|
||||||
|
; ADDRESS(PDP-10/PDP-11 communication area)
|
||||||
|
; TENWHO (SET TO -1 WHENEVER ANYONE TYPES WHO LINE COMMAND, RESET TO 0 WHEN 10
|
||||||
|
; UPDATES WHO LINES
|
||||||
|
; TENWH1 PADDING
|
||||||
|
;
|
||||||
|
;Notes:
|
||||||
|
;
|
||||||
|
;1. All addresses and pointers are in PDP-11 address space.
|
||||||
|
;
|
||||||
|
;2. KBD buffers are ringed two per channel. While the PDP-10 is
|
||||||
|
; emptying one, the PDP-11 can fill the other.
|
||||||
|
;
|
||||||
|
;3. There is only one DPY buffer per channel. When the buffer is filled
|
||||||
|
; with negative numbers, it is free. When the PDP-10 writes a positive
|
||||||
|
; number in the current word: then the PDP-11 processes the data in that
|
||||||
|
; word, sets that word to a negative number, and advances to the next word.
|
||||||
|
;WHO LINE VARIABLES
|
||||||
|
;
|
||||||
|
;SYSTEM WHO LINE (one PDP-11 word/line unless otherwise indicated)
|
||||||
|
; ITSTCH # total # 10/11 dpy channels (read only for PDP-10)
|
||||||
|
; ITSCHN # 10/11 dpy channels in use (read only for PDP-10)
|
||||||
|
; ITSVER ITS version #
|
||||||
|
; ITSJOB total jobs
|
||||||
|
; ITSCOR total core
|
||||||
|
; ITSRU runnable users
|
||||||
|
; ITSWBJ # jobs swap blocked
|
||||||
|
; ITSJWP # jobs waiting for pages
|
||||||
|
; ITSTRC total runable core
|
||||||
|
; ITSCFU core available for users
|
||||||
|
; ITSDAT date [byte (7) year (4) month (5) day]
|
||||||
|
; ITSDBG system debug flag
|
||||||
|
; ITSTIM time of day (# half seconds since midnight) aligned on PDP-10 word
|
||||||
|
; ITSTI1 low order of time
|
||||||
|
; ITSUSR total number of users
|
||||||
|
;
|
||||||
|
;USER WHO LINE (One PDP-11 word per line unless otherwise noted)
|
||||||
|
WHJOB==0 ;job #, -1=>who line not in use
|
||||||
|
; WHJOB1 ;pads WHJOB
|
||||||
|
WHMODE==1 ;mode 0=>follow keyboard
|
||||||
|
; 1=>freeze
|
||||||
|
; 2=>next higher (when PDP-10 sees this state, it searches
|
||||||
|
; user variables for next higher job index number with same
|
||||||
|
; uname. When it finds it, it stores the number in job #
|
||||||
|
; and changes mode to 1
|
||||||
|
; 3=>next lower
|
||||||
|
; WHMOD1 ;pads WHMODE
|
||||||
|
WHUNAM==2 ;uname in sixbit (left 18 bits in first two words, right in next two)
|
||||||
|
; WHUNM1
|
||||||
|
WHUNM2==3
|
||||||
|
; WHUNM3
|
||||||
|
WHJNAM==4 ;jname in sixbit
|
||||||
|
; WHJNM1
|
||||||
|
WHJNM2==5
|
||||||
|
; WHJNM3
|
||||||
|
WHSNAM==6 ;sname in sixbit
|
||||||
|
; WHSNM1
|
||||||
|
WHSNM2==7
|
||||||
|
; WHSNM3
|
||||||
|
WHSTAT==10 ;status in sixbit, 0=>job does not exist
|
||||||
|
; WHSTA1
|
||||||
|
WHSTA2==11
|
||||||
|
; WHSTA3
|
||||||
|
WHJ%RT==12 ;job % run time
|
||||||
|
; WHJTRT job total run time (one millisec units)
|
||||||
|
; WHRPAG job number of pages real mem assigned
|
||||||
|
; WHPAG job number of pages virtual mem assigned
|
||||||
|
; WHO1 user who line control word
|
||||||
|
; WHO1A
|
||||||
|
; WHO2 first user who line variable
|
||||||
|
; WHO2A
|
||||||
|
; WHO2B
|
||||||
|
; WHO2C
|
||||||
|
; WHO3 second user who line variable
|
||||||
|
; WHO3A
|
||||||
|
; WHO3B
|
||||||
|
; WHO3C
|
||||||
|
;
|
||||||
|
;
|
||||||
|
;NOTE: The PDP-11 will not update who lines until it sees that ITSTIM
|
||||||
|
; has changed.
|
||||||
|
;
|
||||||
|
;PDP-10/PDP-11 COMMAND CHANNEL
|
||||||
|
;
|
||||||
|
; CMDFLG aligned on PDP-10
|
||||||
|
; 0=>buffer is free (PDP-10 can write CMDBUF)
|
||||||
|
; positive=>command # from PDP-10 (PDP-11 can write CMDBUF)
|
||||||
|
; negative=>affirmative reply from PDP-11 (0=>command failed)
|
||||||
|
; PDP-10 can read CMDBUF, then must zero CMDFLG
|
||||||
|
; CMDFL1 always 0
|
||||||
|
; CMDBUF each arg takes 4 bytes (1 PDP-10 word)
|
||||||
|
;
|
||||||
|
; PDP-10/PDP-11 COMMANDS
|
||||||
|
;
|
||||||
|
; 1 video switch
|
||||||
|
; arg1: video switch input # (set by PDP-10)
|
||||||
|
; arg2: video switch output # ( " " " " )
|
||||||
|
;
|
||||||
|
; 2 reserve DPY
|
||||||
|
; arg1: DPY reserved (set by PDP-11)
|
||||||
|
;
|
||||||
|
; 3 free DPY
|
||||||
|
; arg1: DPY to free (set by PDP-10)
|
||||||
|
;
|
||||||
|
;;other 10-11 commuincation issues ..
|
||||||
|
;
|
||||||
|
;;go down resetting video switch vs not
|
||||||
|
;;PDP-11 indicates it has reset video switch
|
||||||
|
; ;(PDP-10 then detaches all jobs with tv ttys)
|
||||||
1
tools/itstar
Submodule
1
tools/itstar
Submodule
Submodule tools/itstar added at 63ecbaa498
1
tools/tapeutils
Submodule
1
tools/tapeutils
Submodule
Submodule tools/tapeutils added at 2d4559f2da
Reference in New Issue
Block a user