IDENT PDV TITLE PRINTER, CARD READER, AND PUNCH DRIVERS PERIPH TITLE MISC CONSTANTS * * * CM REQUEST COMMANDS * ECTOCM EQU 1B CMTOEC EQU 2B CMRESP EQU 4B CMINI EQU 10B * * CONVERTER CONSTATNS * CHAN EQU 13B CNVERR EQU 0007B * * CM INTERFACE CONSTANTS * INTCHAN EQU 9 I.POINTS EQU 22B SDVCPNTS EQU 2 SDVINTX EQU 2 * * PRINTER CONSTANTS * PRNBSY EQU 002B PRNENDOP EQU 0400B PRNERMSK EQU 6011B BITS TO TEST FOR PRINTER ERROR PRNERBTS EQU 0001B DESIRED STATE OF PRINTER BITS * * READER CONSTANTS * RDRERMSK EQU 6171B BITS TO TEST FOR READER ERROR RDRERBTS EQU 0001B DESIRED BIT STATUS FOR TESTED BITS RDRRDY EQU 0001B READER READY BIT RDRBSY EQU 0002B READER BUSY BIT RDRBYTCN EQU 80 MAX BYTE COUNT * * SPECIAL CONSTANTS FOR LDCX S ETC. * ALPHA EQU 1 TOBESET EQU 0 * * TIMEING LOOP CONSTANTS * TLOOPC1 EQU 1000 11 OR 13 MSECONDS FOR XMIT OR YMIT RESPECTIELY TLOOPC2 EQU 10 110 OR 130 MSECONDS TITLE DEVICE DATA STRUCTURES * * * PRINTER DEVICE DATA STRUCTURE * AND READER DEVICE DATA STRUCTURE * ORG 0 * DVCCHN BSS 1 DEVICE CHAINING WD PCNTR BSS 1 CURRENT P COUNTER FOR THIS DEVICE BUFBS BSS 1 LOCATION OF PPU BUFFER BUFPNT BSS 1 CURRENT LOCATION IN PPU BUFFER NXTACT BSS 1 A NUMBER TO REPRESEND CURRENT ACTION * CNNCT BSS 1 CONNECT CODE FOR ACTUAL DEVICE INTBIT BSS 1 MASK FOR INTERRUPT BIT FOR THIS DEVICE DVCNM BSS 1 S DEVICE NUMBER FOR THIS DEVICE DVCWCNT BSS 1 CM WORD COUNT FO CM XFERS DVCERMSK BSS 1 BITS TO TEST FOR DEVICE ERROR DVCERBTS BSS 1 DESIRED STATE OF DEVICE BITS * DATAFLG BSS 1 ON IF DATA XFER TO DEVICE OLDSTATE BSS 1 . STATUS ON BEGIN OF LAST OPERATION EJECTFLG BSS 1 . AUTOMATIC ACTION OCCURED FLAG AUTOFLAG BSS 1 . CHECK FOR AUTO ACTION FLAG * PRNDTASZ BSS 0 TITLE DIRECT CELLS * * ORG 0 VFD 12/START-1 ORG 10B * * X0 BSSZ 1 X1 BSSZ 1 X2 BSSZ 1 X3 BSSZ 1 X4 BSSZ 1 X5 BSSZ 1 * * CMREQ BSS 0 * BSSZ 1 CMREQDVX BSSZ 1 CMREQPOS BSSZ 1 CMREQWCN BSSZ 1 CMREQACT BSSZ 1 * * ZRO BSSZ 5 * * DVCREQ BSS 0 * BSSZ 4 DVCACT BSSZ 1 * * DVCRSP BSS 0 * EFLAG BSSZ 1 BSSZ 1 DVCSTAT BSSZ 1 CNVSTAT BSSZ 1 BSSZ 1 * * CM BSS 0 * CM0 BSSZ 1 CM1 BSSZ 1 CM2 BSSZ 1 CM3 BSSZ 1 CM4 BSSZ 1 * * DEVICE DATA INDEX * XDVC BSSZ 1 CURRENT DEVICE TITLE MACROS * * MACRO ADCX,LOC LOC ADC TOBESET RMT ORG ALPHA VFD 12/.LOC RMT ENDM * MACRO LDCX,LOC LOC LDC TOBESET RMT ORG ALPHA VFD 12/.LOC RMT ENDM * VFD24XA MACRO ARG1,ARG2 IFC NE,..ARG1. .ARG2 EQU * VFD 12/ARG1,12/ARG2 ENDM * VFD24X MACRO A1,L1,A2,L2,A3,L3,A4,L4,A5,L5,A6,L6,A7,L7,A8,L8 VFD24XA A1,L1 VFD24XA A2,L2 VFD24XA A3,L3 VFD24XA A4,L4 VFD24XA A5,L5 VFD24XA A6,L6 VFD24XA A7,L7 VFD24XA A8,L8 ENDIF ENDM TITLE CO-ROUTINE IMPLEMENTATION * * * ORG 100B * * MLOOP LDM DVCCHN,XDVC CAUSES DELAY WITHOUT RESETTING NJN MLOOPX PCOUNTER RJM GETCNVST LDC FIRSTDVC * MLOOPX STD XDVC LDM PCNTR,XDVC STD X1 LJM 0,X1 * * DELAY BSSZ 1 COUSES DELAY AND RETURN TO POINT OF LDM DELAY THIS CALL AFTER DELAY STM PCNTR,XDVC UJN MLOOP * * LJM 0 MSET EQU *-1 CAUSES NEXT DELAY TO RETURN TO POINT LDM MSET OF THIS CALL STM PCNTR,XDVC UJN MSET-1 * * LJM 0 XSET EQU *-1 CAUSES NEXT DELAY TO RETURN TO SBN 2 (A)-2 STM PCNTR,XDVC UJN XSET-1 * * XDELAY SBN 2 DELAYS, AND AFETER DELAY, RETURNS TO STM PCNTR,XDVC (A)-2 LJM MLOOP TITLE CENTRAL REFERANCE SUBROUTNES * * * LJM 0 GETCM EQU *-1 OBTAINS ACCESS TO CENTRAL BUFFERS LDM CMFLG NJN GETCM1 LDN 1 STM CMFLG LDM DVCNM,XDVC AND SETS UP CENTRAL CALL WD STD CMREQDVX LDN 0 STD CMREQPOS LDM DVCWCNT,XDVC STD CMREQWCN UJN GETCM-1 * GETCM1 LDM GETCM CM BUSY LJM XDELAY * * LJM 0 RLSCM EQU *-1 RELEASE ACCESS TO CM LDN 0 STM CMFLG UJN RLSCM-1 * * CMFLG BSSZ 1 CM ACCESS CONTROL * * * LJM 0 CMWAIT EQU *-1 WAITS FOR CM REQUEST WORD TO CLEAR CMREQ1 LDCX FILLEDIN CRD CM0 LDD CM4 ZJN CMWAIT-1 LDM CMWAIT LJM XDELAY * * LJM 0 SNDCMRQ EQU *-1 SENDS A REQUEST TO CM CMREQ2 LDCX FILLEDIN CRD CM0 LDD CM4 NJN SNDCMRQ1 CMREQ3 LDCX FILLEDIN CWD CMREQ LDN SDVINTX OAN INTCHAN UJN SNDCMRQ-1 * SNDCMRQ1 LDM SNDCMRQ LJM XDELAY TITLE GETNERAL DEVICE ROUTINES * * * LJM 0 INTWAIT EQU *-1 WAIT FOR DEVICE INTERRUPT LDM INTBIT,XDVC STM INTWAIT1+1 LDD CNVSTAT ASSUMES CONVERTER STATUS OBTAINED INTWAIT1 LPC 0 ATLEAST ONCE PER TRIP AROUND DEVICES NJN INTWAIT-1 LDM INTWAIT LJM XDELAY * * LJM 0 GETDVCST EQU *-1 GET DEVICE STATUS FNC 1300B,CHAN RETURNS 4000B IN A IF ERROR ACN CHAN 0 IF NOT IAN CHAN ASSUMES DEVICE ALREADY CONNECTED DCN CHAN STD DVCSTAT LDM DVCERMSK,XDVC STM GETDVCS1+1 LDD DVCSTAT LMM DVCERBTS,XDVC GETDVCS1 LPC TOBESET ZJN GETDVCST-1 LDC 4000B UJN GETDVCST-1 * * LJM 0 GETCNVST EQU *-1 GET CONVERTER STATUS FNC 1200B,CHAN ( RETURNS 4000B IN A ACN CHAN IF ERROR, ELSE 0 ) IAN CHAN STD CNVSTAT DCN CHAN LPC CNVERR ZJN GETCNVST-1 RJM GETDVCST LDC 4000B UJN GETCNVST-1 * * * TRANSMIT A MESSAGE OUT * RETURNS WITH 0 IF OK, 1 IF NOT * LJM 0 XMIT EQU *-1 FNC 1601B,CHAN ASSUMES DEVICE ALREDY CONNECTED ACN CHAN * XMITLP SOM NXTACT,XDVC DECREMENT COUNT MJN XMITFIN FINISHED LDM BUFPNT,XDVC STD X1 PREPARE ADDRESS OF DATA WORD AOM BUFPNT,XDVC STEP POINTER RJM SETKILLT * XMITLP1 EJM XMITLP2,CHAN WAIT OFR CHANNLE TO GO EMPTY RJM KILLTIME NJN XMITLP1 * UJN XMITLP1 *********************************************** LJM XMITFAIL XMISSION FAILS * XMITLP2 LDI X1 OAN CHAN UJN XMITLP * XMITFIN RJM SETKILLT XMITFINL EJM XMITFIN1,CHAN IJM XMITFIN2,CHAN RJM KILLTIME NJN XMITFINL * UJN XMITFINL ********************************************** LJM XMITFAIL XMITFIN1 DCN CHAN XMITFIN2 LDN 0 LJM XMIT-1 * XMITFAIL IJM XMITFL1,CHAN DCN CHAN XMITFL1 LDC 4000B LJM XMIT-1 * * * READ A LINE IN * * RETURNS WITH 0 IN A IF OK * ELSE 4000B * * ASSUMES MAX BYTE COUNT IN X1 * ASSUMES CONNECTED * LJM 0 YMIT EQU *-1 FNC 1400B,CHAN ACN CHAN * YMITLP SOD X1 DECREMIT COUNT MJN YMITLP3 DONE LDM BUFPNT,XDVC STD X2 PREPARE ADDRESS OF DATA WORD AOM BUFPNT,XDVC STEP POINTER RJM SETKILLT * YMITLP1 FJM YMITLP2,CHAN WAIT FOR DATA IJM YMITLP4,CHAN OR INACTIVE RJM KILLTIME NJN YMITLP1 LJM YMITFAIL INPUT FAILS * YMITLP2 IAN CHAN INPUT A BYTE STI X2 AND STORE IT UJN YMITLP * YMITLP3 RJM SETKILLT YMITLP3A FJM YMITLP3B,CHAN WAIT FOR DAT OR INACTIVE IJM YMITLP4,CHAN RJM KILLTIME NJN YMITLP3A LJM YMITFAIL * YMITLP3B DCN CHAN * YMITLP4 LDN 0 LJM YMIT-1 * YMITFAIL DCN CHAN LDC 4000B LJM YMIT-1 * * * SET UP FOR TIMEING LOOPS * LJM 0 SETKILLT EQU *-1 LDC TLOOPC1 STD X4 LDC TLOOPC2 STD X5 UJN SETKILLT-1 * * TIMEING LOOP * * NUMBER OF TIMES = TLOOPC1 * TLOOPC2 * * TIME FOR KILLTIME IS 8 MICRO SECONDS * LJM 0 KILLTIME EQU *-1 SOD X4 NJN KILLTIME-1 LDC TLOOPC1 STD X4 SOD X5 UJN KILLTIME-1 * * CONNECT A DEVICE * RETURNS WITH A NE 0 IF CONNECT ERROR * LJM 0 CONNECT EQU *-1 FNC 2000B,CHAN FNC 1000B,CHAN ACN CHAN LDM CNNCT,XDVC OAN CHAN DCN CHAN RJM GETCNVST UJN CONNECT-1 * * * WAIT FOR AN ERROR TO GO AWAY, OR FOR 16 TO 32 SECONDS. * IF ERROR DID NOT GO AWAY , ERROR RESPONSE * ELSE OK RESPONSE * * SAVES PCOUNTER IN NXTACT * SAVES CLOCK AT BUFPNT * LJM 0 EWAIT EQU *-1 LDM EWAIT STM NXTACT,XDVC SAVE RETURN P COUNER MCLOCK1 LDCX FILLEDIN CRD CM LDD CM2 STEPS ABOUT EVERY 16.8 SECONDS ADN 2 STM BUFPNT,XDVC ADC -10000B MJN *+3 STM BUFPNT,XDVC RJM MSET PREPARE LOOP * RJM CONNECT NJN EWAIT1 RJM GETDVCST NJN EWAIT1 LDM NXTACT,XDVC RESTORE P COUNTER STD X1 LDN 0 OK EXIT LJM 0,X1 * EWAIT1 EQU * MCLOCK2 LDCX FILLEDIN CRD CM LDD CM2 SBM BUFPNT,XDVC SEE IF TIME HAS EXPIRED ZJN *+3 YES, ASSUMES WILL TRY AT LEAST LJM MLOOP NO EVERY 10 SECONDS, SO WILL GET EXACT MATCH LDM NXTACT,XDVC RESTORE P COUNTER STD X1 LDC 4000B RETURN WITH ERROR LJM 0,X1 TITLE PRINTER DRIVER CODE * * * PRNTR RJM GETCM LDN CMINI STD CMREQACT RJM SNDCMRQ RJM CMWAIT RJM RLSCM * PRNTRLP RJM DELAY . RESET AND WAIT FOR OTHER DEVICES DVCREQ1 LDCX FILLEDIN ADM DVCNM,XDVC CRD DVCREQ SEE IF A NEW REQUEST YET LDD DVCACT NJN *+3 LJM MLOOP NO NEW REQUEST DVCREQ2 LDCX FILLEDIN ADM DVCNM,XDVC CWD ZRO * LDD DVCACT CHECK FOR ERROR TEST ACTION ADC -200B NJN *+5 NO SUCH ACTION RJM EWAIT LJM PRNFINX * RJM GETCM LDN ECTOCM STD CMREQACT RJM SNDCMRQ ASK CM FOR NEXT BUFFER LOAD RJM CMWAIT LDM BUFBS,XDVC STM PRNTR1+1 CMBUF1 LDCX FILLEDIN PRNTR1 CRM 0,CMREQWCN COPY BUFFER LOAD TO PPU RJM RLSCM * LDM BUFBS,XDVC STM BUFPNT,XDVC * PRNTR1A RJM PRNTRDY ZJN *+4 RJM INTWAIT UJN PRNTR1A * LDM OLDSTATE,XDVC . GET OLD STATUS SHN -4 . POSITION LAST LINE OF FORMS BIT STM P.LOGICW . LOUSY PPU INSTR. SET LDM AUTOFLAG,XDVC . GET AUTO EJECT FLAG ( 0 OR 1 ) LPC 0 P.LOGICW EQU *-1 . PUT BITS HERE STM EJECTFLG,XDVC . SAVE EJECTED BIT LDD DVCSTAT STM OLDSTATE,XDVC . SAVE THIS STATE FOR NEXT TIME * PRNTR2 LDM BUFPNT,XDVC STD X1 LDI X1 GET NEXT ACTION NJN *+3 LJM PRNTR10 END OF ACTIONS, SEE ABOUT PRINTING SBN 4 . PAGE EJECT NJN PRNTR2A . NOPE LDM EJECTFLG,XDVC . DID WE JUST DO EJECT ? ZJN PRNTR2A1 . NO, JUMP LDN 0 STM EJECTFLG,XDVC . YES, CLEAR FLAG AND LJM PRNTR5 . SKIP THIS COMMAND PRNTR2A1 LDN 4 LJM PRNTR3 . GO DO THE EJECT INSTEAD * PRNTR2A SBN 5-4 . ELSE TRY SELECT AUTO EJECT NJN PRNTR2B . NOPE LDN 1 STM AUTOFLAG,XDVC . SET FLAG IN DESCRIPTOR LDN 5 LJM PRNTR3 . AND SEND THE CODE * PRNTR2B SBN 10B-5 . NOW TRY FOR CLEAR FORMAT SELECTIONS NJN *+3 STM AUTOFLAG,XDVC . IF SO, CLEAR EJECT FLAG * SBN 27B-10B MJN *+3 LJM PRNTR5 ACTION OUT OF RANGE, SKIP IT ADN 27B PRNTR3 STM NXTACT,XDVC PRNTR3A RJM PRNTRDY . READY PRINTER ZJN *+4 RJM INTWAIT UJN PRNTR3A * * PRNTR4 FNC 31B,CHAN DESELECT INTERRUPT LDM NXTACT,XDVC FAN CHAN PERFORM SELECTED ACTION LDN 0 STM DATAFLG,XDVC SIGNAL THAT NO PRINTING IN PROGRESS * PRNTR5 AOM BUFPNT,XDVC LJM PRNTR2 * PRNTR10 AOM BUFPNT,XDVC * STD X1 LDI X1 NJN *+3 LJM PRNFIN ALL DONE, NO LINE TO OUTPUT STM NXTACT,XDVC SAVE OUTPUT COUNT AOM BUFPNT,XDVC STEP POINTER LDM DATAFLG,XDVC NJN PRNTR11 PRINTING WAS IN PROGRESS LJM PRNTR12 . NO PRINTING, JUMP * PRNTR11 RJM CONNECT ZJN *+3 LJM PRNFINX RJM GETDVCST GET PRINTER STATUS ZJN *+3 LJM PRNFINX LDD DVCSTAT LPN PRNBSY CHECK PRINTER BUSY NJN *+3 LJM PRNTR13 NOT BUSY, SO PROCEED RJM INTWAIT WAIT FOR INTERRUPT RJM CONNECT ZJN *+3 LJM PRNFINX RJM GETDVCST GET PRINTER STATUS ZJN *+3 LJM PRNFINX LDD DVCSTAT LPC PRNENDOP CHECK FOR END OP INTERRUPT ZJN PRNTR11 NOT ON LJM PRNTR13 . NOW WE MAY PRINT * * PRNTR12 RJM CONNECT . CONNECT ZJN *+3 LJM PRNFINX FNC 31B,CHAN . DE-SELECT INTERUPT ON RDY/NT-BSY FNC 30B,CHAN . AND SELECT IT RJM GETDVCST ZJN *+3 LJM PRNFINX LDD DVCSTAT LPN PRNBSY ZJN PRNTR12A RJM INTWAIT . WAIT FOR INTERRUPT UJN PRNTR12 . LOOP * PRNTR12A FNC 31B,CHAN . CLEAR INTERRUPT * * PRNTR13 FNC 33B,CHAN DESELECT END OP INTERRUPT FNC 32B,CHAN RESELECT INTERRUPT LDN 1 STM DATAFLG,XDVC SIGNAL PRINTING IN PROGRESS RJM CONNECT . MAKE SURE CONNECTED ZJN *+3 LJM PRNFINX RJM GETDVCST ZJN *+3 LJM PRNFINX * RJM XMIT SEND A LINE ZJN *+3 LJM PRNFINX * PRNFIN RJM CONNECT ZJN *+3 LJM PRNFINX RJM GETDVCST GET PRINTER STATUS ZJN *+3 LJM PRNFINX RJM GETCNVST ZJN *+3 LJM PRNFINX LDN 0 * * PRNFINX STD EFLAG DVCRSP1 LDCX FILLEDIN ADM DVCNM,XDVC CWD DVCRSP RJM GETCM LDN CMRESP STD CMREQACT RJM SNDCMRQ RJM CMWAIT RJM RLSCM LJM PRNTRLP * * * * ROUTINE TO READY PRINTER FOR FUNCTION CODES * * LJM 0 PRNTRDY EQU *-1 RJM CONNECT ZJN *+3 LJM PRNFINX FNC 31B,CHAN SELECT INTERRUPT ON READY FNC 30B,CHAN AND NOT BUSY RJM GETDVCST GET PRINTER STATUS ZJN *+3 LJM PRNFINX LDD DVCSTAT LPN PRNBSY CHECK PRINTE BUSY UJN PRNTRDY-1 . RETURN ZERO ON NOT BUSY TITLE CARD READER DRIVER CODE * * * READR RJM GETCM LDN CMINI INITIALIZE CENTRAL FOR THIS CARD READER STD CMREQACT RJM SNDCMRQ RJM CMWAIT RJM RLSCM * READRLP RJM DELAY . SET LOOP AND GIVE OTHERS A CHANCE DVCREQ3 LDCX FILLEDIN ADM DVCNM,XDVC CRD DVCREQ SEE IF A NEW REQUES YET LDD DVCACT NJN *+3 LJM MLOOP NO NEW REQUEST YET * DVCREQ4 LDCX FILLEDIN ADM DVCNM,XDVC CWD ZRO INDICATE ACCEPTANCE OF REQUEST LDD DVCACT STM NXTACT,XDVC SBN 3 TEST FOR DIRECT READER FUNCTIONS MJN *+3 LJM READRSP NO DIRCECT READER ACTIONS * RJM CONNECT FUNCTION READER ZJN *+3 LJM RDRFINX LDM NXTACT,XDVC FAN CHAN SEND FUNCTION TO READER LJM RDRFIN * READRSP ADN 3 OTHER ACTIONS ADC -100B PJN *+3 LJM RDRFIN BAD ACTION, SKIP IT NJN *+3 LJM RDRFIN ACTION CODE = 100B, STATUS REQUEST SBN 1 NJN *+3 LJM RDRYMT ACTION CODE = 101B, READ LDM NXTACT,XDVC ADC -200B TEST FOR ERROR WAIT ACTION NJN *+5 RJM EWAIT LJM RDRFINX LJM RDRFIN BAD ACTION, SKIP IT * * READ A CARD * RDRYMT LDM BUFBS,XDVC STD X1 LDC 1777B STM 0,X1 PREPARE FLAG FOR NO CARD READ RJM MSET PREPARE LOOP RJM CONNECT ZJN *+3 LJM RDRFINX RJM GETDVCST GET STATUS LDD DVCSTAT LPC RDRBSY CHECK BUSY BIT ZJN *+3 LJM MLOOP STILL BUSY LDD DVCSTAT LPC RDRRDY CHECK READY NJN *+5 OK LDC 4000B NOT READY, ERROR CONDITION LJM RDRFINX * LDM BUFBS,XDVC ADN 5 SPACE FOR STATUS BITS STM BUFPNT,XDVC LDC RDRBYTCN STD X1 RJM YMIT READ CARD IMAGE STD X0 SAVE YMIT RESPONSE LDM BUFBS,XDVC STD X1 LDN 0 STM 0,X1 STM 1,X1 STM 2,X1 LDD CNVSTAT STM 3,X1 LDD DVCSTAT STM 4,X1 LDD X0 ZJN *+3 LJM RDRFINX LJM RDRFIN * RDRFIN RJM CONNECT FINISH UP READER CTIONS ZJN *+3 LJM RDRFINX RJM GETDVCST GET READER STATUS ZJN *+3 LJM RDRFINX RJM GETCNVST GET CONVERTER STATUS ZJN *+3 LJM RDRFINX LDN 0 * RDRFINX STD EFLAG DVCRSP2 LDCX FILLEDIN ADM DVCNM,XDVC CWD DVCRSP RJM GETCM LDM NXTACT,XDVC ADC -101B ZJN RDRFINY WAS A READ OF CARD ACTION * LDN CMRESP WAS NOT A READ OF CARD ACTION STD CMREQACT UJN RDRFINZ * RDRFINY LDN CMRESP+CMTOEC STD CMREQACT LDM BUFBS,XDVC STM RDRFIN1+1 CMBUF2 LDCX FILLEDIN RDRFIN1 CWM 0,CMREQWCN COPY BUFFER TO CM * RDRFINZ RJM SNDCMRQ RJM CMWAIT RJM RLSCM LJM READRLP TITLE INITIALIZING PACKAGE * * * START LDN 15 SBN 1 NJN *-1 ALLOW ALL PPUS T GET STARTED * FILLIN LDC I.POINTS+SDVCPNTS CRD CM LDD CM3 LPN 77B STD CM3 LDD CM4 STM FILLIN1+1 LDM FILLIN1 LPC 7700B ADD CM3 STM FILLIN1 LDC NPAIRS-2 STD X2 LDC 7777B STD X1 * FILLINL LDM PAIRLIST,X2 SBD X1 ZJN FILLIN2 ALREADY HAVE THIS ADDRESS SET UP * LDM PAIRLIST,X2 STD X1 SBN 9 TREAT 9 AS 4 NJN FILLINX LDN 4 UJN FILLIN1 FILLINX LDD X1 FILLIN1 ADC TOBESET CRD CM LDD CM3 LPN 77B STD CM3 LDD X1 SBN 9 NJN FILLIN2 * LDD CM3 ON 9, SUBTRACT 1 SHN 12 ADD CM4 SBN 1 STD CM4 SHN -12 STD CM3 * FILLIN2 LDM PAIRLIST+1,X2 STD X3 LDI X3 LPC 7700B ADD CM3 STI X3 LDD CM4 STM 1,X3 LCN 2 RAD X2 MJN *+3 LJM FILLINL * * LDC FIRSTDVC XLOOP STD XDVC LDM CNNCT,XDVC SHN -9 COMPUTE EQUIPMENT NUMBER ADC 1000B ( SHN ) STM XLOOP1 LDN 10B INTERRUPT MASK FOR EQUIPMENT 0 XLOOP1 SHN 0 STM INTBIT,XDVC FIX INTERRUPT BIT MASK LDM DVCCHN,XDVC NJN XLOOP LDC FIRSTDVC LJM MLOOPX * * PAIRLIST VFD24X 0,DVCREQ1,0,DVCREQ2 VFD24X 0,DVCREQ3,0,DVCREQ4 VFD24X 1,DVCRSP1 VFD24X 1,DVCRSP2 VFD24X 2,MCLOCK1,2,MCLOCK2 VFD24X 9,CMREQ1,9,CMREQ2,9,CMREQ3 VFD24X 4,CMBUF1 VFD24X 4,CMBUF2 * NPAIRS EQU *-PAIRLIST * * TITLE MACROS FOR DEVICE DATA AREAS * * * PRINTER MACRO * PRINTER MACRO SDVCNM,EQPNM LOCAL L,BUFFER * L VFD 12/LASTDVC DEVICE CHAIN LASTDVC SET L VFD 12/PRNTR INITIAL P COUNTER VFD 12/BUFFER ADDRESS OF BUFFER BSSZ 1 BSSZ 1 * VFD 3/EQPNM,9/0 CONNECT CODE BSSZ 1 VFD 12/SDVCNM SDEVICE NUMBER OFR THIS DEVICE VFD 12/16 CM WORD COUNT VFD 12/PRNERMSK BITS TO TEST FOR PRINTER ERROR VFD 12/PRNERBTS DESIRED STATE OF PRINTER BITS * BSSZ 1 BSSZ 3 . SPECIAL FLAG WORDS * BUFFER BSSZ 16*5 * ENDM * * * * READER MACRO * READER MACRO SDVCNM,EQPNM LOCAL L,BUFFER * L VFD 12/LASTDVC DEVICE CHAIN LASTDVC SET L VFD 12/READR INITIAL P COUNTER VFD 12/BUFFER ADDRESS OF BUFFER BSSZ 1 BSSZ 1 * VFD 3/EQPNM,9/0 CONNECT CODE BSSZ 1 VFD 12/SDVCNM S DEVICE NUMBER FOR THIS DEVICE VFD 12/21B CM WORD COUNT VFD 12/RDRERMSK BITS TO TEST FOR READER ERROR VFD 12/RDRERBTS DESIRED STATE OF READER BITS * BSSZ 1 BSSZ 3 . SPECIAL FLAG WORDS IN READER * BUFFER BSSZ 16*5 * ENDM TITLE DEVICE DATA ARREAS * * * LASTDVC SET 0 * PRINTER 1,6 SDVCNM = 1, EQUIPMENT NUMBER = 6 READER 2,7 SDVCNM = 2, EQUIPMENT NUMBER = 7 * FIRSTDVC EQU LASTDVC * END