From fbcf82e6ddaeac56f9ec24e42be8ea55e151e15f Mon Sep 17 00:00:00 2001 From: Adam Sampson Date: Fri, 4 May 2018 19:26:42 +0100 Subject: [PATCH] Reconstruct TAA; UUOS >. This is based on AI: SYS2; TS XXFILE, which was compiled by TAA on 1979-08-23 from XXFILE MTA220, and on @larsbrinkhoff's reconstruction. After modifying the XXFILE MTA224 source to match (remove the OASC in CTTYB, and the three .CLOSEs in CQUIT), this compiles into an identical binary. The UUO handlers look like they're based on the ones from DIRED, so I've preserved the DIRED comments where possible, but otherwise adjusted to match the style used in XXFILE. --- Makefile | 2 +- src/taa/uuos.100 | 273 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 274 insertions(+), 1 deletion(-) create mode 100644 src/taa/uuos.100 diff --git a/Makefile b/Makefile index c5d70904..a8cdf720 100644 --- a/Makefile +++ b/Makefile @@ -10,7 +10,7 @@ SRC = system syseng sysen1 sysen2 sysen3 sysnet kshack dragon channa \ spcwar rwg libmax rat z emaxim rz maxtul aljabr cffk das ell ellen \ jim jm jpg macrak maxdoc maxsrc mrg munfas paulw reh rlb rlb% share \ tensor transl wgd zz graphs lmlib pratt quux scheme gsb ejs mudsys \ - draw wl + draw wl taa DOC = info _info_ sysdoc sysnet syshst kshack _teco_ emacs emacs1 c kcc \ chprog sail draw wl pc BIN = sys2 emacs _teco_ lisp liblsp alan inquir sail comlap c decsys moon \ diff --git a/src/taa/uuos.100 b/src/taa/uuos.100 new file mode 100644 index 00000000..028e1cfb --- /dev/null +++ b/src/taa/uuos.100 @@ -0,0 +1,273 @@ +; 2018 reconstruction of TAA;UUOS > -*-MIDAS-*- +; Reconstructed from +; SYS2; TS XXFILE (built 1979-08-23 from DM: SYSENG; XXFILE MTA220) +; SYS2; TS MSEND (built 1980-07-28 from DM: SYSENG; MSEND 140) +; SYSEN1; XXFILE MTA224 (timestamp 1982-03-08) +; SYSEN2; MSEND 140 (timestamp 1979-11-10) +; Caller must define DBP, and may define UUOERR if they provide UERROR. + +TITLE UUOS + +; Useful locations relative to P inside UUO handlers +UUO40==-14 +AC0==-10 +AC1==-7 +ACN==-6 +UUOE==-1 + +DEFINE FATAL MSG/ + .VALUE [ASCIZ /: FATAL ERROR -- MSG +/] +TERMIN + +UUOSCR: BLOCK 2 +BASE: 10. + +UUOCT==0 +UUOTAB: JRST ILUUO +DEFINE DEFUUO X + UUOCT==UUOCT+1 + X=UUOCT_33 + JRST U!X +TERMIN + +IRPS X,,[ODEC OOCT OBPTR OHPOS OVPOS OCTLP OSIX OASC OASCI OASCR IBLOCK SIXSTR ODECA OOCTA OSIXA OASCA OASCB] + DEFUUO X +TERMIN +IFDEF UUOERR,DEFUUO ERROR + +UUOMAX==.-UUOTAB + +UUOH: 0 + PUSH P,UUOH + PUSH P,40 ; get eff addr. of uuo + PUSH P,[0] + PUSH P,O + PUSH P,A + LDB A,[270400,,-3(P)] ; get uuo ac, + PUSH P,(A) + PUSH P,1(A) + PUSH P,A + MOVE A,-3(P) + PUSH P,B + PUSH P,C + PUSH P,D + PUSH P,E + MOVEI O,@-12(P) + PUSH P,O + PUSH P,@O + MOVE E,ACN(P) + MOVE B,UUOE(P) + LDB C,[330600,,UUO40(P)] ; op code + CAIL C,UUOMAX + MOVEI C,0 ; grt=>illegal + JRST @UUOTAB(C) ; go to proper rout + +UUORET: SUB P,[2,,2] + POP P,E + POP P,D + POP P,C + POP P,B + POP P,A ; restore ac's + POP P,1(A) + POP P,(A) +UUORT1: POP P,A + POP P,O + SKIPE (P) + XCT (P) + SUB P,[2,,2] + POPJ P, + +ILUUO: FATAL ILLEGAL UUO + +UOASCA: MOVE B,UUOE(P) + HRLI B,440700 +UOASAL: ILDB D,B + JUMPE D,UUORET + IDPB D,AC1(P) + AOS AC0(P) + JRST UOASAL + +UOASCB: IDPB B,AC1(P) + AOS AC0(P) + JRST UUORET + +UOSIXA: SKIPN C,(P) + JRST UUORET + MOVE B,AC1(P) + PUSHJ P,ISIXST + ADDM C,AC0(P) + MOVEM D,AC1(P) + JRST UUORET + +UODECA: SKIPA A,DECTAB +UOOCTA: MOVE A,OCTTAB + MOVE C,(P) +UONUML: IDIV C,(A) + JUMPN C,UONUM1 + AOBJP A,UONUM1 + MOVE C,D + JRST UONUML +UONUM1: ADDI C,"0 + IDPB C,AC1(P) + AOS AC0(P) + MOVE C,D + AOBJP A,UUORET + IDIV C,(A) + JRST UONUM1 + +DECTAB: -5,,[10000. ? 1000. ? 100. ? 10. ? 1] +OCTTAB: -5,,[10000 ? 1000 ? 100 ? 10 ? 1] + +UOBPTR: MOVEI C,0 + MOVE B,(P) + JRST UOASC1 +UOASCR: SKIPA C,[-1] ; -1 for end of type +UOASC: MOVEI C,0 ; no cr + HRLI B,440700 ; make ascii pointer +UOASC1: MOVEI A,0 + PUSH P,B +UOASCC: ILDB D,B ; get char + JUMPE D,UOASCD ; finish? + AOJA A,UOASCC +UOASCD: POP P,B + PUSHJ P,SIOTA + JUMPE C,UUORET + MOVEI A,2 + MOVE B,[440700,,[ASCIZ / +/]] + PUSHJ P,SIOTA + JRST UUORET + +UOCTLP: MOVEI A,20 + PUSHJ P,IOTAD + MOVE A,B + PUSHJ P,IOTAD + JRST UUORET + +UOASCI: MOVE A,B ; prt ascii immediate + PUSHJ P,IOTA + JRST UUORET + +UOSIX: SKIPN C,(P) + JRST UUORET + MOVE B,[440700,,UUOSCR] + PUSHJ P,ISIXST + MOVE A,C + PUSHJ P,SIOTA + JRST UUORET + +UOVPOS: MOVEI A,20 + PUSHJ P,IOTAD + MOVEI A,"V + PUSHJ P,IOTAD + MOVEI A,10(B) + PUSHJ P,IOTAD + JRST UUORET + +UOHPOS: MOVEI A,20 + PUSHJ P,IOTAD + MOVEI A,"H + PUSHJ P,IOTAD + MOVEI A,10(B) + PUSHJ P,IOTAD + JRST UUORET + +UODEC: SKIPA C,[10.] ; get base for decimal +UOOCT: MOVEI C,8. ; octal base + MOVE B,(P) ; get actual word to prt + JRST .+3 ; join code +UODECI: SKIPA C,[10.] ; decimal +UOOCTI: MOVEI C,8. + MOVEM C,BASE + MOVEI A,0 + MOVE C,B + MOVE B,[010700,,UUOSCR+1] + PUSHJ P,UONUM ; print numbr + JRST UUORET + +UONUM: IDIV C,BASE + ADDI D,"0 + CAILE D,"9 + ADDI D,7 + DPB D,B + DBP B + ADDI A,1 + JUMPN C,UONUM + PUSHJ P,SIOTA + POPJ P, + +IOTA: .CALL [SETZ + SIXBIT /IOT/ + E + SETZ A] + .LOSE %LSSYS + POPJ P, + +IOTAD: .CALL [SETZ + SIXBIT /IOT/ + MOVSI %TJDIS + E + SETZ A] + .LOSE %LSSYS + POPJ P, + +SIOTA: .CALL [SETZ + SIXBIT /SIOT/ + E + B + SETZ A] + .LOSE %LSSYS + POPJ P, + +UIBLOC: PUSHJ P,IIBLOC + HRLI B,201000 + DPB E,[270400,,B] + MOVEM B,(P) + JRST UUORET + +IIBLOC: ADD B,FREBOT +UIBLO1: CAML B,FRETOP + JRST MORCOR + EXCH B,FREBOT + POPJ P, + +MORCOR: MOVE C,FRETOP + LSH C,-12 + .CALL [SETZ + SIXBIT /CORBLK/ + MOVEI %CBNDW+%CBPRV + MOVEI %JSELF + C + SETZI %JSNEW] + FATAL NO CORE AVAILABLE TO SATISFY REQUEST + MOVEI C,2000 + ADDM C,FRETOP + JRST UIBLO1 + +USIXST: MOVEI B,2 + PUSHJ P,IIBLOC + HRLI B,440700 + SKIPN C,(P) + JRST USIXEX + PUSHJ P,ISIXST +USIXEX: MOVEM B,UUO40(P) + MOVE B,[200000,,-1(P)] + DPB E,[270400,,B] + MOVEM B,(P) + JRST UUORET + +ISIXST: PUSH P,A + PUSH P,B + MOVEI A,0 +ISIXLP: LDB D,[360600,,C] + ADDI D,40 + IDPB D,B + ADDI A,1 + LSH C,6 + JUMPN C,ISIXLP + MOVE C,A + MOVE D,B + POP P,B + POP P,A + POPJ P,