1
0
mirror of https://github.com/PDP-10/its.git synced 2026-05-24 22:30:33 +00:00

Port ZAP to ITS.

This commit is contained in:
Lars Brinkhoff
2019-04-23 21:15:53 +02:00
parent 5c6c10fe2f
commit 49db0693e6

View File

@@ -3,7 +3,60 @@ TITLE ZAP -- New Z-Language Assembler
; ZAP version 3 - Expanded word table to 96 words
; MARC/JMB - 1/7/82
.DECSAV
; .DECSAV
DEFINE BOUT
TERMIN
DEFINE SIN
EXCH A,B
PUSHJ P,STRING
TERMIN
DEFINE SOUT
PUSHJ P,STRING
TERMIN
DEFINE PSOUT
PUSHJ P,MESSAGE
TERMIN
DEFINE PBIN
.IOT TYI,A
TERMIN
DEFINE PBOUT
.IOT TYO,A
TERMIN
DEFINE NIN
PUSHJ P,NUMIN
TERMIN
DEFINE NOUT
PUSHJ P,NUMOUT
TERMIN
DEFINE RESET
TERMIN
DEFINE RSCAN
TERMIN
DEFINE GTJFN
TERMIN
DEFINE ERSTR
TERMIN
DEFINE RFPTR
TERMIN
DEFINE SFPTR
TERMIN
DEFINE HALTF
.VALUE
TERMIN
.PRIOUT==0
.PRIIN==0
.NULIO==0
JS%PAF==0
GJ%SHT==0
GJ%FOU==0
GJ%OLD==0
GJ%EXT==0
OF%WR==0
JS%PAF==0
NO%LFL==0
NO%ZRO==0
SUBTTL ACS
@@ -28,6 +81,13 @@ SUBTTL ACS
TP=16 ;pointer into token table TOKENS
P=17 ;stack
IFN 1,[
TYI==1
TYO==2
DSKI==3
DSKO==4
]
%FWDCT==512.-16.
;bits in symbol table words
@@ -40,9 +100,17 @@ SUBTTL ACS
%RJUMP==200000 ;as are jump refs
;random macros
IFN 0,[
DEFINE MSG M
HRROI A,[ASCIZ /!M!/]
TERMIN
]
IFN 1,[
DEFINE MSG M
HRROI A,[ASCIZ /!M!/]
TERMIN
]
; MOVE A,[440700,,[ASCIZ /!M!/]]
DEFINE NXTARG N
ADD TP,[<2*N>,,<2*N>]
@@ -167,6 +235,7 @@ SUBTTL START UP -- READ JCL AND OPEN INPUT FILE
START: RESET
MOVE P,[-77,,PDL]
IFN 0,[
SETZ A,
RSCAN
JFCL
@@ -177,8 +246,17 @@ START: RESET
MOVEI A,.PRIIN
MOVE B,[440700,,FILBUF]
SIN ; READ JCL
]
IFN 1,[
.OPEN TYI,[.UAI,,'TTY]
.LOSE
.OPEN TYO,[.UAO,,'TTY]
.LOSE
.BREAK 12,[..RJCL,,FILBUF]
]
;parse jcl line
IFN 0,[
MOVE B,[440700,,FILBUF]
NAMLOP: ILDB A,B
CAILE A,40
@@ -186,13 +264,19 @@ NAMLOP: ILDB A,B
NAMDON: CAIE A,^M
CAIN A,^J
JRST NOJCL
MOVEM B,FILPTR ;should be file spec start
MOVEM B,FILPTR ;should be file spec start
ILDB A,B
CAIL A,40
JRST .-2
MOVEI A,0
DPB A,B
MOVE B,FILPTR
]
IFN 1,[
MOVEI B,GTJFNB
MOVE D,[440700,,FILBUF]
PUSHJ P,RFN"RFN
]
PUSHJ P,OPEN ;open file
JRST BEGIN
@@ -219,6 +303,7 @@ File: ]
;open a file
; b/ file name
;skips if wins
IFN 0,[
FOPEN: MOVEI A,GTJFNB
PUSH P,B
GTJFN
@@ -239,6 +324,16 @@ FOPEN2: TLZ A,-1
POP P,B
AOS (P)
POPJ P,
]
IFN 1,[
FOPEN: .CALL [ SETZ
SIXBIT/OPEN/
[ .UAI,,DSKI ]
0(B) ? 1(B) ? 2(B) ? SETZ 3(B) ]
CAIA
AOS (P)
POPJ P,
]
;gtjfn failed for some reason
NOFILE: MOVE B,A
@@ -312,12 +407,14 @@ BEGINF: MSG [Assembling ]
JUMPL B,GETFNM
MOVEM B,RELEAS ;save and use instead of supplied
IFN 0,[
;get goodies so can open correct output file
GETFNM: MOVE A,OUTPTR
MOVE B,IJFN
MOVE C,[222000,,JS%PAF] ;output dev:<dir>name.
JFNS
MOVEM A,OUTPTR ;save for outputting other exts.
]
SKIPE DOFREQ
JRST BEGLUP ;do frequency assembly
@@ -436,6 +533,11 @@ SETZPC: MOVE ZPC,A
;here to output date stuff for serial number in ascii
;a/ number
OUTDAT: PUSH P,B
IFN 1,[
IDIVI A,10
IMUL A,10.
ADD A,B
]
IDIVI A,10.
ADDI A,"0
PUSHJ P,OUTBYT
@@ -468,6 +570,7 @@ OUTCHK: MOVEI A,34 ; where the checksum lives
MOVEI A,22 ; where serial number lives
PUSHJ P,SETZPC
MOVNI B,1
IFN 0,[
ODCNV ; get current time/date
HLRZ A,B ; here's the year
SUBI A,1900. ; we will take only the mod 100 part
@@ -478,9 +581,20 @@ OUTCHK: MOVEI A,34 ; where the checksum lives
HLRZ A,C ; here's the day (starting at 0)
ADDI A,1 ; so fix it up here
PUSHJ P,OUTDAT
]
IFN 1,[
.RDATE B,
LDB A,[300600,,B]
PUSHJ P,OUTDAT
LDB A,[140600,,B]
PUSHJ P,OUTDAT
LDB A,[000600,,B]
PUSHJ P,OUTDAT
]
MOVE Z,SAVZ
MOVE ZPC,SAVZPC
IFN 0,[
MOVE A,[440700,,[ASCIZ /.ZIP/]]
MOVE B,OUTPTR
ILDB 0,A
@@ -494,6 +608,17 @@ OUTCHK: MOVEI A,34 ; where the checksum lives
MOVE B,[440000,,OF%WR]
OPENF
JRST ERPRNT
]
IFN 1,[
MOVEI B,GTJFNB
MOVE A,[SIXBIT /ZIP/]
MOVEM A,2(B)
.CALL [ SETZ
SIXBIT/OPEN/
[ .BIO,,DSKO ]
0(B) ? 1(B) ? 2(B) ? SETZ 3(B) ]
JRST ERPRNT
]
;blat out stupid gcdump header
HRRM ZPC,HEADER+5
MOVEI C,3(Z)
@@ -505,6 +630,7 @@ OUTCHK: MOVEI A,34 ; where the checksum lives
MOVEM C,HEADER
MOVEM C,HEADER+1
MOVEM C,HEADER+2
IFN 0,[
MOVE B,[444400,,HEADER]
MOVNI C,7
SOUT
@@ -525,13 +651,37 @@ OUTCHK: MOVEI A,34 ; where the checksum lives
CLOSF
HALTF
HALTF
]
IFN 1,[
MOVE A,[-7,,HEADER]
.IOT DSKO,A
MOVEI C,1(Z)
SUBI C,OUTBUF
MOVNS C,C
HRRI C,OUTBUF
.IOT DSKO,A
MOVE A,[-2,,FOOTER]
.IOT DSKO,A
.LOGOUT 1,
]
;print name of IJFN file, takes prefix string in A
PFNAME: PSOUT
IFN 0,[
MOVEI A,.PRIOU
MOVE B,IJFN
MOVE C,[222220,,JS%PAF]
JFNS
]
IFN 1,[
PUSH P,D
MOVEI B,GTJFNB
MOVE D,[440700,,FILBUF]
PUSHJ P,RFN"PFN
MOVE A,[440700,,FILBUF]
PUSHJ P,MESSAGE
POP P,D
]
PUSHJ P,PCRLF
POPJ P,
@@ -555,6 +705,7 @@ SCRIPT: SKIPL PDEBUG
SUBTTL READ A LINE FROM INPUT FILE
IFN 0,[
RDLINE: SKIPN A,IJFN ;no eof yet?
POPJ P, ; eof, return
PUSH P,B
@@ -563,16 +714,36 @@ RDLINE: SKIPN A,IJFN ;no eof yet?
MOVEI D,^J ;stop on crlf
SIN ;read a line
ERJMP RDEOF
MOVEI A,0 ;terminate with nul
]
IFN 1,[
RDLINE: .STATUS DSKI,A
JUMPE A,CPOPJ
PUSH P,B
MOVE B,[440700,,BUFFER]
RDLIN1: .IOT DSKI,A
CAIN A,^J
JRST RDLIN2
CAIE A,^C
CAMN A,[-1,,^C]
JRST RDEOF
IDPB A,B
JRST RDLIN1
]
RDLIN2: MOVEI A,0 ;terminate with nul
IDPB A,B ;zero byte
POP P,B
POPJ1: AOS (P)
CPOPJ: POPJ P,
IFN 0,[
RDEOF: MOVE A,IJFN
CLOSF ;close input file
JRST ERPRNT
SETZM IJFN ;eof found
]
IFN 1,[
RDEOF: .CLOSE DSKI,
]
POP P,B
JRST POPJ1
@@ -1119,10 +1290,15 @@ APSEU1: SETZM PASS2
SUBTTL .END .INSERT AND .ENDI
;end of assembly
IFN 0,[
ZEND: MOVE A,IJFN
CLOSF
JRST ERPRNT
SETZM IJFN
]
IFN 1,[
ZEND: .CLOSE DSKI,
]
POPJ P,
;insert another file
@@ -3591,6 +3767,54 @@ PUNCT: CAIE A,",
AOS (P)
POPJ P,
SUBTTL READ FILE NAMES
MESSAGE:
PUSH P,B
HRLI A,440700
MESS1: ILDB B,A
JUMPE B,[POP P,B ? POPJ P,]
.IOT TYO,B
JRST MESS1
STRING: HRLI A,440700
HRLI B,440700
JUMPE C,STRIN1
PUSH P,D
ILDB D,B
IDPB D,A
SOSGE C,.-1
POP P,D
POPJ P,
STRIN1: ILDB C,B
IDPB C,A
JUMPE C,[POPJ P,]
JRST STRIN1
NUMIN: MOVEI B,42
AOS (P)
POPJ P,
NUMOUT: MOVE A,C
NUMOU1: IDIV B,A
.IOT TYO,TAB(C)
JUMPN B,NUMOU1
AOS (P)
POPJ P,
TAB: "0 ? "1 ? "2 ? "3 ? "4 ? "5 ? "6 ? "7
"8 ? "9 ? "A ? "B ? "C ? "D ? "E ? "F
RFN"$$RFN==1
RFN"$$PFN==1
.INSRT SYSENG; RFN >
RSIXTP: CAIE A,"_
CAIN A,",
AOS (P)
POPJ P,
PSIXTP: POPJ P,
SUBTTL VARIABLES AND BUFFERS
@@ -3792,6 +4016,10 @@ TABPTR: 440700,,.+1
OUTBUF==<.+77777>&-100000 ;lies at 100000*n
LOC OUTBUF
BLOCK 100000
-1
;symbol table hacks
FCNBUF==OUTBUF+200000 ;function symbol tables made here