/ KL8/E, KL8/J DIAGNOSTIC / / THIS PROGRAM EXERCIZES A KL8/E OR /J ASYNCHRONOUS DEVICE /CONTROLLER AND VERIFIES ITS CORRECT OPERATION WITHOUT RESPECT /ANY DEVICE IT MAY CONTROL. IT IS BAUD RATE AND DEVICE CODE /SELECTABLE, AND CAN BE SET TO OPTIONALLY TYPE OUT SENSIBLE ENGLISH /LANGUAGE (NOT NUMBERS, THANK GOD!) ERROR MESSAGES. IT CAN /ALSO BE SET TO EITHER STOP OR NOT STOP UPON ENCOUNTERING AN ERROR. /IT IS MEANT TO BE RUN WITH A SHORTING PLUG IN THE BOARD SO THAT IT /TALKS TO ITSELF DURING THE TEST. ANY OF THE TESTS IT PERFORMS /CAN BE SUPPRESSED BY PUTTING A 'NOP' IN AN APPROPRIATE /CELL. (THESE ARE CLEARLY MARKED). AN ASSEMBLY CONSTANT /TELLS THE PROGRAM WHETHER TO RETURN CONTROL TO ODT OR DDT AFTER /THE DEVICE CODES FOR THE BOARD HAVE BEEN SET. / / SEE THE ACCOMPANYING RUN SHEET FOR OPERATING INSTRUCTIONS. / / DAVE BENNETT *20 / DATA CELLS AND SWITCHES ODT=0 / =1400 WILL RETURN CONTROL TO ODT (7000) / =0 WILL RETURN CONTROL TO DDT (5400) NOCONS, 0 / =1 WILL SUPPRGSS TTY PRINTOUT HLTMDE, 0 / =1 WILL HALT AFTER AN ERROR AND USE / INTERNALLY GENERATED DATA WORD. BRATE, 0 / BITS 9-11 ARE BITS 1-3 OF SW. CHAR, 0 / DATA USED IN DATA TEST XCHAR, 0 / INTERNALLY GENERATED DATA CHAR XTRANS, 0 / TRANSMIT DEVICE CODE IN BITS 3-8 XRECV, 0 / RECIEVE DEVICE CODE IN BITS 3-8 SWREG, 0 / MOST RECENT SWITCH REG ENTRY DATA, 0 / RESULT OF LAST KRB / / ENTRY POINT TO SET DEVICE CODES / *100 START1, CLA CLL LAS DCA SWREG TAD SWREG AND (77 / GET TRANSMIT CODE RTL RAL DCA XTRANS / SAVE IT TAD SWREG AND (7700 / GET RECIEVE CODE RTR RAR DCA XRECV TAD SWREG / LOOK FOR 03/04, THEN SUPPRESS TTY OUTPUT TAD (-0304 SNA CLA IAC / SET SWITCH DCA NOCONS JMP I (5400+ODT / RETURN CONTROL TO DEBUGGER / / MAIN ENTRANCE TO PROGRAM--- SET SWITCH REG TO DESIRED /FUNCTIONS, THEN START AT 200. / *0200 START2, CLA CLL LAS DCA SWREG TAD SWREG SPA CLA IAC / SET HLTMDE=1 IF BIT 0 OF SW =1 DCA HLTMDE TAD SWREG AND (3400 / GET BAUD RATE RTL RTL RAL DCA BRATE TAD HLTMDE SZA CLA / SKIP IF DATA IS TO BE TAKEN FROM SW JMP NXTCHR TAD SWREG AND (377 DCA CHAR / GET CHAR FROM SWITCH REGISTER JMP SEND NXTCHR, TAD XCHAR IAC / GENERATE NEXT CHARACTER TO SEND AND (377 DCA XCHAR TAD XCHAR DCA CHAR / / THIS IS THE START OF THE ACTUAL TESTING SEQUENCE / SEND, 6007 / CLEAR ALL FLAGS BEFORE YOU START TAD XRECV / SET INTERRUPT ENABLE F/F TAD (6005 DCA .+2 IAC / 1 IN BIT 11 MEANS ENABLE .-. / WILL CONTAIN KIE CLA TAD XTRANS TAD (6006 DCA .+2 TAD CHAR .-. / WILL CONTAIN A TLS JMS TMEOUT / WAIT FOR THE ACTION 6003 / SRQ SKIP IF INTERRUPT PENDING /*************************************************************/ SUPINT, JMS NOINT / SET TO NOP TO SUPPRESS INTERRUPT TESTING /*************************************************************/ CLA TAD XTRANS / CHECH FOR THE PUNCH FLAG TAD (6001 DCA .+1 .-. / WILL BE A TSF /************************************************************/ SUPPCH, JMS NOPNCH / SET TO NOP TO SUPPRESS PUNCH FLAG TEST /************************************************************/ CLA TAD XRECV TAD (6001 DCA .+1 .-. / WILL BE A KSF /************************************************************/ SUPKSF, JMS NOKBD / SET TO NOP TO SUPPRESS KBD FLAG TEST /************************************************************/ CLA TAD XRECV TAD (6006 DCA .+1 .-. / WILL BE A KRB DCA DATA TAD DATA 7421 / MQL TAD CHAR CIA TAD DATA / CHECK FOR DATA INTEGRITY SZA CLA /************************************************************/ SUPDAT, JMS NODAT / SET TO NOP TO SUPPRESS DATA CHECKING /************************************************************/ JMP START2 / START TEST OVER AGAIN / / ERROR HANDLING ROUTINES / RCOVR, 0 DCA RHOLD / SAVE ERROR CODE TAD HLTMDE / INTERROGATE HALT SWITCH SNA CLA JMP I RCOVR / CONTINUE TESTING AFTER ERROR TAD RHOLD / PUT ERROR CODE IN ACC HLT JMP I RCOVR / CONTINUE TESTING AFTER HALT RHOLD, 0 NOINT, 0 / ENTRY IF INT FAILED TO OCCUR CLA TAD (MNOINT JMS MESSG CLA IAC / ACC = 1 IF NO INTERRUPT JMS RCOVR JMP I NOINT NOPNCH, 0 / ENTRY IF PUNCH COMPLETE FLAG FAILED CLA / TO APPEAR AFTER TIMEOUT TAD (MNPNCH JMS MESSG CLA TAD (2 / ACC = 2, PUNCH FLAG BAD JMS RCOVR JMP I NOPNCH NOKBD, 0 / ENTRY IF KBD FLAG FAILED TO APPEAR CLA TAD (MNOKBD JMS MESSG CLA TAD (3 / ACC = 3, NO KEYBOARD FLAG JMS RCOVR JMP I NOKBD NODAT, 0 / ENTRY IF DATA ERROR OCCURED CLA TAD (MNODAT JMS MESSG CLA TAD (4 / ACC = 4, DATA ERROR JMS RCOVR JMP I NODAT PAGE MESSG, 0 DCA POINT TAD NOCONS SZA JMP I MESSG / DO NOTHING IF NOCONS SET MLOOP, TAD I POINT ISZ POINT SNA JMP ENDM TLS TSF JMP .-1 / WAIT FOR PUNCH FLAG CLA JMP MLOOP ENDM, TAD (215 TLS TSF JMP .-1 CLA TAD (212 TLS TSF JMP .-1 JMP I MESSG / THIS LOOP USES THE SETTING OF SWITCHES 1-3 ON THE /CONSOLE SWITCH REGISTER TO INDEX BTABLE. THE ENTRIES IN BTABLE /REPRESENT THE LENGTH OF TIME THE PROGRAM IS TO WAIT FOR /THE BOARD TO RESPOND TO A TLS. / THE PROGRAM IS CAPABLE OF ONE OF ANY SEVEN BAUD RATES. /NUMBERS IN THE TABLE ARE COMPUTED AS FOLLOWS-- EACH ITERATION OF /THE LOOP TAKES ABOUT 80 MICROSECONDS, SO THE ENTRY OF 1785 WILL CAUSE /THE LOOP TO TAKE ABOUT 1,785 TIMES 80 MICROSECONDS, OR ABOUT /142,800 MICROSECONDS. (143 MILLISECONDS). AT 110 BAUD, THIS /GIVES A 50 PERCENT MARGIN FOR ERROR FOR THE BOARD TO RESPOND. / NOTICE THAT SETTING SW 1-3 TO 0 MEANS A WAIT OF 0 /TIME UNITS IN THE LOOP. THIS IS USEFULL IN CONNECTION WITH /A SCOPE, AS IT ALLOWS YOU TO JAM INFORMATION INTO THE /XMIT BUFFER AT A MAXIMUM RATE. / POINT, 0 / POINTS TO TEXT BUFFER / AND BAUD RATE TABLE (AFTER INDEXING) TMEOUT, 0 CLA TAD BRATE SNA JMP I TMEOUT / RETURN IF BRATE = 0 (I.E., NO WAIT) TAD (BTABLE-1 DCA POINT TAD I POINT CIA DCA CNT LOOP, ZBLOCK 30 / THIS LOOP WILL EXECUTE ONCE EVERY ISZ CNT / 80 MICROSECS... JMP LOOP JMP I TMEOUT DECIMAL / BAUD RATE SW 1-3 / ---- ---- ------ BTABLE, 1785 / 110-150 1 655 / 300 2 85 / 2400 3 43 / 4800 4 21 / 9600 5 2 / 153.6K 6 1 / DUMMY 7 OCTAL CNT, 0 PAGE MNOINT, "N;"O;" ;"I;"N;"T;"R;"P;"T;" ;"F;"L;"A;"G;0 MNPNCH, "N;"O;" ;"P;"U;"N;"C;"H;" ;"F;"L;"A;"G;0 MNOKBD, "N;"O;" ;"K;"B;"D;" ;"F;"L;"A;"G;0 MNODAT, "D;"A;"T;"A;" ;"E;"R;"R;"O;"R;0 $$$$$$