; UPDATE DEMO.P14 5.14.72 ; UPDATE DEMO.P13 5.12.72 ; UPDATE DEMO.P12 5.7.72 ; UPDATE DEMO.P11 5.1.72 ; UPDATE DEMO.P10 4.27.72 ; UPDATE DEMO.P09 04.26.72 ; UPDATE DEMO.P08 04.20.72 ; UPDATE DEMO.P07 04.19.72 ; UPDATE DEMO.P06 04.17.72 ; UPDATE DEMO.P05 04.13.72 ELITE HUB DEMO ; UPDATE DEMO.P04 04.13.72 ELITE HUB DEMO ; UPDATE & :(t  h,"7ACME OIL COMPANY , AJAX OF CALIFORNIA ALPHA OIL CORP,ORATION63321 SO. SEVENTH 12255 FO0 :*"7ACME OIL COMPANY * AJAX OF CALIFORNIA ALPHA OIL CORP!*ORATION63321 SO. SEVENTH 12255 FO*URTH STREET P.O. BOX 1234 SA*N DIEGO, CALIF. LOS ANGELES, CALIF*4 SANTA FE SPRINGS, CAL01020304REGU*XLAR PREMIUM LOW LEAD DIESEL *| 0000 * COLL w* ; UPDATE DEMO.P15 5.17.72 ; UPDATE DEMO.P14 5.14.72 ; UPDATE DEMO.P13 5.12.72 ; UPDATE DEMO.P12 5.7.72 ; UPDATE DEMO.P11 5.1.72 ; UPDATE DEMO.P10 4.27.72 ; UPDATE DEMO.P09 04.26.72 ; UPDATE DEMO.P08 04.20.72 ; UPDATE DEMO.P07 04.19.72 ; UPDATE DEMO.P06 04.17.72 ; UPDATE DEMO.P05 04.13.72 ELITE HUB DEMO ; UPDATE DEMO.P04 04 DEMO.P03 04.13.72 ELITE HUB DEMO ; UPDATE DEMP.P02 04.12.72 ELITE ; ; LODT DEMO ; DEBUG = 0 ;0 = NORMAL PROGRAM OPERATION WITH DC11 ;1 = DEBUG CHECKOUT WITH SIMULATED DC11 DOS = 0 ;0 = RUN ON STAND ALONE SYSTEM ;1 = RUN ON DOS SYSTEM .IFNZ DOS .IFNZ DEBUG .CSECT .ENDC .IFZ DEBUG .ASECT ,URTH STREET P.O. BOX 1234 SA,N DIEGO, CALIF. LOS ANGELES, CALIF,4 SANTA FE SPRINGS, CAL01020304REGU,XLAR PREMIUM LOW LEAD DIESEL ,| 0000 , COLL r, X+,XXX CONSOLIDATED CARRIERS X2, XX 00000 MMDDYYHHMM GE,0& X0*XXX CONSOLIDATED CARRIERS X7* XX 00000 MMDDYYHHMM GE*0&ES TERMINAL 0000 ~*T 00000049 XX l*x XXXXXX XXX XX * XXXXXX XX*X XX * XXXXXX XXX XX /* XXXXXX XXX @*, .13.72 ELITE HUB DEMO ; UPDATE DEMO.P03 04.13.72 ELITE HUB DEMO ; UPDATE DEMP.P02 04.12.72 ELITE ; ; LODT DEMO ; DEBUG = 0 ;0 = NORMAL PROGRAM OPERATION WITH DC11 ;1 = DEBUG CHECKOUT WITH SIMULATED DC11 DOS = 0 ;0 = RUN ON STAND ALONE SYSTEM ;1 = RUN ON DOS SYSTEM .IFNZ DOS .IFNZ DEBUG .CSECT .ENDC .ENDC .ENDC .IFZ DOS .ASECT .ENDC ; REGISTER DEFINITIONS ; ; R0 = 0% R1 = 1% R2 = 2% R3 = 3% R4 = 4% R5 = 5% SP = 6% PC = 7% PS = 177776 LKS = 177546 ;LINE FREQ. CLOCK STATUS REG. BR4 = 200 ;HARDWARE PRIORITY LEVELS OF DEVICES BR5 = 240 BR6 = 300 .IFZ DEBUG RCES TERMINAL 0000 y,T 00000049 XX g,x XXXXXX XXX XX , XXXXXX XX,X XX , XXXXXX XXX XX *, XXXXXX XXX ;,, P.O. BOX B,P608 SAN DIEGO, CALIF ESG @G,tZ{[lP}M]\Nk`Ka P.O. BOX G*P608 SAN DIEGO, CALIF ESG @L*tZ{[lP}M]\Nk`Kaz^L~no|* AUDIT TRR*AIL JUST ENTERED IS ERRONEOUS! MANU*AL ENTRY ACCEPTED!6 IS END OF *DAY REPORT TO BE ENTERED ON PUNCHED ]*(TAPE?  TRANSMISSION ERROR L!*N$ ERRONEOUS ACTION CODE RECEIV*rED!  ERROR IN AUDIT TRAIL! &  .IFZ DEBUG .ASECT .ENDC .ENDC .IFZ DOS .ASECT .ENDC ; REGISTER DEFINITIONS ; ; R0 = 0% R1 = 1% R2 = 2% R3 = 3% R4 = 4% R5 = 5% SP = 6% PC = 7% PS = 177776 LKS = 177546 ;LINE FREQ. CLOCK STATUS REG. BR4 = 200 ;HARDWARE PRIORITY LEVELS OF DEVICES BR5 = 240 BR6 SR = 174000 ;DC11 RECEIVER STATUS REGISTER TCSR = 174004 ;DC11 TRANSMITTER STATUS REGISTER RBUF = 174002 ;DC11 RECEIVER BUFFER TBUF = 174006 ;DC11 TRANSMISSION BUFFER .ENDC RVECTR = 300 ;DC11 RECEIVER INTERRUPT VECTOR TVECTR = 304 ;DC11 TRASMISSION INTERRUPT VECTOR CVECTR = 100 ;LINE FREQUENCY CLOCK INTERRUPT VECTOR .IFZ DEBUG CLRBCC = 17z^L~no|, AUDIT TRM,AIL JUST ENTERED IS ERRONEOUS! MANU,AL ENTRY ACCEPTED!6 IS END OF ~,DAY REPORT TO BE ENTERED ON PUNCHED X,(TAPE?  TRANSMISSION ERROR  L! N,N$ ERRONEOUS ACTION CODE RECEIV,rED!  ERROR IN AUDIT TRAIL! (  DA:  TI:  DA:  TI:  l 2 X# DDMMYY HHMM * : * A" 0246@&*` dV Z@ *&B *J%I< MD}*n@ 7.׭.Y r* l   x  = 300 .IFZ DEBUG RCSR = 174000 ;DC11 RECEIVER STATUS REGISTER TCSR = 174004 ;DC11 TRANSMITTER STATUS REGISTER RBUF = 174002 ;DC11 RECEIVER BUFFER TBUF = 174006 ;DC11 TRANSMISSION BUFFER .ENDC RVECTR = 300 ;DC11 RECEIVER INTERRUPT VECTOR TVECTR = 304 ;DC11 TRASMISSION INTERRUPT VECTOR CVECTR = 100 ;LINE FREQUENCY CLOCK INTERRUPT VECTOR 4770 ;CLEAR BCC BCCOUT = 174772 ;BCC OUTPUT REGISTER BCCMSB = 174774 ;MSB OF RESULTING BCC BCCLSB = 174776 ;LSB OF RESULTING BCC .ENDC SWITCH = 177570 ;CONSOLE SWITCH ADDRESS ; ; SYMBOLS REQUIRED FOR IOX CALLS ; KBDSLT = 0 ;TTY KEYBOARD SLOT TTYSLT = 1 ;TTY TELEPRINTER SLOT LSRSLT = 2 ;LOW-SPEED PT READER SLOT LSPSLT = 3   l sl 2  O  N S  C  @% DDMMYY HHMM   ", : , A" 0246@!,` dV Z@ ,&B ,J*    7*U@7U@7 7 w  *  x6x*"rrrrw ĝ *F5@&eĝ5 UL*j5@507-7 *7pU@h00E@ZET7o*. wĝ@7 ,5* 5ĝ7  * ~z 0} ĝ' .IFZ DEBUG CLRBCC = 174770 ;CLEAR BCC BCCOUT = 174772 ;BCC OUTPUT REGISTER BCCMSB = 174774 ;MSB OF RESULTING BCC BCCLSB = 174776 ;LSB OF RESULTING BCC .ENDC SWITCH = 177570 ;CONSOLE SWITCH ADDRESS ; ; SYMBOLS REQUIRED FOR IOX CALLS ; KBDSLT = 0 ;TTY KEYBOARD SLOT TTYSLT = 1 ;TTY TELEPRINTER SLOT LSRSLT = 2 ;LOW-SPEED PT  ;LOW-SPEED PUNCH SLOT RESET = 2 ;RESET COMMAND RESTRT = 3 ;RESTART COMMAND INIT = 1 ;INIT COMMAND READ = 11 ;READ COMMAND WRITE = 12 ;WRITE COMMAND EOF = 040 ;EOF BIT IN STATUS BYTE CR = 15 ;ASCII FOR CR LF = 12 ;ASCII FOR LF ; ; DC11 RECEIVE CONTROL STATUS REGISTER (RCSR) BITS ; ERROR = 1000%I< MDx,n@ 7.׭.Y m, l   x ,    7,U@7U@7 7 w  ,  x6s,"rrrrw ĝ ,F5@&eĝ5 UL,j5@507-7 ,7pU@h00E@ZET*7wĝ7&*BsE@w D ]4*f/" >.wC* w*ĝNwlE@<7  ݵ*!10!20!60 !40 N [^*wwww8c. t*. h. \. PD$*> `E1W  w*bwww  *READER SLOT LSPSLT = 3 ;LOW-SPEED PUNCH SLOT RESET = 2 ;RESET COMMAND RESTRT = 3 ;RESTART COMMAND INIT = 1 ;INIT COMMAND READ = 11 ;READ COMMAND WRITE = 12 ;WRITE COMMAND EOF = 040 ;EOF BIT IN STATUS BYTE CR = 15 ;ASCII FOR CR LF = 12 ;ASCII FOR LF ; ; DC11 RECEIVE CONTROL STATUS REGI00 CARTRN = 040000 RING = 020000 OVERUN = 010000 LENGTH = 000000 ;8 BITS/CHAR DONE = 000200 ENABLE = 000100 PARITY = 000040 RSPEED = 000020 ;DC11-AB 1200 BAUD DETECT = 000004 DTRDY = 000001 ; ; DC11 TRANSMIT CONTROL STATUS REGISTER (TCSR) BITS ; STOPCD = 000400 READY = 000200 TSPEED = 000020 ;DC11-AB 1200 BAUD CLRSND = 000002 REQSND = 00007j,. wĝ@7 ,5, 5ĝ7  , ~z 0} ĝ",7wĝ7!,BsE@w D ]4,f/" >.w>, w,ĝNwlE@<7  ݵ,!10!20!60 !40 N [Y   N `Zw  >*# )Dw  w LcP*Tg  w   w N*^  w  2w *zPh  w r )*:Zw RRr  2*^ |H >W s 2*0, wN*1 H7D W *  .31 VH7 ~*W STER (RCSR) BITS ; ERROR = 100000 CARTRN = 040000 RING = 020000 OVERUN = 010000 LENGTH = 000000 ;8 BITS/CHAR DONE = 000200 ENABLE = 000100 PARITY = 000040 RSPEED = 000020 ;DC11-AB 1200 BAUD DETECT = 000004 DTRDY = 000001 ; ; DC11 TRANSMIT CONTROL STATUS REGISTER (TCSR) BITS ; STOPCD = 000400 READY = 000200 TSPEED = 000020 ;DC11-AB 1200 BAUD CL!01 ; ; HUB DC11 & TTY MESSAGE BUFFER OFFSETS ; MODEBF = 2 STATUS = 3 COUNT = 4 DATA = 6 HDRSIZ = 17. ;NO. OF BYTES IN HDR OF MSG FROM TERM'L MSGDAT = 23. ;BEGINNING OF MESSAGE DATA (LESS HEADER) ; ; DC11 MSG BUFFER FLAGS ; BUSY = 200 ;BIT 7 OF STATUS BYTE; SET WHEN BUSY ; ; MAG TAPE REGISTER ADDRESSES ; WC = 167540 ;WORD COUNT STAT = ",wwww8c. t,. h. \. PD,> `E1W  w,bwww ,   N `Zw  9,# )Dw  w LcK,Tg  w   w N{,^  w  2w ,zPh  w r $,:Zw R# E7pwo*  ҕ  *6wN1 deH7*Z RC  " FE@ĝF*~!7 x|Eh7wE*Z7 EN7x @*w7 w01hw *נ FנZ[ CsÌČm*p   <0 *2* .  5*VwE$RSND = 000002 REQSND = 000001 ; ; HUB DC11 & TTY MESSAGE BUFFER OFFSETS ; MODEBF = 2 STATUS = 3 COUNT = 4 DATA = 6 HDRSIZ = 17. ;NO. OF BYTES IN HDR OF MSG FROM TERM'L MSGDAT = 23. ;BEGINNING OF MESSAGE DATA (LESS HEADER) ; ; DC11 MSG BUFFER FLAGS ; BUSY = 200 ;BIT 7 OF STATUS BYTE; SET WHEN BUSY ; ; MAG TAPE REGISTER ADDRESSES ; WC = 1675%167542 ;STATUS COM = 167544 ;COMMAND MA = 167546 ;MEMORY ADDRESS ; ; MAG TAPE STATUS REGISTER BITS ; ERR = 004000 ;ERROR RDY = 000200 ;READY FPT = 000001 ;FILE PROTECT (1 = NO WRITE RING) ; ; MAG TAPE COMMAND REGISTER COMMANDS ; CLR = 040000 ;CLEAR CONTROLLER RWD = 000400 ;REWIND WFM = 000004 ;WRITE FILE MARK &Rr  2,^ |H >W s -,0, wI,1 H7D W ,  .31 VH7 y,W  E7pwj,  ҕ  ,6wN1 deH7,Z RC  " FE@ĝA,~!7 x|'  5bD*zנ Õנ Õ%נ *נ ÕÕ@w 7D*0 U45.e7&U@*w w  , el* ww E@E55w*.ŀ Е7 h7 *R\ H7 NW  H:*v7 2w 3v7f Н*`Н^Е 7w x*l  x   (40 ;WORD COUNT STAT = 167542 ;STATUS COM = 167544 ;COMMAND MA = 167546 ;MEMORY ADDRESS ; ; MAG TAPE STATUS REGISTER BITS ; ERR = 004000 ;ERROR RDY = 000200 ;READY FPT = 000001 ;FILE PROTECT (1 = NO WRITE RING) ; ; MAG TAPE COMMAND REGISTER COMMANDS ; CLR = 040000 ;CLEAR CONTROLLER RWD = 000400 ;REWIND WFM )WRT = 000002 ;WRITE A RECORD BCKR = 000200 ;BACKSPACE A RECORD WEXG = 000010 ;WRITE EXTENDED GAP WITH RECORD ; ; TIMER VALUES ; ACKTIM = 180. ;TIMEOUT FOR ACK IN 1/60 SECOND TICS EOTTIM = 180. ;TIMEOUT FOR EOT IN 1/60 SECOND TICS MINUTE = 3600. ;TIMEOUT EACH MINUTE IN 1/60 SEC TICS ; ; HUB ERROR MESSAGE CODES ; ERR00 = "00 ;LOST RECEIVE CARRIER *Eh7wE,Z7 EN7x ;,w7 w01hw ,נ FנZ[ CsÌČh,p   <0 ,2* .  5 ,VwE  5b?,zנ Õנ Õ%נ ,נ ÕÕ@w 7?,0 U45.e7&U@$w  w *E703X. 7U@w *w E702.. 7U@**w w 8 7w *Nȝ7ȝ777*rȝ ȝԕ B *CD CDע פ0 * E&f&M ~,= 000004 ;WRITE FILE MARK WRT = 000002 ;WRITE A RECORD BCKR = 000200 ;BACKSPACE A RECORD WEXG = 000010 ;WRITE EXTENDED GAP WITH RECORD ; ; TIMER VALUES ; ACKTIM = 180. ;TIMEOUT FOR ACK IN 1/60 SECOND TICS EOTTIM = 180. ;TIMEOUT FOR EOT IN 1/60 SECOND TICS MINUTE = 3600. ;TIMEOUT EACH MINUTE IN 1/60 SEC TICS ; ; HUB ERROR MESSAGE CODES ; ERR00 = -ERR01 = "01 ;NO ACK RECEIVED AFTER 8 TRYS ERR02 = "02 ;TIMEOUT WHILE WAITING FOR ACK/NAK ERR03 = "03 ;TIMEOUT WHILE WAITING FOR EOT ; ; MESSAGE ACTION CODES ; AUTOTR = 030061 ;ASCII 01 AUDTRL = 030062 ;ASCII 02 AUDERR = 030066 ;ASCII 06 MANUAL = 030064 ;ASCII 04 CONTIN = 030067 ;ASCII 07 ; ; SPECIAL CHAR IN MSG FOR TERMINAL DEVICE SELE. ,w w  , el, ww E@E55r,.ŀ Е7 h7 ,R\ H7 NW  H5,v7 2w 3v7f Н,`Н^Е 7w s,l  x   $w  w ,E703X. 7U@w ,w E702.. 7U@,/& :(t  h,"7ACME OIL COMPANY , AJAX OF CALIFORNIA ALPHA OIL CORP,ORATION63321 SO. SEVENTH 12255 FO0 "00 ;LOST RECEIVE CARRIER ERR01 = "01 ;NO ACK RECEIVED AFTER 8 TRYS ERR02 = "02 ;TIMEOUT WHILE WAITING FOR ACK/NAK ERR03 = "03 ;TIMEOUT WHILE WAITING FOR EOT ; ; MESSAGE ACTION CODES ; AUTOTR = 030061 ;ASCII 01 AUDTRL = 030062 ;ASCII 02 AUDERR = 030066 ;ASCII 06 MANUAL = 030064 ;ASCII 04 CONTIN = 030067 ;ASCII 07 ; ; SP1CTION ; R035 = 062 ;ASCII CODE FOR R0-35 SELECTION ASR33 = 061 ;ASCII CODE FOR ASR-33 SELECTION ; ; EQUATE PARAMETERS FOR CP DATA FORMAT ; TAB = 11 FORM = 14 CARNO = 25. ;CARRIER NUMBER CARSZ = 4 ;CARRIER SIZE CUST = 35. ;CUSTOMER NO. CUSTSZ = 10. ;NO. CHAR. IN CUSTOMER NUMBER DRNO = 51. ;DRIVER NO. DRSZ = 2*w w 8 7w ,Nȝ7ȝ777,rȝ ȝԕ B ,CD CDע פ0 , E&f&M  y3,URTH STREET P.O. BOX 1234 SA,N DIEGO, CALIF. LOS ANGELES, CALIF,4 SANTA FE SPRINGS, CAL01020304REGU,XLAR PREMIUM DIESEL NO. 2 FUEL,| 0000 , COLL r, X+,XXX CONSOLIDATED CARRIERS X2, XX 00000 MMDDYYHHMM GE,0&4ECIAL CHAR IN MSG FOR TERMINAL DEVICE SELECTION ; R035 = 062 ;ASCII CODE FOR R0-35 SELECTION ASR33 = 061 ;ASCII CODE FOR ASR-33 SELECTION ; ; EQUATE PARAMETERS FOR CP DATA FORMAT ; TAB = 11 FORM = 14 CARNO = 19. ;CARRIER NUMBER CARSZ = 4 ;CARRIER SIZE CUST = 35. ;CUSTOMER NO. CUSTSZ = 7. ;NO. CHAR. IN CUSTOMER NUMBER DRNO = 51. 53 ;NO. CHAR. FLOW1 = 66. ;FLOW METER PRODUCT 1 FLOW2 = 73. ;FLOW METER PRODUCT 2 FLOW3 = 80. ;FLOW METER PRODUCT 3 FLOW4 = 87. ;FLOW METER PRODUCT 4 FLOWSZ = 6 ;NO. CHAR. IN FLOW METER DATA T1 = 136. ;TEMP OF PRODUCT 1 T2 = 140. ;TEMP OF PRODUCT 2 T3 = 144. ;TEMP OF PRODUCT 3 T4 = 148. ;TEMP 7ES TERMINAL 0000 y,T 00000049 XX g,x XXXXXX XXX XX , XXXXXX XX,X XX , XXXXXX XXX XX *, XXXXXX XXX ;,, P.O. BOX B,P608 SAN DIEGO, CALIF ESG @G,tZ{[lP}M]\Nk`KaF ;DRIVER NO. DRSZ = 3 ;NO. CHAR. FLOW1 = 66. ;FLOW METER PRODUCT 1 FLOW2 = 73. ;FLOW METER PRODUCT 2 FLOW3 = 80. ;FLOW METER PRODUCT 3 FLOW4 = 87. ;FLOW METER PRODUCT 4 FLOWSZ = 6 ;NO. CHAR. IN FLOW METER DATA T1 = 136. ;TEMP OF PRODUCT 1 T2 = 140. ;TEMP OF PRODUCT 2 T3 = 144. ;TEMP OF PRODUCTEOF PRODUCT 4 TEMPSZ = 3 ;NO. CHAR. IN TEMP ; ; MISCELLANEOUS SYMBOLS ; STX = 002 ;START OF TEXT ETX = 003 ;END OF TEXT ETB = 027 ;END OF TRANSMISSION BLOCK EOT = 004 ;EOT - LINE TURNAROUND ACK = 006 ;ACKNOWLEDGE NAK = 025 ;NEGATIVE ACKNOWLEDGE NUL = 000 ;NULL CHARACTER FF = 377 ;HEX "FF" H0 :*"7ACME OIL COMPANY * AJAX OF CALIFORNIA ALPHA OIL CORP!*ORATION63321 SO. SEVENTH 12255 FO*URTH STREET P.O. BOX 1234 SA*N DIEGO, CALIF. LOS ANGELES, CALIF*4 SANTA FE SPRINGS, CAL01020304REGU*XLAR PREMIUM DIESEL NO. 2 FUEL*| 0000 * COLL w* Gz^L~no|, AUDIT TRM,AIL JUST ENTERED IS ERRONEOUS! MANU#AL ENTRY ACCEPTED!  ,6 IS END OF DAY REPORT TO BE Er, NTERED ON PUNCHED TAPE?  TRANDSMISSION ERROR ! X,X" ERRONEOUS ACTION CODE RECEI,|VED! ERROR IN AUDIT TRAIL!$ DA: """"""" """""""""""""""""""""""""""""""""""""""""""""""""""""DDDDDD@DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD@ADD)B C]hWy]bW 2]OW ']hZz]bZ+ g]OZ6 h]h\k|]b\l ]O\ $D̈a ͋,L w:B8 ` 5 &  E >w   f5eU@  [*   & * G &( 8L'4e Q$ BBB"   U@ U e  "U%Gef. U U Bb 0 * B.&0 M &0 & I INITL = 111111 ;CONSOLE SWITCH PATTERN TO BYPASS ;DEFINITION OF EOD REPORT .PAGE ; ; PROGRAM DATA ; ; .IFZ DOS . = 400 .ENDC . = .+200 STACK = . ;SYSTEM STACK AR(A .IFNZ DEBUG RCSR: .WORD 0 ;DC11 RECEIVE AND RBUF: .WORD 0 ; TRANSMIT BUFFERS TCSR: .WORD 0 ; FOR DEMO CHECKOUT TBUF: J 3 T4 = 148. ;TEMP OF PRODUCT 4 TEMPSZ = 3 ;NO. CHAR. IN TEMP ; ; MISCELLANEOUS SYMBOLS ; STX = 002 ;START OF TEXT ETX = 003 ;END OF TEXT ETB = 027 ;END OF TRANSMISSION BLOCK EOT = 004 ;EOT - LINE TURNAROUND ACK = 006 ;ACKNOWLEDGE NAK = 025 ;NEGATIVE ACKNOWLEDGE NUL = 000 ;NULL CHARACTER K TI: J  8 8 F [  \ \   #    % MMDDYY HHMM   ,  , A" 0246@,$ > t4 j$ @ d,H BL X0*XXX CONSOLIDATED CARRIERS X7* XX 00000 MMDDYYHHMM GE*0&ES TERMINAL 0000 ~*T 00000049 XX l*x XXXXXX XXX XX * XXXXXX XX*X XX * XXXXXX XXX XX /* XXXXXX XXX @*, M.WORD 0 ; WITHOUT DC11 H/W AND CP CLRBCC: .WORD 0 ;CLEAR BCC BCCOUT: .WORD 0 ;BCC OUTPUT REGISTER BCCMSB: .WORD 123 ;MSB OF RESULTING BCC BCCLSB: .WORD 345 ;LSB OF RESULTING BCC .ENDC ; ; CUSTOMER AND PRODUCT TABLES ; ALPHA1: .WORD NAME1,NAME2,NAME3 ;POINTER TO CUSTOMER NAME ALPHA2: .WORD ADDR1,ADDR2,ADDR3 ;POINTER TO CUSTOMER ADDRESS ALPHA3: .WORD CITY1,CITY2,CITY3 ;POINFF = 377 ;HEX "FF" INITL = 111111 ;CONSOLE SWITCH PATTERN TO BYPASS ;DEFINITION OF EOD REPORT .PAGE ; ; PROGRAM DATA ; ; .IFZ DOS . = 400 .ENDC . = .+200 STACK = . ;SYSTEM STACK AR(A .IFNZ DEBUG RCSR: .WORD 0 ;DC11 RECEIVE AND RBUF: .WORD 0 ; TRANSMIT BUFFERS TCSR: .WORD 0 O ,l %IA 7 ,, #J׭Y M,  8   D 7  ,     , <7U@X7U@7 7U, w    x@Y,D Hbw ĝx ,h 5@&[ĝ5 U,pB5@5\>P P.O. BOX G*P608 SAN DIEGO, CALIF ESG @L*tZ{[lP}M]\Nk`Kaz^L~no|* AUDIT TRR*AIL JUST ENTERED IS ERRONEOUS! MANU!AL ENTRY ACCEPTED! *6 IS END OF DAY REPORT TO BE Ew* NTERED ON PUNCHED TAPE?  TRANDSMISSION ERROR !*X" ERRONEOUS ACTION CODE RECEI*|VED! ERROR IN AUDIT TRAIL!QNTER TO CUSTOMER CITY NAME1: .ASCII 'ACME OIL COMPANY ' NAME2: .ASCII 'AJAX OF CALIFORNIA ' NAME3: .ASCII 'ALPHA OIL CORPORATION' ADDR1: .ASCII '63321 SO. SEVENTH ' ADDR2: .ASCII '12255 FOURTH STREET ' ADDR3: .ASCII 'P.O. BOX 1234 ' CITY1: .ASCII 'SAN DIEGO, CALIF. ' CITY2: .ASCII 'LOS ANGELES, CALIF ' CITY3: .ASCII 'SANTA FE SPRINGS, CAL' .EVEN KODE1: .ASCII '01' KODE2: .ASCII '02' KODE3: .ASCII '03' KODE4: .ASCII '04' PRNAM1: .AR ; FOR DEMO CHECKOUT TBUF: .WORD 0 ; WITHOUT DC11 H/W AND CP CLRBCC: .WORD 0 ;CLEAR BCC BCCOUT: .WORD 0 ;BCC OUTPUT REGISTER BCCMSB: .WORD 123 ;MSB OF RESULTING BCC BCCLSB: .WORD 345 ;LSB OF RESULTING BCC .ENDC ; ; CUSTOMER AND PRODUCT TABLES ; ALPHA1: .WORD NAME1,NAME2,NAME3 ;POINTER TO CUSTOMER NAME ALPHA2: .WORD ADDR1,ADDR2,ADDR3 ;POINTER TO CUSTOMER ADDRESS ALS,&7#7 7DU@<00E@.E",(78 Uĝ7 W,5 5ĝ7,   0I ,@ĝ7wyĝ,d7iE@w ,T S',\ D,$w\ ,wĝ"wlE@7 H,T" DA:  TI: J 8 F \ # MMDDYY HHMM *  * A" 0246@*$ > t4 j$ @ i*H B *l %IA 7 ,* #J׭Y R*  8   D 7  USCII 'REGULAR ' PRNAM2: .ASCII 'PREMIUM ' PRNAM3: .ASCII 'LOW LEAD ' PRNAM4: .ASCII 'DIESEL ' PRSZ = 10. .PAGE ;* ;* D U M M Y I N V O I C E ;* INVOICE = . .BYTE CR .ASCII '000' SERNO1: .ASCII '0' .BYTE CR,LF,TAB,TAB,TAB .ASCII ' ' NAME: .ASCII ' COLL' .BYTE CR,LF,TAB,TAB,TAB .ASCII ' ' ADDRESS:.ASCII ' ' .BYTE CR,LF,VPHA3: .WORD CITY1,CITY2,CITY3 ;POINTER TO CUSTOMER CITY NAME1: .ASCII 'ACME OIL COMPANY ' NAME2: .ASCII 'AJAX OF CALIFORNIA ' NAME3: .ASCII 'ALPHA OIL CORPORATION' ADDR1: .ASCII '63321 SO. SEVENTH ' ADDR2: .ASCII '12255 FOURTH STREET ' ADDR3: .ASCII 'P.O. BOX 1234 ' CITY1: .ASCII 'SAN DIEGO, CALIF. ' CITY2: .ASCII 'LOS ANGELES, CALIF ' CITY3: .ASCII 'SANTA FE SPRINGS, CAL' .EVEN KODE1: .ASCII '01' KODE2: .ASCII '02' KODE3: .ASCW UP!10!20!60 !40 i,X 9wwww>c.6,< \. P. D.,` 8򷊯 E1W , wwww ,] } m N4,.w  # )w  6,w LcTg  w  ,6w N^  w ,8 ^w bPX*     * <7U@X7U@7 7Z* w    x@^*D Hbw ĝx*h 5@&[ĝ5 U*pB5@5\C*&7#7 7DU@<00E@.E'*(78 Uĝ7 \*5 5ĝ7*   0I !YTAB,TAB,TAB .ASCII ' ' CITY: .ASCII ' ' .BYTE CR,LF,LF,LF,LF CARRIER:.ASCII 'XXXX CONSOLIDATED CARRIERS ' DRIVER: .ASCII 'XXX' .BYTE TAB,TAB .ASCII ' 0000' NUMBER: .ASCII '0' .BYTE CR,LF,LF DATE: .ASCII 'MMDDYY' TIME: .ASCII 'HHMM GE&ES TERMINAL' .BYTE TAB .ASCII ' 000' SERNO2: .ASCII '0' .BYTE CR,LF,LF .ASCII ' ' CUSTNO: .ASCII ' ZII '03' KODE4: .ASCII '04' PRNAM1: .ASCII 'REGULAR ' PRNAM2: .ASCII 'PREMIUM ' PRNAM3: .ASCII 'DIESEL ' PRNAM4: .ASCII 'NO. 2 FUEL' PRSZ = 10. .PAGE ;* ;* D U M M Y I N V O I C E ;* INVOICE = . .BYTE CR .ASCII '000' SERNO1: .ASCII '0' .BYTE CR,LF,TAB,TAB,TAB .ASCII ' ' NAME: .ASCII ' COLL' .BYTE CR,LF,TAB,TAB,TAB .ASCII ' ' ADDRESS:.ASCII ' [h  A,\w Z w :Rr  ,2 |H DW sI, &"\ &{,lw1 H7 W , [ .61 \,H7 W  E7,4  w [  ҕ,X  wH1 [,|8eH7n RC \*@ĝ7wyĝ*d7iE@w ,T S,*\ D*$w\ *wĝ"wlE@7 H!* UP!10!20!60 !40 n*X 9wwww>c.;*< \. P. D.*` 8򷊯 E1W * wwww *] 00000049' .BYTE CR,LF,LF,LF,LF CODE1: .ASCII 'XX ' PROD1: .ASCII ' ' VOL1: .ASCII 'XXXXXX ' TEMP1: .ASCII 'XXX' .BYTE CR,LF CODE2: .ASCII 'XX ' PROD2: .ASCII ' ' VOL2: .ASCII 'XXXXXX ' TEMP2: .ASCII 'XXX' .BYTE CR,LF CODE3: .ASCII 'XX ' PROD3: .ASCII ' ' VOL3: .ASCII 'XXXXXX ' TEMP3: .ASCII 'XXX' .BYTE CR,LF CODE4:^ ' .BYTE CR,LF,TAB,TAB,TAB .ASCII ' ' CITY: .ASCII ' ' .BYTE CR,LF,LF,LF,LF CARRIER:.ASCII 'XXXX CONSOLIDATED CARRIERS ' DRIVER: .ASCII 'XXX' .BYTE TAB,TAB .ASCII ' 0000' NUMBER: .ASCII '0' .BYTE CR,LF,LF DATE: .ASCII 'MMDDYY' TIME: .ASCII 'HHMM GE&ES TERMINAL' .BYTE TAB .ASCII ' 000' SERNO2: .ASCII '0' .BYTE CR,LF,LF _ " ,6E@VĝT!7 x*_,E67 wE(7E7}, w7 4w, 01@wm נ FנZ[ ,0CsÌČp d ,T m   . -,x 5wE 2, 5bנ Õנ ,Õ%נ נ ÕÕ@f`] } m N4*.w  # )w  ;*w LcTg  w  *6w N^  w *8 ^w bPh  F*\w Z w :Rr  *2 |H DW sN* &"\ &*lw1 H7 W * [ .61 \ *Ha .ASCII 'XX ' PROD4: .ASCII ' ' VOL4: .ASCII 'XXXXXX ' TEMP4: .ASCII 'XXX' .BYTE CR,LF,LF,LF,LF,LF,LF,LF,LF .BYTE LF,LF,LF,LF,LF,LF,LF,LF,LF .BYTE LF,LF,LF,LF,LF,LF,LF,LF,LF .BYTE LF,LF,LF,LF,LF,LF,LF,LF,LF .ASCII ' P.O. BOX 608' .BYTE CR,LF .ASCII 'SAN DIEGO, CALIF ESG' .BYTE FORM INVEND = . ; ; ASCII TO EBCDIC CONVERSION TABLE ; EBCDIC = b .ASCII ' ' CUSTNO: .ASCII ' 00000049' .BYTE CR,LF,LF,LF,LF CODE1: .ASCII 'XX ' PROD1: .ASCII ' ' VOL1: .ASCII 'XXXXXX ' TEMP1: .ASCII 'XXX' .BYTE CR,LF CODE2: .ASCII 'XX ' PROD2: .ASCII ' ' VOL2: .ASCII 'XXXXXX ' TEMP2: .ASCII 'XXX' .BYTE CR,LF CODE3: .ASCII 'XX ' PROD3: .ASCII ' ' VOL3: .ASCII 'XXXXXX ' TEMP3: .ASCc,w 7Հ0 U5&,e7U@w w  ,,, elww E@Eq,P55ŀb Е7 _,t h7x \ H7j NW ,\ H7N 2W D,74 Н.Н,Еb 7~,w 8  D   $,w  w 03:w 02.Et,(d7 W  E7*4  w [  ҕ*X  wH1 `*|8eH7n RC  " *6E@VĝT!7 x*d*E67 wE(7E7* w7 4w* 01@wm נ FנZ[ *0CsÌČp d *T m   . 2*x 5e . .BYTE 100,132,177,173,133,154,120,175,115,135 .BYTE 134,116,153,140,113,141,360,361,362,363 .BYTE 364,365,366,367,370,371,172,136,114,176 .BYTE 156,157,174,301,302,303,304,305,306,307 .BYTE 310,311,321,322,323,324,325,326,327,330 .BYTE 331,342,343,344,345,346,347,350,351 .EVEN ; ; DEVICE CODES FOR IOX USAGE ; LSR: .WORD 3 LSP: .WORD 4 ; ; MESSAGES TO BE OUTPUT TO TERMINAL ; TMSG00fII 'XXX' .BYTE CR,LF CODE4: .ASCII 'XX ' PROD4: .ASCII ' ' VOL4: .ASCII 'XXXXXX ' TEMP4: .ASCII 'XXX' .BYTE CR,LF,LF,LF,LF,LF,LF,LF,LF .BYTE LF,LF,LF,LF,LF,LF,LF,LF,LF .BYTE LF,LF,LF,LF,LF,LF,LF,LF,LF .BYTE LF,LF,LF,LF,LF,LF,LF,LF,LF .ASCII ' P.O. BOX 608' .BYTE CR,LF .ASCII 'SAN DIEGO, CALIF ESG' .BYTE FORM INVEND = . ; ; ASCII TOg78 7U@w w ,L 9w ȕ05ȕG,p0329ȕ0 0d,ȕ0ԕ B CD ,CDע פ0 E& f&M hwE 7* 5bנ Õנ *Õ%נ נ ÕÕ@k*w 7Հ0 U5+*e7U@w w  *,, elww E@Ev*P55ŀb Е7 d*t h7x \ H7j NW *\ H7N 2W D*74 Н.Н,Еb 7~*w i = . .BYTE CR,LF .ASCII /AUDIT TRAIL JUST ENTERED IS ERRONEOUS!/ TMSG01 = . .BYTE CR,LF .ASCII /MANUAL ENTRY ACCEPTED!/ TMSG02 = . ; ; HUB TELETYPE MESSAGES ; .EVEN MSG00: .WORD 0 .BYTE 0 .BYTE 0 .WORD 54. .BYTE CR,LF .ASCII 'IS END OF DAY REPORT TO BE ENTERED ON PUNCHED TAPE? ' .EVEN MSG01: .WORD 0 .BYTE 0 .BYTE 0 j EBCDIC CONVERSION TABLE ; EBCDIC = . .BYTE 100,132,177,173,133,154,120,175,115,135 .BYTE 134,116,153,140,113,141,360,361,362,363 .BYTE 364,365,366,367,370,371,172,136,114,176 .BYTE 156,157,174,301,302,303,304,305,306,307 .BYTE 310,311,321,322,323,324,325,326,327,330 .BYTE 331,342,343,344,345,346,347,350,351 .EVEN ; ; DEVICE CODES FOR IOX USAGE ; LSR: .WORD 3 LSP: .WORD 4 ; ; MESS8  D   $*w  w 03:w 02.Ey*(78 7U@w w *L 9w ȕ05ȕL*p0329ȕ0 0i*ȕ0ԕ B CD !*CDע פ0 E&f&M m .WORD 25. .BYTE CR,LF .ASCII /TRANSMISSION ERROR / MSG01F: .ASCII / !/ .EVEN MSG02: .WORD 0 .BYTE 0 .BYTE 0 .WORD 36. .BYTE CR,LF .ASCII /ERRONEOUS ACTION CODE RECEIVED!/ .BYTE CR,LF,LF .EVEN MSG03: .WORD 0 .BYTE 0 .BYTE 0 .WORD 26. .BYTE CR,LF .ASCII /ERROR IN AUDIT TRAIL!/ .BYTE CR,LF,LF MSG04: nAGES TO BE OUTPUT TO TERMINAL ; TMSG00 = . .BYTE CR,LF .ASCII /AUDIT TRAIL JUST ENTERED IS ERRONEOUS!/ TMSG01 = . .BYTE CR,LF .ASCII /MANUAL ENTRY ACCEPTED!/ TMSG02 = . ; ; HUB TELETYPE MESSAGES ; .EVEN CRLFLF: .WORD 0 .BYTE 0,0 .WORD 3 .BYTE CR,LF,LF .EVEN MSG00: .WORD 0 .BYTE 0 .BYTE 0 .WORD 54. .BYTE CR,LF o; UPDATE DEMO.P16 5.19.72 ; UPDATE DEMO.P15 5.17.72 ; UPDATE DEMO.P14 5.14.72 ; UPDATE DEMO.P13 5.12.72 ; UPDATE DEMO.P12 5.7.72 ; UPDATE DEMO.P11 5.1.72 ; UPDATE DEMO.P10 4.27.72 ; UPDATE DEMO.P09 04.26.72 ; UPDATE DEMO.P08 04.20.72 ; UPDATE DEMO.P07 04.19.72 ; UPDATE DEMO.P06 04.17.72 ; UPDATE DEMO.P05 04.13.72 ELITE HUBp& :(t  h,"7ACME OIL COMPANY , AJAX OF CALIFORNIA ALPHA OIL CORP,ORATION63321 SO. SEVENTH 12255 FOq.WORD 0 .BYTE 0,0 .WORD 6 .BYTE CR,LF .ASCII /DA: / MSG05: .WORD 0 .BYTE 0,0 .WORD 6 .BYTE CR,LF .ASCII /TI: / .EVEN ; ; HUB TELETYPE BUFFERS ; TTIBUF: .WORD 0 ;MAX NO. CHARS TO INPUT .BYTE 0 ;MODE - FORMATED ASCII .BYTE 0 ;STATUS .WORD 0 ;NO. OF CHARS INPUT . = .+600. ;Dr .ASCII 'IS END OF DAY REPORT TO BE ENTERED ON PUNCHED TAPE? ' .EVEN MSG01: .WORD 0 .BYTE 0 .BYTE 0 .WORD 25. .BYTE CR,LF .ASCII /TRANSMISSION ERROR / MSG01F: .ASCII / !/ .EVEN MSG02: .WORD 0 .BYTE 0 .BYTE 0 .WORD 34. .BYTE CR,LF,LF .ASCII /ERRONEOUS ACTION CODE RECEIVED!/ .EVEN MSG03: .WORD 0 .BYTE 0 .BYTE 0 s DEMO ; UPDATE DEMO.P04 04.13.72 ELITE HUB DEMO ; UPDATE DEMO.P03 04.13.72 ELITE HUB DEMO ; UPDATE DEMP.P02 04.12.72 ELITE ; ; LODT DEMO ; DEBUG = 0 ;0 = NORMAL PROGRAM OPERATION WITH DC11 ;1 = DEBUG CHECKOUT WITH SIMULATED DC11 DOS = 0 ;0 = RUN ON STAND ALONE SYSTEM ;1 = RUN ON DOS SYSTEM .IFNZ DOS .IFNZ t,URTH STREET P.O. BOX 1234 SA,N DIEGO, CALIF. LOS ANGELES, CALIF,4 SANTA FE SPRINGS, CAL01020304REGU,XLAR PREMIUM DIESEL NO. 2 FUEL,| 0000 , COLL r, X+,XXX CONSOLIDATED CARRIERS X2, XX 00000 MMDDYYHHMM GE,0&uATA TTOBUF: .WORD 0 ;UNUSED .BYTE 0 ;MODE - FORMATTED ASCII .BYTE 0 ;STATUS .WORD 0 ;NO. OF CHARS TO BE OUTPUT . = .+600. ; ; TIMERS ; TIMER = . ACKTMR: .WORD 0 ;ACK TIMER .WORD ACKTO EOTTMR: .WORD 0 ;EOT TIMER .WORD EOTTO TIMDAY: .WORD 0 ;TIME OF DAY TIMER .WORD UPTIME TIMEND = . ; v .WORD 24. .BYTE CR,LF,LF .ASCII /ERROR IN AUDIT TRAIL!/ .EVEN MSG04: .WORD 0 .BYTE 0,0 .WORD 6 .BYTE CR,LF .ASCII /DA: / .EVEN MSG05: .WORD 0 .BYTE 0,0 .WORD 6 .BYTE CR,LF .ASCII /TI: / .EVEN ; ; HUB TELETYPE BUFFERS ; TTIBUF: .WORD 586. ;MAX NO. CHARS TO INPUT .BYTE 0 ;MODE - FORMATED ASCII w DEBUG .CSECT .ENDC .IFZ DEBUG .ASECT .ENDC .ENDC .IFZ DOS .ASECT .ENDC ; REGISTER DEFINITIONS ; ; R0 = 0% R1 = 1% R2 = 2% R3 = 3% R4 = 4% R5 = 5% SP = 6% PC = 7% PS = 177776 LKS = 177546 ;LINE FREQ. CLOCK STATUS REG. BR4 = 200 ;HARDWARE PRIORITY LEVELxES TERMINAL 0000 y,T 00000049 XX g,x XXXXXX XXX XX , XXXXXX XX,X XX , XXXXXX XXX XX *, XXXXXX XXX ;,, P.O. BOX B,P608 SAN DIEGO, CALIF ESG @G,tZ{[lP}M]\Nk`Kay ; HUB/TERMINAL INPUT/OUTPUT MESSAGE BUFFERS ; RCVBUF = . ;RECEIVE BUFFER .WORD 273. ;MAXIMUM NUMBER OF CHARACTERS .BYTE 0 ;UNUSED .BYTE 0 ;STATUS .WORD 0 ;NO. OF DATA CHARACTERS RECEIVED . = .+273. .EVEN ; TRNBUF = . ;TRANSMIT BUFFER .WORD 0 ;NO. OF DATA CHARACTERS TO BE TRANSMITTED .BYTE 0 z .BYTE 0 ;STATUS .WORD 0 ;NO. OF CHARS INPUT . = .+586. ;DATA TTOBUF: .WORD 0 ;UNUSED .BYTE 0 ;MODE - FORMATTED ASCII .BYTE 0 ;STATUS .WORD 0 ;NO. OF CHARS TO BE OUTPUT . = .+300. ; ; TIMERS ; TIMER = . ACKTMR: .WORD 0 ;ACK TIMER .WORD ACKTO EOTTMR: .WORD 0 ;EOT{S OF DEVICES BR5 = 240 BR6 = 300 .IFZ DEBUG RCSR = 174000 ;DC11 RECEIVER STATUS REGISTER TCSR = 174004 ;DC11 TRANSMITTER STATUS REGISTER RBUF = 174002 ;DC11 RECEIVER BUFFER TBUF = 174006 ;DC11 TRANSMISSION BUFFER .ENDC RVECTR = 300 ;DC11 RECEIVER INTERRUPT VECTOR TVECTR = 304 ;DC11 TRASMISSION INTERRUPT VECTOR CVECTR = 100 |z^L~no|, AUDIT TRM,AIL JUST ENTERED IS ERRONEOUS! MANU#AL ENTRY ACCEPTED!  ,6 IS END OF DAY REPORT TO BE Er, NTERED ON PUNCHED TAPE?  TRANDSMISSION ERROR ! X,X" ERRONEOUS ACTION CODE RECEI,|VED! ERROR IN AUDIT TRAIL!$ DA: } ;UNUSED .BYTE 0 ;STATUS .WORD 0 ;RESERVED FOR USE BY TRNINT ROUTINE . = .+515. ; ; JULIAN DATE FROM TERMINAL SAVED HERE ; JULDAY = . ;JULIAN DATE FROM LAST MSG RECEIVED . = .+3 JULEND = . ; ; DATE AND TIME AT HUB ; DABUF: .WORD 8. .BYTE 0,0 .WORD 0 DATEAS: .ASCII /DDMMYY / TIBUF: .WORD 6 .BYTE 0,0 .WORD ~ TIMER .WORD EOTTO TIMDAY: .WORD 0 ;TIME OF DAY TIMER .WORD UPTIME TIMEND = . ; ; HUB/TERMINAL INPUT/OUTPUT MESSAGE BUFFERS ; RCVBUF = . ;RECEIVE BUFFER .WORD 273. ;MAXIMUM NUMBER OF CHARACTERS .BYTE 0 ;UNUSED .BYTE 0 ;STATUS .WORD 0 ;NO. OF DATA CHARACTERS RECEIVED . = .+273. .EVEN ; TRNBUF =  ;LINE FREQUENCY CLOCK INTERRUPT VECTOR .IFZ DEBUG CLRBCC = 174770 ;CLEAR BCC BCCOUT = 174772 ;BCC OUTPUT REGISTER BCCMSB = 174774 ;MSB OF RESULTING BCC BCCLSB = 174776 ;LSB OF RESULTING BCC .ENDC SWITCH = 177570 ;CONSOLE SWITCH ADDRESS ; ; SYMBOLS REQUIRED FOR IOX CALLS ; KBDSLT = 0 ;TTY KEYBOARD SLOT TTYSLT = 1 ;TTY TELEPRINTER SLOT LSRS TI: J  8 8 N6Br _  ` `       % MMDDYY HHMM }  ,  , A" 0246@,( : 0 z& p fN,L V4@  0 TIMEAS: .ASCII /HHMM / ; ; PROGRAM VARIABLES ; MODE: .BYTE 0 ;RECEIVE MODE ; WHERE 0 = EXPECTING RING ; 1 = EXPECT CARRIER TRANSITION ; 2 = EXPECT STX ; 3 = EXPECT DATA ; 4 = EXPECT BCC(MSB) ; 5 = EXPECT BCC(LSB) . ;TRANSMIT BUFFER .WORD 0 ;NO. OF DATA CHARACTERS TO BE TRANSMITTED .BYTE 0 ;UNUSED .BYTE 0 ;STATUS .WORD 0 ;RESERVED FOR USE BY TRNINT ROUTINE . = .+600. ; ; JULIAN DATE FROM TERMINAL SAVED HERE ; JULDAY = . ;JULIAN DATE FROM LAST MSG RECEIVED . = .+3 JULEND = . ; ; DATE AND TIME AT HUB ; .EVEN LT = 2 ;LOW-SPEED PT READER SLOT LSPSLT = 3 ;LOW-SPEED PUNCH SLOT RESET = 2 ;RESET COMMAND RESTRT = 3 ;RESTART COMMAND INIT = 1 ;INIT COMMAND READ = 11 ;READ COMMAND WRITE = 12 ;WRITE COMMAND EOF = 040 ;EOF BIT IN STATUS BYTE CR = 15 ;ASCII FOR CR LF = 12 ;ASCII FOR LF ; B,p  tr%2, IA 7  , J׭Y  8 o,   H 7     9,  (7U@,$@7U@7 7  8 ,H7 w  tx,l xr \vw ĝ,J 5@#9ĝZ5 UM ; 6 = EXPECT EOT ; 7 = EXPECT ACK/NAK AFTER ; SENDING ; 8 = SAME ; 9 = SAME ; 10 = SAME RCVERR: .BYTE 0 ;RECEIVE ERROR COUNT REPEAT: .BYTE 0 ;NO. OF TRYS TO TRANSMIT TO TERMINAL .EVEN CURBUF: .WORD 0 ;CURRENT BUFDABUF: .WORD 8. .BYTE 0,0 .WORD 0 DATEAS: .ASCII /MMDDYY / TIBUF: .WORD 6 .BYTE 0,0 .WORD 0 TIMEAS: .ASCII /HHMM / ; ; PROGRAM VARIABLES ; MODE: .BYTE 0 ;RECEIVE MODE ; WHERE 0 = EXPECTING RING ; 1 = EXPECT CARRIER TRANSITION ; 2 = EXPECT STX ; 3 = EXPECT D ; DC11 RECEIVE CONTROL STATUS REGISTER (RCSR) BITS ; ERROR = 100000 CARTRN = 040000 RING = 020000 OVERUN = 010000 LENGTH = 000000 ;8 BITS/CHAR DONE = 000200 ENABLE = 000100 PARITY = 000040 RSPEED = 000020 ;DC11-AB 1200 BAUD DETECT = 000004 DTRDY = 000001 ; ; DC11 TRANSMIT CONTROL STATUS REGISTER (TCSR) BITS ; STOPCD = 000400 READY = 000200 TSPEED = ,J 5@56  77 /,r7$U@00hE@E7D,ĝ7 5 , 5ĝ7  p,D 0N ĝ7,hpwiĝ7YE@vw ,DX C,` Dzw,` ywĝ,FER ADDRESS INTCNT: .WORD 0 ;RECEIVE INTERRUPT COUNT (FOR CHECKOUT) .PAGE ; ; INITIALIZATION PROGRAM AND IDLE LOOP ; DEMO = . MOVB #BR4,PS ;INHIBIT DC11 INTERRUPTS DURING INIT MOV #15604,@#4 ;SET UP IOX VECTORS MOV #340,@#6 MOV #15256,@#20 MOV #340,@#22 CLR @#40 MOV #040404,@#42 MOV #16040,@#60 MOV #BR5,@#62 MOV ATA ; 4 = EXPECT BCC(MSB) ; 5 = EXPECT BCC(LSB) ; 6 = EXPECT EOT ; 7 = EXPECT ACK/NAK AFTER ; SENDING ; 8 = SAME ; 9 = SAME ; 10 = SAME RCVERR: .BYTE 0 ;RECEI 000020 ;DC11-AB 1200 BAUD CLRSND = 000002 REQSND = 000001 ; ; HUB DC11 & TTY MESSAGE BUFFER OFFSETS ; MODEBF = 2 STATUS = 3 COUNT = 4 DATA = 6 HDRSIZ = 17. ;NO. OF BYTES IN HDR OF MSG FROM TERM'L MSGDAT = 23. ;BEGINNING OF MESSAGE DATA (LESS HEADER) ; ; DC11 MSG BUFFER FLAGS ; BUSY = 200 ;BIT 7 OF STATUS BYTE; SET WHEN BUSY ; ; MAG TAPE REGwE@7 4 E@!10!,20!60 !40 X %ww,@ww>c. t. hB,d. \. P򷊛 c,E1W  www,w a  ,q N w  # ),w  "w LcTg ^, w  Jw N^ ,<   #16710,@#64 MOV #BR5,@#66 MOV #CLR,COM ;CLEAR MAG TAPE CONTROLLER JSR PC,TAPRDY ;READY? MOV #RWD,COM ;YES, REWIND TAPE JSR PC,TAPRDY ;READY? MOV #RCVINT,@#RVECTR ;RECEIVE INTERRUPT VECTOR MOV #TRNINT,@#TVECTR ;TRANSMIT INTERRUPT VECTOR MOV #CLKINT,@#CVECTR ;CLOCK INTERRUPT VECTOR .IFNZ DEBUG MOV #RCVINT,@#34 ;CHEVE ERROR COUNT REPEAT: .BYTE 0 ;NO. OF TRYS TO TRANSMIT TO TERMINAL .EVEN CURBUF: .WORD 0 ;CURRENT BUFFER ADDRESS INTCNT: .WORD 0 ;RECEIVE INTERRUPT COUNT (FOR CHECKOUT) .PAGE ; ; INITIALIZATION PROGRAM AND IDLE LOOP ; DEMO = . MOVB #BR4,PS ;INHIBIT DC11 INTERRUPTS DURING INIT MOV #15604,@#4 ;SET UP IOX VECTORS MOV #340,@#6 MOV #15256,@#20 ISTER ADDRESSES ; WC = 167540 ;WORD COUNT STAT = 167542 ;STATUS COM = 167544 ;COMMAND MA = 167546 ;MEMORY ADDRESS ; ; MAG TAPE STATUS REGISTER BITS ; ERR = 004000 ;ERROR RDY = 000200 ;READY FPT = 000001 ;FILE PROTECT (1 = NO WRITE RING) ; ; MAG TAPE COMMAND REGISTER COMMANDS ; CLR = 040000 ;CLEAR CONTROLLER RWD w  rw zPh,`  w r w RR,r  2 |,H VW s $,` &hXw1 ,H7 W  _ ,.61 lH7 W ,8 E7 wC,\ _  ҕ  ,wT1 $eH7CKOUT RECEIVE INT (TRAP) MOV #TRNINT,@#30 ;CHECKOUT TRANSMIT INT (EMT) .ENDC CLR R0 ;LET DC11 INTR ROUNTINES RUN AT ;CPU LEVEL 0 MOV R0,@#RVECTR+2 MOV R0,@#TVECTR+2 .IFNZ DEBUG MOV R0,@#36 MOV R0,@#32 .ENDC MOV #BR6,R0 MOV R0,@#CVECTR+2 MOV #STACK,SP ;SET STACK POINTER IOT MOV #340,@#22 CLR @#40 MOV #040404,@#42 MOV #16040,@#60 MOV #BR5,@#62 MOV #16710,@#64 MOV #BR5,@#66 MOV #CLR,COM ;CLEAR MAG TAPE CONTROLLER JSR PC,TAPRDY ;READY? MOV #RWD,COM ;YES, REWIND TAPE JSR PC,TAPRDY ;READY? MOV #RCVINT,@#RVECTR ;RECEIVE INTERRUPT VECTOR MOV #TRNINT,@#TVECTR ;TRANSMIT INTERR= 000400 ;REWIND WFM = 000004 ;WRITE FILE MARK WRT = 000002 ;WRITE A RECORD BCKR = 000200 ;BACKSPACE A RECORD WEXG = 000010 ;WRITE EXTENDED GAP WITH RECORD ; ; TIMER VALUES ; ACKTIM = 360. ;TIMEOUT FOR ACK IN 1/60 SECOND TICS EOTTIM = 180. ;TIMEOUT FOR EOT IN 1/60 SECOND TICS CARTIM = 120. ;TIMEOUT FOR CARRIER DETECT IN Z d,C  4 &E@Bĝ@!,7 lx>E"7wE=,7E7 },w7 w01,wq נ,4 FנZ[ CsÌČ+,Xp h  q  ,| .  5w,E  5b,נ Õנ Õ%נ { ;RESET IOX .WORD 0 .BYTE RESET,0 IOT ;SET RESTART ADDRESS .WORD DEMO .BYTE RESTRT,0 IOT ;INIT LSR .WORD LSR .BYTE INIT,LSRSLT MOV #LENGTH!RSPEED,RCSR ;SET DC11 RECEIVER CHAR LENGTH ;AND SPEED MOV #STOPCD!TSPEED,TCSR ;SET DC11 TRANSMITTER STOP CODE ;AND SPEED DEM005 UPT VECTOR MOV #CLKINT,@#CVECTR ;CLOCK INTERRUPT VECTOR .IFNZ DEBUG MOV #RCVINT,@#34 ;CHECKOUT RECEIVE INT (TRAP) MOV #TRNINT,@#30 ;CHECKOUT TRANSMIT INT (EMT) .ENDC CLR R0 ;LET DC11 INTR ROUNTINES RUN AT ;CPU LEVEL 0 MOV R0,@#RVECTR+2 MOV R0,@#TVECTR+2 .IFNZ DEBUG MOV R0,@#36 MOV R0,@#32 ;1/60 SECOND TICS MINUTE = 3600. ;TIMEOUT EACH MINUTE IN 1/60 SEC TICS ; ; HUB ERROR MESSAGE CODES ; ERR00 = "00 ;LOST RECEIVE CARRIER ERR01 = "01 ;NO ACK RECEIVED AFTER 8 TRYS ERR02 = "02 ;TIMEOUT WHILE WAITING FOR ACK/NAK ERR03 = "03 ;TIMEOUT WHILE WAITING FOR EOT ERR04 = "04 ;TIMEOUT WHILE WAITING FOR RECEIVE ;CARRIER AFTER,נ ÕÕ@w 7Հ^, 0 U5e7U@w ,0w  , elwJ,Tw E@E5x ,x57 ŀf Е7 ^ q,j7T ^ H7F PW 杧,<6 H7( 2W ,7 ННЕf 7\,w 8  H   $w ,,= . CMP #INITL,SWITCH BEQ DEM048 IOT ;TYPE MSG00 .WORD MSG00 .BYTE WRITE,TTYSLT MOV #589.,TTIBUF ;PUT MAX CHAR TO INPUT IN BUF HDR BICB #002,TTIBUF+MODEBF ;SET INPUT MODE TO FORMATTED ASCII IOT ;GET "Y" OR "N" RESPONSE .WORD TTIBUF .BYTE READ,KBDSLT DEM010 = . TSTB TTIBUF+STATUS ;IS INPUT DONE? BPL DEM0 .ENDC MOV #BR6,R0 MOV R0,@#CVECTR+2 MOV #STACK,SP ;SET STACK POINTER IOT ;RESET IOX .WORD 0 .BYTE RESET,0 IOT ;SET RESTART ADDRESS .WORD DEMO .BYTE RESTRT,0 IOT ;INIT LSR .WORD LSR .BYTE INIT,LSRSLT MOV #LENGTH!RSPEED,RCSR ;SET DC11 RECEIVER CHAR LENGTH TRANSMITTING ; ; MESSAGE ACTION CODES ; AUTOTR = 030061 ;ASCII 01 AUDTRL = 030062 ;ASCII 02 AUDERR = 030066 ;ASCII 06 MANUAL = 030064 ;ASCII 04 CONTIN = 030067 ;ASCII 07 ; ; SPECIAL CHAR IN MSG FOR TERMINAL DEVICE SELECTION ; R035 = 062 ;ASCII CODE FOR R0-35 SELECTION ASR33 = 061 ;ASCII CODE FOR ASR-33 SELECTION ; ; EQUATE PARAMETERS FOR CP w 03 w 04w ,P02E7z7U@w w ,t 9w ȕ05,ȕ0329ȕ0 ,0ȕ0ԕ B CD, CDע פ0 Ev$&f&M 10 BISB #002,TTIBUF+MODEBF ;SET INPUT MODE TO UNFORMATTED ASCII CMPB TTIBUF+DATA,#'Y ;YES, IS IT "Y"? BNE DEM020 ;NO IOT ;READ PUNCHED TAPE .WORD TTIBUF .BYTE READ,LSRSLT BR DEM030 DEM020 = . ;READ KBD IOT .WORD TTIBUF .BYTE READ,KBDSLT DEM030 = . TSTB TTIBUF+STATUS ;IS INPUT DONE? BPL DEM030 ;AND SPEED MOV #STOPCD!TSPEED,TCSR ;SET DC11 TRANSMITTER STOP CODE ;AND SPEED DEM005 = . CMP #INITL,SWITCH BEQ DEM048 IOT ;TYPE MSG00 .WORD MSG00 .BYTE WRITE,TTYSLT CLR TTIBUF+MODEBF ;SET INPUT MODE TO FORMATTED ASCII IOT ;GET "Y" OR "N" RESPONSE .WORD TTIBUF .BYTE READ,KBDSLT DEM010 = DATA FORMAT ; TAB = 11 FORM = 14 CARNO = 19. ;CARRIER NUMBER CARSZ = 4 ;CARRIER SIZE CUST = 35. ;CUSTOMER NO. CUSTSZ = 7. ;NO. CHAR. IN CUSTOMER NUMBER DRNO = 51. ;DRIVER NO. DRSZ = 3 ;NO. CHAR. FLOW1 = 66. ;FLOW METER PRODUCT 1 FLOW2 = 73. ;FLOW METER PRODUCT 2 FLOW3 = 80. ;FLOW ME;NO DEM035 = . MOV #TIMER,R0 ;RESET TIMERS DEM040 = . CLR (R0)+ TST (R0)+ CMP R0,#TIMEND BLT DEM040 BICB #002,TTIBUF+MODEBF ;SET INPUT MODE TO FORMATTED ASCII IOT ;TYPE "DA: " .WORD MSG04 .BYTE WRITE,TTYSLT IOT ;GET 6 CHAR DATE MMDDYY .WORD DABUF .BYTE READ,KBDSLT IOT . TSTB TTIBUF+STATUS ;IS INPUT DONE? BPL DEM010 MOV #000202,TTIBUF+MODEBF ;SET INPUT MODE TO UNFORMATTED ASC MOV #586.,TTIBUF+COUNT ;NO. CHARS TO BYTE COUNT CMPB TTIBUF+DATA,#'Y ;YES, IS IT "Y"? BNE DEM020 ;NO IOT ;READ PUNCHED TAPE .WORD TTIBUF .BYTE READ,LSRSLT BR DEM030 DEM020 = . ;READ KBD IOT .WORD TTIBTER PRODUCT 3 FLOW4 = 87. ;FLOW METER PRODUCT 4 FLOWSZ = 6 ;NO. CHAR. IN FLOW METER DATA T1 = 136. ;TEMP OF PRODUCT 1 T2 = 140. ;TEMP OF PRODUCT 2 T3 = 144. ;TEMP OF PRODUCT 3 T4 = 148. ;TEMP OF PRODUCT 4 TEMPSZ = 3 ;NO. CHAR. IN TEMP ; ; MISCELLANEOUS SYMBOLS ; STX = 002 ;START OF TEXT ETX = 003 0 :*"7ACME OIL COMPANY * AJAX OF CALIFORNIA ALPHA OIL CORP!*ORATION63321 SO. SEVENTH 12255 FO*URTH STREET P.O. BOX 1234 SA*N DIEGO, CALIF. LOS ANGELES, CALIF*4 SANTA FE SPRINGS, CAL01020304REGU*XLAR PREMIUM DIESEL NO. 2 FUEL*| 0000 * COLL w* ;TYPE "TI: " .WORD MSG05 .BYTE WRITE,TTYSLT IOT ;GET 4 CHAR TIME HHMM .WORD TIBUF .BYTE READ,KBDSLT DEM045 = . TSTB TIBUF+STATUS ;IS INPUT DONE? BPL DEM045 ;NO MOV #MINUTE,TIMDAY ;SET TIME OF DAY TIMER DEM048 = . CLRB MODE ;SET RECEIVE MODE TO EXPECT RING BIS #ENABLE,LKS ;ENABLE REAL-TIME CLOCK CLRB RBUF UF .BYTE READ,KBDSLT DEM030 = . TSTB TTIBUF+STATUS ;IS INPUT DONE? BPL DEM030 ;NO DEM035 = . MOV #TIMER,R0 ;RESET TIMERS DEM040 = . CLR (R0)+ TST (R0)+ CMP R0,#TIMEND BLT DEM040 CLR TTIBUF+MODEBF ;SET INPUT MODE TO FORMATTED ASCII IOT ;TYPE "DA: " .WORD MSG04 .BYTE WRITE,TTYSLT IO ;END OF TEXT ETB = 027 ;END OF TRANSMISSION BLOCK EOT = 004 ;EOT - LINE TURNAROUND ACK = 006 ;ACKNOWLEDGE NAK = 025 ;NEGATIVE ACKNOWLEDGE NUL = 000 ;NULL CHARACTER FF = 377 ;HEX "FF" INITL = 111111 ;CONSOLE SWITCH PATTERN TO BYPASS ;DEFINITION OF EOD REPORT .PAGE ; ; PROGRAM DATA ; ; X0*XXX CONSOLIDATED CARRIERS X7* XX 00000 MMDDYYHHMM GE*0&ES TERMINAL 0000 ~*T 00000049 XX l*x XXXXXX XXX XX * XXXXXX XX*X XX * XXXXXX XXX XX /* XXXXXX XXX @*, ;CLEAR DC11 RECEIVE BUFFER BEFORE ENABLE BIS #ENABLE,RCSR ;ENABLE DC11 RECEIVE INTERRUPT CLR INTCNT ;CLEAR INTERRUPT COUNT (FOR CHECKOUT) CLRB PS ;ALLOW DC11 INTERRUPTS DEM050 = . .IFZ DEBUG WAIT ;IDLE!! BR DEM050 .ENDC .PAGE .IFNZ DEBUG ;* ;* SIMULATED DC11 CHECKOUT. THIS SECTION CAUSES THE LOGIC ;* EXPECTED FROM THE DC11T ;GET 6 CHAR DATE MMDDYY .WORD DABUF .BYTE READ,KBDSLT IOT ;TYPE "TI: " .WORD MSG05 .BYTE WRITE,TTYSLT IOT ;GET 4 CHAR TIME HHMM .WORD TIBUF .BYTE READ,KBDSLT DEM045 = . TSTB TIBUF+STATUS ;IS INPUT DONE? BPL DEM045 ;NO MOV #DATEAS,R0 ;GET DATE INTO END OF DAY REPORT MOV #TTIBUF+ .IFZ DOS . = 400 .ENDC . = .+200 STACK = . ;SYSTEM STACK AR(A .IFNZ DEBUG RCSR: .WORD 0 ;DC11 RECEIVE AND RBUF: .WORD 0 ; TRANSMIT BUFFERS TCSR: .WORD 0 ; FOR DEMO CHECKOUT TBUF: .WORD 0 ; WITHOUT DC11 H/W AND CP CLRBCC: .WORD 0 ;CLEAR BCC BCCOUT: .WORD 0 ;BCC OUTPUT REGISTER BCCMSB: .WORD 123 P.O. BOX G*P608 SAN DIEGO, CALIF ESG @L*tZ{[lP}M]\Nk`Kaz^L~no|* AUDIT TRR*AIL JUST ENTERED IS ERRONEOUS! MANU!AL ENTRY ACCEPTED! *6 IS END OF DAY REPORT TO BE Ew* NTERED ON PUNCHED TAPE?  TRANDSMISSION ERROR !*X" ERRONEOUS ACTION CODE RECEI*|VED! ERROR IN AUDIT TRAIL! AND CP. THE SIMULATED INPUT MESSAGE ;* IS RETRIEVED FROM THE OPERATOR DEFINED EOD REPORT. ;* $DC11 = . MOV #RING!ERROR,RCSR ;SET RING STATUS (HELLO?) TRAP ; AND SIMULATE DC11 INTERRUPT MOV #CARTRN!ERROR!DETECT,RCSR ;NOW, CARRIER TRANSITION TRAP ;AND CARRIER DETECT MOV #DONE,RCSR MOV #STX,RBUF ;ALWAYS NEED STX TRAP MO60.,R1 MOV (R0)+,(R1)+ MOV (R0)+,(R1)+ MOV (R0)+,(R1)+ MOV #MINUTE,TIMDAY ;SET TIME OF DAY TIMER DEM048 = . CLRB MODE ;SET RECEIVE MODE TO EXPECT RING BIS #ENABLE,LKS ;ENABLE REAL-TIME CLOCK CLRB RBUF ;CLEAR DC11 RECEIVE BUFFER BEFORE ENABLE BIS #ENABLE,RCSR ;ENABLE DC11 RECEIVE INTERRUPT CLR INTCNT ;CLEAR INTERRUPT COUNT (FOR CHECKOUT) ;MSB OF RESULTING BCC BCCLSB: .WORD 345 ;LSB OF RESULTING BCC .ENDC ; ; CUSTOMER AND PRODUCT TABLES ; ALPHA1: .WORD NAME1,NAME2,NAME3 ;POINTER TO CUSTOMER NAME ALPHA2: .WORD ADDR1,ADDR2,ADDR3 ;POINTER TO CUSTOMER ADDRESS ALPHA3: .WORD CITY1,CITY2,CITY3 ;POINTER TO CUSTOMER CITY NAME1: .ASCII 'ACME OIL COMPANY ' NAME2: .ASCII 'AJAX OF CALIFORNIA ' NAME3: .ASCII 'ALPHA OIL CORPORATION' ADDR1: .ASCII '63321 SO. SEVENTH" DA:  TI: J 8 N6Br ` # MMDDYY HHMM *  * A" 0246@*( : 0 z& p fS*L V4@ B*p  tr%7* IA 7  * J׭Y  8 V #TTIBUF+DATA,R0 ; $DC11A = . MOV #DONE,RCSR ;SET CHARACTER READY STATUS MOVB (R0)+,RBUF ;GET NEXT CHARACTER CMPB RBUF,#7 ;IS IT A BELL (END OFMESSAGE) BEQ $DC11B ;YES MOV R0,-(SP) ;SAVE ADDRESS TRAP ;SIMULATE MOV (SP)+,R0 BR $DC11A ;GO BACK FOR MORE ; $DC11B = . MOV #E CLRB PS ;ALLOW DC11 INTERRUPTS DEM050 = . .IFZ DEBUG WAIT ;IDLE!! BR DEM050 .ENDC .PAGE .IFNZ DEBUG ;* ;* SIMULATED DC11 CHECKOUT. THIS SECTION CAUSES THE LOGIC ;* EXPECTED FROM THE DC11 AND CP. THE SIMULATED INPUT MESSAGE ;* IS RETRIEVED FROM THE OPERATOR DEFINED EOD REPORT. ;* $DC11 = . MOV #RING!ERROR,RCSR ;SET RING STATUS (HELLO?) ' ADDR2: .ASCII '12255 FOURTH STREET ' ADDR3: .ASCII 'P.O. BOX 1234 ' CITY1: .ASCII 'SAN DIEGO, CALIF. ' CITY2: .ASCII 'LOS ANGELES, CALIF ' CITY3: .ASCII 'SANTA FE SPRINGS, CAL' .EVEN KODE1: .ASCII '01' KODE2: .ASCII '02' KODE3: .ASCII '03' KODE4: .ASCII '04' PRNAM1: .ASCII 'REGULAR ' PRNAM2: .ASCII 'PREMIUM ' PRNAM3: .ASCII 'DIESEL ' PRNAM4: .ASCII 'NO. 2 FUEL' PRSZ = 10. .PAGE ;* ;* D U M M Y I N V Ot*   H 7     >*  (7U@*$@7U@7 7  8 *H7 w  t}*l xr \vw ĝ*J 5@#9ĝZ5 UR*J 5@56  77 4*r7$U@00hE@E7I*ĝ7 5 * 5ĝ7  uTX,RBUF ;THAT'S ALL, FOLKS! TRAP MOV #123,RBUF ;DUMMY BCC TRAP MOV #345,RBUF TRAP MOV #377,RBUF ;AND THE GRAND FINALE TRAP MOV #17777,R1 ;DELAY FOR S/W TO RESPOND, ; ;SEND ACK (3 SEC DELAY) $DC11C = . DEC R1 BNE $DC11C MOV #EOT,RBUF ;SEND LINE TURNAROUND - EOT TRAP ; TRAP ; AND SIMULATE DC11 INTERRUPT MOV #CARTRN!ERROR!DETECT,RCSR ;NOW, CARRIER TRANSITION TRAP ;AND CARRIER DETECT MOV #DONE,RCSR MOV #STX,RBUF ;ALWAYS NEED STX TRAP MOV #TTIBUF+DATA,R0 ; $DC11A = . MOV #DONE,RCSR ;SET CHARACTER READY STATUS MOVB (R0)+,RBUF ;GET NEXT CHARACTER CMPB RBUF,#7 I C E ;* INVOICE = . .BYTE CR .ASCII '000' SERNO1: .ASCII '0' .BYTE CR,LF,TAB,TAB,TAB .ASCII ' ' NAME: .ASCII ' COLL' .BYTE CR,LF,TAB,TAB,TAB .ASCII ' ' ADDRESS:.ASCII ' ' .BYTE CR,LF,TAB,TAB,TAB .ASCII ' ' CITY: .ASCII ' ' .BYTE CR,LF,LF,LF,LF CARRIER:.ASCII 'XXXX CONSOLIDATED CARRIERS ' DRIVER: .ASCII*D 0N ĝ7*hpwiĝ7YE@vw *DX C*` Dzw*` ywĝ*wE@7 4 E@!10!*20!60 !40 X %ww*@ww>c. t. hG*d. \. P򷊛 h*E1W  www* ;NOW IT'S UP TO THE PROGRAM $DC11D = . ;TO SEND RESPONSE MESSAGE CMP SWITCH,#-1 BNE $DC11D BR $DC11 ;REPEAT WHEN SWITCHES = 177777 .ENDC .PAGE ; ; DC11 RECEIVE INTERRUPT ROUTINE ; RCVINT = . JSR R5,PUSHR ;SAVE REGS. INC INTCNT ;INCR INTERRUPT COUNT (FOR CHECKOUT) MOV RCSR,R5 ;IS RCSR ERROR B ;IS IT A BELL (END OFMESSAGE) BEQ $DC11B ;YES MOV R0,-(SP) ;SAVE ADDRESS TRAP ;SIMULATE MOV (SP)+,R0 BR $DC11A ;GO BACK FOR MORE ; $DC11B = . MOV #ETX,RBUF ;THAT'S ALL, FOLKS! TRAP MOV #123,RBUF ;DUMMY BCC TRAP MOV #345,RBUF TRAP MOV #377,RBUF 'XXX' .BYTE TAB,TAB .ASCII ' 0000' NUMBER: .ASCII '0' .BYTE CR,LF,LF DATE: .ASCII 'MMDDYY' TIME: .ASCII 'HHMM GE&ES TERMINAL' .BYTE TAB .ASCII ' 000' SERNO2: .ASCII '0' .BYTE CR,LF,LF .ASCII ' ' CUSTNO: .ASCII ' 00000049' .BYTE CR,LF,LF,LF,LF CODE1: .ASCII 'XX ' PROD1: .ASCII ' ' VOL1: .ASCII 'XXXXXX ' TEMP1: .ASCII 'XXX' w a  *q N w  # )*w  "w LcTg c* w  Jw N^ *<  w  rw zPh*`  w r w RR*r  2 |*H VW s $*` &hXw1 *H7 W  _ *.IT SET? BMI RCV030 ;YES MOVB MODE,R0 ;NO, BRANCH ON RECEIVE MODE CMPB R0,#2 ;***** TEST MODE DURING CHECKOUT ******* BGE RCV005 BR RCV038 RCV005 = . ASL R0 JMP @RCV010-4(R0) ; ; BRANCH TABLE ; RCV010 = . .WORD RCV100 ;RECEIVE STX MODE = 2 .WORD RCV150 ;RECEIVE DATA = 3 .WORD RCV200 ;AND THE GRAND FINALE TRAP MOV #17777,R1 ;DELAY FOR S/W TO RESPOND, ; ;SEND ACK (3 SEC DELAY) $DC11C = . DEC R1 BNE $DC11C MOV #EOT,RBUF ;SEND LINE TURNAROUND - EOT TRAP ; ;NOW IT'S UP TO THE PROGRAM $DC11D = . ;TO SEND RESPONSE MESSAGE CMP SWITCH,#-1 BNE $DC11D BR .BYTE CR,LF CODE2: .ASCII 'XX ' PROD2: .ASCII ' ' VOL2: .ASCII 'XXXXXX ' TEMP2: .ASCII 'XXX' .BYTE CR,LF CODE3: .ASCII 'XX ' PROD3: .ASCII ' ' VOL3: .ASCII 'XXXXXX ' TEMP3: .ASCII 'XXX' .BYTE CR,LF CODE4: .ASCII 'XX ' PROD4: .ASCII ' ' VOL4: .ASCII 'XXXXXX ' TEMP4: .ASCII 'XXX' .BYTE CR,LF,LF,LF,LF,LF,LF,LF,LF .BYTE 61 lH7 W *8 E7 wH*\ _  ҕ  *wT1 $eH7Z d*C  4 &E@Bĝ@!*7 lx>E"7wEB*7E7 }*w7 w01,wq נ*4 FנZ[ CsÌČ0*Xp h  q  *| . ;RECEIVE BCC(MSB) = 4 .WORD RCV250 ;RECEIVE BCC(LSB) = 5 .WORD RCV320 ;RECEIVE EOT = 6 .WORD RCV700 ;RECEIVE ACK/NAK = 7 .WORD RCV700 ;RECEIVE ACK/NAK = 8 .WORD RCV700 ;RECEIVE ACK/NAK = 9 .WORD RCV700 ;RECEIVE ACK/NAK = 10 ; RCV020 = . JSR R5,POPR ;RESTORE REGS.$DC11 ;REPEAT WHEN SWITCHES = 177777 .ENDC .PAGE ; ; DC11 RECEIVE INTERRUPT ROUTINE ; RCVINT = . JSR R5,PUSHR ;SAVE REGS. INC INTCNT ;INCR INTERRUPT COUNT (FOR CHECKOUT) MOV RCSR,R5 ;IS RCSR ERROR BIT SET? BMI RCV030 ;YES MOVB MODE,R0 ;NO, BRANCH ON RECEIVE MODE CMPB R0,#2 ;***** TEST MODE DURING CHECKOUT ******* LF,LF,LF,LF,LF,LF,LF,LF,LF .BYTE LF,LF,LF,LF,LF,LF,LF,LF,LF .BYTE LF,LF,LF,LF,LF,LF,LF,LF,LF .ASCII ' P.O. BOX 608' .BYTE CR,LF .ASCII 'SAN DIEGO, CALIF ESG' .BYTE FORM INVEND = . ; ; ASCII TO EBCDIC CONVERSION TABLE ; EBCDIC = . .BYTE 100,132,177,173,133,154,120,175,115,135 .BYTE 134,116,153,140,113,141,360,361,362,363 .BYTE 364,365,366,367,370,371,172,136,114,176  5w*E  5b#*נ Õנ Õ%נ *נ ÕÕ@w 7Հc* 0 U5e7U@w *0w  , elwO*Tw E@E5x *x57 ŀf Е7 ^ v*j7T ^ H7F PW 杬*<6 H7( 2W *7 Н RTI ;RETURN ; ; ERROR BIT PROCESSING ; RCV030 = . MOVB MODE,R4 ;BRANCH ON MODE BEQ RCV040 ;RING CMPB R4,#1 ;EXPECTING CARRIER TRANS. AFTER RING? BEQ RCV050 ;YES CMPB R4,#6 ;EXPECTING CARRIER TRANS. FOR EOT,ACKNAK BLT RCV035 ;NO CMPB R4,#10. ;MAYBE BLE RCV050 ;YES RCV035 = . BGE RCV005 BR RCV038 RCV005 = . ASL R0 JMP @RCV010-4(R0) ; ; BRANCH TABLE ; RCV010 = . .WORD RCV100 ;RECEIVE STX MODE = 2 .WORD RCV150 ;RECEIVE DATA = 3 .WORD RCV200 ;RECEIVE BCC(MSB) = 4 .WORD RCV250 ;RECEIVE BCC(LSB) = 5 .WORD RCV320 ;RECEIVE EOT = 6 .WORD .BYTE 156,157,174,301,302,303,304,305,306,307 .BYTE 310,311,321,322,323,324,325,326,327,330 .BYTE 331,342,343,344,345,346,347,350,351 .EVEN ; ; DEVICE CODES FOR IOX USAGE ; LSR: .WORD 3 LSP: .WORD 4 ; ; MESSAGES TO BE OUTPUT TO TERMINAL ; TMSG00 = . .BYTE CR,LF .ASCII /AUDIT TRAIL JUST ENTERED IS ERRONEOUS!/ TMSG01 = . .BYTE CR,LF .ASCII /MANUAL ENTRY ACCEPTED!/НЕf 7\*w 8  H   $w *, w 03 w 04w *P02E7z7U@w w *t 9w ȕ05*ȕ0329ȕ0 *0ȕ0ԕ B CD* CDע פ0 E{"&f&M   BIT #CARTRN,R5 ;OTHER, HAVE WE LOST RECEIVE CARRIER? BNE RCV080 ;YES INCB RCVERR ;NO, INCR RECEIVE ERROR COUNT RCV038 = . MOVB RBUF,R4 ;CLEAR RCSR DONE BIT TO PREVENT OVERRUN BR RCV020 ;GO RETURN ; ; PROCESS A RING ; RCV040 = . BIT #RING,R5 ;IS IT A RING? BEQ RCV020 ;NO, IGNORE INTERRUPT BIS #DTRDY,RCSR ;SET DATRCV700 ;RECEIVE ACK/NAK = 7 .WORD RCV700 ;RECEIVE ACK/NAK = 8 .WORD RCV700 ;RECEIVE ACK/NAK = 9 .WORD RCV700 ;RECEIVE ACK/NAK = 10 ; RCV020 = . JSR R5,POPR ;RESTORE REGS. RTI ;RETURN ; ; ERROR BIT PROCESSING ; RCV030 = . MOVB MODE,R4 ;BRANCH ON MODE BEQ RCV040 ;RING TMSG02 = . ; ; HUB TELETYPE MESSAGES ; .EVEN CRLFLF: .WORD 0 .BYTE 0,0 .WORD 3 .BYTE CR,LF,LF .EVEN MSG00: .WORD 0 .BYTE 0 .BYTE 0 .WORD 54. .BYTE CR,LF .ASCII 'IS END OF DAY REPORT TO BE ENTERED ON PUNCHED TAPE? ' .EVEN MSG01: .WORD 0 .BYTE 0 .BYTE 0 .WORD 25. .BYTE CR,LF .ASCII /TRANSMISSIO* D  &C@AEPA&f*Dw w /w w :w *h  ` E A,` H 8 wFLen*w 7U4E(w T76.֚  p$e*w V׭dUB*"7w @ŝ*Fŝwdt w*jt! w w JA TERMINAL READY MOVB #1,MODE ;SET MODE TO EXPECT CARRIER TRANSITION BR RCV020 ;GO RETURN ; ; PROCESS CARRIER TURNON ; RCV050 = . BIT #CARTRN,R5 ;IS INT. A CARRIER TRANSITION? BEQ RCV020 ;NO, IGNORE INTERRUPT RCV060 = . BIT #DETECT,RCSR ;IS CARRIER DETECT ON? BEQ RCV080 ;NO CMPB R4,#1 ;YES, IS IT CARRIER DETECT AFTER RING? BG CMPB R4,#1 ;EXPECTING CARRIER TRANS. AFTER RING? BEQ RCV050 ;YES CMPB R4,#6 ;EXPECTING CARRIER TRANS. FOR EOT,ACKNAK BLT RCV035 ;NO CMPB R4,#10. ;MAYBE BLE RCV050 ;YES RCV035 = . BIT #CARTRN,R5 ;OTHER, HAVE WE LOST RECEIVE CARRIER? BNE RCV080 ;YES INCB RCVERR ;NO, INCR RECEIVE ERROR COUNT RCV038 = N ERROR / MSG01F: .ASCII / !/ .EVEN MSG02: .WORD 0 .BYTE 0 .BYTE 0 .WORD 34. .BYTE CR,LF,LF .ASCII /ERRONEOUS ACTION CODE RECEIVED!/ .EVEN MSG03: .WORD 0 .BYTE 0 .BYTE 0 .WORD 24. .BYTE CR,LF,LF .ASCII /ERROR IN AUDIT TRAIL!/ .EVEN MSG04: .WORD 0 .BYTE 0,0 .WORD 6 .BYTE CR,LF .ASCII /DA: / w ,@eZ%ĕt72 $$**w Bw .e` w ;w *؛ĝw wf&*f . 46 0c.c,H7$c7$c cw rc5ccc*ngbbbV  <6 !*%& &e* N @ e0w &  *ڜ b7~brbT RCV065 ;NO MOVB #2,MODE ;SET RECEIVE MODE TO EXPECT STX RCV065 = . CLRB RCVERR ;ZERO ERROR COUNT CLR RCVBUF+COUNT ;ZERO CHAR COUNT RCV070 = . CLRB RBUF ;INSURE RCSR DONE BIT CLEARED! BIS #ENABLE,RCSR ;ENABLE DC11 RECEIVE INT. BR RCV020 ;GO RETURN ; ; LOST RECEIVE CARRIER ; RCV080 = . MOV #ERR00,MSG01F ;PUT ERROR CODE . MOVB RBUF,R4 ;CLEAR RCSR DONE BIT TO PREVENT OVERRUN BR RCV020 ;GO RETURN ; ; PROCESS A RING ; RCV040 = . BIT #RING,R5 ;IS IT A RING? BEQ RCV020 ;NO, IGNORE INTERRUPT BIS #DTRDY,RCSR ;SET DATA TERMINAL READY MOVB #1,MODE ;SET MODE TO EXPECT CARRIER TRANSITION BR RCV020 ;GO RETURN ; ; PROCESS CARRIER TURNON ; RCV050 = .EVEN MSG05: .WORD 0 .BYTE 0,0 .WORD 6 .BYTE CR,LF .ASCII /TI: / .EVEN ; ; HUB TELETYPE BUFFERS ; TTIBUF: .WORD 586. ;MAX NO. CHARS TO INPUT .BYTE 0 ;MODE - FORMATED ASCII .BYTE 0 ;STATUS .WORD 0 ;NO. OF CHARS INPUT . = .+586. ;DATA TTOBUF: .WORD 0 ;UNUSED .BYTE 0 ;MODE - FORMw*nbE w *"  w ׭4b ^*Fw Uw w njJ*j  7,XR-P D*w@ 78 %(! , %??P*؝w N%w 778*w Z e0w ,w 1* w p*D Cå å$ נA "00" IN ERROR MSG RCV090 = . BIC #ENABLE,RCSR ;DISABLE DC11 INTERRUPTS BIC #DTRDY,RCSR ;RESET DATA TERMINAL READY CLRB MODE ;SET RECEIVE MODE TO EXPECT RING IOT ;TYPE - "TRANSMISSION ERROR XX!" .WORD MSG01 .BYTE WRITE,TTYSLT RCV095 = . TSTB MSG01+STATUS BPL RCV095 BR RCV070 ;GO ENABLE RECEIVE INTERRUPT ; ; PROCESS STX ; . BIT #CARTRN,R5 ;IS INT. A CARRIER TRANSITION? BEQ RCV020 ;NO, IGNORE INTERRUPT RCV060 = . BIT #DETECT,RCSR ;IS CARRIER DETECT ON? BEQ RCV080 ;NO CMPB R4,#1 ;YES, IS IT CARRIER DETECT AFTER RING? BGT RCV065 ;NO MOVB #2,MODE ;SET RECEIVE MODE TO EXPECT STX RCV065 = . CLRB RCVERR ;ZERO ERROR COUNT CLR RCVBUF+CATTED ASCII .BYTE 0 ;STATUS .WORD 0 ;NO. OF CHARS TO BE OUTPUT . = .+300. ; ; TIMERS ; TIMER = . ACKTMR: .WORD 0 ;ACK TIMER .WORD ACKTO EOTTMR: .WORD 0 ;EOT TIMER .WORD EOTTO CARTMR: .WORD 0 ;CARRIER TIMER AFTER TRANSMITTING .WORD CARTO TIMDAY: .WORD 0 ;TIME OF DAY TIMER .WORD UPTIME TIMEND = . ; .h  e` ƞ*  Ëנe ee Oe ѐ  @(?*Ξ ODT-11R V00 2ABEh* *;/\ $G _<^,OWEBP@>SRC-FI!XASPMCFRBs.'*]]RCV100 = . MOVB RBUF,R4 CMPB R4,#STX BNE RCV120 RCV110 = . CLR CLRBCC ;CLEAR BCC REGISTER MOVB #3,MODE ;SET RECEIVE MODE TO EXPECT DATA BR RCV020 ;GO RETURN RCV120 = . BIT #PARITY,R5 ;IS PARITY GOOD? BEQ RCV020 ;YES, IGNORE INTERRUPT INCB RCVERR ;NO, INCR ERROR COUNT BR RCV110 ;ASSUME IT WAS SOUNT ;ZERO CHAR COUNT RCV070 = . CLRB RBUF ;INSURE RCSR DONE BIT CLEARED! BIS #ENABLE,RCSR ;ENABLE DC11 RECEIVE INT. BR RCV020 ;GO RETURN ; ; LOST RECEIVE CARRIER ; RCV080 = . MOV #ERR00,MSG01F ;PUT ERROR CODE "00" IN ERROR MSG RCV090 = . BIC #ENABLE,RCSR ;DISABLE DC11 INTERRUPTS BIC #DTRDY,RCSR ;RESET DATA TERMINAL READY CLRB MODE ; HUB/TERMINAL INPUT/OUTPUT MESSAGE BUFFERS ; RCVBUF = . ;RECEIVE BUFFER .WORD 273. ;MAXIMUM NUMBER OF CHARACTERS .BYTE 0 ;UNUSED .BYTE 0 ;STATUS .WORD 0 ;NO. OF DATA CHARACTERS RECEIVED . = .+273. .EVEN ; TRNBUF = . ;TRANSMIT BUFFER .WORD 0 ;NO. OF DATA CHARACTERS TO BE TRANSMITTED .BYTE 0 0 :*,>Rf{ACME OIL COMPANY *P AJAX OF CALIFORNIA ALPHA OIL CORPu*tORATION63321 SO. SEVENTH 12255 FO*URTH STREET P.O. BOX 1234 SA@*N DIEGO, CALIF. LOS ANGELES, CALIFQ* SANTA FE SPRINGS, CAL051072010203*REGULAR PREMIUM LOW LEAD 0000 *( CO4*LLL *p TX W/BAD PARITY ; ; PROCESS DATA CHAR ; RCV150 = . BIT #DONE,R5 ;IS CHAR AVAIL? BEQ RCV020 ;NO, FALSE INTERRUPT MOVB RBUF,R4 ;GET CHAR MOV R4,BCCOUT ;OUTPUT CHAR TO BCC REGISTER CMPB R4,#ETX ;IS CHAR AN ETX? BEQ RCV180 ;YES CMPB R4,#ETB ;IS CHAR AN ETB? BEQ RCV180 ;YES INC RCVBUF+COUNT ;INCR CHAR COUNT I;SET RECEIVE MODE TO EXPECT RING IOT ;TYPE - "TRANSMISSION ERROR XX!" .WORD MSG01 .BYTE WRITE,TTYSLT RCV095 = . TSTB MSG01+STATUS BPL RCV095 BR RCV070 ;GO ENABLE RECEIVE INTERRUPT ; ; PROCESS STX ; RCV100 = . MOVB RBUF,R4 CMPB R4,#STX BNE RCV120 RCV110 = . CLR CLRBCC ;CLEAR BCC REGISTER MOVB #3,M ;UNUSED .BYTE 0 ;STATUS .WORD 0 ;RESERVED FOR USE BY TRNINT ROUTINE . = .+600. ; ; JULIAN DATE FROM TERMINAL SAVED HERE ; JULDAY = . ;JULIAN DATE FROM LAST MSG RECEIVED . = .+3 JULEND = . ; ; DATE AND TIME AT HUB ; .EVEN DABUF: .WORD 8. .BYTE 0,0 .WORD 0 DATEAS: .ASCII /MMDDYY / TIBUF: .WORD 6 .BYTE 0,0 XXXX CO*NSOLIDATED CARRIERS XXX C* 00000 MMDDYYHHMM GE&ES TE*RMINAL 0000 0000J*0049 XX *$ XXXXXX XXX XX *H XXXXXX XXX XX *l XXX>*XXX XXX * P.O. BOX 608 SAN DIEGO, CALIF ESG N BUFFER HEADER MOV RCVBUF+COUNT,R0 ;GET COUNT CMP R0,#273. ;IS DATA CHAR COUNT .GT. 273? BGT RCV170 ;YES MOVB R4,RCVBUF+DATA-1(R0) ;PUT DATA INTO BUFFER RCV160 = . BR RCV020 ;GO RETURN ; RCV170 = . INCB RCVERR ;INCR ERROR COUNT BR RCV160 ;GO RETURN ; ; PROCESS ETX/ETB ; RCV180 = . MOVB #4,MODE ;SET MODE FOODE ;SET RECEIVE MODE TO EXPECT DATA BR RCV020 ;GO RETURN RCV120 = . BIT #PARITY,R5 ;IS PARITY GOOD? BEQ RCV020 ;YES, IGNORE INTERRUPT INCB RCVERR ;NO, INCR ERROR COUNT BR RCV110 ;ASSUME IT WAS STX W/BAD PARITY ; ; PROCESS DATA CHAR ; RCV150 = . BIT #DONE,R5 ;IS CHAR AVAIL? BEQ RCV020 ;NO, FALSE INTERRUPT MOVB .WORD 0 TIMEAS: .ASCII /HHMM / ; ; PROGRAM VARIABLES ; MODE: .BYTE 0 ;RECEIVE MODE ; WHERE 0 = EXPECTING RING ; 1 = EXPECT CARRIER TRANSITION ; 2 = EXPECT STX ; 3 = EXPECT DATA ; 4 = EXPECT BCC(MSB) ; 5 = EXPECT BCC(LSB* AUDIT TRAIL JUST ENTERED IS ER*RONEOUS!6 IS END OF DAY REPORT%2 TO BE ENTERED ON PUCHED TAPE? %R TRANSMISSION ERROR !_*r" ERRONEOUS ACTION CODE RECEIVm ED!* ERROR IN AUDIT TRAIL! P5 v  S 000203&* V d@R* B, R RECEIVING BCC(MSB) BR RCV020 ;GO RETURN ; ; PROCESS MOST SIG. BYTE OF BCC ; RCV200 = . MOVB RBUF,R4 CMPB R4,BCCMSB ;DOES IT MATCH? BNE RCV210 ;NO RCV205 = . MOVB #5,MODE ;YES, SET MODE FOR RECEIPT OF BCC(LSB) JMP RCV020 ;GO RETURN RCV210 = . INCB RCVERR ;INCR ERROR COUNT BR RCV205 ;GO SET MODE ; ; RBUF,R4 ;GET CHAR MOV R4,BCCOUT ;OUTPUT CHAR TO BCC REGISTER CMPB R4,#ETX ;IS CHAR AN ETX? BEQ RCV180 ;YES CMPB R4,#ETB ;IS CHAR AN ETB? BEQ RCV180 ;YES INC RCVBUF+COUNT ;INCR CHAR COUNT IN BUFFER HEADER MOV RCVBUF+COUNT,R0 ;GET COUNT CMP R0,#273. ;IS DATA CHAR COUNT .GT. 273? BGT RCV170 ;YES MOVB R4,RCVBUF+) ; 6 = EXPECT EOT ; 7 = EXPECT ACK/NAK AFTER ; SENDING ; 8 = SAME ; 9 = SAME ; 10 = SAME RCVERR: .BYTE 0 ;RECEIVE ERROR COUNT REPEAT: .BYTE 0 ;NO. OF TRYS TO TRANSMIT TO TERMINAL .EVEN CURBUF: .WORD 0 *  %Iz X 1* ׭Y  v @*9  ~ 7cU@U@w 5*] C xh Rh@@@zw n* ! 5@n#7 f5 \* UT5@F5> * 77 U@(E7R*  ׭ 7 5 *5ĝ7  Ni*5J 0 bY PROCESS LEAST SIG. BYTE OF BCC ; RCV250 = . MOVB RBUF,R4 CMPB R4,BCCLSB ;DOES IT MATCH? BEQ RCV260 ;YES INCB RCVERR ;NO, INCR ERROR COUNT RCV260 = . BIC #ENABLE,RCSR ;DISABLE RECEIVE INTERRUPTS JSR R5,MOVE ;SAVE JULIAN DATE FROM TERMINAL .WORD RCVBUF+DATA+10.,JULDAY,3,-1 TSTB RCVERR ;ANY ERRORS IN TRANSMISSION? BNE RCV300 DATA-1(R0) ;PUT DATA INTO BUFFER RCV160 = . BR RCV020 ;GO RETURN ; RCV170 = . INCB RCVERR ;INCR ERROR COUNT BR RCV160 ;GO RETURN ; ; PROCESS ETX/ETB ; RCV180 = . MOVB #4,MODE ;SET MODE FOR RECEIVING BCC(MSB) BR RCV020 ;GO RETURN ; ; PROCESS MOST SIG. BYTE OF BCC ; RCV200 = . MOVB RBUF,R4 CMPB R4,BCCMSB ;CURRENT BUFFER ADDRESS INTCNT: .WORD 0 ;RECEIVE INTERRUPT COUNT (FOR CHECKOUT) .PAGE ; ; INITIALIZATION PROGRAM AND IDLE LOOP ; DEMO = . MOVB #BR4,PS ;INHIBIT DC11 INTERRUPTS DURING INIT MOV #15604,@#4 ;SET UP IOX VECTORS MOV #340,@#6 MOV #15256,@#20 MOV #340,@#22 CLR @#40 MOV #040404,@#42 MOV #16040,@#60 MOV #BR5,@#62 *YID* 3wE@*}   * * I*w7 E@ ݋݆!!4* ! ! ! r wwXw*1w . 9. iŖ*U. v򷊆] BE1W*y  w,w2w8w D0*Wt   J ;YES MOVB #ACK,TRNBUF+DATA ;PUT "ACK,FF" INTO DC11 OUTPUT BUFFER MOVB #FF,TRNBUF+DATA+1 MOV #2,TRNBUF ;SET NO. CHARS TO 2 MOV #TRNBUF,-(SP) ;CALL DC11 OUTPUT ROUTINE JSR PC,D11OUT RCV280 = . TSTB TRNBUF+STATUS ;ALL DONE? BMI RCV280 ;NO MOV #EOTTIM,EOTTMR ;SET EOT TIMER MOVB #6,MODE ;SET RECEIVE MODE TO EXPECT EOT JMP RCV070 ;DOES IT MATCH? BNE RCV210 ;NO RCV205 = . MOVB #5,MODE ;YES, SET MODE FOR RECEIPT OF BCC(LSB) JMP RCV020 ;GO RETURN RCV210 = . INCB RCVERR ;INCR ERROR COUNT BR RCV205 ;GO SET MODE ; ; PROCESS LEAST SIG. BYTE OF BCC ; RCV250 = . MOVB RBUF,R4 CMPB R4,BCCLSB ;DOES IT MATCH? BEQ RCV260 ;YES INCB MOV #16710,@#64 MOV #BR5,@#66 MOV #CLR,COM ;CLEAR MAG TAPE CONTROLLER JSR PC,TAPRDY ;READY? MOV #WFM,COM ;YES, WRITE FILE MARK JSR PC,TAPRDY ;READY? MOV #WFM,COM ;YES, WRITE FILE MARK JSR PC,TAPRDY ;READY? MOV #RWD,COM ;YES, REWIND TAPE JSR PC,TAPRDY ;READY? MOV #RCVINT,@#RVECTR ;RECEIVE INTERRUPT*  w $ w    `* - 4w  w 9=*  ] dw  Bw i*-m   "*QH W  ?; *u (wJ敱 tH7`0* W   .*E<7wH x* w敱 H7 ^W * , 敱 eH* ;GO WAIT FOR EOT ; ; RCV300 = . MOVB #NAK,TRNBUF+DATA ;PUT "NAK,FF" INTO DC11 OUTPUT BUFFER MOVB #FF,TRNBUF+DATA+1 MOV #2,TRNBUF ;SET NO. CHARS TO 2 MOV #TRNBUF,-(SP) ;CALL DC11 OUTPUT ROUTINE JSR PC,D11OUT RCV310 = . TSTB TRNBUF+STATUS ;ALL DONE? BMI RCV310 ;NO JMP RCV060 ;GO WAIT FOR REPEATED MSG FROM TERMINAL ; ; PROCESS RECEIPT OF EOT RCVERR ;NO, INCR ERROR COUNT RCV260 = . BIC #ENABLE,RCSR ;DISABLE RECEIVE INTERRUPTS JSR R5,MOVE ;SAVE JULIAN DATE FROM TERMINAL .WORD RCVBUF+DATA+10.,JULDAY,3,-1 TSTB RCVERR ;ANY ERRORS IN TRANSMISSION? BNE RCV300 ;YES MOVB #ACK,TRNBUF+DATA ;PUT "ACK,FF" INTO DC11 OUTPUT BUFFER MOVB #FF,TRNBUF+DATA+1 MOV #2,TRNBUF ;SET NO. CHARS TO 2 MOV VECTOR MOV #TRNINT,@#TVECTR ;TRANSMIT INTERRUPT VECTOR MOV #CLKINT,@#CVECTR ;CLOCK INTERRUPT VECTOR .IFNZ DEBUG MOV #RCVINT,@#34 ;CHECKOUT RECEIVE INT (TRAP) MOV #TRNINT,@#30 ;CHECKOUT TRANSMIT INT (EMT) .ENDC CLR R0 ;LET DC11 INTR ROUNTINES RUN AT ;CPU LEVEL 0 MOV R0,@#RVECTR+2 MOV R0,@#TVECTR+2 .I)7 *C  E@ĝ7 (*M׭QE7AwfEM*q73wXE7% w* w@w l7Հ0 UW*HU@Bw Vw B, e/*lw w .E@Eŀ%* Е7 H7 < HU*%7 .W 7 НЄ*IЕ 7>w v *m ~   $w  w Ep*l7; RCV320 = . MOVB RBUF,R4 ;MOVE CHAR TO REG (FOR CHECKOUT) CMPB R4,#EOT ;IS CHAR AN EOT? BEQ RCV322 ;YES JMP RCV020 ;NO, IGNORE INTERRUPT RCV322 = . BIC #ENABLE,RCSR ;DISABLE RECEIVE INTERRUPT CLR EOTTMR ;RESET EOT TIMER CLR R4 BISB RCVBUF+DATA+5,R4 ;GET SWAB R4 ; ACTION BISB RCVBUF+DATA+ #TRNBUF,-(SP) ;CALL DC11 OUTPUT ROUTINE JSR PC,D11OUT RCV280 = . TSTB TRNBUF+STATUS ;ALL DONE? BMI RCV280 ;NO MOV #EOTTIM,EOTTMR ;SET EOT TIMER MOVB #6,MODE ;SET RECEIVE MODE TO EXPECT EOT JMP RCV070 ;GO WAIT FOR EOT ; ; RCV300 = . MOVB #NAK,TRNBUF+DATA ;PUT "NAK,FF" INTO DC11 OUTPUT BUFFER MOVB #FF,TRNBUF+DATA+1 MOV #2,TRNBUF ;SFNZ DEBUG MOV R0,@#36 MOV R0,@#32 .ENDC MOV #BR6,R0 MOV R0,@#CVECTR+2 MOV #STACK,SP ;SET STACK POINTER IOT ;RESET IOX .WORD 0 .BYTE RESET,0 IOT ;SET RESTART ADDRESS .WORD DEMO .BYTE RESTRT,0 IOT ;INIT LSR .WORD LSR .BYTE INIT,LSRSLT MOV #LENGTH!RSPEEDw w nv   ~ EJ*7R U@4w Lԕ A*B CD CDע *0 E&f&M !Z6,R4 ; CODE CMP R4,#AUTOTR ;IS IT AUTO TRANSACTION? BEQ RCV330 ;YES CMP R4,#AUDTRL ;IS IT AUDIT TRAIL? BEQ RCV330 ;YES CMP R4,#AUDERR ;IS IT AN AUDIT ERROR? BEQ RC.530 ;YES CMP R4,#MANUAL ;IS IT A MANUAL TRANSACTION? BEQ RC.570 ;YES IOT ;NO, ERRONEOUS ACTION CODE .WORD MSG02 ;TYPE ERROR ET NO. CHARS TO 2 MOV #TRNBUF,-(SP) ;CALL DC11 OUTPUT ROUTINE JSR PC,D11OUT RCV310 = . TSTB TRNBUF+STATUS ;ALL DONE? BMI RCV310 ;NO JMP RCV060 ;GO WAIT FOR REPEATED MSG FROM TERMINAL ; ; PROCESS RECEIPT OF EOT ; RCV320 = . MOVB RBUF,R4 ;MOVE CHAR TO REG (FOR CHECKOUT) CMPB R4,#EOT ;IS CHAR AN EOT? BEQ RCV322 ;YES JMP ,RCSR ;SET DC11 RECEIVER CHAR LENGTH ;AND SPEED MOV #STOPCD!TSPEED,TCSR ;SET DC11 TRANSMITTER STOP CODE ;AND SPEED DEM005 = . CMP #INITL,SWITCH BEQ DEM048 IOT ;TYPE MSG00 .WORD MSG00 .BYTE WRITE,TTYSLT CLR TTIBUF+MODEBF ;SET INPUT MODE TO FORMATTED ASCII IOT ;GET "Y" OR "N" RESPONSE 0 :*,SNbvACB*PME OIL COMPANY AJAX OF CALIFORNIAf*t ALPHA OIL CORPORATION63321 SO. SEVI*ENTH 12255 FOURTH STREET P.O. BO*X 1234 SAN DIEGO, CALIF. LO*S ANGELES, CALIF SANTA FE SPRINGS,* CAL051072010203REGULAR PREMIUM *(LOW LEAD 0000 D*L COLL *p MESSAGE .BYTE WRITE,TTYSLT RCV325 = . TSTB MSG02+STATUS BPL RCV325 JMP RCV575 ;GO TYPE CONTENTS OF MSG ON HUB TTY RC.530: JMP RCV530 RC.570: JMP RCV570 RC.620: JMP RCV620 .PAGE ; ; PROCESS AUTO TRANSACTION OR AUDIT TRAIL ; ;* ;* F O R M A T A N I N V O I CE ;* RCV330 = . MOV #CODE1,R4 ;FIRST, BLANK OUT THE APPROPRIATE MOV #46.,R5 ;PARTS O RCV020 ;NO, IGNORE INTERRUPT RCV322 = . BIC #ENABLE,RCSR ;DISABLE RECEIVE INTERRUPT CLR EOTTMR ;RESET EOT TIMER CLR R4 BISB RCVBUF+DATA+5,R4 ;GET SWAB R4 ; ACTION BISB RCVBUF+DATA+6,R4 ; CODE CMP R4,#AUTOTR ;IS IT AUTO TRANSACTION? BEQ RCV330 ;YES CMP R4,#AUDTRL ;IS IT AUDIT TRAIL? BEQ .WORD TTIBUF .BYTE READ,KBDSLT DEM010 = . TSTB TTIBUF+STATUS ;IS INPUT DONE? BPL DEM010 MOV #000202,TTIBUF+MODEBF ;SET INPUT MODE TO UNFORMATTED ASC MOV #586.,TTIBUF+COUNT ;NO. CHARS TO BYTE COUNT CMPB TTIBUF+DATA,#'Y ;YES, IS IT "Y"? BNE DEM020 ;NO IOT ;READ PUNCHED TAPE .WORD TTIBUF .BYTE READ,LSRSLT BR DEM030 DEM020 =  Q* XXXX CONSOLIDATED CARRIERS * XXX 00000 MMD*DYYHHMM GE&ES TERMINAL 0000 G* 00000049 XX *$ XXXXXX XXX I*H XX *l XXXXXX XXX XX * XXXXXX XXX * P.O. BOX 60n'8 SAN DIEGO, CALIF F THE INVOICE BUFFER JSR PC,BLANK ;THAT CONTAIN PRODUCT INFORMATION MOV #CODE2,R4 MOV #46.,R5 JSR PC,BLANK MOV #CODE3,R4 MOV #46.,R5 JSR PC,BLANK MOV #CODE4,R4 MOV #46.,R5 JSR PC,BLANK INCB SERNO1 ;INCREMENT TRANSACTION SERIAL NUMBER INCB SERNO2 INCB NUMBER ;INCREMENT INVOICE NUMBER CLR R0 RCV330 ;YES CMP R4,#AUDERR ;IS IT AN AUDIT ERROR? BEQ RC.530 ;YES CMP R4,#MANUAL ;IS IT A MANUAL TRANSACTION? BEQ RC.570 ;YES IOT ;NO, ERRONEOUS ACTION CODE .WORD MSG02 ;TYPE ERROR MESSAGE .BYTE WRITE,TTYSLT RCV325 = . TSTB MSG02+STATUS BPL RCV325 JMP RCV575 ;GO TYPE CONTENTS OF MSG ON HUB TTY RC.530 . ;READ KBD IOT .WORD TTIBUF .BYTE READ,KBDSLT DEM030 = . TSTB TTIBUF+STATUS ;IS INPUT DONE? BPL DEM030 ;NO DEM035 = . MOV #TIMER,R0 ;RESET TIMERS DEM040 = . CLR (R0)+ TST (R0)+ CMP R0,#TIMEND BLT DEM040 CLR TTIBUF+MODEBF ;SET INPUT MODE TO FORMATTED ASCII IOT ;TYPE "DA: " ESG n* AUDIT TRAIL JUST ENTERED IS ER*RONEOUS!6 IS END OF DAY REPORT%B TO BE ENTERED ON PUCHED TAPE? %b TRANSMISSION ERROR !O*" ERRONEOUS ACTION CODE RECEIV] ED!* ERROR IN AUDIT TRAIL! @% ( \H C 000203*  "@ 9*  ;GET CUSTOMER NO. FROM INPUT BUFFER MOVB RCVBUF+DATA+CUST+CUSTSZ-1,R1 ;GET CUST NO (LAST CHAR) BIC #177600,R1 ;MUST BE 1, 2, OR 3 SUB #61,R1 ;CONVERT TO INDEX (0,1,2) BLT INV010 CMP R1,#3 BLT INV015 ; INV010 = . CLR R1 ; INV015 = . ASL R1 MOV ALPHA1(R1),INV020 ;ADDRESS OF CUSTOMER NAME MOV ALPHA2(R1): JMP RCV530 RC.570: JMP RCV570 RC.620: JMP RCV620 .PAGE ; ; PROCESS AUTO TRANSACTION OR AUDIT TRAIL ; ;* ;* F O R M A T A N I N V O I CE ;* RCV330 = . MOV #CODE1,R4 ;FIRST, BLANK OUT THE APPROPRIATE MOV #46.,R5 ;PARTS OF THE INVOICE BUFFER JSR PC,BLANK ;THAT CONTAIN PRODUCT INFORMATION MOV #CODE2,R4 MOV #46.,R5 JSR PC,BLANK MOV #COD .WORD MSG04 .BYTE WRITE,TTYSLT IOT ;GET 6 CHAR DATE MMDDYY .WORD DABUF .BYTE READ,KBDSLT IOT ;TYPE "TI: " .WORD MSG05 .BYTE WRITE,TTYSLT IOT ;GET 4 CHAR TIME HHMM .WORD TIBUF .BYTE READ,KBDSLT DEM045 = . TSTB TIBUF+STATUS ;IS INPUT DONE? BPL DEM045 ;NO MOV #DATEAS,B,z* %IV*% & X ׭Y *I  w   7OU@o*m U@** 7׭&W* vSnf^ * N-w 56'* x w  *!5@#7 5 U[*Eq5@ ,INV030 ;ADDRESS, AND MOV ALPHA3(R1),INV040 ;CITY JSR R5,MOVE INV020: .WORD 0,NAME,20. ;MOVE CUSTOMER NAME TO INVOICE INV030: .WORD 0,ADDRESS,20. ;AND ADDRESS INV040: .WORD 0,CITY,20. ;AND CITY/STATE .WORD RCVBUF+DATA+CARNO,CARRIER,CARSZ .WORD RCVBUF+DATA+DRNO,DRIVER,DRSZ .WORD RCVBUF+DATA+CUST,CUSTNO,CUSTSZ .WORD -1 MOVB PS,-(SP) ;LOCKOUT TIMER UPDATE WHIL E3,R4 MOV #46.,R5 JSR PC,BLANK MOV #CODE4,R4 MOV #46.,R5 JSR PC,BLANK INCB SERNO1 ;INCREMENT TRANSACTION SERIAL NUMBER INCB SERNO2 INCB NUMBER ;INCREMENT INVOICE NUMBER CLR R0 ;GET CUSTOMER NO. FROM INPUT BUFFER MOVB RCVBUF+DATA+CUST+CUSTSZ-1,R1 ;GET CUST NO (LAST CHAR) BIC #177600,R1 ;MUST BE 1, 2, OR 3 R0 ;GET DATE INTO END OF DAY REPORT MOV #TTIBUF+60.,R1 MOV (R0)+,(R1)+ MOV (R0)+,(R1)+ MOV (R0)+,(R1)+ MOV #MINUTE,TIMDAY ;SET TIME OF DAY TIMER DEM048 = . CLRB MODE ;SET RECEIVE MODE TO EXPECT RING BIS #ENABLE,LKS ;ENABLE REAL-TIME CLOCK CLRB RBUF ;CLEAR DC11 RECEIVE BUFFER BEFORE ENABLE BIS #ENABLE,RCSR ;ENABLE DC11 RECEIVE INTERRUPT 5 Y7V7 **iU@8E79b ׭'*7 5 5|c*ĝx7|   0* BJh*,6* wE@ 7*  zuh*A _8a\F*eA4 +w7 \*E@ !10!20!60 *!40 !70  E MOVB #340,PS ;GETTING TIME JSR R5,MOVE .WORD DATEAS,DATE,6 .WORD TIMEAS,TIME,4 .WORD -1 MOVB (SP)+,PS ;UNLOCK TIMER ;* ;* NOW GET PRODUCT INFORMATION AND PUT IN INVOICE BUFFER ;* JSR R5,TEST .WORD RCVBUF+DATA+FLOW1,FLOWSZ,INV100 ;ANY PRODUCT 1 INFO? JSR R5,MOVE ;YES - MOV INTO INVOICE .WORD KODE1,CODE1,2 .WORD PRNAM1,PROD1,PRSZ  SUB #61,R1 ;CONVERT TO INDEX (0,1,2) BLT INV010 CMP R1,#3 BLT INV015 ; INV010 = . CLR R1 ; INV015 = . ASL R1 MOV ALPHA1(R1),INV020 ;ADDRESS OF CUSTOMER NAME MOV ALPHA2(R1),INV030 ;ADDRESS, AND MOV ALPHA3(R1),INV040 ;CITY JSR R5,MOVE INV020: .WORD 0,NAME,20. ;MOVE CUSTOMER NAME TO INVOICE INV030: .WORD CLR INTCNT ;CLEAR INTERRUPT COUNT (FOR CHECKOUT) CLRB PS ;ALLOW DC11 INTERRUPTS .IFZ DEBUG BR DEM070 .ENDC DEM050 = . .IFZ DEBUG WAIT ;IDLE!! TST MSG01F ;ERROR MESSAGE TO BE TYPED? BEQ DEM050 ;NO IOT ;YES, TYPE -- "TRANSMISSION ERROR XX!" .WORD MSG01 .BYTE WRITE,TTYSLT DEM060 = wwXww/*. I. y. @* E1W  wQ*<wBwHw l@g+*=     w*a L w , = D*w $ w IM m * tw  w y(} *$  26H W *  (*lwJ敱 H .WORD RCVBUF+DATA+FLOW1,VOL1,FLOWSZ .WORD RCVBUF+DATA+T1,TEMP1,TEMPSZ .WORD -1 ; INV100 = . JSR R5,TEST ;AND NOW FOR PRODUCT # 2 .WORD RCVBUF+DATA+FLOW2,FLOWSZ,INV200 JSR R5,MOVE .WORD KODE2,CODE2,2 .WORD PRNAM2,PROD2,PRSZ .WORD RCVBUF+DATA+FLOW2,VOL2,FLOWSZ .WORD RCVBUF+DATA+T2,TEMP2,TEMPSZ .WORD -1 ; INV200 = . JSR R5,TEST ;AND P 0,ADDRESS,20. ;AND ADDRESS INV040: .WORD 0,CITY,20. ;AND CITY/STATE .WORD RCVBUF+DATA+CARNO,CARRIER,CARSZ .WORD RCVBUF+DATA+DRNO,DRIVER,DRSZ .WORD RCVBUF+DATA+CUST,CUSTNO,CUSTSZ .WORD -1 MOVB PS,-(SP) ;LOCKOUT TIMER UPDATE WHILE MOVB #340,PS ;GETTING TIME JSR R5,MOVE .WORD DATEAS,DATE,6 .WORD TIMEAS,TIME,4 .WORD -1 MOVB (SP)+,PS  . TSTB MSG01+STATUS ;DONE? BPL DEM060 DEM070 = . CLR MSG01F ;YES BR DEM050 BR DEM050 .ENDC .PAGE .IFNZ DEBUG ;* ;* SIMULATED DC11 CHECKOUT. THIS SECTION CAUSES THE LOGIC ;* EXPECTED FROM THE DC11 AND CP. THE SIMULATED INPUT MESSAGE ;* IS RETRIEVED FROM THE OPERATOR DEFINED EOD REPORT. ;* $DC11 = . MOV #RING!ERROR,RCSR ;SET RING STAT7 W &*9 q .E7[*]0w. ( w敱.* <H7 W  T *敱 eH7r RC+*  "E@PĝN7 ׭*E27wfE$7wX*E7 w Lw@*5w 7zՀ0 UU@/*Y5 !*} w Vw B,, RODUCT # 3 .WORD RCVBUF+DATA+FLOW3,FLOWSZ,INV250 JSR R5,MOVE .WORD KODE3,CODE3,2 .WORD PRNAM3,PROD3,PRSZ .WORD RCVBUF+DATA+FLOW3,VOL3,FLOWSZ .WORD RCVBUF+DATA+T3,TEMP3,TEMPSZ .WORD -1 ; INV250 = . JSR R5,TEST ;AND FINALLY, PRODUCT #4 .WORD RCVBUF+DATA+FLOW4,FLOWSZ,INV300 JSR R5,MOVE .WORD KODE4,CODE4,2 .WORD PRNAM4,PROD4,PRSZ .WORD  ;UNLOCK TIMER ;* ;* NOW GET PRODUCT INFORMATION AND PUT IN INVOICE BUFFER ;* JSR R5,TEST .WORD RCVBUF+DATA+FLOW1,FLOWSZ,INV100 ;ANY PRODUCT 1 INFO? JSR R5,MOVE ;YES - MOV INTO INVOICE .WORD KODE1,CODE1,2 .WORD PRNAM1,PROD1,PRSZ .WORD RCVBUF+DATA+FLOW1,VOL1,FLOWSZ .WORD RCVBUF+DATA+T1,TEMP1,TEMPSZ .WORD -1 ; INV100 = . JSR R5,TEST ;AND NOW FOR PRODUCT # 2 US (HELLO?) TRAP ; AND SIMULATE DC11 INTERRUPT MOV #CARTRN!ERROR!DETECT,RCSR ;NOW, CARRIER TRANSITION TRAP ;AND CARRIER DETECT MOV #DONE,RCSR MOV #STX,RBUF ;ALWAYS NEED STX TRAP MOV #TTIBUF+DATA,R0 ; $DC11A = . MOV #DONE,RCSR ;SET CHARACTER READY STATUS MOVB (R0)+,RBUF ;GET NEXT CHARACTER CMPB elw* w .E@|Evŀq* Е7 f H7\ < H7NJ* .W 78 Н2Н0Е*  7w   *1  $w  w E7c9*Uw w n   E7A*y4b U@w Lԕ B\* CD CDע פ0* E&f&M  d RCVBUF+DATA+FLOW4,VOL4,FLOWSZ .WORD RCVBUF+DATA+T4,TEMP4,TEMPSZ .WORD -1 ; INV300 = . MOV #R035,-(SP) JSR PC,HEADER ;CREATE HEADER FOR INVOICE MOV #INVOICE,R1 MOV #BCCOUT,R2 INV310 = . MOVB (R1)+,(R0) ;MOVE INVOICE TO THE MOVB (R0)+,(R2) ;DC11 OUTPUT BUFFER JSR PC,DELAY ;DELAY FOR BCC HARDWARE CMP R1,#INVEND ;END OF INVOICE?  .WORD RCVBUF+DATA+FLOW2,FLOWSZ,INV200 JSR R5,MOVE .WORD KODE2,CODE2,2 .WORD PRNAM2,PROD2,PRSZ .WORD RCVBUF+DATA+FLOW2,VOL2,FLOWSZ .WORD RCVBUF+DATA+T2,TEMP2,TEMPSZ .WORD -1 ; INV200 = . JSR R5,TEST ;AND PRODUCT # 3 .WORD RCVBUF+DATA+FLOW3,FLOWSZ,INV250 JSR R5,MOVE .WORD KODE3,CODE3,2 .WORD PRNAM3,PROD3,PRSZ .WORD RCVBUF+DATA+FLOW3, RBUF,#7 ;IS IT A BELL (END OFMESSAGE) BEQ $DC11B ;YES MOV R0,-(SP) ;SAVE ADDRESS TRAP ;SIMULATE MOV (SP)+,R0 BR $DC11A ;GO BACK FOR MORE ; $DC11B = . MOV #ETX,RBUF ;THAT'S ALL, FOLKS! TRAP MOV #123,RBUF ;DUMMY BCC TRAP MOV #345,RBUF TRAP MOV #377,RBUF  BNE INV310 ;BRANCH IF NO MOV #ETX,-(SP) ;OTHERWISE, SELECT ETX AND JSR PC,TRAILR ;GO MAKE A TRAILER MOVB #7,MODE ;SET RECEIVE MODE TO EXPECT ACK/NAK ;AFTER TRANSMITTING INVOICE RCV500 = . MOVB #8.,REPEAT ;SET NO. OF OUTPUT TRYS RCV510 = . MOV #TRNBUF,-(SP) ;CALL DC11 TRANSMIT ROUTINE JSR PC,D11OUT RCV520 = . TSTBVOL3,FLOWSZ .WORD RCVBUF+DATA+T3,TEMP3,TEMPSZ .WORD -1 ; INV250 = . JSR R5,TEST ;AND FINALLY, PRODUCT #4 .WORD RCVBUF+DATA+FLOW4,FLOWSZ,INV300 JSR R5,MOVE .WORD KODE4,CODE4,2 .WORD PRNAM4,PROD4,PRSZ .WORD RCVBUF+DATA+FLOW4,VOL4,FLOWSZ .WORD RCVBUF+DATA+T4,TEMP4,TEMPSZ .WORD -1 ; INV300 = . MOV #R035,-(SP) JSR PC,HEADER ;CRE ;AND THE GRAND FINALE TRAP MOV #17777,R1 ;DELAY FOR S/W TO RESPOND, ; ;SEND ACK (3 SEC DELAY) $DC11C = . DEC R1 BNE $DC11C MOV #EOT,RBUF ;SEND LINE TURNAROUND - EOT TRAP ; ;NOW IT'S UP TO THE PROGRAM $DC11D = . ;TO SEND RESPONSE MESSAGE CMP SWITCH,#-1 BNE $DC11D ; UPDATE DEMO.P09 04.26.72 ; UPDATE DEMO.P08 04.20.72 ; UPDATE DEMO.P07 04.19.72 ; UPDATE DEMO.P06 04.17.72 ; UPDATE DEMO.P05 04.13.72 ELITE HUB DEMO ; UPDATE DEMO.P04 04.13.72 ELITE HUB DEMO ; UPDATE DEMO.P03 04.13.72 ELITE HUB DEMO ; UPDATE DEMP.P02 04.12.72 ELITE ; ; LODT DEMO ; DEBUG = 0 ;0 = NORMAL PROGRAM OPERATION WITH DC11 ! TRNBUF+STATUS ;ALL DONE? BMI RCV520 ;NO .IFZ DEBUG MOV #ACKTIM,ACKTMR ;SET ACK TIMER .ENDC JMP RCV070 ;GO WAIT FOR ACK ; ; PROCESS ERRONEOUS AUDIT TRAIL ; RCV530 = . MOVB #ASR33,-(SP) ;PUT MSG HEADER IN TRANSMIT BUFFER JSR PC,HEADER ;SPECIFY OUTPUT TO ASR33 MOV #TMSG00,R1 ;GET MSG ADDRESS RCV550 = . MOVB (R1)+,(R0) ;MOVE "ATE HEADER FOR INVOICE MOV #INVOICE,R1 MOV #BCCOUT,R2 INV310 = . MOVB (R1)+,(R0) ;MOVE INVOICE TO THE MOVB (R0)+,(R2) ;DC11 OUTPUT BUFFER JSR PC,DELAY ;DELAY FOR BCC HARDWARE CMP R1,#INVEND ;END OF INVOICE? BNE INV310 ;BRANCH IF NO MOV #ETX,-(SP) ;OTHERWISE, SELECT ETX AND JSR PC,TRAILR ;GO MAKE A TRAILER MOVB #7,MODE # BR $DC11 ;REPEAT WHEN SWITCHES = 177777 .ENDC .PAGE ; ; DC11 RECEIVE INTERRUPT ROUTINE ; RCVINT = . JSR R5,PUSHR ;SAVE REGS. INC INTCNT ;INCR INTERRUPT COUNT (FOR CHECKOUT) MOV RCSR,R5 ;IS RCSR ERROR BIT SET? BMI RCV030 ;YES MOVB MODE,R0 ;NO, BRANCH ON RECEIVE MODE CMPB R0,#2 ;***** TEST MODE DURING CHECKOUT ***$ ;1 = DEBUG CHECKOUT WITH SIMULATED DC11 DOS = 0 ;0 = RUN ON STAND ALONE SYSTEM ;1 = RUN ON DOS SYSTEM .IFNZ DOS .IFNZ DEBUG .CSECT .ENDC .IFZ DEBUG .ASECT .ENDC .ENDC .IFZ DOS .ASECT .ENDC ; REGISTER DEFINITIONS ; ; R0 = 0% R1 = 1% R2 = 2% R3 = 3% R4 %A CHAR TO BUFFER MOVB (R0)+,BCCOUT ;CALC BCC JSR PC,DELAY ;DELAY FOR BCC HDWR CMP R1,#TMSG01 ;ALL CHARS MOVED? BLE RCV550 ;NO MOVB #8.,MODE ;SET RECEIVE MODE TO EXPECT ACK/NAK RCV560 = . MOVB #ETX,-(SP) ;PUT TRAILER INTO BUFFER JSR PC,TRAILR ;AFTER SENDING BR RCV500 ;GO TRANSMIT TO TERMINAL ; ; PROCESS MA&;SET RECEIVE MODE TO EXPECT ACK/NAK ;AFTER TRANSMITTING INVOICE RCV500 = . MOVB #8.,REPEAT ;SET NO. OF OUTPUT TRYS RCV510 = . MOV #TRNBUF,-(SP) ;CALL DC11 TRANSMIT ROUTINE JSR PC,D11OUT RCV520 = . TSTB TRNBUF+STATUS ;ALL DONE? BMI RCV520 ;NO .IFZ DEBUG MOV #ACKTIM,ACKTMR ;SET ACK TIMER .ENDC JMP RCV070 '**** BGE RCV005 BR RCV038 RCV005 = . ASL R0 JMP @RCV010-4(R0) ; ; BRANCH TABLE ; RCV010 = . .WORD RCV100 ;RECEIVE STX MODE = 2 .WORD RCV150 ;RECEIVE DATA = 3 .WORD RCV200 ;RECEIVE BCC(MSB) = 4 .WORD RCV250 ;RECEIVE BCC(LSB) = 5 .WORD RCV320 ;RECEIVE EOT = 6 ( = 4% R5 = 5% SP = 6% PC = 7% PS = 177776 LKS = 177546 ;LINE FREQ. CLOCK STATUS REG. BR4 = 200 ;HARDWARE PRIORITY LEVELS OF DEVICES BR5 = 240 BR6 = 300 .IFZ DEBUG RCSR = 174000 ;DC11 RECEIVER STATUS REGISTER TCSR = 174004 ;DC11 TRANSMITTER STATUS REGISTER RBUF = 174002 ;DC11 RECEIVER BUFFER TBUF = 1740)NUAL ENTRY ; RCV570 = . MOV #RCVBUF+MSGDAT,R0 ;GET ADDRESS OF MESSAGE DATA CMPB (R0),#'. ;IS FIRST CHAR A PERIOD? BEQ RCV620 ;YES MOVB #ASR33,-(SP) ;SPECIFY OUTPUT TO ASR33 JSR PC,HEADER MOV #TMSG01,R1 ;GET MSG ADDRESS RCV572 = . MOVB (R1)+,(R0) ;MOVE A CHAR TO BUFFER MOVB (R0)+,BCCOUT ;CALC BCC JSR PC,DELAY ;DELAY FOR BCC HARDWARE *;GO WAIT FOR ACK ; ; PROCESS ERRONEOUS AUDIT TRAIL ; RCV530 = . MOVB #ASR33,-(SP) ;PUT MSG HEADER IN TRANSMIT BUFFER JSR PC,HEADER ;SPECIFY OUTPUT TO ASR33 MOV #TMSG00,R1 ;GET MSG ADDRESS RCV550 = . MOVB (R1)+,(R0) ;MOVE A CHAR TO BUFFER MOVB (R0)+,BCCOUT ;CALC BCC JSR PC,DELAY ;DELAY FOR BCC HDWR CMP R1,#TMSG01 ;ALL CHARS MOVED? BLE RCV550+ .WORD RCV700 ;RECEIVE ACK/NAK = 7 .WORD RCV700 ;RECEIVE ACK/NAK = 8 .WORD RCV700 ;RECEIVE ACK/NAK = 9 .WORD RCV700 ;RECEIVE ACK/NAK = 10 ; RCV020 = . JSR R5,POPR ;RESTORE REGS. RTI ;RETURN ; ; ERROR BIT PROCESSING ; RCV030 = . MOVB MODE,R4 ;BRANCH ON MODE BEQ RCV040 ,06 ;DC11 TRANSMISSION BUFFER .ENDC RVECTR = 300 ;DC11 RECEIVER INTERRUPT VECTOR TVECTR = 304 ;DC11 TRASMISSION INTERRUPT VECTOR CVECTR = 100 ;LINE FREQUENCY CLOCK INTERRUPT VECTOR .IFZ DEBUG CLRBCC = 174770 ;CLEAR BCC BCCOUT = 174772 ;BCC OUTPUT REGISTER BCCMSB = 174774 ;MSB OF RESULTING BCC BCCLSB = 174776 ;LSB OF RESULTING BCC .ENDC - CMP R1,#TMSG02 ;ALL CHARS MOVED? BLE RCV572 ;NO MOVB #10.,MODE ;SET RECEIVE MODE TO BR RCV560 ;EXPECT ACK/NAK ; ; PRINT CONTENTS OF RCVBUF AT HUB ; RCV575 = . BIC #DTRDY,RCSR ;NO, DROP LINE BY RESET DATA TERM. RDY CLRB MODE ;SET RECEIVE MODE TO EXPECT RING RCV578 = . MOV RCVBUF+COUNT,R1 ;GET NO. CHARS IN MSG (LESS HEADER) SUB #H. ;NO MOVB #8.,MODE ;SET RECEIVE MODE TO EXPECT ACK/NAK RCV560 = . MOVB #ETX,-(SP) ;PUT TRAILER INTO BUFFER JSR PC,TRAILR ;AFTER SENDING BR RCV500 ;GO TRANSMIT TO TERMINAL ; ; PROCESS MANUAL ENTRY ; RCV570 = . MOV #RCVBUF+MSGDAT,R0 ;GET ADDRESS OF MESSAGE DATA CMPB (R0),#'. ;IS FIRST CHAR A PERIOD? BEQ RCV620 / ;RING CMPB R4,#1 ;EXPECTING CARRIER TRANS. AFTER RING? BEQ RCV050 ;YES BIT #CARTRN,R5 ;OTHER, HAVE WE LOST RECEIVE CARRIER? BNE RCV080 ;YES INCB RCVERR ;NO, INCR RECEIVE ERROR COUNT RCV038 = . MOVB RBUF,R4 ;CLEAR RCSR DONE BIT TO PREVENT OVERRUN BR RCV020 ;GO RETURN ; ; PROCESS A RING ; RCV040 = . BIT #RING,0 SWITCH = 177570 ;CONSOLE SWITCH ADDRESS ; ; SYMBOLS REQUIRED FOR IOX CALLS ; KBDSLT = 0 ;TTY KEYBOARD SLOT TTYSLT = 1 ;TTY TELEPRINTER SLOT LSRSLT = 2 ;LOW-SPEED PT READER SLOT LSPSLT = 3 ;LOW-SPEED PUNCH SLOT RESET = 2 ;RESET COMMAND RESTRT = 3 ;RESTART COMMAND INIT = 1 ;INIT COMMAND READ = 11 1DRSIZ,R1 MOV R1,TTOBUF+COUNT ;PUT CHAR COUNT INTO TTY BUFFER MOV #TTOBUF+DATA,R2 ;GET TTY BUFFER DATA ADDRESS MOV #RCVBUF+MSGDAT,R0 ;GET ADDRESS OF RCVBUF DATA RCV580 = . MOVB (R0),(R2)+ ;MOVE DATA FROM DC11 RECEIVE BUFFER CMPB (R0)+,#CR ;IS CHAR A CR? BNE RCV582 ;NO MOVB #LF,(R2)+ ;YES, INSERT A LF FOR TYPEOUT INC TTOBUF+COUNT RCV582 = . DEC 2;YES MOVB #ASR33,-(SP) ;SPECIFY OUTPUT TO ASR33 JSR PC,HEADER MOV #TMSG01,R1 ;GET MSG ADDRESS RCV572 = . MOVB (R1)+,(R0) ;MOVE A CHAR TO BUFFER MOVB (R0)+,BCCOUT ;CALC BCC JSR PC,DELAY ;DELAY FOR BCC HARDWARE CMP R1,#TMSG02 ;ALL CHARS MOVED? BLE RCV572 ;NO MOVB #10.,MODE ;SET RECEIVE MODE TO BR RCV560 ;EXPECT ACK/NA3R5 ;IS IT A RING? BEQ RCV020 ;NO, IGNORE INTERRUPT BIS #DTRDY,RCSR ;SET DATA TERMINAL READY MOVB #1,MODE ;SET MODE TO EXPECT CARRIER TRANSITION BR RCV020 ;GO RETURN ; ; PROCESS CARRIER TURNON ; RCV050 = . BIT #CARTRN,R5 ;IS INT. A CARRIER TRANSITION? BEQ RCV020 ;NO, IGNORE INTERRUPT RCV060 = . BIT #DETECT,RCSR ;IS CARRIER DETECT ON?4;READ COMMAND WRITE = 12 ;WRITE COMMAND EOF = 040 ;EOF BIT IN STATUS BYTE CR = 15 ;ASCII FOR CR LF = 12 ;ASCII FOR LF ; ; DC11 RECEIVE CONTROL STATUS REGISTER (RCSR) BITS ; ERROR = 100000 CARTRN = 040000 RING = 020000 OVERUN = 010000 LENGTH = 000000 ;8 BITS/CHAR DONE = 000200 ENABLE = 000100 PARITY = 000040 RSPEED = 5 R1 ;TO TTY OUTPUT BUFFER BNE RCV580 IOT ;PRINT MSG ON HUB TTY .WORD TTOBUF .BYTE WRITE,TTYSLT RCV585 = . TSTB TTOBUF+STATUS BPL RCV585 JMP RCV070 ;GO ENABLE RECEIVE INTERRUPT ; ; PREPARE END OF DAY REPORT FOR OUTPUT ; RCV620 = . MOVB #ASR33,-(SP) ;PUT MSG HDR IN BUF JSR PC,HEADER MOV #TTIBUF+DATA,R1 ;GET D6K ; ; PRINT CONTENTS OF RCVBUF AT HUB ; RCV575 = . BIC #DTRDY,RCSR ;NO, DROP LINE BY RESET DATA TERM. RDY CLRB MODE ;SET RECEIVE MODE TO EXPECT RING RCV578 = . IOT ;OUTPUT CR, LF, LF TO HUB TTY .WORD CRLFLF .BYTE WRITE,TTYSLT MOV RCVBUF+COUNT,R1 ;GET NO. CHARS IN MSG (LESS HEADER) SUB #HDRSIZ,R1 MOV R1,TTOBUF+COUNT ;PUT CHAR COUNT INTO TTY BUFFE7 BEQ RCV080 ;NO MOVB #2,MODE ;SET RECEIVE MODE TO EXPECT STX RCV065 = . CLRB RCVERR ;ZERO ERROR COUNT CLR RCVBUF+COUNT ;ZERO CHAR COUNT RCV070 = . CLRB RBUF ;INSURE RCSR DONE BIT CLEARED! BIS #ENABLE,RCSR ;ENABLE DC11 RECEIVE INT. BR RCV020 ;GO RETURN ; ; LOST RECEIVE CARRIER ; RCV080 = . MOV #ERR00,MSG01F ;PUT8 000020 ;DC11-AB 1200 BAUD DETECT = 000004 DTRDY = 000001 ; ; DC11 TRANSMIT CONTROL STATUS REGISTER (TCSR) BITS ; STOPCD = 000400 READY = 000200 TSPEED = 000020 ;DC11-AB 1200 BAUD CLRSND = 000002 REQSND = 000001 ; ; HUB DC11 & TTY MESSAGE BUFFER OFFSETS ; STATUS = 3 COUNT = 4 DATA = 6 HDRSIZ = 17. ;NO. OF BYTES IN HDR OF MSG FROM TERM'L MSGDAT 9ATA ADDRESS MOV TTIBUF+COUNT,R3 ADD #TTIBUF+DATA,R3 ;GET ADDRESS OF END OF DATA RCV630 = . MOVB (R1)+,(R0) ;MOVE CHAR TO BUF MOVB (R0)+,BCCOUT ;CALC BCC JSR PC,DELAY ;DELAY FOR BCC HDWR CMP R1,R3 ;ARE ALL CHARS OUT BLT RCV630 ;NO MOVB #ETX,-(SP) ;PUT ETX TRAILER IN BUF JSR PC,TRAILR MOVB #9.,MODE ;SET MODE TO EXPECT AC:R MOV #TTOBUF+DATA,R2 ;GET TTY BUFFER DATA ADDRESS MOV #RCVBUF+MSGDAT,R0 ;GET ADDRESS OF RCVBUF DATA RCV580 = . MOVB (R0),(R2)+ ;MOVE DATA FROM DC11 RECEIVE BUFFER CMPB (R0)+,#CR ;IS CHAR A CR? BNE RCV582 ;NO MOVB #LF,(R2)+ ;YES, INSERT A LF FOR TYPEOUT INC TTOBUF+COUNT RCV582 = . DEC R1 ;TO TTY OUTPUT BUFFER BNE RCV580 ; ERROR CODE "00" IN ERROR MSG RCV090 = . BIC #ENABLE,RCSR ;DISABLE DC11 INTERRUPTS BIC #DTRDY,RCSR ;RESET DATA TERMINAL READY CLRB MODE ;SET RECEIVE MODE TO EXPECT RING BR RCV070 ;GO ENABLE RECEIVE INTERRUPT ; ; PROCESS STX ; RCV100 = . MOVB RBUF,R4 CMPB R4,#STX BNE RCV120 RCV110 = . CLR CLRBCC ;CLEAR BCC REGISTER MOVB<= 23. ;BEGINNING OF MESSAGE DATA (LESS HEADER) ; ; DC11 MSG BUFFER FLAGS ; BUSY = 200 ;BIT 7 OF STATUS BYTE; SET WHEN BUSY ; ; TIMER VALUES ; ACKTIM = 180. ;TIMEOUT FOR ACK IN 1/60 SECOND TICS EOTTIM = 180. ;TIMEOUT FOR EOT IN 1/60 SECOND TICS ; ; MESSAGE ACTION CODES ; .IFZ DEBUG AUTOTR = 130261 ;ASCII 01 AUDTRL = 130262 ;ASCII 02 AUDERR = =K/NAK BR RCV500 ;GO OUTPUT REPORT ; ; PROCESS ACK/NAK AFTER SENDING RESPONSE TO CP ; RCV700 = . BIC #ENABLE,RCSR ;DISABLE DC11 RCV INT. MOVB RBUF,R4 ;GET CHAR CMPB R4,#ACK ;IS CHAR AN ACK? BNE RCV810 ;NO CLR ACKTMR ;RESET ACK TIMER JMP @RCV705-14.(R0) ;BRANCH ON MODE RCV705 = . .WORD RCV710 ;7, RECEIVE ACK AFTER SENDIN> IOT ;PRINT MSG ON HUB TTY .WORD TTOBUF .BYTE WRITE,TTYSLT RCV585 = . TSTB TTOBUF+STATUS BPL RCV585 JMP RCV070 ;GO ENABLE RECEIVE INTERRUPT ; ; PREPARE END OF DAY REPORT FOR OUTPUT ; RCV620 = . MOVB #ASR33,-(SP) ;PUT MSG HDR IN BUF JSR PC,HEADER MOV #TTIBUF+DATA,R1 ;GET DATA ADDRESS MOV TTIBUF+COUNT,R3 ADD #TTIBUF+? #3,MODE ;SET RECEIVE MODE TO EXPECT DATA BR RCV020 ;GO RETURN RCV120 = . BIT #PARITY,R5 ;IS PARITY GOOD? BEQ RCV020 ;YES, IGNORE INTERRUPT INCB RCVERR ;NO, INCR ERROR COUNT BR RCV110 ;ASSUME IT WAS STX W/BAD PARITY ; ; PROCESS DATA CHAR ; RCV150 = . BIT #DONE,R5 ;IS CHAR AVAIL? BEQ RCV020 ;NO, FALSE INTERRUPT @ 130266 ;ASCII 06 MANUAL = 130264 ;ASCII 04 CONTIN = 130267 ;ASCII 07 .ENDC .IFNZ DEBUG AUTOTR = 030061 ;ASCII 01 AUDTRL = 030062 ;ASCII 02 AUDERR = 030066 ;ASCII 06 MANUAL = 030064 ;ASCII 04 CONTIN = 030067 ;ASCII 07 .ENDC ; ; SPECIAL CHAR IN MSG FOR TERMINAL DEVICE SELECTION ; R035 = 262 ;ASCII CODE FOR AG INVOICE .WORD RCV800 ;8, ACK AFTER SENDING AUDIT ERR MSG .WORD RCV708 ;9, ACK AFTER SENDING EOD REPORT .WORD RCV575 ;10, ACK AFTER SENDING MANUAL ACCEPT ; RCV708 = . BIC #DTRDY,RCSR ;DROP LINE - RESET DATA TERMINAL READY CLRB MODE ;SET MODE TO EXPECT RING JMP RCV070 ;GO ENABLE RECEIVE INTERRUPT ; RCV710 = . BIC #DTRDY,RCSR ;DROP LINE - RESET DBDATA,R3 ;GET ADDRESS OF END OF DATA RCV630 = . MOVB (R1)+,(R0) ;MOVE CHAR TO BUF MOVB (R0)+,BCCOUT ;CALC BCC JSR PC,DELAY ;DELAY FOR BCC HDWR CMP R1,R3 ;ARE ALL CHARS OUT BLT RCV630 ;NO MOVB #ETX,-(SP) ;PUT ETX TRAILER IN BUF JSR PC,TRAILR MOVB #9.,MODE ;SET MODE TO EXPECT ACK/NAK BR RCV500 ;GO OUTPUT REPORT ; ; C MOVB RBUF,R4 ;GET CHAR MOV R4,BCCOUT ;OUTPUT CHAR TO BCC REGISTER CMPB R4,#ETX ;IS CHAR AN ETX? BEQ RCV180 ;YES CMPB R4,#ETB ;IS CHAR AN ETB? BEQ RCV180 ;YES MOV RCVBUF+COUNT,R0 ;GET COUNT CMP R0,#273. ;IS DATA CHAR COUNT .GE. 273? BGE RCV170 ;YES INC RCVBUF+COUNT ;INCR CHAR COUNT IN BUFFER HEADER MODR0-35 SELECTION ASR33 = 261 ;ASCII CODE FOR ASR-33 SELECTION ; ; EQUATE PARAMETERS FOR CP DATA FORMAT ; TAB = 11 FORM = 14 CARNO = 25. ;CARRIER NUMBER CARSZ = 4 ;CARRIER SIZE CUST = 35. ;CUSTOMER NO. CUSTSZ = 10. ;NO. CHAR. IN CUSTOMER NUMBER DRNO = 51. ;DRIVER NO. DRSZ = 3 ;NO. CHAR. FLOW1 = 66. EATA TERMINAL READY CLRB MODE ;SET MODE TO EXPECT RING ;* * * * * * * F R I L L * * * * * * * BR RCV900 ;GO PUT INVOICE ON MAG TAPE ; RCV800 = . BIC #DTRDY,RCSR ;DROP LINE CLRB MODE ;SET MODE TO EXPECT RING IOT ;TYPE -- "ERROR IN AUDIT TRAIL!" .WORD MSG03 .BYTE WRITE,TTYSLT RCV805 = . TSTB MSG03+STATUS BPL RCV805 FPROCESS ACK/NAK AFTER SENDING RESPONSE TO CP ; RCV700 = . BIC #ENABLE,RCSR ;DISABLE DC11 RCV INT. MOVB RBUF,R4 ;GET CHAR CMPB R4,#ACK ;IS CHAR AN ACK? BNE RCV810 ;NO CLR ACKTMR ;RESET ACK TIMER JMP @RCV705-14.(R0) ;BRANCH ON MODE RCV705 = . .WORD RCV710 ;7, RECEIVE ACK AFTER SENDING INVOICE .WORD RCV800 ;8, ACK AFTER SENDING AUDIT GVB R4,RCVBUF+DATA(R0) ;PUT DATA INTO BUFFER RCV160 = . BR RCV020 ;GO RETURN ; RCV170 = . INCB RCVERR ;INCR ERROR COUNT BR RCV160 ;GO RETURN ; ; PROCESS ETX/ETB ; RCV180 = . MOVB #4,MODE ;SET MODE FOR RECEIVING BCC(MSB) BR RCV020 ;GO RETURN ; ; PROCESS MOST SIG. BYTE OF BCC ; RCV200 = . MOVB RBUF,R4 CMPB R4H;FLOW METER PRODUCT 1 FLOW2 = 73. ;FLOW METER PRODUCT 2 FLOW3 = 80. ;FLOW METER PRODUCT 3 FLOWSZ = 6 ;NO. CHAR. IN FLOW METER DATA T1 = 136. ;TEMP OF PRODUCT 1 T2 = 140. ;TEMP OF PRODUCT 2 T3 = 144. ;TEMP OF PRODUCT 3 TEMPSZ = 3 ;NO. CHAR. IN TEMP ; ; MISCELLANEOUS SYMBOLS ; STX = 202 ;START OF TEXT ETX = I BR RCV578 ;GO TYPE CONTENTS OF RCVBUF ;ON HUB TTY ; ; ACK NOT RECEIVED, TRANSMIT AGAIN ; RCV810 = . CMPB R4,#NAK ;IS CHAR A NAK? BEQ RCV815 ;YES JMP RCV070 ;NO, IGNORE INTERRUPT RCV815 = . CLR ACKTMR ;RESET ACK TIMER DECB REPEAT ;DECR REPEAT COUNT BEQ RCV820 ;ALL TRYS EXHAUSTED? JMP JERR MSG .WORD RCV708 ;9, ACK AFTER SENDING EOD REPORT .WORD RCV575 ;10, ACK AFTER SENDING MANUAL ACCEPT ; RCV708 = . BIC #DTRDY,RCSR ;DROP LINE - RESET DATA TERMINAL READY CLRB MODE ;SET MODE TO EXPECT RING JMP RCV070 ;GO ENABLE RECEIVE INTERRUPT ; RCV710 = . BIC #DTRDY,RCSR ;DROP LINE - RESET DATA TERMINAL READY CLRB MODE ;SET MODE TO EXPECT K,BCCMSB ;DOES IT MATCH? BNE RCV210 ;NO RCV205 = . MOVB #5,MODE ;YES, SET MODE FOR RECEIPT OF BCC(LSB) JMP RCV020 ;GO RETURN RCV210 = . INCB RCVERR ;INCR ERROR COUNT BR RCV205 ;GO SET MODE ; ; PROCESS LEAST SIG. BYTE OF BCC ; RCV250 = . MOVB RBUF,R4 CMPB R4,BCCLSB ;DOES IT MATCH? BEQ RCV260 ;YES L 003 ;END OF TEXT ETB = 027 ;END OF TRANSMISSION BLOCK EOT = 204 ;EOT - LINE TURNAROUND ACK = 006 ;ACKNOWLEDGE NAK = 225 ;NEGATIVE ACKNOWLEDGE FF = 377 ;HEX "FF" INITL = 111111 ;CONSOLE SWITCH PATTERN TO BYPASS ;DEFINITION OF EOD REPORT .PAGE ; ; PROGRAM DATA ; ; .IFZ DOS . = MRCV510 ;NO, TRY AGAIN ; RCV820 = . MOV #ERR01,MSG01F ;SET UP HUB ERROR MSG JMP RCV090 ;GO DROP LINE AND TYPE ERROR MESSAGE ; ; ; PREPARE INVOICE DATA IN EBCDIC CHARS AND WRITE ON MAG TAPE ; RCV900 = . MOV #TRNBUF+DATA+11.,R0 ;GET ADDR OF INVOICE IN BUFFER RCV905 = . MOVB (R0)+,R3 ;GET A CHAR ; ; DO ASCII/EBCDIC CONVERSION ; CMPB R3,#40 ;IS CHAR IN ASCII/NRING ;* * * * * * * F R I L L * * * * * * * BR RCV900 ;GO PUT INVOICE ON MAG TAPE ; RCV800 = . BIC #DTRDY,RCSR ;DROP LINE CLRB MODE ;SET MODE TO EXPECT RING IOT ;TYPE -- "ERROR IN AUDIT TRAIL!" .WORD MSG03 .BYTE WRITE,TTYSLT RCV805 = . TSTB MSG03+STATUS BPL RCV805 BR RCV578 ;GO TYPE CONTENTS OF RCVBUF O INCB RCVERR ;NO, INCR ERROR COUNT RCV260 = . BIC #ENABLE,RCSR ;DISABLE RECEIVE INTERRUPTS JSR R5,MOVE ;SAVE JULIAN DATE FROM TERMINAL .WORD RCVBUF+DATA+10.,JULDAY,3,-1 TSTB RCVERR ;ANY ERRORS IN TRANSMISSION? BNE RCV300 ;YES MOVB #ACK,TRNBUF+DATA ;PUT "ACK,FF" INTO DC11 OUTPUT BUFFER MOVB #FF,TRNBUF+DATA+1 MOV #2,TRNBUF ;SET NO. CHARS TO 2 P400 .ENDC . = .+200 STACK = . ;SYSTEM STACK AR(A .IFNZ DEBUG RCSR: .WORD 0 ;DC11 RECEIVE AND RBUF: .WORD 0 ; TRANSMIT BUFFERS TCSR: .WORD 0 ; FOR DEMO CHECKOUT TBUF: .WORD 0 ; WITHOUT DC11 H/W AND CP CLRBCC: .WORD 0 ;CLEAR BCC BCCOUT: .WORD 0 ;BCC OUTPUT REGISTER BCCMSB: .WORD 123 ;MSB OF RESULTING BCC BCCLSB: QEBCDIC TABLE? BLT RCV940 ;NO CMPB R3,#132 BGT RCV960 ;NO MOV R3,R5 ;YES, GET EBCDIC CHAR SUB #40,R5 MOVB EBCDIC(R5),R3 RCV908 = . ; ; FLIP DATA IN EACH BYTE OF INVOICE (MAG TAPE CONTROLLER FIX) ; MOV #1,R4 ;SET MASK TO BIT 0 RCV910 = . ASLB R3 ;SHIFT LSB TO C BCS RCV920 ;WAS LSB SET BICB R ;ON HUB TTY ; ; ACK NOT RECEIVED, TRANSMIT AGAIN ; RCV810 = . CMPB R4,#NAK ;IS CHAR A NAK? BEQ RCV815 ;YES JMP RCV070 ;NO, IGNORE INTERRUPT RCV815 = . CLR ACKTMR ;RESET ACK TIMER DECB REPEAT ;DECR REPEAT COUNT BEQ RCV820 ;ALL TRYS EXHAUSTED? JMP RCV510 ;NO, TRY AGAIN ; RCV820 = . MOV S MOV #TRNBUF,-(SP) ;CALL DC11 OUTPUT ROUTINE JSR PC,D11OUT RCV280 = . TSTB TRNBUF+STATUS ;ALL DONE? BMI RCV280 ;NO MOV #EOTTIM,EOTTMR ;SET EOT TIMER MOVB #6,MODE ;SET RECEIVE MODE TO EXPECT EOT JMP RCV070 ;GO WAIT FOR EOT ; ; RCV300 = . MOVB #NAK,TRNBUF+DATA ;PUT "NAK,FF" INTO DC11 OUTPUT BUFFER MOVB #FF,TRNBUF+DATA+1 MOV #2,TRNT.WORD 345 ;LSB OF RESULTING BCC .ENDC ALPHA1: .WORD NAME1,NAME2,NAME3 ;POINTER TO CUSTOMER NAME ALPHA2: .WORD ADDR1,ADDR2,ADDR3 ;POINTER TO CUSTOMER ADDRESS ALPHA3: .WORD CITY1,CITY2,CITY3 ;POINTER TO CUSTOMER CITY NAME1: .ASCII 'ACME OIL COMPANY ' NAME2: .ASCII 'AJAX OF CALIFORNIA ' NAME3: .ASCII 'ALPHA OIL CORPORATION' ADDR1: .ASCII '63321 SO. SEVENTH ' ADDR2: .ASCII '12255 FOURTH STREET ' ADDR3: .ASCII 'P.O. BOX 1234 U R4,R5 ;NO, CLEAR APPROPRIATE BIT IN RESULT RCV915 = . ASLB R4 ;SHIFT MASK TO NEXT MOST SIG. BIT BEQ RCV925 ;DONE? BR RCV910 ;NO RCV920 = . BISB R4,R5 ;SET APPROPRIATE BIT BR RCV915 ;CONTINUE RCV925 = . MOVB R5,-1(R0) ;REPLACE BYTE WITH ITS FLIP CMP R0,#TRNBUF+DATA+11.+INVEND-INVOICE ;ALL DATA FLIPPED? BMI V#ERR01,MSG01F ;SET UP HUB ERROR MSG JMP RCV090 ;GO DROP LINE AND TYPE ERROR MESSAGE ; ; ; PREPARE INVOICE DATA IN EBCDIC CHARS AND WRITE ON MAG TAPE ; RCV900 = . MOV #TRNBUF+DATA+11.,R0 ;GET ADDR OF INVOICE IN BUFFER RCV905 = . MOVB (R0)+,R3 ;GET A CHAR ; ; DO ASCII/EBCDIC CONVERSION ; CMPB R3,#40 ;IS CHAR IN ASCII/EBCDIC TABLE? BLT RCV940 ;NO CMPB R3WBUF ;SET NO. CHARS TO 2 MOV #TRNBUF,-(SP) ;CALL DC11 OUTPUT ROUTINE JSR PC,D11OUT RCV310 = . TSTB TRNBUF+STATUS ;ALL DONE? BMI RCV310 ;NO JMP RCV060 ;GO WAIT FOR REPEATED MSG FROM TERMINAL ; ; PROCESS RECEIPT OF EOT ; RCV320 = . MOVB RBUF,R4 ;MOVE CHAR TO REG (FOR CHECKOUT) CMPB R4,#EOT ;IS CHAR AN EOT? BEQ RCV322 ;YES X ' CITY1: .ASCII 'SAN DIEGO, CALIF. ' CITY2: .ASCII 'LOS ANGELES, CALIF ' CITY3: .ASCII 'SANTA FE SPRINGS, CAL' .EVEN DATEAS: .ASCII '051072' KODE1: .ASCII '01' KODE2: .ASCII '02' KODE3: .ASCII '03' PRNAM1: .ASCII 'REGULAR ' PRNAM2: .ASCII 'PREMIUM ' PRNAM3: .ASCII 'LOW LEAD ' PRSZ = 10. .PAGE ;* ;* D U M M Y I N V O I C E ;* INVOICE = . .BYTE CR .ASCII '000' SERNO1: .ASCII '0' .BYTYRCV905 ;NO, GET NEXT BYTE ; ; WRITE INVOICE ON MAG. TAPE ; RCV930 = . MOV #11.,R5 ;SET NO. OF TRYS FOR WRITE RCV932 = . MOV #TRNBUF+DATA+11.,MA ;YES, PUT INVOICE ADDRESS IN ;MEMORY ADDRESS REGISTER MOV #INVEND-INVOICE/2,WC ;SET WORD COUNT DEC R5 ;DECR REPEAT COUNT BGT RCV933 ;ALL TRYS EXHAUSTED? MOV #WEXG,COM ;YES, WRITE EXZ,#132 BGT RCV960 ;NO MOV R3,R5 ;YES, GET EBCDIC CHAR SUB #40,R5 MOVB EBCDIC(R5),R3 RCV908 = . ; ; FLIP DATA IN EACH BYTE OF INVOICE (MAG TAPE CONTROLLER FIX) ; MOV #1,R4 ;SET MASK TO BIT 0 RCV910 = . ASLB R3 ;SHIFT LSB TO C BCS RCV920 ;WAS LSB SET BICB R4,R5 ;NO, CLEAR APPROPRIATE BIT IN RESULT RCV915 = [ JMP RCV020 ;NO, IGNORE INTERRUPT RCV322 = . BIC #ENABLE,RCSR ;DISABLE RECEIVE INTERRUPT CLR EOTTMR ;RESET EOT TIMER CLR R4 BISB RCVBUF+DATA+5,R4 ;GET SWAB R4 ; ACTION BISB RCVBUF+DATA+6,R4 ; CODE CMP R4,#AUTOTR ;IS IT AUTO TRANSACTION? BEQ RCV330 ;YES CMP R4,#AUDTRL ;IS IT AUDIT TRAIL? \E CR,LF,TAB,TAB,TAB .ASCII ' ' NAME: .ASCII ' COLL' .BYTE CR,LF,TAB,TAB,TAB .ASCII ' ' ADDRESS:.ASCII ' ' .BYTE CR,LF,TAB,TAB,TAB .ASCII ' ' CITY: .ASCII ' ' .BYTE CR,LF,LF,LF,LF CARRIER:.ASCII 'XXXX CONSOLIDATED CARRIERS ' DRIVER: .ASCII 'XXX' .BYTE TAB,TAB .ASCII ' 0000' NUMBER: .ASCII '0' .BYTE ]TENDED GAP JSR PC,TAPRDY ;AT FRONT OF RECORD MOV #10.,R5 ;SET REPEAT C3UNT BR RCV935 RCV933 = . MOV #WRT,COM ;WRITE THE INVOICE ON TAPE JSR PC,TAPRDY RCV935 = . BIT #ERR,STAT ;IS FILE GOOD? BNE RCV938 ;NO, GO DO IT AGAIN JMP RCV578 ;GO TYPE CONTENTS OF RCVBUF AT HUB RCV938 = . BIC #ERR,STAT ;CLEAR ERROR BIT ^. ASLB R4 ;SHIFT MASK TO NEXT MOST SIG. BIT BEQ RCV925 ;DONE? BR RCV910 ;NO RCV920 = . BISB R4,R5 ;SET APPROPRIATE BIT BR RCV915 ;CONTINUE RCV925 = . MOVB R5,-1(R0) ;REPLACE BYTE WITH ITS FLIP CMP R0,#TRNBUF+DATA+11.+INVEND-INVOICE ;ALL DATA FLIPPED? BMI RCV905 ;NO, GET NEXT BYTE ; ; WRITE INVOICE ON MAG. TA_ BEQ RCV330 ;YES CMP R4,#AUDERR ;IS IT AN AUDIT ERROR? BEQ RC.530 ;YES CMP R4,#MANUAL ;IS IT A MANUAL TRANSACTION? BEQ RC.570 ;YES IOT ;NO, ERRONEOUS ACTION CODE .WORD MSG02 ;TYPE ERROR MESSAGE .BYTE WRITE,TTYSLT RCV325 = . TSTB MSG02+STATUS BPL RCV325 JMP RCV575 ;GO TYPE CONTENTS OF MSG ON HUB `CR,LF,LF DATE: .ASCII 'MMDDYY' TIME: .ASCII 'HHMM GE&ES TERMINAL' .BYTE TAB .ASCII ' 000' SERNO2: .ASCII '0' .BYTE CR,LF,LF .ASCII ' ' CUSTNO: .ASCII ' 00000049' .BYTE CR,LF,LF,LF,LF CODE1: .ASCII 'XX ' PROD1: .ASCII ' ' VOL1: .ASCII 'XXXXXX ' TEMP1: .ASCII 'XXX' .BYTE CR,LF CODE2: .ASCII 'XX ' PROD2: .ASCII ' ' VOL2: .ASCIIa MOV #BCKR,COM ;BACKSPACE A RECOR JSR PC,TAPRDY ;READY? BR RCV932 ;GO TRY AGAIN ; ; ; TAPRDY = . MOV #20.,R4 ;DELAY FOR CONTROLLER TO SET READY AFTER DEC R4 ;COMMAND BNE .-2 BIT #200,@#STAT ;IS CONTROLLER READY? BEQ .-6 RTS PC ;RETURN ; ; SPECIAL CHARACTER ASCII/EBCDIC CONVERSION ; RCV940 = . bPE ; RCV930 = . MOV #11.,R5 ;SET NO. OF TRYS FOR WRITE RCV932 = . MOV #TRNBUF+DATA+11.,MA ;YES, PUT INVOICE ADDRESS IN ;MEMORY ADDRESS REGISTER MOV #INVEND-INVOICE/2,WC ;SET WORD COUNT DEC R5 ;DECR REPEAT COUNT BGT RCV933 ;ALL TRYS EXHAUSTED? MOV #WEXG,COM ;YES, WRITE EXTENDED GAP JSR PC,TAPRDY ;AT FRONT OF RECORD cTTY RC.530: JMP RCV530 RC.570: JMP RCV570 RC.620: JMP RCV620 .PAGE ; ; PROCESS AUTO TRANSACTION OR AUDIT TRAIL ; ;* ;* F O R M A T A N I N V O I CE ;* RCV330 = . MOV #CODE1,R4 ;FIRST, BLANK OUT THE APPROPRIATE MOV #46.,R5 ;PARTS OF THE INVOICE BUFFER JSR PC,BLANK ;THAT CONTAIN PRODUCT INFORMATION MOV #CODE2,R4 MOV #46.,R5 JSR PC,BLANK d 'XXXXXX ' TEMP2: .ASCII 'XXX' .BYTE CR,LF CODE3: .ASCII 'XX ' PROD3: .ASCII ' ' VOL3: .ASCII 'XXXXXX ' TEMP3: .ASCII 'XXX' .BYTE CR,LF,LF,LF,LF,LF,LF,LF,LF .BYTE LF,LF,LF,LF,LF,LF,LF,LF,LF .BYTE LF,LF,LF,LF,LF,LF,LF,LF,LF .BYTE LF,LF,LF,LF,LF,LF,LF,LF,LF .ASCII ' P.O. BOX 608' .BYTE CR,LF .ASCII 'SAN DIEGO, CALIF ESG' .BYTE FORM INVEND = e CMPB R3,#TAB ;TAB? BNE RCV945 ;NO MOVB #5,R3 BR RCV908 RCV945 = . CMPB R3,#LF ;LF? BNE RCV950 ;NO MOVB #45,R3 BR RCV908 RCV950 = . CMPB R3,#FORM ;FORM? BNE RCV955 ;NO MOV #24,R3 BR RCV908 RCV955 = . CMPB R3,#CR ;CR? BNE RCV960 MOf MOV #10.,R5 ;SET REPEAT C3UNT BR RCV935 RCV933 = . MOV #WRT,COM ;WRITE THE INVOICE ON TAPE JSR PC,TAPRDY RCV935 = . BIT #ERR,STAT ;IS FILE GOOD? BNE RCV938 ;NO, GO DO IT AGAIN JMP RCV578 ;GO TYPE CONTENTS OF RCVBUF AT HUB RCV938 = . BIC #ERR,STAT ;CLEAR ERROR BIT MOV #BCKR,COM ;BACKSPACE A RECOR JSR PC,TgMOV #CODE3,R4 MOV #46.,R5 JSR PC,BLANK MOV #CODE4,R4 MOV #46.,R5 JSR PC,BLANK INCB SERNO1 ;INCREMENT TRANSACTION SERIAL NUMBER INCB SERNO2 INCB NUMBER ;INCREMENT INVOICE NUMBER CLR R0 ;GET CUSTOMER NO. FROM INPUT BUFFER MOVB RCVBUF+DATA+CUST+CUSTSZ-1,R1 ;GET CUST NO (LAST CHAR) BIC #177600,R1 ;MUST BE 1, h . .EVEN ; ; DEVICE CODES FOR IOX USAGE ; LSR: .WORD 3 LSP: .WORD 4 ; ; MESSAGES TO BE OUTPUT TO TERMINAL ; TMSG00 = . .BYTE CR,LF .ASCII /AUDIT TRAIL JUST ENTERED IS ERRONEOUS!/ TMSG01 = . ; ; HUB TELETYPE MESSAGES ; .EVEN MSG00: .WORD 0 .BYTE 0 .BYTE 0 .WORD 54. .BYTE CR,LF .ASCII 'IS END OF DAY REPORT TO BE ENTERED ON PUNCHED TAPE?iVB #25,R3 BR RCV908 RCV960 = . MOVB #100,R3 ;SUBSTITUTE A BLANK (SPACE) BR RCV908 .PAGE ; ; DC11 TRANSMIT ROUTINE ; ; CALLING SEQUENCE: ; MOV #BUFFER,-(SP) ; JSR PC,D11OUT ; D11OUT = . JSR R5,PUSHR ;SAVE REGS. MOV 14.(SP),R0 ;GET BUFFER ADDRESS MOV R0,CURBUF ;SAVE CURRENT BUF ADDR BIjAPRDY ;READY? BR RCV932 ;GO TRY AGAIN ; ; ; TAPRDY = . MOV #20.,R4 ;DELAY FOR CONTROLLER TO SET READY AFTER DEC R4 ;COMMAND BNE .-2 BIT #200,@#STAT ;IS CONTROLLER READY? BEQ .-6 RTS PC ;RETURN ; ; SPECIAL CHARACTER ASCII/EBCDIC CONVERSION ; RCV940 = . CMPB R3,#TAB ;TAB? BNE RCV945 k2, OR 3 SUB #61,R1 ;CONVERT TO INDEX (0,1,2) BLT INV010 CMP R1,#3 BLT INV015 ; INV010 = . CLR R1 ; INV015 = . ASL R1 MOV ALPHA1(R1),INV020 ;ADDRESS OF CUSTOMER NAME MOV ALPHA2(R1),INV030 ;ADDRESS, AND MOV ALPHA3(R1),INV040 ;CITY JSR R5,MOVE INV020: .WORD 0,NAME,20. ;MOVE CUSTOMER NAME TO INVOICE INl ' .EVEN MSG01: .WORD 0 .BYTE 0 .BYTE 0 .WORD 25. .BYTE CR,LF .ASCII /TRANSMISSION ERROR / MSG01F: .ASCII / !/ .EVEN MSG02: .WORD 0 .BYTE 0 .BYTE 0 .WORD 37. .BYTE CR,LF .ASCII /ERRONEOUS ACTION CODE RECEIVED!/ .BYTE CR,LF,LF .EVEN MSG03: .WORD 0 .BYTE 0 .BYTE 0 .WORD 26. .BYTE CR,LF mSB #BUSY,STATUS(R0);SET BUFFER BUSY CLR COUNT(R0) ;ZRO CHAR COUNT BIS #REQSND,TCSR ;SET REQUEST TO SEND D11010 = . BIT #CLRSND,TCSR ;CLEAR TO SEND? BEQ D11010 ;NO ADD #DATA,R0 ;OUTPUT 1ST CHAR MOVB (R0),TBUF BIS #ENABLE,TCSR ;ENABLE TRANSMITTER INTERRUPT .IFNZ DEBUG ; D11015: BIT #REQSND,TCSR ;DONE TRANSMITTING? BEQ D11020 n ;NO MOVB #5,R3 BR RCV908 RCV945 = . CMPB R3,#LF ;LF? BNE RCV950 ;NO MOVB #45,R3 BR RCV908 RCV950 = . CMPB R3,#FORM ;FORM? BNE RCV955 ;NO MOV #24,R3 BR RCV908 RCV955 = . CMPB R3,#CR ;CR? BNE RCV960 MOVB #25,R3 BR RCV908 RCV960 = . MOVB oV030: .WORD 0,ADDRESS,20. ;AND ADDRESS INV040: .WORD 0,CITY,20. ;AND CITY/STATE .WORD RCVBUF+DATA+CARNO,CARRIER,CARSZ .WORD RCVBUF+DATA+DRNO,DRIVER,DRSZ .WORD RCVBUF+DATA+CUST,CUSTNO,CUSTSZ .WORD -1 MOVB PS,-(SP) ;LOCKOUT TIMER UPDATE WHILE MOVB #340,PS ;GETTING TIME JSR R5,MOVE .WORD DATEAS,DATE,6 .WORD TIMEAS,TIME,4 .WORD -1 MOVB p .ASCII /ERROR IN AUDIT TRAIL!/ .BYTE CR,LF,LF .EVEN ; ; HUB TELETYPE BUFFERS ; TTIBUF: .WORD 0 ;MAX NO. CHARS TO INPUT .BYTE 0 ;MODE - FORMATED ASCII .BYTE 0 ;STATUS .WORD 0 ;NO. OF CHARS INPUT . = .+600. ;DATA TTOBUF: .WORD 0 ;UNUSED .BYTE 0 ;MODE - FORMATTED ASCII .BYTE 0 ;STAq ;YES EMT 0 ;SIMULATE TRANSMIT OUTPUT INTERRUPT BR D11015 ; D11020: CMPB #ACK,DATA(R0) BEQ D11025 ;DON'T PRINT IF IT'S ONLY AN ACK MOV #ACK,RBUF ;PUT ACK IN DUMMY RECEIVE BUFFER MOV #DONE,RCSR ;SET CHARACTER READY BIT TRAP ;AND SIMULATE THE CP 'ACK' SIGNAL IOT ;PRINT OUTPUT BUFFER ON ASR .WORD TRNBUF .BYTr #100,R3 ;SUBSTITUTE A BLANK (SPACE) BR RCV908 .PAGE ; ; DC11 TRANSMIT ROUTINE ; ; CALLING SEQUENCE: ; MOV #BUFFER,-(SP) ; JSR PC,D11OUT ; D11OUT = . JSR R5,PUSHR ;SAVE REGS. MOV 14.(SP),R0 ;GET BUFFER ADDRESS MOV R0,CURBUF ;SAVE CURRENT BUF ADDR BISB #BUSY,STATUS(R0);SET BUFFER BUSY CLR COUNT(R0) s(SP)+,PS ;UNLOCK TIMER ;* ;* NOW GET PRODUCT INFORMATION AND PUT IN INVOICE BUFFER ;* JSR R5,TEST .WORD RCVBUF+DATA+FLOW1,FLOWSZ,INV100 ;ANY PRODUCT 1 INFO? JSR R5,MOVE ;YES - MOV INTO INVOICE .WORD KODE1,CODE1,2 .WORD PRNAM1,PROD1,PRSZ .WORD RCVBUF+DATA+FLOW1,VOL1,FLOWSZ .WORD RCVBUF+DATA+T1,TEMP1,TEMPSZ .WORD -1 ; INV100 = . JSR R5,TEST ;AND NOW FOR PtTUS .WORD 0 ;NO. OF CHARS TO BE OUTPUT . = .+600. ;DATA ; ; TIMERS ; TIMER = . ACKTMR: .WORD 0 ;ACK TIMER .WORD ACKTO EOTTMR: .WORD 0 ;EOT TIMER .WORD EOTTO TIMEND = . ; ; HUB/TERMINAL INPUT/OUTPUT MESSAGE BUFFERS ; RCVBUF = . ;RECEIVE BUFFER .WORD 273. ;MAXIMUM NUMBER OF CHARACTERS .BYTE 0 uE WRITE,TTYSLT D11023 = . TSTB TRNBUF+STATUS BPL D11023 BICB #BUSY,STATUS(R0) ; D11025 = . .ENDC JSR R5,POPR ;RESTORE REGS MOV (SP)+,(SP) ;SWAP PC AND BUF ADDR; POP STACK RTS PC ;RETURN .PAGE ; ; DC11 TRANSMITTER INTERRUPT ROUTINE ; TRNINT = . JSR R5,PUSHR ;SAVE REGS MOV CURBUF,R0 ;GET CURRENT BUFFER v;ZRO CHAR COUNT BIS #REQSND,TCSR ;SET REQUEST TO SEND D11010 = . BIT #CLRSND,TCSR ;CLEAR TO SEND? BEQ D11010 ;NO ADD #DATA,R0 ;OUTPUT 1ST CHAR MOVB (R0),TBUF BIS #ENABLE,TCSR ;ENABLE TRANSMITTER INTERRUPT .IFNZ DEBUG ; D11015: BIT #REQSND,TCSR ;DONE TRANSMITTING? BEQ D11020 ;YES EMT 0 ;SIMULATE TRANSMIT OUTPUT wRODUCT # 2 .WORD RCVBUF+DATA+FLOW2,FLOWSZ,INV200 JSR R5,MOVE .WORD KODE2,CODE2,2 .WORD PRNAM2,PROD2,PRSZ .WORD RCVBUF+DATA+FLOW2,VOL2,FLOWSZ .WORD RCVBUF+DATA+T2,TEMP2,TEMPSZ .WORD -1 ; INV200 = . JSR R5,TEST ;AND PRODUCT # 3 .WORD RCVBUF+DATA+FLOW3,FLOWSZ,INV250 JSR R5,MOVE .WORD KODE3,CODE3,2 .WORD PRNAM3,PROD3,PRSZ .WORD RCVBUFx ;UNUSED .BYTE 0 ;STATUS .WORD 0 ;NO. OF DATA CHARACTERS RECEIVED . = .+273. .EVEN ; TRNBUF = . ;TRANSMIT BUFFER .WORD 0 ;NO. OF DATA CHARACTERS TO BE TRANSMITTED .BYTE 0 ;UNUSED .BYTE 0 ;STATUS .WORD 0 ;RESERVED FOR USE BY TRNINT ROUTINE . = .+512. ; ; ERROR CODES ; ERR00: .ASCy INC COUNT(R0) ;INCR CHAR COUNT CMP COUNT(R0),(R0) ;HAVE ALL CHARS BEEN TRANSMITTED? BGE TRN020 ;YES MOV R0,R1 ;SET POINTER TO NEXT CHAR ADD #DATA,R1 ADD COUNT(R0),R1 MOVB (R1),TBUF ;PUT CHAR IN TRANSMIT REGISTER TRN010 = . JSR R5,POPR ;RESTORE REGS RTI ;RETURN ; TRN020 = . BIC #ENABLE,TCSR ;DISABLEzINTERRUPT BR D11015 ; D11020: CMPB #ACK,DATA(R0) BEQ D11025 ;DON'T PRINT IF IT'S ONLY AN ACK MOV #ACK,RBUF ;PUT ACK IN DUMMY RECEIVE BUFFER MOV #DONE,RCSR ;SET CHARACTER READY BIT TRAP ;AND SIMULATE THE CP 'ACK' SIGNAL IOT ;PRINT OUTPUT BUFFER ON ASR .WORD TRNBUF .BYTE WRITE,TTYSLT D11023 = . TSTB TRNBUF+STATUS {+DATA+FLOW3,VOL3,FLOWSZ .WORD RCVBUF+DATA+T3,TEMP3,TEMPSZ .WORD -1 ; INV250 = . JSR R5,TEST ;AND FINALLY, PRODUCT #4 .WORD RCVBUF+DATA+FLOW4,FLOWSZ,INV300 JSR R5,MOVE .WORD KODE4,CODE4,2 .WORD PRNAM4,PROD4,PRSZ .WORD RCVBUF+DATA+FLOW4,VOL4,FLOWSZ .WORD RCVBUF+DATA+T4,TEMP4,TEMPSZ .WORD -1 ; INV300 = . MOV #R035,-(SP) JSR PC,HEADE|II /00/ ;LOST CARRIER WHILE RECEIVING DATA ERR02: .ASCII /02/ ;NO ACK RECEIVED AFTER 8 TRYS ERR03: .ASCII /03/ ;TIMEOUT ON SENDING OF ACK ; ; DATE/TIME SAVED HERE ; DAYTIM = . ;DATE/TIME FROM LAST MSG RECEIVED . = .+7. DAYEND = . ; ; PROGRAM VARIABLES ; MODE: .BYTE 0 ;RECEIVE MODE ; WHERE 0 = EXPECTING RING ; } TRANSMIT INTERRUPT BIC #REQSND,TCSR ;RESET REQUEST TO SEND TRN030 = . BIT #DETECT,RCSR ;WAIT FOR TRANSMIT CARRIER TO DROP BNE TRN030 TRN040 = . BIT #DETECT,RCSR ;WAIT FOR DETECT OF RECEIVE CARRIER BEQ TRN040 BICB #BUSY,STATUS(R0);SET STATUS NOT BUSY BR TRN010 ;GO RETURN .PAGE ; ; HEADER -- ROUTINE TO PUT HEADER IN TRANSMIT BUFFER; I.E. ; STX~ BPL D11023 BICB #BUSY,STATUS(R0) ; D11025 = . .ENDC JSR R5,POPR ;RESTORE REGS MOV (SP)+,(SP) ;SWAP PC AND BUF ADDR; POP STACK RTS PC ;RETURN .PAGE ; ; DC11 TRANSMITTER INTERRUPT ROUTINE ; TRNINT = . JSR R5,PUSHR ;SAVE REGS MOV CURBUF,R0 ;GET CURRENT BUFFER INC COUNT(R0) ;INCR CHAR COUNT CMP COUNT(R ;CREATE HEADER FOR INVOICE MOV #INVOICE,R1 MOV #BCCOUT,R2 INV310 = . MOVB (R1)+,(R0) ;MOVE INVOICE TO THE MOVB (R0)+,(R2) ;DC11 OUTPUT BUFFER JSR PC,DELAY ;DELAY FOR BCC HARDWARE CMP R1,#INVEND ;END OF INVOICE? BNE INV310 ;BRANCH IF NO MOV #ETX,-(SP) ;OTHERWISE, SELECT ETX AND JSR PC,TRAILR ;GO MAKE A TRAILER MOVB #7,M 1 = EXPECT CARRIER TRANSITION ; 2 = EXPECT STX ; 3 = EXPECT DATA ; 4 = EXPECT BCC(MSB) ; 5 = EXPECT BCC(LSB) ; 6 = EXPECT EOT ; 7 = EXPECT ACK/NAK AFTER ; SENDING ; 8 , SPECIAL CHAR, DATE AND TIME ; ; CALLING SEQUENCE -- ; ; MOV #DEVICE,-(SP) ; JSR PC,HEADER ; ; CONDITIONS UPON ENTRY -- ; ; SPECIAL CODE FOR DEVICE SELECTION IS ON STACK ; ; CONDITIONS UPON EXIT -- ; ; R0 POINTS TO NEXT AVAILABLE BYTE IN TRNBUF ; R1 IS USED AND NOT RESTORED ; HEADER = . MOV #TRNBUF+DATA,R0 ;GET DATA ADDRESS IN TRANSMIT BUFFER R0),(R0) ;HAVE ALL CHARS BEEN TRANSMITTED? BGE TRN020 ;YES MOV R0,R1 ;SET POINTER TO NEXT CHAR ADD #DATA,R1 ADD COUNT(R0),R1 MOVB (R1),TBUF ;PUT CHAR IN TRANSMIT REGISTER TRN010 = . JSR R5,POPR ;RESTORE REGS RTI ;RETURN ; TRN020 = . BIC #ENABLE,TCSR ;DISABLE TRANSMIT INTERRUPT BIC #REQSND,TCSR ;RESET REQUEST TO ODE ;SET RECEIVE MODE TO EXPECT ACK/NAK ;AFTER TRANSMITTING INVOICE RCV500 = . MOVB #8.,REPEAT ;SET NO. OF OUTPUT TRYS RCV510 = . MOV #TRNBUF,-(SP) ;CALL DC11 TRANSMIT ROUTINE JSR PC,D11OUT RCV520 = . TSTB TRNBUF+STATUS ;ALL DONE? BMI RCV520 ;NO .IFZ DEBUG MOV #ACKTIM,ACKTMR ;SET ACK TIMER .ENDC JMP RCV0= SAME ; 9 = SAME ;ON DATA RECEIVED RCVERR: .BYTE 0 ;RECEIVE ERROR COUNT REPEAT: .BYTE 0 ;NO. OF TRYS TO TRANSMIT TO TERMINAL .EVEN CURBUF: .WORD 0 ;CURRENT BUFFER ADDRESS .PAGE ; ; INITIALIZATION PROGRAM AND IDLE LOOP ; DEMO = . MOV #15604,@#4 ;SET UP IOX VECTORS MOV #340,@#6 MOV #15256,@#20  MOVB #STX,(R0)+ ;STX CHAR TO HEADER CLR CLRBCC ;CLEAR BCC REGISTER JSR PC,DELAY ;DELAY FOR BCC HDWR MOVB 2(SP),(R0) ;DEVICE CODE TO HEADER MOVB (R0)+,BCCOUT ;OUTPUT TO BCC CALCULATOR JSR PC,DELAY ;DELAY FOR BCC HDWR MOV #JULDAY,R1 ;PUT JULIAN DATE INTO BUFFER HEADER HEAD10 = . MOVB (R1)+,(R0) MOVB (R0)+,BCCOUT JSR PC,DELAY SEND TRN030 = . BIT #DETECT,RCSR ;WAIT FOR TRANSMIT CARRIER TO DROP BNE TRN030 TRN040 = . BIT #DETECT,RCSR ;WAIT FOR DETECT OF RECEIVE CARRIER BEQ TRN040 BICB #BUSY,STATUS(R0);SET STATUS NOT BUSY BR TRN010 ;GO RETURN .PAGE ; ; HEADER -- ROUTINE TO PUT HEADER IN TRANSMIT BUFFER; I.E. ; STX, SPECIAL CHAR, DATE AND TIME ; ; CALLING SEQUENCE -- ; 70 ;GO WAIT FOR ACK ; ; PROCESS ERRONEOUS AUDIT TRAIL ; RCV530 = . MOVB #ASR33,-(SP) ;PUT MSG HEADER IN TRANSMIT BUFFER JSR PC,HEADER ;SPECIFY OUTPUT TO ASR33 MOV #TMSG00,R1 ;GET MSG ADDRESS RCV550 = . MOVB (R1)+,(R0) ;MOVE A CHAR TO BUFFER MOVB (R0)+,BCCOUT ;CALC BCC JSR PC,DELAY ;DELAY FOR BCC HDWR CMP R1,#TMSG01 ;ALL CHARS MOVED? BL MOV #340,@#22 CLR @#40 MOV #040404,@#42 MOV #16040,@#60 MOV #BR5,@#62 MOV #16710,@#64 MOV #BR5,@#66 MOV #RCVINT,@#RVECTR ;RECEIVE INTERRUPT VECTOR MOV #TRNINT,@#TVECTR ;TRANSMIT INTERRUPT VECTOR MOV #CLKINT,@#CVECTR ;CLOCK INTERRUPT VECTOR .IFNZ DEBUG MOV #RCVINT,@#34 ;CHECKOUT RECEIVE INT (TRAP) MOV #TCMP R1,#JULEND BLT HEAD10 MOVB PC,-(SP) ;LOCKOUT TIMER UPDATE MOVB #340,PS MOV #TIMEAS,R1 ;PUT HUB TIME INTO HEADER HEAD20 = . MOVB (R1)+,(R0) MOVB (R0)+,BCCOUT JSR PC,DELAY CMP R1,TIMEAS+5 ;ONE EXTRA CHARACTER FOR BLT HEAD20 ;A 10 CHAR HEADER (FOR ANDY) MOVB (SP)+,PS ;RELEASE LOCKOUT MOV (SP)+,(SP) ;CLEANUP STACK ; MOV #DEVICE,-(SP) ; JSR PC,HEADER ; ; CONDITIONS UPON ENTRY -- ; ; SPECIAL CODE FOR DEVICE SELECTION IS ON STACK ; ; CONDITIONS UPON EXIT -- ; ; R0 POINTS TO NEXT AVAILABLE BYTE IN TRNBUF ; R1 IS USED AND NOT RESTORED ; HEADER = . MOV #TRNBUF+DATA,R0 ;GET DATA ADDRESS IN TRANSMIT BUFFER MOVB #STX,(R0)+ ;STX CHAR TO HEADER CLR CLRBCCE RCV550 ;NO MOVB #8.,MODE ;SET RECEIVE MODE TO EXPECT ACK/NAK RCV560 = . MOVB #ETX,-(SP) ;PUT TRAILER INTO BUFFER JSR PC,TRAILR ;AFTER SENDING BR RCV500 ;GO TRANSMIT TO TERMINAL ; ; PROCESS MANUAL ENTRY ; RCV570 = . MOV #RCVBUF+MSGDAT,R0 ;GET ADDRESS OF MESSAGE DATA CMPB (R0),#'. ;IS FIRST CHAR A PERIOD? BEQ RCV6RNINT,@#30 ;CHECKOUT TRANSMIT INT (EMT) .ENDC MOV #BR4,R0 MOV R0,@#RVECTR+2 MOV R0,@#TVECTR+2 .IFNZ DEBUG MOV R0,@#36 MOV R0,@#32 .ENDC MOV #BR6,R0 MOV R0,@#CVECTR+2 MOV #STACK,SP ;SET STACK POINTER IOT ;RESET IOX .WORD 0 .BYTE RESET,0 IOT ;SET RESTART ADDRESS  RTS PC ;RETURN TO CALLER .PAGE ; ; TRAILR -- ROUTINE TO PUT TRAILER IN TRANSMIT BUFFER: I.E. ; ETX/ETB,BCC,FF; ALSO PUTS CHAR COUNT IN TRNBUF HEADER ; ; CALLING SEQUENCE -- ; ; MOV #TERMCH,-(SP) ; JSR PC,TRAILR ; ; CONDITIONS UPON ENTRY -- ; ; TERMINATING CHAR ETX OR ETB IS RT. JUSTIFIED ON STACK ; RO POINTS TO NEXT AVAIL BYTE IN TRNBUF ; TR ;CLEAR BCC REGISTER JSR PC,DELAY ;DELAY FOR BCC HDWR MOVB 2(SP),(R0) ;DEVICE CODE TO HEADER MOVB (R0)+,BCCOUT ;OUTPUT TO BCC CALCULATOR JSR PC,DELAY ;DELAY FOR BCC HDWR MOV #JULDAY,R1 ;PUT JULIAN DATE INTO BUFFER HEADER HEAD10 = . MOVB (R1)+,(R0) MOVB (R0)+,BCCOUT JSR PC,DELAY CMP R1,#JULEND BLT HEAD10 MOVB PC,-(SP) 20 ;YES MOVB #ASR33,-(SP) ;SPECIFY OUTPUT TO ASR33 JSR PC,HEADER MOV #TMSG01,R1 ;GET MSG ADDRESS RCV572 = . MOVB (R1)+,(R0) ;MOVE A CHAR TO BUFFER MOVB (R0)+,BCCOUT ;CALC BCC JSR PC,DELAY ;DELAY FOR BCC HARDWARE CMP R1,#TMSG02 ;ALL CHARS MOVED? BLE RCV572 ;NO MOVB #10.,MODE ;SET RECEIVE MODE TO BR RCV560 ;E .WORD DEMO .BYTE RESTRT,0 IOT ;INIT LSR .WORD LSR .BYTE INIT,LSRSLT IOT ;INIT LSP .WORD LSP .BYTE INIT,LSPSLT MOV #LENGTH!RSPEED,RCSR ;SET DC11 RECEIVER CHAR LENGTH ;AND SPEED MOV #STOPCD!TSPEED,TCSR ;SET DC11 TRANSMITTER STOP CODE ;AND SPEED DEM005 = . CMP #INITLAILR = . MOVB 2(SP),(R0) ;PUT TERMINATING CHAR IN TRNBUF MOVB (R0)+,BCCOUT ;CALC BCC JSR PC,DELAY ;DELAY FOR BCC HDWR MOVB BCCMSB,(R0)+ ;PUT BCC IN BUFFER MOVB BCCLSB,(R0)+ MOVB #FF,(R0)+ SUB #TRNBUF+DATA,R0 ;GET CHAR COUNT AND MOV R0,TRNBUF ;PUT INTO BUFFER HEADER MOV (SP)+,(SP) ;CLEAN UP STACK RTS PC ;RETURN .PAGE  ;LOCKOUT TIMER UPDATE MOVB #340,PS MOV #TIMEAS,R1 ;PUT HUB TIME INTO HEADER HEAD20 = . MOVB (R1)+,(R0) MOVB (R0)+,BCCOUT JSR PC,DELAY CMP R1,#TIMEAS+5 ;ONE EXTRA CHARACTER FOR BLT HEAD20 ;A 10 CHAR HEADER (FOR ANDY) MOVB (SP)+,PS ;RELEASE LOCKOUT MOV (SP)+,(SP) ;CLEANUP STACK RTS PC ;RETURN TO CALLER .PAGE ; ; XPECT ACK/NAK ; ; PRINT CONTENTS OF RCVBUF AT HUB ; RCV575 = . BIC #DTRDY,RCSR ;NO, DROP LINE BY RESET DATA TERM. RDY CLRB MODE ;SET RECEIVE MODE TO EXPECT RING RCV578 = . IOT ;OUTPUT CR, LF, LF TO HUB TTY .WORD CRLFLF .BYTE WRITE,TTYSLT MOV RCVBUF+COUNT,R1 ;GET NO. CHARS IN MSG (LESS HEADER) SUB #HDRSIZ,R1 MOV R1,TTOBUF+COUNT ;PUT CHAR COUNT IN,SWITCH BEQ DEM035 IOT ;TYPE MSG00 .WORD MSG00 .BYTE WRITE,TTYSLT MOV #600.,TTIBUF ;PUT MAX CHAR TO INPUT IN BUF HDR IOT ;GET "Y" OR "N" RESPONSE .WORD TTIBUF .BYTE READ,KBDSLT DEM010 = . TSTB TTIBUF+STATUS ;IS INPUT DONE? BPL DEM010 CMPB TTIBUF+DATA,#'Y ;YES, IS IT "Y"? BNE DEM020 ;NO IOT  ; ; DELAY BETWEEN OUTPUTS TO BCC CALC REGISTER ; ; CALLING SEQUENCE ; ; JSR PC,DELAY ; DELAY = . NOP NOP NOP RTS PC .PAGE ; ; LINE FREQUENCY CLOCK INTERRUPT ROUTINE ; CLKINT = . JSR R5,PUSHR ;SAVE REGS MOV #TIMER,R0 ;GET BEGINNING OF TIMER TABLE CLK010 = . CMP R0,#TIMEND ;HAVE ALL TIMERS BEEN UPDATED? BGE  TRAILR -- ROUTINE TO PUT TRAILER IN TRANSMIT BUFFER: I.E. ; ETX/ETB,BCC,FF; ALSO PUTS CHAR COUNT IN TRNBUF HEADER ; ; CALLING SEQUENCE -- ; ; MOV #TERMCH,-(SP) ; JSR PC,TRAILR ; ; CONDITIONS UPON ENTRY -- ; ; TERMINATING CHAR ETX OR ETB IS RT. JUSTIFIED ON STACK ; RO POINTS TO NEXT AVAIL BYTE IN TRNBUF ; TRAILR = . MOVB 2(SP),(R0) ;PUT TERMINATING CHAR TO TTY BUFFER MOV #TTOBUF+DATA,R2 ;GET TTY BUFFER DATA ADDRESS MOV #RCVBUF+MSGDAT,R0 ;GET ADDRESS OF RCVBUF DATA RCV580 = . MOVB (R0),(R2)+ ;MOVE DATA FROM DC11 RECEIVE BUFFER CMPB (R0)+,#CR ;IS CHAR A CR? BNE RCV582 ;NO MOVB #LF,(R2)+ ;YES, INSERT A LF FOR TYPEOUT INC TTOBUF+COUNT RCV582 = . DEC R1 ;TO TTY OUTPUT BUFFER BNE  ;READ PUNCHED TAPE .WORD TTIBUF .BYTE READ,LSRSLT BR DEM030 DEM020 = . ;READ KBD IOT .WORD TTIBUF .BYTE READ,KBDSLT DEM030 = . TSTB TTIBUF+STATUS ;IS INPUT DONE? BPL DEM030 ;NO DEM035 = . MOV #TIMER,R0 ;RESET TIMERS DEM040 = . CLR (R0)+ TST (R0)+ CMP R0,#TIMEND BL CLK030 ;YES TST (R0) ;IS TIMER INACTIVE (ZERO)? BEQ CLK020 ;YES DEC (R0) ;DECREMENT COUNTER BEQ CLK040 ;TIMEOUT? CLK020 = . CMP (R0)+,(R0)+ ;NO, BUMP POINTER TO NEXT ENTRY IN BR CLK010 ;TIMER TABLE ; CLK030 = . JSR R5,POPR ;RESTORE REGS RTI ;RETURN ; CLK040 = . JSR PCIN TRNBUF MOVB (R0)+,BCCOUT ;CALC BCC JSR PC,DELAY ;DELAY FOR BCC HDWR MOVB BCCMSB,(R0)+ ;PUT BCC IN BUFFER MOVB BCCLSB,(R0)+ MOVB #FF,(R0)+ SUB #TRNBUF+DATA,R0 ;GET CHAR COUNT AND MOV R0,TRNBUF ;PUT INTO BUFFER HEADER MOV (SP)+,(SP) ;CLEAN UP STACK RTS PC ;RETURN .PAGE ; ; DELAY BETWEEN OUTPUTS TO BCC CALC REGISTER ; ; RCV580 IOT ;PRINT MSG ON HUB TTY .WORD TTOBUF .BYTE WRITE,TTYSLT RCV585 = . TSTB TTOBUF+STATUS BPL RCV585 JMP RCV070 ;GO ENABLE RECEIVE INTERRUPT ; ; PREPARE END OF DAY REPORT FOR OUTPUT ; RCV620 = . MOVB #ASR33,-(SP) ;PUT MSG HDR IN BUF JSR PC,HEADER MOV #TTIBUF+DATA,R1 ;GET DATA ADDRESS MOV TTIBUF+COUNT,R3 ADD T DEM040 CLRB MODE ;SET RECEIVE MODE TO EXPECT RING BIS #ENABLE,LKS ;ENABLE REAL-TIME CLOCK BIS #ENABLE,RCSR ;ENABLE DC11 RECEIVE INTERRUPT DEM050 = . .IFZ DEBUG WAIT ;IDLE!! BR DEM050 .ENDC .PAGE .IFNZ DEBUG ;* ;* SIMULATED DC11 CHECKOUT. THIS SECTION CAUSES THE LOGIC ;* EXPECTED FROM THE DC11 AND CP. THE SIMULATED INPUT MESSAGE ;*,@2(R0) ;CALL TIMEOUT SUBROUTINE BR CLK020 ;GO LOOK AT NEXT TIMER .PAGE ; ; EOTTO -- EOT TIMEOUT SUBR ; ; CALLING SEQUENCE -- ; ; JSR PC,EOTTO ; EOTTO = . JSR R5,PUSHR ;SAVE REGS BIC #DTRDY,RCSR ;RESET DATA TERMINAL READY CLRB MODE ;SET RECEIVE MODE TO EXPECT RING MOV #ERR03,MSG01F ;TYPE -- "TRANSMISSION ERROR 03!" IOT CALLING SEQUENCE ; ; JSR PC,DELAY ; DELAY = . NOP NOP NOP RTS PC .PAGE ; ; LINE FREQUENCY CLOCK INTERRUPT ROUTINE ; CLKINT = . JSR R5,PUSHR ;SAVE REGS MOV #TIMER,R0 ;GET BEGINNING OF TIMER TABLE CLK010 = . CMP R0,#TIMEND ;HAVE ALL TIMERS BEEN UPDATED? BGE CLK030 ;YES TST (R0) ;IS TIMER INAC #TTIBUF+DATA,R3 ;GET ADDRESS OF END OF DATA RCV630 = . MOVB (R1)+,(R0) ;MOVE CHAR TO BUF MOVB (R0)+,BCCOUT ;CALC BCC JSR PC,DELAY ;DELAY FOR BCC HDWR CMP R1,R3 ;ARE ALL CHARS OUT BLT RCV630 ;NO MOVB #ETX,-(SP) ;PUT ETX TRAILER IN BUF JSR PC,TRAILR MOVB #9.,MODE ;SET MODE TO EXPECT ACK/NAK BR RCV500 ;GO OUTPUT REPORT  IS RETRIEVED FROM THE OPERATOR DEFINED EOD REPORT. ;* $DC11 = . MOV #RING!ERROR,RCSR ;SET RING STATUS (HELLO?) TRAP ; AND SIMULATE DC11 INTERRUPT MOV #CARTRN!ERROR!DETECT,RCSR ;NOW, CARRIER TRANSITION TRAP ;AND CARRIER DETECT MOV #DONE,RCSR MOV #STX,RBUF ;ALWAYS NEED STX TRAP MOV #TTIBUF+DATA,R0 ; $DC11A = .WORD MSG01 .BYTE WRITE,TTYSLT CLRB RBUF ;CLEAR DC11 RECEIVE BUFFER BIS #ENABLE,RCSR ;ENABLE DC11 RECEIVE INTERRUPTS JSR R5,POPR ;RESTORE REGS RTS PC ;RETURN .PAGE ; ; ACKTO -- ACK TIMEOUT ROUTINE ; ; CALLING SEQUENCE -- ; ; JSR PC,ACKTO ; ACKTO = . JSR R5,PUSHR ;SAVE REGS BIC #DTRDY,RCSR ;RESET DATA TERMTIVE (ZERO)? BEQ CLK020 ;YES DEC (R0) ;DECREMENT COUNTER BEQ CLK040 ;TIMEOUT? CLK020 = . CMP (R0)+,(R0)+ ;NO, BUMP POINTER TO NEXT ENTRY IN BR CLK010 ;TIMER TABLE ; CLK030 = . JSR R5,POPR ;RESTORE REGS RTI ;RETURN ; CLK040 = . JSR PC,@2(R0) ;CALL TIMEOUT SUBROUTINE BR CLK020 ; ; PROCESS ACK/NAK AFTER SENDING RESPONSE TO CP ; RCV700 = . BIC #ENABLE,RCSR ;DISABLE DC11 RCV INT. MOVB RBUF,R4 ;GET CHAR CMPB R4,#ACK ;IS CHAR AN ACK? BNE RCV810 ;NO CLR ACKTMR ;RESET ACK TIMER JMP @RCV705-14.(R0) ;BRANCH ON MODE RCV705 = . .WORD RCV710 ;7, RECEIVE ACK AFTER SENDING INVOICE .WORD RCV800 ;8, ACK AFTER SE . MOV #DONE,RCSR ;SET CHARACTER READY STATUS MOVB (R0)+,RBUF ;GET NEXT CHARACTER CMPB RBUF,#7 ;IS IT A BELL (END OFMESSAGE) BEQ $DC11B ;YES MOV R0,-(SP) ;SAVE ADDRESS TRAP ;SIMULATE MOV (SP)+,R0 BR $DC11A ;GO BACK FOR MORE ; $DC11B = . MOV #ETX,RBUF ;THAT'S ALL, FOLKS! INAL READY CLRB MODE ;SET RECEIVE MODE TO EXPECT RING MOV #ERR02,MSG01F ;TYPE -- "TRANSMISSION ERROR 02!" IOT .WORD MSG01 .BYTE WRITE,TTYSLT CLRB RBUF ;CLEAR DC11 RECEIVE BUFFER BIS #ENABLE,RCSR ;ENABLE DC11 RECEIVE INTERRUPTS JSR R5,POPR ;RESTORE REGISTERS RTS PC ;RETURN .PAGE ; UPTIME -- TIME OF DAY UPDATE SUBROUTINE ; ; ;GO LOOK AT NEXT TIMER .PAGE ; ; EOTTO -- EOT TIMEOUT SUBR ; ; CALLING SEQUENCE -- ; ; JSR PC,EOTTO ; EOTTO = . JSR R5,PUSHR ;SAVE REGS MOV #ERR03,MSG01F ;TYPE -- "TRANSMISSION ERROR 03!" BR ACK010 .PAGE ; ; ACKTO -- ACK TIMEOUT ROUTINE ; ; CALLING SEQUENCE -- ; ; JSR PC,ACKTO ; ACKTO = . JSR R5,PUSHR ;SAVE RENDING AUDIT ERR MSG .WORD RCV708 ;9, ACK AFTER SENDING EOD REPORT .WORD RCV575 ;10, ACK AFTER SENDING MANUAL ACCEPT ; RCV708 = . BIC #DTRDY,RCSR ;DROP LINE - RESET DATA TERMINAL READY CLRB MODE ;SET MODE TO EXPECT RING JMP RCV070 ;GO ENABLE RECEIVE INTERRUPT ; RCV710 = . BIC #DTRDY,RCSR ;DROP LINE - RESET DATA TERMINAL READY CLRB MODE ;SET MOD TRAP MOV #123,RBUF ;DUMMY BCC TRAP MOV #345,RBUF TRAP MOV #377,RBUF ;AND THE GRAND FINALE TRAP MOV #17777,R1 ;DELAY FOR S/W TO RESPOND, ; ;SEND ACK (3 SEC DELAY) $DC11C = . DEC R1 BNE $DC11C MOV #EOT,RBUF ;SEND LINE TURNAROUND - EOT TRAP ; ;NOW IT'S UP TO TH UPDATES ASCII TIME HHMM IN TIMEAS ; ; CALLING SEQUENCE -- ; ; JSR PC,UPTIME ; UPTIME = . JSR R5,PUSHR ;SAVE REGS MOV #MINUTE,TIMDAY ;SET TIMER MOV #TIMEAS+3,R0 CMPB (R0),'9 ;IS MIN UNITS DIGIT EQ 9? BEQ SET010 ;YES SET005 = . INCB (R0) ;NO, INCREMENT DIGIT SET008 = . JSR R5,POPR ;RETURN RTGS MOV #ERR02,MSG01F ;TYPE -- "TRANSMISSION ERROR 02!" ACK010 = . BIC #DTRDY,RCSR ;RESET DATA TERMINAL READY CLRB MODE ;SET RECEIVE MODE TO EXPECT RING IOT .WORD MSG01 .BYTE WRITE,TTYSLT CLRB RBUF ;CLEAR DC11 RECEIVE BUFFER BIS #ENABLE,RCSR ;ENABLE DC11 RECEIVE INTERRUPTS JSR R5,POPR ;RESTORE REGISTERS RTS PC ;RETURN E TO EXPECT RING ;* * * * * * * F R I L L * * * * * * * BR RCV900 ;GO PUT INVOICE ON MAG TAPE ; RCV800 = . BIC #DTRDY,RCSR ;DROP LINE CLRB MODE ;SET MODE TO EXPECT RING IOT ;TYPE -- "ERROR IN AUDIT TRAIL!" .WORD MSG03 .BYTE WRITE,TTYSLT RCV805 = . TSTB MSG03+STATUS BPL RCV805 BR RCV578 ;GO TYPE CONTENTS OF RCVBUF E PROGRAM $DC11D = . ;TO SEND RESPONSE MESSAGE CMP SWITCH,#-1 BNE $DC11D BR $DC11 ;REPEAT WHEN SWITCHES = 177777 .ENDC .PAGE ; ; DC11 RECEIVE INTERRUPT ROUTINE ; RCVINT = . JSR R5,PUSHR ;SAVE REGS. BIT #ERROR,RCSR ;IS ERROR BIT SET? BNE RCV030 ;YES MOVB MODE,R0 ;NO, BRANCH ON RECEIVE MODE S PC SET010 = . MOVB '0,(R0) ;ZERO MIN UNITS DIGIT CMPB -(R0),'5 ;IS TENS DIGIT EQ 5? BEQ SET020 ;YES BR SET005 ;NO, INCREMENT MIN TENS DIGIT SET020 = . MOVB '0,(R0) ;ZERO MIN TENS DIGIT CMPB -(R0),'4 ;IS HR UNITS DIGIT GE 4? BGE SET040 ;YES BR SET005 ;NO, INCREMENT HR UNITS DIGIT SET040 = . CMPB  .PAGE ; UPTIME -- TIME OF DAY UPDATE SUBROUTINE ; ; UPDATES ASCII TIME HHMM IN TIMEAS ; ; CALLING SEQUENCE -- ; ; JSR PC,UPTIME ; UPTIME = . JSR R5,PUSHR ;SAVE REGS MOV #MINUTE,TIMDAY ;SET TIMER MOV #TIMEAS+3,R0 CMPB (R0),#'9 ;IS MIN UNITS DIGIT EQ 9? BEQ SET010 ;YES SET005 = . INCB (R0) ;NO, INCREMENT DIGIT  ;ON HUB TTY ; ; ACK NOT RECEIVED, TRANSMIT AGAIN ; RCV810 = . CMPB R4,#NAK ;IS CHAR A NAK? BEQ RCV815 ;YES JMP RCV070 ;NO, IGNORE INTERRUPT RCV815 = . CLR ACKTMR ;RESET ACK TIMER DECB REPEAT ;DECR REPEAT COUNT BEQ RCV820 ;ALL TRYS EXHAUSTED? JMP RCV510 ;NO, TRY AGAIN ; RCV820 = . ASL R0 JMP @RCV010-4(R0) ; ; BRANCH TABLE ; RCV010 = . .WORD RCV100 ;RECEIVE STX MODE = 2 .WORD RCV150 ;RECEIVE DATA = 3 .WORD RCV200 ;RECEIVE BCC(MSB) = 4 .WORD RCV250 ;RECEIVE BCC(LSB) = 5 .WORD RCV320 ;RECEIVE EOT = 6 .WORD RCV700 ;RECEIVE ACK/NAK = 7 .WORD RCV7 -1(R0),'2 ;IS HR TENS DIGIT EQ 2? BEQ SET050 ;YES CMPB (R0),'9 ;NO, IS HR UNITS DIGIT EQ 9? BLT SET005 ;NO, INCR HR UNITS DIGIT MOVB '0,(R0) ;YES, ZERO HR UNITS DIGIT DEC R0 ;GO INCR HR TENS DIGIT BR SET005 SET050 = . MOVB '0,-1(R0) ;SET HR TENS DIGIT TO 0 MOVB '1,(R0) ;SET HR UNITS DIGIT TO 1 BR SET008 SET008 = . JSR R5,POPR ;RETURN RTS PC SET010 = . MOVB #'0,(R0) ;ZERO MIN UNITS DIGIT CMPB -(R0),#'5 ;IS TENS DIGIT EQ 5? BEQ SET020 ;YES BR SET005 ;NO, INCREMENT MIN TENS DIGIT SET020 = . MOVB #'0,(R0) ;ZERO MIN TENS DIGIT CMPB -(R0),#'3 ;IS HR UNITS DIGIT GE 3? BGE SET040 ;YES BR SET005  MOV #ERR01,MSG01F ;SET UP HUB ERROR MSG JMP RCV090 ;GO DROP LINE AND TYPE ERROR MESSAGE ; ; ; PREPARE INVOICE DATA IN EBCDIC CHARS AND WRITE ON MAG TAPE ; RCV900 = . MOV #TRNBUF+DATA+11.,R0 ;GET ADDR OF INVOICE IN BUFFER RCV905 = . MOVB (R0)+,R3 ;GET A CHAR ; ; DO ASCII/EBCDIC CONVERSION ; CMPB R3,#40 ;IS CHAR IN ASCII/EBCDIC TABLE? BLT RCV940 ;NO 00 ;RECEIVE ACK/NAK = 8 .WORD RCV700 ;RECEIVE ACK/NAK = 9 .WORD RCV265 ;RECEIVE X'FF' = 10 ; RCV020 = . JSR R5,POPR ;RESTORE REGS. RTI ;RETURN ; ; ERROR BIT PROCESSING ; RCV030 = . DECB MODE ;BRANCH ON MODE BMI RCV040 ;RING BEQ RCV050 ;CARRIER TRANSITION BIT .PAGE ;*********************************************************************** ;* ** ;* B L A N K ** ;* ** ;* THIS SUBROUTINE STORES N CONSECUTIVE BLANKS BEGINNING AT ** ;* LOCATION ADDR. THE LINKAGE IS: ** ;*  ;NO, INCREMENT HR UNITS DIGIT SET040 = . CMPB -1(R0),#'2 ;IS HR TENS DIGIT EQ 2? BEQ SET050 ;YES CMPB (R0),#'9 ;NO, IS HR UNITS DIGIT EQ 9? BLT SET005 ;NO, INCR HR UNITS DIGIT MOVB #'0,(R0) ;YES, ZERO HR UNITS DIGIT DEC R0 ;GO INCR HR TENS DIGIT BR SET005 SET050 = . MOVB #'0,-1(R0) ;SET HR TENS DIGIT TO 0 MOVB #' CMPB R3,#132 BGT RCV960 ;NO MOV R3,R5 ;YES, GET EBCDIC CHAR SUB #40,R5 MOVB EBCDIC(R5),R3 RCV908 = . ; ; FLIP DATA IN EACH BYTE OF INVOICE (MAG TAPE CONTROLLER FIX) ; MOV #1,R4 ;SET MASK TO BIT 0 RCV910 = . ASLB R3 ;SHIFT LSB TO C BCS RCV920 ;WAS LSB SET BICB R4,R5 ;NO, CLEAR APPROPRIATE BIT IN RESULT RCV9 #CARTRN,RCSR ;OTHER, HAVE WE LOST RECEIVE CARRIER? BNE RCV080 ;YES INCB RCVERR ;NO, INCR RECEIVE ERROR COUNT CLR RBUF ;CLEAR RCSR DONE BIT TO PREVENT OVERRUN BR RCV020 ;GO RETURN ; ; PROCESS A RING ; RCV040 = . BIT #RING,RCSR ;IS IT A RING? BEQ RCV020 ;NO, IGNORE INTERRUPT BIS #DTRDY,RCSR ;SET DATA TERMINAL READY MOVB #1 ** ;* R4 = ADDR ** ;* R5 = N ** ;* JSR PC,BLANK ** ;* ** ;*********************************************************************** ; BLANK = . MOVB #' ,(R4)+ ;MOVE IN A BLANK DEC R5 ;DECREMENT CHARACT0,(R0) ;SET HR UNITS DIGIT TO 0 BR SET008 .PAGE ;*********************************************************************** ;* ** ;* B L A N K ** ;* ** ;* THIS SUBROUTINE STORES N CONSECUTIVE BLANKS BEGINNING AT ** ;* LOCATION ADDR. THE LINKAGE IS: 15 = . ASLB R4 ;SHIFT MASK TO NEXT MOST SIG. BIT BEQ RCV925 ;DONE? BR RCV910 ;NO RCV920 = . BISB R4,R5 ;SET APPROPRIATE BIT BR RCV915 ;CONTINUE RCV925 = . MOVB R5,-1(R0) ;REPLACE BYTE WITH ITS FLIP CMP R0,#TRNBUF+DATA+11.+INVEND-INVOICE ;ALL DATA FLIPPED? BMI RCV905 ;NO, GET NEXT BYTE ; ; WRITE INVOIC,MODE ;SET MODE TO EXPECT CARRIER TRANSITION BR RCV020 ;GO RETURN ; ; PROCESS CARRIER TURNON ; RCV050 = . BIT #CARTRN,RCSR ;IS INT. A CARRIER TRANSITION? BEQ RCV020 ;NO, IGNORE INTERRUPT RCV060 = . BIT #DETECT,RCSR ;IS CARRIER DETECT ON? BEQ RCV080 ;NO MOVB #2,MODE ;SET RECEIVE MODE TO EXPECT STX CLRB RCVERR ;ZERO ERROR COUNT ER COUNTER BGT BLANK ;AND GO BACK FOR MORE RTS PC ;GO HOME .PAGE ;*********************************************************************** ;* ** ;* M O V E ** ;* ** ;* THIS SUBROUTINE MOVES N CHARACTERS FROM LOCATION ADDR1 TO ** ;* LOCATI ** ;* ** ;* R4 = ADDR ** ;* R5 = N ** ;* JSR PC,BLANK ** ;* ** ;*********************************************************************** ; BLANK = . MOVB #' ,(R4)+ E ON MAG. TAPE ; RCV930 = . MOV #11.,R5 ;SET NO. OF TRYS FOR WRITE RCV932 = . MOV #TRNBUF+DATA+11.,MA ;YES, PUT INVOICE ADDRESS IN ;MEMORY ADDRESS REGISTER MOV #INVEND-INVOICE/2,WC ;SET WORD COUNT DEC R5 ;DECR REPEAT COUNT BGT RCV933 ;ALL TRYS EXHAUSTED? MOV #WEXG,COM ;YES, WRITE EXTENDED GAP JSR PC,TAPRDY ;AT FRONT OF REC CLR RCVBUF+COUNT ;ZERO CHAR COUNT RCV070 = . BIS #ENABLE,RCSR ;ENABLE DC11 RECEIVE INT. BR RCV020 ;GO RETURN ; ; LOST RECEIVE CARRIER ; RCV080 = . MOV ERR00,MSG01F ;PUT ERROR CODE "00" IN ERROR MSG RCV090 = . BIC #DTRDY,RCSR ;RESET DATA TERMINAL READY CLRB MODE ;SET RECEIVE MODE TO EXPECT RING IOT ;TYPE - "TRANSMISSION ERROR XX!"ON ADDR2. THE LINKAGE IS: ** ;* ** ;* JSR R5,MOVE ** ;* .WORD ADDR1,ADDR2,N -------- ** ;* . . ! ** ;* . . ! ANY NUMBER OF PAIRS ** ;* . . ! ** ;*  ;MOVE IN A BLANK DEC R5 ;DECREMENT CHARACTER COUNTER BGT BLANK ;AND GO BACK FOR MORE RTS PC ;GO HOME .PAGE ;*********************************************************************** ;* ** ;* M O V E ** ;* ** ;* THIS SUBORD MOV #10.,R5 ;SET REPEAT C3UNT BR RCV935 RCV933 = . MOV #WRT,COM ;WRITE THE INVOICE ON TAPE JSR PC,TAPRDY RCV935 = . BIT #ERR,STAT ;IS FILE GOOD? BNE RCV938 ;NO, GO DO IT AGAIN JMP RCV578 ;GO TYPE CONTENTS OF RCVBUF AT HUB RCV938 = . BIC #ERR,STAT ;CLEAR ERROR BIT MOV #BCKR,COM ;BACKSPACE A RECOR  .WORD MSG01 .BYTE WRITE,TTYSLT RCV095 = . TSTB MSG01+STATUS BPL RCV095 BR RCV070 ;GO ENABLE RECEIVE INTERRUPT ; ; PROCESS STX ; RCV100 = . CMPB RBUF,#STX BNE RCV120 RCV110 = . CLR CLRBCC ;CLEAR BCC REGISTER MOVB #3,MODE ;SET RECEIVE MODE TO EXPECT DATA BR RCV020 ;GO RETURN RCV120 = . BIT  .WORD ADDR1,ADDR2,N -------- ** ;* .WORD -1 ** ;* ** ;* WHERE THE -1 TERMINATES THE LIST; EXECUTION RETURNS TO THE ** ;* FIRST INSTRUCTION AFTER THE -1. ** ;* ** ;***********************************************************************ROUTINE MOVES N CHARACTERS FROM LOCATION ADDR1 TO ** ;* LOCATION ADDR2. THE LINKAGE IS: ** ;* ** ;* JSR R5,MOVE ** ;* .WORD ADDR1,ADDR2,N -------- ** ;* . . ! ** ;* . . ! ANY NUMBER OF PAIRS ** ;* JSR PC,TAPRDY ;READY? BR RCV932 ;GO TRY AGAIN ; ; ; TAPRDY = . MOV #20.,R4 ;DELAY FOR CONTROLLER TO SET READY AFTER DEC R4 ;COMMAND BNE .-2 BIT #200,@#STAT ;IS CONTROLLER READY? BEQ .-6 RTS PC ;RETURN ; ; SPECIAL CHARACTER ASCII/EBCDIC CONVERSION ; RCV940 = . CMPB R3,#TAB ;TAB? BNE RC #PARITY,RCSR ;IS PARITY GOOD? BEQ RCV020 ;YES, IGNORE INTERRUPT INCB RCVERR ;NO, INCR ERROR COUNT BR RCV110 ;ASSUME IT WAS STX W/BAD PARITY ; ; PROCESS DATA CHAR ; RCV150 = . BIT #DONE,RCSR ;IS CHAR AVAIL? BEQ RCV020 ;NO, FALSE INTERRUPT MOVB RBUF,R4 ;GET CHAR MOVB R4,BCCOUT ;OUTPUT CHAR TO BCC REGISTER CMPB R4,#ETX  ; MOVE = . MOV (R5)+,R2 ;LOAD ADDRESS ADDR1 CMP R2,#-1 ;CHECK FOR END OF LIST BEQ MOVA10 ;AND BRANCH IF WE FOUND IT MOV (R5)+,R3 ;LOAD ADDRESS ADDR2 MOV (R5)+,R4 ;AND GET THE NO. OF CHARACTERS ; MOVA00 = . MOVB (R2)+,(R3)+ DEC R4 ;MOVE THE CHARACTER STRING BGT MOVA00 BR MOVE ;GO GET NEXT LIST ; MO . . ! ** ;* .WORD ADDR1,ADDR2,N -------- ** ;* .WORD -1 ** ;* ** ;* WHERE THE -1 TERMINATES THE LIST; EXECUTION RETURNS TO THE ** ;* FIRST INSTRUCTION AFTER THE -1. ** ;* ** V945 ;NO MOVB #5,R3 BR RCV908 RCV945 = . CMPB R3,#LF ;LF? BNE RCV950 ;NO MOVB #45,R3 BR RCV908 RCV950 = . CMPB R3,#FORM ;FORM? BNE RCV955 ;NO MOV #24,R3 BR RCV908 RCV955 = . CMPB R3,#CR ;CR? BNE RCV960 MOVB #25,R3 BR RCV908 RCV960 = .  ;IS CHAR AN ETX? BEQ RCV180 ;YES CMPB R4,#ETB ;IS CHAR AN ETB? BEQ RCV180 ;YES INC RCVBUF+COUNT ;INCR CHAR COUNT IN BUFFER HEADER MOV RCVBUF+COUNT,R0 ;GET COUNT CMP R0,#273. ;IS DATA CHAR COUNT .GT. 273? BGT RCV170 ;YES MOVB R4,RCVBUF+DATA-1(R0) ;PUT DATA INTO BUFFER RCV160 = . BR RCV020 ;GO RETURN ; RCV170 = VA10 = . RTS R5 .PAGE ;*********************************************************************** ;* ** ;* T E S T ** ;* ** ;* THIS SUBROUTINE TESTS N CONSECUTIVE CHARACTERS. IF ALL N ** ;* CHARACTERS ARE ASCII ZEROES OR BLANKS, THEN TEST RETURNS TO ** ;* LOCA;*********************************************************************** ; MOVE = . MOV (R5)+,R2 ;LOAD ADDRESS ADDR1 CMP R2,#-1 ;CHECK FOR END OF LIST BEQ MOVA10 ;AND BRANCH IF WE FOUND IT MOV (R5)+,R3 ;LOAD ADDRESS ADDR2 MOV (R5)+,R4 ;AND GET THE NO. OF CHARACTERS ; MOVA00 = . MOVB (R2)+,(R3)+ DEC R4 ;MOVE THE CHARACTER STRING BG MOVB #100,R3 ;SUBSTITUTE A BLANK (SPACE) BR RCV908 .PAGE ; ; DC11 TRANSMIT ROUTINE ; ; CALLING SEQUENCE: ; MOV #BUFFER,-(SP) ; JSR PC,D11OUT ; D11OUT = . JSR R5,PUSHR ;SAVE REGS. MOV 14.(SP),R0 ;GET BUFFER ADDRESS MOV R0,CURBUF ;SAVE CURRENT BUF ADDR BISB #BUSY,STATUS(R0);SET BUFFER BUSY CLR COUN. INCB RCVERR ;INCR ERROR COUNT BR RCV160 ;GO RETURN ; ; PROCESS ETX/ETB ; RCV180 = . MOVB #4,MODE ;SET MODE FOR RECEIVING BCC(MSB) BR RCV020 ;GO RETURN ; ; PROCESS MOST SIG. BYTE OF BCC ; RCV200 = . CMPB RBUF,BCCMSB ;DOES IT MATCH? BNE RCV210 ;NO RCV205 = . MOVB #5,MODE ;YES, SET MODE FOR RECEIPT OF BCC(LSB)TION 'RETURN'. OTHERWISE, CONTROL IS RETURNED AS USUAL. ** ;* ** ;* JSR R5,TEST ** ;* .WORD ADDR ;FIRST CHARACTER TO TEST ** ;* .WORD N ;NUMBER OF CHARACTERS ** ;* .WORD RETURN ;ZERO STRING RETURN ADDRESS ** ;* ** ;***T MOVA00 BR MOVE ;GO GET NEXT LIST ; MOVA10 = . RTS R5 .PAGE ;*********************************************************************** ;* ** ;* T E S T ** ;* ** ;* THIS SUBROUTINE TESTS N CONSECUTIVE CHARACTERS. IF ALL N ** ;* CHARACT(R0) ;ZRO CHAR COUNT BIS #REQSND,TCSR ;SET REQUEST TO SEND D11010 = . BIT #CLRSND,TCSR ;CLEAR TO SEND? BEQ D11010 ;NO ADD #DATA,R0 ;OUTPUT 1ST CHAR MOVB (R0),TBUF BIS #ENABLE,TCSR ;ENABLE TRANSMITTER INTERRUPT .IFNZ DEBUG ; D11015: BIT #REQSND,TCSR ;DONE TRANSMITTING? BEQ D11020 ;YES EMT 0 ;SIMULATE TRAN BR RCV020 ;GO, RETURN RCV210 = . INCB RCVERR ;INCR ERROR COUNT BR RCV205 ;GO SET MODE ; ; PROCESS LEAST SIG. BYTE OF BCC ; RCV250 = . CMPB RBUF,BCCLSB ;DOES IT MATCH? BNE RCV290 ;NO RCV260 = . MOVB #10.,MODE ;SET MODE TO EXPECT X'FF' JMP RCV020 ; ; RECEIVED "FF" ; RCV265 = . BIC #ENABLE,RCSR ******************************************************************** ; TEST = . MOV (R5)+,R3 ;LOAD ADDR MOV (R5)+,R4 ;AND LOAD N ; TESA00 = . CMPB (R3),#' ;IS IT BLANK? BEQ TESA10 ;BRANCH IF YES CMPB (R3)+,#'0 ;HOW ABOUT ZERO? BEQ TESA20 ;YES TST (R5)+ ;NON-ZERO AND NON-BLANK FOUND RTS R5 ;SO EFFECT NORMAL RETUTERS ARE ASCII ZEROES OR BLANKS, THEN TEST RETURNS TO ** ;* LOCATION 'RETURN'. OTHERWISE, CONTROL IS RETURNED AS USUAL. ** ;* ** ;* JSR R5,TEST ** ;* .WORD ADDR ;FIRST CHARACTER TO TEST ** ;* .WORD N ;NUMBER OF CHARACTERS ** ;* .WORD RETURN ;ZERO STRING RETURN ADDRESS ** ;* SMIT OUTPUT INTERRUPT BR D11015 ; D11020: CMPB #ACK,DATA(R0) BEQ D11025 ;DON'T PRINT IF IT'S ONLY AN ACK MOV #ACK,RBUF ;PUT ACK IN DUMMY RECEIVE BUFFER MOV #DONE,RCSR ;SET CHARACTER READY BIT TRAP ;AND SIMULATE THE CP 'ACK' SIGNAL IOT ;PRINT OUTPUT BUFFER ON ASR .WORD TRNBUF .BYTE WRITE,TTYSLT D11023 = . TSTB TRNBUF;DISABLE RECEIVE INTERRUPTS MOV #RCVBUF+DATA+10.,R0 ;GET DATE/TIME FROM MSG RECEIVED MOV #DAYTIM,R1 RCV270 = . MOVB (R0)+,(R1)+ CMP R0,#RCVBUF+DATA+16. BLE RCV270 TSTB RCVERR ;ANY ERRORS IN TRANSMISSION? BNE RCV300 ;YES MOVB #ACK,TRNBUF+DATA ;PUT "ACK,FF" INTO DC11 OUTPUT BUFFER MOVB #FF,TRNBUF+DATA+1 MOV #2,TRNBUF ;SET NO. CHARS TO 2 RN ; TESA10 = . INC R3 ; TESA20 = . DEC R4 ;DECREMENT CHARACTER COUNTER BGT TESA00 ;BRANCH BACK FOR MORE MOV (R5)+,R5 ;AT THIS POINT, ALL CHARS ARE ZERO RTS R5 ;OR BLANK. SO EXIT TO 'RETURN' .PAGE ;*********************************************************************** ; * ;  ** ;*********************************************************************** ; TEST = . MOV (R5)+,R3 ;LOAD ADDR MOV (R5)+,R4 ;AND LOAD N ; TESA00 = . CMPB (R3),#' ;IS IT BLANK? BEQ TESA10 ;BRANCH IF YES CMPB (R3)+,#'0 ;HOW ABOUT ZERO? BEQ TESA20 ;YES TST (R5)+ ;NON-ZERO AND +STATUS BPL D11023 BICB #BUSY,STATUS(R0) ; D11025 = . .ENDC JSR R5,POPR ;RESTORE REGS MOV (SP)+,(SP) ;SWAP PC AND BUF ADDR; POP STACK RTS PC ;RETURN .PAGE ; ; DC11 TRANSMITTER INTERRUPT ROUTINE ; TRNINT = . JSR R5,PUSHR ;SAVE REGS MOV CURBUF,R0 ;GET CURRENT BUFFER INC COUNT(R0) ;INCR CHAR COUNT CMMOV #TRNBUF,-(SP) ;CALL DC11 OUTPUT ROUTINE JSR PC,D11OUT RCV280 = . TSTB TRNBUF+STATUS ;ALL DONE? BMI RCV280 ;NO MOV #EOTTIM,EOTTMR ;SET EOT TIMER MOVB #6,MODE ;SET RECEIVE MODE TO EXPECT EOT BR RCV070 ;GO WAIT FOR EOT ; RCV290 = . INCB RCVERR ;INCR ERROR COUNT BR RCV260 RCV300 = . MOVB #NAK,TRNBUF+DATA ;PUT "NAK,F P U S H R * ; * ; PROGRAM IDENTIFICATION. PUSHR - PUSH REGISTERS SUBROUTINE; * ; CATALOG NUMBER * ; * ; PURPOSE. SUBROUTINE PUSHR PUSHES R0-R5 ONTO THE CURRENT STACK * ; * ; USAGE.NON-BLANK FOUND RTS R5 ;SO EFFECT NORMAL RETURN ; TESA10 = . INC R3 ; TESA20 = . DEC R4 ;DECREMENT CHARACTER COUNTER BGT TESA00 ;BRANCH BACK FOR MORE MOV (R5)+,R5 ;AT THIS POINT, ALL CHARS ARE ZERO RTS R5 ;OR BLANK. SO EXIT TO 'RETURN' .PAGE ;*********************************************************************** ; P COUNT(R0),(R0) ;HAVE ALL CHARS BEEN TRANSMITTED? BGE TRN020 ;YES MOV R0,R1 ;SET POINTER TO NEXT CHAR ADD #DATA,R1 ADD COUNT(R0),R1 MOVB (R1),TBUF ;PUT CHAR IN TRANSMIT REGISTER TRN010 = . JSR R5,POPR ;RESTORE REGS RTI ;RETURN ; TRN020 = . BIC #ENABLE,TCSR ;DISABLE TRANSMIT INTERRUPT BIC #REQSND,TCSR ;RESETF" INTO DC11 OUTPUT BUFFER MOVB #FF,TRNBUF+DATA+1 MOV #2,TRNBUF ;SET NO. CHARS TO 2 MOV #TRNBUF,-(SP) ;CALL DC11 OUTPUT ROUTINE JSR PC,D11OUT RCV310 = . TSTB TRNBUF+STATUS ;ALL DONE? BMI RCV310 ;NO JMP RCV060 ;GO WAIT FOR REPEATED MSG FROM TERMINAL ; ; PROCESS RECEIPT OF EOT ; RCV320 = . CLR EOTTMR ;RESET EOT TIMER BIC #E THE ASSEMBLER LINKAGE TO SUBROUTINE PUSHR IS: * ; * ; JSR R5,PUSHR * ; * ;*********************************************************************** ; R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 SP = %6 ;  * ; P U S H R * ; * ; PROGRAM IDENTIFICATION. PUSHR - PUSH REGISTERS SUBROUTINE; * ; CATALOG NUMBER * ; * ; PURPOSE. SUBROUTINE PUSHR PUSHES R0-R5 ONTO THE CURRENT STACK * ;  REQUEST TO SEND TRN030 = . BIT #DETECT,RCSR ;WAIT FOR TRANSMIT CARRIER TO DROP BNE TRN030 MOV #CARTIM,CARTMR ;SET CARRIER TIMER TRN040 = . TST CARTMR ;TIMEOUT? BEQ TRN050 ;YES BIT #DETECT,RCSR ;WAIT FOR DETECT OF RECEIVE CARRIER BEQ TRN040 CLR CARTMR ;RESET CARRIER TIMER TRN050 = . BICB #BUSY,STATUS(R0);SET STATUS NOT BUSY NABLE,RCSR ;DISABLE RECEIVE INTERRUPT CLR R4 BISB RCVBUF+DATA+5,R4 ;GET SWAB R4 ; ACTION BISB RCVBUF+DATA+6,R4 ; CODE CMP R4,#AUTOTR ;IS IT AUTO TRANSACTION? BEQ RCV330 ;YES CMP R4,#AUDTRL ;IS IT AUDIT TRAIL? BEQ RCV330 ;YES CMP R4,#AUDERR ;IS IT AN AUDIT ERROR? BEQ RC.530 ;YES CMP  * PUSHR = . MOV R4,-(SP) ;PUSH R5, R4, R3, R2, R1, AND R0 ONTO MOV R3,-(SP) ;THE CURRENT STACK IN THAT ORDER MOV R2,-(SP) MOV R1,-(SP) MOV R0,-(SP) JMP (R5) ;RETURN .PAGE ;*********************************************************************** ; * ;  * ; USAGE. THE ASSEMBLER LINKAGE TO SUBROUTINE PUSHR IS: * ; * ; JSR R5,PUSHR * ; * ;*********************************************************************** ; R0 = %0 R1 = %1 R2 = %2 R3 = %3 BR TRN010 ;GO RETURN .PAGE ; ; HEADER -- ROUTINE TO PUT HEADER IN TRANSMIT BUFFER; I.E. ; STX, SPECIAL CHAR, DATE AND TIME ; ; CALLING SEQUENCE -- ; ; MOV #DEVICE,-(SP) ; JSR PC,HEADER ; ; CONDITIONS UPON ENTRY -- ; ; SPECIAL CODE FOR DEVICE SELECTION IS ON STACK ; ; CONDITIONS UPON EXIT -- ; ; R0 POINTS TO NEXT AVAILABLE BYTE IN TRNBUFR4,#MANUAL ;IS IT A MANUAL TRANSACTION? BEQ RC.570 ;YES CMP R4,#CONTIN ;IS IT A CONTINUE EOD REPORT REQUEST? BEQ RC.620 ;YES IOT ;NO, ERRONEOUS ACTION CODE .WORD MSG02 ;TYPE ERROR MESSAGE .BYTE WRITE,TTYSLT RCV325 = . TSTB MSG02+STATUS BPL RCV325 MOV #RCVBUF+MSGDAT,R0 JMP RCV575 ;GO TYPE CONTENTS OF MSG ON HU P O P R * ; * ; PROGRAM IDENTIFICATION. POPR - POP REGISTERS SUBROUTINE; * ; CATALOG NUMBER * ; * ; PURPOSE. SUBROUTINE POPR POPS R0-R5 OFF THE CURRENT STACK * ;  R4 = %4 R5 = %5 SP = %6 ; * PUSHR = . MOV R4,-(SP) ;PUSH R5, R4, R3, R2, R1, AND R0 ONTO MOV R3,-(SP) ;THE CURRENT STACK IN THAT ORDER MOV R2,-(SP) MOV R1,-(SP) MOV R0,-(SP) JMP (R5) ;RETURN .PAGE ;*********************************************************************** ;  ; R1 IS USED AND NOT RESTORED ; HEADER = . MOV #TRNBUF+DATA,R0 ;GET DATA ADDRESS IN TRANSMIT BUFFER MOVB #STX,(R0)+ ;STX CHAR TO HEADER CLR CLRBCC ;CLEAR BCC REGISTER JSR PC,DELAY ;DELAY FOR BCC HDWR MOVB 2(SP),(R0) ;DEVICE CODE TO HEADER MOVB (R0)+,BCCOUT ;OUTPUT TO BCC CALCULATOR JSR PC,DELAY ;DELAY FOR BCC HDWR MOV #JULDAY,R1 ;PB TTY RC.530: JMP RCV530 RC.570: JMP RCV570 RC.620: JMP RCV620 ; ; PROCESS AUTO TRANSACTION OR AUDIT TRAIL ; .PAGE ;* ;* F O R M A T A N I N V O I CE ;* RCV330 = . MOV #CODE1,R4 ;FIRST, BLANK OUT THE APPROPRIATE MOV #46.,R5 ;PARTS OF THE INVOICE BUFFER JSR PC,BLANK ;THAT CONTAIN PRODUCT INFORMATION MOV #CODE2,R4 MOV #46.,R5 JSR PC,BLANK  * ; USAGE. THE ASSEMBER LINKAGE TO SUBROUTINE POPR IS: * ; * ; JSR R5,POPR * ; * ;*********************************************************************** ; R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 SP =  * ; P O P R * ; * ; PROGRAM IDENTIFICATION. POPR - POP REGISTERS SUBROUTINE; * ; CATALOG NUMBER * ; * ; PURPOSE. SUBROUTINE POPR POPS R0-R5 OFF THE CURRENT STACK *UT JULIAN DATE INTO BUFFER HEADER HEAD10 = . MOVB (R1)+,(R0) MOVB (R0)+,BCCOUT JSR PC,DELAY CMP R1,#JULEND BLT HEAD10 MOVB PS,-(SP) ;LOCKOUT TIMER UPDATE MOVB #340,PS MOV #TIMEAS,R1 ;PUT HUB TIME INTO HEADER HEAD20 = . MOVB (R1)+,(R0) MOVB (R0)+,BCCOUT JSR PC,DELAY CMP R1,#TIMEAS+5 ;ONE EXTRA CHARACTER FOR BLT  MOV #CODE3,R4 MOV #46.,R5 JSR PC,BLANK INCB SERNO1 ;INCREMENT TRANSACTION SERIAL NUMBER INCB SERNO2 INCB NUMBER ;INCREMENT INVOICE NUMBER CLR R0 ;GET CUSTOMER NO. FROM INPUT BUFFER MOVB RCVBUF+DATA+CUST+CUSTSZ-1,R1 ;GET CUST NO (LAST CHAR) BIC #177600,R1 ;MUST BE 1, 2, OR 3 SUB #61,R1 ;CONVERT TO INDEX (0,1,2) %6 ; * POPR = . TST (SP)+ MOV (SP)+,R0 ;POP R0, R1, R2, R3, R4, AND R5 OFF MOV (SP)+,R1 ;THE CURRENT STACK IN THAT ORDER MOV (SP)+,R2 MOV (SP)+,R3 MOV (SP)+,R4 RTS R5 ;RETURN .END  ; * ; USAGE. THE ASSEMBER LINKAGE TO SUBROUTINE POPR IS: * ; * ; JSR R5,POPR * ; * ;*********************************************************************** ; R0 = %0 R1 = %1 R2 = %2  HEAD20 ;A 10 CHAR HEADER (FOR ANDY) MOVB (SP)+,PS ;RELEASE LOCKOUT MOV (SP)+,(SP) ;CLEANUP STACK RTS PC ;RETURN TO CALLER .PAGE ; ; TRAILR -- ROUTINE TO PUT TRAILER IN TRANSMIT BUFFER: I.E. ; ETX/ETB,BCC,FF; ALSO PUTS CHAR COUNT IN TRNBUF HEADER ; ; CALLING SEQUENCE -- ; ; MOV #TERMCH,-(SP) ; JSR PC,TRAILR ; ; CONDITIONS UPON ENTR BLT INV010 CMP R1,#3 BLT INV015 ; INV010 = . CLR R1 ; INV015 = . ASL R1 MOV ALPHA1(R1),INV020 ;ADDRESS OF CUSTOMER NAME MOV ALPHA2(R1),INV030 ;ADDRESS, AND MOV ALPHA3(R1),INV040 ;CITY JSR R5,MOVE INV020: .WORD 0,NAME,20. ;MOVE CUSTOMER NAME TO INVOICE INV030: .WORD 0,ADDRESS,20. ;AND ADDRESS INV040: .WORD 0,CITY,20.R3 = %3 R4 = %4 R5 = %5 SP = %6 ; * POPR = . TST (SP)+ MOV (SP)+,R0 ;POP R0, R1, R2, R3, R4, AND R5 OFF MOV (SP)+,R1 ;THE CURRENT STACK IN THAT ORDER MOV (SP)+,R2 MOV (SP)+,R3 MOV (SP)+,R4 RTS R5 ;RETURN .END Y -- ; ; TERMINATING CHAR ETX OR ETB IS RT. JUSTIFIED ON STACK ; RO POINTS TO NEXT AVAIL BYTE IN TRNBUF ; TRAILR = . MOVB 2(SP),(R0) ;PUT TERMINATING CHAR IN TRNBUF MOVB (R0)+,BCCOUT ;CALC BCC JSR PC,DELAY ;DELAY FOR BCC HDWR MOVB BCCMSB,(R0)+ ;PUT BCC IN BUFFER MOVB BCCLSB,(R0)+ MOVB #FF,(R0)+ SUB #TRNBUF+DATA,R0 ;GET CHAR COUNT AND MOV  ;AND CITY/STATE .WORD RCVBUF+DATA+CARNO,CARRIER,CARSZ .WORD RCVBUF+DATA+DRNO,DRIVER,DRSZ .WORD DATEAS,DATE,6 .WORD RCVBUF+DATA+13.,TIME,4 .WORD RCVBUF+DATA+CUST,CUSTNO,CUSTSZ .WORD -1 ;* ;* NOW GET PRODUCT INFORMATION AND PUT IN INVOICE BUFFER ;* JSR R5,TEST .WORD RCVBUF+DATA+FLOW1,FLOWSZ,INV100 ;ANY PRODUCT 1 INFO? JSR R5,MOVE ;YES - MOV INTO INVOICE .WORD R0,TRNBUF ;PUT INTO BUFFER HEADER MOV (SP)+,(SP) ;CLEAN UP STACK RTS PC ;RETURN .PAGE ; ; DELAY BETWEEN OUTPUTS TO BCC CALC REGISTER ; ; CALLING SEQUENCE ; ; JSR PC,DELAY ; DELAY = . NOP NOP NOP RTS PC .PAGE ; ; LINE FREQUENCY CLOCK INTERRUPT ROUTINE ; CLKINT = . JSR R5,PUSHR ;SAVE REGS MOV KODE1,CODE1,2 .WORD PRNAM1,PROD1,PRSZ .WORD RCVBUF+DATA+FLOW1,VOL1,FLOWSZ .WORD RCVBUF+DATA+T1,TEMP1,TEMPSZ .WORD -1 ; INV100 = . JSR R5,TEST ;AND NOW FOR PRODUCT # 2 .WORD RCVBUF+DATA+FLOW2,FLOWSZ,INV200 JSR R5,MOVE .WORD KODE2,CODE2,2 .WORD PRNAM2,PROD2,PRSZ .WORD RCVBUF+DATA+FLOW2,VOL2,FLOWSZ .WORD RCVBUF+DATA+T2,TEMP2,TEMPSZ .WORD -1 ;  #TIMER,R0 ;GET BEGINNING OF TIMER TABLE CLK010 = . CMP R0,#TIMEND ;HAVE ALL TIMERS BEEN UPDATED? BGE CLK030 ;YES TST (R0) ;IS TIMER INACTIVE (ZERO)? BEQ CLK020 ;YES DEC (R0) ;DECREMENT COUNTER BEQ CLK040 ;TIMEOUT? CLK020 = . CMP (R0)+,(R0)+ ;NO, BUMP POINTER TO NEXT ENTRY IN BR CLK010 ;TIMER TABLE ; CLK0INV200 = . JSR R5,TEST ;AND FINALLY, PRODUCT # 3 .WORD RCVBUF+DATA+FLOW3,FLOWSZ,INV300 JSR R5,MOVE .WORD KODE3,CODE3,2 .WORD PRNAM3,PROD3,PRSZ .WORD RCVBUF+DATA+FLOW3,VOL3,FLOWSZ .WORD RCVBUF+DATA+T3,TEMP3,TEMPSZ .WORD -1 ; INV300 = . MOV #R035,-(SP) JSR PC,HEADER ;CREATE HEADER FOR INVOICE MOV #INVOICE,R1 MOV #BCCOUT,R2 30 = . JSR R5,POPR ;RESTORE REGS RTI ;RETURN ; CLK040 = . JSR PC,@2(R0) ;CALL TIMEOUT SUBROUTINE BR CLK020 ;GO LOOK AT NEXT TIMER .PAGE ; ; EOTTO -- EOT TIMEOUT SUBR ; ; CALLING SEQUENCE -- ; ; JSR PC,EOTTO ; EOTTO = . JSR R5,PUSHR ;SAVE REGS MOV #ERR03,MSG01F ;TYPE -- "TRANSMISSION ERROR 03!" INV310 = . MOVB (R1)+,(R0) ;MOVE INVOICE TO THE MOVB (R0)+,(R2) ;DC11 OUTPUT BUFFER JSR PC,DELAY ;DELAY FOR BCC HARDWARE CMP R1,#INVEND ;END OF INVOICE? BNE INV310 ;BRANCH IF NO MOV #ETX,-(SP) ;OTHERWISE, SELECT ETX AND JSR PC,TRAILR ;GO MAKE A TRAILER MOVB #7,MODE ;SET RECEIVE MODE TO EXPECT ACK/NAK RCV500 = . ;AFTER TRASM BR ACK010 .PAGE ; ; CARTO -- TIMEOUT WHILE WAITING FOR RECEIVE ; CARRIER AFTER TRANSMITTING ; ; CALLING SEQUENCE -- ; ; JSR PC,CARTO ; CARTO = . JSR R5,PUSHR ;SAVE REGS MOV #ERR04,MSG01F ;TYPE -- "TRANSMISSION ERR 04" BR ACK010 .PAGE ; ; ACKTO -- ACK TIMEOUT ROUTINE ; ; CALLING SEQUENCE -- ; ; JSR PC,ACKTO ; ACITTING INVOICE MOVB #8.,REPEAT ;SET NO. OF OUTPUT TRYS RCV510 = . MOV #TRNBUF,-(SP) ;CALL DC11 TRANSMIT ROUTINE JSR PC,D11OUT RCV520 = . TSTB TRNBUF+STATUS ;ALL DONE? BMI RCV520 ;NO .IFZ DEBUG MOV #ACKTIM,ACKTMR ;SET ACK TIMER .ENDC JMP RCV070 ;GO WAIT FOR ACK ; ; PROCESS ERRONEOUS AUDIT TRAIL ; RCV530 = . MOVB #A KTO = . JSR R5,PUSHR ;SAVE REGS MOV #ERR02,MSG01F ;TYPE -- "TRANSMISSION ERROR 02!" ACK010 = . BIC #DTRDY,RCSR ;RESET DATA TERMINAL READY CLRB MODE ;SET RECEIVE MODE TO EXPECT RING CLRB RBUF ;CLEAR DC11 RECEIVE BUFFER BIS #ENABLE,RCSR ;ENABLE DC11 RECEIVE INTERRUPTS JSR R5,POPR ;RESTORE REGISTERS RTS PC ;RETURN .PAGE SR33,-(SP) ;PUT MSG HEADER IN TRANSMIT BUFFER JSR PC,HEADER ;SPECIFY OUTPUT TO ASR33 MOV #TMSG00,R1 ;GET MSG ADDRESS RCV550 = . MOVB (R1)+,(R0) ;MOVE A CHAR TO BUFFER MOVB (R0)+,BCCOUT ;CALC BCC JSR PC,DELAY ;DELAY FOR BCC HDWR CMP R1,#TMSG01 ;ALL CHARS MOVED? BLE RCV550 ;NO MOVB #ETX,-(SP) ;PUT TRAILER INTO BUFFER JSR PC,TRAILR  ; UPTIME -- TIME OF DAY UPDATE SUBROUTINE ; ; UPDATES ASCII TIME HHMM IN TIMEAS ; ; CALLING SEQUENCE -- ; ; JSR PC,UPTIME ; UPTIME = . JSR R5,PUSHR ;SAVE REGS MOV #MINUTE,TIMDAY ;SET TIMER MOV #TIMEAS+3,R0 CMPB (R0),#'9 ;IS MIN UNITS DIGIT EQ 9? BEQ SET010 ;YES SET005 = . INCB (R0) ;NO, INCREMENT DIGIT SET008 =  MOVB #8.,MODE ;SET RECEIVE MODE TO EXPECT ACK/NAK ;AFTER SENDING BR RCV500 ;GO TRANSMIT TO TERMINAL ; ; PROCESS MANUAL ENTRY ; RCV570 = . MOV #RCVBUF+MSGDAT,R0 ;GET ADDRESS OF MESSAGE DATA CMPB (R0),#'. ;IS FIRST CHAR A PERIOD? BEQ RCV590 ;YES RCV575 = . BIC #DTRDY,RCSR ;NO, DROP LINE BY RESET DATA TERM. RDY CLRB MODE  . JSR R5,POPR ;RETURN RTS PC SET010 = . MOVB #'0,(R0) ;ZERO MIN UNITS DIGIT CMPB -(R0),#'5 ;IS TENS DIGIT EQ 5? BEQ SET020 ;YES BR SET005 ;NO, INCREMENT MIN TENS DIGIT SET020 = . MOVB #'0,(R0) ;ZERO MIN TENS DIGIT CMPB -(R0),#'3 ;IS HR UNITS DIGIT GE 3? BGE SET040 ;YES BR SET005 ;NO, ;SET RECEIVE MODE TO EXPECT RING RCV578 = . MOV RCVBUF+COUNT,R1 ;GET NO. CHARS IN MSG (LESS HEADER) SUB #HDRSIZ,R1 MOV R1,TTOBUF+COUNT ;PUT CHAR COUNT INTO TTY BUFFER MOV #TTOBUF+DATA,R2 ;GET TTY BUFFER DATA ADDRESS RCV580 = . MOVB (R0),(R2)+ ;MOVE DATA FROM DC11 RECEIVE BUFFER CMPB (R0)+,#CR ;IS CHAR A CR? BNE RCV582 ;NO MOVB #LF,(R2)+ ;YES, INSERT A L INCREMENT HR UNITS DIGIT SET040 = . CMPB -1(R0),#'2 ;IS HR TENS DIGIT EQ 2? BEQ SET050 ;YES CMPB (R0),#'9 ;NO, IS HR UNITS DIGIT EQ 9? BLT SET005 ;NO, INCR HR UNITS DIGIT MOVB #'0,(R0) ;YES, ZERO HR UNITS DIGIT DEC R0 ;GO INCR HR TENS DIGIT BR SET005 SET050 = . MOVB #'0,-1(R0) ;SET HR TENS DIGIT TO 0 MOVB #'0,(R0) F FOR TYPEOUT INC TTOBUF+COUNT RCV582 = . DEC R1 ;TO TTY OUTPUT BUFFER BNE RCV580 IOT ;PRINT MSG ON HUB TTY .WORD TTOBUF .BYTE WRITE,TTYSLT RCV585 = . TSTB TTOBUF+STATUS BPL RCV585 JMP RCV070 ;GO ENABLE RECEIVE INTERRUPT ; ; PREPARE 1ST PORTION OF END OF DAY REPORT FOR OUTPUT ; RCV590 = . MOVB #ASR33,-(S ;SET HR UNITS DIGIT TO 0 BR SET008 .PAGE ;*********************************************************************** ;* ** ;* B L A N K ** ;* ** ;* THIS SUBROUTINE STORES N CONSECUTIVE BLANKS BEGINNING AT ** ;* LOCATION ADDR. THE LINKAGE IS: P) ;PUT MSG HDR IN BUF JSR PC,HEADER MOV #TTIBUF+DATA,R1 ;GET DATA ADDRESS RCV600 = . MOVB (R1)+,(R0) ;MOVE CHAR TO BUF MOVB (R0),BCCOUT ;CALC BCC JSR PC,DELAY ;DELAY FOR BCC HDWR CMP R1,#TTIBUF+DATA+210. ;ARE 1ST 210. CHARS IN BUF? BLT RCV600 ;NO MOVB #ETB,-(SP) ;PUT ETB TRAILER IN BUF JSR PC,TRAILR RCV610 = . MOVB #9.,MO** ;* ** ;* R4 = ADDR ** ;* R5 = N ** ;* JSR PC,BLANK ** ;* ** ;*********************************************************************** ; BLANK = . MOVB #' ,(R4)+ ;MOVE DE ;SET MODE TO EXPECT ACK/NAK AFTER ;1ST PART OF END OF DAY REPORT BR RCV500 ; ; PREPARE 2ND PORTION OF END OF DAY REPORT FOR OUTPUT ; RCV620 = . MOVB #ASR33,-(SP) ;PUT MSG HDR IN BUF JSR PC,HEADER MOV #TTIBUF+DATA+211.,R1 ;GET DATA ADDRESS MOV TTIBUF+COUNT,R3 ADD #TTIBUF+DATA,R3 ;GET ADDRESS OF END OF DATA RCV630 = . MOVB (R1)+,(R0) #IN A BLANK DEC R5 ;DECREMENT CHARACTER COUNTER BGT BLANK ;AND GO BACK FOR MORE RTS PC ;GO HOME .PAGE ;*********************************************************************** ;* ** ;* M O V E ** ;* ** ;* THIS SUBROUTINE MO$;MOVE CHAR TO BUF MOVB (R0)+,BCCOUT ;CALC BCC JSR PC,DELAY ;DELAY FOR BCC HDWR CMP R1,R3 ;ARE ALL CHARS OUT BLT RCV630 ;NO MOVB #ETX,-(SP) ;PUT ETX TRAILER IN BUF JSR PC,TRAILR BR RCV610 ;GO SET RECEIVE MODE ; ; PROCESS ACK/NAK AFTER SENDING RESPONSE TO CP ; RCV700 = . BIC #ENABLE,RCSR ;DISABLE DC11 RCV INT. MOVB RBUF,R4 'VES N CHARACTERS FROM LOCATION ADDR1 TO ** ;* LOCATION ADDR2. THE LINKAGE IS: ** ;* ** ;* JSR R5,MOVE ** ;* .WORD ADDR1,ADDR2,N -------- ** ;* . . ! ** ;* . . ! ANY NUMBER OF PAIRS ** ;* . ( ;GET CHAR CLR ACKTMR ;RESET ACK TIMER CMPB R4,#ACK ;IS CHAR AN ACK? BNE RCV810 ;NO CMPB MODE,#8. ;BRANCH ON MODE BLT RCV710 ; = 7 ACK AFTER SENDING INVOICE BEQ RCV800 ; = 8 ACK AFTER SENDING AUDIT ERR MSG ; = 9 ACK AFTER SENDING EOD REPORT BIC #DTRDY,RCSR ;DROP LINE - RESET DATA TERMINAL READY CLRB MO+ . ! ** ;* .WORD ADDR1,ADDR2,N -------- ** ;* .WORD -1 ** ;* ** ;* WHERE THE -1 TERMINATES THE LIST; EXECUTION RETURNS TO THE ** ;* FIRST INSTRUCTION AFTER THE -1. ** ;* ** ;*********,DE ;SET MODE TO EXPECT RING JMP RCV070 ;GO ENABLE RECEIVE INTERRUPT ; RCV710 = . BIC #DTRDY,RCSR ;DROP LINE - RESET DATA TERMINAL READY CLRB MODE ;SET MODE TO EXPECT RING ;* * * * * * * F R I L L * * * * * * * JMP RCV070 ; RCV800 = . BIC #DTRDY,RCSR ;DROP LINE CLRB MODE ;SET MODE TO EXPECT RING IOT ;TYPE -- "ERROR IN AUDIT T/************************************************************** ; MOVE = . MOV (R5)+,R2 ;LOAD ADDRESS ADDR1 CMP R2,#-1 ;CHECK FOR END OF LIST BEQ MOVA10 ;AND BRANCH IF WE FOUND IT MOV (R5)+,R3 ;LOAD ADDRESS ADDR2 MOV (R5)+,R4 ;AND GET THE NO. OF CHARACTERS ; MOVA00 = . MOVB (R2)+,(R3)+ DEC R4 ;MOVE THE CHARACTER STRING BGT MOVA0RAIL!" .WORD MSG03 .BYTE WRITE,TTYSLT RCV805 = . TSTB MSG03+STATUS BPL RCV805 MOV #RCVBUF+MSGDAT,R0 BR RCV578 ;GO TYPE CONTENTS OF RCVBUF ;ON HUB TTY ; ; ACK NOT RECEIVED, TRANSMIT AGAIN ; RCV810 = . DECB REPEAT ;DECR REPEAT COUNT BEQ RCV820 ;ALL TRYS EXHAUSTED? JMP RCV510 ;NO, TRY AGAIN ; RC ND.E N URET;R R5 S RT R4+,P)(S V MO R3+,P)(S V MO R2+,P)(S V MO ERRD OATTHN ICKTA SNTREUR CHE;T R1+,P)(S V MO F OF5 RND A4, R3, R2, R1, R0, ROP;P R0+,P)(S V MO + P)(S T TS . = PRPO * ; %6 = SP %5 = R5 %4 = R4 %3 300 BR MOVE ;GO GET NEXT LIST ; MOVA10 = . RTS R5 .PAGE ;*********************************************************************** ;* ** ;* T E S T ** ;* ** ;* THIS SUBROUTINE TESTS N CONSECUTIVE CHARACTERS. IF ALL N ** ;* CHARACTERS ARE A4V820 = . MOV #ERR02,MSG01F ;SET UP HUB ERROR MSG JMP RCV090 ;GO DROP LINE AND TYPE ERROR MESSAGE .PAGE ; ; DC11 TRANSMIT ROUTINE ; ; CALLING SEQUENCE: ; MOV #BUFFER,-(SP) ; JSR PC,D11OUT ; D11OUT = . JSR R5,PUSHR ;SAVE REGS. MOV 14.(SP),R0 ;GET BUFFER ADDRESS MOV R0,CURBUF ;SAVE CURRENT BUF ADDR BI= R3 %2 = R2 %1 = R1 %0 = R0 ; **********************************************************************;* * ; * R OP,PR5 R JS ; * ; * : ISR OP PNETIOUBRSUO TGEKAIN LERMBSEASE TH E.AGUS ; * 7SCII ZEROES OR BLANKS, THEN TEST RETURNS TO ** ;* LOCATION 'RETURN'. OTHERWISE, CONTROL IS RETURNED AS USUAL. ** ;* ** ;* JSR R5,TEST ** ;* .WORD ADDR ;FIRST CHARACTER TO TEST ** ;* .WORD N ;NUMBER OF CHARACTERS ** ;* .WORD RETURN ;ZERO STRING RETURN ADDRESS ** ;* 8SB #BUSY,STATUS(R0);SET BUFFER BUSY CLR COUNT(R0) ;ZRO CHAR COUNT BIS #REQSND,TCSR ;SET REQUEST TO SEND D11010 = . BIS #ENABLE,TCSR ;ENABLE TRANSMITTER INTERRUPT .IFNZ DEBUG ; D11015: BIT #REQSND,TCSR ;DONE TRANSMITTING? BEQ D11020 ;YES EMT 0 ;SIMULATE TRANSMIT OUTPUT INTERRUPT BR D11015 ; D11020: CMPB #ACK,DATA(R0) BEQ ; * CKTA SNTREUR CHE TFF OR50- RPSPOR OP PNETIOUBRSU E.OSRPPU ; * ; * ERMBNUG LOTACA ; * ; NETIOUBRSUS ERSTGIREP PO- R OP P. ONTICAFITIENIDM RAOGPR ; * ; * R P O P ; * ; ** ;*********************************************************************** ; TEST = . MOV (R5)+,R3 ;LOAD ADDR MOV (R5)+,R4 ;AND LOAD N ; TESA00 = . CMPB (R3),#' ;IS IT BLANK? BEQ TESA10 ;BRANCH IF YES CMPB (R3)+,#'0 ;HOW ABOUT ZERO? BEQ TESA20 ;YES TST (R5)+ ;NON-ZERO AND NON-BLANK < D11025 ;DON'T PRINT IF IT'S ONLY AN ACK MOV #ACK,RBUF ;PUT ACK IN DUMMY RECEIVE BUFFER MOV #DONE,RCSR ;SET CHARACTER READY BIT TRAP ;AND SIMULATE THE CP 'ACK' SIGNAL IOT ;PRINT OUTPUT BUFFER ON ASR .WORD TRNBUF .BYTE WRITE,TTYSLT D11023 = . TSTB TRNBUF+STATUS BPL D11023 BICB #BUSY,STATUS(R0) ; D11025 = . .ENDC ; **********************************************************************;* E AG.P N URET;R 5)(R P JM P)(S,-R0 V MO P)(S,-R1 V MO P)(S,-R2 V MO ERRD OATTHN ICKTA SNTREUR CHE;T P)(S,-R3 V MO O NT OR0D AN, R1, R2, R3, R4, R5H US;P P)(S,-R4 V MO . = R SHPU * ; %6 = SP %5 = R5 %4 = ?FOUND RTS R5 ;SO EFFECT NORMAL RETURN ; TESA10 = . INC R3 ; TESA20 = . DEC R4 ;DECREMENT CHARACTER COUNTER BGT TESA00 ;BRANCH BACK FOR MORE MOV (R5)+,R5 ;AT THIS POINT, ALL CHARS ARE ZERO RTS R5 ;OR BLANK. SO EXIT TO 'RETURN' .PAGE ;*********************************************************************** ; JSR R5,POPR ;RESTORE REGS MOV (SP)+,(SP) ;SWAP PC AND BUF ADDR; POP STACK RTS PC ;RETURN .PAGE ; ; DC11 TRANSMITTER INTERRUPT ROUTINE ; TRNINT = . JSR R5,PUSHR ;SAVE REGS MOV CURBUF,R0 ;GET CURRENT BUFFER CMP COUNT(R0),(R0) ;HAVE ALL CHARS BEEN TRANSMITTED? BGE TRN020 ;YES MOV R0,R1 ;SET POINTER TO NEXT CHAR R4 %3 = R3 %2 = R2 %1 = R1 %0 = R0 ; **********************************************************************;* * ; * HRUS,PR5 R JS ; * ; * : ISR SHPUE INUTROUB STOE AGNKLIR LEMBSEASE TH E.AGUS ; * * ; P U S H R * ; * ; PROGRAM IDENTIFICATION. PUSHR - PUSH REGISTERS SUBROUTINE; * ; CATALOG NUMBER * ; * ; PURPOSE. SUBROUTINE PUSHR PUSHES R0-R5 ONTO THE CURRENT STACK * ;