1
0
mirror of https://github.com/PDP-10/its.git synced 2026-02-08 09:21:17 +00:00

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.
This commit is contained in:
Adam Sampson
2018-05-04 19:26:42 +01:00
committed by Adam Sampson
parent dd476901a5
commit fbcf82e6dd
2 changed files with 274 additions and 1 deletions

273
src/taa/uuos.100 Normal file
View File

@@ -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,<UUO40+1>(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,<UUO40+1>(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,