1
0
mirror of https://github.com/DoctorWkt/pdp7-unix.git synced 2026-04-15 08:09:45 +00:00

Added Phils opr.s and kernel notes files

This commit is contained in:
Warren Toomey
2016-03-09 06:47:48 +10:00
parent c65a5587fb
commit 3cb05b5767
3 changed files with 193 additions and 1 deletions

1
.gitignore vendored
View File

@@ -1,2 +1 @@
bin
sys

123
src/other/ops.s Normal file
View File

@@ -0,0 +1,123 @@
" ops and system calls from as7; as.s has no initial symbol table
" so this needs to be included in any assembly of user programs
" "sys" has it's own sop.s which includes I/O instructions, but lacks
" system call definitions, and lacks some instructions used in
" commands but not in the kernel, so it can't have been the file used
" for user assemblies.
save = 1 " saves core dump & user area!
getuid = 2
open = 3
read = 4
write = 5
creat = 6
seek = 7
tell = 8
close = 9
link = 10
unlink = 11
setuid = 12
rename = 13
exit = 14
time = 15
intrp = 16
chdir = 17
chmod = 18
chown = 19
" 20 removed
sysloc = 21 " return system addresses
" 22 removed
capt = 23 " capture display?
rele = 24 " release display?
status = 25 " "stat"
smes = 27
rmes = 28
fork = 29
" List of instruction names and machine code values
" These come from https://raw.githubusercontent.com/simh/
sys = 0020000 " "cal i" instruction (trap indirect thru 020)
i = 0020000 " indirect bit
" memory reference instructions
dac = 0040000 " deposit AC
jms = 0100000 " jump to subroutine
dzm = 0140000 " deposit zero in memory
lac = 0200000 " load AC
xor = 0240000 " exclusive or
add = 0300000 " one's complement add
tad = 0340000 " two's complement add
xct = 0400000 " execute
isz = 0440000 " increment and skip if zero
and = 0500000 " AND with contents of Y
sad = 0540000 " skip if AC different from content of Y
jmp = 0600000 " jump to Y
" Type 177 Extended Arithmetic Element (EAE)
eae = 0640000 " base instruction (nop)
osc = 0640001 " OR SC into AC
omq = 0640002 " OR MQ into AC
cmq = 0640004 " Complement MQ
div = 0640323 " divide
norm = 0640444 " normalize unsigned
lls = 0640600 " long left shift
als = 0640700 " AC shift
lrs = 0640500 " long right shift
lacs = 0641001 " load AC with SC
lacq = 0641002 " load AC with MQ
abs = 0644000 " absolute value
divs = 0644323 " divide signed
clq = 0650000 " clear MQ
frdiv = 0650323 " fractional divide
lmq = 0652000 " load MQ from AC
mul = 0653122 " multiply
idiv = 0653323 " integer divide
idivs = 0657323 " integer divide signed
frdivs = 0654323 " fractional divide signed
muls = 0657122 " multiply signed
norms = 0660444 " normalize signed
gsm = 0664000 " get sign and magnitude
lrss = 0660500 " long right shift signed
llss = 0660600 " long left shift signed
alss = 0660700 " AC left shift signed
" Operate Instructions
" Group 1 (OPR 1) instructions
opr = 0740000 " base operate instruction (nop)
nop = 0740000
cma = 0740001 " complement accumulator
cml = 0740002 " complement link
oas = 0740004 " inclusive or accumulator switches
ral = 0740010 " rotate (ac link) left
rar = 0740020 " rotate (ac link) right
hlt = 0740040 " HALT
xx = 0740040
sma = 0740100 " skip on minus accumulator
sza = 0740200 " skip on zero accumulator
snl = 0740400 " skip on non-zero link
skp = 0741000 " unconditional skip
spa = 0741100 " skip on positive accumulator
sna = 0741200 " skip on negative accumulator
szl = 0741400 " skip on zero link
rtl = 0742010 " rotate two left (ral*2)
rtr = 0742020 " rotate two right (rar*2)
cll = 0744000 " clear link
stl = 0744002 " set link
rcl = 0744010 " clear link rotate left
rcr = 0744020 " clear link rotate right
cla = 0750000 " clear accumulator
clc = 0750001 " clear and complement acc
las = 0750004 " load acc from switches
glk = 0750010 " get link
" Group 2 operate
law = 0760000 " load accumulator with (instruction)

70
src/sys/NOTES.md Normal file
View File

@@ -0,0 +1,70 @@
PROCESSES
=========
uid -1 is superuser
process 1 is "init", runs as superuser
DISK
====
```
RB09: Burroughs fixed head disk (same hardware as RD10!)
64 word sectors; 80 sectors/track; 100 tracks/surface; 2 surfaces
8000 sectors/surface
one surface reserved for backup
512,000 words per surface: 1,024,000 characters!!!
first disk block is copy of "system data"
contains time, free block information, process (user) list?!!
12 word inodes (5 per block)
710 sectors of inodes (max 3550 files)
```
inode format
------------
```
i.flags
400000 free?? (checked/toggled by icreat)
200000 large file
000040 special file
000020 directory
000017 can be changed by chmod.
10 owner read
04 owner write
02 world read
01 world write
i.dskps 7 block numbers (all indirect blocks if "large file")
i.uid owner
i.nlks link count
i.size size (in words?)
i.uniq unique value assigned at creation
```
directory files can (only) be truncated by superuser
directory node (dnode) format
-----------------------------
```
d.i i-number of file
d.name four words, space padded
d.uniq i.uniq value of file
```
i numbers
---------
```
1 core file?? (written by "sys save" or bad system call)
2 "dd"??? "root" directory
3 "system"??? default process cdir, must contain "init", "dd"
6 "ttyin" special file
7 "keyboard" (graphic-2) special file
8 "pptin"?? (paper tape reader) special file
10 "ttyout" special file
11 "display" (graphic-2) special file
12 "pptout" (paper tape punch) special file
```