IDENT MUX,0 PERIPH EJECT * * * DEFINE MULTIPLEXOR * MUXCHN EQU 6 MUXRD EQU 7774B MUXWRT EQU 7763B MUXRDY EQU 1B MUXWRBIT EQU 400B IF CHANGED HERE, ALSO CHANGE MUXINT * * * DEFINE INTERRUPT INTERFACE * INTCHAN EQU 9 INTNUMB EQU 1 * * * DEFINE SPECIAL CONTROL CHARACTERS FOR * FOR COMMUNICATION WITH USER PROCESS * OUTKILL EQU 4001B STOPCHR EQU 4002B ECHODCHR EQU 4003B NULLCHR EQU 4004B LOSTCHR EQU 4005B ECHOECHR EQU 4006B ECHOXCHR EQU 4007B PURGECHR EQU 4010B * * * DEFINE EVENTS TO BE SENT TO USER PROCESS * INEVWD EQU 2 OUTEVWD EQU 1 * * * DEFINE COMMAND CODES FOR COMMUNICATION WITH * CENTRAL INTERRUPT CODE * CMMDSEND EQU 1 CMMDGET EQU 2 CMMDSVNT EQU 3 CMMDCHKE EQU 4 CMMDHANG EQU 5 * * * DEFINE CELL IN CENTRAL THAT CONTAINS ZERO * ZERO EQU 0 * * DEFINE POINTER DO ALL PPU DATA IN CM * I.POINTS EQU 22B * * * DEFINE MUX QUEUE SIZE * MUXQSZ EQU 100 EJECT * * DEFINE BIT MASKS AND FIELDS * * INPUT TTY * MODEMSK EQU 7000B MDESHFT EQU -9 EVENTBIT EQU 400B XMITBIT EQU 200B ININTBIT EQU 100B ECHFLG EQU 20B BRKMSK EQU 17B * * OUTPUT TTY * OUTINTBT EQU 4000B USERFLAG EQU 2000B CMNEMPT EQU 1000B OUTACTV EQU 400B CHINMUX EQU 200B ECHOW EQU 100B * * DEFINE DEVICE TYPE INDEXES * ALSO DEFINED BY POSITION IN TABLES * MUXRESP * INTRESP * TTINTYP EQU 1 TTOUTTYP EQU 2 SPDVCTYP EQU 3 EJECT * * DEFINE START * ORG 0 * VFD 12/START-1 EJECT * * DIRECT CELL ASSIGNMENTS * ORG 20B CM0 BSSZ 1 CM1 BSSZ 1 CM2 BSSZ 1 CM3 BSSZ 1 CM4 BSSZ 1 CM5 BSSZ 1 * CMMD BSSZ 1 CHAN BSSZ 1 EVENT1 BSSZ 1 EVENT2 BSSZ 1 CMMD4 BSSZ 1 * CHANX BSSZ 1 DATUM BSSZ 1 * XMUX VFD 12/MUXQSZ YMUX VFD 12/MUXQSZ * X1 BSSZ 1 X2 BSSZ 1 * N1 DATA 1 * DATA0 BSSZ 1 DATA1 BSSZ 1 DATA2 BSSZ 1 DATA3 BSSZ 1 DATA4 BSSZ 1 DATA5 BSSZ 1 * EMPTY VFD 12/NULLCHR,12/NULLCHR,12/NULLCHR VFD 12/NULLCHR,12/NULLCHR * ORG 100B EJECT * * MASTER LOOP ENTRY * * * THIS LOOP CHECKS MUX * IF MUX HAS DATA, THEN THE DATA IS PLACED IN MUXQ * ( IN MUXCHNQ AND MUXDTAQ ) * IF MUXQ NOW FULL, ONE ENTRY IS PROCESSED * BY PROCSMUX * IF MUXQ NOT FULL, THE LOOP IS REENTERED * IF MUX DOES NOT HAVE DATA AND MUXQ NOT EMPTY * THEN ONE ENTRY IS PROCESSED BY PROCSMUX * AND THE LOOP REENTERED * IF MUX DOES NOT HAVE DATA AND MUXQ EMPTY * THEN THE INTERRUPT Q IS CHECKED BY PROCSINT * AND AT MOST 1 ENTRY PROCESSED * AND THE LOOP IS REENTERED * * * ORG 100B MUXREAD EQU * READMUX FNC MUXRD,MUXCHN ACN MUXCHN IAN MUXCHN LPN MUXRDY NJN READMUX1 DCN MUXCHN LDD XMUX SBD YMUX NJN PROCSMUX LJM PROCSINT * READMUX1 IAN MUXCHN STM MUXCHNQ,XMUX IAN MUXCHN STM MUXDTAQ,XMUX DCN MUXCHN SOD XMUX NJN *+3 LDC MUXQSZ STD XMUX SBD YMUX NJN READMUX * PROCSMUX LDM MUXCHNQ,YMUX STD CHAN LPC MUXWRBIT*2-1 SHN 2 ADC CHANBLKS STD CHANX LDM MUXDTAQ,YMUX STD DATUM SOD YMUX NJN *+3 LDC MUXQSZ STD YMUX LDI CHANX LPN 3B SHN 1 STD X1 LJM MUXRESP,X1 * * * TO EXPAND THIS TABLE, MUST CHANGE AN LPN IN PROCSMX * MUXRESP LJM READMUX 0 NUMBS IN COL 40 LJM TTYINMX 1 LJM TTYOUTMX 2 LJM READMUX 3 * PROCSINT LDN CMMD RJM GETCENT NJN *+3 LJM READMUX LDD CHAN LPC MUXWRBIT*2-1 SHN 2 ADC CHANBLKS STD CHANX LDI CHANX LPN 3B SHN 1 STD X1 LJM INTRESP,X1 * * * TO EXPAND THIS TABLE, MUST CHANGE AN LPN IN PROCSINT * INTRESP LJM READMUX 0 NUMBS IN COL 40 LJM TTYINCM 1 LJM TTYOUTCM 2 LJM SPECDVC 3 EJECT * * SEND A CHARACTER TO MUX * LJM 0 WRITMUX EQU *-1 STD X1 FNC MUXWRT,MUXCHN ACN MUXCHN LDD CHAN OAN MUXCHN LDD X1 OAN MUXCHN DCN MUXCHN UJN WRITMUX-1 EJECT * * GET A WORD FROM CENTROL Q AND PLACE IN DIRECT * LOCATION GIVEN IN A * * RETURNS WITH A NON ZERO IF SUCCESSFULL * LJM 0 GETCENT EQU *-1 LPN 77B ADC 6000B ( CRD 00 ) STM GETCENT2 LDM FRMCMIN SBM FRMCMOUT NJN GETCENT1 LDM FRMCMX CENTQ1 ADC 0 ADN 1 CRD CM0 LDD CM4 STM FRMCMIN SBM FRMCMOUT ZJN GETCENT-1 NO WORDS TO READ * GETCENT1 LDM FRMCMOUT GETCENT2 CRD 0 AOM FRMCMOUT SBM FRMCML NJN *+5 LDM FRMCMF STM FRMCMOUT RJM UPGET LDN 1 LJM GETCENT-1 * * SEND A WORD TO CENTRAL Q FROM DIRECT LOC GIVEN IN A * LJM 0 PUTCENT EQU *-1 LPN 77B ADC 6200B ( CWD 00 ) STM PUTCENT1 LDM TOCMIN PUTCENT1 CWD 0 AOM TOCMIN SBM TOCML NJN *+5 LDM TOCMF STM TOCMIN LDM TOCMIN SBM TOCMOUT NJN PUTCENT-1 RJM PUTCENT2 PUTCENT3 RJM PUTCENT2 ZJN PUTCENT3 LJM PUTCENT-1 * LJM 0 PUTCENT2 EQU *-1 LDM TOCMX CENTQ5 ADC 0 ADN 2 CRD CM0 LDD CM4 STM TOCMOUT SBM TOCMIN UJN PUTCENT2-1 * * UPDATE OUT POINTER OF FRM Q * LJM 0 UPGET EQU *-1 ZERO1 LDC 0 CRD CM0 LDM FRMCMOUT STD CM4 LDM FRMCMX CENTQ3 ADC 0 ADN 2 CWD CM0 UJN UPGET-1 * * UPDATE IN POINTER OF TO Q * AND WAKE UP INTERRUPT ROUTINE * LJM 0 UPPUT EQU *-1 ZERO2 LDC 0 CRD CM0 LDM TOCMIN STD CM4 LDM TOCMX CENTQ6 ADC 0 ADN 1 CWD CM0 LDN INTNUMB OAN INTCHAN UJN UPPUT-1 EJECT * TOCMX BSS 1 TOCMF BSS 1 TOCMIN BSS 1 TOCMOUT BSS 1 TOCML BSS 1 * FRMCMX BSS 1 FRMCMF BSS 1 FRMCMIN BSS 1 FRMCMOUT BSS 1 FRMCML BSS 1 EJECT * * MUX HAS JUST FINISHED SENDING OUT A TTY CHAR * TTYOUTMX LDI CHANX LPC -CHINMUX STI CHANX CLEAR CHAR IN MUX FLAG LPC ECHOW CHECK FOR ECHO WAITING ZJN *+3 LJM TTYOUTEC ECHO WAITING * LDI CHANX LPC CMNEMPT SEE IF CM BUFFER EMPTY NJN *+3 LJM READMUX YES * TTYOUTA RJM GETBUF GET A NEW CHARACTER, ( IN A ) STD DATUM LMC OUTKILL ZJN TTYOUTKL LDI CHANX LPC -OUTACTV ADC OUTACTV TURN ON OUTPUT ACTIVE FLAG STI CHANX LDD DATUM * TTYOUTSN LPC 377B LMC 377B SHN 2 ADC 4002B RJM WRITMUX SEND IT TO MUX LDC CHINMUX RAI CHANX SET CHAR IN MUX FLAG LJM READMUX * TTYOUTEC LDI CHANX ECHO WAITING LPC -ECHOW CLEAR ECHO WAITING FLAG STI CHANX LDM 1,CHANX PICK UP CHARACTER LJM TTYOUTSN * TTYOUTKL LDI CHANX KILL OUTPUT ACITVE LPC -CMNEMPT-OUTACTV STI CHANX RJM RQSTMR LJM READMUX * * GET A CHARACTER FOR OUTPUT * IF BUFFER GOES EMPTY SEND A REQUEST TO CM * AND SET PROPER FLAGS * LJM 0 GETBUF EQU *-1 LDC STOPCHR STD DATA5 LDD CHAN CMBUF7 ADC 0 CRD DATA0 CWD DATA1 LDD DATA0 LMC OUTKILL ZJN GETBUF1 LDD DATA1 LMC STOPCHR NJN *+3 RJM RQSTMR GETBUF1 LDD DATA0 UJN GETBUF-1 * * REQUEST A DATA WORD FROM ECS * LJM 0 RQSTMR EQU *-1 LDC CMMDGET STD CMMD LDN CMMD RJM PUTCENT RJM UPPUT LDI CHANX LPC -OUTINTBT-USERFLAG-CMNEMPT ADC OUTINTBT STI CHANX UJN RQSTMR-1 EJECT * * RECIEVE A CHARACTER ON TTY INPUT FROM MUX * TTYINMX LDD DATUM LMC 377B STD DATUM INVERT DATA BITS LPC 400B CHECK FOR BROKEN LINE ZJN ATTYINMX * LDN 2 MAJOR PANIC RJM SNDSPC UJN BTTYINMX * ATTYINMX LDD DATUM LPC 177B LMM 2,CHANX CHECK FOR MILD PANIC NJN BTTYINMX LDN 1 MILD PANIC RJM SNDSPC * BTTYINMX LDI CHANX SHN -9 GET MODE SHN 1 STD X1 LJM XTTYINMX,X1 JUMP ON MODE * XTTYINMX LJM INECHO 0 NUMB IN COL 50 LJM INECHOD 1 LJM INNONECH 2 LJM READMUX 3 LJM READMUX 4 LJM READMUX 5 LJM READMUX 6 LJM READMUX 7 * * TTY INPUT, ECHO MODE * INECHO RJM BRKTST PJN *+3 LJM INECHOX LDM MUXWRBIT*4,CHANX CHECK OUTPUT STATE LPC OUTACTV+ECHOW ZJN *+3 LJM INECHOX LDD DATUM LPC 1777B RJM PUTBUF SEND CHARACTER TO USER LDM MUXWRBIT*4,CHANX LPC CHINMUX NJN *+3 LJM INECHOI SEND TH ECHO IMMEDIATLY * LDD DATUM STM MUXWRBIT*4+1,CHANX STORE THE ECHO LDC ECHOW RAM MUXWRBIT*4,CHANX SET ECHO WAITING FLAG LJM READMUX * * GO TO ECHO DEFFERED MODE * INECHOX LDC 1000B RAI CHANX SET MODE TO ECHO DEFFERED LDC ECHODCHR SEND A SIGNAL OF CHANGE TO USER RJM PUTBUF LDD DATUM SEND THE CHARACTER LPC 1777B AND RJM FPUTBUF AN EVENT LJM READMUX * * SEND ECHO IMMEDIATLY * INECHOI LDC MUXWRBIT RAD CHAN RESET CHAN TO OUTPUT SHN 2 ADC CHANBLKS STD CHANX RESET CHANX LDD DATUM LJM TTYOUTSN * * ECHO DEFFERED MODE * INECHOD LDM 1,CHANX SCN ECHFLG ADN ECHFLG STM 1,CHANX LDD DATUM LPC 1777B RJM PUTBUF LJM READMUX * * NO ECHO, BUT WITH BREAK CHARS, MODE * INNONECH RJM BRKTST MJN NONECH2 LDD DATUM LPC 1777B RJM PUTBUF LJM READMUX * NONECH2 LDD DATUM LPC 1777B RJM FPUTBUF LJM READMUX * * TEST A CHAR FOR BREAK * RETURNS NEG IF BREAK * LJM 0 BRKTST EQU *-1 LDD DATUM LPC 7400B TEST FOR LOST CHAR ZJN *+3 LCN 1 UJN BRKTST-1 LOST CHAR * LDD DATUM LPC 177B STD X1 SET UP INDEX FOR BREAK TABLE LDM 1,CHANX LPN BRKMSK GET BREAK TABLE ADN 6 ADC 1000B MAKE SHIFT INSTRUCTION STM BRKTST1 LDM BRKTBLS,X1 BRKTST1 SHN 00B ( MODIFIED ) UJN BRKTST-1 EJECT * * PUT A CHAR IN CM BUFFER * LJM 0 PUTBUF EQU *-1 STD DATA5 LDD CHAN CMBUF1 ADC 0 CRD DATA0 CWD DATA1 LDD DATA1 LMC NULLCHR ZJN PUTBUF-1 RJM PUTCMDTA UJN PUTBUF-1 * * PUT A CHR IN CM BUFFER AND MOVE TO ECS * LJM 0 FPUTBUF EQU *-1 STD DATA5 LDD CHAN CMBUF2 ADC 0 CRD DATA0 CWD DATA1 RJM PUTCMDTA LDI CHANX LPC EVENTBIT NJN FPUTBUF-1 LDI CHANX LPC XMITBIT NJN FPUTBF2 LDC INEVWD RJM SNDEVENT UJN FPUTBUF-1 * FPUTBF2 LDI CHANX LPC -EVENTBIT ADC EVENTBIT STI CHANX UJN FPUTBUF-1 * * HANDLE RESPONSE FROM CM TO PUTTING WORD IN ECS * RPUTBUF LDI CHANX LPC -ININTBIT STI CHANX LPC XMITBIT ZJN RPUTBUF1 LDD CHAN CMBUF3 ADC 0 CRD DATA1 LDC NULLCHR STD DATA0 RJM PUTCMDTA * RPUTBUF1 LDI CHANX LPC EVENTBIT ZJN RPUTBUF2 LDC INEVWD RJM SNDEVENT * RPUTBUF2 LDI CHANX LPC -ININTBIT-XMITBIT-EVENTBIT STI CHANX LJM MUXREAD * * XFER A WORD TO ECS * LJM 0 PUTCMDTA EQU *-1 LDI CHANX LPC ININTBIT NJN PUTCMDT1 LDC CMMDSEND STD CMMD LDN CMMD RJM PUTCENT LDN DATA1 RJM PUTCENT RJM UPPUT LDD CHAN CMBUF4 ADC 0 CWD EMPTY LDI CHANX LPC -ININTBIT ADC ININTBIT STI CHANX UJN PUTCMDTA-1 * PUTCMDT1 LDI CHANX LPC -XMITBIT ADC XMITBIT STI CHANX LDD DATA0 LMC NULLCHR NJN *+3 LJM PUTCMDTA-1 LDC LOSTCHR STD DATA4 LDD CHAN CMBUF5 ADC 0 CWD DATA0 LDI CHANX LPC -EVENTBIT ADC EVENTBIT STI CHANX LPC MODEMSK ZJN *+3 LJM PUTCMDTA-1 LDI CHANX ADC 1000B IF MODE WAS 0, SWITCH TO 1 STI CHANX LJM PUTCMDTA-1 * * SEND SPECIAL EVENT FOR A CHAN * LJM 0 SNDSPC EQU *-1 STD CM2 EVENT1 WILL BE TYPE OF PANIC LDC CMMDSVNT COMMAND TO SEND AN EVENT STD CM0 LDC MUXWRBIT*2 FAKE CHANNEL NUMBER STD CM1 LDD CHAN CHANNEL NUMBER WILL BE IN EVENT2 STD CM3 LDN 0 STD CM4 LDN CM0 RJM PUTCENT RJM UPPUT UJN SNDSPC-1 * * SEND 12 BIT EVENT IN A FOR CURRENT CHANNEL * LJM 0 SNDEVENT EQU *-1 STD EVENT1 LDN 0 STD EVENT2 LDC CMMDSVNT STD CMMD LDN CMMD RJM PUTCENT RJM UPPUT UJN SNDEVENT-1 * * REHANG PSEUDO PROCESS ON EVENT CHANNEL * REHANG LDC CMMDHANG STD CMMD LDN CMMD RJM PUTCENT RJM UPPUT LJM READMUX EJECT * * TTY INPUT RESPONSE TO COMMAND FORM CM INTERRUPT * TTYINCM LDD CMMD LPN 7B SHN 1 STD X1 LJM TTYINCMX,X1 * TTYINCMX LJM MUXREAD 0 NUMB IN COL 50 LJM INEVENT 1 LJM RPUTBUF 2 LJM INEMPT 3 LJM INNEMPT 4 LJM MUXREAD 5 LJM MUXREAD 6 LJM MUXREAD 7 * * INPUT ECS IS EMPTY, RESPONSE TO TEST * INEMPT LDM 1,CHANX SEE IF ANY CHARS HAVE COME IN SINCE LPN ECHFLG INITIATION OF TEST ZJN *+3 LJM INNEMPT YES, DO NOT CHANGE MODES INEMPT1 LDI CHANX ENTRY POINT USED TO GO TO ECHO LPC -MODEMSK STI CHANX INEMPT2 LDC ECHOECHR ALSO USED BY OTHER CODE RJM PUTBUF LJM REHANG * * INPUT ECS IS NON EMPTY, RESPONSE TO TEST * ( ALSO USED BY OTHER REFUSALS ) * INNEMPT LDC ECHOXCHR REFUSE TO ENTER ECHO MODE RJM FPUTBUF LJM REHANG * * TTY INPUT HAS RECIEVED AN EVENT FROM USER PROCESS * INEVENT LDD EVENT1 LPN 7B SHN 1 STD X1 LJM INEVENTX,X1 * INEVENTX LJM REHANG 0 NUMB IN COL 50 LJM REHANG 1 LJM INPURGE 2 LJM INECH 3 LJM INXBRK 4 LJM INXECH 5 LJM REHANG 6 LJM INXPANIC 7 * * PURGE CM BUFFER REQUEST ( TTY INPUT ) * INPURGE LDC PURGECHR RJM FPUTBUF LJM REHANG * * ENTER ECHO MODE ( TTY INPUT ) * INECH LDI CHANX LPC MODEMSK NJN *+3 LJM INEMPT2 OK IF ALREADY IN ECHO MODE LDI CHANX LPC ININTBIT ZJN *+3 LJM INNEMPT REFUSE IF WAITING TO SEND CM TO ECS LDD CHAN CMBUF6 ADC 0 CRD CM0 LDD CM4 LMC NULLCHR ZJN *+3 LJM INNEMPT REFUSE IF DATA IN CM BUFFER LDM 1,CHANX SCN ECHFLG STM 1,CHANX CLEAR ECH FLG LDC CMMDCHKE STD CMMD LDN CMMD RJM PUTCENT REQUEST CHECK OF ECS RJM UPPUT LJM READMUX * * CHANGE BREAK TABLE * INXBRK LDM 1,CHANX SCN BRKMSK STM 1,CHANX LDD EVENT2 LPN BRKMSK RAM 1,CHANX LJM INPURGE * * GO TO NON ECHO MODE * INXECH LDI CHANX LPC -MODEMSK ADC 2000B STI CHANX LDC ECHOXCHR RJM PUTBUF LJM REHANG * * CHANGE MILD PANIC CHARACTER * INXPANIC LDD EVENT2 LPC 177B STM 2,CHANX LJM REHANG EJECT * * TTYOUTPUT RESPONSE TO COMMAND FROM CM INTERRUPT * TTYOUTCM LDD CMMD LPN 7B SHN 1 STD X1 LJM TTYOTCMX,X1 * TTYOTCMX LJM MUXREAD 0 NUMB IN COL 50 LJM OUTEVENT 1 LJM OUTWRD 2 LJM OUTNONE 3 LJM OUTMORES 4 LJM MUXREAD 5 LJM MUXREAD 6 LJM MUXREAD 7 * * TTYOUTPUT HAS RECIEVED AN EVENT FROM USER PROCESS * OUTEVENT LDD EVENT1 LPN 1B SHN 1 STD X1 LJM OTEVENTX,X1 * OTEVENTX LJM REHANG 0 NUMBS IN COL 50 LJM OUTMORE 1 * * OUTPUT COMMAND OF NEW WORD AVAILABLE * OUTWRD LDN DATA0 RJM GETCENT LDD CHAN CMBUF8 ADC 0 CWD DATA0 REFILL CENTRAL BUFFER LDI CHANX LPC -OUTINTBT-USERFLAG-CMNEMPT TURN OFF WAITING AND ADC CMNEMPT USER INFO FLAGS, AND SET CM BUFFER STI CHANX NON EMPTY LPC CHINMUX SEE IF A CHARACTER NOW IN MUX ZJN *+3 LJM READMUX YES LJM TTYOUTA SEND A CHARACTER * * OUTPUT COMMAND OF NO WORD AVAILABLE * OUTNONE LDI CHANX LPC -OUTINTBT TURN OFF WAITING FLAG STI CHANX LPC USERFLAG SEE IF USER SAID MORE OUTPUT AVAILABLE ZJN *+3 RJM RQSTMR LJM READMUX * * SPECIAL SIGNAL OF MORE OUTPUT FROM MUXINT * OUTMORES RJM OUTMOREX LJM READMUX * * EVENT FROM USER PROCESS SAYS MORE OUTPUT AVAILABLE * OUTMORE RJM OUTMOREX LJM REHANG * * HANDLE MORE OUTPUT * LJM 0 OUTMOREX EQU *-1 LDI CHANX LPC CMNEMPT SEE IF CM BUFFER EMPTY NJN OUTMOREX-1 LDI CHANX LPC -USERFLAG ADC USERFLAG TURN ON USER INFO FLAG STI CHANX LPC OUTINTBT SEE IF WAITING FOR RESPONSE NJN OUTMOREX-1 RJM RQSTMR UJN OUTMOREX-1 EJECT * * SPECIAL STATE FOR INITIALIZING A DEVICE * SPECDVC LDD CMMD LMN 1B RECOGNIZE EVENTS ONLY ZJN *+3 LJM MUXREAD LDD EVENT1 LPN 3B SHN 1 STD X1 LJM SPECEVX,X1 * SPECEVX LJM REHANG 0 ( NUMBS IN COL 50 ) LJM REHANG 1 LJM NEWTTY 2 LJM REHANG 3 EJECT * * INITIALIZE TTY * NEWTTY LDN 0 STM 1,CHANX LDN TTINTYP STI CHANX CMBUF9 LDC 0 ADD CHAN CWD EMPTY LDN TTOUTTYP STM MUXWRBIT*4,CHANX LDN 0 RJM WRITMUX TURN ON THIS TTY BOARD IN MUX LJM REHANG EJECT * * * START LDN 15 SBN 1 DELAY FOR ALL CHANNELS TO NJN *-1 BE RELEASED * LDC I.POINTS GET ADDRESS OF I.MUX ADN INTNUMB AND STORE IN DATA3, DATA4 CRD DATA0 LDD DATA3 LPN 77B STD DATA3 * LDD DATA3 SHN 12 ADD DATA4 GET CMBUF ADDRESS CRD CM0 LDD CM3 LPN 77B STD CM3 LDC CMBUFCNT STD X1 CMBUFL LDM CMBUFS,X1 STD X2 LDI X2 LPC 7700B ADD CM3 STI X2 LDD CM4 STM 1,X2 SOD X1 NJN CMBUFL * LDD DATA3 SHN 12 ADD DATA4 ADN 1 GET CENTQ ADDRESS CRD CM0 LDD CM3 LPN 77B STD CM3 LDC CENTQCNT STD X1 CENTQL LDM CENTQS,X1 STD X2 LDI X2 LPC 7700B ADD CM3 STI X2 LDD CM4 STM 1,X2 SOD X1 NJN CENTQL * LDD DATA3 SHN 12 ADD DATA4 ADN 2 GET TOCMF - CENTQ CRD CM0 LDD CM4 STM TOCMX * LDD DATA3 SHN 12 ADD DATA4 ADN 3 GET FRMCMF - CENTQ CRD CM0 LDD CM4 STM FRMCMX * * LDN 3 STD X1 * CLOOPF LDD X1 CENTQ7 ADC 0 ADM FRMCMX CRD CM0 LDD CM4 STM FRMCMF,X1 SOD X1 PJN CLOOPF * LDN 3 STD X1 * CLOOPT LDD X1 CENTQ8 ADC 0 ADM TOCMX CRD CM0 LDD CM4 STM TOCMF,X1 SOD X1 PJN CLOOPT * * LDD DATA3 SHN 12 ADD DATA4 ADN 4 CRD CM0 GET ADDRESS OF A ZERO LDD CM3 LPN 77B STD CM3 LDC ZEROCNT STD X1 ZEROL LDM ZEROS,X1 STD X2 LDI X2 LPC 7700B ADD CM3 STI X2 LDD CM4 STM 1,X2 SOD X1 NJN ZEROL * * * LDC MUXWRBIT-1 STD CHAN LDC CMMDHANG STD CMMD STLOOP LDN CMMD RJM PUTCENT RJM UPPUT SOD CHAN PJN STLOOP * LDC 2*MUXWRBIT STD CHAN LDN CMMD RJM PUTCENT RJM UPPUT * * LJM READMUX EJECT * * ITEM MACRO D VFD 12/D ENDM * * * LIST OF ADDRESSES TO BE GIVEN CENTQ ADDRESS * CENTQS EQU *-1 ITEM CENTQ1 ITEM CENTQ3 ITEM CENTQ5 ITEM CENTQ6 ITEM CENTQ7 ITEM CENTQ8 * CENTQCNT EQU *-CENTQS-1 * * LIST OF ADDRESSES TO BE GIVEN CM BUFFER ADDRESS * CMBUFS EQU *-1 ITEM CMBUF1 ITEM CMBUF2 ITEM CMBUF3 ITEM CMBUF4 ITEM CMBUF5 ITEM CMBUF6 ITEM CMBUF7 ITEM CMBUF8 ITEM CMBUF9 * CMBUFCNT EQU *-CMBUFS-1 * * LIST OF ADDRESSES TO BE GEVIN ADDRESS OF A ZERO * ZEROS EQU *-1 ITEM ZERO1 ITEM ZERO2 * ZEROCNT EQU *-ZEROS-1 EJECT * * BREAK TABLES * * 0 NO BREAK * 1 ALL BREAK * 2 ALL NON GRAPHIC * 3 ALL NON ALPHABETIC OR NUMERIC ( WILL BREAK ON BLANK ) * 4 ALL NON NUMERIC * BRKTBLS BSS 0 * DUP 16,1 DATA 3600B COL 0, NON GRAPHIC * DUP 16,1 DATA 3600B COL 1, NON GRAPHIC * DUP 16,1 DATA 2600B COL 2, GRAPHIC, NON ALPHANUMERIC * DUP 10,1 DATA 2000B COL 3, DIGITS DUP 6,1 DATA 2600B COL 3, COLON THROUGH QUESTION MARK * DUP 1,1 DATA 2600B COL 4, AT SIGN DUP 15,1 DATA 2200B COL 4, LETTERS A THROUGH O * DUP 11,1 DATA 2200B COL 5, LETTERS P THROUGH Z DUP 5,1 DATA 2600B COL 5, LEFT SQ BRACKET THROUGH BAR * DUP 1,1 DATA 2600B COL 6, APPOSTROPHE DUP 15,1 DATA 2200B COL 6, LOWER CASE LETTERS A THROUGH O * DUP 11,1 DATA 2200B COL 7, LOWER CASE LETTERS P THROUGH Z DUP 4,1 DATA 2600B COL 7, LEFT CURLY BRACKET THROUGH NOT DUP 1,1 DATA 3600B COL 7, NON GRAPHIC DELETE EJECT * * * MUXCHNQ BSSZ MUXQSZ+1 MUXDTAQ BSSZ MUXQSZ+1 * * * * * * CHANBLKS EQU * DUP MUXWRBIT,1 VFD 12/SPDVCTYP,12/0,12/0,12/0 DUP MUXWRBIT,1 DATA 0,0,0,0 BSSZ 512*4-*+CHANBLKS PAD OUT TO FULL SIZE TO BE SURE * END