ASMB,R,Z,L,C IFZ HED DVA65 24999-16205 REV 1913 * (C) HEWLETT-PACKARD CO. 1979 # NAM DVA65 24999-16205 REV 1913 790110 W/ TRACE # XIF IFN HED DVA65 91740-16071 REV 1913 * (C) HEWLETT-PACKARD CO. 1979 NAM DVA65 91740-16071 REV 1913 790110 XIF SPC 2 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 *************************************************************** * *DVA65 COMMUNICATIONS DRIVER FOR DS/1000 * ALL LINE INTERRUPTS HANDLED BY MICROCODE * EXCEPT PROTOCOL FOR LINES ABOVE PRIVILEGED SLOT * *SOURCE PART # 91740-18071 * *REL PART # 91740-16020 * *WRITTEN BY: CHUCK WHELAN * *DATE WRITTEN: DEC 1976 *MODIFIED BY: LYLE WEIMAN, AUG. '78, TO ADD TRACE CAPABILITY * (# IN RIGHT-HAND COLUMN MARKS CHANGES) *MODIFIED BY: CRAIG HAMILTON 09/07/78 TO IMPROVE ERROR RECOVERY. * * USE "Z" OPTION TO INCLUDE "TRACE" OPERATION # * USE "N" OPTION TO EXCLUDE "TRACE" OPERATION # * *************************************************************** SPC 3 * * DEFINE ENTRY POINTS * ENT IA65,CA65 ENT MIC$X SPC 1 * * DEFINE EXTERNALS * EXT $LIST,$OPSY IFZ EXT $TIME,$CGRN # XIF SKP * * CALLING SEQUENCES * SPC 2 * TRANSMIT OR RECEIVE REQUEST AND DATA SPC 1 * JSB EXEC * DEF *+7 * DEF RCODE OCT 1 * DEF CONWD LU (BIT 6= 1 IF WRITE, BIT 7= 1 IF PROGL) * DEF DBUF DATA BUFFER ADDRESS * DEF DBUFL DATA BUFFER LENGTH * DEF RBUF REQUEST BUFFER ADDRESS * DEF RBUFL REQUEST BUFFER LENGTH * SPC 2 * ENABLE LISTEN MODE SPC 1 * JSB EXEC * DEF *+3 * DEF RCODE OCT 3 * DEF CONWD 100B+LU * SPC 2 * SEND STOP SPC 1 * JSB EXEC * DEF *+3 * DEF RCODE OCT 3 * DEF CONWD 0 + LU * SPC 2 * CLEAR REQUEST SPC 1 * JSB EXEC * DEF *+3 * DEF RCODE OCT 3 * DEF CONWD 200B + LU * SPC 2 * SKP * *##################################################################### * * SET UP TRACE BUFFER AND ENABLE TRACE MODE REQUEST # * # * JSB EXEC # * DEF *+5 # * DEF RCODE OCT 20 (CLASS WRITE-READ) # * DEF CONWD OCT 700B + LU # * DEF BUFR TRACE BUFFER # * DEF TRBFL TRACE BUFFER LENGTH-- MUST BE 4N + 3 # * WHERE N = # ENTRIES DESIRED IN TABLE. # * DEF RN# RN# = SYNCHRONIZING RESOURCE NUMBER # * (MUST BE ALLOCATED GLOBALLY AND LOCKED PRIOR TO # * CALL). THIS RN IS CLEARED EACH TIME DRIVER FILLS# * BUFFER, THUS PROVIDING SYNCHRONIZATION WITH TRACE# * PRINTOUT PROGRAM. # * DEF OPTN TRACE SELECTION OPTION # * DEF CLASS CLASS NUMBER (SET TO ZERO BEFORE CALL). # * # * THEREAFTER, WHENEVER A COPY OF THE CURRENT CONTENTS OF THE # * TRACE TABLE ARE DESIRED, THEY MAY BE OBTAINED WITH A CLASS I/O # * "GET" CALL, USING THE CLASS NUMBER RETURNED FROM THE PREVIOUS # * SET-UP CALL. BE SURE TO SET THE "DO NOT DE-ALLOCATE BUFFER" # * BIT, OR DISASTROUS THINGS WILL HAPPEN!!!!!!!!!!! # * # * TRACE SELECTION SPECIFIER: # * 0 = TRACE ALL DVA65 ACTIVITY # * #0 = TRACE ONLY ACTIVITY FOR LU USED IN SET-UP CALL. # * # * "TRACE" BUFFER FORMAT: # * # * WORD 1 -- CONTAINS PASS NUMBER (INCREMENTED EACH TIME THE # * TRACE BUFFER IS RESET). USEFUL IN DETERMINING IF # * TRACE DATA HAS BEEN MISSED. # * WORD 2 -- CONTAINS ADDRESS OF NEXT ENTRY TO BE MADE IN TABLE # * ("OLDEST" ENTRY IN TABLE). # * WORD 3 -- BEGINS TRACE ENTRIES, FOUR WORDS PER ENTRY. # * ENTRY WORD 1 -- DATA WORD AS READ OR WRITTEN # * 2 -- R/X(BIT 15), STATE/EVENT, TIME-OUT INDICATION # * (BIT 0). BIT 15 IS SET IF WORD WAS RECEIVED, # * ELSE 0. BIT 0 IS SET IF A TIME-OUT OCCURRED,# * ELSE 0. # * DATA WORD NOT VALID IF TIME-OUT OCCURRED. # * 3 -- EQT ADDRESS # * 4 -- TIME-OF-DAY (LOW 16 BITS OF SYSTEM TIME WORD) # * # * # SPC 1 * ENABLE TRACE MODE REQUEST # * NOTE: YOU MUST HAVE MADE A SET-UP CALL PREVIOUSLY)# * # * JSB EXEC # * DEF *+3 # * DEF D3 # * DEF 1700B+ANY COMMUNICATION LU LINKED TO DVA65 # * # * DISABLE TRACE MODE REQUEST # * # * JSB EXEC # * DEF *+3 # * DEF D3 # * DEF 700B+ANY COMMUNICATION LU LINKED TO DVA65 # * # *##################################################################### SKP * * ERROR CODES (IN EQT 5 STATUS) * * BIT MEANING * 0 REQUEST COMPLETED...NO ERRORS * 1 REQUEST PENDING ON A WRITE, OR NOT PENDING ON A READ * 2 SIMULTANEOUS REQUEST REJECT * 3 TIME OUT * 4 STOP RECEIVED * 5 REMOTE BUSY * 6 PARITY ERROR OR PROTOCOL FAILURE * 7 WRITE FLAG (FOR "GRPM" AT CCE) * * * EQT WORD USAGE BREAKDOWN * * EQT # USE * 1 DEFINED * 2 DEFINED * 3 DEFINED * 4 DEFINED * 5 DEFINED * 6 DEFINED * 7 ADDRESS OF DATA BUFFER * 8 LENGTH OF DATA BUFFER * 9 ADDRESS OF REQUEST BUFFER * 10 LENGTH OF REQUEST BUFFER * 11 COROUTINE ADDRESS * 12 CURRENT STATUS TABLE (SEE BREAKDOWN) * 13 ADDRESS OF EQT EXTENSION * 14 DEFINED...USED FOR SINGLE WORD TURN-AROUND TIMEOUT * 15 DEFINED...MICROCODE ALSO SETS TIME-OUTS * EXT(0) COUNTER FOR DATA TRANSFER * EXT(1) LAST WORD RECEIVED OVER COMM LINE * EXT(2) VERTICAL PARITY WORD / RP REQ LENGTH * EXT(3) DIAGONAL PARITY WORD / RP DATA LENGTH * EXT(4) COUNT OF TOTAL # BLOCKS TRANSMITTED * EXT(5) COUNT OF TOTAL NUMBER OF TRANSMIT-RETRIES * EXT(6) ID SEQ ADDRESS FOR SCHEDULE ON NEW REQUEST * * BREAKDOWN OF EQT WORD 12 * * BIT USAGE * 0-2 RETRY COUNTER OR * 0-5 BROKEN LINE COUNTER * 6 BROKEN LINE FLAG * 7-8 NOT USED * 9 REQUEST PENDING * 10 LISTEN MODE ENABLED * 11 RESERVED (USED BY SPECIAL FORCED-COLD-LOAD # * DRIVER, NOT PART OF DS/1000) # * 12 LAST SUCCESSFUL OPERATION (1=WRITE) * 13 FLAG FOR WRITE RETRY IN PROGRESS * 14 MICROCODE READ/WRITE FLAG * 15 POWER-FAIL RECOVERY IN PROGRESS # SKP * * DRIVER INITIALIZATION SECTION * IA65 NOP LDA EQT14 INA STA EQT15 REESTABLISH EQT15 ADDR JSB SETIO CONFIGURE I/O INSTRUCTIONS SERET LDB EQT13,I EXTENSION ADDRESS ADB B6 LDA 1,I GET 7TH EXT. WORD SZA IS THIS THE FIRST ENTRY FOR EQT? JMP NFIR NO * * THIS CODE IS EXECUTED ONLY ON FIRST TIME THROUGH FOR EQT * STA EQT12,I YES, INITIALIZE EQT12 STATUS STB TEMP 7TH WORD OF EXT. AREA * MODIFY INTERRUPT TABLE LDA CELL GET SELECT CODE ADA N6 SUBTRACT 6 TO FIND ADA INTBA ENTRY IN INTERRUPT TABLE LDB 0,I FETCH USER INTERRUPT LINK CMB,INB GET INTERRUPT LINK STB TEMP,I AND SAVE LDB EQT1 SET DRIVER STB 0,I INTERRUPT LINK JSB RDD.C CLEAR CARD * MODIFY CODE IF A DMS SYSTEM LDB $OPSY SYSTEM TYPE CLA,CCE RBR,SLB DMS SYSTEM? STA MOD1 YES, MODIFY INSTRUCTIONS ERA CCB SET REGISTERS FOR CPU TYPE CHECK OCT 100060 THIS SETS B TO 0 IFF XE NOP LDA XEMIC MICROCODE CALL FOR XE SZB SKIP IF XE LDA MXMIC ELSE USE 21MX MICROCODE CALL STA MIC$X SAVE LOCALLY * LDA EQT4,I TELL RTE TO RETURN CONTROL ON TIME OUT, IOR .300 AND FOR POWER-FAIL RECOVERY. # STA EQT4,I SKP * NFIR LDB EQT5,I LDA EQT6,I GET REQUEST CODE AND B3703 ISOLATE IT CCE,SSB IS THIS A POWER-RECOVERY ENTRY? # JMP PFAIL YES, GO TO ABORT CURRENT OPERATION. # CPA B3 IS IT A STOP REQUEST? JMP STPRQ YES, SEND A "STOP". * DETERMINE OPERATION TYPE LDB 0 AND B3 MASK OFF CODE CPA B1 IS IT A READ? JMP REQ YES...READ OR WRITE/READ CPB B203 IS IT A CLEAR REQ? JMP CLREQ YES...CLEAR REQ. CPB B103 IS IT AN ENABLE LISTEN MODE JMP LCREQ YES IFZ CPB B703 DISABLE TRACE MODE? # JMP DTRAC YES. # CPB B1703 RE-ENABLE TRACE MODE? # JMP ETRAC # XIF * ERROR IN REQUEST HAS OCCURRED CLB,INB CODE FOR REQUEST ERROR SZA WAS IT A CONTROL CODE? REJCT INB YES, RETURN A 2 (CONTROL REQ. ERROR) JMP IDON * * B3 OCT 3 B6 OCT 6 B103 OCT 103 B203 OCT 203 B3703 OCT 3703 .300 OCT 30000 # MXMIC OCT 105520 XEMIC OCT 105300 IFZ B700 OCT 700 # B1700 OCT 1700 B703 OCT 703 # B1703 OCT 1703 # XIF SKP * * SET UP ENABLE LISTEN MODE LCREQ LDA MIC$X INITIALIZE TO USE OPEN LOOP MICROCODE MOD1 JMP LCR2 NOP IF DMS SYSTEM CELL EQU *+1 XSA * DO CROSS-MAP STORE RSS LCR2 STA CELL,I NON-DMS, MODIFY TRAP CELL JSB RDD.C READ CARD TO CLEAR IT LISTI STC 0,C SET RECEIVE INTERRUPT MODE LDA .020 SET LISTEN ENABLED STATUS RSS CLREQ JSB RDD.C READ DATA AND STATUS FROM CARD TO CLEAR STA EQT12,I UPDATE EQT STATUS CLB,INB GOOD STATUS BIT JSB STAT PUT NEW STATUS IN EQT 5 LDB B4 SET FOR IMMEDIATE COMPLETION * * HERE FOR COMPLETION RETURN * EQT 12 WILL BE SET DEPENDING UPON LISTEN MODE * STATUS IDON STB TEMP SAVE COMPLETION STATUS LDA EQT12,I GET CURRENT DRIVER STATUS AND .020 MASK OFF ALL BUT LISTEN ENABLE LDB LSTNI GET ADDRESS OF LISTEN ENABLED ROUTINE SZA LISTEN MODE ENABLED? CLA,INA,RSS YES, ENABLE MICROCODE READ CLB NO STA EQTX,I SET TRANSFER COUNT LDA TEMP GET STATUS AGAIN STB EQT11,I SAVE COROUTINE ADDRESS JMP IA65,I RETURN TO RTE SYSTEM SKP * * COME HERE ON A READ OR WRITE * REQ EQU * IFZ LDA EQT6,I GET REQUEST # AND B1700 MASK SUBFUNCTION # CPA B700 ENABLE TRACE MODE CALL? # JMP TRAC. YES # XIF LDB EQT7,I GET ADDRESS OF DATA ADB N7 POINT TO 2ND WORD OF CLASS HDR LDA EQT14,I GET THIS EQT'S TIMEOUT IOR TBITS ENSURE BITS 15, 14, AND RAL 0 ARE SET FOR SYSTEM USE STA 1,I PASS TIMEOUT TO GRPM LDA EQT8,I DATA LENGTH CMA,INA ADA EQT9,I COMPUTE (REQ ADDR - DATA LEN) STA EQT7,I USE IT AS ACTUAL BUFFER ADDR * LDA EQT12,I AND NMSK CLEAR UNNECESSARY FLAGS STA EQT12,I * LDB EQT6,I GET REQUEST CODE BLF,BLF RBL ALF,RAR ALF,ERA E = REQUEST PENDING FLAG LDA EQT8,I STA EQT6,I SET XMISSION LOG INTO EQT6 ADA EQT10,I COMBINE BOTH LENGTHS SLB,RSS IS THIS A WRITE TO SCE-1? STA EQT8,I NO, SAVE COMBINED LENGTHS LDA EQT5,I EQT STATUS WORD AND B1774 CLEAR BITS 7-0 SSB,RSS IS THIS A WRITE? CME,RSS NO, REVERSE RP FLAG IOR B200 YES, SET BIT 7 STA EQT5,I CLA,SEZ,INA SKIP IF (WRITE&NOT RP) OR (READ&RP) JMP BUSY OTHERWISE BUSY OR INVALID REQUEST SSB SKIP IF A READ JMP WREQ DO A WRITE SKP * * READ REQUEST * LDA EQT12,I AND CLR9 CLEAR REQUEST PENDING FLAG STA EQT12,I * REQ1 LDB EQT10,I GET RECEIVED RQST LENGTH LDA EQT4,I ALF,ALF GET LSB OF SUBCHANNEL RAL,ELA AND STORE IT IN E REG RBL,ERB ECHO WD WITH BIT15=1 IF CLOSED LOOP REQ2 EQU * IFZ LDA B23 STATE 19: READ RQST, ECHOING RQST LNTH# XIF JSB TALK READ RESPONSE IFZ LDA B24 STATE 20: READ RQST, CHECKING RESPONSE# XIF JSB CHECK CHECK RCVD WORD JMP REQ3 MUST RETRY ON TIMEOUT JMP ERR.7 STOP RECEIVED # JMP ERR.8 RC RCVD, PROTOCOL FAILURE CPB TNW JMP RDREQ "TNW" RCVD, OK TO READ-IN REQUEST CPB RLW RLW RECEIVED? JMP REQ1 YES, RE-ECHO REQUEST LENGTH * REQ3 JSB RETRY UNRECOGNIZED WORD RECEIVED LDB RLW SEND RLW AND JMP REQ2 TRY AGAIN SPC 2 * * SET-UP TO READ DATA BLOCK * RDREQ LDA EQT8,I DATA LENGTH CPA B2 IS THIS AN SCE-1 REQUEST? CLA,INA,RSS YES JMP RDBLK NO, INITIATE READ STA EQT8,I SET READ LENGTH TO 1 LDB EQT7,I BUFFER ADDRESS LDA EQT1 ADDR OF THIS EQT STA 1,I PASS IT TO PROGL IN 1ST WORD ISZ EQT7,I BUMP ADDR FOR BUFFER * * THIS SECTION INITIATES ALL MICROCODE BLOCK READS * RDBLK LDB EQT4,I LSL 9 SIGN = SUBCHANNEL LSB LDA MIC$X GET MICROCODE MACRO INSTRUCTION SSB SKIP IF SUBCHANNEL EVEN (XMIT MODE) INA ODD SUBCHANNEL, RUN CARD IN RCV MODE STA CELL,I STORE COMM.LINES TRAP CELL LDB TNW SEND TNW IFZ CLA STATE 0: INITIATING READ, SENDING TNW# XIF JSB OUTPB LDB EQT14,I & SET COMM LINE TIMEOUT STB EQT15,I LDA EQT8,I GET SUM OF DATA & REQ LENGTHS CMA -# OF WORDS -1 STA EQTX,I SET MICROCODE'S COUNTER JSB CEXIT NOW DO IT! * * BLOCK HAS BEEN READ, CHECK TRANSMISSION LDA COUNT MICROCODE COUNT ADA EQT8,I SSA SKIP IF XFER GOT STARTED JMP RDB4 ELSE RETRY, TNW MAY HAVE BEEN LOST # IFZ LDA B25 STATE 21: BLOCK HAS BEEN READ, # * WAITING FOR TNW# XIF JSB CHECK CHECK XMISSION JMP RDTO TIMEOUT, EXAMINE THE REASON. # JMP ERR.7 STOP RECEIVED # JMP ERR.8 REQUEST COMING: PROTOCOL FAILURE! # RDB2 CPB TNW WAS LAST A "TNW"? # JMP ENDIT YES, SUCCESSFUL READ. # RDTO CPB RLM REQUEST TO TRY AGAIN? # JMP RDB4 YES, SEE IF ALLOWED. # LDB COUNT IF THE MICROCODE COUNT HAS # CPB B100 BEEN SET =100B, THEN # JMP ER6WT A PROTOCOL FAILURE HAS BEEN DETECTED!# SZA ACTUAL TIMEOUT? # JMP ERR.3 YES, PROCESS THE ERROR. # * * LAST CONTROL UNRECOGNIZED IFZ LDA B26 STATE 22:BLOCK READ BUT LAST CTRL UNREC# XIF RDB3 LDB RLW SEND "RETRANSMIT LAST WORD # JSB TALK & READ RESPONSE IFZ LDA B27 STATE 23:CHECKING RESPONSE TO RLW # XIF JSB CHECK SEE WHAT WE GOT JMP RDB5 NO RESPONSE, TRY AGAIN, IF ALLOWED. # JMP ERR.7 STOP RECEIVED # JMP ERR.8 REQUEST COMING: PROTOCOL FAILURE! # JSB RETRY RETRY OUR RETRY JMP RDB2 * RDB4 JSB RETRY GIVE IT 8 TRIES JMP RDBLK * RDB5 JSB RETRY IF RETRIES ARE ALLOWABLE, # JMP RDB3 SEND RLW, AND AWAIT ACKNOWLEDGMENT. # SPC 2 * HERE WHEN 'STOP' RECEIVED ON "READ" * ERR.7 EQU * # JSB RTEQT RETURN EQT NUMBER # JMP ERR.4 AND TAKE 'STOP' EXIT # * RTEQT NOP SUBROUTINE TO RETURN EQT NUMBER # LDB EQT9,I # LDA EQT1 # STA B,I # JMP RTEQT,I RETURN TO CALLER # * * HERE ON RECEIVE PROTOCOL ERRORS--DELAY TO FORCE XMIT TIMEOUT # * ER6WT EQU * # JSB RTEQT RETURN EQT ADDRESS SO QCLM CAN PRINT EQT # LDA DM100 ALLOW A 1 SECOND DELAY # STA EQT15,I TO FORCE A TRANSMITTER TIMEOUT. # CLA DISABLE # STA EQTX,I MICROCODE. # JSB CEXIT AWAIT THE TIMEOUT RETURN. # LDB B100 INDICATE PROTOCOL FAILURE IN EQT5. # JMP CEND GO TO TERMINATE THE CURRENT OPERATION. # * DM100 DEC -100 # * SKP * * WRITE REQUEST * WREQ LDA EQT9,I LDA 0,I GET 1ST WORD OF REQUEST SLB IS THIS A PROGL DOWNLOAD? STA EQT10,I YES, USE IT INSTEAD OF BUFFER LEN * WRTRY LDB RC IFZ CLA,INA STATE 1:WRITING, SENDING RC # XIF JSB TALK SEND RC & READ RESPONSE IFZ LDA B2 STATE 2:WRITING, SENT RC, EXPECT TNW# XIF JSB CHECK CHECK WHAT WE GOT JMP WRTR1 TRY AGAIN IF TIMEOUT JMP WRTRY STOP, RETRY IMMEDIATELY JMP SIMRQ RC, SIMULTANEOUS REQUEST CPB RLW RLW RECEIVED? JMP WRTRY YES, OTHER SIDE SAYS RETRY CPB TNW RSS SKIP IF "TNW" RECEIVED JMP WRTR1 UNRECOGNIZED, RETRY * SEND DATA LENGTH LDB EQT6,I IFZ LDA B3 STATE 3:WRITING, SENDING DATA LENGTH# XIF JSB TALK SEND DATA LENGTH, GET ECHO IFZ LDA B4 STATE 4:WRITING, SENT DATA LNTH, # * EXPECT ECHO # XIF JSB CHECK CHECK RESPONSE JMP ERR.3 TIMEOUT JMP TSDLN 'STOP' CODE MAY BE A VALID DATA LENGTH # JMP SIMRQ SIMULTANEOUS REQUEST TSDLN CPB EQT6,I ECHO OK? # JMP SRQLN YES # CPB STOP LEGITIMATE 'STOP'? # JMP ERR.4 YES, PROCESS IT. # JMP WRTR1 NO, RETRY * SEND REQUEST LENGTH SRQLN LDB EQT10,I REQUEST LENGTH # IFZ LDA B5 STATE 5:WRITING, SENDING REQUEST LENGTH# XIF JSB OUTPB SEND IT LDA B1776 STA EQT15,I APPROXIMATELY 1 SEC TIMEOUT JSB TRAPR SETUP TRAP CELL FOR 1 WORD READ JSB CEXIT READ NEXT WORD WREQ2 EQU * IFZ LDA B6 STATE 6:WRITING, SENT REQ. LNTH, EXPECT ECHO# XIF JSB CHECK CHECK RESPONSE JMP WRTR1 TIMEOUT, RETRY JMP ERR.5 REMOTE IS BUSY JMP SIMRQ RC * CONFIGURE FOR EITHER CLOSED OR OPEN LOOP MICROCODE PROCESSING LDA EQT10,I ELA SAVE EQT10 SIGN LDA MIC$X MICROCODE CALL RBL,SLB,ERB IF BIT 15=1, RCVR WANTS CLOSED LOOP INA SET TO CALL CLOSED LOOP PROCESSOR STA CELL,I SET TRAP CELL CPB EQT10,I CHECK ECHOED RQST LENGTH JMP WRBLK LENGTH ECHO IS OK SKP * JSB RETRY NOT VALID ECHO, BUMP RETRY COUNT CPB RLW WAS IT AN RLW? (SCE-1 RETRY) JMP WRTRY YES, DO IMMEDIATE RC RETRY LDB RLW IFZ LDA B7 STATE 7:WRITE RETRY # XIF JSB TALK SEND RLW JMP WREQ2 * * REQUEST PREAMBLE WRITE FAILURE - WAIT 1 I/O T.O. AND RETRY THE RC# * WRTR1 JSB RETRY CHECK RETRY COUNT LDB EQT14,I SET COMMUNICATIONS STB EQT15,I LINE TIMEOUT JSB TRAPR SETUP TRAP CELL FOR 1 WORD READ JSB CEXIT DO READ IFZ LDA B10 STATE 8: REQUEST PREAMBLE WRITE FAILURE--RETRY# XIF JSB CHECK SEE WHAT WE GOT JMP WRTRY TIMED-OUT, RESEND RC JMP ERR.4 STOP RCVD, EXIT RSS RC, SIMULTANEOUS REQUEST JMP WRTRY UNRECOGNIZED, DO RC ANYWAY * * SIMULTANEOUS REQUEST OCCURRED, RESOLVE BASED ON LAST OPERATION * SIMRQ JSB RETRY DON'T TRY FOREVER LDA EQT12,I ALF,SLA TEST LAST SUCCESSFUL OPERATION RSS LAST WAS WRITE, WE MUST WAIT JMP WRTR1+1 LAST WAS READ, WE GET PRIORITY * LDB RLW IFZ LDA B11 STATE 9: WRITING, SIMULT.RQST, # * AM BACKING DOWN # XIF JSB XMITX SEND RLW IN XMIT MODE LDB B4 JMP CEND GIVE SIMULTANEOUS REQUEST STATUS SKP * ENTER HERE TO DO ALL BLOCK WRITES WRBLK LDB TNW THIS TNW WILL INITIATE MICROCODE IFZ LDA B12 STATE 10:WRITING, SENDING TNW, EXPECT TNW# XIF WXFER EQU * JSB OUTPB SEND IT LDB EQT14,I STB EQT15,I SET LINE TIMEOUT LDA EQT12,I IOR .400 SET MICROCODE WRITE BIT STA EQT12,I UPDATE EQT STATUS LDA EQT8,I LENGTH FOR XFER SZA,RSS JMP ENDIT ZERO LENGTH DATA, GET OUT NOW CMA -LENGTH-1 STA EQTX,I SET MICROCODE COUNTER JSB CEXIT LET MICROCODE DO ITS THING * * BLOCK HAS BEEN WRITTEN, CHECK TRANSMISSION LDA COUNT GET MICROCODE XFER COUNT, # LDB EQTX AND EQT EXTENSION ADDRESS. # SZA,RSS IF THE TRANSFER WAS SUCCESSFUL, THEN # JMP WRTOK COMPLETE THE HOUSEKEEPING. # * # CPA B77 IF PARITY FAILED # JMP WRTR2 GO TO RETRY THE TRANSFER. # CPA B100 IF PROTOCOL FAILED, # INB,RSS THEN SKIP TO DETERMINE THE REASON; # JMP ERR.3 ELSE, GIVE A TIMEOUT ERROR. # LDA B,I GET THE RECEIVED WORD. # CPA STOP IF A "STOP" WAS RECEIVED, # JMP ERRW4 THEN ABORT, AND INFORM THE CALLER. # CPA RC IF AN "RC" WAS RECEIVED, THEN THE RCVR # JMP SIMRQ IS OUT OF SYNC--RESOLVE THE CONFLICT. # JMP ERR.9 UN-RECOGNIZEABLE: PROTOCOL FAILURE! # * # WRTOK ADB B4 POINT TO DATA BLOCK XFER COUNTER. # ISZ B,I BUMP THE TOTAL SUCCESSFUL BLOCK COUNT. # NOP # JMP ENDIT COMPLETE THIS OPERATION. # * * PARITY FAILURE: PERFORM A WRITE RETRY # WRTR2 JSB RETRY CHECK RETRY COUNT # ADB B5 POINT TO THE BLOCK RETRY COUNTER # ISZ B,I BUMP WRITE RETRY COUNTER NOP LDA EQT12,I IOR .200 SET "WRITE RETRY" FLAG STA EQT12,I LDB RLM "RETRANSMIT LAST MESSAGE" IFZ LDA B13 STATE 11: PERFORMING WRITE RETRY # XIF JMP WXFER PERFORM RE-WRITE SKP * LOCAL BUSY OR READ REJECT FOR NO R.P. BUSY CCB LDA EQT15,I IS THERE A TIMEOUT PENDING IOR EQTX,I OR IS MICROCODE ENABLED? SZA,RSS SKIP IF YES TO EITHER STB EQT15,I ELSE SYSTEM WIPED OUR TIMEOUT LDB B2 JSB STAT SET LOCAL BUSY FLAG LDA B4 IMMEDIATE COMPLETION LDB EQT6,I RETURN DATA LENGTH IN B JMP IA65,I RETURN * * HERE FOR REMOTE BUSY ERR.5 LDB B40 JMP CEND * # * HERE FOR PROTOCOL FAILURES ON 'READ' * STORE EQT ADDRESS IN 2ND BUFFER ERR.8 EQU * JSB RTEQT STORE EQT # JMP ERR.9 AND EXIT W/ PROTOCOL FAILURE STATUS # * * POWER FAIL: SEND 'STOP' & REPORT PROTOCOL ERROR; HIGHER LEVELS MAY RETRY # * # PFAIL LDA EQT12,I SET POWER-FAIL RECOVERY IN PROGRESS # RAL,ERA (EQT12: BIT#15) # STA EQT12,I INTO THE EXTENDED STATUS WORD. # IFZ LDA B13 STATE 13:POWER FAILURE RSS XIF * * HERE FOR PARITY ERROR ERR.6 EQU * # IFZ LDA B31 STATE 25: PARITY ERROR # RSS # XIF * * HERE ON ALL PROTOCOL FAILURES (WRITING & READING) * ERR.9 EQU * IFZ LDA B32 STATE 26:PROTOCOL FAILURE # XIF * * HERE TO SET ERROR, SEND STOP, & TERMINATE ERSET EQU * LDB B100 LOAD PARITY ERROR STATUS IFZ STA STATE SAVE DRIVER STATE # XIF JSB STAT PUT STATUS INTO EQT 5 LDB STOP IFZ LDA STATE LOAD STATE #(DEPENDS ON ERROR) # XIF JSB XMITX SEND STOP & AWAIT INTERRUPT JSB RDD.C CLEAR CARD BY READING IT LDA EQT5,I WAS THIS # ALF,ALF REQUEST # SSA A 'READ'? # JMP CEND+1 NO. # JSB RTEQT RETURN ADDRESS OF EQT IN 2ND BUFFER# JMP CEND+1 AND RETURN ERROR CODE. # * LSTNI DEF ILSTN B1 OCT 1 .020 OCT 2000 .010 OCT 1000 * B40 OCT 40 B77 OCT 77 B100 OCT 100 .100 OCT 10000 .200 OCT 20000 .400 OCT 40000 NMSK OCT 13100 TBITS OCT 160000 CLR9 OCT 176777 CLR11 OCT 173777 SKP * * THIS SUBROUTINE INITIALIZES THE EQT TIMEOUT FLAG, SETS THE * COMM LINE TRAP CELL TO A "JSB CIC" IF IT IS ABOVE THE * PRIVILEGED CARD AND SETS THE MICROCODE COUNTER TO 1. * TRAPR NOP LDA EQT4,I AND CLR11 CLEAR THE EQT4 TIMEOUT FLAG STA EQT4,I LDB CELL THIS LINE'S SELECT CODE CMB,INB ADB DUMMY TEST AGAINST PRIVILEGED CARD'S SC LDA MIC$X MICROCODE CALL MACRO SSB ARE WE ABOVE THE PRIVILEGED CARD? LDA TBG,I YES, GET A "JSB CIC" STA CELL,I SETUP TRAP CELL CLA,INA STA EQTX,I SET MICROCODE COUNT = 1 JMP TRAPR,I RETURN SPC 1 * * SEND WORD, SET TIMEOUT, & AWAIT RESPONSE * TALK NOP JSB OUTPB SEND WORD IN B REG LDB EQT14,I SET COMMUNICATIONS STB EQT15,I LINE TIMEOUT JSB TRAPR SETUP TRAPCELL FOR 1 WORD READ LDA TALK COROUTINE RETURN ADDRESS JMP CEXT1 SPC 1 * * IF ALREADY 7 RETRIES, GIVE PARITY ERROR ELSE BUMP COUNT & RETURN * RETRY NOP LDA EQT12,I AND B7 ISOLATE RETRY COUNTER CPA B7 IS THIS THE 8TH RETRY? JMP FAIL YES, RETURN ERROR ISZ EQT12,I BUMP COUNT JMP RETRY,I & TRY AGAIN * FAIL LDB COUNT SZB WAS WORD COUNT ZERO? CPB B77 NO, WAS IT BLOCK PARITY? JMP ERR.6 RETURN A PARITY ERROR * * HERE FOR TIMEOUT ERR.3 LDB B10 TIMEOUT BIT FOR EQT5 IFZ LDA B33 XIF JMP ERSET EXIT WITH LINE T.O. ERROR SKP * * CONTINUATION SECTION * CA65 NOP JSB SETIO CONFIGURE I/O INSTRUCTIONS LDB EQT11,I GET COROUTINE ADDR SZB,RSS IT IT SET-UP? JMP IUNKN GO TO UNKNOWN INTERRUPT PROCESSOR LDA EQTX,I STA COUNT SAVE MICROCODE COUNT CLA STA EQTX,I DISABLE MICROCODE LDA EQT12,I AND .020 ISOLATE "LISTEN ENABLED" BIT IOR EQT1,I ALSO TEST FOR DRIVER BUSY SZA ARE EITHER CONDITION TRUE? JMP 1,I YES, GO TO COROUTINE ADDR ISZ CA65 * CLCRD JSB RDD.C CLEAR THE CARD JMP CEXT3 & GET OUT * * * * UNKNOWN INTERRUPTS COME HERE * WE'RE IN TROUBLE IF WE EVER GET HERE!!!!! * IUNKN STB EQT12,I CLEAR ALL CARD STATI LDB B77 SET ALL STATUS ERROR BITS JMP CEND GET OUT...NOW!!! * SKP * * HERE FOR FIRST INTERRUPT WHEN CARD IN LISTEN MODE * ILSTN LDA EQT12,I AND B1776 INITIALIZE BROKEN LINE COUNT STA EQT12,I * ILSN0 EQU * IFZ LDA B14 STATE 12: FIRST INTERRUPT IN LSTEN MODE, EXP.RC # XIF JSB CHECK FIND OUT WHAT THEY SENT US JMP ILSN4 TIME OUT...IGNORE JMP ILSN4 STOP...IGNORE JMP ILSN1 REQUEST COMING * * ENTER HERE WHEN UNRECOGNIZED WORD RECEIVED WHILE "LISTENING" SZB ZERO RECEIVED? JMP ILSN4 NO, JUST IGNORE IT JSB RDD.C CLEAR COMMUNICATIONS CARD LDA EQT12,I ISZ EQT12,I BUMP BROKEN LINE COUNT AND B77 CPA B77 64 ZEROES IN A ROW = BROKEN LINE! JMP DEXIT IT IS, LEAVE CARD DISABLED & EXIT JSB TRAPR SETUP FOR 1 WORD READ JSB CEXIT EXIT IN RCV MODE JMP ILSN0 GOT ANOTHER WORD, GO CHECK IT * ILSN1 LDA EQT12,I EQT STATUS IOR .010 SET REQUEST PENDING FLAG STA EQT12,I SAVE IT * ILSN2 LDB TNW SEND A TNW IFZ LDA B15 STATE 13: GOT RC, SENDING TNW, EXP.DATA LNTH # XIF JSB TALK & WAIT FOR DATA LENGTH IFZ LDA B16 STATE 14: RECEIVING, EXPECTING DATA LENGTH # XIF JSB PRECK DO PREAMBLE CHECKING ADA B3 POINT TO EXT(3) STB 0,I SAVE DATA LENGTH FOR PROGRAM IFZ LDA B17 STATE 15: ECHOING DATA LENGTH, EXPECT REQ. LNTH # XIF JSB TALK ECHO IT & GET REQUEST LENGTH IFZ LDA B20 STATE 16: RECEIVING, EXPECTING REQ. LNTH # XIF JSB PRECK DO PREAMBLE CHECKING ADA B2 POINT TO EXT(2) STB 0,I SAVE RQST LENGTH FOR PROGRAM ADA B4 POINT TO EXT(6) LDB 0,I GET I/O ADDRESS OF PROGRAM STB PROG SAVE ADDRESS ADB B17 GET TO STATUS LDA 1,I GET STATUS AND B17 MASK OFF ALL BUT STATUS SZA BUSY? JMP ILSN3 YES...TELL OTHER SIDE TO RETRY ADB N5 ID SEG B REG SAVE AREA LDA EQT4 GET ADDRESS OF LU STA 1,I PASS IT IN B REG JSB $LIST SCHEDULE PROGRAM OCT 101 PROG NOP ILSN4 JSB RDD.C CLEAR CARD BY READING IT JSB TRAPR SETUP TRAP CELL & ENABLE 1 WORD READ LDA LSTNI SET FOR LISTEN MODE INTERRUPT JMP CEXT1 AND EXIT * * HERE IF WE GOT A "BUSY" CONDITION * ILSN3 LDB STOP SEND STOP TO INDICATE "REMOTE BUSY" IFZ LDA B21 STATE 17: QUEUE BUSY, SENDING 'STOP' # XIF JSB OUTPB SEND IT * * HERE ON STOP...CLEAR REQUEST PENDING STATUS * ILSN5 LDA EQT12,I AND CLR9 CLEAR REQUEST PENDING FLAG STA EQT12,I JMP ILSN4 TERMINATE * * SUBROUTINE TO CHECK RCVD PREAMBLE WORD & RETRY IF RC * PRECK NOP JSB CHECK CHECK RCVD WORD JMP ILSN5 TIME-OUT, CLEAR RP CONDITION RSS 7760B IS POSSIBLE DATA LEN JMP ILSN2 RC, RESTART PREAMBLE LDA EQTX PASS EXT AREA ADDR BACK JMP PRECK,I * SKP * * HERE FOR SEND STOP REQUEST * STPRQ LDB STOP SEND STOP CLA DON'T ALTER STA CELL TRAP CELL. IFZ LDA B22 STATE 18: REQUEST TO SEND 'STOP' # # XIF JSB XMITX IN XMIT MODE JSB RDD.C READ CARD TO CLEAR IT STA CELL LDA EQT12,I AND BSTMK SAVE LISTEN, BROKEN LINE, & LAST OP.BITS JMP ENDOK * * NOW SET FLAG TO SHOW WHETHER THE LAST SUCCESSFUL OPERATION WAS A * READ OR WRITE. THIS IS USED TO RESOLVE SIMULTANEOUS LINE CONTENTION. ENDIT LDA EQT12,I AND .020 SAVE "LISTEN ENABLED" FLAG LDB EQT5,I BLF,BLF SSB SKIP IF READ IOR .100 SET LAST OPERATION AS WRITE * ENDOK STA EQT12,I SET STATUS CLB,INB SET GOOD STATUS # JMP CEND # * * 'STOP' RECEIVED SOMETIME DURING TRANSMISSION ERRW4 EQU * IFZ CH.01 NOP 'RSS' HERE WHEN TRACE MODE ENABLED # JMP ERR.4 SKIP 'TRACE' STUFF WHEN DISABLED # JSB CKTRC CHECK IF WE'RE TO TRACE THIS ONE # JMP ERR.4 NO, CONTINUE LDB B30 STATE 24:'STOP' RC'D DURING XMIT-ABORT# JSB TRACE # LDB STOP # IOR SBIT SET 'RECEIVE' INDICATOR JSB TRACE # LDB EQT1 # JSB TRACE # LDB $TIME # JSB TRACE # XIF # * * 'STOP' RECEIVED EXIT * ERR.4 EQU * LDB B20 SKP * * HERE TO TERMINATE * CEND JSB STAT UPDATE EQT 5 STATUS LDA EQT12,I GET CARD STATUS WORD AND .020 IS IT LISTEN MODE? SZA,RSS JMP CLCRD NO, CLEAR CARD & EXIT JSB TRAPR SET UP TRAP CELL & ENABLE 1 WORD READ LDA LSTNI GET LISTEN INTERRUPT JMP CEXT2 AND LEAVE * * HERE TO DO CONTINUATION RETURN * CEXIT NOP LDA CEXIT GET NEXT INTERRUPT ADDRESS CEXT1 ISZ CA65 BUMP CONTINUATOR RETURN CEXT2 STC 0,C SET FOR RECEIVE MODE CEXT3 STA EQT11,I SAVE NEW INTERRUPT LOCATION CEXT4 CLA LDB SETIO CPB I65AD WAS THIS ENTRY VIA INITIATOR? JMP IA65,I YES, THEN RETURN THE SAME WAY LDB EQT6,I GET EQT6 IN CASE IT'S COMPLETION JMP CA65,I RETURN * I65AD DEF SERET SPC 3 * * SUBROUTINE TO PUT NEW STATUS INTO EQT WORD 5 * STAT NOP LDA EQT10 STA EQT15 FOOL RTE SO IT LEAVES TIMEOUT ALONE LDA EQT5,I GET WORD 5 AND B1776 MASK OFF OLD STATUS IOR 1 STUFF IN NEW STATUS STA EQT5,I AND PUT IT AWAY JMP STAT,I RETURN * SKP * * ROUTINE TO DO CHECKING OF INPUT DATA * * CALLING SEQUENCE: * IF 'TRACE' MODE, LOAD (A) WITH DRIVER STATE NUMBER * JSB CHECK * WILL RETURN P+1 TIME OUT * P+2 STOP RECEIVED * P+3 REQUEST COMING RECEIVED * P+4 NORMAL RETURN...B REG= LAST DATA WORD * CHECK NOP LDB EQTX EQT EXTENSION ADDRESS INB LDB 1,I LOAD LAST WORD RECEIVED IFZ STA STATE SAVE (TRACE VERSION ONLY) # XIF LDA EQT4,I WAS THIS ENTRY # AND .040 VIA # SZA TIME-OUT? # JMP CHCK1 YES, DATA IN (B) # * * THERE WAS NO TIMEOUT. CLEAR 'COUNT' WORD * SO WE DON'T THINK THERE WAS A TIME-OUT, * DISABLE CARD, AND PICK UP DATA DIRECTLY FROM * INTERFACE CARD. STA COUNT CLCC1 CLC 0,C LIB1 LIB 0 CHCK1 EQU * # IFZ # CH.00 NOP CHANGED TO 'RSS' WHEN TRACING IS ENABLED # JMP CHEC0 SKIP OVER 'TRACE' CODE WHEN NOT ENABLED # STB RDD.C SAVE FOR JUST A SECOND # JSB CKTRC SHOULD WE TRACE THIS ONE? # JMP CHEC. NO, DON'T TRACE THIS ONE. # LDB RDD.C RECOVER RECEIVED WORD # JSB TRACE STORE IN TRACE TABLE # LDB STATE RECOVER DRIVER STATE # RBL MOVE TO 'STATE' FIELD # LDA COUNT WAS THERE A # CCE,SZA A TIME-OUT? # INB # RBL,ERB AND SET 'RECEIVE' INDICATOR BIT # JSB TRACE STORE TRACE/EVENT # LDB EQT1 STORE EQT ADDRESS # JSB TRACE # LDB $TIME STORE TIME # JSB TRACE # * # CHEC. LDB RDD.C RECOVER RECEIVED DATA WORD # CHEC0 EQU * # XIF LDA COUNT MICROCODE COUNT # SZA,RSS DID MICROCODE FINISH? # JMP CHEC1 YES. # LDA EQT4,I NO. CHECK FOR POSSIBLE RTE TIME-OUT # AND .040 ISOLATE T.O. BIT # SZA TIME-OUT? # JMP CHECK,I YES, TAKE TIME-OUT RETURN # SPC 2 * * CHEC1 ISZ CHECK SET FOR 'STOP' RETURN # CPB STOP 'STOP'? # JMP CHECK,I YES...TAKE 'STOP' RETURN # ISZ CHECK # CPB RC REQUEST COMING? # JMP CHECK,I YES # ISZ CHECK SET "NONE OF THE ABOVE" RETURN # JMP CHECK,I RETURN # * * * B10 OCT 10 B20 OCT 20 B17 OCT 17 .040 OCT 4000 BSTMK OCT 12100 B1774 OCT 177400 B1776 OCT 177600 TEMP NOP MIC$X NOP OPEN LOOP MICROPROGRAM CALL COUNT NOP EQTX NOP SKP * ROUTINE TO CLEAR CARD * RDD.C NOP CLCC2 CLC 0,C LIAC2 LIA 0,C CLEAR STATUS LIA2 LIA 0 READ DATA WORD CLA JMP RDD.C,I * * HERE TO SEND WORD AND EXIT IN TRANSMIT MODE XMITX NOP JSB OUTPB SEND WORD JSB TRAPR SETUP TRAP CELL STC0 STC 0 SET TRANSMIT MODE LDA XMITX COROUTINE UPON RETURN STA EQT11,I DEXIT ISZ CA65 BUMP CONTINUATION RETURN JMP CEXT4 * OUTPB NOP IFZ OTB2 NOP 'RSS' WHEN TRACE MODE IS ENABLED # JMP OTB1 RETURN IMMEDIATELY IF TRACE DISABLED. # STB RDD.C SAVE (B) FOR A FEW LINES.... # JSB CKTRC SHOULD WE BE TRACING THIS ONE? # JMP OTB3 NO, DON'T TRACE THIS ONE. # LDB RDD.C RECOVER (B) REGISTER # JSB TRACE STORE OUTPUT WORD # RAL MOVE TO 'STATE' FIELD # LDB A LOAD EVENT # JSB TRACE STORE EVENT IN TRACE TABLE # LDB EQT1 STORE EQT ADDRESS # JSB TRACE # LDB $TIME STORE TIME # JSB TRACE # OTB3 EQU * # LDB RDD.C RECOVER DATA TO BE TRANSMITTED # XIF OTB1 OTB 0 JMP OUTPB,I RETURN * RC OCT 170017 REQUEST COMING WORD TNW OCT 170360 TRANSMIT NEXT WORD STOP OCT 7760 SEND STOP RLW OCT 7417 RETRANSMIT LAST WORD RLM OCT 170377 RETRANSMIT LAST MESSAGE B2 OCT 2 B4 OCT 4 B7 OCT 7 N5 DEC -5 N6 DEC -6 N7 DEC -7 SKP *############################################################################ * * TRACE SECTION * * TRAC.-- SECTION TO SET UP TRACE BUFFER. * IFZ TRAC. EQU * LDA EQT7,I GET TRACE BUFFER ADDRESS STA NPASS SAVE ADDRESS OF PASS COUNT STA B COMPUTE ADDRESS ADB EQT8,I OF END OF BUFFER + 1 STB TRACL SAVE ADDRESS OF END OF BUFFER INA GET ADDRESS OF 2ND WORD OF TRACE BUFFER STA TRPTR STORE POINTER TO NEXT AVAILABLE LOCN INA BUMP TO START OF TRACE BUFFER STA TRACB SAVE TRACE BUFFER LDB EQT9,I GET TRACE SELECTION SZB TRACE ALL? LDB EQT1 NO, TRACE ONLY THIS LU STB TREQT SAVE TRACE EQT, OR ZERO FOR ALL LDB EQT10,I LOAD RESOURCE NUMBER STB RN# SAVE IT. SPC 2 * ENABLE TRACE MODE. * ETRAC EQU * CHECK THAT BUFFER HAS BEEN DEFINED CLB,INB LDA TRACB LOAD BUFFER ADDRESS SZA,RSS WAS ONE DEFINED? JMP REJCT NO, THIS IS AN ERROR STA TRACN YES, INITIALIZE "NEXT" TRACE ENTRY PNTR LDA RSS STORE 'RSS' INSTRUCTION IN ALL TRA.3 EQU * "BYPASS TRACE CODE" PLACES. STA OTB2 STA CH.00 STA CH.01 * * "IMMEDIATE COMPLETION" RETURN TO RTIOC * LDA B4 JMP IA65,I RETURN TO RTE SPC 2 * DISABLE TRACE MODE * DTRAC EQU * CLA STORE 'NOP' INSTRUCTION IN ALL "BYPASS TRACE JMP TRA.3 CODE" PLACES. * * SUBROUTINE TO CHECK WHETHER WE SHOULD BE * TRACING THIS ENTRY OR NOT. * CKTRC NOP LDB TREQT LOAD THE 'TRACE' EQT SZB TRACE ALL? CPB EQT1 NO, COMPARE TO THIS EQT ISZ CKTRC WE'RE TRACING THIS ONE! JMP CKTRC,I RETURN TO CALLER SKP * * TRACE -- SUBROUTINE TO MAKE AN ENTRY IN THE TRACE TABLE * * CALLING SEQUENCE: * LDB * JSB TRACE * * TRACE NOP ENTRY/EXIT STB TRACN,I STORE DATA IN TRACE BUFFER LDB TRACN ADVANCE TO NEXT ENTRY, OR INB CPB TRACL END? JMP TRAND YES, RESET TO START & UNLOCK RN TRA.1 EQU * STB TRACN STORE "NEXT" ENTRY POINTER CMB,INB COMPUTE RELATIVE OFFSET ADB TRACB SO BACKGROUND PROGRAM CMB,INB STB TRPTR,I KNOWS WHERE WE ARE. JMP TRACE,I RETURN TO CALLER SPC 2 TRAND EQU * LDA RN# LOAD RESOURCE NUMBER JSB $CGRN UNLOCK RESOURCE NUMBER ISZ NPASS,I BUMP PASS NUMBER NOP PROTECT AGAINST ROLLOVER. LDB TRACB JMP TRA.1 RETURN TO MAIN FLOW * * STORAGE FOR 'TRACE' * STATE NOP STORAGE FOR DRIVER STATE TREQT NOP EQT ADDRESS TO BE TRACED, OR 0 FOR ALL OF THEM TRPTR NOP STORAGE FOR ADDRESS OF "NEXT" ENTRY IN BUFFER NPASS NOP ADDRESS OF NUMBER OF PASSES COUNTER RN# NOP RESOURCE NUMBER TRACB NOP POINTER TO START OF TRACE BUFFER TRACN NOP POINTER TO NEXT TRACE TABLE ENTRY TRACL NOP POINTER TO END OF TABLE + 1 B11 OCT 11 B12 OCT 12 B13 OCT 13 B14 OCT 14 B15 OCT 15 B16 OCT 16 B21 OCT 21 B22 OCT 22 B23 OCT 23 B24 OCT 24 B25 OCT 25 B26 OCT 26 B27 OCT 27 B30 OCT 30 B31 OCT 31 B32 OCT 32 B33 OCT 33 RSS RSS 'RSS' INSTRUCTION SBIT OCT 100000 SIGN BIT XIF B5 OCT 5 *######################################################################## SKP SETIO NOP LDA EQT12,I EQT STATUS AND MICFG CLEAR MICROCODE R/W & RETRY FLAGS STA EQT12,I UPDATED EQT LDB EQT2,I CLA SSB SYSTEM TRYING TO INITIATE NEW REQUEST? CCA YES, SET A TICK STA EQT15,I SET TIMEOUT LDB EQT13,I STB EQTX SAVE ADDRESS OF EQT EXTENSION LDA EQT4,I AND B77 ISOLATE SELECT CODE STA CELL SAVE FOR TRAP CELL ADDR IOR CLCC CLC0,C COMMAND STA CLCC1 STA CLCC2 XOR .040 CONVERT TO STC 0,C COMMAND STA LISTI STA CEXT2 XOR .010 CONVERT TO STC 0 COMMAND STA STC0 XOR B200 CONVERT TO LIA COMMAND STA LIA2 XOR .010 CONVERT TO LIA 0,C COMMAND STA LIAC2 XOR .050 CONVERT TO LIB COMMAND STA LIB1 XOR B300 CONVERT TO OTB 0 COMMAND STA OTB1 JMP SETIO,I RETURN * * MICFG OCT 117777 CLCC CLC 0,C B200 OCT 200 B300 OCT 300 .050 OCT 5000 * BSS 0 SEE HOW BIG IT IS SKP * * DEFINE BASE PAGE LOCATIONS NEEDED * * * . EQU 1650B EQT1 EQU .+8 EQT2 EQU .+9 EQT4 EQU .+11 EQT5 EQU .+12 EQT6 EQU .+13 EQT7 EQU .+14 EQT8 EQU .+15 EQT9 EQU .+16 EQT10 EQU .+17 EQT11 EQU .+18 EQT12 EQU .+81 EQT13 EQU .+82 EQT14 EQU .+83 EQT15 EQU .+84 DUMMY EQU 1737B INTBA EQU 1654B TBG EQU 1674B * A EQU 0 B EQU 1 END