1
0
mirror of https://github.com/PDP-10/its.git synced 2026-03-26 02:05:51 +00:00
Files
PDP-10.its/src/sysen2/mactap.f72
2019-06-17 16:25:28 +02:00

900 lines
12 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
RELOCATABLE
TITLE MACTAPE
.LIBRARY UWR",URED",.UWR",.URED",FILEST"
LIPDL=20 ;LENGTH OF PI PDL IF USED
A=TAPAC"
B=A+1
C=A+2
D=A+3
ACSIZ=4
SYSEOF==3 ;IF "THIRD BIT" OF FILE IS 1
OSYSEF==141 ;IF "THIRD BIT" OF FILE IS 0
DEFINE COND A,B
.LIFS A
B
.ELDC
LOC $.
TERMIN
DEFINE ELSE A,B,C
COND A,[B]
COND -A,[C]
TERMIN
DEFINE AVAIL A
.LIFS .!A
.!A":
.ELDC
A:
TERMIN
DEFINE ELSER A,B,C
ELSE A,[C][B]
TERMIN
UWAIT": SKIPL LSTP
JRST .-1
UWAIT1: CLEARM APRBRK
SKIPN APRBRK
JRST .-1
SKIPL COAST
JRST .-1
POPJ P",
ELSER APRBRK",[.ZZSW"=0
.ZZLV=JRST 12,@.
.ZZ=.
LOC 40+2*CLKCHN"
JSR APRBRK
LOC .ZZ
][ .ZZSW=1
.ZZLV"=JRST 2,@.
]
APRBRK": 0
.LIFE .ZZSW
CONSO 1000
ELSE ILMEM",[JRST ILMEM"][JRST 4,.]
CONO 1440+CLKCHN"
.ELDC
LOC $.
SKIPL SDLY
SKIPL COAST
APRET1: .ZZLV
ELSER .IPDL",[ PUSH P,APRSV1
][ EXCH P,PDLP
PUSHJ P,APRSV
EXCH P,PDLP
.ZZLV
]
APRSV: CLEARM RLOADF
PUSH P,A
PUSH P,B
MOVE B,[(RDATAS)WDATAS]
SKIPL WRITE
MOVSS B
PUSHJ P,UTRLD
MOVSS B
PUSHJ P,UTRLD
SOSN URUNTM
JRST APRBK5
APRET: POP P,B
POP P,A
APRSV1: POPJ P,APRET1
TAPE: 0
UTP1: 0
SOS .-1
AOSGE TAPCNT
JRST 12,@TAPE
UTP3: CONO PI,1000+TPCHNA"
SKIPN WRITE
CONO DC,TPCHN"
JRST 12,@TAPE
PIPOS: MOVEM A,TAP1
MOVEM B,TAP2
CONSZ UTS,16
JRST UTAPE5
UTAPE: MOVEI A,20
DATAI DC,B
ELSER .TCHG",HRRZS B,[
HRRZM B,BLKS
HLRZS B
SKIPE TAPID
CAMN B,TAPID
JRST UTBLK3
MOVE B,BLKS
]
AVAIL UTBLK, SUBI B,.
JUMPE B,PIPOS2
UTAPE1: SKIPL FORW
SOSA B
AOS B
MOVEM B,UTENB
ADDI B,3
JUMPL B,.+3
CAIG B,6
JRST UTAPE4
AOSE FORW ;FORW_-1 MEANS TAPE FORWARD
TRO A,2000
CAILE B,2
TRCA A,12000
SETOM FORW
UTAPE3: CONO UTC,320200+UTCCHN(A)
UTAPE5: CONO DC,4010+TPCHN
JRST TAP3
TAPINS: BLKO DC, ;BLKO DC,ADR-1
TAPCNT: 0 ;(,-200)ADR-1
TAP1: 0
TAP2: 0
UTAPE2: TRO A,3000
UTAPE4: SKIPL FORW
TRO A,10000
JRST UTAPE3
COND .TCHG,[
BLKS: 0
UTBLK3: JSR .TCHG"
JRST UTAPE1
]
PIPOS2: SKIPE UTENB
JRST UTAPE2
MOVE B,TAPINS
SKIPGE WRITE
TROA A,400
TLZ B,(BLKO-BLKI)
SKIPL FORW
TROA A,10000
JRST TAPFOR
ADD B,[DATAI-BLKI 200]
MOVEM B,UTP1
HLRES TAPCNT
TAP4: CONO UTC,360300+UTCCHN(A)
SKIPGE WRITE
CONO DC,3410+TPCHN
TAP3: MOVE A,TAP1
MOVE B,TAP2
JRST 12,@TAPEî
TAPFOR: HRRI B,TAPCNT
MOVEM B,40+TPCHN*2
MOVEI B,UTP3
HRRM B,UTP1
JRST TAP4
UTERR2: CONSO PI,TPCHNA
AOSE LOSSCT
JRST UTER2A
COND BADBLK",[ HRRZ A,UTBLK
SKIPE WRITE
TLO A,400000
MOVEM A,BADBLK"
]
JRST GOBBLE
UTER2A: CONSZ UTS,2
AOSE FORW
SETOM FORW
HRRZ A,UTAPE
SKIPL FORW
TRO A,10000
CONO UTC,323200+UTCCHN(A)
PUSHJ P,TSTAR1
POPRET: POP P,A
ELSE UTCBRK",[JRST 2,@UTCBRK][
JRST 12,@UTCBRK
.ZZ=.
LOC 40+2*UTCCHN"
JSR UTCBRK"
LOC .ZZ
]
UTCBRK": 0
PUSH P,A
CONSZ UTC,4000 ;TIME ENABLE
CONSO UTS,20 ;TIME DELAY FLAG
JRST JDBRK
SETOM LSTP
CLEARM SDLY
JDBRK1: CONO UTC,0
JRST POPRET
JDBRK: CONSZ UTC,7
CONSO UTS,17
JRST POPRET
CONSO UTC,700
JRST JDBRK2
CONSO PI,TPCHNA
CONSZ UTS,16
JRST UTERR2
GOBBLE: MOVEI A,200
UTCNTR: ADDM A,A
MOVEI A,24.
MOVEM A,URUNTM
CONI UTC,A
TRZ A,700
CONO UTC,(A)
COND .IPDL,[EXCH P,PDLP
] PUSHJ P,APRSV
COND .IPDL",[EXCH P,PDLP
]
SKIPL RLOADF
SETOM COAST
JRST POPRET
TSTART: ELSE MAXERR",[MOVNI A,MAXERR"][MOVNI A,10.]
MOVEM A,LOSSCT
TSTAR1: CLEARM COAST
MOVSI A,-200
MOVEM A,UTENB
HRR A,TAPINS
MOVEM A,TAPCNT
MOVE A,40+TPCHN*2+1
MOVEM A,40+TPCHN*2
MOVE A,[JRST PIPOS]
MOVEM A,UTP1
CONO DC,4010+TPCHN
CONO PI,2200+TPCHNA
POPJ P,
JDBRK2: SETOM SDLY
CONO UTC,5000+UTCCHN
SETOM URUNTM
JRST POPRET
RCHECK: SKIPL EOF
JRST RED
SKIPN RCNTR
ELSE QUITFF,JRST POPJA,[POPJ P,]
.URED":
RED: SKIPN RCNTR
JRST RCHECK
SOS RCNTR
AOS A,RPNTR
RED2: CAIL A,RBEGB+200
JRST REDRST
RED4: MOVE A,(A)
JRST POPJ1
REDRST: MOVEI A,201
ADDM A,RED2
AOS A,RPNTR
CAIGE A,RBEGB+NURBUF"*201
JRST RED4
MOVEI A,RBEGB+200
HRRM A,RED2
MOVEI A,RBEGB
HRRM A,RPNTR
JRST RED4
SKIPGE WRFUL
ELSE QUITFF,JRST POPJA,[POPJ P,]
.UWR":
WR: SKIPN WCNTR
JRST .-3
PUSH P,A
SOS WCNTR
AOS A,WPNTR
CAIL A,WBEGB+NUWBUF"*200
JRST WRST
WR2: POP P,(A)
JRST RED4
WRST: MOVEI A,WBEGB
HRRM A,WPNTR
JRST WR2
RBEGB-1 ;PI INPUT POINTER
RBEGB-1
EOF: -1
CAILE A,NURBUF"*200-200
AVAIL RDATAS, (,RBEGB-2)RBEGB+<NURBUF-1>*201-1;(LOWEST BUFFER)HIGHEST BUFFER
RPNTR: 0 ;POINTER
RCNTR: NURBUF*200
AVAIL RBYTS, 0 ;LH<FILE DIRECTION,LOOK FILE,TAPENO,PUT FILE>
RBYTP: 0 ;^^^ RH<BLOCK NUMBER>
WBEGB-1 ;PI OUTPUT POINTER
WBEGB-1
WRFUL: -1
CAILE A,NUWBUF"*200-200
AVAIL WDATAS, (,WBEGB-1)WBEGB+<NUWBUF-1>*200-1
WPNTR: 0
WCNTR: NUWBUF*200
AVAIL WBYTS, (35)0
WBYTP: (500)MOVTAB-1+27+27
UTRLD: MOVE A,2(B)
SKIPL -2(B)
XCT -1(B)
POPJ P,
POP P,(P)
LDB A,[(270400+B)3]
LSH A,3
CAME A,LSTP
SKIPGE LSTP
JRST LOAD
APRBK5: SETOM SDLY
CONO UTC,5000+UTCCHN
JRST APRET
ITAB: AOS D,3(B)
ILDB A,4(B)
POPJ P,
ITAB1: SOS D,3(B)
BYTDEC: MOVSI A,50000
ADD A,4(B)
SKIPGE A
SUB A,[(430000)1]
MOVEM A,4(B)
LDB A,A
POPJ P,
LOAD: SETOM WRITE
MOVEM D,UAC+D
MOVE D,[(A)UAC+A]
BLT D,UAC+D-1
LDB A,[(270400+B)3] ;GET TAPE NO
PUSH P,FPNTR+2
PUSHJ P,FILESL
RLOAD: MOVEI A,ITAB1
SKIPL C,3(B)
MOVEI A,ITAB
HRRM A,LUP1
ROT C,11
TRZ C,777740
COND -BLKSPC",[
BLKSPC"=6
]
MOVEI A,BLKSPC" ;SPACING BETWEEN BLKS
MOVEM A,TEM1
TRNN C,37
JRST LUP1
CLEARM WRITE
CLEARM TEM1
LUP1: PUSHJ P,ITAB
TRNE D,-1
CAIN A,37
JRST OUTT
CAIE A,(C)
SOSA TEM1
SOSLE TEM1
JRST LUP1
;START UP TAPE ROUTINE
ROT C,11
DPB C,4(B) ;SMASH AWAY PUT FILE
MOVE A,3(B)
HRRM A,UTBLK
MOVEI A,2(B)
HRRM A,UTCNTR
COND .TCHG,[ MOVE A,FPNTR
HRRZ A,177(A)
CAIN A,-1
MOVEI A,0
MOVEM A,TAPID
]
ROT C,-2
ANDI C,70
HRRM C,UTAPE
CAME C,LSTP
PUSHJ P,LOADST
OUT4: SETOM RLOADF
MOVE A,-4(B)
HRRM A,TAPINS
MOVE D,(B)
ADDI A,200
CAILE A,(D)
HLRZ A,D
SKIPN WRITE
AOS A
MOVEM A,-4(B)
CONI UTC,C
TRZE C,700
JRST .+3
IORI C,200
CONO UTC,(C)
PUSHJ P,TSTART
OUT3: POP P,A
PUSHJ P,FILESL
MOVS D,[(A)UAC+A]
BLT D,D
JRST APRET
LOADST: MOVEM C,LSTP
SETOM FORW
SKIPL 3(B)
AOSA FORW
SUBI C,10000
CONO UTC,333200+UTCCHN(C)
POPJ P,
OUTT: SKIPN A,WRITE
JRST LDRED
PUSHJ P,FILER
SKIPGE WRFUL
JRST OUT3
OUT2: MOVE B,UAC+B
MOVSI A,400000
XORM A,3(B)
JRST RLOAD
LDRED: HRRZ B,C
PUSHJ P,LOOK
JRST LDRD2 ;NO FILE EXTENSION
DPB C,[(220500)RBYTS]
DPB C,[(330500)RBYTS]
JRST OUT2
LDRD2: SETOM EOF
JRST OUT3
SETUPR: MOVE A,-3(B)
MOVEM A,1(B)
MOVEM A,-4(B)
MOVSI A,400000
ANDCAM A,3(B)
HLLZS 3(B)
MOVE A,FPNTR+1
MOVEM A,4(B)
POPJ P,
AVAIL LOOK, MOVSI C,-23.
SKIPA D,FPNTR
ADDI D,2
CAME A,(D)
CAMN A,[SIXBIT /*/]
JRST .+2
AOBJN C,LOOK+2
JUMPGE C,LOOK1
CAME B,1(D)
CAMN B,[SIXBIT /*/]
JRST .+2
AOBJN C,LOOK+2
LOOK1: TLZN C,-1
POPJ P, ;NOT FOUND
AOS C
POPJ1A: ELSE QUITFF",[
AOS (P)
POPJ P,
][ JRST POPJ1]
OPNRD": PUSHJ P,SAVAC
SETOM EOF
PUSHJ P,UWAIT
PUSHJ P,LOOK
JRST ERR2
MOVE B,FPNTR+2
LSH B,5
HRLZM B,RBYTS
DPB C,[(220500)RBYTS]
DPB C,[(330500)RBYTS]
ADD C,FPNTR
MOVE C,133(C)
MOVEI B,SYSEOF
TRNN C,1
MOVEI B,OSYSEF
MOVEM B,CEOF
MOVEM B,CEOFA
CLEARM RCNTR
MOVEI B,RDATAS
PUSHJ P,SETUPR
MOVE A,[70700,,CEOF]
MOVEM A,UREDP
MOVEI A,RBEGB+200
HRRM A,RED2
HRLZ A,CEOF
LSH A,11.
MOVEI B,NURBUF
HLLZM A,RBEGB+200(A)
ADDI A,201
SOJG B,.-2
CLEARM EOF
JRST RESTOR
SAVAC0: SOS -1(P)
SAVAC: MOVEM D,ACBLK+D
MOVE D,[(A)ACBLK+A]
BLT D,ACBLK+D-1
COND QUITFF,SETOM INSIDE
POPJ P,
ERR2: CLEARM ACBLK+A
ERR1: SOS (P)
RESTOR: COND QUITFF,CLEARM INSIDE
MOVS D,[(A)ACBLK+A]
BLT D,D
POPJ1: AOS (P)
COND QUITFF",[
POPJA: SKIPN INSIDE
SKIPE QUITFF"]
CPOPJ: POPJ P,
COND QUITFF",[
JSR QUITFF
POPJ P,]
COND .FILEB",[
.BC2: 100,,55(A)
.BC1: 100,,104(A)
.FILEB":
]
FILE": PUSHJ P,SAVAC
LDB A,[(270400)WBYTS]
PUSH P,FPNTR+2
PUSHJ P,FILESL
MOVE A,ACBLK+A
PUSH P,B
PUSH P,A
PUSHJ P,DELE
FILE1: MOVEI A,SYSEOF
MOVEI B,4
PUSHJ P,UWR
JFCL
SOJG B,.-2
MOVE A,[SYSEOF_11.,,1]
FILE1B: LDB B,[700,,WCNTR]
JUMPE B,FILE3
PUSHJ P,WR
JRST FILE7
JRST FILE1B
FILE3: MOVEI B,NUWBUF*200
CAME B,WCNTR
JRST .-1
FILE4: PUSHJ P,FILER
CLEARM A
MOVEI B,105
PUSHJ P,LOOK
JRST ERR2 ;HOPEFULLY IMPOSSIBLE
POP P,(D)
POP P,1(D)
PUSHJ P,FILE6
PUSHJ P,CLSTP
FILE5: POP P,A
PUSHJ P,FILESL
JRST RESTOR
FILE7: SOS -3(P)
JRST FILE4
OPNWR": PUSHJ P,SAVAC
CLEARB A,B
PUSHJ P,LOOK
JRST ERR2
MOVEI B,105
PUSHJ P,DELE
MOVEI C,0
PUSHJ P,WINIT1
PUSHJ P,FILE6
JRST RESTOR
FILE6: MOVEI A,200*NUWBUF
MOVEM A,WCNTR
MOVEI B,WDATAS
PUSHJ P,SETUPR
MOVE A,[(10700)WRASM-1]
MOVEM A,UWRP
MOVEI A,5
MOVEM A,WRASM+1
MOVE A,FPNTR+2
DPB A,[(270400)WBYTS]
MOVEI A,105
MOVEM A,LSTFIL
CLEARM WRASM
CLEARM WRFUL
POPJ P,
FILER: CLEARB A,B
PUSHJ P,LOOK
JRST TPFUL
MOVE A,C
EXCH A,LSTFIL
MOVEM A,1(D)
MOVE A,FPNTR
ADD A,C
ELSE .FILEB",[
MOVE B,ACBLK+C
DPB B,.BC1
LSH B,-1
DPB B,.BC2
][
MOVEI B,1
ANDCAM B,55(A)
ANDCAM B,104(A)
]
MOVEI B,1
IORM B,133(A) ;SET NEW TYPE EOF BIT
WINIT1: MOVE B,FPNTR+1
ILDB A,B
CAIN A,35
DPB C,B
CAIE A,37
JRST .-4
POPJ P,
TPFUL: SETOM WRFUL
POPJ P,
UCLSTP": PUSHJ P,SAVAC0
PUSH P,CRESTOR
CLSTP: MOVE A,FPNTR+2
MOVNI B,1
OPNTP1: MOVEI C,100
AVAIL .WSB, LSH A,3
PUSHJ P,UWAIT1
MOVEM B,WRITE
CAMN A,LSTP
JRST .+3
PUSHJ P,UWAIT
SETOM FORW
HRRM A,UTAPE
MOVEM A,LSTP
HRR B,FPNTR
SOS B
HRRM B,TAPINS
MOVEI B,TEM1
HRRM B,UTCNTR
HRRM C,UTBLK
SKIPL FORW
TRO A,10000
COND .TCHG,[SKIPN WRITE
CLEARM TAPID
]
CONO UTC,322200+UTCCHN(A)
PUSHJ P,TSTART
MOVEI A,120000.
MOVSI B,-200
SKIPL WRITE
OPNTP3: SKIPGE COAST
POPJ P,
CAMN B,UTENB
SOJGE A,OPNTP3
JUMPGE A,OPNTP3
SETOM SDLY
CONO UTC,5000+UTCCHN
SETOM COAST
MOVE A,FPNTR+2
PUSHJ P,FILESL
CLEARM DIRTAB(C)
MOVNI A,2
POPJ P,
TAPKIL": PUSHJ P,SAVAC0
PUSH P,FPNTR+2
ANDI A,7
PUSHJ P,FILESL
JUMPL C,.+2
CLEARM DIRTAB(C)
POP P,A
PUSHJ P,FILESL
CRESTOR: JRST RESTOR
FILEST": JRST RBEGB ;OR ANDI A,7
PUSHJ P,SAVAC
PUSHJ P,FILESL
JUMPGE C,RESTOR
CLEARB A,B
PUSHJ P,FILESL
JUMPL C,ERR2
MOVE A,ACBLK+A
MOVEM A,DIRTAB(C)
MOVEM A,FPNTR+2
PUSHJ P,OPNTP1
JUMPL A,ERR4
MOVE C,FPNTR
LDB C,[370500+C,,177]
CAIN C,37
JRST RESTOR
ERR3: MOVNI A,1
ERR4: MOVEM A,ACBLK+A
JRST ERR1
DELE: PUSHJ P,LOOK
POPJ P,
DELE2: CLEARM 1(D)
CLEARB D,(D)
MOVE B,FPNTR+1
ILDB A,B
CAMN A,C
DPB D,B
CAIE A,37
JRST .-4
CLEARM A
MOVE B,C
JRST DELE
FILESL: MOVSI C,-NDIR
CAME A,DIRTAB(C)
AOBJN C,.-1
TLON C,-1
POPJ P,
HRRZS D,C
IMULI D,200
ADDI D,MOVTAB
MOVEM D,FPNTR
ADDI D,23.*2-1
HRRM D,FPNTR+1
MOVEM A,FPNTR+2
POPJ P,
UDELE": PUSHJ P,SAVAC0
PUSHJ P,DELE
JRST RESTOR
URED1: SKIPN RCNTR
JRST UREDE
URED": ILDB A,UREDP
CAME A,CEOF
JRST POPJ1
UREDT": HRRZ A,UREDP
CAIN A,CEOF
JRST URED2
SUBI A,201
CAME A,RPNTR
JRST UREDE
ADDI A,202
CAIL A,RENDB
MOVEI A,RBEGB
HRLI A,440700
MOVEM A,UREDP
SOS A
HRRM A,RPNTR
MOVNI A,200
ADDM A,RCNTR
URED3: SKIPGE EOF
JRST URED1
SKIPN RCNTR
JRST .-3
JRST URED
UREDE: MOVE A,[70700,,CEOFA]
MOVEM A,UREDP
MOVEI A,14
ELSE QUITFF,JRST POPJA,[POPJ P,]
URED2: MOVE A,[440700,,RBEGB]
MOVEM A,UREDP
JRST URED3
UWR": IDPB A,UWRP
SOSLE WRASM+1
JRST POPJ1
MOVEM A,ACBLK+A
MOVEI A,5
MOVEM A,WRASM+1
MOVE A,[(10700)WRASM-1]
MOVEM A,UWRP
MOVE A,WRASM
PUSHJ P,WR
ELSE QUITFF",[JRST POPJA][POPJ P,]
CLEARM WRASM
MOVE A,ACBLK+A
JRST POPJ1
COND UINIT",[
UINIT": CONSZ UTC,20000
JRST .-1
SETOM LSTP
SETOM COAST
CLEARM WCNTR
CLEARM SDLY
HLLOS RCNTR
ELSE QUITFF",[JRST POPJA][POPJ P,]
]
COND .IPDL,[
PDL: BLOCK LIPDL
PDLP: -LIPDL,,PDL
]
COND .TCHG,[
TAPID: 0
]
RLOADF: 0
COND QUITFF",[
INSIDE: 0]
AVAIL COAST, -1
AVAIL LSTP, -1
FORW: 0
WRITE: 0
UTENB: 0
URUNTM: 0
TEM1: 0
LSTFIL: 0
SDLY: 0
LOSSCT: 0
WRASM: 0
5
UREDP": 70700,,CEOF
UWRP: (10700)WRASM-1
UFPNTR":
FPNTR: MOVTAB ;POINTER TO BASE OF CURRENT MOVTAB
(500)MOVTAB+23.*2-1 ;POINTER TO BASE OF BLOCK AREA
2
CONSTANTS
CEOF: SYSEOF
CEOFA: SYSEOF
ACBLK=.-A
BLOCK ACSIZ
UAC=.-A
BLOCK ACSIZ
RBEGB:
PUSH P,A ;THIS CODE IS A COMPLETE CROCK AND GOES AWAY
PUSH P,B ;AFTER FILEST IS CALLED THE FIRST TIME
MOVE A,LOSS1
MOVEM A,FILEST
PUSH P,C
MOVEI A,NDIR
MOVEI B,0
LOSS4: HRLI B,-56
CLEARM MOVTAB(B)
AOBJN B,.-1
MOVE C,LOSS3
MOVEM C,MOVTAB(B)
HRLI B,-10
CLEARM MOVTAB+1(B)
AOBJN B,.-1
MOVSI C,660000
MOVEM C,MOVTAB+1(B)
HRLI B,-107
CLEARM MOVTAB+2(B)
AOBJN B,.-1
SETOM MOVTAB+2(B)
ADDI B,3
SOJG A,LOSS4
POP P,C
POP P,B
POP P,A
JRST FILEST
LOSS1: ANDI A,7
LOSS3: 757367573674
LOC 40+TPCHN"*2
JSR TAPE
JSR TAPE
LOC RBEGB+NURBUF*201
RENDB:
WBEGB:
LOC WBEGB+NUWBUF*200
DIRTAB:
LOC DIRTAB+NDIR"
MOVTAB:
LOC MOVTAB+NDIR*200
END