mirror of
https://github.com/PDP-10/stacken.git
synced 2026-04-19 00:27:51 +00:00
964 lines
17 KiB
Plaintext
964 lines
17 KiB
Plaintext
TITLE M680 -DC68A SYSTEM GENERATOR- V.0A
|
||
SUBTTL R.KRASIN DEC-3-70
|
||
;USE WITH P680.PAL VERSIONS 0C OR LATER
|
||
VERZUN==1000
|
||
|
||
EXTERN .JBFF
|
||
|
||
LOC 137
|
||
EXP VERZUN
|
||
RELOC
|
||
|
||
;CONFIGURATION FILE DEFAULTS
|
||
;---------------------------
|
||
|
||
IFNDEF NAME,<DEFINE NAME<ASCII/X680/>>
|
||
IFNDEF MODCON,<MODCON=0>
|
||
|
||
IFNDEF DC08FX,<DC08FX=0>
|
||
|
||
IFNDEF BAUD1,<BAUD1=^D110>
|
||
|
||
IFNDEF LINES,<
|
||
|
||
DEFINE LINES<
|
||
|
||
CONSOL
|
||
|
||
LOCAL 00,1,0
|
||
LOCAL 01,1,0
|
||
LOCAL 02,1,0
|
||
LOCAL 03,1,0
|
||
LOCAL 04,1,0
|
||
LOCAL 05,1,0
|
||
LOCAL 06,1,0
|
||
LOCAL 07,1,0
|
||
LOCAL 10,1,0
|
||
LOCAL 11,1,0
|
||
LOCAL 12,1,0
|
||
LOCAL 13,1,0
|
||
LOCAL 14,1,0
|
||
LOCAL 15,1,0
|
||
LOCAL 16,1,0
|
||
>
|
||
|
||
> ;IFNDEV LINES
|
||
|
||
IFNDEF INDEV,<INDEV=SIXBIT/DSK/>
|
||
IFNDEF INFIL,<INFIL=SIXBIT/P680/>
|
||
IFNDEF INEXT,<INEXT=SIXBIT/PAL/>
|
||
IFNDEF OUTDEV,<OUTDEV=SIXBIT/DSK/>
|
||
IFNDEF OUTFIL,<OUTFIL=SIXBIT/X680/>
|
||
IFNDEF OUTEXT,<OUTEXT=SIXBIT/PAL/>
|
||
IFNDEF LISTX,<LISTX=0>
|
||
|
||
IFE LISTX,<
|
||
PAGE
|
||
XLIST>
|
||
|
||
;BASIC MACROS
|
||
;------------
|
||
|
||
|
||
SYN ASCII,X
|
||
|
||
DEFINE U (ADDRES,LENGTH)<
|
||
ADDRES: BLOCK LENGTH>
|
||
|
||
|
||
|
||
|
||
;TEXT GENERATION
|
||
|
||
IFE LISTX,<
|
||
DEFINE L(T1,T2,T3,T4,T5)<
|
||
LIST
|
||
X\T1'T2'T3'T4'T5\
|
||
XLIST
|
||
X\
|
||
\
|
||
>>
|
||
|
||
IFN LISTX,<
|
||
DEFINE L(T1,T2,T3,T4,T5)<X\T1'T2'T3'T4'T5
|
||
\>
|
||
LALL
|
||
>
|
||
|
||
|
||
|
||
|
||
;CONCATENATION
|
||
|
||
DEFINE CAT(T1,T2,T3,T4,T5)<T1'T2'T3'T4'T5>
|
||
|
||
|
||
PALB2:;BEGINING OF PAL CODE TO BE SUFFIXED TO P680.PAL
|
||
;DEFINE AND GENERATE GENERAL LINE PARAMETERS
|
||
;-------------------------------------------
|
||
|
||
|
||
|
||
DEFINE LOCAL (PORT,CLOCK,FORM)<
|
||
IFL PORT-XPLO,<XPLO=PORT> ;FIND LOWEST PORT.NUM.
|
||
IFG PORT-XPHI,<XPHI=PORT> ;AND HIGHEST
|
||
CAT(<XC>,\CLOCK,<NUM=XC>,\CLOCK,<NUM+1>) ;COUNT NUM. LINES PER CLOCK.
|
||
XK=XLINE!<1000*FORM>
|
||
CAT(<PL>,\PORT,<=XK>) ;DEF SYMBOL FOR INVERSE MAP (PORTS TO LINES)
|
||
L<LSW>,\XLINE,<=0>
|
||
XLINE=XLINE+1
|
||
> ;DEFINE LOCAL
|
||
|
||
|
||
|
||
DEFINE MODEM (PORT)<
|
||
IFL PORT-XMLO,<XMLO=PORT> ;FIND LOWEST PORT.NUM.
|
||
IFG PORT-XMHI,<XMHI=PORT> ;AND HIGHEST
|
||
CAT(<ML>,\PORT,<=XLINE>) ;DEF SYMBOL FOR INVERSE MAP (MODEMS TO LINE)
|
||
L<LSW>,\XLINE,<=0>
|
||
XLINE=XLINE+1
|
||
> ;DEFINE MODEM
|
||
|
||
|
||
DEFINE REMOTE (DPORT,CLOCK,FORM,MPORT)<
|
||
LOCAL (DPORT,CLOCK)
|
||
XLINE=XLINE-1
|
||
MODEM (MPORT)
|
||
> ;DEFINE REMOTE
|
||
|
||
|
||
DEFINE NULL <
|
||
L<LSW>,\XLINE,<=0>
|
||
XLINE=XLINE+1>
|
||
|
||
|
||
DEFINE CONSOL<
|
||
XCTY=XLINE
|
||
L<LSW>,\XLINE,<=0>
|
||
XLINE=XLINE+1>
|
||
;INITILIZE INTERNAL PARAMETERS
|
||
;-----------------------------
|
||
|
||
XPLO=200 ;LOWEST PORT NUM.
|
||
XPHI=-1 ;HIGHEST...
|
||
XMLO=200 ;LOWEST MODEM NUM.
|
||
XMHI=-1 ;HIGHEST...
|
||
XC1NUM=0 ;NUM. LINES AT CLOCK-1
|
||
XC2NUM=0 ;...CLOCK-2
|
||
XC3NUM=0 ;...CLOCK-3
|
||
XC4NUM=0 ;...CLOCK-4
|
||
|
||
XLINE=0
|
||
|
||
L< XLIST>
|
||
|
||
|
||
LINES ;INVOKE MACROS
|
||
|
||
L< XLIST>
|
||
|
||
|
||
XLNUM=XLINE ;NUMBER OF LINES
|
||
XPSIZ=XPHI-XPLO+1
|
||
M689LO=XMLO/10 ;LOWEST 689AG GROUP NUM.
|
||
M689HI=XMHI/10 ;HIGHEST 689AG GROUP NUM.
|
||
IFL XPHI,< ;IF NO DATA PORTS
|
||
XPSIZ=0
|
||
XPLO=0
|
||
XPHI=0
|
||
> ;IFL XPHI
|
||
XMSIZ=XMHI-XMLO+1
|
||
IFL XMHI,< ;IF NO DATA SETS
|
||
M689LO=0
|
||
M689HI=0
|
||
XMSIZ=0
|
||
XMLO=0
|
||
XMHI=0
|
||
> ;IFL XMHI
|
||
;DEFINE AND GENERATE GENERAL CLOCK PARAMETERS
|
||
;--------------------------------------------
|
||
|
||
|
||
|
||
XK=1
|
||
REPEAT 4,<
|
||
CAT(<IFDEF BAUD>,\XK),<
|
||
XCNUM=XK ;AND REMEMBER NUM. OF CLOCKS
|
||
> ;IFDEF CAT(...
|
||
XK=XK+1
|
||
> ;REPEAT 4
|
||
|
||
|
||
|
||
XBHI=CAT(BAUD,\XCNUM) ;FASTEST BAUDRATE
|
||
XBLO=BAUD1 ;LOWEST BAUD RATE
|
||
XCFNUM=CAT(XC,\XCNUM,NUM) ;NUM. LINES ON FASTEST CLOCK
|
||
;SET CLOCK-CODE PARAMETERS ACCORDING TO HIGHEST BAUD RATE DEFINED
|
||
;----------------------------------------------------------------
|
||
|
||
;FAST CLOCKS (GREATER THAN 150 BAUD)
|
||
|
||
XTTIC=^D10 ;MAX.NUM.CONSEQ.TTI'S BEFORE CHECKING HIGHER CLOCKS
|
||
XTTIF=1 ;MAX.NUM.'FINISHED-CHAR.' SERVICES BEFORE CHECKING HIGHER CLOCKS
|
||
XTTOC=4 ;MAX.NUM.CONSEQ.'TTOS' BEFORE CHECKING HIGHER CLOCKS
|
||
XTTOF=1 ;MAX.NUM.'FINISHED-CHAR.' SERVICES BEFORE CHECKING HIGHER CLOCKS
|
||
XTTIFF=XCFNUM/^D10 ;XTTIF FOR FASTEST (OR ONLY) CLOCK
|
||
IFLE XTTIFF,<XTTIFF=1>
|
||
XTTOFF=XCFNUM/^D25 ;XTTOF ...
|
||
IFLE XTTOFF,<XTTOFF=1>
|
||
|
||
IFLE XBHI-^D150,< ;MEDIUM CLOCKS (110 TO 150 BAUD)
|
||
XTTIC=^D20
|
||
XTTIF=3
|
||
XTTOC=^D8
|
||
XTTOF=2
|
||
>
|
||
|
||
IFLE XBHI-^D110,< ;SLOW CLOCKS (110 OR LOWER)
|
||
XTTIC=^D40
|
||
XTTIF=5
|
||
XTTOC=^D15
|
||
XTTOF=4
|
||
>
|
||
;DEFINE MACROS FOR TTI-CHAIN GENERATION
|
||
;--------------------------------------
|
||
|
||
DEFINE TTIMAC (CLOK)<
|
||
|
||
|
||
DEFINE LOCAL (PORT,CLOCK,FORM)<
|
||
IFE CLOCK-XCLOK,< ;SELECT LINES ONLY FOR THIS CLOCK.
|
||
|
||
IFE XK-1,< ;RESET LCC 1ST TIME AND AFTER RETURNS FROM HIGHER CLOCKS
|
||
L< XLIST>
|
||
L< TAD [->,\XLCC,<] /SET LOAD.CONTROL.CTR>
|
||
L< LCCCLR LCCLOD>
|
||
L< XLIST>
|
||
> ;IFE XK-1
|
||
|
||
IFE FORM-0,<XF=2000> ;SELECT CAW CONST. ACCORDING TO FORM
|
||
IFE FORM-1,<XF=2000>
|
||
IFE FORM-2,<XF=1000>
|
||
IFE FORM-3,<XF=200>
|
||
|
||
L< TTI>
|
||
L(<LSW>,\XLINE,<=.>) ;FOR SIMTAB
|
||
L< >,\PORT,<0>
|
||
L< >,\XF
|
||
L< CALL TTIX>
|
||
|
||
IFE XK-XTTI,< ;CK HIGHER.CLOCKS EVERY XTTI TIMES
|
||
XTTIR=XTTIR-1 ;COUNT DOWN 'EXTRA LINE' CTR.
|
||
IFE XTTIR,<XTTI=XTTI-1> ;AND ADJUST XTTI IF GONE TO ZERO
|
||
L< XLIST>
|
||
L< JMS CK>,\CLOCK,<ION /CHECK HIGHER CLOCKS>
|
||
L< XLIST>
|
||
XK=0
|
||
> ;IFE XK-XTTI
|
||
|
||
XK=XK+1
|
||
> ;IFE CLOCK-XCLOK
|
||
XLINE=XLINE+1
|
||
> ;DEFINE LOCAL
|
||
|
||
DEFINE REMOTE(PORT,CLOCK,FORM,A1)<LOCAL(PORT,CLOCK,FORM)>
|
||
|
||
DEFINE MODEM(A1)<
|
||
XLINE=XLINE+1
|
||
>
|
||
|
||
DEFINE NULL<
|
||
XLINE=XLINE+1
|
||
>
|
||
|
||
DEFINE CONSOL<
|
||
XLINE=XLINE+1
|
||
>
|
||
XK=1 ;FOR COUNTING UP TO XTTI
|
||
XCLOK=CLOK ;LOCAL USES THIS TO TELL WHICH CLOCK ITS EXPANDING FOR
|
||
|
||
IFE CLOK-XCNUM,< ;IF FASTEST CLOCK
|
||
XLCC=XTTIFF ; SET LCC.REG TO 1/5 TOTAL NUM. LINES
|
||
XTTIR=0
|
||
XTTI=1000 ; AND DONT WORRY ABOUT FASTER CLOCKS
|
||
> ;IFE CLOK-XCNUM
|
||
|
||
IFN CLOK-XCNUM,< ;IF NOT FASTEST CLOCK
|
||
XLCC=XTTIF ; SET LCC.REG. TO XTTIF
|
||
XC=CAT(XC,\CLOK,NUM) ;XC=NUM. LINES ON THIS CLOCK
|
||
XB=<<XC-1>/XTTIC>+1 ;XB=NUM. TTI GROUPS NEEDED
|
||
XTTI=XC/XB ;XTTI=NUM. TTI'S PER GROUP
|
||
XTTIR=XC-<XTTI+XB> ;XTTIR=NUM GROUPS WITH EXTRA TTI
|
||
IFG XTTIR,<XTTI=XTTI+1>
|
||
> ;IFN CLOK-XCNUM
|
||
|
||
L< XLIST /TTI CHAIN>
|
||
|
||
XLINE=0
|
||
|
||
|
||
LINES ;INVOKE MACROS
|
||
|
||
L< XLIST>
|
||
|
||
|
||
IFN CLOK-XCNUM,< ;IF NOT FASTEST CLOCK
|
||
IFN XK-1,< ; AND IF INCOMPLETE GROUP
|
||
L< JMS CK>,\CLOK,<ION /CHECK HIGHER CLOCKS>
|
||
> ;IFN XK-1
|
||
> ;IFN CLOK-XCNUM
|
||
L<>
|
||
|
||
|
||
> ;DEFINE TTIMAC
|
||
;MACRO TO GENERATE TTOX CALLS
|
||
;-----------------------------
|
||
|
||
|
||
|
||
DEFINE TTOMAC (CLOK)<
|
||
|
||
CAT(<XN=XC>,\CLOK,<NUM>) ;NUMBER OF LINES ON THIS CLOCK
|
||
XTTOTL=XTTOTL+XN+5 ;ACCUMULATE LENGTH OF TTOX TABLES
|
||
|
||
IFE CLOK-XCNUM,< ;IF FASTEST CLOCK
|
||
XK=0 ; NUM. OF TABLES (ONLY ONE)
|
||
XKO=XTTOFF ; TTO LOAD-CONTROL-CTR.
|
||
> ;IFE CLOK-XCNUM
|
||
|
||
IFN CLOK-XCNUM,< ;OTHER CLOCKS:
|
||
XK=<XN-1>/<5*XTTOC> ; NUM. OF TABLES
|
||
XKO=XTTOF ; LOAD-CONTROL
|
||
> ;IFN CLOK-XCNUM
|
||
|
||
CAT(<TTOXT>,\CLOK,<=>,\XK,<+1>) ;REMEMBER NUM. OF TABLES FOR TTOTAB MACRO
|
||
|
||
L< CLA /SERVICE OUTPUT>
|
||
L< TAD [->,\XKO,<-1] /SET 'LOAD CONTROL'>
|
||
L< CALL TTOX>
|
||
L< CK>,\CLOK,<O0-1>
|
||
|
||
XT=1 ;GENERATE MORE CALLS AS REQUIRED
|
||
REPEAT XK,<
|
||
XTTOTL=XTTOTL+5 ;TOTAL LENGTH OF TABLES TO DATE
|
||
L< JMS CK>,\CLOK,<ION>
|
||
L< TAD [->,\XKO,<-1]>
|
||
L< CALL TTOX>
|
||
L< CK>,\CLOK,<O>,\XT,<-1>
|
||
XT=XT+1
|
||
> ;REPEAT XK
|
||
|
||
L<>
|
||
|
||
> ;DEFINE TTOMAC
|
||
;GENERATE CLOCK CODE AND TTI CHAINS
|
||
;----------------------------------
|
||
|
||
XTTOTL=0 ;FOR COUNTING TOTAL LENGTH OF TABLES
|
||
XCNUM1=XCNUM-1
|
||
|
||
|
||
|
||
;GENERATE LEADING CODE
|
||
;---------------------
|
||
|
||
L<CLK0=NEXCLK>
|
||
L<>
|
||
L<CLKINI, /CLOCK INITIALIZATION>
|
||
|
||
XK=1
|
||
REPEAT XCNUM1,<
|
||
|
||
L< TAD [CK>,\XK,<1]>
|
||
L< DCA CK>,\XK,<ION>
|
||
L< CK>,\XK,<ON>
|
||
|
||
XK=XK+1
|
||
> ;REPEAT XCNUM1
|
||
|
||
L< CK>,\XCNUM,<ON>
|
||
L< JMP I [CLKINX]>
|
||
|
||
L<>
|
||
;GENERATION FOR FASTEST CLOCK
|
||
;----------------------------
|
||
|
||
|
||
L<CLK, CK>,\XCNUM,<SKP /HERE FROM INTERRUPT CHAIN>
|
||
L< JMP I [CLK>,\XCNUM1,<]>
|
||
L< DCA I [DAOQUE]/IN ORDER TO TELL IF DAOQUE WAS CALLED>
|
||
|
||
IFN XCNUM-1,< ;NOT NEEDED IF NOLY ONE CLOCK
|
||
L< JMP I [CK>,\XCNUM,<0]>
|
||
L<>
|
||
L<CKION, CK>,\XCNUM,<SKP /HERE FROM LOWER CLOCKS>
|
||
L< JMP I CK>,\XCNUM1,<ION>
|
||
> ;IFN XCNUM-1
|
||
|
||
L<CK>,\XCNUM,<0, CK>,\XCNUM,<ON>
|
||
L<>
|
||
|
||
|
||
TTIMAC (\XCNUM) ;GENERATE TTI CHAINS
|
||
TTOMAC (\XCNUM) ; AND TTOX CALLS
|
||
|
||
|
||
X\IFNZRO FTCKOV<
|
||
\
|
||
L< CK>,\XCNUM,<SKP /CHECK FOR OVER-RUN>
|
||
L< JMP I CK>,\XCNUM1,<ION>
|
||
L< INC CK>,\XCNUM,<OVR>
|
||
L< NOP>
|
||
L< JMP I [CK>,\XCNUM,<0]>
|
||
X\> /IFNZRO FTCKOV
|
||
\
|
||
L<>
|
||
|
||
X\IFZERO FTCKOV<
|
||
\
|
||
L< JMP I CK>,\XCNUM1,<ION>
|
||
X\> /IFZERO FTCKOV
|
||
\
|
||
L<>
|
||
;GENERATION FOR OTHER CLOCKS
|
||
;---------------------------
|
||
|
||
|
||
|
||
XCN=XCNUM1
|
||
|
||
REPEAT XCNUM1,<
|
||
XCP=XCN-1
|
||
|
||
L<CLK>,\XCN,<, CK>,\XCN,<SKP /HERE FROM INTERRUPT CHAIN>
|
||
L< JMP I [CLK>,\XCP,<]>
|
||
L< DCA I [DAOQUE]/IN ORDER TO TELL IF DAOQUE WAS CALLED>
|
||
L<CK>,\XCN,<0, CK>,\XCN,<ON>
|
||
|
||
|
||
TTIMAC (\XCN) ;GENERATE TTI CHAIN
|
||
TTOMAC (\XCN) ; AND TTOX CALLS
|
||
|
||
|
||
X\IFNZRO FTCKOV<
|
||
\
|
||
L< CK>,\XCN,<SKP /CHECK FOR OVER-RUN>
|
||
L< SKP>
|
||
L< INC CK>,\XCN,<OVR>
|
||
L< NOP>
|
||
L<>
|
||
X\> /IFNZRO FTCKOV
|
||
\
|
||
L< JMS CK>,\XCN,<ION /CHECK HIGHER CLOCKS LAST TIME>
|
||
L<>
|
||
L<CK>,\XCN,<1, CK>,\XCN,<SKP>
|
||
L< JMP I CK>,\XCP,<ION /RETURN TO LOWER CLOCKS>
|
||
L< CK>,\XCN,<ON>
|
||
L< JMP I [CK>,\XCN,<0]>
|
||
L<>
|
||
|
||
|
||
XCN=XCN-1
|
||
> ;REPEAT XCNUM1
|
||
;GENERATE TRAILING CODE
|
||
;----------------------
|
||
|
||
L<>
|
||
L<CK01, /HERE WHEN ALL CLOCKS SATISFIED>
|
||
L< TAD I [DAOBZ] /IF DA-10 IS IDLE>
|
||
L< SKPE CLA>
|
||
L< JMP I [.+4]>
|
||
L< TAD I [DAOQUE]/ AND DAOQUE WAS CALLED>
|
||
L< SKPE CLA>
|
||
L< JMS I DAOUTJ / START IT UP AGAIN>
|
||
L<>
|
||
L< ISZ TIKTIK /SERVICE 1/5-SECOND CLOCK>
|
||
L< XITIRP>
|
||
L< REQTIK>
|
||
L< XITIRP>
|
||
L<>
|
||
;GENERATE LINTAB
|
||
;----------------
|
||
|
||
|
||
DEFINE LOCAL(A1,A2,A3)<L<20>>
|
||
DEFINE REMOTE(A1,A2,A3,A4)<L<20>>
|
||
DEFINE MODEM(A1)<L<0>>
|
||
DEFINE CONSOL<L<10>>
|
||
DEFINE NULL<L<0>>
|
||
|
||
|
||
L<LINTAB=.>
|
||
|
||
LINES
|
||
|
||
L<>
|
||
;GENERATE LPTAB (LINE TO PORT MAP)
|
||
;---------------------------------
|
||
|
||
DEFINE LOCAL (PORT,CLOCK,FORM)<
|
||
L \PORT
|
||
XLINE=XLINE+1
|
||
> ;DEFINE LOCAL
|
||
|
||
DEFINE REMOTE(PORT,CLOCK,FORM,A1)<LOCAL(PORT,CLOCK,FORM)>
|
||
|
||
|
||
DEFINE CONSOL<
|
||
XK=4000!XLINE
|
||
L \XK
|
||
XLINE=XLINE+1
|
||
> ;DEFINE CONSOL
|
||
|
||
|
||
DEFINE NULL<
|
||
XK=4200!XLINE
|
||
L \XK
|
||
XLINE=XLINE+1
|
||
> ;DEFINE NULL
|
||
|
||
|
||
DEFINE MODEM(A1)<NULL>
|
||
|
||
|
||
|
||
L<LPTABB=. /BASE CONST. FOR ADDRESSING LPTAB>
|
||
L<LPTAB=.>
|
||
|
||
|
||
XLINE=0
|
||
|
||
LINES
|
||
|
||
L<>
|
||
;GENERATE PLTAB (PORT TO LINE MAP)
|
||
;---------------------------------
|
||
|
||
|
||
L<PLTABB=.-PLO /BASE CONST. FOR ADDRESSING PLTAB>
|
||
L<PLTAB=.>
|
||
|
||
|
||
XK=XPLO
|
||
REPEAT XPSIZ,<
|
||
|
||
CAT(<IFDEF PL>,\XK),<
|
||
XC=CAT(PL,\XK) ; GENERATE LINE.NUM. AS TABLE ENTRY
|
||
L \XC
|
||
> ;IFDEF ...
|
||
|
||
CAT(<IFNDEF PL>,\XK),<
|
||
L(<4200>) ; GENERATE 4200
|
||
> ;IFNDEF ...
|
||
|
||
XK=XK+1
|
||
> ;REPEAT XPSIZ
|
||
|
||
L<>
|
||
;GENERATE MODEM TABLES
|
||
;---------------------
|
||
|
||
IFN XMSIZ,< ;ONLY IF THERE ARE SOME MODEMS
|
||
|
||
;GENERATE LMTAB (LINE TO MODEM MAP)
|
||
;----------------------------------
|
||
|
||
DEFINE MODEM (PORT)<
|
||
XK=4000!PORT
|
||
L \XK
|
||
XLINE=XLINE+1
|
||
> ;DEFINE MODEM
|
||
|
||
DEFINE REMOTE (A1,A2,A3,PORT)<MODEM (PORT)>
|
||
|
||
DEFINE CONSOL<
|
||
L<0>
|
||
XLINE=XLINE+1
|
||
> ;DEFINE CONSOL
|
||
|
||
DEFINE LOCAL(A1,A2,A3)<CONSOL>
|
||
|
||
DEFINE NULL<
|
||
L<0>
|
||
XLINE=XLINE+1
|
||
> ;DEFINE NULL
|
||
|
||
|
||
L<LMTABB=. /BASE CONST. FOR ADDRESSING LMTAB>
|
||
L<LMTAB=.>
|
||
|
||
|
||
XLINE=0
|
||
|
||
LINES
|
||
|
||
L<>
|
||
;GENERATE MLTAB (MODEM TO LINE MAP)
|
||
;----------------------------------
|
||
|
||
L<MLTABB=.-MLO /BASE CONST. FOR ADDRESSING MLTAB>
|
||
L<MLTAB=.>
|
||
|
||
|
||
XK=XMLO
|
||
REPEAT XMSIZ,<
|
||
|
||
CAT(<IFDEF ML>,\XK,<,>)
|
||
<
|
||
XC=CAT(ML,\XK) ; GENERATE LINE. NUM. AS TABLE ENTRY
|
||
L \XC
|
||
> ;IFDEF...
|
||
|
||
CAT(<IFNDEF ML>,\XK,<,>)
|
||
<
|
||
L(<0>) ; GENERATE 0
|
||
> ;IFNDEF ...
|
||
|
||
|
||
XK=XK+1
|
||
> ;REPEAT XMSIZ
|
||
|
||
L<>
|
||
;GENERATE TAB689 (IF 689AG)
|
||
;--------------------------
|
||
|
||
IFE DC08FX,<
|
||
XK=<M689HI-M689LO+1>*4
|
||
L<TAB689, ZBLOCK >,\XK
|
||
> ;IFE DC08FX
|
||
|
||
|
||
> ;IFN XMSIZ -- END OF MODEM TABLE GENERATION
|
||
;GENERATE SIMTAB
|
||
;----------------
|
||
|
||
X\IFNZRO FTSIM <
|
||
\
|
||
L<SIMTAB=. /TABLE OF LSW ADDRESSES>
|
||
|
||
XLINE=0
|
||
|
||
REPEAT XLNUM,<
|
||
L<LSW>,\XLINE
|
||
XLINE=XLINE+1
|
||
> ;REPEAT XLNUM
|
||
|
||
X\> /IFNZRO FTSIM
|
||
\
|
||
L<>
|
||
;GENERATE BUFFER AND QUEUE STORAGE
|
||
;---------------------------------
|
||
|
||
L<TTOSHB=.-PLO /BASE CONST. FOR ADDRESSING TTOSHF>
|
||
L<TTOSHF=.>
|
||
L< XLIST>
|
||
L< ZBLOCK PSIZ>
|
||
L< XLIST>
|
||
L<TTOBUF=.>
|
||
L< XLIST>
|
||
L< ZBLOCK PSIZ>
|
||
L< XLIST>
|
||
L<MONQA, *.+MONQL>
|
||
L<MODQA, *.+MODQL+MODQL>
|
||
L<MAPQA, *.+MAPQL+MAPQL>
|
||
L<ERRQA, *.+ERRQL+ERRQL>
|
||
L<DAOQA, *.+NUMLIN+NUMLIN>
|
||
L<>
|
||
L<TABEND=.>
|
||
L<>
|
||
;DEFINE TTOX TABLE MACROS
|
||
;--------------------
|
||
|
||
DEFINE TTOTAB (CLOK)<
|
||
|
||
|
||
DEFINE LOCAL (PORT,CLOCK,FORM)<
|
||
IFE CLOCK-CLOK,< ;ONLY LINES. FOR CURRENT CLOCK.
|
||
|
||
IFE XK5,< ;BEGINNING OF EACH TABLE
|
||
L(<CK>,\CLOK,<O>,\XKT,<,>) ; NEEDS LABEL
|
||
L<CKTO=.>
|
||
XK5=1
|
||
> ;IFE XK5
|
||
|
||
L(\PORT) ;GENERATE TABLE ENTRY
|
||
|
||
IFE XKC-XKCMAX,< ;ONE GROUP (TICK'S WORTH) OF LINES. ?
|
||
|
||
XKK=XKK-1 ;DEC. 'EXTRA LINE PER GROUP' CTR.
|
||
IFE XKK,<XKCMAX=XKCMAX-1>
|
||
|
||
IFE XK5-5,< ;IF END OF TABLE
|
||
L(<CKTO-1>) ; GENERATE PTR. TO BEGINING
|
||
XK5T=0
|
||
XKT=XKT+1
|
||
> ;IFE XK5-5
|
||
|
||
IFN XK5-5,< ;OTHERWISE
|
||
L(<.>) ; GENERATE PTR. TO NEXT WD.
|
||
XK5T=XK5+1
|
||
> ;IFN XK5-5
|
||
|
||
XK5=XK5T
|
||
XKC=0
|
||
> ;IFE XKC-XKCMAX
|
||
|
||
|
||
XKC=XKC+1
|
||
> ;IFE CLOCK-CLOK
|
||
> ;DEFINE LOCAL
|
||
|
||
|
||
DEFINE REMOTE(PORT,CLOCK,FORM,A1)<LOCAL(PORT,CLOCK,FORM)>
|
||
DEFINE NULL<>
|
||
DEFINE MODEM(A1)<>
|
||
DEFINE CONSOL<>
|
||
XK5=0 ;COUNT TO 5
|
||
XKC=1 ;COUNT TO XKCMAX
|
||
XKT=0 ;COUNT NUM. OF TABLES
|
||
CAT(<XM=XC>,\CLOK,<NUM>) ;XM=NUM. LINES THIS CLOCK
|
||
CAT(<XMT=TTOXT>,\CLOK) ;XMT=NUM. TTOX TABLES THIS CLOCK
|
||
|
||
|
||
XKCMAX=XM/<5*XMT> ;NUM. LINES/TICK (ONE GROUP)
|
||
XKK=XM-<5*XMT*XKCMAX> ;NUM. GROUPS WITH AN EXTRA LINE
|
||
IFG XKK,<XKCMAX=XKCMAX+1>
|
||
|
||
|
||
|
||
LINES ;INVOKE MACROS
|
||
|
||
|
||
|
||
IFN XK5,< ;FINISH UP LAST TABLE
|
||
REPEAT 5-XK5,<
|
||
L(<.>) ; WITH NULL ENTRIES
|
||
> ;REPEAT 5-XK5
|
||
L(<CKTO-1>) ; AND FINAL LINK TO BEGINING
|
||
> ;IFN XK5
|
||
|
||
|
||
> ;DEFINE TTOTAB
|
||
|
||
|
||
|
||
|
||
;GENERATE TTOX TABLES
|
||
;--------------------
|
||
|
||
|
||
|
||
L<*HICORE->,\XTTOTL,< /TTOX TABLES MUST START AT 4001 OR HIGHER>
|
||
L<>
|
||
|
||
XC=1
|
||
REPEAT XCNUM,<
|
||
TTOTAB (XC)
|
||
L<>
|
||
XC=XC+1
|
||
> ;REPEAT XCNUM
|
||
|
||
|
||
L<$>
|
||
|
||
PALE2:;END OF PAL SOURCE TO BE SUFFIXED TO P680.PAL
|
||
;CODE TO BE PREFIXED TO P680.PAL
|
||
;-------------------------------
|
||
|
||
PALB1:
|
||
|
||
X\/\
|
||
NAME
|
||
L<-----GENERATED BY M680.MAC V.>,\VERZUN,<----->
|
||
L<>
|
||
|
||
L<NUMLIN=>,\XLNUM,< /TOAL NUM. OF LINES>
|
||
L<PLO=>,\XPLO,< /LOWEST PORT NUMBER>
|
||
L<PHI=>,\XPHI,< /HIGHEST...>
|
||
L<PSIZ=>,\XPSIZ,< /SIZE OF PORT-TABLES>
|
||
L<MLO=>,\XMLO,< /LOWEST MODEM NUMBER>
|
||
L<MHI=>,\XMHI,< /HIGHEST...>
|
||
L<MSIZ=>,\XMSIZ,< /SIZE OF MODEM-TABLES>
|
||
L<M689LO=>,\M689LO,< /LOWEST GROUP NUM. (689AG ONLY)>
|
||
L<M689HI=>,\M689HI,< /HIGHEST...>
|
||
L<CTYLIN=>,\XCTY,< /LINE NUM. OF CTY>
|
||
|
||
L<CNUM=>,\XCNUM,< /NUMBER OF CLOCKS>
|
||
L<BAUD=>,\XBLO,< /BAUDRATE OF SLOWEST CLOCK>
|
||
L<DAOQL=NUMLIN /LENGTH OF DAOQ>
|
||
L<>
|
||
M689AG=-<DC08FX-1>
|
||
L<FTMOD=>,\MODCON,< /1: ASSEMBLE MODEM CONTROL CODE>
|
||
L<FT689=>,\M689AG,< /0: DC08-FX 1: 689AG>
|
||
L<>
|
||
|
||
PALE1:
|
||
;ACCUMULATORS
|
||
P=1
|
||
P1=2
|
||
P2=3
|
||
P3=4
|
||
P4=5
|
||
T=6
|
||
T1=7
|
||
T2=10
|
||
T3=11
|
||
T4=12
|
||
CH=13
|
||
|
||
;/I/O CHANNELS
|
||
OCHN=1
|
||
ICHN=2
|
||
|
||
PDLL=10 ;PUSHDOWNLIST LENGTH
|
||
; HERE TO WRITE PAL SOURCE
|
||
;-----------------------
|
||
DEFINE TYPER(MSG)<
|
||
JRST [TTCALL 3,[ASCIZ\MSG\]
|
||
EXIT]>
|
||
|
||
PALOUT: MOVE P,[IOWD PDLL,PDLA]
|
||
RESET
|
||
MOVE P1,[OUTDEV] ;OPEN OUTPUT
|
||
MOVE P2,[OUTFIL]
|
||
PUSHJ P,OPENO
|
||
TYPER<CAN'T OPEN OUTPUT DEVICE>
|
||
MOVE P1,[INDEV] ;OPEN INPUT
|
||
MOVE P2,[INFIL]
|
||
PUSHJ P,OPENI
|
||
TYPER<CAN'T OPEN INPUT DEVICE>
|
||
|
||
MOVE T1,[POINT 7,PALB1] ;OUTPUT PREFIXED CODE
|
||
MOVEI T2,<PALE1-PALB1>*5
|
||
PUSHJ P,SPALO1
|
||
|
||
PALO0: PUSHJ P,INCH ;COPY BODY OF X680.PAL TO OUTPUT
|
||
JRST PALO3
|
||
PUSHJ P,OUTCH
|
||
PALO4: TYPER<OUTPUT ERROR>
|
||
JRST PALO0
|
||
|
||
PALO3: TLNE T,740000 ;ERRORS?
|
||
TYPER<INPUT ERROR>
|
||
PUSHJ P,CLOSEI ;NO--END OF FILE
|
||
TYPER<CAN'T CLOSE INPUT>
|
||
|
||
MOVE T1,[POINT 7,PALB2] ;OUTPUT SUFFIXED CODE
|
||
MOVEI T2,<PALE2-PALB2>*5
|
||
PUSHJ P,SPALO1
|
||
|
||
PUSHJ P,CLOSEO ;CLOSE AND RELEASE
|
||
TYPER<CAN'T CLOSE OUTPUT>
|
||
TYPER<***THE END***>
|
||
|
||
SPALO1: ILDB CH,T1 ;GET CHARACTER
|
||
JUMPE CH,SPALO2 ; IGNORING NULLS
|
||
PUSHJ P,OUTCH
|
||
JRST PALO4
|
||
SPALO2: SOJGE T2,SPALO1
|
||
POPJ P,
|
||
;SUBROUTINE TO OPEN OCHN FOR OUTPUT
|
||
;CALL P1=DEVICE NAME
|
||
; P2=FILE NAME
|
||
;RET+0 ERROR--STATUS IN T
|
||
;RET+1 OK
|
||
|
||
OPENO: SETZM T1 ;OPEN OCHN FOR ODEV
|
||
MOVE T2,P1
|
||
MOVSI T3,OHED
|
||
OPEN OCHN,T1
|
||
JRST OUTER
|
||
|
||
MOVEI T,OBUF ; WITH ONE BUFFER
|
||
HRRM T,.JBFF
|
||
OUTBUF OCHN,1
|
||
|
||
MOVE T1,P2 ;ENTER FILE NAME
|
||
MOVSI T2,(SIXBIT/PAL/) ; WITH EXT. 'PAL'
|
||
SETZB T3,T4
|
||
ENTER OCHN,T1
|
||
JRST OUTER
|
||
JRST CPOPJ1
|
||
|
||
;SUBROUTINE TO CLOSE AND RELEASE OCHN
|
||
;RET+0 ERRORS--STATUS IN T
|
||
;RET+1 OK
|
||
|
||
CLOSEO: CLOSE OCHN, ;CLOSE OCHN
|
||
STATZ OCHN,740000 ; AND GET FINAL STATUS
|
||
JRST OUTER
|
||
|
||
RELEASE OCHN, ;RELEASE OCHN
|
||
CPOPJ1: AOS (P) ;AND SKIP RETURN
|
||
POPJ P,
|
||
|
||
|
||
OUTER: GETSTS OCHN,T ;GET STATUS
|
||
POPJ P,
|
||
|
||
|
||
;OUTPUT CHAR IN CH TO OCHN
|
||
;RET+0 IF ERROR
|
||
;RET+1 IF OK
|
||
|
||
OUTCH: SOSLE OHED+2 ;ROOM?
|
||
JRST OUTCH2 ;YES
|
||
OUT OCHN, ;NO-GET ANOTHER BUFFER
|
||
JRST OUTCH2
|
||
POPJ P, ;ERROR RETTURN
|
||
|
||
OUTCH2: IDPB CH,OHED+1 ;STORE CHAR
|
||
JRST CPOPJ1
|
||
;SUBROUTINE TO OPEN ICHN FOR INPUT
|
||
|
||
OPENI: SETZM T1
|
||
MOVE T2,P1
|
||
MOVEI T3,IHED
|
||
OPEN ICHN,T1
|
||
JRST INER
|
||
|
||
MOVEI T,IBUF
|
||
HRRM T,.JBFF
|
||
INBUF ICHN,1
|
||
|
||
MOVE T1,P2
|
||
MOVSI T2,(SIXBIT/PAL/)
|
||
SETZB T3,T4
|
||
LOOKUP ICHN,T1
|
||
JRST INER
|
||
JRST CPOPJ1
|
||
|
||
|
||
;SUBROUTINE TO CLOSE AND RELEASE ICHN
|
||
|
||
CLOSEI: CLOSE ICHN,
|
||
STATZ ICHN,740000
|
||
JRST INER
|
||
RELEASE ICHN,
|
||
JRST CPOPJ1
|
||
|
||
INER: GETSTS ICHN,T
|
||
POPJ P,
|
||
|
||
|
||
;SUBROUTINE TO INPUT CHAR TO CH FROM OCHN
|
||
|
||
INCH: SOSLE IHED+2
|
||
JRST INCH2
|
||
IN ICHN,
|
||
JRST INCH2
|
||
POPJ P,
|
||
INCH2: ILDB CH,IHED+1
|
||
JRST CPOPJ1
|
||
;STORAGE
|
||
;-------
|
||
|
||
U(PDLA,PDLL) ;PUSHDOWN LIST
|
||
U(OHED,3) ;OUTPUT BUFFER HEADER
|
||
U(IHED,3)
|
||
U(OBUF,203) ;OUTPUT BUFFER
|
||
U(IBUF,203)
|
||
|
||
|
||
END PALOUT
|
||
|