diff --git a/build/build.tcl b/build/build.tcl index 47dfe8d2..88979d6c 100644 --- a/build/build.tcl +++ b/build/build.tcl @@ -190,6 +190,11 @@ respond "*" ":midas device;jobdev arc_syseng;arcdev\r" expect ":KILL" respond "*" ":link device;jobdev ar,device;jobdev arc\r" +respond "*" ":print channa;..new. (udir)\r" +respond "*" ":midas channa;atsign taraka_syseng; dragon\r" +expect ":KILL" +respond "*" ":link sys; atsign dragon,channa; atsign taraka\r" + respond "*" "\005" respond "sim>" "at tu0 out/output.tape\r" respond "sim>" "c\r" diff --git a/src/syseng/dragon.206 b/src/syseng/dragon.206 new file mode 100644 index 00000000..0c76b14a --- /dev/null +++ b/src/syseng/dragon.206 @@ -0,0 +1,104 @@ +;;;-*-Midas-*- + +TITLE DRAGON -- top-level daemon + +;;; The ITS system job looks for the file DSK:SYS;ATSIGN DRAGON, and if it exists, +;;; launches this DRAGON daemon. When launched, DRAGON logs in as TARAKA and searches +;;; the CHANNA directory for files whose FN1 is RAKASH. Any that it finds, it launches +;;; as daemons. + +;;; +;;; The source for DRAGON has been long lost. When ITS was active, the last time it +;;; was built was in 1977. This source was recreated from the binary by EJS on +;;; on 2016-11-15. When assembled, this version results in an identical binary +;;; to the one that was included in the PI/MX distribution, and therefore to the +;;; version in place on MC/AI at the time of the shutdown of those systems. +;;; +;;; Note: I'm sure some of the constants in this file should be replaced with +;;; symbolic constants. At this point, I haven't yet figured out what they should +;;; all be (it's been over 36 years since I last used ITS at MIT. As I and others +;;; see fit, we can update this source to be more in keeping with the standards +;;; expected of ITS developers! -- EJS@MIT-MC (today: eric@swenson.org) +;;; + +dirchn=4 +filchn=5 +jobchn=6 + +dirbsz=2000 + +nop=255000000000 + +taraka=sixbit/TARAKA/ +channa=sixbit /CHANNA/ +rakash=sixbit /RAKASH/ + +lpdl==:100. +.vector pdl(lpdl) + +go: .call [setz ;; login as TARAKA + sixbit/LOGIN / + [ taraka ] + setzi 0] + nop ;; ignore errors logging in + .suset [.ssnam,,[channa]] ;; set SNAME to CHANNA + ;; open CHANNA UDIR + .open dirchn, [.bii,,'DSK ? sixbit/.FILE./ ? sixbit /(DIR) /] + jsr done + .iot dirchn, [-dirbsz,,dirblk] ;; read in UDIR + .close dirchn, + move 1, dirblk+1 ;; get offset to name area into R1 + addi 1, dirblk ;; convert to address of name area +filoop: cail 1, [ taraka ] ;; have we reached end of buffer? + jsr done ;; yes, abort + move 2, (1) ;; get FN1 into R2 + camn 2, [ rakash ] ;; is FN1 == RAKASH + .call [setz ;; yes, open the file + sixbit /OPEN / + [ .uii,,filchn ] + [ sixbit /DSK / ] ;; DSK: device + [ rakash ] ;; FN1 + 1,,1 ;; FN2 (from dirblk in R1 + 1) + 400000,, [ channa ]] + jrst nextfl ;; try next file + .call [setz ;; start create daemon job + SIXBIT/OPEN / + [ 1,,jobchn ] + [ sixbit /USR / ] ;; USR: device + 001000000000 ;; use uname of TARAKA + 400001,,1] ;; use jname of FN2 of daemon + jrst nextfl ;; process next file on error + .reset jobchn, + .call [setz ;; load program into job + sixbit/LOAD / + 001000,,jobchn ;; specify job channel + 401000,,filchn] ;; specify file channel + jrst nextjb ;; on error, clean up job and process next file + move 2, 1(1) ;; get FN2/Job name in R2 + .uset jobchn, [.ssnam,,2] ;; set SNAME of job + .iot filchn, 2 ;; get starting address? + hrrzs 0, 2 ;; zero out instruction opcode? + .uset jobchn, [.supc,,2] ;; set starting address of new job + .call [setz ;; disown job (doc doesn't seem to match + SIXBIT/DISOWN/ ;; this call from sysdoc; _calls 127 + 201000,,jobchn ;; don't know what these bits do + 405000,,5] ;; don't see second argument documented??? + .value 0 ;; kill ourselves on error? + caia 0, 0 +nextjb: .uclose jobchn, ;; kill job +nextfl: .close filchn, ;; close file + .close jobchn, ;; close job + addi 1, 5 ;; compute address of next file + jrst filoop ;; and loop + +done: 0 + .logout 0, + .value 0 + +dirblk: 0 + 0 + +bufsize==1632 +loc .+bufsiz + + end go