diff --git a/src/zil/zap.mid b/src/zil/zap.mid
index 06d811f2..8aa5a457 100644
--- a/src/zil/zap.mid
+++ b/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:
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