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,