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* ; UPDATE DEMO.P17 5.22.72 ; 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 ; UP& :(t  h,"7ACME OIL COMPANY , AJAX OF CALIFORNIA ALPHA OIL CORP,ORATION63321 SO. SEVENTH 12255 FO; UPDATE DEMO.P11 5.1.72 ; UPDATE DEMO.P10 4.27.72 ; UPDATE DEMO.P09 04.26.72 ; UPDATE DEMO.P08 04.20.72 ; i 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 ; DE X0*XXX CONSOLIDATED CARRIERS X7* XX 00000 MMDDYYHHMM GE&*0ES TERMINAL 0000 0t*T0000049 XX |*x XXXXXX XXX XX * DATE 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 ;1 = DEBUG CHECKOUT WITH SIMULATED DC11 DOS = 0 ;0 = RUN ON STAND ALONE SYSTEM ;1 = RUN ON DOS SY ,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&,0E BUG = 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 .ENDC .ENDC .IFZ DOS .ASECT .ENDC ; REGISTER DEFINITIONS ; ; R0 P.O. BOX 608 *P SAN DIEGO, CALIF ESG @Z{*t[lP}M]\Nk`Kaz^L~no|* AUDIT TRAIL JUST ENTERED IS ER*RONEOUS! MANUAL ENTRY ACCEPTED!  *6 IS END OF DAY REPORT TO BE Ey*NTERED ON PUNCHED TAPE?  TRANBSMISSION ERROR !*V" ERRONEOUS ACTION CODE RECEI*zVED! ERROR IN AUDIT TRAIL!STEM .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 = 4% R5 = 5% SP = 6% PC = 7% PS = 177776 LKS = 177546 ;LINE FREQ. CLOCK STATUS REG. BR4 = S TERMINAL 0000 0o,T0000049 XX w,x XXXXXX XXX XX , XXXXXX XXX ,XX ,XXXXXX XXX XX *, XXXXXX XXX },, P.O. BOX 608 ,P SAN DIEGO, CALIF ESG @Z{,t[lP}M]\Nk`Ka = 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 RCSR = 174000 ;DC11 RECEIVER STATUS REGISTER TCSR = 174004 ;DC11 TRANSMITTER STATUS REGIS" DA:  TI: J 6 r ^ * MMDDYY HHMM  XX :         *  6  B  N *R 5@wd*v  A" 02* 46|t@  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 = 174006 ;DC11 TRANSMISSION BUFFER .ENDC RVECTR = 300 ;DC11 RECEIVER INTERRUPT VECTOR TVECTR = 304 ;DC11 TRASMISSION INTERRz^L~no|  9, AUDIT TRAIL JUST ENTERED IS ER,RONEOUS! MANUAL ENTRY ACCEPTED!   ,6 IS END OF DAY REPORT TO BE Et,NTERED ON PUNCHED TAPE?  TRANBSMISSION ERROR ! V,V" ERRONEOUS ACTION CODE RECEI,zVED! ERROR IN AUDIT TRAIL!TER 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 = 174770 ;CLEAR BCC BCCOUT = 174772 ;BCC OUTPUT REGISTER BCCMSB = 174774 ;MSB OF RESU* BV ]* @v $l b  *X 5bB 7  **J~׭|Y *N c6   F 7 N  *r   M  *07z777U@7H*U@@7 5@HF1  *F2  F3  *F4  T1  UPT 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 SWITCH = 177570 ;CONSOLE SWITCH ADDRESS ; ; SYMBOLS REQUIRED FOR IOX CALLS ; KBDSLT = 0 ;TTY KEYBOARD SLOT TTYSLT = 1 $ DA:  TI: J  6 6 m ]  ^ ^   !    , MMDDYY HHMM  XX :           LTING 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 ;LOW-SPEED PUNCH SLOT RESET = 2 ;RESET COMMAND RESTRT = 3 ;RESTART COMMAND*&T2 * T3 6 *JT4 B 7  6*n 7 w  x* x$Fw ĝ* 5@#ĝ45 U*$l5@5 V7S7 z*J7U@00@E@E7,*"ĝ7 5  q*F5ĝ7  *j 0L ĝ|7r* ;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 ;READ COMMAND WRITE = 12 ;WRITE COMMAND EOF = 040 ;EOF BIT IN STATUS BYTE CR = 15 ;ASCII FOR CR LF    * *  6 6  B B  N  N  R ,R 5@wd,v  A" 02, 46|t@ , BV X, @v $l b ,X 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 = 100000 CARTRN = 040000 RING = 020000 OVERUN = 010000 LENGTH = 000000 ;8 BITS/CHAR DOwĝb7ZE@Pw "*V n*^ hR`wl*gZ^ RQwĝ*wE@7  !10!*B20!60 !40 V w@wH*fw w|`. . 0*. . 𷊛t B*E1W  www*w \_  >*o = 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 = 000020 ;DC11-AB 1200 BAUD DETECT = 000004 DTRDY = 000001 ; ; DC11 TRANSMIT CONTROL STATUS REGISTER (TCSR) BITS ; STOPCD = 0004 5bB 7  ,*J~׭|Y ,N c6   F 7 N  },r   M  ,07z777U@7H,U@@7 5@HF1  ,F2  F3  ,F4  T1  ,&T2 * T3 6 ,JT4 B 7 NE = 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 = 000001 ; ; HUB DC11 & TTY MESSAGE BUFFER OFFSETS ; STATUS = 3 COUNT = 4 DATA = 6 !Kw ( " (*5@Rw    O*>  * 6 B w *b w L`Td  *w  w N^  *w  w zPh * w r w RRr )* 2 |H V*W p $$ ^ &5*:%hw1 H7 O*^W "00 READY = 000200 TSPEED = 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) EODDATE = 59. ;LOCN OF DATE IN END OF DAY REPORT ; ; DC11 MSG BUF#  6,n 7 w  x, x$Fw ĝ, 5@#ĝ45 U,$l5@5 V7S7 u,J7U@00@E@E7,,"ĝ7 5  l,F5ĝ7  ,j 0L ĝ|7r,wĝb7ZE@Pw $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 ; ; 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 ; AUTOTR = 030061 ;ASCII 01 % ] .61h* lH7j W  E*X7 wJ ] * ҕ 2  #w1d* eH7 dC  *4 4E@ĝ!7 x&J*6V<E7wE7Ev*Z7~ w7 *~w01wn נ FנZ[H* CpÌČp Y*b  n &FER FLAGS ; BUSY = 200 ;BIT 7 OF STATUS BYTE; SET WHEN BUSY ; ; MAG TAPE REGISTER 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) ; ',V i,^ hR`wl,gZ^ RQwĝ,wE@7  !10!,B20!60 !40 V w@wC,fw w|`. . +,. . 𷊛t =,E1W  www,w \_  9,(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 DATA FORMAT ; TAB = 11 FORM = 14 CARNO = 25. ;CARRIER)  .* p 5dwEX*T  5bנ Õ*2נ Õ%נ נ Õ*VÕ@w 7Հ0 U*z5e7|U@tw w * , elwNw E@*@E:50xf b5*7 Tŀd Е7 j7?*  ^ H7 PW }*. H7 2W * ; MAG TAPE COMMAND REGISTER COMMANDS ; CLR = 040000 ;CLEAR CONTROLLER RWD = 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 = 360. ;TIMEOUT FOR E+o Kw ( " (,5@Rw    J,>  * 6 B w ,b w L`Td  ,w  w N^  ,w  w zPh , w r w RRr $, 2 |H V,W p $$ ^ &0,:%hw, 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. ;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 = 13-7 @*RННЕd 7w *v6  F   $w  s*w 03 w 04w 02E*>778U@0w w b* 9w ȕ05ȕ03g*29ȕ0 0ȕ0h**ԕ B CD C@*NDע פ0 E&fr&M .OT IN 1/60 SECOND TICS CARTIM = 120. ;TIMEOUT FOR CARRIER DETECT IN ;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 ERR0/1 H7 J,^W  ] .61c, lH7j W  E,X7 wJ ] , ҕ 2  #w1_, eH7 dC  ,4 4E@ĝ!7 x&J,6V<E7wE7Eq,Z7~ w7 ,~w01wn נ06. ;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 = 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 24 = "04 ;TIMEOUT WHILE WAITING FOR RECEIVE ;CARRIER AFTER 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 SELE3 FנZ[C, CpÌČp T,b  n   ., p 5dwEX,T  5bנ Õ,2נ Õ%נ נ Õ,VÕ@w 7Հ0 U,z5e7|U@tw w , , elwNw E@,@E:50xf b54 ;NEGATIVE ACKNOWLEDGE NUL = 000 ;NULL CHARACTER FF = 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 5; .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 6CTION 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. ;DRIVER NO. DRSZ = 3 ;NO. CHAR. FLOW1 = 66. ;FLOW METE7,7 Tŀd Е7 j7:,  ^ H7 PW x,. H7 2W 7 ;,RННЕd 7w ,v6  F   $w  n,w 03 w 04w 02E,>778U@0w w b, 9w ȕ05ȕ03b,29ȕ0 0ȕ0c,*FAND 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: .WORD 345 ;LSB OF RESULTING BCC .ENDC ALPHA1: .WORD NAME1,NAME2,NAME3 ;POINTER TO CUSTOMER NAME ALPHA2: .WORD ADDR1,ADDR2,ADDR3 E ;MSB OF RESULTING BCC BCCLSB: .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 STREER 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 OF PRODUCT 4 TEMPSZ = 3 ;NO. CHAR. IN TEMP ; ԕ B CD C;,NDע פ0 E&fr&M }""""""DDDDDDD """""""""""""""""""""""""""""""""""""""""""""""""""""""""ADD)B C]O_ -]h_]b_7$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; 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" INITL = 111111 ;CONSOLE SWITCH PATTERN TO BYPASS J ;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 ' CITY1: .ASCII 'SAN DIEGO, CALIF. ' CITY2: .ASCII 'LOS ANGELES, CALIF ' CITY3: .ASCII 'SANTA FE SPRINGS, CAL' .EVEN DATEAS: .ASCII '051K7 ,ĝZE@,R +&!10!20!60!4,0!70  ww\w,w ]. . ./, Z E1W ,; wwww p,_  L #2, H w | w \R]Xa  ,b w T# w 4Tb ,# f w ,* w VlL*G  v@ BƊ*k  >zx%I* j Xp i׭fY*   M   7* %U@7U@7 7 w .k*  x 000&z*0w ĝ Ċ5@#ĝ*C5 U5@5 *g77 f7U@p>Ev7O*q ĝb7 NOM ;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: .WORD 0 ; WITHOUT DC11 H/W AND CP CLRBCC: .WORD N072' 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' .BYTE CR,LF,TAB,TAB,TAB .ASCII ' ' NAME: .ASCII ' COLL' .BYTE CR,LF,TAB,TAB,TAB .ASCII ' ' ADDRESS:.AO, * j 2 vH, TW = ",7 fw&1 BH7,[ W j  .],+   gE`7[p,0wt ҕ ,n w1 6H7j, W  N 1 p,eH7 LC  E@~,P*5 D5ĝ:7.*   0 2*ĝ7ĝ7-* wE@ĝ   *? B*cdwpk*^ Uw7 ,ĝZE@*R +&!10!20!60!4*0!70  ww\w*w ]. . .4Q 0 ;CLEAR BCC BCCOUT: .WORD 0 ;BCC OUTPUT REGISTER BCCMSB: .WORD 123 ;MSB OF RESULTING BCC BCCLSB: .WORD 345 ;LSB OF RESULTING BCC .ENDC Q 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 ;POINTER TO CUSTOMER CITY NAME1: .ASCII 'ACME OIL COMPANY ' NAME2:RSCII ' ' .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,LS3ĝ7 %׭ ׭ ,WE7wE7wE7X,{ m ow $w,w 7TՀ0 UF5@,e78U@0w \w H ,, elw w 4E@E, ŀ Е7 H7,/ < H7 .W 7,S ННЕ 7w,w   T* Z E1W *; wwww u*_  L #7* H w | w \R]Xa  *b w T# w 4Tb *# f w ,* w Vl* * j 2 vH* TW = "*7 fw&1 BH7*[ W j  .b*U .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: .ASCII 'REGULAR ' PRNAM2: .ASCII 'PREMIUM ' PRNAM3: .ASCII 'DIEVF,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: .ASCII 'XXXXXX ' TEMP2: .ASCII 'XXX' .BYTE CR,LF CODE3: .ASCII 'XX ' PROD3: .ASCII ' ' VOL3: .ASCII 'XXXXXX ' TEW  $w  ,w EZ7Uw w t   d, E873& U@,w Lԕ B CD ,CDע פ0 E&u+f&M X+   gE`7[u*0wt ҕ *n w1 6H7o* W  N 1 u*eH7 LC  E@*3ĝ7 %׭ ׭ *WE7wE7wE7]*{ m ow $w*w 7TՀ0 UF5@*e78U@0w \w H *,YSEL ' PRNAM4: .ASCII 'NO. 2 FUEL' PRSZ = 10. .PAGE ;* ;* D U M M Y I N V O I C E ;* .EVEN 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 ZMP3: .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 = . .EVEN ; ; DEVICE CODES FOR IOX USAGE ; LSR: .WORD 3 LSP: .WORD 4 ; ; MESSAGES TO BE OUTPUT TO TERMINAL ; TMSG00 = \ elw w 4E@E* ŀ Е7 H7*/ < H7 .W 7*S ННЕ 7w*w     $w  *w EZ7Uw w t   i* E873& U@*w Lԕ B CD *CDע פ0 E&z+f&M ]' ' .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 ' 00000049' .BYTE CR,LF,LF,LF,LF CODE1: .A^ . .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? ' .EVEN MSG01: .WORD 0 .BYTE 0 .BYTE 0 .WORD 25. .BYTE CR,LF .ASCII /TRANSMISSION ERROR / MS_; UPDATE DEMMAG.P03 5.9.72 ; UPDATE DEMMAG.P02 5.7.72 ; ; ROUTINE TO WRITE N RECORDS ON MAG TAPE FOLLOWED BY ; TWO EOF'S ; R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 SP = %6 PC = %7 SW = 177570 ; ; MAG TAPE REGS WC = 167540 STAT = 167542 COM = 167544 MA = 167546 ; ; START = . 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: .ASCII 'XX ' PROD4: .ASCII ' bG01F: .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 .ASCII /ERROR IN AUDIT TRAIL!/ .BYTE CR,LF,LF .EVEN ; ; HUB TELETYPE BUFFERS ; TTIBUF: .WORD 0 ;MAX NO. CHAc MOV #START,@#SP BIS #40000,@#COM ;CLEAR CONTROLLER JSR PC,TAPRDY HALT MOV @#SW,R0 ;GET DATA BEGIN ADDRESS MOV R0,ADDR HALT MOV @#SW,R0 ;GET WORD COUNT MOV R0,WRDCNT HALT JSR PC,FLIP ;FLIP DATA BYTES MOV @#SW,R1 ;GET NO. OF RECORDS TO BE WRITTEN WRITE = . MOV ADDR,@#MA MOV WRDCNT,@#WC d& :(,U@d ^x7x7O ,$ dxf`d * 8,H d  &d ,l 5bbe ' 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 .ASCII ' P.O. BOX 608' .BYTE CR,LF .ASCII 'SAN DIEGO, CALIF ESG' .IFNZ .!1 ;INSURE INVOICE ENDS ON WORD BOUNDARY .BYTE CR .ENDC .BYTE FORM INVEND = . ; ; ASCfRS 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 ;STATUS .WORD 0 ;NO. OF CHARS TO BE OUTPUT . = .+600. ;DATA ; ; TIMERS ; TIMER = . ACKTMR: .WORD 0 g MOV #000002,@#COM ;WRITE DATA RECORD JSR PC,TAPRDY ;WAIT FOR READY JSR PC,STATUS DEC R1 BNE WRITE MOV #000004,@#COM ;WRITE EOF JSR PC,TAPRDY ;WAIT FOR READY JSR PC,STATUS MOV #000004,@#COM ;WRITE EOF JSR PC,TAPRDY ;WAIT FOR READY JSR PC,STATUS MOV #-1,R0 BR START ; ; TAPRDY = . MOV #20.,R5,(& `ÌČp iII 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 .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 ; ; j ;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 ;UNUSED .BYTE 0 ;STATUS .WORD 0 ;NO. OF DATA CHARACTERS RECEIVED . = .+273. .EVEN ; TRNBk4 ;DELAY FOR CONTROLLER TO SET READY AFTER DEC R4 ;COMMAND BNE .-2 BIT #200,@#STAT ;IS CONTROLLER READY? BEQ .-6 RTS PC ;RETURN ; ; ; TEST FOR ERROR AFTER MAG TAPE COMMAND ; STATUS = . MOV @#STAT,R0 BIT #4000,R0 BEQ GOOD HALT GOOD = . RTS PC ; ; ; FLIP BYTES IN EACH BYTE OF DATA BUFFER ; FLIPl H :*U@d ^x7x7*4 dxf`d * 8*X d  &d C*| 5bb5)*(& `ÌČpij ^.HKKKx 7r wKS*pw 7tw  7^w w `,>ĝ\7ZK70 , ZK"RK*w.& dK^K@Jm 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!/ 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,nUF = . ;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: .ASCII /00/ ;LOST CARRIER WHILE RECEIVING DATA ERR02: .ASCII /02/ ;NO ACK RECEIVED AFTER 8 TRYS ERR03: .ASCII /03/ ;TIMEOUT ON SENDo = . MOV ADDR,R0 ;GET ADDRESS OF 1ST CHAR MOV WRDCNT,R1 ASL R1 ADD R0,R1 ;GET ADDRESS OF LAST CHAR FLIP05 = . MOVB (R0)+,R3 ;GET A CHAR MOV #1,R4 ;SET MASK TO BIT 0 FLIP10 = . ASLB R3 ;SHIFT LSB TO C BIT BCS FLIP20 ;WAS LSB SET? BICB R4,R5 ;NO, CLEAR APPROPRIATE BIT IN RESULT FLIP15 = . p D*޴ A  &DCc  w 2w * w  ' 7  *&&w \w wXw w  `.Jfw |t w 7 wtwhw *r %-E e䳂 wh9*6 ߾ =w F6 / w :( w '*2! w * w "w * 7 w :*޵7w 77Ҿ߾ J*w7  ww (b ww *&w A B` r%qLF .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 rING 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 ; 1 = EXPECT CARRIER TRANSITION ; 2 = EXPECT STX ; 3 = EXPECT DATA s ASLB R4 ;SHIFT MASK TO NEXT MOST SIG BIT BEQ FLIP25 ;DONE? BR FLIP10 ;NO FLIP20 = . BISB R4,R5 ;SET APPROPRIATE BIT BR FLIP15 ;CONTINUE FLIP25 = . MOVB R5,-1(R0) ;REPLACE BYTE WITH ITS FLIP CMP R0,R1 ;ALL DATA FLIPPED? BMI FLIP05 RTS PC ; ; PROGRAM DATA ; ADDR: .WORD 0 ;ADDREt*J w| 7twrj*nwhg E 7pwhP [*E tP Iw *-% w  =w *ڶ7 =w e0*w ,w %@w ~k*"e=w @w Xww0*Fw=w  w  d*jw *Ae0w v,w nHBF*w 6- .27, *u 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: / .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 ASv ; 4 = EXPECT BCC(MSB) ; 5 = EXPECT BCC(LSB) ; 6 = EXPECT EOT ; 7 = EXPECT ACK/NAK AFTER ; SENDING ; 8 = SAME ; 9 = SAME ;ON DATA RECEIVED RCVERR: .BYTE 0 ;RECEIVE ERROR COUNT RESS OF 1ST WORD OF DATA WRDCNT: .WORD 0 ;WORD COUNT .END x( B:8w ?*ַw 7 w 777     w *%0 %7E `  1, W ֆ m7 yD7D|jNXr¹ `޺$,V*lHʷPڴZ7U<@*D 2 7.7(%  M*w %=w *ظw  w w ww *  7myCII .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 zPEAT: .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 MOV #340,@#2{; 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 DEMO.P03 04.13.72 ELITE HUB DEMO ; UPDATE DEMP.P02 04.12.|w * w %/w N*D\ z \pp. *h L e  ! B ! =.L !644 $ .!4*64 $ % w  *ع @w @ % % w ~* ww  * D  &C@AEPA&f*Dw w /w w :w *h  ` E } ;EOT TIMER .WORD EOTTO CARTMR: .WORD 0 ;CARRIER TIMER AFTER TRANSMITTING .WORD CARTO 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 ~2 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 #TRNINT,@#30 ;C72 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 .ENDC .ENDC .IFZ DOS .ASECT .ENDC !,` H 8 wFLEn*w 7U4E(w T76}.ֺ  p$E*w V׭DUB*"7w @ŝ*FŝwDt w*jt! w w Jw ,@eZ%ĕt72 $$*w Bw .e` w ;w *ػĝw wf& ;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 . = .+600. ; ; JULIAN DATE FROM TERMINAL SAVED HERE ; JULDAY = . ;JULIAN DATE FROM LAST MSG RECEIVED HECKOUT 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 ;RESET IOX .WORD 0 .BYTE RESET,0 ; 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 RCSR = 174000 ;DC11 RECEIVER STATUS REGISTER TCSR = 1740*f . 46 0C.C,H7$C7$C Cw rC5CC*ngBbBV  <6 !*%& &e* N @ e0w &  ]*ڼ B7~BrB*nBE w *"  w ׭4B ^*Fw Uw w  . = .+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 .WORD 0 TIMEAS: .ASCII /HHMM / ; ; FLOWS & TEMPERATURES ENTERED AT HUB TTY KBD ; .EVEN PMSG: .WORD 0 .BYTE 0,0 .WORD 6 .BYTE CR,LF PMSG01: .ASCII /XX: / FL1: .WORD 8. .BYTE 0,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 = . CMP #INITL,SWITCH BEQ DEM035 04 ;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 = 174770 ;CLEAR BCC BCCOUT = 174772 ;BCC OUTPUT REGISTER BCnj *j  7,XR-P DW*w@ 78 %(! , %??*ؽw N%w 77*w Z e0w ,w * w p*D Cå å$ נA .h  e` ƾK*  Ëנe ee /e ѐ  @( .WORD 0 . = .+8. FL2: .WORD 8. .BYTE 0,0 .WORD 0 . = .+8. FL3: .WORD 8. .BYTE 0,0 .WORD 0 . = .+8. FL4: .WORD 8. .BYTE 0,0 .WORD 0 . = .+8. TMP1: .WORD 6. .BYTE 0,0 .WORD 0 . = .+6 TMP2: .WORD 6. .BYTE 0,0 .WORD 0 . = .+6 TMP3: .WORD 6. .BYTE 0,0 .WO 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 ;READ PUNCHED TACMSB = 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 ;LOW-SPEED PUNCH SLOT RESET = 2 ;RESET COMMAND RESTRT*ξ ODT-11R V00 2ABEH* *;/\ $G _<^,OWEBP@>SRC-FI!XASPMCFRBS.*==RD 0 . = .+6 TMP4: .WORD 6. .BYTE 0,0 .WORD 0 . = .+6 ; ; PROGRAM VARIABLES ; MODE: .BYTE 0 ;RECEIVE MODE ; WHERE 0 = EXPECTING RING ; 1 = EXPECT CARRIER TRANSITION ; 2 = EXPECT STX ; 3 = EXPECT DATA ; 4 = EXPECT BCC(PE .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 BLT DEM040 CLRB MODE = 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 = 100000 CARTRN = 040000 RING = 020000 OVERUN = 010000 LENGTH& :(t  h,"7ACME OIL COMPANY , AJAX OF CALIFORNIA ALPHA OIL CORP,ORATION63321 SO. SEVENTH 12255 FOMSB) ; 5 = EXPECT BCC(LSB) ; 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 ;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) CLRB PS ;ALLOW DC11 INTERRUPTS DEM050 = . .IFZ DEBUG WAIT ;IDLE!! BR DEM050 .ENDC .PAGE = 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 = 000001 ; ; HUB DC11 & TTY MESSAGE BUFFER OFFSETS ; STATUS = 3 ,URTH STREET P.O. BOX 1234 SA,N DIEGO, CALIF. LOS ANGELES, CALIF,4 SANTA FE SPRINGS, CAL051072010203a,X04REGULAR PREMIUM LOW LEAD DIES,|EL 0000 , COLL r, , XXXX CONSOLIDATED CARRIERS ,  XXX 00000 MMDDYYHz,0H 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 BIT #040000,SWITCH ;ARE FLOWS AND TEMPS TO BE SIMULATED? BEQ DEM002 ;NO JMP DEMF10 ;YES DEM002 = . MOV .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?) TRAP ; AND SIMULATE DC11 INTERRUPT MOV #CARTRN!ERROR!DETECT,RCSR ;NOW, CARRIER TRANSITION TRAP 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 = 167542 ;STATUS COM = 167544 ;COMMAND MA = 167546 ;MMM GE&ES TERMINAL 0000 ,T 00000049 XX g,x XXXXXX XXX XX , XXX ,XXX XXX XX , XXXXXX XXX XX *, XXXXXX XXX ,, P.O],P. BOX 608 SAN DIEGO, CALIF ;,t ESG @Z{[lP}M]\ #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 #16710,@#64 MOV #BR5,@#66 MOV #RCVINT,@#RVECTR ;RECEIVE INTERRUPT VECTOR MOV #TRNINT,@#TVECTR ;TRANSMIT INTERRUPT VECTOR MOV #CLKINT,@#CVECTR ;CLOCK INTERRUPT VECTOR .IFNZ ;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 ;IS IT A BELL (END OFMESSAGE) BEQ $DC11B ;YES MOV R0,-(SP) ;SAVE ADDRESS TRAP ;SIMULATE EMORY 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 WRT = 000002 ;WRITE A RECORD ; ; TIMER VALUES ; ACKTIM = 180. Nk`Kaz^L~n,o| AU,DIT TRAIL JUST ENTERED IS ERRONEOUS!G,6 IS END OF DAY REPORT TO BE E,NTERED ON PUNCHED TAPE?  TRAN(SMISSION ERROR ! <,<$ ERRONEOUS ACTION CODE RECEIV,`ED!  ERROR IN AUDIT TRAIL!  O    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 .ENDC MOV #BR6,R0 MOV R0,@#CVECTR+2 MOV # 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 ;AND THE GRAND FINALE TRAP MOV #17777,R1 ;DELAY FOR S/W TO RESPOND, ; ;SEND ACK (3 SEC DELAY) $DC11C = . DE ;TIMEOUT FOR ACK IN 1/60 SECOND TICS EOTTIM = 180. ;TIMEOUT FOR EOT IN 1/60 SECOND TICS ; ; 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  $Y 5  6 6  < < 000203 I ,I ,m  A" 0246, @ @@ B, P 0.%I,  X ׭Y2,   y    7,! %U@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 ;AND SPEED MOV #STOPCD!TSPEED,TCSR ;SET DC11 TRANSMITTER STOP CODE C 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 $DC11 ;REPEAT WHEN SWITCHES = 177777 .ENDC .PAGE ; ; DC11 RECEIVE INTERRUPT ROUTINE ; RCVINT = . JSR R5,PUSHR ;SAVE 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 = 3 ;NO. CHAR. FLOW1 = 66. ;FLOW METER PRODUC<7U@7 7w X,E  x\ (d~X,i w 2ĝ , 5@&ĝd5 UT, 5@5@{7x7 L!, 7(U@ VPE@E 7QS,  ĝ7 /a,5 $5ĝ7 s,A  0# ,e7wΥ ;AND SPEED 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? DEM005 = . BIT #100000,SWITCH ;BRANCH AROUND TTY 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 ASL R0 JMP @RCV010-4(R0) ; ; BRANCH TABLE ; RCV010 = . .WORD RCV100 ;RECEIVE STX MODE = 2 .WORD RCV150 ;RECEIVE DATA = 3 .WORD RCV200 ;RECEIVET 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 OF PRODUCT 4 TEMPSZ = 3 ;NO. CHAR. IN TEMP ; ; ĝ7xK,E@n. B  4 x,|6 DsL,uw^YL6 C,w7 ĝwdE@ , !10!20!60!40 !70 ,=< wwwwDi.,a . . ., 򷊸󷊏 E1W , wwww DIALOG ? BNE DEM048 ;YES 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 = . TSTB TTIBUF+STATUS ;IS INPUT DONE? BPL DEM010 MOV #000202,TTIBUF+MODEBF ;SET INPUT MODE TO UNFORMATTED ASC MOV 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 RCV265 ;RECEIVE X'FF' = 10 .WORD RCV700 ;RECEIVE ACK/NAK AFTER NULL = 11 ; RCV020 = 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" INITL = 111111 ;CONSOLE SWITCH PATTERN TO BYPASS ,= W L)1 /GV, T w f  w bRiZm f C, w Zm Hw :Td ,9m  w 2t pw Vn,] t  w { w X,x {  $2 ,H 2W y L,6 4c8w1 ,H7 W  =5 , #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 TTIBUF .BYTE READ,KBDSLT DEM030 = . TSTB TTIBUF+STATUS ;IS INPUT DONE? BPL DEM030 ;NO DEM035 = . . JSR R5,POPR ;RESTORE REGS. RTI ;RETURN ; ; ERROR BIT PROCESSING ; RCV030 = . MOVB MODE,R4 ;BRANCH ON MODE BEQ RCV040 ;RING DECB R4 BEQ RCV050 ;CARRIER TRANSITION BIT #CARTRN,R5 ;OTHER, HAVE WE LOST RECEIVE CARRIER? BNE RCV080 ;YES INCB RCVERR ;NO, INCR RECEIVE ERROR COUNT MOVB RB ;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: .WORD 0 ; WITHOUT DC11 H/W AND CP CLRBCC: .WORD 0  .- j  E,57w5  ҕ ,Y  {wd1 ,}H7v ZW ^ ( 1, _eH7B &C , E@0ĝ.7 >x0,E7UwE7GE7;, f Qw!w,1> wנ EנZZ Cy,UÌı 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 IOT ;GET 6 CHAR DATE MMDDYY .WORD DABUF .BYTE READ,KBDSLT IOT ;TYPE "TI: " .WORD MUF,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 = . BIT #CAR ;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 ;POINTER TO CUSTOMER CITY NAME1: .ASCII 'ACME OIL COMPANY ' NAME2: .ASCIIp y@y,y @ 62 *,  5w, 5bנ Õנ Õ%!,נ נ ÕÕ@w , 7:Հ0 U5e,-7U@w lw X , ,Qelww DE@E5,u5ŀ< Е7 b H,7X <B H7J .SG05 .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+DATA+EODDATE,R1 DEM046 = . MOVB (R0)+,(R1)+ CMP R0,#DATEAS+5 BLOS DEM046 MOV #MINUTE,TIMDAY ;SET TIME OTRN,R5 ;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 CLR RCVBUF+COUNT ;ZERO CHAR COUNT RCV070 = . CLRB RBUF ;INSURE RCSR DONE BIT CLEARED! BIS #ENABLE,RCSR ;ENABLE DC11 '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 DATEAS: .ASCII '051072' KODE1: .ASCII '01' KODE2: .ASCII '02' KODE3: .ASCII '03' KODE4: .ASCII '04' PRNAM1: .ASCII 'REGULAR ' PRNAM2: .ASCII 'PREMIUM ' PRW I ,74 Н.Н,Е< 7X,w      $w,  w E7+w w t,)    E7  V,MU@w Lԕ B C,qD CDע פ0 İ) E&f&M F DAY TIMER DEM048 = . MOV #'0,R0 ;INIT SEQUENCED NUMBERS FOR INVOICE MOVB R0,NUMBER MOVB R0,SERNO1 MOVB R0,SERNO2 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 C 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!" .WORD MSG01 .BYTE WRITE,TTYSLT RCV095 = . TSTB MSG01+STATUS NAM3: .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,TAB,TAB,TAB .ASCII ' ' CITY: .ASCIIHECKOUT) BIT #040000,SWITCH ;IF BIT 14 OF SWR SET, ;GET FLOWS & TEMPS FROM HUB KBD BEQ DEMF30 DEMF10 = . MOV #"F1,PMSG01 ;GET FLOW & TEMPERATURE VALUES IOT .WORD PMSG .BYTE WRITE,TTYSLT IOT .WORD FL1 .BYTE READ,KBDSLT MOV #"F2,PMSG01 IOT .WORD PMSG .BYTE WRITE,TTYSLT IOT .WORD FL2 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,MODE ;SET RECEIVE MODE TO EXPECT DATA BR RCV020 ;GO RETURN RCV120 = . BIT #PARITY,R5 ;IS PARITY GOOD? BEQ RCV020 ;YES, IGNORE INTERRU ' ' .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 ' 00000049' .BYTE CR,LF,LF,LF,LF CODE0 :*"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, CAL051072010203f*X04REGULAR PREMIUM LOW LEAD DIES*|EL 0000 * COLL w* .BYTE READ,KBDSLT MOV #"F3,PMSG01 IOT .WORD PMSG .BYTE WRITE,TTYSLT IOT .WORD FL3 .BYTE READ,KBDSLT MOV #"F4,PMSG01 IOT .WORD PMSG .BYTE WRITE,TTYSLT IOT .WORD FL4 .BYTE READ,KBDSLT MOV #"T1,PMSG01 IOT .WORD PMSG .BYTE WRITE,TTYSLT IOT .WORD TMP1 .BYTE READ,KBDSLT PT 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 RBUF,R4 ;GET CHAR MOVB R4,BCCOUT ;OUTPUT CHAR TO BCC REGISTER CMPB R4,#ETX ;IS CHAR AN ETX? BEQ RCV180 ;YES CMPB R4,#ETB 1: .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: .ASCII 'XX ' PROD4: .ASCII ' * XXXX CONSOLIDATED CARRIERS *  XXX 00000 MMDDYYH*0HMM GE&ES TERMINAL 0000 *T 00000049 XX l*x XXXXXX XXX XX * XXX*XXX XXX XX * XXXXXX XXX XX /* XXXXXX XXX *, MOV #"T2,PMSG01 IOT .WORD PMSG .BYTE WRITE,TTYSLT IOT .WORD TMP2 .BYTE READ,KBDSLT MOV #"T3,PMSG01 IOT .WORD PMSG .BYTE WRITE,TTYSLT IOT .WORD TMP3 .BYTE READ,KBDSLT MOV #"T4,PMSG01 IOT .WORD PMSG .BYTE WRITE,TTYSLT IOT .WORD TMP4 .BYTE READ,KBDSLT DEMF30 = . ;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 = . INCB RCVERR ;INCR ERROR COUNT BR RCV160 ;G ' 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 = . .BYTE 100,132,177,173,133,154,120, P.Ob*P. BOX 608 SAN DIEGO, CALIF @*t ESG @Z{[lP}M]\Nk`Kaz^L~n*o| AU*DIT TRAIL JUST ENTERED IS ERRONEOUS!L*6 IS END OF DAY REPORT TO BE E*NTERED ON PUNCHED TAPE?  TRAN(SMISSION ERROR !*<$ ERRONEOUS ACTION CODE RECEIV*`ED!  ERROR IN AUDIT TRAIL!  T  $ 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 = . TSTB MSG01+STATUS ;DONE? BPL DEM06O 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 ;DOES IT MATCH? BNE RCV210 ;NO RCV205 = . MOVB #5,MODE ;YES, SET MODE FOR RECEIPT OF BCC(LSB) BR RCV020 ;GO, RETURN RCV210 = 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 ; TMSG00 = . .BYTE CR,LF .ASCII^ 6  < 000203*I *m  A" 0246* @ @@ B* P 0.%I*  X ׭Y7*   y    7*! %U@<7U@7 7w X*E  x\ (d~]*i w 2ĝ 0 DEM070 = . CLR MSG01F ;YES 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?) TRAP ; AND SIMULATE DC11 INTERRUPT . 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? BNE RCV290 ;NO RCV260 = . MOVB #10.,MODE ;SET MODE TO EXPECT X'FF' JMP RCV020 ; ; RECEIVED "FF" ; RCV265 = . BIC #ENABLE,RCSR ;DISABLE RECEIVE INTERRUPTS /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? ' .EVEN MSG01: .WORD 0 .BYTE 0 .BYTE 0 .WORD 25. .BYTE CR,LF .ASCII /TRANSMISSION ERROR / MSG01F: .ASCII / !/ .EVEN MSG02: .W* 5@&ĝd5 UT* 5@5@{7x7 L&* 7(U@ VPE@E 7QX*  ĝ7 /f*5 $5ĝ7 x*A  0# Ą*e7wĝ7xP*E@n. B  4 }*|6 DsL*uw^YL6 C 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 ;IS IT A BELL (END OFMESSAGE) BEQ $DC11B ;MOVB RBUF,R4 ;CLEAR DONE BIT IN RCSR 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. CORD 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 .EVEN ; ; HUB TELETYPE BUFFERS ; TTIBUF: .WORD 0 ;MAX NO. CHARS TO INPUT .BYTE 0 ;M*w7 ĝwdE@ * !10!20!60!40 !70 *=< wwwwDi.*a . . .* 򷊸󷊏 E1W * wwww *= W L)1 /G[* T w f  w bRiZm f H* w Zm Hw :Td *9m  w 2t pw Vn*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 ;AND THE GRAND FINALE TRAP MOV #17777,R1 ;DELAY FOHARS 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 ;GO WAIT FOR EOT ; RCV290 = . INCB RCVERR ;INCR ERROR COUNT BR RCV260 RCV300 = . MOVB #NAK,TRNODE - FORMATED ASCII .BYTE 0 ;STATUS .WORD 0 ;NO. OF CHARS INPUT . = .+600. ;DATA TTOBUF: .WORD 0 ;UNUSED .BYTE 0 ;MODE - FORMATTED ASCII .BYTE 0 ;STATUS .WORD 0 ;NO. OF CHARS TO BE OUTPUT . = .+300. ;DATA ; ; TIMERS ; TIMER = . ACKTMR: .WORD 0 ;ACK TIMER .WORD ACKTO ] t  w { w X*x {  $2 *H 2W y Q*6 4c8w1 *H7 W  =5* .- j  E*57w5  ҕ *Y  {wd1 *}H7v ZW ^ ( 1* _eH7B &C * R 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 $DC11 ;REPEAT WHEN SWITCHES = 177777 .ENDC BUF+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 ; RCV320 = . CLR EOTTMR ;RESET EOT TIMER 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 ;UNUSED .BYTE 0 ;STATUS .WORD 0 ;NO. OF DATA CHARACTERS RECEIVED . = .+273. .EVEN ; TRNBUF = . ;TRANSMIT BUFFER E@0ĝ.7 >x0*E7UwE7GE7;* f Qw!w*1> wנ EנZZ Cy$*UÌČp y@~*y @ 62 /*  5w* 5bנ Õנ Õ%&*נ נ ÕÕ@w * 7:Հ0 U5e*-7U@ .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 ******* BGE RCV005 BR RCV038 RCV005 = . ASL R MOVB RBUF,R4 ;CLEAR DONE BIT BIC #ENABLE,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 A .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: .ASCII /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 ; w lw X , *Qelww DE@E5*u5ŀ< Е7 b H*7X <B H7J .W I *74 Н.Н,Е< 7X*w      $w*  w E7+w w t*)    E7  [*MU@w Lԕ B C *qD CDע פ0 ĵ' E&f&0 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 RCV700 N AUDIT ERROR? BEQ RC.530 ;YES CMP R4,#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+MSGD DAYTIM = . ;DATE/TIME FROM LAST MSG RECEIVED . = .+7. DAYEND = . ; ; PROGRAM VARIABLES ; MODE: .BYTE 0 ;RECEIVE MODE ; WHERE 0 = EXPECTING RING ; 1 = EXPECT CARRIER TRANSITION ; 2 = EXPECT STX ; 3 = EXPECT DATA ; 4 = EXPECT BCC(MSBM  ;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 CMPB R4,#1 ;EXPECTING CARRIER TRANS. AFTER RING? AT,R0 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 OF THE INVOICE BUFFER JSR PC,BLANK ;THAT CONTAIN PRODUCT INFORMATION MOV ) ; 5 = EXPECT BCC(LSB) ; 6 = EXPECT EOT ; 7 = EXPECT ACK/NAK AFTER ; SENDING ; 8 = SAME ; 9 = SAME ; 10 = SAME ;ON DATA RECEIVED RCVERR: .BYTE 0 ;RECEIVE ERROR COUNT; 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 DEMO.P03 04.13.72 ELITE HUB DEMO 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,R5 ;IS IT A RING? BEQ RCV020 ;NO, IGNORE INTERRUPT B#CODE2,R4 MOV #46.,R5 JSR PC,BLANK 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 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 MOV #340 ; 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 .ENDC .ENDC .IFZIS #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? BEQ RCV080 ;NO MOVB #2,MODE ;SET RECEIVE MODE T 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: .W,@#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 #TRNINT,@#30 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 RCSR = 174000 ;DC11 RECEIVO 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 "00" IN ERROR MSG RCV090 = . BIC #ENABLE,RCSR ;DISABLORD 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 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? ;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 ;RESET IOX .WORD 0 .BYTE RESEER 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 = 174770 ;CLEAR BCC BCCOUT = E 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 #3,MODE ;SET RECEIVE MODE TO EXPECT DATA BR RCV020 ;GO R 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 .WORD RCVBUF+DATA+FLOW2,FLOWSZ,INV200 JSR R5,MOVE .WORD KODE2,CODE2,2 .WORD PRNAM2,PROD2,PRSZ .WORD RCVBUF+DATA+FLOW2,VOL2,FLOWSZ T,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 = . CMP #INITL,SWITCH BEQ DEM0174772 ;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 ;LOW-SPEED PUNCH SLOT RESET = ETURN 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 RBUF,R4 ;GET CHAR MOV R4,BCCOUT ;OUTPUT CHAR TO BCC .WORD RCVBUF+DATA+T2,TEMP2,TEMPSZ .WORD -1 ; INV200 = . 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 F35 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 ;READ PUNCHE 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 = 100000 CARTRN = 040000 RING = 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 MOVB R4,RCVBUF+DATA(R0) ;PUT DATA INTO BUFFER RCV160 = . BR RCV02OR 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 ;SET RECEIVED 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 BLT DEM040 CLRB  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 = 000001 ; ; HUB DC11 & TTY MESSAGE0 ;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 ;DOES IT MATCH? BNE RCV210 ;NO RCV205 = .  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 ;GO WAIT FORMODE ;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) CLRB PS ;ALLOW DC11 INTERRUPTS DEM050 = . .IFZ DEBUG WAIT ;IDLE!! BR DEM050 .ENDC .P BUFFER OFFSETS ; 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 = 167542 ;STATUS COM = 167544 ;COM 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 RCVERR ;NO, INCR ERROR COUNT RCV260 = . BIC #EN 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 ;NAGE .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?) TRAP ; AND SIMULATE DC11 INTERRUPT MOV #CARTRN!ERROR!DETECT,RCSR ;NOW, CARRIER TRANSITION TRAP MAND 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 WRT = 000002 ;WRITE A RECORD BCKR = ABLE,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 #TRNBUF,-(SP) ;CALL DC11 OUTPUT ROUTINE JSR PC,D11OUT RCV28 O MOVB #ETX,-(SP) ;PUT TRAILER INTO BUFFER JSR PC,TRAILR 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 MOVB #NUL,-(SP)  ;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 ;IS IT A BELL (END OFMESSAGE) BEQ $DC11B ;YES MOV R0,-(SP) ;SAVE ADDRESS TRAP ;SIMULATE  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 ; ; 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 ER 0 = . 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 ;SET NO. CHARS TO 2 MOV #TRNBUF,-(SP) ;CALL DC11 OUTPUT ROUTINE  ;NULL MESSAGE TO TERMINAL JSR PC,HEADER MOVB #ETX,-(SP) JSR PC,TRAILR MOVB #11.,MODE BR RCV500 ; ; 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 #HDRSIZ,R1 MOV  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 ;AND THE GRAND FINALE TRAP MOV #17777,R1 ;DELAY FOR S/W TO RESPOND, ; ;SEND ACK (3 SEC DELAY) $DC11C = . R03 = "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 SELECTION ; R035 = 062 ;ASCII CODE FOR R0-35 SELECTION ASR33 = 061 ;ASCII CODE FOR ASR-33 S 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 RCV020 ;NO, IGNORE INTERRUPT RCV322 = . BIC  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 LF FOR TYPEOUT INC TTOBUF+COUNT RCV582 = . DEC R1 ;TO TTY OUTPUT BUFFER BNE RCV580 IOT  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 $DC11 ;REPEAT WHEN SWITCHES = 177777 .ENDC .PAGE ; ; DC11 RECEIVE INTERRUPT ROUTINE ; RCVINT = . JSR R5,PUSHR ;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. ;FLOW METER PRODUCT 1 FLOW2 = 73. ;FLOW METER PRODUC #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 RCV330 ;YES CMP R4,#AUDERR ;IS IT AN AUDIT ERROR?  ;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,-(SP) ;PUT MSG HDR IN BUF JSR PC,HEADER MOV #TTIBUF+DATA,R1 ;GET DATA ADDRESS RCV600 = . MOVB (R1)+,(R0) ;MOVE CHAR TAVE 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 ******* BGE RCV005 HALT RCV005 = . ASL R0 JMP @RCV010-4(R0) ; ; BRANCH TABLE ; RCV010 = . .WORD RCV100 ;RECT 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 OF PRODUCT 4 TEMPSZ = 3 ;NO. CHAR. IN TEMP ; ; MISCELLANEOUS SYMBOLS ; STX = 002  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: JMP RCV530 RC.570: JMP RCV570 RC.620: JMP RCV620 .PAGEO 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.,MODE ;SET MODE TO EXPECT ACK/NAK AFTER ;1ST PART OF END OF DAY REPORT BR RCV500 ; ; PREPARE 2ND PORTION OF ENDEIVE 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 RCV700 ;RECEIVE ACK/NAK = 8 .WORD RCV700 ;RECEIVE ACK/NAK = 9 .WORD RC ;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" INITL = 111111 ;CONSOLE SWITCH PATTERN TO BYPASS ;DEFINITION OF EOD REPORT  ; ; 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 #CODE3,R4 MOV #46.,R5 JSR PC,BLANK MOV #CO 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) ;MOVE CHAR TO BUF MOVB (R0)+,BCCOUT ;CALC BCC JSR PC,DELAY ;DELAY FOR BCC HDWR CMP R1,R3 ;ARE ALL CHARS OUT V700 ;RECEIVE ACK/NAK AFTER NULL = 10 ; RCV020 = . JSR R5,POPR ;RESTORE REGS. 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  .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: .WORD 0 ; WITHOUT DC11 H/W AND CP CLRBCC: .WORD 0 ;CLEAR BCC BCCOUT: .WORD 0 ;B!DE4,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) BLT " 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 ;GET CHAR CLR ACKTMR ;RESET ACK TIMER CMPB R4,#ACK ;IS CHAR AN ACK? BNE RCV810 ;NO CMPB # 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 MOVB RBUF,R4 ;CLEAR RCSR DONE BIT TO PREVENT OVERRUN BR RCV020 ;GO RETURN ; ; PROCESS A RING ; RCV040 = . BIT #RING,R5 ;IS IT A RIN$CC 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 ;POINTER TO CUSTOMER CITY NAME1: .ASCII 'ACME OIL COMPANY ' NAME2: .ASCII 'AJAX OF CALIFORNIA ' NAME3: .ASCII 'ALPHA OIL COR% 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. & MODE,#8. ;BRANCH ON MODE BLT RCV710 ; = 7 ACK AFTER SENDING INVOICE BEQ RCV800 ; = 8 ACK AFTER SENDING AUDIT ERR MSG CMPB MODE,#11. ;IS MODE 9. OR 11.? BEQ RCV575 ; = 11 ACK AFTER SENDING NULL ; = 9 ACK AFTER SENDING EOD REPORT BIC #DTRDY,RCSR ;DROP LINE - RESET DATA TERMINAL READY CLRB MODE ;SET MODE TO EXPECT RING JMP 'G? 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? BEQ RCV0(PORATION' 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 DATEAS: .ASCII '051072' KODE1: .ASCII '01' KODE2: .ASCII '02' KODE3: .ASCII '03' KODE4: .ASCII '04' PRNAM1: .ASCII 'REGULAR ' PRNAM2: .ASCII 'PREMIUM ' PRNAM3: .ASCII 'LOW LEAD ' PRNAM4: .ASCII 'DIESEL ') ;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 ;UNLOCK TIMER ;* ;* NOW GET PRODUCT INFORMATION AND PUT IN INVOICE * 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 TRAIL!" .WORD MSG03 .BYTE WRITE,+80 ;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+COUNT ;ZERO CHAR COUNT RCV070 = . CLRB RBUF ;INSURE RCSR DONE BIT CLEARED! BIS #ENABLE,RCSR ;ENABLE DC11 RECEIVE INT. BR RCV020 ;GO RETURN ; ; , 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,TAB,TAB,TAB .ASCII ' ' CITY: .ASCII ' ' .BYTE CR,LF,LF,LF,LF-BUFFER ;* BIT #040000,SWITCH ;ARE PRODUCT FLOWS & TEMPS SIMULATED? BEQ INV050 ;NO JSR R5,MOVE .WORD FL1,RCVBUF+DATA+FLOW1,FLOWSZ .WORD FL2,RCVBUF+DATA+FLOW2,FLOWSZ .WORD FL3,RCVBUF+DATA+FLOW3,FLOWSZ .WORD FL4,RCVBUF+DATA+FLOW4,FLOWSZ .WORD TMP1,RCVBUF+DATA+T1,TEMPSZ .WORD TMP2,RCVBUF+DATA+T2,TEMPSZ .WORD TMP3,RCVBUF+DATA+T3,TEMPSZ .WORD TMP4,RCVBUF+DATA+T4,TEMPSZ .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 ; RCV820 = . MOV #ERR02,MSG01F ;SET/ 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 ;SET RECEIVE MODE TO EXPECT RING IOT ;TYPE - "TRANSMISSION ERROR XX!" .WORD MSG01 .BYTE WRITE,TTYSLT RCV095 = . TSTB MSG01+STATUS BPL 0 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 ' 00000049' .BYTE CR,LF,LF,LF,LF CODE1: .ASCII 'XX ' PROD1: .ASCII ' 1 .WORD -1 INV050 = . 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 .WORD RCVBUF+DATA+FLOW2,FLOWSZ,INV200 2 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 BISB #BUSY,STATUS(R0);SET BUFFER BUSY CLR 3RCV095 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,MODE ;SET RECEIVE MODE TO EXPECT DATA BR RCV020 ;GO RETURN RCV120 = . BIT #PARITY,R5 ;IS PARITY GOOD? BEQ RCV020 ;YES, IGNORE INTERRUPT 4 ' 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: .ASCII 'XX ' PROD4: .ASCII ' ' VOL4: .ASCII 'XXXXXX ' TEMP4: .A5 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,VOL3,FLOWSZ .WORD RCVBUF+DATA+T3,TEMP3,TE6 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 ;YES EMT 0 ;SIMULAT7 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 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 CH8SCII '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 = . .BYTE 100,132,177,173,133,154,120,175,115,135 .BYTE 134,116,153,140,113,141,369MPSZ .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 ;CREATE HEADER FOR INVOICE MOV #INVOICE,R1 :E 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 .BYTE WRITE,TTYSLT D11023 = . TSTB ;AR 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 = . INCB RCVERR ;INCR ERROR COUNT BR RCV160 ;GO RETURN<0,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 ; TMSG00 = . .BYTE CR,LF .ASCII /AUDIT TRAIL JUST ENTERED IS ERRONEOUS!/ TMSG01 = = 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 ;SET RECEIVE MODE TO EXPECT ACK/NAK >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 INC COUNT(R0) ;INCR CHAR COUNT ? ; ; 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 ;DOES IT MATCH? BNE RCV210 ;NO RCV205 = . MOVB #5,MODE ;YES, SET MODE FOR RECEIPT OF BCC(LSB) JMP RCV020 ;GO RETURN RCV210 = . @ . ; ; 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 .WORD 25. .BYTE CR,LF .ASCII /TRANSMISSION ERROR / MSG01F: .ASCII / !/ .EVEN MSG02: .WORD 0 .BYTE 0 .BYTE 0 A ;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 ;GO WAIT FOR ACK ; ; PROCESS ERRONEOUS AUDITB 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 ;DISABLE TRANSMIT INTERRUPT BIC #REQSND,TCSR C 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 RCVERR ;NO, INCR ERROR COUNT RCV260 = . BIC #ENABLE,RCSR ;DISABLE RECEIVE INTERRUPTS MOV #RCVBUF+DATA+10.,R0 ;GET DATE/TIME FROM MSG RECEIVED MOV #DAYTIM,R1 D .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 .EVEN ; ; HUB TELETYPE BUFFERS ; TTIBUF: .WORD 0 ;MAX NO. CHARS TO INPUT .BYTE 0 ;MODE - FORMATED ASCII .BYTE 0 ;SE 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 ;NO MOVB #8.,MODE ;SET F;RESET REQUEST TO SEND 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 -- ; ; MOV #DEVICE,-(SP) ; JSR PC,HEADER ; ; CONDITIONS UPON ENTRY -- ; ; SPECIAL CODE FOR DEVICE SELECTION IS ON STACK ; ; CONDITIOGRCV270 = . 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 MOV #TRNBUF,-(SP) ;CALL DC11 OUTPUT ROUTINE JSR PC,D11OUT RCV280 = . TSTB TRNBUF+STATUHTATUS .WORD 0 ;NO. OF CHARS INPUT . = .+600. ;DATA TTOBUF: .WORD 0 ;UNUSED .BYTE 0 ;MODE - FORMATTED ASCII .BYTE 0 ;STATUS .WORD 0 ;NO. OF CHARS TO BE OUTPUT . = .+300. ;DATA ; ; TIMERS ; TIMER = . ACKTMR: .WORD 0 ;ACK TIMER .WORD ACKTO EOTTMR: .WORD 0 ;EOT TIMER .WIRECEIVE 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 ;YES MOVB #ASR33,-(SP) ;SPECIFY OUTPUTJNS 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 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 KS ;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 ;SET NO. CHARS TO 2 MOV #TRNBUF,-(SP) ;CALL DC11 OUTPUT ROUTINE JSR PC,D11OUT RCV310 = LORD EOTTO 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 = . ;TRANSMIT BUFFER .WORD 0 ;NO. OF DATA CHARACTERS TOM 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/NAK ; ; PRINT CONTENTS OF RCVBUF AT HUB ; N JSR PC,DELAY ;DELAY FOR BCC HDWR MOV #DAYTIM,R1 ;PUT DATE AND TIME INTO BUFFER HEAD10 = . MOVB (R1)+,(R0) MOVB (R0)+,BCCOUT JSR PC,DELAY CMP R1,#DAYEND BLT HEAD10 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 COUNO . 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 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 = . P BE TRANSMITTED .BYTE 0 ;UNUSED .BYTE 0 ;STATUS .WORD 0 ;RESERVED FOR USE BY TRNINT ROUTINE . = .+515. ; ; DATE/TIME SAVED HERE ; DAYTIM = . ;DATE/TIME FROM LAST MSG RECEIVED . = .+7. DAYEND = . ; ; PROGRAM VARIABLES ; MODE: .BYTE 0 ;RECEIVE MODE ; WHERE 0 = EXPECTING RING Q 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 BUFFER MOV #TTOBUF+DATA,R2 ;GET TTY BUFFER DRT 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 IN TRNBUF MOVB (R0)+,BCCOUT ;CALC BCC JSR PC,DELAY ;DELAY FOR BCC HDWR MOSBIC #ENABLE,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 T ; 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 UATA 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 IOT ;PRINT MSG ON HUB TTY VVB 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 ; ; CALLING SEQUENCE ; ; JSR PC,DELAY ; DELAY = . NOP NOP NOP W CMP R4,#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 JMP RCV575 ;GO TYPE CONTENTS OF MSG ON HUB TTY RC.530: JMP RCX ; 8 = SAME ; 9 = SAME ; 10 = 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 INTCNT: .WORD 0 ;RECEIVE INTERRUPT COUNT (FOR CHECKOUT) .PAGE ; ; INITIALIZATION PROGRAM AND IDLY .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+DATA,R3 ;GET ADDRESS OF END OF DATA RCV630 = Z 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 INACTIVE (ZERO)? BEQ CLK020 ;YES DEC (R0) ;DECREMENT COUNTER BEQ [V530 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 #CODE3,R4 \E 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 #16710,@#64 MOV #BR5,@#66 MOV #CLR,COM ;CLEAR MAG TAPE CONTROLLER JSR PC,TAPRDY ;READY? ] . 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 ; ; PROCESS ACK/NAK AFTER SENDING RESPONSE TO CP ; RCV^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 ;GO LOOK AT NEXT TIMER .PAGE ; ; EOTTO -- EOT TIMEOUT SUBR ; ; CALLING SEQUENCE -- ; _ 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 SUB ` 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 ;CHECKOUT RECEIVE INT (TRAP) MOV #TRNINT,@#30 ;CHECKOUT TRANSMIT INT (EMT) .ENDC CLR R0 ;La700 = . 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 ERR MSG .WORD RCV708 ;9, ACK AFTb; JSR PC,EOTTO ; EOTTO = . JSR R5,PUSHR ;SAVE REGS BIC #DTRDY,RCSR ;RESET DATA TERMINAL READY CLRB MODE ;SET RECEIVE MODE TO EXPECT RING JSR R5,POPR ;RESTORE REGS RTS PC ;RETURN .PAGE ; ; ACKTO -- ACK TIMEOUT ROUTINE ; ; CALLING SEQUENCE -- ; ; JSR PC,ACKTO ; ACKTO = . JSR R5,PUSHR ;SAVc #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 0,ADDRESS,dET 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 ;RESET IOX .WORD 0 .BYTE RESET,0 IOT ;SET RESTART ADDRESS .WORD DEMO eER 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 RING ;* * * * * * * F R I L L * * * * * * * fE REGS MOV #TIMER,R0 ;RESET ALL TIMERS ACK010 = . CLR (R0)+ TST (R0)+ CMP R0,#TIMEND BLT ACK010 BIC #DTRDY,RCSR ;RESET DATA TERMINAL READY CLRB MODE ;SET RECEIVE MODE TO EXPECT RING MOV ERR03,MSG01F ;TYPE -- "TRANSMISSION ERROR 03!" IOT .WORD MSG01 .BYTE WRITE,TTYSLT ACK020 = . TSTB MSG01+STATUS BPL ACg20. ;AND ADDRESS INV040: .WORD 0,CITY,20. ;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,Mh .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 = . CMP #INITL,SWITCH BEQ DEM035 IOT ;TYPE MSG00 .WORD MSG00 i 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 ;ON HUB TTY ; ; ACK NOT RjK020 BIS #ENABLE,RCSR ;ENABLE RECEIVE INTERRUPT JSR R5,POPR ;RESTORE REGISTERS RTS PC ;RETURN .PAGE ;*********************************************************************** ;* ** ;* B L A N K ** ;* ** ;* THIS SUBROUTINE STORES N CONSEkOVE ;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 .WORD RCVBUF+DATA+FLOW2,FLOWSZ,INV200 JSR R5,MOVE .WORD KODE2,CODE2,2 .WORD PRNAM2,PROD2,PRSZ .WORD RCVBUF+DATA+FLOW2,VOL2,FLOWSZ .WORD l.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 ;READ PUNCHED TAPE .WORD TTIBUF .BYTE READ,LSRSLT BR DEM0mECEIVED, 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 #ERR01,MSG01F ;SET UP HUB ERROR MSG JMP nCUTIVE BLANKS BEGINNING AT ** ;* LOCATION ADDR. THE LINKAGE IS: ** ;* ** ;* R4 = ADDR ** ;* R5 = N ** ;* JSR PC,BLANK ** ;* ** ;*****************************oRCVBUF+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,VOL3,FLOWSZ .WORD RCVBUF+DATA+T3,TEMP3,TEMPSZ .WORD -1 ; INV250 = . JSR R5,TEST ;AND FINALLY, PRODUCT #4 .WORD RCVBUF+DATA+FLOW4,FLOWSZ,INV30p30 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 BLT DEM040 CLRB MODE ;SET RECEIVE MODE TO EXPECT RING BIS #ENABLE,LKS q RCV090 ;GO DROP LINE AND TYPE ERROR MESSAGE ; ; ; PREPARE INVOICE DATA IN EBCDIC CHARS AND WRITE ON MAG TAPE ; RCV900 = . MOV #TRNBUF+DATA+10.,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 R3,#132 BGT RCV960 ;NO r****************************************** ; BLANK = . MOVB #' ,(R4)+ ;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 s0 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 ;CREATE HEADER FOR INVOICE MOV #INVOICE,R1 MOV #BCCOUT,R2 INV310 = . MOVB (R1)+,(R0) ;MOVE INVOICE TO THE MOVB (R0)+,(R2) ;DC11 OUTPUT BUFFER t;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) CLRB PS ;ALLOW DC11 INTERRUPTS DEM050 = . .IFZ DEBUG WAIT ;IDLE!! BR DEM050 .ENDC .PAGE .IFNZ DEBUG ;* ;* SIMULATED DC11 CHECKOUT. THIS SECTION Cu 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 = . ASLB R4 ;SHIFT MASK TO NEv ** ;* ** ;* THIS SUBROUTINE MOVES N CHARACTERS FROM LOCATION ADDR1 TO ** ;* LOCATION ADDR2. THE LINKAGE IS: ** ;* ** ;* JSR R5,MOVE ** ;* .WORD ADDR1,ADDR2,N -------- ** ;* . . ! w 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 ;AFTER TRANSMITTING INVOICE RCV500 = . MOVB #8.,REPEAT ;SET NO. OF OUTPUT TRYS RCV510 = . MOxAUSES 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?) TRAP ; AND SIMULATE DC11 INTERRUPT MOV #CARTRN!ERROR!DETECT,RCSR ;NOW, CARRIER TRANSITION TRAP ;AND CARRIER DETECT MOV #DONE,RCSR MOV #STX,RBUF yXT 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+10.+INVEND-INVOICE ;ALL DATA FLIPPED? BMI RCV905 ;NO, GET NEXT BYTE ; ; WRITE INVOICE ON MAG. TAPE ; RCV930 = . MOV #11.,R5 z ** ;* . . ! ANY NUMBER OF PAIRS ** ;* . . ! ** ;* .WORD ADDR1,ADDR2,N -------- ** ;* .WORD -1 ** ;* ** ;* WHERE THE -1 TERMINATES THE LIST; EXECUTION RETURNS TO THE ** ;* FIRST INSTRUCTION AFTER THE -1. {V #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 #ASR33,-(SP) ;PUT MSG HEADER IN TRANSMIT BUFFER JSR PC,HEADER ;SPECIFY OUTPUT TO ASR| ;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 ;IS IT A BELL (END OFMESSAGE) BEQ $DC11B ;YES MOV R0,-(SP) ;SAVE ADDRESS TRAP ;SIMULATE MOV (SP)+,R0 BR $DC11A ;GO BACK FOR M} ;SET NO. OF TRYS FOR WRITE RCV932 = . MOV #TRNBUF+DATA+10.,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 MOV #10.,R5 ;SET REPEAT C3UNT ~ ** ;* ** ;*********************************************************************** ; 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 = . 33 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 MOVB #8.,MODE ;SET RECEIVE MODE TO EXPECT ACK/NAK ;AFTORE ; $DC11B = . MOV #ETX,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 T 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,TAPRDY ;READY? BR RCV932  MOVB (R2)+,(R3)+ DEC R4 ;MOVE THE CHARACTER STRING BGT MOVA00 BR MOVE ;GO GET NEXT LIST ; MOVA10 = . RTS R5 .PAGE ;*********************************************************************** ;* ** ;* T E S T ** ;* ER 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 MOVB #NUL,-(SP) ;NULL MESSAGE TO TERMINAL JSR PC,HEADER MOVB #ETX,-(SP) JSR PC,TRAILR MOVB #10.,MODE BR RCV500 ; ; PRINT CONTENTSURNAROUND - EOT TRAP ; ;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)  ;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 ;NO MOVB #5,R3 BR RCV90 ** ;* THIS SUBROUTINE TESTS N CONSECUTIVE CHARACTERS. IF ALL N ** ;* CHARACTERS 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  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 #HDRSIZ,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 =  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 ******* BGE RCV005 BR RCV038 RCV005 = . ASL R0 JMP @RCV010-4(R0) ; ; BRANCH TABLE ; RCV010 = . .WORD RCV100 ;RECEIVE STX MODE = 2 .WORD RCV150 ;RECEIVE D8 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 #100,R3 ;SUBSTITUTE A BLANK (SPACE)  ** ;* .WORD RETURN ;ZERO STRING RETURN ADDRESS ** ;* ** ;*********************************************************************** ; 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 A . 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 IOT ;PRINT MSG ON HUB TTY .WORD TTOBUF .BYTE WRITE,TTYSLT RCV585 = . TSTB TTOBUFATA = 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 RCV700 ;RECEIVE ACK/NAK = 8 .WORD RCV700 ;RECEIVE ACK/NAK = 9 .WORD RCV700 ;RECEIVE ACK/NAK AFTER NULL = 10 ; RCV020 = .  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) ;ZRO CHAR COUNT BIS #REQSND,TCSR ;SEBOUT ZERO? BEQ TESA20 ;YES TST (R5)+ ;NON-ZERO AND 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 ;*+STATUS BPL RCV585 JMP RCV070 ;GO ENABLE RECEIVE INTERRUPT ; ; PREPARE 1ST PORTION OF END OF DAY REPORT FOR OUTPUT ; RCV590 = . MOVB #ASR33,-(SP) ;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,# JSR R5,POPR ;RESTORE REGS. 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 T 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 INTERRUPT BR D11015 ; D11020: ********************************************************************** ; * ; P U S H R * ; * ; PROGRAM IDENTIFICATION. PUSHR - PUSH REGISTERS SUBROUTINE; * ; CATALOG NUMBER * ; 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.,MODE ;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,HBLE RCV050 ;YES RCV035 = . 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 INTE 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 BPL D11023 BICB #BUSY,STATUS(R0 * ; PURPOSE. SUBROUTINE PUSHR PUSHES R0-R5 ONTO THE CURRENT STACK * ; * ; USAGE. THE ASSEMBLER LINKAGE TO SUBROUTINE PUSHR IS: * ; * ; JSR R5,PUSHR * ; * ;***********************************************************EADER 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) ;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 RRUPT 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? BEQ RCV080 ;NO CMPB R4,#1 ;Y) ; 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(R0),(R0) ;HAVE ALL CHARS BEEN TRANSMITTED? ************ ; R0 = %0 R1 = %1 R2 = %2 R3 = %3 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  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 ;GET CHAR CLR ACKTMR ;RESET ACK TIMER CMPB R4,#ACK ;IS CHAR AN ACK? BNE RCV810 ;NO JMP @RCV705-14.(R0) ;BRANCH ON MODE RCV705 = . .WORD RCV710 ;7, RECEIVE ACK AFTER SENDING INVOICE ES, 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+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 = .  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 SEND TRN030 = . BIT #DETECT,RCS .PAGE ;*********************************************************************** ; * ; P O P R * ; * ; PROGRAM IDENTIFICATION. POPR - POP REGISTERS SUBROUTINE; * ; CATALOG NUMBER * ;  .WORD RCV800 ;8, ACK AFTER SENDING AUDIT ERR MSG .WORD RCV708 ;9, ACK AFTER SENDING EOD REPORT .WORD RCV575 ;10, ACK AFTER SENDING NULL ; 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 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 ;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 RR ;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 BR TRN010 ;GO RETURN .PAGE ; ;  * ; PURPOSE. SUBROUTINE POPR POPS R0-R5 OFF THE CURRENT STACK * ; * ; USAGE. THE ASSEMBER LINKAGE TO SUBROUTINE POPR IS: * ; * ; JSR R5,POPR * ; * ;***************************************** 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 BR RCV578ECEIVE INTERRUPT ; ; PROCESS STX ; 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  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 TRNBUF ; R1 IS USED AND NOT RESTORED ; HEADER = ****************************** ; R0 = %0 R1 = %1 R2 = %2 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  ;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 = . DECB REPEAT ;DECR REPEAT COUNT BEQ RCV820 ;ALL TRYS EXHAUSTED? JMP RCV510 ;NO, TRY AGAIN ; RCV820 = . MOV  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 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 #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 ;PUT JULIAN DATE INTO BUFFER HEADER HEAD10 = . M RTS R5 ;RETURN .END  #ERR02,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 #INVOICE,R0 ;GET ADDRESS OF INVOICE BUFFER RCV905 = . MOVB (R0)+,R3 ;GET A CHAR ; ; DO ASCII/EBCDIC CONVERSION ; CMPB R3,#40 ;IS CHAR IN ASCII/EBCDIC TABLE? BLT RCV940 ;NO CM 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 = . INCB RCVERR ;INCR ERROR COUNT BR RCV160 ;GO RETURN ; ; PROCESS ETX/ETB ; RCV180 = OVB (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 HEAD20 ;A 10 CHAR HEADER (FOR ANDY) MOVB (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, CAL051072010203f*X04REGULAR PREMIUM LOW LEAD DIES*|EL 0000 * COLL w* PB 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 RCV915 . 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 ;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 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 ENTRY -- ; ; TERMINATING CHAR ETX OR ETB IS RT. JU * XXXX CONSOLIDATED CARRIERS *  XXX 00000 MMDDYYH*0HMM GE&ES TERMINAL 0000 *T 00000049 XX l*x XXXXXX XXX XX * XXX*XXX XXX XX * XXXXXX XXX XX /* XXXXXX XXX *, = . 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,#INVEND ;ALL DATA FLIPPED? BMI RCV905 ;NO, GET NEXT BYTE ; ; WRITE INVOICE ON MAG. TAPE ; RCV9 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 RCVERR ;NO, INCR ERROR COUNT RCV260 = . BIC #ENABLE,RCSR ;DISABLE RECEIVE INTERRUPTS MOV #RCVBUF+DATA+10.,R0 ;GET DATE/TIME FROM MSG RECEIVED MOV #DAYTIM,R1 RCV270 = . MOVB (R0)+,(R1)+ STIFIED 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 R0,TRNBUF ;PUT INTO BUFFER HEADER MOV (SP)+,( P.Ob*P. BOX 608 SAN DIEGO, CALIF @*t ESG @Z{[lP}M]\Nk`Kaz^L~n*o| AU*DIT TRAIL JUST ENTERED IS ERRONEOUS!L*6 IS END OF DAY REPORT TO BE E*NTERED ON PUNCHED TAPE?  TRAN(SMISSION ERROR !*<$ ERRONEOUS ACTION CODE RECEIV*`ED!  ERROR IN AUDIT TRAIL!  T  H30 = . MOV #CLR,COM ;CLEAR CONTROLLER JSR PC,TAPRDY ;READY? MOV #RWD,COM ;YES,REWIND TAPE JSR PC,TAPRDY ;READY? MOV #INVOICE,MA ;YES, PUT INVOICE ADDRESS IN ;MEMORY ADDRESS REGISTER MOV #LSR-INVOICE,WC ;SET WORD COUNT MOV #WRT,COM ;WRITE THE INVOICE ON TAPE JSR PC,TAPRDY MOV #WFM,COM ;WRITE FILE MARK  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 MOV #TRNBUF,-(SP) ;CALL DC11 OUTPUT ROUTINE JSR PC,D11OUT RCV280 = . TSTB TRNBUF+STATUS ;ALL DONE? BMI RCV280 ;NO 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 #TIMER,R0 ;GET BEGINNING OF TIMER TABLE CLK010 = (" 6  F *J  *n A" 0246@* > 4R X@ * BN * %I X4*  ׭Y  gK*"     7U@*7U@*F 7 7w d B*j  xn :vw >ĝ JSR PC,TAPRDY MOV #WFM,COM ;WRITE FILE MARK JSR PC,TAPRDY BIT #ERR,STAT ;IS FILE GOOD? BNE RCV930 ;NO, GO DO IT AGAIN JMP RCV070 ;GO ENABLE RECEIVE INTERRUPT ; TAPRDY = . MOV #20.,R4 ;DELAY FOR CONTROLLER TO SET READY AFTER DEC R4 ;COMMAND BNE .-2 BIT #200,@#STAT ;IS CONTROLLER READY? BEQ .-6  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 ;SET NO. CHARS TO 2 MOV #TRNBUF,-(SP) ;CALL DC11 OUTPUT ROUTINE JSR PC,D11OUT RCV310 = . TSTB TRNBUF+STATUS ;ALL DONE?  . 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 ; CLK030 = . JSR R5,POPR ;RESTORE REGS ?*  5@&ĝR* 5 UB5@5.* f7c7 :7U@00>* E@E7<  ĝK*7 5 5ĝ*B7   0# *fĝ7~w*ĝn7fE@\. ? * 4 |wj6 *Ja:`wLG@ RTS PC ;RETURN ; ; SPECIAL CHARACTER ASCII/EBCDIC CONVERSION ; RCV940 = . 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, 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 RCV020 ;NO, IGNORE INTERRUPT RCV322 = . BIC #ENABLE,RCSR ;DISABLE RECEIVE INTERRUPT CLR EOTTMR ;RESET EOT TIMER  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!" BR ACK010 .PAGE ; ; CARTO -- TIME*:6 1wĝwe*hE@7  !10!20q*>!60!40 !70 < ww*bwwDi. . >*. . 򷊦} *E1W  ww*ww = W *L)1 /G T w f 2w *nRiZm f  w fm *:Zw FTd m  w >*R3 BR RCV908 RCV955 = . CMPB R3,#CR ;CR? BNE RCV960 MOVB #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.  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 R4,#MANUAL ;IS IT A MANUAL TRANSACTIOOUT 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 ; ACKTO = . JSR R5,PUSHR ;SAVE REGS ^t w Vn t  *w { w Xx {  $|*2 H 8W y<* pl6 :Qu*&w1 H7 W "* (5 .- p*6  E7w*Z5  ҕ x  i*~wd1 H7d `W ^!* . 1 _eH*70 MOV 14.(SP),R0 ;GET BUFFER ADDRESS MOV R0,CURBUF ;SAVE CURRENT BUF ADDR BISB #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 INTERRUPN? 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 JMP RCV575 ;GO TYPE CONTENTS OF MSG ON HUB TTY RC.530: JMP RCV530 RC.570: JMP RCV570 RC.620: JMP RCV620 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 ; UPTIME -- TIME OF DAY UPDATE SUBROUTINE ; ;  ,C  E@ĝ*!7 &x BE7@wE*72E7&f ?*2w7 w01wG *Vנ FנZ[ CyÌČ*zp >  G   * .  5wv*$E  5b*נ Õנ Õ%נ * נ ÕÕ@w 7 Հ*.0 UT .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 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  .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 #CODE3,R4 MOV #46.,R5 JSR PC,BLANK  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 RTS 5e7U@w K*Rrw ^ , elwz*vw JE@Ez5p5h*ŀ< Е7 J H7@ <u*? H72 .W G 7 *ННЕ< 7@w *     $w  w **E703 w w n}*N    E702 U*r@w Lԕ B CD *CDע 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 JSR R5,POPR ;RESTORE REGS MOV (SP)+,(SP) ;SWAP PC AND BUF ADDR; POP STACK RTS PC ;RETURN .PAGE ; ; DC11 TRANSMITTER INTERRUPT ROUTINE ;  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 SUB #61,R1 ;CONVERT TO INDEX (0,1,2)  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, INCREMENT HR UNITS DIGIT SET040 = . CMPB - 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 *  TRNINT = . JSR R5,PUSHR ;SAVE REGS MOV CURBUF,R0 ;GET CURRENT BUFFER 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 ;R 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,21(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) ;SET HR UNITS DIGIT TO 0 BR SET008 .PA ; %6 = SP %5 = R5 %4 = R4 %3 = R3 %2 = R2 %1 = R1 %0 = R0 ; **********************************************************************;* * ; * R OP,PR5 R JS ; * ; * : ISR OP PNETIOUBRSUO TGEKAIN LERMBSEASE TH E.2ESTORE REGS RTI ;RETURN ; TRN020 = . BIC #ENABLE,TCSR ;DISABLE 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 CARRIER FOR TRANSMITTER BEQ TRN040 BICB #BUSY,STATUS(R0);SET STATUS NOT BUSY BR TRN010 ;G0. ;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 GE ;*********************************************************************** ;* ** ;* B L A N K ** ;* ** ;* THIS SUBROUTINE STORES N CONSECUTIVE BLANKS BEGINNING AT ** ;* LOCATION ADDR. THE LINKAGE IS: ** ;* AGUS ; * ; * CKTA SNTREUR CHE TFF OR50- RPSPOR OP PNETIOUBRSU E.OSRPPU ; * ; * ERMBNUG LOTACA ; * ; NETIOUBRSUS ERSTGIREP PO- R OP P. ONTICAFITIENIDM RAOGPR ; * ; * R P O P .O 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 TRNBUF ; R1 IS USED 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 ;  ** ;* R4 = ADDR ** ;* R5 = N ** ;* JSR PC,BLANK ** ;* ** ;*********************************************************************** ; BLANK = . MOVB #' ,(R4)+ ;MOVE IN A BLANK DEC R5 ;DECREMENT CHARACTER ; * ; **********************************************************************;* 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 * * 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 #DAYTIM,R1 ;PUT DATE AND TIME INTO BUFFER  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,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,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 ** ;* LOCATION ; %6 = SP %5 = R5 %4 = R4 %3 = R3 %2 = R2 %1 = R1 %0 = R0 ; **********************************************************************;* * ; * HRUS,PR5 R JS ; * ; * : ISR SHPUE INUTROUB STOE AGNKLI&HEAD10 = . MOVB (R1)+,(R0) MOVB (R0)+,BCCOUT JSR PC,DELAY CMP R1,#DAYEND BLT HEAD10 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) ; 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 ;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 HARADDR2. THE LINKAGE IS: ** ;* ** ;* JSR R5,MOVE ** ;* .WORD ADDR1,ADDR2,N -------- ** ;* . . ! ** ;* . . ! ANY NUMBER OF PAIRS ** ;* . . ! ** ;* .R LEMBSEASE TH E.AGUS ; * ; *CKTA SNTREUR CHE TTOON5 -RR0S HEUS PHRUS PNETIOUBRSU E.OSRPPU ; * ; * ERMBNUG LOTACA ; * ; NETIOUBRSUS ERSTGIREH US P -HRUS P. ONTICAFITIENIDM RAOGPR ; * ; * R" 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 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 DWARE 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 ;AFTER TRANSMITTING INVOICE RCV500 = . MOVB #8.,REPEAT ;SET NO. OF OUTPUT TRYS RCV510 = . MOV #TRNBUF,-(SP) ;CALL DC11 TRANSMIT ROUTINE WORD ADDR1,ADDR2,N -------- ** ;* .WORD -1 ** ;* ** ;* WHERE THE -1 TERMINATES THE LIST; EXECUTION RETURNS TO THE ** ;* FIRST INSTRUCTION AFTER THE -1. ** ;* ** ;*********************************************************************** ; H S U P ; * ; **********************************************************************;* E AG.P ' RNTURE 'TOT XI ESO K.ANBLR ;O R5 S RT ROZEE ARS ARCHL AL, NTOI PISTHT ;A R5+,5)(R V MO E OR MOR FCKBAH NCRA;B 00SATE T BG ERNTOU CERCTRAHA CNTMEREEC;D R4 C DE . = 20SATE ; R3 C IN . =  #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 ; ; CALLING SEQUENCE ; ; JSR PC,DELAY ; DELAY = . NOP NOP NOP RTS PC .PAGE ; ; LINE FREQUENCY CLOCK INTERRUPT ROUTINE ; CLKINT = .  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 #ASR33,-(SP) ;PUT MSG HEADER IN TRANSMIT BUFFER JSR PC,HEADER ;SPECIFY OUTPUT TO ASR33 MOV #TMSG00,R1 ;GET MSG ADDRESS 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 ; MOVA1 10SATE ; RNTUREL MAOR NCTFEEFO ;S R5 S RT D UNFOK ANBLN-NOD ANO ER-ZON;N + 5)(R T TS ES;Y 20SATE Q BE O?ER ZUTBO AOW;H 0 #'+,3)(R PBCM ES YIFH NCRA;B 10SATE Q BE ? NKLA BITS ;I ' ,#3)(R PBCM . = 00SATE ; N D OA LND;A R4+,5)(R V MO DRADD OA;L R3+,5)(R V MO . = STTE ; **************************************************** 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 INACTIVE (ZERO)? BEQ CLK020 ;YES DEC (R0) ;DECREMENT COUNTER BEQ CLK040 ;TIMEOUT? CLK020 = . CMP (R0)+,(R0)+ ;NO, BUMP POINTER TO NEXT ENTRY  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 MOVB #8.,MODE ;SET RECEIVE MODE TO EXPECT ACK/NAK ;AFTER SENDING BR RCV500 ;GO TRAN0 = . 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 ** ;* LOCATIO******************;* ** ;* ** S ESDRADN URET RNGRISTO ER;Z RNTURE D OR.W ;* ** S ERCTRAHA COFR BEUM;N N D OR.W ;* ** STTEO TERCTRAHA CSTIR;F DRAD D OR.W ;* ** T ES,TR5 R JS ;* ** ;* ** L.UAUSS AEDRNTURES IOLTRON CE,ISRWHEOTIN BR CLK010 ;TIMER TABLE ; CLK030 = . 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 BISMIT 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 MOVB #NUL,-(SP) ;NULL MESSAGE TO TERMINAL JSR PC,HEADER MOVB #ETX,-(SP) JSR PC,TRAILR MOVB #10.,MODE BR RCV500 ; ; PRINT CONTENTS OF RCVBUF AT HUB ; RCV575 = . N '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 ** ;* ** ;****** '.RNTURE 'ONTICALO ;* ** O TNSURET RSTTEN HE TS,NKLA BORS OEER ZIISC ARE ARSTEACARCH ;* ** N L ALF I. RSTEACARCHE IVUTECNSCON S STTEE INUTROUB SISTH ;* ** ;* ** T S E T ;* ** ;* **********************************************************************;* E AG.P R5 S RT C #DTRDY,RCSR ;RESET DATA TERMINAL READY CLRB MODE ;SET RECEIVE MODE TO EXPECT RING JSR R5,POPR ;RESTORE REGS RTS PC ;RETURN .PAGE ; ; ACKTO -- ACK TIMEOUT ROUTINE ; ; CALLING SEQUENCE -- ; ; JSR PC,ACKTO ; ACKTO = . JSR R5,PUSHR ;SAVE REGS MOV #TIMER,R0 ;RESET ALL TIMERS ACK010 = . CLR (R0)+ 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 #HDRSIZ,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 F***************************************************************** ; 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 RETURN . = 10VAMO ; T IS LXTNET GEO ;G VEMO BR 00VAMO T BG NGRISTR TEACARCHE THE OV;M R4 C DE + 3)(R+,2)(R VBMO . = 00VAMO ; RSTEACARCHF OO. NHE TET GND;A R4+,5)(R V MO 2 DRADS ESDRADD OA;L R3+,5)(R V MO ITD UNFOE WIFH NCRA BND;A 10VAMO Q BE STLIF OND EOR FCKHE;C -1,#R2 P CM 1 DRADS ESDRADD OA;L R2+,5)(R V MO . TST (R0)+ CMP R0,#TIMEND BLT ACK010 BIC #DTRDY,RCSR ;RESET DATA TERMINAL READY CLRB MODE ;SET RECEIVE MODE TO EXPECT RING MOV ERR03,MSG01F ;TYPE -- "TRANSMISSION ERROR 03!" IOT .WORD MSG01 .BYTE WRITE,TTYSLT ACK020 = . TSTB MSG01+STATUS BPL ACK020 BIS #ENABLE,RCSR ;ENABLE RECEIVE INTERRUPT JSR R5,POPR ;RESTORE REGISROM 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 IOT ;PRINT MSG ON HUB TTY .WORD TTOBUF .BYTE WRITE,TTYSLT RCV585 = . TSTB TTOBUF+STATUS BPL RCV585 JMP RC ; 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 ;*********************************************************************** ; * ; = VEMO ; **********************************************************************;* ** ;* ** . -1E THR TEAFN IOCTRUSTINT RSFI ;* ** E THO TNSURET RONTICUXE E; STLIE THS TENAMIER T-1E THE ERWH ;* ** ;* ** -1 D OR.W ;* ** -------- N 2,DRAD TERS RTS PC ;RETURN .PAGE ;*********************************************************************** ;* ** ;* B L A N K ** ;* ** ;* THIS SUBROUTINE STORES N CONSECUTIVE BLANKS BEGINNING AT ** ;* LOCATION ADDR. THE LINKAGE IS: ** ;*V070 ;GO ENABLE RECEIVE INTERRUPT ; ; PREPARE 1ST PORTION OF END OF DAY REPORT FOR OUTPUT ; RCV590 = . MOVB #ASR33,-(SP) ;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?  P U S H R * ; * ; PROGRAM IDENTIFICATION. PUSHR - PUSH REGISTERS SUBROUTINE; * ; CATALOG NUMBER * ; * ; PURPOSE. SUBROUTINE PUSHR PUSHES R0-R5 ONTO THE CURRENT STACK * ; * ; USAGE. T1,DRAD D OR.W ;* ** ! . . ;* ** RSAI POFR BEUM NNY A ! . . ;* ** ! . . ;* ** -------- N 2,DRAD1,DRAD D OR.W ;* ** E OV,MR5 R JS ;* ** ;* ** S: IGEKAIN ** ;* R4 = ADDR ** ;* R5 = N ** ;* JSR PC,BLANK ** ;* ** ;*********************************************************************** ; BLANK = . MOVB #' ,(R4)+ ;MOVE IN A B BLT RCV600 ;NO MOVB #ETB,-(SP) ;PUT ETB TRAILER IN BUF JSR PC,TRAILR RCV610 = . MOVB #9.,MODE ;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 DAHE ASSEMBLER LINKAGE TO SUBROUTINE PUSHR IS: * ; * ; JSR R5,PUSHR * ; * ;*********************************************************************** ; R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 SP = %6 ; LHE T. R2DD AONTICALO ;* ** O TR1DD AONTICALOM RO FRSTEACARCHN S VEMOE INUTROUB SISTH ;* ** ;* ** E V O M ;* ** ;* **********************************************************************;* E AG.P MEHOO ;G PC S RT E OR MOR FCKBAO GND;A K ANBL T BG LANK DEC R5 ;DECREMENT CHARACTER COUNTER BGT BLANK ;AND GO BACK FOR MORE RTS PC ;GO HOME .PAGE ;*********************************************************************** ;* ** ;* M O V E ** ;* ** ;* THIS SUBROUTINE MOVES N TA 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 BR RCV610 ;GO SET RECEIVE MODE ;  * 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 ;*********************************************************************** ; * ; ERNTOU CERCTRAHA CNTMEREEC;D R5 C DE NKLA B AINE OV;M + 4)(R ,#' VBMO . = K ANBL ; **********************************************************************;* ** ;* ** NKLA,BPC R JS ;* ** N = R5 ;* ** DRAD = R4 ;* CHARACTERS FROM LOCATION ADDR1 TO ** ;* LOCATION ADDR2. THE LINKAGE IS: ** ;* ** ;* JSR R5,MOVE ** ;* .WORD ADDR1,ADDR2,N -------- ** ;* . . ! ** ;* . . ! ANY NUMBER OF PAIRS ** ;* . .  ; 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 SEND  P O P R * ; * ; PROGRAM IDENTIFICATION. POPR - POP REGISTERS SUBROUTINE; * ; CATALOG NUMBER * ; * ; PURPOSE. SUBROUTINE POPR POPS R0-R5 OFF THE CURRENT STACK * ; * ** ;* ** : ISE AGNKLIE TH R.DD AONTICALO ;* ** ATG INNNGIBES NKLA BVETICUSEON C NESORSTE INUTROUB SISTH ;* ** ;* ** K N A L B ;* ** ;* **************************************************************** ! ** ;* .WORD ADDR1,ADDR2,N -------- ** ;* .WORD -1 ** ;* ** ;* WHERE THE -1 TERMINATES THE LIST; EXECUTION RETURNS TO THE ** ;* FIRST INSTRUCTION AFTER THE -1. ** ;* ** ;***************ING AUDIT ERR MSG .WORD RCV708 ;9, ACK AFTER SENDING EOD REPORT .WORD RCV575 ;10, ACK AFTER SENDING NULL ; 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 EXPEC ; USAGE. THE ASSEMBER LINKAGE TO SUBROUTINE POPR IS: * ; * ; JSR R5,POPR * ; * ;*********************************************************************** ; R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 SP = ******;* E AG.P N URET;R PC S RT RSTEISEG RRETOES;R R OP,PR5 R JS T UPRRTEINE IVCEREE BLNA;E SRRCE,BLNA#E S BI . = 20K0AC LTYSTTE,ITWR E YT.B 1 G0MS D OR.W T IO " 2! 0ORRR EONSIISSMANTR "--E YP;T F 01SG,M02RR#E V MO NGRIT ECXP ETOE OD MVEEIEC RET;S DEMO RBCL DYEA RALINRMTEA AT DETES;R R CS,RDYTR#D C BI 10K0AC T BL NDMETI,#R0 P CM ******************************************************** ; 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 T 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 %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 + 0)(R T TS + 0)(R R CL . = 10K0AC S ERIM TLL AETES;R 0 ,RERIM#T V MO GSREE AV;S HRUS,PR5 R JS . = O KTAC ; TOCK,APC R JS ; ; - -CEENQUSEG INLLCA ; ; NETIOU RUTEOIM TCK A--O KTAC ; ; E AG.P N URET;R PC S RT S EG RRETOES;R R OP,PR5 R JS LTYSTTE,ITWR E YT.B 1 G0MS D OR.W T IO " 3! 0ORRR EONSIISSMANTR "-- 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 ASCII Z ;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 ;N SRRCY,RDDT C BI . = 75V5RC ES;Y 90V5RC Q BE D?IOER P AARCHT RSFIS ;I '.,#0)(R PBCM TADAE AGSSMEF OSSREDD AET;G0 ,RATGDMSF+BUCV#R V MO . = 70V5RC ; RYNT EALNUMAS ESOCPR ; ; ALINRMTEO TITSMANTRO ;G 00V5RC BR NGDIEN SERFT;A K NAK/ACT ECXP ETOE OD MVEEIEC RET;S DEMO.,#8 VBMO R ILRA,TPC R JS ERFFBUO NT IERILRA TUT;P P)E YP;T F 01SG,M03RR#E V MO NGRIT ECXP ETOE OD MVEEIEC RET;S DEMO RBCL DYEA RALINRMTEA AT DETES;R R CS,RDYTR#D C BI GSREE AV;S HRUS,PR5 R JS . = O TTEO ; TOOT,EPC R JS ; ; - -CEENQUSEG INLLCA ; ; R UB SUTEOIM TOT E--O TTEO ; ; E AG.P ERIM TXTNET AOKLOO ;G 20K0CL BR NETIOUBRSUT OUMETIL AL;C ) R02(,@PC R JS . = 40K0CL ; N URET;REROES 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 ** ;*  #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 (S,-TX#E VBMO O ;N 50V5RC E BL ? EDOV MRSHA CLL;A 01SGTM,#R1 P CM R DW HCC BOR FAYEL;D AYEL,DPC R JS C BCC AL;C UTCOBC+,0)(R VBMO ERFFBUO TARCHA E OV;M 0)(R+,1)(R VBMO . = 50V5RC SSREDD ASG MET;G R10,G0MS#T V MO 33SR ATOT PUUT OFYCIPE;S R DEEA,HPC R JS ERFFBUT MINSRA TINR DEEA HSG MUT;P P)(S,-33SR#A VBMO . = 30V5RC ; L AITRT DIAUS OUNERO I RT S EG RRETOES;R R OP,PR5 R JS . = 30K0CL ; LEAB TERIM;T 10K0CL BR INY TRENT EX NTOR TEINPOP UM BO,;N + 0)(R+,0)(R P CM . = 20K0CL ? UTEOIM;T 40K0CL Q BE ERNTOU CNTMEREEC;D 0)(R C DE ES;Y 20K0CL Q BE )?ROZE (VETIACINR METIS ;I 0)(R T TS ES;Y 30K0CL E BG D?TEDAUPN EE BRSMETIL ALE AV;H ND ** ;*********************************************************************** ; 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 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 RCV915 = ERS ESOCPR ; ; CK AOR FITWAO ;G 70V0RC P JM ERIM TCK AET;S MRKTACM,TICK#A V MO O ;N 20V5RC I BM E?ON DLL;A USATSTF+BURN#T TBTS . = 20V5RC T OU11,DPC R JS E INUTROT MINSRA T11DCL AL;C ) SP-(F,BURN#T V MO . = 10V5RC S RY TUTTPOUF OO. NET;S ATPERE.,#8 VBMO CEOINV INGTIITSMRA TERFT;A . = 00V5RC K NAK/ACT ECXP ETOE OD MVEEIEC RET;S E OD,M#7 VBMETI,#R0 P CM . = 10K0CL E BLTAR METIF ONGNIINEG BET;G 0 ,RERIM#T V MO GSREE AV;S HRUS,PR5 R JS . = NTKICL ; NETIOU RPTRUERNT ICKLO CCYENQURE FNELI ; ; E AG.P PC S RT P NO P NO P NO . = Y LADE ; AYEL,DPC R JS ; ; CEENQUSEG INLLCA ; ; ERSTGIREC AL CCC BTOS UTTPOUN EETWBEY LADE ; ; E AG.P N URET;R PC S RT # 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 ;*********************************************************************** ; $ . 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. MO ERILRA T AKEMAO ;G R ILRA,TPC R JS ND ATX ECTLESE, SEWIERTH;O P)(S,-TX#E V MO O NIFH NCRA;B 10V3IN E BN E?ICVOINF OND;E NDVEIN,#R1 P CM R FEUF BUTTPOU1 C1;D 2)(R+,0)(R VBMO HE TTOE ICVOINE OV;M 0)(R+,1)(R VBMO . = 10V3IN R2T,OUCC#B V MO 1 ,RCEOINV#I V MO CEOINV IOR FERADHEE ATRE;C R DEEA,HPC R JS ) SP-(5,03#R V MO . = K ACSTP UANLE;C P)(S+,P)(S V MO R DEEA HERFFBUO NT IUT;P F BURN,TR0 V MO D ANT UNCOR HA CET;G0 ,RTADAF+BURN#T B SU + 0)(RF,#F VBMO )+R0,(SBCLBC VBMO ERFFBUN ICC BUT;P )+R0,(SBCMBC VBMO R DW HCC BOR FAYEL;D AYEL,DPC R JS C BCC AL;C UTCOBC+,0)(R VBMO F BURN TINR HA CNGTINAMIER TUT;P 0)(R),SP2( VBMO . = LRAITR ; UFNBTRN ITEBYL AIAVT EX NTOS NTOI PRO ' * ; P U S H R * ; * ; PROGRAM IDENTIFICATION. PUSHR - PUSH REGISTERS SUBROUTINE; * ; CATALOG NUMBER * ; * ; PURPOSE. SUBROUTINE PUSHR PUSHES R0-R5 ONTO THE CURRENT STACK * ; (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 RECORD 00V3IN ; -1 D OR.W Z PSEM,TP3EM,TT3A+AT+DUFVBRC D OR.W Z WSLO,FL3VO3,OWFLA+AT+DUFVBRC D OR.W Z RS,PD3RO,PM3NAPR D OR.W 2 3,DECO3,DEKO D OR.W E OV,MR5 R JS 0 30NV,ISZOWFL3,OWFLA+AT+DUFVBRC D OR.W 3 # T UCODPR, LYALIN FND;A T ES,TR5 R JS . = 00V2IN ; -1 D OR.W Z PSEM,TP2EM,TT2A+AT+DUFVBRC D OR.W Z WSLO,FL2VO2,OWFLA+AT+DUFVBRC D OR.W Z RS,PD2RO,PM2NAPR D OR.W 2 2,DE ; K ACSTN OEDFITIUS JT. RISB ETR OTX EARCHG INATINRMTE ; ; --Y TRENN PO UNSIOITNDCO ; ; R ILRA,TPC R JS ; ) SP-(H,MCER#T V MO ; ; - -CEENQUSEG INLLCA ; ; ERADHEF BURN TINT UNCOR HA CTSPUO LS AF;,FCC,BTB/ETX E ; E.I. R:FEUF BITSMANTRN IERILRA TUT PTOE INUTRO- -LRAITR ; ; E AG.P R LEAL CTON URET;R PC S RT CKTA SUPANLE;C P)(S+,P)(S V MO + * ; USAGE. THE ASSEMBLER LINKAGE TO SUBROUTINE PUSHR IS: * ; * ; JSR R5,PUSHR * ; * ;*********************************************************************** ; R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = , 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 RCV070 ;GO ENABLE RECEIVE INTERRUPT RCV938 = . BIC #ERR,STAT ;CLEAR ERROR BIT MOV #BCKR,COM ;BACKSPACE A RECOR JSR PC,TAPRDCO2,DEKO D OR.W E OV,MR5 R JS 0 20NV,ISZOWFL2,OWFLA+AT+DUFVBRC D OR.W 2 #CTDURO POR FOW NND;A T ES,TR5 R JS . = 00V1IN ; -1 D OR.W Z PSEM,TP1EM,TT1A+AT+DUFVBRC D OR.W Z WSLO,FL1VO1,OWFLA+AT+DUFVBRC D OR.W Z RS,PD1RO,PM1NAPR D OR.W 2 1,DECO1,DEKO D OR.W E ICVOINO NT IOV M -ES;Y E OV,MR5 R JS O?NF I 1CTDURO PNY;A0 10NV,ISZOWFL1,OWFLA+AT+DUFVBRC D OR.W T ES,TR5 R JS10ADHE T BL ) Y!ND AER(PR DW HOR FARCH1 S LU;P +1NDYEDA,#R1 P CM AYEL,DPC R JS UTCOBC+,0)(R VBMO 0)(R+,1)(R VBMO . = 10ADHE ERFFBUO NT IMETID ANE AT DUT;P R1M,TIAY#D V MO R DW HCC BOR FAYEL;D AYEL,DPC R JS R TOLACUAL CCC BTOT PUUT;O UTCOBC+,0)(R VBMO ERADHEO TDECOE ICEV;D 0)(R),SP2( VBMO R DW HCC BOR FAYEL;D AYEL,DPC R JS R TEISEG RCC BARLE;C / %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 ;*********************************************************************** ; 0Y ;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 ;N ;* R FEUF BCEOINV IINT PUD ANN IOATRMFOINT UCODPRT GEW NO ;* ;* -1 D OR.W SZSTCUO,TNUS,CSTCUA+AT+DUFVBRC D OR.W ,4METI.,13A+AT+DUFVBRC D OR.W 6 E,AT,DASTEDA D OR.W SZDRR,VERI,DNODRA+AT+DUFVBRC D OR.W Z RSCAR,IERRCAO,RNCAA+AT+DUFVBRC D OR.W E ATSTY/IT CND;A 0.,2TYCI0, D OR.W: 40V0IN SSREDD AND;A . 20S,ESDRAD0, D OR.W: 30V0IN CEOINV ITOE AM NEROMSTCUE OV;M 0.,2MENA0, D OR.W: 20V0IN E OV,MR5 CCRBCL R CL R DEEA HTOR HA CTX;S )+R0,(TX#S VBMO ERFFBUT MINSRA TINS ESDRADA AT DET;G0 ,RTADAF+BURN#T V MO . = ERADHE ; D RETOES ROT NND AEDUSS IR1 ; UFNBTRN ITEBYE BLLAAIAVT EX NTOS NTOI PR0 ; ; - -ITEXN PO UNSIOITNDCO ; ; K ACSTN OISN IOCTLESEE ICEV DOR FDECOL IAECSP ; ; --Y TRENN PO UNSIOITNDCO ; ; R DEEA,HPC R JS ; ) SP-(E,ICEV#D V MO 3 * ; P O P R * ; * ; PROGRAM IDENTIFICATION. POPR - POP REGISTERS SUBROUTINE; * ; CATALOG NUMBER * ; * ; PURPOSE. SUBROUTINE POPR POPS R0-R5 OFF THE CURRENT STACK * ; 4O 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 #1 R JS Y IT;C 0 04NV,I1)(RA3PHAL V MO D AN, SSREDD;A 0 03NV,I1)(RA2PHAL V MO E AM NEROMSTCUF OSSREDD;A 0 02NV,I1)(RA1PHAL V MO R1 L AS . = 15V0IN ; R1 R CL . = 10V0IN ; 15V0IN T BL 3 ,#R1 P CM 10V0IN T BL ) ,2,1(0X DEINO TRTVEON;C R11,#6 B SU 3 R O2,, 1BET US;M R10,6077#1 C BI R)HA CSTLA (NOT US CET ; ; - -CEENQUSEG INLLCA ; ; E IM TND ATEDA, ARCHL IAECSP, TX S ; E.I.; ERFFBUT MINSRA TINR DEEA HUT PTOE INUTRO- -ERADHE ; ; E AG.P RNTUREO ;G 10N0TR BR SYBUT NOS TUTA SET;S0)(RUSATSTY,US#B CBBI 40N0TR Q BE R IERRCAE IVCEREF OCTTEDER FOT AI;W SRRCT,ECET#D T BI . = 40N0TR 30N0TR E BN OPDRO TERRIAR CITSMANTRR FOT AI;W SRRCT,ECET#D T BI . = 30N0TR 7 * ; USAGE. THE ASSEMBER LINKAGE TO SUBROUTINE POPR IS: * ; * ; JSR R5,POPR * ; * ;*********************************************************************** ; R0 = %0 R1 = %1 R2 = %2 R3 = 800,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) ;ZRO;G R11,Z-TSUS+CSTCUA+AT+DUFVBRC VBMO R FEUF BUTNP IOMFR. NOR METOUS CET;G R0 R CL R BEUM NCEOINV INTMERENC;I ERMBNU CBIN O2RNSE CBIN ERMBNUL IAER SONTIACNSRA TNTMERENC;I O1RNSE CBIN NKLA,BPC R JS 5 ,R6.#4 V MO 4 ,RE3OD#C V MO NKLA,BPC R JS 5 ,R6.#4 V MO 4 ,RE2OD#C V MO N IOATRMFOINT UCODPRN AINTCOT HA;T NKLA,BPC R JS ERFFBUNDSEO TSTUEEQ RETES;R SRTCD,SNEQ#R C BI T UPRRTEINT MINSRA TLEABIS;D SRTCE,BLNA#E C BI . = 20N0TR ; N URET;R I RT S EG RRETOES;R R OP,PR5 R JS . = 10N0TR ERSTGIRET MINSRA TINR HA CUT;P F BU,T1)(R VBMO R1),R0T(UNCO D AD R1A,AT#D D AD R HA CXTNEO TERNTOI PET;S 1 ,RR0 V MO ES;Y 20N0TR E BG ? EDTTMINSRA TENBES ARCHL ALE AV;H 0)(R%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 < 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 INTEE ICVOINE THF OTSAR;P 5 ,R6.#4 V MO E ATRIOPPRAPE THT OUK ANBL, STIR;F 4 ,RE1OD#C V MO . = 30V3RC ;* CEI O V N I N A T A M R O F ;* ;* E AG.P ; L AITRT DIAUR OONTIACNSRA TTOAUS ESOCPR ; ; 20V6RC P JM: 20.6RC 70V5RC P JM: 70.5RC 30V5RC P JM: 30.5RC Y TTB HUN OSG MOFS NTTEON CPETYO ;G 75V5RC P JM LTYSTTE,ITWR E YT.B E AGSSMER ROERE YP;T 2 G0MS D OR.W DECON IOCT AUS>OTTIM,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,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,D11),R0T(UNCO P CM NTOU CARCHR NC;I ) R0T(UNCO C IN R FEUF BNTREUR CET;G 0 ,RUFRBCU V MO GSREE AV;S HRUS,PR5 R JS . = NTNITR ; NETIOU RPTRUERNT IERTTMINSRA T11DC ; ; E AG.P N URET;R PC S RT CKTA SOP PR;DD AUF BND APCP WA;S P)(S+,P)(S V MO S EG RRETOES;R R OP,PR5 R JS C ND.E . = 2510D1 ; 0)(RUSATSTY,US#B CBBI 2310D1 L BP RRUPT 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 EOONRR EO,;N T IO ES;Y 20.6RC Q BE ? STUEEQ RRTPORED EOE NUTION C AITS ;I INNTCO,#R4 P CM ES;Y 70.5RC Q BE N?IOCTSAANTRL UAAN M AITS ;I ALNUMA,#R4 P CM R?ROERT DIAUN AITS ;I RRDEAU,#R4 P CM ES;Y 30V3RC Q BE ? ILRA TITUD AITS ;I RLDTAU,#R4 P CM ES;Y 30V3RC Q BE N?IOCTSAANTRO UT AITS ;I TRTOAU,#R4 P CM E OD C ; OUT 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 #ENABLE,RCSR ;DISABLE RECEIVE INTERRUPT CLR R4 BISB RCVBUF+DATA+5,R4 ;GET SWAB R4 ; ACTION BISB RCVBUF+DATA+6,R4