¿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`Kaðñòóôõö÷øùz^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?  TRANþBSMISSION 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"ß 0ß 2ßÈñ*š 4ß 6ß|ÀߘÄß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 INTERRôõö÷øùz^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?  TRANùBSMISSION 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Þ*¾ ÀÀBÆ€V ¬÷ê]*â ÷ê÷@vá÷ $÷lá÷ ÷bá÷  *÷Xá÷ ÷5€bñBú 7 ”÷´ ÷‹ **‹÷ý€÷‚‚÷÷J~÷×­|÷Y´ ´ë*N ÷‹c÷ý€À6  Ð  F û7 N÷œ À ‚*r ¨ Î ÷‹Mþý€ÀÆ Áõ” Ë üƒ¶*–÷¦úÀ07�zô7�Øó7�•ô7Šžþ÷U@°ð7ŠHéÐ*º÷U@@é7 �þ÷5@®ðH÷F1þÚ æ ¯*Þ÷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 ©*J÷T4’ýÚ B 7Šžð ÷ êõü6Ž*n ÷‹Åõý€7 Øõów ê· ÐýÅxè�À�Àý è*’À x˜$F‚œw ÄÄ�Ì*¶–ý ¡Å5@#·Š…ýÄ�4èïÅ5 ì÷U¼*Ú$è÷•lýåÅ5@â÷5è ÷•Vý7ŠSý7 z*þJù7Šþç÷U@öçÑ÷00@õ÷E@èç÷Eâç7Š,ýÈ*"îÄ�Úç¡7 Æé÷•ýºÅ5 ··Š ýôq*FÅ5€±Ä�²ç7¦é¡¡ Àæø Æ*j· Üø0‘L �·Š×üü÷•Îü–Ä�|ç7¡ré÷•†* ;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"ß 0ß 2ßÈì,š 4ß 6ß|ÀߘÄßt@ ÂÆÙ,¾ ÀÀBÆ€V ¬÷ê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 DO޼üwÿ·ŠµüøÄ�bç7¡Zé·Š¥ü÷E@Pçw "*²‚V ¼ ÿÿ÷‹�ü÷•œù÷•ÿ—ù÷Šùæn*Ö^ ÷ ‚÷‹�ùý�÷hRø÷•`üwÿ÷•lù÷•Ä*úÿgù÷Zùæ^ ÷ R÷‹Qùý�wÔþÄ�èæ¡Ô*wŠþ÷E@Öæ7 ø ÄÝøÄÄÝø!10!*B20!60 !40 V ÷‹ýóý€w@wâH*fw w|Ä`Å.÷ ²Ä�Å.÷ ¦ÄÀ0*ŠÅ.÷ šÄðÅ.÷ Ž·ŠÞð·Š›ñ·Štñ Á�B*®Å÷ÁE€ÿÁå1W  Á w€w†w½*ÒŒ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÷ ÷5€bñBú 7 ”÷´ ÷‹,*‹÷ý€÷‚‚÷÷J~÷×­|÷Y´ ´æ,N ÷‹c÷ý€À6  Ð  F û7 N÷œ À },r ¨ Î ÷‹Mþý€ÀÆ Áõ” Ë üƒ±,–÷¦úÀ07�zô7�Øó7�•ô7Šžþ÷U@°ð7ŠHéË,º÷U@@é7 �þ÷5@®ðH÷F1þÚ æ ª,Þ÷F2þýÚ ô ÷F3ìýÚ  ä,÷F4ÚýÚ  ÷T1ÈýÚ  À,&÷T2¶ýÚ * ÷T3¤ýÚ 6 ¤,J÷T4’ýÚ 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 !Kÿÿæ�úí÷•àôíw (Æ "Ô (�*ÿÿ·•Þí÷5@Ríw æ Ž ô •  œ O*> £  Ô * Ø 6 Ü B à ÿÿw ê¾*bŽ †w ÊL`Td Ž „Ô ‹ÿÿÔ*†w • ®w ¢N�^” • ´Ø »�*ªÿÿw šœ Öw zPÀhÄ œ ä…*ÎÜ ëÿÿw r£ þw RRðrô £ )*òà ÿÿæ2÷ ìÁ|ÂúùH” ”÷ Vž*W pùæ÷ $÷•$ú÷• úæ^ ÷ &÷‹5*:%÷ý�÷hòõw¸üæ•1÷ ¢Á°H”7” æ÷ 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˜$F‚œw ÄÄ�Ç,¶–ý ¡Å5@#·Š…ýÄ�4èïÅ5 ì÷U·,Ú$è÷•lýåÅ5@â÷5è ÷•Vý7ŠSý7 u,þJù7Šþç÷U@öçÑ÷00@õ÷E@èç÷Eâç7Š,ýÃ,"îÄ�Úç¡7 Æé÷•ýºÅ5 ··Š ýôl,FÅ5€±Ä�²ç7¦é¡¡ Àæø Á,j· Üø0‘L �·Š×üü÷•Îü–Ä�|ç7¡ré÷•�,޼üwÿ·ŠµüøÄ�bç7¡Zé·Š¥ü÷E@Pçw $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 %äùæ•÷ ÖÛÀ] ¢.6æ•1h*‚÷ lÁØH”7”jæ÷ ØW ðø÷• ®ùä÷E†*¦Xä7Š¢ùð Á”õÁåwJô À] ’¤*Ê Ò• · 2ôÁ ö ÷‹#ôý€wüæ•1d*î÷ ÁºÃ¾ñÃeºH”7”öå÷ dC ùæ•÷ *4÷• 4ù‡÷E@ÞãÄ�Üã¡!7 õx&J¥*6V<¢÷E¾ã7Šùw¶û÷E°ã7Šúø÷Ev*Z¤ã7Šîø~ ÷‹ñý€Ÿ¡wˆû7 ºô÷ŠÄ*~Ðøwªþ÷01Æðw‚ûÀn ”×  F× Z[H*¢ÅÅå C�pÄÃŒ‡ÁÄŒúÑû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ø÷•`üwÿ÷•lù÷•¿,úÿgù÷Zùæ^ ÷ R÷‹Qùý�wÔþÄ�èæ¡Ï,wŠþ÷E@Öæ7 ø ÄÝøÄÄÝø!10!ü,B20!60 !40 V ÷‹ýóý€w@wâC,fw w|Ä`Å.÷ ²Ä�Å.÷ ¦ÄÀ+,ŠÅ.÷ šÄðÅ.÷ Ž·ŠÞð·Š›ñ·Štñ Á�=,®Å÷ÁE€ÿÁå1W  Á w€w†w¸,ÒŒ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Ú÷ ÷5dÚw¨þ÷EXÚ÷€¼*TÚ÷ ÜÄÄ þß5€bïü‡×  Õ�*2¼×  Õ%¶×  ðנ Õü*VªÕ@§w €7è÷ðÕ€0 ÷UŠâå*z÷5„âüÀe7’|â÷U@tâw ⎇w ÎÀÆ*ž²÷° , Áelw’Nâw º÷E@Õ*Â@â÷E:â÷50âü÷xfó÷ bó÷5âùÜ*æ7 TóðÅ€ãÀd Е7 úã÷ jˆ�7”ðã?* ÷ ^Á¼ H”7”âã÷ PW ¿ øæ�Øé÷•àÒéÁ}*.Ô H”7”Äã÷ 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 Kÿÿæ�úí÷•àôíw (Æ "Ô (‹,ÿÿ·•Þí÷5@Ríw æ Ž ô •  œ J,> £  Ô * Ø 6 Ü B à ÿÿw ê¹,bŽ †w ÊL`Td Ž „Ô ‹ÿÿÏ,†w • ®w ¢N�^” • ´Ø »ˆ,ªÿÿw šœ Öw zPÀhÄ œ ä€,ÎÜ ëÿÿw r£ þw RRðrô £ $,òà ÿÿæ2÷ ìÁ|ÂúùH” ”÷ V™,W pùæ÷ $÷•$ú÷• úæ^ ÷ &÷‹0,:%÷ý�÷hòõw, 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 7ö󎇠  ‡w ·*vòÀ6  F È È $÷w äø øs*šw Ì÷03®î w À÷04¢îw ´÷02–î÷E*¾>á7Šˆö7Š8á÷U@0áw ¢‡w �÷bòÀ*â× ¢9ˆŠw †‡È•0¨5öÈ•0¨3g*ð¬ÿÿ2¢9éÈ•0À åð•0ÿÿÈ•0h**àÔ• Å ü‡B— ÿÿCD“”Ä ýö…C@*ND×¢ פ0Õ …ƒ Ä õE…&æ¦fÒr&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÷ ¢Á°H”7” æ÷ J,^W Øø÷•äùæ•÷ ÖÛÀ] ¢.6æ•1c,‚÷ lÁØH”7”jæ÷ ØW ðø÷• ®ùä÷E�,¦Xä7Š¢ùð Á”õÁåwJô À] ’¤,Ê Ò• · 2ôÁ ö ÷‹#ôý€wüæ•1_,î÷ ÁºÃ¾ñÃeºH”7”öå÷ dC ùæ•÷ û,4÷• 4ù‡÷E@ÞãÄ�Üã¡!7 õx&J ,6V<¢÷E¾ã7Šùw¶û÷E°ã7Šúø÷Eq,Z¤ã7Šîø~ ÷‹ñý€Ÿ¡wˆû7 ºô÷Š¿,~Ðøwªþ÷01Æðw‚ûÀn ”× 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,¢ÅÅå C�pÄÃŒ‡ÁÄŒúÑûp‘ÿÿ T,Æb å�Å ÷n ’Ú÷ú†ÚÅ ÷€Ú÷ .Å”,ê ÷pÚ÷ ÷5dÚw¨þ÷EXÚ÷€·,TÚ÷ ÜÄÄ þß5€bïü‡×  Õ˜,2¼×  Õ%¶×  ðנ Õ÷,VªÕ@§w €7è÷ðÕ€0 ÷UŠâà,z÷5„âüÀe7’|â÷U@tâw ⎇w ÎÀÁ,ž²÷° , Áelw’Nâw º÷E@Ð,Â@â÷E:â÷50âü÷xfó÷ bó÷5âù×4 ;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 úã÷ jˆ�7”ðã:, ÷ ^Á¼ H”7”âã÷ PW ¿ øæ�Øé÷•àÒéÁx,.Ô H”7”Äã÷ 2W Ù ø·•ºéއˆ�7”ªã÷ ;,RÐ�¤ãÐ�¢ãЕÿÀåd 7ö󎇠  ‡w ²,vòÀ6  F È È $÷w äø øn,šw Ì÷03®î w À÷04¢îw ´÷02–î÷E,¾>á7Šˆö7Š8á÷U@0áw ¢‡w �÷bòÀ,â× ¢9ˆŠw †‡È•0¨5öÈ•0¨3b,ð¬ÿÿ2¢9éÈ•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…&æ¦fÍr&MÖ €�‚ƒ„…}ó""""""DDDDDDD """""""""""""""""""""""""""""""""""""""""""""""""""""""""ˆˆˆˆˆˆˆADD)B CÕÀ]ýO_ -›ÕÀ]ýh_‚›ÕÀ]½b_7›$DïîîîîîÌÿ?"""""""""""""""""""""""""""""""""""""""""""""""""""""""""ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÅaå Í‹æÄ,L ƒw:ÄB8ŽŒ ýƒàÇ` 5 þÿ€�&ˆ ‚— ýÿ†ƒœÃEÀÿ× >w†× × ò f€ò5ÀeòU@ò €× [æ*ˆ² ¦¦æ× Ž & *ˆÖ G× ‚&(ˆ°Ì 8�L'ˆ°4e÷ ÌQ$ ô �BBâBä" ± üÿü× ÷ ¬ŒÉU@Ò °ðU€ Æe  Å"U%÷‹äþGæÎeÞþæfÇ.Ö … 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 '051K¼þ7 ,úÄ�Zè÷E@Ñ,«Rè ÄÝ+úÄÄÝ&ú!10!20!60!4ø,Ï0!70Æ ÷‹çôý€Àë w®w\w„�,ów Ä]Å.÷ æÄ�Å.÷ ÚĽÅ./,÷ ηŠZò·Šó·Šñò Á�ØùÁE€ÿÁå1W Â,; Á w€w†wŒw œ„p,_«Èó á Lç #ý2,ƒ H ÿÿw | ²w \R]Xa  �ð,§b ˆÿÿw T# Úw 4T�b‘ ƒ,Ë# ±f ¸ÿÿw ,* w V½lÑL*G ö ÀßÜÄßv@ ÂÆÀÀBÆŠ*k € >÷zê÷xê÷%Iú*� ’æñj ÷Xp÷ ÷‹i÷ý€×­f÷Yª*³   ÷‹M÷ý€ÀÌ  Ð  Ô û7œ*× Š%ÿ÷U@†ñ7Šê÷U@ê7 ÿ7Š òþw .·k*û ÿÅþé�À�÷þÀ x œ¾ú 000&z*0w Ä�Óþ ÄŠÅ5@#·ŠÄþÄ�ÂéðÅû*C5 í÷U²é÷•«þæÅ5@ã÷5žé ÷•Å*g•þ7Š’þ7 fû7ŠŒé÷U@„éÒ÷pþ>ö÷Evé7O*‹Šqþ¦ ÷‹öý€ëÄ�bé¡7 Në÷•OM ;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÷ ÁvÂúùHè,” ”÷ TW =ùæ÷ "÷•Ñû÷•Íûæì­,7 ÷ f÷‹¯ùý�÷´„øw&ýæ•1÷ ÂÁBH”7û,[”œè÷ W jøæ•÷ Ú÷•‰ûÛÀë ¢.],+æ•÷ Œæ•÷ ¸÷• gûÊ÷E`æ7Š[p,£ûÁ0øÁåwÂõÂt’¤ Ò• · ®õÁ öÌ,Çn ÷‹Ÿõý€wšüæ•1÷ 6ÁH”7’è÷j,ë €W èøæ•÷ N÷• ýú•æ•1÷ Áép,ÃóÃeH”7”Üç÷ LC ùæ•÷ æ÷E@~,PÒ*¯þ¸Å5 µ·ŠDþôÅ5€¯Ä�:é7‘.ë¡¡*Ó¡ · üúÀøú 0‘Ù ›·Šþü÷•2*÷þ”Ä�é7¡úê÷•õý‹·ŠðýùÄ�ìè7¡äê-î*÷• Ýýwüþ÷E@ÔèÄ�ÒèÀä Áø ” ê ü*?÷‹¼ý÷•¦û÷•ÿ¡û÷”ûæì ÷ B÷‹‹î*cûý�÷´dú÷•�ýwüþ·Š†ýÐ÷•pû÷•ÿk¨*‡û÷^ûæì ÷ ÷‹Uûý�w¼þ7 ,úÄ�Zè÷E@Ö*«Rè ÄÝ+úÄÄÝ&ú!10!20!60!4ý*Ï0!70Æ ÷‹çôý€Àë w®w\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 Ž÷¡%×­·ú ×­­ú ¢÷î,WE¤å7ŠŸúwü÷E–å7Š‘úwü÷Eˆå7ŠƒX,{úð ÷‹mòý€Àë ‹÷Šoúwœþ÷ô $òwú,Ÿâûw ‚€7TúðÕ€0 ÷UFå÷5@“,ÃåüÀe7’8å÷U@0åw \އw HÀú° â,ç, Áelw’ åw 4÷E@üä÷E›, öäðÅ€óÀò Е7 Öæ÷ Hˆ�7”Ìæ÷”,/ <Áø H”7”¾æ÷ .W ÿ øŽ‡ˆ�7”¨æ÷Ö,S Ð�¢æÐ� æÐ•ÿÀåò 7‚÷އ   ‡w”,w ®ÀÌ  Ô T*÷ ηŠZò·Šó·Šñò Á�ØùÁE€ÿÁå1W Ç*; Á w€w†wŒw œ„u*_«Èó á Lç #ý7*ƒ H ÿÿw | ²w \R]Xa  �õ*§b ˆÿÿw T# Úw 4T�b‘ ˆ*Ë# ±f ¸ÿÿw ,* w V½lÖ*ïÁ * áj èÿÿæ2÷ ÁvÂúùHí*” ”÷ TW =ùæ÷ "÷•Ñû÷•Íûæì²*7 ÷ f÷‹¯ùý�÷´„øw&ýæ•1÷ ÂÁBH”7*[”œè÷ 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 ˆ÷EZä7ŠUùw †‡w tÀÌ  Ð  Ôd,¿ û÷E8ä7Š3ù÷&ùðð¦ ÷‹Íðý€÷U@,ãäw L‡Ô• Å ü‡B— ÿÿCD“”Ä ýö,…CD×¢ פ0Õ …ƒ Ä õE…&æu+¦f&MÖ €�‚ƒ„…†óX+æ•÷ Œæ•÷ ¸÷• gûÊ÷E`æ7Š[u*£ûÁ0øÁåwÂõÂt’¤ Ò• · ®õÁ öÑ*Çn ÷‹Ÿõý€wšüæ•1÷ 6ÁH”7’è÷o*ë €W èøæ•÷ N÷• ýú•æ•1÷ Áéu*ÃóÃeH”7”Üç÷ LC ùæ•÷ æ÷E@ƒ*3ÊåÄ�Èå7 Ž÷¡%×­·ú ×­­ú ¢÷ó*WE¤å7ŠŸúwü÷E–å7Š‘úwü÷Eˆå7Šƒ]*{úð ÷‹mòý€Àë ‹÷Šoúwœþ÷ô $òwÿ*Ÿâûw ‚€7TúðÕ€0 ÷UFå÷5@˜*ÃåüÀe7’8å÷U@0åw \އ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 4÷E@üä÷E * öäðÅ€óÀò Е7 Öæ÷ Hˆ�7”Ìæ÷™*/ <Áø H”7”¾æ÷ .W ÿ øŽ‡ˆ�7”¨æ÷Û*S Ð�¢æÐ� æÐ•ÿÀåò 7‚÷އ   ‡w™*w ®ÀÌ  Ô È È $÷w  ø øÑ*›w ˆ÷EZä7ŠUùw †‡w tÀÌ  Ð  Ôi*¿ û÷E8ä7Š3ù÷&ùðð¦ ÷‹Íðý€÷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ï÷ ^Àxÿ7 Àxÿ7˜O ê,$÷ dÁxÿ߈fïß„`ïßdï÷ *÷ 8¦,HÁ ñßdï÷ ÷ &ßdï÷ ÷ Àÿÿ,lÉÄÄ þß5€bïü‡ÀbïÀe ' 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ï÷ ^Àxÿ7 Àxÿ7˜Î*4³÷ dÁxÿ߈fïß„`ïßdï÷ *÷ 8è*X³Á ñßdï÷ ÷ &ßdï÷ ÷ ÀÿÿC*|³ÉÄÄ þß5€bïü‡ÀbïÀ5‡À)* ³(Á&Á `”ÄÃŒ‡ÁÄŒúÑûp‘ÿÿõij ñ�‡^.H´÷®K¢ÿ÷¸K¦K÷–ÿ÷•ÿÿx 7Šr wÆ÷�K„ÿS*p´w È7tÆä³Äã¾Ãó¾w ¦ 7^w ìw `,”´>Ä�\ÿŒŒŒ7‘ZK7Š0 ÷•ÿÿ, ÷à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 „ &DCƒcà ÷Ú w 2w ΄ô*µ·ŠÜ w ð  '  7ŠÈ Ä´ „ ‚ ¦ª*&µ&w ¶„‚À•\w ¶wXw ºw ö�Ä `.Jµøfw |÷•t €w „7Š€ wtwhw ŒÄ¿Ò*rµ  Ä%-¿û‚ÀEøÿÄ Äe䳂 whÄå¿÷À9*–µ6 Áß¾÷ æÀ=w F·Š6 À�/ w :À�( w '*ºµ2À�! w *À w "w *  7� w :*Þµ7�þw 7Šø7�óÀÒ¾Áß¾÷ JÄÔ˜*¶wð7ŠØ  wèw (‚b‚ ‚ ·®wúw †*&¶‚ø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|÷‹„û 7Štwr÷•ÿÿj*n¶wh·Šg ÄEøÿÄ 7´pwh÷‹P [*’¶ÄEøÿÄ Ã t´Pà õôÿÿ´Iw Ø*¶¶Û×-ÉÂ% w ’ ÿÿÀ=w ÀË*Ú¶òÁê7Ä í´À=w øÀÀe0«*þ¶w ìÀ,w äÂ%ÀÀ@w ~k÷‹¾ª*"·ÄØüÂeÀ=÷–w ´@w Xwºüw0*F·’·Š¬w¢À=w – w ü ÿÿÀd*j·w *AÀe0w vÀ,w næH÷BÀF¬*Ž·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üÄ:üÃ8üw Ö÷üðÀ?í*Ö·w 7 îw ò7Šø7Šó7Š     w ý*ú·À%0 ‚À%7‡ÀEøÿÄ Ä Ä `‚ ð 1 ¿æ,¸� W Ö†ø÷‹Ì ÷‹©Äm¼7ŠºÁ yD¸7D¸|¸Š¸”¸è¸jµ’ºø¸¶ô¸N¹ñX¸r¶Â¹º º`¹Þº$¶,¶V¶Š¶í*l¸·H·¬·Ê·P·”µÚ´¾´ƒ·ŠZ7ŠU´÷<@*�¸D ÷2 7.7(÷% Ä„ M*´¸î‡ÀÀŸw Ô÷%‹À•=w ÀŸöò*ظw À• w wúþ÷ ÈwêþwÞþ·ŠÞ÷ ÐÄ*ü¸ù÷ ²÷ Ð÷ÄÀ7ŠÄ÷m¶¶yCII .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® !6‚4´4 $´¤ À.¿!ž‚4´£*´¹ô6´4 $´Ô ô÷%À w à Åí*عôÅ Å @w ´@€ ‡À%€ÿ À%÷ Òw ~*ü¹š· ÊwÜýwÈý�  à ù÷²ÂÜùÄ®* ºÖùD · Ôù¼‚€Á &C@AƒEPA&f¦˜*Dºæw „€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… °‡Å wFù÷•àLEn*²ºw ¢7Š÷U4ù÷‹÷E(ùw T76æ}.Öºùæù÷‹ü‘À�òÀ‹� ‹à p$´÷•àE�*þºw V×­ÔÖ÷‹ÊÓ÷•àèD·Š¿÷UÔø×B*"»·Ìø·Êø÷•ª7¸÷‹¡¾w @÷‹´ø€Å�ß*F»¬øÅ�¨ø¯ŒŒŒŒw‘¢DÅ’ø÷‹t�å wÍ*j»†øÄt!´Ä Ä úw ¼w JÄô¾Ãõ¾w ž,Ž»ž@÷eZø%Ä•t´7‘2ô $´ªô$´ª*´»w „ÀBw .À�Àe`€ w À;w ÷¿*Ø»ðÄ�ú´w úwîû·â·ü÷Æð³f&� ;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æÌæ €Ö ·Â�‚ƒ„…ÆÒ÷æ¢. ¼°€Ä4´6´üü´Ä Ä ÷…÷�0C™÷�.C”£,H¼7Š$C7Š$C÷‹ Cý€…w r÷‹Cý€÷5C÷‹C*n¼ý€÷�gúB÷�bøB…÷‹V  <6´´„ „ !î*’¼ø…ÃÄþÿ÷%&Ãå„ À&Äe›*¶¼ N @ Ä üÀe0w &à óÀ• Ö Á´À]*Ú¼ÿÿ …÷‹‚Bý€7�~B…÷‹rB·*þ¼ý€À�nBÀE€ÿÀ¥÷‹Ð  w Ðÿí÷‹­*"½¾À¥ ç…Ä ã‡•w ¶ÿú×­4B• À•^Û*F½w ¤ÿÀ•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 BCˆn÷ÿÿj *j½  ‚7,´X‚ÁRì´Á-P‚Ð ðÀDW*޽…w@€ 78À ô÷%(!ùƒ… �„ °,²½ú ÷%‚??‘‡Ãÿ¾Ã¿ð*ؽÄþ¾w Nÿ…÷%öw ªþ…÷Ú77ø*ü½Ðw ZÿÀ Àe0w àþÀ,w Øþæ²÷¬* ¾À°w pþ· ÷ÊœÀÆ…ÀÀ÷ºŒÓ£*D¾Äýÿ C”Ã¥ Ã¥$ × A‡Ãå ÃåÃå‡.h¾ Ãå    ¦  ‚eÂ`„ ä�‡ÅýÿÂƾK*�¾ ‡€âƒ ûË× Ãe ÃeÃe /´¾Ã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 TA‹CMSB = 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!XASÀ¿PMCFRBS.¿*ä³ÿÿÿÿÿÿ=´ÿÿÿÿÿÿÿÿÿÿ=ø�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 FO‹‘MSB) ; 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 ;M˜MM 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`Kaðñòóôõö÷øùz^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"ß 0ß 2ßÈ4ß 6ß×,‘ @ Àß@Äßê@ ÂÆÀÀ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¤<ò7ŠÔê÷U@Ìê7 ÿ7ŠÂòþw X·,E ÿÅ´ê�À�÷þ À x\ (d~üX,i ÊÊÊÊw 2Ä�Íþ¡¡¡ ‰,� Å5@&·Š°þÄ�dêéÅ5 æ÷UTê÷•—�,± þßÅ5@Ü÷5@ê¡÷•{þ7Šxþ7 L!,Õ û7Š(ê÷U@ êÈ÷VþP÷÷E@ê÷E ê7ŠQþS,ù  ÷‹÷ý€èÄ�øé¡7 äë÷•/þ«Åa,5 ¨·Š$þôÅ5€¢Ä�Ðé7Äë¡¡ s,A· ÜúÀØú 0‘# Ž·Šðýü÷•çý‡Ä,e�šé7¡�ë÷•Õýwúþ·ŠÎ¥ ;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 ;RECEIVE§T 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 ; ; ¨ýøÄ�€é7¡xë·K,‰оý÷E@néÀ. ÁB ” 4 ü÷‹¤ý÷•Žx,­û÷•ÿ‰û÷|ûæ6 ÷ D÷‹sûý�÷´Lú÷•ý,Ñuýwþþ÷•^û÷•ÿYû÷Lûæ6 ÷ ÷‹CÆ,õûý�w¾þ7 úÄ�þè¡wdþ÷E@ìè ÄÝÝ,úÄÄÝ ú!10!20!60!40 !70 Õ,=< ÷‹÷õý€wâw�w¸wDÄiÅ.ª,a÷ øÄ™Å.÷ ìÄÉÅ.÷ àÄùÅ.‰,…÷ Ô·Šøò·Š¸ó·Š�ó Á�´ùÁE€ÿÁå1W —,© Á w€w†wŒw ¢�ð©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 :T™d� á,9m ½° Äÿÿw 2t pw VÉnç,]Í t í´ ôÿÿw { ˜w êXùß,�xý { ¸ $ÿÿæ2÷ êÁ‚Âì,¥úùH” ”÷ 2W yùæ÷ ÷•…û÷•�L,Éûæ6 ÷ 4÷‹cùý�÷´8øwôüæ•1÷  Á¸ü,íH”7”é÷ ê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Ê,5æ7ŠûÁä÷Áåw¢öÂêÀ5 ’¤ Ò• Œ,Y· ŠöÁ öä ÷‹{öý€wdüæ•1÷ ÁŒ,}H”7’vè÷ ZW ^øæ•÷ (÷• ­ú“æ•1Î,¡÷ äÁ_ÃÜóÃeŒH”7”Bè÷ &C ùæ•÷Ç,Å öæ÷E@0æÄ�.æ7 >÷¡xÔøê0,é÷Eæ7ŠUúwÞû÷Eæ7ŠGú÷Eöå7Š;Û, úf ÷‹Qóý€�¡w°û÷Š!úwšþ÷Ï,1> ów®ûÀ‚”×  E× ZZÅÅå C�y,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 M²UF,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: .ASCII´ŒúÑûp‘ÿÿ yå�÷@êy,yÜ÷ @÷àÜ÷ 6÷‚ØÜ÷2ÌÜ÷ÊÜ÷ *,�÷ÀÜ÷ ÷¶Ü÷ ÷5ªÜÝwûÄ¡,ÁÄ þß5€bïü‡×  Õ½×  Õ%!,å·×  ñנ Õ«Õ@¨w ’, €7:ùðÕ€0 ÷Uâä÷5ÜäüÀeÝ,-7’Ôä÷U@Ìäw lއw XÀù° , ,QÁelw’¦äw D÷E@˜ä÷E’ä÷5…,uˆäü÷5€äüðÅ€ëÀ< Е7 bæ÷ HÔ,™ˆ�7”Xæ÷ <ÁB H”7”Jæ÷ .µ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 O¶TRN,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 ' PR¸W I øŽ‡œ,½ˆ�7”4æ÷ Ð�.æÐ�,æÐ•ÿÀå< 7XöއÎ,á   ‡w ®À   È È $÷w–,  ø øw ˆ÷Eæã7Š+øw †‡w tÀÝ,)  Ð   û÷EÄã7Š ø÷ü÷òð ÷V,M‹Ïðý€÷U@¨ã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: .ASCII½HECKOUT) 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 CODEÀ¿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*Ä Á .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`Kaðñòóôõö÷øùz^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 DEM06ÊO 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"ß 0ß 2ßÈ4ß 6ßÜ*‘ @ Àß@Äßê@ ÂÆÀÀBÆ*µ €P ´÷0ë÷.ë÷%I„*Ù ’œòà ÷Xœø† ÷‹•øý€×­’øY7*ý † † ÷‹yøý€À  Ð   û7¦*! Š%ÿ÷U@<ò7ŠÔê÷U@Ìê7 ÿ7ŠÂòþw 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@&·Š°þÄ�dêéÅ5 æ÷UTê÷•—†*± þßÅ5@Ü÷5@ê¡÷•{þ7Šxþ7 L&*Õ û7Š(ê÷U@ êÈ÷VþP÷÷E@ê÷E ê7ŠQþX*ù  ÷‹÷ý€èÄ�øé¡7 äë÷•/þ«Åf*5 ¨·Š$þôÅ5€¢Ä�Ðé7Äë¡¡ x*A· ÜúÀØú 0‘# Ž·Šðýü÷•çý‡Ä„*e�šé7¡�ë÷•Õýwúþ·ŠÎýøÄ�€é7¡xë·P*‰оý÷E@néÀ. ÁB ” 4 ü÷‹¤ý÷•Ž}*­û÷•ÿ‰û÷|ûæ6 ÷ D÷‹sûý�÷´Lú÷•*Ñuýwþþ÷•^û÷•ÿYû÷Lûæ6 ÷ ÷‹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. CÓORD 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Ô*õûý�w¾þ7 úÄ�þè¡wdþ÷E@ìè ÄÝâ*úÄÄÝ ú!10!20!60!40 !70 Ú*=< ÷‹÷õý€wâw�w¸wDÄiÅ.¯*a÷ øÄ™Å.÷ ìÄÉÅ.÷ àÄùÅ.Ž*…÷ Ô·Šøò·Š¸ó·Š�ó Á�´ùÁE€ÿÁå1W œ*© Á w€w†wŒw ¢�õ*Í·Ô= íW L)1 /G[*ñ T ÿÿw ‚f  w bRiZm f �H*¬ ”ÿÿw Zm Hw :T™d� æ*9m ½° Äÿÿw 2t pw VÉnì*Õ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 FOÖHARS 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,TRN×ODE - 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 ÷ 4÷‹cùý�÷´8øwôüæ•1÷  Á¸*íH”7”é÷ êW àøæ•÷ ¸÷•=ûÛÀ5* ¢.-æ•÷ jæ•÷ –÷• ûÊ÷EÊ*5æ7ŠûÁä÷Áåw¢öÂêÀ5 ’¤ Ò• ‘*Y· ŠöÁ öä ÷‹{öý€wdüæ•1÷ ÁŒ*}H”7’vè÷ ZW ^øæ•÷ (÷• ­ú“æ•1Ó*¡÷ äÁ_ÃÜóÃeŒH”7”Bè÷ &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 >÷¡xÔøê0*é÷Eæ7ŠUúwÞû÷Eæ7ŠGú÷Eöå7Š;à* úf ÷‹Qóý€�¡w°û÷Š!úwšþ÷Ô*1> ów®ûÀ‚”×  E× ZZÅÅå C�y$*UÄÃŒ‡ÁÄŒúÑûp‘ÿÿ yå�÷@ê~*yÜ÷ @÷àÜ÷ 6÷‚ØÜ÷2ÌÜ÷ÊÜ÷ /*�÷ÀÜ÷ ÷¶Ü÷ ÷5ªÜÝwûĦ*ÁÄ þß5€bïü‡×  Õ½×  Õ%&*å·×  ñנ Õ«Õ@¨w ’ * €7:ùðÕ€0 ÷Uâä÷5ÜäüÀeâ*-7’Ôä÷U@ÌÝ .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 lއw XÀù° , *QÁelw’¦äw D÷E@˜ä÷E’ä÷5Š*uˆäü÷5€äüðÅ€ëÀ< Е7 bæ÷ HÙ*™ˆ�7”Xæ÷ <ÁB H”7”Jæ÷ .W I øŽ‡¡*½ˆ�7”4æ÷ Ð�.æÐ�,æÐ•ÿÀå< 7XöއÓ*á   ‡w ®À   È È $÷w›*  ø øw ˆ÷Eæã7Š+øw †‡w tÀâ*)  Ð   û÷EÄã7Š ø÷ü÷òð ÷[*M‹Ïðý€÷U@¨ã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 .IFZíIS #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 RECEIVñO 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 ;DISABLòORD 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 RESEôER 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 DEM0ø174772 ;BCC OUTPUT REGISTER BCCMSB = 174774 ;MSB OF RESULTING BCC BCCLSB = 174776 ;LSB OF RESULTING BCC .ENDC SWITCH = 177570 ;CONSOLE SWITCH ADDRESS ; ; SYMBOLS REQUIRED FOR IOX CALLS ; KBDSLT = 0 ;TTY KEYBOARD SLOT TTYSLT = 1 ;TTY TELEPRINTER SLOT LSRSLT = 2 ;LOW-SPEED PT READER SLOT LSPSLT = 3 ;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 Fû35 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 RCV02þOR 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 RECEIVEÿD 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 ;AFT€ORE ; $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 CONTENTS„URNAROUND - 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 D‰8 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 TTOBUFŒATA = 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 ;SEŽBOUT 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,H”BLE 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 R¡R ;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 RCV578¤ECEIVE 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`Kaðñòóôõö÷øùz^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 ä H·30 = . 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"ß 0ß 2ßÈ4ß 6÷@—*’ Ðâ÷ >÷Æâ÷ 4ßR ÀßXÄß@ È*¶ ÂÆÀÀBÆ€N ´¨*Ú ÷ë÷ë÷%I’Šòà ÷XŠø4*þ † ÷‹ƒøý€×­€øY† † ÷‹gøK*" ý€À  Ð   û7Šÿ÷U@*ò7ŠÂê÷U@ºêÍ*F 7 ÿ7аòþw d· òþÅ¢ê�À�âþ B*j À xn :v�ÜÜÜÜw >Ä�¸þ» 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 æ÷UBê÷•‚þßÅ5@Ü÷5.ê¡�*Ö ÷•fþ7Šcþ7 :û7Šê÷U@êÈ÷00>÷¯*ú ÷E@ê÷Eúé7Š<þ ÷‹ ÷ý€èÄ�æé¡K*7 Òë÷•þ«Å5 ¨·ŠþôÅ5€¢Ä�Æ*B¾é7²ë¡¡ · ÊúÀÆú 0‘# ë*fŽ·ŠÛýü÷•Òý‡Ä�ˆé7¡~ë÷•Àýwúþþ*зйýøÄ�né7¡fë·Š©ý÷E@\éÀ. Á? ”í*® 4 ü÷‹�ý÷•|û÷•ÿwû÷jûæ6 ÷ Æ*ÒJ÷‹aûý�÷´:ú÷•`ýwþþ÷•Lû÷•ÿGû@¿ 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 ÷ ÷‹1ûý�w¾þÄ�ðè¡we*hþ÷E@Þè7 ôù ÄÝýùÄÄÝøù!10!20q*>!60!40 !70 < ÷‹åõý€wâw…*b�w¸wDÄiÅ.÷ Ä™Å.÷ øÄ>*†ÉÅ.÷ ìÄùÅ.÷ à·Šæò·Š¦ó·Š}ó *ªÁ�¢ùÁE€ÿÁå1W  Á w€w†*ÎwŒw ®�·Ô= íW  *òL)1 /G T ÿÿw Žf 2w Õ*nRiZm f �¬ ”ÿÿw fm í*:Zw FT™d� 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 TRANSACTIOÅOUT 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 VÉnÍ t í´ ôÿÿ*‚w { ªw öXùxý { ¸ $|*¦ÿÿæ2÷ ðÁ‚ÂúùH” ”÷ 8W yùæ<*Ê÷ ÷•pû÷•lûæ6 ÷ :÷‹Qùý�÷´u*î&øwôüæ•1÷ ¦Á¸H”7”ôè÷ ðW àøæ•"*÷ ¾÷•(ûÛÀ5 ¢.-æ•÷ pæ•Ç*6÷ œ÷• ûÊ÷E¸æ7ŠúúÁÒ÷Áåw�ö¼*ZêÀ5 ’¤ Ò• · xöÁ öä ÷‹iö¶*~ý€wdüæ•1÷ ÁŒH”7’dè÷ `W ^øæ•!*¢÷ .÷• ˜ú“æ•1÷ êÁ_ÃÊóÃeŒH”*Æ7”0èÇ 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 INTERRUPÈN? 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æ üB÷Eþå7Š@úwÞû÷Ež*ðå7Š2ú÷Eäå7Š&úf ÷‹?óý€�¡æ*2w°û7 Úö÷Šúw–þ÷01ìòwªûÀG ”¢*V×  F× Z[ÅÅå C�yÄÃŒ‡ÁÄŒ�*zúÑûp‘ÿÿ > å�Å ÷G ÒÜ÷ûÆÜÅ  *ž÷ÀÜ÷ .Å ÷°Ü÷ ÷5¤Üwv*Â$û÷E˜Ü÷€”Ü÷ ÜÄÄ þß5€bïü°*æ‡×  Õ¼×  Õ%¶×  É* °×  ÕªÕ@§w ˜€7 ùðÕ€½*.0 ÷UËT .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 ÑÊä÷5ÄäüÀe7’¼ä÷U@´äw K*Rrއw ^Àêø° , Áelw’z*vŽäw J÷E@€ä÷Ezä÷5päü÷5häü•*šðÅ€ëÀ< Е7 Jæ÷ Hˆ�7”@æ÷ <u*¾Á? H”7”2æ÷ .W G øŽ‡ˆ�7”æ÷ ù*âÐ�æÐ�æÐ•ÿÀå< 7@öއ   ‡w ´*À   È È $÷w ¦ø øw Ý**Ž÷EÎã7Šø÷03üð w €‡w nÀ}*N  Ð   û÷E ã7Šâ÷÷02Îð ÷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,2Õ1(R0),#'2 ;IS HR TENS DIGIT EQ 2? BEQ SET050 ;YES CMPB (R0),#'9 ;NO, IS HR UNITS DIGIT EQ 9? BLT SET005 ;NO, INCR HR UNITS DIGIT MOVB #'0,(R0) ;YES, ZERO HR UNITS DIGIT DEC R0 ;GO INCR HR TENS DIGIT BR SET005 SET050 = . MOVB #'0,-1(R0) ;SET HR TENS DIGIT TO 0 MOVB #'0,(R0) ;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.2þ×ESTORE 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 ;GØ0. ;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 HARåADDR2. 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 TRANñ0 = . 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,ISRWHEOTþó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 -- ; ; JSR PC,EOTTO ; EOTTO = . JSR R5,PUSHR ;SAVE REGS BIôSMIT 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 REGISüROM 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;RîýEROES 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 VBçýMETI,#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 JSÛý10ADHE 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 ERFFBUÏýNDSEO 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