diff --git a/Makefile b/Makefile index 06f677a..ced05fe 100644 --- a/Makefile +++ b/Makefile @@ -7,5 +7,8 @@ buildit: run: buildit cd build && make run +altrun: buildit + cd build && make alt && make altrun + clean: cd build && make clean diff --git a/README.md b/README.md index af653d4..d33504e 100644 --- a/README.md +++ b/README.md @@ -37,20 +37,30 @@ To compile it: ## Running pdp7-unix You will need [simh](http://simh.trailing-edge.com/) 4.0 to run pdp7-unix. You can get the source code [here](https://github.com/simh/simh). -On 64-bit systems, you may need to set the C compiler's optimisation -level to -O1. +On 64-bit systems, you may need to set the C compiler's optimisation level to -O1. + +### Running from source To run pdp-unix from the pdp7-unix source tree, do: `make run` -
-cd binaries -pdp7 ../build/unixv0.simh -- Press `ctl-e` to break out the simulator into simh +### Precompiled Binaries + +You can also run pdp7-unix from precompiled binaries in the [/binaries](/binaries) directory. There are **orig** binaries and **alt** binaries. + +The orig binaries use the unixv0 directory semantics as restored from the printouts. To run pdp7-unix orig: + +`cd binaries/orig; pdp7 unixv0.simh` + +The alt binaries use the more familiar "." and ".." diretory semanatics as found in later unix. To run pdp7-unix alt: + +`cd binaries/alt; pdp7 unixv0.simh` + +### Typical Output + A typical pdp7-unix session on simh looks like:
diff --git a/binaries/a.rim b/binaries/a.rim deleted file mode 100644 index 402c942..0000000 --- a/binaries/a.rim +++ /dev/null @@ -1 +0,0 @@ -ผ ฐฟฟฟธญปญปฐธญปดญผ ญฝกขญพฃผคฅญฟฆงจฎ ฉฟฟฟช ซ ฌฌญจฎ ฐฏ ขฐฑธขฒฟฟฟณฎ ดขตจถกทฎธฐซนบปปฒฐคฉฑญปธข ผฐผญฟฝทธ ผฐฎผญฟญพญฝญผตญปฒฎ ธข ปกขฐฉฃปคฅผฆฐ ง ขจฐฉกงชปซฌฐฑญปฎฏฐฑฐฐฟฑฒฎณธดกตฎถฎทธขธผนธบฎฌปผผฐฟฝพคพฟธก กงกงธขผ ฐฎ พ ขฎฌผฌธฒฐฎตถผ ง ถ ผธ ฏกขฃคซฅฒฆซงจฉชชซซฌญฎฏญปฐฎญฑฐฒญปณจกดจต ฑถทธฝนบบปญปผฐฝฝพฟฎผญปญผจ ซฟฌผคฌ ชญญ ผฒ ผฐฌฎฐก ผฒฌฎผฒ ฐขก ขฎญฃผคฒฅฟฟฟฆ งธขจคฉฒชซฐฌญณฎฎฏคฐฑฒคณดตถญปทจกธจนกบกปผฟฝผพฎผฟฏฐญป ฎฌฐฎฌพคฐนญปจ ฝตฎผจกคดฎผซฐนญปฏซฐฎญปฐชฎ ผกขตฃฏคจ ฑฅผฆญงดจจฉ ฐชฏซฌฐฒญดฎจฏ ฐฐฏฑฏฒฏณญปดตฐถชทผธ ฑนฎบญปปฐผฝ พฟ ด ค ค ฎ ผ ฌฆ ฎ ค ฌฆ ผ ฑ ฌข ธ ฎ ฎป ฏ ผ ฌฆ ฏ ฏ ฏ กฟฟฟ ขฏ ฃฏ คซ ฅฃ ฆฐ ง จฎ ฉ ฑ ชฌข ซ ฌฏ ญฃ ฎฎ ฏ ฐคฏ ฑฐ ด ฒ ณฎผ ดซ ตฐ ถฎ ทผ ธ นญป บฎ ปฐ ผ ฝ พ ฟฎค ฑ ฌขผฏฃฐญญปญญผฐฎผจ พผฎปฎฐฅผ ฑ ผก ฒขฌขฃฎคคฅฆงจฉฎผชจ พซผฌฐญฌขฎจ ฑฏผฐฐฑฎฒผณดฐต ฑถฌขทธบนผบปฌฆผฝฎพคฟฌฆฐฎผจ พ ผฐฎผฝฐญปจ ฝฐฝฏฐจกฎฎฎจ กกกขฃฎคจฅฎฆกงจฎฉฝชฏซจ ฑฌผญฎฎผฏจกฐผฑฐทฒธณฎปดตถถฒทฎธฝนฎบพปฏผปฝพฟฐกจกฎฎ ฎจฎกฎฝฏจ ฑผฎผจกผฐธฎปฒฎฎ ฏด กญปขฏฃฏคซฅฆฐงจงฉกฉชฟฟถซกจฌพญญฎฏฌฎฐฑฌฏฒณฌฐดตฌฑถกฉทคกจธฐฎนคงบฒงปผงฝพคปฟคปฒปฌฎผผ จ ทฎปผฒฟฟฝจกคปฒปปผกชคฌญฌญญปพฎกฎฎผธกชฎก ฎกฎขฎฃญปคฌญฅฎฆคกชงกชจคฎ ฉฎญชฐซธคฌฟฟฟญฎ ฑฏฐฝฑดฒณดดตญปถทซธฎฌนผบฐฝปพคผฝพฎฟจกฎคฎฎ กฎฎพฎกซฟฟฟกซพฎกซกซผญปกซคกซกซญผกซฐญปผงคพ ฎกกฌขกฌฃคฅฌฏฆฌญปงผจฒคฉฌฐชฌกฆซฐบฌกญฎฎฎฏพฐฎฑกฌฒญปณกฌดตพถฎทกฌธกฌนฐบฟฟฝปผกฌฝกขพกฌฟกฌคกฌคกฌฎผกฌ คกฌญผกฌฐงฒฎฌฌฐผฒฟฟฝกญกขกญกญฒฒฃคถฃฃ ดกฎขฃฑคขฅ ฑฆชงฐฐจจกฉจชกซก ฌผญกฎถฏฐฐกฑฌฒฒณฐคดขตถผทฐธตนฌณบผปฐผกฝฌณพดฟธฌ บฎฐดฌซ ฒผฐกฌณฐดข ณชฐชตจกฌกฐดจกฌกผฐด พตดฎข ฎกฅขฐงฃกคฌธฅฆฐงฎจถฉฐชกซฌดฌญฐฎขฏฐฅฑฐฒกณฌธดตฐฎถ ดทชธฐปนถบฐปฌตผผฝธพกฟฌตฐถผฐ ตฌถผฐกฌถดธฐดฌซ ตผฐกฌถฐฌกฐฎ ฑญปฐฟฟฟ ญปกฐขฃ คฅผฆฐฎงฟฟฟจ ฉฒขชซฟฟฟฌญ ญผฎฐปฏญ ฐ จฑขฒกฎณดฟตถกฎทซธ นกฎบฒชปญผผฝฑพญฟฟญผฟญ บญ ฐซตญ ฌ บฐ จกฎดกฎ คญ ฒญฟผญฟดญซ ฑ ญ กฒขฃจกคกฅฆฆงฒขจฉตชจซกฏฌคจญดฎกฏฏผฐฐธฑจฒกฏณคจดดตกฏถผทผธคจนดบผปฒจผฝฟฟฟพผฟคผฟฟฟผคผ ฟฟฟผผกฏคผคกฏฐฒผฟฟฟคฟฟฟผกฏคคกฏฐฒกฐฝ ดกฒขกฃงคกฐฅฆฌซงขฃจคฉฒชซดฌฒชญกฎฑฏฝฐฑขฃฒคชณฒชดตผ ถ ชทพธกกนบ ฑปผกฝพขฟผฒดฌชฌขฐก ขขฐฝขขคดฌชฒดผ ฉ ฑ กขผฐกฌชขขฐ ฌชข ขกฒขฃกณคฟฟผฅกฑฆพจงกฒจกณฉฌกฒชฒขซพฌกฒญคกฒฎคกฑฏฐจฐคขฑฒขฒณฝดขตฐธถพจทกฒธกฒน บกปผผฝ ฑพฌฟจกผฐผ ฟพฟฌกฑ ฑฌฌกฑผฟฒฒจ ฒกฑฌฌฌฒฌฌขฐกฌฌทฐ ฐฉกกฒขพฃกฒคฆฅผฆงฟจฉฒชฒซฌจญ ฒฎกฏฑฐทฑธฒฌฌณขดกฒตฒถฒซทธฌฌนผ บตปผกดฝดพตฟกตดกตดกต กดตกดดกดกตกกดฟฟฟกดทคทฒทฟฟถกตฟฟฟธนกธนธนข กขขธนฃ คฅขฆขงธนคจ ฉผชฐจซ ฌผญฒฎคกตฏฐฐฑฑฒคกถณฐฒดธตผ ถผทพธนบผ ปฐบผฝผ พดฟกทฟฟญปกทผ กท พกทฟกทผคผฒผฎผตฎผฒฌฏด ดจฌขผฒฟฟถกธกธ บกตขฑฃฏคผฅฐฉฆคกธงฐจฒฉฌขชกซฏฌฎปญฏฎกธฏ บฐญปฑฏฒณคดฒตถจท ฐธ นนฒตบผ ปตผฝดพ ฃฟกนผฏ คตฒตกนผฏฒฎฌฎฐฎผฎผด จกฒฎกฎฐฎญป ฐกขพญฃคกฅตฆฎงฎจฐฏฉคชคซคฌฝญด ฎฐฆฏกฐฎฑกฒกบณกบดดตกบถคกทฒกธนฏบผปคฏผฏฝพฏฟผฐปฒธกปธ พฎปคฎปฎปฎผผฐฎปฏผฌฆฏคญญฏฏกปกฎผฎฏฟฟฟฏ ฏ ฎฝกขซฃฃคฒฅฆจกงผจฒฅฉฌ ปชฐตซตฌฌ บญฎคฏฌกฐฐทฑดฒคณคคดฒฅตถฒฅทคธฌ ฆนฐบปกผฝฝพถฟคฒฅคฌกฐ คคฒกธคคฅฒฅ งคกคคฒธธ ฌฟฟฟญธขฒฎ คฎ ฒ ขกผขฃฌฆคฅฎฆคงฌฆจฉฒชซฌฎญฎฎฏฝฐฎฑผฒฒชณฌ ฑดฐทตฏถฒชทฏธฒชนบปผฎฝผพฌฏฟผฒนฟฟนกผ คกฝกฝผฐฎผจกผฐฟฟกพ ฅกฟกฝกฟผคกฟคกพฐกฝกฝคกฝคกผฐ ฎผกจกขฎผฃฒคฅฆฟฟฟงคจขฉคคชฎผซจ พฌผญฒคฎฟฟธฏฏฐผฑถ ฒขณผดฒคตฏถฏทธฏนผบฐปขผฝฏพฎฟผฐฏฎผฐ ฏฎผฐฏฎผฐฏคคฒคคฏคขฐถฒคฎปผ ต ขด ฒขขผ ตกขดฃ ฅคขฅงฆผงจฎผฉชฒซฌขญฎพฎปฏฐฟฟฟฑขฒณฟฟดดขตถฎทผธฐผนคขบฐตปฒซผฟฟฟฝพฟฟฟฟคข ฐขซฒซฏถข ฏขข จก ฅขผฏข ธจ ฐฏผฒ กฏขฒฃคขฅฆขงชจผฉฏชซฌขญซฎฒฃฏฐถ ฑขฒฎผณจกดผตฐถขทจธ ฐน ถบฐป คผขฝขพผฟชขฒฏชขผ ฎฝฟฟนขซขฎฝฎพฎผกฎผขถ จ ฐ ถฑ คขขผช ขกขขฃขคจกฅ ฅฆขงขจผฉฒฏชชซขฌขญฎขฏขฐขฑซฒขณฒฏดตขถดทปธขนดบฐฟปผขฝพดฟฟฟฟปคปป ขคปก ดฏผขผจ ฐขขขผ ฑผฒปขขฏขขจก ฅกฆ ด ฐฃกขผฃคฅฆคขงคขจฐดฉ ดชฐฒซขฌจญ ฐฎฏฏฏฐขฑซฒขณฒปดขตจกถผทฐคธ ดนฐบขปซผฐฝพญปฟตฏผฏ ฒฝฏซฏฒ ธฐฉธคฌ คญผคญคฌผฟฟฟธคฌฅผคฌฅผญผ ฐกค ขผฃฐฝคฌ ณฅฐฆคญงฐจฐฝฉธนชฐฑซฟฟฟฌ ญธนฎ ฏธนกฐฐฑธชฒผณฐฝดธ ตญถผทฐธกฅนผบฐฝปญผฐฝธพฐฟฌฅผคฌฅธฌซฌก ฐณ ฑฌซฌฒฌฒฌซฌกผฐฌณผกฌณฎฐธฐธธฐฌฅผฒ ฌฃกฌฃขผฃฐจคคฌฅฅ ฒฆชงฐดจธฉฌ บชฎซฌ ผฌผญฒฎฌฅฏ พฐผ ฑผฒฌฅณฒดฌณตถฌณทฒธธฃนฐบธฃปธฃผฌซฝฌ ฟพฐ ฟ ณผฌดฌด ฐธฐฌฌคผฐฌซธฌคฐธฌซฌซผฐ ดฐฆฌซฌ ดฐจฌคผฐ ฌซฌคฐ ธกฌตขฃกคฌตฅฐฆฌซงฌคจฌตฉชฌตซฐฌธญฐธฎธฏ ตฐชฑฐดฒธณฐดฌถตถฌถทฐธธคนฐบธคปธคผฌกฝจกพผฟฐฌธฌธฝ ธคฐธทฐธทญฟฟฟญฐธทผ ธขฒขฟฟถข ข กฃขผขผ ฐคกกขขฃคขฅ ดฆขงฃจ ดฉฃชคขซฐฌฝญฒฎฏ ผฐฌฃฑฝฒฒฎณ ถด ต ฑถชทผธฐตน ฒบชปผผฐนฝฌฒพฟฌฒ ฌณ ฌณ ฐ ฐ ท ณ ช ผ ฐ ฌด ฌด ฌธ ฌธ ฐ ฐ ญ กญ ข ฃฎ คฎฝ ฅฟ ฆจ งค จญ ฉข ชข ซขข ฌฎ ญด ฎ ฏ ฐ ฑ ฒ ณ ด ต ถ ท ธ น บ ป ผ ฝ พ ฟก กญกฟกกกก กกกญกฟกกฝกฟกก กผฟกกฟฒกฟฟกกกกกฟฟกกกกกก กจกฏฟฟก ฐกกดกขธกฃฟฟกคฟฟฐกฅฟฟฝกฆฟฟฟขขขขคขขขคขฃขคขฆขฅขฆขจขงขจขชขฉขชขฌขซขฌขฎขญขฎขฐขฏขฐขฒขฑขฒขดขณขดขถขตขถขธขทขธขบขนขบขผขปขผขพขฝขพฃขฟฃฃฃฃฃฃฃฃฃ ฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃ ฃฃ ฃขฃกฃขฃคฃฃฃคฃฆฃฅฃฆฃจฃงฃจฃชฃฉฃชฃฌฃซฃฌฃฎฃญฃฎฃฐฃฏฃฐฃฒฃฑฃฒฃดฃณฃดฃถฃตฃถฃธฃทฃธฃบฃนฃบฃผฃปฃผฃพฃฝฃพคฃฟคคคคคคคค คจฏคฟ คคฉคชธคซธขคฌธคคญพฐคฎธขคฏคฐพคคฑคฒฝคณทคดฐคตผคถฟคทญคธคน ณคบคคป ฌคผฑคฝคพฝคฟปฅฅฅฑฌฌฌญญญญญญ ญญญญญญญญ ญ ญกญขญฃญคญฅญฆญง ญจญฉญชญซญฌญญญฎญฏ ญฐญฑญฒญณญดญตญถญท ญธญนญบญปญผฎฟฟฟฎฎฎญฎฎฎฎฎฌฎญฏผ \ No newline at end of file diff --git a/binaries/alt/a.rim b/binaries/alt/a.rim new file mode 100644 index 0000000..3ad059c --- /dev/null +++ b/binaries/alt/a.rim @@ -0,0 +1 @@ +ผ ฐฟฟฟธฎฎฐธฎดฎ ฎกขฎฃทคฅฎฆงจฎฃฉฟฟฟช บซ ถฌฌผญฃฎกฏกฐฑธขฒฟฟฟณฎฃดตฃถกฑทฎธฐฆนบปปฒฐฅฌฎธข บ ผฐทญขฟฝฒธ ถผฐฉทฎฎฎฎตฎฒฎฃธข ถกขฐฉฃถคฅผฆฐ งกจฐฉข ชถซฌฐฑญถฎฏฐฑฐฐฟฑฒฎจณธดกธตฎงถฎงทธขธทนธบฏปผผฐฟฝพคฆพฟธกพข ข ธขท ฐฎจกกฏผฌผธฒฐฉปฐฑท ข ฑ ทณ ฏกขฃคฆฅฒฆฆงฟจฉชชฆซฌฟญฎฏฎฐฏฑฐฒฎณจกฐดฃตกถทธฝนบบปฎผฐฝฝพฟฏฎญขทฃ ฆฟญฌพฅญญ ถผฒ ทผฐฌฎฎฐก ธผฒฌฎฎผฒ ธ ฐขก ทขฏฃผคฒฅฟฟฟฆ ถงธขจคฉฒชซฎฌฎฆญฎฏฐฑฎฒจกฐณฃดกฎตกฏถทบธทนฏบปผฏงฝพฐฟฎฏฐฏพคฆ ฐดฎจกตฏจขดฏฆฐดฎฏขฆฐฎคฎฐฅฎฉผตฏฏจก ผกจขดฃฃคกฅฏคฆงฐญจดฉฃชกซฏคฌฏคญฏฐฎฎฏฐฐฑฅฒผณกดฎฉตฎถฐทธฟนบ ปผ ฝฎฆพฟ ฎฉ ท ญ ฎฆ ญ ผ ก ญ ณ ฎฉ ฏ ฏง ท ญ ฏจ ฏฅ ฏฌ ฟฟฟ ฏฃ ฏฃ ฆ กฐ ข ฃฎฉ คก ฅญ ฆ งฏง จ ฉฎฉ ช ซคฏฃ ฌฐ ฏ ญฝ ฎฏ ฏฆ ฐฐ ฑฎค ฒผ ณ ดฎ ตฎค ถฐ ท ธ ฝ น บ ปฎฆ ผ ฝ พ ฟกญทฏจ ฐญฏฎญฐฎฐฏจกผฏฎฆฐ ผกผกญฎฆ กขฃคฏฅจกฆผงฐจญฉจกชผซฐฌฎคญผฎฏฐฐกฑญฒณตดทตถญทธฎฆนบญปฐผฝพฏฟจกผฐ ฎคผ ฝฝฐฎจกฝฐธฏฏฐจกฐฎฉฎชฎฉฃกฎกฐฎชฃ ฎฉกกฐขฃฎซคธฅฏฏฆจกงผจฉฏชจกซผฌฐฒญธฎฏฏฐฑฑฒฒฎฉณธดฎชตนถฏฐทถธนบฐปผจกฐฝฎฉพฟฎชฎฉฃฎฉกฐ ฎซธฏฏจกผฏจกผฐธฏฒฎฉฎชฏฐฏฎฏฐฏฐฆ กฐขฃขคขฅฟฟถฆขงพญฐจฉชญซฌญญฎญฏฐญฑขฒคขณฐฉดคขตฒขถทขธผนคถบคถปฒถผฝญพผฟผจกฎถผฒผฟฟฝ จกฐคถฒถถผขคญญฎพฎจกธฎงฎงทธขฎงกถฎงฎงฎฅฎญ ฎฅกคขขขฃคฎฃคฏฅฐฆธคงฟฟฟจฉกชซฝฌฏญฎฏฏฐฎฑฒฆณฏดผตฐธถพคฆทธนฎงบจกตปฎงผคฎงฝฎงพฟกถฎงฎงพฎง ขฟฟฟขพฎงขขผฎขคขขฎขฐฎผขพฎงขข ญกฌฎขผฃฒคญฅฌขฆฐตงกถจฎงฉฎงชพซฎงฌขญฎฎขฏฐพฑฎงฒขณขดฐตฟฟฝถทขธขนขบขปคขผคขฝฎฅพผฟขคขฎขฐ ขฒฎฅฌญผฒฟฟฝขขขขฒฒฑฏฉฝฌ กกฅขฐซฃจกงคฃฅกกฆกฃงผจกฉถชฐซฌญญฎฐฏฐฑผฒฐณตดญตผถฐพทกปธญนดบธปฌกผ ฝฐพดฟญกผฐ ญฐฏกฅฐฅตจกฆฌกฐดจกฅฌกคผฐดกตดฎซฎซ ฐขญ กฐขฎซฃถคฐฅฆญงจฐฉชซ ฌฐญฎญฏฐฐฉฑกฒฅณฐถดถตฐถญทผธธนบญปผฐฑฝพผฟฐตญผฐกป ญดธฐดญกผฐญฐฝฌกฌฐฎฉกฎฐฟฟฟฎฐ ถ ผกฐฉขฟฟฟฃ ถคฒฅฆฟฟฟงญฃจผฉฐถชญฃซกฌญขฎฏฟฐฑขฒฆณ บดขตฒฅถญขทผธฌนญคบปฟผญขฝทพฟฟญฅกญฃฐฆ ตญฃฌกฐกขดข บคญฃฒญขฟทญฅฟดญขฆ บกญฃฒจกฐกธ กกขฒฃคตฅฃฆขงคฃจดฉขชผซฐณฌฃญขฎคฃฏดฐขฑผฒผณคฃดดตผถฒฃทธฟฟฟนทบปคทผฟฟฟฝทพฟคทฟฟฟทผขคท คขฐ ฒทฟฟฟคฟฟฟผขคคขฐฒขฝฏฒกณขข กญขฃฃคคฒฅฆฏงฒฅจกนฉฌชฝซฌฃญคฅฎฒฅฏฐผ ฑกฒนณกฟด ตกถทกผธฝนขฐบผปฒฏผญฝฌขฑพฐฟกธฃฐ ฝขฑ ขฐคฏญฒฏผ กกกทขฏผฐกฒญฃฐญขฐขฑฒขฟฟผ ขกพจทขขฃขคฌขฅฒฆพงขจคขฉคขชฐฃซคฌฒญฎฝฏฐฐณฑพจทฒขณขดตกกถฟทผธกนฌปบจกฐปผผฐฝพทฟฟพฟฌปข กญขทฟฒญฃกกญฌฌญฒญฐญฒฐฐคขพขก ทกขฟฃคญฅฒฆงฃจกฉกญชฌซฒฌธญญฎฏขฐญฑฒฆฒณญดผ ตตถทขธดนตบปขผดฝขพดฟขขตขด ขขกธขฟฟฟขฒคฒฒฒฟฟถขฟฟฟธนกธนธนขธน ผ กขธนคฃ ผคผฅฐฃฆ ฝงผจฒฉคขชฐซฌฌญคขฎฐญฏธฐผ ฑทฒพณดตผ ถฐตทธผ นดบขปผฟฟฝฎพขฟทขกขฟ ขทคทฒทฏตฎคผฒฌฏขด ดจญผฒฟฟถขขกฐฌฏฏผ ฐคกคขขฐฃฒคญฅกปฆฏฏงฏจฏฑฉขชกซฎฌฏฐญฎคฏฒฐฑฃฒกณกดฒฐตผ ถตทธดนกบขปฝผทฝพฏฏฟคฐฒฐข ทฏฏฒฎฉฌฎซฐฎฉผฎฉผด จกชฒฎฉกปฎฉฐฎชฎฐพญฐกธ ตกฎงขฎฃฐชคคฅคฆคงฝจด ฉฐกชกถซฎงฌญขฎขฏดฐขฑคฒฒณดฏฆตผถคฏฆทฏฆธนฏงบผปฐถผฒณฝพขฟณกฏคฏฏ ฏผฐฏฏงทญฏจคญฎญฎฏฌฏฅขกปฏฎคฏขฟฟฟฏฃฏคฏฆฒฝ กจกงขผฃฒ คฌกฅฐฐฆตงฌกจผฉคคชฌกปซฐฒฌดญคคฎคคคฏฒ ฐฑฒ ฒคคณฌกดฐตถกปทธฝนถบคคปฒ ผฝคฅพฌกขฟฐคคฅฒผกซธคค ฒ ก คคกปคฉคฅฒธธ ฌฝฟฟฟญธขฒฎฃคฎฃฒทญ ฎฆกขญฃคฒฅฆงฎฉจฉฎซชธซฎซฌผญฒฅฎฌกฏฐฒฐฏคฑฒฅฒฏฐณฒฅดตถทฎคธผนฌฏขบผปผฒดฝพฟฟนฟขกขขผฐ ฏจกธผฐฟฟขกขขขผคขคขฐขขคขคขฐฏจกฝฏฒฝ กฟฟฟขฃขคคฅฏฆจกงผจฒฉฟฟธชฏคซผฌถ ญขฎผฏฒฐฏฆฑฏฆฒณฏงดผตฐถขทธฏจนฎบผปฐผฏฉฝฎพผฟฐฏชฎผฐฏซ ฎผฐฏงคฒคฏฆคขฐฑฒฏผ ต ข ดกขกข ผ ตดกข ขกทขฃฏคฅฒฆงขกจฉพฏชซฟฟฟฌข ญฎฟฟดฏขขฐฑฎฒผณฐทดคขขตฐฐถฒฆทฟฟฟธนบฟฟฟปผฝพฟคขขฐฝขกฆฒฆ ฏฆถขฃชขคขฃจก กขฅทฏงขฃกฃกฏคผฒฏงฒขค กขฅขฅฃทคฏงฅฆงขคจฆฉฒชซถ ฌขฆญฏฎจกธฏผฐฐฑขฆฒฃณกดกตฐฝถกทขฆธขฆนผบฅปขฆผฒชฝฅพขงฟทฏฟฟ นขงฆขงฏฏฏกธฏขฆถ ฃกกฌกขงขงผฅขงขจขฆจก กกขงขขงฃผคฒชฅฅฆขฆงขจจฉขฆชขงซขจฌฆญขฆฎฒชฏฐขฉฑฏฒถณดฏตฐบถทขฉธขนฏบฟฟฟปถผฝพคถฟถขชคถกด ฏฏค ผขฉผฃกขชขชขซผกผฒถขชขฉชขฌขฉจก กข ฏฐผ กคขฉขคขชฃฐฏค ฏฅฐญฆขฉงฃจกฉฏคชฏคซขฌฌฆญขซฎฒถฏขฉฐจก ฑผฒฐณ ฏดฐตขฌถฆทฐธนฎบฐปผฏฏฝผพฟฏฑฒธฏคฆ ฏคฒ นธงกฐธงฑธงชญผฐธงญฟฟฟญญผผฐญฟฟฟญฐญธฐถธคฌพคญฐผ คญฏกคฌผขผฃฟฟฟคฅธคฆญงผจคญฉผชบซญฌผญฐญฎค ปฏผฐฐฑฌกฒฐญณคญดฐญตฐถธนทฐพธฟฟฟน ผบธนป ฝผธนกฝฐญพธชฟผฐธ ญผฐญ ขผฐญฐญกญฌฝธ งฟฟถ ปฐญผฐธขฐญผฐธญธฐญธฐตญผคญ ธกญขฌกฉฃฐ คกฅฆญงญจฒฉญชญซฌกจฌผญฐญฎญฏผฐกปฑญฒ ณบดฐญตธถฐทธธบนฐญบปญผผฝฒบพญฟญผฐคญกฅ ฐธฌก ฌกผฒบญกผ ผญฒบญฒญฒบธฃฐคธฃธฃญฌกฐ คกผ ญกฒขญฃฐญคธฅฐฆญงผจฐญฉญชธซญฌฐฏญธฎญฏญฐผฑฐธฒกณดฐตญถฌกทฐธญนผบฐพปญผญฝฐฏพธฟญฒกปญฐญญ ญญฒญฐญธฐธกฅฐธฐญญฒญฐญธคฐฅธคธคฌฟจกซผฐญญ ฒกญขฝฃธคคฐญฅธทฆฐฌงธทจญกฉฟฟฟชญ ซฐญฌธทญฎผฏ นฐธขฑฒฒณขญดฟฟถตขฎถ พท ธ ฟน บขญปผผขญฝผพฐ ฟข ก ก คขฎ ฐบ ฝ ฒฒ ก ญ ฝ ฒ ก ท ก ฅ ผ ฐ ก ฅ ผ ฐ ญ ฒ ญ ญ ฒ ญ ก ขฐญ ฃฐ ฒ คก ฅ ธ ฆก งฅ จผ ฉฐ ฆ ชญ ซฒ ฌญ ญญ ฎฒ ฏญ ฐ ฑฐญ ฒ ณ ด น ตฐ ถ ท ธ น บ ป ผ ฝ พญฑ ฟญฑกกฎฌกฏกฟกจดก คฉกญคกขฐกขฐกฃกฎกดก ก กกกกกก กกกกกกกกกกก กญก ฟกกกขกกฃกคกฅกฆญกงฟกจกฉฝกชฟกซกฌ กญผฟกฎกฏฟฒกฐฟฟกฑกฒกณกดกตฟฟกถกทกธกนกบกป กผจกฝฏฟฟกพฐกฟดขธขฟฟขฟฟฐขฟฟฝขฟฟฟขฐฃขฑคขฃฃฃฃฃฃฃฃฃ ฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃ ฃฃ ฃขฃกฃขฃคฃฃฃคฃฆฃฅฃฆฃจฃงฃจฃชฃฉฃชฃฌฃซฃฌฃฎฃญฃฎฃฐฃฏฃฐฃฒฃฑฃฒฃดฃณฃดฃถฃตฃถฃธฃทฃธฃบฃนฃบฃผฃปฃผฃพฃฝฃพคฃฟคคคคคคคคค คคคคคคคคคคคคคคคคคคคคคคคคคคคคคคคคคคคคคค คค คขคกคขคฃคฆจฏคงฟ คจฅฅธฅธขฅธคฅพฐฅธขฅฅพคฆฅฅฝฅฒฅฐฅทฅฟฅญขฅฅกฅฅกฅฌฅฅฝฅถฅฅฅ ฑฌปฌปญญฑญฒญณญดญต ญถญทญธญนญบญปญผญฝ ญพญฟฎฎฎฎฎฎ ฎฎฎฎฎฎฎฎ ฎฎฎฎฎฎฎฎ ฎฎฎฎฎฎคฟฟฟฎฅฎฆฎงญฑฎจฎฉฎชฎซฏฏฏฑผ \ No newline at end of file diff --git a/binaries/image.fs b/binaries/alt/image.fs similarity index 99% rename from binaries/image.fs rename to binaries/alt/image.fs index 501ed5b..1786bc4 100644 Binary files a/binaries/image.fs and b/binaries/alt/image.fs differ diff --git a/binaries/alt/unixv0.simh b/binaries/alt/unixv0.simh new file mode 100644 index 0000000..38593b0 --- /dev/null +++ b/binaries/alt/unixv0.simh @@ -0,0 +1,13 @@ +set cpu 8k +set cpu eae +set cpu history=100 +show cpu + +set tti unix +set rb ena +att rb image.fs +show dev + +load -S a.rim +dep pc 0100 +go diff --git a/binaries/orig/a.rim b/binaries/orig/a.rim new file mode 100644 index 0000000..28832a1 --- /dev/null +++ b/binaries/orig/a.rim @@ -0,0 +1 @@ +ผ ฐฟฟฟธฎฎฐธฎดฎ ฎ กขฎกฃผคฅฎขฆงจฎจฉฟฟฟช ฟซ ปฌญญจฎกฏก ฐฑธขฒฟฟฟณฎจดขตจถกถทฎธฐซนบปปฒฐฅฑฎธข ฟ ผฐผญงฟฝทธ ปผฐฎผฎขฎกฎ ฎตฎฒฎจธข ปกขฐฉฃปคฅผฆฐ งก จฐฉขชปซฌฐฑญปฎฏฐฑฐฐฟฑฒฎญณธดกฝตฎฌถฎฌทธขธผนธบฏปผผฐฟฝพคซพฟธขขขธขผ ฐฎญกกก ฏผญธฒฐฎตถผ ง ถ ผธ ฏกขฃคซฅฒฆซงจฉชชซซฌญฎฏฎฐฏฑฐฒฎณจกตดจตกถทธฝนบบปฎผฐฝฝพฟฏฎญงผจ ซฟญคญชญฃญฅ ปผฒ ผผฐฌฎณฐก ฝผฒฌฎณผฒ ฝ ฐขก ผขฏฃผคฒฅฟฟฟฆ ปงธขจคฉฒชซฐฌญณฎฎซฏคฐฑฒคณดตถฎทจกตธจนกณบกดปผฟฝผพฏฟฏฌฐฎ ฏฐฏพคซฐนฎจก ตฏจขดฏซฐนฎฏงซฐฎฉฎฐชฎฎ ผกขตฃฏดคจกฅผฆญงดจจฉกชฏฉซฌฐฒญดฎจฏกฐฏฉฑฏฉฒฏตณฎดตฐถชทผธกนฎฎบฎปฐผฝ พฟ ก ค ค ฎฎ ผ ญ ฎซ ค ญ ผ ก ญ ธ ฎฎ ฏ ฏฌ ผ ญ ฏญ ฏช ฏฑ กฟฟฟ ขฏจ ฃฏจ คซ ฅฃ ฆฐ ง จฎฎ ฉก ชญ ซ ฌฏฌ ญฃ ฎฎฎ ฏ ฐคฏจ ฑฐ ด ฒ ณฏ ดซ ตฐ ถฎฉ ทผ ธ นฎ บฎฉ ปฐ ผ ฝ พ ฟฎซคก ญ ผฏญฃฐญดฎญตฎฐฏจกกผฏฎซฐฅผก ผกกขญ ฃฎซคคฅฆงจฉฏชจกกซผฌฐญญ ฎจกฏผฐฐฑฎฉฒผณดฐตกถญ ทธบนผบปญผฝฎซพคฟญฐฏจกก ผฐฎฉผฝฐฎจก ฐฝฏดฐจกตฎฎฎฏฎฎจ กณกกตขฃฎฏคจฅฎฎฆกตงจฎฐฉฝชฏดซจกฌผญฎฏฏจกฃฐผฑฐทฒธณฏดตถถฒทฎฎธฝนฎฏบพปฏตผปฝพฟฐกจกตฎฎฎฏ ฎฎจฎฎกตฎฐฝฏดจกผฏจกฃผฐธฏฒฎฎฎฏ ฏตด กฎขฏตฃฏตคซฅฆฐงจงฉขชฟฟถซขฌพญตญฎฏญฐฑญฒณญดตญถขทคขธฐฎนคงบฒงปผงฝพคปฟคปฒปญผผ จกฎปผฒฟฟฝจกตคปฒปปผขคญญฎพฎญกฝฎฌฎฌผธขฎฌกป ฎฌกฎฌขฎชฃฎคญฅฎชฆคขงขจคฎจฉฏชฐซธคฌฟฟฟญฎกฏฐฝฑดฒณดดตฎถทซธฏนผบฐฝปพคซผฝพฎฌฟจกบฎฌคฎฌฎฌ กปฎฌฎฌพฎฌขฟฟฟขพฎฌขขผฎขคขขฎขฐฎผงคพ ฎฌกขขขฃคฅญฆฌฎงผจฒคฉญชฌขซฐบฌกปญฎฌฎฎฌฏพฐฎฌฑขฒฎณขดตพถฎฌทขธขนฐบฟฟฝปผขฝข พขฟขคขคขฎชผข คขฎขฐงฒฎชฌญผฒฟฟฝขข ขขฒฒฃคถฃฃ ดกฎขฃฑคขฅกฆชงฐฐจจกฌฉจชกฆซกจฌผญกฃฎถฏฐฐกฑญฒณฐคดขตถผทฐธตนญบผปฐผขฝญพดฟธฌก ฐดญ กผฐกญฐดขกชฐชตจกซฌกคฐดจกชฌกฉผฐดกกตดฎฐข ฎฐกฅขฐงฃกคญฅฆฐงฎฐจถฉฐชกซญฌญฐฎขฏฐฅฑฐฒกณญดตฐฎถกทชธฐปนถบฐปญผผฝธพกฟญฐถผฐ ตญผฐขญดธฐดญกผฐกญฐฌกฑฐฎฎกฎฐฟฟฟ ฎกฐขฃ ปคฅผฆฐฎงฟฟฟจ ปฉฒขชซฟฟฟฌญจญผฎฐปฏญจฐกฑขฒขณดฟตถขทซธ ฟนขบฒชปญงผผฝฑพญฉฟฟญงผฟญช กญจฐซตญจฌกฐกขดข ฟคญจฒญงฟผญชฟดญงซ ฟก ญจกฒขฃจกตคกฝฅฆฆงฒขจฉตชจซขฌคจญดฎขฏผฐฐธฑจฒขณคจดดตขถผทผธคจนดบผปฒจผฝฟฟฟพผฟคผฟฟฟผคผ ฟฟฟผผขคผคขฐฒผฟฟฟคฟฟฟผขคคขฐฒขฝ ดกฒขกธฃงคขฅฆญงฃจคฉฒชซดฌฒชญกพฎฑฏฝฐฑฃฒคชณฒชดตผ ถกทพธขนบกปผขฝพขตฟผฒดญฌขถฐกฝ ฃ ฐฝขถขตคดญฒดผ กก กผขดผฐกทญฃ ฐ ญขต ขถกฒขฃขคฟฟผฅขฆพจผงขจขฉฌขชฒขซพฌขญคขฎคขฏฐจฐคขฑฒขฒณฝดขตฐธถพจผทขธขน บกฆปผผฝกพญฟจกตผฐผ ฟพฟญขกญขผฟฒฒจกกฒฑฌญฒญขฐกญทฐ ฐฉกขขพฃขคฆฅผฆงฟจฉฒชฒซฌจญกฎกฒฏฑฐทฑธฒญณขดขตฒถฒซทธญนผ บตปผขฝดพตฟขดขดข ขตขดขขกฝขฟฟฟขทคทฒทฟฟถขฟฟฟธนกธนธนข กขขธนฃกคฅขฆขงธนคจกฉผชฐจซกฌผญฒฎคขฏฐฐฑฑฒคขณฐฒดธตผ ถผทพธนบผ ปฐบผฝผ พดฟขฟฟฎขผ ขกกขฟขผคผฒผฏตฎฉผฒฌฏงด ดจญ ผฒฟฟถขข กกตขฑฃฏดคผฅฐฉฆคขงฐจฒฉญ ชขซฏดฌฏญฏถฎขฏกฐฎฑฏตฒณคดฒตถจทกธกนฒตบผ ปตผฝดพกฟขผฏด คตฒตขผฏดฒฎฎฌฎฐฐฎฎผฎฎผด จกฏฒฎฎขฎฎฐฎฏฎ ฐกขพญตฃคกฝฅตฆฎฌงฎจฐฏฉคชคซคฌฝญด ฎฐฆฏกปฐฎฌฑกฒขณขดดตขถคกทฒกธนฏซบผปคฏซผฏซฝพฏฌฟผฐปฒธขธ กกฏคฏฏฏผฐฏฏฌผญฏญคญณญณฏฑฏชขขฏฎฉฏงฟฟฟฏจฏฉ ฏ กขซฃฃคฒฅฆจกฌงผจฒฅฉฌกชฐตซตฌฌกญฎคฉฏฌขฐฐทฑดฒคฉณคคฉดฒฅตถฒฅทคฉธฌกนฐบปขผฝฝพถฟคฉฒฅคชฌกงฐ คคชฒกฐธคคฅฒฅกคฉขคฎคชฒธธ ญฟฟฟญฃธขฒฎจคฎจฒ ขกผขฃญคฅฎซฆคงญจฉฒชซฌฎฎญฎฎฐฏฝฐฎฐฑผฒฒชณฌกดฐทตฏฉถฒชทฏตธฒชนบปผฎฉฝผพฌฏงฟผฒนฟฟนข กข ข ผฐฏจกฝผฐฟฟขกกขขข ขขผคขขคขกฐข ข คข คขฐ ฏกจขขฏฃฒคฅฆฟฟฟงคจขคฉคคชฏซจกกฌผญฒคฎฟฟธฏฏฉฐผฑถ ฒขฃณผดฒคตฏซถฏซทธฏฌนผบฐปขคผฝฏญพฎฟผฐฏฎฎผฐ ฏฏฎผฐฏฐฎผฐฏฌคคฒคคฏซคขฃฐถฒคฏผ ต ขฅดกขฆขฅผ ตกขดฃกคขฅฅงฆผงจฏฉชฒซฌขฆญฎพฏฏฐฟฟฟฑขฅฒณฟฟดดขงตถฎทผธฐผนคขงบฐตปฒซผฟฟฟฝพฟฟฟฟคขง ฐขฆซฒซฏซถขจฏขฉขจจกฅกขชผฏฌขจกจกฏฉผฒ กฏฌขฒฃคขฉฅฆขชงชจผฉฏฌชซฌขฉญซฎฒฃฏฐถ ฑขซฒฏณจกฝดผตฐถขซทจธกนกบฐปกผขซฝขซพผฟชขซฒฏชขฌผ ฏ ฟฟนขฌซขฌฏ ฏกฏกฝฏขซถ จกกฑกขฌขฌผช ขฌกขญขฃขซคจกฅฅกฆขฌงขฌจผฉฒฏชชซขซฌขญญฎขซฏขฌฐขญฑซฒขซณฒฏดตขฎถดทปธขนดบฐฟปผขฎฝงพดฟฟฟฟปคปป ขฏคปกน ดฏฉผขฎผจกขฏขฏขฐผกผฒปขฏขฎฏขฑขฎจกฅกข ด ฐฃกขผฃคฅฆคขฎงคขฏจฐดฉ ดชฐฒซขฎฌจญกฎฏฉฏฏฉฐขฑฑซฒขฐณฒปดขฎตจกฅถผทฐคธ ดนฐบขฑปซผฐฝพฎฟตฏดผฏถ ฒฝฏฉซฏฉฒ พธงกฐธงฑธงชญผฐธงญขฟฟฟญ ญผผฐฒฟฟฟญกฐฒธ ฐปกธคขญฃคญตคผฅคญดฆคญงผจฟฟฟฉชธคซญฌผญคญฎผฏฟฐญฃฑผฒฐฒณคกดผตฐถฌกทฐฒธคญฃนฐฒบฐปธนผฐฝฟฟฟพกฟธนกธนกฐฒธชผ ฐธ ญฃผฐฒขผฐญฃฐฒกญฃญธ งฟฟถกฐฒผฐธขฐฒผฐ ธญคธฐฒ ธกฐบขญฃผคคญฅธฆญงฌกฎจฐ ฉกชซญฌญญทฎญฏญฐฌกญฑผฒฐฒณญดผตขถญท ธฟนฐฒบธปฐผธฝฟพฐฒฟญผฒฟญญ ผฐคญกชฐธฌก ฌกผฒฟญกกผ ผญฒฟญทญฒฟธฃฐฉธฃธฃญ ฌกขกฐ ฉขกฃคผฅญฆทงญจฐฒฉธชฐซญฌผญฐฒฎญฏธฐญฑฐดฒธณญดญตผถฐฝทกธนฐบญปฌกผฐฝญพผฟฐญญฐดธญ ทขญฐฒญญญทญฐฒธฐธกชฐธฐฒญทญฐฒธคฐชธคธคญ จกฐกผขฐฒฃคญฅทฆญงฝจธคฉฐฒชธทซฐฑฌธทญญฆฎฟฟฟฏญฅฐฐฒฑธทฒณผด พตธขถฒทธขฒนฟฟถบขณปกผ ฝกพ ฟขฒ ผ ขฒ ผ ฐ ข ก ก คขณ ฐฟ ฝ ฒท ก ญ ฝ ฒ ก ผ ก ช ผ ฐ ก ช ผ ฐ ญ กท ขญ ฃญ คท ฅญ ฆ งฐฒ จฐ ท ฉก ช ฝ ซก ฌช ญผ ฎฐ ซ ฏญ ฐท ฑญ ฒญ ณท ดญ ต ถฐฒ ท ธ น พ บฐ ป ผ ฝ พ ฟกกกกญถกญถก กฎฑกฏ กฟกจนกคฎกญฉกขตกขตกฃ กฎกดก ก กกกกกก กกกกกกกก กกกขกฃ กคญกฅฟกฆกงกกจกฉกชกซญกฌฟกญกฎฝกฏฟกฐกฑ กฒผฟกณกดฟฒกตฟฟกถกทกธกนกบฟฟกปกผกฝกพกฟข ขจขฏฟฟขฐขดข ธขฟฟขฟฟฐขฟฟฝขฟฟฟขตฃ ขถคงฃ ฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃกฃ ฃกฃฃฃขฃฃฃฅฃคฃฅฃงฃฆฃงฃฉฃจฃฉฃซฃชฃซฃญฃฌฃญฃฏฃฎฃฏฃฑฃฐฃฑฃณฃฒฃณฃตฃดฃตฃทฃถฃทฃนฃธฃนฃปฃบฃปฃฝฃผฃฝฃฟฃพฃฟคคคคคคค คค คคคคคคคคคคคคคคคคคคคคคคคคคคคคคคคคคคคคคคคคกค คกคฃคขคฃคฅคคคฅคงคฆคงคจคซจฏคฌฟ คญฅฅธฅธขฅธคฅพฐฅธขฅฅพคซฅฅฝฅทฅฐฅผฅฟฅญงฅฅกฅคฅกฅฑฅ ฅกฝฅขปฅฃฅคฅฅฑญญญญถญทญธญนญบ ญปญผญฝญพญฟฎฎฎ ฎฎฎ ฎฎฎฎฎ ฎฎฎฎฎฎฎฎ ฎฎฎฎฎฎฎฎ ฎฎฎฎฎฎฉฟฟฟฎชฎซฎฌญถฎญฎฎฎฏฎฐฏฏฏถผ \ No newline at end of file diff --git a/binaries/orig/image.fs b/binaries/orig/image.fs new file mode 100644 index 0000000..3bb1469 Binary files /dev/null and b/binaries/orig/image.fs differ diff --git a/binaries/orig/unixv0.simh b/binaries/orig/unixv0.simh new file mode 100644 index 0000000..bde540d --- /dev/null +++ b/binaries/orig/unixv0.simh @@ -0,0 +1,31 @@ +set cpu 8k +set cpu eae +set cpu history=100 +show cpu + +# set up SIMH devices: + +# UNIX character translations (CR to NL, ESC to ALTMODE): +set tti unix + +# RB09 fixed head disk: +set rb ena +att rb image.fs + +# uncomment to TELNET in GRAPHICS-2 keyboard/display(!!) +# (requires github.com/philbudne/simh) +#set g2in ena +#att -U g2in 12345 + +# disable hardware UNIX-7 doesn't know about: +set lpt disa +set drm disa +set dt disa + +# show device settings: +show dev + +# load and start the system: +load -S a.rim +dep pc 0100 +go diff --git a/build/Makefile b/build/Makefile index bfcf26a..ff1b392 100644 --- a/build/Makefile +++ b/build/Makefile @@ -21,7 +21,7 @@ TESTDIR=tests BINARIES=../binaries/ -all: cmd others a.rim image.fs copybinaries +all: cmd others a.rim image.fs # Make alternative everything: no dd but . and .. alt: altcmd altothers alt/a.rim alt/image.fs @@ -33,7 +33,18 @@ run: # Alternative run, use the alt/image.fs altrun: - $(PDP7) alt/unixv0.simh + cd alt; $(PDP7) unixv0.simh + +dist: all alt + mkdir -p $(BINARIES) + mkdir -p $(BINARIES)/orig + mkdir -p $(BINARIES)/alt + cp image.fs $(BINARIES)/orig + cp a.rim $(BINARIES)/orig + cp unixv0.simh $(BINARIES)/orig + cp alt/image.fs $(BINARIES)/alt + cp alt/a.rim $(BINARIES)/alt + cp alt/unixv0.simh $(BINARIES)/alt # Warm boot Unix kernel: boots into init and a login prompt a.rim: @@ -63,12 +74,6 @@ alt/image.fs: altcmd altothers $(MKFS) -1 -2 -3 -o alt/image.fs alt/proto $(FSCK) -3 alt/image.fs - -copybinaries: - mkdir -p $(BINARIES) - cp image.fs $(BINARIES) - cp a.rim $(BINARIES) - clean: rm -f a.rim image.fs a.lst n.out alt/image.fs alt/a.rim alt/a.lst rm -rf $(BINDIR) $(TESTDIR) diff --git a/build/alt/a.lst b/build/alt/a.lst new file mode 100644 index 0000000..adb4508 --- /dev/null +++ b/build/alt/a.lst @@ -0,0 +1,5376 @@ + "** 01-s1.pdf page 62 + " sop + dac = 0040000 " MEM: deposit AC + 040000 + jms = 0100000 " MEM: jump to subroutine + 100000 + dzm = 0140000 " MEM: deposit zero to memory + 140000 + lac = 0200000 " MEM: load AC + 200000 + xor = 0240000 " MEM: XOR with AC + 240000 + add = 0300000 " MEM: one's complement add + 300000 + tad = 0340000 " MEM: two's complement add + 340000 + xct = 0400000 " MEM: execute + 400000 + isz = 0440000 " MEM: increment and skip if zero + 440000 + and = 0500000 " MEM: AND + 500000 + sad = 0540000 " MEM: skip if AC different + 540000 + jmp = 0600000 " MEM: jump + 600000 + nop = 0740000 " OPR: no-op + 740000 + i = 020000 " indirect + 020000 + law = 0760000 " OPR: load accumulator with (instr) + 760000 + cma = 0740001 " OPR: complement AC + 740001 + las = 0750004 " OPR: load AC from switches + 750004 + ral = 0740010 " OPR: rotate AC left + 740010 + rar = 0740020 " OPR: rotate AC right + 740020 + hlt = 0740040 " OPR: halt + 740040 + sma = 0740100 " OPR: skip on minus AC + 740100 + sza = 0740200 " OPR: skip on zero AC + 740200 + snl = 0740400 " OPR: skip on non-zero link + 740400 + skp = 0741000 " OPR: skip unconditionally + 741000 + spa = 0741100 " OPR: skip on positive AC + 741100 + sna = 0741200 " OPR: skip on non-zero AC + 741200 + szl = 0741400 " OPR: skip on zero link + 741400 + rtl = 0742010 " OPR: rotate two left + 742010 + rtr = 0742020 " OPR: rotate two right + 742020 + cll = 0744000 " OPR: clear link + 744000 + rcl = 0744010 " OPR: clear link, rotate left + 744010 + rcr = 0744020 " OPR: clear link, rotate right + 744020 + cla = 0750000 " OPR: clear AC + 750000 + lrs = 0640500 " EAE: long right shift + 640500 + lrss = 0660500 " EAE: long right shift, signed + 660500 + lls = 0640600 " EAE: long left shift + 640600 + llss = 0660600 " EAE: long left shift, signed + 660600 + als = 0640700 " EAE: AC left shift + 640700 + alss = 0660700 " EAE: AC left shift, signed + 660700 + mul = 0653122 " EAE: multiply + 653122 + idiv = 0653323 " EAE: integer divide + 653323 + lacq = 0641002 " EAE: load AC with MQ + 641002 + clq = 0650000 " EAE: clear MQ + 650000 + omq = 0640002 " EAE: OR MQ into AC + 640002 + cmq = 0650004 " EAE: complement MQ + 650004 + lmq = 0652000 " EAE: load MQ from AC + 652000 + dscs = 0707141 " DSK: clear status register + 707141 + dslw = 0707124 " DSK: clear and load WC from AC + 707124 + dslm = 0707142 " DSK: clear and load MAC from AC + 707142 + dsld = 0707104 " DSK: clear and load TA and SA from AC + 707104 + dsls = 0707144 " DSK: load status + 707144 + dssf = 0707121 " DSK: skip on flags + 707121 + dsrs = 0707132 " DSK: read status register + 707132 + iof = 0700002 " PIC: interrupts off + 700002 + ion = 0700042 " PIC: interrupts on + 700042 + caf = 0703302 " CPU: clear all flags + 703302 + clon = 0700044 " CLK: clear flag, enable + 700044 + clsf = 0700001 " CLK: skip if overflow + 700001 + "** 01-s1.pdf page 63 + clof = 0700004 " CLK: clear flag, disable + 700004 + ksf = 0700301 " KBD: skip if flag set + 700301 + krb = 0700312 " KBD: read buffer + 700312 + tsf = 0700401 " TTY: skip if flag set + 700401 + tcf = 0700402 " TTY: clear flag + 700402 + tls = 0700406 " TTY: load buffer, select + 700406 + sck = 0704301 " G-2: skip on console keyboard + 704301 + cck = 0704304 " G-2: clear console keyboard + 704304 + lck = 0704312 " G-2: load console keyboard + 704312 + rsf = 0700101 " PTR: skip if flag set + 700101 + rsa = 0700104 " PTR: select alphanumeric mode + 700104 + rrb = 0700112 " PTR: clear flag, or read buffer + 700112 + psf = 0700201 " PTP: skip if flag set + 700201 + pcf = 0700202 " PTP: clear flag + 700202 + psa = 0700204 " PTP: alphanumeric mode + 700204 + cdf = 0700501 " G-2: clear display flags + 700501 + lds = 0701052 " G-2: load display status + 701052 + lda = 0701012 " G-2: load display address + 701012 + wcga = 0704206 " G-2: ??? + 704206 + raef = 0700742 " G-2: resume after edges flag + 700742 + rlpd = 0700723 " G-2: resume after light pen stop, disabled + 700723 + beg = 0700547 " G-2: begin + 700547 + spb = 0704401 " G-2: skip on push button flag + 704401 + cpb = 0704404 " G-2: clear push button flag + 704404 + lpb = 0704412 " G-2: load push buttons + 704412 + wbl = 0704424 " G-2: write button lights + 704424 + dprs = 0704752 " dataphone: read status + 704752 + dpsf = 0704741 " dataphone: skip on flag + 704741 + dpcf = 0704761 " dataphone: clear flag + 704761 + dprc = 0704712 " dataphone: read character + 704712 + crsf = 0706701 " CDR: skip if ready + 706701 + crrb = 0706712 " CDR: read buffer + 706712 + " S1 + .. = 0 + 000000 + t = 0 + 000000 + orig: + hlt " overwritten with interrupt return addr +000000: 740040 + jmp pibreak " dispatch to interrupt processing +000001: 603407 + . = orig+7 + 1000007 + -1 " only ever set (to -1): never read?! +000007: 777777 + . = orig+020 " syscall (CAL) and user "interrupt" processing + 1000020 + 1f " addr for "CAL I": store return here on "CAL" +000020: 000032 + iof " interrupts off +000021: 700002 + dac u.ac " save user AC +000022: 045631 + lac 020 " save user return addr +000023: 200020 + dac 1f " save as if "CAL I" +000024: 040032 + lac 1f-1 +000025: 200031 + dac 020 " restore location 20 +000026: 040020 + lac u.ac " restore user AC +000027: 205631 + jmp 1f+1 " join "CAL I" processing +000030: 600033 + 1f " literal to restore location 20 +000031: 000032 + 1: 0 " "CAL I" PC stored here +000032: 000000 + iof " interrupts off +000033: 700002 + dac u.ac " save user AC +000034: 045631 + lacq +000035: 641002 + dac u.mq " save user MQ +000036: 045632 + lac 8 +000037: 200010 + dac u.rq " save user auto-index location 8 +000040: 045633 + lac 9 +000041: 200011 + dac u.rq+1 " save user auto-index location 9 +000042: 045634 + jms copy; 10; u.rq+2; 6 " save user auto-index locations 10-15 +000043: 101667 +000044: 000012 +000045: 005635 +000046: 000006 + lac 1b " load user PC after system call +000047: 200032 + dac u.rq+8 " save user PC +000050: 045643 + -1 " load -1 +000051: 777777 + dac .savblk " set "save" flag (cleared by disk I/O?) +000052: 044072 + dac .insys " set "in system" flag +000053: 044066 + lac uquant " load user quantum count +000054: 205474 + jms betwen; d0; maxquant " check if between 0 & maxquant?? +000055: 101643 +000056: 004116 +000057: 004100 + jms swap " no: swap processes +000060: 100136 + ion " interrupts on +000061: 700042 + -1 +000062: 777777 + tad u.rq+8 " get address of system call +000063: 345643 + jms laci " load AC indirect?? +000064: 101635 + jms betwen; o20001; swn " range check +000065: 101643 +000066: 004161 +000067: 000256 + jmp badcal " bad system call +000070: 601146 + tad swp " add system call table base +000071: 340220 + dac .+1 " save as next instruction +000072: 040073 + jmp .. i " dispatch system call +000073: 620000 + . = orig+0100 + 1000100 + jmp coldentry " here to start kernel +000100: 604507 + jms halt +000101: 102254 + okexit: + dzm u.ac " 'OK' system call exit: clear user AC +000102: 145631 + sysexit: " common system call exit code + ion " enable interrupts +000103: 700042 + lac .savblk " load "save" flag +000104: 204072 + sza " is zero (cleared by disk I/O)? +000105: 740200 + jmp 1f " no: no disk I/O done? +000106: 600116 + jms copy; sysdata; dskbuf; 64 " copy system data to disk buffer +000107: 101667 +000110: 005542 +000111: 007700 +000112: 000100 + cla +000113: 750000 + jms dskio; 07000 " save to disk? +000114: 102162 +000115: 007000 + 1: + dzm .insys " clear "in system call" flag +000116: 144066 + jms chkint " pending user interrupt? +000117: 100320 + skp " no +000120: 741000 + jmp .save " yes: dump core +000121: 601151 + jms copy; u.rq+2; 10; 6 " restore auto-index locations 10-15 +000122: 101667 +000123: 005635 +000124: 000012 +000125: 000006 + lac u.rq+1 " restore auto-index location 9 +000126: 205634 + dac 9 +000127: 040011 + lac u.rq " restore auto-index location 8 +000130: 205633 + dac 8 +000131: 040010 + lac u.mq " restore MQ register +000132: 205632 + lmq +000133: 652000 + lac u.ac " restore AC register +000134: 205631 + jmp u.rq+8 i " return to user +000135: 625643 + " scheduler / idle loop + swap: 0 +000136: 000000 + ion +000137: 700042 + 1: + jms lookfor; 3 " out/ready +000140: 101066 +000141: 000003 + jmp 1f +000142: 600151 + jms lookfor; 1 " in/ready +000143: 101066 +000144: 000001 + skp +000145: 741000 + jmp 1b " loop until a process becomes ready +000146: 600140 + dzm maxquant " in/ready (self?): come back next tick! +000147: 144100 + jmp 3f +000150: 600215 + 1: " here with out/ready process + dac 9f+t " save process pointer (swapped out) in t0 +000151: 044205 + jms lookfor; 2 " in/notready " find a swapped in process to swap out? +000152: 101066 +000153: 000002 + jmp 1f +000154: 600161 + jms lookfor; 1 " in/ready +000155: 101066 +000156: 000001 + jmp 1f +000157: 600161 + jmp 2f +000160: 600177 + 1: + lac swap +000161: 200136 + dac u.swapret " return to caller when swapped back +000162: 045650 + iof +000163: 700002 + lac o200000 " change status to swapped out +000164: 204170 + tad u.ulistp i +000165: 365647 + dac u.ulistp i +000166: 065647 + ion +000167: 700042 + jms dskswap; 07000 " swap process out +000170: 102267 +000171: 007000 + lac u.dspbuf +000172: 205712 + sna " process using display?? +000173: 741200 + jmp 2f " no +000174: 600177 + law dspbuf " reset to default display buffer +000175: 764446 + jms movdsp +000176: 102615 + 2: + iof " disable interrupts +000177: 700002 + lac o600000 " change status (1->7???] +000200: 204176 + tad 9f+t i +000201: 364205 + dac 9f+t i +000202: 064205 + ion " enable interrupts +000203: 700042 + jms dskswap; 06000 " read process in? +000204: 102267 +000205: 006000 + lac u.swapret " set our return addr +000206: 205650 + dac swap " to saved return addr +000207: 040136 + lac o20 " reset maxquant to 16 ticks +000210: 204134 + dac maxquant +000211: 044100 + lac u.dspbuf +000212: 205712 + sza " using display? +000213: 740200 + "** 01-s1.pdf page 4 + jms movdsp " yes. switch to user display bufferx +000214: 102615 + 3: + dzm uquant " no. reset process tick count +000215: 145474 + iof +000216: 700002 + jmp swap i " return +000217: 620136 + t = t+1 + 000001 + swp: " system call dispatch table + jmp . " base instruction +000220: 600220 + .save; .getuid; .open; .read; .write; .creat; .seek; .tell +000221: 001151 +000222: 000426 +000223: 000626 +000224: 000724 +000225: 000773 +000226: 000660 +000227: 000431 +000230: 000461 + .close; .link; .unlink; .setuid; .rename; .exit; .time; .intrp +000231: 000720 +000232: 000467 +000233: 000542 +000234: 000561 +000235: 000567 +000236: 001163 +000237: 000610 +000240: 000257 + .chdir; .chmod; .chown; badcal; .sysloc; badcal; .capt; .rele +000241: 000615 +000242: 000407 +000243: 000421 +000244: 001146 +000245: 000262 +000246: 001146 +000247: 000377 +000250: 000403 + .status; badcal; .smes; .rmes; .fork +000251: 000352 +000252: 001146 +000253: 001225 +000254: 001177 +000255: 001111 + swn: + .-swp-1 i " count of system calls, plus indirect! +000256: 020035 + " AC/ new value for intflg (non-zero to ignore interrupt char) + " sys intrp + .intrp: + lac u.ac +000257: 205631 + dac u.intflg +000260: 045713 + jmp okexit +000261: 600102 + " syscall to retrieve system addresses (data & routines!!) + " AC/ index (1..17) + " sys sysloc + " AC/ address (or -1 on bad index) + .sysloc: + lac u.ac +000262: 205631 + and o17777 +000263: 504160 + jms betwen; d1; locn +000264: 101643 +000265: 004117 +000266: 000317 + jms error +000267: 101531 + tad locsw +000270: 340275 + dac .+1 +000271: 040272 + lac .. +000272: 200000 + dac u.ac +000273: 045631 + jmp sysexit +000274: 600103 + locsw: " table of system addresses for sysloc + lac . +000275: 200275 + iget; inode; userdata; sysdata; copy; copyz; betwen; dskrd +000276: 003017 +000277: 005732 +000300: 005631 +000301: 005542 +000302: 001667 +000303: 001712 +000304: 001643 +000305: 002116 + dskwr; dskbuf; dpdata; namei; pbsflgs; alloc; free; dspdata +000306: 002146 +000307: 007700 +000310: 005532 +000311: 002737 +000312: 005476 +000313: 001545 +000314: 001604 +000315: 005536 + crdata +000316: 005540 + locn: + .-locsw-1 +000317: 000021 + " check if "interrupt" for current process + " checks .int1 and .int2 (contain i-number of interrupt source) + " compared against process stdin + " + " call: + " .insys/ 0 + " jms chkint + " no: no interrupt, or intflg set (discards interrupt) + " yes: PI off, .insys set + chkint: 0 +000320: 000000 + lac .insys +000321: 204066 + sza " in system? +000322: 740200 + jmp chkint i " yes: return +000323: 620320 + lac .int1 " get inumber of interrupt1 source? +000324: 204067 + sna " zero? +000325: 741200 + jmp 1f " yes: skip stdin check +000326: 600331 + sad u.ofiles+2 " non-zero: compare to stdin inumber +000327: 545656 + jmp 2f " same +000330: 600341 + 1: + lac .int2 " get inum of interrupt 2 source? +000331: 204070 + sna " zero? +000332: 741200 + jmp chkint i " yes: return +000333: 620320 + sad u.ofiles+2 " non-zero: compare to stdin inumber +000334: 545656 + skp " match! +000335: 741000 + jmp chkint i " no match: return +000336: 620320 + dzm .int2 " clear int2 source +000337: 144070 + jmp 1f +000340: 600342 + 2: + dzm .int1 " clear int1 source +000341: 144067 + 1: + "** 01-s1.pdf page 5 + lac u.intflg " get user intflg +000342: 205713 + sza " zero? +000343: 740200 + jmp chkint i " no: ignore +000344: 620320 + -1 +000345: 777777 + dac .insys " set "in system" flag +000346: 044066 + ion " enable interrupts +000347: 700042 + isz chkint " give skip return +000350: 440320 + jmp chkint i +000351: 620320 + "** 01-s1.pdf page 7 + " s2 + " file status (stat) system call + " AC/ pointer to status (inode) buffer + i-num (13 words) + " sys status; dir_name_ptr; file_name_ptr + " NO_DD version: sys status; file_name_ptr + .status: + jms arg " fetch file name pointer +000352: 102625 + dac .+3 +000353: 040356 + lac u.cdir " get current working directory +000354: 205646 + jms namei; .. " look up file +000355: 102737 +000356: 000000 + jms error " not found: return error +000357: 101531 + jms iget " read file inode +000360: 103017 + lac u.ac " get user buffer pointer +000361: 205631 + and o17777 " truncate to 13 bits +000362: 504160 + jms betwen; o10000; o17762 " is user memory (but not last 14 wds)? +000363: 101643 +000364: 004156 +000365: 004157 + jms error " no: error +000366: 101531 + dac .+3 " save as copy destination +000367: 040372 + jms copy; inode; ..; 12 " copy inode to user buffer +000370: 101667 +000371: 005732 +000372: 000000 +000373: 000014 + lac d.i " copy i-num from last dnode read ?? +000374: 205747 + dac 9 i " save thru index 9 (pre-increment) ?? +000375: 060011 + jmp okexit +000376: 600102 + " capture display? + .capt: + lac u.ac " get user AC +000377: 205631 + dac u.dspbuf " save as user display buffer +000400: 045712 + jms movdsp " switch to user display buffer +000401: 102615 + jmp sysexit +000402: 600103 + " release display? + .rele: + dzm u.dspbuf " clear user display buffer pointer +000403: 145712 + law dspbuf " get default display buffer +000404: 764446 + jms movdsp " change to it +000405: 102615 + jmp sysexit +000406: 600103 + .chmod: + jms isown " check if user owns file arg +000407: 102664 + lac u.ac " get new permissions +000410: 205631 + and o17 " mask to read/write bits +000411: 504133 + lmq " save in MQ +000412: 652000 + lac i.flags " get file flags +000413: 205732 + and o777760 " clear permissions +000414: 504202 + omq " or in new permissions from MQ +000415: 640002 + dac i.flags " save in inode +000416: 045732 + jms iput " write inode back +000417: 103046 + jmp okexit +000420: 600102 + .chown: + jms isown " check if user owns file arg +000421: 102664 + lac u.ac " get new owner +000422: 205631 + dac i.uid " save in inode +000423: 045742 + jms iput " write inode back +000424: 103046 + jmp okexit +000425: 600102 + .getuid: " getuid system call + lac u.uid +000426: 205644 + dac u.ac " return u.uid in user AC +000427: 045631 + jmp sysexit +000430: 600103 + .seek: + jms seektell +000431: 102645 + tad u.base +000432: 345651 + "** 01-s1.pdf page 8 + spa +000433: 741100 + jms error +000434: 101531 + lmq +000435: 652000 + lac f.flags +000436: 205757 + and d1 +000437: 504117 + sna +000440: 741200 + jms 1f +000441: 100450 + lacq +000442: 641002 + jms betwen; d0; i.size +000443: 101643 +000444: 004116 +000445: 005744 + jms dacisize +000446: 103402 + jmp 2f +000447: 600455 + 1: + lacq +000450: 641002 + jms betwen; d0; i.size +000451: 101643 +000452: 004116 +000453: 005744 + lac i.size +000454: 205744 + 2: + dac f.badd +000455: 045760 + dac u.ac +000456: 045631 + jms fput +000457: 102402 + jmp sysexit +000460: 600103 + .tell: + jms seektell +000461: 102645 + cma +000462: 740001 + tad d1 +000463: 344117 + tad u.base +000464: 345651 + dac u.ac +000465: 045631 + jmp sysexit +000466: 600103 + .link: + jms arg " Save the argument pointers in +000467: 102625 + dac 0f "0f, 1f and 2f +000470: 040477 + jms arg +000471: 102625 + dac 1f +000472: 040502 + jms arg +000473: 102625 + dac 2f +000474: 040506 + lac u.cdir " Search the current directory +000475: 205646 + jms namei; 0:0 " for the first argument +000476: 102737 +000477: 000000 + jms error " Didn't find it +000500: 101531 + jms namei; 1:0 " In the i-num found by 1st namei, +000501: 102737 +000502: 000000 + jms error " search for 2nd argument, err not found +000503: 101531 + dac u.base " save in user data +000504: 045651 + jms copy; 2:0; name; 4 +000505: 101667 +000506: 000000 +000507: 005504 +000510: 000004 + lac u.cdir " Search the process' current directory +000511: 205646 + jms namei; name " for the third argument +000512: 102737 +000513: 005504 + skp +000514: 741000 + jms error " Error if it already exists +000515: 101531 + lac d1 +000516: 204117 + dac mode " Save mode bits for access +000517: 045500 + jms access " check access (or return error to user) +000520: 102312 + jms dslot " allocate directory slot +000521: 102463 + lac u.base " get source file i-number +000522: 205651 + jms iget " read inode in +000523: 103017 + lac ii " get the i-num +000524: 205731 + dac d.i " Save the i-num in the directory entry +000525: 045747 + jms copy; name; d.name; 4 " Copy the new link name into the directory entry +000526: 101667 +000527: 005504 +000530: 005750 +000531: 000004 + lac i.uniq " Copy the i-node unique number into +000532: 205745 + dac d.uniq " the directory entry +000533: 045754 + -1 +000534: 777777 + tad i.nlks " Decrement link count, i.e. one more link +000535: 345743 + dac i.nlks +000536: 045743 + "** 01-s1.pdf page 9 + jms iput " Save the i-node and directory entry for +000537: 103046 + jms dput " the new link +000540: 103136 + jmp okexit " and return OK +000541: 600102 + .unlink: + jms argname " fetch filename, inode +000542: 102631 + dac u.base " save i-number +000543: 045651 + lac d1 " write mode bit +000544: 204117 + dac mode " save for access call +000545: 045500 + jms access " check access or return error (reads inode) +000546: 102312 + dzm d.i " clear directory i-num +000547: 145747 + jms dput " write directory entry back +000550: 103136 + lac u.base " get i-number back +000551: 205651 + jms iget " read inode back +000552: 103017 + isz i.nlks " increment link count (kept as negative count) +000553: 445743 + jmp 1f " not zero +000554: 600557 + jms itrunc " zero links: free blocks +000555: 102675 + dzm i.flags " clear status (free inode) +000556: 145732 + 1: + jms iput " write inode back to disk +000557: 103046 + jmp sysexit +000560: 600103 + .setuid: " setuid system call + lac u.uid " load current user id +000561: 205644 + sma " negative (super user) +000562: 740100 + jms error " no: error!! +000563: 101531 + lac u.ac " load user AC +000564: 205631 + dac u.uid " save as new uid +000565: 045644 + jmp sysexit +000566: 600103 + " rename system call: + " sys rename; old_name_ptr; new_name_ptr + " Questions: + " when is directory entry read?? + " is access check on directory or src file?? + " check for existing file with new name?? + " when is directory entry written back?? + .rename: + jms arg " fetch first arg (old name pointer) +000567: 102625 + dac 0f " save for namei +000570: 040575 + jms arg " fetch second arg (new name pointer) +000571: 102625 + dac 1f " save for copy +000572: 040603 + lac u.cdir " get CWD +000573: 205646 + jms namei; 0:0 " search for (old) name +000574: 102737 +000575: 000000 + jms error " not found: return error +000576: 101531 + lac d1 " get write mode bit +000577: 204117 + dac mode " save for access call +000600: 045500 + jms access " access OK? (or return error to user) +000601: 102312 + jms copy; 1:0; d.name; 4 " copy new name into directory entry +000602: 101667 +000603: 000000 +000604: 005750 +000605: 000004 + jms dput " and write it to disk +000606: 103136 + jmp okexit +000607: 600102 + " time system call returns line (mains) frequency ticks + " high order bits returned in AC, low order in MQ + " s.tim is located in "system" block (written to disk) + " so this is a running count of uptime since first boot! + " at 60Hz, 36 bits would last 36+ years! + .time: + lac s.tim " load high order bits +000610: 205557 + dac u.ac " return in AC +000611: 045631 + lac s.tim+1 " load low order bits +000612: 205560 + dac u.mq " return in MQ +000613: 045632 + jmp sysexit +000614: 600103 + .chdir: + jms argname " fetch argument as filename +000615: 102631 + jms iget " (re)read inode(?] +000616: 103017 + lac i.flags " get flags +000617: 205732 + and o20 " get directory bit +000620: 504134 + sna " is a directory? +000621: 741200 + jms error " no: return error to user +000622: 101531 + lac ii " yes: get i-number +000623: 205731 + dac u.cdir " save as current working directory +000624: 045646 + "** 01-s1.pdf page 10 + jmp okexit +000625: 600102 + " open system call + " sys open; filename_ptr; flags (0 for read, 1 for write) + " returns w/ "fd" in AC (or -1 if not found) + .open: + jms arg " get filename +000626: 102625 + dac 0f " save for namei +000627: 040640 + jms arg " get flags +000630: 102625 + sza " zero (read) +000631: 740200 + lac d1 " no: get write mode bit +000632: 204117 + sna " non-zero (write)? +000633: 741200 + lac d2 " no: get read mode bot +000634: 204120 + dac mode " save for access call +000635: 045500 + lac u.cdir " get current working directory +000636: 205646 + jms namei; 0:0 " search for file +000637: 102737 +000640: 000000 + jms error " error: return -1 +000641: 101531 + jms iget " load inode +000642: 103017 + jms access " check access (may return w/ error to user) +000643: 102312 + lac i.flags " get file flags +000644: 205732 + and o20 " get directory bit +000645: 504134 + sna " is directory? +000646: 741200 + jmp open1 " no, join common code +000647: 600715 + lac mode " get access mode +000650: 205500 + and d1 " get write bit +000651: 504117 + sna " write access? +000652: 741200 + jmp open1 " no, continue +000653: 600715 + lac u.uid " yes: get uid? +000654: 205644 + sma " negative? (-1 is superuser) +000655: 740100 + jms error " no: return error +000656: 101531 + jmp open1 " yes: join common code +000657: 600715 + .creat: + lac d1 " mode bit 1 (write) +000660: 204117 + dac mode " save for access call +000661: 045500 + jms arg " get name pointer +000662: 102625 + dac .+2 " save for copy +000663: 040665 + jms copy; ..; name; 4 " copy filename to "name" +000664: 101667 +000665: 000000 +000666: 005504 +000667: 000004 + lac u.cdir +000670: 205646 + jms namei; name " look up in current working directory +000671: 102737 +000672: 005504 + jmp 1f " not found +000673: 600711 + jms iget " file exists: read inode +000674: 103017 + jms access " check access (or return error to user) +000675: 102312 + lac i.flags " get flags +000676: 205732 + and o20 " get directory bit +000677: 504134 + sna " is a directory? +000700: 741200 + jmp .+4 " no: skip to truncate +000701: 600705 + lac u.uid " get user +000702: 205644 + sma " is super user? +000703: 740100 + jms error " no: error +000704: 101531 + jms itrunc " yes: truncate +000705: 102675 + cla +000706: 750000 + jms dacisize " clear i.size +000707: 103402 + jmp open1 +000710: 600715 + 1: + jms access " here if not found +000711: 102312 + lac u.ac " get access bits from user AC (zero for lock!) +000712: 205631 + and o17 " mask to permissions +000713: 504133 + jms icreat +000714: 102475 + open1: " common exit for open/creat + jms fassign " assign fd slot +000715: 102327 + jms error " none free, return -1 +000716: 101531 + jmp sysexit +000717: 600103 + "** 01-s1.pdf page 11 + .close: + jms finac " get fnode (open file) for fd in user AC +000720: 103370 + dzm f.flags " clear flags +000721: 145757 + jms fput " write fnode back to u.ofiles +000722: 102402 + jmp sysexit +000723: 600103 + .read: + jms arg " get argument +000724: 102625 + and o17777 " mask to address +000725: 504160 + dac u.base " save as I/O base +000726: 045651 + jms arg " get second argument +000727: 102625 + dac u.count " save as count +000730: 045652 + lac u.base " get base +000731: 205651 + jms betwen; o10000; o17777 " end inside user memory? +000732: 101643 +000733: 004156 +000734: 004160 + jms error " no: error +000735: 101531 + tad u.count " get end of buffer +000736: 345652 + jms betwen; u.base; o17777 " inside buffer/user memory? +000737: 101643 +000740: 005651 +000741: 004160 + jms error " no: error +000742: 101531 + dac u.limit " yes: save as I/O limit +000743: 045653 + 1: + jms finac " get fnode for fd in user AC +000744: 103370 + lac f.flags " get open file flags +000745: 205757 + and d1 " get write bit +000746: 504117 + sza " open for write? +000747: 740200 + jms error " yes: error +000750: 101531 + lac i.flags " get inode flags +000751: 205732 + and o40 " get special file bit +000752: 504136 + sna " special? +000753: 741200 + jmp 1f " no +000754: 600762 + iof " yes: disable interrupts +000755: 700002 + lac ii " get i number +000756: 205731 + tad swr " add to base instruction +000757: 341324 + dac .+1 +000760: 040761 + jmp .. i " dispatch to read routine +000761: 620000 + 1: + lac u.base " get user base +000762: 205651 + dac 1f+1 " save as iread base +000763: 040770 + lac u.count " get user count +000764: 205652 + dac 1f+2 " save as iread count +000765: 040771 + lac f.badd " get file offset +000766: 205760 + 1: + jms iread; ..; .. +000767: 103266 +000770: 000000 +000771: 000000 + jmp exitrw +000772: 601034 + " write system call: + " AC/ fd + " sys write; buffer; count + " AC/ count or -1 on error + .write: + jms arg " pick up buffer +000773: 102625 + and o17777 " mask to addr +000774: 504160 + dac u.base " save as I/O base +000775: 045651 + jms arg " pick up count +000776: 102625 + dac u.count " save as count +000777: 045652 + tad u.base " add base (get limit) +001000: 345651 + jms betwen; u.base; o17777 " check between base and end of memory +001001: 101643 +001002: 005651 +001003: 004160 + jms error " no: error +001004: 101531 + dac u.limit " yes: save as limit +001005: 045653 + jms finac " get fnode with fd from user AC +001006: 103370 + lac f.flags " get open file table flags +001007: 205757 + and d1 " open for write? +001010: 504117 + sna " if yes, skip +001011: 741200 + jms error " no: error +001012: 101531 + lac i.flags " get inode flags +001013: 205732 + and o40 " get device bit +001014: 504136 + "** 01-s1.pdf page 12 + sna " special? +001015: 741200 + jmp 1f " no +001016: 601024 + iof " yes, special: turn interrupts off +001017: 700002 + lac ii " get i number +001020: 205731 + tad sww " get write routine entry addr +001021: 341324 + dac .+1 +001022: 041023 + jmp .. i " dispatch to write routine +001023: 620000 + 1: " here with regular file + lac u.base " get base +001024: 205651 + dac 1f+1 " save as iwrite arg 1 +001025: 041032 + lac u.count " get count +001026: 205652 + dac 1f+2 " save as iwrite 2 +001027: 041033 + lac f.badd " get fd offset +001030: 205760 + 1: + jms iwrite; ..; .. " write to file +001031: 103257 +001032: 000000 +001033: 000000 + exitrw: " common exit for read/write system calls + dac u.ac " save return in user AC +001034: 045631 + tad f.badd +001035: 345760 + dac f.badd " update file offset +001036: 045760 + jms iput " release inode +001037: 103046 + jms fput " release fnode +001040: 102402 + jmp sysexit " return to user +001041: 600103 + "** 01-s1.pdf page 14 + " s3 + " search for user (process) table entry + " call: + " jms searchu; worker_routine_addr + " worker called with copy of a process table entry in "lu" + " can return directly (from caller of searchu) + " index location 8 points to next process table entry + searchu: 0 +001042: 000000 + lac searchu i " fetch argument +001043: 221042 + dac 9f+t+1 " in t1 +001044: 044207 + -mnproc " loop counter +001045: 777766 + dac 9f+t " in t0 +001046: 044206 + law ulist-1 " ulist ptr +001047: 765560 + dac 8 " in index 8 +001050: 040010 + 1: + lac 8 i " copy ulist entry to lu +001051: 220010 + dac lu +001052: 045514 + lac 8 i +001053: 220010 + dac lu+1 +001054: 045515 + lac 8 i +001055: 220010 + dac lu+2 +001056: 045516 + lac 8 i +001057: 220010 + dac lu+3 +001060: 045517 + jms 9f+t+1 i " call argument as subroutine +001061: 124207 + isz 9f+t " returned: loop done? +001062: 444206 + jmp 1b " no, do it again +001063: 601051 + isz searchu " skip argument +001064: 441042 + jmp searchu i +001065: 621042 + t = t+2 + 000003 + " look for a process with matching status + " jms lookfor; status + " found: ulist ptr in AC + " not found + lookfor: 0 +001066: 000000 + jms searchu; 1f +001067: 101042 +001070: 001074 + isz lookfor " skip argument +001071: 441066 + isz lookfor " give skip return +001072: 441066 + jmp lookfor i +001073: 621066 + 1: 0 " worker called by searchu +001074: 000000 + lac lu +001075: 205514 + rtl; rtl; and o7 " bits 0:2 of lu +001076: 742010 +001077: 742010 +001100: 504125 + sad lookfor i " match argument? +001101: 561066 + skp " yes +001102: 741000 + jmp 1b i " no, return, keep going +001103: 621074 + -3 +001104: 777775 + tad 8 " roll index 8 back to this entry +001105: 340010 + and o17777 +001106: 504160 + isz lookfor " skip lookfor argument +001107: 441066 + jmp lookfor i " non-skip return +001110: 621066 + " fork system call: + " sys fork + " return at +1 in parent, child pid in AC + " return at +2 in child, parent pid in AC + .fork: + jms lookfor; 0 " not-used " find an unused process slot +001111: 101066 +001112: 000000 + skp +001113: 741000 + jms error " none found- return error +001114: 101531 + dac 9f+t " save ulist ptr in t0 +001115: 044210 + isz uniqpid " generate new pid +001116: 445513 + lac uniqpid +001117: 205513 + dac u.ac " return in child pid in AC +001120: 045631 + law sysexit +001121: 760103 + dac u.swapret " return from system call when swapped back in +001122: 045650 + lac o200000 " change process status to out/ready (1->3) +001123: 204170 + tad u.ulistp i +001124: 365647 + dac u.ulistp i +001125: 065647 + jms dskswap; 07000 " swap parent out +001126: 102267 +001127: 007000 + lac 9f+t " get unused ulist slot back +001130: 204210 + dac u.ulistp " set ulist pointer +001131: 045647 + lac o100000 " mark child in/notready? (3->2) +001132: 204166 + xor u.ulistp i +001133: 265647 + dac u.ulistp i +001134: 065647 + lac u.pid " get old (parent) pid +001135: 205645 + "** 01-s1.pdf page 15 + dac u.ac " return parent pid in AC +001136: 045631 + lac uniqpid +001137: 205513 + dac u.pid " set child pid +001140: 045645 + isz 9f+t " advance to second word in process table +001141: 444210 + dac 9f+t i " set pid in process table +001142: 064210 + isz u.rq+8 " give skip return +001143: 445643 + dzm u.intflg " clear int flag +001144: 145713 + jmp sysexit " return in child process +001145: 600103 + t= t+1 + 000004 + badcal: " bad (unimplemented) system call + clon " clear any pending clock interrupt? +001146: 700044 + -1 +001147: 777777 + dac 7 " set location 7 to -1?! +001150: 040007 + " fall into "save" system call + " Ken says save files could be resumed, and used for checkpointing! + .save: " "sys save" system call + lac d1 " get inode 1 (core file?) +001151: 204117 + jms iget +001152: 103017 + cla +001153: 750000 + jms iwrite; 4096; 4096 " dump core +001154: 103257 +001155: 010000 +001156: 010000 + jms iwrite; userdata; 64 " and user area +001157: 103257 +001160: 005631 +001161: 000100 + jms iput +001162: 103046 + .exit: + lac u.dspbuf +001163: 205712 + sna " process using display? +001164: 741200 + jmp .+3 " no +001165: 601170 + law dspbuf " yes: get default display buffer +001166: 764446 + jms movdsp " move display +001167: 102615 + jms awake +001170: 101304 + lac u.ulistp i +001171: 225647 + and o77777 " mark process table entry free +001172: 504165 + dac u.ulistp i +001173: 065647 + isz u.ulistp +001174: 445647 + dzm u.ulistp i " clear pid in process table +001175: 165647 + jms swap " find a new process to run +001176: 100136 + " exit falls into "rmes" !!! + " rmes system call + " sys smes + " returns with message delivered, or error if process does not exit + " AC/ sending pid + " MQ/ message + .rmes: + jms awake +001177: 101304 + lac o100000 " mark this process "not ready" +001200: 204166 + tad u.ulistp i " by incrementing status +001201: 365647 + dac u.ulistp i +001202: 065647 + law 2 +001203: 760002 + tad u.ulistp +001204: 345647 + dac 9f+t " pointer to msg status in proc table +001205: 044211 + -1 +001206: 777777 + dac 9f+t i " set to -1 (waiting for message) +001207: 064211 + jms swap " switch processes +001210: 100136 + law 2 +001211: 760002 + tad u.ulistp +001212: 345647 + dac 9f+t +001213: 044211 + lac 9f+t i " get msg status word +001214: 224211 + cma " complement (get sender pid) +001215: 740001 + dac u.ac " return in user AC +001216: 045631 + dzm 9f+t i " clear status word +001217: 164211 + isz 9f+t +001220: 444211 + lac 9f+t i " get message +001221: 224211 + dac u.mq " return in user MQ +001222: 045632 + dzm 9f+t i " clear message +001223: 164211 + jmp sysexit +001224: 600103 + t = t+1 + 000005 + "** 01-s1.pdf page 16 + " smes system call + " AC/ pid + " MQ/ message + " sys smes + " returns with message delivered, or error if process does not exit + .smes: + lac u.ac " get pid from user AC +001225: 205631 + sna spa " >0? +001226: 741300 + jms error " no: error +001227: 101531 + jms searchu; 1f " search for process +001230: 101042 +001231: 001237 + law 2 +001232: 760002 + tad u.ulistp +001233: 345647 + dac 9f+t +001234: 044212 + dzm 9f+t i +001235: 164212 + jms error +001236: 101531 + 1: 0 " worker for searchu +001237: 000000 + lac lu+1 " get pid +001240: 205515 + sad u.ac " match? +001241: 545631 + skp " yes +001242: 741000 + jmp 1b i " no +001243: 621237 + lac lu+2 " get mailbox status +001244: 205516 + sad dm1 " -1? +001245: 544204 + jmp 1f " yes +001246: 601265 + lac o100000 " no: bump our process status (to notready?) +001247: 204166 + tad u.ulistp i +001250: 365647 + dac u.ulistp i +001251: 065647 + law 2 +001252: 760002 + tad u.ulistp +001253: 345647 + dac 9f+t +001254: 044212 + lac u.ac +001255: 205631 + dac 9f+t i +001256: 064212 + jms swap +001257: 100136 + law 2 +001260: 760002 + tad u.ulistp +001261: 345647 + dac 9f+t +001262: 044212 + dzm 9f+t i +001263: 164212 + jmp .smes +001264: 601225 + 1: + -3 +001265: 777775 + tad 8 +001266: 340010 + dac 9f+t " pointer to dest process ulist entry +001267: 044212 + lac o700000 " complement process status? marks ready?? +001270: 204200 + tad 9f+t i +001271: 364212 + dac 9f+t i +001272: 064212 + isz 9f+t +001273: 444212 + isz 9f+t " point to mailbox word? +001274: 444212 + lac u.pid " get our pid +001275: 205645 + cma " complement +001276: 740001 + dac 9f+t i " store in mailbox?? +001277: 064212 + isz 9f+t " advance to next word +001300: 444212 + lac u.mq " get user MQ +001301: 205632 + dac 9f+t i " save as message +001302: 064212 + jmp okexit +001303: 600102 + t = t+1 + 000006 + " wake up process hanging on rmes for current process?? + awake: 0 +001304: 000000 + jms searchu; 1f +001305: 101042 +001306: 001310 + jmp awake i +001307: 621304 + 1: 0 " searchu worker +001310: 000000 + lac u.pid " get caller pid +001311: 205645 + sad lu+2 " match mailbox status? +001312: 545516 + skp " yes +001313: 741000 + jmp 1b i " no, return +001314: 621310 + -3 +001315: 777775 + tad 8 " get pointer to process table entry +001316: 340010 + dac 9f+t " save in t0 +001317: 044213 + "** 01-s1.pdf page 17 + lac o700000 +001320: 204200 + tad 9f+t i " complement process status (mark ready)?? +001321: 364213 + dac 9f+t i +001322: 064213 + jmp 1b i " return from worker +001323: 621310 + t = t+1 + 000007 + swr: + sww: + jmp .-4 i +001324: 621320 + .halt; rttyi; rkbdi; rppti; .halt +001325: 001336 +001326: 001337 +001327: 001410 +001330: 001461 +001331: 001336 + .halt; wttyo; wdspo; wppto +001332: 001336 +001333: 001357 +001334: 001451 +001335: 001475 + .halt: jms halt +001336: 102254 + " read routine for ttyin special file + rttyi: + jms chkint1 +001337: 101535 + lac d1 " ** written d3 ttyin2 +001340: 204117 + jms getchar +001341: 101745 + jmp 1f +001342: 601353 + and o177 +001343: 504147 + jms betwen; o101; o132 " upper case? +001344: 101643 +001345: 004141 +001346: 004143 + skp " no +001347: 741000 + tad o40 " yes: convert to lower +001350: 344136 + alss 9 +001351: 660711 + jmp passone +001352: 601523 + 1: + jms sleep; sfiles+0 +001353: 102434 +001354: 005520 + jms swap +001355: 100136 + jmp rttyi +001356: 601337 + " write routine for ttyout special file + wttyo: + jms chkint1 +001357: 101535 + jms forall +001360: 102412 + sna +001361: 741200 + jmp fallr +001362: 602425 + lmq +001363: 652000 + lac sfiles+1 +001364: 205521 + spa +001365: 741100 + jmp 1f +001366: 601376 + xor o400000 +001367: 244173 + dac sfiles+1 +001370: 045521 + lacq +001371: 641002 + tls " load output buffer +001372: 700406 + sad o12 " newline? +001373: 544130 + jms putcr " yes, put CR as well +001374: 104014 + jmp fallr +001375: 602425 + 1: + lacq +001376: 641002 + dac char +001377: 045511 + lac d2 "** written: d6 ttyout +001400: 204120 + jms putchar +001401: 101730 + skp +001402: 741000 + jmp fallr +001403: 602425 + jms sleep; sfiles+1 +001404: 102434 +001405: 005521 + jms swap +001406: 100136 + jmp wttyo +001407: 601357 + " read routine for (display) "keyboard" special file + rkbdi: + jms chkint1 +001410: 101535 + lac d3 +001411: 204121 + jms getchar +001412: 101745 + "** 01-s1.pdf page 18 + jmp 3f +001413: 601445 + lmq +001414: 652000 + and o155 +001415: 504146 + sad o55 +001416: 544137 + jmp 1f " -/=? map to =?-/ ??? +001417: 601425 + lacq +001420: 641002 + and o137 +001421: 504145 + sad o134 +001422: 544144 + skp " \| map to Ll ??? +001423: 741000 + jmp 2f +001424: 601430 + 1: + lacq +001425: 641002 + xor o20 +001426: 244134 + lmq +001427: 652000 + 2: + lacq +001430: 641002 + dac u.limit +001431: 045653 + 1: + jms chkint1 +001432: 101535 + lac u.limit +001433: 205653 + jms dspput +001434: 102540 + jmp 1f +001435: 601442 + jms sleep; sfiles+6 +001436: 102434 +001437: 005526 + jms swap +001440: 100136 + jmp 1b +001441: 601432 + 1: + lac u.limit +001442: 205653 + alss 9 +001443: 660711 + jmp passone +001444: 601523 + 3: + jms sleep; sfiles+2 +001445: 102434 +001446: 005522 + jms swap +001447: 100136 + jmp rkbdi +001450: 601410 + " write routine for (graphic) "display" special file + wdspo: + jms chkint1 +001451: 101535 + jms forall +001452: 102412 + jms dspput " put char (fallr "returns" here) +001453: 102540 + jmp fallr " go back for next (continuation!) +001454: 602425 + jms sleep; sfiles+6 +001455: 102434 +001456: 005526 + jms swap +001457: 100136 + jmp wdspo +001460: 601451 + " read routine for paper tape reader special file + rppti: + lac d4 +001461: 204122 + jms getchar +001462: 101745 + jmp .+3 +001463: 601466 + alss 9 +001464: 660711 + jmp passone +001465: 601523 + lac sfiles+3 +001466: 205523 + sma +001467: 740100 + rsa +001470: 700104 + 1: + jms sleep; sfiles+3 +001471: 102434 +001472: 005523 + jms swap +001473: 100136 + jmp rppti +001474: 601461 + "** 01-s1.pdf page 19 + " write routine for paper tape punch special file + wppto: + jms forall +001475: 102412 + sna +001476: 741200 + jmp fallr +001477: 602425 + lmq +001500: 652000 + lac sfiles+4 +001501: 205524 + spa +001502: 741100 + jmp 1f +001503: 601511 + xor o400000 +001504: 244173 + dac sfiles+4 +001505: 045524 + lacq +001506: 641002 + psa +001507: 700204 + jmp fallr +001510: 602425 + 1: + lacq +001511: 641002 + dac char +001512: 045511 + lac d5 +001513: 204123 + jms putchar +001514: 101730 + skp +001515: 741000 + jmp fallr +001516: 602425 + jms sleep; sfiles+4 +001517: 102434 +001520: 005524 + jms swap +001521: 100136 + jmp wppto +001522: 601475 + " common exit for special file input + passone: + sad o4000 " CTRL/D? +001523: 544154 + jmp okexit " yes: return zero +001524: 600102 + dac u.base i " no: save for user +001525: 065651 + lac d1 " return 1 +001526: 204117 + dac u.ac +001527: 045631 + jmp sysexit +001530: 600103 + error: 0 +001531: 000000 + -1 +001532: 777777 + dac u.ac +001533: 045631 + jmp sysexit +001534: 600103 + chkint1: 0 +001535: 000000 + dzm .insys +001536: 144066 + jms chkint +001537: 100320 + skp +001540: 741000 + jmp .save +001541: 601151 + -1 +001542: 777777 + dac .insys +001543: 044066 + jmp chkint1 i +001544: 621535 + "** 01-s1.pdf page 21 + " s4 + " allocate a free disk block for a file (data or indirect) + alloc: 0 +001545: 000000 + -1 " Decrement the # free block numbers in the cache +001546: 777777 + tad s.nfblks " kept at s.fblks. Jump to 1f if no free blocks left. +001547: 345543 + spa +001550: 741100 + jmp 1f +001551: 601566 + dac s.nfblks " Update the count of free block numbers +001552: 045543 + tad fblksp +001553: 344106 + jms laci +001554: 101635 + dac 9f+t +001555: 044214 + jms copyz; dskbuf; 64 +001556: 101712 +001557: 007700 +001560: 000100 + lac 9f+t +001561: 204214 + jms dskwr +001562: 102146 + dzm .savblk +001563: 144072 + lac 9f+t +001564: 204214 + jmp alloc i " Return from routine +001565: 621545 + 1: + lac s.nxfblk +001566: 205542 + sna +001567: 741200 + jms halt " OUT OF DISK +001570: 102254 + dac s.fblks +001571: 045544 + jms dskrd +001572: 102116 + lac dskbuf +001573: 207700 + dac s.nxfblk +001574: 045542 + jms copy; dskbuf+1; s.fblks+1; 9 +001575: 101667 +001576: 007701 +001577: 005545 +001600: 000011 + lac d10 +001601: 204130 + dac s.nfblks +001602: 045543 + jmp alloc+1 +001603: 601546 + " free the disk block whose number is in AC + free: 0 +001604: 000000 + lmq +001605: 652000 + lac s.nfblks +001606: 205543 + sad d10 +001607: 544130 + jmp 1f +001610: 601620 + tad fblksp +001611: 344106 + dac 9f+t +001612: 044214 + lacq +001613: 641002 + dac 9f+t i +001614: 064214 + dzm .savblk +001615: 144072 + isz s.nfblks +001616: 445543 + jmp free i +001617: 621604 + 1: + lac s.nxfblk +001620: 205542 + dac dskbuf +001621: 047700 + jms copy; s.fblks+1; dskbuf+1; 9 +001622: 101667 +001623: 005545 +001624: 007701 +001625: 000011 + lacq +001626: 641002 + dac s.nxfblk +001627: 045542 + jms dskwr +001630: 102146 + dzm .savblk +001631: 144072 + lac d1 +001632: 204117 + dac s.nfblks +001633: 045543 + jmp free i " Return from the routine +001634: 621604 + t = t+1 + 000010 + " load AC indirect (without using indirect!) + " AC/ address + " jms laci + " AC/ contents of address + laci: 0 +001635: 000000 + and o17777 " clear everything but addr +001636: 504160 + tad o200000 " make into "lac addr" +001637: 344170 + dac .+1 +001640: 041641 + lac .. " fetch +001641: 200000 + jmp laci i " return +001642: 621635 + "** 01-s1.pdf page 22 + " skip if AC between two values (inclusive) + " jms betwen; low_ptr; high_ptr + "+ " + " listing has an alternate written in + " (which would require 'lac ptr' instead of 'ptr' args?) + betwen: 0 +001643: 000000 + lmq cmq " get ~AC in MQ +001644: 652004 + lac betwen i " get low_ptr +001645: 221643 + dac 9f+t +001646: 044215 + isz betwen " skip low_ptr +001647: 441643 + lacq " get ~AC (-AC-1) from MQ +001650: 641002 + tad 9f+t i " get low-AC-1 +001651: 364215 + sma " negative (AC >= low)? +001652: 740100 + jmp 1f " no, return w/o skip +001653: 601663 + lac betwen i " fetch high_ptr +001654: 221643 + dac 9f+t +001655: 044215 + isz betwen " skip high_ptr +001656: 441643 + lacq " get -AC-1 +001657: 641002 + tad 9f+t i " add to high value (high-AC-1) +001660: 364215 + cma " complement (AC-high) +001661: 740001 + spa sna " AC-high <= 0? +001662: 741300 + 1: + isz betwen " no: give happy (skip) return +001663: 441643 + lacq " restore ~AC +001664: 641002 + cma " restore AC +001665: 740001 + jmp betwen i " return w/o skip +001666: 621643 + " copy memory + " call: + " jms copy; src; dest; count + copy: 0 +001667: 000000 + -1 +001670: 777777 + tad copy i +001671: 361667 + dac 8 +001672: 040010 + isz copy +001673: 441667 + -1 +001674: 777777 + tad copy i +001675: 361667 + dac 9 +001676: 040011 + isz copy +001677: 441667 + -1 +001700: 777777 + tad copy i +001701: 361667 + cma +001702: 740001 + dac 9f+t +001703: 044215 + isz copy +001704: 441667 + 1: + lac 8 i +001705: 220010 + dac 9 i +001706: 060011 + isz 9f+t +001707: 444215 + jmp 1b +001710: 601705 + jmp copy i +001711: 621667 + " copy zeroes (clear memory) + " call: + " jms copyz; pointer; count + copyz: 0 +001712: 000000 + -1 +001713: 777777 + tad copyz i " get call PC +001714: 361712 + dac 8 " save in index (pre-increments) +001715: 040010 + isz copyz " skip pointer +001716: 441712 + -1 +001717: 777777 + tad copyz i " get count-1 +001720: 361712 + cma " get negative count +001721: 740001 + dac 9f+t " save in t0 +001722: 044215 + isz copyz " skip count +001723: 441712 + 1: + dzm 8 i " zero word +001724: 160010 + isz 9f+t " done? +001725: 444215 + jmp 1b " no: loop +001726: 601724 + jmp copyz i " return +001727: 621712 + t = t+1 + 000011 + " put queued character + " CALLED FROM PI: AVOIDS INDIRECT!! + " queue number in AC + putchar: 0 +001730: 000000 + "** 01-s1.pdf page 23 + dac 9f+t +001731: 044216 + cla +001732: 750000 + jms takeq +001733: 101757 + jmp putchar i +001734: 621730 + tad o40001 +001735: 344163 + dac .+4 +001736: 041742 + lac 9f+t +001737: 204216 + jms putq +001740: 102011 + lac char +001741: 205511 + dac q2+1 .. +001742: 044301 + isz putchar +001743: 441730 + jmp putchar i +001744: 621730 + t = t+1 + 000012 + " get queued character + " CALLED FROM PI: AVOIDS INDIRECT!! + " queue number in AC: + " 1: tty input + " 2: tty output + " 3: display keyboard + " 4: paper tape reader + " 5: paper tape punch + getchar: 0 +001745: 000000 + jms takeq +001746: 101757 + jmp i getchar +001747: 621745 + tad o200001 +001750: 344171 + dac .+3 +001751: 041754 + cla +001752: 750000 + jms putq +001753: 102011 + lac q2+1 .. +001754: 204301 + isz getchar +001755: 441745 + jmp i getchar +001756: 621745 + " CALLED FROM PI: AVOIDS INDIRECT!! + takeq: 0 +001757: 000000 + rcl +001760: 744010 + tad lacq1 +001761: 344110 + dac .+7 +001762: 041771 + tad o640000 +001763: 344177 + dac .+17 +001764: 042005 + tad d1 +001765: 344117 + dac .+14 +001766: 042004 + tad o500000 +001767: 344174 + dac .+5 +001770: 041775 + lac q1 .. +001771: 204260 + sna +001772: 741200 + jmp takeq i +001773: 621757 + dac lnkaddr +001774: 045510 + sad q1+1 .. +001775: 544261 + jmp .+5 +001776: 602003 + tad o200000 +001777: 344170 + dac .+1 +002000: 042001 + lac q2 .. +002001: 204300 + jmp .+3 +002002: 602005 + cla +002003: 750000 + dac q1+1 .. +002004: 044261 + dac q1 .. +002005: 044260 + isz takeq +002006: 441757 + lac lnkaddr +002007: 205510 + jmp i takeq +002010: 621757 + putq: 0 +002011: 000000 + rcl +002012: 744010 + tad dacq1 +002013: 344107 + dac .+14 +002014: 042032 + tad d1 +002015: 344117 + dac .+13 +002016: 042033 + tad o140000 +002017: 344167 + dac .+1 +002020: 042021 + lac q1-1 .. +002021: 204257 + "** 01-s1.pdf page 24 + sna +002022: 741200 + jmp .+6 +002023: 602031 + tad o40000 +002024: 344162 + dac .+2 +002025: 042027 + lac lnkaddr +002026: 205510 + dac q2 .. +002027: 044300 + jmp .+3 +002030: 602033 + lac lnkaddr +002031: 205510 + dac q1 .. +002032: 044260 + dac q1+1 .. +002033: 044261 + jmp putq i +002034: 622011 + srcdbs: 0 +002035: 000000 + dac 9f+t+2 "* lmq +002036: 044221 + -ndskbs +002037: 777774 + dac 9f+t +002040: 044217 + law dskbs "* -1 dac 8 written +002041: 765067 + dac 9f+t+1 "* lacq +002042: 044220 + 1: + lac 9f+t+2 "** crossed out +002043: 204221 + sad 9f+t+1 "** isz 8 written +002044: 544220 + jmp srcdbs i +002045: 622035 + law 65 "** ??? crossed out +002046: 760101 + tad 9f+t+1 "** crossed out isz 8 written +002047: 344220 + isz 9f+t+1 +002050: 444220 + isz 9f+t +002051: 444217 + jmp 1b +002052: 602043 + isz srcdbs +002053: 442035 + jmp srcdbs i +002054: 622035 + collapse: 0 +002055: 000000 + cla +002056: 750000 + jms srcdbs +002057: 102035 + jmp 1f +002060: 602063 + law dskbs +002061: 765067 + dac 9f+t+1 "** 9f+t+1 crossed out: 8 written in +002062: 044220 + 1: + lac 9f+t+1 "** 9f+t+1 crossed out: 8 written in +002063: 204220 + dac 0f+1 +002064: 042100 + tad d65 "** crossed out: d2-- original obscured +002065: 344141 + dac 0f +002066: 042077 + cma +002067: 740001 + tad d1 +002070: 344117 + tad edskbsp +002071: 345473 + and o17777 +002072: 504160 + sna +002073: 741200 + jmp 0f+3 +002074: 602102 + dac 0f+2 +002075: 042101 + jms copy; 0:..; ..; .. +002076: 101667 +002077: 000000 +002100: 000000 +002101: 000000 + -65 +002102: 777677 + tad edskbsp +002103: 345473 + dac 9f+t +002104: 044217 + tad d1 +002105: 344117 + dac 0f +002106: 042113 + lac dskaddr +002107: 205512 + dac 9f+t i +002110: 064217 + jms copy; dskbuf; 0:..; 64 +002111: 101667 +002112: 007700 +002113: 000000 +002114: 000100 + jmp collapse i +002115: 622055 + dskrd: 0 +002116: 000000 + jms betwen; d2; d7999 +002117: 101643 +002120: 004120 +002121: 004155 + "** 01-s1.pdf page 25 + jms halt +002122: 102254 + sad dskaddr +002123: 545512 + jmp dskrd i +002124: 622116 + dac dskaddr +002125: 045512 + jms srcdbs +002126: 102035 + jmp 1f +002127: 602134 + lac dskaddr +002130: 205512 + jms dskio; 06000 +002131: 102162 +002132: 006000 + jmp 2f +002133: 602144 + 1: + dzm 9f+t+1 i +002134: 164220 + law 1 +002135: 760001 + tad 9f+t+1 +002136: 344220 + dac .+2 +002137: 042141 + jms copy; ..; dskbuf; 64 +002140: 101667 +002141: 000000 +002142: 007700 +002143: 000100 + 2: + jms collapse +002144: 102055 + jmp dskrd i +002145: 622116 + " write a file block (data, inode or indirect) + " AC/ block + dskwr: 0 +002146: 000000 + jms betwen; d2; d7999 +002147: 101643 +002150: 004120 +002151: 004155 + jms halt +002152: 102254 + jms dskio; 07000 +002153: 102162 +002154: 007000 + lac dskaddr +002155: 205512 + jms srcdbs +002156: 102035 + dzm 9f+t+1 i +002157: 164220 + jms collapse +002160: 102055 + jmp dskwr i +002161: 622146 + t = t+3 + 000015 + " AC/ block + " jms dskio; dsld_bits + dskio: 0 +002162: 000000 + dac dskaddr +002163: 045512 + cll; idiv; 80 +002164: 744000 +002165: 653323 +002166: 000120 + dac 9f+t +002167: 044222 + lacq +002170: 641002 + idiv; 10 +002171: 653323 +002172: 000012 + dac 9f+t+1 +002173: 044223 + lls 22 +002174: 640626 + xor 9f+t+1 +002175: 244223 + als 8 +002176: 640710 + dac 9f+t+1 +002177: 044223 + lac 9f+t +002200: 204222 + idiv; 10 +002201: 653323 +002202: 000012 + dac 9f+t +002203: 044222 + lls 22 +002204: 640626 + xor 9f+t +002205: 244222 + xor 9f+t+1 +002206: 244223 + xor o200000 +002207: 244170 + dac 9f+t +002210: 044222 + jms dsktrans; -64; dskbuf; 9f+t; dskio +002211: 102220 +002212: 777700 +002213: 007700 +002214: 004222 +002215: 002162 + isz dskio +002216: 442162 + jmp dskio i +002217: 622162 + t = t+1 + 000016 + " called with: + " jms dsktrans; -WC; MAC; addr_ptr?; dsld_ptr + dsktrans: 0 +002220: 000000 + -10 +002221: 777766 + dac 9f+t +002222: 044223 + 1: + -1 +002223: 777777 + tad dsktrans +002224: 342220 + dac 12 +002225: 040014 + "** 01-s1.pdf page 26 + dscs " clear status register +002226: 707141 + lac 12 i +002227: 220014 + dslw " load WC +002230: 707124 + lac 12 i +002231: 220014 + dslm " load MAC +002232: 707142 + lac 12 i +002233: 220014 + jms laci +002234: 101635 + dsld " load TA & SA +002235: 707104 + dzm .dskb +002236: 144074 + lac 12 i +002237: 220014 + jms laci +002240: 101635 + jms laci +002241: 101635 + dsls " load status +002242: 707144 + lac .dskb " check for interrupt +002243: 204074 + sna +002244: 741200 + jmp .-2 +002245: 602243 + lac .dske " get status from interrupt +002246: 204075 + sma +002247: 740100 + jmp 12 i " return +002250: 620014 + isz 9f+t +002251: 444223 + jmp 1b +002252: 602223 + jms halt " 10 disk errors +002253: 102254 + t = t+1 + 000017 + halt: 0 +002254: 000000 + isz 9f+t " spin for a while (process interrupts) +002255: 444224 + jmp .-1 +002256: 602255 + iof " disable interrupts +002257: 700002 + hlt " halt +002260: 740040 + jms copy; law; 4096; 4096 " continued: copy system up to user memory? +002261: 101667 +002262: 760000 +002263: 010000 +002264: 010000 + hlt; jmp .-1 " halt for good +002265: 740040 +002266: 602265 + t = t+1 + 000020 + "** 01-s1.pdf page 28 + " s5 + " read/write a process from/to swap space + " call: + " AC/ first word of process table + " jms dskswap; DSLD bits + dskswap: 0 +002267: 000000 + cll; als 3 " get process disk address +002270: 744000 +002271: 640703 + dac 9f+t " save in t0 +002272: 044225 + jms dsktrans; -64; userdata; 9f+t; dskswap " read/write user area +002273: 102220 +002274: 777700 +002275: 005631 +002276: 004225 +002277: 002267 + lac 9f+t " get swap addr back +002300: 204225 + tad o20 " advance by 16?? +002301: 344134 + dac 9f+t " save +002302: 044225 + jms dsktrans; -4096; 4096; 9f+t; dskswap " read/write user memory +002303: 102220 +002304: 770000 +002305: 010000 +002306: 004225 +002307: 002267 + isz dskswap " skip bits +002310: 442267 + jmp dskswap i " return +002311: 622267 + t = t+1 + 000021 + access: 0 +002312: 000000 + lac i.flags " get inode flags +002313: 205732 + lmq " save in MQ +002314: 652000 + lac u.uid " get user id +002315: 205644 + spa " negative? +002316: 741100 + jmp access i " yes: super user, return +002317: 622312 + sad i.uid " compare to file owner +002320: 545742 + lrs 2 " same: shift flags down two +002321: 640502 + lacq " get inode flags back +002322: 641002 + and mode " AND with mode from system call +002323: 505500 + sza " access allowed? +002324: 740200 + jmp access i " yes: return +002325: 622312 + jms error " no: return error from system call +002326: 101531 + fassign: 0 +002327: 000000 + -10 " loop count +002330: 777766 + dac 9f+t " in t0 +002331: 044226 + 1: + lac 9f+t " get count +002332: 204226 + tad d10 " turn into fd +002333: 344130 + jms fget " fetch open file into "fnode" +002334: 102360 + jms halt " will not happen +002335: 102254 + lac f.flags " get fnode flags +002336: 205757 + sma " sign bit set (active)? +002337: 740100 + jmp 1f " no: free +002340: 602344 + isz 9f+t " increment loop count & loop until zero +002341: 444226 + jmp 1b +002342: 602332 + jmp fassign i +002343: 622327 + 1: + lac mode " get mode from system call +002344: 205500 + xor o400000 " set sign bit +002345: 244173 + dac f.flags " save in fnode +002346: 045757 + lac ii " get i-number +002347: 205731 + dac f.i " save in fnode +002350: 045761 + lac 9f+t +002351: 204226 + tad d10 " get fd +002352: 344130 + dac u.ac " return in user AC +002353: 045631 + dzm f.badd " clear file offset in fnode +002354: 145760 + jms fput " copy fnode back into u.ofiles +002355: 102402 + isz fassign " give skip return +002356: 442327 + jmp fassign i +002357: 622327 + t = t+1 + 000022 + " load fnode (open file entry) from u.ofiles + " AC/ user fd + " jms fget + " bad fd + " return with fnode set + fget: 0 +002360: 000000 + jms betwen; d0; d9 " fd 0..9? +002361: 101643 +002362: 004116 +002363: 004127 + jmp fget i " no, return +002364: 622360 + cll; mul; 3 " multiply by three +002365: 744000 +002366: 653122 +002367: 000003 + lacq +002370: 641002 + "** 01-s1.pdf page 29 + tad ofilesp " get pointer into u.ofiles +002371: 344101 + dac 9f+t " save in t0 +002372: 044227 + dac .+2 " save as copy source +002373: 042375 + jms copy; ..; fnode; 3 " copy to "fnode" +002374: 101667 +002375: 000000 +002376: 005757 +002377: 000003 + isz fget " give skip return +002400: 442360 + jmp fget i +002401: 622360 + " copy fnode back to u.ofiles + " uses temp value set by "fget" + " (fget and fput calls must be paired) + fput: 0 +002402: 000000 + lac 9f+t +002403: 204227 + dac .+3 +002404: 042407 + jms copy; fnode; ..; 3 +002405: 101667 +002406: 005757 +002407: 000000 +002410: 000003 + jmp fput i +002411: 622402 + t = t+1 + 000023 + " helper for special device write routines + " return to caller with next character to write: + " when done return character count to user. + forall: 0 +002412: 000000 + lac u.base +002413: 205651 + sad u.limit +002414: 545653 + jmp 1f " done +002415: 602431 + lac u.base " get base pointer (again?) +002416: 205651 + ral " rotate MSB into LINK +002417: 740010 + lac u.base i " fetch word via base pointer +002420: 225651 + snl " link set? +002421: 740400 + lrs 9 " no: get low 9 bits +002422: 640511 + and o777 " mask to 9 bits +002423: 504152 + jmp forall i " return char +002424: 622412 + fallr: " jump here for subsequent characters + lac u.base " get base +002425: 205651 + add o400000 " advance pointer +002426: 304173 + dac u.base " start from top +002427: 045651 + jmp forall+1 +002430: 602413 + 1: + lac u.count +002431: 205652 + dac u.ac +002432: 045631 + jmp sysexit +002433: 600103 + " wait for a condition variable + " call: + " jmr sleep; sfiles+N + sleep: 0 +002434: 000000 + law ulist-1 " pointer to process table +002435: 765560 + dac 8 " in index register +002436: 040010 + lac o200000 +002437: 204170 + lmq " get 200000 in MQ +002440: 652000 + 1: + lac u.ulistp i " get current process status word +002441: 225647 + sad 8 i " compare to next process table entry +002442: 560010 + jmp 1f " match +002443: 602452 + isz 8 " no match: skip other 3 words of process table +002444: 440010 + isz 8 +002445: 440010 + isz 8 +002446: 440010 + cla; lrs 1 " shift MQ down one +002447: 750000 +002450: 640501 + jmp 1b " loop +002451: 602441 + 1: + tad o100000 " mark process not ready +002452: 344166 + dac u.ulistp i +002453: 065647 + lac sleep i " get sleep variable pointer +002454: 222434 + dac 9f+t +002455: 044230 + lac 9f+t i " get sleep variable contents +002456: 224230 + omq " or in MQ (bit vector of processes waiting) +002457: 640002 + dac 9f+t i " save +002460: 064230 + isz sleep " skip sleep variable pointer +002461: 442434 + jmp sleep i +002462: 622434 + t = t+1 + 000024 + "** 01-s1.pdf page 30 + " look for a free directory entry?? + dslot: 0 +002463: 000000 + dzm di +002464: 145746 + skp +002465: 741000 + 1: + isz di +002466: 445746 + lac di +002467: 205746 + jms dget " get directory entry +002470: 103104 + lac d.i " get i number +002471: 205747 + sza " zero (free)? +002472: 740200 + jmp 1b " no keep looking +002473: 602466 + jmp dslot i " yes: return index +002474: 622463 + " called with: + " AC/ mode + " name/ file name + icreat: 0 +002475: 000000 + dac 9f+t " save mode in t0 +002476: 044231 + jms dslot +002477: 102463 + lac o20 " look for a free inode starting at 17 +002500: 204134 + dac ii +002501: 045731 + 1: + isz ii +002502: 445731 + lac ii +002503: 205731 + jms iget +002504: 103017 + lac i.flags +002505: 205732 + spa " "in use" bit bit clear? +002506: 741100 + jmp 1b " no, guess again +002507: 602502 + lac ii +002510: 205731 + dac d.i +002511: 045747 + jms copy; name; d.name; 4 +002512: 101667 +002513: 005504 +002514: 005750 +002515: 000004 + isz s.uniq " get a new unique number +002516: 445556 + lac s.uniq +002517: 205556 + dac d.uniq " save in directory entry +002520: 045754 + dac i.uniq " and inode +002521: 045745 + lac 9f+t " get mode +002522: 204231 + xor o400000 " set "in use" +002523: 244173 + dac i.flags +002524: 045732 + lac u.uid " get user +002525: 205644 + dac i.uid " set owner +002526: 045742 + -1 +002527: 777777 + dac i.nlks " -1 links?! +002530: 045743 + dzm i.size " empty +002531: 145744 + jms copyz; i.dskps; 7 " clear disk block numbers +002532: 101712 +002533: 005733 +002534: 000007 + jms iput " write inode +002535: 103046 + jms dput " write directory entry +002536: 103136 + jmp icreat i +002537: 622475 + t = t+1 + 000025 + " output character to display + dspput: 0 +002540: 000000 + and o177 " mask to 7 bits +002541: 504147 + sna +002542: 741200 + jmp i dspput " discard NUL +002543: 622540 + sad o14 " Form Feed? +002544: 544131 + jmp 1f " yes +002545: 602560 + lmq " save char in MQ +002546: 652000 + sad o12 " newline? +002547: 544130 + jms dspnl " yes +002550: 102574 + lac dsploc i " get display word +002551: 224444 + sad o400000 " TRAP? +002552: 544173 + jmp dspleft " yes (first character) +002553: 602562 + omq " no: or in second character +002554: 640002 + dac dsploc i " save both characters +002555: 064444 + isz dsploc " advance display pointer +002556: 444444 + jmp i dspput +002557: 622540 + "** 01-s1.pdf page 31 + 1: " here on form feed + jms dspinit " clear display +002560: 102606 + jmp dspput i +002561: 622540 + dspleft: + lac dsploc " get display pointer +002562: 204444 + sad edspbuf " end of the buffer? +002563: 544104 + jmp 1f " yes: light up a button!? +002564: 602602 + dac 8 " no: store in index +002565: 040010 + lac o400000 " get TRAP instruction +002566: 204173 + dac 8 i " store as next +002567: 060010 + cla; llss 18+7 " shift MQ upto "char1" position +002570: 750000 +002571: 660631 + dac dsploc i " store word with char1 +002572: 064444 + jmp dspput i +002573: 622540 + dspnl: 0 " only called once! +002574: 000000 + lac dsplno " get display line number +002575: 204445 + sad d33 " 33? +002576: 544142 + jmp 1f " yes: light a button! +002577: 602602 + isz dsplno " no: increment line number +002600: 444445 + jmp dspnl i +002601: 622574 + 1: + lac o2000 " get bit for push button 7 +002602: 204153 + wbl " write button lights +002603: 704424 + isz dspput +002604: 442540 + jmp dspput i +002605: 622540 + dspinit: 0 +002606: 000000 + lac dspbufp3 " get pointer to dspbuf+3 +002607: 204105 + dac dsploc " store location +002610: 044444 + lac o400000 " display "TRAP" instruction (end of list) +002611: 204173 + dac dspbuf+3 " save in buffer +002612: 044451 + dzm dsplno " clear display line number +002613: 144445 + jmp dspinit i +002614: 622606 + " "move display" (change display buffer pointer) + " called with new buffer pointer in AC?? + movdsp: 0 +002615: 000000 + iof +002616: 700002 + cdf +002617: 700501 + dac dspbufp +002620: 045475 + -1 +002621: 777777 + dac .dspb +002622: 045536 + ion +002623: 700042 + jmp movdsp i +002624: 622615 + " fetch user argument from word after "sys" call, return in AC + arg: 0 +002625: 000000 + lac u.rq+8 i " fetch word after return PC +002626: 225643 + isz u.rq+8 " bump PC +002627: 445643 + jmp arg i +002630: 622625 + " fetch user pathname argument from pointer word after "sys" call + " into "name" and look it up (in current working directory) + " if lookup fails: returns error to user (not caller) + " if lookup OK: returns with file i-inode read (into "inode") + " and i-number in AC + argname: 0 +002631: 000000 + jms arg " fetch name pointer +002632: 102625 + dac .+2 " save as copy source +002633: 042635 + jms copy; ..; name; 4 " copy to "name" +002634: 101667 +002635: 000000 +002636: 005504 +002637: 000004 + lac u.cdir " get CWD +002640: 205646 + jms namei; name " look up file +002641: 102737 +002642: 005504 + jms error " failed: return error directly to user +002643: 101531 + jmp argname i +002644: 622631 + seektell: 0 +002645: 000000 + jms arg +002646: 102625 + dac u.base +002647: 045651 + "** 01-s1.pdf page 32 + jms arg +002650: 102625 + dac u.limit +002651: 045653 + jms finac +002652: 103370 + lac u.limit +002653: 205653 + sna +002654: 741200 + jmp seektell i +002655: 622645 + sad d1 +002656: 544117 + jmp .+3 +002657: 602662 + lac i.size +002660: 205744 + jmp seektell i +002661: 622645 + lac f.badd +002662: 205760 + jmp seektell i +002663: 622645 + " system call helper + " fetch system call argument name pointer from after "sys" call + " read inode; if current user is not owner, return error to user + isown: 0 +002664: 000000 + jms argname +002665: 102631 + jms iget +002666: 103017 + lac u.uid " get user id +002667: 205644 + sma " super user? +002670: 740100 + sad i.uid " no: does user own file? +002671: 545742 + skp " yes, or super user +002672: 741000 + jms error " not super user, not owner: return error +002673: 101531 + jmp isown i +002674: 622664 + "** 01-s1.pdf page 34 + " s6 + itrunc: 0 +002675: 000000 + -7 " loop 7 times +002676: 777771 + dac 9f+t " in t0 +002677: 044232 + lac idskpp " pointer to inode block numbers +002700: 204102 + dac 9f+t+1 " save in t1 +002701: 044233 + 1: " top of loop for inode blocks + lac 9f+t+1 i " fetch next block number +002702: 224233 + sna " allocated? +002703: 741200 + jmp 4f " no +002704: 602730 + lac i.flags " check flags +002705: 205732 + and o200000 +002706: 504170 + sna " large file? +002707: 741200 + jmp 3f " no +002710: 602725 + -64 " loop 64 times +002711: 777700 + dac 9f+t+2 " save count in t2 +002712: 044234 + lac dskbufp " get pointer to dskbuf +002713: 204103 + dac 9f+t+3 " in t3 +002714: 044235 + 2: " inner loop for indirect blocks + lac 9f+t+1 i " get indirect block number +002715: 224233 + jms dskrd " read it +002716: 102116 + lac 9f+t+3 i " read block number from indirect +002717: 224235 + sza " free? +002720: 740200 + jms free " no: free it +002721: 101604 + isz 9f+t+3 " increment pointer into indirect block +002722: 444235 + isz 9f+t+2 " increment loop counter, skip if done +002723: 444234 + jmp 2b " not done: loop +002724: 602715 + 3: " here with small file + lac 9f+t+1 i " load block number +002725: 224233 + jms free " free it +002726: 101604 + dzm 9f+t+1 i " clear block number +002727: 164233 + 4: " bottom of loop for inode block ptrs + isz 9f+t+1 " increment block pointer +002730: 444233 + isz 9f+t " increment count, skip if done +002731: 444232 + jmp 1b " not done +002732: 602702 + lac i.flags +002733: 205732 + and o577777 " clear large file flag +002734: 504175 + dac i.flags +002735: 045732 + jmp itrunc i +002736: 622675 + t = t+4 + 000031 + " Given a pointer to a 4-word filename after + " the jms to namei, and with AC holding the + " i-num of the directory it is in, return the + " i-number of the filename (and skip) + " return zero in AC if not found (no skip) + namei: 0 +002737: 000000 + jms iget " Get the inode from the i-num in the AC +002740: 103017 + -1 +002741: 777777 + tad namei i " get argptr-1 +002742: 362737 + dac 9f+t+1 " save in t1 +002743: 044237 + isz namei " skip over argument +002744: 442737 + lac i.flags +002745: 205732 + and o20 " get directory bit +002746: 504134 + sna " Is this a directory? +002747: 741200 + jmp namei i " no: return without skip +002750: 622737 + -8 +002751: 777770 + tad i.size " Subtract 8 from the file's size +002752: 345744 + cma +002753: 740001 + lrss 3 +002754: 660503 + dac 9f+t " negative count of directory entries in t0 +002755: 044236 + sna " any? +002756: 741200 + jmp namei i " no: return without skip +002757: 622737 + dzm di " Store zero in di +002760: 145746 + 1: + lac di +002761: 205746 + "** 01-s1.pdf page 35 + jms dget " Get a directory entry from the dirblock +002762: 103104 + lac d.i " get i-num +002763: 205747 + sna " in use? +002764: 741200 + jmp 2f " no +002765: 603013 + lac 9f+t+1 " get argptr-1 +002766: 204237 + dac 8 +002767: 040010 + lac d.name " Compare the four words of the filename in the +002770: 205750 + sad 8 i " directory entry with the argument to namei +002771: 560010 + skp +002772: 741000 + jmp 2f " No match +002773: 603013 + lac d.name+1 +002774: 205751 + sad 8 i +002775: 560010 + skp +002776: 741000 + jmp 2f " No match +002777: 603013 + lac d.name+2 +003000: 205752 + sad 8 i +003001: 560010 + skp +003002: 741000 + jmp 2f " No match +003003: 603013 + lac d.name+3 +003004: 205753 + sad 8 i +003005: 560010 + skp +003006: 741000 + jmp 2f " No match +003007: 603013 + lac d.i " A match. Get the i-number into AC +003010: 205747 + isz namei " give skip return +003011: 442737 + jmp namei i +003012: 622737 + 2: + isz di " No match, move up to the next direntry +003013: 445746 + isz 9f+t " any left? +003014: 444236 + jmp 1b " yes: keep going +003015: 602761 + jmp namei i " Didn't find it, return zero in AC (without skip) +003016: 622737 + t = t+2 + 000033 + " Given an i-number in AC, fetch that i-node + " from disk and store it in the inode buffer + iget: 0 +003017: 000000 + dac ii " Store the i-number in ii +003020: 045731 + cll; idiv; 5 " Divide by 5: 5 inodes in a block +003021: 744000 +003022: 653323 +003023: 000005 + dac 9f+t " Store the remainder in 9f+t: the i-node +003024: 044240 + lacq " number within the block +003025: 641002 + tad d2 " Add 2 to the quotient to get the block number +003026: 344120 + dac 9f+t+1 " and store in 9f+t+1 +003027: 044241 + jms dskrd " Get the block +003030: 102116 + lac 9f+t +003031: 204240 + cll; mul; 12 " Multiply the i-num within the block by 12 +003032: 744000 +003033: 653122 +003034: 000014 + lacq " to get the offset into the block +003035: 641002 + tad dskbufp " Add on the base of the disk buffer +003036: 344103 + dac 9f+t +003037: 044240 + dac .+2 +003040: 043042 + jms copy; ..; inode; 12 " Copy 12 words from buffer to inode +003041: 101667 +003042: 000000 +003043: 005732 +003044: 000014 + jmp iget i " and return +003045: 623017 + iput: 0 +003046: 000000 + lac 9f+t+1 +003047: 204241 + jms dskrd +003050: 102116 + law inode-1 +003051: 765731 + dac 8 +003052: 040010 + -1 +003053: 777777 + tad 9f+t +003054: 344240 + dac 9 +003055: 040011 + -12 +003056: 777764 + dac 9f+t+2 +003057: 044242 + 1: + lac 8 i +003060: 220010 + "** 01-s1.pdf page 36 + sad 9 i +003061: 560011 + skp +003062: 741000 + jmp 2f +003063: 603067 + isz 9f+t+2 +003064: 444242 + jmp 1b +003065: 603060 + jmp iput i +003066: 623046 + 2: + -1 +003067: 777777 + tad 8 +003070: 340010 + dac 8 +003071: 040010 + -1 +003072: 777777 + tad 9 +003073: 340011 + dac 9 +003074: 040011 + 1: + lac 8 i +003075: 220010 + dac 9 i +003076: 060011 + isz 9f+t+2 +003077: 444242 + jmp 1b +003100: 603075 + lac 9f+t+1 +003101: 204241 + jms dskwr +003102: 102146 + jmp iput i +003103: 623046 + t = t+3 + 000036 + " allocate directory entry + " AC/ entry number + dget: 0 +003104: 000000 + dac di " save entry number +003105: 045746 + alss 3 " get word number +003106: 660703 + dac 9f+t " save in t0 +003107: 044243 + jms pget " get free disk block +003110: 103152 + dac 9f+t+1 " save in t1 +003111: 044244 + jms dskrd +003112: 102116 + lac 9f+t +003113: 204243 + and o77 +003114: 504140 + tad dskbufp +003115: 344103 + dac 9f+t+2 +003116: 044245 + dac .+2 +003117: 043121 + jms copy; ..; dnode; 8 +003120: 101667 +003121: 000000 +003122: 005747 +003123: 000010 + lac 9f+t +003124: 204243 + tad d8 +003125: 344126 + jms betwen; d0; i.size +003126: 101643 +003127: 004116 +003130: 005744 + skp +003131: 741000 + jmp dget i +003132: 623104 + jms dacisize +003133: 103402 + dzm d.i +003134: 145747 + jmp dget i +003135: 623104 + dput: 0 +003136: 000000 + lac 9f+t+1 +003137: 204244 + jms dskrd +003140: 102116 + lac 9f+t+2 +003141: 204245 + dac .+3 +003142: 043145 + jms copy; dnode; ..; 8 +003143: 101667 +003144: 005747 +003145: 000000 +003146: 000010 + lac 9f+t+1 +003147: 204244 + jms dskwr +003150: 102146 + jmp dput i +003151: 623136 + t = t+3 + 000041 + " get a block number for a file, returns disk block number + " allocates block if not allocated + " AC/ file offset + " jms pget + " AC/ disk block number + pget: 0 +003152: 000000 + lrss 6 " convert offset to block +003153: 660506 + dac 9f+t " save as t0 +003154: 044246 + lac i.flags +003155: 205732 + "** 01-s1.pdf page 37 + and o200000 +003156: 504170 + sza " large file bit set? +003157: 740200 + jmp 2f " yes +003160: 603220 + lac 9f+t " no: small file +003161: 204246 + jms betwen; d0; d6 " block 0..6? +003162: 101643 +003163: 004116 +003164: 004124 + jmp 1f " no +003165: 603175 + tad idskpp " make into block number pointer +003166: 344102 + dac 9f+t " save in t0 +003167: 044246 + lac 9f+t i " get disk block number +003170: 224246 + sna " allocated? +003171: 741200 + jms alloc " no: allocate now +003172: 101545 + dac 9f+t i " save (new) disk block number +003173: 064246 + jmp pget i " return disk block number +003174: 623152 + 1: " here when file block>=7, not "large" + jms alloc " allocate indirect block +003175: 101545 + dac 9f+t+1 " save as t1 +003176: 044247 + jms copy; i.dskps; dskbuf; 7 " copy all the disk block numbers +003177: 101667 +003200: 005733 +003201: 007700 +003202: 000007 + jms copyz; dskbuf+7; 64-7 " zero rest of indirect block +003203: 101712 +003204: 007707 +003205: 000071 + lac 9f+t+1 " get indirect block number back +003206: 204247 + jms dskwr " write indirect block to disk +003207: 102146 + lac 9f+t+1 +003210: 204247 + dac i.dskps " save indirect as new first block +003211: 045733 + jms copyz; i.dskps+1; 6 " zero rest of block pointers +003212: 101712 +003213: 005734 +003214: 000006 + lac i.flags +003215: 205732 + xor o200000 " set "large file" +003216: 244170 + dac i.flags +003217: 045732 + 2: " here with "large file" + lac 9f+t " get file block number +003220: 204246 + lrss 6 " divide by 64 (indirects/block) +003221: 660506 + jms betwen; d0; d6 " ok now? +003222: 101643 +003223: 004116 +003224: 004124 + jms halt " file too big " no, you lose! +003225: 102254 + tad idskpp " yes: get indirect block pointer +003226: 344102 + dac 9f+t+1 " save in t1 +003227: 044247 + lac 9f+t+1 i " get indirect block number +003230: 224247 + sna " allocated? +003231: 741200 + jms alloc " no, get it now +003232: 101545 + dac 9f+t+1 i " save (new) indirect block +003233: 064247 + dac 9f+t+2 " save as t2 +003234: 044250 + jms dskrd " read indirect block +003235: 102116 + lac 9f+t " get original block number +003236: 204246 + and o77 " mod by 64 +003237: 504140 + tad dskbufp " get pointer to disk block number +003240: 344103 + dac 9f+t+1 " save as t1 +003241: 044247 + lac 9f+t+1 i " fetch disk block number +003242: 224247 + sza " allocated? +003243: 740200 + jmp pget i " yes: return +003244: 623152 + jms alloc " no: allocate data block +003245: 101545 + dac 9f+t " save as t0 +003246: 044246 + lac 9f+t+2 " get indirect block number +003247: 204250 + jms dskrd " read it in +003250: 102116 + lac 9f+t " get data block number +003251: 204246 + dac 9f+t+1 i " save data block number +003252: 064247 + lac 9f+t+2 +003253: 204250 + jms dskwr " write indirect block back +003254: 102146 + lac 9f+t " get data block back +003255: 204246 + jmp pget i " return it +003256: 623152 + t = t+3 + 000044 + iwrite: 0 +003257: 000000 + dac 9f+t " save arg in t0 +003260: 044251 + lac iwrite " load return address +003261: 203257 + "** 01-s1.pdf page 38 + dac iread " save as iread return addr +003262: 043266 + lac cskp " load skip instruction +003263: 203335 + dac iwrite " save as iwrite instruction +003264: 043257 + jmp 1f +003265: 603272 + " iread from file referenced by loaded inode + " AC/ file offset + " jms iread; addr; count + iread: 0 +003266: 000000 + dac 9f+t " save offset in t0 +003267: 044251 + lac cnop " get nop +003270: 203442 + dac iwrite " save as iwrite instruction +003271: 043257 + 1: + -1 +003272: 777777 + tad iread i " get word before return addr +003273: 363266 + dac 10 " store in index 10 & 11 +003274: 040012 + dac 11 +003275: 040013 + isz iread " increment return addr +003276: 443266 + lac iread i " load addr +003277: 223266 + dac 9f+t+1 " save in t1 +003300: 044252 + isz iread " increment return addr +003301: 443266 + lac o70000 +003302: 204164 + xct iwrite " skip if write +003303: 403257 + lac i.size " read: get file size +003304: 205744 + cma +003305: 740001 + tad 9f+t " add offset +003306: 344251 + cma +003307: 740001 + jms betwen; d0; 9f+t+1 +003310: 101643 +003311: 004116 +003312: 004252 + lac 9f+t+1 +003313: 204252 + dac 9f+t+2 +003314: 044253 + cma +003315: 740001 + tad d1 +003316: 344117 + sna +003317: 741200 + jmp iread i +003320: 623266 + dac 9f+t+1 +003321: 044252 + 1: + lac 9f+t +003322: 204251 + jms pget +003323: 103152 + dac 9f+t+3 +003324: 044254 + jms dskrd +003325: 102116 + lac 9f+t +003326: 204251 + and o77 +003327: 504140 + tad dskbufp +003330: 344103 + tad dm1 +003331: 344204 + xct iwrite +003332: 403257 + jmp .+3 +003333: 603336 + dac 10 +003334: 040012 + cskp: + skp +003335: 741000 + dac 11 +003336: 040013 + 2: + lac 11 i +003337: 220013 + dac 10 i +003340: 060012 + isz 9f+t +003341: 444251 + isz 9f+t+1 +003342: 444252 + jmp 3f +003343: 603357 + xct iwrite +003344: 403257 + jmp 4f +003345: 603355 + lac 9f+t +003346: 204251 + jms betwen; d0; i.size +003347: 101643 +003350: 004116 +003351: 005744 + dac i.size +003352: 045744 + lac 9f+t+3 +003353: 204254 + jms dskwr +003354: 102146 + 4: + "** 01-s1.pdf page 38 + lac 9f+t+2 +003355: 204253 + jmp iread i +003356: 623266 + 3: + lac 9f+t +003357: 204251 + and o77 +003360: 504140 + sza +003361: 740200 + jmp 2b +003362: 603337 + xct iwrite +003363: 403257 + jmp 1b +003364: 603322 + lac 9f+t+3 +003365: 204254 + jms dskwr +003366: 102146 + jmp 1b +003367: 603322 + t = t+4 + 000050 + " system call helper + " AC/ fd + " jms finac + " return with: fnode and inode loaded + " or makes error return to user + finac: 0 +003370: 000000 + lac u.ac +003371: 205631 + jms fget +003372: 102360 + jms error +003373: 101531 + lac f.flags +003374: 205757 + sma +003375: 740100 + jms error +003376: 101531 + lac f.i +003377: 205761 + jms iget +003400: 103017 + jmp finac i +003401: 623370 + " update inode file size with value in AC + dacisize: 0 +003402: 000000 + dac i.size +003403: 045744 + jms iput +003404: 103046 + lac i.size +003405: 205744 + jmp dacisize i +003406: 623402 + "** 01-s1.pdf page 41 + " s7 + pibreak: " priority interrupt break processing "chain" + dac .ac " save interrupt AC +003407: 044071 + "** CROSSED OUT.... + dpsf +003410: 704741 + jmp 1f " disable the Graphics-2 I/O +003411: 603432 + dpcf +003412: 704761 + dprs +003413: 704752 + dac dpstat +003414: 045532 + sma ral +003415: 740110 + jmp 2f +003416: 603425 + dprc +003417: 704712 + dac dpchar +003420: 045535 + -1 +003421: 777777 + dac dpread +003422: 045533 + lac dpstat +003423: 205532 + ral +003424: 740010 + 2: + sma +003425: 740100 + jmp piret +003426: 603755 + -1 +003427: 777777 + dac dpwrite +003430: 045534 + jmp piret "** END OF CROSSOUT +003431: 603755 + 1: clsf " clock overflow (line frequency ticks)? +003432: 700001 + jmp 1f " no +003433: 603466 + lpb " load display push buttons +003434: 704412 + dac pbsflgs " save +003435: 045476 + isz s.tim+1 " increment low order tick count +003436: 445560 + skp " no overflow, skip second increment +003437: 741000 + isz s.tim " low order overflowed, increment high order count +003440: 445557 + isz uquant " increment user quantum counter +003441: 445474 + "** written: ttydelay -> ttyd1 + "** written: ttyrestart -> ttyres1 + cnop: " fetched as constant in iread + nop +003442: 740000 + -1 +003443: 777777 + dac 7 " set location 7 to -1 (nothing ever clears it) +003444: 040007 + clon " enable clock interrupts, reset flag +003445: 700044 + lac ttydelay " tty delay positive? +003446: 205503 + spa " yes: skip to skp +003447: 741100 + isz ttydelay " no: done delaying? +003450: 445503 + skp " not done +003451: 741000 + jms ttyrestart " yes: start output +003452: 103572 + "** START CROSSED OUT: written: lac tty + lac .dspb +003453: 205536 + sna +003454: 741200 + jmp piret +003455: 603755 + isz .dsptm +003456: 444073 + skp +003457: 741000 + jmp dsprestart +003460: 603512 + sad d3 +003461: 544121 + jmp piret +003462: 603755 + isz .dspb +003463: 445536 + jmp piret +003464: 603755 + jmp dsprestart "** END CROSSED OUT +003465: 603512 + 1: dssf " disk flag set? +003466: 707121 + jmp 1f " no +003467: 603476 + -1 " set .dskb = -1 +003470: 777777 + dac .dskb +003471: 044074 + "** 01-s1.pdf page 42 + dsrs " get disk status in .dske +003472: 707132 + dac .dske +003473: 044075 + dscs " clear status register +003474: 707141 + jmp piret +003475: 603755 + "** BEGIN CROSSED OUT + 1: lds " load display status (see 03-scope.pdf pg 25) +003476: 701052 + sma ral " display trap set? (and rotate left) +003477: 740110 + jmp 1f " not set +003500: 603521 + cdf " display done executing; clear display flags +003501: 700501 + lac .dspb +003502: 205536 + sna +003503: 741200 + jmp piret " return now if .dspb == 0 +003504: 603755 + tad dm3 +003505: 344203 + sna +003506: 741200 + jmp dsprestart " start display if .dspb == 3 +003507: 603512 + dac .dspb " otherwise, .dspb -= 3 and return +003510: 045536 + jmp piret +003511: 603755 + dsprestart: + lac d1 +003512: 204117 + dac .dspb " set .dspb = 1 +003513: 045536 + lac dspbufp " load display buf pointer +003514: 205475 + beg " start display processor +003515: 700547 + -10 +003516: 777766 + dac .dsptm " set .dsptm = -10 (10 ticks) +003517: 044073 + jmp piret +003520: 603755 + 1: sma ral " edges flag set?? (and rotate) +003521: 740110 + jmp .+3 " no +003522: 603525 + raef " "resume after edges flag" +003523: 700742 + jmp piret " return +003524: 603755 + sma " light pen flag? +003525: 740100 + jmp 1f " no +003526: 603533 + lda " G-2: load display address +003527: 701012 + dac .lpba " save +003530: 045537 + rlpd " G-2: resume after light pen stop +003531: 700723 + jmp piret +003532: 603755 + 1: ksf " (TTY) keyboard flag set? +003533: 700301 + jmp 1f " no +003534: 603565 + lac ttydelay " get TTY delay +003535: 205503 + sma " minus (waiting for output)? +003536: 740100 + isz ttydelay " no: increment??? (make more positive) +003537: 445503 + krb " read keyboard buffer +003540: 700312 + dac char " save in char +003541: 045511 + sad o375 " interrupt char (TTY ALT MODE?) +003542: 544151 + jmp intrp1 " yes +003543: 604021 + lac d1 +003544: 204117 + jms putchar +003545: 101730 + dzm char +003546: 145511 + lac sfiles+0 " get sleep word for ttyin +003547: 205520 + jms wakeup " wake processes +003550: 103762 + dac sfiles+0 " clear sleep word +003551: 045520 + lac char " get character +003552: 205511 + sad o212 " new line (with parity)?? +003553: 544150 + skp " yes +003554: 741000 + jmp piret " no: done +003555: 603755 + lac sfiles+1 " get ttyout sleep word +003556: 205521 + sma " highest bit set? +003557: 740100 + xor o400000 " no, make it so (why?] +003560: 244173 + dac sfiles+1 " save back +003561: 045521 + "** 01-s1.pdf page 43 + jms putcr " output CR next +003562: 104014 + jms ttyrestart " start output +003563: 103572 + jmp piret +003564: 603755 + 1: tsf " TTY output flag set? +003565: 700401 + jmp 1f " no +003566: 603626 + tcf " yes: clear flag +003567: 700402 + jms ttyrestart " transmit next character +003570: 103572 + jmp piret +003571: 603755 + ttyrestart: 0 +003572: 000000 + lac ttydelay " get tty delay +003573: 205503 + spa " positive? +003574: 741100 + jmp ttyrestart i " no: keep waiting +003575: 623572 + lac nttychar " get pending CR, if any +003576: 205501 + dzm nttychar " clear it +003577: 145501 + sza " need to send CR? +003600: 740200 + jmp 3f " yes +003601: 603606 + isz ttydelay " increment ttydelay (make more positive) +003602: 445503 + lac d2 +003603: 204120 + jms getchar " get a character +003604: 101745 + jmp 2f " none found?? +003605: 603622 + 3: + tls " start output +003606: 700406 + sad o12 " newline? +003607: 544130 + jms putcr " yes: put CR next +003610: 104014 + sad o15 " CR? +003611: 544132 + skp " yes +003612: 741000 + jmp ttyrestart i " no: return +003613: 623572 + lac ttydelay " get current tty delay +003614: 205503 + tad o20 " bump by 16 +003615: 344134 + rcr " divide by two +003616: 744020 + cma " complement +003617: 740001 + dac ttydelay " save +003620: 045503 + jmp ttyrestart i +003621: 623572 + 2: + lac sfiles+1 " run out of characters to send: wake user(s) +003622: 205521 + jms wakeup +003623: 103762 + dac sfiles+1 +003624: 045521 + jmp ttyrestart i "** written arrow up 2 copies +003625: 623572 + "** BEGIN CROSSED OUT + 1: sck " Graphic-2 keyboard flag set? +003626: 704301 + jmp 1f " no. +003627: 603644 + cck " yes: clear flag +003630: 704304 + lck " read character +003631: 704312 + dac char +003632: 045511 + sad o33 " code 33 (ESCAPE?) +003633: 544135 + jmp intrp2 " yes: mark interrupt +003634: 604044 + lac d3 +003635: 204121 + jms putchar +003636: 101730 + nop +003637: 740000 + lac sfiles+2 +003640: 205522 + jms wakeup +003641: 103762 + dac sfiles+2 +003642: 045522 + jmp piret +003643: 603755 + 1: rsf " paper tape ready? +003644: 700101 + jmp 1f " no +003645: 603712 + "** 01-s1.pdf page 44 + lac npptchar +003646: 205502 + sna +003647: 741200 + jmp .+5 +003650: 603655 + dac char +003651: 045511 + rrb +003652: 700112 + dac npptchar +003653: 045502 + jmp .+3 +003654: 603657 + rrb +003655: 700112 + dac char +003656: 045511 + 3: + lac char +003657: 205511 + sna +003660: 741200 + jmp 2f +003661: 603670 + lac d4 +003662: 204122 + jms putchar +003663: 101730 + jmp 3f +003664: 603704 + lac char +003665: 205511 + sad d4 +003666: 544122 + jmp 4f +003667: 603706 + 2: + lac npptchar +003670: 205502 + sna +003671: 741200 + jmp .+4 +003672: 603676 + dac char +003673: 045511 + dzm npptchar +003674: 145502 + jmp 3b +003675: 603657 + rsa +003676: 700104 + lac sfiles+3 +003677: 205523 + jms wakeup +003700: 103762 + xor o400000 +003701: 244173 + dac sfiles+3 +003702: 045523 + jmp piret +003703: 603755 + 3: + lac char +003704: 205511 + dac npptchar +003705: 045502 + 4: + lac sfiles+3 +003706: 205523 + jms wakeup +003707: 103762 + dac sfiles+3 +003710: 045523 + jmp piret +003711: 603755 + 1: psf " paper tape ready? +003712: 700201 + jmp 1f " no +003713: 603726 + pcf " clear ptp flag +003714: 700202 + lac d5 +003715: 204123 + jms getchar " get next char +003716: 101745 + jmp .+3 +003717: 603722 + psa +003720: 700204 + jmp piret +003721: 603755 + lac sfiles+4 +003722: 205524 + jms wakeup +003723: 103762 + dac sfiles+4 +003724: 045524 + jmp piret +003725: 603755 + "** BEGIN CROSSED OUT + 1: spb " any graphic-2 push button? +003726: 704401 + jmp 1f " no +003727: 603745 + cpb " clear push button flag +003730: 704404 + lpb " load push button value +003731: 704412 + dac pbsflgs+1 +003732: 045477 + "** 01-s1.pdf page 45 + and o2000 " get push button 7 +003733: 504153 + sna " set? +003734: 741200 + jmp piret " no: done +003735: 603755 + jms dspinit " yes: reset display buffer +003736: 102606 + lac sfiles+6 " wake up anyone sleeping on display +003737: 205526 + jms wakeup +003740: 103762 + dac sfiles+6 +003741: 045526 + cla " clear button lights +003742: 750000 + wbl +003743: 704424 + jmp piret "** END CROSSED OUT +003744: 603755 + 1: crsf " card reader flag set? +003745: 706701 + jmp 1f " no +003746: 603754 + crrb +003747: 706712 + dac crchar +003750: 045541 + -1 +003751: 777777 + dac crread +003752: 045540 + jmp piret +003753: 603755 + 1: crrb " read card reader buffer?? +003754: 706712 + piret: " return from priority interrupt + lac 0 " get LINK/PC +003755: 200000 + ral " restore LINK +003756: 740010 + lac .ac " restore AC +003757: 204071 + ion " reenable interrupts +003760: 700042 + jmp 0 i " return from interrupt +003761: 620000 + " wake sleeping processes + " NOTE!! Called from interrupt service, so avoids indirect!!! + " call: + " AC/ sfiles word (bit vector of processes to wake) + " jms wakeup + " AC/ 0 (to store in sfiles word) + wakeup: 0 +003762: 000000 + dac 9f+t " save vector in t0 +003763: 044255 + -mnproc +003764: 777766 + dac 9f+t+1 " loop count in t1 +003765: 044256 + lac tadu " get "tad ulist" +003766: 204076 + dac 2f +003767: 044000 + lac dacu " get "dac ulist" +003770: 204077 + dac 2f+1 +003771: 044001 + 1: + lac 9f+t +003772: 204255 + ral " rotate vector up one +003773: 740010 + dac 9f+t +003774: 044255 + sma " high bit set? +003775: 740100 + jmp 2f+2 " no: skip the fun +003776: 604002 + lac o700000 " yes: decrement process status (wake) +003777: 204200 + 2: tad .. " (avoiding indirect) +004000: 340000 + dac .. +004001: 040000 + lac 2b " advance tad operand by 4 words +004002: 204000 + tad d4 +004003: 344122 + dac 2b +004004: 044000 + lac 2b+1 " advance tad operand by 4 words +004005: 204001 + tad d4 +004006: 344122 + dac 2b+1 +004007: 044001 + isz 9f+t+1 " done? +004010: 444256 + jmp 1b " no, keep going +004011: 603772 + cla " return zero in AC +004012: 750000 + jmp wakeup i +004013: 623762 + t = t+2 + 000052 + " call to output CR after LF (NL) + putcr: 0 +004014: 000000 + lac o15 +004015: 204132 + dac nttychar +004016: 045501 + "** 01-s1.pdf page 46 + cla +004017: 750000 + jmp putcr i +004020: 624014 + intrp1: " here with TTY interrupt character + lac d6 " get keyboard special device number +004021: 204124 + dac .int1 " save as interrupt source +004022: 044067 + lac d1 " drain tty input buffer? +004023: 204117 + jms getchar +004024: 101745 + skp +004025: 741000 + jmp .-3 +004026: 604023 + lac d2 " drain tty output buffer? +004027: 204120 + jms getchar +004030: 101745 + skp +004031: 741000 + jmp .-3 +004032: 604027 + lac sfiles+0 " wake ttyin sleepers +004033: 205520 + jms wakeup +004034: 103762 + dac sfiles+0 +004035: 045520 + lac sfiles+1 " wake ttyout sleepers +004036: 205521 + jms wakeup +004037: 103762 + dac sfiles+1 +004040: 045521 + jms chkint " check if user interrupted +004041: 100320 + jmp piret " no, return from PI +004042: 603755 + jmp 1f " yes: return thru system call code (dump core) +004043: 604062 + intrp2: " here with display interrupt character + lac d7 " get keyboard special device number +004044: 204125 + dac .int2 " save as interrupt source +004045: 044070 + lac d3 " drain keyboard buffer? +004046: 204121 + jms getchar +004047: 101745 + skp +004050: 741000 + jmp .-3 +004051: 604046 + lac sfiles+2 " wake up any "keyboard" sleepers +004052: 205522 + jms wakeup +004053: 103762 + dac sfiles+2 +004054: 045522 + lac sfiles+6 " wake up any "display" sleepers +004055: 205526 + jms wakeup +004056: 103762 + dac sfiles+6 +004057: 045526 + jms chkint " check if user interrupted +004060: 100320 + jmp piret " no, return from PI +004061: 603755 + 1: + lac 0 " get interrupt PC +004062: 200000 + dac 020 " save as system call return PC +004063: 040020 + lac .ac " restore AC from interrupt +004064: 204071 + jmp 021 " join system call processing (dump core?) +004065: 600021 + "** 01-s1.pdf page 48 + " s8 + " manifests + mnproc = 10 + 000012 + dspbsz = 270 + 000416 + ndskbs = 4 + 000004 + " flags + .insys: 0 " "in system" +004066: 000000 + .int1: 0 " inode for user interrupt 1 +004067: 000000 + .int2: 0 " inode for user interrupt 2 +004070: 000000 + .ac: 0 " saved AC from Priotity Interrupt +004071: 000000 + .savblk: 0 " set by system call, cleared by disk i/o +004072: 000000 + .dsptm: 0 " display restart countdown (10 ticks) +004073: 000000 + .dskb: 0 " set on disk interrupt +004074: 000000 + .dske: 0 " status from disk interrupt +004075: 000000 + " pointers + tadu: tad ulist +004076: 345561 + dacu: dac ulist +004077: 045561 + maxquant: 30 +004100: 000036 + ofilesp: u.ofiles +004101: 005654 + idskpp: i.dskps +004102: 005733 + dskbufp: dskbuf +004103: 007700 + edspbuf: dspbuf+dspbsz +004104: 005064 + dspbufp3: dspbuf+3 +004105: 004451 + fblksp: s.fblks +004106: 005544 + dacq1: dac q1 +004107: 044260 + lacq1: lac q1 +004110: 204260 + q2p: q2 +004111: 004300 + " strings + initf: + n;t;< > ;< > " +004112: 151156 +004113: 151164 +004114: 040040 +004115: 040040 + " constants + d0: 0 +004116: 000000 + d1: 1 +004117: 000001 + d2: 2 +004120: 000002 + d3: 3 +004121: 000003 + d4: 4 +004122: 000004 + d5: 5 +004123: 000005 + d6: 6 +004124: 000006 + d7: o7: 07 +004125: 000007 + d8: 8 +004126: 000010 + d9: 9 +004127: 000011 + o12: d10: 10 +004130: 000012 + o14: 014 +004131: 000014 + o15: 015 +004132: 000015 + o17: 017 +004133: 000017 + o20: 020 +004134: 000020 + o33: 033 +004135: 000033 + o40: 040 +004136: 000040 + o55: 055 +004137: 000055 + o77: 077 +004140: 000077 + d65:o101: 0101 +004141: 000101 + d33: 33 +004142: 000041 + o132: 0132 +004143: 000132 + o134: 0134 +004144: 000134 + o137: 0137 +004145: 000137 + o155: 0155 +004146: 000155 + o177: 0177 +004147: 000177 + "** 01-s1.pdf page 49 + o212: 0212 +004150: 000212 + o375: 0375 +004151: 000375 + o777: 0777 +004152: 000777 + o2000: 02000 +004153: 002000 + o4000: 04000 +004154: 004000 + d7999: 7999 +004155: 017477 + o10000: 010000 +004156: 010000 + o17762: 017762 +004157: 017762 + o17777: 017777 +004160: 017777 + o20001: 020001 +004161: 020001 + o40000: 040000 +004162: 040000 + o40001: 040001 +004163: 040001 + o70000: 070000 +004164: 070000 + o77777: 077777 +004165: 077777 + o100000: 0100000 +004166: 100000 + o140000: 0140000 +004167: 140000 + o200000: 0200000 +004170: 200000 + o200001: 0200001 +004171: 200001 + o300000: 0300000 +004172: 300000 + o400000: 0400000 +004173: 400000 + o500000: 0500000 +004174: 500000 + o577777: 0577777 +004175: 577777 + o600000: 0600000 +004176: 600000 + o640000: 0640000 +004177: 640000 + o700000: 0700000 +004200: 700000 + o777700: 0777700 +004201: 777700 + o777760: 0777760 +004202: 777760 + dm3: -3 +004203: 777775 + dm1: -1 +004204: 777777 + 9: .=.+t " per-routine temp variables + 1004257 + c1: .=.+1 " not used? + 1004260 + q1: q2;q2+98 " ** 90? 96?? " queue element free list? +004260: 004300 +004261: 004442 + .=.+14 + 1004300 + " queues (two words each, head and tail pointers?) + " 1: tty input + " 2: tty output + " 3: display keyboard + " 4: paper tape reader + " 5: paper tape punch + q2: + .+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0 +004300: 004302 +004301: 000000 +004302: 004304 +004303: 000000 +004304: 004306 +004305: 000000 +004306: 004310 +004307: 000000 +004310: 004312 +004311: 000000 +004312: 004314 +004313: 000000 +004314: 004316 +004315: 000000 +004316: 004320 +004317: 000000 +004320: 004322 +004321: 000000 +004322: 004324 +004323: 000000 + .+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0 +004324: 004326 +004325: 000000 +004326: 004330 +004327: 000000 +004330: 004332 +004331: 000000 +004332: 004334 +004333: 000000 +004334: 004336 +004335: 000000 +004336: 004340 +004337: 000000 +004340: 004342 +004341: 000000 +004342: 004344 +004343: 000000 +004344: 004346 +004345: 000000 +004346: 004350 +004347: 000000 + .+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0 +004350: 004352 +004351: 000000 +004352: 004354 +004353: 000000 +004354: 004356 +004355: 000000 +004356: 004360 +004357: 000000 +004360: 004362 +004361: 000000 +004362: 004364 +004363: 000000 +004364: 004366 +004365: 000000 +004366: 004370 +004367: 000000 +004370: 004372 +004371: 000000 +004372: 004374 +004373: 000000 + .+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0 +004374: 004376 +004375: 000000 +004376: 004400 +004377: 000000 +004400: 004402 +004401: 000000 +004402: 004404 +004403: 000000 +004404: 004406 +004405: 000000 +004406: 004410 +004407: 000000 +004410: 004412 +004411: 000000 +004412: 004414 +004413: 000000 +004414: 004416 +004415: 000000 +004416: 004420 +004417: 000000 + .+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;.+2;0;0;0 +004420: 004422 +004421: 000000 +004422: 004424 +004423: 000000 +004424: 004426 +004425: 000000 +004426: 004430 +004427: 000000 +004430: 004432 +004431: 000000 +004432: 004434 +004433: 000000 +004434: 004436 +004435: 000000 +004436: 004440 +004437: 000000 +004440: 004442 +004441: 000000 +004442: 000000 +004443: 000000 + dsploc: .=.+1 + 1004445 + dsplno: .=.+1 + 1004446 + dspbuf: + 0065057;0147740;0160000 " display commands: see 03-scope.pdf pg 20 +004446: 065057 +004447: 147740 +004450: 160000 + " PARAM: clear blink, clear light pen, scale=1, intensity=3 + " X-Y: invisible, no delay, Y=01740 (992) + " X-Y: invisible, settling delay, X=0 + .=.+30 + 1004507 + coldentry: + dzm 0100 " not re-entrant +004507: 140100 + caf " clear all flags +004510: 703302 + ion " enable interrupts +004511: 700042 + clon " clear clock flag +004512: 700044 + law 3072 " initialize display.... +004513: 766000 + wcga +004514: 704206 + jms dspinit +004515: 102606 + law dspbuf " set display buffer to default +004516: 764446 + jms movdsp +004517: 102615 + cla " read system block from disk +004520: 750000 + jms dskio; 06000 +004521: 102162 +004522: 006000 + jms copy; dskbuf; sysdata; ulist-sysdata " copy to system data +004523: 101667 +004524: 007700 +004525: 005542 +004526: 000017 + lac d3 " look for "init" in default directory +004527: 204121 + jms namei; initf +004530: 102737 +004531: 004112 + jms halt +004532: 102254 + "** 01-s1.pdf page 50 + jms iget +004533: 103017 + cla +004534: 750000 + jms iread; 4096; 4096 " read in "init" +004535: 103266 +004536: 010000 +004537: 010000 + jmp 4096 " start process 1 +004540: 610000 + . = dspbuf+dspbsz+3 + 1005067 + dskbuf = 07700 + 007700 + dskbs: .=.+65+65+65+65 + 1005473 + edskbsp: . +005473: 005473 + uquant: .=.+1 " number of ticks user has been running + 1005475 + dspbufp: .=.+1 " pointer to display buffer + 1005476 + pbsflgs: .=.+2 " buttons on last tick, last button interrupt + 1005500 + mode: .=.+1 + 1005501 + nttychar: .=.+1 " CR to send next, or zero + 1005502 + npptchar: .=.+1 + 1005503 + ttydelay: .=.+1 " delay count for TTY output + 1005504 + name: .=.+4 + 1005510 + lnkaddr: .=.+1 + 1005511 + char: .=.+1 + 1005512 + dskaddr: .=.+1 + 1005513 + uniqpid: 1 " pid generator +005513: 000001 + lu: .=.+4 " user (process) table entry copy + 1005520 + sfiles: .=.+10 " wait addresses for special files + 1005532 + " (bit vector of waiting processes?) + " offsets: 0: ttyin, 1: ttyout, 2: keyboard, + " 3: ptr, 4: ptp, 6: display + dpdata: + dpstat: .=.+1 + 1005533 + dpread: .=.+1 + 1005534 + dpwrite: .=.+1 + 1005535 + dpchar: .=.+1 + 1005536 + dspdata: + .dspb: .=.+1 + 1005537 + .lpba: .=.+1 "** 4 written on listing + 1005540 + crdata: + crread: .=.+1 + 1005541 + crchar: .=.+1 + 1005542 + sysdata: " system data 64 words saved to disk + s.nxfblk: .=.+1 " pointer to next free block?? + 1005543 + s.nfblks: .=.+1 " number of free blocks (in fblks?) + 1005544 + s.fblks: .=.+10 " cached free block numbers + 1005556 + s.uniq: .=.+1 " next unique value + 1005557 + s.tim: .=.+2 " (up?)time in 60Hz ticks (low, high) + 1005561 + " process table + " first word + " bits 0:2 -- status + " 0: free slot + " 1: in/ready + " 2: in/notready + " 3: out/ready + " 4: out/notready?? + " bits 3:17 -- disk swap address/8 + " second word: process pid + " third word: smes/rmes status: + " 0: not waiting + " -1: this process waiting (rmes) + " other: complement of sender pid + " fourth word: smes message + ulist: + 0131000;1;0;0 +005561: 131000 +005562: 000001 +005563: 000000 +005564: 000000 + 0031040;0;0;0 +005565: 031040 +005566: 000000 +005567: 000000 +005570: 000000 + 0031100;0;0;0 +005571: 031100 +005572: 000000 +005573: 000000 +005574: 000000 + 0031140;0;0;0 +005575: 031140 +005576: 000000 +005577: 000000 +005600: 000000 + 0031200;0;0;0 +005601: 031200 +005602: 000000 +005603: 000000 +005604: 000000 + 0031240;0;0;0 +005605: 031240 +005606: 000000 +005607: 000000 +005610: 000000 + 0031300;0;0;0 +005611: 031300 +005612: 000000 +005613: 000000 +005614: 000000 + 0031340;0;0;0 +005615: 031340 +005616: 000000 +005617: 000000 +005620: 000000 + 0031400;0;0;0 +005621: 031400 +005622: 000000 +005623: 000000 +005624: 000000 + 0031440;0;0;0 +005625: 031440 +005626: 000000 +005627: 000000 +005630: 000000 + userdata: " "ustruct" (swappable) + u.ac: 0 " user AC +005631: 000000 + u.mq: 0 " user MQ +005632: 000000 + u.rq: .=.+9 " user 010-017, user PC + 1005644 + u.uid: -1 " user id +005644: 777777 + u.pid: 1 " process id +005645: 000001 + u.cdir: 3 " connected directory (inode number?) +005646: 000003 + u.ulistp: ulist " pointer to process table entry +005647: 005561 + u.swapret: 0 " kernel routine to resume at after swap in +005650: 000000 + u.base: 0 " start of user buffer +005651: 000000 + u.count: 0 " size of user buffer +005652: 000000 + "** 01-s1.pdf page 51 + u.limit: 0 " end of user buffer +005653: 000000 + u.ofiles: .=.+30 " open files (10 "fnode" entries) + 1005712 + u.dspbuf: 0 +005712: 000000 + u.intflg: 1 +005713: 000001 + .=userdata+64 + 1005731 + ii: .=.+1 " The current i-node number stored in inode + 1005732 + inode: " disk inode in memory: + i.flags: .=.+1 " inode flags + 1005733 + " 400000 in use + " 200000 large file + " 000040 special device (indicated by inum) + " 000020 directory + " 000010 owner read + " 000004 owner write + " 000002 world read + " 000001 world write + i.dskps: .=.+7 " disk block numbers (indirect if "large file") + 1005742 + i.uid: .=.+1 " owner + 1005743 + i.nlks: .=.+1 " link count (negative) + 1005744 + i.size: .=.+1 " size (in words) + 1005745 + i.uniq: .=.+1 " unique number + 1005746 + .= inode+12 + 1005746 + di: .=.+1 " directory index + 1005747 + dnode: " directory entry: + d.i: .=.+1 " inode number + 1005750 + d.name: .=.+4 " name (space padded) + 1005754 + d.uniq: .=.+1 " unique number from directory inode + 1005755 + . = dnode+8 + 1005757 + fnode: " open file entry + f.flags: .=.+1 " see below + 1005760 + f.badd: .=.+1 " offset + 1005761 + f.i: 0 " file i-number +005761: 000000 + " f.flags: + " 400000 in use + " 000002 read + " 000001 write + +Labels: +.ac 004071 r +.capt 000377 r +.chdir 000615 r +.chmod 000407 r +.chown 000421 r +.close 000720 r +.creat 000660 r +.dskb 004074 r +.dske 004075 r +.dspb 005536 r +.dsptm 004073 r +.exit 001163 r +.fork 001111 r +.getuid 000426 r +.halt 001336 r +.insys 004066 r +.int1 004067 r +.int2 004070 r +.intrp 000257 r +.link 000467 r +.lpba 005537 r +.open 000626 r +.read 000724 r +.rele 000403 r +.rename 000567 r +.rmes 001177 r +.savblk 004072 r +.save 001151 r +.seek 000431 r +.setuid 000561 r +.smes 001225 r +.status 000352 r +.sysloc 000262 r +.tell 000461 r +.time 000610 r +.unlink 000542 r +.write 000773 r +access 002312 r +alloc 001545 r +arg 002625 r +argname 002631 r +awake 001304 r +badcal 001146 r +betwen 001643 r +c1 004257 r +char 005511 r +chkint 000320 r +chkint1 001535 r +cnop 003442 r +coldentr 004507 r +collapse 002055 r +copy 001667 r +copyz 001712 r +crchar 005541 r +crdata 005540 r +crread 005540 r +cskp 003335 r +d.i 005747 r +d.name 005750 r +d.uniq 005754 r +d0 004116 r +d1 004117 r +d10 004130 r +d2 004120 r +d3 004121 r +d33 004142 r +d4 004122 r +d5 004123 r +d6 004124 r +d65 004141 r +d7 004125 r +d7999 004155 r +d8 004126 r +d9 004127 r +dacisize 003402 r +dacq1 004107 r +dacu 004077 r +dget 003104 r +di 005746 r +dm1 004204 r +dm3 004203 r +dnode 005747 r +dpchar 005535 r +dpdata 005532 r +dpread 005533 r +dpstat 005532 r +dput 003136 r +dpwrite 005534 r +dskaddr 005512 r +dskbs 005067 r +dskbufp 004103 r +dskio 002162 r +dskrd 002116 r +dskswap 002267 r +dsktrans 002220 r +dskwr 002146 r +dslot 002463 r +dspbuf 004446 r +dspbufp 005475 r +dspbufp3 004105 r +dspdata 005536 r +dspinit 002606 r +dspleft 002562 r +dsplno 004445 r +dsploc 004444 r +dspnl 002574 r +dspput 002540 r +dspresta 003512 r +edskbsp 005473 r +edspbuf 004104 r +error 001531 r +exitrw 001034 r +f.badd 005760 r +f.flags 005757 r +f.i 005761 r +fallr 002425 r +fassign 002327 r +fblksp 004106 r +fget 002360 r +finac 003370 r +fnode 005757 r +forall 002412 r +fput 002402 r +free 001604 r +getchar 001745 r +halt 002254 r +i.dskps 005733 r +i.flags 005732 r +i.nlks 005743 r +i.size 005744 r +i.uid 005742 r +i.uniq 005745 r +icreat 002475 r +idskpp 004102 r +iget 003017 r +ii 005731 r +initf 004112 r +inode 005732 r +intrp1 004021 r +intrp2 004044 r +iput 003046 r +iread 003266 r +isown 002664 r +itrunc 002675 r +iwrite 003257 r +laci 001635 r +lacq1 004110 r +lnkaddr 005510 r +locn 000317 r +locsw 000275 r +lookfor 001066 r +lu 005514 r +maxquant 004100 r +mode 005500 r +movdsp 002615 r +name 005504 r +namei 002737 r +npptchar 005502 r +nttychar 005501 r +o10000 004156 r +o100000 004166 r +o101 004141 r +o12 004130 r +o132 004143 r +o134 004144 r +o137 004145 r +o14 004131 r +o140000 004167 r +o15 004132 r +o155 004146 r +o17 004133 r +o177 004147 r +o17762 004157 r +o17777 004160 r +o20 004134 r +o2000 004153 r +o200000 004170 r +o200001 004171 r +o20001 004161 r +o212 004150 r +o300000 004172 r +o33 004135 r +o375 004151 r +o40 004136 r +o4000 004154 r +o40000 004162 r +o400000 004173 r +o40001 004163 r +o500000 004174 r +o55 004137 r +o577777 004175 r +o600000 004176 r +o640000 004177 r +o7 004125 r +o70000 004164 r +o700000 004200 r +o77 004140 r +o777 004152 r +o777700 004201 r +o777760 004202 r +o77777 004165 r +ofilesp 004101 r +okexit 000102 r +open1 000715 r +orig 000000 r +passone 001523 r +pbsflgs 005476 r +pget 003152 r +pibreak 003407 r +piret 003755 r +putchar 001730 r +putcr 004014 r +putq 002011 r +q1 004260 r +q2 004300 r +q2p 004111 r +rkbdi 001410 r +rppti 001461 r +rttyi 001337 r +s.fblks 005544 r +s.nfblks 005543 r +s.nxfblk 005542 r +s.tim 005557 r +s.uniq 005556 r +searchu 001042 r +seektell 002645 r +sfiles 005520 r +sleep 002434 r +srcdbs 002035 r +swap 000136 r +swn 000256 r +swp 000220 r +swr 001324 r +sww 001324 r +sysdata 005542 r +sysexit 000103 r +tadu 004076 r +takeq 001757 r +ttydelay 005503 r +ttyresta 003572 r +u.ac 005631 r +u.base 005651 r +u.cdir 005646 r +u.count 005652 r +u.dspbuf 005712 r +u.intflg 005713 r +u.limit 005653 r +u.mq 005632 r +u.ofiles 005654 r +u.pid 005645 r +u.rq 005633 r +u.swapre 005650 r +u.uid 005644 r +u.ulistp 005647 r +ulist 005561 r +uniqpid 005513 r +uquant 005474 r +userdata 005631 r +wakeup 003762 r +wdspo 001451 r +wppto 001475 r +wttyo 001357 r diff --git a/build/alt/a.rim b/build/alt/a.rim new file mode 100644 index 0000000..3ad059c --- /dev/null +++ b/build/alt/a.rim @@ -0,0 +1 @@ +ผ ฐฟฟฟธฎฎฐธฎดฎ ฎกขฎฃทคฅฎฆงจฎฃฉฟฟฟช บซ ถฌฌผญฃฎกฏกฐฑธขฒฟฟฟณฎฃดตฃถกฑทฎธฐฆนบปปฒฐฅฌฎธข บ ผฐทญขฟฝฒธ ถผฐฉทฎฎฎฎตฎฒฎฃธข ถกขฐฉฃถคฅผฆฐ งกจฐฉข ชถซฌฐฑญถฎฏฐฑฐฐฟฑฒฎจณธดกธตฎงถฎงทธขธทนธบฏปผผฐฟฝพคฆพฟธกพข ข ธขท ฐฎจกกฏผฌผธฒฐฉปฐฑท ข ฑ ทณ ฏกขฃคฆฅฒฆฆงฟจฉชชฆซฌฟญฎฏฎฐฏฑฐฒฎณจกฐดฃตกถทธฝนบบปฎผฐฝฝพฟฏฎญขทฃ ฆฟญฌพฅญญ ถผฒ ทผฐฌฎฎฐก ธผฒฌฎฎผฒ ธ ฐขก ทขฏฃผคฒฅฟฟฟฆ ถงธขจคฉฒชซฎฌฎฆญฎฏฐฑฎฒจกฐณฃดกฎตกฏถทบธทนฏบปผฏงฝพฐฟฎฏฐฏพคฆ ฐดฎจกตฏจขดฏฆฐดฎฏขฆฐฎคฎฐฅฎฉผตฏฏจก ผกจขดฃฃคกฅฏคฆงฐญจดฉฃชกซฏคฌฏคญฏฐฎฎฏฐฐฑฅฒผณกดฎฉตฎถฐทธฟนบ ปผ ฝฎฆพฟ ฎฉ ท ญ ฎฆ ญ ผ ก ญ ณ ฎฉ ฏ ฏง ท ญ ฏจ ฏฅ ฏฌ ฟฟฟ ฏฃ ฏฃ ฆ กฐ ข ฃฎฉ คก ฅญ ฆ งฏง จ ฉฎฉ ช ซคฏฃ ฌฐ ฏ ญฝ ฎฏ ฏฆ ฐฐ ฑฎค ฒผ ณ ดฎ ตฎค ถฐ ท ธ ฝ น บ ปฎฆ ผ ฝ พ ฟกญทฏจ ฐญฏฎญฐฎฐฏจกผฏฎฆฐ ผกผกญฎฆ กขฃคฏฅจกฆผงฐจญฉจกชผซฐฌฎคญผฎฏฐฐกฑญฒณตดทตถญทธฎฆนบญปฐผฝพฏฟจกผฐ ฎคผ ฝฝฐฎจกฝฐธฏฏฐจกฐฎฉฎชฎฉฃกฎกฐฎชฃ ฎฉกกฐขฃฎซคธฅฏฏฆจกงผจฉฏชจกซผฌฐฒญธฎฏฏฐฑฑฒฒฎฉณธดฎชตนถฏฐทถธนบฐปผจกฐฝฎฉพฟฎชฎฉฃฎฉกฐ ฎซธฏฏจกผฏจกผฐธฏฒฎฉฎชฏฐฏฎฏฐฏฐฆ กฐขฃขคขฅฟฟถฆขงพญฐจฉชญซฌญญฎญฏฐญฑขฒคขณฐฉดคขตฒขถทขธผนคถบคถปฒถผฝญพผฟผจกฎถผฒผฟฟฝ จกฐคถฒถถผขคญญฎพฎจกธฎงฎงทธขฎงกถฎงฎงฎฅฎญ ฎฅกคขขขฃคฎฃคฏฅฐฆธคงฟฟฟจฉกชซฝฌฏญฎฏฏฐฎฑฒฆณฏดผตฐธถพคฆทธนฎงบจกตปฎงผคฎงฝฎงพฟกถฎงฎงพฎง ขฟฟฟขพฎงขขผฎขคขขฎขฐฎผขพฎงขข ญกฌฎขผฃฒคญฅฌขฆฐตงกถจฎงฉฎงชพซฎงฌขญฎฎขฏฐพฑฎงฒขณขดฐตฟฟฝถทขธขนขบขปคขผคขฝฎฅพผฟขคขฎขฐ ขฒฎฅฌญผฒฟฟฝขขขขฒฒฑฏฉฝฌ กกฅขฐซฃจกงคฃฅกกฆกฃงผจกฉถชฐซฌญญฎฐฏฐฑผฒฐณตดญตผถฐพทกปธญนดบธปฌกผ ฝฐพดฟญกผฐ ญฐฏกฅฐฅตจกฆฌกฐดจกฅฌกคผฐดกตดฎซฎซ ฐขญ กฐขฎซฃถคฐฅฆญงจฐฉชซ ฌฐญฎญฏฐฐฉฑกฒฅณฐถดถตฐถญทผธธนบญปผฐฑฝพผฟฐตญผฐกป ญดธฐดญกผฐญฐฝฌกฌฐฎฉกฎฐฟฟฟฎฐ ถ ผกฐฉขฟฟฟฃ ถคฒฅฆฟฟฟงญฃจผฉฐถชญฃซกฌญขฎฏฟฐฑขฒฆณ บดขตฒฅถญขทผธฌนญคบปฟผญขฝทพฟฟญฅกญฃฐฆ ตญฃฌกฐกขดข บคญฃฒญขฟทญฅฟดญขฆ บกญฃฒจกฐกธ กกขฒฃคตฅฃฆขงคฃจดฉขชผซฐณฌฃญขฎคฃฏดฐขฑผฒผณคฃดดตผถฒฃทธฟฟฟนทบปคทผฟฟฟฝทพฟคทฟฟฟทผขคท คขฐ ฒทฟฟฟคฟฟฟผขคคขฐฒขฝฏฒกณขข กญขฃฃคคฒฅฆฏงฒฅจกนฉฌชฝซฌฃญคฅฎฒฅฏฐผ ฑกฒนณกฟด ตกถทกผธฝนขฐบผปฒฏผญฝฌขฑพฐฟกธฃฐ ฝขฑ ขฐคฏญฒฏผ กกกทขฏผฐกฒญฃฐญขฐขฑฒขฟฟผ ขกพจทขขฃขคฌขฅฒฆพงขจคขฉคขชฐฃซคฌฒญฎฝฏฐฐณฑพจทฒขณขดตกกถฟทผธกนฌปบจกฐปผผฐฝพทฟฟพฟฌปข กญขทฟฒญฃกกญฌฌญฒญฐญฒฐฐคขพขก ทกขฟฃคญฅฒฆงฃจกฉกญชฌซฒฌธญญฎฏขฐญฑฒฆฒณญดผ ตตถทขธดนตบปขผดฝขพดฟขขตขด ขขกธขฟฟฟขฒคฒฒฒฟฟถขฟฟฟธนกธนธนขธน ผ กขธนคฃ ผคผฅฐฃฆ ฝงผจฒฉคขชฐซฌฌญคขฎฐญฏธฐผ ฑทฒพณดตผ ถฐตทธผ นดบขปผฟฟฝฎพขฟทขกขฟ ขทคทฒทฏตฎคผฒฌฏขด ดจญผฒฟฟถขขกฐฌฏฏผ ฐคกคขขฐฃฒคญฅกปฆฏฏงฏจฏฑฉขชกซฎฌฏฐญฎคฏฒฐฑฃฒกณกดฒฐตผ ถตทธดนกบขปฝผทฝพฏฏฟคฐฒฐข ทฏฏฒฎฉฌฎซฐฎฉผฎฉผด จกชฒฎฉกปฎฉฐฎชฎฐพญฐกธ ตกฎงขฎฃฐชคคฅคฆคงฝจด ฉฐกชกถซฎงฌญขฎขฏดฐขฑคฒฒณดฏฆตผถคฏฆทฏฆธนฏงบผปฐถผฒณฝพขฟณกฏคฏฏ ฏผฐฏฏงทญฏจคญฎญฎฏฌฏฅขกปฏฎคฏขฟฟฟฏฃฏคฏฆฒฝ กจกงขผฃฒ คฌกฅฐฐฆตงฌกจผฉคคชฌกปซฐฒฌดญคคฎคคคฏฒ ฐฑฒ ฒคคณฌกดฐตถกปทธฝนถบคคปฒ ผฝคฅพฌกขฟฐคคฅฒผกซธคค ฒ ก คคกปคฉคฅฒธธ ฌฝฟฟฟญธขฒฎฃคฎฃฒทญ ฎฆกขญฃคฒฅฆงฎฉจฉฎซชธซฎซฌผญฒฅฎฌกฏฐฒฐฏคฑฒฅฒฏฐณฒฅดตถทฎคธผนฌฏขบผปผฒดฝพฟฟนฟขกขขผฐ ฏจกธผฐฟฟขกขขขผคขคขฐขขคขคขฐฏจกฝฏฒฝ กฟฟฟขฃขคคฅฏฆจกงผจฒฉฟฟธชฏคซผฌถ ญขฎผฏฒฐฏฆฑฏฆฒณฏงดผตฐถขทธฏจนฎบผปฐผฏฉฝฎพผฟฐฏชฎผฐฏซ ฎผฐฏงคฒคฏฆคขฐฑฒฏผ ต ข ดกขกข ผ ตดกข ขกทขฃฏคฅฒฆงขกจฉพฏชซฟฟฟฌข ญฎฟฟดฏขขฐฑฎฒผณฐทดคขขตฐฐถฒฆทฟฟฟธนบฟฟฟปผฝพฟคขขฐฝขกฆฒฆ ฏฆถขฃชขคขฃจก กขฅทฏงขฃกฃกฏคผฒฏงฒขค กขฅขฅฃทคฏงฅฆงขคจฆฉฒชซถ ฌขฆญฏฎจกธฏผฐฐฑขฆฒฃณกดกตฐฝถกทขฆธขฆนผบฅปขฆผฒชฝฅพขงฟทฏฟฟ นขงฆขงฏฏฏกธฏขฆถ ฃกกฌกขงขงผฅขงขจขฆจก กกขงขขงฃผคฒชฅฅฆขฆงขจจฉขฆชขงซขจฌฆญขฆฎฒชฏฐขฉฑฏฒถณดฏตฐบถทขฉธขนฏบฟฟฟปถผฝพคถฟถขชคถกด ฏฏค ผขฉผฃกขชขชขซผกผฒถขชขฉชขฌขฉจก กข ฏฐผ กคขฉขคขชฃฐฏค ฏฅฐญฆขฉงฃจกฉฏคชฏคซขฌฌฆญขซฎฒถฏขฉฐจก ฑผฒฐณ ฏดฐตขฌถฆทฐธนฎบฐปผฏฏฝผพฟฏฑฒธฏคฆ ฏคฒ นธงกฐธงฑธงชญผฐธงญฟฟฟญญผผฐญฟฟฟญฐญธฐถธคฌพคญฐผ คญฏกคฌผขผฃฟฟฟคฅธคฆญงผจคญฉผชบซญฌผญฐญฎค ปฏผฐฐฑฌกฒฐญณคญดฐญตฐถธนทฐพธฟฟฟน ผบธนป ฝผธนกฝฐญพธชฟผฐธ ญผฐญ ขผฐญฐญกญฌฝธ งฟฟถ ปฐญผฐธขฐญผฐธญธฐญธฐตญผคญ ธกญขฌกฉฃฐ คกฅฆญงญจฒฉญชญซฌกจฌผญฐญฎญฏผฐกปฑญฒ ณบดฐญตธถฐทธธบนฐญบปญผผฝฒบพญฟญผฐคญกฅ ฐธฌก ฌกผฒบญกผ ผญฒบญฒญฒบธฃฐคธฃธฃญฌกฐ คกผ ญกฒขญฃฐญคธฅฐฆญงผจฐญฉญชธซญฌฐฏญธฎญฏญฐผฑฐธฒกณดฐตญถฌกทฐธญนผบฐพปญผญฝฐฏพธฟญฒกปญฐญญ ญญฒญฐญธฐธกฅฐธฐญญฒญฐญธคฐฅธคธคฌฟจกซผฐญญ ฒกญขฝฃธคคฐญฅธทฆฐฌงธทจญกฉฟฟฟชญ ซฐญฌธทญฎผฏ นฐธขฑฒฒณขญดฟฟถตขฎถ พท ธ ฟน บขญปผผขญฝผพฐ ฟข ก ก คขฎ ฐบ ฝ ฒฒ ก ญ ฝ ฒ ก ท ก ฅ ผ ฐ ก ฅ ผ ฐ ญ ฒ ญ ญ ฒ ญ ก ขฐญ ฃฐ ฒ คก ฅ ธ ฆก งฅ จผ ฉฐ ฆ ชญ ซฒ ฌญ ญญ ฎฒ ฏญ ฐ ฑฐญ ฒ ณ ด น ตฐ ถ ท ธ น บ ป ผ ฝ พญฑ ฟญฑกกฎฌกฏกฟกจดก คฉกญคกขฐกขฐกฃกฎกดก ก กกกกกก กกกกกกกกกกก กญก ฟกกกขกกฃกคกฅกฆญกงฟกจกฉฝกชฟกซกฌ กญผฟกฎกฏฟฒกฐฟฟกฑกฒกณกดกตฟฟกถกทกธกนกบกป กผจกฝฏฟฟกพฐกฟดขธขฟฟขฟฟฐขฟฟฝขฟฟฟขฐฃขฑคขฃฃฃฃฃฃฃฃฃ ฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃฃ ฃฃ ฃขฃกฃขฃคฃฃฃคฃฆฃฅฃฆฃจฃงฃจฃชฃฉฃชฃฌฃซฃฌฃฎฃญฃฎฃฐฃฏฃฐฃฒฃฑฃฒฃดฃณฃดฃถฃตฃถฃธฃทฃธฃบฃนฃบฃผฃปฃผฃพฃฝฃพคฃฟคคคคคคคคค คคคคคคคคคคคคคคคคคคคคคคคคคคคคคคคคคคคคคค คค คขคกคขคฃคฆจฏคงฟ คจฅฅธฅธขฅธคฅพฐฅธขฅฅพคฆฅฅฝฅฒฅฐฅทฅฟฅญขฅฅกฅฅกฅฌฅฅฝฅถฅฅฅ ฑฌปฌปญญฑญฒญณญดญต ญถญทญธญนญบญปญผญฝ ญพญฟฎฎฎฎฎฎ ฎฎฎฎฎฎฎฎ ฎฎฎฎฎฎฎฎ ฎฎฎฎฎฎคฟฟฟฎฅฎฆฎงญฑฎจฎฉฎชฎซฏฏฏฑผ \ No newline at end of file diff --git a/build/alt/image.fs b/build/alt/image.fs new file mode 100644 index 0000000..d37e641 Binary files /dev/null and b/build/alt/image.fs differ diff --git a/build/alt/unixv0.simh b/build/alt/unixv0.simh index ea840ac..38593b0 100644 --- a/build/alt/unixv0.simh +++ b/build/alt/unixv0.simh @@ -5,8 +5,9 @@ show cpu set tti unix set rb ena -att rb alt/image.fs +att rb image.fs show dev -load -S alt/a.rim +load -S a.rim dep pc 0100 +go