From 49db0693e695f26e1aef35226dc4609bca4bc436 Mon Sep 17 00:00:00 2001 From: Lars Brinkhoff Date: Tue, 23 Apr 2019 21:15:53 +0200 Subject: [PATCH] Port ZAP to ITS. --- src/zil/zap.mid | 234 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 231 insertions(+), 3 deletions(-) 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