From 3cc31ce0560e2aba8936c7fc2e5348aa0681f2a1 Mon Sep 17 00:00:00 2001 From: Eric Swenson Date: Mon, 5 Dec 2016 21:56:10 -0800 Subject: [PATCH] Added HSNDEV. --- README.md | 1 + build/build.tcl | 6 + src/sysen1/hsndev.28 | 470 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 477 insertions(+) create mode 100644 src/sysen1/hsndev.28 diff --git a/README.md b/README.md index 0f2157d0..62888792 100644 --- a/README.md +++ b/README.md @@ -120,6 +120,7 @@ from scratch. - SPELL, ESPELL spell checker - DCROCK, digital watch. - JOBS, list jobs by category + - HSNDEV, HSNAME device 6. A brand new host table is built from the host table source and installed into SYSBIN; HOSTS3 > using H3MAKE. diff --git a/build/build.tcl b/build/build.tcl index 1a052481..f3f858c4 100644 --- a/build/build.tcl +++ b/build/build.tcl @@ -680,6 +680,12 @@ respond "*" ":link sys1;ts espell,sys;ts spell\r" respond "*" ":midas sys2;ts jobs_sysen1;jobs\r" expect ":KILL" +# hsndev +respond "*" ":midas device;jobdev hsname_sysen1;hsndev\r" +expect ":KILL" +respond "*" ":link device;jobdev hs,device;jobdev hsname\r" +respond "*" ":link device;jobdev hf,device;jobdev hsname\r" + # ndskdmp tape respond "*" ":link kshack;good ram,.;ram ram\r" respond "*" ":link kshack;ddt bin,.;@ ddt\r" diff --git a/src/sysen1/hsndev.28 b/src/sysen1/hsndev.28 new file mode 100644 index 00000000..905a41ab --- /dev/null +++ b/src/sysen1/hsndev.28 @@ -0,0 +1,470 @@ +;-*-Midas-*- + + Title HSNAME: jobdevice + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; HS:SNAME;FN1 FN2 translates to DSK:;FN1 FN2 +;;; +;;; HF:FN1 FN2 translates to DSK:;FN1 FN2 +;;; +;;; H: and HSNAME: are DWIMish and work as HS: if possible, else HF: +;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +A=1 ;General porpoise +B=2 +C=3 +D=4 +E=5 +T1=6 +T2=7 +T3=10 +P=17 + +Call==PUSHJ P, +Return==POPJ P, + +BOJc==1 +DSKc==2 ;Who knows which way the file will be opened? +LSRi==3 ;Channel to map in the Inquire database + +PDLen==20 + + ;;; +;;;;; + ;;; + +Define SYSCAL op,args + .Call [Setz ? Sixbit /op/ ? args ((Setz))] + Termin + + ;;; +;;;;; + ;;; + + 444400,,Buffer*2000 ;Image (BufPtr - 1) AI = -1 (true) +BufPtr: 440700,,Buffer*2000 ;Ascii (BufPtr + 0) AI = 0 (false) + + 2000 ;Image +BufLen: 2000*5 ;Ascii + + +IO: 0 ;True = OUTPUT mode, else INPUT +AI: 0 ;True = IMAGE mode, else ASCII + +CalBlk: SETZ +CalNam: 0 +CalChn: %Climm,,DSKc +CalArg: Block 10 + +Opcode: 0 ;Stuff given to us by JOBCAL +Data: Block 3 +Cargs: Block 5 + +OutPtr: 0 ;AOBJN to next block of +Clouts: Block 7 ;values to return to calling program + + +;Call's to already open file, no returned values +Pass2: Sixbit /ACCESS/ ? Sixbit /DELEWO/ ? Sixbit /DSKUPD/ ? Sixbit /SREAPB/ + Sixbit /FINISH/ ? Sixbit /FORCE/ ? Sixbit /RENMWO/ ? Sixbit /RESRDT/ + Sixbit /SAUTH/ ? Sixbit /SDMPBT/ ? SIxbit /SFDATE/ ? Sixbit /SRDATE/ +nPass2==.-Pass2 + +;Call's to open file, with values returned. +Pass3: Sixbit /DIRSIZ/ ? 2 + Sixbit /FILBLK/ ? 4 + Sixbit /FILLEN/ ? 4 + Sixbit /RAUTH/ ? 1 + Sixbit /RDMPBT/ ? 1 + Sixbit /RFDATE/ ? 1 + Sixbit /RFNAME/ ? 5 + Sixbit /RFPNTR/ ? 2 + Sixbit /STATUS/ ? 1 + Sixbit /LNKEDP/ ? 1 +nPass3==<.-Pass3>/2 + + +Mode: 0 +JOBds: 122 ;Ascii/Unit/Output/device-code 22 +Device: 0 ;5 words starting here are passed to a .RCHST +FN1: 0 +FN2: 0 +Sname: 0 +DskPtr: 0 + +PDList: -PDLen,,PDList + Block PDLen + +Where: Open ? Iot ? MLink ? Reset ? Rchst ? Access ? FDele1 ? FDele2 ? SCall +;Opcode= 0 1 2 3 4 5 6 7 8. + +Tsint: Loc 42 + -TsintL,,Tsint + Loc Tsint + P + 0 ? 1_BOJc ? -1 ? -1 ? Handle +TsintL==.-Tsint + +Error: 0 ;Error returned by a syscall +DWIM: 0 ;True for H: or HSNAME: + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +Begin: Move P,PDList + .Suset [.sMsk2,,[1_BOJc]] + .Suset [.rOption,,T1] + Tlo T1,Optint + .Suset [.sOption,,T1] + Syscal OPEN,[%Clbit,,.uao\10 + %Climm,,BOJc + [Sixbit /BOJ/]] + Jrst Die + Syscal CORBLK,[%Climm,,%Cbprv ;Make DSK buffer + %Climm,,%Jself + %Climm,,Buffer + %Climm,,%Jsnew] + Jrst Die + Movei A,LSRi + Move B,[-20,,Inquir] + Call LSRTNS"LSRMAP ;Make pages for INQUIR hackery + Jrst Lose + Syscal JOBCAL,[%Climm,,BOJc + %Clout,,Opcode + [-12,,Data]] + Jrst Lose + Jrst GCS + + ;;; +;;;;; + ;;; + +Handle: Syscal JOBCAL,[%Climm,,BOJc + %Clout,,Opcode + [-12,,Data]] + Jrst Dismis +GCS: Hrrz A,Opcode ;Grand Central Station + Jrst @Where(A) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; .UUO handling (mostly... sort of...) +;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +Open: Ldb T1,[370200,,Opcode] ;Bits 4.5 and 4.6 on = Close + Jumpn T1,Close + Move A,Data+5 + Andi A,5 ;No fancy modes, just ascii/image, i/o + Call Moder ;Makes IO and AI from control bits + Movem A,Mode + Move T3,Data+4 + Call DWIMp + Skipn DWIM + Jrst Open1 + Trne A,1 ;No DWIMish open for outputs + Jrst fatMNA +Open1: Movem T3,Device + Move T1,Data+3 ;SNAME + Move T2,Data+1 ;FN1 + Movem T2,FN1 + Call gHsnam + Move T1,Data+2 + Movem T1,FN2 + Syscal OPEN,[%Clbtw,,Mode ? %Climm,,DSKc + [Sixbit /DSK/] ? FN1 ? FN2 ? Sname + %Clerr,,Error] + Jrst FatErr + Syscal CORBLK,[%Climm,,0 ;Delete INQUIR pages - No longer needed + %Climm,,%Jself + [-20,,Inquir]] + Jfcl ;ok, ok, we'll keep 'em! + .Close LSRi, + Syscal JOBSTS,[%Climm,,BOJc ? JOBds ;Specify real SNAME + Device ? FN1 ? FN2 ? Sname] + Jfcl ;...if we can. + Syscal JOBRET,[%Climm,,BOJc ? %Climm,,1] + Jrst Lose + +Wait: Jfcl + .Hang ;Now wait until we are needed... + +Close: .Close DSKc, + Jrst Die ;If there's no file, why should we stick around? + +Iot: Skipl Data ;Block mode IOT? + Jrst Ioti + Hlro B,Data ;-#words (Indeed) + Movns B ;#words + Skipn AI + Imuli B,5 ;(words x 5 = #bytes for ascii mode) + Jrst Siot + +Ioti: Move B,Data + Caie B,1 + Jrst Siot + Skipe IO + Jrst [.Iot BOJc,A ;BOJ --> DSK (o) + .Iot DSKc,A + Jrst Handle] + .Iot DSKc,A ;DSK --> BOJ (i) + .Iot BOJc,A + Jrst Handle + +Siot: Move A,AI ;B has #bytes to SIOT + Skipe IO + Jrst Sioto +Sioti: Move T1,B + Camle T1,BufLen(A) + Move T1,BufLen(A) + Move D,T1 + Move T2,BufPtr(A) + Syscal SIOT,[%Climm,,DSKc ? T2 ? T1 ? %Clerr,,Error] + Jrst NFErr + Move E,T1 + Sub D,T1 ;# actually gotten from DiSK + Move T1,D + Move T2,BufPtr(A) + Syscal SIOT,[%Climm,,BOJc ? T2 ? T1 ? %Clerr,,Error] + Jrst NFErr + Jumpe E,[Sub B,D + Jumpn B,Sioti + Jrst Handle] + Syscal JOBRET,[%Climm,,BOJc ? %Climm,,0] + Jrst Lose + Jrst Handle + +Sioto: Move T1,B + Camle T1,BufLen(A) + Move T1,BufLen(A) + Move D,T1 + Move T2,BufPtr(A) + Syscal SIOT,[%Climm,,BOJc ? T2 ? T1 ? %Clerr,,Error] + Jrst NFErr + Move T1,D + Move T2,BufPtr(A) + Syscal SIOT,[%Climm,,DSKc ? T2 ? T1 ? %Clerr,,Error] + Jrst NFErr + Sub B,D + Jumpn B,Sioto + Jrst Handle + +MLink: Move T3,Data+4 ;Device + Call DWIMp + Skipe DWIM + Jrst fatMNA + Move T1,Data+3 ;SNAME + Move T2,Data+1 ;FN1 + Call gHsnam + Move E,Sname + Move T1,Data+6 + Move T2,Data + Call gHsnam + Exch E,Sname + Syscal MLINK,[[Sixbit /DSK/] ? Data+1 ? Data+2 ? Sname + Data ? Data+5 ? E + %Clerr,,Error] + Jrst FatErr + Syscal JOBRET,[%Climm,,BOJc ? %Climm,,1] + Jrst Lose + Jrst Die + +Reset: .Reset DSKc, + Jrst Win + +Rchst: Syscal RFPNTR,[%Climm,,DSKc ? %Clout,,DskPtr ? %Clerr,,Error] + Jrst NFErr + Syscal JOBRET,[%Climm,,BOJc ? %Climm,,0 ? [-5,,[Sixbit /DSK/]]] + Jrst Lose + Jrst Handle + +Access: .Access DSKc,Data + Jrst Win + +FDele1: Move T3,Data+4 ;Rename or Delete + Call DWIMp + Skipe DWIM + Jrst fatMNA + Move T1,Data+3 + Move T2,Data+1 + Call gHsnam + Skipe Data + Skipn Data+5 + Jrst Delete + Syscal RENAME,[[Sixbit /DSK/] ? Data+1 ? Data+2 ? Sname + Data ? Data+5 ? %Clerr,,Error] + Jrst FatErr + Syscal JOBRET,[%Climm,,BOJc ? %Climm,,1] + Jrst Lose + Jrst Die + +Delete: Syscal DELETE,[[Sixbit /DSK/] ? Data+1 ? Data+2 ? Sname] + Jrst FatErr + Syscal JOBRET,[%Climm,,BOJc ? %Climm,,1] + Jrst Lose + Jrst Die + +FDele2: Skipe DWIM + Jrst nfMNA + Skipe Data + Skipn Data+5 + Jrst DeleWo + Syscal RENMWO,[%Climm,,DSKc ? Data ? Data+5 ? %Clerr,,Error] + Jrst NFErr + Jrst Win + +DeleWo: Syscal DELEWO,[%Climm,,DSKc ? %Clerr,,Error] + Jrst NFErr + Jrst Win + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Symbolic .CALL handling (really!) +;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +SCall: Move A,Data ;Name of call +Look2: Came A,[Sixbit /CLOSE/] + Jrst Look2a + .Close DSKc, + Jrst Die + +Look2a: Movsi B,-nPass2 +Loop2: Came A,Pass2(B) + Jrst [Aobjn B,Loop2 + Jrst Look3] + Movem A,CalNam + Sos C,Data+2 ;# args (not counting their channel) + Move T2,[Setzb Error] + Movem T2,CalArg(C) +Loop2a: Movei A,CArgs(C) ;Store loc of arg + Movem A,CalChn(C) + Sojg C,Loop2a + .Call CALBLK + Jrst NFErr ;Not fatal if we lose + Jrst Win + +Look3: Movsi B,-nPass3 + Movei C,Pass3 +Loop3: Came A,(C) + Jrst [Addi C,2 + Aobjn B,Loop3 + Jrst nfMNA] + Movem A,CalNam + Movn B,1(C) ;Minus # VALS needed/wanted + Hrlm B,OutPtr + Movei T1,Clouts + Hrrm T1,OutPtr ;AOBJN pointer to returned-data area + Movei T2,CalArg + Move E,[%Clout,,Clouts] +Loop3a: Movem E,(T2) + Aoj E, + Aoj T2, + Aojn B,Loop3a + Move T1,[Setzb Error] + Movem T1,(T2) ;Last thing is %Clerr,,Error + .Call CALBLK + Jrst NFErr + Syscal JOBRET,[%Climm,,BOJc ? %Climm,,1 ? OutPtr] + Jrst Lose + Jrst DisMis + +;; +;;; Win or Lose +;; + +Win: Syscal JOBRET,[%Climm,,BOJc ? %Climm,,1] + Jrst Lose + Jrst Handle + +DisMis: Syscal DISMIS,[P] + Jrst Lose + +Die: .Logout 1, + .Value + +NFErr: Setz T1, +FatErr: Seto T1, + Movss Error + Syscal JOBRET,[%Climm,,BOJc ? Error] + Jrst Lose + Jumpn T1,Die + Syscal DISMIS,[P] +; Jrst Lose + +Lose: Syscal JOBRET,[%Climm,,BOJc ? [%Enadv,,]] + Jfcl + .Lose %LsSys + +fatMNA: Syscal JOBRET,[%Climm,,BOJc ? [%Ensmd,,0]] ;Mode Not Available + Jfcl + Jrst Die + +nfMNA: Syscal JOBRET,[%Climm,,BOJc ? [%Ensmd,,0]] + Jrst Lose + Jrst Handle + +NotUNM: Syscal JOBRET,[%Climm,,BOJc ? [%Ebdfn,,0]] ;Illegal FN + Jfcl + Jrst Die + +;; +;;; Subroutines +;; + +DWIMp: Came T3,[Sixbit /HSNAME/] + Camn T3,[Sixbit /H/] + Setom DWIM + Return + +gHsnam: Movei A,LSRi + Came T3,[Sixbit /HF/] + Jrst gHp1 + Move T1,T2 + Setz T2, +gHp1: Move B,T1 + Call LSRTNS"LSRUNM + Jrst [Camn T3,[Sixbit /HS/] + Jrst NotUNM + Move B,T2 + Call LSRTNS"LSRUNM + Jrst NotUNM + Move T1,T2 + Jrst .+1] + Move A,T1 + Setzb C,D + Call LSRTNS"LSRHSN + Jrst NotUNM + Movem D,Sname + Move T1,D + Return + +Moder: Trne A,1 + Setom IO ;Output + Trne A,4 + Setom AI ;Image + Caie A,.uai + Jrst [.Close BOJc, + Move T1,A + Trc T1,1 + Syscal OPEN,[%Clbtw,,T1 ? %Climm,,BOJc ? [Sixbit /BOJ/]] + Jrst Lose + Return] + Return + + ;;; +;;;;; + ;;; + +$$HSNM==1 +$$ULNM==0 +$$ULNP==0 +$$UNAM==0 + +.INSRT SYSENG;LSRTNS + +Buffer==._-14+1 ;DSK buffer page +Inquir==Buffer+1 ;Start of LSRTNS-mapped-stuff pages + + END BEGIN