; UPDATE DEMO.P14 5.14.72 ; UPDATE DEMO.P13 5.12.72 ; UPDATE DEMO.P12 5.7.72 ; UPDATE DEMO.P11 5.1.72 ; UPDATE DEMO.P10 4.27.72 ; UPDATE DEMO.P09 04.26.72 ; UPDATE DEMO.P08 04.20.72 ; UPDATE DEMO.P07 04.19.72 ; UPDATE DEMO.P06 04.17.72 ; UPDATE DEMO.P05 04.13.72 ELITE HUB DEMO ; UPDATE DEMO.P04 04.13.72 ELITE HUB DEMO ; UPDATE & ±Œ:¯”(¯”t÷比“ è €h,€’¦ºÏäù"7ACME OIL COMPANY ­,¤ AJAX OF CALIFORNIA ALPHA OIL CORP,ÈORATION63321 SO. SEVENTH 12255 FO‹¿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 LOW LEAD DIESEL *| 0000 *  COLL w*Ä ; UPDATE DEMO.P15 5.17.72 ; UPDATE DEMO.P14 5.14.72 ; UPDATE DEMO.P13 5.12.72 ; UPDATE DEMO.P12 5.7.72 ; UPDATE DEMO.P11 5.1.72 ; UPDATE DEMO.P10 4.27.72 ; UPDATE DEMO.P09 04.26.72 ; UPDATE DEMO.P08 04.20.72 ; UPDATE DEMO.P07 04.19.72 ; UPDATE DEMO.P06 04.17.72 ; UPDATE DEMO.P05 04.13.72 ELITE HUB DEMO ; UPDATE DEMO.P04 04 DEMO.P03 04.13.72 ELITE HUB DEMO ; UPDATE DEMP.P02 04.12.72 ELITE ; ; LODT DEMO ; DEBUG = 0 ;0 = NORMAL PROGRAM OPERATION WITH DC11 ;1 = DEBUG CHECKOUT WITH SIMULATED DC11 DOS = 0 ;0 = RUN ON STAND ALONE SYSTEM ;1 = RUN ON DOS SYSTEM .IFNZ DOS .IFNZ DEBUG .CSECT .ENDC .IFZ DEBUG .ASECT ,ìURTH STREET P.O. BOX 1234 SAç,N DIEGO, CALIF. LOS ANGELES, CALIF÷,4 SANTA FE SPRINGS, CAL01020304REGUù,XLAR PREMIUM LOW LEAD DIESEL ,| 0000 ,  COLL r,Ä X+,èXXX CONSOLIDATED CARRIERS X2, XX 00000 MMDDYYHHMM GEä,0& X0*èXXX CONSOLIDATED CARRIERS X7* XX 00000 MMDDYYHHMM GEé*0&ES TERMINAL 0000 ~*T 00000049 XX l*x XXXXXX XXX XX ›*œ XXXXXX XXö*ÀX XX *ä XXXXXX XXX XX /* XXXXXX XXX @*, .13.72 ELITE HUB DEMO ; UPDATE DEMO.P03 04.13.72 ELITE HUB DEMO ; UPDATE DEMP.P02 04.12.72 ELITE ; ; LODT DEMO ; DEBUG = 0 ;0 = NORMAL PROGRAM OPERATION WITH DC11 ;1 = DEBUG CHECKOUT WITH SIMULATED DC11 DOS = 0 ;0 = RUN ON STAND ALONE SYSTEM ;1 = RUN ON DOS SYSTEM .IFNZ DOS .IFNZ DEBUG .CSECT .ENDC .ENDC .ENDC .IFZ DOS .ASECT .ENDC ; REGISTER DEFINITIONS ; ; R0 = 0% R1 = 1% R2 = 2% R3 = 3% R4 = 4% R5 = 5% SP = 6% PC = 7% PS = 177776 LKS = 177546 ;LINE FREQ. CLOCK STATUS REG. BR4 = 200 ;HARDWARE PRIORITY LEVELS OF DEVICES BR5 = 240 BR6 = 300 .IFZ DEBUG RCES TERMINAL 0000 y,T 00000049 XX g,x XXXXXX XXX XX –,œ XXXXXX XXñ,ÀX XX ,ä XXXXXX XXX XX *, XXXXXX XXX ;,, P.O. BOX B,P608 SAN DIEGO, CALIF ESG @G,tZ{[lP}M]\Nk`Kað P.O. BOX G*P608 SAN DIEGO, CALIF ESG @L*tZ{[lP}M]\Nk`Kaðñòóôõö÷øùz^L~no|ÁÂÃÄ*˜ÅÆÇÈÉÑÒÓÔÕÖרÙâãäåæçèé AUDIT TRR*¼AIL JUST ENTERED IS ERRONEOUS! MANU«*àAL ENTRY ACCEPTED!6 IS END OF ƒ*DAY REPORT TO BE ENTERED ON PUNCHED ]*(TAPE?  TRANSMISSION ERROR L!†*N$ ERRONEOUS ACTION CODE RECEIVŽ*rED!  ERROR IN AUDIT TRAIL! À&–  .IFZ DEBUG .ASECT .ENDC .ENDC .IFZ DOS .ASECT .ENDC ; REGISTER DEFINITIONS ; ; R0 = 0% R1 = 1% R2 = 2% R3 = 3% R4 = 4% R5 = 5% SP = 6% PC = 7% PS = 177776 LKS = 177546 ;LINE FREQ. CLOCK STATUS REG. BR4 = 200 ;HARDWARE PRIORITY LEVELS OF DEVICES BR5 = 240 BR6 SR = 174000 ;DC11 RECEIVER STATUS REGISTER TCSR = 174004 ;DC11 TRANSMITTER STATUS REGISTER RBUF = 174002 ;DC11 RECEIVER BUFFER TBUF = 174006 ;DC11 TRANSMISSION BUFFER .ENDC RVECTR = 300 ;DC11 RECEIVER INTERRUPT VECTOR TVECTR = 304 ;DC11 TRASMISSION INTERRUPT VECTOR CVECTR = 100 ;LINE FREQUENCY CLOCK INTERRUPT VECTOR .IFZ DEBUG CLRBCC = 17ñòóôõö÷øùz^L~no|ÁÂÃÄ,˜ÅÆÇÈÉÑÒÓÔÕÖרÙâãäåæçèé AUDIT TRM,¼AIL JUST ENTERED IS ERRONEOUS! MANU¦,àAL ENTRY ACCEPTED!6 IS END OF ~,DAY REPORT TO BE ENTERED ON PUNCHED X,(TAPE?  TRANSMISSION ERROR  L!� N–,N$ ERRONEOUS ACTION CODE RECEIV‰,rED!  ERROR IN AUDIT TRAIL! »(–  DA:  TI:  DA:  TI:  Ýl Þ2 � X#œ DDMMYY HHMM §*º ÷•€:òß„ßàß®ßà Š*Þ ßA"ß 0ß 2ßÈ4ß 6÷@&*`á÷ d÷Vá÷ ZßøÀßîÄ߸@ ÷*&ÂÆÀÀBÆ€¾ ®Ë*J÷®é÷¬é÷%I’ñ<ò ÷MD÷÷Å}*n@÷° ÷‹7÷ý€÷Õ.÷×­.÷Y° r*’° ÷‹÷ý€Àl  Ð  x û÷Åþö = 300 .IFZ DEBUG RCSR = 174000 ;DC11 RECEIVER STATUS REGISTER TCSR = 174004 ;DC11 TRANSMITTER STATUS REGISTER RBUF = 174002 ;DC11 RECEIVER BUFFER TBUF = 174006 ;DC11 TRANSMISSION BUFFER .ENDC RVECTR = 300 ;DC11 RECEIVER INTERRUPT VECTOR TVECTR = 304 ;DC11 TRASMISSION INTERRUPT VECTOR CVECTR = 100 ;LINE FREQUENCY CLOCK INTERRUPT VECTOR 4770 ;CLEAR BCC BCCOUT = 174772 ;BCC OUTPUT REGISTER BCCMSB = 174774 ;MSB OF RESULTING BCC BCCLSB = 174776 ;LSB OF RESULTING BCC .ENDC SWITCH = 177570 ;CONSOLE SWITCH ADDRESS ; ; SYMBOLS REQUIRED FOR IOX CALLS ; KBDSLT = 0 ;TTY KEYBOARD SLOT TTYSLT = 1 ;TTY TELEPRINTER SLOT LSRSLT = 2 ;LOW-SPEED PT READER SLOT LSPSLT = 3  ÓØ l sl Þ2 � O � N� S ™ C œ @%œ DDMMYY HHMM ¢ º ",º ÷•€:òß„ßàß®ßà …,Þ ßA"ß 0ß 2ßÈ4ß 6÷@!,`á÷ d÷Vá÷ ZßøÀßîÄ߸@ ò,&ÂÆÀÀBÆ€¾ ®Æ,J÷®é÷¬é÷µ*¶˜ œ ¤ ª ÷‹Ýþý€÷œû7ŠÛ*ÚÚþ÷U@„ð7Šé÷U@é7 Ìþ7Š ñþw Ê· í*þ¼þÅüè�À�¬þ  À x¾à6°x*"rrrrw ¤Ä�‚þ¡¡¡ *FÅ5@&·ŠeþÄ�¬èéÅ5 æ÷Uœè÷•Lþ×*jßÅ5@Ü÷5ˆè¡÷•0þ7Š-þ7 îú*Ž7Špè÷U@hèÈ÷00ªõ÷E@Zè÷ETè7Šþo*². ÷‹wõý€èÄ�@è¡7 ,ê÷•äý«Å5Ê*Ö ¨·ŠÙýôÅ5€¢Ä�è7 ê¡¡ ®*ú· ~úÀzú 0‘} Ž·Š¥ýü÷•œý‡Ä�' .IFZ DEBUG CLRBCC = 174770 ;CLEAR BCC BCCOUT = 174772 ;BCC OUTPUT REGISTER BCCMSB = 174774 ;MSB OF RESULTING BCC BCCLSB = 174776 ;LSB OF RESULTING BCC .ENDC SWITCH = 177570 ;CONSOLE SWITCH ADDRESS ; ; SYMBOLS REQUIRED FOR IOX CALLS ; KBDSLT = 0 ;TTY KEYBOARD SLOT TTYSLT = 1 ;TTY TELEPRINTER SLOT LSRSLT = 2 ;LOW-SPEED PT  ;LOW-SPEED PUNCH SLOT RESET = 2 ;RESET COMMAND RESTRT = 3 ;RESTART COMMAND INIT = 1 ;INIT COMMAND READ = 11 ;READ COMMAND WRITE = 12 ;WRITE COMMAND EOF = 040 ;EOF BIT IN STATUS BYTE CR = 15 ;ASCII FOR CR LF = 12 ;ASCII FOR LF ; ; DC11 RECEIVE CONTROL STATUS REGISTER (RCSR) BITS ; ERROR = 1000%I’ñ<ò ÷MD÷÷Åx,n@÷° ÷‹7÷ý€÷Õ.÷×­.÷Y° m,’° ÷‹÷ý€Àl  Ð  x û÷Åþö°,¶˜ œ ¤ ª ÷‹Ýþý€÷œû7ŠÖ,ÚÚþ÷U@„ð7Šé÷U@é7 Ìþ7Š ñþw Ê· è,þ¼þÅüè�À�¬þ  À x¾à6°s,"rrrrw ¤Ä�‚þ¡¡¡ ,FÅ5@&·ŠeþÄ�¬èéÅ5 æ÷Uœè÷•LþÒ,jßÅ5@Ü÷5ˆè¡÷•0þ7Š-þ7 îú,Ž7Špè÷U@hèÈ÷00ªõ÷E@Zè÷ETè*âç7¡Øé÷•Šýwúþ·ŠƒýøÄ�Èç7¡Àé·Š&*Bsý÷E@¶çw Dˆ ™ ÿÿ÷‹]ý÷•4û÷•ÿµ*f/û÷"ûæ� ÷ >÷‹ûý�÷´îù÷•.ýwC*Šÿ÷•û÷•ÿÿú÷òúæ� ÷ ÷‹éúý�w*®ÂþÄ�Nç¡wlþ÷E@<ç7 ¨ù ÄݵùÄÄÝÜ*Ò°ù!10!20!60 !40 N ÷‹[ô^*öý€ww¤wÌw8ÄcÅ.÷ tēŽ*.÷ hÄÃÅ.÷ \ÄóÅ.÷ P·ŠDñ·Š$*>ò·ŠÛñ Á�`ùÁE€ÿÁå1W  Á w€ò*bw†wŒw Š±Î *READER SLOT LSPSLT = 3 ;LOW-SPEED PUNCH SLOT RESET = 2 ;RESET COMMAND RESTRT = 3 ;RESTART COMMAND INIT = 1 ;INIT COMMAND READ = 11 ;READ COMMAND WRITE = 12 ;WRITE COMMAND EOF = 040 ;EOF BIT IN STATUS BYTE CR = 15 ;ASCII FOR CR LF = 12 ;ASCII FOR LF ; ; DC11 RECEIVE CONTROL STATUS REGI00 CARTRN = 040000 RING = 020000 OVERUN = 010000 LENGTH = 000000 ;8 BITS/CHAR DONE = 000200 ENABLE = 000100 PARITY = 000040 RSPEED = 000020 ;DC11-AB 1200 BAUD DETECT = 000004 DTRDY = 000001 ; ; DC11 TRANSMIT CONTROL STATUS REGISTER (TCSR) BITS ; STOPCD = 000400 READY = 000200 TSPEED = 000020 ;DC11-AB 1200 BAUD CLRSND = 000002 REQSND = 00007Šþj,². ÷‹wõý€èÄ�@è¡7 ,ê÷•äý«Å5Å,Ö ¨·ŠÙýôÅ5€¢Ä�è7 ê¡¡ ©,ú· ~úÀzú 0‘} Ž·Š¥ýü÷•œý‡Ä�",âç7¡Øé÷•Šýwúþ·ŠƒýøÄ�Èç7¡Àé·Š!,Bsý÷E@¶çw Dˆ ™ ÿÿ÷‹]ý÷•4û÷•ÿ°,f/û÷"ûæ� ÷ >÷‹ûý�÷´îù÷•.ýw>,Šÿ÷•û÷•ÿÿú÷òúæ� ÷ ÷‹éúý�w,®ÂþÄ�Nç¡wlþ÷E@<ç7 ¨ù ÄݵùÄÄÝ×,Ò°ù!10!20!60 !40 N ÷‹[ôY†— ç± ¡ N ÿÿæ�`î÷•àZîw ê¢ >*ª#° )ÿÿ·•Dîw êÀ âw ÊLcP*ÎTg À ‡ Žÿÿw ÂÇ  w ¢N€*ò“^— Ç · ¾ÿÿw šÎ 2w *zPÃhÇ Î ç îÿÿw rÕ )*:Zw RRór÷ Õ  ÿÿæ2*^÷ ÖÁ|ÂúùH” ”÷ >W sùæ÷ ÷•2*‚0û÷•,ûæ� ÷ ÷‹ûøý�÷´Ì÷wêüæ•N*¦1÷ ŒÁ²H”7”Dç÷ öW Úø÷•ðú數*Ê÷ ¾ÛÀ� ¢.3æ•1÷ VÁÚH”7”ç÷ ~*îÀW STER (RCSR) BITS ; ERROR = 100000 CARTRN = 040000 RING = 020000 OVERUN = 010000 LENGTH = 000000 ;8 BITS/CHAR DONE = 000200 ENABLE = 000100 PARITY = 000040 RSPEED = 000020 ;DC11-AB 1200 BAUD DETECT = 000004 DTRDY = 000001 ; ; DC11 TRANSMIT CONTROL STATUS REGISTER (TCSR) BITS ; STOPCD = 000400 READY = 000200 TSPEED = 000020 ;DC11-AB 1200 BAUD CL!01 ; ; HUB DC11 & TTY MESSAGE BUFFER OFFSETS ; MODEBF = 2 STATUS = 3 COUNT = 4 DATA = 6 HDRSIZ = 17. ;NO. OF BYTES IN HDR OF MSG FROM TERM'L MSGDAT = 23. ;BEGINNING OF MESSAGE DATA (LESS HEADER) ; ; DC11 MSG BUFFER FLAGS ; BUSY = 200 ;BIT 7 OF STATUS BYTE; SET WHEN BUSY ; ; MAG TAPE REGISTER ADDRESSES ; WC = 167540 ;WORD COUNT STAT = ",öý€ww¤wÌw8ÄcÅ.÷ tēŸ,.÷ hÄÃÅ.÷ \ÄóÅ.÷ P·ŠDñ·Š,>ò·ŠÛñ Á�`ùÁE€ÿÁå1W  Á w€í,bw†wŒw бÎ,†— ç± ¡ N ÿÿæ�`î÷•àZîw ê¢ 9,ª#° )ÿÿ·•Dîw êÀ âw ÊLcK,ÎTg À ‡ Žÿÿw ÂÇ  w ¢N{,ò“^— Ç · ¾ÿÿw šÎ 2w ,zPÃhÇ Î ç îÿÿw rÕ $,:Zw R#òø÷• ºúä÷Eüä7Š®úÁp÷Áåwo*þôÂÀ� ’¤ Ò• · æôÁ ö ÷*6÷‹×ôý€wNüæ•1÷ ðÁ¶ÃdòÃe¶H”7” æ�*Z÷ RC ùæ•÷ "÷• FúŠ÷E@ˆäÄ�†ä¡F*~!7 æöx| ¬’þ÷Ehä7Šúwîû÷EÖ*¢Zä7Š ú÷ENä7Šúx ÷‹»ñý€¢¡@*ÆwÀû7 šö÷Šâùw°þ÷01hñwºûÀ¡ æ*ê”×  F× Z[ÅÅå C�sÄÃŒ‡ÁÄŒm*úÑûp‘ÿÿ ˜ å�Å ÷¡ <Û÷û0ÛÅ *2÷*Û÷ .Å ÷Û÷ ÷5Û*Vw®þ÷EÛ$RSND = 000002 REQSND = 000001 ; ; HUB DC11 & TTY MESSAGE BUFFER OFFSETS ; MODEBF = 2 STATUS = 3 COUNT = 4 DATA = 6 HDRSIZ = 17. ;NO. OF BYTES IN HDR OF MSG FROM TERM'L MSGDAT = 23. ;BEGINNING OF MESSAGE DATA (LESS HEADER) ; ; DC11 MSG BUFFER FLAGS ; BUSY = 200 ;BIT 7 OF STATUS BYTE; SET WHEN BUSY ; ; MAG TAPE REGISTER ADDRESSES ; WC = 1675%167542 ;STATUS COM = 167544 ;COMMAND MA = 167546 ;MEMORY ADDRESS ; ; MAG TAPE STATUS REGISTER BITS ; ERR = 004000 ;ERROR RDY = 000200 ;READY FPT = 000001 ;FILE PROTECT (1 = NO WRITE RING) ; ; MAG TAPE COMMAND REGISTER COMMANDS ; CLR = 040000 ;CLEAR CONTROLLER RWD = 000400 ;REWIND WFM = 000004 ;WRITE FILE MARK &Rór÷ Õ  ÿÿæ2,^÷ ÖÁ|ÂúùH” ”÷ >W sùæ÷ ÷•-,‚0û÷•,ûæ� ÷ ÷‹ûøý�÷´Ì÷wêüæ•I,¦1÷ ŒÁ²H”7”Dç÷ öW Úø÷•ðú敳,Ê÷ ¾ÛÀ� ¢.3æ•1÷ VÁÚH”7”ç÷ y,îÀW òø÷• ºúä÷Eüä7Š®úÁp÷Áåwj,þôÂÀ� ’¤ Ò• · æôÁ ö ò,6÷‹×ôý€wNüæ•1÷ ðÁ¶ÃdòÃe¶H”7” æˆ,Z÷ RC ùæ•÷ "÷• FúŠ÷E@ˆäÄ�†ä¡A,~!7 æöx| ¬’þ'÷€þÚ÷ ÜÄÄ þß5€bïD*zü‡×  Õ¼×  Õ%¶×  Ã*ž°×  ÕªÕ@§w €7úøðÕD*€0 ÷U4ã÷5.ãüÀe7’&ã÷U@ã*æw 莇w ÔÀÄø° , Áel¨* w’øâw À÷E@êâ÷Eäâ÷5Úâü÷5Òâw*.üðÅ€ëÀ– Е7 ´ä÷ hˆ�7”ªä÷ Ñ*R\Á™ H”7”œä÷ NW œ øæ‘÷•àŽêÁ° H”:*v7”€ä÷ 2w 3øø·•vꎇˆ�7”fä÷ Ð�“*š`äÐ�^äЕÿÀå– 7äõއ   ‡w Àx*¾l  x È È (40 ;WORD COUNT STAT = 167542 ;STATUS COM = 167544 ;COMMAND MA = 167546 ;MEMORY ADDRESS ; ; MAG TAPE STATUS REGISTER BITS ; ERR = 004000 ;ERROR RDY = 000200 ;READY FPT = 000001 ;FILE PROTECT (1 = NO WRITE RING) ; ; MAG TAPE COMMAND REGISTER COMMANDS ; CLR = 040000 ;CLEAR CONTROLLER RWD = 000400 ;REWIND WFM )WRT = 000002 ;WRITE A RECORD BCKR = 000200 ;BACKSPACE A RECORD WEXG = 000010 ;WRITE EXTENDED GAP WITH RECORD ; ; TIMER VALUES ; ACKTIM = 180. ;TIMEOUT FOR ACK IN 1/60 SECOND TICS EOTTIM = 180. ;TIMEOUT FOR EOT IN 1/60 SECOND TICS MINUTE = 3600. ;TIMEOUT EACH MINUTE IN 1/60 SEC TICS ; ; HUB ERROR MESSAGE CODES ; ERR00 = "00 ;LOST RECEIVE CARRIER *÷Ehä7Šúwîû÷EÑ,¢Zä7Š ú÷ENä7Šúx ÷‹»ñý€¢¡;,ÆwÀû7 šö÷Šâùw°þ÷01hñwºûÀ¡ á,ê”×  F× Z[ÅÅå C�sÄÃŒ‡ÁÄŒh,úÑûp‘ÿÿ ˜ å�Å ÷¡ <Û÷û0ÛÅ ,2÷*Û÷ .Å ÷Û÷ ÷5Û ,Vw®þ÷EÛ÷€þÚ÷ ÜÄÄ þß5€bï?,zü‡×  Õ¼×  Õ%¶×  Ã,ž°×  ÕªÕ@§w €7úøðÕ?,€0 ÷U4ã÷5.ãüÀe7’&ã÷U@$÷w üø øw ä *â÷Eâ7ŠÊ÷÷03Xï. 7Šâ÷U@þáw ÌÍ*‡w º÷Eîá7Š ÷÷02.ï. 7ŠÜá÷U@½**Ôáw ¢‡w �÷8ôÀ³ 7¢õ鈊w †‡ß*NÈ�Þé7¨ßéöÈ�Òé7¨Òéð7¬ÿÿÆé7¢ÇéÐ*réÈ�¸éÀ åð�°éÿÿÈ�«éàÔ• Å ü‡B— ¼*–ÿÿCD“”Ä ýö…CD×¢ פ0Õ *º…ƒ Ä õE…&æ¦f&MÖ €�‚ƒ„›Þ…~ø,= 000004 ;WRITE FILE MARK WRT = 000002 ;WRITE A RECORD BCKR = 000200 ;BACKSPACE A RECORD WEXG = 000010 ;WRITE EXTENDED GAP WITH RECORD ; ; TIMER VALUES ; ACKTIM = 180. ;TIMEOUT FOR ACK IN 1/60 SECOND TICS EOTTIM = 180. ;TIMEOUT FOR EOT IN 1/60 SECOND TICS MINUTE = 3600. ;TIMEOUT EACH MINUTE IN 1/60 SEC TICS ; ; HUB ERROR MESSAGE CODES ; ERR00 = -ERR01 = "01 ;NO ACK RECEIVED AFTER 8 TRYS ERR02 = "02 ;TIMEOUT WHILE WAITING FOR ACK/NAK ERR03 = "03 ;TIMEOUT WHILE WAITING FOR EOT ; ; MESSAGE ACTION CODES ; AUTOTR = 030061 ;ASCII 01 AUDTRL = 030062 ;ASCII 02 AUDERR = 030066 ;ASCII 06 MANUAL = 030064 ;ASCII 04 CONTIN = 030067 ;ASCII 07 ; ; SPECIAL CHAR IN MSG FOR TERMINAL DEVICE SELE.ã ,æw 莇w ÔÀÄø° , Áel£, w’øâw À÷E@êâ÷Eäâ÷5Úâü÷5Òâr,.üðÅ€ëÀ– Е7 ´ä÷ hˆ�7”ªä÷ Ì,R\Á™ H”7”œä÷ NW œ øæ‘÷•àŽêÁ° H”5,v7”€ä÷ 2w 3øø·•vꎇˆ�7”fä÷ Ð�Ž,š`äÐ�^äЕÿÀå– 7äõއ   ‡w Às,¾l  x È È $÷w üø øw ä,â÷Eâ7ŠÊ÷÷03Xï. 7Šâ÷U@þáw ÌÈ,‡w º÷Eîá7Š ÷÷02.ï. 7ŠÜá÷U@¸,/& ±Œ:¯”(¯”t÷比“ è €h,€’¦ºÏäù"7ACME OIL COMPANY ­,¤ AJAX OF CALIFORNIA ALPHA OIL CORP,ÈORATION63321 SO. SEVENTH 12255 FO‹0 "00 ;LOST RECEIVE CARRIER ERR01 = "01 ;NO ACK RECEIVED AFTER 8 TRYS ERR02 = "02 ;TIMEOUT WHILE WAITING FOR ACK/NAK ERR03 = "03 ;TIMEOUT WHILE WAITING FOR EOT ; ; MESSAGE ACTION CODES ; AUTOTR = 030061 ;ASCII 01 AUDTRL = 030062 ;ASCII 02 AUDERR = 030066 ;ASCII 06 MANUAL = 030064 ;ASCII 04 CONTIN = 030067 ;ASCII 07 ; ; SP1CTION ; R035 = 062 ;ASCII CODE FOR R0-35 SELECTION ASR33 = 061 ;ASCII CODE FOR ASR-33 SELECTION ; ; EQUATE PARAMETERS FOR CP DATA FORMAT ; TAB = 11 FORM = 14 CARNO = 25. ;CARRIER NUMBER CARSZ = 4 ;CARRIER SIZE CUST = 35. ;CUSTOMER NO. CUSTSZ = 10. ;NO. CHAR. IN CUSTOMER NUMBER DRNO = 51. ;DRIVER NO. DRSZ = 2*Ôáw ¢‡w �÷8ôÀ³ 7¢õ鈊w †‡Ú,NÈ�Þé7¨ßéöÈ�Òé7¨Òéð7¬ÿÿÆé7¢ÇéË,réÈ�¸éÀ åð�°éÿÿÈ�«éàÔ• Å ü‡B— ·,–ÿÿCD“”Ä ýö…CD×¢ פ0Õ ,º…ƒ Ä õE…&æ¦f&MÖ €�‚ƒ„– Þ…yó3,ìURTH STREET P.O. BOX 1234 SAç,N DIEGO, CALIF. LOS ANGELES, CALIF÷,4 SANTA FE SPRINGS, CAL01020304REGUù,XLAR PREMIUM DIESEL NO. 2 FUEL,| 0000 ,  COLL r,Ä X+,èXXX CONSOLIDATED CARRIERS X2, XX 00000 MMDDYYHHMM GEä,0&4ECIAL CHAR IN MSG FOR TERMINAL DEVICE SELECTION ; R035 = 062 ;ASCII CODE FOR R0-35 SELECTION ASR33 = 061 ;ASCII CODE FOR ASR-33 SELECTION ; ; EQUATE PARAMETERS FOR CP DATA FORMAT ; TAB = 11 FORM = 14 CARNO = 19. ;CARRIER NUMBER CARSZ = 4 ;CARRIER SIZE CUST = 35. ;CUSTOMER NO. CUSTSZ = 7. ;NO. CHAR. IN CUSTOMER NUMBER DRNO = 51. 53 ;NO. CHAR. FLOW1 = 66. ;FLOW METER PRODUCT 1 FLOW2 = 73. ;FLOW METER PRODUCT 2 FLOW3 = 80. ;FLOW METER PRODUCT 3 FLOW4 = 87. ;FLOW METER PRODUCT 4 FLOWSZ = 6 ;NO. CHAR. IN FLOW METER DATA T1 = 136. ;TEMP OF PRODUCT 1 T2 = 140. ;TEMP OF PRODUCT 2 T3 = 144. ;TEMP OF PRODUCT 3 T4 = 148. ;TEMP 7ES TERMINAL 0000 y,T 00000049 XX g,x XXXXXX XXX XX –,œ XXXXXX XXñ,ÀX XX ,ä XXXXXX XXX XX *, XXXXXX XXX ;,, P.O. BOX B,P608 SAN DIEGO, CALIF ESG @G,tZ{[lP}M]\Nk`KaðF ;DRIVER NO. DRSZ = 3 ;NO. CHAR. FLOW1 = 66. ;FLOW METER PRODUCT 1 FLOW2 = 73. ;FLOW METER PRODUCT 2 FLOW3 = 80. ;FLOW METER PRODUCT 3 FLOW4 = 87. ;FLOW METER PRODUCT 4 FLOWSZ = 6 ;NO. CHAR. IN FLOW METER DATA T1 = 136. ;TEMP OF PRODUCT 1 T2 = 140. ;TEMP OF PRODUCT 2 T3 = 144. ;TEMP OF PRODUCTEOF PRODUCT 4 TEMPSZ = 3 ;NO. CHAR. IN TEMP ; ; MISCELLANEOUS SYMBOLS ; STX = 002 ;START OF TEXT ETX = 003 ;END OF TEXT ETB = 027 ;END OF TRANSMISSION BLOCK EOT = 004 ;EOT - LINE TURNAROUND ACK = 006 ;ACKNOWLEDGE NAK = 025 ;NEGATIVE ACKNOWLEDGE NUL = 000 ;NULL CHARACTER FF = 377 ;HEX "FF" H¿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*Ä Gñòóôõö÷øùz^L~no|ÁÂÃÄ,˜ÅÆÇÈÉÑÒÓÔÕÖרÙâãäåæçèé AUDIT TRM,¼AIL JUST ENTERED IS ERRONEOUS! MANU¦#àAL ENTRY ACCEPTED!  üé,ü6 IS END OF DAY REPORT TO BE Er, NTERED ON PUNCHED TAPE?  TRAN÷DSMISSION ERROR !Ø XŒ,X" ERRONEOUS ACTION CODE RECEIÍ,|VED! ERROR IN AUDIT TRAIL!�$  DA: """"""" """""""""""""""""""""""""""""""""""""""""""""""""""""DDDDDDˆˆˆˆˆ@DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDˆˆ€ˆˆˆˆ@ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÌÌÌADD)B CÕÀ]úhWyí›ÕÀ]ºbW 2›ÕÀ]úOW '›ÕÀ]ûhZzö›ÕÀ]»bZ+ g›ÕÀ]ûOZ6 h›ÕÀ]üh\k|Öý›ÕÀ]¼b\l œ›ÕÀ]üO\  Ä›$Dÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîî̈ˆˆˆˆˆÌÌÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÅaå Í‹æÄ,L ƒw:ÄB8ŽŒ ýƒàÇ` 5 þÿ€�&ˆ ‚— ýÿ†ƒœÃEÀÿ× >w†× × ò 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 INITL = 111111 ;CONSOLE SWITCH PATTERN TO BYPASS ;DEFINITION OF EOD REPORT .PAGE ; ; PROGRAM DATA ; ; .IFZ DOS . = 400 .ENDC . = .+200 STACK = . ;SYSTEM STACK AR(A .IFNZ DEBUG RCSR: .WORD 0 ;DC11 RECEIVE AND RBUF: .WORD 0 ; TRANSMIT BUFFERS TCSR: .WORD 0 ; FOR DEMO CHECKOUT TBUF: J 3 T4 = 148. ;TEMP OF PRODUCT 4 TEMPSZ = 3 ;NO. CHAR. IN TEMP ; ; MISCELLANEOUS SYMBOLS ; STX = 002 ;START OF TEXT ETX = 003 ;END OF TEXT ETB = 027 ;END OF TRANSMISSION BLOCK EOT = 004 ;EOT - LINE TURNAROUND ACK = 006 ;ACKNOWLEDGE NAK = 025 ;NEGATIVE ACKNOWLEDGE NUL = 000 ;NULL CHARACTER K TI: J× Ûà 8 ¨8 FÞ [ „ \ ƒ\ ˆ º # ½  ¾ %¾ MMDDYY HHMM � Ü ,Ü ÷•€óß„ßàß®ßà …, ßA"ß 0ß 2ßÈ4ß 6÷@ÿ,$ >â÷ t÷4â÷ jß$Àß Äßê@ d,H ÂÆÀÀBÆ€L X0*èXXX CONSOLIDATED CARRIERS X7* XX 00000 MMDDYYHHMM GEé*0&ES TERMINAL 0000 ~*T 00000049 XX l*x XXXXXX XXX XX ›*œ XXXXXX XXö*ÀX XX *ä XXXXXX XXX XX /* XXXXXX XXX @*, M.WORD 0 ; WITHOUT DC11 H/W AND CP CLRBCC: .WORD 0 ;CLEAR BCC BCCOUT: .WORD 0 ;BCC OUTPUT REGISTER BCCMSB: .WORD 123 ;MSB OF RESULTING BCC BCCLSB: .WORD 345 ;LSB OF RESULTING BCC .ENDC ; ; CUSTOMER AND PRODUCT TABLES ; ALPHA1: .WORD NAME1,NAME2,NAME3 ;POINTER TO CUSTOMER NAME ALPHA2: .WORD ADDR1,ADDR2,ADDR3 ;POINTER TO CUSTOMER ADDRESS ALPHA3: .WORD CITY1,CITY2,CITY3 ;POINFF = 377 ;HEX "FF" INITL = 111111 ;CONSOLE SWITCH PATTERN TO BYPASS ;DEFINITION OF EOD REPORT .PAGE ; ; PROGRAM DATA ; ; .IFZ DOS . = 400 .ENDC . = .+200 STACK = . ;SYSTEM STACK AR(A .IFNZ DEBUG RCSR: .WORD 0 ;DC11 RECEIVE AND RBUF: .WORD 0 ; TRANSMIT BUFFERS TCSR: .WORD 0 Oà ®„,l ÷Œê÷Šê÷%I’øñAü 7 ,ø¶Ú,� ÷‹#øý€÷‚ø÷Jø×­øY¶ M,´ ¶ ÷‹û÷ý€À8  Ð  D û7 æ÷ž ÷,Ø ¾ ª Ì ÷‹áþý€ÀÄ Áò×,ü ÷<û7ŠÐþ÷U@Xñ7Šðé÷U@èé7 Âþ7ŠÞñU, þw ²· ²þÅÐé�À�¢þ  À x@Y,Dê Hbܤ¤¤¤w ŒÄ�xþ¡ ,h¡¡ Å5@&·Š[þÄ�€ééÅ5 æ÷Uº,Œpé÷•BþßÅ5@Ü÷5\é¡÷•>P P.O. BOX G*P608 SAN DIEGO, CALIF ESG @L*tZ{[lP}M]\Nk`Kaðñòóôõö÷øùz^L~no|ÁÂÃÄ*˜ÅÆÇÈÉÑÒÓÔÕÖרÙâãäåæçèé AUDIT TRR*¼AIL JUST ENTERED IS ERRONEOUS! MANU«!àAL ENTRY ACCEPTED! *ü6 IS END OF DAY REPORT TO BE Ew* NTERED ON PUNCHED TAPE?  TRANüDSMISSION ERROR !Ý*X" ERRONEOUS ACTION CODE RECEIÒ*|VED! ERROR IN AUDIT TRAIL!†QNTER TO CUSTOMER CITY NAME1: .ASCII 'ACME OIL COMPANY ' NAME2: .ASCII 'AJAX OF CALIFORNIA ' NAME3: .ASCII 'ALPHA OIL CORPORATION' ADDR1: .ASCII '63321 SO. SEVENTH ' ADDR2: .ASCII '12255 FOURTH STREET ' ADDR3: .ASCII 'P.O. BOX 1234 ' CITY1: .ASCII 'SAN DIEGO, CALIF. ' CITY2: .ASCII 'LOS ANGELES, CALIF ' CITY3: .ASCII 'SANTA FE SPRINGS, CAL' .EVEN KODE1: .ASCII '01' KODE2: .ASCII '02' KODE3: .ASCII '03' KODE4: .ASCII '04' PRNAM1: .AR ; FOR DEMO CHECKOUT TBUF: .WORD 0 ; WITHOUT DC11 H/W AND CP CLRBCC: .WORD 0 ;CLEAR BCC BCCOUT: .WORD 0 ;BCC OUTPUT REGISTER BCCMSB: .WORD 123 ;MSB OF RESULTING BCC BCCLSB: .WORD 345 ;LSB OF RESULTING BCC .ENDC ; ; CUSTOMER AND PRODUCT TABLES ; ALPHA1: .WORD NAME1,NAME2,NAME3 ;POINTER TO CUSTOMER NAME ALPHA2: .WORD ADDR1,ADDR2,ADDR3 ;POINTER TO CUSTOMER ADDRESS ALS,°&þ7Š#þ7 Žú7ŠDé÷U@<éÈ÷00ˆö÷E@.é÷E",Ô(é7Šüý8 ÷‹Uöý€èÄ�é¡7 ëW,ø÷•Úý«Å5 ¨·ŠÏýôÅ5€¢Ä�ìè7àê¡Ó,¡ · úÀú 0‘I Ž·Š›ýü,@÷•’ý‡Ä�¶è7¡¬ê÷•€ýwúþ·ŠyýøÄ�Ø,dœè7¡”ê·Šiý÷E@Šèw ,T º ÿÿ÷‹Sý',ˆ÷•Ôú÷•ÿÏú÷Âúæ\ ÷ D÷‹¹úý�÷´Ÿ,¬Žù÷•$ýwÿ÷•¤ú÷•ÿŸú÷’úæ\ ÷ ,Ð÷‹‰úý�wÂþÄ�"è¡wlþ÷E@è7 Hù,ôT"  DA:  TI: JÜ å8 Fã \ �#¾ MMDDYY HHMM †*Ü ÷•€óß„ßàß®ßà Š* ßA"ß 0ß 2ßÈ4ß 6÷@*$ >â÷ t÷4â÷ jß$Àß Äßê@ i*H ÂÆÀÀBÆ€à ®‰*l ÷Œê÷Šê÷%I’øñAü 7 ,ø¶ß*� ÷‹#øý€÷‚ø÷Jø×­øY¶ R*´ ¶ ÷‹û÷ý€À8  Ð  D û7 æ÷ž USCII 'REGULAR ' PRNAM2: .ASCII 'PREMIUM ' PRNAM3: .ASCII 'LOW LEAD ' PRNAM4: .ASCII 'DIESEL ' PRSZ = 10. .PAGE ;* ;* D U M M Y I N V O I C E ;* INVOICE = . .BYTE CR .ASCII '000' SERNO1: .ASCII '0' .BYTE CR,LF,TAB,TAB,TAB .ASCII ' ' NAME: .ASCII ' COLL' .BYTE CR,LF,TAB,TAB,TAB .ASCII ' ' ADDRESS:.ASCII ' ' .BYTE CR,LF,VPHA3: .WORD CITY1,CITY2,CITY3 ;POINTER TO CUSTOMER CITY NAME1: .ASCII 'ACME OIL COMPANY ' NAME2: .ASCII 'AJAX OF CALIFORNIA ' NAME3: .ASCII 'ALPHA OIL CORPORATION' ADDR1: .ASCII '63321 SO. SEVENTH ' ADDR2: .ASCII '12255 FOURTH STREET ' ADDR3: .ASCII 'P.O. BOX 1234 ' CITY1: .ASCII 'SAN DIEGO, CALIF. ' CITY2: .ASCII 'LOS ANGELES, CALIF ' CITY3: .ASCII 'SANTA FE SPRINGS, CAL' .EVEN KODE1: .ASCII '01' KODE2: .ASCII '02' KODE3: .ASCW ÄÝUùÄÄÝPù!10!20!60 !40 i,X ÷‹9õý€ww¤wÌw>ÄcÅ.6,<÷ \Ä“Å.÷ PÄÃÅ.÷ DÄóÅ.�,`÷ 8·Šò·ŠØò·Š¯ò Á�ýøÁE€ÿÁå1W °,„ Á w€w†wŒw е,¨±Î] ç} m Nÿÿæ�4ï÷•…,Ìà.ïw ÒÄ #Ò )ÿÿ·•ïw ÒŒ 6,ðw ²LcTg Œ ‡Ò Žÿÿw ª“ ¾,6w ŠN“^— “ ·Ö ¾ÿÿw ç,8‚š ^w bPXü*Ø ¾ ª Ì ÷‹áþý€ÀÄ ÁòÜ*ü ÷<û7ŠÐþ÷U@Xñ7Šðé÷U@èé7 Âþ7ŠÞñZ* þw ²· ²þÅÐé�À�¢þ  À x@^*Dê Hbܤ¤¤¤w ŒÄ�xþ¡*h¡¡ Å5@&·Š[þÄ�€ééÅ5 æ÷U¿*Œpé÷•BþßÅ5@Ü÷5\é¡÷•C*°&þ7Š#þ7 Žú7ŠDé÷U@<éÈ÷00ˆö÷E@.é÷E'*Ô(é7Šüý8 ÷‹Uöý€èÄ�é¡7 ë\*ø÷•Úý«Å5 ¨·ŠÏýôÅ5€¢Ä�ìè7àê¡Ø*¡ · úÀú 0‘I Ž·Š›ýü!YTAB,TAB,TAB .ASCII ' ' CITY: .ASCII ' ' .BYTE CR,LF,LF,LF,LF CARRIER:.ASCII 'XXXX CONSOLIDATED CARRIERS ' DRIVER: .ASCII 'XXX' .BYTE TAB,TAB .ASCII ' 0000' NUMBER: .ASCII '0' .BYTE CR,LF,LF DATE: .ASCII 'MMDDYY' TIME: .ASCII 'HHMM GE&ES TERMINAL' .BYTE TAB .ASCII ' 000' SERNO2: .ASCII '0' .BYTE CR,LF,LF .ASCII ' ' CUSTNO: .ASCII ' ZII '03' KODE4: .ASCII '04' PRNAM1: .ASCII 'REGULAR ' PRNAM2: .ASCII 'PREMIUM ' PRNAM3: .ASCII 'DIESEL ' PRNAM4: .ASCII 'NO. 2 FUEL' PRSZ = 10. .PAGE ;* ;* D U M M Y I N V O I C E ;* INVOICE = . .BYTE CR .ASCII '000' SERNO1: .ASCII '0' .BYTE CR,LF,TAB,TAB,TAB .ASCII ' ' NAME: .ASCII ' COLL' .BYTE CR,LF,TAB,TAB,TAB .ASCII ' ' ADDRESS:.ASCII ' [ÃhÇ š çÚ îA,\ÿÿw Z¡ †w :Rór÷ ¡ Þ ,€ÿÿæ2÷ ÜÁ|ÂúùH” ”÷ DW sùI,¤æ÷ ÷•&û÷•"ûæ\ ÷ &÷‹›øý�÷{,È´l÷wêüæ•1÷ ’Á²H”7”è÷ üW Úø¾,ì÷•æúæ•÷ ÄÛÀ[ ¢.6æ•1÷ \Á,ÚH”7”âç÷ ÆW òø÷• °úä÷EÐå7Фú¶,4ò Á ÷ÁåwÄõ À[ ’¤ Ò•²,X · ¬õÁ ö ÷‹�õý€wHüæ•1÷ ðÁ[,|¼Ã8óÃe¼H”7”nç÷ RC ùæ•÷\*@÷•’ý‡Ä�¶è7¡¬ê÷•€ýwúþ·ŠyýøÄ�Ý*dœè7¡”ê·Šiý÷E@Šèw ,T º ÿÿ÷‹Sý,*ˆ÷•Ôú÷•ÿÏú÷Âúæ\ ÷ D÷‹¹úý�÷´¤*¬Žù÷•$ýwÿ÷•¤ú÷•ÿŸú÷’úæ\ ÷ *Ð÷‹‰úý�wÂþÄ�"è¡wlþ÷E@è7 Hù!*ô ÄÝUùÄÄÝPù!10!20!60 !40 n*X ÷‹9õý€ww¤wÌw>ÄcÅ.;*<÷ \Ä“Å.÷ PÄÃÅ.÷ DÄóÅ.•*`÷ 8·Šò·ŠØò·Š¯ò Á�ýøÁE€ÿÁå1W µ*„ Á w€w†wŒw Šº*] 00000049' .BYTE CR,LF,LF,LF,LF CODE1: .ASCII 'XX ' PROD1: .ASCII ' ' VOL1: .ASCII 'XXXXXX ' TEMP1: .ASCII 'XXX' .BYTE CR,LF CODE2: .ASCII 'XX ' PROD2: .ASCII ' ' VOL2: .ASCII 'XXXXXX ' TEMP2: .ASCII 'XXX' .BYTE CR,LF CODE3: .ASCII 'XX ' PROD3: .ASCII ' ' VOL3: .ASCII 'XXXXXX ' TEMP3: .ASCII 'XXX' .BYTE CR,LF CODE4:^ ' .BYTE CR,LF,TAB,TAB,TAB .ASCII ' ' CITY: .ASCII ' ' .BYTE CR,LF,LF,LF,LF CARRIER:.ASCII 'XXXX CONSOLIDATED CARRIERS ' DRIVER: .ASCII 'XXX' .BYTE TAB,TAB .ASCII ' 0000' NUMBER: .ASCII '0' .BYTE CR,LF,LF DATE: .ASCII 'MMDDYY' TIME: .ASCII 'HHMM GE&ES TERMINAL' .BYTE TAB .ASCII ' 000' SERNO2: .ASCII '0' .BYTE CR,LF,LF _ "÷• ¥, 6ú‡÷E@VåÄ�Tå¡!7 €öx®ÒÞÄ*_,Ä÷E6å7Š úwèû÷E(å7Šüù÷Eå7Šðù},è€ ÷‹‘òý€Ÿ¡wºû7 4ö÷ŠÒùwï, ªþ÷01@òw´ûÀm ”×  F× Z[ÅÅå ®,0C�sÄÃŒ‡ÁÄŒúÑûp‘ÿÿ d å�ų,T ÷m Ü÷ûþÛÅ ÷øÛ÷ .Å ÷-,xèÛ÷ ÷5ÜÛw¨þ÷EÐÛ÷€ÌÛ÷ 2,œÜÄÄ þß5€bïü‡×  Õ¼×  þ,ÀÕ%¶×  ðנ ÕªÕ@f`¨±Î] ç} m Nÿÿæ�4ï÷•Š*Ìà.ïw ÒÄ #Ò )ÿÿ·•ïw ÒŒ ;*ðw ²LcTg Œ ‡Ò Žÿÿw ª“ Ã*6w ŠN“^— “ ·Ö ¾ÿÿw ì*8‚š ^w bPÃhÇ š çÚ îF*\ÿÿw Z¡ †w :Rór÷ ¡ Þ *€ÿÿæ2÷ ÜÁ|ÂúùH” ”÷ DW sùN*¤æ÷ ÷•&û÷•"ûæ\ ÷ &÷‹›øý�÷€*È´l÷wêüæ•1÷ ’Á²H”7”è÷ üW ÚøÃ*ì÷•æúæ•÷ ÄÛÀ[ ¢.6æ•1÷ \Á *ÚH”a .ASCII 'XX ' PROD4: .ASCII ' ' VOL4: .ASCII 'XXXXXX ' TEMP4: .ASCII 'XXX' .BYTE CR,LF,LF,LF,LF,LF,LF,LF,LF .BYTE LF,LF,LF,LF,LF,LF,LF,LF,LF .BYTE LF,LF,LF,LF,LF,LF,LF,LF,LF .BYTE LF,LF,LF,LF,LF,LF,LF,LF,LF .ASCII ' P.O. BOX 608' .BYTE CR,LF .ASCII 'SAN DIEGO, CALIF ESG' .BYTE FORM INVEND = . ; ; ASCII TO EBCDIC CONVERSION TABLE ; EBCDIC = b .ASCII ' ' CUSTNO: .ASCII ' 00000049' .BYTE CR,LF,LF,LF,LF CODE1: .ASCII 'XX ' PROD1: .ASCII ' ' VOL1: .ASCII 'XXXXXX ' TEMP1: .ASCII 'XXX' .BYTE CR,LF CODE2: .ASCII 'XX ' PROD2: .ASCII ' ' VOL2: .ASCII 'XXXXXX ' TEMP2: .ASCII 'XXX' .BYTE CR,LF CODE3: .ASCII 'XX ' PROD3: .ASCII ' ' VOL3: .ASCII 'XXXXXX ' TEMP3: .ASCc,ä§w ð€7êøðÕ€0 ÷Uä÷5üã&,üÀe7’ôã÷U@ìãw ÊŽ‡w ¶À´ø° œ,,, Áelw’Æãw ¢÷E@¸ã÷Eq,P²ã÷5¨ãü÷5 ãüðÅ€ëÀb Е7 _,t‚å÷ hˆ�7”xå÷ \Áº H”7”jå÷ NW ½ ®,˜øæ‘÷•à\ëÁÒ H”7”Nå÷ 2W × ø·•DëŽÈ,¼‡ˆ�7”4å÷ Ð�.åÐ�,åЕÿÀåb 7~õކ,à‡   ‡w ìÀ8  D È È $÷,w Þø øw Æ÷03:ðw º÷02.ð÷Et,(Ôâd7”âç÷ ÆW òø÷• °úä÷EÐå7Фú»*4ò Á ÷ÁåwÄõ À[ ’¤ Ò•·*X · ¬õÁ ö ÷‹�õý€wHüæ•1÷ ðÁ`*|¼Ã8óÃe¼H”7”nç÷ RC ùæ•÷ "÷• ª* 6ú‡÷E@VåÄ�Tå¡!7 €öx®ÒÞÄ*d*Ä÷E6å7Š úwèû÷E(å7Šüù÷Eå7Šðù‚*è€ ÷‹‘òý€Ÿ¡wºû7 4ö÷ŠÒùwô* ªþ÷01@òw´ûÀm ”×  F× Z[ÅÅå ³*0C�sÄÃŒ‡ÁÄŒúÑûp‘ÿÿ d å�Ÿ*T ÷m Ü÷ûþÛÅ ÷øÛ÷ .Å ÷2*xèÛ÷ ÷5e . .BYTE 100,132,177,173,133,154,120,175,115,135 .BYTE 134,116,153,140,113,141,360,361,362,363 .BYTE 364,365,366,367,370,371,172,136,114,176 .BYTE 156,157,174,301,302,303,304,305,306,307 .BYTE 310,311,321,322,323,324,325,326,327,330 .BYTE 331,342,343,344,345,346,347,350,351 .EVEN ; ; DEVICE CODES FOR IOX USAGE ; LSR: .WORD 3 LSP: .WORD 4 ; ; MESSAGES TO BE OUTPUT TO TERMINAL ; TMSG00fII 'XXX' .BYTE CR,LF CODE4: .ASCII 'XX ' PROD4: .ASCII ' ' VOL4: .ASCII 'XXXXXX ' TEMP4: .ASCII 'XXX' .BYTE CR,LF,LF,LF,LF,LF,LF,LF,LF .BYTE LF,LF,LF,LF,LF,LF,LF,LF,LF .BYTE LF,LF,LF,LF,LF,LF,LF,LF,LF .BYTE LF,LF,LF,LF,LF,LF,LF,LF,LF .ASCII ' P.O. BOX 608' .BYTE CR,LF .ASCII 'SAN DIEGO, CALIF ESG' .BYTE FORM INVEND = . ; ; ASCII TOg7Ѝ÷8 7ŠÈâ÷U@Àâw ¢‡w �÷Ò,LðóÀÕ ¢9ˆŠw †‡È•0¨5öÈ•G,p0¨3ð¬ÿÿ2¢9éÈ•0À åð•0d,”ÿÿÈ•0àÔ• Å ü‡B— ÿÿCD“”Ä ý,¸ö…CD×¢ פ0Õ …ƒ Ä õE…&³ Üæ¦f&MÖ €�‚ƒ„…íóhÜÛw¨þ÷EÐÛ÷€ÌÛ÷ 7*œÜÄÄ þß5€bïü‡×  Õ¼×  *ÀÕ%¶×  ðנ ÕªÕ@k*ä§w ð€7êøðÕ€0 ÷Uä÷5üã+*üÀe7’ôã÷U@ìãw ÊŽ‡w ¶À´ø° ¡*,, Áelw’Æãw ¢÷E@¸ã÷Ev*P²ã÷5¨ãü÷5 ãüðÅ€ëÀb Е7 d*t‚å÷ hˆ�7”xå÷ \Áº H”7”jå÷ NW ½ ³*˜øæ‘÷•à\ëÁÒ H”7”Nå÷ 2W × ø·•DëŽÍ*¼‡ˆ�7”4å÷ Ð�.åÐ�,åЕÿÀåb 7~õŽ‹*à‡   ‡w ìÀi = . .BYTE CR,LF .ASCII /AUDIT TRAIL JUST ENTERED IS ERRONEOUS!/ TMSG01 = . .BYTE CR,LF .ASCII /MANUAL ENTRY ACCEPTED!/ TMSG02 = . ; ; HUB TELETYPE MESSAGES ; .EVEN MSG00: .WORD 0 .BYTE 0 .BYTE 0 .WORD 54. .BYTE CR,LF .ASCII 'IS END OF DAY REPORT TO BE ENTERED ON PUNCHED TAPE? ' .EVEN MSG01: .WORD 0 .BYTE 0 .BYTE 0 j EBCDIC CONVERSION TABLE ; EBCDIC = . .BYTE 100,132,177,173,133,154,120,175,115,135 .BYTE 134,116,153,140,113,141,360,361,362,363 .BYTE 364,365,366,367,370,371,172,136,114,176 .BYTE 156,157,174,301,302,303,304,305,306,307 .BYTE 310,311,321,322,323,324,325,326,327,330 .BYTE 331,342,343,344,345,346,347,350,351 .EVEN ; ; DEVICE CODES FOR IOX USAGE ; LSR: .WORD 3 LSP: .WORD 4 ; ; MESS8  D È È $÷*w Þø øw Æ÷03:ðw º÷02.ð÷Ey*(Ôâ7Ѝ÷8 7ŠÈâ÷U@Àâw ¢‡w �÷×*LðóÀÕ ¢9ˆŠw †‡È•0¨5öÈ•L*p0¨3ð¬ÿÿ2¢9éÈ•0À åð•0i*”ÿÿÈ•0àÔ• Å ü‡B— ÿÿCD“”Ä ý!*¸ö…CD×¢ פ0Õ …ƒ Ä õE…&¸Üæ¦f&MÖ €�‚ƒ„…òøm .WORD 25. .BYTE CR,LF .ASCII /TRANSMISSION ERROR / MSG01F: .ASCII / !/ .EVEN MSG02: .WORD 0 .BYTE 0 .BYTE 0 .WORD 36. .BYTE CR,LF .ASCII /ERRONEOUS ACTION CODE RECEIVED!/ .BYTE CR,LF,LF .EVEN MSG03: .WORD 0 .BYTE 0 .BYTE 0 .WORD 26. .BYTE CR,LF .ASCII /ERROR IN AUDIT TRAIL!/ .BYTE CR,LF,LF MSG04: nAGES TO BE OUTPUT TO TERMINAL ; TMSG00 = . .BYTE CR,LF .ASCII /AUDIT TRAIL JUST ENTERED IS ERRONEOUS!/ TMSG01 = . .BYTE CR,LF .ASCII /MANUAL ENTRY ACCEPTED!/ TMSG02 = . ; ; HUB TELETYPE MESSAGES ; .EVEN CRLFLF: .WORD 0 .BYTE 0,0 .WORD 3 .BYTE CR,LF,LF .EVEN MSG00: .WORD 0 .BYTE 0 .BYTE 0 .WORD 54. .BYTE CR,LF o; UPDATE DEMO.P16 5.19.72 ; UPDATE DEMO.P15 5.17.72 ; UPDATE DEMO.P14 5.14.72 ; UPDATE DEMO.P13 5.12.72 ; UPDATE DEMO.P12 5.7.72 ; UPDATE DEMO.P11 5.1.72 ; UPDATE DEMO.P10 4.27.72 ; UPDATE DEMO.P09 04.26.72 ; UPDATE DEMO.P08 04.20.72 ; UPDATE DEMO.P07 04.19.72 ; UPDATE DEMO.P06 04.17.72 ; UPDATE DEMO.P05 04.13.72 ELITE HUBp& ±Œ:¯”(¯”t÷比“ è €h,€’¦ºÏäù"7ACME OIL COMPANY ­,¤ AJAX OF CALIFORNIA ALPHA OIL CORP,ÈORATION63321 SO. SEVENTH 12255 FO‹q.WORD 0 .BYTE 0,0 .WORD 6 .BYTE CR,LF .ASCII /DA: / MSG05: .WORD 0 .BYTE 0,0 .WORD 6 .BYTE CR,LF .ASCII /TI: / .EVEN ; ; HUB TELETYPE BUFFERS ; TTIBUF: .WORD 0 ;MAX NO. CHARS TO INPUT .BYTE 0 ;MODE - FORMATED ASCII .BYTE 0 ;STATUS .WORD 0 ;NO. OF CHARS INPUT . = .+600. ;Dr .ASCII 'IS END OF DAY REPORT TO BE ENTERED ON PUNCHED TAPE? ' .EVEN MSG01: .WORD 0 .BYTE 0 .BYTE 0 .WORD 25. .BYTE CR,LF .ASCII /TRANSMISSION ERROR / MSG01F: .ASCII / !/ .EVEN MSG02: .WORD 0 .BYTE 0 .BYTE 0 .WORD 34. .BYTE CR,LF,LF .ASCII /ERRONEOUS ACTION CODE RECEIVED!/ .EVEN MSG03: .WORD 0 .BYTE 0 .BYTE 0 s DEMO ; UPDATE DEMO.P04 04.13.72 ELITE HUB DEMO ; UPDATE DEMO.P03 04.13.72 ELITE HUB DEMO ; UPDATE DEMP.P02 04.12.72 ELITE ; ; LODT DEMO ; DEBUG = 0 ;0 = NORMAL PROGRAM OPERATION WITH DC11 ;1 = DEBUG CHECKOUT WITH SIMULATED DC11 DOS = 0 ;0 = RUN ON STAND ALONE SYSTEM ;1 = RUN ON DOS SYSTEM .IFNZ DOS .IFNZ t,ìURTH STREET P.O. BOX 1234 SAç,N DIEGO, CALIF. LOS ANGELES, CALIF÷,4 SANTA FE SPRINGS, CAL01020304REGUù,XLAR PREMIUM DIESEL NO. 2 FUEL,| 0000 ,  COLL r,Ä X+,èXXX CONSOLIDATED CARRIERS X2, XX 00000 MMDDYYHHMM GEä,0&uATA TTOBUF: .WORD 0 ;UNUSED .BYTE 0 ;MODE - FORMATTED ASCII .BYTE 0 ;STATUS .WORD 0 ;NO. OF CHARS TO BE OUTPUT . = .+600. ; ; TIMERS ; TIMER = . ACKTMR: .WORD 0 ;ACK TIMER .WORD ACKTO EOTTMR: .WORD 0 ;EOT TIMER .WORD EOTTO TIMDAY: .WORD 0 ;TIME OF DAY TIMER .WORD UPTIME TIMEND = . ; v .WORD 24. .BYTE CR,LF,LF .ASCII /ERROR IN AUDIT TRAIL!/ .EVEN MSG04: .WORD 0 .BYTE 0,0 .WORD 6 .BYTE CR,LF .ASCII /DA: / .EVEN MSG05: .WORD 0 .BYTE 0,0 .WORD 6 .BYTE CR,LF .ASCII /TI: / .EVEN ; ; HUB TELETYPE BUFFERS ; TTIBUF: .WORD 586. ;MAX NO. CHARS TO INPUT .BYTE 0 ;MODE - FORMATED ASCII w DEBUG .CSECT .ENDC .IFZ DEBUG .ASECT .ENDC .ENDC .IFZ DOS .ASECT .ENDC ; REGISTER DEFINITIONS ; ; R0 = 0% R1 = 1% R2 = 2% R3 = 3% R4 = 4% R5 = 5% SP = 6% PC = 7% PS = 177776 LKS = 177546 ;LINE FREQ. CLOCK STATUS REG. BR4 = 200 ;HARDWARE PRIORITY LEVELxES TERMINAL 0000 y,T 00000049 XX g,x XXXXXX XXX XX –,œ XXXXXX XXñ,ÀX XX ,ä XXXXXX XXX XX *, XXXXXX XXX ;,, P.O. BOX B,P608 SAN DIEGO, CALIF ESG @G,tZ{[lP}M]\Nk`Kaðy ; HUB/TERMINAL INPUT/OUTPUT MESSAGE BUFFERS ; RCVBUF = . ;RECEIVE BUFFER .WORD 273. ;MAXIMUM NUMBER OF CHARACTERS .BYTE 0 ;UNUSED .BYTE 0 ;STATUS .WORD 0 ;NO. OF DATA CHARACTERS RECEIVED . = .+273. .EVEN ; TRNBUF = . ;TRANSMIT BUFFER .WORD 0 ;NO. OF DATA CHARACTERS TO BE TRANSMITTED .BYTE 0 z .BYTE 0 ;STATUS .WORD 0 ;NO. OF CHARS INPUT . = .+586. ;DATA TTOBUF: .WORD 0 ;UNUSED .BYTE 0 ;MODE - FORMATTED ASCII .BYTE 0 ;STATUS .WORD 0 ;NO. OF CHARS TO BE OUTPUT . = .+300. ; ; TIMERS ; TIMER = . ACKTMR: .WORD 0 ;ACK TIMER .WORD ACKTO EOTTMR: .WORD 0 ;EOT{S OF DEVICES BR5 = 240 BR6 = 300 .IFZ DEBUG RCSR = 174000 ;DC11 RECEIVER STATUS REGISTER TCSR = 174004 ;DC11 TRANSMITTER STATUS REGISTER RBUF = 174002 ;DC11 RECEIVER BUFFER TBUF = 174006 ;DC11 TRANSMISSION BUFFER .ENDC RVECTR = 300 ;DC11 RECEIVER INTERRUPT VECTOR TVECTR = 304 ;DC11 TRASMISSION INTERRUPT VECTOR CVECTR = 100 |ñòóôõö÷øùz^L~no|ÁÂÃÄ,˜ÅÆÇÈÉÑÒÓÔÕÖרÙâãäåæçèé AUDIT TRM,¼AIL JUST ENTERED IS ERRONEOUS! MANU¦#àAL ENTRY ACCEPTED!  üé,ü6 IS END OF DAY REPORT TO BE Er, NTERED ON PUNCHED TAPE?  TRAN÷DSMISSION ERROR !Ø XŒ,X" ERRONEOUS ACTION CODE RECEIÍ,|VED! ERROR IN AUDIT TRAIL!�$  DA: } ;UNUSED .BYTE 0 ;STATUS .WORD 0 ;RESERVED FOR USE BY TRNINT ROUTINE . = .+515. ; ; JULIAN DATE FROM TERMINAL SAVED HERE ; JULDAY = . ;JULIAN DATE FROM LAST MSG RECEIVED . = .+3 JULEND = . ; ; DATE AND TIME AT HUB ; DABUF: .WORD 8. .BYTE 0,0 .WORD 0 DATEAS: .ASCII /DDMMYY / TIBUF: .WORD 6 .BYTE 0,0 .WORD ~ TIMER .WORD EOTTO TIMDAY: .WORD 0 ;TIME OF DAY TIMER .WORD UPTIME TIMEND = . ; ; HUB/TERMINAL INPUT/OUTPUT MESSAGE BUFFERS ; RCVBUF = . ;RECEIVE BUFFER .WORD 273. ;MAXIMUM NUMBER OF CHARACTERS .BYTE 0 ;UNUSED .BYTE 0 ;STATUS .WORD 0 ;NO. OF DATA CHARACTERS RECEIVED . = .+273. .EVEN ; TRNBUF =  ;LINE FREQUENCY CLOCK INTERRUPT VECTOR .IFZ DEBUG CLRBCC = 174770 ;CLEAR BCC BCCOUT = 174772 ;BCC OUTPUT REGISTER BCCMSB = 174774 ;MSB OF RESULTING BCC BCCLSB = 174776 ;LSB OF RESULTING BCC .ENDC SWITCH = 177570 ;CONSOLE SWITCH ADDRESS ; ; SYMBOLS REQUIRED FOR IOX CALLS ; KBDSLT = 0 ;TTY KEYBOARD SLOT TTYSLT = 1 ;TTY TELEPRINTER SLOT LSRS€ TI: J× Ûà 8 ¨8 N6Brÿ _ € ` ` „ ¾  Á   % MMDDYY HHMM } à ý,à ÷•€óß„ßàß®ßà …, ßA"ß 0ß 2ßÈ4ß 6÷@û,( :â÷ „÷0â÷ z÷&â÷ p÷â÷ fN,L ßVÀß4Äß@ Â� 0 TIMEAS: .ASCII /HHMM / ; ; PROGRAM VARIABLES ; MODE: .BYTE 0 ;RECEIVE MODE ; WHERE 0 = EXPECTING RING ; 1 = EXPECT CARRIER TRANSITION ; 2 = EXPECT STX ; 3 = EXPECT DATA ; 4 = EXPECT BCC(MSB) ; 5 = EXPECT BCC(LSB) ‚ . ;TRANSMIT BUFFER .WORD 0 ;NO. OF DATA CHARACTERS TO BE TRANSMITTED .BYTE 0 ;UNUSED .BYTE 0 ;STATUS .WORD 0 ;RESERVED FOR USE BY TRNINT ROUTINE . = .+600. ; ; JULIAN DATE FROM TERMINAL SAVED HERE ; JULDAY = . ;JULIAN DATE FROM LAST MSG RECEIVED . = .+3 JULEND = . ; ; DATE AND TIME AT HUB ; .EVEN ƒLT = 2 ;LOW-SPEED PT READER SLOT LSPSLT = 3 ;LOW-SPEED PUNCH SLOT RESET = 2 ;RESET COMMAND RESTRT = 3 ;RESTART COMMAND INIT = 1 ;INIT COMMAND READ = 11 ;READ COMMAND WRITE = 12 ;WRITE COMMAND EOF = 040 ;EOF BIT IN STATUS BYTE CR = 15 ;ASCII FOR CR LF = 12 ;ASCII FOR LF ; „ÆÀÀB,p Æ€ä ®÷tê÷rê÷%2,” I’àñAü 7 ø¶ ÷‹ øý€÷‚ø÷…,¸ Jþ÷×­ü÷Y¶ ¶ ÷‹ã÷ý€À8 o,Ü  Ð  H û7 Î÷ž  ª Ð 9, ÷‹Íþý€ÀÈ Áò÷(û7мþ÷U@¶,$@ñ7ŠØé÷U@Ðé7 ®þ7ŠÆñ ÷ ÷ü8 Ý,H÷‹ïöý€7 ÷óòw ¬· „þÅžé�À�tþ x,lÀ xrþ \v𸸸¸w †Ä�°,�Jþ ¡Å5@#·Š9þÄ�ZéïÅ5 ì÷UM… ; 6 = EXPECT EOT ; 7 = EXPECT ACK/NAK AFTER ; SENDING ; 8 = SAME ; 9 = SAME ; 10 = SAME RCVERR: .BYTE 0 ;RECEIVE ERROR COUNT REPEAT: .BYTE 0 ;NO. OF TRYS TO TRANSMIT TO TERMINAL .EVEN CURBUF: .WORD 0 ;CURRENT BUF†DABUF: .WORD 8. .BYTE 0,0 .WORD 0 DATEAS: .ASCII /MMDDYY / TIBUF: .WORD 6 .BYTE 0,0 .WORD 0 TIMEAS: .ASCII /HHMM / ; ; PROGRAM VARIABLES ; MODE: .BYTE 0 ;RECEIVE MODE ; WHERE 0 = EXPECTING RING ; 1 = EXPECT CARRIER TRANSITION ; 2 = EXPECT STX ; 3 = EXPECT D‡ ; DC11 RECEIVE CONTROL STATUS REGISTER (RCSR) BITS ; ERROR = 100000 CARTRN = 040000 RING = 020000 OVERUN = 010000 LENGTH = 000000 ;8 BITS/CHAR DONE = 000200 ENABLE = 000100 PARITY = 000040 RSPEED = 000020 ;DC11-AB 1200 BAUD DETECT = 000004 DTRDY = 000001 ; ; DC11 TRANSMIT CONTROL STATUS REGISTER (TCSR) BITS ; STOPCD = 000400 READY = 000200 TSPEED = ˆ,´Jé÷• þåÅ5@â÷56é ÷• þ7Šþ7 /,Ørú7Š$é÷U@éÑ÷00hö÷E@é÷Eé7ŠàýD,üîÄ�é¡7 ìê÷•ÊýºÅ5 ··Š¿ýôÝ, Å5€±Ä�Øè7Ìê¡¡ Àú p,D· ú0‘N �·Š‹ýü÷•‚ý–Ä�¢è7¡˜ê÷•Ä,hpýwÿ·ŠiýøÄ�ˆè7¡€ê·ŠYý÷E@vèw °,ŒDX ¾ ÿÿ÷‹Cý÷•Äú÷•ÿ¿ú÷²úæš,°` ÷ D÷‹©úý�÷´zù÷•ýwÿ÷•”ú÷•§,Ôÿ�ú÷‚úæ` ÷ ÷‹yúý�wÔþÄ�è¡�,ø‰FER ADDRESS INTCNT: .WORD 0 ;RECEIVE INTERRUPT COUNT (FOR CHECKOUT) .PAGE ; ; INITIALIZATION PROGRAM AND IDLE LOOP ; DEMO = . MOVB #BR4,PS ;INHIBIT DC11 INTERRUPTS DURING INIT MOV #15604,@#4 ;SET UP IOX VECTORS MOV #340,@#6 MOV #15256,@#20 MOV #340,@#22 CLR @#40 MOV #040404,@#42 MOV #16040,@#60 MOV #BR5,@#62 MOV ŠATA ; 4 = EXPECT BCC(MSB) ; 5 = EXPECT BCC(LSB) ; 6 = EXPECT EOT ; 7 = EXPECT ACK/NAK AFTER ; SENDING ; 8 = SAME ; 9 = SAME ; 10 = SAME RCVERR: .BYTE 0 ;RECEI‹ 000020 ;DC11-AB 1200 BAUD CLRSND = 000002 REQSND = 000001 ; ; HUB DC11 & TTY MESSAGE BUFFER OFFSETS ; MODEBF = 2 STATUS = 3 COUNT = 4 DATA = 6 HDRSIZ = 17. ;NO. OF BYTES IN HDR OF MSG FROM TERM'L MSGDAT = 23. ;BEGINNING OF MESSAGE DATA (LESS HEADER) ; ; DC11 MSG BUFFER FLAGS ; BUSY = 200 ;BIT 7 OF STATUS BYTE; SET WHEN BUSY ; ; MAG TAPE REGŒwŠþ÷E@üç7 4ù ÄÝEùÄÄÝ@ù!10!‚,20!60 !40 X ÷‹%õý€ww¤º,@wÌw>ÄcÅ.÷ tÄ“Å.÷ hÄÃB,dÅ.÷ \ÄóÅ.÷ P·Šò·ŠÄò·Š›ò Á�c,ˆíøÁE€ÿÁå1W  Á w€w†w¶,¬Œw бÎa ç� š,Ðq Nÿÿæ� ï÷•àïw êÈ #Ö )–,ôÿÿ·•ïw ê� "w ÊLcTg � ‡^,Ö Žÿÿw — Jw ¢N“^— ×,<— ·Ú ¾ÿÿ� #16710,@#64 MOV #BR5,@#66 MOV #CLR,COM ;CLEAR MAG TAPE CONTROLLER JSR PC,TAPRDY ;READY? MOV #RWD,COM ;YES, REWIND TAPE JSR PC,TAPRDY ;READY? MOV #RCVINT,@#RVECTR ;RECEIVE INTERRUPT VECTOR MOV #TRNINT,@#TVECTR ;TRANSMIT INTERRUPT VECTOR MOV #CLKINT,@#CVECTR ;CLOCK INTERRUPT VECTOR .IFNZ DEBUG MOV #RCVINT,@#34 ;CHEŽVE ERROR COUNT REPEAT: .BYTE 0 ;NO. OF TRYS TO TRANSMIT TO TERMINAL .EVEN CURBUF: .WORD 0 ;CURRENT BUFFER ADDRESS INTCNT: .WORD 0 ;RECEIVE INTERRUPT COUNT (FOR CHECKOUT) .PAGE ; ; INITIALIZATION PROGRAM AND IDLE LOOP ; DEMO = . MOVB #BR4,PS ;INHIBIT DC11 INTERRUPTS DURING INIT MOV #15604,@#4 ;SET UP IOX VECTORS MOV #340,@#6 MOV #15256,@#20 �ISTER ADDRESSES ; WC = 167540 ;WORD COUNT STAT = 167542 ;STATUS COM = 167544 ;COMMAND MA = 167546 ;MEMORY ADDRESS ; ; MAG TAPE STATUS REGISTER BITS ; ERR = 004000 ;ERROR RDY = 000200 ;READY FPT = 000001 ;FILE PROTECT (1 = NO WRITE RING) ; ; MAG TAPE COMMAND REGISTER COMMANDS ; CLR = 040000 ;CLEAR CONTROLLER RWD �w šž rw zPÃh®,`Ç ž çÞ îÿÿw r¥ šw RRó¦,„r÷ ¥ â ÿÿæ2÷ ìÁ|ž,¨úùH” ”÷ VW sùæ÷ $÷•û÷•ûþ,Ìæ` ÷ &÷‹‹øý�÷hX÷wöüæ•1÷ ¢Á²Ú,ðH”7”è÷ W Úø÷•Öúæ•÷ ÖÛÀ_ ,¢.6æ•1÷ lÁÚH”7”Îç÷ ØW òø÷•Ž,8  úä÷E¼å7Š”úò ÁúöÁåw°õÂC,\ À_ ’¤ Ò• · ˜õÁ ö ÷‹‰õ,€ý€wTüæ•1÷ Á¼Ã$óÃe¼H”7‘CKOUT RECEIVE INT (TRAP) MOV #TRNINT,@#30 ;CHECKOUT TRANSMIT INT (EMT) .ENDC CLR R0 ;LET DC11 INTR ROUNTINES RUN AT ;CPU LEVEL 0 MOV R0,@#RVECTR+2 MOV R0,@#TVECTR+2 .IFNZ DEBUG MOV R0,@#36 MOV R0,@#32 .ENDC MOV #BR6,R0 MOV R0,@#CVECTR+2 MOV #STACK,SP ;SET STACK POINTER IOT ’ MOV #340,@#22 CLR @#40 MOV #040404,@#42 MOV #16040,@#60 MOV #BR5,@#62 MOV #16710,@#64 MOV #BR5,@#66 MOV #CLR,COM ;CLEAR MAG TAPE CONTROLLER JSR PC,TAPRDY ;READY? MOV #RWD,COM ;YES, REWIND TAPE JSR PC,TAPRDY ;READY? MOV #RCVINT,@#RVECTR ;RECEIVE INTERRUPT VECTOR MOV #TRNINT,@#TVECTR ;TRANSMIT INTERR“= 000400 ;REWIND WFM = 000004 ;WRITE FILE MARK WRT = 000002 ;WRITE A RECORD BCKR = 000200 ;BACKSPACE A RECORD WEXG = 000010 ;WRITE EXTENDED GAP WITH RECORD ; ; TIMER VALUES ; ACKTIM = 360. ;TIMEOUT FOR ACK IN 1/60 SECOND TICS EOTTIM = 180. ;TIMEOUT FOR EOT IN 1/60 SECOND TICS CARTIM = 120. ;TIMEOUT FOR CARRIER DETECT IN ””Zç÷ d‡,¤C ùæ•÷ 4÷• &ú‡÷E@BåÄ�@å¡!¾,È7 löxÂæòØ>÷E"å7Šúùwôû÷Eå=,ì7Šìù÷Eå7Šàù€ ÷‹}òý€Ÿ¡Ö,wÆû7 ö÷ŠÂùwªþ÷01,òwÀûÀq ”× £,4 F× Z[ÅÅå C�sÄÃŒ‡ÁÄŒú+,XÑûp‘ÿÿ h å�Å ÷q öÛ÷ûêÛÅ ÷‘,|äÛ÷ .Å ÷ÔÛ÷ ÷5ÈÛw¨þ�, ÷E¼Û÷€¸Û÷ ÜÄÄ þß5€bïü‡,Ä×  Õ¼×  Õ%¶×  ð{• ;RESET IOX .WORD 0 .BYTE RESET,0 IOT ;SET RESTART ADDRESS .WORD DEMO .BYTE RESTRT,0 IOT ;INIT LSR .WORD LSR .BYTE INIT,LSRSLT MOV #LENGTH!RSPEED,RCSR ;SET DC11 RECEIVER CHAR LENGTH ;AND SPEED MOV #STOPCD!TSPEED,TCSR ;SET DC11 TRANSMITTER STOP CODE ;AND SPEED DEM005 –UPT VECTOR MOV #CLKINT,@#CVECTR ;CLOCK INTERRUPT VECTOR .IFNZ DEBUG MOV #RCVINT,@#34 ;CHECKOUT RECEIVE INT (TRAP) MOV #TRNINT,@#30 ;CHECKOUT TRANSMIT INT (EMT) .ENDC CLR R0 ;LET DC11 INTR ROUNTINES RUN AT ;CPU LEVEL 0 MOV R0,@#RVECTR+2 MOV R0,@#TVECTR+2 .IFNZ DEBUG MOV R0,@#36 MOV R0,@#32 — ;1/60 SECOND TICS MINUTE = 3600. ;TIMEOUT EACH MINUTE IN 1/60 SEC TICS ; ; HUB ERROR MESSAGE CODES ; ERR00 = "00 ;LOST RECEIVE CARRIER ERR01 = "01 ;NO ACK RECEIVED AFTER 8 TRYS ERR02 = "02 ;TIMEOUT WHILE WAITING FOR ACK/NAK ERR03 = "03 ;TIMEOUT WHILE WAITING FOR EOT ERR04 = "04 ;TIMEOUT WHILE WAITING FOR RECEIVE ;CARRIER AFTER˜,è×  ÕªÕ@§w €7ÚøðÕ€^, 0 ÷Uîã÷5èãüÀe7’àã÷U@Øãw âû,0އw ÎÀ¤ø° , Áelw’²ãJ,Tw º÷E@¤ã÷Ežã÷5”ãü÷xÌô÷ ÈôÃ,x÷5€ãù7 ºôðÅ€ãÀf Е7 ^å÷ q,œjˆ�7”Tå÷ ^Á¾ H”7”Få÷ PW Á øæ�§,À<ë÷•à6ëÁÖ H”7”(å÷ 2W Û ø·•뎇Ð,äˆ�7”å÷ Ð�åÐ�åЕÿÀåf 7\õއî,   ‡w òÀ8  H È È $÷w Ô,,ä™= . CMP #INITL,SWITCH BEQ DEM048 IOT ;TYPE MSG00 .WORD MSG00 .BYTE WRITE,TTYSLT MOV #589.,TTIBUF ;PUT MAX CHAR TO INPUT IN BUF HDR BICB #002,TTIBUF+MODEBF ;SET INPUT MODE TO FORMATTED ASCII IOT ;GET "Y" OR "N" RESPONSE .WORD TTIBUF .BYTE READ,KBDSLT DEM010 = . TSTB TTIBUF+STATUS ;IS INPUT DONE? BPL DEM0š .ENDC MOV #BR6,R0 MOV R0,@#CVECTR+2 MOV #STACK,SP ;SET STACK POINTER IOT ;RESET IOX .WORD 0 .BYTE RESET,0 IOT ;SET RESTART ADDRESS .WORD DEMO .BYTE RESTRT,0 IOT ;INIT LSR .WORD LSR .BYTE INIT,LSRSLT MOV #LENGTH!RSPEED,RCSR ;SET DC11 RECEIVER CHAR LENGTH › TRANSMITTING ; ; MESSAGE ACTION CODES ; AUTOTR = 030061 ;ASCII 01 AUDTRL = 030062 ;ASCII 02 AUDERR = 030066 ;ASCII 06 MANUAL = 030064 ;ASCII 04 CONTIN = 030067 ;ASCII 07 ; ; SPECIAL CHAR IN MSG FOR TERMINAL DEVICE SELECTION ; R035 = 062 ;ASCII CODE FOR R0-35 SELECTION ASR33 = 061 ;ASCII CODE FOR ASR-33 SELECTION ; ; EQUATE PARAMETERS FOR CPœø øw Ì÷03ð w À÷04ðw ´,P´÷02üï÷E¢â7Šz÷7Šœâ÷U@”âw ¢‡w ,t�÷ÈóÀÙ ¢9ˆŠw †‡È•0¨5û,˜öÈ•0¨3ð¬ÿÿ2¢9éÈ•0À å�,¼ð•0ÿÿÈ•0àÔ• Å ü‡B— ÿÿCD“”,àÄ ýö…CD×¢ פ0Õ …ƒ Ä õEv$…&æ¦f&MÖ €�‚ƒ„…ó�10 BISB #002,TTIBUF+MODEBF ;SET INPUT MODE TO UNFORMATTED ASCII CMPB TTIBUF+DATA,#'Y ;YES, IS IT "Y"? BNE DEM020 ;NO IOT ;READ PUNCHED TAPE .WORD TTIBUF .BYTE READ,LSRSLT BR DEM030 DEM020 = . ;READ KBD IOT .WORD TTIBUF .BYTE READ,KBDSLT DEM030 = . TSTB TTIBUF+STATUS ;IS INPUT DONE? BPL DEM030 ž ;AND SPEED MOV #STOPCD!TSPEED,TCSR ;SET DC11 TRANSMITTER STOP CODE ;AND SPEED DEM005 = . CMP #INITL,SWITCH BEQ DEM048 IOT ;TYPE MSG00 .WORD MSG00 .BYTE WRITE,TTYSLT CLR TTIBUF+MODEBF ;SET INPUT MODE TO FORMATTED ASCII IOT ;GET "Y" OR "N" RESPONSE .WORD TTIBUF .BYTE READ,KBDSLT DEM010 = Ÿ DATA FORMAT ; TAB = 11 FORM = 14 CARNO = 19. ;CARRIER NUMBER CARSZ = 4 ;CARRIER SIZE CUST = 35. ;CUSTOMER NO. CUSTSZ = 7. ;NO. CHAR. IN CUSTOMER NUMBER DRNO = 51. ;DRIVER NO. DRSZ = 3 ;NO. CHAR. FLOW1 = 66. ;FLOW METER PRODUCT 1 FLOW2 = 73. ;FLOW METER PRODUCT 2 FLOW3 = 80. ;FLOW ME¡;NO DEM035 = . MOV #TIMER,R0 ;RESET TIMERS DEM040 = . CLR (R0)+ TST (R0)+ CMP R0,#TIMEND BLT DEM040 BICB #002,TTIBUF+MODEBF ;SET INPUT MODE TO FORMATTED ASCII IOT ;TYPE "DA: " .WORD MSG04 .BYTE WRITE,TTYSLT IOT ;GET 6 CHAR DATE MMDDYY .WORD DABUF .BYTE READ,KBDSLT IOT ¢. TSTB TTIBUF+STATUS ;IS INPUT DONE? BPL DEM010 MOV #000202,TTIBUF+MODEBF ;SET INPUT MODE TO UNFORMATTED ASC MOV #586.,TTIBUF+COUNT ;NO. CHARS TO BYTE COUNT CMPB TTIBUF+DATA,#'Y ;YES, IS IT "Y"? BNE DEM020 ;NO IOT ;READ PUNCHED TAPE .WORD TTIBUF .BYTE READ,LSRSLT BR DEM030 DEM020 = . ;READ KBD IOT .WORD TTIB£TER PRODUCT 3 FLOW4 = 87. ;FLOW METER PRODUCT 4 FLOWSZ = 6 ;NO. CHAR. IN FLOW METER DATA T1 = 136. ;TEMP OF PRODUCT 1 T2 = 140. ;TEMP OF PRODUCT 2 T3 = 144. ;TEMP OF PRODUCT 3 T4 = 148. ;TEMP OF PRODUCT 4 TEMPSZ = 3 ;NO. CHAR. IN TEMP ; ; MISCELLANEOUS SYMBOLS ; STX = 002 ;START OF TEXT ETX = 003 ¤¿0¿ ±Œ:�*€’¦ºÏäù"7ACME OIL COMPANY ²*¤ AJAX OF CALIFORNIA ALPHA OIL CORP!*ÈORATION63321 SO. SEVENTH 12255 FO�*ìURTH STREET P.O. BOX 1234 SAì*N DIEGO, CALIF. LOS ANGELES, CALIFü*4 SANTA FE SPRINGS, CAL01020304REGUþ*XLAR PREMIUM DIESEL NO. 2 FUEL*| 0000 *  COLL w*Ä ¥ ;TYPE "TI: " .WORD MSG05 .BYTE WRITE,TTYSLT IOT ;GET 4 CHAR TIME HHMM .WORD TIBUF .BYTE READ,KBDSLT DEM045 = . TSTB TIBUF+STATUS ;IS INPUT DONE? BPL DEM045 ;NO MOV #MINUTE,TIMDAY ;SET TIME OF DAY TIMER DEM048 = . CLRB MODE ;SET RECEIVE MODE TO EXPECT RING BIS #ENABLE,LKS ;ENABLE REAL-TIME CLOCK CLRB RBUF ¦UF .BYTE READ,KBDSLT DEM030 = . TSTB TTIBUF+STATUS ;IS INPUT DONE? BPL DEM030 ;NO DEM035 = . MOV #TIMER,R0 ;RESET TIMERS DEM040 = . CLR (R0)+ TST (R0)+ CMP R0,#TIMEND BLT DEM040 CLR TTIBUF+MODEBF ;SET INPUT MODE TO FORMATTED ASCII IOT ;TYPE "DA: " .WORD MSG04 .BYTE WRITE,TTYSLT IO§ ;END OF TEXT ETB = 027 ;END OF TRANSMISSION BLOCK EOT = 004 ;EOT - LINE TURNAROUND ACK = 006 ;ACKNOWLEDGE NAK = 025 ;NEGATIVE ACKNOWLEDGE NUL = 000 ;NULL CHARACTER FF = 377 ;HEX "FF" INITL = 111111 ;CONSOLE SWITCH PATTERN TO BYPASS ;DEFINITION OF EOD REPORT .PAGE ; ; PROGRAM DATA ; ; ¨ X0*èXXX CONSOLIDATED CARRIERS X7* XX 00000 MMDDYYHHMM GEé*0&ES TERMINAL 0000 ~*T 00000049 XX l*x XXXXXX XXX XX ›*œ XXXXXX XXö*ÀX XX *ä XXXXXX XXX XX /* XXXXXX XXX @*, © ;CLEAR DC11 RECEIVE BUFFER BEFORE ENABLE BIS #ENABLE,RCSR ;ENABLE DC11 RECEIVE INTERRUPT CLR INTCNT ;CLEAR INTERRUPT COUNT (FOR CHECKOUT) CLRB PS ;ALLOW DC11 INTERRUPTS DEM050 = . .IFZ DEBUG WAIT ;IDLE!! BR DEM050 .ENDC .PAGE .IFNZ DEBUG ;* ;* SIMULATED DC11 CHECKOUT. THIS SECTION CAUSES THE LOGIC ;* EXPECTED FROM THE DC11ªT ;GET 6 CHAR DATE MMDDYY .WORD DABUF .BYTE READ,KBDSLT IOT ;TYPE "TI: " .WORD MSG05 .BYTE WRITE,TTYSLT IOT ;GET 4 CHAR TIME HHMM .WORD TIBUF .BYTE READ,KBDSLT DEM045 = . TSTB TIBUF+STATUS ;IS INPUT DONE? BPL DEM045 ;NO MOV #DATEAS,R0 ;GET DATE INTO END OF DAY REPORT MOV #TTIBUF+« .IFZ DOS . = 400 .ENDC . = .+200 STACK = . ;SYSTEM STACK AR(A .IFNZ DEBUG RCSR: .WORD 0 ;DC11 RECEIVE AND RBUF: .WORD 0 ; TRANSMIT BUFFERS TCSR: .WORD 0 ; FOR DEMO CHECKOUT TBUF: .WORD 0 ; WITHOUT DC11 H/W AND CP CLRBCC: .WORD 0 ;CLEAR BCC BCCOUT: .WORD 0 ;BCC OUTPUT REGISTER BCCMSB: .WORD 123 ¬ P.O. BOX G*P608 SAN DIEGO, CALIF ESG @L*tZ{[lP}M]\Nk`Kaðñòóôõö÷øùz^L~no|ÁÂÃÄ*˜ÅÆÇÈÉÑÒÓÔÕÖרÙâãäåæçèé AUDIT TRR*¼AIL JUST ENTERED IS ERRONEOUS! MANU«!àAL ENTRY ACCEPTED! *ü6 IS END OF DAY REPORT TO BE Ew* NTERED ON PUNCHED TAPE?  TRANüDSMISSION ERROR !Ý*X" ERRONEOUS ACTION CODE RECEIÒ*|VED! ERROR IN AUDIT TRAIL!†­ AND CP. THE SIMULATED INPUT MESSAGE ;* IS RETRIEVED FROM THE OPERATOR DEFINED EOD REPORT. ;* $DC11 = . MOV #RING!ERROR,RCSR ;SET RING STATUS (HELLO?) TRAP ; AND SIMULATE DC11 INTERRUPT MOV #CARTRN!ERROR!DETECT,RCSR ;NOW, CARRIER TRANSITION TRAP ;AND CARRIER DETECT MOV #DONE,RCSR MOV #STX,RBUF ;ALWAYS NEED STX TRAP MO®60.,R1 MOV (R0)+,(R1)+ MOV (R0)+,(R1)+ MOV (R0)+,(R1)+ MOV #MINUTE,TIMDAY ;SET TIME OF DAY TIMER DEM048 = . CLRB MODE ;SET RECEIVE MODE TO EXPECT RING BIS #ENABLE,LKS ;ENABLE REAL-TIME CLOCK CLRB RBUF ;CLEAR DC11 RECEIVE BUFFER BEFORE ENABLE BIS #ENABLE,RCSR ;ENABLE DC11 RECEIVE INTERRUPT CLR INTCNT ;CLEAR INTERRUPT COUNT (FOR CHECKOUT) ¯ ;MSB OF RESULTING BCC BCCLSB: .WORD 345 ;LSB OF RESULTING BCC .ENDC ; ; CUSTOMER AND PRODUCT TABLES ; ALPHA1: .WORD NAME1,NAME2,NAME3 ;POINTER TO CUSTOMER NAME ALPHA2: .WORD ADDR1,ADDR2,ADDR3 ;POINTER TO CUSTOMER ADDRESS ALPHA3: .WORD CITY1,CITY2,CITY3 ;POINTER TO CUSTOMER CITY NAME1: .ASCII 'ACME OIL COMPANY ' NAME2: .ASCII 'AJAX OF CALIFORNIA ' NAME3: .ASCII 'ALPHA OIL CORPORATION' ADDR1: .ASCII '63321 SO. SEVENTH°"  DA:  TI: JÜ å8 N6Br ` ‰# MMDDYY HHMM ‚*à ÷•€óß„ßàß®ßà Š* ßA"ß 0ß 2ßÈ4ß 6÷@*( :â÷ „÷0â÷ z÷&â÷ p÷â÷ fS*L ßVÀß4Äß@ ÂÆÀÀB*p Æ€ä ®÷tê÷rê÷%7*” I’àñAü 7 ø¶ ÷‹ øý€÷‚ø÷Š*¸ Jþ÷×­ü÷Y¶ ¶ ÷‹ã÷ý€À8 ±V #TTIBUF+DATA,R0 ; $DC11A = . MOV #DONE,RCSR ;SET CHARACTER READY STATUS MOVB (R0)+,RBUF ;GET NEXT CHARACTER CMPB RBUF,#7 ;IS IT A BELL (END OFMESSAGE) BEQ $DC11B ;YES MOV R0,-(SP) ;SAVE ADDRESS TRAP ;SIMULATE MOV (SP)+,R0 BR $DC11A ;GO BACK FOR MORE ; $DC11B = . MOV #E² CLRB PS ;ALLOW DC11 INTERRUPTS DEM050 = . .IFZ DEBUG WAIT ;IDLE!! BR DEM050 .ENDC .PAGE .IFNZ DEBUG ;* ;* SIMULATED DC11 CHECKOUT. THIS SECTION CAUSES THE LOGIC ;* EXPECTED FROM THE DC11 AND CP. THE SIMULATED INPUT MESSAGE ;* IS RETRIEVED FROM THE OPERATOR DEFINED EOD REPORT. ;* $DC11 = . MOV #RING!ERROR,RCSR ;SET RING STATUS (HELLO?) ³ ' ADDR2: .ASCII '12255 FOURTH STREET ' ADDR3: .ASCII 'P.O. BOX 1234 ' CITY1: .ASCII 'SAN DIEGO, CALIF. ' CITY2: .ASCII 'LOS ANGELES, CALIF ' CITY3: .ASCII 'SANTA FE SPRINGS, CAL' .EVEN KODE1: .ASCII '01' KODE2: .ASCII '02' KODE3: .ASCII '03' KODE4: .ASCII '04' PRNAM1: .ASCII 'REGULAR ' PRNAM2: .ASCII 'PREMIUM ' PRNAM3: .ASCII 'DIESEL ' PRNAM4: .ASCII 'NO. 2 FUEL' PRSZ = 10. .PAGE ;* ;* D U M M Y I N V O´t*Ü  Ð  H û7 Î÷ž  ª Ð >* ÷‹Íþý€ÀÈ Áò÷(û7мþ÷U@»*$@ñ7ŠØé÷U@Ðé7 ®þ7ŠÆñ ÷ ÷ü8 â*H÷‹ïöý€7 ÷óòw ¬· „þÅžé�À�tþ }*lÀ xrþ \v𸸸¸w †Ä�µ*�Jþ ¡Å5@#·Š9þÄ�ZéïÅ5 ì÷UR*´Jé÷• þåÅ5@â÷56é ÷• þ7Šþ7 4*Ørú7Š$é÷U@éÑ÷00hö÷E@é÷Eé7ŠàýI*üîÄ�é¡7 ìê÷•ÊýºÅ5 ··Š¿ýôâ* Å5€±Ä�Øè7Ìê¡¡ Àú uµTX,RBUF ;THAT'S ALL, FOLKS! TRAP MOV #123,RBUF ;DUMMY BCC TRAP MOV #345,RBUF TRAP MOV #377,RBUF ;AND THE GRAND FINALE TRAP MOV #17777,R1 ;DELAY FOR S/W TO RESPOND, ; ;SEND ACK (3 SEC DELAY) $DC11C = . DEC R1 BNE $DC11C MOV #EOT,RBUF ;SEND LINE TURNAROUND - EOT TRAP ; ¶ TRAP ; AND SIMULATE DC11 INTERRUPT MOV #CARTRN!ERROR!DETECT,RCSR ;NOW, CARRIER TRANSITION TRAP ;AND CARRIER DETECT MOV #DONE,RCSR MOV #STX,RBUF ;ALWAYS NEED STX TRAP MOV #TTIBUF+DATA,R0 ; $DC11A = . MOV #DONE,RCSR ;SET CHARACTER READY STATUS MOVB (R0)+,RBUF ;GET NEXT CHARACTER CMPB RBUF,#7 · I C E ;* INVOICE = . .BYTE CR .ASCII '000' SERNO1: .ASCII '0' .BYTE CR,LF,TAB,TAB,TAB .ASCII ' ' NAME: .ASCII ' COLL' .BYTE CR,LF,TAB,TAB,TAB .ASCII ' ' ADDRESS:.ASCII ' ' .BYTE CR,LF,TAB,TAB,TAB .ASCII ' ' CITY: .ASCII ' ' .BYTE CR,LF,LF,LF,LF CARRIER:.ASCII 'XXXX CONSOLIDATED CARRIERS ' DRIVER: .ASCII¸*D· ú0‘N �·Š‹ýü÷•‚ý–Ä�¢è7¡˜ê÷•É*hpýwÿ·ŠiýøÄ�ˆè7¡€ê·ŠYý÷E@vèw µ*ŒDX ¾ ÿÿ÷‹Cý÷•Äú÷•ÿ¿ú÷²úæŸ*°` ÷ D÷‹©úý�÷´zù÷•ýwÿ÷•”ú÷•¬*Ôÿ�ú÷‚úæ` ÷ ÷‹yúý�wÔþÄ�è¡”*øwŠþ÷E@üç7 4ù ÄÝEùÄÄÝ@ù!10!‡*20!60 !40 X ÷‹%õý€ww¤¿*@wÌw>ÄcÅ.÷ tÄ“Å.÷ hÄÃG*dÅ.÷ \ÄóÅ.÷ P·Šò·ŠÄò·Š›ò Á�h*ˆíøÁE€ÿÁå1W  Á w€w†w»*¹ ;NOW IT'S UP TO THE PROGRAM $DC11D = . ;TO SEND RESPONSE MESSAGE CMP SWITCH,#-1 BNE $DC11D BR $DC11 ;REPEAT WHEN SWITCHES = 177777 .ENDC .PAGE ; ; DC11 RECEIVE INTERRUPT ROUTINE ; RCVINT = . JSR R5,PUSHR ;SAVE REGS. INC INTCNT ;INCR INTERRUPT COUNT (FOR CHECKOUT) MOV RCSR,R5 ;IS RCSR ERROR Bº ;IS IT A BELL (END OFMESSAGE) BEQ $DC11B ;YES MOV R0,-(SP) ;SAVE ADDRESS TRAP ;SIMULATE MOV (SP)+,R0 BR $DC11A ;GO BACK FOR MORE ; $DC11B = . MOV #ETX,RBUF ;THAT'S ALL, FOLKS! TRAP MOV #123,RBUF ;DUMMY BCC TRAP MOV #345,RBUF TRAP MOV #377,RBUF » 'XXX' .BYTE TAB,TAB .ASCII ' 0000' NUMBER: .ASCII '0' .BYTE CR,LF,LF DATE: .ASCII 'MMDDYY' TIME: .ASCII 'HHMM GE&ES TERMINAL' .BYTE TAB .ASCII ' 000' SERNO2: .ASCII '0' .BYTE CR,LF,LF .ASCII ' ' CUSTNO: .ASCII ' 00000049' .BYTE CR,LF,LF,LF,LF CODE1: .ASCII 'XX ' PROD1: .ASCII ' ' VOL1: .ASCII 'XXXXXX ' TEMP1: .ASCII 'XXX' ¼¬Œw бÎa ç� Ÿ*Ðq Nÿÿæ� ï÷•àïw êÈ #Ö )›*ôÿÿ·•ïw ê� "w ÊLcTg � ‡c*Ö Žÿÿw — Jw ¢N“^— Ü*<— ·Ú ¾ÿÿw šž rw zPÃh³*`Ç ž çÞ îÿÿw r¥ šw RRó«*„r÷ ¥ â ÿÿæ2÷ ìÁ|£*¨úùH” ”÷ VW sùæ÷ $÷•û÷•û*Ìæ` ÷ &÷‹‹øý�÷hX÷wöüæ•1÷ ¢Á²ß*ðH”7”è÷ W Úø÷•Öúæ•÷ ÖÛÀ_ *¢.½IT SET? BMI RCV030 ;YES MOVB MODE,R0 ;NO, BRANCH ON RECEIVE MODE CMPB R0,#2 ;***** TEST MODE DURING CHECKOUT ******* BGE RCV005 BR RCV038 RCV005 = . ASL R0 JMP @RCV010-4(R0) ; ; BRANCH TABLE ; RCV010 = . .WORD RCV100 ;RECEIVE STX MODE = 2 .WORD RCV150 ;RECEIVE DATA = 3 .WORD RCV200 ¾;AND THE GRAND FINALE TRAP MOV #17777,R1 ;DELAY FOR S/W TO RESPOND, ; ;SEND ACK (3 SEC DELAY) $DC11C = . DEC R1 BNE $DC11C MOV #EOT,RBUF ;SEND LINE TURNAROUND - EOT TRAP ; ;NOW IT'S UP TO THE PROGRAM $DC11D = . ;TO SEND RESPONSE MESSAGE CMP SWITCH,#-1 BNE $DC11D BR ¿ .BYTE CR,LF CODE2: .ASCII 'XX ' PROD2: .ASCII ' ' VOL2: .ASCII 'XXXXXX ' TEMP2: .ASCII 'XXX' .BYTE CR,LF CODE3: .ASCII 'XX ' PROD3: .ASCII ' ' VOL3: .ASCII 'XXXXXX ' TEMP3: .ASCII 'XXX' .BYTE CR,LF CODE4: .ASCII 'XX ' PROD4: .ASCII ' ' VOL4: .ASCII 'XXXXXX ' TEMP4: .ASCII 'XXX' .BYTE CR,LF,LF,LF,LF,LF,LF,LF,LF .BYTE À6æ•1÷ lÁÚH”7”Îç÷ ØW òø÷•“*8  úä÷E¼å7Š”úò ÁúöÁåw°õÂH*\ À_ ’¤ Ò• · ˜õÁ ö ÷‹‰õ*€ý€wTüæ•1÷ Á¼Ã$óÃe¼H”7”Zç÷ dŒ*¤C ùæ•÷ 4÷• &ú‡÷E@BåÄ�@å¡!Ã*È7 löxÂæòØ>÷E"å7Šúùwôû÷EåB*ì7Šìù÷Eå7Šàù€ ÷‹}òý€Ÿ¡Û*wÆû7 ö÷ŠÂùwªþ÷01,òwÀûÀq ”× ¨*4 F× Z[ÅÅå C�sÄÃŒ‡ÁÄŒú0*XÑûp‘ÿÿ h å�Å ÷q öÛ÷ûêÛÅ ÷–*|äÛ÷ .ÅÁ ;RECEIVE BCC(MSB) = 4 .WORD RCV250 ;RECEIVE BCC(LSB) = 5 .WORD RCV320 ;RECEIVE EOT = 6 .WORD RCV700 ;RECEIVE ACK/NAK = 7 .WORD RCV700 ;RECEIVE ACK/NAK = 8 .WORD RCV700 ;RECEIVE ACK/NAK = 9 .WORD RCV700 ;RECEIVE ACK/NAK = 10 ; RCV020 = . JSR R5,POPR ;RESTORE REGS.Â$DC11 ;REPEAT WHEN SWITCHES = 177777 .ENDC .PAGE ; ; DC11 RECEIVE INTERRUPT ROUTINE ; RCVINT = . JSR R5,PUSHR ;SAVE REGS. INC INTCNT ;INCR INTERRUPT COUNT (FOR CHECKOUT) MOV RCSR,R5 ;IS RCSR ERROR BIT SET? BMI RCV030 ;YES MOVB MODE,R0 ;NO, BRANCH ON RECEIVE MODE CMPB R0,#2 ;***** TEST MODE DURING CHECKOUT ******* à LF,LF,LF,LF,LF,LF,LF,LF,LF .BYTE LF,LF,LF,LF,LF,LF,LF,LF,LF .BYTE LF,LF,LF,LF,LF,LF,LF,LF,LF .ASCII ' P.O. BOX 608' .BYTE CR,LF .ASCII 'SAN DIEGO, CALIF ESG' .BYTE FORM INVEND = . ; ; ASCII TO EBCDIC CONVERSION TABLE ; EBCDIC = . .BYTE 100,132,177,173,133,154,120,175,115,135 .BYTE 134,116,153,140,113,141,360,361,362,363 .BYTE 364,365,366,367,370,371,172,136,114,176 Ä ÷ÔÛ÷ ÷5ÈÛw¨þ”* ÷E¼Û÷€¸Û÷ ÜÄÄ þß5€bïü‡#*Ä×  Õ¼×  Õ%¶×  ð€*è×  ÕªÕ@§w €7ÚøðÕ€c* 0 ÷Uîã÷5èãüÀe7’àã÷U@Øãw â*0އw ÎÀ¤ø° , Áelw’²ãO*Tw º÷E@¤ã÷Ežã÷5”ãü÷xÌô÷ ÈôÈ*x÷5€ãù7 ºôðÅ€ãÀf Е7 ^å÷ v*œjˆ�7”Tå÷ ^Á¾ H”7”Få÷ PW Á øæ�¬*À<ë÷•à6ëÁÖ H”7”(å÷ 2W Û ø·•뎇Õ*äˆ�7”å÷ Ð�åÅ RTI ;RETURN ; ; ERROR BIT PROCESSING ; RCV030 = . MOVB MODE,R4 ;BRANCH ON MODE BEQ RCV040 ;RING CMPB R4,#1 ;EXPECTING CARRIER TRANS. AFTER RING? BEQ RCV050 ;YES CMPB R4,#6 ;EXPECTING CARRIER TRANS. FOR EOT,ACKNAK BLT RCV035 ;NO CMPB R4,#10. ;MAYBE BLE RCV050 ;YES RCV035 = . Æ BGE RCV005 BR RCV038 RCV005 = . ASL R0 JMP @RCV010-4(R0) ; ; BRANCH TABLE ; RCV010 = . .WORD RCV100 ;RECEIVE STX MODE = 2 .WORD RCV150 ;RECEIVE DATA = 3 .WORD RCV200 ;RECEIVE BCC(MSB) = 4 .WORD RCV250 ;RECEIVE BCC(LSB) = 5 .WORD RCV320 ;RECEIVE EOT = 6 .WORD Ç .BYTE 156,157,174,301,302,303,304,305,306,307 .BYTE 310,311,321,322,323,324,325,326,327,330 .BYTE 331,342,343,344,345,346,347,350,351 .EVEN ; ; DEVICE CODES FOR IOX USAGE ; LSR: .WORD 3 LSP: .WORD 4 ; ; MESSAGES TO BE OUTPUT TO TERMINAL ; TMSG00 = . .BYTE CR,LF .ASCII /AUDIT TRAIL JUST ENTERED IS ERRONEOUS!/ TMSG01 = . .BYTE CR,LF .ASCII /MANUAL ENTRY ACCEPTED!/Ð�åЕÿÀåf 7\õއó*   ‡w òÀ8  H È È $÷w Ù*,äø øw Ì÷03ð w À÷04ðw ¹*P´÷02üï÷E¢â7Šz÷7Šœâ÷U@”âw ¢‡w *t�÷ÈóÀÙ ¢9ˆŠw †‡È•0¨5*˜öÈ•0¨3ð¬ÿÿ2¢9éÈ•0À å¢*¼ð•0ÿÿÈ•0àÔ• Å ü‡B— ÿÿCD“”*àÄ ýö…CD×¢ פ0Õ …ƒ Ä õE{"…&æ¦f&MÖ €�‚ƒ„… øÉ BIT #CARTRN,R5 ;OTHER, HAVE WE LOST RECEIVE CARRIER? BNE RCV080 ;YES INCB RCVERR ;NO, INCR RECEIVE ERROR COUNT RCV038 = . MOVB RBUF,R4 ;CLEAR RCSR DONE BIT TO PREVENT OVERRUN BR RCV020 ;GO RETURN ; ; PROCESS A RING ; RCV040 = . BIT #RING,R5 ;IS IT A RING? BEQ RCV020 ;NO, IGNORE INTERRUPT BIS #DTRDY,RCSR ;SET DATÊRCV700 ;RECEIVE ACK/NAK = 7 .WORD RCV700 ;RECEIVE ACK/NAK = 8 .WORD RCV700 ;RECEIVE ACK/NAK = 9 .WORD RCV700 ;RECEIVE ACK/NAK = 10 ; RCV020 = . JSR R5,POPR ;RESTORE REGS. RTI ;RETURN ; ; ERROR BIT PROCESSING ; RCV030 = . MOVB MODE,R4 ;BRANCH ON MODE BEQ RCV040 ;RING Ë TMSG02 = . ; ; HUB TELETYPE MESSAGES ; .EVEN CRLFLF: .WORD 0 .BYTE 0,0 .WORD 3 .BYTE CR,LF,LF .EVEN MSG00: .WORD 0 .BYTE 0 .BYTE 0 .WORD 54. .BYTE CR,LF .ASCII 'IS END OF DAY REPORT TO BE ENTERED ON PUNCHED TAPE? ' .EVEN MSG01: .WORD 0 .BYTE 0 .BYTE 0 .WORD 25. .BYTE CR,LF .ASCII /TRANSMISSIOÌÂÜùÄÎ* šÖùD · Ôù¼‚€Á &C@AƒEPA&f¦¸*Dšæw „€w ’À/w –€w :ƒ‚�„w *hšÐÒ Û åƒ`ƒ ƒ Å ßÀEÿ�¯À € € A,Œš€` Õ÷‹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ÄôžÃõžÍA TERMINAL READY MOVB #1,MODE ;SET MODE TO EXPECT CARRIER TRANSITION BR RCV020 ;GO RETURN ; ; PROCESS CARRIER TURNON ; RCV050 = . BIT #CARTRN,R5 ;IS INT. A CARRIER TRANSITION? BEQ RCV020 ;NO, IGNORE INTERRUPT RCV060 = . BIT #DETECT,RCSR ;IS CARRIER DETECT ON? BEQ RCV080 ;NO CMPB R4,#1 ;YES, IS IT CARRIER DETECT AFTER RING? BGÎ CMPB R4,#1 ;EXPECTING CARRIER TRANS. AFTER RING? BEQ RCV050 ;YES CMPB R4,#6 ;EXPECTING CARRIER TRANS. FOR EOT,ACKNAK BLT RCV035 ;NO CMPB R4,#10. ;MAYBE BLE RCV050 ;YES RCV035 = . BIT #CARTRN,R5 ;OTHER, HAVE WE LOST RECEIVE CARRIER? BNE RCV080 ;YES INCB RCVERR ;NO, INCR RECEIVE ERROR COUNT RCV038 = ÏN ERROR / MSG01F: .ASCII / !/ .EVEN MSG02: .WORD 0 .BYTE 0 .BYTE 0 .WORD 34. .BYTE CR,LF,LF .ASCII /ERRONEOUS ACTION CODE RECEIVED!/ .EVEN MSG03: .WORD 0 .BYTE 0 .BYTE 0 .WORD 24. .BYTE CR,LF,LF .ASCII /ERROR IN AUDIT TRAIL!/ .EVEN MSG04: .WORD 0 .BYTE 0,0 .WORD 6 .BYTE CR,LF .ASCII /DA: / Ðw ,Ž›ž@÷eZø%Ä•t”7‘2ô $”ªô$”**´›w „ÀBw .À�Àe`€ w À;w ÷ß*Ø›ðÄ�ú”w úwîû·â·ü÷Æð“f&ü*ü›æ¦fæÌæ €Ö ·Â�‚ƒ„…ÆÒ÷æÂ. œ°€Ä4”6”üü”Ä Ä ÷…÷�0c™÷�.c”ã,Hœ7Š$c7Š$c÷‹ cý€…w r÷‹cý€÷5c÷‹cc*nœý€÷�gúb÷�bøb…÷‹V  <6””„ „ !*’œø…ÃÄþÿ÷%&Ãå„ À&Äe»*¶œ N @ Ä üÀe0w &à óÀ• Ö Á”À�*Úœÿÿ …÷‹‚bý€7�~b…÷‹rbÑT RCV065 ;NO MOVB #2,MODE ;SET RECEIVE MODE TO EXPECT STX RCV065 = . CLRB RCVERR ;ZERO ERROR COUNT CLR RCVBUF+COUNT ;ZERO CHAR COUNT RCV070 = . CLRB RBUF ;INSURE RCSR DONE BIT CLEARED! BIS #ENABLE,RCSR ;ENABLE DC11 RECEIVE INT. BR RCV020 ;GO RETURN ; ; LOST RECEIVE CARRIER ; RCV080 = . MOV #ERR00,MSG01F ;PUT ERROR CODE Ò . MOVB RBUF,R4 ;CLEAR RCSR DONE BIT TO PREVENT OVERRUN BR RCV020 ;GO RETURN ; ; PROCESS A RING ; RCV040 = . BIT #RING,R5 ;IS IT A RING? BEQ RCV020 ;NO, IGNORE INTERRUPT BIS #DTRDY,RCSR ;SET DATA TERMINAL READY MOVB #1,MODE ;SET MODE TO EXPECT CARRIER TRANSITION BR RCV020 ;GO RETURN ; ; PROCESS CARRIER TURNON ; RCV050 = Ó .EVEN MSG05: .WORD 0 .BYTE 0,0 .WORD 6 .BYTE CR,LF .ASCII /TI: / .EVEN ; ; HUB TELETYPE BUFFERS ; TTIBUF: .WORD 586. ;MAX NO. CHARS TO INPUT .BYTE 0 ;MODE - FORMATED ASCII .BYTE 0 ;STATUS .WORD 0 ;NO. OF CHARS INPUT . = .+586. ;DATA TTOBUF: .WORD 0 ;UNUSED .BYTE 0 ;MODE - FORMÔw*þœý€À�nbÀE€ÿÀ¥÷‹Ð  w Ðÿí÷‹­*"�¾À¥ ç…Ä ã‡•w ¶ÿú×­4b• À•^Û*F�w ¤ÿÀ•Uw œÿÆä“w€ú… ÷ÿÿn÷ÿÿjJ*j�  ‚7,”X‚ÁRì”Á-P‚Ð ðÀD·*Ž�…w@€ 78À ô÷%(!ùƒ… �„ Ð,²�ú ÷%‚??‘‡ÃÿžÃŸP*Ø�Äþžw Nÿ…÷%öw ªþ…÷Ú778*ü�Ðw ZÿÀ Àe0w àþÀ,w Øþæ²÷¬1* žÀ°w pþ· ÷ÊœÀÆ…ÀÀ÷ºŒÓÃ*DžÄýÿ C”Ã¥ Ã¥$ × A‡Ãå ÃåÃå§Õ"00" IN ERROR MSG RCV090 = . BIC #ENABLE,RCSR ;DISABLE DC11 INTERRUPTS BIC #DTRDY,RCSR ;RESET DATA TERMINAL READY CLRB MODE ;SET RECEIVE MODE TO EXPECT RING IOT ;TYPE - "TRANSMISSION ERROR XX!" .WORD MSG01 .BYTE WRITE,TTYSLT RCV095 = . TSTB MSG01+STATUS BPL RCV095 BR RCV070 ;GO ENABLE RECEIVE INTERRUPT ; ; PROCESS STX ; Ö. BIT #CARTRN,R5 ;IS INT. A CARRIER TRANSITION? BEQ RCV020 ;NO, IGNORE INTERRUPT RCV060 = . BIT #DETECT,RCSR ;IS CARRIER DETECT ON? BEQ RCV080 ;NO CMPB R4,#1 ;YES, IS IT CARRIER DETECT AFTER RING? BGT RCV065 ;NO MOVB #2,MODE ;SET RECEIVE MODE TO EXPECT STX RCV065 = . CLRB RCVERR ;ZERO ERROR COUNT CLR RCVBUF+C×ATTED ASCII .BYTE 0 ;STATUS .WORD 0 ;NO. OF CHARS TO BE OUTPUT . = .+300. ; ; TIMERS ; TIMER = . ACKTMR: .WORD 0 ;ACK TIMER .WORD ACKTO EOTTMR: .WORD 0 ;EOT TIMER .WORD EOTTO CARTMR: .WORD 0 ;CARRIER TIMER AFTER TRANSMITTING .WORD CARTO TIMDAY: .WORD 0 ;TIME OF DAY TIMER .WORD UPTIME TIMEND = . ; .hž Ãå    ¦  ‚eÂ`„ ä�‡ÅýÿÂÆž‹*�ž ‡€âƒ ûË× Ãe ÃeÃe O´žÃe Ñ�Ò … è€Ð ‡@(?*Ξ ODT-11R V00 òž2ABEh*úž *;/\ $G _<^,OWEBP@>SRC-FI!XASàŸPMCFRBs.Ÿ'*ä“ÿÿÿÿÿÿ]”ÿÿÿÿÿÿÿÿÿÿ]øÙRCV100 = . MOVB RBUF,R4 CMPB R4,#STX BNE RCV120 RCV110 = . CLR CLRBCC ;CLEAR BCC REGISTER MOVB #3,MODE ;SET RECEIVE MODE TO EXPECT DATA BR RCV020 ;GO RETURN RCV120 = . BIT #PARITY,R5 ;IS PARITY GOOD? BEQ RCV020 ;YES, IGNORE INTERRUPT INCB RCVERR ;NO, INCR ERROR COUNT BR RCV110 ;ASSUME IT WAS SÚOUNT ;ZERO CHAR COUNT RCV070 = . CLRB RBUF ;INSURE RCSR DONE BIT CLEARED! BIS #ENABLE,RCSR ;ENABLE DC11 RECEIVE INT. BR RCV020 ;GO RETURN ; ; LOST RECEIVE CARRIER ; RCV080 = . MOV #ERR00,MSG01F ;PUT ERROR CODE "00" IN ERROR MSG RCV090 = . BIC #ENABLE,RCSR ;DISABLE DC11 INTERRUPTS BIC #DTRDY,RCSR ;RESET DATA TERMINAL READY CLRB MODE Û ; HUB/TERMINAL INPUT/OUTPUT MESSAGE BUFFERS ; RCVBUF = . ;RECEIVE BUFFER .WORD 273. ;MAXIMUM NUMBER OF CHARACTERS .BYTE 0 ;UNUSED .BYTE 0 ;STATUS .WORD 0 ;NO. OF DATA CHARACTERS RECEIVED . = .+273. .EVEN ; TRNBUF = . ;TRANSMIT BUFFER .WORD 0 ;NO. OF DATA CHARACTERS TO BE TRANSMITTED .BYTE 0 ÜŸ0Ÿ ±Œ:Ð*,>Rf{�¥ºÎãACME OIL COMPANY ý*P AJAX OF CALIFORNIA ALPHA OIL CORPu*tORATION63321 SO. SEVENTH 12255 FOä*˜URTH STREET P.O. BOX 1234 SA@*¼N DIEGO, CALIF. LOS ANGELES, CALIFQ*à SANTA FE SPRINGS, CAL051072010203»*REGULAR PREMIUM LOW LEAD 0000 œ*( CO4*LLL ‹*p ÝTX W/BAD PARITY ; ; PROCESS DATA CHAR ; RCV150 = . BIT #DONE,R5 ;IS CHAR AVAIL? BEQ RCV020 ;NO, FALSE INTERRUPT MOVB RBUF,R4 ;GET CHAR MOV R4,BCCOUT ;OUTPUT CHAR TO BCC REGISTER CMPB R4,#ETX ;IS CHAR AN ETX? BEQ RCV180 ;YES CMPB R4,#ETB ;IS CHAR AN ETB? BEQ RCV180 ;YES INC RCVBUF+COUNT ;INCR CHAR COUNT IÞ;SET RECEIVE MODE TO EXPECT RING IOT ;TYPE - "TRANSMISSION ERROR XX!" .WORD MSG01 .BYTE WRITE,TTYSLT RCV095 = . TSTB MSG01+STATUS BPL RCV095 BR RCV070 ;GO ENABLE RECEIVE INTERRUPT ; ; PROCESS STX ; RCV100 = . MOVB RBUF,R4 CMPB R4,#STX BNE RCV120 RCV110 = . CLR CLRBCC ;CLEAR BCC REGISTER MOVB #3,Mß ;UNUSED .BYTE 0 ;STATUS .WORD 0 ;RESERVED FOR USE BY TRNINT ROUTINE . = .+600. ; ; JULIAN DATE FROM TERMINAL SAVED HERE ; JULDAY = . ;JULIAN DATE FROM LAST MSG RECEIVED . = .+3 JULEND = . ; ; DATE AND TIME AT HUB ; .EVEN DABUF: .WORD 8. .BYTE 0,0 .WORD 0 DATEAS: .ASCII /MMDDYY / TIBUF: .WORD 6 .BYTE 0,0 à XXXX CO*”NSOLIDATED CARRIERS XXX C*¸ 00000 MMDDYYHHMM GE&ES TEÉ*ÜRMINAL 0000 0000J*0049 XX *$ XXXXXX XXX XX ï*H XXXXXX XXX XX Ë*l XXX>*�XXX XXX í*´ P.O. BOX 608 SAN DIEGO, CA…ØLIF ESG áN BUFFER HEADER MOV RCVBUF+COUNT,R0 ;GET COUNT CMP R0,#273. ;IS DATA CHAR COUNT .GT. 273? BGT RCV170 ;YES MOVB R4,RCVBUF+DATA-1(R0) ;PUT DATA INTO BUFFER RCV160 = . BR RCV020 ;GO RETURN ; RCV170 = . INCB RCVERR ;INCR ERROR COUNT BR RCV160 ;GO RETURN ; ; PROCESS ETX/ETB ; RCV180 = . MOVB #4,MODE ;SET MODE FOâODE ;SET RECEIVE MODE TO EXPECT DATA BR RCV020 ;GO RETURN RCV120 = . BIT #PARITY,R5 ;IS PARITY GOOD? BEQ RCV020 ;YES, IGNORE INTERRUPT INCB RCVERR ;NO, INCR ERROR COUNT BR RCV110 ;ASSUME IT WAS STX W/BAD PARITY ; ; PROCESS DATA CHAR ; RCV150 = . BIT #DONE,R5 ;IS CHAR AVAIL? BEQ RCV020 ;NO, FALSE INTERRUPT MOVBã .WORD 0 TIMEAS: .ASCII /HHMM / ; ; PROGRAM VARIABLES ; MODE: .BYTE 0 ;RECEIVE MODE ; WHERE 0 = EXPECTING RING ; 1 = EXPECT CARRIER TRANSITION ; 2 = EXPECT STX ; 3 = EXPECT DATA ; 4 = EXPECT BCC(MSB) ; 5 = EXPECT BCC(LSBä*ê AUDIT TRAIL JUST ENTERED IS ER·*RONEOUS!6 IS END OF DAY REPORTè%2 TO BE ENTERED ON PUCHED TAPE? Ô%R TRANSMISSION ERROR !_*r" ERRONEOUS ACTION CODE RECEIVm –ED!²*š ERROR IN AUDIT TRAIL! P¾5 Ôv žŠ – S œ 000203&*© ßV ÀßÊÄßd@À ÂÆR*Í BÆ,® êì÷åR RECEIVING BCC(MSB) BR RCV020 ;GO RETURN ; ; PROCESS MOST SIG. BYTE OF BCC ; RCV200 = . MOVB RBUF,R4 CMPB R4,BCCMSB ;DOES IT MATCH? BNE RCV210 ;NO RCV205 = . MOVB #5,MODE ;YES, SET MODE FOR RECEIPT OF BCC(LSB) JMP RCV020 ;GO RETURN RCV210 = . INCB RCVERR ;INCR ERROR COUNT BR RCV205 ;GO SET MODE ; ; æ RBUF,R4 ;GET CHAR MOV R4,BCCOUT ;OUTPUT CHAR TO BCC REGISTER CMPB R4,#ETX ;IS CHAR AN ETX? BEQ RCV180 ;YES CMPB R4,#ETB ;IS CHAR AN ETB? BEQ RCV180 ;YES INC RCVBUF+COUNT ;INCR CHAR COUNT IN BUFFER HEADER MOV RCVBUF+COUNT,R0 ;GET COUNT CMP R0,#273. ;IS DATA CHAR COUNT .GT. 273? BGT RCV170 ;YES MOVB R4,RCVBUF+ç) ; 6 = EXPECT EOT ; 7 = EXPECT ACK/NAK AFTER ; SENDING ; 8 = SAME ; 9 = SAME ; 10 = SAME RCVERR: .BYTE 0 ;RECEIVE ERROR COUNT REPEAT: .BYTE 0 ;NO. OF TRYS TO TRANSMIT TO TERMINAL .EVEN CURBUF: .WORD 0 èÆ*ñ ë÷ ë÷%I’zò ÷X®÷º ÷‹§1* ÷ý€×­¤÷Yº º ÷‹‹÷ý€Àv @*9 Ð  ~ û7Šcÿ÷U@ò÷U@®êþw ¶÷5¦*] € êÀ�CÿÀ xh ò Rhî@@@zw šn*� ÷Š!ÿ �÷5@nê#·Šÿ7 fêð÷5 \êìÂ*¥ ÷UTê÷•÷þå÷5@Fêá÷5>ê ÷•ßÚ*É þ7ŠÜþ7 °û÷U@(êÒ÷¾þŽö÷Eê7Š¿þR *í  ð×­ ê‚7 úë÷•¥þ¼÷5 ôé¸·Š˜*þó÷5€æé±Ä�âé7‘Öë¡¡ · NûÀi*5Jû 0‘ƒ �·Šbþü÷•Yþ–÷­¬é¤ëé PROCESS LEAST SIG. BYTE OF BCC ; RCV250 = . MOVB RBUF,R4 CMPB R4,BCCLSB ;DOES IT MATCH? BEQ RCV260 ;YES INCB RCVERR ;NO, INCR ERROR COUNT RCV260 = . BIC #ENABLE,RCSR ;DISABLE RECEIVE INTERRUPTS JSR R5,MOVE ;SAVE JULIAN DATE FROM TERMINAL .WORD RCVBUF+DATA+10.,JULDAY,3,-1 TSTB RCVERR ;ANY ERRORS IN TRANSMISSION? BNE RCV300 êDATA-1(R0) ;PUT DATA INTO BUFFER RCV160 = . BR RCV020 ;GO RETURN ; RCV170 = . INCB RCVERR ;INCR ERROR COUNT BR RCV160 ;GO RETURN ; ; PROCESS ETX/ETB ; RCV180 = . MOVB #4,MODE ;SET MODE FOR RECEIVING BCC(MSB) BR RCV020 ;GO RETURN ; ; PROCESS MOST SIG. BYTE OF BCC ; RCV200 = . MOVB RBUF,R4 CMPB R4,BCCMSB ë ;CURRENT BUFFER ADDRESS INTCNT: .WORD 0 ;RECEIVE INTERRUPT COUNT (FOR CHECKOUT) .PAGE ; ; INITIALIZATION PROGRAM AND IDLE LOOP ; DEMO = . MOVB #BR4,PS ;INHIBIT DC11 INTERRUPTS DURING INIT MOV #15604,@#4 ;SET UP IOX VECTORS MOV #340,@#6 MOV #15256,@#20 MOV #340,@#22 CLR @#40 MOV #040404,@#42 MOV #16040,@#60 MOV #BR5,@#62 ì *Y÷•IþŽ·ŠDþù÷­–é�ë*÷• 3þwÿ÷E@*}€éÀŽ Á¢ ” ” ü÷‹þ÷•ü÷•ÿû¯*¡û÷îûæ– ÷ ð÷‹åûý�÷´¾ú÷•çý‡·š*ÅŠâýÓ÷••Ìû÷•ÿÇû÷ºûæ– ÷ ¼÷‹±ûýI*é�wÎþ7 ˆú÷E@é ÄÝ‹úÄÄ݆ú!±°!²4* °!¶° !´° !·° r w’wXw*1€wÜÄ Å.÷ ŽÄ9Å.÷ ‚ÄiÅ–*U.÷ v·ŠÆò·Š†ó·Š]ó Á�BúÁE€ÿÁå1W*y  Á w,w2w8w D0½*�Wt� �· ±øÉ‘ ÏJí ;YES MOVB #ACK,TRNBUF+DATA ;PUT "ACK,FF" INTO DC11 OUTPUT BUFFER MOVB #FF,TRNBUF+DATA+1 MOV #2,TRNBUF ;SET NO. CHARS TO 2 MOV #TRNBUF,-(SP) ;CALL DC11 OUTPUT ROUTINE JSR PC,D11OUT RCV280 = . TSTB TRNBUF+STATUS ;ALL DONE? BMI RCV280 ;NO MOV #EOTTIM,EOTTMR ;SET EOT TIMER MOVB #6,MODE ;SET RECEIVE MODE TO EXPECT EOT JMP RCV070 î ;DOES IT MATCH? BNE RCV210 ;NO RCV205 = . MOVB #5,MODE ;YES, SET MODE FOR RECEIPT OF BCC(LSB) JMP RCV020 ;GO RETURN RCV210 = . INCB RCVERR ;INCR ERROR COUNT BR RCV205 ;GO SET MODE ; ; PROCESS LEAST SIG. BYTE OF BCC ; RCV250 = . MOVB RBUF,R4 CMPB R4,BCCLSB ;DOES IT MATCH? BEQ RCV260 ;YES INCB ï MOV #16710,@#64 MOV #BR5,@#66 MOV #CLR,COM ;CLEAR MAG TAPE CONTROLLER JSR PC,TAPRDY ;READY? MOV #WFM,COM ;YES, WRITE FILE MARK JSR PC,TAPRDY ;READY? MOV #WFM,COM ;YES, WRITE FILE MARK JSR PC,TAPRDY ;READY? MOV #RWD,COM ;YES, REWIND TAPE JSR PC,TAPRDY ;READY? MOV #RCVINT,@#RVECTR ;RECEIVE INTERRUPTð*Á§ ô ÿÿw $Æ òw þ   Æ`*å - 4ÿÿw üÍ w Ü9=å*  Í ] dÿÿw ÔÔ Bw ´i¾*-m Ô � ”ÿÿæ²÷ ºÁ"Âú¨*QùH” ”W éûæ÷ Ô÷•?ü÷•;üæ– ÷£*u (÷‹úý�÷´òøwJý敱÷ tÁîH”7”`0*™é÷ ¾W øæ•÷ Œ÷•÷ûÛÀ• ¢.*½÷E<ç7ŠáûÁ¶øÁåwHö”Á ýx*á wêü敱÷ ÁÀH”7’é÷ ^W ’øæ¼*•÷ ,÷• —û«敱÷ èÁ“ÚóÃeÀHð*ñ ;GO WAIT FOR EOT ; ; RCV300 = . MOVB #NAK,TRNBUF+DATA ;PUT "NAK,FF" INTO DC11 OUTPUT BUFFER MOVB #FF,TRNBUF+DATA+1 MOV #2,TRNBUF ;SET NO. CHARS TO 2 MOV #TRNBUF,-(SP) ;CALL DC11 OUTPUT ROUTINE JSR PC,D11OUT RCV310 = . TSTB TRNBUF+STATUS ;ALL DONE? BMI RCV310 ;NO JMP RCV060 ;GO WAIT FOR REPEATED MSG FROM TERMINAL ; ; PROCESS RECEIPT OF EOT òRCVERR ;NO, INCR ERROR COUNT RCV260 = . BIC #ENABLE,RCSR ;DISABLE RECEIVE INTERRUPTS JSR R5,MOVE ;SAVE JULIAN DATE FROM TERMINAL .WORD RCVBUF+DATA+10.,JULDAY,3,-1 TSTB RCVERR ;ANY ERRORS IN TRANSMISSION? BNE RCV300 ;YES MOVB #ACK,TRNBUF+DATA ;PUT "ACK,FF" INTO DC11 OUTPUT BUFFER MOVB #FF,TRNBUF+DATA+1 MOV #2,TRNBUF ;SET NO. CHARS TO 2 MOV ó VECTOR MOV #TRNINT,@#TVECTR ;TRANSMIT INTERRUPT VECTOR MOV #CLKINT,@#CVECTR ;CLOCK INTERRUPT VECTOR .IFNZ DEBUG MOV #RCVINT,@#34 ;CHECKOUT RECEIVE INT (TRAP) MOV #TRNINT,@#30 ;CHECKOUT TRANSMIT INT (EMT) .ENDC CLR R0 ;LET DC11 INTR ROUNTINES RUN AT ;CPU LEVEL 0 MOV R0,@#RVECTR+2 MOV R0,@#TVECTR+2 .Iô)”7”Ìè÷ *C ùæ•÷ úæ÷E@ºæÄ�¸æ7 (*Mø¡×­Qû÷Eœæ7ŠAûwfü÷EŽM*qæ7Š3ûwXü÷E€æ7Š%ûš ž÷ŠûwÚö*•þ÷ž Òòw@üw l€7ûðÕ€0 ÷UW*¹Hæ÷U@Bæw Vއw BÀÚú, Áe/*Ýlw’ æ° w .÷E@æ÷EæðÅ€%*óÀœ Е‚7 èç÷ Hˆ�7”Þç÷ <Á¢ HU*%”7”Ðç÷ .W © øŽ‡ˆ�7”ºç÷ Ð�´çЄ*I�²çЕÿÀåœ 7>øŽ‡   ‡w ¨Àv ô*m ~ È È $÷w šø øw ‚÷Ep*‘lå7õ; RCV320 = . MOVB RBUF,R4 ;MOVE CHAR TO REG (FOR CHECKOUT) CMPB R4,#EOT ;IS CHAR AN EOT? BEQ RCV322 ;YES JMP RCV020 ;NO, IGNORE INTERRUPT RCV322 = . BIC #ENABLE,RCSR ;DISABLE RECEIVE INTERRUPT CLR EOTTMR ;RESET EOT TIMER CLR R4 BISB RCVBUF+DATA+5,R4 ;GET SWAB R4 ; ACTION BISB RCVBUF+DATA+ö #TRNBUF,-(SP) ;CALL DC11 OUTPUT ROUTINE JSR PC,D11OUT RCV280 = . TSTB TRNBUF+STATUS ;ALL DONE? BMI RCV280 ;NO MOV #EOTTIM,EOTTMR ;SET EOT TIMER MOVB #6,MODE ;SET RECEIVE MODE TO EXPECT EOT JMP RCV070 ;GO WAIT FOR EOT ; ; RCV300 = . MOVB #NAK,TRNBUF+DATA ;PUT "NAK,FF" INTO DC11 OUTPUT BUFFER MOVB #FF,TRNBUF+DATA+1 MOV #2,TRNBUF ;S÷FNZ DEBUG MOV R0,@#36 MOV R0,@#32 .ENDC MOV #BR6,R0 MOV R0,@#CVECTR+2 MOV #STACK,SP ;SET STACK POINTER IOT ;RESET IOX .WORD 0 .BYTE RESET,0 IOT ;SET RESTART ADDRESS .WORD DEMO .BYTE RESTRT,0 IOT ;INIT LSR .WORD LSR .BYTE INIT,LSRSLT MOV #LENGTH!RSPEEDŠúw €‡w nÀv  Ð  ~ û÷EJ*µå7Šïù÷âù®ñR ÷U@4åw L‡Ô• Å üA*Ù‡B— ÿÿCD“”Ä ýö…CD×¢ ×ú*ý¤0Õ …ƒ Ä õE…&æ¦f&MÖ €�!‚ƒ„…Zøù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 TRANSACTION? BEQ RC.570 ;YES IOT ;NO, ERRONEOUS ACTION CODE .WORD MSG02 ;TYPE ERROR úET NO. CHARS TO 2 MOV #TRNBUF,-(SP) ;CALL DC11 OUTPUT ROUTINE JSR PC,D11OUT RCV310 = . TSTB TRNBUF+STATUS ;ALL DONE? BMI RCV310 ;NO JMP RCV060 ;GO WAIT FOR REPEATED MSG FROM TERMINAL ; ; PROCESS RECEIPT OF EOT ; RCV320 = . MOVB RBUF,R4 ;MOVE CHAR TO REG (FOR CHECKOUT) CMPB R4,#EOT ;IS CHAR AN EOT? BEQ RCV322 ;YES JMP û,RCSR ;SET DC11 RECEIVER CHAR LENGTH ;AND SPEED MOV #STOPCD!TSPEED,TCSR ;SET DC11 TRANSMITTER STOP CODE ;AND SPEED DEM005 = . CMP #INITL,SWITCH BEQ DEM048 IOT ;TYPE MSG00 .WORD MSG00 .BYTE WRITE,TTYSLT CLR TTIBUF+MODEBF ;SET INPUT MODE TO FORMATTED ASCII IOT ;GET "Y" OR "N" RESPONSE üŸ0Ÿ ±Œ:Ð*,SåNbv‹ µÊÞóACB*PME OIL COMPANY AJAX OF CALIFORNIAf*t ALPHA OIL CORPORATION63321 SO. SEVI*˜ENTH 12255 FOURTH STREET P.O. BO³*¼X 1234 SAN DIEGO, CALIF. LO˜*àS ANGELES, CALIF SANTA FE SPRINGS,ã* CAL051072010203REGULAR PREMIUM ™*(LOW LEAD 0000 D*L COLL Ë*p ýMESSAGE .BYTE WRITE,TTYSLT RCV325 = . TSTB MSG02+STATUS BPL RCV325 JMP RCV575 ;GO TYPE CONTENTS OF MSG ON HUB TTY RC.530: JMP RCV530 RC.570: JMP RCV570 RC.620: JMP RCV620 .PAGE ; ; PROCESS AUTO TRANSACTION OR AUDIT TRAIL ; ;* ;* F O R M A T A N I N V O I CE ;* RCV330 = . MOV #CODE1,R4 ;FIRST, BLANK OUT THE APPROPRIATE MOV #46.,R5 ;PARTS Oþ RCV020 ;NO, IGNORE INTERRUPT RCV322 = . BIC #ENABLE,RCSR ;DISABLE RECEIVE INTERRUPT CLR EOTTMR ;RESET EOT TIMER CLR R4 BISB RCVBUF+DATA+5,R4 ;GET SWAB R4 ; ACTION BISB RCVBUF+DATA+6,R4 ; CODE CMP R4,#AUTOTR ;IS IT AUTO TRANSACTION? BEQ RCV330 ;YES CMP R4,#AUDTRL ;IS IT AUDIT TRAIL? BEQ ÿ .WORD TTIBUF .BYTE READ,KBDSLT DEM010 = . TSTB TTIBUF+STATUS ;IS INPUT DONE? BPL DEM010 MOV #000202,TTIBUF+MODEBF ;SET INPUT MODE TO UNFORMATTED ASC MOV #586.,TTIBUF+COUNT ;NO. CHARS TO BYTE COUNT CMPB TTIBUF+DATA,#'Y ;YES, IS IT "Y"? BNE DEM020 ;NO IOT ;READ PUNCHED TAPE .WORD TTIBUF .BYTE READ,LSRSLT BR DEM030 DEM020 =  Q*” XXXX CONSOLIDATED CARRIERS ö*¸ XXX 00000 MMD’*ÜDYYHHMM GE&ES TERMINAL 0000 G* 00000049 XX À*$ XXXXXX XXX I*H XX °*l XXXXXX XXX XX §*� XXXXXX XXX å*´ P.O. BOX 60n'Ø8 SAN DIEGO, CALIF F THE INVOICE BUFFER JSR PC,BLANK ;THAT CONTAIN PRODUCT INFORMATION MOV #CODE2,R4 MOV #46.,R5 JSR PC,BLANK MOV #CODE3,R4 MOV #46.,R5 JSR PC,BLANK MOV #CODE4,R4 MOV #46.,R5 JSR PC,BLANK INCB SERNO1 ;INCREMENT TRANSACTION SERIAL NUMBER INCB SERNO2 INCB NUMBER ;INCREMENT INVOICE NUMBER CLR R0 RCV330 ;YES CMP R4,#AUDERR ;IS IT AN AUDIT ERROR? BEQ RC.530 ;YES CMP R4,#MANUAL ;IS IT A MANUAL TRANSACTION? BEQ RC.570 ;YES IOT ;NO, ERRONEOUS ACTION CODE .WORD MSG02 ;TYPE ERROR MESSAGE .BYTE WRITE,TTYSLT RCV325 = . TSTB MSG02+STATUS BPL RCV325 JMP RCV575 ;GO TYPE CONTENTS OF MSG ON HUB TTY RC.530 . ;READ KBD IOT .WORD TTIBUF .BYTE READ,KBDSLT DEM030 = . TSTB TTIBUF+STATUS ;IS INPUT DONE? BPL DEM030 ;NO DEM035 = . MOV #TIMER,R0 ;RESET TIMERS DEM040 = . CLR (R0)+ TST (R0)+ CMP R0,#TIMEND BLT DEM040 CLR TTIBUF+MODEBF ;SET INPUT MODE TO FORMATTED ASCII IOT ;TYPE "DA: " ESG n*ú AUDIT TRAIL JUST ENTERED IS ER§*RONEOUS!6 IS END OF DAY REPORTØ%B TO BE ENTERED ON PUCHED TAPE? Ä%b TRANSMISSION ERROR !O*‚" ERRONEOUS ACTION CODE RECEIV] ¦ED!¢*ª ERROR IN AUDIT TRAIL! @Î% (Ć \H€ ¦ C ¬ 000203*¹ ßì À߈Äß"@ßì ߈À9*Ý   ;GET CUSTOMER NO. FROM INPUT BUFFER MOVB RCVBUF+DATA+CUST+CUSTSZ-1,R1 ;GET CUST NO (LAST CHAR) BIC #177600,R1 ;MUST BE 1, 2, OR 3 SUB #61,R1 ;CONVERT TO INDEX (0,1,2) BLT INV010 CMP R1,#3 BLT INV015 ; INV010 = . CLR R1 ; INV015 = . ASL R1 MOV ALPHA1(R1),INV020 ;ADDRESS OF CUSTOMER NAME MOV ALPHA2(R1): JMP RCV530 RC.570: JMP RCV570 RC.620: JMP RCV620 .PAGE ; ; PROCESS AUTO TRANSACTION OR AUDIT TRAIL ; ;* ;* F O R M A T A N I N V O I CE ;* RCV330 = . MOV #CODE1,R4 ;FIRST, BLANK OUT THE APPROPRIATE MOV #46.,R5 ;PARTS OF THE INVOICE BUFFER JSR PC,BLANK ;THAT CONTAIN PRODUCT INFORMATION MOV #CODE2,R4 MOV #46.,R5 JSR PC,BLANK MOV #COD .WORD MSG04 .BYTE WRITE,TTYSLT IOT ;GET 6 CHAR DATE MMDDYY .WORD DABUF .BYTE READ,KBDSLT IOT ;TYPE "TI: " .WORD MSG05 .BYTE WRITE,TTYSLT IOT ;GET 4 CHAR TIME HHMM .WORD TIBUF .BYTE READ,KBDSLT DEM045 = . TSTB TIBUF+STATUS ;IS INPUT DONE? BPL DEM045 ;NO MOV #DATEAS,ÂÆBÆ,¾z* úü÷ô÷ô÷%I’Vò*% & ÷Xš÷Ê ÷‹“÷ý€×­�÷YÊ Î*I Ê ÷‹w÷ý€À†  Ð  Ž û7ŠOÿ÷U@o*m öñ÷U@¶ó÷ °ó‰÷À¨ó‰÷€ ó÷‚œ**‘ ó‰ÀÐ÷€Žó7”Œó×­ˆó&‰€ó÷W*µ vó‰÷Snó‰÷åfó‰÷ÿ^ó‰ÁôÁ þŒ*Ù ÷„Nó‰×-’ñÿÿüÅw Þ÷5€6óÀ�½þÀ'*ý xþ ˆªèþ„ÖÖÖw Â÷Š›þ �ƒ*!÷5@ó#·ŠŒþ7 üòð÷5 òòì÷Uêò÷•[*Eqþå÷5@Ü ,INV030 ;ADDRESS, AND MOV ALPHA3(R1),INV040 ;CITY JSR R5,MOVE INV020: .WORD 0,NAME,20. ;MOVE CUSTOMER NAME TO INVOICE INV030: .WORD 0,ADDRESS,20. ;AND ADDRESS INV040: .WORD 0,CITY,20. ;AND CITY/STATE .WORD RCVBUF+DATA+CARNO,CARRIER,CARSZ .WORD RCVBUF+DATA+DRNO,DRIVER,DRSZ .WORD RCVBUF+DATA+CUST,CUSTNO,CUSTSZ .WORD -1 MOVB PS,-(SP) ;LOCKOUT TIMER UPDATE WHIL E3,R4 MOV #46.,R5 JSR PC,BLANK MOV #CODE4,R4 MOV #46.,R5 JSR PC,BLANK INCB SERNO1 ;INCREMENT TRANSACTION SERIAL NUMBER INCB SERNO2 INCB NUMBER ;INCREMENT INVOICE NUMBER CLR R0 ;GET CUSTOMER NO. FROM INPUT BUFFER MOVB RCVBUF+DATA+CUST+CUSTSZ-1,R1 ;GET CUST NO (LAST CHAR) BIC #177600,R1 ;MUST BE 1, 2, OR 3 R0 ;GET DATE INTO END OF DAY REPORT MOV #TTIBUF+60.,R1 MOV (R0)+,(R1)+ MOV (R0)+,(R1)+ MOV (R0)+,(R1)+ MOV #MINUTE,TIMDAY ;SET TIME OF DAY TIMER DEM048 = . CLRB MODE ;SET RECEIVE MODE TO EXPECT RING BIS #ENABLE,LKS ;ENABLE REAL-TIME CLOCK CLRB RBUF ;CLEAR DC11 RECEIVE BUFFER BEFORE ENABLE BIS #ENABLE,RCSR ;ENABLE DC11 RECEIVE INTERRUPT òá÷5Ôò ÷•Yþ7ŠVþ7 *û÷´*iU@¾òÒ÷8þö÷E°ò7Š9þb ð×­¢ò‚'*�7  ò÷•þ¼÷5 Šò¸·Šþó÷5€|ò±c*±Ä�xò7‘|ò¡¡ · ÈúÀÄú 0Å*Õ‘“ �·ŠÜýü÷•Óý–÷­BòJò÷•ÃýŽ·h*ùоýù÷­,ò6ò*÷• ­ýwÿ÷E@òÀž Á²7* ” ¤ ü÷‹�ý÷•zû÷•ÿuû÷hûæ¦Ò*A ÷ ð÷‹_ûý�÷´8ú÷•aý‡·Š\ýÓ÷••Fð*eû÷•ÿAû÷4ûæ¦ ÷ ¼÷‹+ûý�wÎþ7 ú÷\*‰E@žñ ÄÝúÄÄÝú!10!20!60 õ*­!40 !70 ‚ E MOVB #340,PS ;GETTING TIME JSR R5,MOVE .WORD DATEAS,DATE,6 .WORD TIMEAS,TIME,4 .WORD -1 MOVB (SP)+,PS ;UNLOCK TIMER ;* ;* NOW GET PRODUCT INFORMATION AND PUT IN INVOICE BUFFER ;* JSR R5,TEST .WORD RCVBUF+DATA+FLOW1,FLOWSZ,INV100 ;ANY PRODUCT 1 INFO? JSR R5,MOVE ;YES - MOV INTO INVOICE .WORD KODE1,CODE1,2 .WORD PRNAM1,PROD1,PRSZ  SUB #61,R1 ;CONVERT TO INDEX (0,1,2) BLT INV010 CMP R1,#3 BLT INV015 ; INV010 = . CLR R1 ; INV015 = . ASL R1 MOV ALPHA1(R1),INV020 ;ADDRESS OF CUSTOMER NAME MOV ALPHA2(R1),INV030 ;ADDRESS, AND MOV ALPHA3(R1),INV040 ;CITY JSR R5,MOVE INV020: .WORD 0,NAME,20. ;MOVE CUSTOMER NAME TO INVOICE INV030: .WORD CLR INTCNT ;CLEAR INTERRUPT COUNT (FOR CHECKOUT) CLRB PS ;ALLOW DC11 INTERRUPTS .IFZ DEBUG BR DEM070 .ENDC DEM050 = . .IFZ DEBUG WAIT ;IDLE!! TST MSG01F ;ERROR MESSAGE TO BE TYPED? BEQ DEM050 ;NO IOT ;YES, TYPE -- "TRANSMISSION ERROR XX!" .WORD MSG01 .BYTE WRITE,TTYSLT DEM060 = w’wXw€wÜÄ/*ÑÅ.÷ ¶ÄIÅ.÷ ªÄyÅ.÷ ž·Š@Ø*õò·Šó·Š×ò Á�¼ùÁE€ÿÁå1W  Á wQ*<wBwHw l@g„+*=­ �Ç ÁÙ¡ ß·  ÿÿwÃ*a LÖ ˆw , Ö = DÝ*…ÿÿw $Ý °w IM Ý m *© tÿÿw üä Øw Üy(} ä �*Í$ ¤ÿÿæ²÷ âÁ2Â6H” ”W ùû‰*ñæ÷ ü÷•¹û÷•µûæ¦ ÷ (÷‹—ùý�÷ñ*´løwJý敱÷ œÁþH .WORD RCVBUF+DATA+FLOW1,VOL1,FLOWSZ .WORD RCVBUF+DATA+T1,TEMP1,TEMPSZ .WORD -1 ; INV100 = . JSR R5,TEST ;AND NOW FOR PRODUCT # 2 .WORD RCVBUF+DATA+FLOW2,FLOWSZ,INV200 JSR R5,MOVE .WORD KODE2,CODE2,2 .WORD PRNAM2,PROD2,PRSZ .WORD RCVBUF+DATA+FLOW2,VOL2,FLOWSZ .WORD RCVBUF+DATA+T2,TEMP2,TEMPSZ .WORD -1 ; INV200 = . JSR R5,TEST ;AND P 0,ADDRESS,20. ;AND ADDRESS INV040: .WORD 0,CITY,20. ;AND CITY/STATE .WORD RCVBUF+DATA+CARNO,CARRIER,CARSZ .WORD RCVBUF+DATA+DRNO,DRIVER,DRSZ .WORD RCVBUF+DATA+CUST,CUSTNO,CUSTSZ .WORD -1 MOVB PS,-(SP) ;LOCKOUT TIMER UPDATE WHILE MOVB #340,PS ;GETTING TIME JSR R5,MOVE .WORD DATEAS,DATE,6 .WORD TIMEAS,TIME,4 .WORD -1 MOVB (SP)+,PS  . TSTB MSG01+STATUS ;DONE? BPL DEM060 DEM070 = . CLR MSG01F ;YES BR DEM050 BR DEM050 .ENDC .PAGE .IFNZ DEBUG ;* ;* SIMULATED DC11 CHECKOUT. THIS SECTION CAUSES THE LOGIC ;* EXPECTED FROM THE DC11 AND CP. THE SIMULATED INPUT MESSAGE ;* IS RETRIEVED FROM THE OPERATOR DEFINED EOD REPORT. ;* $DC11 = . MOV #RING!ERROR,RCSR ;SET RING STAT”7”ð÷ æW &ø*9æ•÷ ´÷•qûÛÀ¥ ¢.÷EÒï7Š[Ù*]ûÁ0øÁåwÂõÂ.”Á ý( wêü敱.*�÷ <ÁÐH”7’¦ï÷ †W ¢øæ•÷ T÷• *¥û«敱÷ Á£ÃóÃeÐH”7”rï÷ RC+*É ùæ•÷ "æ÷E@PïÄ�Nï7 ¢÷¡×­Ë÷*íú÷E2ï7Š»úwfü÷E$ï7Š­úwXü÷�*Eï7ŠŸúª ž÷Š•úwÚþ÷® Lòw@’*5üw ”€7zúðÕ€0 ÷UÞî÷U@Øî÷/*Y5Òîˆúð¥ ÷¼î÷€´î‰¦!*} w Vއw BÀ,ú, ÁRODUCT # 3 .WORD RCVBUF+DATA+FLOW3,FLOWSZ,INV250 JSR R5,MOVE .WORD KODE3,CODE3,2 .WORD PRNAM3,PROD3,PRSZ .WORD RCVBUF+DATA+FLOW3,VOL3,FLOWSZ .WORD RCVBUF+DATA+T3,TEMP3,TEMPSZ .WORD -1 ; INV250 = . JSR R5,TEST ;AND FINALLY, PRODUCT #4 .WORD RCVBUF+DATA+FLOW4,FLOWSZ,INV300 JSR R5,MOVE .WORD KODE4,CODE4,2 .WORD PRNAM4,PROD4,PRSZ .WORD  ;UNLOCK TIMER ;* ;* NOW GET PRODUCT INFORMATION AND PUT IN INVOICE BUFFER ;* JSR R5,TEST .WORD RCVBUF+DATA+FLOW1,FLOWSZ,INV100 ;ANY PRODUCT 1 INFO? JSR R5,MOVE ;YES - MOV INTO INVOICE .WORD KODE1,CODE1,2 .WORD PRNAM1,PROD1,PRSZ .WORD RCVBUF+DATA+FLOW1,VOL1,FLOWSZ .WORD RCVBUF+DATA+T1,TEMP1,TEMPSZ .WORD -1 ; INV100 = . JSR R5,TEST ;AND NOW FOR PRODUCT # 2 US (HELLO?) TRAP ; AND SIMULATE DC11 INTERRUPT MOV #CARTRN!ERROR!DETECT,RCSR ;NOW, CARRIER TRANSITION TRAP ;AND CARRIER DETECT MOV #DONE,RCSR MOV #STX,RBUF ;ALWAYS NEED STX TRAP MOV #TTIBUF+DATA,R0 ; $DC11A = . MOV #DONE,RCSR ;SET CHARACTER READY STATUS MOVB (R0)+,RBUF ;GET NEXT CHARACTER CMPB elwý*¡’Žî° w .÷E@|î÷EvîðÅ€óÀ¬q*Å Е‚7 fî÷ Hˆ�7”\î÷ <Á² H”7”Nî÷J*é .W ¹ øŽ‡ˆ�7”8î÷ Ð�2îÐ�0îЕÿ”* Àå¬ 7�÷އ   ‡w ¨À†  Ž ÈÏ*1 È $÷w šø øw ‚÷EÚí7Šc9*Uùw €‡w nÀ†  Ð  Ž û÷E¸í7ŠAù÷*y4ùñb ÷U@¢íw L‡Ô• Å ü‡B—\*� ÿÿCD“”Ä ýö…CD×¢ פ0Õ*Á …ƒ Ä õE…&æ¦f&MÖ €�‚ƒ„¡ å…dø RCVBUF+DATA+FLOW4,VOL4,FLOWSZ .WORD RCVBUF+DATA+T4,TEMP4,TEMPSZ .WORD -1 ; INV300 = . MOV #R035,-(SP) JSR PC,HEADER ;CREATE HEADER FOR INVOICE MOV #INVOICE,R1 MOV #BCCOUT,R2 INV310 = . MOVB (R1)+,(R0) ;MOVE INVOICE TO THE MOVB (R0)+,(R2) ;DC11 OUTPUT BUFFER JSR PC,DELAY ;DELAY FOR BCC HARDWARE CMP R1,#INVEND ;END OF INVOICE?  .WORD RCVBUF+DATA+FLOW2,FLOWSZ,INV200 JSR R5,MOVE .WORD KODE2,CODE2,2 .WORD PRNAM2,PROD2,PRSZ .WORD RCVBUF+DATA+FLOW2,VOL2,FLOWSZ .WORD RCVBUF+DATA+T2,TEMP2,TEMPSZ .WORD -1 ; INV200 = . JSR R5,TEST ;AND PRODUCT # 3 .WORD RCVBUF+DATA+FLOW3,FLOWSZ,INV250 JSR R5,MOVE .WORD KODE3,CODE3,2 .WORD PRNAM3,PROD3,PRSZ .WORD RCVBUF+DATA+FLOW3, RBUF,#7 ;IS IT A BELL (END OFMESSAGE) BEQ $DC11B ;YES MOV R0,-(SP) ;SAVE ADDRESS TRAP ;SIMULATE MOV (SP)+,R0 BR $DC11A ;GO BACK FOR MORE ; $DC11B = . MOV #ETX,RBUF ;THAT'S ALL, FOLKS! TRAP MOV #123,RBUF ;DUMMY BCC TRAP MOV #345,RBUF TRAP MOV #377,RBUF  BNE INV310 ;BRANCH IF NO MOV #ETX,-(SP) ;OTHERWISE, SELECT ETX AND JSR PC,TRAILR ;GO MAKE A TRAILER MOVB #7,MODE ;SET RECEIVE MODE TO EXPECT ACK/NAK ;AFTER TRANSMITTING INVOICE RCV500 = . MOVB #8.,REPEAT ;SET NO. OF OUTPUT TRYS RCV510 = . MOV #TRNBUF,-(SP) ;CALL DC11 TRANSMIT ROUTINE JSR PC,D11OUT RCV520 = . TSTBVOL3,FLOWSZ .WORD RCVBUF+DATA+T3,TEMP3,TEMPSZ .WORD -1 ; INV250 = . JSR R5,TEST ;AND FINALLY, PRODUCT #4 .WORD RCVBUF+DATA+FLOW4,FLOWSZ,INV300 JSR R5,MOVE .WORD KODE4,CODE4,2 .WORD PRNAM4,PROD4,PRSZ .WORD RCVBUF+DATA+FLOW4,VOL4,FLOWSZ .WORD RCVBUF+DATA+T4,TEMP4,TEMPSZ .WORD -1 ; INV300 = . MOV #R035,-(SP) JSR PC,HEADER ;CRE ;AND THE GRAND FINALE TRAP MOV #17777,R1 ;DELAY FOR S/W TO RESPOND, ; ;SEND ACK (3 SEC DELAY) $DC11C = . DEC R1 BNE $DC11C MOV #EOT,RBUF ;SEND LINE TURNAROUND - EOT TRAP ; ;NOW IT'S UP TO THE PROGRAM $DC11D = . ;TO SEND RESPONSE MESSAGE CMP SWITCH,#-1 BNE $DC11D ; UPDATE DEMO.P09 04.26.72 ; UPDATE DEMO.P08 04.20.72 ; UPDATE DEMO.P07 04.19.72 ; UPDATE DEMO.P06 04.17.72 ; UPDATE DEMO.P05 04.13.72 ELITE HUB DEMO ; UPDATE DEMO.P04 04.13.72 ELITE HUB DEMO ; UPDATE DEMO.P03 04.13.72 ELITE HUB DEMO ; UPDATE DEMP.P02 04.12.72 ELITE ; ; LODT DEMO ; DEBUG = 0 ;0 = NORMAL PROGRAM OPERATION WITH DC11 ! TRNBUF+STATUS ;ALL DONE? BMI RCV520 ;NO .IFZ DEBUG MOV #ACKTIM,ACKTMR ;SET ACK TIMER .ENDC JMP RCV070 ;GO WAIT FOR ACK ; ; PROCESS ERRONEOUS AUDIT TRAIL ; RCV530 = . MOVB #ASR33,-(SP) ;PUT MSG HEADER IN TRANSMIT BUFFER JSR PC,HEADER ;SPECIFY OUTPUT TO ASR33 MOV #TMSG00,R1 ;GET MSG ADDRESS RCV550 = . MOVB (R1)+,(R0) ;MOVE "ATE HEADER FOR INVOICE MOV #INVOICE,R1 MOV #BCCOUT,R2 INV310 = . MOVB (R1)+,(R0) ;MOVE INVOICE TO THE MOVB (R0)+,(R2) ;DC11 OUTPUT BUFFER JSR PC,DELAY ;DELAY FOR BCC HARDWARE CMP R1,#INVEND ;END OF INVOICE? BNE INV310 ;BRANCH IF NO MOV #ETX,-(SP) ;OTHERWISE, SELECT ETX AND JSR PC,TRAILR ;GO MAKE A TRAILER MOVB #7,MODE # BR $DC11 ;REPEAT WHEN SWITCHES = 177777 .ENDC .PAGE ; ; DC11 RECEIVE INTERRUPT ROUTINE ; RCVINT = . JSR R5,PUSHR ;SAVE REGS. INC INTCNT ;INCR INTERRUPT COUNT (FOR CHECKOUT) MOV RCSR,R5 ;IS RCSR ERROR BIT SET? BMI RCV030 ;YES MOVB MODE,R0 ;NO, BRANCH ON RECEIVE MODE CMPB R0,#2 ;***** TEST MODE DURING CHECKOUT ***$ ;1 = DEBUG CHECKOUT WITH SIMULATED DC11 DOS = 0 ;0 = RUN ON STAND ALONE SYSTEM ;1 = RUN ON DOS SYSTEM .IFNZ DOS .IFNZ DEBUG .CSECT .ENDC .IFZ DEBUG .ASECT .ENDC .ENDC .IFZ DOS .ASECT .ENDC ; REGISTER DEFINITIONS ; ; R0 = 0% R1 = 1% R2 = 2% R3 = 3% R4 %A CHAR TO BUFFER MOVB (R0)+,BCCOUT ;CALC BCC JSR PC,DELAY ;DELAY FOR BCC HDWR CMP R1,#TMSG01 ;ALL CHARS MOVED? BLE RCV550 ;NO MOVB #8.,MODE ;SET RECEIVE MODE TO EXPECT ACK/NAK RCV560 = . MOVB #ETX,-(SP) ;PUT TRAILER INTO BUFFER JSR PC,TRAILR ;AFTER SENDING BR RCV500 ;GO TRANSMIT TO TERMINAL ; ; PROCESS MA&;SET RECEIVE MODE TO EXPECT ACK/NAK ;AFTER TRANSMITTING INVOICE RCV500 = . MOVB #8.,REPEAT ;SET NO. OF OUTPUT TRYS RCV510 = . MOV #TRNBUF,-(SP) ;CALL DC11 TRANSMIT ROUTINE JSR PC,D11OUT RCV520 = . TSTB TRNBUF+STATUS ;ALL DONE? BMI RCV520 ;NO .IFZ DEBUG MOV #ACKTIM,ACKTMR ;SET ACK TIMER .ENDC JMP RCV070 '**** BGE RCV005 BR RCV038 RCV005 = . ASL R0 JMP @RCV010-4(R0) ; ; BRANCH TABLE ; RCV010 = . .WORD RCV100 ;RECEIVE STX MODE = 2 .WORD RCV150 ;RECEIVE DATA = 3 .WORD RCV200 ;RECEIVE BCC(MSB) = 4 .WORD RCV250 ;RECEIVE BCC(LSB) = 5 .WORD RCV320 ;RECEIVE EOT = 6 ( = 4% R5 = 5% SP = 6% PC = 7% PS = 177776 LKS = 177546 ;LINE FREQ. CLOCK STATUS REG. BR4 = 200 ;HARDWARE PRIORITY LEVELS OF DEVICES BR5 = 240 BR6 = 300 .IFZ DEBUG RCSR = 174000 ;DC11 RECEIVER STATUS REGISTER TCSR = 174004 ;DC11 TRANSMITTER STATUS REGISTER RBUF = 174002 ;DC11 RECEIVER BUFFER TBUF = 1740)NUAL ENTRY ; RCV570 = . MOV #RCVBUF+MSGDAT,R0 ;GET ADDRESS OF MESSAGE DATA CMPB (R0),#'. ;IS FIRST CHAR A PERIOD? BEQ RCV620 ;YES MOVB #ASR33,-(SP) ;SPECIFY OUTPUT TO ASR33 JSR PC,HEADER MOV #TMSG01,R1 ;GET MSG ADDRESS RCV572 = . MOVB (R1)+,(R0) ;MOVE A CHAR TO BUFFER MOVB (R0)+,BCCOUT ;CALC BCC JSR PC,DELAY ;DELAY FOR BCC HARDWARE *;GO WAIT FOR ACK ; ; PROCESS ERRONEOUS AUDIT TRAIL ; RCV530 = . MOVB #ASR33,-(SP) ;PUT MSG HEADER IN TRANSMIT BUFFER JSR PC,HEADER ;SPECIFY OUTPUT TO ASR33 MOV #TMSG00,R1 ;GET MSG ADDRESS RCV550 = . MOVB (R1)+,(R0) ;MOVE A CHAR TO BUFFER MOVB (R0)+,BCCOUT ;CALC BCC JSR PC,DELAY ;DELAY FOR BCC HDWR CMP R1,#TMSG01 ;ALL CHARS MOVED? BLE RCV550+ .WORD RCV700 ;RECEIVE ACK/NAK = 7 .WORD RCV700 ;RECEIVE ACK/NAK = 8 .WORD RCV700 ;RECEIVE ACK/NAK = 9 .WORD RCV700 ;RECEIVE ACK/NAK = 10 ; RCV020 = . JSR R5,POPR ;RESTORE REGS. RTI ;RETURN ; ; ERROR BIT PROCESSING ; RCV030 = . MOVB MODE,R4 ;BRANCH ON MODE BEQ RCV040 ,06 ;DC11 TRANSMISSION BUFFER .ENDC RVECTR = 300 ;DC11 RECEIVER INTERRUPT VECTOR TVECTR = 304 ;DC11 TRASMISSION INTERRUPT VECTOR CVECTR = 100 ;LINE FREQUENCY CLOCK INTERRUPT VECTOR .IFZ DEBUG CLRBCC = 174770 ;CLEAR BCC BCCOUT = 174772 ;BCC OUTPUT REGISTER BCCMSB = 174774 ;MSB OF RESULTING BCC BCCLSB = 174776 ;LSB OF RESULTING BCC .ENDC - CMP R1,#TMSG02 ;ALL CHARS MOVED? BLE RCV572 ;NO MOVB #10.,MODE ;SET RECEIVE MODE TO BR RCV560 ;EXPECT ACK/NAK ; ; PRINT CONTENTS OF RCVBUF AT HUB ; RCV575 = . BIC #DTRDY,RCSR ;NO, DROP LINE BY RESET DATA TERM. RDY CLRB MODE ;SET RECEIVE MODE TO EXPECT RING RCV578 = . MOV RCVBUF+COUNT,R1 ;GET NO. CHARS IN MSG (LESS HEADER) SUB #H. ;NO MOVB #8.,MODE ;SET RECEIVE MODE TO EXPECT ACK/NAK RCV560 = . MOVB #ETX,-(SP) ;PUT TRAILER INTO BUFFER JSR PC,TRAILR ;AFTER SENDING BR RCV500 ;GO TRANSMIT TO TERMINAL ; ; PROCESS MANUAL ENTRY ; RCV570 = . MOV #RCVBUF+MSGDAT,R0 ;GET ADDRESS OF MESSAGE DATA CMPB (R0),#'. ;IS FIRST CHAR A PERIOD? BEQ RCV620 / ;RING CMPB R4,#1 ;EXPECTING CARRIER TRANS. AFTER RING? BEQ RCV050 ;YES BIT #CARTRN,R5 ;OTHER, HAVE WE LOST RECEIVE CARRIER? BNE RCV080 ;YES INCB RCVERR ;NO, INCR RECEIVE ERROR COUNT RCV038 = . MOVB RBUF,R4 ;CLEAR RCSR DONE BIT TO PREVENT OVERRUN BR RCV020 ;GO RETURN ; ; PROCESS A RING ; RCV040 = . BIT #RING,0 SWITCH = 177570 ;CONSOLE SWITCH ADDRESS ; ; SYMBOLS REQUIRED FOR IOX CALLS ; KBDSLT = 0 ;TTY KEYBOARD SLOT TTYSLT = 1 ;TTY TELEPRINTER SLOT LSRSLT = 2 ;LOW-SPEED PT READER SLOT LSPSLT = 3 ;LOW-SPEED PUNCH SLOT RESET = 2 ;RESET COMMAND RESTRT = 3 ;RESTART COMMAND INIT = 1 ;INIT COMMAND READ = 11 1DRSIZ,R1 MOV R1,TTOBUF+COUNT ;PUT CHAR COUNT INTO TTY BUFFER MOV #TTOBUF+DATA,R2 ;GET TTY BUFFER DATA ADDRESS MOV #RCVBUF+MSGDAT,R0 ;GET ADDRESS OF RCVBUF DATA RCV580 = . MOVB (R0),(R2)+ ;MOVE DATA FROM DC11 RECEIVE BUFFER CMPB (R0)+,#CR ;IS CHAR A CR? BNE RCV582 ;NO MOVB #LF,(R2)+ ;YES, INSERT A LF FOR TYPEOUT INC TTOBUF+COUNT RCV582 = . DEC 2;YES MOVB #ASR33,-(SP) ;SPECIFY OUTPUT TO ASR33 JSR PC,HEADER MOV #TMSG01,R1 ;GET MSG ADDRESS RCV572 = . MOVB (R1)+,(R0) ;MOVE A CHAR TO BUFFER MOVB (R0)+,BCCOUT ;CALC BCC JSR PC,DELAY ;DELAY FOR BCC HARDWARE CMP R1,#TMSG02 ;ALL CHARS MOVED? BLE RCV572 ;NO MOVB #10.,MODE ;SET RECEIVE MODE TO BR RCV560 ;EXPECT ACK/NA3R5 ;IS IT A RING? BEQ RCV020 ;NO, IGNORE INTERRUPT BIS #DTRDY,RCSR ;SET DATA TERMINAL READY MOVB #1,MODE ;SET MODE TO EXPECT CARRIER TRANSITION BR RCV020 ;GO RETURN ; ; PROCESS CARRIER TURNON ; RCV050 = . BIT #CARTRN,R5 ;IS INT. A CARRIER TRANSITION? BEQ RCV020 ;NO, IGNORE INTERRUPT RCV060 = . BIT #DETECT,RCSR ;IS CARRIER DETECT ON?4;READ COMMAND WRITE = 12 ;WRITE COMMAND EOF = 040 ;EOF BIT IN STATUS BYTE CR = 15 ;ASCII FOR CR LF = 12 ;ASCII FOR LF ; ; DC11 RECEIVE CONTROL STATUS REGISTER (RCSR) BITS ; ERROR = 100000 CARTRN = 040000 RING = 020000 OVERUN = 010000 LENGTH = 000000 ;8 BITS/CHAR DONE = 000200 ENABLE = 000100 PARITY = 000040 RSPEED = 5 R1 ;TO TTY OUTPUT BUFFER BNE RCV580 IOT ;PRINT MSG ON HUB TTY .WORD TTOBUF .BYTE WRITE,TTYSLT RCV585 = . TSTB TTOBUF+STATUS BPL RCV585 JMP RCV070 ;GO ENABLE RECEIVE INTERRUPT ; ; PREPARE END OF DAY REPORT FOR OUTPUT ; RCV620 = . MOVB #ASR33,-(SP) ;PUT MSG HDR IN BUF JSR PC,HEADER MOV #TTIBUF+DATA,R1 ;GET D6K ; ; PRINT CONTENTS OF RCVBUF AT HUB ; RCV575 = . BIC #DTRDY,RCSR ;NO, DROP LINE BY RESET DATA TERM. RDY CLRB MODE ;SET RECEIVE MODE TO EXPECT RING RCV578 = . IOT ;OUTPUT CR, LF, LF TO HUB TTY .WORD CRLFLF .BYTE WRITE,TTYSLT MOV RCVBUF+COUNT,R1 ;GET NO. CHARS IN MSG (LESS HEADER) SUB #HDRSIZ,R1 MOV R1,TTOBUF+COUNT ;PUT CHAR COUNT INTO TTY BUFFE7 BEQ RCV080 ;NO MOVB #2,MODE ;SET RECEIVE MODE TO EXPECT STX RCV065 = . CLRB RCVERR ;ZERO ERROR COUNT CLR RCVBUF+COUNT ;ZERO CHAR COUNT RCV070 = . CLRB RBUF ;INSURE RCSR DONE BIT CLEARED! BIS #ENABLE,RCSR ;ENABLE DC11 RECEIVE INT. BR RCV020 ;GO RETURN ; ; LOST RECEIVE CARRIER ; RCV080 = . MOV #ERR00,MSG01F ;PUT8 000020 ;DC11-AB 1200 BAUD DETECT = 000004 DTRDY = 000001 ; ; DC11 TRANSMIT CONTROL STATUS REGISTER (TCSR) BITS ; STOPCD = 000400 READY = 000200 TSPEED = 000020 ;DC11-AB 1200 BAUD CLRSND = 000002 REQSND = 000001 ; ; HUB DC11 & TTY MESSAGE BUFFER OFFSETS ; STATUS = 3 COUNT = 4 DATA = 6 HDRSIZ = 17. ;NO. OF BYTES IN HDR OF MSG FROM TERM'L MSGDAT 9ATA ADDRESS MOV TTIBUF+COUNT,R3 ADD #TTIBUF+DATA,R3 ;GET ADDRESS OF END OF DATA RCV630 = . MOVB (R1)+,(R0) ;MOVE CHAR TO BUF MOVB (R0)+,BCCOUT ;CALC BCC JSR PC,DELAY ;DELAY FOR BCC HDWR CMP R1,R3 ;ARE ALL CHARS OUT BLT RCV630 ;NO MOVB #ETX,-(SP) ;PUT ETX TRAILER IN BUF JSR PC,TRAILR MOVB #9.,MODE ;SET MODE TO EXPECT AC:R MOV #TTOBUF+DATA,R2 ;GET TTY BUFFER DATA ADDRESS MOV #RCVBUF+MSGDAT,R0 ;GET ADDRESS OF RCVBUF DATA RCV580 = . MOVB (R0),(R2)+ ;MOVE DATA FROM DC11 RECEIVE BUFFER CMPB (R0)+,#CR ;IS CHAR A CR? BNE RCV582 ;NO MOVB #LF,(R2)+ ;YES, INSERT A LF FOR TYPEOUT INC TTOBUF+COUNT RCV582 = . DEC R1 ;TO TTY OUTPUT BUFFER BNE RCV580 ; ERROR CODE "00" IN ERROR MSG RCV090 = . BIC #ENABLE,RCSR ;DISABLE DC11 INTERRUPTS BIC #DTRDY,RCSR ;RESET DATA TERMINAL READY CLRB MODE ;SET RECEIVE MODE TO EXPECT RING BR RCV070 ;GO ENABLE RECEIVE INTERRUPT ; ; PROCESS STX ; RCV100 = . MOVB RBUF,R4 CMPB R4,#STX BNE RCV120 RCV110 = . CLR CLRBCC ;CLEAR BCC REGISTER MOVB<= 23. ;BEGINNING OF MESSAGE DATA (LESS HEADER) ; ; DC11 MSG BUFFER FLAGS ; BUSY = 200 ;BIT 7 OF STATUS BYTE; SET WHEN BUSY ; ; TIMER VALUES ; ACKTIM = 180. ;TIMEOUT FOR ACK IN 1/60 SECOND TICS EOTTIM = 180. ;TIMEOUT FOR EOT IN 1/60 SECOND TICS ; ; MESSAGE ACTION CODES ; .IFZ DEBUG AUTOTR = 130261 ;ASCII 01 AUDTRL = 130262 ;ASCII 02 AUDERR = =K/NAK BR RCV500 ;GO OUTPUT REPORT ; ; PROCESS ACK/NAK AFTER SENDING RESPONSE TO CP ; RCV700 = . BIC #ENABLE,RCSR ;DISABLE DC11 RCV INT. MOVB RBUF,R4 ;GET CHAR CMPB R4,#ACK ;IS CHAR AN ACK? BNE RCV810 ;NO CLR ACKTMR ;RESET ACK TIMER JMP @RCV705-14.(R0) ;BRANCH ON MODE RCV705 = . .WORD RCV710 ;7, RECEIVE ACK AFTER SENDIN> IOT ;PRINT MSG ON HUB TTY .WORD TTOBUF .BYTE WRITE,TTYSLT RCV585 = . TSTB TTOBUF+STATUS BPL RCV585 JMP RCV070 ;GO ENABLE RECEIVE INTERRUPT ; ; PREPARE END OF DAY REPORT FOR OUTPUT ; RCV620 = . MOVB #ASR33,-(SP) ;PUT MSG HDR IN BUF JSR PC,HEADER MOV #TTIBUF+DATA,R1 ;GET DATA ADDRESS MOV TTIBUF+COUNT,R3 ADD #TTIBUF+? #3,MODE ;SET RECEIVE MODE TO EXPECT DATA BR RCV020 ;GO RETURN RCV120 = . BIT #PARITY,R5 ;IS PARITY GOOD? BEQ RCV020 ;YES, IGNORE INTERRUPT INCB RCVERR ;NO, INCR ERROR COUNT BR RCV110 ;ASSUME IT WAS STX W/BAD PARITY ; ; PROCESS DATA CHAR ; RCV150 = . BIT #DONE,R5 ;IS CHAR AVAIL? BEQ RCV020 ;NO, FALSE INTERRUPT @ 130266 ;ASCII 06 MANUAL = 130264 ;ASCII 04 CONTIN = 130267 ;ASCII 07 .ENDC .IFNZ DEBUG AUTOTR = 030061 ;ASCII 01 AUDTRL = 030062 ;ASCII 02 AUDERR = 030066 ;ASCII 06 MANUAL = 030064 ;ASCII 04 CONTIN = 030067 ;ASCII 07 .ENDC ; ; SPECIAL CHAR IN MSG FOR TERMINAL DEVICE SELECTION ; R035 = 262 ;ASCII CODE FOR AG INVOICE .WORD RCV800 ;8, ACK AFTER SENDING AUDIT ERR MSG .WORD RCV708 ;9, ACK AFTER SENDING EOD REPORT .WORD RCV575 ;10, ACK AFTER SENDING MANUAL ACCEPT ; RCV708 = . BIC #DTRDY,RCSR ;DROP LINE - RESET DATA TERMINAL READY CLRB MODE ;SET MODE TO EXPECT RING JMP RCV070 ;GO ENABLE RECEIVE INTERRUPT ; RCV710 = . BIC #DTRDY,RCSR ;DROP LINE - RESET DBDATA,R3 ;GET ADDRESS OF END OF DATA RCV630 = . MOVB (R1)+,(R0) ;MOVE CHAR TO BUF MOVB (R0)+,BCCOUT ;CALC BCC JSR PC,DELAY ;DELAY FOR BCC HDWR CMP R1,R3 ;ARE ALL CHARS OUT BLT RCV630 ;NO MOVB #ETX,-(SP) ;PUT ETX TRAILER IN BUF JSR PC,TRAILR MOVB #9.,MODE ;SET MODE TO EXPECT ACK/NAK BR RCV500 ;GO OUTPUT REPORT ; ; C MOVB RBUF,R4 ;GET CHAR MOV R4,BCCOUT ;OUTPUT CHAR TO BCC REGISTER CMPB R4,#ETX ;IS CHAR AN ETX? BEQ RCV180 ;YES CMPB R4,#ETB ;IS CHAR AN ETB? BEQ RCV180 ;YES MOV RCVBUF+COUNT,R0 ;GET COUNT CMP R0,#273. ;IS DATA CHAR COUNT .GE. 273? BGE RCV170 ;YES INC RCVBUF+COUNT ;INCR CHAR COUNT IN BUFFER HEADER MODR0-35 SELECTION ASR33 = 261 ;ASCII CODE FOR ASR-33 SELECTION ; ; EQUATE PARAMETERS FOR CP DATA FORMAT ; TAB = 11 FORM = 14 CARNO = 25. ;CARRIER NUMBER CARSZ = 4 ;CARRIER SIZE CUST = 35. ;CUSTOMER NO. CUSTSZ = 10. ;NO. CHAR. IN CUSTOMER NUMBER DRNO = 51. ;DRIVER NO. DRSZ = 3 ;NO. CHAR. FLOW1 = 66. EATA TERMINAL READY CLRB MODE ;SET MODE TO EXPECT RING ;* * * * * * * F R I L L * * * * * * * BR RCV900 ;GO PUT INVOICE ON MAG TAPE ; RCV800 = . BIC #DTRDY,RCSR ;DROP LINE CLRB MODE ;SET MODE TO EXPECT RING IOT ;TYPE -- "ERROR IN AUDIT TRAIL!" .WORD MSG03 .BYTE WRITE,TTYSLT RCV805 = . TSTB MSG03+STATUS BPL RCV805 FPROCESS ACK/NAK AFTER SENDING RESPONSE TO CP ; RCV700 = . BIC #ENABLE,RCSR ;DISABLE DC11 RCV INT. MOVB RBUF,R4 ;GET CHAR CMPB R4,#ACK ;IS CHAR AN ACK? BNE RCV810 ;NO CLR ACKTMR ;RESET ACK TIMER JMP @RCV705-14.(R0) ;BRANCH ON MODE RCV705 = . .WORD RCV710 ;7, RECEIVE ACK AFTER SENDING INVOICE .WORD RCV800 ;8, ACK AFTER SENDING AUDIT GVB R4,RCVBUF+DATA(R0) ;PUT DATA INTO BUFFER RCV160 = . BR RCV020 ;GO RETURN ; RCV170 = . INCB RCVERR ;INCR ERROR COUNT BR RCV160 ;GO RETURN ; ; PROCESS ETX/ETB ; RCV180 = . MOVB #4,MODE ;SET MODE FOR RECEIVING BCC(MSB) BR RCV020 ;GO RETURN ; ; PROCESS MOST SIG. BYTE OF BCC ; RCV200 = . MOVB RBUF,R4 CMPB R4H;FLOW METER PRODUCT 1 FLOW2 = 73. ;FLOW METER PRODUCT 2 FLOW3 = 80. ;FLOW METER PRODUCT 3 FLOWSZ = 6 ;NO. CHAR. IN FLOW METER DATA T1 = 136. ;TEMP OF PRODUCT 1 T2 = 140. ;TEMP OF PRODUCT 2 T3 = 144. ;TEMP OF PRODUCT 3 TEMPSZ = 3 ;NO. CHAR. IN TEMP ; ; MISCELLANEOUS SYMBOLS ; STX = 202 ;START OF TEXT ETX = I BR RCV578 ;GO TYPE CONTENTS OF RCVBUF ;ON HUB TTY ; ; ACK NOT RECEIVED, TRANSMIT AGAIN ; RCV810 = . CMPB R4,#NAK ;IS CHAR A NAK? BEQ RCV815 ;YES JMP RCV070 ;NO, IGNORE INTERRUPT RCV815 = . CLR ACKTMR ;RESET ACK TIMER DECB REPEAT ;DECR REPEAT COUNT BEQ RCV820 ;ALL TRYS EXHAUSTED? JMP JERR MSG .WORD RCV708 ;9, ACK AFTER SENDING EOD REPORT .WORD RCV575 ;10, ACK AFTER SENDING MANUAL ACCEPT ; RCV708 = . BIC #DTRDY,RCSR ;DROP LINE - RESET DATA TERMINAL READY CLRB MODE ;SET MODE TO EXPECT RING JMP RCV070 ;GO ENABLE RECEIVE INTERRUPT ; RCV710 = . BIC #DTRDY,RCSR ;DROP LINE - RESET DATA TERMINAL READY CLRB MODE ;SET MODE TO EXPECT K,BCCMSB ;DOES IT MATCH? BNE RCV210 ;NO RCV205 = . MOVB #5,MODE ;YES, SET MODE FOR RECEIPT OF BCC(LSB) JMP RCV020 ;GO RETURN RCV210 = . INCB RCVERR ;INCR ERROR COUNT BR RCV205 ;GO SET MODE ; ; PROCESS LEAST SIG. BYTE OF BCC ; RCV250 = . MOVB RBUF,R4 CMPB R4,BCCLSB ;DOES IT MATCH? BEQ RCV260 ;YES L 003 ;END OF TEXT ETB = 027 ;END OF TRANSMISSION BLOCK EOT = 204 ;EOT - LINE TURNAROUND ACK = 006 ;ACKNOWLEDGE NAK = 225 ;NEGATIVE ACKNOWLEDGE FF = 377 ;HEX "FF" INITL = 111111 ;CONSOLE SWITCH PATTERN TO BYPASS ;DEFINITION OF EOD REPORT .PAGE ; ; PROGRAM DATA ; ; .IFZ DOS . = MRCV510 ;NO, TRY AGAIN ; RCV820 = . MOV #ERR01,MSG01F ;SET UP HUB ERROR MSG JMP RCV090 ;GO DROP LINE AND TYPE ERROR MESSAGE ; ; ; PREPARE INVOICE DATA IN EBCDIC CHARS AND WRITE ON MAG TAPE ; RCV900 = . MOV #TRNBUF+DATA+11.,R0 ;GET ADDR OF INVOICE IN BUFFER RCV905 = . MOVB (R0)+,R3 ;GET A CHAR ; ; DO ASCII/EBCDIC CONVERSION ; CMPB R3,#40 ;IS CHAR IN ASCII/NRING ;* * * * * * * F R I L L * * * * * * * BR RCV900 ;GO PUT INVOICE ON MAG TAPE ; RCV800 = . BIC #DTRDY,RCSR ;DROP LINE CLRB MODE ;SET MODE TO EXPECT RING IOT ;TYPE -- "ERROR IN AUDIT TRAIL!" .WORD MSG03 .BYTE WRITE,TTYSLT RCV805 = . TSTB MSG03+STATUS BPL RCV805 BR RCV578 ;GO TYPE CONTENTS OF RCVBUF O INCB RCVERR ;NO, INCR ERROR COUNT RCV260 = . BIC #ENABLE,RCSR ;DISABLE RECEIVE INTERRUPTS JSR R5,MOVE ;SAVE JULIAN DATE FROM TERMINAL .WORD RCVBUF+DATA+10.,JULDAY,3,-1 TSTB RCVERR ;ANY ERRORS IN TRANSMISSION? BNE RCV300 ;YES MOVB #ACK,TRNBUF+DATA ;PUT "ACK,FF" INTO DC11 OUTPUT BUFFER MOVB #FF,TRNBUF+DATA+1 MOV #2,TRNBUF ;SET NO. CHARS TO 2 P400 .ENDC . = .+200 STACK = . ;SYSTEM STACK AR(A .IFNZ DEBUG RCSR: .WORD 0 ;DC11 RECEIVE AND RBUF: .WORD 0 ; TRANSMIT BUFFERS TCSR: .WORD 0 ; FOR DEMO CHECKOUT TBUF: .WORD 0 ; WITHOUT DC11 H/W AND CP CLRBCC: .WORD 0 ;CLEAR BCC BCCOUT: .WORD 0 ;BCC OUTPUT REGISTER BCCMSB: .WORD 123 ;MSB OF RESULTING BCC BCCLSB: QEBCDIC TABLE? BLT RCV940 ;NO CMPB R3,#132 BGT RCV960 ;NO MOV R3,R5 ;YES, GET EBCDIC CHAR SUB #40,R5 MOVB EBCDIC(R5),R3 RCV908 = . ; ; FLIP DATA IN EACH BYTE OF INVOICE (MAG TAPE CONTROLLER FIX) ; MOV #1,R4 ;SET MASK TO BIT 0 RCV910 = . ASLB R3 ;SHIFT LSB TO C BCS RCV920 ;WAS LSB SET BICB R ;ON HUB TTY ; ; ACK NOT RECEIVED, TRANSMIT AGAIN ; RCV810 = . CMPB R4,#NAK ;IS CHAR A NAK? BEQ RCV815 ;YES JMP RCV070 ;NO, IGNORE INTERRUPT RCV815 = . CLR ACKTMR ;RESET ACK TIMER DECB REPEAT ;DECR REPEAT COUNT BEQ RCV820 ;ALL TRYS EXHAUSTED? JMP RCV510 ;NO, TRY AGAIN ; RCV820 = . MOV S MOV #TRNBUF,-(SP) ;CALL DC11 OUTPUT ROUTINE JSR PC,D11OUT RCV280 = . TSTB TRNBUF+STATUS ;ALL DONE? BMI RCV280 ;NO MOV #EOTTIM,EOTTMR ;SET EOT TIMER MOVB #6,MODE ;SET RECEIVE MODE TO EXPECT EOT JMP RCV070 ;GO WAIT FOR EOT ; ; RCV300 = . MOVB #NAK,TRNBUF+DATA ;PUT "NAK,FF" INTO DC11 OUTPUT BUFFER MOVB #FF,TRNBUF+DATA+1 MOV #2,TRNT.WORD 345 ;LSB OF RESULTING BCC .ENDC ALPHA1: .WORD NAME1,NAME2,NAME3 ;POINTER TO CUSTOMER NAME ALPHA2: .WORD ADDR1,ADDR2,ADDR3 ;POINTER TO CUSTOMER ADDRESS ALPHA3: .WORD CITY1,CITY2,CITY3 ;POINTER TO CUSTOMER CITY NAME1: .ASCII 'ACME OIL COMPANY ' NAME2: .ASCII 'AJAX OF CALIFORNIA ' NAME3: .ASCII 'ALPHA OIL CORPORATION' ADDR1: .ASCII '63321 SO. SEVENTH ' ADDR2: .ASCII '12255 FOURTH STREET ' ADDR3: .ASCII 'P.O. BOX 1234 U R4,R5 ;NO, CLEAR APPROPRIATE BIT IN RESULT RCV915 = . ASLB R4 ;SHIFT MASK TO NEXT MOST SIG. BIT BEQ RCV925 ;DONE? BR RCV910 ;NO RCV920 = . BISB R4,R5 ;SET APPROPRIATE BIT BR RCV915 ;CONTINUE RCV925 = . MOVB R5,-1(R0) ;REPLACE BYTE WITH ITS FLIP CMP R0,#TRNBUF+DATA+11.+INVEND-INVOICE ;ALL DATA FLIPPED? BMI V#ERR01,MSG01F ;SET UP HUB ERROR MSG JMP RCV090 ;GO DROP LINE AND TYPE ERROR MESSAGE ; ; ; PREPARE INVOICE DATA IN EBCDIC CHARS AND WRITE ON MAG TAPE ; RCV900 = . MOV #TRNBUF+DATA+11.,R0 ;GET ADDR OF INVOICE IN BUFFER RCV905 = . MOVB (R0)+,R3 ;GET A CHAR ; ; DO ASCII/EBCDIC CONVERSION ; CMPB R3,#40 ;IS CHAR IN ASCII/EBCDIC TABLE? BLT RCV940 ;NO CMPB R3WBUF ;SET NO. CHARS TO 2 MOV #TRNBUF,-(SP) ;CALL DC11 OUTPUT ROUTINE JSR PC,D11OUT RCV310 = . TSTB TRNBUF+STATUS ;ALL DONE? BMI RCV310 ;NO JMP RCV060 ;GO WAIT FOR REPEATED MSG FROM TERMINAL ; ; PROCESS RECEIPT OF EOT ; RCV320 = . MOVB RBUF,R4 ;MOVE CHAR TO REG (FOR CHECKOUT) CMPB R4,#EOT ;IS CHAR AN EOT? BEQ RCV322 ;YES X ' CITY1: .ASCII 'SAN DIEGO, CALIF. ' CITY2: .ASCII 'LOS ANGELES, CALIF ' CITY3: .ASCII 'SANTA FE SPRINGS, CAL' .EVEN DATEAS: .ASCII '051072' KODE1: .ASCII '01' KODE2: .ASCII '02' KODE3: .ASCII '03' PRNAM1: .ASCII 'REGULAR ' PRNAM2: .ASCII 'PREMIUM ' PRNAM3: .ASCII 'LOW LEAD ' PRSZ = 10. .PAGE ;* ;* D U M M Y I N V O I C E ;* INVOICE = . .BYTE CR .ASCII '000' SERNO1: .ASCII '0' .BYTYRCV905 ;NO, GET NEXT BYTE ; ; WRITE INVOICE ON MAG. TAPE ; RCV930 = . MOV #11.,R5 ;SET NO. OF TRYS FOR WRITE RCV932 = . MOV #TRNBUF+DATA+11.,MA ;YES, PUT INVOICE ADDRESS IN ;MEMORY ADDRESS REGISTER MOV #INVEND-INVOICE/2,WC ;SET WORD COUNT DEC R5 ;DECR REPEAT COUNT BGT RCV933 ;ALL TRYS EXHAUSTED? MOV #WEXG,COM ;YES, WRITE EXZ,#132 BGT RCV960 ;NO MOV R3,R5 ;YES, GET EBCDIC CHAR SUB #40,R5 MOVB EBCDIC(R5),R3 RCV908 = . ; ; FLIP DATA IN EACH BYTE OF INVOICE (MAG TAPE CONTROLLER FIX) ; MOV #1,R4 ;SET MASK TO BIT 0 RCV910 = . ASLB R3 ;SHIFT LSB TO C BCS RCV920 ;WAS LSB SET BICB R4,R5 ;NO, CLEAR APPROPRIATE BIT IN RESULT RCV915 = [ JMP RCV020 ;NO, IGNORE INTERRUPT RCV322 = . BIC #ENABLE,RCSR ;DISABLE RECEIVE INTERRUPT CLR EOTTMR ;RESET EOT TIMER CLR R4 BISB RCVBUF+DATA+5,R4 ;GET SWAB R4 ; ACTION BISB RCVBUF+DATA+6,R4 ; CODE CMP R4,#AUTOTR ;IS IT AUTO TRANSACTION? BEQ RCV330 ;YES CMP R4,#AUDTRL ;IS IT AUDIT TRAIL? \E CR,LF,TAB,TAB,TAB .ASCII ' ' NAME: .ASCII ' COLL' .BYTE CR,LF,TAB,TAB,TAB .ASCII ' ' ADDRESS:.ASCII ' ' .BYTE CR,LF,TAB,TAB,TAB .ASCII ' ' CITY: .ASCII ' ' .BYTE CR,LF,LF,LF,LF CARRIER:.ASCII 'XXXX CONSOLIDATED CARRIERS ' DRIVER: .ASCII 'XXX' .BYTE TAB,TAB .ASCII ' 0000' NUMBER: .ASCII '0' .BYTE ]TENDED GAP JSR PC,TAPRDY ;AT FRONT OF RECORD MOV #10.,R5 ;SET REPEAT C3UNT BR RCV935 RCV933 = . MOV #WRT,COM ;WRITE THE INVOICE ON TAPE JSR PC,TAPRDY RCV935 = . BIT #ERR,STAT ;IS FILE GOOD? BNE RCV938 ;NO, GO DO IT AGAIN JMP RCV578 ;GO TYPE CONTENTS OF RCVBUF AT HUB RCV938 = . BIC #ERR,STAT ;CLEAR ERROR BIT ^. ASLB R4 ;SHIFT MASK TO NEXT MOST SIG. BIT BEQ RCV925 ;DONE? BR RCV910 ;NO RCV920 = . BISB R4,R5 ;SET APPROPRIATE BIT BR RCV915 ;CONTINUE RCV925 = . MOVB R5,-1(R0) ;REPLACE BYTE WITH ITS FLIP CMP R0,#TRNBUF+DATA+11.+INVEND-INVOICE ;ALL DATA FLIPPED? BMI RCV905 ;NO, GET NEXT BYTE ; ; WRITE INVOICE ON MAG. TA_ BEQ RCV330 ;YES CMP R4,#AUDERR ;IS IT AN AUDIT ERROR? BEQ RC.530 ;YES CMP R4,#MANUAL ;IS IT A MANUAL TRANSACTION? BEQ RC.570 ;YES IOT ;NO, ERRONEOUS ACTION CODE .WORD MSG02 ;TYPE ERROR MESSAGE .BYTE WRITE,TTYSLT RCV325 = . TSTB MSG02+STATUS BPL RCV325 JMP RCV575 ;GO TYPE CONTENTS OF MSG ON HUB `CR,LF,LF DATE: .ASCII 'MMDDYY' TIME: .ASCII 'HHMM GE&ES TERMINAL' .BYTE TAB .ASCII ' 000' SERNO2: .ASCII '0' .BYTE CR,LF,LF .ASCII ' ' CUSTNO: .ASCII ' 00000049' .BYTE CR,LF,LF,LF,LF CODE1: .ASCII 'XX ' PROD1: .ASCII ' ' VOL1: .ASCII 'XXXXXX ' TEMP1: .ASCII 'XXX' .BYTE CR,LF CODE2: .ASCII 'XX ' PROD2: .ASCII ' ' VOL2: .ASCIIa MOV #BCKR,COM ;BACKSPACE A RECOR JSR PC,TAPRDY ;READY? BR RCV932 ;GO TRY AGAIN ; ; ; TAPRDY = . MOV #20.,R4 ;DELAY FOR CONTROLLER TO SET READY AFTER DEC R4 ;COMMAND BNE .-2 BIT #200,@#STAT ;IS CONTROLLER READY? BEQ .-6 RTS PC ;RETURN ; ; SPECIAL CHARACTER ASCII/EBCDIC CONVERSION ; RCV940 = . bPE ; RCV930 = . MOV #11.,R5 ;SET NO. OF TRYS FOR WRITE RCV932 = . MOV #TRNBUF+DATA+11.,MA ;YES, PUT INVOICE ADDRESS IN ;MEMORY ADDRESS REGISTER MOV #INVEND-INVOICE/2,WC ;SET WORD COUNT DEC R5 ;DECR REPEAT COUNT BGT RCV933 ;ALL TRYS EXHAUSTED? MOV #WEXG,COM ;YES, WRITE EXTENDED GAP JSR PC,TAPRDY ;AT FRONT OF RECORD cTTY RC.530: JMP RCV530 RC.570: JMP RCV570 RC.620: JMP RCV620 .PAGE ; ; PROCESS AUTO TRANSACTION OR AUDIT TRAIL ; ;* ;* F O R M A T A N I N V O I CE ;* RCV330 = . MOV #CODE1,R4 ;FIRST, BLANK OUT THE APPROPRIATE MOV #46.,R5 ;PARTS OF THE INVOICE BUFFER JSR PC,BLANK ;THAT CONTAIN PRODUCT INFORMATION MOV #CODE2,R4 MOV #46.,R5 JSR PC,BLANK d 'XXXXXX ' TEMP2: .ASCII 'XXX' .BYTE CR,LF CODE3: .ASCII 'XX ' PROD3: .ASCII ' ' VOL3: .ASCII 'XXXXXX ' TEMP3: .ASCII 'XXX' .BYTE CR,LF,LF,LF,LF,LF,LF,LF,LF .BYTE LF,LF,LF,LF,LF,LF,LF,LF,LF .BYTE LF,LF,LF,LF,LF,LF,LF,LF,LF .BYTE LF,LF,LF,LF,LF,LF,LF,LF,LF .ASCII ' P.O. BOX 608' .BYTE CR,LF .ASCII 'SAN DIEGO, CALIF ESG' .BYTE FORM INVEND = e CMPB R3,#TAB ;TAB? BNE RCV945 ;NO MOVB #5,R3 BR RCV908 RCV945 = . CMPB R3,#LF ;LF? BNE RCV950 ;NO MOVB #45,R3 BR RCV908 RCV950 = . CMPB R3,#FORM ;FORM? BNE RCV955 ;NO MOV #24,R3 BR RCV908 RCV955 = . CMPB R3,#CR ;CR? BNE RCV960 MOf MOV #10.,R5 ;SET REPEAT C3UNT BR RCV935 RCV933 = . MOV #WRT,COM ;WRITE THE INVOICE ON TAPE JSR PC,TAPRDY RCV935 = . BIT #ERR,STAT ;IS FILE GOOD? BNE RCV938 ;NO, GO DO IT AGAIN JMP RCV578 ;GO TYPE CONTENTS OF RCVBUF AT HUB RCV938 = . BIC #ERR,STAT ;CLEAR ERROR BIT MOV #BCKR,COM ;BACKSPACE A RECOR JSR PC,TgMOV #CODE3,R4 MOV #46.,R5 JSR PC,BLANK MOV #CODE4,R4 MOV #46.,R5 JSR PC,BLANK INCB SERNO1 ;INCREMENT TRANSACTION SERIAL NUMBER INCB SERNO2 INCB NUMBER ;INCREMENT INVOICE NUMBER CLR R0 ;GET CUSTOMER NO. FROM INPUT BUFFER MOVB RCVBUF+DATA+CUST+CUSTSZ-1,R1 ;GET CUST NO (LAST CHAR) BIC #177600,R1 ;MUST BE 1, h . .EVEN ; ; DEVICE CODES FOR IOX USAGE ; LSR: .WORD 3 LSP: .WORD 4 ; ; MESSAGES TO BE OUTPUT TO TERMINAL ; TMSG00 = . .BYTE CR,LF .ASCII /AUDIT TRAIL JUST ENTERED IS ERRONEOUS!/ TMSG01 = . ; ; HUB TELETYPE MESSAGES ; .EVEN MSG00: .WORD 0 .BYTE 0 .BYTE 0 .WORD 54. .BYTE CR,LF .ASCII 'IS END OF DAY REPORT TO BE ENTERED ON PUNCHED TAPE?iVB #25,R3 BR RCV908 RCV960 = . MOVB #100,R3 ;SUBSTITUTE A BLANK (SPACE) BR RCV908 .PAGE ; ; DC11 TRANSMIT ROUTINE ; ; CALLING SEQUENCE: ; MOV #BUFFER,-(SP) ; JSR PC,D11OUT ; D11OUT = . JSR R5,PUSHR ;SAVE REGS. MOV 14.(SP),R0 ;GET BUFFER ADDRESS MOV R0,CURBUF ;SAVE CURRENT BUF ADDR BIjAPRDY ;READY? BR RCV932 ;GO TRY AGAIN ; ; ; TAPRDY = . MOV #20.,R4 ;DELAY FOR CONTROLLER TO SET READY AFTER DEC R4 ;COMMAND BNE .-2 BIT #200,@#STAT ;IS CONTROLLER READY? BEQ .-6 RTS PC ;RETURN ; ; SPECIAL CHARACTER ASCII/EBCDIC CONVERSION ; RCV940 = . CMPB R3,#TAB ;TAB? BNE RCV945 k2, OR 3 SUB #61,R1 ;CONVERT TO INDEX (0,1,2) BLT INV010 CMP R1,#3 BLT INV015 ; INV010 = . CLR R1 ; INV015 = . ASL R1 MOV ALPHA1(R1),INV020 ;ADDRESS OF CUSTOMER NAME MOV ALPHA2(R1),INV030 ;ADDRESS, AND MOV ALPHA3(R1),INV040 ;CITY JSR R5,MOVE INV020: .WORD 0,NAME,20. ;MOVE CUSTOMER NAME TO INVOICE INl ' .EVEN MSG01: .WORD 0 .BYTE 0 .BYTE 0 .WORD 25. .BYTE CR,LF .ASCII /TRANSMISSION ERROR / MSG01F: .ASCII / !/ .EVEN MSG02: .WORD 0 .BYTE 0 .BYTE 0 .WORD 37. .BYTE CR,LF .ASCII /ERRONEOUS ACTION CODE RECEIVED!/ .BYTE CR,LF,LF .EVEN MSG03: .WORD 0 .BYTE 0 .BYTE 0 .WORD 26. .BYTE CR,LF mSB #BUSY,STATUS(R0);SET BUFFER BUSY CLR COUNT(R0) ;ZRO CHAR COUNT BIS #REQSND,TCSR ;SET REQUEST TO SEND D11010 = . BIT #CLRSND,TCSR ;CLEAR TO SEND? BEQ D11010 ;NO ADD #DATA,R0 ;OUTPUT 1ST CHAR MOVB (R0),TBUF BIS #ENABLE,TCSR ;ENABLE TRANSMITTER INTERRUPT .IFNZ DEBUG ; D11015: BIT #REQSND,TCSR ;DONE TRANSMITTING? BEQ D11020 n ;NO MOVB #5,R3 BR RCV908 RCV945 = . CMPB R3,#LF ;LF? BNE RCV950 ;NO MOVB #45,R3 BR RCV908 RCV950 = . CMPB R3,#FORM ;FORM? BNE RCV955 ;NO MOV #24,R3 BR RCV908 RCV955 = . CMPB R3,#CR ;CR? BNE RCV960 MOVB #25,R3 BR RCV908 RCV960 = . MOVB oV030: .WORD 0,ADDRESS,20. ;AND ADDRESS INV040: .WORD 0,CITY,20. ;AND CITY/STATE .WORD RCVBUF+DATA+CARNO,CARRIER,CARSZ .WORD RCVBUF+DATA+DRNO,DRIVER,DRSZ .WORD RCVBUF+DATA+CUST,CUSTNO,CUSTSZ .WORD -1 MOVB PS,-(SP) ;LOCKOUT TIMER UPDATE WHILE MOVB #340,PS ;GETTING TIME JSR R5,MOVE .WORD DATEAS,DATE,6 .WORD TIMEAS,TIME,4 .WORD -1 MOVB p .ASCII /ERROR IN AUDIT TRAIL!/ .BYTE CR,LF,LF .EVEN ; ; HUB TELETYPE BUFFERS ; TTIBUF: .WORD 0 ;MAX NO. CHARS TO INPUT .BYTE 0 ;MODE - FORMATED ASCII .BYTE 0 ;STATUS .WORD 0 ;NO. OF CHARS INPUT . = .+600. ;DATA TTOBUF: .WORD 0 ;UNUSED .BYTE 0 ;MODE - FORMATTED ASCII .BYTE 0 ;STAq ;YES EMT 0 ;SIMULATE TRANSMIT OUTPUT INTERRUPT BR D11015 ; D11020: CMPB #ACK,DATA(R0) BEQ D11025 ;DON'T PRINT IF IT'S ONLY AN ACK MOV #ACK,RBUF ;PUT ACK IN DUMMY RECEIVE BUFFER MOV #DONE,RCSR ;SET CHARACTER READY BIT TRAP ;AND SIMULATE THE CP 'ACK' SIGNAL IOT ;PRINT OUTPUT BUFFER ON ASR .WORD TRNBUF .BYTr #100,R3 ;SUBSTITUTE A BLANK (SPACE) BR RCV908 .PAGE ; ; DC11 TRANSMIT ROUTINE ; ; CALLING SEQUENCE: ; MOV #BUFFER,-(SP) ; JSR PC,D11OUT ; D11OUT = . JSR R5,PUSHR ;SAVE REGS. MOV 14.(SP),R0 ;GET BUFFER ADDRESS MOV R0,CURBUF ;SAVE CURRENT BUF ADDR BISB #BUSY,STATUS(R0);SET BUFFER BUSY CLR COUNT(R0) s(SP)+,PS ;UNLOCK TIMER ;* ;* NOW GET PRODUCT INFORMATION AND PUT IN INVOICE BUFFER ;* JSR R5,TEST .WORD RCVBUF+DATA+FLOW1,FLOWSZ,INV100 ;ANY PRODUCT 1 INFO? JSR R5,MOVE ;YES - MOV INTO INVOICE .WORD KODE1,CODE1,2 .WORD PRNAM1,PROD1,PRSZ .WORD RCVBUF+DATA+FLOW1,VOL1,FLOWSZ .WORD RCVBUF+DATA+T1,TEMP1,TEMPSZ .WORD -1 ; INV100 = . JSR R5,TEST ;AND NOW FOR PtTUS .WORD 0 ;NO. OF CHARS TO BE OUTPUT . = .+600. ;DATA ; ; TIMERS ; TIMER = . ACKTMR: .WORD 0 ;ACK TIMER .WORD ACKTO EOTTMR: .WORD 0 ;EOT TIMER .WORD EOTTO TIMEND = . ; ; HUB/TERMINAL INPUT/OUTPUT MESSAGE BUFFERS ; RCVBUF = . ;RECEIVE BUFFER .WORD 273. ;MAXIMUM NUMBER OF CHARACTERS .BYTE 0 uE WRITE,TTYSLT D11023 = . TSTB TRNBUF+STATUS BPL D11023 BICB #BUSY,STATUS(R0) ; D11025 = . .ENDC JSR R5,POPR ;RESTORE REGS MOV (SP)+,(SP) ;SWAP PC AND BUF ADDR; POP STACK RTS PC ;RETURN .PAGE ; ; DC11 TRANSMITTER INTERRUPT ROUTINE ; TRNINT = . JSR R5,PUSHR ;SAVE REGS MOV CURBUF,R0 ;GET CURRENT BUFFER v;ZRO CHAR COUNT BIS #REQSND,TCSR ;SET REQUEST TO SEND D11010 = . BIT #CLRSND,TCSR ;CLEAR TO SEND? BEQ D11010 ;NO ADD #DATA,R0 ;OUTPUT 1ST CHAR MOVB (R0),TBUF BIS #ENABLE,TCSR ;ENABLE TRANSMITTER INTERRUPT .IFNZ DEBUG ; D11015: BIT #REQSND,TCSR ;DONE TRANSMITTING? BEQ D11020 ;YES EMT 0 ;SIMULATE TRANSMIT OUTPUT wRODUCT # 2 .WORD RCVBUF+DATA+FLOW2,FLOWSZ,INV200 JSR R5,MOVE .WORD KODE2,CODE2,2 .WORD PRNAM2,PROD2,PRSZ .WORD RCVBUF+DATA+FLOW2,VOL2,FLOWSZ .WORD RCVBUF+DATA+T2,TEMP2,TEMPSZ .WORD -1 ; INV200 = . JSR R5,TEST ;AND PRODUCT # 3 .WORD RCVBUF+DATA+FLOW3,FLOWSZ,INV250 JSR R5,MOVE .WORD KODE3,CODE3,2 .WORD PRNAM3,PROD3,PRSZ .WORD RCVBUFx ;UNUSED .BYTE 0 ;STATUS .WORD 0 ;NO. OF DATA CHARACTERS RECEIVED . = .+273. .EVEN ; TRNBUF = . ;TRANSMIT BUFFER .WORD 0 ;NO. OF DATA CHARACTERS TO BE TRANSMITTED .BYTE 0 ;UNUSED .BYTE 0 ;STATUS .WORD 0 ;RESERVED FOR USE BY TRNINT ROUTINE . = .+512. ; ; ERROR CODES ; ERR00: .ASCy INC COUNT(R0) ;INCR CHAR COUNT CMP COUNT(R0),(R0) ;HAVE ALL CHARS BEEN TRANSMITTED? BGE TRN020 ;YES MOV R0,R1 ;SET POINTER TO NEXT CHAR ADD #DATA,R1 ADD COUNT(R0),R1 MOVB (R1),TBUF ;PUT CHAR IN TRANSMIT REGISTER TRN010 = . JSR R5,POPR ;RESTORE REGS RTI ;RETURN ; TRN020 = . BIC #ENABLE,TCSR ;DISABLEzINTERRUPT BR D11015 ; D11020: CMPB #ACK,DATA(R0) BEQ D11025 ;DON'T PRINT IF IT'S ONLY AN ACK MOV #ACK,RBUF ;PUT ACK IN DUMMY RECEIVE BUFFER MOV #DONE,RCSR ;SET CHARACTER READY BIT TRAP ;AND SIMULATE THE CP 'ACK' SIGNAL IOT ;PRINT OUTPUT BUFFER ON ASR .WORD TRNBUF .BYTE WRITE,TTYSLT D11023 = . TSTB TRNBUF+STATUS {+DATA+FLOW3,VOL3,FLOWSZ .WORD RCVBUF+DATA+T3,TEMP3,TEMPSZ .WORD -1 ; INV250 = . JSR R5,TEST ;AND FINALLY, PRODUCT #4 .WORD RCVBUF+DATA+FLOW4,FLOWSZ,INV300 JSR R5,MOVE .WORD KODE4,CODE4,2 .WORD PRNAM4,PROD4,PRSZ .WORD RCVBUF+DATA+FLOW4,VOL4,FLOWSZ .WORD RCVBUF+DATA+T4,TEMP4,TEMPSZ .WORD -1 ; INV300 = . MOV #R035,-(SP) JSR PC,HEADE|II /00/ ;LOST CARRIER WHILE RECEIVING DATA ERR02: .ASCII /02/ ;NO ACK RECEIVED AFTER 8 TRYS ERR03: .ASCII /03/ ;TIMEOUT ON SENDING OF ACK ; ; DATE/TIME SAVED HERE ; DAYTIM = . ;DATE/TIME FROM LAST MSG RECEIVED . = .+7. DAYEND = . ; ; PROGRAM VARIABLES ; MODE: .BYTE 0 ;RECEIVE MODE ; WHERE 0 = EXPECTING RING ; } TRANSMIT INTERRUPT BIC #REQSND,TCSR ;RESET REQUEST TO SEND TRN030 = . BIT #DETECT,RCSR ;WAIT FOR TRANSMIT CARRIER TO DROP BNE TRN030 TRN040 = . BIT #DETECT,RCSR ;WAIT FOR DETECT OF RECEIVE CARRIER BEQ TRN040 BICB #BUSY,STATUS(R0);SET STATUS NOT BUSY BR TRN010 ;GO RETURN .PAGE ; ; HEADER -- ROUTINE TO PUT HEADER IN TRANSMIT BUFFER; I.E. ; STX~ BPL D11023 BICB #BUSY,STATUS(R0) ; D11025 = . .ENDC JSR R5,POPR ;RESTORE REGS MOV (SP)+,(SP) ;SWAP PC AND BUF ADDR; POP STACK RTS PC ;RETURN .PAGE ; ; DC11 TRANSMITTER INTERRUPT ROUTINE ; TRNINT = . JSR R5,PUSHR ;SAVE REGS MOV CURBUF,R0 ;GET CURRENT BUFFER INC COUNT(R0) ;INCR CHAR COUNT CMP COUNT(R ;CREATE HEADER FOR INVOICE MOV #INVOICE,R1 MOV #BCCOUT,R2 INV310 = . MOVB (R1)+,(R0) ;MOVE INVOICE TO THE MOVB (R0)+,(R2) ;DC11 OUTPUT BUFFER JSR PC,DELAY ;DELAY FOR BCC HARDWARE CMP R1,#INVEND ;END OF INVOICE? BNE INV310 ;BRANCH IF NO MOV #ETX,-(SP) ;OTHERWISE, SELECT ETX AND JSR PC,TRAILR ;GO MAKE A TRAILER MOVB #7,M€ 1 = EXPECT CARRIER TRANSITION ; 2 = EXPECT STX ; 3 = EXPECT DATA ; 4 = EXPECT BCC(MSB) ; 5 = EXPECT BCC(LSB) ; 6 = EXPECT EOT ; 7 = EXPECT ACK/NAK AFTER ; SENDING ; 8 �, SPECIAL CHAR, DATE AND TIME ; ; CALLING SEQUENCE -- ; ; MOV #DEVICE,-(SP) ; JSR PC,HEADER ; ; CONDITIONS UPON ENTRY -- ; ; SPECIAL CODE FOR DEVICE SELECTION IS ON STACK ; ; CONDITIONS UPON EXIT -- ; ; R0 POINTS TO NEXT AVAILABLE BYTE IN TRNBUF ; R1 IS USED AND NOT RESTORED ; HEADER = . MOV #TRNBUF+DATA,R0 ;GET DATA ADDRESS IN TRANSMIT BUFFER ‚R0),(R0) ;HAVE ALL CHARS BEEN TRANSMITTED? BGE TRN020 ;YES MOV R0,R1 ;SET POINTER TO NEXT CHAR ADD #DATA,R1 ADD COUNT(R0),R1 MOVB (R1),TBUF ;PUT CHAR IN TRANSMIT REGISTER TRN010 = . JSR R5,POPR ;RESTORE REGS RTI ;RETURN ; TRN020 = . BIC #ENABLE,TCSR ;DISABLE TRANSMIT INTERRUPT BIC #REQSND,TCSR ;RESET REQUEST TO ƒODE ;SET RECEIVE MODE TO EXPECT ACK/NAK ;AFTER TRANSMITTING INVOICE RCV500 = . MOVB #8.,REPEAT ;SET NO. OF OUTPUT TRYS RCV510 = . MOV #TRNBUF,-(SP) ;CALL DC11 TRANSMIT ROUTINE JSR PC,D11OUT RCV520 = . TSTB TRNBUF+STATUS ;ALL DONE? BMI RCV520 ;NO .IFZ DEBUG MOV #ACKTIM,ACKTMR ;SET ACK TIMER .ENDC JMP RCV0„= SAME ; 9 = SAME ;ON DATA RECEIVED RCVERR: .BYTE 0 ;RECEIVE ERROR COUNT REPEAT: .BYTE 0 ;NO. OF TRYS TO TRANSMIT TO TERMINAL .EVEN CURBUF: .WORD 0 ;CURRENT BUFFER ADDRESS .PAGE ; ; INITIALIZATION PROGRAM AND IDLE LOOP ; DEMO = . MOV #15604,@#4 ;SET UP IOX VECTORS MOV #340,@#6 MOV #15256,@#20 … MOVB #STX,(R0)+ ;STX CHAR TO HEADER CLR CLRBCC ;CLEAR BCC REGISTER JSR PC,DELAY ;DELAY FOR BCC HDWR MOVB 2(SP),(R0) ;DEVICE CODE TO HEADER MOVB (R0)+,BCCOUT ;OUTPUT TO BCC CALCULATOR JSR PC,DELAY ;DELAY FOR BCC HDWR MOV #JULDAY,R1 ;PUT JULIAN DATE INTO BUFFER HEADER HEAD10 = . MOVB (R1)+,(R0) MOVB (R0)+,BCCOUT JSR PC,DELAY †SEND TRN030 = . BIT #DETECT,RCSR ;WAIT FOR TRANSMIT CARRIER TO DROP BNE TRN030 TRN040 = . BIT #DETECT,RCSR ;WAIT FOR DETECT OF RECEIVE CARRIER BEQ TRN040 BICB #BUSY,STATUS(R0);SET STATUS NOT BUSY BR TRN010 ;GO RETURN .PAGE ; ; HEADER -- ROUTINE TO PUT HEADER IN TRANSMIT BUFFER; I.E. ; STX, SPECIAL CHAR, DATE AND TIME ; ; CALLING SEQUENCE -- ; ‡70 ;GO WAIT FOR ACK ; ; PROCESS ERRONEOUS AUDIT TRAIL ; RCV530 = . MOVB #ASR33,-(SP) ;PUT MSG HEADER IN TRANSMIT BUFFER JSR PC,HEADER ;SPECIFY OUTPUT TO ASR33 MOV #TMSG00,R1 ;GET MSG ADDRESS RCV550 = . MOVB (R1)+,(R0) ;MOVE A CHAR TO BUFFER MOVB (R0)+,BCCOUT ;CALC BCC JSR PC,DELAY ;DELAY FOR BCC HDWR CMP R1,#TMSG01 ;ALL CHARS MOVED? BLˆ MOV #340,@#22 CLR @#40 MOV #040404,@#42 MOV #16040,@#60 MOV #BR5,@#62 MOV #16710,@#64 MOV #BR5,@#66 MOV #RCVINT,@#RVECTR ;RECEIVE INTERRUPT VECTOR MOV #TRNINT,@#TVECTR ;TRANSMIT INTERRUPT VECTOR MOV #CLKINT,@#CVECTR ;CLOCK INTERRUPT VECTOR .IFNZ DEBUG MOV #RCVINT,@#34 ;CHECKOUT RECEIVE INT (TRAP) MOV #T‰CMP R1,#JULEND BLT HEAD10 MOVB PC,-(SP) ;LOCKOUT TIMER UPDATE MOVB #340,PS MOV #TIMEAS,R1 ;PUT HUB TIME INTO HEADER HEAD20 = . MOVB (R1)+,(R0) MOVB (R0)+,BCCOUT JSR PC,DELAY CMP R1,TIMEAS+5 ;ONE EXTRA CHARACTER FOR BLT HEAD20 ;A 10 CHAR HEADER (FOR ANDY) MOVB (SP)+,PS ;RELEASE LOCKOUT MOV (SP)+,(SP) ;CLEANUP STACK Š; MOV #DEVICE,-(SP) ; JSR PC,HEADER ; ; CONDITIONS UPON ENTRY -- ; ; SPECIAL CODE FOR DEVICE SELECTION IS ON STACK ; ; CONDITIONS UPON EXIT -- ; ; R0 POINTS TO NEXT AVAILABLE BYTE IN TRNBUF ; R1 IS USED AND NOT RESTORED ; HEADER = . MOV #TRNBUF+DATA,R0 ;GET DATA ADDRESS IN TRANSMIT BUFFER MOVB #STX,(R0)+ ;STX CHAR TO HEADER CLR CLRBCC‹E RCV550 ;NO MOVB #8.,MODE ;SET RECEIVE MODE TO EXPECT ACK/NAK RCV560 = . MOVB #ETX,-(SP) ;PUT TRAILER INTO BUFFER JSR PC,TRAILR ;AFTER SENDING BR RCV500 ;GO TRANSMIT TO TERMINAL ; ; PROCESS MANUAL ENTRY ; RCV570 = . MOV #RCVBUF+MSGDAT,R0 ;GET ADDRESS OF MESSAGE DATA CMPB (R0),#'. ;IS FIRST CHAR A PERIOD? BEQ RCV6ŒRNINT,@#30 ;CHECKOUT TRANSMIT INT (EMT) .ENDC MOV #BR4,R0 MOV R0,@#RVECTR+2 MOV R0,@#TVECTR+2 .IFNZ DEBUG MOV R0,@#36 MOV R0,@#32 .ENDC MOV #BR6,R0 MOV R0,@#CVECTR+2 MOV #STACK,SP ;SET STACK POINTER IOT ;RESET IOX .WORD 0 .BYTE RESET,0 IOT ;SET RESTART ADDRESS � RTS PC ;RETURN TO CALLER .PAGE ; ; TRAILR -- ROUTINE TO PUT TRAILER IN TRANSMIT BUFFER: I.E. ; ETX/ETB,BCC,FF; ALSO PUTS CHAR COUNT IN TRNBUF HEADER ; ; CALLING SEQUENCE -- ; ; MOV #TERMCH,-(SP) ; JSR PC,TRAILR ; ; CONDITIONS UPON ENTRY -- ; ; TERMINATING CHAR ETX OR ETB IS RT. JUSTIFIED ON STACK ; RO POINTS TO NEXT AVAIL BYTE IN TRNBUF ; TRŽ ;CLEAR BCC REGISTER JSR PC,DELAY ;DELAY FOR BCC HDWR MOVB 2(SP),(R0) ;DEVICE CODE TO HEADER MOVB (R0)+,BCCOUT ;OUTPUT TO BCC CALCULATOR JSR PC,DELAY ;DELAY FOR BCC HDWR MOV #JULDAY,R1 ;PUT JULIAN DATE INTO BUFFER HEADER HEAD10 = . MOVB (R1)+,(R0) MOVB (R0)+,BCCOUT JSR PC,DELAY CMP R1,#JULEND BLT HEAD10 MOVB PC,-(SP) �20 ;YES MOVB #ASR33,-(SP) ;SPECIFY OUTPUT TO ASR33 JSR PC,HEADER MOV #TMSG01,R1 ;GET MSG ADDRESS RCV572 = . MOVB (R1)+,(R0) ;MOVE A CHAR TO BUFFER MOVB (R0)+,BCCOUT ;CALC BCC JSR PC,DELAY ;DELAY FOR BCC HARDWARE CMP R1,#TMSG02 ;ALL CHARS MOVED? BLE RCV572 ;NO MOVB #10.,MODE ;SET RECEIVE MODE TO BR RCV560 ;E� .WORD DEMO .BYTE RESTRT,0 IOT ;INIT LSR .WORD LSR .BYTE INIT,LSRSLT IOT ;INIT LSP .WORD LSP .BYTE INIT,LSPSLT MOV #LENGTH!RSPEED,RCSR ;SET DC11 RECEIVER CHAR LENGTH ;AND SPEED MOV #STOPCD!TSPEED,TCSR ;SET DC11 TRANSMITTER STOP CODE ;AND SPEED DEM005 = . CMP #INITL‘AILR = . MOVB 2(SP),(R0) ;PUT TERMINATING CHAR IN TRNBUF MOVB (R0)+,BCCOUT ;CALC BCC JSR PC,DELAY ;DELAY FOR BCC HDWR MOVB BCCMSB,(R0)+ ;PUT BCC IN BUFFER MOVB BCCLSB,(R0)+ MOVB #FF,(R0)+ SUB #TRNBUF+DATA,R0 ;GET CHAR COUNT AND MOV R0,TRNBUF ;PUT INTO BUFFER HEADER MOV (SP)+,(SP) ;CLEAN UP STACK RTS PC ;RETURN .PAGE ’ ;LOCKOUT TIMER UPDATE MOVB #340,PS MOV #TIMEAS,R1 ;PUT HUB TIME INTO HEADER HEAD20 = . MOVB (R1)+,(R0) MOVB (R0)+,BCCOUT JSR PC,DELAY CMP R1,#TIMEAS+5 ;ONE EXTRA CHARACTER FOR BLT HEAD20 ;A 10 CHAR HEADER (FOR ANDY) MOVB (SP)+,PS ;RELEASE LOCKOUT MOV (SP)+,(SP) ;CLEANUP STACK RTS PC ;RETURN TO CALLER .PAGE ; ; “XPECT ACK/NAK ; ; PRINT CONTENTS OF RCVBUF AT HUB ; RCV575 = . BIC #DTRDY,RCSR ;NO, DROP LINE BY RESET DATA TERM. RDY CLRB MODE ;SET RECEIVE MODE TO EXPECT RING RCV578 = . IOT ;OUTPUT CR, LF, LF TO HUB TTY .WORD CRLFLF .BYTE WRITE,TTYSLT MOV RCVBUF+COUNT,R1 ;GET NO. CHARS IN MSG (LESS HEADER) SUB #HDRSIZ,R1 MOV R1,TTOBUF+COUNT ;PUT CHAR COUNT IN”,SWITCH BEQ DEM035 IOT ;TYPE MSG00 .WORD MSG00 .BYTE WRITE,TTYSLT MOV #600.,TTIBUF ;PUT MAX CHAR TO INPUT IN BUF HDR IOT ;GET "Y" OR "N" RESPONSE .WORD TTIBUF .BYTE READ,KBDSLT DEM010 = . TSTB TTIBUF+STATUS ;IS INPUT DONE? BPL DEM010 CMPB TTIBUF+DATA,#'Y ;YES, IS IT "Y"? BNE DEM020 ;NO IOT • ; ; DELAY BETWEEN OUTPUTS TO BCC CALC REGISTER ; ; CALLING SEQUENCE ; ; JSR PC,DELAY ; DELAY = . NOP NOP NOP RTS PC .PAGE ; ; LINE FREQUENCY CLOCK INTERRUPT ROUTINE ; CLKINT = . JSR R5,PUSHR ;SAVE REGS MOV #TIMER,R0 ;GET BEGINNING OF TIMER TABLE CLK010 = . CMP R0,#TIMEND ;HAVE ALL TIMERS BEEN UPDATED? BGE – TRAILR -- ROUTINE TO PUT TRAILER IN TRANSMIT BUFFER: I.E. ; ETX/ETB,BCC,FF; ALSO PUTS CHAR COUNT IN TRNBUF HEADER ; ; CALLING SEQUENCE -- ; ; MOV #TERMCH,-(SP) ; JSR PC,TRAILR ; ; CONDITIONS UPON ENTRY -- ; ; TERMINATING CHAR ETX OR ETB IS RT. JUSTIFIED ON STACK ; RO POINTS TO NEXT AVAIL BYTE IN TRNBUF ; TRAILR = . MOVB 2(SP),(R0) ;PUT TERMINATING CHAR —TO TTY BUFFER MOV #TTOBUF+DATA,R2 ;GET TTY BUFFER DATA ADDRESS MOV #RCVBUF+MSGDAT,R0 ;GET ADDRESS OF RCVBUF DATA RCV580 = . MOVB (R0),(R2)+ ;MOVE DATA FROM DC11 RECEIVE BUFFER CMPB (R0)+,#CR ;IS CHAR A CR? BNE RCV582 ;NO MOVB #LF,(R2)+ ;YES, INSERT A LF FOR TYPEOUT INC TTOBUF+COUNT RCV582 = . DEC R1 ;TO TTY OUTPUT BUFFER BNE ˜ ;READ PUNCHED TAPE .WORD TTIBUF .BYTE READ,LSRSLT BR DEM030 DEM020 = . ;READ KBD IOT .WORD TTIBUF .BYTE READ,KBDSLT DEM030 = . TSTB TTIBUF+STATUS ;IS INPUT DONE? BPL DEM030 ;NO DEM035 = . MOV #TIMER,R0 ;RESET TIMERS DEM040 = . CLR (R0)+ TST (R0)+ CMP R0,#TIMEND BL™ CLK030 ;YES TST (R0) ;IS TIMER INACTIVE (ZERO)? BEQ CLK020 ;YES DEC (R0) ;DECREMENT COUNTER BEQ CLK040 ;TIMEOUT? CLK020 = . CMP (R0)+,(R0)+ ;NO, BUMP POINTER TO NEXT ENTRY IN BR CLK010 ;TIMER TABLE ; CLK030 = . JSR R5,POPR ;RESTORE REGS RTI ;RETURN ; CLK040 = . JSR PCšIN TRNBUF MOVB (R0)+,BCCOUT ;CALC BCC JSR PC,DELAY ;DELAY FOR BCC HDWR MOVB BCCMSB,(R0)+ ;PUT BCC IN BUFFER MOVB BCCLSB,(R0)+ MOVB #FF,(R0)+ SUB #TRNBUF+DATA,R0 ;GET CHAR COUNT AND MOV R0,TRNBUF ;PUT INTO BUFFER HEADER MOV (SP)+,(SP) ;CLEAN UP STACK RTS PC ;RETURN .PAGE ; ; DELAY BETWEEN OUTPUTS TO BCC CALC REGISTER ; ; ›RCV580 IOT ;PRINT MSG ON HUB TTY .WORD TTOBUF .BYTE WRITE,TTYSLT RCV585 = . TSTB TTOBUF+STATUS BPL RCV585 JMP RCV070 ;GO ENABLE RECEIVE INTERRUPT ; ; PREPARE END OF DAY REPORT FOR OUTPUT ; RCV620 = . MOVB #ASR33,-(SP) ;PUT MSG HDR IN BUF JSR PC,HEADER MOV #TTIBUF+DATA,R1 ;GET DATA ADDRESS MOV TTIBUF+COUNT,R3 ADD œT DEM040 CLRB MODE ;SET RECEIVE MODE TO EXPECT RING BIS #ENABLE,LKS ;ENABLE REAL-TIME CLOCK BIS #ENABLE,RCSR ;ENABLE DC11 RECEIVE INTERRUPT DEM050 = . .IFZ DEBUG WAIT ;IDLE!! BR DEM050 .ENDC .PAGE .IFNZ DEBUG ;* ;* SIMULATED DC11 CHECKOUT. THIS SECTION CAUSES THE LOGIC ;* EXPECTED FROM THE DC11 AND CP. THE SIMULATED INPUT MESSAGE ;*�,@2(R0) ;CALL TIMEOUT SUBROUTINE BR CLK020 ;GO LOOK AT NEXT TIMER .PAGE ; ; EOTTO -- EOT TIMEOUT SUBR ; ; CALLING SEQUENCE -- ; ; JSR PC,EOTTO ; EOTTO = . JSR R5,PUSHR ;SAVE REGS BIC #DTRDY,RCSR ;RESET DATA TERMINAL READY CLRB MODE ;SET RECEIVE MODE TO EXPECT RING MOV #ERR03,MSG01F ;TYPE -- "TRANSMISSION ERROR 03!" IOT žCALLING SEQUENCE ; ; JSR PC,DELAY ; DELAY = . NOP NOP NOP RTS PC .PAGE ; ; LINE FREQUENCY CLOCK INTERRUPT ROUTINE ; CLKINT = . JSR R5,PUSHR ;SAVE REGS MOV #TIMER,R0 ;GET BEGINNING OF TIMER TABLE CLK010 = . CMP R0,#TIMEND ;HAVE ALL TIMERS BEEN UPDATED? BGE CLK030 ;YES TST (R0) ;IS TIMER INACŸ #TTIBUF+DATA,R3 ;GET ADDRESS OF END OF DATA RCV630 = . MOVB (R1)+,(R0) ;MOVE CHAR TO BUF MOVB (R0)+,BCCOUT ;CALC BCC JSR PC,DELAY ;DELAY FOR BCC HDWR CMP R1,R3 ;ARE ALL CHARS OUT BLT RCV630 ;NO MOVB #ETX,-(SP) ;PUT ETX TRAILER IN BUF JSR PC,TRAILR MOVB #9.,MODE ;SET MODE TO EXPECT ACK/NAK BR RCV500 ;GO OUTPUT REPORT   IS RETRIEVED FROM THE OPERATOR DEFINED EOD REPORT. ;* $DC11 = . MOV #RING!ERROR,RCSR ;SET RING STATUS (HELLO?) TRAP ; AND SIMULATE DC11 INTERRUPT MOV #CARTRN!ERROR!DETECT,RCSR ;NOW, CARRIER TRANSITION TRAP ;AND CARRIER DETECT MOV #DONE,RCSR MOV #STX,RBUF ;ALWAYS NEED STX TRAP MOV #TTIBUF+DATA,R0 ; $DC11A = ¡.WORD MSG01 .BYTE WRITE,TTYSLT CLRB RBUF ;CLEAR DC11 RECEIVE BUFFER BIS #ENABLE,RCSR ;ENABLE DC11 RECEIVE INTERRUPTS JSR R5,POPR ;RESTORE REGS RTS PC ;RETURN .PAGE ; ; ACKTO -- ACK TIMEOUT ROUTINE ; ; CALLING SEQUENCE -- ; ; JSR PC,ACKTO ; ACKTO = . JSR R5,PUSHR ;SAVE REGS BIC #DTRDY,RCSR ;RESET DATA TERM¢TIVE (ZERO)? BEQ CLK020 ;YES DEC (R0) ;DECREMENT COUNTER BEQ CLK040 ;TIMEOUT? CLK020 = . CMP (R0)+,(R0)+ ;NO, BUMP POINTER TO NEXT ENTRY IN BR CLK010 ;TIMER TABLE ; CLK030 = . JSR R5,POPR ;RESTORE REGS RTI ;RETURN ; CLK040 = . JSR PC,@2(R0) ;CALL TIMEOUT SUBROUTINE BR CLK020 £; ; PROCESS ACK/NAK AFTER SENDING RESPONSE TO CP ; RCV700 = . BIC #ENABLE,RCSR ;DISABLE DC11 RCV INT. MOVB RBUF,R4 ;GET CHAR CMPB R4,#ACK ;IS CHAR AN ACK? BNE RCV810 ;NO CLR ACKTMR ;RESET ACK TIMER JMP @RCV705-14.(R0) ;BRANCH ON MODE RCV705 = . .WORD RCV710 ;7, RECEIVE ACK AFTER SENDING INVOICE .WORD RCV800 ;8, ACK AFTER SE¤ . MOV #DONE,RCSR ;SET CHARACTER READY STATUS MOVB (R0)+,RBUF ;GET NEXT CHARACTER CMPB RBUF,#7 ;IS IT A BELL (END OFMESSAGE) BEQ $DC11B ;YES MOV R0,-(SP) ;SAVE ADDRESS TRAP ;SIMULATE MOV (SP)+,R0 BR $DC11A ;GO BACK FOR MORE ; $DC11B = . MOV #ETX,RBUF ;THAT'S ALL, FOLKS! ¥INAL READY CLRB MODE ;SET RECEIVE MODE TO EXPECT RING MOV #ERR02,MSG01F ;TYPE -- "TRANSMISSION ERROR 02!" IOT .WORD MSG01 .BYTE WRITE,TTYSLT CLRB RBUF ;CLEAR DC11 RECEIVE BUFFER BIS #ENABLE,RCSR ;ENABLE DC11 RECEIVE INTERRUPTS JSR R5,POPR ;RESTORE REGISTERS RTS PC ;RETURN .PAGE ; UPTIME -- TIME OF DAY UPDATE SUBROUTINE ; ; ¦;GO LOOK AT NEXT TIMER .PAGE ; ; EOTTO -- EOT TIMEOUT SUBR ; ; CALLING SEQUENCE -- ; ; JSR PC,EOTTO ; EOTTO = . JSR R5,PUSHR ;SAVE REGS MOV #ERR03,MSG01F ;TYPE -- "TRANSMISSION ERROR 03!" BR ACK010 .PAGE ; ; ACKTO -- ACK TIMEOUT ROUTINE ; ; CALLING SEQUENCE -- ; ; JSR PC,ACKTO ; ACKTO = . JSR R5,PUSHR ;SAVE RE§NDING AUDIT ERR MSG .WORD RCV708 ;9, ACK AFTER SENDING EOD REPORT .WORD RCV575 ;10, ACK AFTER SENDING MANUAL ACCEPT ; RCV708 = . BIC #DTRDY,RCSR ;DROP LINE - RESET DATA TERMINAL READY CLRB MODE ;SET MODE TO EXPECT RING JMP RCV070 ;GO ENABLE RECEIVE INTERRUPT ; RCV710 = . BIC #DTRDY,RCSR ;DROP LINE - RESET DATA TERMINAL READY CLRB MODE ;SET MOD¨ TRAP MOV #123,RBUF ;DUMMY BCC TRAP MOV #345,RBUF TRAP MOV #377,RBUF ;AND THE GRAND FINALE TRAP MOV #17777,R1 ;DELAY FOR S/W TO RESPOND, ; ;SEND ACK (3 SEC DELAY) $DC11C = . DEC R1 BNE $DC11C MOV #EOT,RBUF ;SEND LINE TURNAROUND - EOT TRAP ; ;NOW IT'S UP TO TH© UPDATES ASCII TIME HHMM IN TIMEAS ; ; CALLING SEQUENCE -- ; ; JSR PC,UPTIME ; UPTIME = . JSR R5,PUSHR ;SAVE REGS MOV #MINUTE,TIMDAY ;SET TIMER MOV #TIMEAS+3,R0 CMPB (R0),'9 ;IS MIN UNITS DIGIT EQ 9? BEQ SET010 ;YES SET005 = . INCB (R0) ;NO, INCREMENT DIGIT SET008 = . JSR R5,POPR ;RETURN RTªGS MOV #ERR02,MSG01F ;TYPE -- "TRANSMISSION ERROR 02!" ACK010 = . BIC #DTRDY,RCSR ;RESET DATA TERMINAL READY CLRB MODE ;SET RECEIVE MODE TO EXPECT RING IOT .WORD MSG01 .BYTE WRITE,TTYSLT CLRB RBUF ;CLEAR DC11 RECEIVE BUFFER BIS #ENABLE,RCSR ;ENABLE DC11 RECEIVE INTERRUPTS JSR R5,POPR ;RESTORE REGISTERS RTS PC ;RETURN «E TO EXPECT RING ;* * * * * * * F R I L L * * * * * * * BR RCV900 ;GO PUT INVOICE ON MAG TAPE ; RCV800 = . BIC #DTRDY,RCSR ;DROP LINE CLRB MODE ;SET MODE TO EXPECT RING IOT ;TYPE -- "ERROR IN AUDIT TRAIL!" .WORD MSG03 .BYTE WRITE,TTYSLT RCV805 = . TSTB MSG03+STATUS BPL RCV805 BR RCV578 ;GO TYPE CONTENTS OF RCVBUF ¬E PROGRAM $DC11D = . ;TO SEND RESPONSE MESSAGE CMP SWITCH,#-1 BNE $DC11D BR $DC11 ;REPEAT WHEN SWITCHES = 177777 .ENDC .PAGE ; ; DC11 RECEIVE INTERRUPT ROUTINE ; RCVINT = . JSR R5,PUSHR ;SAVE REGS. BIT #ERROR,RCSR ;IS ERROR BIT SET? BNE RCV030 ;YES MOVB MODE,R0 ;NO, BRANCH ON RECEIVE MODE ­S PC SET010 = . MOVB '0,(R0) ;ZERO MIN UNITS DIGIT CMPB -(R0),'5 ;IS TENS DIGIT EQ 5? BEQ SET020 ;YES BR SET005 ;NO, INCREMENT MIN TENS DIGIT SET020 = . MOVB '0,(R0) ;ZERO MIN TENS DIGIT CMPB -(R0),'4 ;IS HR UNITS DIGIT GE 4? BGE SET040 ;YES BR SET005 ;NO, INCREMENT HR UNITS DIGIT SET040 = . CMPB ® .PAGE ; UPTIME -- TIME OF DAY UPDATE SUBROUTINE ; ; UPDATES ASCII TIME HHMM IN TIMEAS ; ; CALLING SEQUENCE -- ; ; JSR PC,UPTIME ; UPTIME = . JSR R5,PUSHR ;SAVE REGS MOV #MINUTE,TIMDAY ;SET TIMER MOV #TIMEAS+3,R0 CMPB (R0),#'9 ;IS MIN UNITS DIGIT EQ 9? BEQ SET010 ;YES SET005 = . INCB (R0) ;NO, INCREMENT DIGIT ¯ ;ON HUB TTY ; ; ACK NOT RECEIVED, TRANSMIT AGAIN ; RCV810 = . CMPB R4,#NAK ;IS CHAR A NAK? BEQ RCV815 ;YES JMP RCV070 ;NO, IGNORE INTERRUPT RCV815 = . CLR ACKTMR ;RESET ACK TIMER DECB REPEAT ;DECR REPEAT COUNT BEQ RCV820 ;ALL TRYS EXHAUSTED? JMP RCV510 ;NO, TRY AGAIN ; RCV820 = . °ASL R0 JMP @RCV010-4(R0) ; ; BRANCH TABLE ; RCV010 = . .WORD RCV100 ;RECEIVE STX MODE = 2 .WORD RCV150 ;RECEIVE DATA = 3 .WORD RCV200 ;RECEIVE BCC(MSB) = 4 .WORD RCV250 ;RECEIVE BCC(LSB) = 5 .WORD RCV320 ;RECEIVE EOT = 6 .WORD RCV700 ;RECEIVE ACK/NAK = 7 .WORD RCV7± -1(R0),'2 ;IS HR TENS DIGIT EQ 2? BEQ SET050 ;YES CMPB (R0),'9 ;NO, IS HR UNITS DIGIT EQ 9? BLT SET005 ;NO, INCR HR UNITS DIGIT MOVB '0,(R0) ;YES, ZERO HR UNITS DIGIT DEC R0 ;GO INCR HR TENS DIGIT BR SET005 SET050 = . MOVB '0,-1(R0) ;SET HR TENS DIGIT TO 0 MOVB '1,(R0) ;SET HR UNITS DIGIT TO 1 BR SET008 ²SET008 = . JSR R5,POPR ;RETURN RTS PC SET010 = . MOVB #'0,(R0) ;ZERO MIN UNITS DIGIT CMPB -(R0),#'5 ;IS TENS DIGIT EQ 5? BEQ SET020 ;YES BR SET005 ;NO, INCREMENT MIN TENS DIGIT SET020 = . MOVB #'0,(R0) ;ZERO MIN TENS DIGIT CMPB -(R0),#'3 ;IS HR UNITS DIGIT GE 3? BGE SET040 ;YES BR SET005 ³ MOV #ERR01,MSG01F ;SET UP HUB ERROR MSG JMP RCV090 ;GO DROP LINE AND TYPE ERROR MESSAGE ; ; ; PREPARE INVOICE DATA IN EBCDIC CHARS AND WRITE ON MAG TAPE ; RCV900 = . MOV #TRNBUF+DATA+11.,R0 ;GET ADDR OF INVOICE IN BUFFER RCV905 = . MOVB (R0)+,R3 ;GET A CHAR ; ; DO ASCII/EBCDIC CONVERSION ; CMPB R3,#40 ;IS CHAR IN ASCII/EBCDIC TABLE? BLT RCV940 ;NO ´00 ;RECEIVE ACK/NAK = 8 .WORD RCV700 ;RECEIVE ACK/NAK = 9 .WORD RCV265 ;RECEIVE X'FF' = 10 ; RCV020 = . JSR R5,POPR ;RESTORE REGS. RTI ;RETURN ; ; ERROR BIT PROCESSING ; RCV030 = . DECB MODE ;BRANCH ON MODE BMI RCV040 ;RING BEQ RCV050 ;CARRIER TRANSITION BIT µ.PAGE ;*********************************************************************** ;* ** ;* B L A N K ** ;* ** ;* THIS SUBROUTINE STORES N CONSECUTIVE BLANKS BEGINNING AT ** ;* LOCATION ADDR. THE LINKAGE IS: ** ;* ¶ ;NO, INCREMENT HR UNITS DIGIT SET040 = . CMPB -1(R0),#'2 ;IS HR TENS DIGIT EQ 2? BEQ SET050 ;YES CMPB (R0),#'9 ;NO, IS HR UNITS DIGIT EQ 9? BLT SET005 ;NO, INCR HR UNITS DIGIT MOVB #'0,(R0) ;YES, ZERO HR UNITS DIGIT DEC R0 ;GO INCR HR TENS DIGIT BR SET005 SET050 = . MOVB #'0,-1(R0) ;SET HR TENS DIGIT TO 0 MOVB #'· CMPB R3,#132 BGT RCV960 ;NO MOV R3,R5 ;YES, GET EBCDIC CHAR SUB #40,R5 MOVB EBCDIC(R5),R3 RCV908 = . ; ; FLIP DATA IN EACH BYTE OF INVOICE (MAG TAPE CONTROLLER FIX) ; MOV #1,R4 ;SET MASK TO BIT 0 RCV910 = . ASLB R3 ;SHIFT LSB TO C BCS RCV920 ;WAS LSB SET BICB R4,R5 ;NO, CLEAR APPROPRIATE BIT IN RESULT RCV9¸ #CARTRN,RCSR ;OTHER, HAVE WE LOST RECEIVE CARRIER? BNE RCV080 ;YES INCB RCVERR ;NO, INCR RECEIVE ERROR COUNT CLR RBUF ;CLEAR RCSR DONE BIT TO PREVENT OVERRUN BR RCV020 ;GO RETURN ; ; PROCESS A RING ; RCV040 = . BIT #RING,RCSR ;IS IT A RING? BEQ RCV020 ;NO, IGNORE INTERRUPT BIS #DTRDY,RCSR ;SET DATA TERMINAL READY MOVB #1¹ ** ;* R4 = ADDR ** ;* R5 = N ** ;* JSR PC,BLANK ** ;* ** ;*********************************************************************** ; BLANK = . MOVB #' ,(R4)+ ;MOVE IN A BLANK DEC R5 ;DECREMENT CHARACTº0,(R0) ;SET HR UNITS DIGIT TO 0 BR SET008 .PAGE ;*********************************************************************** ;* ** ;* B L A N K ** ;* ** ;* THIS SUBROUTINE STORES N CONSECUTIVE BLANKS BEGINNING AT ** ;* LOCATION ADDR. THE LINKAGE IS: »15 = . ASLB R4 ;SHIFT MASK TO NEXT MOST SIG. BIT BEQ RCV925 ;DONE? BR RCV910 ;NO RCV920 = . BISB R4,R5 ;SET APPROPRIATE BIT BR RCV915 ;CONTINUE RCV925 = . MOVB R5,-1(R0) ;REPLACE BYTE WITH ITS FLIP CMP R0,#TRNBUF+DATA+11.+INVEND-INVOICE ;ALL DATA FLIPPED? BMI RCV905 ;NO, GET NEXT BYTE ; ; WRITE INVOIC¼,MODE ;SET MODE TO EXPECT CARRIER TRANSITION BR RCV020 ;GO RETURN ; ; PROCESS CARRIER TURNON ; RCV050 = . BIT #CARTRN,RCSR ;IS INT. A CARRIER TRANSITION? BEQ RCV020 ;NO, IGNORE INTERRUPT RCV060 = . BIT #DETECT,RCSR ;IS CARRIER DETECT ON? BEQ RCV080 ;NO MOVB #2,MODE ;SET RECEIVE MODE TO EXPECT STX CLRB RCVERR ;ZERO ERROR COUNT ½ER COUNTER BGT BLANK ;AND GO BACK FOR MORE RTS PC ;GO HOME .PAGE ;*********************************************************************** ;* ** ;* M O V E ** ;* ** ;* THIS SUBROUTINE MOVES N CHARACTERS FROM LOCATION ADDR1 TO ** ;* LOCATI¾ ** ;* ** ;* R4 = ADDR ** ;* R5 = N ** ;* JSR PC,BLANK ** ;* ** ;*********************************************************************** ; BLANK = . MOVB #' ,(R4)+ ¿E ON MAG. TAPE ; RCV930 = . MOV #11.,R5 ;SET NO. OF TRYS FOR WRITE RCV932 = . MOV #TRNBUF+DATA+11.,MA ;YES, PUT INVOICE ADDRESS IN ;MEMORY ADDRESS REGISTER MOV #INVEND-INVOICE/2,WC ;SET WORD COUNT DEC R5 ;DECR REPEAT COUNT BGT RCV933 ;ALL TRYS EXHAUSTED? MOV #WEXG,COM ;YES, WRITE EXTENDED GAP JSR PC,TAPRDY ;AT FRONT OF RECÀ CLR RCVBUF+COUNT ;ZERO CHAR COUNT RCV070 = . BIS #ENABLE,RCSR ;ENABLE DC11 RECEIVE INT. BR RCV020 ;GO RETURN ; ; LOST RECEIVE CARRIER ; RCV080 = . MOV ERR00,MSG01F ;PUT ERROR CODE "00" IN ERROR MSG RCV090 = . BIC #DTRDY,RCSR ;RESET DATA TERMINAL READY CLRB MODE ;SET RECEIVE MODE TO EXPECT RING IOT ;TYPE - "TRANSMISSION ERROR XX!"ÁON ADDR2. THE LINKAGE IS: ** ;* ** ;* JSR R5,MOVE ** ;* .WORD ADDR1,ADDR2,N -------- ** ;* . . ! ** ;* . . ! ANY NUMBER OF PAIRS ** ;* . . ! ** ;*  ;MOVE IN A BLANK DEC R5 ;DECREMENT CHARACTER COUNTER BGT BLANK ;AND GO BACK FOR MORE RTS PC ;GO HOME .PAGE ;*********************************************************************** ;* ** ;* M O V E ** ;* ** ;* THIS SUBÃORD MOV #10.,R5 ;SET REPEAT C3UNT BR RCV935 RCV933 = . MOV #WRT,COM ;WRITE THE INVOICE ON TAPE JSR PC,TAPRDY RCV935 = . BIT #ERR,STAT ;IS FILE GOOD? BNE RCV938 ;NO, GO DO IT AGAIN JMP RCV578 ;GO TYPE CONTENTS OF RCVBUF AT HUB RCV938 = . BIC #ERR,STAT ;CLEAR ERROR BIT MOV #BCKR,COM ;BACKSPACE A RECOR Ä .WORD MSG01 .BYTE WRITE,TTYSLT RCV095 = . TSTB MSG01+STATUS BPL RCV095 BR RCV070 ;GO ENABLE RECEIVE INTERRUPT ; ; PROCESS STX ; RCV100 = . CMPB RBUF,#STX BNE RCV120 RCV110 = . CLR CLRBCC ;CLEAR BCC REGISTER MOVB #3,MODE ;SET RECEIVE MODE TO EXPECT DATA BR RCV020 ;GO RETURN RCV120 = . BIT Å .WORD ADDR1,ADDR2,N -------- ** ;* .WORD -1 ** ;* ** ;* WHERE THE -1 TERMINATES THE LIST; EXECUTION RETURNS TO THE ** ;* FIRST INSTRUCTION AFTER THE -1. ** ;* ** ;***********************************************************************ÆROUTINE MOVES N CHARACTERS FROM LOCATION ADDR1 TO ** ;* LOCATION ADDR2. THE LINKAGE IS: ** ;* ** ;* JSR R5,MOVE ** ;* .WORD ADDR1,ADDR2,N -------- ** ;* . . ! ** ;* . . ! ANY NUMBER OF PAIRS ** ;* ÇJSR PC,TAPRDY ;READY? BR RCV932 ;GO TRY AGAIN ; ; ; TAPRDY = . MOV #20.,R4 ;DELAY FOR CONTROLLER TO SET READY AFTER DEC R4 ;COMMAND BNE .-2 BIT #200,@#STAT ;IS CONTROLLER READY? BEQ .-6 RTS PC ;RETURN ; ; SPECIAL CHARACTER ASCII/EBCDIC CONVERSION ; RCV940 = . CMPB R3,#TAB ;TAB? BNE RCÈ #PARITY,RCSR ;IS PARITY GOOD? BEQ RCV020 ;YES, IGNORE INTERRUPT INCB RCVERR ;NO, INCR ERROR COUNT BR RCV110 ;ASSUME IT WAS STX W/BAD PARITY ; ; PROCESS DATA CHAR ; RCV150 = . BIT #DONE,RCSR ;IS CHAR AVAIL? BEQ RCV020 ;NO, FALSE INTERRUPT MOVB RBUF,R4 ;GET CHAR MOVB R4,BCCOUT ;OUTPUT CHAR TO BCC REGISTER CMPB R4,#ETX É ; MOVE = . MOV (R5)+,R2 ;LOAD ADDRESS ADDR1 CMP R2,#-1 ;CHECK FOR END OF LIST BEQ MOVA10 ;AND BRANCH IF WE FOUND IT MOV (R5)+,R3 ;LOAD ADDRESS ADDR2 MOV (R5)+,R4 ;AND GET THE NO. OF CHARACTERS ; MOVA00 = . MOVB (R2)+,(R3)+ DEC R4 ;MOVE THE CHARACTER STRING BGT MOVA00 BR MOVE ;GO GET NEXT LIST ; MOÊ . . ! ** ;* .WORD ADDR1,ADDR2,N -------- ** ;* .WORD -1 ** ;* ** ;* WHERE THE -1 TERMINATES THE LIST; EXECUTION RETURNS TO THE ** ;* FIRST INSTRUCTION AFTER THE -1. ** ;* ** ËV945 ;NO MOVB #5,R3 BR RCV908 RCV945 = . CMPB R3,#LF ;LF? BNE RCV950 ;NO MOVB #45,R3 BR RCV908 RCV950 = . CMPB R3,#FORM ;FORM? BNE RCV955 ;NO MOV #24,R3 BR RCV908 RCV955 = . CMPB R3,#CR ;CR? BNE RCV960 MOVB #25,R3 BR RCV908 RCV960 = . Ì ;IS CHAR AN ETX? BEQ RCV180 ;YES CMPB R4,#ETB ;IS CHAR AN ETB? BEQ RCV180 ;YES INC RCVBUF+COUNT ;INCR CHAR COUNT IN BUFFER HEADER MOV RCVBUF+COUNT,R0 ;GET COUNT CMP R0,#273. ;IS DATA CHAR COUNT .GT. 273? BGT RCV170 ;YES MOVB R4,RCVBUF+DATA-1(R0) ;PUT DATA INTO BUFFER RCV160 = . BR RCV020 ;GO RETURN ; RCV170 = ÍVA10 = . RTS R5 .PAGE ;*********************************************************************** ;* ** ;* T E S T ** ;* ** ;* THIS SUBROUTINE TESTS N CONSECUTIVE CHARACTERS. IF ALL N ** ;* CHARACTERS ARE ASCII ZEROES OR BLANKS, THEN TEST RETURNS TO ** ;* LOCAÎ;*********************************************************************** ; MOVE = . MOV (R5)+,R2 ;LOAD ADDRESS ADDR1 CMP R2,#-1 ;CHECK FOR END OF LIST BEQ MOVA10 ;AND BRANCH IF WE FOUND IT MOV (R5)+,R3 ;LOAD ADDRESS ADDR2 MOV (R5)+,R4 ;AND GET THE NO. OF CHARACTERS ; MOVA00 = . MOVB (R2)+,(R3)+ DEC R4 ;MOVE THE CHARACTER STRING BGÏ MOVB #100,R3 ;SUBSTITUTE A BLANK (SPACE) BR RCV908 .PAGE ; ; DC11 TRANSMIT ROUTINE ; ; CALLING SEQUENCE: ; MOV #BUFFER,-(SP) ; JSR PC,D11OUT ; D11OUT = . JSR R5,PUSHR ;SAVE REGS. MOV 14.(SP),R0 ;GET BUFFER ADDRESS MOV R0,CURBUF ;SAVE CURRENT BUF ADDR BISB #BUSY,STATUS(R0);SET BUFFER BUSY CLR COUNÐ. INCB RCVERR ;INCR ERROR COUNT BR RCV160 ;GO RETURN ; ; PROCESS ETX/ETB ; RCV180 = . MOVB #4,MODE ;SET MODE FOR RECEIVING BCC(MSB) BR RCV020 ;GO RETURN ; ; PROCESS MOST SIG. BYTE OF BCC ; RCV200 = . CMPB RBUF,BCCMSB ;DOES IT MATCH? BNE RCV210 ;NO RCV205 = . MOVB #5,MODE ;YES, SET MODE FOR RECEIPT OF BCC(LSB)ÑTION 'RETURN'. OTHERWISE, CONTROL IS RETURNED AS USUAL. ** ;* ** ;* JSR R5,TEST ** ;* .WORD ADDR ;FIRST CHARACTER TO TEST ** ;* .WORD N ;NUMBER OF CHARACTERS ** ;* .WORD RETURN ;ZERO STRING RETURN ADDRESS ** ;* ** ;***ÒT MOVA00 BR MOVE ;GO GET NEXT LIST ; MOVA10 = . RTS R5 .PAGE ;*********************************************************************** ;* ** ;* T E S T ** ;* ** ;* THIS SUBROUTINE TESTS N CONSECUTIVE CHARACTERS. IF ALL N ** ;* CHARACÓT(R0) ;ZRO CHAR COUNT BIS #REQSND,TCSR ;SET REQUEST TO SEND D11010 = . BIT #CLRSND,TCSR ;CLEAR TO SEND? BEQ D11010 ;NO ADD #DATA,R0 ;OUTPUT 1ST CHAR MOVB (R0),TBUF BIS #ENABLE,TCSR ;ENABLE TRANSMITTER INTERRUPT .IFNZ DEBUG ; D11015: BIT #REQSND,TCSR ;DONE TRANSMITTING? BEQ D11020 ;YES EMT 0 ;SIMULATE TRANÔ BR RCV020 ;GO, RETURN RCV210 = . INCB RCVERR ;INCR ERROR COUNT BR RCV205 ;GO SET MODE ; ; PROCESS LEAST SIG. BYTE OF BCC ; RCV250 = . CMPB RBUF,BCCLSB ;DOES IT MATCH? BNE RCV290 ;NO RCV260 = . MOVB #10.,MODE ;SET MODE TO EXPECT X'FF' JMP RCV020 ; ; RECEIVED "FF" ; RCV265 = . BIC #ENABLE,RCSR Õ******************************************************************** ; TEST = . MOV (R5)+,R3 ;LOAD ADDR MOV (R5)+,R4 ;AND LOAD N ; TESA00 = . CMPB (R3),#' ;IS IT BLANK? BEQ TESA10 ;BRANCH IF YES CMPB (R3)+,#'0 ;HOW ABOUT ZERO? BEQ TESA20 ;YES TST (R5)+ ;NON-ZERO AND NON-BLANK FOUND RTS R5 ;SO EFFECT NORMAL RETUÖTERS ARE ASCII ZEROES OR BLANKS, THEN TEST RETURNS TO ** ;* LOCATION 'RETURN'. OTHERWISE, CONTROL IS RETURNED AS USUAL. ** ;* ** ;* JSR R5,TEST ** ;* .WORD ADDR ;FIRST CHARACTER TO TEST ** ;* .WORD N ;NUMBER OF CHARACTERS ** ;* .WORD RETURN ;ZERO STRING RETURN ADDRESS ** ;* ×SMIT OUTPUT INTERRUPT BR D11015 ; D11020: CMPB #ACK,DATA(R0) BEQ D11025 ;DON'T PRINT IF IT'S ONLY AN ACK MOV #ACK,RBUF ;PUT ACK IN DUMMY RECEIVE BUFFER MOV #DONE,RCSR ;SET CHARACTER READY BIT TRAP ;AND SIMULATE THE CP 'ACK' SIGNAL IOT ;PRINT OUTPUT BUFFER ON ASR .WORD TRNBUF .BYTE WRITE,TTYSLT D11023 = . TSTB TRNBUFØ;DISABLE RECEIVE INTERRUPTS MOV #RCVBUF+DATA+10.,R0 ;GET DATE/TIME FROM MSG RECEIVED MOV #DAYTIM,R1 RCV270 = . MOVB (R0)+,(R1)+ CMP R0,#RCVBUF+DATA+16. BLE RCV270 TSTB RCVERR ;ANY ERRORS IN TRANSMISSION? BNE RCV300 ;YES MOVB #ACK,TRNBUF+DATA ;PUT "ACK,FF" INTO DC11 OUTPUT BUFFER MOVB #FF,TRNBUF+DATA+1 MOV #2,TRNBUF ;SET NO. CHARS TO 2 ÙRN ; TESA10 = . INC R3 ; TESA20 = . DEC R4 ;DECREMENT CHARACTER COUNTER BGT TESA00 ;BRANCH BACK FOR MORE MOV (R5)+,R5 ;AT THIS POINT, ALL CHARS ARE ZERO RTS R5 ;OR BLANK. SO EXIT TO 'RETURN' .PAGE ;*********************************************************************** ; * ; Ú ** ;*********************************************************************** ; TEST = . MOV (R5)+,R3 ;LOAD ADDR MOV (R5)+,R4 ;AND LOAD N ; TESA00 = . CMPB (R3),#' ;IS IT BLANK? BEQ TESA10 ;BRANCH IF YES CMPB (R3)+,#'0 ;HOW ABOUT ZERO? BEQ TESA20 ;YES TST (R5)+ ;NON-ZERO AND Û+STATUS BPL D11023 BICB #BUSY,STATUS(R0) ; D11025 = . .ENDC JSR R5,POPR ;RESTORE REGS MOV (SP)+,(SP) ;SWAP PC AND BUF ADDR; POP STACK RTS PC ;RETURN .PAGE ; ; DC11 TRANSMITTER INTERRUPT ROUTINE ; TRNINT = . JSR R5,PUSHR ;SAVE REGS MOV CURBUF,R0 ;GET CURRENT BUFFER INC COUNT(R0) ;INCR CHAR COUNT CMÜ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 BR RCV070 ;GO WAIT FOR EOT ; RCV290 = . INCB RCVERR ;INCR ERROR COUNT BR RCV260 RCV300 = . MOVB #NAK,TRNBUF+DATA ;PUT "NAK,FÝ P U S H R * ; * ; PROGRAM IDENTIFICATION. PUSHR - PUSH REGISTERS SUBROUTINE; * ; CATALOG NUMBER * ; * ; PURPOSE. SUBROUTINE PUSHR PUSHES R0-R5 ONTO THE CURRENT STACK * ; * ; USAGE.ÞNON-BLANK FOUND RTS R5 ;SO EFFECT NORMAL RETURN ; TESA10 = . INC R3 ; TESA20 = . DEC R4 ;DECREMENT CHARACTER COUNTER BGT TESA00 ;BRANCH BACK FOR MORE MOV (R5)+,R5 ;AT THIS POINT, ALL CHARS ARE ZERO RTS R5 ;OR BLANK. SO EXIT TO 'RETURN' .PAGE ;*********************************************************************** ; ßP COUNT(R0),(R0) ;HAVE ALL CHARS BEEN TRANSMITTED? BGE TRN020 ;YES MOV R0,R1 ;SET POINTER TO NEXT CHAR ADD #DATA,R1 ADD COUNT(R0),R1 MOVB (R1),TBUF ;PUT CHAR IN TRANSMIT REGISTER TRN010 = . JSR R5,POPR ;RESTORE REGS RTI ;RETURN ; TRN020 = . BIC #ENABLE,TCSR ;DISABLE TRANSMIT INTERRUPT BIC #REQSND,TCSR ;RESETàF" INTO DC11 OUTPUT BUFFER MOVB #FF,TRNBUF+DATA+1 MOV #2,TRNBUF ;SET NO. CHARS TO 2 MOV #TRNBUF,-(SP) ;CALL DC11 OUTPUT ROUTINE JSR PC,D11OUT RCV310 = . TSTB TRNBUF+STATUS ;ALL DONE? BMI RCV310 ;NO JMP RCV060 ;GO WAIT FOR REPEATED MSG FROM TERMINAL ; ; PROCESS RECEIPT OF EOT ; RCV320 = . CLR EOTTMR ;RESET EOT TIMER BIC #Eá THE ASSEMBLER LINKAGE TO SUBROUTINE PUSHR IS: * ; * ; JSR R5,PUSHR * ; * ;*********************************************************************** ; R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 SP = %6 ; â * ; P U S H R * ; * ; PROGRAM IDENTIFICATION. PUSHR - PUSH REGISTERS SUBROUTINE; * ; CATALOG NUMBER * ; * ; PURPOSE. SUBROUTINE PUSHR PUSHES R0-R5 ONTO THE CURRENT STACK * ; ã REQUEST TO SEND TRN030 = . BIT #DETECT,RCSR ;WAIT FOR TRANSMIT CARRIER TO DROP BNE TRN030 MOV #CARTIM,CARTMR ;SET CARRIER TIMER TRN040 = . TST CARTMR ;TIMEOUT? BEQ TRN050 ;YES BIT #DETECT,RCSR ;WAIT FOR DETECT OF RECEIVE CARRIER BEQ TRN040 CLR CARTMR ;RESET CARRIER TIMER TRN050 = . BICB #BUSY,STATUS(R0);SET STATUS NOT BUSY äNABLE,RCSR ;DISABLE RECEIVE INTERRUPT CLR R4 BISB RCVBUF+DATA+5,R4 ;GET SWAB R4 ; ACTION BISB RCVBUF+DATA+6,R4 ; CODE CMP R4,#AUTOTR ;IS IT AUTO TRANSACTION? BEQ RCV330 ;YES CMP R4,#AUDTRL ;IS IT AUDIT TRAIL? BEQ RCV330 ;YES CMP R4,#AUDERR ;IS IT AN AUDIT ERROR? BEQ RC.530 ;YES CMP å * PUSHR = . MOV R4,-(SP) ;PUSH R5, R4, R3, R2, R1, AND R0 ONTO MOV R3,-(SP) ;THE CURRENT STACK IN THAT ORDER MOV R2,-(SP) MOV R1,-(SP) MOV R0,-(SP) JMP (R5) ;RETURN .PAGE ;*********************************************************************** ; * ; æ * ; USAGE. THE ASSEMBLER LINKAGE TO SUBROUTINE PUSHR IS: * ; * ; JSR R5,PUSHR * ; * ;*********************************************************************** ; R0 = %0 R1 = %1 R2 = %2 R3 = %3ç BR TRN010 ;GO RETURN .PAGE ; ; HEADER -- ROUTINE TO PUT HEADER IN TRANSMIT BUFFER; I.E. ; STX, SPECIAL CHAR, DATE AND TIME ; ; CALLING SEQUENCE -- ; ; MOV #DEVICE,-(SP) ; JSR PC,HEADER ; ; CONDITIONS UPON ENTRY -- ; ; SPECIAL CODE FOR DEVICE SELECTION IS ON STACK ; ; CONDITIONS UPON EXIT -- ; ; R0 POINTS TO NEXT AVAILABLE BYTE IN TRNBUFè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+MSGDAT,R0 JMP RCV575 ;GO TYPE CONTENTS OF MSG ON HUé P O P R * ; * ; PROGRAM IDENTIFICATION. POPR - POP REGISTERS SUBROUTINE; * ; CATALOG NUMBER * ; * ; PURPOSE. SUBROUTINE POPR POPS R0-R5 OFF THE CURRENT STACK * ; ê R4 = %4 R5 = %5 SP = %6 ; * PUSHR = . MOV R4,-(SP) ;PUSH R5, R4, R3, R2, R1, AND R0 ONTO MOV R3,-(SP) ;THE CURRENT STACK IN THAT ORDER MOV R2,-(SP) MOV R1,-(SP) MOV R0,-(SP) JMP (R5) ;RETURN .PAGE ;*********************************************************************** ; ë ; R1 IS USED AND NOT RESTORED ; HEADER = . MOV #TRNBUF+DATA,R0 ;GET DATA ADDRESS IN TRANSMIT BUFFER MOVB #STX,(R0)+ ;STX CHAR TO HEADER CLR CLRBCC ;CLEAR BCC REGISTER JSR PC,DELAY ;DELAY FOR BCC HDWR MOVB 2(SP),(R0) ;DEVICE CODE TO HEADER MOVB (R0)+,BCCOUT ;OUTPUT TO BCC CALCULATOR JSR PC,DELAY ;DELAY FOR BCC HDWR MOV #JULDAY,R1 ;PìB TTY RC.530: JMP RCV530 RC.570: JMP RCV570 RC.620: JMP RCV620 ; ; PROCESS AUTO TRANSACTION OR AUDIT TRAIL ; .PAGE ;* ;* F O R M A T A N I N V O I CE ;* RCV330 = . MOV #CODE1,R4 ;FIRST, BLANK OUT THE APPROPRIATE MOV #46.,R5 ;PARTS OF THE INVOICE BUFFER JSR PC,BLANK ;THAT CONTAIN PRODUCT INFORMATION MOV #CODE2,R4 MOV #46.,R5 JSR PC,BLANK í * ; USAGE. THE ASSEMBER LINKAGE TO SUBROUTINE POPR IS: * ; * ; JSR R5,POPR * ; * ;*********************************************************************** ; R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 SP = î * ; P O P R * ; * ; PROGRAM IDENTIFICATION. POPR - POP REGISTERS SUBROUTINE; * ; CATALOG NUMBER * ; * ; PURPOSE. SUBROUTINE POPR POPS R0-R5 OFF THE CURRENT STACK *ïUT JULIAN DATE INTO BUFFER HEADER HEAD10 = . MOVB (R1)+,(R0) MOVB (R0)+,BCCOUT JSR PC,DELAY CMP R1,#JULEND BLT HEAD10 MOVB PS,-(SP) ;LOCKOUT TIMER UPDATE MOVB #340,PS MOV #TIMEAS,R1 ;PUT HUB TIME INTO HEADER HEAD20 = . MOVB (R1)+,(R0) MOVB (R0)+,BCCOUT JSR PC,DELAY CMP R1,#TIMEAS+5 ;ONE EXTRA CHARACTER FOR BLT ð MOV #CODE3,R4 MOV #46.,R5 JSR PC,BLANK INCB SERNO1 ;INCREMENT TRANSACTION SERIAL NUMBER INCB SERNO2 INCB NUMBER ;INCREMENT INVOICE NUMBER CLR R0 ;GET CUSTOMER NO. FROM INPUT BUFFER MOVB RCVBUF+DATA+CUST+CUSTSZ-1,R1 ;GET CUST NO (LAST CHAR) BIC #177600,R1 ;MUST BE 1, 2, OR 3 SUB #61,R1 ;CONVERT TO INDEX (0,1,2) %6 ; * POPR = . TST (SP)+ MOV (SP)+,R0 ;POP R0, R1, R2, R3, R4, AND R5 OFF MOV (SP)+,R1 ;THE CURRENT STACK IN THAT ORDER MOV (SP)+,R2 MOV (SP)+,R3 MOV (SP)+,R4 RTS R5 ;RETURN .END ò ; * ; USAGE. THE ASSEMBER LINKAGE TO SUBROUTINE POPR IS: * ; * ; JSR R5,POPR * ; * ;*********************************************************************** ; R0 = %0 R1 = %1 R2 = %2 ó HEAD20 ;A 10 CHAR HEADER (FOR ANDY) MOVB (SP)+,PS ;RELEASE LOCKOUT MOV (SP)+,(SP) ;CLEANUP STACK RTS PC ;RETURN TO CALLER .PAGE ; ; TRAILR -- ROUTINE TO PUT TRAILER IN TRANSMIT BUFFER: I.E. ; ETX/ETB,BCC,FF; ALSO PUTS CHAR COUNT IN TRNBUF HEADER ; ; CALLING SEQUENCE -- ; ; MOV #TERMCH,-(SP) ; JSR PC,TRAILR ; ; CONDITIONS UPON ENTRô BLT INV010 CMP R1,#3 BLT INV015 ; INV010 = . CLR R1 ; INV015 = . ASL R1 MOV ALPHA1(R1),INV020 ;ADDRESS OF CUSTOMER NAME MOV ALPHA2(R1),INV030 ;ADDRESS, AND MOV ALPHA3(R1),INV040 ;CITY JSR R5,MOVE INV020: .WORD 0,NAME,20. ;MOVE CUSTOMER NAME TO INVOICE INV030: .WORD 0,ADDRESS,20. ;AND ADDRESS INV040: .WORD 0,CITY,20.öR3 = %3 R4 = %4 R5 = %5 SP = %6 ; * POPR = . TST (SP)+ MOV (SP)+,R0 ;POP R0, R1, R2, R3, R4, AND R5 OFF MOV (SP)+,R1 ;THE CURRENT STACK IN THAT ORDER MOV (SP)+,R2 MOV (SP)+,R3 MOV (SP)+,R4 RTS R5 ;RETURN .END ÷Y -- ; ; TERMINATING CHAR ETX OR ETB IS RT. JUSTIFIED ON STACK ; RO POINTS TO NEXT AVAIL BYTE IN TRNBUF ; TRAILR = . MOVB 2(SP),(R0) ;PUT TERMINATING CHAR IN TRNBUF MOVB (R0)+,BCCOUT ;CALC BCC JSR PC,DELAY ;DELAY FOR BCC HDWR MOVB BCCMSB,(R0)+ ;PUT BCC IN BUFFER MOVB BCCLSB,(R0)+ MOVB #FF,(R0)+ SUB #TRNBUF+DATA,R0 ;GET CHAR COUNT AND MOV ø ;AND CITY/STATE .WORD RCVBUF+DATA+CARNO,CARRIER,CARSZ .WORD RCVBUF+DATA+DRNO,DRIVER,DRSZ .WORD DATEAS,DATE,6 .WORD RCVBUF+DATA+13.,TIME,4 .WORD RCVBUF+DATA+CUST,CUSTNO,CUSTSZ .WORD -1 ;* ;* NOW GET PRODUCT INFORMATION AND PUT IN INVOICE BUFFER ;* JSR R5,TEST .WORD RCVBUF+DATA+FLOW1,FLOWSZ,INV100 ;ANY PRODUCT 1 INFO? JSR R5,MOVE ;YES - MOV INTO INVOICE .WORD ûR0,TRNBUF ;PUT INTO BUFFER HEADER MOV (SP)+,(SP) ;CLEAN UP STACK RTS PC ;RETURN .PAGE ; ; DELAY BETWEEN OUTPUTS TO BCC CALC REGISTER ; ; CALLING SEQUENCE ; ; JSR PC,DELAY ; DELAY = . NOP NOP NOP RTS PC .PAGE ; ; LINE FREQUENCY CLOCK INTERRUPT ROUTINE ; CLKINT = . JSR R5,PUSHR ;SAVE REGS MOV üKODE1,CODE1,2 .WORD PRNAM1,PROD1,PRSZ .WORD RCVBUF+DATA+FLOW1,VOL1,FLOWSZ .WORD RCVBUF+DATA+T1,TEMP1,TEMPSZ .WORD -1 ; INV100 = . JSR R5,TEST ;AND NOW FOR PRODUCT # 2 .WORD RCVBUF+DATA+FLOW2,FLOWSZ,INV200 JSR R5,MOVE .WORD KODE2,CODE2,2 .WORD PRNAM2,PROD2,PRSZ .WORD RCVBUF+DATA+FLOW2,VOL2,FLOWSZ .WORD RCVBUF+DATA+T2,TEMP2,TEMPSZ .WORD -1 ; ÿ #TIMER,R0 ;GET BEGINNING OF TIMER TABLE CLK010 = . CMP R0,#TIMEND ;HAVE ALL TIMERS BEEN UPDATED? BGE CLK030 ;YES TST (R0) ;IS TIMER INACTIVE (ZERO)? BEQ CLK020 ;YES DEC (R0) ;DECREMENT COUNTER BEQ CLK040 ;TIMEOUT? CLK020 = . CMP (R0)+,(R0)+ ;NO, BUMP POINTER TO NEXT ENTRY IN BR CLK010 ;TIMER TABLE ; CLK0INV200 = . JSR R5,TEST ;AND FINALLY, PRODUCT # 3 .WORD RCVBUF+DATA+FLOW3,FLOWSZ,INV300 JSR R5,MOVE .WORD KODE3,CODE3,2 .WORD PRNAM3,PROD3,PRSZ .WORD RCVBUF+DATA+FLOW3,VOL3,FLOWSZ .WORD RCVBUF+DATA+T3,TEMP3,TEMPSZ .WORD -1 ; INV300 = . MOV #R035,-(SP) JSR PC,HEADER ;CREATE HEADER FOR INVOICE MOV #INVOICE,R1 MOV #BCCOUT,R2 30 = . JSR R5,POPR ;RESTORE REGS RTI ;RETURN ; CLK040 = . JSR PC,@2(R0) ;CALL TIMEOUT SUBROUTINE BR CLK020 ;GO LOOK AT NEXT TIMER .PAGE ; ; EOTTO -- EOT TIMEOUT SUBR ; ; CALLING SEQUENCE -- ; ; JSR PC,EOTTO ; EOTTO = . JSR R5,PUSHR ;SAVE REGS MOV #ERR03,MSG01F ;TYPE -- "TRANSMISSION ERROR 03!" INV310 = . MOVB (R1)+,(R0) ;MOVE INVOICE TO THE MOVB (R0)+,(R2) ;DC11 OUTPUT BUFFER JSR PC,DELAY ;DELAY FOR BCC HARDWARE CMP R1,#INVEND ;END OF INVOICE? BNE INV310 ;BRANCH IF NO MOV #ETX,-(SP) ;OTHERWISE, SELECT ETX AND JSR PC,TRAILR ;GO MAKE A TRAILER MOVB #7,MODE ;SET RECEIVE MODE TO EXPECT ACK/NAK RCV500 = . ;AFTER TRASM BR ACK010 .PAGE ; ; CARTO -- TIMEOUT WHILE WAITING FOR RECEIVE ; CARRIER AFTER TRANSMITTING ; ; CALLING SEQUENCE -- ; ; JSR PC,CARTO ; CARTO = . JSR R5,PUSHR ;SAVE REGS MOV #ERR04,MSG01F ;TYPE -- "TRANSMISSION ERR 04" BR ACK010 .PAGE ; ; ACKTO -- ACK TIMEOUT ROUTINE ; ; CALLING SEQUENCE -- ; ; JSR PC,ACKTO ; ACITTING INVOICE MOVB #8.,REPEAT ;SET NO. OF OUTPUT TRYS RCV510 = . MOV #TRNBUF,-(SP) ;CALL DC11 TRANSMIT ROUTINE JSR PC,D11OUT RCV520 = . TSTB TRNBUF+STATUS ;ALL DONE? BMI RCV520 ;NO .IFZ DEBUG MOV #ACKTIM,ACKTMR ;SET ACK TIMER .ENDC JMP RCV070 ;GO WAIT FOR ACK ; ; PROCESS ERRONEOUS AUDIT TRAIL ; RCV530 = . MOVB #A KTO = . JSR R5,PUSHR ;SAVE REGS MOV #ERR02,MSG01F ;TYPE -- "TRANSMISSION ERROR 02!" ACK010 = . BIC #DTRDY,RCSR ;RESET DATA TERMINAL READY CLRB MODE ;SET RECEIVE MODE TO EXPECT RING CLRB RBUF ;CLEAR DC11 RECEIVE BUFFER BIS #ENABLE,RCSR ;ENABLE DC11 RECEIVE INTERRUPTS JSR R5,POPR ;RESTORE REGISTERS RTS PC ;RETURN .PAGE SR33,-(SP) ;PUT MSG HEADER IN TRANSMIT BUFFER JSR PC,HEADER ;SPECIFY OUTPUT TO ASR33 MOV #TMSG00,R1 ;GET MSG ADDRESS RCV550 = . MOVB (R1)+,(R0) ;MOVE A CHAR TO BUFFER MOVB (R0)+,BCCOUT ;CALC BCC JSR PC,DELAY ;DELAY FOR BCC HDWR CMP R1,#TMSG01 ;ALL CHARS MOVED? BLE RCV550 ;NO MOVB #ETX,-(SP) ;PUT TRAILER INTO BUFFER JSR PC,TRAILR  ; UPTIME -- TIME OF DAY UPDATE SUBROUTINE ; ; UPDATES ASCII TIME HHMM IN TIMEAS ; ; CALLING SEQUENCE -- ; ; JSR PC,UPTIME ; UPTIME = . JSR R5,PUSHR ;SAVE REGS MOV #MINUTE,TIMDAY ;SET TIMER MOV #TIMEAS+3,R0 CMPB (R0),#'9 ;IS MIN UNITS DIGIT EQ 9? BEQ SET010 ;YES SET005 = . INCB (R0) ;NO, INCREMENT DIGIT SET008 =  MOVB #8.,MODE ;SET RECEIVE MODE TO EXPECT ACK/NAK ;AFTER SENDING BR RCV500 ;GO TRANSMIT TO TERMINAL ; ; PROCESS MANUAL ENTRY ; RCV570 = . MOV #RCVBUF+MSGDAT,R0 ;GET ADDRESS OF MESSAGE DATA CMPB (R0),#'. ;IS FIRST CHAR A PERIOD? BEQ RCV590 ;YES RCV575 = . BIC #DTRDY,RCSR ;NO, DROP LINE BY RESET DATA TERM. RDY CLRB MODE  . JSR R5,POPR ;RETURN RTS PC SET010 = . MOVB #'0,(R0) ;ZERO MIN UNITS DIGIT CMPB -(R0),#'5 ;IS TENS DIGIT EQ 5? BEQ SET020 ;YES BR SET005 ;NO, INCREMENT MIN TENS DIGIT SET020 = . MOVB #'0,(R0) ;ZERO MIN TENS DIGIT CMPB -(R0),#'3 ;IS HR UNITS DIGIT GE 3? BGE SET040 ;YES BR SET005 ;NO, ;SET RECEIVE MODE TO EXPECT RING RCV578 = . MOV RCVBUF+COUNT,R1 ;GET NO. CHARS IN MSG (LESS HEADER) SUB #HDRSIZ,R1 MOV R1,TTOBUF+COUNT ;PUT CHAR COUNT INTO TTY BUFFER MOV #TTOBUF+DATA,R2 ;GET TTY BUFFER DATA ADDRESS RCV580 = . MOVB (R0),(R2)+ ;MOVE DATA FROM DC11 RECEIVE BUFFER CMPB (R0)+,#CR ;IS CHAR A CR? BNE RCV582 ;NO MOVB #LF,(R2)+ ;YES, INSERT A L INCREMENT HR UNITS DIGIT SET040 = . CMPB -1(R0),#'2 ;IS HR TENS DIGIT EQ 2? BEQ SET050 ;YES CMPB (R0),#'9 ;NO, IS HR UNITS DIGIT EQ 9? BLT SET005 ;NO, INCR HR UNITS DIGIT MOVB #'0,(R0) ;YES, ZERO HR UNITS DIGIT DEC R0 ;GO INCR HR TENS DIGIT BR SET005 SET050 = . MOVB #'0,-1(R0) ;SET HR TENS DIGIT TO 0 MOVB #'0,(R0) F FOR TYPEOUT INC TTOBUF+COUNT RCV582 = . DEC R1 ;TO TTY OUTPUT BUFFER BNE RCV580 IOT ;PRINT MSG ON HUB TTY .WORD TTOBUF .BYTE WRITE,TTYSLT RCV585 = . TSTB TTOBUF+STATUS BPL RCV585 JMP RCV070 ;GO ENABLE RECEIVE INTERRUPT ; ; PREPARE 1ST PORTION OF END OF DAY REPORT FOR OUTPUT ; RCV590 = . MOVB #ASR33,-(S ;SET HR UNITS DIGIT TO 0 BR SET008 .PAGE ;*********************************************************************** ;* ** ;* B L A N K ** ;* ** ;* THIS SUBROUTINE STORES N CONSECUTIVE BLANKS BEGINNING AT ** ;* LOCATION ADDR. THE LINKAGE IS: P) ;PUT MSG HDR IN BUF JSR PC,HEADER MOV #TTIBUF+DATA,R1 ;GET DATA ADDRESS RCV600 = . MOVB (R1)+,(R0) ;MOVE CHAR TO BUF MOVB (R0),BCCOUT ;CALC BCC JSR PC,DELAY ;DELAY FOR BCC HDWR CMP R1,#TTIBUF+DATA+210. ;ARE 1ST 210. CHARS IN BUF? BLT RCV600 ;NO MOVB #ETB,-(SP) ;PUT ETB TRAILER IN BUF JSR PC,TRAILR RCV610 = . MOVB #9.,MO** ;* ** ;* R4 = ADDR ** ;* R5 = N ** ;* JSR PC,BLANK ** ;* ** ;*********************************************************************** ; BLANK = . MOVB #' ,(R4)+ ;MOVE DE ;SET MODE TO EXPECT ACK/NAK AFTER ;1ST PART OF END OF DAY REPORT BR RCV500 ; ; PREPARE 2ND PORTION OF END OF DAY REPORT FOR OUTPUT ; RCV620 = . MOVB #ASR33,-(SP) ;PUT MSG HDR IN BUF JSR PC,HEADER MOV #TTIBUF+DATA+211.,R1 ;GET DATA ADDRESS MOV TTIBUF+COUNT,R3 ADD #TTIBUF+DATA,R3 ;GET ADDRESS OF END OF DATA RCV630 = . MOVB (R1)+,(R0) #IN A BLANK DEC R5 ;DECREMENT CHARACTER COUNTER BGT BLANK ;AND GO BACK FOR MORE RTS PC ;GO HOME .PAGE ;*********************************************************************** ;* ** ;* M O V E ** ;* ** ;* THIS SUBROUTINE MO$;MOVE CHAR TO BUF MOVB (R0)+,BCCOUT ;CALC BCC JSR PC,DELAY ;DELAY FOR BCC HDWR CMP R1,R3 ;ARE ALL CHARS OUT BLT RCV630 ;NO MOVB #ETX,-(SP) ;PUT ETX TRAILER IN BUF JSR PC,TRAILR BR RCV610 ;GO SET RECEIVE MODE ; ; PROCESS ACK/NAK AFTER SENDING RESPONSE TO CP ; RCV700 = . BIC #ENABLE,RCSR ;DISABLE DC11 RCV INT. MOVB RBUF,R4 'VES N CHARACTERS FROM LOCATION ADDR1 TO ** ;* LOCATION ADDR2. THE LINKAGE IS: ** ;* ** ;* JSR R5,MOVE ** ;* .WORD ADDR1,ADDR2,N -------- ** ;* . . ! ** ;* . . ! ANY NUMBER OF PAIRS ** ;* . ( ;GET CHAR CLR ACKTMR ;RESET ACK TIMER CMPB R4,#ACK ;IS CHAR AN ACK? BNE RCV810 ;NO CMPB MODE,#8. ;BRANCH ON MODE BLT RCV710 ; = 7 ACK AFTER SENDING INVOICE BEQ RCV800 ; = 8 ACK AFTER SENDING AUDIT ERR MSG ; = 9 ACK AFTER SENDING EOD REPORT BIC #DTRDY,RCSR ;DROP LINE - RESET DATA TERMINAL READY CLRB MO+ . ! ** ;* .WORD ADDR1,ADDR2,N -------- ** ;* .WORD -1 ** ;* ** ;* WHERE THE -1 TERMINATES THE LIST; EXECUTION RETURNS TO THE ** ;* FIRST INSTRUCTION AFTER THE -1. ** ;* ** ;*********,DE ;SET MODE TO EXPECT RING JMP RCV070 ;GO ENABLE RECEIVE INTERRUPT ; RCV710 = . BIC #DTRDY,RCSR ;DROP LINE - RESET DATA TERMINAL READY CLRB MODE ;SET MODE TO EXPECT RING ;* * * * * * * F R I L L * * * * * * * JMP RCV070 ; RCV800 = . BIC #DTRDY,RCSR ;DROP LINE CLRB MODE ;SET MODE TO EXPECT RING IOT ;TYPE -- "ERROR IN AUDIT T/************************************************************** ; MOVE = . MOV (R5)+,R2 ;LOAD ADDRESS ADDR1 CMP R2,#-1 ;CHECK FOR END OF LIST BEQ MOVA10 ;AND BRANCH IF WE FOUND IT MOV (R5)+,R3 ;LOAD ADDRESS ADDR2 MOV (R5)+,R4 ;AND GET THE NO. OF CHARACTERS ; MOVA00 = . MOVB (R2)+,(R3)+ DEC R4 ;MOVE THE CHARACTER STRING BGT MOVA0RAIL!" .WORD MSG03 .BYTE WRITE,TTYSLT RCV805 = . TSTB MSG03+STATUS BPL RCV805 MOV #RCVBUF+MSGDAT,R0 BR RCV578 ;GO TYPE CONTENTS OF RCVBUF ;ON HUB TTY ; ; ACK NOT RECEIVED, TRANSMIT AGAIN ; RCV810 = . DECB REPEAT ;DECR REPEAT COUNT BEQ RCV820 ;ALL TRYS EXHAUSTED? JMP RCV510 ;NO, TRY AGAIN ; RC ND.E N URET;R R5 S RT R4+,P)(S V MO R3+,P)(S V MO R2+,P)(S V MO ERRD OATTHN ICKTA SNTREUR CHE;T R1+,P)(S V MO F OF5 RND A4, R3, R2, R1, R0, ROP;P R0+,P)(S V MO + P)(S T TS . = PRPO * ; %6 = SP %5 = R5 %4 = R4 %3 Öý300 BR MOVE ;GO GET NEXT LIST ; MOVA10 = . RTS R5 .PAGE ;*********************************************************************** ;* ** ;* T E S T ** ;* ** ;* THIS SUBROUTINE TESTS N CONSECUTIVE CHARACTERS. IF ALL N ** ;* CHARACTERS ARE A4V820 = . MOV #ERR02,MSG01F ;SET UP HUB ERROR MSG JMP RCV090 ;GO DROP LINE AND TYPE ERROR MESSAGE .PAGE ; ; DC11 TRANSMIT ROUTINE ; ; CALLING SEQUENCE: ; MOV #BUFFER,-(SP) ; JSR PC,D11OUT ; D11OUT = . JSR R5,PUSHR ;SAVE REGS. MOV 14.(SP),R0 ;GET BUFFER ADDRESS MOV R0,CURBUF ;SAVE CURRENT BUF ADDR BI= R3 %2 = R2 %1 = R1 %0 = R0 ; **********************************************************************;* * ; * R OP,PR5 R JS ; * ; * : ISR OP PNETIOUBRSUO TGEKAIN LERMBSEASE TH E.AGUS ; * Òý7SCII ZEROES OR BLANKS, THEN TEST RETURNS TO ** ;* LOCATION 'RETURN'. OTHERWISE, CONTROL IS RETURNED AS USUAL. ** ;* ** ;* JSR R5,TEST ** ;* .WORD ADDR ;FIRST CHARACTER TO TEST ** ;* .WORD N ;NUMBER OF CHARACTERS ** ;* .WORD RETURN ;ZERO STRING RETURN ADDRESS ** ;* 8SB #BUSY,STATUS(R0);SET BUFFER BUSY CLR COUNT(R0) ;ZRO CHAR COUNT BIS #REQSND,TCSR ;SET REQUEST TO SEND D11010 = . BIS #ENABLE,TCSR ;ENABLE TRANSMITTER INTERRUPT .IFNZ DEBUG ; D11015: BIT #REQSND,TCSR ;DONE TRANSMITTING? BEQ D11020 ;YES EMT 0 ;SIMULATE TRANSMIT OUTPUT INTERRUPT BR D11015 ; D11020: CMPB #ACK,DATA(R0) BEQ ; * CKTA SNTREUR CHE TFF OR50- RPSPOR OP PNETIOUBRSU E.OSRPPU ; * ; * ERMBNUG LOTACA ; * ; NETIOUBRSUS ERSTGIREP PO- R OP P. ONTICAFITIENIDM RAOGPR ; * ; * R P O P ; * Îý; ** ;*********************************************************************** ; TEST = . MOV (R5)+,R3 ;LOAD ADDR MOV (R5)+,R4 ;AND LOAD N ; TESA00 = . CMPB (R3),#' ;IS IT BLANK? BEQ TESA10 ;BRANCH IF YES CMPB (R3)+,#'0 ;HOW ABOUT ZERO? BEQ TESA20 ;YES TST (R5)+ ;NON-ZERO AND NON-BLANK < D11025 ;DON'T PRINT IF IT'S ONLY AN ACK MOV #ACK,RBUF ;PUT ACK IN DUMMY RECEIVE BUFFER MOV #DONE,RCSR ;SET CHARACTER READY BIT TRAP ;AND SIMULATE THE CP 'ACK' SIGNAL IOT ;PRINT OUTPUT BUFFER ON ASR .WORD TRNBUF .BYTE WRITE,TTYSLT D11023 = . TSTB TRNBUF+STATUS BPL D11023 BICB #BUSY,STATUS(R0) ; D11025 = . .ENDC ; **********************************************************************;* E AG.P N URET;R 5)(R P JM P)(S,-R0 V MO P)(S,-R1 V MO P)(S,-R2 V MO ERRD OATTHN ICKTA SNTREUR CHE;T P)(S,-R3 V MO O NT OR0D AN, R1, R2, R3, R4, R5H US;P P)(S,-R4 V MO . = R SHPU * ; %6 = SP %5 = R5 %4 = Êý?FOUND RTS R5 ;SO EFFECT NORMAL RETURN ; TESA10 = . INC R3 ; TESA20 = . DEC R4 ;DECREMENT CHARACTER COUNTER BGT TESA00 ;BRANCH BACK FOR MORE MOV (R5)+,R5 ;AT THIS POINT, ALL CHARS ARE ZERO RTS R5 ;OR BLANK. SO EXIT TO 'RETURN' .PAGE ;*********************************************************************** ; Åý JSR R5,POPR ;RESTORE REGS MOV (SP)+,(SP) ;SWAP PC AND BUF ADDR; POP STACK RTS PC ;RETURN .PAGE ; ; DC11 TRANSMITTER INTERRUPT ROUTINE ; TRNINT = . JSR R5,PUSHR ;SAVE REGS MOV CURBUF,R0 ;GET CURRENT BUFFER CMP COUNT(R0),(R0) ;HAVE ALL CHARS BEEN TRANSMITTED? BGE TRN020 ;YES MOV R0,R1 ;SET POINTER TO NEXT CHAR R4 %3 = R3 %2 = R2 %1 = R1 %0 = R0 ; **********************************************************************;* * ; * HRUS,PR5 R JS ; * ; * : ISR SHPUE INUTROUB STOE AGNKLIR LEMBSEASE TH E.AGUS ; * ÆýÂý * ; P U S H R * ; * ; PROGRAM IDENTIFICATION. PUSHR - PUSH REGISTERS SUBROUTINE; * ; CATALOG NUMBER * ; * ; PURPOSE. SUBROUTINE PUSHR PUSHES R0-R5 ONTO THE CURRENT STACK * ;