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:
234
src/zil/zap.mid
234
src/zil/zap.mid
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user