Merge branch 'master' of https://github.com/DoctorWkt/pdp7-unix
This commit is contained in:
@@ -8,6 +8,9 @@ as the files 0*.pdf. We now need to convert these to machine-readable
|
|||||||
assembly code, write tools such as an assembler, a filesystem creation tool,
|
assembly code, write tools such as an assembler, a filesystem creation tool,
|
||||||
and write from scratch missing things like a shell, ls etc.
|
and write from scratch missing things like a shell, ls etc.
|
||||||
|
|
||||||
|
The code in the original scans are (c) Novell who own the rights to the Unix
|
||||||
|
source code. Everything that didn't come from the scanned pages are GPLv3.
|
||||||
|
|
||||||
scans holds the unmodified OCR versions of the scanned files
|
scans holds the unmodified OCR versions of the scanned files
|
||||||
|
|
||||||
src/cmd holds the modified source code of the user-mode programs
|
src/cmd holds the modified source code of the user-mode programs
|
||||||
|
|||||||
+14
-1
@@ -2,6 +2,9 @@ This area contains the OCR'd versions of the PDP-7 scans that are at
|
|||||||
http://www.tuhs.org/Archive/PDP-11/Distributions/research/McIlroy_v0/0*.pdf
|
http://www.tuhs.org/Archive/PDP-11/Distributions/research/McIlroy_v0/0*.pdf
|
||||||
The files should be unaltered versions of the scanned pages.
|
The files should be unaltered versions of the scanned pages.
|
||||||
|
|
||||||
|
Novell owns the rights to the Unix source code, so these files are probably
|
||||||
|
(c) 1970 Novell. They are certainly not under the GPLv3 license.
|
||||||
|
|
||||||
For modified versions of these files, look in src/cmds and src/sys.
|
For modified versions of these files, look in src/cmds and src/sys.
|
||||||
|
|
||||||
Details of the files:
|
Details of the files:
|
||||||
@@ -24,8 +27,18 @@ trysys.s: page 65 of 01-s1.pdf
|
|||||||
bc.s: pages 7-11 of 06-5-12.pdf
|
bc.s: pages 7-11 of 06-5-12.pdf
|
||||||
bi.s: pages 12-19 of 06-5-12.pdf
|
bi.s: pages 12-19 of 06-5-12.pdf
|
||||||
bl.s: pages 3-6 of 06-5-12.pdf
|
bl.s: pages 3-6 of 06-5-12.pdf
|
||||||
|
cat.s: pages 21-23 of 06-5-12.pdf
|
||||||
|
|
||||||
|
db.s: pages 2-21 of 07-13-19.pdf
|
||||||
|
dmabs.s: pages 23-27 of 07-13-19.pdf
|
||||||
|
ds.s: pages 30-38 of 07-13-19.pdf
|
||||||
|
dsksav.s: page 40 of 07-13-19.pdf
|
||||||
|
dskres.s: page 41 of 07-13-19.pdf
|
||||||
|
dskio.s: pages 42-43 of 07-13-19.pdf
|
||||||
|
dsw.s: page 45 of 07-13-19.pdf
|
||||||
|
init.s pages 47-51 of 07-13-19.pdf
|
||||||
|
|
||||||
cas.s: pages 1-17 of 04-cas.pdf
|
cas.s: pages 1-17 of 04-cas.pdf
|
||||||
cat.c: pages 21-23 of 06-5-12.pdf
|
|
||||||
|
|
||||||
ind.b: page 2 of 08-rest.pdf
|
ind.b: page 2 of 08-rest.pdf
|
||||||
lease.b: page 4 of 08-rest.pdf
|
lease.b: page 4 of 08-rest.pdf
|
||||||
|
|||||||
+1217
File diff suppressed because it is too large
Load Diff
+256
@@ -0,0 +1,256 @@
|
|||||||
|
" dmabs
|
||||||
|
|
||||||
|
lac o17
|
||||||
|
sys creat; punout
|
||||||
|
spa
|
||||||
|
sys save
|
||||||
|
dac fo
|
||||||
|
lac 017777
|
||||||
|
tad d1
|
||||||
|
dac name
|
||||||
|
jms space
|
||||||
|
100
|
||||||
|
|
||||||
|
loop:
|
||||||
|
dzm oldsum
|
||||||
|
lac initcmd
|
||||||
|
dac comand
|
||||||
|
lac i 017777
|
||||||
|
sad d4
|
||||||
|
jmp stop
|
||||||
|
tad dm4
|
||||||
|
dac i 017777
|
||||||
|
lac name
|
||||||
|
tad d4
|
||||||
|
dac name
|
||||||
|
|
||||||
|
dump1:
|
||||||
|
lac comand
|
||||||
|
xor dactra
|
||||||
|
dac tracmd
|
||||||
|
|
||||||
|
dump2:
|
||||||
|
sys open; name: 0; 0
|
||||||
|
spa
|
||||||
|
jmp opnerr
|
||||||
|
dac fi
|
||||||
|
-bootsiz
|
||||||
|
dac c1
|
||||||
|
law boot-1
|
||||||
|
dac 8
|
||||||
|
1:
|
||||||
|
lac i 8
|
||||||
|
jms put
|
||||||
|
isz c1
|
||||||
|
jmp 1b
|
||||||
|
lac bootcmd
|
||||||
|
lrs 12
|
||||||
|
jms put1
|
||||||
|
lac bootcmd
|
||||||
|
lrs 6
|
||||||
|
jms put1
|
||||||
|
lac bootcmd
|
||||||
|
and o77
|
||||||
|
xor o300
|
||||||
|
jms put2
|
||||||
|
|
||||||
|
jms space
|
||||||
|
3
|
||||||
|
|
||||||
|
dump3:
|
||||||
|
-1
|
||||||
|
tad bufp
|
||||||
|
dac 8
|
||||||
|
-64
|
||||||
|
dac c1
|
||||||
|
1:
|
||||||
|
dzm i 8
|
||||||
|
isz c1
|
||||||
|
jmp 1b
|
||||||
|
lac fi
|
||||||
|
sys read; bufp: buf; 64
|
||||||
|
sna
|
||||||
|
jmp done
|
||||||
|
dac count
|
||||||
|
-1
|
||||||
|
tad bufp
|
||||||
|
dac 8
|
||||||
|
-64
|
||||||
|
dac c1
|
||||||
|
cla
|
||||||
|
1:
|
||||||
|
add i 8
|
||||||
|
isz c1
|
||||||
|
jmp 1b
|
||||||
|
sna
|
||||||
|
jmp dump4
|
||||||
|
dac newsum
|
||||||
|
lac comand
|
||||||
|
jms put
|
||||||
|
lac count
|
||||||
|
jms put
|
||||||
|
lac oldsum
|
||||||
|
add comand
|
||||||
|
add count
|
||||||
|
jms put
|
||||||
|
lac newsum
|
||||||
|
dac oldsum
|
||||||
|
jms space
|
||||||
|
3
|
||||||
|
-1
|
||||||
|
tad bufp
|
||||||
|
dac 8
|
||||||
|
-1
|
||||||
|
tad count
|
||||||
|
cma
|
||||||
|
dac c1
|
||||||
|
1:
|
||||||
|
lac i 8
|
||||||
|
jms put
|
||||||
|
isz c1
|
||||||
|
jmp 1b
|
||||||
|
jms space
|
||||||
|
10
|
||||||
|
|
||||||
|
dump4:
|
||||||
|
lac comand
|
||||||
|
tad count
|
||||||
|
dac comand
|
||||||
|
jmp dump3
|
||||||
|
|
||||||
|
done:
|
||||||
|
lac tracmd
|
||||||
|
jms put
|
||||||
|
cla
|
||||||
|
jms put
|
||||||
|
lac oldsum
|
||||||
|
add tracmd
|
||||||
|
jms put
|
||||||
|
jms space
|
||||||
|
20
|
||||||
|
lac fi
|
||||||
|
sys close
|
||||||
|
jmp loop
|
||||||
|
|
||||||
|
stop:
|
||||||
|
cla
|
||||||
|
jms put
|
||||||
|
jms space
|
||||||
|
100
|
||||||
|
sys exit
|
||||||
|
|
||||||
|
space: 0
|
||||||
|
-1
|
||||||
|
tad i space
|
||||||
|
cma
|
||||||
|
dac c1
|
||||||
|
isz space
|
||||||
|
1:
|
||||||
|
lac o400
|
||||||
|
jms put2
|
||||||
|
isz c1
|
||||||
|
jmp 1b
|
||||||
|
jmp i space
|
||||||
|
|
||||||
|
put: 0
|
||||||
|
dac 1f
|
||||||
|
lrs 12
|
||||||
|
jms put1
|
||||||
|
lac 1f
|
||||||
|
lrs 6
|
||||||
|
jms put1
|
||||||
|
lac 1f
|
||||||
|
jms put1
|
||||||
|
jmp i put
|
||||||
|
1:0
|
||||||
|
|
||||||
|
put1:0
|
||||||
|
and o77
|
||||||
|
xor o200
|
||||||
|
jms put2
|
||||||
|
jmp i put1
|
||||||
|
|
||||||
|
put2: 0
|
||||||
|
dac 1f
|
||||||
|
lac fo
|
||||||
|
sys write; 1f; 1
|
||||||
|
jmp i put2
|
||||||
|
1: 0
|
||||||
|
|
||||||
|
boot:
|
||||||
|
org = 017740
|
||||||
|
2:
|
||||||
|
jms get1-boot+org
|
||||||
|
dac cmd-boot+org
|
||||||
|
jms get1-boot+org
|
||||||
|
cma
|
||||||
|
dac cnt-boot+org
|
||||||
|
jms get2-boot+org
|
||||||
|
xor sum-boot+org
|
||||||
|
dzm sum-boot+org
|
||||||
|
cla cll sza
|
||||||
|
hlt
|
||||||
|
isz cnt-boot+org
|
||||||
|
1:
|
||||||
|
jms get1-boot+org
|
||||||
|
cmd: 0
|
||||||
|
isz cmd-boot+org
|
||||||
|
isz cnt-boot+org
|
||||||
|
jmp 1b-boot+org
|
||||||
|
jmp 2b-boot+org
|
||||||
|
get1: 0
|
||||||
|
jms get2-boot+org
|
||||||
|
dac get2-boot+org
|
||||||
|
add sum-boot+org
|
||||||
|
dac sum-boot+org
|
||||||
|
lac get2-boot+org
|
||||||
|
jmp i get1-boot+org
|
||||||
|
get2: 0
|
||||||
|
iot 0144
|
||||||
|
1:
|
||||||
|
iot 0101
|
||||||
|
jmp 1b-boot+org
|
||||||
|
iot 0112
|
||||||
|
jmp i get2-boot+org
|
||||||
|
sum: 0
|
||||||
|
cnt = sum+1
|
||||||
|
bootsiz = .-boot
|
||||||
|
bootcmd: jmp org
|
||||||
|
|
||||||
|
opnerr:
|
||||||
|
lac name
|
||||||
|
dac 1f
|
||||||
|
lac d1
|
||||||
|
sys write; 1: 0; 4
|
||||||
|
lac d1
|
||||||
|
sys write; mes; 2
|
||||||
|
jmp loop
|
||||||
|
mes:
|
||||||
|
040;077012
|
||||||
|
|
||||||
|
comand: 0
|
||||||
|
tracmd: 0
|
||||||
|
d1: 1
|
||||||
|
.17777: 017777
|
||||||
|
o77: 077
|
||||||
|
o200: 0200
|
||||||
|
o300: 0300
|
||||||
|
d4: 4
|
||||||
|
d64: 64
|
||||||
|
dm4: -4
|
||||||
|
o400: 0400
|
||||||
|
punout: <pp>;<to>;<ut>;040040
|
||||||
|
o17: 017
|
||||||
|
|
||||||
|
fi: 0
|
||||||
|
fo: 0
|
||||||
|
count: 0
|
||||||
|
oldsum: 0
|
||||||
|
newsum: 0
|
||||||
|
daccmd: dac
|
||||||
|
dactra: dac jmp
|
||||||
|
initcmd: dac 0
|
||||||
|
c1: 0
|
||||||
|
buf:
|
||||||
|
|
||||||
|
iot = 0700000
|
||||||
+501
@@ -0,0 +1,501 @@
|
|||||||
|
" ds
|
||||||
|
|
||||||
|
lac 017777 i
|
||||||
|
sad d8
|
||||||
|
skp
|
||||||
|
sys exit
|
||||||
|
lac 017777
|
||||||
|
tad d5
|
||||||
|
dac .+3
|
||||||
|
law 017
|
||||||
|
sys creat; ..
|
||||||
|
dac fo
|
||||||
|
law 017
|
||||||
|
sys creat; scrname
|
||||||
|
spa; jms error
|
||||||
|
dac fso
|
||||||
|
sys open; scrname; 0
|
||||||
|
spa; jms error
|
||||||
|
dac fsi
|
||||||
|
sys chdir; dd
|
||||||
|
spa; jms error
|
||||||
|
lac d1
|
||||||
|
sys write; pass1; 1
|
||||||
|
law fsobuf
|
||||||
|
dac fsopt
|
||||||
|
dzm nfiles
|
||||||
|
law fbuf
|
||||||
|
dac filp
|
||||||
|
dzm ndirs
|
||||||
|
law dbuf
|
||||||
|
dac dirp
|
||||||
|
dzm fsloc
|
||||||
|
sys open; dotdot; 0
|
||||||
|
spa; jms error
|
||||||
|
dac fd
|
||||||
|
jms readdir; dotdot
|
||||||
|
law statbuf
|
||||||
|
sys status; dotdot; dotdot
|
||||||
|
spa; jms error
|
||||||
|
lac statbuf+12 " i index
|
||||||
|
dac dirp i
|
||||||
|
isz dirp
|
||||||
|
-1
|
||||||
|
tad nfiles
|
||||||
|
cma
|
||||||
|
dac ddfiles
|
||||||
|
law fbuf
|
||||||
|
dac ddfilp
|
||||||
|
|
||||||
|
loop:
|
||||||
|
-1
|
||||||
|
tad ndirs
|
||||||
|
cma
|
||||||
|
dac c1
|
||||||
|
law dbuf
|
||||||
|
dac i1
|
||||||
|
|
||||||
|
1:
|
||||||
|
isz i1
|
||||||
|
lac i1 i
|
||||||
|
sad ddfilp i
|
||||||
|
jmp 2f
|
||||||
|
isz i1
|
||||||
|
isz c1
|
||||||
|
jmp 1b
|
||||||
|
|
||||||
|
lac ddfilp
|
||||||
|
tad i1
|
||||||
|
dac i1
|
||||||
|
lac i1 i
|
||||||
|
dac .+3
|
||||||
|
lac fsi
|
||||||
|
sys seek; ..; 0
|
||||||
|
lac fsi
|
||||||
|
sys read; scrname; 4
|
||||||
|
law statbuf
|
||||||
|
sys status; dotdot; scrname
|
||||||
|
spa; jms error
|
||||||
|
lac statbuf+0 " flags
|
||||||
|
and o20
|
||||||
|
sna
|
||||||
|
jmp 2f
|
||||||
|
sys open; scrname; 0
|
||||||
|
spa; jms error
|
||||||
|
dac fd
|
||||||
|
jms readdir; scrname
|
||||||
|
lac ddfilp i
|
||||||
|
dac dirp i
|
||||||
|
isz dirp
|
||||||
|
|
||||||
|
2:
|
||||||
|
isz ddfilp
|
||||||
|
isz ddfilp
|
||||||
|
isz ddfiles
|
||||||
|
jmp loop
|
||||||
|
|
||||||
|
" output phase
|
||||||
|
|
||||||
|
lac fso
|
||||||
|
sys write; fsobuf; 64
|
||||||
|
lac d1
|
||||||
|
sys write; pass2; 2
|
||||||
|
-500
|
||||||
|
dac c1
|
||||||
|
|
||||||
|
1:
|
||||||
|
law dbuf+2
|
||||||
|
dac i1
|
||||||
|
dzm fflg
|
||||||
|
law fbuf
|
||||||
|
dac i2
|
||||||
|
r1
|
||||||
|
tad nfiles
|
||||||
|
cma
|
||||||
|
dac c2
|
||||||
|
|
||||||
|
2:
|
||||||
|
lac c1
|
||||||
|
tad d501
|
||||||
|
sad i2 i
|
||||||
|
skp
|
||||||
|
jmp 3f
|
||||||
|
-1
|
||||||
|
tad i1
|
||||||
|
dac i3
|
||||||
|
iac i3 i
|
||||||
|
dac c3
|
||||||
|
law fbuf
|
||||||
|
dac i3
|
||||||
|
0:
|
||||||
|
lac i3 i
|
||||||
|
sad c3
|
||||||
|
jmp 0f
|
||||||
|
isz i3
|
||||||
|
isz i3
|
||||||
|
jmp 0b
|
||||||
|
0:
|
||||||
|
lac i3
|
||||||
|
tad d1
|
||||||
|
dac c3
|
||||||
|
lac c3 i
|
||||||
|
dac .+3
|
||||||
|
lac fsi
|
||||||
|
sys seek; ..; 0
|
||||||
|
lac fsi
|
||||||
|
sys read; scrname; 4
|
||||||
|
lac i2
|
||||||
|
tad d1
|
||||||
|
dac c3
|
||||||
|
lac c3 i
|
||||||
|
dac .+3
|
||||||
|
lac fsi
|
||||||
|
sys seek; ..; 0
|
||||||
|
lac fsi
|
||||||
|
sys read; dd; 4
|
||||||
|
lac fflg
|
||||||
|
sza
|
||||||
|
jmp 0f
|
||||||
|
|
||||||
|
lac nlinkt
|
||||||
|
sad nlinka
|
||||||
|
skp
|
||||||
|
jms fishy
|
||||||
|
dzm nlinka
|
||||||
|
law 012
|
||||||
|
jms putc
|
||||||
|
law statbuf
|
||||||
|
sys status; scrname; dd
|
||||||
|
spa; jms error
|
||||||
|
-1
|
||||||
|
tad statbuf+9
|
||||||
|
cma
|
||||||
|
dac nlinkt
|
||||||
|
-1
|
||||||
|
dac fflg
|
||||||
|
jms longout
|
||||||
|
law 012
|
||||||
|
jms putc
|
||||||
|
0:
|
||||||
|
isz nlinka
|
||||||
|
jms putname; scrname
|
||||||
|
jms putname; dd
|
||||||
|
law 012
|
||||||
|
jms putc
|
||||||
|
|
||||||
|
3:
|
||||||
|
isz i2
|
||||||
|
isz i2
|
||||||
|
lac i2
|
||||||
|
sad i1 i
|
||||||
|
skp
|
||||||
|
jmp .+3
|
||||||
|
isz i1
|
||||||
|
isz i1
|
||||||
|
isz c2
|
||||||
|
jmp 2b
|
||||||
|
|
||||||
|
isz c1
|
||||||
|
jmp 1b
|
||||||
|
lac nlinkt
|
||||||
|
sad nlinka
|
||||||
|
skp
|
||||||
|
jms fishy
|
||||||
|
|
||||||
|
sys chdir; system
|
||||||
|
jmp done
|
||||||
|
|
||||||
|
fishy: 0
|
||||||
|
jms asters
|
||||||
|
jms asters
|
||||||
|
law 012
|
||||||
|
jms putc
|
||||||
|
lac d1
|
||||||
|
sys write; 1f; 1
|
||||||
|
jmp fishy i
|
||||||
|
1: 052012
|
||||||
|
|
||||||
|
nlinka: 0
|
||||||
|
nlinkt: 0
|
||||||
|
|
||||||
|
asters: 0
|
||||||
|
-10
|
||||||
|
dac c
|
||||||
|
1:
|
||||||
|
law 052
|
||||||
|
jms putc
|
||||||
|
isz c
|
||||||
|
jmp 1b
|
||||||
|
jmp asters i
|
||||||
|
|
||||||
|
longout: 0
|
||||||
|
lac statbuf+12 " i
|
||||||
|
jms octal; -3
|
||||||
|
lac statbuf+0 " flags
|
||||||
|
jms octal; -2
|
||||||
|
lac statbuf+8 " uid
|
||||||
|
jms octal; -2
|
||||||
|
-1
|
||||||
|
tad statbuf+9 " nlinks
|
||||||
|
cma
|
||||||
|
jms octal; -2
|
||||||
|
lac statbuf+10
|
||||||
|
jms octal; -5
|
||||||
|
jmp longout i
|
||||||
|
|
||||||
|
readdir: 0
|
||||||
|
law 012
|
||||||
|
jms putc
|
||||||
|
law 012
|
||||||
|
jms putc
|
||||||
|
jms asters
|
||||||
|
lac readdir i
|
||||||
|
dac 5f
|
||||||
|
dac .+2
|
||||||
|
jms putname; ..
|
||||||
|
jms asters
|
||||||
|
law 012
|
||||||
|
jms putc
|
||||||
|
law 012
|
||||||
|
jms putc
|
||||||
|
isz readdir
|
||||||
|
isz ndirs
|
||||||
|
lac filp
|
||||||
|
dac dirp i
|
||||||
|
isz dirp
|
||||||
|
0:
|
||||||
|
jms copyz; buf; 64
|
||||||
|
lac fd
|
||||||
|
sys read; buf; 64
|
||||||
|
spa; jms error
|
||||||
|
sna
|
||||||
|
jmp 4f
|
||||||
|
-8
|
||||||
|
dac c1
|
||||||
|
law buf
|
||||||
|
dac i1
|
||||||
|
1:
|
||||||
|
lac i1 i
|
||||||
|
sna
|
||||||
|
jmp 3f
|
||||||
|
|
||||||
|
isz nfiles
|
||||||
|
dac filp i
|
||||||
|
isz filp
|
||||||
|
lac fsloc
|
||||||
|
dac filp i
|
||||||
|
tad d4
|
||||||
|
dac fsloc
|
||||||
|
isz filp
|
||||||
|
lac i1
|
||||||
|
tad d1
|
||||||
|
dac .+4
|
||||||
|
law statbuf
|
||||||
|
sys status; 5:..; ..
|
||||||
|
spa; jms error
|
||||||
|
jms longout
|
||||||
|
lac i1
|
||||||
|
tad d1
|
||||||
|
dac .+2
|
||||||
|
jms putname; ..
|
||||||
|
law 012
|
||||||
|
jms putc
|
||||||
|
lac i1
|
||||||
|
dac 8
|
||||||
|
lac 8 i
|
||||||
|
dac fsopt i
|
||||||
|
isz fsopt
|
||||||
|
lac 8 i
|
||||||
|
dac fsopt i
|
||||||
|
isz fsopt
|
||||||
|
lac 8 i
|
||||||
|
dac fsopt i
|
||||||
|
isz fsopt
|
||||||
|
lac 8 i
|
||||||
|
dac fsopt i
|
||||||
|
isz fsopt
|
||||||
|
law fsobuf+64
|
||||||
|
sad fsopt
|
||||||
|
skp
|
||||||
|
jmp 3f
|
||||||
|
lac fso
|
||||||
|
sys write; fsobuf; 64
|
||||||
|
law fsobuf
|
||||||
|
dac fsopt
|
||||||
|
|
||||||
|
3:
|
||||||
|
law 8
|
||||||
|
tad i1
|
||||||
|
dac i1
|
||||||
|
isz c1
|
||||||
|
jmp 1b
|
||||||
|
jmp 0b
|
||||||
|
4:
|
||||||
|
lac fd
|
||||||
|
sys close
|
||||||
|
jmp readdir i
|
||||||
|
|
||||||
|
putname: 0
|
||||||
|
-1
|
||||||
|
tad putname i
|
||||||
|
dac 8
|
||||||
|
-4
|
||||||
|
dac c
|
||||||
|
1:
|
||||||
|
lac 8 i
|
||||||
|
lrss 9
|
||||||
|
jms putc
|
||||||
|
llss 9
|
||||||
|
jms putc
|
||||||
|
isz c
|
||||||
|
jmp 1b
|
||||||
|
isz putname
|
||||||
|
jmp putname i
|
||||||
|
|
||||||
|
octal: 0
|
||||||
|
lmq
|
||||||
|
lac d5
|
||||||
|
tad octal i
|
||||||
|
cma
|
||||||
|
dac c
|
||||||
|
1:
|
||||||
|
llss 3
|
||||||
|
isz c
|
||||||
|
jmp 1b
|
||||||
|
lac octal i
|
||||||
|
dac c
|
||||||
|
1:
|
||||||
|
ecla llss 3
|
||||||
|
tad o60
|
||||||
|
jms putc
|
||||||
|
isz c
|
||||||
|
jmp 1b
|
||||||
|
law 040
|
||||||
|
jms putc
|
||||||
|
isz octal
|
||||||
|
jmp octal i
|
||||||
|
|
||||||
|
error: 0
|
||||||
|
-1
|
||||||
|
tad error
|
||||||
|
hlt
|
||||||
|
sys save
|
||||||
|
|
||||||
|
copyz: 0
|
||||||
|
-1
|
||||||
|
tad copyz i
|
||||||
|
dac 8
|
||||||
|
isz copyz
|
||||||
|
-1
|
||||||
|
tad copyz i
|
||||||
|
cma
|
||||||
|
dac 2f
|
||||||
|
isz copyz
|
||||||
|
1:
|
||||||
|
dzm 8 i
|
||||||
|
isz 2f
|
||||||
|
jmp 1b
|
||||||
|
jmp copyz i
|
||||||
|
2: 0
|
||||||
|
|
||||||
|
done:
|
||||||
|
lac noc
|
||||||
|
sna
|
||||||
|
sys exit
|
||||||
|
and d1
|
||||||
|
sna cla
|
||||||
|
jmp 1f
|
||||||
|
jms putc
|
||||||
|
jmp done
|
||||||
|
1:
|
||||||
|
lac noc
|
||||||
|
rcr
|
||||||
|
dac 1f
|
||||||
|
lac fo
|
||||||
|
sys write; obuf; 1;..
|
||||||
|
sys exit
|
||||||
|
|
||||||
|
putc: 0
|
||||||
|
and o177
|
||||||
|
dac 2f+1
|
||||||
|
lac opt
|
||||||
|
dac 2f
|
||||||
|
add o400000
|
||||||
|
dac opt
|
||||||
|
spa
|
||||||
|
jmp 1f
|
||||||
|
lac 2f i
|
||||||
|
xor 2f+1
|
||||||
|
jmp 3f
|
||||||
|
1:
|
||||||
|
lac 2f+1
|
||||||
|
alss 9
|
||||||
|
3:
|
||||||
|
dac 2f i
|
||||||
|
isz noc
|
||||||
|
lac noc
|
||||||
|
sad d128
|
||||||
|
skp
|
||||||
|
jmp putc i
|
||||||
|
lac fo
|
||||||
|
sys write; obuf; 64
|
||||||
|
lac iopt
|
||||||
|
dac opt
|
||||||
|
dzm noc
|
||||||
|
jmp putc i
|
||||||
|
2: 0;0
|
||||||
|
opt: obuf
|
||||||
|
iopt: obuf
|
||||||
|
noc: 0
|
||||||
|
fo: 1
|
||||||
|
|
||||||
|
d1: 1
|
||||||
|
o177: 0177
|
||||||
|
o400000: 0400000
|
||||||
|
d128: 128
|
||||||
|
d4: 4
|
||||||
|
d5: 5
|
||||||
|
d8: 8
|
||||||
|
o60: 060
|
||||||
|
o20: 020
|
||||||
|
d501: 501
|
||||||
|
|
||||||
|
dd:
|
||||||
|
<dd>; 040040; 040040; 040040
|
||||||
|
dotdot:
|
||||||
|
056056; 040040; 040040; 040040
|
||||||
|
system:
|
||||||
|
<sy>;<st>;<em>; 040040
|
||||||
|
scrname:
|
||||||
|
<*s>;<rc>;040040;040040
|
||||||
|
pass2:
|
||||||
|
<i
|
||||||
|
pass1:
|
||||||
|
<i 012
|
||||||
|
|
||||||
|
fso: .=.+1
|
||||||
|
fsi: .=.+1
|
||||||
|
fsloc: .=.+1
|
||||||
|
nfiles: .=.+1
|
||||||
|
fflg: .=.+1
|
||||||
|
buf: .=.+64
|
||||||
|
obuf: .=.+64
|
||||||
|
fd: .=.+1
|
||||||
|
filp: .=.+1
|
||||||
|
ddfilp: .=.+1
|
||||||
|
ddfiles: .=.+1
|
||||||
|
statbuf: .=.+13
|
||||||
|
c: .=.+1
|
||||||
|
i1: .=.+1
|
||||||
|
i2: .=.+1
|
||||||
|
i3: .=.+1
|
||||||
|
c1: .=.+1
|
||||||
|
c2: .=.+1
|
||||||
|
c3: .=.+1
|
||||||
|
ndirs: .=.+1
|
||||||
|
dirp: .=.+1
|
||||||
|
fsopt: .=.+1
|
||||||
|
fsobuf: .=.+64
|
||||||
|
dbuf: .=.+100
|
||||||
|
fbuf:
|
||||||
|
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
" dskio
|
||||||
|
|
||||||
|
dskrd0: 0
|
||||||
|
dzm side
|
||||||
|
jms dskio; 02000
|
||||||
|
jmp i dskrd0
|
||||||
|
|
||||||
|
dskwr0: 0
|
||||||
|
dzm side
|
||||||
|
jms dskio; 03000
|
||||||
|
jmp i dskwr0
|
||||||
|
|
||||||
|
dskrd1: 0
|
||||||
|
lmq
|
||||||
|
lac o200000
|
||||||
|
dac side
|
||||||
|
lacq
|
||||||
|
jms dskio; 02000
|
||||||
|
jmp i dskrd1
|
||||||
|
|
||||||
|
dskwr1: 0
|
||||||
|
lmq
|
||||||
|
lac o200000
|
||||||
|
dac side
|
||||||
|
lacq
|
||||||
|
jms dskio; 03000
|
||||||
|
jmp i dskwr1
|
||||||
|
|
||||||
|
|
||||||
|
iskio: 0
|
||||||
|
cll; idiv; 80
|
||||||
|
dac 2f
|
||||||
|
lacq
|
||||||
|
idiv; 10
|
||||||
|
dac 3f
|
||||||
|
lls 22
|
||||||
|
xor 3f
|
||||||
|
als 8
|
||||||
|
dac 3f
|
||||||
|
lac 2f
|
||||||
|
idiv; 10
|
||||||
|
dac 2f
|
||||||
|
lls 22
|
||||||
|
xor 2f
|
||||||
|
xor 3f
|
||||||
|
xor side
|
||||||
|
dac 2f
|
||||||
|
-10
|
||||||
|
dac 3f
|
||||||
|
1:
|
||||||
|
dscs
|
||||||
|
-640
|
||||||
|
dslw
|
||||||
|
lac dskbufp
|
||||||
|
dslm
|
||||||
|
lac 2f
|
||||||
|
dsld
|
||||||
|
lac dskio i
|
||||||
|
dsls
|
||||||
|
dssf
|
||||||
|
jmp .-1
|
||||||
|
dsrs
|
||||||
|
sma
|
||||||
|
jmp 1f
|
||||||
|
isz 3f
|
||||||
|
jmp 1b
|
||||||
|
hlt
|
||||||
|
1:
|
||||||
|
isz dskio
|
||||||
|
jmp i dskio
|
||||||
|
2: 0
|
||||||
|
3: 0
|
||||||
|
|
||||||
|
o200000: 0200000
|
||||||
|
dskbufp: dskbuf
|
||||||
|
|
||||||
|
side: .=.+1
|
||||||
|
dskbuf: .=.+640
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
" dskres
|
||||||
|
|
||||||
|
iof
|
||||||
|
hlt
|
||||||
|
dzm track
|
||||||
|
-640
|
||||||
|
dac c1
|
||||||
|
1:
|
||||||
|
lac track
|
||||||
|
jms dskrd0
|
||||||
|
|
||||||
|
lac track
|
||||||
|
jms dskwr1
|
||||||
|
|
||||||
|
lac track
|
||||||
|
tad d10
|
||||||
|
dac track
|
||||||
|
isz c1
|
||||||
|
jmp 1b
|
||||||
|
|
||||||
|
hlt
|
||||||
|
sys exit
|
||||||
|
|
||||||
|
track: 0
|
||||||
|
c1: 0
|
||||||
|
d10: 10
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
" dsksav
|
||||||
|
|
||||||
|
iof
|
||||||
|
hlt
|
||||||
|
dzm track
|
||||||
|
-640
|
||||||
|
dac c1
|
||||||
|
1:
|
||||||
|
lac track
|
||||||
|
jms dskrd1
|
||||||
|
|
||||||
|
lac track
|
||||||
|
jms dskwr0
|
||||||
|
|
||||||
|
lac track
|
||||||
|
tad d10
|
||||||
|
dac track
|
||||||
|
isz c1
|
||||||
|
jmp 1b
|
||||||
|
|
||||||
|
hlt
|
||||||
|
sys exit
|
||||||
|
|
||||||
|
track: 0
|
||||||
|
c1: 0
|
||||||
|
d10: 10
|
||||||
+37
@@ -0,0 +1,37 @@
|
|||||||
|
" dsw
|
||||||
|
|
||||||
|
lac djmp
|
||||||
|
dac .-1
|
||||||
|
oas cla
|
||||||
|
oma
|
||||||
|
tad d1
|
||||||
|
dac t1
|
||||||
|
sys open; dd; 0
|
||||||
|
1:
|
||||||
|
lac d2
|
||||||
|
sys read; dir; 8
|
||||||
|
sna
|
||||||
|
sys exit
|
||||||
|
lac dir
|
||||||
|
sna
|
||||||
|
jmp 1b
|
||||||
|
isz t1
|
||||||
|
jmp 1b
|
||||||
|
|
||||||
|
wr:
|
||||||
|
lac d1
|
||||||
|
sys write; dir+1; 4
|
||||||
|
lac d1
|
||||||
|
sys write; o12; 1
|
||||||
|
sys save
|
||||||
|
io:
|
||||||
|
sys unlink; dir+1
|
||||||
|
sys exit
|
||||||
|
|
||||||
|
d1: 1
|
||||||
|
d2: 2
|
||||||
|
o12: 012
|
||||||
|
t1: 0
|
||||||
|
djmp: jmp do
|
||||||
|
dd: 056056;040040;040040;040040
|
||||||
|
dir: .=.+8
|
||||||
+291
@@ -0,0 +1,291 @@
|
|||||||
|
" init
|
||||||
|
|
||||||
|
-1
|
||||||
|
sys intrp
|
||||||
|
jms init1
|
||||||
|
jms init2
|
||||||
|
1:
|
||||||
|
sys rmes
|
||||||
|
sad pid1
|
||||||
|
jmp 1f
|
||||||
|
sad pid2
|
||||||
|
jms init2
|
||||||
|
jmp 1
|
||||||
|
1:
|
||||||
|
jms init1
|
||||||
|
jmp 1
|
||||||
|
|
||||||
|
init1: 0
|
||||||
|
sys fork
|
||||||
|
jmp 1f
|
||||||
|
sys open; ttyin; 0
|
||||||
|
sys open; ttyout; 1
|
||||||
|
jmp login
|
||||||
|
1:
|
||||||
|
dac pid1
|
||||||
|
jmp init1 i
|
||||||
|
|
||||||
|
init2: 0
|
||||||
|
sys fork
|
||||||
|
jmp 1f
|
||||||
|
sys open; keybd; 0
|
||||||
|
sys open; displ; 1
|
||||||
|
jmp login
|
||||||
|
1:
|
||||||
|
dac pid2
|
||||||
|
jmp init2 i
|
||||||
|
|
||||||
|
login:
|
||||||
|
-1
|
||||||
|
sys intrp
|
||||||
|
sys open; password; 0
|
||||||
|
lac d1
|
||||||
|
sys write; m1; m1s
|
||||||
|
jms rline
|
||||||
|
lac ebufp
|
||||||
|
dac tal
|
||||||
|
1:
|
||||||
|
jms gline
|
||||||
|
law ibuf-1
|
||||||
|
dac 8
|
||||||
|
law obuf-1
|
||||||
|
dac 9
|
||||||
|
2:
|
||||||
|
lac 8 i
|
||||||
|
sac o12
|
||||||
|
lac o72
|
||||||
|
sad 9 i
|
||||||
|
skp
|
||||||
|
jmp 1b
|
||||||
|
sad o72
|
||||||
|
skp
|
||||||
|
jmp 2b
|
||||||
|
lac 9 i
|
||||||
|
sad o72
|
||||||
|
jmp 1f
|
||||||
|
-1
|
||||||
|
tad 9
|
||||||
|
dac 9
|
||||||
|
lac d1
|
||||||
|
sys write; m3; m3s
|
||||||
|
jms rline
|
||||||
|
law ibuf-1
|
||||||
|
dac 8
|
||||||
|
2:
|
||||||
|
lac 8 i
|
||||||
|
sad o12
|
||||||
|
lac o72
|
||||||
|
sad 9 i
|
||||||
|
skp
|
||||||
|
jmp error
|
||||||
|
sad o72
|
||||||
|
skp
|
||||||
|
jmp 2b
|
||||||
|
1:
|
||||||
|
dzm nchar
|
||||||
|
law dir-1
|
||||||
|
dac 8
|
||||||
|
1:
|
||||||
|
lac 9 i
|
||||||
|
sad o72
|
||||||
|
jmp 1f
|
||||||
|
dac char
|
||||||
|
lac nchar
|
||||||
|
sza
|
||||||
|
jmp 2f
|
||||||
|
lac char
|
||||||
|
alss 9
|
||||||
|
xor o40
|
||||||
|
dac 8 i
|
||||||
|
dac nchar
|
||||||
|
jmp 1b
|
||||||
|
2:
|
||||||
|
lac 8
|
||||||
|
dac nchar
|
||||||
|
lac nchar i
|
||||||
|
and o777000
|
||||||
|
xor char
|
||||||
|
dac nchar i
|
||||||
|
dzm nchar
|
||||||
|
jmp 1b
|
||||||
|
1:
|
||||||
|
dzm nchar
|
||||||
|
1:
|
||||||
|
lac 9 i
|
||||||
|
sad o12
|
||||||
|
jmp 2f
|
||||||
|
tad om60
|
||||||
|
lmq
|
||||||
|
lac nchar
|
||||||
|
cll; als 3
|
||||||
|
omq
|
||||||
|
dac nchar
|
||||||
|
jmp 1b
|
||||||
|
2:
|
||||||
|
lac nchar
|
||||||
|
sys setuid
|
||||||
|
sys chdir; dd
|
||||||
|
sys chdir; dir
|
||||||
|
|
||||||
|
lac d2
|
||||||
|
sys close
|
||||||
|
sys open; sh; 0
|
||||||
|
sma
|
||||||
|
jmp 1f
|
||||||
|
sys link; system; sh; sh
|
||||||
|
spa
|
||||||
|
jmp error
|
||||||
|
sys open; sh; 0
|
||||||
|
spa
|
||||||
|
jmp error
|
||||||
|
sys unlink; sh
|
||||||
|
1:
|
||||||
|
law 017700
|
||||||
|
dac 9
|
||||||
|
law boot-1
|
||||||
|
dac 8
|
||||||
|
1:
|
||||||
|
lac 8 i
|
||||||
|
dac 9 i
|
||||||
|
sza
|
||||||
|
jmp 1b
|
||||||
|
jmp 017701
|
||||||
|
|
||||||
|
boot:
|
||||||
|
lac d2
|
||||||
|
lmq
|
||||||
|
sys read; 4096; 07700
|
||||||
|
lacq
|
||||||
|
sys close
|
||||||
|
jmp 4096
|
||||||
|
0
|
||||||
|
|
||||||
|
rline: 0
|
||||||
|
law ibuf-1
|
||||||
|
dac 8
|
||||||
|
1:
|
||||||
|
cla
|
||||||
|
sys read; char; 1
|
||||||
|
lac char
|
||||||
|
lrss 9
|
||||||
|
sad o100
|
||||||
|
jmp rline+1
|
||||||
|
sad o43
|
||||||
|
jmp 2f
|
||||||
|
dac 8 i
|
||||||
|
sad o12
|
||||||
|
jmp rline i
|
||||||
|
jmp 1b
|
||||||
|
2:
|
||||||
|
law ibuf-1
|
||||||
|
sad 8
|
||||||
|
jmp 1b
|
||||||
|
-1
|
||||||
|
tad 8
|
||||||
|
dac 8
|
||||||
|
jmp 1b
|
||||||
|
|
||||||
|
gline: 0
|
||||||
|
law obuf-1
|
||||||
|
dac 8
|
||||||
|
1:
|
||||||
|
jms gchar
|
||||||
|
dac 8 i
|
||||||
|
sad o12
|
||||||
|
jmp gline i
|
||||||
|
jmp 1b
|
||||||
|
|
||||||
|
gchar: 0
|
||||||
|
lac tal
|
||||||
|
sad ebufp
|
||||||
|
jmp 1f
|
||||||
|
ral
|
||||||
|
lac tal i
|
||||||
|
snl
|
||||||
|
lrss 9
|
||||||
|
and o777
|
||||||
|
lmq
|
||||||
|
lac tal
|
||||||
|
add o400000
|
||||||
|
dac tal
|
||||||
|
lacq
|
||||||
|
sna
|
||||||
|
jmp gchar+1
|
||||||
|
jmp gchar i
|
||||||
|
1:
|
||||||
|
lac bufp
|
||||||
|
dac tal
|
||||||
|
1:
|
||||||
|
dzm tal i
|
||||||
|
isz tal
|
||||||
|
lac tal
|
||||||
|
sad ebufp
|
||||||
|
skp
|
||||||
|
jmp 1b
|
||||||
|
lac bufp
|
||||||
|
dac tal
|
||||||
|
lac d2
|
||||||
|
sys tead; buf; 64
|
||||||
|
sna
|
||||||
|
jmp error
|
||||||
|
jmp gchar+1
|
||||||
|
|
||||||
|
error:
|
||||||
|
lac d1
|
||||||
|
sys write; m2; m2s
|
||||||
|
lac d1
|
||||||
|
sys smes
|
||||||
|
sys exit
|
||||||
|
|
||||||
|
m1:
|
||||||
|
012; <lo>;<gi>;<n;<:;<
|
||||||
|
m1s = .-m1
|
||||||
|
m2:
|
||||||
|
<?; 012
|
||||||
|
m2s = .-m2
|
||||||
|
m3:
|
||||||
|
<pa>;<ss>;<wo>;<rd>;<: 040
|
||||||
|
m3s = .-m3
|
||||||
|
dd:
|
||||||
|
<dd>;040040;040040;040040
|
||||||
|
dir:
|
||||||
|
040040;040040;040040;040040
|
||||||
|
|
||||||
|
ttyin:
|
||||||
|
<tt>;<yi>;<n 040;040040
|
||||||
|
ttyout:
|
||||||
|
<tt>;<yo>;<ut>; 040040
|
||||||
|
keybd:
|
||||||
|
<ke>;<yb>;<oa>;<rd>
|
||||||
|
displ:
|
||||||
|
<di>;<sp>;<la>;<y 040
|
||||||
|
sh:
|
||||||
|
<sh>; 040040;040040;040040
|
||||||
|
system:
|
||||||
|
<sy>;<st>;<em>; 040040
|
||||||
|
password:
|
||||||
|
<pa>;<ss>;<wo>;<rd>
|
||||||
|
|
||||||
|
d1: 1
|
||||||
|
o43: 043
|
||||||
|
o100: 0100
|
||||||
|
o400000; 0400000
|
||||||
|
d2: 2
|
||||||
|
o12: 012
|
||||||
|
om60: -060
|
||||||
|
d3: 3
|
||||||
|
ebufp: buf+64
|
||||||
|
bufp: buf
|
||||||
|
o777: 0777
|
||||||
|
o777000: 0777000
|
||||||
|
o40: 040
|
||||||
|
o72: 072
|
||||||
|
|
||||||
|
ibuf: .=.+100
|
||||||
|
obuf: .=.+100
|
||||||
|
tal: .=.+1
|
||||||
|
buf: .=.+64
|
||||||
|
char: .=.+1
|
||||||
|
nchar: .=.+1
|
||||||
|
pid1: .=.+1
|
||||||
|
pid2: .=.+1
|
||||||
+1
-1
@@ -58,7 +58,7 @@ nofiles:
|
|||||||
|
|
||||||
done:
|
done:
|
||||||
lac noc
|
lac noc
|
||||||
sns
|
sna
|
||||||
sys exit
|
sys exit
|
||||||
and d1
|
and d1
|
||||||
sna cla
|
sna cla
|
||||||
|
|||||||
+59
-7
@@ -51,12 +51,12 @@ sub load_code {
|
|||||||
$Mem[$i] = 0;
|
$Mem[$i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Set up two file open filehandles
|
# Set up some open filehandles
|
||||||
$FD[0] = \*STDIN;
|
$FD[0] = \*STDIN;
|
||||||
$FD[1] = \*STDOUT;
|
$FD[1] = \*STDOUT;
|
||||||
$FD[8] = \*STDERR; # According to cat.s (uses d8 == 8)
|
$FD[8] = \*STDERR; # According to cat.s (uses d8 == 8)
|
||||||
|
|
||||||
# Open up the file
|
# Open up the PDP-7 executable file
|
||||||
open( my $IN, "<", $filename ) || die("Unable to open $filename: $!\n");
|
open( my $IN, "<", $filename ) || die("Unable to open $filename: $!\n");
|
||||||
while (<$IN>) {
|
while (<$IN>) {
|
||||||
chomp;
|
chomp;
|
||||||
@@ -122,7 +122,7 @@ sub set_arguments {
|
|||||||
for (my $i=0; $i < length($str); $i += 2) {
|
for (my $i=0; $i < length($str); $i += 2) {
|
||||||
my $c1= substr($str, $i, 1) || "";
|
my $c1= substr($str, $i, 1) || "";
|
||||||
my $c2= substr($str, $i+1, 1) || "";
|
my $c2= substr($str, $i+1, 1) || "";
|
||||||
#printf("Saving %06o to %05o\n", (ord($c1) << 9 ) | ord($c2), $addr);
|
#printf("Saving %06o to %06o\n", (ord($c1) << 9 ) | ord($c2), $addr);
|
||||||
$Mem[$addr++]= (ord($c1) << 9 ) | ord($c2);
|
$Mem[$addr++]= (ord($c1) << 9 ) | ord($c2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -135,8 +135,12 @@ sub simulate {
|
|||||||
my %Oplist = (
|
my %Oplist = (
|
||||||
oct("004") => \&dac,
|
oct("004") => \&dac,
|
||||||
oct("010") => \&jms,
|
oct("010") => \&jms,
|
||||||
|
oct("010") => \&dzm,
|
||||||
oct("020") => \&lac,
|
oct("020") => \&lac,
|
||||||
|
oct("024") => \&xor,
|
||||||
oct("034") => \&tad,
|
oct("034") => \&tad,
|
||||||
|
oct("044") => \&isz,
|
||||||
|
oct("050") => \&and,
|
||||||
oct("054") => \&sad,
|
oct("054") => \&sad,
|
||||||
oct("060") => \&jmp,
|
oct("060") => \&jmp,
|
||||||
oct("070") => \&iot,
|
oct("070") => \&iot,
|
||||||
@@ -178,7 +182,7 @@ sub dump_memory {
|
|||||||
# Load AC
|
# Load AC
|
||||||
sub lac {
|
sub lac {
|
||||||
my ( $instruction, $addr, $indaddr ) = @_;
|
my ( $instruction, $addr, $indaddr ) = @_;
|
||||||
dprintf( "PC %06o: lac %05o (value %06o) into AC\n",
|
dprintf( "PC %06o: lac %06o (value %06o) into AC\n",
|
||||||
$PC, $indaddr, $Mem[$indaddr] );
|
$PC, $indaddr, $Mem[$indaddr] );
|
||||||
$AC = $Mem[$indaddr];
|
$AC = $Mem[$indaddr];
|
||||||
$PC++;
|
$PC++;
|
||||||
@@ -187,7 +191,7 @@ sub lac {
|
|||||||
# Deposit AC
|
# Deposit AC
|
||||||
sub dac {
|
sub dac {
|
||||||
my ( $instruction, $addr, $indaddr ) = @_;
|
my ( $instruction, $addr, $indaddr ) = @_;
|
||||||
dprintf( "PC %06o: dac AC (value %06o) into %05o\n",
|
dprintf( "PC %06o: dac AC (value %06o) into %06o\n",
|
||||||
$PC, $AC, $indaddr );
|
$PC, $AC, $indaddr );
|
||||||
$Mem[$indaddr] = $AC;
|
$Mem[$indaddr] = $AC;
|
||||||
$PC++;
|
$PC++;
|
||||||
@@ -196,12 +200,30 @@ sub dac {
|
|||||||
# Add to AC
|
# Add to AC
|
||||||
sub tad {
|
sub tad {
|
||||||
my ( $instruction, $addr, $indaddr ) = @_;
|
my ( $instruction, $addr, $indaddr ) = @_;
|
||||||
dprintf( "PC %06o: tad AC (value %06o) from addr %05o\n",
|
dprintf( "PC %06o: tad AC (value %06o) with addr %06o (%06o)\n",
|
||||||
$PC, $AC, $indaddr );
|
$PC, $AC, $indaddr, $Mem[$indaddr] );
|
||||||
$AC= ($AC + $Mem[$indaddr]) & MAXINT;
|
$AC= ($AC + $Mem[$indaddr]) & MAXINT;
|
||||||
$PC++;
|
$PC++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# And AC and Y
|
||||||
|
sub and {
|
||||||
|
my ( $instruction, $addr, $indaddr ) = @_;
|
||||||
|
dprintf( "PC %06o: and AC (value %06o) with addr %06o (%06o)\n",
|
||||||
|
$PC, $AC, $indaddr, $Mem[$indaddr] );
|
||||||
|
$AC &= $Mem[$indaddr];
|
||||||
|
$PC++;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Xor AC and Y
|
||||||
|
sub xor {
|
||||||
|
my ( $instruction, $addr, $indaddr ) = @_;
|
||||||
|
dprintf( "PC %06o: xor AC (value %06o) with addr %06o (%06o)\n",
|
||||||
|
$PC, $AC, $indaddr, $Mem[$indaddr] );
|
||||||
|
$AC ^= $Mem[$indaddr];
|
||||||
|
$PC++;
|
||||||
|
}
|
||||||
|
|
||||||
# Skip if AC different to Y
|
# Skip if AC different to Y
|
||||||
sub sad {
|
sub sad {
|
||||||
my ( $instruction, $addr, $indaddr ) = @_;
|
my ( $instruction, $addr, $indaddr ) = @_;
|
||||||
@@ -209,6 +231,21 @@ sub sad {
|
|||||||
$PC += ($AC != $Mem[$indaddr]) ? 2 : 1;
|
$PC += ($AC != $Mem[$indaddr]) ? 2 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Deposit zero in memory
|
||||||
|
sub dzm {
|
||||||
|
my ( $instruction, $addr, $indaddr ) = @_;
|
||||||
|
dprintf( "PC %06o: dzm into %06o\n", $PC, $indaddr);
|
||||||
|
$Mem[$indaddr]= 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Index and skip if zero
|
||||||
|
sub isz {
|
||||||
|
my ( $instruction, $addr, $indaddr ) = @_;
|
||||||
|
dprintf( "PC %06o: isz %06o\n", $PC, $Mem[$indaddr]);
|
||||||
|
$Mem[$indaddr]++; $Mem[$indaddr] &= MAXINT;
|
||||||
|
$PC += ($Mem[$indaddr] == 0) ? 2 : 1;
|
||||||
|
}
|
||||||
|
|
||||||
# Jump
|
# Jump
|
||||||
sub jmp {
|
sub jmp {
|
||||||
my ( $instruction, $addr, $indaddr ) = @_;
|
my ( $instruction, $addr, $indaddr ) = @_;
|
||||||
@@ -253,6 +290,21 @@ sub special {
|
|||||||
$PC += ( $AC == 0 ) ? 2 : 1;
|
$PC += ( $AC == 0 ) ? 2 : 1;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if ( $instruction == 0741400 ) { # szl: Skip when $LINK is zero
|
||||||
|
dprintf( "PC %06o: szl LINK %0o\n", $PC, $LINK );
|
||||||
|
$PC += ( $LINK == 0 ) ? 2 : 1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if ( $instruction == 0740400 ) { # snl: Skip when $LINK not zero
|
||||||
|
dprintf( "PC %06o: snl LINK %0o\n", $PC, $LINK );
|
||||||
|
$PC += ( $LINK != 0 ) ? 2 : 1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if ( $instruction == 0741000 ) { # ska: skip always
|
||||||
|
dprintf( "PC %06o: skp\n", $PC );
|
||||||
|
$PC += 2;
|
||||||
|
return;
|
||||||
|
}
|
||||||
if ( ($instruction >= 0760000) && ($instruction <= MAXINT) ) { # law: load word into AC
|
if ( ($instruction >= 0760000) && ($instruction <= MAXINT) ) { # law: load word into AC
|
||||||
dprintf( "PC %06o: law %06o into AC\n", $PC, $instruction);
|
dprintf( "PC %06o: law %06o into AC\n", $PC, $instruction);
|
||||||
$AC = $instruction;
|
$AC = $instruction;
|
||||||
|
|||||||
Reference in New Issue
Block a user