IMD 1.16: 31/08/2008 11:21:37 84-93988-20 b000 f98820 expanded memory diagnostic source diskette    @0{)vvЀЀsQpk)p " }fA __M@IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIOS4 MB086031914102896860319141028 860319141028 MF98820 VOLMEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-20 B000   IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII_M@qGyy GGG`HX@ b G`^Y e GQ @@p@987 85P@ G:پN 8)0. * C'xC# b# }BK* @0DAJL w+™ЀЀΖQA1"   i  ž} š} @EEFF)DEۄF8 џ} ԟ} ̟} * `jUBBI,v BI, # @ G7H@pܾrCHC C GTq` Lg gEXC P+s=胾P+c fQN p $Rxnj  ޔniZ ތ⊞ } }HGž Ÿ@ALS)"$ C k20j.h( +$`%ꂜ\1 !M' y %'+os慾)sY ed|{ @8 o O m J K i gN )V% t%sLn`"E F. F„ D>) =`;nrgy w"G,{Kq1 A&}E*`(t@% ;c  765y342(.OS:: SYSG @ @G6BDāCGDĀ# BC @E OB TITL MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 TITL DESCRIPTION ******************************************************************** * * REVISION HISTORY * * A000 24/JUN/85 D.AGAHI ORIGINAL RELEASE * * A100 13/JAN/86 M.HAYES FIXED DOCUMENTATION ERRORS * * B000 31/JAN/86 M.HAYES COMPLETE RE-WRITE. * ********************************************************************* * * This diagnostic tests the 53988 (64K DRAMs) and the 55005 * (256K DRAMs) mapped memory boards. * * As of Revision B000 there are 3 tests: * * TEST A - Check Mapping. * * This test verifies that the board is actually doing the mapping. * It writes a unique number in the last word of every physical * page and then tries to read it back. * First it configures MAP0 to use the 1st 128KB and writes a unique * number to all the pages not occupied by the diagnostic. It then * reconfigures MAP0 to use the next chunk of memory and continues * writting until it has used all memory. It then goes back to the * 1st 128KB and tries to read all the numbers. * * TEST B - Write/Read Test. * * This test is similar to Test 1 in that it configures MAP0 to * ultimately use all of the memory. Each time  it reconfigures, it * will write all ones to the address space un-occupied by the * diagnostic and then reads them. It then writes incrementing * addresses and reads them back, and then it writes & reads all * zeros. * * TEST C - 2nd Mapping Test. * * This test will write incrementing addresses to the 1st 128KB of * memory. It then configures all 4 maps to use the just the 1st * free page beyond the diagnostic. As a result, all the logical * pages of all the maps should have the same addresses in them. * This test will check to make sure that's the case. TITL JUMPER SETTINGS ****************************************************************** * * JUMPER SETTINGS FOR THE 53988 BOARD. * ****************************************************************** * * Board Level -00 -01 -02 -03 * ------------------------------------------------------------- * * Memory Size in E11-E12 E11-E12 E10-E11 E10-E11 * the system.  E7-E8 E7-E8 E8-E9 E7-E8 * Maxi-bus address E4-E5 E4-E5 E4-E5 E5-E6 * * Map Enable  E2-E3 E1-E2 E1-E2 E1-E2 * * Enable Clock E16-E18 E16-E18 E16-E18 E16-E18 * Crystal  E13-E15 E13-E15 E13-E15 E13-E15 * E19-E20 E19-E20 E19-E20 E19-E20 * * Ras/Cas (Bit 16) E22-E23 E22-E23 E21-E22 E21-E22 * Generation (Bit 17) E25-E26 E25-E26 E25-E26 E24-E25 * TITL * * * The following table shows how the memory-size and device address * are stored in the program. * * 15  0 * / Memory Size \ / Device Address\ * _________________________________________________ * | | | | | | 0| 0| 0| 0| 0| | | | | | | * ------------------------------------------------- * 0  0 0 0 1 128KB * 0 0 0 1 0 256KB * 0 0 0 1 1 374KB * 0 0 1 0 0 512KB * 0 0 1 0 1  640KB * 0 0 1 1 0 768KB * 0 0 1 1 1 896KB * 0 1 0 0 0 1024KB or 1MB * . . * . . * . . * 1 0 0 0 0 2048KB or 2MB * * This allows virtually any 128KB boundry to be accomodated. * The program also assumes that all memory installed has the * same device address. * * The device address is set using block-1 on the board. In * order to set the address to 1, turn on switch 2 (SW1-2). * * Examples using the dash -00 thru -06 boards on Dev Addr = 1 : * * -00 :0101 (128kB memory without mapping, uses 64k DRAM chips) * -01  :0801 (128kB memory, uses 64k DRAM chips) * -02 :1001 (256kB memory, uses 64k DRAM chips) * -03 :2001 (512kB memory, uses 64k DRAM chips) * TITL NOTES * * NOTE: The 53988/55005 has 64 control registers, which are divided * into 4 maps. A map is just a collection of 16 control registers. * Map 0 uses the 1st 16, map 1 uses the next 16, and so on. Each *  register in the map contains an entry which maps an 8KB-page * of logical memory into an 8KB-page of physical memory. *  The term map may also refer to the actual 128KB of physical * memory that is associated with a logical address space. * *   On power-up, none of the maps are enabled. The system defaults * to use the 1st 128KB of physical memory. In order to use a map, * its control registers must be configured. It takes 16 OUT * instructions to completely configure a map. The map must then be * enabled using the SELP instruction. * * * Only one Map can be enabled * at any given time. A map is disabled by either enabling another * map or by using no maps, i.e., defaulting to the 1st 128KB. * In order to default, bit 0 of the data field is off and a SELP * is sent with a function code = 1. * TITL SELP'S AND OUT'S * * SELP A,0 (PARITY) * * BIT 0 IN A: 1=ENABLE * 0=DISABLE * * SELP A,1 (ENABLE MAPPING) * *  BIT 0 IN A: 1=ENABLE THE SELECTED MAP * 0=DISABLE MAPPING * BITS 1-2 : SELECT THE MAP TO BE ENABLED * * OUT A,FC (MAP CONFIGURATION) * * A HAS CONTROL-REGISTER VALUE * FC=0 FOR MAP 0 * FC=1 FOR MAP 1 * FC=2 FOR MAP 2 * FC=3 FOR MAP 3 * TITL TRAPS *************************************************************** * * TRAPS * *************************************************************** * * POWER UP * REL :80 JMP *$+1 WORD DEBUG4 * * UNIMPLEMENTED INSTRUCTION * REL :84 WORD 0 P-REG + 1 WORD 0 BAD INSTRUCTION JMP *$+1 WORD UNIMP * * MEMORY EXCEPTION * REL :88 WORD 0 P-REG + 1 WORD 0  FAILING INSTRUCTION JMP *$+1 WORD MEMEXC * * POWER FAIL * REL :8C WORD 0 P-REG WORD 0 CURRENT INSTRUCTION JMP *$+1 WORD PWRFL * * ARITHMETIC EXCEPTION * REL :A8 WORD 0 P-REG WORD 0 BAD INSTRUCTION JMP *$+1 WORD ARITH * TITL INTERRUPTS *************************************************** * * INTERRUPTS * *************************************************** * * CONSOLE INTERRUPT * REL :94 JMP *$+1 WORD CINT * LPOOL TITL SCRATCH PAD * * From DEBUG, you can jump to location :100. Upon returning * to DEBUG, Q will point to the first location beyond the * diagnostic and A will point to the last location in DEBUG. * REL :100 JMP DEBUG4 COPY =R:HIGH,A ADD =1,A COPY =LSTCODE,Q JMP DEBUG4 * * Can't say as I know what this is for. * REL :110 COPY DA,A COPY =0,Q XNX A SELP Q,0 JMP DEBUG4 LPOOL * TITL MACRO QURY ********************************** * * * MACRO QURY - THIS MACRO REPLACE THE * REDUNDANT CODES DURING * QUARIES. * * *********************************** * MACRO QURY QURY#1 EQU $ JST CHRIN CHECK TERMINATOR JMP QURY#2 CARRIAGE RETURN JMP QURY#3 POUND SIGN JMP QURY#4 BACK ARROW JMP QURY#5 UPARROW JMP QURY#6 COMMA IFT 6<#7 ANYTHING ELSE ENDC ENDM * TITL INITIALIZATION EXTR R:HIGH EXTR DEBUG4 SHARABLE BLANK MACHINE =:10 OPTIONS +:0008 EXPANDMACROS REL :200 INIT EQU $ * * Entry point * COPY L,A INIT THE STACK ADD =:20,A COPY A,K * SBIT 8,S GLOBAL INTERRUPT-ENABLE SBIT 4,S ENABLE CONSOLE INTERRUPTS * JST MSGA PRINT THE TITLE WORD TITLE JST CRLF * INIT1 EQU $ JST  DEVADRR GET THE DEVICE ADDRESS COPY DA,A GET DEV ADDR OF MEMORY BOARD XNX A IN 0,Q SUB =:200,Q GET THE TYPE OF  MEMORY & SEE IF IT'S A 53988 JEQ Q,INIT2 YES JST MSGA "NO 53988 INSTALLED AT THAT ADDRESS" WORD BADDA JMP INIT1 * INIT2 EQU $ JST GETMEM GET THE MEMORY SIZE COPY MARKS,A GET THE PARAMETER WORD COPY DA,Q GET THE DEVICE ADDRESS SHIFT Q,R,3 SHIFT IT BACK B4 PUTTING IN THE PARAMETER WORD OR Q,A SIZE IN BITS 11-15, DEV ADDR IN BITS 0-5 COPY A,MARKS SAVE THEM JST EREPORT DETAILED OR BRIEF ERROR MSG'S JMP INIT3 CONTINUE LPOOL TITL  INITIALIZATION * * Compute the # of the last physical-page installed in the system. * INIT3 EQU $ COPY MARKS,A SHIFT A,RO,7 SUB =1,A COPY A,MAXPPG * * Find out where the next 8K boundary beyond DEBUG is and save it. * COPY =R:HIGH,Q OR =:0FFF,Q ADD =1,Q COPY Q,TOPOFPGM * * Is this a -00 board? * COPY MARKS,A TBIT 8,A JF OV,INIT4 NO COPY =1,A COPY A,TYP0L JMP DASH00 YES * * Enable parity since it is disabled at power up. * INIT4 EQU $ COPY =0,A COPY A,TYP0L COPY DA,A COPY =1,Q 1=ENABLE PARITY, 0=DISABLE PARITY XNX A ONLY POWER DOWN OR ANOTHER SELP CAN DISABLE PARITY SELP Q,FC0 FC0 IS FOR PARITY, FC1 IS FOR MAPPING COPY =0,A INITIALIZE PASS COUNTER COPY A,PASSCNT JST CRLF JST CRLF JMP INIT5 KEEP GOING LPOOL TITL * * This is where we loop to and print the PASS #. * INIT5 EQU $ COPY =0,A COPY A,PFFLAG INIT THE PASS-FAIL FLAG IMS PASSCNT NOP JST MSGA "PASS N" WORD PASSMSG COPY PASSCNT,A JST ODEC JMP PAGE LPOOL * TITL TEST A - PAGING TEST ************************************************** * * TEST A * * WRITE AN INCREMENTING NUMBER TO THE LAST * WORD OF EVERY PHYSICAL PAGE AND THEN TRY * TO READ THEM BACK. * ************************************************** * PAGE EQU $ JST MSGA "TEST A ..." WORD MES10 COPY =1,A LOOP THRU THIS RTN TWICE COPY A,TEMP2 * COPY TOPOFPGM,A SET UP THE PAGE COUNTER SHIFT A,R,12 " COPY A,PCOUNT  " * PAGE1 EQU $ COPY =0,Q STARTING CONTROL-REGISTER VALUE COPY =TABLE,Y LOCATION IN TABLE TO START AT * PAGE2 EQU $ JST TBLE BUILD MAPPING TABLE COPY =0,A PASS THE FUNCTION CODE (MAP#) JST MAPIT MAP IN THE NEXT CHUNK OF MEMORY * COPY TEMP2,A CSK A,=1 NOP JMP PAGE12 JMP PAGE8 LPOOL TITL * * WRITE PAGE #'S * PAGE8 EQU $ COPY TOPOFPGM,X SKIP THE DIAGNOSTIC'S PAGES COPY =:0FFF,Q " OR Q,X " PAGE10 EQU $ COPY PCOUNT,Q WRITE PAGE# COPY Q,0(X) " CSM X,FWORD WAS THAT THE LAST PAGE OF THIS MAP? JMP PAGE11  NO, LOOP NOP IMS PCOUNT YES JMP PAGE17 PAGE11 EQU $ IMS PCOUNT BUMP PAGE # ADD =:1000,X  POINT TO NEXT PAGE JMP PAGE10 * * READ PAGE #'S * PAGE12 EQU $ COPY TOPOFPGM,X SKIP DIAGNOSTIC'S PAGES COPY =:FFF,Q " OR Q,X " PAGE13 EQU $ COPY 0(X),Q READ THE PAGE# SUB PCOUNT,Q IS IT CORRECT? JEQ Q,PAGE14 YES * COPY =1,A JUST NOTE THAT TEST HAS FAILED COPY A,PFFLAG PASS-FAIL FLAG COPY EFLAG,A DETAILED OF BRIEF ERROR REPORTS? SUB =:D,A JEQ A,PAGE13B JUMP IF DETAILED REPORT JMP PAGE14 * PAGE13B E QU $ COPY X,SAVEX COPY PCOUNT,A PHYSICAL PAGE# JST CONVWRD WORD MSG5A COPY PCOUNT,A EXPECTED DATA JST CONVWRD WORD MSG5B COPY 0(X),A ACTUAL DATA JST CONVWRD WORD MSG5C JST MSGA "READ ERROR IN PAGE N EXPECTED :XXXX ACTUAL :XXXX" WORD MSG5 COPY SAVEX,X RESTORE X-REG PAGE14 EQU $ CSM X,FWORD WAS THAT THE LAST PAGE OF THIS MAP? JMP PAGE15 NO NOP IMS PCOUNT YES JMP PAGE17 PAGE15 EQU $ IMS PCOUNT NO ADD =:1000,X POINT TO NEXT PAGE JMP PAGE13 LOOP * * * Check to see if the 1st page for the next map would exceed * the maximum physical-page#. * PAGE17 EQU $ COPY TABLE+15,Q LAST PAGE OF THIS MAP SHIFT Q,R,2 COMPUTE 1ST PAGE OF NEXT MAP AND =:FF,Q " ADD =1,Q " COPY MAXPPG,A A <-- MAXIMUM PHYSICAL-PAGE # ALLOWED * CSK Q,A IS THERE MORE MEMORY THAT CAN BE MAPPED? JMP PAGE20 YES, SEE IF THERE'S ENOUGH FOR ANOTHER MAP NOP COPY TEMP2,A SEE IF WE ARE DONE WRITING & READING SUB =1,A JLT A,PAGE40 YES, WE'RE DONE COPY A,TEMP2 NO, GO DO THE READ TEST * COPY TOPOFPGM,A RESET PAGE COUNT SHIFT A,R,12 " COPY A,PCOUNT " JMP PAGE1 LOOP * * Check to see if there is enough memory to map another 128KB. * If there is less than 128KB left, then we reconfigure the map * such that the last n pages of the current map are replaced * with the last n remaining untested pages. * PAGE20 EQU $ COPY Q,A A <-- PHYS-PAGE# FOR LOG-PAGE 0 OF NEXT MAP ADD =15,A A <-- PHYS-PAGE# FOR LOG-PAGE 15 OF NEXT MAP CSM A,MAXPPG JMP PAGE30 AT LEAST 128KB LEFT JMP PAGE25  < 128KB LEFT, MAKE ADJUSTMENTS JMP PAGE30 128KB LEFT * * PAGE25 EQU $ COPY Q,PCOUNT ADJUST PAGE COUNTER COPY MAXPPG,Q CALQLATE POINTER INTO TABLE SUB Q,A " COPY =TABLE,Y " ADD A,Y GOT IT * COPY A,X CALQLATE THE NEW VALUE FOR X SHIFT X,L,12 " COPY =:0FFF,A " OR A,X " COPY X,SAVEX " * COPY PCOUNT,Q CALQLATE VALUE TO START WITH SHIFT Q,L,2 " COPY 0(Y),A " AND =:F000,A " OR A,Q GOT IT * COPY X,SAVEX JST TBLE SET UP THE TABLE  COPY =0,A RECONFIG MAP0 JST MAPIT COPY SAVEX,X * COPY TEMP2,A CSK A,=1 NOP JMP PAGE13 CONTINUE READING JMP PAGE10 CONTINUE WRITING * * * Get the starting value for the control-registers into Q. * PAGE30 EQU $ SHIFT Q,L,2 COPY TOPOFPGM,A OR A,Q * * Load Y with the address of the 1st entry to be modified. * SHIFT A,R,12 COPY =TABLE,Y ADD A,Y JMP PAGE2 REPEAT * * PRINT SHORT ERROR MSG IF REQUESTED * PAGE40 EQU $ COPY PFFLAG,A SEE IF TEST PASSED JEQ A,PAGE42 JUMP IF IT PASSED COPY EFLAG,A DETAILED OR BRIEF ERROR REPORT? SUB  =:D,A JEQ A,PAGE44 JUMP IF DETAILED JST MSGA WORD MES30 "FAILED" JMP PAGE44 PAGE42 EQU $ JST MSGA  "PASSED" WORD MES20 PAGE44 EQU $ COPY =0,A RESET PASS-FAIL FLAG COPY A,PFFLAG JMP MAIN GO TO  TEST C LPOOL TITL TEST B - WRITE/READ PATTERNS TO ALL OF MEMORY ************************************************** * *  TEST B * * WRITE/READ PATTERNS TO ALL OF MEMORY. * ************************************************** * MAIN EQU $ JST MSGA "TEST B ..." WORD MES40 COPY =0,Q STARTING CONTROL-REGISTER VALUE COPY =TABLE,Y LOCATION IN TABLE TO START AT MAIN1 EQU $ JST TBLE BUILD MAPPING TABLE COPY =0,A PASS THE FUNCTION CODE (MAP#) JST MAPIT MAP IN THE NEXT CHUNK OF MEMORY JST ZERO JST ZERCHK JST ADDRW JST ADDRCHK JST ONES JST ONECHK * *  Check to see if the 1st page for the next map would exceed * the maximum physical-page#. * COPY TABLE+15,Q LAST PAGE OF THIS MAP SHIFT Q,R,2 COMPUTE 1ST PAGE OF NEXT MAP AND =:FF,Q " ADD =1,Q " COPY MAXPPG,A A <-- MAXIMUM PHYSICAL-PAGE # ALLOWED CSK Q,A IS THERE MORE MEMORY THAT CAN BE MAPPED? JMP MAIN2  YES, SEE IF THERE'S ENOUGH FOR ANOTHER MAP NOP JMP DONE NO, THAT'S IT * * Check to see if there is enough memory to map another 128KB. * If there is less than 128KB left, then we map in the last 128KB * of physical memory (some of which has already been tested) * starting at the top of memory minus 128KB. * MAIN2 EQU $ COPY Q,A A <-- PHYS-PAGE# FOR LOG-PAGE 0 OF NEXT MAP ADD =15,A A <-- PHYS-PAGE# FOR LOG-PAGE 15 OF NEXT MAP CSM A,MAXPPG JMP MAIN4 AT LEAST 128KB LEFT JMP MAIN3 < 128KB LEFT, MAKE ADJUSTMENTS JMP MAIN4 128KB LEFT * MAIN3 EQU $ COPY TOPOFPGM,Q MAKE THE ADJUSTMENT SHIFT Q,R,12 " SUB =15,Q " ADD MAXPPG,Q " * * Get the starting value for the control-registers into Q. * MAIN4 EQU $ SHIFT Q,L,2 COPY TOPOFPGM,A OR A,Q * * Load Y with the address of the 1st entry to be modified. * SHIFT A,R,12 COPY =TABLE,Y ADD A,Y JMP MAIN1 REPEAT LPOOL TITL  TEST B ********************************************************************* * * TEST B - CONTINUED * * MOVE - Move the diagnostic and test the memory. * * All memory has been tested except the pages occupied * by the diagnostic. This routine will move the diagnostic * from Map0 to Map1, and then test the rest of Map0 memory. * ********************************************************************* * DONE EQU $ * * Disable mapping, so we are using the 1st 128KB, with the * diagnostic starting in page 0. * COPY DA,A COPY =0,Q XNX A SELP Q,FC1 * * Now map the memory above the diagnostic to be low memory. * COPY =TABLE,Y COPY TOPOFPGM,A GET THE END OF THE PROGRAM COPY TOPOFPGM,X SHIFT A,R,10 A HAS THE CONTROL-REG VALUE REL1 EQU $ COPY A,0(Y) STORE CONTROL-REGISTER IN TABLE ADD =1,Y ADD =:1004,A IN CASE THE PROGRAM IS LARGER THAN 1 PAGE COPY A,TEMP AND =:F800,A CSM A,X DONE MAPPING THE DIAGNOSTIC? COPY TEMP,A NO JMP REL1 NO JMP REL1A  YES LPOOL * * Now map the memory, formerly occupied by the program, to be * logically above the program. * REL1A EQU $ SHIFT X,L,1 READY X FOR NEXT COMPARISON REL2 EQU $ COPY A,0(Y) STORE CONTROL-REGISTER IN TABLE ADD =1,Y ADD =:1 004,A COPY A,TEMP AND =:F800,A CSM A,X DONE MAPPING LOW MEMORY? COPY TEMP,A NO JMP REL2 NO * * Relocate the program to the next page(s) beyond itself. * COPY TOPOFPGM,X COPY X,Q COPY =0,Y REL3 EQU $ COPY 0(Y),A COPY A,0(X,Y)  ADD =1,Y JNED Q,REL3 * * Config & Enable Map0, which is using the first 128KB * COPY =TABLE+16,Y END OF THE TABLE COPY =TABLE,X COPY DA,A REL3A EQU $ COPY 0(X),Q XNX A OUT Q,FC0 OUT TO MAP0 ADD =1,X CSK X,Y DONE MAPPING? JMP REL3A NO NOP COPY =1,A MAP-ENABLE BIT COPY DA,Q XNX Q SELP A,FC1 ENABLE MAP0 * * Now test the remaining memory. * JST ZERO JST ZERCHK JST ADDRW JST ADDRCHK JST ONES JST ONECHK TITL MOVE THE DIAGNOSTIC BACK * * Put the diagnostic back where it was. * COPY TOPOFPGM,X COPY X,Y SUB =1,Y COPY 0(Y),A COPY A,0(X,Y) JNED Y,$-2 * * Disable mapping, so we are using the 1st 128KB, with the * diagnostic starting in page 0. * COPY DA,A COPY =0,Q XNX A SELP Q,FC1 * * PRINT BRIEF ERROR REPORT IF REQUESTED * COPY PFFLAG,A DID TEST FAIL? JEQ A,REL4 JUMP IF IT PASSED * COPY EFLAG,A DETAILED OR BRIEF ERROR REPORT? SUB =:D,A JEQ A,REL5 JUMP IF DETAILED * JST MSGA WORD MES30 "FAILED" JMP REL5 * REL4 EQU $ JST MSGA WORD MES20 "PASSED" * REL5 EQU $ COPY =0,A RESET PASS-FAIL FLAG COPY A,PFFLAG * * Dash-00 borad? * COPY TYP0L,A TBIT 0,A JF OV,TEST3 JUMP IF IT'S NOT JMP D0D0 LPOOL TITL TEST C *************************************************************** * * TEST C * * POINT ALL LOG PAGES AT THE SAME PHYS PAGE, THEN TEST. * * THIS ROUTINE DOES THE FOLLOWING: * * 1) Configure Map0 to use 1st 128KB and then fill it with * incrementing addresses. * * 2) Configure all 4 maps such that all free logical pages *  are pointing to the first available physical page after * the diagnostic. * * 3) Check to see if the first 16 locations of each page of * each map have the same 16 addresses in them. They should * since all logical pages of all maps should be pointing to * the same physical page. * ********************************************************************* * * CONFIG MAP0 & WRITE ADDRESSES * TEST3 EQU $ JST MSGA "TEST C ..." WORD MES50 * COPY =0,Q STARTING CONTROL-REGISTER VALUE COPY =TABLE,Y LOCATION IN TABLE TO START AT JST TBLE BUID THE MAPPING TABLE * COPY =0,A  PASS THE FUNCTION CODE (MAP#) JST MAPIT MAP0 WILL NOW POINT TO 1ST 128KB JST ADDRW WRITE THE ADDRESSES(ONLY USES Y-REG) * * Map all pages (except for those holding the diagnostic) of all * four maps to point to the 1st physical-page after the * diagnostic. * COPY TOPOFPGM,X X WILL HOLD THE COUNTER SHIFT X,R,12 GET # OF PAGES USED BY DIAGNOSTIC SUB =16,X # OF EMPTY PAGES COPY TOPOFPGM,Q SHIFT Q,R,10 OR TOPOFPGM,Q COPY DA,A * SAME1 EQU $ XNX A OUT Q,FC0 MAP 0 XNX A OUT Q,FC1 MAP 1 XNX A OUT Q,FC2 MAP 2 XNX A OUT Q,FC3 MAP 3 ADD =:1000,Q INCREMENT THE PAGE TO OUTPUT ADD =1,X JNE X,SAME1 * AND =:F,Q SAVE THE PHYSICAL PAGE# FOR LATER SHIFT Q,R,2 " COPY Q,TEMP3  " * * NOW CONFIG LOW MEMORY FOR EACH MAP * COPY TOPOFPGM,X FIGURE OUT HOW MANY PAGES THE DIAGNOSTIC IS SHIFT X,R,12 COPY =0,Q * SAME1B EQU $ XNX A OUT Q,FC0 MAP 0 XNX A OUT Q,FC1 MAP 1 XNX A OUT Q,FC2 MAP 2 XNX A OUT Q,FC3 MAP 3 * ADD =:1004,Q SUB =1,X JNE X,SAME1B * * SEE IF THEY REALLY ARE POINTING TO THE SAME PHYSICAL PAGE * COPY =0,Q SAME2 EQU $ COPY DA,A COPY Q,ENMAP TO KEEP TRACK OF WHICH MAP IS ENABLED SHIFT Q,L,1 MOVE MAP# INTO MAP-SELECT FIELD ADD =1,Q BIT 0 IS THE MAP-ENABLE BIT XNX A SELP Q,FC1 ENABLE THE MAP * COPY TOPOFPGM,A INITIALIZE THE LOG PAGE COUNTER SHIFT A,R,12 " SUB =:10,A " COPY A,PGCNTR MAP ENABLE COUNTER COPY TOPOFPGM,X INDEX POINTER * SAME3 EQU $ COPY TOPOFPGM,A DATA TO COMPARE ADD =:10,A COPY =:10,Y COUNTER * SAME4 EQU $ COPY 0(X,Y),Q CONTENTS OF MEMORY CSN A,Q ARE THEY EQUAL? JMP SAME5 YES * COPY A,SAVEA NO, SAVE EXPECTED DATA COPY =1,A MAKE A NOTE THAT IT FAILED COPY A,PFFLAG COPY EFLAG,A DETAILED OR BRIEF ERROR REPORTS? SUB =:D,A JEQ A,SAME4A JUMP IF DETAILED COPY SAVEA,A GET THE EXPECTED DATA JMP SAME5 * SAME4A EQU $ COPY SAVEA,A GET EXPECTED DATA COPY Q,TEMP1 SAVE ACTUAL DATA JST CONVWRD A HAS EXPECTED DATA WORD MSG50D EXPECTED DATA * COPY TEMP1,A ACTUAL DATA JST CONVWRD WORD MSG50E * COPY TEMP3,A PHYSICAL PAGE # JST CONVWRD WORD MSG50B * COPY PGCNTR,A LOGICAL PAGE # ADD =:10,A MAKE IT POSITIVE JST CONVWRD WORD MSG50C * COPY ENMAP,A MAP # JST CONVWRD WORD MSG50A * JST MSGA PRINT THE ERROR MESSAGE WORD MSG50 COPY SAVEA,A EXPECTED DATA SAME5 EQU $ SUB =1,A JNED Y,SAME4 JUMP IF NOT DONE WITH THIS PAGE * ADD =:1000,X IMS PGCNTR LAST PAGE OF THE MAP? JMP SAME3 NO, TEST NEXT BLOCK COPY ENMAP,Q YES, INCREMENT MAP COUNTER ADD =1,Q COPY DA,A GET DA IN CASE OF ANOTHER OUT INSTRUCTION CLSN Q,=4 DONE? JMP D0D0 YES JMP SAME2  NO, DO NEXT BANK * * Dash-00 board. * DASH00 EQU $ COPY =R:HIGH,Q ADD =1,Q COPY Q,TOPOFPGM JST ZERO JST ZERCHK JST ADDRW JST ADDRCHK JST ONES JST ONECHK JMP D0D02 * * Disable mapping and loop. * D0D0 EQU $ COPY =0,Q COPY DA,A XNX A SELP Q,FC1 DISABLE MAPPING * D0D02 EQU $ COPY =:D0D0,A TELL THEM IT'S DONE SELP A,4 * * IF THE TEST FAILED, CHECK TO SEE IF WE HAVE ALREADY PRINTED * A DETAILED ERROR REPORT, OR IF WE SHOULD JUST DO A BRIEF ONE. * COPY PFFLAG,A DID TEST PASS? JEQ A,SAME7 JUMP IF IT PASSED * COPY EFLAG,A DETAILED OR BRIEF ERROR REPORT? SUB =:D,A JEQ A,SAME10 JUMP IF DETAILED * JST MSGA WORD MES30 "FAILED" JMP SAME10 * SAME7 EQU $ JST MSGA WORD MES20 "PASSED" * SAME10 EQU $ COPY =0,A RESET PASS-FAIL FLAG COPY A,PFFLAG JMP INIT5 * LPOOL TITL SUBROUTINES ************************************************************* * * BUILD THE MAPPING TABLE * * TBLE - This routine will load a 16-word table with * control register values, which will be used to map in the * next 128KB chunk of memory. The diagnostic currently fits * into 1 page and will always be in physical page 0. * In the future, the diagnostic could grow la rger than 1 page. * * On entry: Y points to 1st entry in the table to be modified. * Q has the starting value to be entered. * ************************************************************* * TBLE ENT COPY =TABLE,X PUT TABLE'S ADDRESS IN THE CDR SELP X,4 TBLE1 EQU $ COPY Q,0(Y) STORE CONTROL-REGISTER VALUE ADD =:1004,Q POINT TO NEXT PAGE ADD =1,Y CSM Y,=TABLE+:10 DONE? JMP TBLE1 NO NOP JMP *TBLE YES LPOOL TITL DO THE MAPPING ********************************************************************* * * MAPIT * * Now do the actual mapping by issuing the OUT's to the board, * using the values stored in TABLE. * * On entry: A has Function Code (Map #). * ********************************************************************* * MAPIT ENT COPY A,TEMP SAVE THE MAP# COPY =TABLE+16,Y END OF THE TABLE COPY =TABLE,X ADD DA,A ADD DEVICE ADDR TO FUNCTION CODE (MAP#) MAPIT1 EQU $ COPY 0(X),Q XNX A OUT Q,0 FUNCTION CODE IS PASSED TO THIS RTN IN THE A-REG ADD =1,X CSK X,Y DONE MAPPING? JMP MAPIT1 NO NOP COPY TEMP,A GET THE MAP# SHIFT A,L,1 PUT IT IN THE MAP SELECT FIELD OR =1,A TURN ON THE MAP-ENABLE BIT COPY DA,Q XNX Q SELP A,FC1 ENABLE THE MAP WE JUST CONFIGURED JMP *MAPIT GO TEST IT LPOOL TITL ******************************************** * * Zero all of memory. * ******************************************** ZERO ENT COPY =0,A COPY TOPOFPGM,Y ZERO1 COPY A,0(Y) IJNE Y,ZERO1 JMP *ZERO * ******************************************** * * Check memory for all zeros. * ******************************************** * ZERCHK ENT COPY =0,A COPY TOPOFPGM,Y UPPER LIMIT OF PROGRAM ZERCHK1 EQU $ CSM A,0(Y) ALL MEMORY SHOULD BE ZERO NOP JMP ZERCHK2 IF NOT, IT'S AN ERROR IJNE Y,ZERCHK1  LOOP TILL END OF MEMORY JMP *ZERCHK ALL DONE * ZERCHK2 EQU $ COPY =1,A MAKE A NOTE THAT THE TEST HAS FAILED COPY A,PFFLAG COPY =0,A GET A READY FOR MORE TESTING COPY EFLAG,Q DETAILED OR BRIEF ERROR REPORTS? SUB =:B,Q JEQ Q,ZERCHK1 IF BRIEF, SKIP ERROR MESSAGE FOR NOW COPY =0,A EXPECTED DATA JST CONVWRD WORD MSG60A COPY 0(Y),A ACTUAL DATA JST CONVWRD WORD MSG60B JST MSGA "READ ERROR EXP XXXX ACT XXXX" WORD MSG60 COPY =0,A GET A READY FOR MORE TESTING JMP ZERCHK1 CONTINUE IF THEY WANT LPOOL TITL ***************************************************** * *  WRITE INCREMENTING ADDRESSES TO MEMORY * ***************************************************** * ADDRW ENT COPY TOPOFPGM,Y  COPY Y,0(Y) COPY ADDRESS TO ITSELF IJNE Y,$-1 LAST ADDR, NO THEN DO ANOTHER JMP *ADDRW * ***************************************************** * * CHECK ADDRESSES IN MEMORY * CHECK TO SEE THAT EACH LOCATION HAS ITSELF * ***************************************************** * ADDRCHK ENT COPY TOPOFPGM,Y ADDRCHK1 EQU $ CSM Y,0(Y) IS IT EQUAL? NOP JMP ADDRCHK2 NO, GOTO ERROR IJNE Y,ADDRCHK1 YES, LOOP TILL END OF MEMORY JMP *ADDRCHK ALL DONE ADDRCHK2 EQU $ COPY =1,A MAKE A NOTE THAT THE TEST HAS FAILED COPY A,PFFLAG COPY EFLAG,A DETAILED OR BRIEF ERROR REPORTS? SUB =:B,A J  EQ A,ADDRCHK1 IF BRIEF, SKIP ERROR MESSAGE FOR NOW COPY Y,A EXPECTED DATA JST CONVWRD WORD MSG60A COPY 0(Y),A  ACTUAL DATA JST CONVWRD WORD MSG60B JST MSGA "READ ERROR EXP XXXX ACT XXXX" WORD MSG60 JMP ADDRCHK1 LPOOL TITL ********************************************** * * WRITE ONES TO MEMORY * ********************************************** * ONES ENT COPY =-1,A COPY TOPOFPGM,Y COPY A,0(Y) IJNE Y,$-1 JMP *ONES * ********************************************** * * CHECK MEMORY FOR ONES * ********************************************** * ONECHK ENT COPY =-1,A COPY TOPOFPGM,Y ONECHK1 EQU $ CSM A,0(Y) NOP JMP ONECHK2 ERROR IJNE Y,ONECHK1 LOOP TILL END OF MEMORY JMP *ONECHK ALL DONE ONECHK2 EQU $ COPY =1,A MAKE A NOTE THAT THE TEST HAS FAILED COPY A,PFFLAG COPY EFLAG,A DETAILED OR BRIEF ERROR REPORTS? SUB =:B,A JEQ A,ONECHK1 IF BRIEF, SKIP ERROR MESSAGE FOR NOW COPY =-1,A EXPECTED DATA JST CONVWRD WORD MSG60A COPY 0(Y),A ACTUAL DATA JST CONVWRD WORD MSG60B JST MSGA "READ ERROR EXP XXXX ACT XXXX" WORD MSG60 JMP ONECHK1  LPOOL TITL 'CHRIN' SUBROUTINE ****************************** * * CHRIN - CHECK TERMINATOR * * THIS SUBROUTINE WILL CHECK THE * TERMINATOR CHARACTER FOR INPUT THROUGH * THE 'IHEX' OR 'IDEC' SUBROUTINE IS ONE * OF THE FOLLOWING: * * CARRIAGE RETURN - RETURN TO STANDARD RETURN ADDRESS * POUND SIGN (#) - RETURN TO RETURN ADDRESS + 1 * BACK ARROW - RETURN TO RETURN ADDRESS + 2 * UP ARROW - RETURN TO RETURN ADDRESS + 3 * COMMA (,) - RETURN TO RETURN ADDRESS + 4 * ANYTHING ELSE - RETURN TO RETURN ADDRESS + 5 * * CALLING SEQUENCE: * JST CHRIN * JMP ? CARRIAGE RETURN R * JMP ? POUND SIGN R+1 * JMP ? BACK ARROW R+2 * JMP ? UP ARROW R+3 * JMP ? COMMA R+4 * JMP ? ANYTHING ELSE R+5 * * CALLS: CALLED BY: * NONE QUERIES * ****************************** * CHRIN ENT TERMINATOR CHECK ROUTINE COPY IDCTM2,A GET TTY INPUT CHAR CLSN =CR:,A IS IT C/R JMP *CHRIN YES IMS CHRIN CLSN ='#',A IS IT '#' JMP *CHRIN YES IMS CHRIN CLSN =BCKAR:,A IS IT BACK ARROW JMP *CHRIN YES IMS CHRIN CLSN =UPARR:,A IS IT UP ARROW JMP *CHRIN YES IMS CHRIN CLSN =',',A IS IT COMMA JMP *CHRIN YES IMS CHRIN ITS SOMETHING ELSE JMP *CHRIN * LPOOL TITL C O N V B Y T E --- CONVERT RIGHT MOST NYBBLE OF A TO ASCII ***************************************************************************** * * C O N V B Y T E --- CNONVERT RIGHT MOST NYBBLE OF A TO ASCII * * CALLING SEQUENCE: * JSK CONVBYTE * * INPUT: A HAS VALUE TO BE CONVERTED IN NIBBLE 0 * * OUTPUT: Q HAS RESULT IN BYTE 0 *  A IS UNCHANGED * ***************************************************************************** CONVBYTE ENT COPY =:000F,Q  MASK OT LOW NYBLE. AND A,Q RANGE TO 0..F CSK Q,=:A IS NUMER > 9? JMP LESS9 NO, SO MAKE ASCII :30..:39.   NOP SUB =:9,Q MAKE NUMBER IN THE RANGE OF 1..F. ADD =:10,Q SET UP THE PROPER BIAS (:40=:10+:30) LESS9 EQU $ ADD =:30,Q MAKE RANGE Q+:30. (:30..:39,:41..:46.) JMP *CONVBYTE LPOOL TITL C O N V W R D --- CONVERT A-REGISTER TO ASCII ***************************************************************************** * * C O N V W R D --- CONVERT A-REGISTER TO ASCII * * CALLING SEQUENCE: * JST CONVWRD * WORD - Output buffer address for ASCII conversion * ****************************************************************************** CONVWRD ENT PUSH :40 SAVE ENTRY VALUES OF THE REGISTERS. COPY *CONVWRD,Y GET THE BUFFER ADDRESS IMS CONVWRD INCREMENT TO THE RETURN LOCATION COPY =3,X LOOP COUNT TO THE X REGISTER. BLDNUM EQU $ START OF THE LOOP TO PICK UP THE HEX NUMBER. JST CONVBYTE SBIT BY:,S SET BYTE MODE. COPY Q,0(X,Y) PUT INTO BUFFER ONE BYTE AT A TIME. RBIT BY:,S SET WORD MODE. SHIFT A,RO,4 GET NEXT NYBLE. JNED X,BLDNUM DEC LOOP COUNT AND DO MORE IF NECESSARY. POP JMP *CONVWRD RETURN LPOOL TITL 'CRLF' SUBROUTINE ****************************** * * CRLF - OUTPUT CR/LF * * THIS SUBROUTINE WILL OUTPUT * AN ASCII CARRIAGE RETURN FOLLOWED *  BY AN ASCII LINE FEED TO THE * CRT/TTY. * * CALLING SEQUENCE: * JST CRLF * * CALLS: CALLED BY: * OTTY DUMP * TSTITL * ****************************** * CRLF ENT COPY =CR:,A OUTPUT CR JST OTTY COPY =LF:,A OUTPUT LF JST OTTY JMP *CRLF * LPOOL TITL 'IHEX' SUBROUTINE ****************************** * * IHEX - INPUT HEXADECIMAL NUMBER * * THIS SUBROUTINE WILL INPUT, THROUGH *  THE CRT/TTY, AN ASCII-HEX VALUE WHICH * IT WILL CONVERT TO BINARY AND RETURN IT * IN THE X REGISTER. * *  THIS SUBROUTINE IS EXITED UPON INPUT OF THE * FIRST NON ASCII-HEX CHARACTER WHICH IT * RETURNS IN THE A REGISTER * * CALLING SEQUENCE: * JST IHEX * * CALLS: CALLED BY: * IKB QUERIES * ****************************** * IHEX ENT INPUT HEX VALUE (4-DIGIT) COPY =0,A CLEAR VALUE AREA COPY A,IDCTM1 COPY A,IDCTM3 AND COUNT IHEX3 JST IKB GET A CHAR COPY A,IDCTM2 SAVE IT SUB ='0',A CHECK FOR HEX JLT A,IHEX4 TERMINATOR SUB =9,A ITS 0-9 JLE A,IHEX1 ITS 0-9 SUB =9,A ADD =1,A JLT A,IHEX4 TERMINATOR SUB =5,A JGT A,IHEX4 TERMINATOR ADD =:F,A ITS A-F IHEX2 COPY A,IDCTM2 SAVE HEX CHAR COPY IDCTM1,A INCLUDE IT IN VALUE SHIFT A,LO,4 OR IDCTM2,A 6 COPY A,IDCTM1 IMS IDCTM3 BUMP COUNT JMP IHEX3 GET NEXT CHAR IHEX1 ADD =9,A HEX 0-9 JMP IHEX2 IHEX4 COPY IDCTM2,A LOAD TERMINATOR IN 4 COPY IDCTM1,X LOAD VALUE IN X JMP *IHEX RETURN TITL 'IKB' SUBROUTINE ****************************** * * IKB - INPUT CHARACTER FROM CRT/TTY * * THIS SUBROUTINE WILL INPUT AN * ASCII CHARACTER FROM THE CRT/TTY * AND RETURN IT IN THE A REGISTER. * * CALLING SEQUENCE: * JST IKB * * CALLS: CALLED BY: * NONE TECH TEST *   QUERIES * IDEC * IHEX * ****************************** * IKB ENT INPUT TTY CHAR ROUTINE COPY X,IKBTMP SAVE XR ROTATE X,LO,16 SAVE OV COPY X,IKBTM2 COPY =:8618,A START ECHO,NO INTERRUPT OUT A,DTTYDA%1;1 OUTPUT START & MODES COPY =:100,X RESET CODE IN DTTYDA%1;1,A  INPUT STATUS SHIFT A,RO,4 WORD READY TO OV JF OV,$-2 IF WORD NOT READY IN DTTYDA%1,A GET WORD OUT X,DTTYDA%1;1 RESET TTY AND =:7F,A INPUT CHAR AS 7-BIT ASCII COPY IKBTM2,X RESTORE XR ROTATE X,LO,1 COPY IKBTMP,X RESTORE XR JMP *IKB * IKBTMP WORD 0 XR SAVE CELL IKBTM2 WORD 0 OV SAVE CELL * LPOOL TITL MSGA SUBROUTINE *********************************** * * MSGA - PRINT ASCII MESSAGE * * THIS SUBROUTINE WILL PRINT AN * ASCII MESSAGE TO THE CRT/TTY. * THE LAST CHARACTER OF THE MESSAGE * MUST BE :FF. * * * CALLING SEQUENCE: JST MSGA * WORD MESSAGE ADDRESS * * * CALLS: CALLED BY: * OTTY * * *********************************** * MSGA ENT COPY X,MSGA3 SAVE X-REG COPY *MSGA,X GET MSG ADDR SHIFT X,LO,1 IMS MSGA BUMP FOR RETURN MSGA1 SBIT 2,S COPYB 0(X),A GET A CHAR RBIT 2,S CLSN =:FF,A IS IT END OF MSG JMP MSGA2 YES EXIT JST OTTY PRINT A CHAR ADD =1,X BUMP PTR JMP MSGA1 GET NEXT CHAR MSGA2 COPY MSGA3,X RESTORE X-REG JMP *MSGA EXIT * MSGA3 WORD 0 SAVE X-REG CELL * LPOOL TITL ODEC-OUTPUT DECIMAL NUMBER SUBROUTINE *********************************** * * ODEC - PRINT DECIMAL NUMBER * * THIS SUBROUTINE WILL CONVERT THE * A-REG TO AN EQUIVALENT DECIMAL * NUMBER AND PRINT IT TO THE CRT/TTY *  IF IT IS LESS THAN 10000. IF IT IS * GREATER THAN 10000 IT WILL PRINT * '****'. * * ENTER WITH NUMBER IN THE A-REG * * CALLING SEQUENCE: COPY =NUMBER,A * JST ODEC * * CALLS: MSGA *  OTTY * ************************************ * ODEC ENT COPY X,ODECX SAVE X-REG COPY Y,ODECY SAVE Y-REG COPY A,IDCTM1 SAVE BINARY VALUE CSK A,ODECTBL+1 IS IT GREATER THAN 10,000? JMP ODECO NO, CONTINUE NOP JST MSGA YES, PRINT '****' WORD STARS  JMP ODEC2 EXIT ODECO COPY ODECTBL,A GET TABLE COPY A,IDCTM2 COPY =-5,A COUNT 5 DIGITS COPY A,IDCTM3 ODEC1 COPY IDCTM1,A GET REMINDER COPY IDCTM2,Y COPY ='0'-1,X SUB 0(Y),A DIVIDE IN DECIMAL ADD =1,X ADD TO OUTPUT VALUE JGE A,$-2 ADD 0(Y),A ADD BACK IN IF GONE NEGATIVE COPY A,IDCTM1 STORE REMINDER COPY X,A JST OTTY PRINT CALCULATED DIGIT IMS IDCTM2 BUMP TABLE POINTER IMS IDCTM3 AND COUNT JMP ODEC1 DO NEXT DIGIT ODEC2 COPY ODECX,X RESTORE X-REG COPY ODECY,Y RESTORE Y-REG JMP *ODEC EXIT AFTER 5 * ODECTBL WORD $+1,10000,1000,100,10,1 ODECX WORD 0 X-REG CELL ODECY WORD 0 Y-REG CELL * LPOOL TITL OTTY SUBROUTINE *********************************** * * OTTY - PRINT ASCII CHARACTER * * THIS SUBROUTINE WILL PRINT AN ASCII CHARACTER *  IN THE LS BYTE OF THE A REGISTER TO CRT/TTY * * * ENTER WITH CHARACTER IN LS BYTE OF THE A REGSITER * * *  CALLING SEQUENCE: COPY =CHARACTER,A * JST OTTY * * * CALLS: CALLED BY: * * ****  ******************************** * OTTY ENT COPY A,OTTMP1 SAVE AR COPY X,OTTMP2 SAVE XR COPY =:8612,X START, REQUEST TO SEND, DON'T INTERRUPT OUT X,DTTYDA%1;1 START PICO OUT A,DTTYDA%1 SEND WORD COPY =:100,X RESET CODE * NOP THIS IS FOR TIME DELAY BEFORE TRE (ACC NEEDS IT) * IN DTTYDA%1;1,A INPUT STATUS SHIFT A,RO,5 TREMPTY TO OV JF OV,$-2 IF STILL SET IN DTTYDA%1;1,A INPUT STATUS SHIFT A,RO,5 TREMPTY TO OV JF OV,$-2 IF STILL FULL OUT X,DTTYDA%1;1 RESET PICO COPY LPFLAG,A GET LP FLAG JEQ A,OTTY6 IF ZERO, EXIT OTTY1 JST TIMER SET TIME COPY OTTMP1,A RESTORE AR OUT A,DLPDA%1 START IT COPY =:8610,A LP START UP COMMAND OUT A,DLPDA%1;1 START IT OUT A,DLPDA%1;1 DITTO OTTY2 IN DLPDA%1;1,A INPUT STATUS SHIFT A,RO,1 SHIFT 'BUSY BIT' TO OV JF OV,OTTY5 IF NOT BUSY, EXIT JST TIME DO DELAY JMP OTTY2 LOOP BACK IF NOT DONE COPY OTTMP1,A GET ORIGINAL AR CONTENTS COPY A,OTTMP3 SAVE IT COPY LPFLAG,A GET LP FLAG COPY A,OTTMP4 SAVE IT COPY OTTMP2,A GET ORIGINAL XR CONTENTS COPY A,OTTMP5 SAVE IT COPY OTTY,A GET RETURN ADDRESS COPY A,OTTMP6 SAVE IT COPY =0,A SET NEW LP FLAG COPY A,LPFLAG STORE NEW LP FLAG COPY =LPMSG*2,X GET ERROR MESSAGE ADDRESS-'LP TIMEOUT' OTTY3 SBIT 2,S SET BYTE MODE COPYB 0(X),A GET CHAR RBIT 2,S SET WORD MODE CLSN A,=:FF IF END OF MESSAGE, EXIT JMP OTTY4 JST OTTY DISPLAY ON CRT/TTY ADD =1,X INC. MESSAGE ADDRESS JMP OTTY3 LOOP FOR MORE OTTY4 JST IKB INPUT CHAR FROM KEYBOARD COPY OTTMP6,A GET RETURN ADDR COPY A,OTTY SET IT COPY OTTMP4,A GET ORIGINAL LP FLAG COPY A,LPFLAG SET IT COPY OTTMP5,A GET ORIGINAL XR COPY A,OTTMP2 SET IT COPY OTTMP3,A GET ORIGINAL AR COPY A,OTTMP1 SET IT JMP OTTY1 OTTY5 COPY =:100,X GET LP RESET COMMAND OUT X,DLPDA%1;1 RESET LP SHIFT X,RO,1 WAST SOME TIME JNE X,$-1 DITTO OTTY6 COPY OTTMP1,A RESTORE AR COPY OTTMP2,X RESTORE XR JMP *OTTY RETURN TO CALLER * OTTMP1 WORD 0 AR SAVE CELL OTTMP2 WORD 0 XR SAVE CELL OTTMP3 WORD 0 SAVE AR OTTMP4 WORD 0 SAVE LP FLAG OTTMP5 WORD 0 SAVE XR OTTMP6 WORD 0 SAVE RETURN ADDRESS LPFLAG WORD 0 LP FLAG * LPOOL TITL TIME SUBROUTINE *********************************** * * TIME - TIME DELAY ROUTINE, TAKES * APPROXIMATELY 7 SECONDS IF * TIMING CELLS ARE INITIALIZED BY * 'TIMER'. * * CALLING SEQUENCE: JST TIME *  JMP ? TIME NOT FULLY EXPIRED R * JMP ? TIME FULLY EXPIRED R+1 * * CALLS:  CALLED BY: * NONE OTTY * *********************************** * TIME ENT IMS TC1 BUMP LSP TIMING CONSTANT JMP *TIME EXIT IMS TC2 BUMP MSP TIMING CONSTANT JMP *TIME EXIT TO CALL + 1 IMS TIME SPECIAL RETURN..EXPIRED JMP *TIME EXIT * TC1 RES 1,0 TC2 RES 1,0 * LPOOL TITL TIMER SUBROUTINE *********************************** * * TIMER - INITIALIZES TIMING CELLS * FOR 'TIME'. * * CALLING SEQUENCE: JST TIMER * * CALLS:  CALLED BY: * NONE OTTY * *********************************** * TIMER ENT COPY =0,A SET LOW WORD COPY A,TC1 COPY =-7,A SET HIGH WORD COPY A,TC2 JMP *TIMER EXIT * LPOOL TITL QUERIES ************************************ * * QUERY: DEVICE ADDRESS (01-1F[01])? * * SELECTION-:01 TO :1F * DEFAULT IS :01 * ***************  ********************* * DEVADRR ENT QURYDA1 EQU $ COPY =0,A COPY A,IPFLAG RESET INPUT FLAG COPY =8,A DEFAULT OF 1 SHIFTED LEFT 3 COPY A,DA SAVE IT JST MSGA OUTPUT QUERY WORD DEVMSG JST IHEX GET RESPONSE JEQ X,QURYDA3 IF ZERO, SEE WHY IMS IPFLAG SET INPUT FALG CSK X,=0 DO RANGE CHECK JMP QURYDA1 BAD INPUT (LESS THAN 0) CSK X,=:1F JMP $+2 WITHIN RANGE JMP QURYDA1 BAD INPUT (LARGER THAN :1F) SHIFT X,L,3 LINE IT UP COPY X,DA STORE INPUT QURY DA2,DA4,DA1,DA1,DA1,DA1 JMP QURYDA1 ANYTHING ELSE IS BAD QURYDA3 EQU $ COPY IDCTM3,A GET INPUT COUNT JEQ A,QURYDA2 IF ZERO, DEFAULT JMP QURYDA1 QURYDA4 EQU $ JMP *DEVADRR * LPOOL * TITL QUERIES ************************************ * * QUERY: SELECT MEMORY SIZE (1-:10 [4])? * * SELECTION-:01 TO :10 *  DEFAULT IS :04 * ************************************ * GETMEM ENT QURYM1 EQU $ COPY =0,A COPY A,IPFLAG RESET INPUT FLAG COPY =4,A DEFAULT IS 512KB SHIFT A,L,11 PUT IT IN THE HI-ORDER 5 BITS COPY A,MARKS SAVE IT JST MSGA  OUTPUT QUERY WORD MEMSZ JST IHEX GET RESPONSE JEQ X,QURYM3 IF ZERO, SEE WHY IMS IPFLAG SET INPUT FALG CSK X,=0 DO RANGE CHECK JMP QURYM1 BAD INPUT (LESS THAN 0) CSK X,=:10 JMP $+2 WITHIN RANGE JMP QURYM1 BAD INPUT (LARGER THAN :10) SHIFT X,L,11 LINE IT UP COPY X,MARKS STORE INPUT QURY M2,M4,M1,M1,M1,M1  JMP QURYM1 ANYTHING ELSE IS BAD QURYM3 EQU $ COPY IDCTM3,A GET INPUT COUNT JEQ A,QURYM2 IF ZERO, DEFAULT JMP QURYM1 QURYM4 EQU $ JMP *GETMEM * LPOOL * TITL QUERIES ************************************ * * QUERY: ERROR REPORT - DETAILED OR BRIEF (D,[B])? * * SELECTION - D OR B * DEFAULT IS B * ************************************ * EREPORT ENT QURYE1 EQU $ COPY =0,A COPY A,IPFLAG RESET INPUT FLAG COPY =:B,A DEFAULT IS BRIEF COPY A,EFLAG SAVE IT JST MSGA OUTPUT QUERY WORD RPTMSG JST IHEX GET RESPONSE JEQ X,QURYE5 IF ZERO, SEE WHY IMS IPFLAG SET INPUT FLAG CSK X,=:B JMP QURYE1 < JMP QURYE2 > JMP QURYE3 = QURYE2 EQU $ CSK X,=:D NOP JMP QURYE1 BAD INPUT QURYE3 EQU $ COPY X,EFLAG QURY E4,E6,E1,E1,E1,E1 JMP QURYE1 ANYTHING ELSE IS BAD QURYE5 EQU $ COPY IDCTM3,A GET INPUT COUNT JEQ A,QURYE4 IF ZERO, DEFAULT JMP QURYE1 QURYE6 EQU $ JMP *EREPORT * LPOOL * TITL QUERY MESSAGES ***************************************** * * QUERY MESSAGES * ***************************************** * OPTIONS +:0020 FIRSTONLY TITLE EQU $ BYTE :0C,CR:,LF:,' 53988 DIAGNOSTIC - B000',CR:,LF:,CR:,LF: BYTE CR:,LF: BYTE ' THE CONTENTS HEREOF ARE PROPRIETARY TO COMPUTER AUTOMATION, INC.' BYTE CR:,LF:,' AND SHALL NOT BE REPRODUCED OR USED WITHOUT CA"S PRIOR' BYTE CR:,LF:,' WRITTEN CONSENT.',CR:,LF: BYTE CR:,LF:,'(C) COMPUTER AUTOMATION INC., 1986.' BYTE CR:,LF:,:FF * DEVMSG BYTE CR:,LF:,'DEVICE ADDRESS (:01-:1F[:01])?',:FF * MEMSZ BYTE CR:,LF:,' 1 - 128KB 9 - 1152KB' BYTE CR:,LF:,' 2 - 256KB :A - 1280KB' BYTE CR:,LF:,' 3 - 374KB :B - 1408KB' BYTE CR:,LF:,' 4 - 512KB :C -  1536KB' BYTE CR:,LF:,' 5 - 640KB :D - 1664KB' BYTE CR:,LF:,' 6 - 768KB :E - 1792KB' BYTE CR:,LF:,' 7 - 896KB :F - 1920KB' BYTE CR:,LF:,' 8 - 1024KB :10 - 2048KB' BYTE CR:,LF:,'SELECT MEMORY SIZE 1-:10 [4] :',:FF * RPTMSG EQU $ BYTE CR:,LF:,'ERROR REPORTS - DETAILED OR BRIEF (D,[B])?',:FF * PASSMSG EQU $ BYTE CR:,LF:,' PASS ',:FF * MES10 BYTE CR:,LF:,' TEST A ...',:FF * MES20 BYTE ' PASSED',CR:,:FF * MES30 BYTE ' FAILED',CR:,:FF * MES40 BYTE CR:,LF:,' TEST B ...',:FF * MES50 BYTE CR:,LF:,' TEST C ...',:FF * TITL ERROR MESSAGES ************************************************************ * * ERROR MESSAGES * ************************************************************ * STARS BYTE '****',:FF * BADDA BYTE 'ERROR * - NO 53988 INSTALLED AT THAT ADDRESS',CR:,LF:,:FF * LPMSG BYTE CR:,LF:,'LINE PRINTER TIMED OUT!!!' BYTE CR:,LF:,'GET PRINTER READY...' BYTE CR:,LF:,'KEY IN ANY CHAR TO RESUME...',CR:,LF:,:FF * MSG5 EQU $ BYTE CR:,LF:,'READ ERROR * - PPAGE :' MSG5A RES 2,0 BYTE ' EXPECTED :' MSG5B RES 2 BYTE ' ACTUAL :' MSG5C RES 2 BYTE :FF * MSG10 EQU $ BYTE CR:,LF:,' UNIMPLEMENTED INSTRUCTION TRAP AT LOCATION :' MSG10A RES 2,0 BYTE :FF * MSG20 EQU $ BYTE CR:,LF:,' POWER FAIL',:FF * MSG30 EQU $ BYTE CR:,LF:,' ARITHMETIC EXCEPTION AT LOCATION :' MSG30A RES 2,0 BYTE :FF * MSG40 EQU $ BYTE CR:,LF:,' MEMORY EXCEPTION OR PARITY ERROR AT LOCATION :' MSG40A RES 2,0 BYTE :FF * MSG50 EQU $ BYTE CR:,LF:,'READ ERROR - MAP ' MSG50A RES 2,0  BYTE ' LPAGE' MSG50C RES 2,0 BYTE ' PPAGE' MSG50B RES 2,0 BYTE ' EXP' MSG50D RES 2,0 BYTE '  ACT' MSG50E RES 2,0 BYTE :FF * MSG60 EQU $ BYTE CR:,LF:,'READ ERROR * - ' MSG60A RES 2,0 BYTE ' EXPECTED :' MSG60B RES 2 BYTE ' ACTUAL :' BYTE :FF * OPTIONS -:0020 TURN FIRSTONLY OFF * TITL INTERRUPT/TRAP SERVICE ROUTINES ********************************************************* * * TRAP SERVICE ROUTINES * ********************************************************* * * POWER FAIL * PWRFL EQU $ JST MSGA "POWER FAIL" WORD MSG20 HLT JMP  $-1 * * UNIMPLEMENTED INSTRUCTION * UNIMP EQU $ COPY :84,A GET THE P-REG SUB =1,A JST CONVWRD CONVERT IT TO ASCII WORD MSG10A JST MSGA "UNIMPLEMENTED INSTRUCTION AT LOCATION :XXXX" WORD MSG10 HLT JMP $-1 * * ARITHMETIC EXCEPTION * ARITH EQU $ COPY :A8,A GET THE P-REG JST CONVWRD CONVERT IT TO ASCII WORD MSG30A JST MSGA "ARITHMETIC EXCEPTION AT LOCATION :XXXX" WORD MSG30 HLT JMP $-1 * * MEMORY EXCEPTION * MEMEXC EQU $ COPY :88,A GET THE P-REG SUB =1,A JST CONVWRD CONVERT IT TO ASCII WORD MSG40A JST MSGA "MEMORY EXCEPTION AT LOCATION :XXXX" WORD MSG40  HLT JMP $-1 TITL INTERRUPT SERVICE ROUTINES *************************************************************** * * INTERRUPT SERVICE ROUTINES * *************************************************************** * * CONSOLE INTERRUPT * CINT EQU $  RBIT 8,S DISABLE CONSOLE INT'S DURING THIS ROUTINE COPY =0,A JNED A,$-1 WASTE SOME TIME IN CASE OF SWITCH BOUNCE OUT  A,1 CLEAR THE INTERRUPT SBIT 8,S RE-ENABLE CONSOLE INT'S JMP INIT RESTART THE PROGRAM * TITL CONSTANTS **************************************** * * FUNCTION CODES - USED IN THE SELP & OUT COMMANDS * COMMENTS APPLY ONLY TO THE SELP * **************************************** * FC0 EQU 0 FUNCTION CODE 0 - ENABLING/DISABLING PARITY FC1 EQU 1 FUNCTION CODE 1 - ENABLING/DISABLING MAPPING FC2 EQU 2 FUNCTION CODE 2 FC3 EQU 3 FUNCTION CODE 3 FC4 EQU 4  FUNCTION CODE 4 - SENDING DATA TO THE CDR * **************************************** * * EQUATES * **************************************** * CR: EQU :0D LF: EQU :0A BY: EQU :02 BCKAR: EQU :5F UPARR: EQU :5E DTTYDA EQU :7C DLPDA EQU :7F * TITL WORKING STORAGE **************************************** * * WORKING STORAGE * **************************************** * TOPOFPGM WORD 0 UPPER 8KB-BOUNDRY OF RELOCATABLE CODE MAXPPG WORD 0 MAXIMUM PHYSICAL-PAGE # IN SYSTEM DA WORD 0 MARKS WORD 0 MEM-SIZE IN HI-ORDER 5 BITS, DEV AD IN 5 LOW-BITS ENMAP WORD 0 PGCNTR WORD 0 TYP0L WORD 0 COUNT WORD 0 COUNTER FOR LOAD-TABLE ROUTINE PCOUNT WORD 0 PAGE COUNTER FOR PAGE-TESTING RTN PASSCNT WORD 0 PASS COUNTER TEMP WORD 0 TEMP CELL TEMP1 WORD 0 TEMP2 WORD 0 TEMP CELL #2 TEMP3 WORD 0  TEMP CELL #3 EFLAG WORD 0 FLAG FOR DETAILED OR BRIEF ERROR REPORTS PFFLAG WORD 0 " SAVEX WORD 0 SAVEA WORD 0 SAVEQ WORD 0 FWORD WORD :FFFF USED IN PAGE-TESTING RTN IPFLAG WORD 0 TEMP CELL USED IN THE QUERIES IDCTM3  WORD 0 COUNTER, USED IN THE QUERIES IDCTM2 WORD 0 IDCTM1 WORD 0 TABLE RES 16,0 * LSTCODE EQU $ END  CR:,LF:,' WRITTEN CONSENT.',CR:,LF: 0639 0D0A 1781 BYTE CR:,LF:,'(C) COMPUTER AUTOMATION INC., 1986.' 064C 0D0A 1782 BYTE CR:,LF:,:FF 1783 * 064E 0D0A 1784 DEVMSG BYTE CR:,LF:,'DEVICE ADDRESS (:01-:1F[:01])?',:FF 1785 * 065F 0D0A 1786 MEMSZ BYTE CR:,LF:,' 1 - 128KB 9 - 1152KB' 066F 0D0A 1787 BYTE CR:,LF:,' 2 - 256KB :A - 1280KB' 067F 0D0A 1788  BYTE CR:,LF:,' 3 - 374KB :B - 1408KB' 068F 0D0A 1789 BYTE CR:,LF:,' 4 - 512KB :C - 1536KB' 069F 0D0A 1790 BYTE CR:,LF:,' 5 - 640KB :D - 1664KB' 06AF 0D0A 1791 BYTE CR:,LF:,' 6 - 768KB :E - 1792KB' 06BF 0D0A 1792 BYTE CR:,LF:,' 7 - 896KB :F - 1920KB'  06CF 0D0A 1793 BYTE CR:,LF:,' 8 - 1024KB :10 - 2048KB' 06DF 0D0A 1794 BYTE CR:,LF:,'SELECT MEMORY SIZE 1-:10 [4] :',:FF 1795 * 000006F0 1796 RPTMSG EQU $ 06F0 0D0A  1797 BYTE CR:,LF:,'ERROR REPORTS - DETAILED OR BRIEF (D,[B])?',:FF 1798 * 00000707 1799 PASSMSG EQU $ 0707 0D0A 1800 BYTE CR:,LF:,' PASS ',:FF 1801 * 070C 0D0A  1802 MES10 BYTE CR:,LF:,' TEST A ...',:FF 1803 * 0714 2050 1804 MES20 BYTE ' PAS SED',CR:,:FF 1805 * 0719 2046 1806 MES30 BYTE ' FAILED',CR:,:FF 1807 * 071E 0D0A 1808 MES40 BYTE CR:,LF:,' TEST B ...',:FF 1809 * 0726 0D0A 1810 MES50 BYTE CR:,LF:,' TEST C ...',:FF 1811 * 1PAGE 0050 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:23:08 ERROR MESSAGES 1813 ************************************************************ 1814 * 1815 * ERROR MESSAGES 1816 *  1817 ************************************************************ 1818 * 072E 2A2A 1819 STARS BYTE '****',:FF 1820 * 0731 4552 1821 BADDA BYTE 'ERROR * - NO 53988 INSTALLED AT THAT ADDRESS',CR:,LF:,:FF 1822 * 0749 0D0A 1823 LPMSG BYTE CR:,LF:,'LINE PRINTER TIMED OUT!!!' 0757 0D0A 1824 BYTE CR:,LF:,'GET PRINTER READY...' 0762 0D0A 1825 BYTE CR:,LF:,'KEY IN ANY CHAR TO RESUME...',CR:,LF:,:FF 1826 * 00000773 1827 MSG5 EQU $ 0773 0D0A  1828 BYTE CR:,LF:,'READ ERROR * - PPAGE :' 077F 0000 1829 MSG5A RES 2,0 0781 2020 1830 BYTE ' EXPECTED :' 0788 1831 MSG5B RES 2 078A 2020 1832 BYTE '  ACTUAL :' 0790 1833 MSG5C RES 2 0792 FF20 1834 BYTE :FF 1835 *  00000793 1836 MSG10 EQU $ 0793 0D0A 1837 BYTE CR:,LF:,' UNIMPLEMENTED INSTRUCTION TRAP AT LOCATION :' 07AB 0000 1838 MSG10A RES 2,0 07AD FF20 1839 BYTE :FF 1840 * 000007AE 1841 MSG20 EQU $ 07AE 0D0A 1842 BYTE CR:,LF:,' POWER FAIL',:FF  1843 * 000007B6 1844 MSG30 EQU $ 07B6 0D0A 1845 BYTE CR:,LF:,' ARITHMETIC EXCEPTION AT LOCATION :' 07C9 0000 1846 MSG30A RES 2,0 07CB FF20 1847 BYTE :FF  1848 * 000007CC 1849 MSG40 EQU $ 07CC 0D0A 1850 BYTE CR:,LF:,' MEMORY EXCEPTION OR PARITY ERROR AT LOCATION :' 07E5 0000 1851 MSG40A RES 2,0 07E7 FF20 1852 BYTE :FF  1853 * 000007E8 1854 MSG50 EQU $ 07E8 0D0A 1855 BYTE CR:,LF:,'READ ERROR - MAP ' 07F2 0000 1856 MSG50A RES 2,0 07F4 2020 1857 BYTE ' LPAGE' 07F9 0000 1858 MSG50C RES 2,0 07FB 2020 1859 BYTE ' PPAGE' 0800 0000 1860 MSG50B RES 2,0 0802 2020 1861 BYTE ' EXP' 0806 0000 1862 MSG50D RES 2,0 0808 2020 1863 BYTE ' ACT' 080C 0000 1864 MSG50E RES 2,0 080E FF20 1865 BYTE :FF 1866 * 0000080F 1867 MSG60 EQU $ 1PAGE 0051 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93 988-10 B000 1986/03/17 08:23:10 ERROR MESSAGES 080F 0D0A 1868 BYTE CR:,LF:,'READ ERROR * - ' 0818 0000 1869 MSG60A RES 2,0 081A 2020 1870 BYTE ' EXPECTED :' 0821 1871 MSG60B RES 2 0823 2020 1872 BYTE ' ACTUAL :' 0829 FF20 1873 BYTE :FF  1874 * 18EB 18CB 1875 OPTIONS -:0020 TURN FIRSTONLY OFF 1876 * 1PAGE 0052 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:23:10 INTERRUPT/TRAP SERVICE ROUTINES 1878 ********************************************************* 1879 *  1880 * TRAP SERVICE ROUTINES 1881 * 1882 ********************************************************* 1883 * 1884 * POWER FAIL 1885 *  0000082A 1886 PWRFL EQU $ 082A BFC8 0873 1887 JST MSGA "POWER FAIL" 082B 07AE 1888 WORD MSG20 082C 0E0D 1889 HLT 082D 9E7E 082C 1890 JMP $-1 1891 * 1892 * UNIMPLEMENTED INSTRUCTION 1893 * 0000082E 1894 UNIMP EQU $ 082E 83C5 0874 1895 COPY :84,A GET THE P-REG 082F 0AFF 1896  SUB =1,A 0830 BFC4 0875 1897 JST CONVWRD CONVERT IT TO ASCII 0831 07AB 1898 WORD MSG10A 0832 BFC0 0873 1899 JST MSGA "UNIMPLEMENTED INSTRUCTION AT LOCATION :XXXX" 0833 0793  1900 WORD MSG10 0834 0E0D 1901 HLT 0835 9E7E 0834 1902 JMP  $-1 1903 * 1904 * ARITHMETIC EXCEPTION 1905 * 00000836  1906 ARITH EQU $ 0836 83BF 0876 1907 COPY :A8,A GET THE P-REG 0837 BFBD 0875 1908  JST CONVWRD CONVERT IT TO ASCII 0838 07C9 1909 WORD MSG30A 0839 BFB9 0873 1910  JST MSGA "ARITHMETIC EXCEPTION AT LOCATION :XXXX" 083A 07B6 1911 WORD MSG30 083B 0E0D 1912 HLT 083C 9E7E 083B 1913 JMP $-1 1914 *  1915 * MEMORY EXCEPTION 1916 * 0000083D 1917 MEMEXC EQU $ 083D 83B9 0877 1918 COPY :88,A GET THE P-REG 083E 0AFF 1919 SUB =1,A 083F BFB5 0875 1920  JST CONVWRD CONVERT IT TO ASCII 0840 07E5 1921 WORD MSG40A 0841 BFB1 0873 1922  JST MSGA "MEMORY EXCEPTION AT LOCATION :XXXX" 0842 07CC 1923 WORD MSG40 0843 0E0D 1924 HLT 0844 9E7E 0843 1925 JMP $-1 1PAGE 0053 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:23:11 INTERRUPT SERVICE ROUTINES 1927  *************************************************************** 1928 * 1929 * INTERRUPT SERVICE ROUTINES 1930 * 1931 *************************************************************** 1932 * 1933 * CONSOLE INTERRUPT 1934 * 00000845 1935  CINT EQU $ 0845 0E87 1936 RBIT 8,S DISABLE CONSOLE INT'S DURING THIS ROUTINE 0846 0900 1937 COPY =0,A 0847 15BE 0846 1938 JNED A,$-1 WASTE SOME TIME IN CASE OF SWITCH BOUNCE 0848 0201 1939 OUT A,1 CLEAR THE INTERRUPT 0849 0E85 1940 SBIT 8,S RE-ENABLE CONSOLE INT'S 084A 9FAD 0878 1941 JMP INIT RESTART THE PROGRAM  1942 * 1PAGE 0054 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:23:12 CONSTANTS 1944 **************************************** 1945 * 1946 * FUNCTION CODES - USED IN THE SELP & OUT COMMANDS 1947 * COMMENTS APPLY ONLY TO THE SELP 1948 * 1949 **************************************** 1950 * 00000000 1951 FC0 EQU 0 FUNCTION CODE 0 - ENABLING/DISABLING PARITY 00000001 1952 FC1 EQU  1 FUNCTION CODE 1 - ENABLING/DISABLING MAPPING 00000002 1953 FC2 EQU 2 FUNCTION CODE 2 00000003 1954 FC3 EQU 3 FUNCTION CODE 3 00000004 1955 FC4 EQU 4  FUNCTION CODE 4 - SENDING DATA TO THE CDR 1956 * 1957 **************************************** 1958 * 1959 * EQUATES 1960 * 1961 **************************************** 1962 * 0000000D 1963 CR: EQU :0D 0000000A  1964 LF: EQU :0A 00000002 1965 BY: EQU :02 0000005F 1966 BCKAR: EQU :5F  0000005E 1967 UPARR: EQU :5E 0000007C 1968 DTTYDA EQU :7C 0000007F 1969 DLPDA EQU :7F 1970 * 1PAGE 0055 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:23:13 WORKING STORAGE 1972 **************************************** 1973 * 1974 * WORKING STORAGE 1975 * 1976 **************************************** 1977 * 084B 0000 1978 TOPOFPGM WORD 0 UPPER 8KB-BOUNDRY OF RELOCATABLE CODE 084C 0000 1979 MAXPPG WORD 0 MAXIMUM PHYSICAL-PAGE # IN SYSTEM 084D 0000 1980 DA WORD 0 084E 0000 1981 MARKS WORD 0 MEM-SIZE IN HI-ORDER 5 BITS, DEV AD IN 5 LOW-BITS 084F 0000  1982 ENMAP WORD 0 0850 0000 1983 PGCNTR WORD 0 0851 0000 1984 TYP0L WORD 0 0852 00 00 1985 COUNT WORD 0 COUNTER FOR LOAD-TABLE ROUTINE 0853 0000 1986 PCOUNT WORD 0  PAGE COUNTER FOR PAGE-TESTING RTN 0854 0000 1987 PASSCNT WORD 0 PASS COUNTER 0855 0000 1988 TEMP WORD 0 TEMP CELL 0856 0000 1989 TEMP1 WORD 0 0857 0000 1990 TEMP2 WORD 0 TEMP CELL #2 0858 0000 1991 TEMP3 WORD 0 TEMP CELL #3 0859 0000 1992 EFLAG WORD 0 FLAG FOR DETAILED OR BRIEF ERROR REPORTS 085A 0000 1993 PFFLAG WORD 0 "  085B 0000 1994 SAVEX WORD 0 085C 0000 1995 SAVEA WORD 0 085D 0000 1996 SAVEQ WORD  0 085E FFFF 1997 FWORD WORD :FFFF USED IN PAGE-TESTING RTN 085F 0000 1998 IPFLAG WORD 0 TEMP CELL USED IN THE QUERIES 0860 0000 1999 IDCTM3 WORD 0 COUNTER, USED IN THE QUERIES  0861 0000 2000 IDCTM2 WORD 0 0862 0000 2001 IDCTM1 WORD 0 0863 0000 2002 TABLE RES  16,0 2003 * 00000873 2004 LSTCODE EQU $ 0873 04ED MSGA 0874 0084  0875 04A3 CONVWRD 0876 00A8 0877 0088 0878 0200 INIT 2005  END 0000 ERRORS (0000/0000) 0001 WARNINGS (0043/1560) EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII1PAGE 1 MULTI-TASKING LINKER (G9,G4,G3) 1986 Feb 07 17:15:27.25 FILE USAGE SUMMARY DK20/DIAG:988.BIN=DK20/DIAG:988.OBJ+ DK20/DEBUGS.OBJ(ABSOLUTE=0) NOTE: *** DEBUGS.OBJ - REV E800 *** 1PAGE 2 MULTI-TASKING LINKER (G9,G4,G3,G6,G5,G7,--,E7,G1,--,G0,E4) 1986 Feb 07 17:15:39.50 ALL SYMBOLS THE TRANSFER ADDRESS IS 0879(DEBUG:)  MEMORY ABSOLUTE 0000-R:LOW 104C-R:HIGH SEGMENT BLANK (0000 - 0878) ABSOLUTE - RAM, SHAREABLE SEGMENT DEBUG: (0879 - 104C) ABSOLUTE - RAM, SHAREABLE 0879-DEBUG4 0D4D-DBG4:CNT 0D5F-DBG4:LP MISSING: SRF:ER NO WARNINGS IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIDE DIAG:988.MAP CR DIAG:988.MAP AS LO=DIAG:988.MAP LINK DIAG:988.OBJ+SD/OS4/DEBUGS.OBJ(AB=0) AS LO=UC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII  IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII! IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII. DIAG:988 ASMDIAG:988 LSTDIAG:988 MAP LINK JCLDIAG:988 EDT?e860319141028860319141028860319141830e@860319141028860319141028860319141028" e860319141028860319141028860319141028e860319141028860319141028860319141028860319141028860319141028860319141028ea860319141355860317082115860319141416ee860319141459860317082315860319142002e860319141628860207171542860319141630 e# j860319141731860109155629860319141732 e86031914184775860319141847$ % & ' ( ) * + ?1PAGE 0001 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:22:16 DESCRIPTION SI = DK20.DIAG:988.ASM SO = DK20.DIAG:988.OBJ LO = DK20.DIAG:988.LST 0003 ******************************************************************** 0004 * 0005 * REVISION HISTORY  0006 * 0007 * A000 24/JUN/85 D.AGAHI ORIGINAL RELEASE 0008 *  0009 * A100 13/JAN/86 M.HAYES FIXED DOCUMENTATION ERRORS 0010 * 0011 * B000 31/JAN/86 M.HAYES COMPLETE RE-WRITE. 0012 * 0013 ********************************************************************* 0014 * 0015 * This diagnostic tests the 53988 (64K DRAMs) and the 55005 0016 * (256K DRAMs) mapped memory boards. 0017 *  0018 * As of Revision B000 there are 3 tests: 0019 * 0020 * TEST A - Check Mapping. 0021 * 0022 * This test verifies that the board is actually doing the mapping.  0023 * It writes a unique number in the last word of every physical 0024 * page and then tries to read it back. 0025 * First it configures MAP0 to use the 1st 128KB and writes a unique ,  0026 * number to all the pages not occupied by the diagnostic. It then 0027 * reconfigures MAP0 to use the next chunk of memory and continues 0028 * writting until it has used all memory. It then goes back to the 0029 * 1st 128KB and tries to read all the numbers. 0030 *  0031 * TEST B - Write/Read Test. 0032 * 0033 * This test is similar to Test 1 in that it configures MAP0 to 0034 * ultimately use all of the memory. Each time it reconfigures, it 0035 * will write all ones to the address space un-occupied by the 0036 * diagnostic and then reads them. It then writes incrementing 0037 * addresses and reads them back, and then it writes & reads all 0038 * zeros. 0039 * 0040 * TEST C - 2nd Mapping Test. 0041 * 0042 * This test will write incrementing addresses to the 1st 128KB of 0043 * memory. It then configures all 4 maps to use the just the 1st 0044 *  free page beyond the diagnostic. As a result, all the logical 0045 * pages of all the maps should have the same addresses in them. 0046 * This test will check to make sure that's the case. 1PAGE 0002 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:22:17 JUMPER SETTINGS  0048 ****************************************************************** 0049 * 0050 * JUMPER SETTINGS FOR THE 53988 BOARD. 0051 * 0052 ****************************************************************** 0053 * 0054 * Board Level -00 -01  -02 -03 0055 * ------------------------------------------------------------- 0056 * 0057 * Memory Size in E11-E12 E11-E12 E10-E11 E10-E11 0058 * the system. E7-E8 E7-E8 E8-E9 E7-E8 0059 * Maxi-bus address E4-E5 E4-E5 E4-E5 E5-E6 0060 * 0061 * Map Enable E2-E3 E1-E2 E1-E2 E1-E2  0062 * 0063 * Enable Clock E16-E18 E16-E18 E16-E18 E16-E18  0064 * Crystal E13-E15 E13-E15 E13-E15 E13-E15 0065 * E19-E20 E19-E20 E19-E20 E19-E20 0066 * 0067 * Ras/Cas (Bit 16) E22-E23 E22-E23  E21-E22 E21-E22 0068 * Generation (Bit 17) E25-E26 E25-E26 E25-E26 E24-E25 0069 * 1PAGE 0003 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:22:18 JUMPER SETTINGS 0071 * 0072 * 0073 * The following table shows h- ow the memory-size and device address 0074 * are stored in the program. 0075 *  0076 * 15 0 0077 * / Memory Size \  / Device Address\ 0078 * _________________________________________________ 0079 * |  | | | | | 0| 0| 0| 0| 0| | | | | | | 0080 * -------------------------------------------------  0081 * 0 0 0 0 1 128KB 0082 * 0 0 0 1 0 256KB 0083 * 0 0 0 1 1 374KB 0084 * 0 0 1 0 0 512KB 0085 * 0 0 1 0 1  640KB 0086 * 0 0 1 1 0 768KB 0087 * 0 0 1 1 1 896KB  0088 * 0 1 0 0 0 1024KB or 1MB 0089 * . . 0090 *  . . 0091 * . . 0092 * 1 0 0 0 0 2048KB or 2MB  0093 * 0094 * This allows virtually any 128KB boundry to be accomodated.  0095 * The program also assumes that all memory installed has the 0096 * same device address.  0097 * 0098 * The device address is set using block-1 on the board. In 0099  * order to set the address to 1, turn on switch 2 (SW1-2). 0100 * 0101 * Examples using the dash -00 thru -06 boards on Dev Addr = 1 : 0102 * 0103 * -00 :0101 (128kB memory without mapping, uses 64k DRAM chips) 0104 * -01 :0801 (128kB memory, uses 64k DRAM chips)  0105 * -02 :1001 (256kB memory, uses 64k DRAM chips) 0106 * -03 :2001 (512kB memory, uses 64k DRAM chips) 0107 * 1PAGE 0004 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:22:19 NOTES 0109 * 0110 * NOTE: The 53988/55005 has 64 control registers, which are divided 0111 * into 4 maps. A map is just a collection of 16 control registers.  0112 * Map 0 uses the 1st 16, map 1 uses the next 16, and so on. Each 0113 * register in the map contains an entry which maps an 8KB-page 0114 * of logical memory into an 8KB-page of physical memory. 0115 * The term map may also refer to the actual 128KB of physical 0116 * memory that is associated with a logical address space. 0117 * 0118 * On power-up, none of the maps are enabled. The system defaults 0119 * to use the 1st 128KB of physical memory. In order to use a map, 0120 * its control registers must be configured. It takes 16 OUT 0121 *  instructions to completely configure a map. The map must then be 0122 * enabled using the SELP instruc. tion. 0123 * 0124 * 0125 * Only one Map can be enabled  0126 * at any given time. A map is disabled by either enabling another 0127 * map or by using no maps, i.e., defaulting to the 1st 128KB. 0128 * In order to default, bit 0 of the data field is off and a SELP 0129 * is sent with a function code = 1. 0130 * 1PAGE 0005 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:22:20 SELP'S AND OUT'S 0132 * 0133 * SELP A,0 (PARITY) 0134 * 0135 * BIT 0 IN A: 1=ENABLE 0136 * 0=DISABLE 0137 * 0138 *  SELP A,1 (ENABLE MAPPING) 0139 * 0140 * BIT 0 IN A: 1=ENABLE THE SELECTED MAP 0141 * 0=DISABLE MAPPING 0142 * BITS 1-2 : SELECT THE MAP TO BE ENABLED 0143 * 0144 * OUT A,FC (MAP CONFIGURATION)  0145 * 0146 * A HAS CONTROL-REGISTER VALUE 0147 * FC=0 FOR MAP 0 0148 * FC=1 FOR MAP 1 0149 * FC=2 FOR MAP 2  0150 * FC=3 FOR MAP 3 0151 * 1PAGE 0006 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:22:21 TRAPS 0153 *************************************************************** 0154 * 0155 * TRAPS 0156 *  0157 *************************************************************** 0158 * 0159 * POWER UP 0160 * 0080 0001 0161 REL :80 0080 9F80 0081 0162 JMP  *$+1 0081 0001 0163 WORD DEBUG4 0164 * 0165 * UNIMPLEMENTED INSTRUCTION 0166 * 0084 0001 0167 REL :84 0084 0000 0168 WORD 0  P-REG + 1 0085 0000 0169 WORD 0 BAD INSTRUCTION 0086 9F80 0087 0170 JMP *$+1 0087 082E 0171 WORD UNIMP 0172 * 0173 * MEMORY EXCEPTION 0174 * 0088 0001 0175 REL :88 0088 0000 0176 WORD  0 P-REG + 1 0089 0000 0177 WORD 0 FAILING INSTRUCTION 008A 9F80 008B 0178  JMP *$+1 008B 083D 0179 WORD MEMEXC 0180 * 0181  * POWER FAIL 0182 * 008C 0001 0183 REL :8C 008C 0000 0184 WORD  0 P-REG 008D 0000 0185 WORD 0 CURRENT INSTRUCTION 008E 9F80 008F 0186 /  JMP *$+1 008F 082A 0187 WORD PWRFL 0188 * 0189 * ARITHMETIC EXCEPTION 0190 * 00A8 0001 0191 REL :A8 00A8 0000 0192  WORD 0 P-REG 00A9 0000 0193 WORD 0 BAD INSTRUCTION 00AA 9F80 00AB 0194  JMP *$+1 00AB 0836 0195 WORD ARITH 0196 * 1PAGE 0007 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:22:21 INTERRUPTS 0198 *************************************************** 0199 * 0200 * INTERRUPTS  0201 * 0202 *************************************************** 0203 *  0204 * CONSOLE INTERRUPT 0205 * 0094 0001 0206 REL :94 0094 9F80 0095 0207 JMP *$+1 0095 0845 0208 WORD CINT 0209 * 0000 0210  LPOOL 1PAGE 0008 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:22:22 SCRATCH PAD 0212 * 0213 * From DEBUG, you can jump to location :100. Upon returning 0214 * to DEBUG, Q will point to the first location beyond the 0215 * diagnostic and A will point to the last location in DEBUG. 0216 * 0100 0001 0217 REL  :100 0100 9F94 0115 0218 JMP DEBUG4 0101 8294 0116 0219 COPY =R:HIGH,A 0102 0B01 0220 ADD =1,A 0103 C293 0117 0221 COPY =LSTCODE,Q 0104 9F90 0115 0222 JMP DEBUG4  0223 * 0224 * Can't say as I know what this is for. 0225 * 0110 0001 0226 REL :110 0110 8387 0118 0227 COPY DA,A 0111 4900 0228 COPY =0,Q 0112 030A 0229 XNX A 0113 4400 0230 SELP Q,0 0114 9F80 0115 0231 JMP DEBUG4 0004 0232 LPOOL 0115 0001 DEBUG4 0116 0000 R:HIGH 0117 0873 LSTCODE 0118 084D DA 0233 * 1PAGE 0009 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:22:22 MACRO QURY 0235 ********************************** 0236 * 0237 * 0238 * MACRO QURY - THIS MACRO REPLACE THE  0239 * REDUNDANT CODES DURING 0240 * QUARIES. 0241 * 0242 * 0243 *********************************** 0244 *  0245 MACRO QURY 0246 QURY#1 EQU $ 0247 JST CHRIN CHECK TERMINATOR 0248 JMP QURY#2 CARRIAGE RETURN 0249 0  JMP QURY#3 POUND SIGN 0250 JMP QURY#4 BACK ARROW 0251  JMP QURY#5 UPARROW 0252 JMP QURY#6 COMMA 0253  IFT 6<#7 ANYTHING ELSE 0254 ENDC 0255 ENDM  0256 * 1PAGE 0010 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:22:23 INITIALIZATION 0258 EXTR R:HIGH 0259 EXTR DEBUG4 0260 SHARABLE BLANK 0004 0010 0261 MACHINE =:10 18C3 18CB  0262 OPTIONS +:0008 EXPANDMACROS 0200 0001 0263 REL :200 00000200 0264 INIT  EQU $ 0265 * 0266 * Entry point 0267 * 0200 0050 0268 COPY L,A INIT THE STACK 0201 0B20 0269 ADD =:20,A 0202 7000 0270  COPY A,K 0271 * 0203 0E85 0272 SBIT 8,S GLOBAL INTERRUPT-ENABLE 0204 0E45 0273 SBIT 4,S ENABLE CONSOLE INTERRUPTS 0274 * 0205 BF93 0219 0275  JST MSGA PRINT THE TITLE 0206 05DD 0276 WORD TITLE 0207 BF92 021A 0277 JST CRLF 0278 * 00000208 0279 INIT1 EQU $ 0208 BF92 021B 0280 JST DEVADRR GET THE DEVICE ADDRESS 0209 8392 021C 0281 COPY DA,A GET DEV ADDR OF MEMORY BOARD 020A 030A 0282 XNX A 020B 4100 0283 IN 0,Q 020C CE90 021D 0284 SUB =:200,Q GET THE TYPE OF MEMORY & SEE IF IT'S A 53988 020D 5143 0211 0285 JEQ Q,INIT2 YES  020E BF8A 0219 0286 JST MSGA "NO 53988 INSTALLED AT THAT ADDRESS" 020F 0731 0287  WORD BADDA 0210 9E77 0208 0288 JMP INIT1 0289 * 00000211 0290 INIT2 EQU $ 0211 BF8C 021E 0291 JST GETMEM GET THE MEMORY SIZE 0212 838C 021F 0292 COPY MARKS,A GET THE PARAMETER WORD 0213 C388 021C 0293 COPY DA,Q GET THE DEVICE ADDRESS 0214 4E28  0294 SHIFT Q,R,3 SHIFT IT BACK B4 PUTTING IN THE PARAMETER WORD 0215 0047 0295 OR  Q,A SIZE IN BITS 11-15, DEV ADDR IN BITS 0-5 0216 8788 021F 0296 COPY A,MARKS SAVE THEM 0217 BF88 0220 0297 JST EREPORT DETAILED OR BRIEF ERROR MSG'S 0218 9E89 0222 0298 JMP INIT3 CONTINUE 0009 0299 LPOOL 0219 04ED MSGA 021A 04B1 CRLF  021B 057F DEVADRR 021C 084D DA 021D 0200 021E 05A1 GETMEM 021F 084E MARKS 0220 05BF EREPORT 0221 1PAGE 0011 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-939881 -10 B000 1986/03/17 08:22:24 INITIALIZATION 0301 * 0302 * Compute the # of the last physical-page installed in the system. 0303 * 00000222 0304 INIT3 EQU $ 0222 837C 021F 0305 COPY MARKS,A 0223 0E69 0306 SHIFT A,RO,7 0224 0AFF 0307 SUB =1,A 0225 8795 023B 0308 COPY A,MAXPPG 0309 * 0310 * Find out where the next 8K boundary beyond DEBUG is and save it. 0311 * 0226 C295 023C 0312 COPY =R:HIGH,Q 0227 F695 023D 0313 OR =:0FFF,Q 0228 4B01 0314 ADD =1,Q 0229 C794 023E 0315 COPY Q,TOPOFPGM 0316 * 0317 * Is this a -00 board? 0318 * 022A 8374 021F 0319 COPY MARKS,A 022B 008F 0320 TBIT 8,A 022C 36C3 0230 0321 JF  OV,INIT4 NO 022D 0901 0322 COPY =1,A 022E 8790 023F 0323 COPY A,TYP0L 022F 9F90 0240 0324 JMP DASH00 YES 0325 * 0326 * Enable parity since it is disabled at power up. 0327 * 00000230 0328 INIT4 EQU $ 0230 0900 0329 COPY =0,A 0231 878D 023F 0330 COPY A,TYP0L 0232 8369 021C 0331 COPY DA,A 0233 4901 0332 COPY =1,Q 1=ENABLE PARITY, 0=DISABLE PARITY 0234 030A 0333 XNX A ONLY POWER DOWN OR ANOTHER SELP CAN DISABLE PARITY 0235 4400 0334 SELP Q,FC0 FC0 IS FOR PARITY, FC1 IS FOR MAPPING 0236 0900 0335 COPY =0,A INITIALIZE PASS COUNTER 0237 8789 0241 0336  COPY A,PASSCNT 0238 BF61 021A 0337 JST CRLF 0239 BF60 021A 0338 JST CRLF 023A 9E88 0243 0339 JMP INIT5 KEEP GOING 0008 0340 LPOOL 023B 084C MAXPPG 023C 0000 R:HIGH 023D 0FFF 023E 084B TOPOFPGM 023F 0851 TYP0L 0240 03D7 DASH00  0241 0854 PASSCNT 0242 1PAGE 0012 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING  84-93988-10 B000 1986/03/17 08:22:25 INITIALIZATION 0342 * 0343 * This is where we loop to and print the PASS #. 0344 * 00000243 0345 INIT5 EQU $ 0243 0900 0346 COPY =0,A 0244 8787 024C 0347 COPY A,PFFLAG INIT THE PASS-FAIL FLAG 0245 DF7B 0241 0348 IMS PASSCNT 0246 0000 0349 NOP 0247 BF51 0219 0350 JST MSGA "PASS N" 0248 0707 0351 WORD PASSMSG 0249 8377 0241 0352 COPY PASSCNT,A  024A BF82 024D 0353 JST ODEC 024B 9E83 024F 0354 JMP PAGE 0003 0355  LPOOL 024C 085A PFFLAG 024D 04FD ODEC 024E 0356 * 12 PAGE 0013 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:22:26 TEST A - PAGING TEST 0358 ************************************************** 0359 *  0360 * TEST A 0361 * 0362 * WRITE AN INCREMENTING NUMBER TO THE LAST  0363 * WORD OF EVERY PHYSICAL PAGE AND THEN TRY 0364 * TO READ THEM BACK.  0365 * 0366 ************************************************** 0367 * 0000024F 0368 PAGE EQU $ 024F BF49 0219 0369 JST MSGA "TEST A ..." 0250 070C 0370  WORD MES10 0251 0901 0371 COPY =1,A LOOP THRU THIS RTN TWICE 0252 878D 0260 0372  COPY A,TEMP2 0373 * 0253 836A 023E 0374 COPY TOPOFPGM,A SET UP THE PAGE COUNTER 0254 0EB8 0375 SHIFT A,R,12 " 0255 878B 0261 0376 COPY A,PCOUNT "  0377 * 00000256 0378 PAGE1 EQU $ 0256 4900 0379 COPY =0,Q STARTING CONTROL-REGISTER VALUE 0257 E28A 0262 0380 COPY =TABLE,Y LOCATION IN TABLE TO START AT 0381 * 00000258 0382 PAGE2 EQU $ 0258 BF8A 0263 0383 JST TBLE BUILD MAPPING TABLE 0259 0900 0384 COPY =0,A PASS THE FUNCTION CODE (MAP#) 025A BF89 0264 0385 JST MAPIT MAP IN THE NEXT CHUNK OF MEMORY 0386 * 025B 8384 0260 0387 COPY TEMP2,A 025C 0D01 0388 CSK A,=1 025D 0000 0389 NOP 025E 9E96 0275 0390 JMP PAGE12 025F 9E87 0267 0391 JMP PAGE8 0007 0392 LPOOL 0260 0857 TEMP2 0261 0853 PCOUNT 0262 0863 TABLE 0263 0408 TBLE 0264 0416 MAPIT 0265  0266 1PAGE 0014 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:22:27 TEST A - PAGING TEST 0394 * 0395 * WRITE PAGE #'S  0396 * 00000267 0397 PAGE8 EQU $ 0267 A356 023E 0398 COPY TOPOFPGM,X SKIP THE DIAGNOSTIC'S PAGES 0268 C254 023D 0399 COPY =:0FFF,Q " 0269 2047 0400 OR Q,X  " 0000026A 0401 PAGE10 EQU $ 026A C376 0261 0402 COPY PCOUNT,Q WRITE PAGE# 026B C480 0000 0403 COPY Q,0(X) " 026C 2785 0404 CSM X,FWORD WAS THAT THE LAST PAGE OF THIS MAP? 026D 05F0 085E 026E 9E83 0272 0405 JMP PAGE11 NO, LOOP 026F 0000 0406 NOP 0270 DF70 0261 0407 IMS PCOUNT YES 0271 9EA5 0297 0408  JMP PAGE17 00000272 0409 PAGE11 EQU $ 0272 DF6E 0261 0410 IMS PCOUNT BUM3 P PAGE # 0273 AAE7 02DB 0411 ADD =:1000,X POINT TO NEXT PAGE 0274 9E75 026A 0412 JMP PAGE10 0413 * 0414 * READ PAGE #'S 0415 * 00000275 0416 PAGE12 EQU $ 0275 A348 023E 0417 COPY TOPOFPGM,X SKIP DIAGNOSTIC'S PAGES 0276 C246 023D 0418  COPY =:FFF,Q " 0277 2047 0419 OR Q,X " 00000278 0420 PAGE13 EQU $ 0278 C080 0000 0421 COPY 0(X),Q READ THE PAGE# 0279 CF67 0261 0422 SUB PCOUNT,Q IS IT CORRECT? 027A 5153 028E 0423 JEQ Q,PAGE14 YES 0424 * 027B 0901 0425  COPY =1,A JUST NOTE THAT TEST HAS FAILED 027C 874F 024C 0426 COPY A,PFFLAG PASS-FAIL FLAG 027D 83DE 02DC 0427 COPY EFLAG,A DETAILED OF BRIEF ERROR REPORTS? 027E 0AF3 0428 SUB =:D,A 027F 1141 0281 0429 JEQ A,PAGE13B JUMP IF DETAILED REPORT 0280 9E8D 028E 0430 JMP PAGE14 0431 * 00000281 0432 PAGE13B EQU $ 0281 A7DB 02DD 0433 COPY X,SAVEX 0282 835E 0261 0434 COPY PCOUNT,A PHYSICAL PAGE# 0283 BFDA 02DE 0435 JST CONVWRD 0284 077F 0436 WORD MSG5A 0285 835B 0261 0437 COPY PCOUNT,A EXPECTED DATA 0286 BFD7 02DE 0438 JST CONVWRD 0287 0788 0439 WORD MSG5B 0288 8080 0000 0440 COPY 0(X),A ACTUAL DATA 0289 BFD4 02DE 0441 JST CONVWRD 028A 0790 0442 WORD MSG5C 028B BF0D 0219 0443 JST MSGA "READ ERROR IN PAGE N EXPECTED :XXXX ACTUAL :XXXX" 028C 0773  0444 WORD MSG5 028D A3CF 02DD 0445 COPY SAVEX,X RESTORE X-REG 0000028E 0446 PAGE14 EQU $ 028E 2785 0447 CSM X,FWORD WAS THAT THE LAST PAGE OF THIS MAP? 1PAGE 0015 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:22:28 TEST A - PAGING TEST 028F 05CE 085E 0290 9E83 0294 0448 JMP PAGE15 NO 0291 0000 0449 NOP  0292 DF4E 0261 0450 IMS PCOUNT YES 0293 9E83 0297 0451 JMP PAGE17  00000294 0452 PAGE15 EQU $ 0294 DF4C 0261 0453 IMS PCOUNT NO 0295 AAC5 02DB 0454 ADD =:1000,X POINT TO NEXT PAGE 0296 9E61 0278 0455 JMP PAGE13 LOOP  0456 * 0457 * 0458 * Check to see if the 1st page for the next map would exceed 0459 * the maximum physical-page#. 0460 * 00000297 0461 PAGE17 EQU  $ 0297 C3C7 02DF 0462 COPY TABLE+15,Q LAST PAGE OF THIS MAP 0298 4E18 0463 SHIFT Q,R,2 COMPUTE 1ST PAGE OF NEXT MAP 0299 58FF 0464 AND =:FF,Q " 029A 4B01 0465 4  ADD =1,Q " 029B 831F 023B 0466 COPY MAXPPG,A A <-- MAXIMUM PHYSICAL-PAGE # ALLOWED  0467 * 029C 400B 0468 CSK Q,A IS THERE MORE MEMORY THAT CAN BE MAPPED? 029D 9E89 02A7 0469 JMP PAGE20 YES, SEE IF THERE'S ENOUGH FOR ANOTHER MAP 029E 0000 0470 NOP  029F 8340 0260 0471 COPY TEMP2,A SEE IF WE ARE DONE WRITING & READING 02A0 0AFF 0472 SUB =1,A 02A1 13EC 02CE 0473 JLT A,PAGE40 YES, WE'RE DONE 02A2 873D 0260 0474  COPY A,TEMP2 NO, GO DO THE READ TEST 0475 * 02A3 831A 023E 0476 COPY TOPOFPGM,A RESET PAGE COUNT 02A4 0EB8 0477 SHIFT A,R,12 " 02A5 873B 0261 0478 COPY A,PCOUNT " 02A6 9E2F 0256 0479 JMP PAGE1 LOOP 0480 * 0481 * Check to see if there is enough memory to map another 128KB. 0482 * If there is less than 128KB left, then we reconfigure the map 0483 * such that the last n pages of the current map are replaced  0484 * with the last n remaining untested pages. 0485 * 000002A7 0486 PAGE20 EQU $  02A7 0040 0487 COPY Q,A A <-- PHYS-PAGE# FOR LOG-PAGE 0 OF NEXT MAP 02A8 0B0F 0488  ADD =15,A A <-- PHYS-PAGE# FOR LOG-PAGE 15 OF NEXT MAP 02A9 0785 0489 CSM A,MAXPPG 02AA 05A1 084C 02AB 9E9B 02C7 0490 JMP PAGE30 AT LEAST 128KB LEFT 02AC 9E81 02AE 0491  JMP PAGE25 < 128KB LEFT, MAKE ADJUSTMENTS 02AD 9E99 02C7 0492 JMP PAGE30 128KB LEFT  0493 * 0494 * 000002AE 0495 PAGE25 EQU $ 02AE C732 0261 0496 COPY  Q,PCOUNT ADJUST PAGE COUNTER 02AF C30B 023B 0497 COPY MAXPPG,Q CALQLATE POINTER INTO TABLE 02B0 0043 0498 SUB Q,A " 02B1 E230 0262 0499 COPY =TABLE,Y " 02B2 6002 0500 ADD A,Y GOT IT 1PAGE 0016 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:22:30 TEST A - PAGING TEST 0501 * 02B3 2000 0502 COPY A,X CALQLATE THE NEW VALUE FOR X 02B4 2EB0 0503 SHIFT X,L,12 " 02B5 8207 023D 0504  COPY =:0FFF,A " 02B6 2007 0505 OR A,X " 02B7 A7A5 02DD 0506 COPY  X,SAVEX " 0507 * 02B8 C328 0261 0508 COPY PCOUNT,Q CALQLATE VALUE TO START WITH 02B9 4E10 0509 SHIFT Q,L,2 " 02BA 8040 0000 0510 COPY 0(Y),A " 02BB 96A4 02E0 0511 AND =:F000,A " 02BC 4007 0512 OR A,Q GOT IT  0513 * 02BD A79F 02DD 0514 COPY X,SAVEX 02BE BF24 0263 0515 JST TBLE 5  SET UP THE TABLE 02BF 0900 0516 COPY =0,A RECONFIG MAP0 02C0 BF23 0264 0517 JST MAPIT 02C1 A39B 02DD 0518 COPY SAVEX,X 0519 * 02C2 831D 0260 0520 COPY TEMP2,A 02C3 0D01 0521 CSK A,=1 02C4 0000 0522 NOP 02C5 9E32 0278 0523 JMP PAGE13 CONTINUE READING 02C6 9E23 026A 0524 JMP PAGE10  CONTINUE WRITING 0525 * 0526 * 0527 * Get the starting value for the control-registers into Q. 0528 * 000002C7 0529 PAGE30 EQU $ 02C7 4E10 0530  SHIFT Q,L,2 02C8 8398 02E1 0531 COPY TOPOFPGM,A 02C9 4007 0532 OR A,Q 0533 * 0534 * Load Y with the address of the 1st entry to be modified.  0535 * 02CA 0EB8 0536 SHIFT A,R,12 02CB E216 0262 0537 COPY =TABLE,Y 02CC 6002  0538 ADD A,Y 02CD 9E0A 0258 0539 JMP PAGE2 REPEAT 0540 *  0541 * PRINT SHORT ERROR MSG IF REQUESTED 0542 * 000002CE 0543 PAGE40 EQU $  02CE 8393 02E2 0544 COPY PFFLAG,A SEE IF TEST PASSED 02CF 1146 02D6 0545 JEQ A,PAGE42  JUMP IF IT PASSED 02D0 838B 02DC 0546 COPY EFLAG,A DETAILED OR BRIEF ERROR REPORT? 02D1 0AF3 0547 SUB =:D,A 02D2 1145 02D8 0548 JEQ A,PAGE44 JUMP IF DETAILED 02D3 BF8F 02E3 0549  JST MSGA 02D4 0719 0550 WORD MES30 "FAILED" 02D5 9E82 02D8 0551 JMP PAGE44 000002D6 0552 PAGE42 EQU $ 02D6 BF8C 02E3 0553 JST MSGA "PASSED" 02D7 0714  0554 WORD MES20 000002D8 0555 PAGE44 EQU $ 1PAGE 0017 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:22:31 TEST A - PAGING TEST 02D8 0900 0556 COPY =0,A RESET PASS-FAIL FLAG 02D9 8788 02E2 0557 COPY A,PFFLAG 02DA 9E8A 02E5 0558 JMP MAIN GO TO TEST C 000A 0559 LPOOL 02DB 1000 02DC 0859 EFLAG 02DD 085B SAVEX 02DE 04A3 CONVWRD 02DF 0872 02E0 F000 02E1 084B TOPOFPGM 02E2 085A PFFLAG 02E3 04ED MSGA 02E4 1PAGE 0018 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:22:32 TEST B - WRITE/READ PATTERNS TO ALL OF MEMORY  0561 ************************************************** 0562 * 0563 *  TEST B 0564 * 0565 * WRITE/READ PATTERNS TO ALL OF MEMORY. 0566 *  0567 ************************************************** 0568 * 000002E5 0569 MAI6 N EQU $ 02E5 BF7D 02E3 0570 JST MSGA "TEST B ..." 02E6 071E 0571 WORD MES40 02E7 4900 0572 COPY =0,Q STARTING CONTROL-REGISTER VALUE 02E8 E2A4 030D 0573 COPY =TABLE,Y LOCATION IN TABLE TO START AT 000002E9 0574 MAIN1 EQU $ 02E9 BFA4 030E 0575  JST TBLE BUILD MAPPING TABLE 02EA 0900 0576 COPY =0,A PASS THE FUNCTION CODE (MAP#) 02EB BFA3 030F 0577 JST MAPIT MAP IN THE NEXT CHUNK OF MEMORY 02EC BFA3 0310 0578 JST  ZERO 02ED BFA3 0311 0579 JST ZERCHK 02EE BFA3 0312 0580 JST ADDRW 02EF BFA3 0313 0581 JST ADDRCHK 02F0 BFA3 0314 0582 JST ONES 02F1 BFA3 0315 0583 JST ONECHK  0584 * 0585 * Check to see if the 1st page for the next map would exceed  0586 * the maximum physical-page#. 0587 * 02F2 C36C 02DF 0588 COPY TABLE+15,Q LAST PAGE OF THIS MAP 02F3 4E18 0589 SHIFT Q,R,2 COMPUTE 1ST PAGE OF NEXT MAP 02F4 58FF 0590  AND =:FF,Q " 02F5 4B01 0591 ADD =1,Q " 02F6 839F 0316 0592 COPY MAXPPG,A A <-- MAXIMUM PHYSICAL-PAGE # ALLOWED 02F7 400B 0593 CSK Q,A IS THERE MORE MEMORY THAT CAN BE MAPPED? 02F8 9E82 02FB 0594 JMP MAIN2 YES, SEE IF THERE'S ENOUGH FOR ANOTHER MAP 02F9 0000 0595 NOP 02FA 9E9E 0319 0596 JMP DONE NO, THAT'S IT  0597 * 0598 * Check to see if there is enough memory to map another 128KB.  0599 * If there is less than 128KB left, then we map in the last 128KB 0600 * of physical memory (some of which has already been tested) 0601 * starting at the top of memory minus 128KB.  0602 * 000002FB 0603 MAIN2 EQU $ 02FB 0040 0604 COPY Q,A A <-- PHYS-PAGE# FOR LOG-PAGE 0 OF NEXT MAP 02FC 0B0F 0605 ADD =15,A A <-- PHYS-PAGE# FOR LOG-PAGE 15 OF NEXT MAP  02FD 0785 0606 CSM A,MAXPPG 02FE 054D 084C 02FF 9E86 0306 0607 JMP MAIN4  AT LEAST 128KB LEFT 0300 9E81 0302 0608 JMP MAIN3 < 128KB LEFT, MAKE ADJUSTMENTS 0301 9E84 0306  0609 JMP MAIN4 128KB LEFT 0610 * 00000302 0611 MAIN3 EQU $ 0302 C35E 02E1 0612 COPY TOPOFPGM,Q MAKE THE ADJUSTMENT 0303 4EB8 0613 SHIFT Q,R,12 " 0304 4AF1 0614 SUB =15,Q " 1PAGE 0019 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING  84-93988-10 B000 1986/03/17 08:22:33 TEST B - WRITE/READ PATTERNS TO ALL OF MEMORY 0305 CB90 0316 0615  ADD MAXPPG,Q " 0616 * 0617 * Get the starting value for the control-registe7 rs into Q. 0618 * 00000306 0619 MAIN4 EQU $ 0306 4E10 0620 SHIFT Q,L,2 0307 8359 02E1 0621 COPY TOPOFPGM,A 0308 4007 0622 OR A,Q 0623 * 0624 * Load Y with the address of the 1st entry to be modified. 0625 * 0309 0EB8 0626 SHIFT A,R,12 030A E282 030D 0627 COPY =TABLE,Y 030B 6002 0628 ADD A,Y 030C 9E5C 02E9 0629 JMP MAIN1 REPEAT 000C 0630 LPOOL  030D 0863 TABLE 030E 0408 TBLE 030F 0416 MAPIT 0310 042B ZERO 0311 0431 ZERCHK  0312 044B ADDRW 0313 0450 ADDRCHK 0314 0466 ONES 0315 046C ONECHK 0316 084C MAXPPG 0317 0318 1PAGE 0020 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:22:34 TEST B 0632 ********************************************************************* 0633 * 0634 * TEST B - CONTINUED 0635 *  0636 * MOVE - Move the diagnostic and test the memory. 0637 * 0638 * All memory has been tested except the pages occupied 0639 * by the diagnostic. This routine will move the diagnostic 0640 * from Map0 to Map1, and then test the rest of Map0 memory. 0641 *  0642 ********************************************************************* 0643 * 00000319  0644 DONE EQU $ 0645 * 0646 * Disable mapping, so we are using the 1st 128KB, with the 0647 * diagnostic starting in page 0. 0648 * 0319 8390 032A 0649  COPY DA,A 031A 4900 0650 COPY =0,Q 031B 030A 0651 XNX A 031C 4401 0652 SELP Q,FC1 0653 * 0654 * Now map the memory above the diagnostic to be low memory. 0655 * 031D E26F 030D 0656 COPY =TABLE,Y 031E 8342 02E1 0657 COPY TOPOFPGM,A GET THE END OF THE PROGRAM 031F A341 02E1 0658 COPY TOPOFPGM,X 0320 0E98 0659  SHIFT A,R,10 A HAS THE CONTROL-REG VALUE 00000321 0660 REL1 EQU $ 0321 8440 0000 0661  COPY A,0(Y) STORE CONTROL-REGISTER IN TABLE 0322 6B01 0662 ADD =1,Y 0323 8A87 032B 0663 ADD =:1004,A IN CASE THE PROGRAM IS LARGER THAN 1 PAGE 0324 8787 032C 0664 COPY A,TEMP 0325 9687 032D 0665 AND =:F800,A 0326 0026 0666 CSM A,X DONE MAPPING THE DIAGNOSTIC? 0327 8384 032C 0667 COPY TEMP,A NO 0328 9E78 0321 0668 JMP REL1 NO 0329 9E85 032F 0669 JMP REL1A YES 0005 0670 LPOOL 032A 084D DA 8  032B 1004 032C 0855 TEMP 032D F800 032E 0671 * 0672 * Now map the memory, formerly occupied by the program, to be 0673 *  logically above the program. 0674 * 0000032F 0675 REL1A EQU $ 032F 2E00 0676  SHIFT X,L,1 READY X FOR NEXT COMPARISON 00000330 0677 REL2 EQU $ 0330 8440 0000 0678  COPY A,0(Y) STORE CONTROL-REGISTER IN TABLE 0331 6B01 0679 ADD =1,Y 0332 8A78 032B 0680 ADD =:1004,A 0333 8778 032C 0681 COPY A,TEMP 1PAGE 0021 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:22:35 TEST B 0334 9678 032D 0682 AND =:F800,A 0335 0026 0683 CSM A,X DONE MAPPING LOW MEMORY? 0336 8375 032C 0684 COPY TEMP,A NO 0337 9E78 0330 0685 JMP REL2 NO 0686 * 0687 *  Relocate the program to the next page(s) beyond itself. 0688 * 0338 A328 02E1 0689 COPY TOPOFPGM,X 0339 4020 0690 COPY X,Q 033A 6900 0691 COPY =0,Y 0000033B 0692 REL3 EQU $ 033B 8040 0000 0693 COPY 0(Y),A 033C 84C0 0000 0694 COPY A,0(X,Y) 033D 6B01 0695 ADD =1,Y 033E 55BC 033B 0696 JNED Q,REL3 0697 *  0698 * Config & Enable Map0, which is using the first 128KB 0699 * 033F E2AD 036D 0700 COPY =TABLE+16,Y END OF THE TABLE 0340 A24C 030D 0701 COPY =TABLE,X 0341 8368 032A 0702 COPY  DA,A 00000342 0703 REL3A EQU $ 0342 C080 0000 0704 COPY 0(X),Q 0343 030A 0705  XNX A 0344 4200 0706 OUT Q,FC0 OUT TO MAP0 0345 2B01 0707 ADD =1,X 0346 206B 0708 CSK X,Y DONE MAPPING? 0347 9E7A 0342 0709 JMP REL3A  NO 0348 0000 0710 NOP 0349 0901 0711 COPY =1,A MAP-ENABLE BIT 034A C35F 032A 0712 COPY DA,Q 034B 430A 0713 XNX Q 034C 0401 0714  SELP A,FC1 ENABLE MAP0 0715 * 0716 * Now test the remaining memory.  0717 * 034D BF42 0310 0718 JST ZERO 034E BF42 0311 0719 JST ZERCHK 034F BF42 0312 0720 JST ADDRW 0350 BF42 0313 0721 JST ADDRCHK 0351 BF42 0314 0722 JST  ONES 0352 BF42 0315 0723 JST ONECHK 1PAGE 0022 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING  84-93988-10 B000 1986/03/17 08:22:37 MOVE THE DIAGNOSTIC BACK 0725 * 0726 *  Put the diagnostic back where it was. 0727 * 0353 A30D 02E1 0728 COPY TOPOFPGM,X 0354 6029 0 0729 COPY X,Y 0355 6AFF 0730 SUB =1,Y 0356 8040 0000 0731 COPY 0(Y),A 0357 84C0 0000 0732 COPY A,0(X,Y) 0358 75BD 0356 0733 JNED Y,$-2 0734 * 0735 * Disable mapping, so we are using the 1st 128KB, with the 0736 * diagnostic starting in page 0. 0737 * 0359 8350 032A 0738 COPY DA,A 035A 4900 0739 COPY =0,Q 035B 030A 0740 XNX A 035C 4401 0741 SELP Q,FC1 0742  * 0743 * PRINT BRIEF ERROR REPORT IF REQUESTED 0744 * 035D 8390 036E 0745  COPY PFFLAG,A DID TEST FAIL? 035E 1146 0365 0746 JEQ A,REL4 JUMP IF IT PASSED  0747 * 035F 838F 036F 0748 COPY EFLAG,A DETAILED OR BRIEF ERROR REPORT? 0360 0AF3 0749  SUB =:D,A 0361 1145 0367 0750 JEQ A,REL5 JUMP IF DETAILED 0751 * 0362 BF8D 0370 0752 JST MSGA 0363 0719 0753 WORD MES30 "FAILED" 0364 9E82 0367 0754  JMP REL5 0755 * 00000365 0756 REL4 EQU $ 0365 BF8A 0370 0757 JST MSGA 0366 0714 0758 WORD MES20 "PASSED" 0759 * 00000367 0760 REL5 EQU $ 0367 0900 0761 COPY =0,A RESET PASS-FAIL FLAG 0368 8785 036E 0762 COPY A,PFFLAG 0763 * 0764 * Dash-00 borad? 0765 * 0369 8387 0371 0766 COPY TYP0L,A 036A 000F 0767 TBIT 0,A 036B 36C7 0373 0768 JF OV,TEST3 JUMP IF IT'S NOT 036C 9EF4 03E1 0769 JMP D0D0 0006 0770 LPOOL  036D 0873 036E 085A PFFLAG 036F 0859 EFLAG 0370 04ED MSGA 0371 0851 TYP0L 0372 03E1 D0D0 1PAGE 0023 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000  1986/03/17 08:22:38 TEST C 0772 ***************************************************************  0773 * 0774 * TEST C 0775 * 0776 * POINT ALL LOG PAGES AT THE SAME PHYS PAGE, THEN TEST. 0777 * 0778 * THIS ROUTINE DOES THE FOLLOWING: 0779 * 0780 * 1) Configure Map0 to use 1st 128KB and then fill it with  0781 * incrementing addresses. 0782 * 0783 * 2) Configure all 4 maps such that all free logical pages 0784 * are pointing to the first available physical page after  0785 * the diagnostic. 0786 * 0787 * 3) Check to see if the first 16 locations of each page of 0788 * each map have the same 16 addresses in them. They should :  0789 * since all logical pages of all maps should be pointing to 0790 * the same physical page. 0791 * 0792 *********************************************************************  0793 * 0794 * CONFIG MAP0 & WRITE ADDRESSES 0795 * 00000373  0796 TEST3 EQU $ 0373 BF7C 0370 0797 JST MSGA "TEST C ..." 0374 0726 0798  WORD MES50 0799 * 0375 4900 0800 COPY =0,Q STARTING CONTROL-REGISTER VALUE 0376 E216 030D 0801 COPY =TABLE,Y LOCATION IN TABLE TO START AT 0377 BF16 030E 0802 JST  TBLE BUID THE MAPPING TABLE 0803 * 0378 0900 0804 COPY =0,A PASS THE FUNCTION CODE (MAP#) 0379 BF15 030F 0805 JST MAPIT MAP0 WILL NOW POINT TO 1ST 128KB 037A BF17 0312 0806 JST ADDRW WRITE THE ADDRESSES(ONLY USES Y-REG) 0807 * 0808 * Map all pages (except for those holding the diagnostic) of all 0809 * four maps to point to the 1st physical-page after the 0810 * diagnostic. 0811 * 037B A3F8 03F4 0812 COPY TOPOFPGM,X X WILL HOLD THE COUNTER 037C 2EB8 0813 SHIFT X,R,12 GET # OF PAGES USED BY DIAGNOSTIC 037D 2AF0 0814 SUB =16,X # OF EMPTY PAGES 037E C3F5 03F4 0815 COPY TOPOFPGM,Q 037F 4E98 0816 SHIFT Q,R,10 0380 F7F3 03F4 0817 OR TOPOFPGM,Q 0381 8328 032A 0818 COPY DA,A 0819 * 00000382 0820 SAME1 EQU $ 0382 030A 0821  XNX A 0383 4200 0822 OUT Q,FC0 MAP 0 0384 030A 0823 XNX A 0385 4201 0824 OUT Q,FC1 MAP 1 0386 030A 0825 XNX A 0387 4202 0826  OUT Q,FC2 MAP 2 1PAGE 0024 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:22:39 TEST C 0388 030A 0827 XNX A 0389 4203 0828 OUT Q,FC3  MAP 3 038A CAEA 03F5 0829 ADD =:1000,Q INCREMENT THE PAGE TO OUTPUT 038B 2B01 0830 ADD =1,X 038C 31B5 0382 0831 JNE X,SAME1 0832 * 038D 580F 0833 AND  =:F,Q SAVE THE PHYSICAL PAGE# FOR LATER 038E 4E18 0834 SHIFT Q,R,2 " 038F C7E6 03F6 0835 COPY Q,TEMP3 " 0836 * 0837 * NOW CONFIG LOW MEMORY FOR EACH MAP 0838 * 0390 A3E3 03F4 0839 COPY TOPOFPGM,X FIGURE OUT HOW MANY PAGES THE DIAGNOSTIC IS  0391 2EB8 0840 SHIFT X,R,12 0392 4900 0841 COPY =0,Q 0842 * 00000393 0843 SAME1B EQU $ 0393 030A 0844 XNX A 0394 4200 0845 OUT Q,FC0;  MAP 0 0395 030A 0846 XNX A 0396 4201 0847 OUT Q,FC1 MAP 1 0397 030A 0848 XNX A 0398 4202 0849 OUT Q,FC2 MAP 2 0399 030A 0850  XNX A 039A 4203 0851 OUT Q,FC3 MAP 3 0852 * 039B CA0F 032B 0853  ADD =:1004,Q 039C 2AFF 0854 SUB =1,X 039D 31B5 0393 0855 JNE X,SAME1B  0856 * 0857 * SEE IF THEY REALLY ARE POINTING TO THE SAME PHYSICAL PAGE 0858 * 039E 4900 0859 COPY =0,Q 0000039F 0860 SAME2 EQU $ 039F 830A 032A 0861  COPY DA,A 03A0 C7D6 03F7 0862 COPY Q,ENMAP TO KEEP TRACK OF WHICH MAP IS ENABLED 03A1 4E00  0863 SHIFT Q,L,1 MOVE MAP# INTO MAP-SELECT FIELD 03A2 4B01 0864 ADD =1,Q BIT 0 IS THE MAP-ENABLE BIT 03A3 030A 0865 XNX A 03A4 4401 0866 SELP Q,FC1 ENABLE THE MAP 0867 * 03A5 83CE 03F4 0868 COPY TOPOFPGM,A INITIALIZE THE LOG PAGE COUNTER 03A6 0EB8 0869 SHIFT A,R,12 " 03A7 0AF0 0870 SUB =:10,A " 03A8 87CF 03F8 0871 COPY A,PGCNTR MAP ENABLE COUNTER 03A9 A3CA 03F4 0872 COPY TOPOFPGM,X INDEX POINTER 0873 * 000003AA 0874 SAME3 EQU $ 03AA 83C9 03F4 0875 COPY TOPOFPGM,A DATA TO COMPARE 03AB 0B10 0876 ADD =:10,A 03AC 6910 0877 COPY =:10,Y COUNTER 0878 * 000003AD 0879 SAME4 EQU $ 03AD C0C0 0000 0880 COPY 0(X,Y),Q  CONTENTS OF MEMORY 03AE 400A 0881 CSN A,Q ARE THEY EQUAL? 1PAGE 0025 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:22:41 TEST C 03AF 9E9C 03CC 0882 JMP SAME5 YES 0883 * 03B0 87C8 03F9 0884 COPY A,SAVEA NO, SAVE EXPECTED DATA 03B1 0901 0885 COPY =1,A MAKE A NOTE THAT IT FAILED 03B2 873B 036E 0886 COPY A,PFFLAG 03B3 833B 036F 0887 COPY EFLAG,A DETAILED OR BRIEF ERROR REPORTS? 03B4 0AF3 0888  SUB =:D,A 03B5 1142 03B8 0889 JEQ A,SAME4A JUMP IF DETAILED 03B6 83C2 03F9 0890  COPY SAVEA,A GET THE EXPECTED DATA 03B7 9E94 03CC 0891 JMP SAME5 0892 *  000003B8 0893 SAME4A EQU $ 03B8 83C0 03F9 0894 COPY SAVEA,A GET EXPECTED DATA 03B9 C7C0 03FA 0895 COPY Q,TEMP1 SAVE ACTUAL DATA 03BA BFC0 03FB 0896 JST CONVWRD A HAS EXPECTED DATA 03BB 0806 0897 WORD MSG50D EXPECTED DATA 0898 * 03BC 83BD 03FA 0899  COPY TEMP1,A ACTUAL DATA 03BD BFBD 03FB 0900 JST CONVWRD 03BE 080C 0901 <  WORD MSG50E 0902 * 03BF 83B6 03F6 0903 COPY TEMP3,A PHYSICAL PAGE # 03C0 BFBA 03FB 0904 JST CONVWRD 03C1 0800 0905 WORD MSG50B 0906 * 03C2 83B5 03F8 0907 COPY PGCNTR,A LOGICAL PAGE # 03C3 0B10 0908 ADD =:10,A MAKE IT POSITIVE 03C4 BFB6 03FB 0909 JST CONVWRD 03C5 07F9 0910 WORD MSG50C 0911 * 03C6 83B0 03F7 0912 COPY ENMAP,A MAP # 03C7 BFB3 03FB 0913 JST CONVWRD 03C8 07F2  0914 WORD MSG50A 0915 * 03C9 BF26 0370 0916 JST MSGA PRINT THE ERROR MESSAGE 03CA 07E8 0917 WORD MSG50 03CB 83AD 03F9 0918 COPY SAVEA,A EXPECTED DATA 000003CC 0919 SAME5 EQU $ 03CC 0AFF 0920 SUB =1,A 03CD 759F 03AD  0921 JNED Y,SAME4 JUMP IF NOT DONE WITH THIS PAGE 0922 * 03CE AAA6 03F5 0923  ADD =:1000,X 03CF DFA8 03F8 0924 IMS PGCNTR LAST PAGE OF THE MAP? 03D0 9E59 03AA 0925  JMP SAME3 NO, TEST NEXT BLOCK 03D1 C3A5 03F7 0926 COPY ENMAP,Q YES, INCREMENT MAP COUNTER 03D2 4B01 0927 ADD =1,Q 03D3 83A8 03FC 0928 COPY DA,A GET DA IN CASE OF ANOTHER OUT INSTRUCTION 03D4 4C04 0929 CLSN Q,=4 DONE? 03D5 9E8B 03E1 0930 JMP D0D0  YES 03D6 9E48 039F 0931 JMP SAME2 NO, DO NEXT BANK 0932 *  0933 * Dash-00 board. 0934 * 000003D7 0935 DASH00 EQU $ 03D7 C2A5 03FD 0936  COPY =R:HIGH,Q 1PAGE 0026 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:22:42 TEST C 03D8 4B01 0937 ADD =1,Q 03D9 C79A 03F4 0938 COPY Q,TOPOFPGM 03DA BED0 042B 0939 JST ZERO 03DB BED5 0431 0940 JST ZERCHK 03DC BEEE 044B 0941 JST  ADDRW 03DD BEF2 0450 0942 JST ADDRCHK 03DE BF9F 03FE 0943 JST ONES 03DF BF9F 03FF 0944 JST ONECHK 03E0 9E84 03E5 0945 JMP D0D02 0946 * 0947 *  Disable mapping and loop. 0948 * 000003E1 0949 D0D0 EQU $ 03E1 4900 0950  COPY =0,Q 03E2 8399 03FC 0951 COPY DA,A 03E3 030A 0952 XNX A 03E4 4401 0953 SELP Q,FC1 DISABLE MAPPING 0954 * 000003E5 0955 D0D02 EQU $ 03E5 829A 0400 0956 COPY =:D0D0,A TELL THEM IT'S DONE 03E6 0404 0957 SELP A,4  0958 * 0959 * IF THE TEST FAILED, CHECK TO SEE IF WE HAVE ALREADY PRINTED 0960 * A DETAILED ERROR REPORT, OR IF WE SHOULD JUST DO A BRIEF ONE. 0961 * 03E7 8306 036E 0962 =  COPY PFFLAG,A DID TEST PASS? 03E8 1146 03EF 0963 JEQ A,SAME7 JUMP IF IT PASSED  0964 * 03E9 8305 036F 0965 COPY EFLAG,A DETAILED OR BRIEF ERROR REPORT? 03EA 0AF3 0966  SUB =:D,A 03EB 1145 03F1 0967 JEQ A,SAME10 JUMP IF DETAILED 0968 * 03EC BF03 0370 0969 JST MSGA 03ED 0719 0970 WORD MES30 "FAILED" 03EE 9E82 03F1 0971  JMP SAME10 0972 * 000003EF 0973 SAME7 EQU $ 03EF BF95 0405 0974 JST MSGA 03F0 0714 0975 WORD MES20 "PASSED" 0976 * 000003F1 0977 SAME10 EQU $ 03F1 0900 0978 COPY =0,A RESET PASS-FAIL FLAG 03F2 8793 0406 0979  COPY A,PFFLAG 03F3 9F8D 0401 0980 JMP INIT5 0981 * 0014 0982 LPOOL 03F4 084B TOPOFPGM 03F5 1000 03F6 0858 TEMP3 03F7 084F ENMAP 03F8 0850 PGCNTR 03F9 085C SAVEA 03FA 0856 TEMP1 03FB 04A3 CONVWRD 03FC 084D DA 1PAGE 0027 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:22:43 TEST C 03FD 0000 R:HIGH 03FE 0466 ONES 03FF 046C ONECHK 0400 D0D0 0401 0243 INIT5 0402  0403 0404 0405 04ED MSGA 0406 085A PFFLAG 0407  1PAGE 0028 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:22:44  SUBROUTINES 0984 ************************************************************* 0985 *  0986 * BUILD THE MAPPING TABLE 0987 * 0988 * TBLE - This routine will load a 16-word table with 0989 * control register values, which will be used to map in the  0990 * next 128KB chunk of memory. The diagnostic currently fits 0991 * into 1 page and will always be in physical page 0. 0992 * In the future, the diagnostic could grow larger than 1 page.  0993 * 0994 * On entry: Y points to 1st entry in the table to be modified.  0995 * Q has the starting value to be entered. 0996 * 0997 ************************************************************* 0998 * 0408 0E0D 0999 TBLE ENT  0409 A289 0413 1000 COPY =TABLE,X PUT TABLE'S ADDRESS IN THE CDR 040A 2404 1001  SELP X,4 0000040B 1002 TBLE1 EQU $ 040B C440 0000 1003 COPY Q,0(Y) STORE CONTROL-REGISTER VALUE 040C CA87 0414 1004 ADD =:1004,Q POINT TO NEXT PAGE 040D 6B01 1005 ADD  =1,Y 040E 6785 1006 CSM Y,=TABLE+:10 DONE? 040F FD07 0117 0410 9E7A 040B 1007 >  JMP TBLE1 NO 0411 0000 1008 NOP 0412 9F75 0408 1009 JMP *TBLE YES 0003 1010 LPOOL 0413 0863 TABLE 0414 1004 0415 1PAGE 0029 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:22:45 DO THE MAPPING 1012 *********************************************************************  1013 * 1014 * MAPIT 1015 * 1016 * Now do the actual mapping by issuing the OUT's to the board, 1017 * using the values stored in TABLE. 1018 * 1019 * On entry: A has Function Code (Map #). 1020 * 1021 ********************************************************************* 1022 * 0416 0E0D 1023 MAPIT ENT 0417 8791 0429 1024 COPY A,TEMP SAVE THE MAP# 0418 E291 042A 1025 COPY =TABLE+16,Y END OF THE TABLE 0419 A279 0413 1026 COPY =TABLE,X 041A 8B61 03FC 1027 ADD  DA,A ADD DEVICE ADDR TO FUNCTION CODE (MAP#) 0000041B 1028 MAPIT1 EQU $ 041B C080 0000 1029  COPY 0(X),Q 041C 030A 1030 XNX A 041D 4200 1031 OUT Q,0 FUNCTION CODE IS PASSED TO THIS RTN IN THE A-REG 041E 2B01 1032 ADD =1,X 041F 206B 1033 CSK  X,Y DONE MAPPING? 0420 9E7A 041B 1034 JMP MAPIT1 NO 0421 0000 1035 NOP 0422 8386 0429 1036 COPY TEMP,A GET THE MAP# 0423 0E00 1037 SHIFT A,L,1 PUT IT IN THE MAP SELECT FIELD 0424 1901 1038 OR =1,A TURN ON THE MAP-ENABLE BIT 0425 C356 03FC 1039 COPY DA,Q 0426 430A 1040 XNX Q 0427 0401 1041 SELP A,FC1 ENABLE THE MAP WE JUST CONFIGURED 0428 9F6D 0416 1042 JMP *MAPIT GO TEST IT  0002 1043 LPOOL 0429 0855 TEMP 042A 0873 1PAGE 0030 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:22:45 DO THE MAPPING  1045 ******************************************** 1046 * 1047 * Zero all of memory.  1048 * 1049 ******************************************** 042B 0E0D 1050 ZERO ENT 042C 0900 1051 COPY =0,A 042D E346 03F4 1052 COPY TOPOFPGM,Y 042E 8440 0000 1053 ZERO1 COPY A,0(Y) 042F 74BE 042E 1054 IJNE Y,ZERO1 0430 9F7A 042B 1055 JMP *ZERO 1056 * 1057 ******************************************** 1058 * 1059 * Check memory for all zeros. 1060 * 1061 ****************? **************************** 1062 * 0431 0E0D 1063 ZERCHK ENT 0432 0900  1064 COPY =0,A 0433 E340 03F4 1065 COPY TOPOFPGM,Y UPPER LIMIT OF PROGRAM 00000434 1066 ZERCHK1 EQU $ 0434 0715 1067 CSM A,0(Y) ALL MEMORY SHOULD BE ZERO 0435 0000  0436 0000 1068 NOP 0437 9E82 043A 1069 JMP ZERCHK2 IF NOT, IT'S AN ERROR 0438 74BB 0434 1070 IJNE Y,ZERCHK1 LOOP TILL END OF MEMORY 0439 9F77 0431 1071 JMP *ZERCHK ALL DONE 1072 * 0000043A 1073 ZERCHK2 EQU $ 043A 0901 1074  COPY =1,A MAKE A NOTE THAT THE TEST HAS FAILED 043B 874A 0406 1075 COPY A,PFFLAG 043C 0900  1076 COPY =0,A GET A READY FOR MORE TESTING 043D C38C 044A 1077 COPY EFLAG,Q DETAILED OR BRIEF ERROR REPORTS? 043E 4AF5 1078 SUB =:B,Q 043F 5134 0434 1079 JEQ Q,ZERCHK1 IF BRIEF, SKIP ERROR MESSAGE FOR NOW 0440 0900 1080 COPY =0,A EXPECTED DATA 0441 BEE1 04A3 1081 JST CONVWRD 0442 0818 1082 WORD MSG60A 0443 8040 0000 1083 COPY  0(Y),A ACTUAL DATA 0444 BEDE 04A3 1084 JST CONVWRD 0445 0821 1085 WORD MSG60B 0446 BF3E 0405 1086 JST MSGA "READ ERROR EXP XXXX ACT XXXX" 0447 080F 1087 WORD  MSG60 0448 0900 1088 COPY =0,A GET A READY FOR MORE TESTING 0449 9E6A 0434 1089 JMP ZERCHK1 CONTINUE IF THEY WANT 0001 1090 LPOOL 044A 0859 EFLAG 1PAGE 0031 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:22:47 DO THE MAPPING 1092 ***************************************************** 1093 * 1094 * WRITE INCREMENTING ADDRESSES TO MEMORY 1095 * 1096 ***************************************************** 1097 * 044B 0E0D 1098 ADDRW ENT 044C E327 03F4 1099 COPY TOPOFPGM,Y 044D E440 0000 1100 COPY Y,0(Y) COPY ADDRESS TO ITSELF 044E 74BE 044D 1101 IJNE Y,$-1 LAST ADDR, NO THEN DO ANOTHER 044F 9F7B 044B 1102 JMP *ADDRW  1103 * 1104 ***************************************************** 1105 *  1106 * CHECK ADDRESSES IN MEMORY 1107 * CHECK TO SEE THAT EACH LOCATION HAS ITSELF  1108 * 1109 ***************************************************** 1110 * 0450 0E0D 1111 ADDRCHK ENT 0451 E322 03F4 1112 COPY TOPOFPGM,Y 00000452 1113 ADDRCHK1 EQU $ 0452 6715 1114 CSM Y,0(Y) IS IT EQUAL? 0453 0000 0454 0000 @  1115 NOP 0455 9E82 0458 1116 JMP ADDRCHK2 NO, GOTO ERROR 0456 74BB 0452 1117 IJNE Y,ADDRCHK1 YES, LOOP TILL END OF MEMORY 0457 9F78 0450 1118 JMP *ADDRCHK  ALL DONE 00000458 1119 ADDRCHK2 EQU $ 0458 0901 1120 COPY =1,A MAKE A NOTE THAT THE TEST HAS FAILED 0459 872C 0406 1121 COPY A,PFFLAG 045A 836F 044A 1122 COPY EFLAG,A DETAILED OR BRIEF ERROR REPORTS? 045B 0AF5 1123 SUB =:B,A 045C 1135 0452 1124 JEQ A,ADDRCHK1 IF BRIEF, SKIP ERROR MESSAGE FOR NOW 045D 0060 1125 COPY Y,A EXPECTED DATA 045E BEC4 04A3 1126 JST CONVWRD 045F 0818 1127 WORD MSG60A 0460 8040 0000 1128 COPY 0(Y),A ACTUAL DATA 0461 BEC1 04A3 1129 JST CONVWRD 0462 0821 1130 WORD MSG60B 0463 BF21 0405 1131 JST MSGA "READ ERROR EXP XXXX ACT XXXX" 0464 080F 1132 WORD MSG60 0465 9E6C 0452 1133 JMP ADDRCHK1 0000 1134 LPOOL 1PAGE 0032 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:22:48 DO THE MAPPING  1136 ********************************************** 1137 * 1138 * WRITE ONES TO MEMORY 1139 * 1140 ********************************************** 1141 * 0466 0E0D 1142 ONES ENT 0467 08FF 1143 COPY =-1,A 0468 E30B 03F4 1144 COPY TOPOFPGM,Y 0469 8440 0000 1145 COPY A,0(Y) 046A 74BE 0469 1146 IJNE  Y,$-1 046B 9F7A 0466 1147 JMP *ONES 1148 * 1149 ********************************************** 1150 * 1151 * CHECK MEMORY FOR ONES 1152 *  1153 ********************************************** 1154 * 046C 0E0D 1155 ONECHK  ENT 046D 08FF 1156 COPY =-1,A 046E E305 03F4 1157 COPY TOPOFPGM,Y  0000046F 1158 ONECHK1 EQU $ 046F 0715 1159 CSM A,0(Y) 0470 0000 0471 0000 1160 NOP 0472 9E82 0475 1161 JMP ONECHK2 ERROR 0473 74BB 046F  1162 IJNE Y,ONECHK1 LOOP TILL END OF MEMORY 0474 9F77 046C 1163 JMP *ONECHK ALL DONE  00000475 1164 ONECHK2 EQU $ 0475 0901 1165 COPY =1,A MAKE A NOTE THAT THE TEST HAS FAILED 0476 878C 0483 1166 COPY A,PFFLAG 0477 8352 044A 1167 COPY EFLAG,A DETAILED OR BRIEF ERROR REPORTS? 0478 0AF5 1168 SUB =:B,A 0479 1135 046F 1169 JEQ A,ONECHK1 IF BRIEF, SKIP ERROR MESSAGE FOR NOW 047A 08FF 1170 COPY =-1,A EXPECTED DATA 047B BEA7 04A3 1171 A  JST CONVWRD 047C 0818 1172 WORD MSG60A 047D 8040 0000 1173 COPY 0(Y),A  ACTUAL DATA 047E BEA4 04A3 1174 JST CONVWRD 047F 0821 1175 WORD MSG60B 0480 BEEC 04ED 1176 JST MSGA "READ ERROR EXP XXXX ACT XXXX" 0481 080F 1177 WORD MSG60 0482 9E6C 046F 1178 JMP ONECHK1 0003 1179 LPOOL 0483 085A PFFLAG  0484 0485 1PAGE 0033 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:22:49 'CHRIN' SUBROUTINE 1181 ******************************  1182 * 1183 * CHRIN - CHECK TERMINATOR 1184 * 1185 * THIS SUBROUTINE WILL CHECK THE 1186 * TERMINATOR CHARACTER FOR INPUT THROUGH 1187 * THE 'IHEX' OR 'IDEC' SUBROUTINE IS ONE 1188 * OF THE FOLLOWING: 1189 * 1190 * CARRIAGE RETURN - RETURN TO STANDARD RETURN ADDRESS 1191 *  POUND SIGN (#) - RETURN TO RETURN ADDRESS + 1 1192 * BACK ARROW - RETURN TO RETURN ADDRESS + 2 1193 * UP ARROW - RETURN TO RETURN ADDRESS + 3 1194 * COMMA (,) - RETURN TO RETURN ADDRESS + 4 1195 * ANYTHING ELSE  - RETURN TO RETURN ADDRESS + 5 1196 * 1197 * CALLING SEQUENCE: 1198  * JST CHRIN 1199 * JMP ? CARRIAGE RETURN R 1200 * JMP ? POUND SIGN R+1 1201 * JMP ? BACK ARROW R+2 1202 *  JMP ? UP ARROW R+3 1203 * JMP ? COMMA R+4  1204 * JMP ? ANYTHING ELSE R+5 1205 * 1206 * CALLS:  CALLED BY: 1207 * NONE QUERIES 1208 * 1209  ****************************** 1210 * 0486 0E0D 1211 CHRIN ENT TERMINATOR CHECK ROUTINE 0487 8390 0498 1212 COPY IDCTM2,A GET TTY INPUT CHAR 0488 0C0D 1213 CLSN =CR:,A IS IT C/R 0489 9F7C 0486 1214 JMP *CHRIN YES 048A DE7B 0486 1215 IMS CHRIN 048B 0C23 1216 CLSN ='#',A IS IT '#' 048C 9F79 0486 1217 JMP *CHRIN YES 048D DE78 0486 1218 IMS CHRIN 048E 0C5F 1219 CLSN =BCKAR:,A IS IT BACK ARROW 048F 9F76 0486 1220 JMP *CHRIN YES 0490 DE75 0486 1221 IMS CHRIN 0491 0C5E 1222  CLSN =UPARR:,A IS IT UP ARROW 0492 9F73 0486 1223 JMP *CHRIN YES 0493 DE72 0486 1224B  IMS CHRIN 0494 0C2C 1225 CLSN =',',A IS IT COMMA 0495 9F70 0486 1226 JMP *CHRIN YES 0496 DE6F 0486 1227 IMS CHRIN ITS SOMETHING ELSE 0497 9F6E 0486 1228  JMP *CHRIN 1229 * 0001 1230 LPOOL 0498 0861 IDCTM2  1PAGE 0034 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:22:51 C O N V B Y T E --- CONVERT RIGHT MOST NYBBLE OF A TO ASCII 1232 ***************************************************************************** 1233 * 1234 * C O N V B Y T E --- CNONVERT RIGHT MOST NYBBLE OF A TO ASCII 1235 * 1236 * CALLING SEQUENCE: 1237 * JSK CONVBYTE 1238 * 1239 * INPUT: A HAS VALUE TO BE CONVERTED IN NIBBLE 0  1240 * 1241 * OUTPUT: Q HAS RESULT IN BYTE 0 1242 * A IS UNCHANGED  1243 * 1244 ***************************************************************************** 0499 0E0D 1245 CONVBYTE ENT 049A 490F 1246 COPY =:000F,Q MASK OT LOW NYBLE. 049B 4004 1247 AND A,Q RANGE TO 0..F 049C 4D0A 1248 CSK Q,=:A IS NUMER > 9? 049D 9E83 04A1 1249 JMP LESS9 NO, SO MAKE ASCII :30..:39. 049E 0000 1250  NOP 049F 4AF7 1251 SUB =:9,Q MAKE NUMBER IN THE RANGE OF 1..F. 04A0 4B10 1252 ADD =:10,Q SET UP THE PROPER BIAS (:40=:10+:30) 000004A1 1253 LESS9 EQU $ 04A1 4B30 1254 ADD =:30,Q MAKE RANGE Q+:30. (:30..:39,:41..:46.) 04A2 9F76 0499 1255 JMP *CONVBYTE 0000 1256 LPOOL 1PAGE 0035 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:22:51 C O N V W R D --- CONVERT A-REGISTER TO ASCII  1258 ***************************************************************************** 1259 *  1260 * C O N V W R D --- CONVERT A-REGISTER TO ASCII 1261 * 1262 * CALLING SEQUENCE: 1263 * JST CONVWRD 1264 * WORD - Output buffer address for ASCII conversion  1265 * 1266 ****************************************************************************** 04A3 0E0D 1267 CONVWRD ENT 04A4 4309 1268 PUSH :40 SAVE ENTRY VALUES OF THE REGISTERS. 04A5 0040 04A6 E37C 04A3 1269 COPY *CONVWRD,Y GET THE BUFFER ADDRESS 04A7 DE7B 04A3 1270 IMS CONVWRD INCREMENT TO THE RETURN LOCATION 04A8 2903 1271 COPY  =3,X LOOP COUNT TO THE X REGISTER. 000004A9 1272 BLDNUM EQU $ START OF THE LOOP TO PICK UC P THE HEX NUMBER. 04A9 BE6F 0499 1273 JST CONVBYTE 04AA 0E25 1274 SBIT BY:,S SET BYTE MODE. 04AB C4C0 0000 1275 COPY Q,0(X,Y) PUT INTO BUFFER ONE BYTE AT A TIME. 04AC 0E27 1276  RBIT BY:,S SET WORD MODE. 04AD 0E39 1277 SHIFT A,RO,4 GET NEXT NYBLE. 04AE 35BA 04A9 1278 JNED X,BLDNUM DEC LOOP COUNT AND DO MORE IF NECESSARY. 04AF 6309 1279 POP  04B0 9F72 04A3 1280 JMP *CONVWRD RETURN 0000 1281 LPOOL  1PAGE 0036 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:22:52 'CRLF' SUBROUTINE 1283 ****************************** 1284 * 1285 * CRLF - OUTPUT CR/LF 1286 * 1287 * THIS SUBROUTINE WILL OUTPUT 1288 * AN ASCII CARRIAGE RETURN FOLLOWED 1289 * BY AN ASCII LINE FEED TO THE  1290 * CRT/TTY. 1291 * 1292 * CALLING SEQUENCE: 1293 *  JST CRLF 1294 * 1295 * CALLS: CALLED BY: 1296 *  OTTY DUMP 1297 * TSTITL 1298 *  1299 ****************************** 1300 * 04B1 0E0D 1301 CRLF ENT  04B2 090D 1302 COPY =CR:,A OUTPUT CR 04B3 BEF0 0524 1303 JST OTTY 04B4 090A 1304 COPY =LF:,A OUTPUT LF 04B5 BEEE 0524 1305 JST OTTY 04B6 9F7A 04B1 1306  JMP *CRLF 1307 * 0003 1308 LPOOL 04B7  04B8 0524 OTTY 04B9 1PAGE 0037 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:22:53 'IHEX' SUBROUTINE 1310 ******************************  1311 * 1312 * IHEX - INPUT HEXADECIMAL NUMBER 1313 * 1314 *  THIS SUBROUTINE WILL INPUT, THROUGH 1315 * THE CRT/TTY, AN ASCII-HEX VALUE WHICH  1316 * IT WILL CONVERT TO BINARY AND RETURN IT 1317 * IN THE X REGISTER.  1318 * 1319 * THIS SUBROUTINE IS EXITED UPON INPUT OF THE 1320 * FIRST NON ASCII-HEX CHARACTER WHICH IT 1321 * RETURNS IN THE A REGISTER 1322 *  1323 * CALLING SEQUENCE: 1324 * JST IHEX 1325 * 1326 * CALLS: CALLED BY: 1327 * IKB QUERIES 1328  * 1329 ****************************** 1330 * 04BA 0E0D 1331 IHEX ENT D  INPUT HEX VALUE (4-DIGIT) 04BB 0900 1332 COPY =0,A CLEAR VALUE AREA 04BC 87AC 04E9  1333 COPY A,IDCTM1 04BD 87AC 04EA 1334 COPY A,IDCTM3 AND COUNT 04BE BE97 04D6 1335 IHEX3 JST IKB GET A CHAR 04BF 8758 0498 1336 COPY A,IDCTM2 SAVE IT 04C0 0AD0 1337  SUB ='0',A CHECK FOR HEX 04C1 13D1 04D3 1338 JLT A,IHEX4 TERMINATOR 04C2 0AF7  1339 SUB =9,A ITS 0-9 04C3 12CD 04D1 1340 JLE A,IHEX1 ITS 0-9 04C4 0AF7  1341 SUB =9,A 04C5 0B01 1342 ADD =1,A 04C6 13CC 04D3 1343 JLT A,IHEX4  TERMINATOR 04C7 0AFB 1344 SUB =5,A 04C8 124A 04D3 1345 JGT A,IHEX4 TERMINATOR 04C9 0B0F 1346 ADD =:F,A ITS A-F 04CA 874D 0498 1347 IHEX2 COPY A,IDCTM2 SAVE HEX CHAR 04CB 839D 04E9 1348 COPY IDCTM1,A INCLUDE IT IN VALUE 04CC 0E31 1349 SHIFT A,LO,4 04CD B74A 0498 1350 OR IDCTM2,A 6 04CE 879A 04E9 1351 COPY A,IDCTM1 04CF DF9A 04EA 1352 IMS IDCTM3 BUMP COUNT 04D0 9E6D 04BE 1353 JMP IHEX3 GET NEXT CHAR 04D1 0B09 1354 IHEX1 ADD =9,A HEX 0-9 04D2 9E77 04CA 1355 JMP IHEX2 04D3 8344 0498 1356 IHEX4 COPY IDCTM2,A LOAD TERMINATOR IN 4 04D4 A394 04E9 1357 COPY IDCTM1,X LOAD VALUE IN X 04D5 9F64 04BA 1358 JMP *IHEX RETURN 1PAGE 0038 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:22:54 'IKB' SUBROUTINE 1360 ****************************** 1361 * 1362 * IKB - INPUT CHARACTER FROM CRT/TTY 1363 *  1364 * THIS SUBROUTINE WILL INPUT AN 1365 * ASCII CHARACTER FROM THE CRT/TTY  1366 * AND RETURN IT IN THE A REGISTER. 1367 * 1368 * CALLING SEQUENCE:  1369 * JST IKB 1370 * 1371 * CALLS: CALLED BY:  1372 * NONE TECH TEST 1373 * QUERIES 1374 * IDEC 1375 * IHEX  1376 * 1377 ****************************** 1378 * 04D6 0E0D 1379 IKB ENT INPUT TTY CHAR ROUTINE 04D7 A68F 04E7 1380 COPY X,IKBTMP SAVE XR 04D8 2EF3 1381 ROTATE X,LO,16 SAVE OV 04D9 A68E 04E8 1382 COPY X,IKBTM2 04DA 8290 04EB 1383 COPY =:8618,A START ECHO,NO INTERRUPT 04DB 02F9 1384 OUT A,DTTYDA%1;1 OUTPUT START & MODES 04DC A28F 04EC 1385 COPY =:100,X RESET CODE 04DD 01F9 1386 IN DTTYDA%1;1E ,A INPUT STATUS 04DE 0E39 1387 SHIFT A,RO,4 WORD READY TO OV 04DF 36BD 04DD 1388 JF  OV,$-2 IF WORD NOT READY 04E0 01F8 1389 IN DTTYDA%1,A GET WORD 04E1 22F9 1390  OUT X,DTTYDA%1;1 RESET TTY 04E2 187F 1391 AND =:7F,A INPUT CHAR AS 7-BIT ASCII 04E3 A284 04E8 1392 COPY IKBTM2,X RESTORE XR 04E4 2E03 1393 ROTATE X,LO,1 04E5 A281 04E7 1394 COPY IKBTMP,X RESTORE XR 04E6 9F6F 04D6 1395 JMP *IKB 1396 * 04E7 0000 1397 IKBTMP WORD 0 XR SAVE CELL 04E8 0000 1398 IKBTM2 WORD 0 OV SAVE CELL 1399 * 0004 1400 LPOOL 04E9 0862 IDCTM1 04EA 0860 IDCTM3 04EB 8618 04EC 0100 1PAGE 0039 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:22:56 MSGA SUBROUTINE 1402 ***********************************  1403 * 1404 * MSGA - PRINT ASCII MESSAGE 1405 * 1406 * THIS SUBROUTINE WILL PRINT AN 1407 * ASCII MESSAGE TO THE CRT/TTY. 1408 * THE LAST CHARACTER OF THE MESSAGE 1409 * MUST BE :FF. 1410 *  1411 * 1412 * CALLING SEQUENCE: JST MSGA 1413 * WORD MESSAGE ADDRESS 1414 * 1415 * 1416 * CALLS:  CALLED BY: 1417 * OTTY 1418 * 1419 * 1420 *********************************** 1421 * 04ED 0E0D 1422 MSGA ENT 04EE A68D 04FC 1423 COPY X,MSGA3 SAVE X-REG 04EF A37D 04ED 1424 COPY *MSGA,X GET MSG ADDR 04F0 2E01 1425 SHIFT X,LO,1 04F1 DE7B 04ED 1426 IMS MSGA BUMP FOR RETURN 04F2 0E25 1427 MSGA1 SBIT 2,S 04F3 8080 0000 1428 COPYB 0(X),A GET A CHAR 04F4 0E27 1429 RBIT 2,S 04F5 0CFF 1430 CLSN =:FF,A IS IT END OF MSG 04F6 9E83 04FA 1431  JMP MSGA2 YES EXIT 04F7 BEAC 0524 1432 JST OTTY PRINT A CHAR 04F8 2B01 1433  ADD =1,X BUMP PTR 04F9 9E78 04F2 1434 JMP MSGA1 GET NEXT CHAR 04FA A281 04FC  1435 MSGA2 COPY MSGA3,X RESTORE X-REG 04FB 9F71 04ED 1436 JMP *MSGA EXIT  1437 * 04FC 0000 1438 MSGA3 WORD 0 SAVE X-REG CELL 1439 * 0000 1440 LPOOL 1PAGE 0040 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:22:57 ODEC-OUTPUT DECIMAL NUMBER SUBROUTINE 1442 **********************************F * 1443 * 1444 * ODEC - PRINT DECIMAL NUMBER 1445 *  1446 * THIS SUBROUTINE WILL CONVERT THE 1447 * A-REG TO AN EQUIVALENT DECIMAL  1448 * NUMBER AND PRINT IT TO THE CRT/TTY 1449 * IF IT IS LESS THAN 10000. IF IT IS 1450 * GREATER THAN 10000 IT WILL PRINT 1451 * '****'.  1452 * 1453 * ENTER WITH NUMBER IN THE A-REG 1454 * 1455 * CALLING SEQUENCE: COPY =NUMBER,A 1456 * JST ODEC 1457 * 1458 * CALLS: MSGA 1459 * OTTY 1460 *  1461 ************************************ 1462 * 04FD 0E0D 1463 ODEC ENT  04FE A6A2 0521 1464 COPY X,ODECX SAVE X-REG 04FF E6A2 0522 1465 COPY Y,ODECY SAVE Y-REG 0500 8768 04E9 1466 COPY A,IDCTM1 SAVE BINARY VALUE 0501 BA9A 051C 1467 CSK A,ODECTBL+1 IS IT GREATER THAN 10,000? 0502 9E84 0507 1468 JMP ODECO NO, CONTINUE 0503 0000 1469  NOP 0504 BE68 04ED 1470 JST MSGA YES, PRINT '****' 0505 072E 1471 WORD STARS 0506 9E91 0518 1472 JMP ODEC2 EXIT 0507 8293 051B 1473 ODECO COPY  ODECTBL,A GET TABLE 0508 870F 0498 1474 COPY A,IDCTM2 0509 08FB 1475 COPY =-5,A  COUNT 5 DIGITS 050A 875F 04EA 1476 COPY A,IDCTM3 050B 835D 04E9 1477 ODEC1 COPY IDCTM1,A GET REMINDER 050C E30B 0498 1478 COPY IDCTM2,Y 050D 292F 1479 COPY ='0'-1,X 050E 8C40 0000 1480 SUB 0(Y),A DIVIDE IN DECIMAL 050F 2B01 1481 ADD =1,X ADD TO OUTPUT VALUE 0510 133D 050E 1482 JGE A,$-2 0511 8840 0000 1483 ADD 0(Y),A ADD BACK IN IF GONE NEGATIVE 0512 8756 04E9 1484 COPY A,IDCTM1 STORE REMINDER 0513 0020 1485 COPY X,A 0514 BE8F 0524 1486 JST OTTY PRINT CALCULATED DIGIT 0515 DF02 0498 1487 IMS IDCTM2 BUMP TABLE POINTER 0516 DF53 04EA 1488 IMS IDCTM3 AND COUNT 0517 9E73 050B 1489 JMP ODEC1 DO NEXT DIGIT 0518 A288 0521 1490 ODEC2 COPY ODECX,X RESTORE X-REG 0519 E288 0522 1491  COPY ODECY,Y RESTORE Y-REG 051A 9F62 04FD 1492 JMP *ODEC EXIT AFTER 5  1493 * 051B 051C 1494 ODECTBL WORD $+1,10000,1000,100,10,1 051C 2710 051D 03E8  1PAGE 0041 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:22:58 ODEC-OUTPUT DECIMAL NUMBER SUBROUTINE 051E 0064 051F 000A 0520 0001 0521 0000 14G 95 ODECX WORD 0 X-REG CELL 0522 0000 1496 ODECY WORD 0 Y-REG CELL  1497 * 0001 1498 LPOOL 0523 1PAGE 0042 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:22:58 OTTY SUBROUTINE 1500 *********************************** 1501 * 1502 * OTTY - PRINT ASCII CHARACTER  1503 * 1504 * THIS SUBROUTINE WILL PRINT AN ASCII CHARACTER 1505 *  IN THE LS BYTE OF THE A REGISTER TO CRT/TTY 1506 * 1507 * 1508 * ENTER WITH CHARACTER IN LS BYTE OF THE A REGSITER 1509 * 1510 *  1511 * CALLING SEQUENCE: COPY =CHARACTER,A 1512 * JST OTTY 1513 * 1514 * 1515 * CALLS: CALLED BY: 1516 *  1517 * 1518 ************************************ 1519 * 0524 0E0D  1520 OTTY ENT 0525 86BE 0564 1521 COPY A,OTTMP1 SAVE AR 0526 A6BE 0565 1522 COPY X,OTTMP2 SAVE XR 0527 A2C3 056B 1523 COPY =:8612,X START, REQUEST TO SEND, DON'T INTERRUPT 0528 22F9 1524 OUT X,DTTYDA%1;1 START PICO 0529 02F8 1525 OUT A,DTTYDA%1 SEND WORD 052A A241 04EC 1526 COPY =:100,X RESET CODE 1527 * 052B 0000 1528 NOP THIS IS FOR TIME DELAY BEFORE TRE (ACC NEEDS IT) 1529 * 052C 01F9  1530 IN DTTYDA%1;1,A INPUT STATUS 052D 0E49 1531 SHIFT A,RO,5 TREMPTY TO OV 052E 36BD 052C 1532 JF OV,$-2 IF STILL SET 052F 01F9 1533 IN DTTYDA%1;1,A INPUT STATUS 0530 0E49 1534 SHIFT A,RO,5 TREMPTY TO OV 0531 36BD 052F 1535 JF OV,$-2  IF STILL FULL 0532 22F9 1536 OUT X,DTTYDA%1;1 RESET PICO 0533 82B6 056A 1537 COPY LPFLAG,A GET LP FLAG 0534 116C 0561 1538 JEQ A,OTTY6 IF ZERO, EXIT 0535 BEC3 0579 1539 OTTY1 JST TIMER SET TIME 0536 82AD 0564 1540 COPY OTTMP1,A RESTORE AR 0537 02FE 1541  OUT A,DLPDA%1 START IT 0538 82B3 056C 1542 COPY =:8610,A LP START UP COMMAND 0539 02FF 1543 OUT A,DLPDA%1;1 START IT 053A 02FF 1544 OUT A,DLPDA%1;1 DITTO 053B 01FF 1545 OTTY2 IN DLPDA%1;1,A INPUT STATUS 053C 0E09 1546 SHIFT A,RO,1 SHIFT 'BUSY BIT' TO OV 053D 36DF 055D 1547 JF OV,OTTY5 IF NOT BUSY, EXIT 053E BEB1 0570 1548 JST TIME  DO DELAY 053F 9E7B 053B 1549 JMP OTTY2 LOOP BACK IF NOT DONE 0540 82A3 0564 1550 COPY H  OTTMP1,A GET ORIGINAL AR CONTENTS 0541 86A4 0566 1551 COPY A,OTTMP3 SAVE IT 0542 82A7 056A 1552 COPY LPFLAG,A GET LP FLAG 0543 86A3 0567 1553 COPY A,OTTMP4 SAVE IT 0544 82A0 0565  1554 COPY OTTMP2,A GET ORIGINAL XR CONTENTS 1PAGE 0043 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:23:00 OTTY SUBROUTINE 0545 86A2 0568 1555 COPY A,OTTMP5  SAVE IT 0546 825D 0524 1556 COPY OTTY,A GET RETURN ADDRESS 0547 86A1 0569 1557 COPY A,OTTMP6 SAVE IT 0548 0900 1558 COPY =0,A SET NEW LP FLAG 0549 86A0 056A 1559 COPY A,LPFLAG STORE NEW LP FLAG 054A A2A2 056D 1560 COPY =LPMSG*2,X GET ERROR MESSAGE ADDRESS-'LP TIMEOUT' *W* (0000/0000) BA *W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W*W 054B 0E25 1561 OTTY3 SBIT 2,S SET BYTE MODE 054C 8080 0000 1562 COPYB 0(X),A GET CHAR 054D 0E27 1563 RBIT 2,S SET WORD MODE 054E 0CFF 1564 CLSN  A,=:FF IF END OF MESSAGE, EXIT 054F 9E83 0553 1565 JMP OTTY4 0550 BE53 0524 1566 JST  OTTY DISPLAY ON CRT/TTY 0551 2B01 1567 ADD =1,X INC. MESSAGE ADDRESS 0552 9E78 054B 1568 JMP OTTY3 LOOP FOR MORE 0553 BE02 04D6 1569 OTTY4 JST IKB INPUT CHAR FROM KEYBOARD 0554 8294 0569 1570 COPY OTTMP6,A GET RETURN ADDR 0555 864E 0524 1571 COPY A,OTTY  SET IT 0556 8290 0567 1572 COPY OTTMP4,A GET ORIGINAL LP FLAG 0557 8692 056A 1573 COPY A,LPFLAG SET IT 0558 828F 0568 1574 COPY OTTMP5,A GET ORIGINAL XR 0559 868B 0565 1575  COPY A,OTTMP2 SET IT 055A 828B 0566 1576 COPY OTTMP3,A GET ORIGINAL AR 055B 8688 0564 1577  COPY A,OTTMP1 SET IT 055C 9E58 0535 1578 JMP OTTY1 055D A20E 04EC 1579 OTTY5 COPY  =:100,X GET LP RESET COMMAND 055E 22FF 1580 OUT X,DLPDA%1;1 RESET LP 055F 2E09 1581  SHIFT X,RO,1 WAST SOME TIME 0560 31BE 055F 1582 JNE X,$-1 DITTO 0561 8282 0564 1583 OTTY6 COPY OTTMP1,A RESTORE AR 0562 A282 0565 1584 COPY OTTMP2,X RESTORE XR 0563 9F40 0524 1585 JMP *OTTY RETURN TO CALLER 1586 * 0564 0000 1587 OTTMP1 WORD 0  AR SAVE CELL 0565 0000 1588 OTTMP2 WORD 0 XR SAVE CELL 0566 0000 1589 OTTMP3 WORD 0 SAVE AR 0567 0000 1590 OTTMP4 WORD 0 SAVE LP FLAG 0568 0000 1591 OTTMP5 WORD 0 SAVE XR 0569 0000 1592 OTTMP6 WORD 0 SAVE RETURN ADDRESS 056A 0000  1593 LPFLAG WORD 0 LP FLAG 1594 * 0005 1595 LPOOL I  056B 8612 056C 8610 056D 0E92 056E 056F 1PAGE 0044 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:23:01 TIME SUBROUTINE 1597 *********************************** 1598 * 1599 * TIME - TIME DELAY ROUTINE, TAKES 1600 * APPROXIMATELY 7 SECONDS IF 1601 * TIMING CELLS ARE INITIALIZED BY 1602 * 'TIMER'. 1603 * 1604 *  CALLING SEQUENCE: JST TIME 1605 * JMP ? TIME NOT FULLY EXPIRED R 1606 * JMP ? TIME FULLY EXPIRED R+1 1607 * 1608 * CALLS:  CALLED BY: 1609 * NONE OTTY 1610 *  1611 *********************************** 1612 * 0570 0E0D 1613 TIME ENT  0571 DE85 0577 1614 IMS TC1 BUMP LSP TIMING CONSTANT 0572 9F7D 0570 1615 JMP *TIME EXIT 0573 DE84 0578 1616 IMS TC2 BUMP MSP TIMING CONSTANT 0574 9F7B 0570 1617 JMP *TIME EXIT TO CALL + 1 0575 DE7A 0570 1618 IMS TIME SPECIAL RETURN..EXPIRED 0576 9F79 0570 1619 JMP *TIME EXIT 1620 * 0577 0000 1621 TC1 RES 1,0 0578 0000 1622 TC2 RES 1,0 1623 * 0000 1624 LPOOL  1PAGE 0045 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:23:02  TIMER SUBROUTINE 1626 *********************************** 1627 * 1628 * TIMER - INITIALIZES TIMING CELLS 1629 * FOR 'TIME'. 1630 *  1631 * CALLING SEQUENCE: JST TIMER 1632 * 1633 * CALLS:  CALLED BY: 1634 * NONE OTTY 1635 *  1636 *********************************** 1637 * 0579 0E0D 1638 TIMER ENT  057A 0900 1639 COPY =0,A SET LOW WORD 057B 867B 0577 1640 COPY A,TC1 057C 08F9 1641 COPY =-7,A SET HIGH WORD 057D 867A 0578 1642 COPY A,TC2 057E 9F7A 0579 1643 JMP *TIMER EXIT 1644 * 0000 1645 LPOOL 1PAGE 0046 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:23:03 QUERIES  1647 ************************************ 1648 * 1649 * QUERY: DEVICE ADDRESS (01-1F[01])? 1650 * 1651 * SELECTION-:01 TO :1F 1652 * J  DEFAULT IS :01 1653 * 1654 ************************************ 1655 * 057F 0E0D 1656 DEVADRR ENT 00000580 1657 QURYDA1 EQU $ 0580 0900 1658 COPY =0,A 0581 8799 059B 1659 COPY A,IPFLAG RESET INPUT FLAG 0582 0908 1660  COPY =8,A DEFAULT OF 1 SHIFTED LEFT 3 0583 8798 059C 1661 COPY A,DA SAVE IT 0584 BF98 059D 1662 JST MSGA OUTPUT QUERY 0585 064E 1663 WORD DEVMSG 0586 BF97 059E  1664 JST IHEX GET RESPONSE 0587 314F 0597 1665 JEQ X,QURYDA3 IF ZERO, SEE WHY 0588 DF92 059B 1666 IMS IPFLAG SET INPUT FALG 0589 2D00 1667 CSK X,=0 DO RANGE CHECK 058A 9E75 0580 1668 JMP QURYDA1 BAD INPUT (LESS THAN 0) 058B 2D1F 1669 CSK  X,=:1F 058C 9E81 058E 1670 JMP $+2 WITHIN RANGE 058D 9E72 0580 1671 JMP QURYDA1 BAD INPUT (LARGER THAN :1F) 058E 2E20 1672 SHIFT X,L,3 LINE IT UP 058F A78C 059C 1673  COPY X,DA STORE INPUT 1674 QURY DA2,DA4,DA1,DA1,DA1,DA1 00000590 1674+ QURYDA2 EQU $ 0590 BF8E 059F 1674+ JST CHRIN 0591 9E88 059A 1674+ JMP QURYDA4 0592 9E6D 0580 1674+ JMP QURYDA1 0593 9E6C 0580 1674+ JMP QURYDA1 0594 9E6B 0580 1674+ JMP QURYDA1 0595 9E6A 0580 1674+ JMP QURYDA1 00000006  1674+ IFT 6< 1674+ ENDC 0596 9E69 0580 1675  JMP QURYDA1 ANYTHING ELSE IS BAD 00000597 1676 QURYDA3 EQU $ 0597 8388 05A0 1677 COPY IDCTM3,A GET INPUT COUNT 0598 1137 0590 1678 JEQ A,QURYDA2 IF ZERO, DEFAULT 0599 9E66 0580 1679 JMP QURYDA1 0000059A 1680 QURYDA4 EQU $ 059A 9F64 057F 1681 JMP *DEVADRR  1682 * 0006 1683 LPOOL 059B 085F IPFLAG 059C 084D DA  059D 04ED MSGA 059E 04BA IHEX 059F 0486 CHRIN 05A0 0860 IDCTM3 1684 *  1PAGE 0047 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:23:04 QUERIES  1686 ************************************ 1687 * 1688 * QUERY: SELECT MEMORY SIZE (1-:10 [4])? 1689 * 1690 * SELECTION-:01 TO :10 1691 * DEFAULT IS :04 1692 * 1693 ************************************  1694 * 05A1 0E0D 1695 GETMEM ENT 000005A2 1696 QURYM1 EQU $ 05A2 0900  1697 COPY =0,A 05A3 8777 059B 1698 COPY A,IPFLAG RESET INPUT FLAG 05A4 0904 16K 99 COPY =4,A DEFAULT IS 512KB 05A5 0EA0 1700 SHIFT A,L,11 PUT IT IN THE HI-ORDER 5 BITS 05A6 8797 05BE 1701 COPY A,MARKS SAVE IT 05A7 BF75 059D 1702 JST MSGA  OUTPUT QUERY 05A8 065F 1703 WORD MEMSZ 05A9 BF74 059E 1704 JST IHEX GET RESPONSE 05AA 314F 05BA 1705 JEQ X,QURYM3 IF ZERO, SEE WHY 05AB DF6F 059B 1706 IMS IPFLAG  SET INPUT FALG 05AC 2D00 1707 CSK X,=0 DO RANGE CHECK 05AD 9E74 05A2 1708 JMP QURYM1 BAD INPUT (LESS THAN 0) 05AE 2D10 1709 CSK X,=:10 05AF 9E81 05B1 1710 JMP $+2 WITHIN RANGE 05B0 9E71 05A2 1711 JMP QURYM1 BAD INPUT (LARGER THAN :10) 05B1 2EA0 1712 SHIFT X,L,11 LINE IT UP 05B2 A78B 05BE 1713 COPY X,MARKS STORE INPUT  1714 QURY M2,M4,M1,M1,M1,M1 000005B3 1714+ QURYM2 EQU $ 05B3 BF6B 059F 1714+  JST CHRIN 05B4 9E88 05BD 1714+ JMP QURYM4 05B5 9E6C 05A2 1714+ JMP  QURYM1 05B6 9E6B 05A2 1714+ JMP QURYM1 05B7 9E6A 05A2 1714+ JMP QURYM1  05B8 9E69 05A2 1714+ JMP QURYM1 00000006 1714+ IFT 6<  1714+ ENDC 05B9 9E68 05A2 1715 JMP QURYM1 ANYTHING ELSE IS BAD  000005BA 1716 QURYM3 EQU $ 05BA 8365 05A0 1717 COPY IDCTM3,A GET INPUT COUNT 05BB 1137 05B3 1718 JEQ A,QURYM2 IF ZERO, DEFAULT 05BC 9E65 05A2 1719 JMP QURYM1 000005BD 1720 QURYM4 EQU $ 05BD 9F63 05A1 1721 JMP *GETMEM 1722 * 0001 1723  LPOOL 05BE 084E MARKS 1724 * 1PAGE 0048 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:23:05 QUERIES 1726 ************************************ 1727 * 1728 * QUERY: ERROR REPORT - DETAILED OR BRIEF (D,[B])?  1729 * 1730 * SELECTION - D OR B 1731 * DEFAULT IS B  1732 * 1733 ************************************ 1734 * 05BF 0E0D 1735 EREPORT ENT 000005C0 1736 QURYE1 EQU $ 05C0 0900 1737 COPY =0,A 05C1 8759 059B 1738 COPY A,IPFLAG RESET INPUT FLAG 05C2 090B 1739 COPY =:B,A DEFAULT IS BRIEF 05C3 8798 05DC 1740 COPY A,EFLAG SAVE IT 05C4 BF58 059D 1741 JST MSGA OUTPUT QUERY 05C5 06F0 1742 WORD RPTMSG 05C6 BF57 059E 1743 JST IHEX GET RESPONSE 05C7 3150 05D8 1744 JEQ X,QURYE5 IF ZERO, SEE WHY 05C8 DF52 059B 1745 IMS IPFLAG L  SET INPUT FLAG 05C9 2D0B 1746 CSK X,=:B 05CA 9E75 05C0 1747 JMP QURYE1 < 05CB 9E81 05CD 1748 JMP QURYE2 > 05CC 9E83 05D0 1749 JMP QURYE3 = 000005CD 1750 QURYE2 EQU $ 05CD 2D0D 1751 CSK X,=:D 05CE 0000 1752 NOP  05CF 9E70 05C0 1753 JMP QURYE1 BAD INPUT 000005D0 1754 QURYE3 EQU $ 05D0 A78B 05DC 1755 COPY X,EFLAG 1756 QURY E4,E6,E1,E1,E1,E1 000005D1 1756+ QURYE4 EQU $ 05D1 BF4D 059F 1756+ JST CHRIN 05D2 9E88 05DB 1756+ JMP QURYE6  05D3 9E6C 05C0 1756+ JMP QURYE1 05D4 9E6B 05C0 1756+ JMP QURYE1 05D5 9E6A 05C0 1756+ JMP QURYE1 05D6 9E69 05C0 1756+ JMP QURYE1 00000006 1756+  IFT 6< 1756+ ENDC 05D7 9E68 05C0 1757 JMP QURYE1 ANYTHING ELSE IS BAD 000005D8 1758 QURYE5 EQU $ 05D8 8347 05A0 1759 COPY IDCTM3,A GET INPUT COUNT 05D9 1137 05D1 1760 JEQ A,QURYE4 IF ZERO, DEFAULT 05DA 9E65 05C0 1761  JMP QURYE1 000005DB 1762 QURYE6 EQU $ 05DB 9F63 05BF 1763 JMP *EREPORT  1764 * 0001 1765 LPOOL 05DC 0859 EFLAG 1766 * 1PAGE 0049 MACRO (F530) MEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-10 B000 1986/03/17 08:23:07 QUERY MESSAGES  1768 ***************************************** 1769 * 1770 * QUERY MESSAGES 1771 * 1772 ***************************************** 1773 *  18CB 18EB 1774 OPTIONS +:0020 FIRSTONLY 000005DD 1775 TITLE EQU $ 05DD 0C0D 1776 BYTE :0C,CR:,LF:,' 53988 DIAGNOSTIC - B000',CR:,LF:,CR:,LF: 05F0 0D0A 1777 BYTE CR:,LF: 05F1 2054 1778 BYTE ' THE CONTENTS HEREOF ARE PROPRIETARY TO COMPUTER AUTOMATION, INC 0611 0D0A  1779 BYTE CR:,LF:,' AND SHALL NOT BE REPRODUCED OR USED WITHOUT CA"S PRIOR' 062E 0D0A 1780 BYTEIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIOS4 MB086031914102896860319141028 860319141028 MF98820 VOLMEMORY DIAGNOSTIC 53988/55005 MEMORY MAPPING 84-93988-20 B000