IMD 1.16: 2/09/2008 12:57:54 84-93706-xx b100 f70602 scout floppy disk controller isolite test, boot, and id programs (listings) 84/3/12    @0|)wwЀЀtQql)  " }gA `_l MIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIOS4 MF284030813440900840308134409 840308134409@mF70602 VOLSCOUT FLOPPY DISK CONTROLLER ISOLITE TEST, BOOT, AND ID PROGRAMS LISTING FILES 84-93706-XX B100   IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII_l MiGyy GGG`HZ@ b G`^Y e IQ BBp@;:9 :7P@ G:پN 8!0. * C'xC# b# }B!9 @0DAJL w+™ЀЀΖQA1"   i ž} š} @EEFF)DEۄF8 џ} ԟ} ̟} * `jUBBI,v BI, # @ G9H@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:: SYS"iwvc Bc A@6<# Ic B# gIjHc r1PAGE 0001 MACRO (E000) UFDC ISOLITE ROM BOARD ID FILE (FILE 2, 84-93706-22 A0) 1980/10/06 10:34:11.00 0002 *** 0003 * 0004 * THIS PROGRAM CONTAINS THE SCOUT UFDC (54124) ISOLITE ROM  0005 * BOARD IDENTIFICATION FILE (FILE NUMBER TWO IN THE ISOLITE ROM) 0006 * 0007 * THIS IS USED SO THAT THE USER CAN FIND THE BOARD I.D. OF THE 0008 * UFDC BOARD IN HIS SYSTEM SO THAT HIS PROGRAM CAN LOAD THE BOOT FILE 0009 * FROM THE ISOLITE ROM. FILE THREE IS THE BOOT FILE 0010 * WITH NO-EXECUTE SPECIFIED IN THE ROM HEADER BLOCK (POINTS 0011 * TO SAME CODE AS THE AUTO-LOAD BOOT FILE (FILE ONE)). 0012 * 0013 *** 0000 0000 0014 UFDC:ID WORD 0 FIRST WORD OF TYPE FILE IS 0 0001 0200 0015 WORD :0200 02=FLOPPY 00=54124 0002 0000 0016  WORD 0 FILL OUT THE THREE WORD BLOCK 0017 END 0000 ERRORS (0000) 0000 WARNINGS (0000) EXECUTE SPECIFIED IN THE ROM HEADER BLOCK (POINTS 0011 * TO SAME CODE AS THE AUTO-LOAD BOOT  FILE (FILE ONE)). 0012 * 0013 *** 0000 0000 0014 UFDC:ID WORD 0 FIRST WORD OF TYPE FILE IS 0 0001 0200 0015 WORD :0200 02=FLOPPY 00=54124 0002 0000 0016 1PAGE 0001 MACRO (E000) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-23 A0) 1980/10/06 10:23:11.00 GENERAL DESCRIPTION 0003 ********************************************************************** 0004 * * 0005 * SCOUT UNIVERSAL FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTIC * 0006 *  * 0007 ********************************************************************** 0008 *  * 0009 * COPYRIGHT 1980, C O M P U T E R A U T O M A T I O N , I N C . * 0010 * ALL RIGHTS RESERVED. *  0011 * * 0012 ********************************************************************** 0014 * PROGRAM DESCRIPTION:  0015 * 0016 * THIS PROGRAM IS AN ISOLITE DIAGNOSTIC FOR THE SCOUT 0017 * UNIVERSAL FLOPPY DISK CONTROLLER BOARD (54124). 0018 * THIS CONTROLLER WILL HANDLE THE 8" DISK FLOPPY DRIVES 0019 * AS WELL AS 5 1/4 " MINI-FLOPPY DRIVES,THE CONTROLLER 0020 * PROVIDES A 'SWITCH' BIT IN A REGISTER TO INTERCHANGE 0021 * FLOPPY DRIVES BANKS. MUST OF THE ISOLITE DIAGNOSTICS 0022 * WILL BE DONE IN THE MINI-FLOPPY BANK. 0023 * THE MINI-FLOPPY BANK ALLOWS ONLY THREE (3) DISK DRIVES 0024 * TO BE CONNECTED EVEN THOUGH THERE ARE 4 LINES AVAILABLE.  0025 * THE ISOLITE DIAGNOSTICS TAKES ADVANTAGE OF THIS UNUSED 0026 * FOURTH DRIVE AS WELL AS THE PARTICULAR FEATURE THAT 0027 * THE LINES FROM THE MINI-FLOPPY DISK DRIVES ARE ALWAYS  0028 * IN THE 'READY' STATE REGARDLESS IF THERE IS A DRIVE 0029 * CONNECTED OR NOT. 0030 * 0031 * CONSOLE DATA REGISTER RUNTIME CODES: 0032 *  0033 * :0070 - INITIALIZATION 0034 * :0071 - DMA LOGIC TEST ('UIM' INCLUDED)  0035 * :0072 - INTERRUPT LOGIC TEST,'SENSE INTERRUPT STATUS'(SIS) 0036 * :0073 - 8" BANK,'SENSE DRIVE STATUS' COMMAND 0037 * 0038 ********************************************************************** 1PAGE 0002 MACRO (E000) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-23 A0) 1980/10/06 10:23:17.00 EQUATES,RESERVED WORDS AND MACROS 0041 * LOCATIONS :0-:1FF ARE FILLED WITH THE INSTRUC TION: JMP 0(Y) 0042 * IN ORDER TO CATCH POSSIBLE INVALID INTERRUPTS FROM THE 0043 *  CONTROLLER BOARD. MEMORY LOCATIONS ARE EXCHANGE WITH A 0044 * VALID JUMP (THROUGH REG-X) WHEN THE SPECIFIC INTERRUPT 0045 * LOCATION IS BEING TESTED. 0046 * 0047 *  AN UNEXPECTED INTERRUPT FROM THE CONTROLLER WILL BE ROUTED 0048 * THRU LOC. INDICATED IN REG.Y TO THE ERROR HANDLING ROUTINE. 0049 * 0050 * 00000000 0051 DMAPTR EQU 0  REG. & FC - WRITE DMA ADDR.POINTER 00000001 0052 INTVADR EQU 1 REG. & FC - WRITE INT.VECTOR ADDR. 00000003 0053 MODE EQU 3 " " - WRITE MODE REGISTER 0054 * 00000000 0055 RESULT EQU 0 N/A FC - READ UFDC RESULT REG 00000001 0056 MAINSTAT EQU 1  N/A FC - READ UFDC MAIN STATUS REG 0057 * 00000100 0058 DMA:IN EQU :100 CMMD OPCODE BIT 8 INDICATES DIRECTION 00000000 0059 DMA:OUT EQU 0 CMND OPCODE BIT 8 - OFF FOR OUTPUT 00000001 0060 CMD:FC EQU 1 FC IN 'OUT' COMMAND(1=COMMAND) 00000000 0061 SPEC:FC EQU 0  FC IN 'OUT' COMMAND(0=SPEC.REG 0062 * 00000020 0063 FAKEDMA EQU :20 BIT 5 - TO FAKE DMA OPERATION 0064 * 0000 0000 0065 VIPBITS WORD 0 TO ISOLATE BITS TO BE COMPARED IN MAIN STAT 0001 AAAA 0066 AAAA WORD :AAAA CONSTANT USED IN DMA BUFFER 0002 0000 0067 LOOPCT  WORD 0 SAVE DIFFERENT LOOP COUNTS 0003 0144 0068 BUFFADR WORD BUFFER DMA BUFF.ADDR..INTIALIZED TO :AAAA 0004 0000 0069 PATTERN WORD 0 INPUT TO ROUTINE,EXPECTED VALUE IN MAIN STATUS 0005 0000  0070 FOURBITS WORD 0 TO SET FOUR BITS EXPECTED FROM EACH DRIVE 0006 0000 0071 TEMP01 WORD 0  TEMPORARY AN COMMON USE IN PROGRAM 0007 0000 0072 SAVEJUMP WORD 0 TO SAVE JUMP TO TAKE PLACE ON INTERRUPT 0008 0000 0073 TEMP02 WORD 0 TEMPORARY AND COMMON USE IN PROGRAM 0009 F448 0074 D3000 WORD -3000 SOFTWARE TIME OUT ON EXPECTING INTERRUPT 000A 0000 0075 CDRCODE WORD 0 TO KEEP TRACK OF CDR CODE 000B 0000 0076 SPEC1 WORD 0 000C 7E00 0077 C:7E00 WORD :7E00 REGULAR TYPE ERROR CODE 1PAGE 0003 MACRO (E000) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-23 A0) 1980/10/06 10:23:22.75 EQUATES,RESERVED WORDS AND MACROS 0080 ********************************************************************** 0081 * MACRO SAL - GENERATES THE OPCODE FOR SCOUT SAL INSTRUCTION * 0082 ********************************************************************** 0084 MACRO SAL  0085 SALCOD: SET 0 0086 IFT #(1,?) 0087 SALCOD: SET #(1)&: 000F%4 0088 ENDC 0089 IFT #(2,?) 0090 SALCOD: SET  #(2)&:000F++SALCOD: 0091 ENDC 0092 SALCOD: SET :6600++SALCOD:  0093 WORD SALCOD: 0094 ENDM 1PAGE 0004 MACRO (E000) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-23 A0) 1980/10/06 10:23:24.50 INITIALIZATION,ERROR & MISC.ROUTINES 0000000D 0097 START EQU $ 000D 4940 0098 COPY =:40,Q 000E 3040 0099 COPY Q,S 000F 0309  0100 UIS UPDATE STATUS REGISTER 0010 18FC 0101 AND =:FC,A 0011 2025 0102 XOR X,X CLEAR X-REG 0012 2202 0103 OUT X,2 TURN OFF AUTOLOAD INDICATOR 0013 2901 0104 COPY =1,X 0014 2200 0105 OUT X,0 TURN ON SENSE SWITCH INDICATOR 0015 2970 0106 COPY =:0070,X DMA LOGIC TEST CODE 0016 A673 000A 0107 COPY X,CDRCODE TO KEEP TRACK CODE IN CDR 0017 2404 0108 SELP X,4 DISPLAY IT IN CONSOLE DAT REGISTER 0018 34BF 0018 0109 IJNE X,$ 0110 * 0111 * SET UP VALUE IN CONSOLE DATA REGISTER 0112 * 0113 * DETERMINE UNIMPLEMENTED MEMORY (IF ANY) 0114 * IF 'DMA:UIM' = 0 ,THEN THERE CAN NOT BE AN 'UIM' TEST. 0115 * 0019 C292 002C 0116 COPY  JST1,Q INSTRUCTION: JST *$+1 001A 298A 0117 COPY =:8A,X POINT TO UIM TRAP LOCATION 001B C480 0000 0118 COPY Q,0(X) SAVE IN TRAP LOCATION 001C C291 002E 0119 COPY MEM:ADDR,Q UIM HANDLING ROUTINE ADDRESS 001D C481 0001 0120 COPY Q,1(X) SAVE IN TRAP LOC. :8B 001E A2D0 006F 0121  COPY =:100,X INCREMENT MEMORY 256 WDS EACH TIME 001F C080 0000 0122 LOOP1 COPY 0(X),Q TRY TO READ THE LOCATION 0020 31C1 0022 0123 JNE X,$+2 0021 9E82 0024 0124 JMP NO:UIM IF X=0 THEN IT ROLLED OVER - 64K 0022 AACC 006F 0125 ADD =:100,X OTHERWISE, KEEP INCREMENTING 0023 9E7B 001F 0126 JMP LOOP1 UNTIL IT TRAPS 0127 * 00000024 0128 FOUND: EQU $ 0024 A661 0006 0129 NO:UIM COPY X,TEMP01 SAVE UN-IMPLEMENTED LOC. FOR LATER USE 0025 E2CA 0070 0130 COPY =512,Y FILL SPACE (0-:1FF) WITH JMP 0(Y) 0026 C288 002F 0131 COPY JST0Y,Q 0027 A2CA 0072 0132 COPY =-512,X 0028 C4C0 0000 0133 FILLOOP COPY Q,0(X,Y) FILL 0029 34BE 0028 0134 IJNE X,FILLOOP  002A BEBA 0065 0135 JST FILLBUF THROUGH 002B 9EC9 0075 0136 JMP DMASTART START DMA TESTING 002C 9F80 002D 0138 JST1 JMP *$+1 FOR 'UIM' TRAP 0000002D 0139 BADJMP1 EQU $ 1PAGE 0005 MACRO (E000) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-23 A0) 1980/10/06 10:23:30.00 INITIALIZATION,E RROR & MISC.ROUTINES 0000002D 0140 BADJMP2 EQU $ 002D 0031 0141 BADJMP3 WORD ERROR001 UNEXPECTED VECTOR DURING TEST 002E 0024 0142 MEM:ADDR WORD FOUND: VECTOR ADDRESS FOR UIM TRAP 002F BC40 0000 0143  JST0Y JST 0(Y) REG.Y MUST REMAIN WITH ERROR ADDRESS 0030 BC80 0000 0144 JST0X JST 0(X) REG.X WILL CONTAIN VALID ADDRESS 00000031 0145 ERROR001 EQU $ 00000031 0146 ERROR002 EQU $ 00000031 0147 ERROR003 EQU $ 00000031 0148 ERROR004 EQU $ WILL CONTAIN RETURN ADDRESS 0031 0E0D  0149 ERROR005 ENT 0032 8257 000A 0150 COPY CDRCODE,A 0033 180F 0151 AND =:F,A 0034 B657 000C 0152 OR C:7E00,A 0035 0404 0153 SELP A,4 0036 827A 0031 0154 COPY ERROR005,A AND USER CAN VIEW IT IN REG-A. 0037 0E0D 0155 HLT 0038 9FB8 0071 0156 JMP DIAG:END 0157 * 0158 * 0159 * DISPLAY CONSOLE DATA REGISTER  0160 * 0039 0E0D 0161 DISPLAY ENT 003A DE4F 000A 0162 IMS CDRCODE 003B C24E 000A 0163  COPY CDRCODE,Q 003C 4404 0164 SELP Q,4 003D 9F7B 0039 0165 JMP *DISPLAY 1PAGE 0006 MACRO (E000) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-23 A0) 1980/10/06 10:23:32.25 INITIALIZATION,ERROR & MISC.ROUTINES 0168 * ROUTINES TO TAKE CARE OF MUST REPETIVE GROUP OF CODING. 0169 *  1) SENDING THE COMMAND & SPEC.REGISTER 0170 * 2) SENDING THE MODE REGISTER 0171 * 3) WAITING FOR A PARTICULAR PATTERN FROM 0172 * THE MAIN STATUS REGISTER. 003E 0E0D 0173 COMMAND ENT 003F 030A 0174 XNX A 0040 4201 0175 OUT Q,CMD:FC 0041 9F7C 003E 0176 JMP *COMMAND 0177 * 0042 0E0D 0178 SPECIFIC ENT 0043 030A 0179  XNX A 0044 4200 0180 OUT Q,SPEC:FC SEND SPECIFICATION REGISTER 0045 9F7C 0042 0181  JMP *SPECIFIC 0182 * 0046 0E0D 0183 SENDWAIT ENT 0047 BE76 003E 0184 JST COMMAND SEND WHICH EVER COMMAND 0048 C2AA 0073 0185 COPY =:190,Q STATUS REQUIRED TO SEND SPECIFIC.REG. 0049 BE89 0053 0186 JST WAITPATT WAIT FOR PROPER VALUE IN MAIN STATUS 004A 9F7B 0046 0187 JMP *SENDWAIT TIME OUT 004B C23F 000B 0188 COPY SPEC1,Q GET VALUE TO SEND AS 1RST SPEC.REGISTER 004C BE75 0042 0189 JST SPECIFIC 004D DE78 0046 0190 IMS SENDWAIT 004E 9F77 0046 0191  JMP *SENDWAIT 0192 * 004F 0E0D 0193 SENDMODE ENT 0050 030A 0194 XNX A 0051 4403 0195 SELP Q,MODE 0052 9F7C 004F 0196 JMP *SENDMODE 0197 *  0198 * MOVE PATTERN TO BE CHECKED TO REG-Q,THEN WAIT 0199 * FOR STATUS IN MAIN REGIST ER 0200 * 0053 0E0D 0201 WAITPATT ENT 0054 C62F 0004 0202 COPY Q,PATTERN 0055 BE82 0058 0203 JST WAITSTAT 0056 BE5A 0031 0204 JST ERROR001 DO NOT RETURN ON ERROR 0057 9F7B 0053 0205 JMP *WAITPATT 1PAGE 0007 MACRO (E000) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-23 A0) 1980/10/06 10:23:36.75 INITIALIZATION,ERROR & MISC.ROUTINES 0208 * 0209 * THIS ROUTINE WILL WAIT TO ALLOW SUFFICIENT TIME 0210 * FOR THE CONTROLLER TO UPDATE THE MAIN STATUS  0211 * REGISTER WITH THE PROPER VALUE. 0212 * 0058 0E0D 0213 WAITSTAT ENT 0059 4801  0214 COPY =-255,Q 005A C627 0002 0215 COPY Q,LOOPCT WAIT FOR DIR & BUSY 005B 030A  0216 WAITLOOP XNX A 005C 4101 0217 IN MAINSTAT,Q 005D D622 0000 0218 AND VIPBITS,Q GET MAIN STATUS,'AND' WITH PERTINENT 005E DA25 0004 0219 XOR PATTERN,Q BITS,COMPARE WITH XOR 005F 5143 0063 0220 JEQ Q,RETNRDY 0060 DE21 0002 0221 IMS LOOPCT 0061 9E79 005B 0222 JMP  WAITLOOP 0062 9F75 0058 0223 JMP *WAITSTAT ERROR RETURN 0063 DE74 0058 0224 RETNRDY IMS WAITSTAT RET +1 ,NORMAL 0064 9F73 0058 0225 JMP *WAITSTAT 0226 * 0227 *  THIS ROUTINE WILL FILL THE BUFFER WITH 'AAAA'S 0065 0E0D 0228 FILLBUF ENT 0066 28C0 0229 COPY =-64,X 0067 A61A 0002 0230 COPY X,LOOPCT 0068 A21A 0003 0231 COPY BUFFADR,X 0069 C217 0001 0232 COPY AAAA,Q 006A C480 0000 0233 LOOPFILL COPY Q,0(X) 006B 2B01 0234 ADD =1,X 006C DE15 0002 0235 IMS LOOPCT 006D 9E7C 006A 0236 JMP LOOPFILL 006E 9F76 0065 0237 JMP  *FILLBUF 0006 0238 LPOOL 006F 0100 0070 0200 0071 0133 DIAG:END 0072 FE00 0073 0190 0074 1PAGE  0008 MACRO (E000) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-23 A0) 1980/10/06 10:23:39.25 DMA LOGIC TEST  0240 * 0241 * D M A P S E U D O T E S T 0242 * 0243 * THE ASSUMPTION IS MADE THAT THE DMA LOGIC MAY VERY WELL BE TESTED 0244 * BY USING BIT 5 IN THE MODE REGISTER. SETTING AND RESETTING THIS 0245 * BIT ALLOWS TO SEND OR RECEIVE BYTE AT A TIME. IT IS REQUIRED  0246 * TO SEND THE DMA BUFFER ADDRESS AND A COMMAND REGISTER INDICATING 0247 * INPUT OR OUTPUT DIRECTION PREVIOUS TO OPERATING WITH THE BIT 0248 * MENTIONED. THE DMA BYTE COUNT IS WORTHLESS IN THIS CASE.  0249 * 0250 * PREVIOUS TO SENDING A DMA BUFFER ADDRESS TO THE CONTROLLER, 0251 * THE 'UIM' BIT IN THE MAIN STATUS REGISTER IS UNPREDICTABLE. 0252 * AFTER THE DMA BUFFER ADDRESS IS SENT TO THE CONTROLLER, IT 0253 * SHOULD SET THE 'UIM' BIT IN THE MAIN STATUS REGISTER . 0254 * THE 'UIM ' BIT STATUS WILL REMAIN VALID AS LONG AS THE CONTROLLER 0255 * IS NOT RESET AT WHICH TIME IT WILL BECOME UNPREDICTABLE 0256 * AGAIN. 0257 * 00000075 0258 DMASTART EQU $ 0075 BE43 0039 0259 JST DISPLAY DISPLAY CDR CODE (1ST) 0076 E236 002D 0260 COPY BADJMP1,Y BAD JUMP WHILE DOING DMA 0077 C278 0070 0261 COPY =:200,Q TO ISOLATE 'UIM' BIT IN MAIN STATUS 0078 C607 0000 0262  COPY Q,VIPBITS 0079 C209 0003 0263 COPY BUFFADR,Q DMA BUFFER ADDRESS TO SET UP DMA 007A 4B0A  0264 ADD =10,Q BIASED BY 10 007B 030A 0265 XNX A REG.A CONTAINS BOARD ID 007C 4400 0266 SELP Q,DMAPTR WRITE DMA ADDRESS POINTER TO BUFFER 0267 *  0268 * BYTE COUNT FOR DMA TRANSFERS CAN NOT BE TESTED 0269 * 007D C272 0070 0270  COPY =:200,Q 007E BE54 0053 0271 JST WAITPATT WAIT FOR PROPER VALUE IN MAIN STATUS 007F C26F 006F 0272 COPY =DMA:IN,Q COMMAND NEED ONLY HAVE INPUT BIT SET 0080 BE3D 003E 0273 JST COMMAND  SEND COMMAND 0081 48C0 0274 COPY =-64,Q 64 BYTES TO PROCESS 0082 BFAD 00B0 0275 JST  PSEUDO *** G0 EXECUTE PSEUDO DMA CALL 0083 48E0 0276 COPY =-32,Q CHECK FIRST 32 WORDS FOR ANY CHANGE 0084 C7A9 00AE 0277 COPY Q,LOOPCT 0085 A3AB 00B1 0278 COPY BUFFADR,X GET BUFFER ADDRESS 0086 2B0A 0279 ADD =10,X 0087 C080 0000 0280 COPY 0(X),Q GET FIRST WORD W/ EXPECTED CHANGE 0088 C7A9 00B2 0281 COPY Q,TEMP02 SAVE IT FOR LATER USE 0089 DBA5 00AF 0282 XOR  AAAA,Q COMPARE WITH :AAAA (INITIAL VALUE IN IT) 1PAGE 0009 MACRO (E000) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-23 A0) 1980/10/06 10:23:46.50 DMA LOGIC TEST 008A 51C4 008F 0283 JNE Q,INSIDE IF NOT = 0, ALLRIGHT 008B BE25 0031 0284 MASWELL JST ERROR001 OTHERWISE DMA LOGIC ERROR 008C C080 0000 0285 LOOP:B COPY 0(X),Q GET NEXT WORD IN THAT BUFFER AREA 008D DBA4 00B2 0286 XOR TEMP02,Q ALL OF THEM SHOULD BE THE SAME 008E 51BC 008B 0287 JNE Q,MASWELL OTHERWISE,WE HAVE AN ERRROR 008F 2B01 0288 INSIDE  ADD =1,X KEEP ON GOING 0090 DF9D 00AE 0289 IMS LOOPCT 0091 9E7A 008C 0290 JMP LOOP:B UNTIL COUNT REACHES ZERO 0291 * 0092 48E0 0292 COPY =-32,Q 0093 4B0A 0293 ADD =10,Q BIASED BY 10 (22 WDS MUST BE= :AAAA) 0094 BF9E 00B3 0294 JST ALL:AAAA  *** VERIFY CONTENT TO BE = :AAAA 0095 BE4F 0065 0295 JST FILLBUF *** RESTORE CONSTANT INTO BUFFER  0296 * 0297 * BEFORE ATTEMPTING TO TEST WRITE MODE, WE WILL CHECK IF 0298 * THERE WAS A UNIMPLEMENTED MEMORY ADDRESS FOUND,IN 0299 * WHICH CASE,THE 'UIM' BIT STATUS CHA NGES IN THE 'MAIN 0300 * STATUS REGISTER' CAN BE CHECKED TO DETER'MINED IF THE 0301 * CONTROLLER IF PROPERLY SENSING THE 'UIM' CONDITION. 0302 * 0096 A39D 00B4 0303 COPY TEMP01,X RETRIEVE THE ADDRESS IF ANY 0097 31C1 0099 0304 JNE X,$+2 INDICATED BY A NON-ZERO VALUE 0098 9E88 00A1 0305 JMP SKIP:UIM OTHERWISE,JUST SKIP THE TEST 0099 030A 0306 XNX A  BOARD ADDRESS 009A 2400 0307 SELP X,DMAPTR SEND INVALID ADDRESS TO THE CONTROLLER 009B BE3C 0058 0308 JST WAITSTAT WAIT FOR PROPER VALUE IN MAIN STATUS 009C BE14 0031 0309 JST ERROR001 009D 48FF 0310 COPY =-1,Q ONLY ONE BYTE NEED TO BE MOVED 009E BF91 00B0 0311 JST  PSEUDO --TRY ACCESSING INVALID ADDRESS-- 009F 4900 0312 COPY =0,Q 00A0 BE32 0053 0313 JST WAITPATT WAIT FOR PROPER VALUE IN MAIN STAT 0314 * ERROR ROUTINE JMPS TO 'READY' ON GO SIGN 1PAGE 0010 MACRO (E000) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-23 A0) 1980/10/06  10:23:51.75 DMA LOGIC TEST 0317 * 0318 * THIS IS THE END OF THE 'UIM TEST', IF THE CODE FOLLOWS 0319 * THROUGH,THE TEST PASSED; BUT JUST TO DOUBLE CHECK, 0320 *  SEND A GOOD BUFFER ADDRESS TO THE CONTROLLER AND 0321 * VERIFY THAT THE 'UIM' BIT IS BACK 'ON'.  0322 * 0323 * 'UIM' BIT SHOULD REMAIN ON THROUGH THE REMAINING OF TEST 0324 * 000000A1 0325 SKIP:UIM EQU $ 00A1 A38F 00B1 0326 COPY BUFFADR,X RESTORE BUFFER ADDRESS 00A2 030A 0327 XNX A BOARD ADDRESS 00A3 2400 0328 SELP X,DMAPTR WRITE NEW DMA BUFFER ADDRESS 00A4 C24B 0070 0329 COPY =:200,Q 00A5 BE2D 0053 0330 JST WAITPATT WAIT FOR PROPER VALUE IN MAIN STATUS 00A6 4900 0331 COPY =DMA:OUT,Q COMMAND TO OUTPUT 00A7 BE16 003E 0332 JST COMMAND SEND COMMAND TO CONTOLLER 00A8 48C0 0333 COPY =-64,Q 00A9 BEF8 0122 0334 JST PSEUDO *** WRITE THRU DMA PSEUDO ROUTINE 00AA 48E0 0335 COPY =-32,Q 00AB A385 00B1 0336 COPY BUFFADR,X 00AC BEEB 0118 0337 JST ALL:AAAA *** VERIFY NOTHING CHANGED IN BUFFER 00AD 9E89 00B7 0338 JMP READY 0008 0339 LPOOL 00AE 0002 LOOPCT 00AF 0001 AAAA 00B0 0122 PSEUDO 00B1 0003 BUFFADR 00B2 0008 TEMP02 00B3 0118 ALL:AAAA 00B4 0006 TEMP01 00B5 1PAGE 0011 MACRO (E000) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-23 A0) 1980/10/06 10:23:55.00 INTERRUPT LOGIC TEST 0342 * S E T C O N T R O L L E R R E A D Y 0343 * 0344 * UP TO 90% OF THE ISOLITE DIAGNOSTICS WILL BE DONE WITH 0345 * 5 1/4" DISK FLOPPY BANK. THE MAIN REASON BEING THE CONVEN IENCE 0346 * IN THE MODE OF OPERATION OF THE MINI-FLOPPY DRIVES AS WELL 0347 *  AS THE FACT THAT ONLY THREE OF THESE DRVES CAN BE CONNECTED 0348 * TO THE CONTROLLER (0-2), ALLOWING US TO ADDRESS THE 4TH 0349 * MINIFLOPPY DRIVE WITH THE ASSURANCE OF NO ACTUAL DRIVE 0350 * BEING CONNECTED AT ALL; IN THIS MANNER, WE NEED NOT WORRY 0351 * WHETHER A DISK FLOPPY IS INSERTED IN THE FLOPPY DRIVES 0352 * THUS PERMITTING TESTING OF WHICH THE USER HAD TO BE  0353 * INFORMED OTHERWISE. 0354 * BECAUSE SWITCHING TO THE 5 1/4" DISK BANK DISSABLES THE  0355 * 8" DISK FLOPPY DRIVES FROM GENERATING DOOR INTERRUPTS 0356 * AND THE MINI-FLOPPIES DO NOT, AT ANY TIME,CHANGE THE 0357 * 'READY' STATUS, NO DOOR INTERRUPTS CAN BE SENSED,THEREFORE 0358 * ALL INTERRUPTS WILL BE PREDICTABLE. 0359 * 00B6 00DB 0360 JMPADDR1 WORD GOODJMP1 GOOD VECTOR 0361 * 000000B7 0362 READY EQU $ 00B7 BE01 0039 0363  JST DISPLAY DISPLAY CDR CODE (2ND) 00B8 C2AB 00E4 0364 COPY =:1DF,Q 00B9 C7AB 00E5 0365  COPY Q,VIPBITS USED TO ISOLATE BITS IN MAIN STATUS 00BA C235 0070 0366 COPY =:200,Q 00BB C7A5 00E1 0367 COPY Q,SAVEJUMP 00BC E3A9 00E6 0368 COPY BADJMP2,Y RESTORE Y-REG,IN CASE IT'S A RESUME TEST 00BD 490A 0369 COPY =:A,Q SET CONTROLLER READY 0370 *  TEST MAINLY MINI-FLOPPY 00BE BE10 004F 0371 JST SENDMODE SET CONTROLLER READY 00BF A3A7 00E7 0372 COPY D3000,X MORE THAN ENOUGH TIME 00C0 030A 0373 LOOP4 XNX A 00C1 4101 0374  IN MAINSTAT,Q MAIN STATUS REGISTER 00C2 408F 0375 TBIT 8,Q 'INT' BIT SET ? 00C3 36C2 00C6 0376 JF OV,GOTIT LOOP UNTIL IT IS OFF OR TIME RUNS OUT 00C4 34BB 00C0 0377 IJNE X,LOOP4 CONTINUE UNTIL INTERRUPT OR IME OUT 00C5 BF9C 00E2 0378 JST ERROR002 00C6 D69D 00E4 0379 GOTIT  AND =:1DF,Q BIT 5 IS UNRELIABLE 00C7 4C80 0380 CLSN =:80,Q RDY(7) BIT =1 ? AND INT(8) =0? 0381 * ************************************** 00C8 BEA5 00EE 0382  JST SENSE4 * SENSE INTERRUPT STATUS (4 TIMES) * 0383 * ************************************** 00C9 BF98 00E2 0384 JST ERROR002 ERROR FROM PREVIOUS OR FROM 'SENSE4'. 1PAGE  0012 MACRO (E000) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-23 A0) 1980/10/06 10:24:00.75 INTERRUPT LOGIC TEST 00CA BEE0 012B 0385 JST SETJUMP DEFINE VECTOR ADDRESS 00CB 9EE7 0133 0386 JMP DIAG:END ALL BITS IN VECTOR ADDR. CHECKED 00CC C39B 00E8 0387 COPY JST0X,Q REPLACE LOC.CONTENT 00CD C480   0000 0388 COPY Q,0(X) WITH THE 'JMP 0(X)' (VALID VECTOR) 00CE 4900 0389 COPY =0,Q  ************************************** 00CF BF93 00E3 0390 JST SENDMODE * RESET THE CONTROLLER (TO 0) * 00D0 4801 0391 COPY =-255,Q * * 00D1 54BF 00D1 0392 IJNE Q,$ ************************************** 00D2 030A 0393 XNX A 00D3 2401  0394 SELP X,INTVADR SEND INTERRUPT VECTOR ADDRESS 00D4 490B 0395 COPY =:B,Q SET CONTROLLER READY 0396 * TEST MAINLY MINI-FLOPPY 0397 *  ALLOW VECTORING INTERRUPTS 00D5 A260 00B6 0398 COPY JMPADDR1,X HANDLING ROUTINE ADDRESS 00D6 0E85 0399 SBIT 8,S ALLOW INTERRUPTS 00D7 BF8B 00E3 0400 JST SENDMODE  ***** SET CONTROLLER READY **** 00D8 C38E 00E7 0401 COPY D3000,Q WAIT (3 MS) ASSUME 'IJNE' IS 5 X FASTER 00D9 54BF 00D9 0402 IJNE Q,$ (IJNE 5.50 US) ASSUME 1.1 US 00DA BF87 00E2 0403 JST ERROR002 TIME OUT 00DB 0E0D 0404 GOODJMP1 ENT 00DC A384 00E1 0405 COPY SAVEJUMP,X 00DD C38B 00E9 0406 COPY JST0Y,Q 00DE C480 0000 0407 COPY Q,0(X) RESTORE JMP 0(Y) 00DF 2801  0408 COPY =-255,X 00E0 9E5F 00C0 0409 JMP LOOP4 LOOP SHOULD BE UNNECESSARY 000B  0410 LPOOL 00E1 0007 SAVEJUMP 00E2 0031 ERROR002 00E3 004F SENDMODE 00E4 01DF 00E5 0000 VIPBITS 00E6 002D BADJMP2 00E7 0009 D3000 00E8 0030 JST0X 00E9 002F JST0Y 00EA 00EB 1PAGE 0013 MACRO (E000) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-23 A0) 1980/10/06 10:24:03.75 **** S U B R O U T I N E S **** 0413 * SENSE INTERRUPT STATUS PART 1 0414 * THIS COMMAND IS REQUIRED IN ORDER TO SET INTERRUPT BIT  0415 * IN MAIN STATUS REGISTER FOLLOWING A RESET & SET CONTROLLER 0416 * READY. THIS BIT IS SET LOW WHEN AN INTERRUPT IS SENSED, 0417 * WHICH WILL BE, BECAUSE MINI-FLOPPY DRIVES ARE ALWAYS  0418 * READY WHEN THE CONTROLLER IS SET READY. 0419 * 0420 *.......INTERRUPT BIT IS SET LOW BY THE CONTROLLER ONLY ONCE.......... 0421 *.......BUT FOUR SENSE INTERRUPTS MUST BE ISSUED,ONE FOR EACH......... 0422 *.......POSSIBLE DISK DRIVE THAT CAN BE CONNECTED (4)................. 00EC 01D0 0423 C:1D0 WORD :1D0 INT,RDY,DIR,BUSY BITS SET ? 00ED 0180 0424 C:180 WORD :180  INT,RDY BITS SET ? OTHERS CLEAR. 0425 * 00EE 0E0D 0426 SENSE4 ENT 00EF 2025 0427  XOR X,X 00F0 A7C9 013A 0428 COPY X,FOURBITS USE TO RECORD SENSED DISK DRIVES 00F1 C2C9 013B 0429 SENSE COPY =:108,Q SENSE INTERRUPT STATUS 00F2 BFC9 013C 0430 JST COMMAND SEND COMMAND 00F3 C  278 00EC 0431 COPY C:1D0,Q 00F4 BFC8 013D 0432 JST WAITPATT WAIT FOR PROPER VALUE IN MAIN STAT 0433 * 0434 * ** READ RESULTS FROM SENSE INTERRUPT STATUS ** 0435 * INITIALLY WE'LL SENSE AN ASSUMED INTERRUPT FROM THE FOUR 0436 * POSSIBLE MINI-FLOPPIES THAT CAN BE CONNECTED, THIS IS SO 0437 * BECAUSE WHEN THE CONTROLLER IS SET READY, IT SENSES THE  0438 * 'READY' LINES COMING FROM THE DISK FLOPPY DRIVES ASSOCIATED 0439 * WITH FLOPPY BANK ACTIVE AT THE TIME THE CONTROLLER IS SET 0440 * TO THE 'READY' STATE. SINCE THE MINI-FLOPPY DRIVES ARE 0441 * ALWAYS IN THE 'READY' STATE, AN INTERRUPT WILL BE SENSED 0442 * FOR EACH EVEN THOUGH THE INTERRUPT BIT IN THE 'MAIN STATUS 0443 * REGISTER' WILL ONLY GO LOW THE FIRST TIME IT IS SENSED. 0444 * ADDITIONAL 'SENSE INTERRUPT' COMMAND MUST BE ISSUED UNTIL 0445 * 'STATUS BYTE -0-' RETURNS AN 'INV. COMMAND ISSUED'. 0446 * 00F5 030A 0447 RESULTS XNX A BOARD ADDRESS 00F6 4100 0448 IN RESULT,Q STATUS BYTE -0- 00F7 58FB 0449  AND =:FB,Q CAN'T DEPEND ON FBIT 2 (HEAD ADDRESS) 00F8 BE8F 0108 0450 JST CHKALL4 DETERMINE IF ERROR BY NOW 00F9 9F74 00EE 0451 JMP *SENSE4 RET+0 MEANS SOMETHING WRONG 00FA 9E8B 0106 0452  JMP ALL4OK RET+1 MEANS ALL 4 DRIVES SENSED 00FB BE97 0113 0453 JST CHKDRIVE RET+2 ALLRIGHT, CHECK WHICH DRIVE 00FC BFC1 013E 0454 JST WAITSTAT WAIT FOR VALUE IN MAIN STATUS 00FD 9F70 00EE 0455  JMP *SENSE4 WHY WOULD IT CHANGE? 1PAGE 0014 MACRO (E000) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-23 A0) 1980/10/06 10:24:08.50 **** S U B R O U T I N E S **** 00FE 030A 0456 XNX A 00FF 4100 0457 IN RESULT,Q THIS MUST BE THE 'PCN' AND =0 0100 58FF 0458 AND =:FF,Q 0101 5141 0103 0459 JEQ Q,$+2 IF NOT = 0 , THEN IT IS AN ERROR. 0102 9F6B 00EE 0460 JMP *SENSE4 0103 C269 00ED 0461 COPY C:180,Q 0104 BFB8 013D 0462 JST WAITPATT WAIT FOR PROPER VALUE IN MAIN STATUS 0105 9E6B 00F1 0463 JMP SENSE RETURN TO SEND NEXT S.I.S 0464 * 0106 DE67 00EE 0465 ALL4OK IMS SENSE4 RETURN +1 0107 9F66 00EE 0466 JMP *SENSE4  0467 * 0468 * THIS ROUTINE WILL VERIFY THE RESULT REGISTER FOLLOWING 0469 * THE 'SENSE INTERRUPT STATUS' COMMAND . 0470 * THE COMMAND WAS SENT TO THE CONTROLLER INMEDIATELY AFTER  0471 * CONTROLLER WAS SET READY AND THE RESULT REGISTER IS 0472 * PREDICTABLE. IF AN 'INVALID COMMNAD' CODE IS RECEIVED 0473 * ALL FOUR DRIVES SHOULD HAVE BEEN SENSED; IF ALL FOUR   0474 * DRIVES HAD BEEN SENSED , AN 'INVALID COMMAND' CODE SHOULD 0475 * BE EXPECTED. 0476 * 0108 0E0D 0477 CHKALL4 ENT DETERMINE IF ERROR ALREADY DETECTED 0109 A3B0 013A 0478 COPY FOURBITS,X GET DRIVES SENSED 010A 4C80 0479 CLSN =:80,Q INVALID COMMAND CODE 010B 9E84 0110 0480 JMP ALLFOUR CHECK IF ALLFOUR ALREADY RECEIVED 010C 2C06 0481  CLSN =:6,X NO,CHECK IF ALLFOUR ALRADY RECEIVED 010D 9F7A 0108 0482 JMP *CHKALL4 YES,SHOULD'NT HAVE BEEN 010E DE79 0108 0483 IMS CHKALL4 010F DE78 0108 0484 IMS CHKALL4 OK,MORE DRIVES TO BE SENSED 0110 2C06 0485 ALLFOUR CLSN =:6,X ARE ALL DRIVES SENSED WITH 'INV.COMMAND' 0111 DE76 0108 0486 IMS CHKALL4 YES, GOOD RETURN 0112 9F75 0108 0487 JMP *CHKALL4 RETURN GOOD OR BAD 1PAGE 0015 MACRO (E000) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-23 A0) 1980/10/06 10:24:11.75 **** S U B R O U T I N E S **** 0490 * 0491 * THIS ROUTINE WILL DETERMINE THE MINI-FLOPPY DRIVE THAT 0492 * WAS SENSED WITH THE 'SENSE INTERRUPT STATUS' COMMAND 0493 *  AND SET THE APPROPIATE BIT IN REG.X; WHICH,IS 0494 * BEING USED TO DETERMINE IF ALL DRIVES WERE SENSED 0495 * PREVIOUS TO RECEIVING THE 'INVALID COMMAND' (:80) CODE. 0496 * 0113 0E0D  0497 CHKDRIVE ENT 0114 57C0 0498 XOR =:C0,Q DELETE :C0 FROM BYTE 0115 2042 0499  ADD Q,X ADD 0116 A7A3 013A 0500 COPY X,FOURBITS SAVE DRIVES SENSED 0117 9F7B 0113 0501  JMP *CHKDRIVE RETURN (NO ERROR POSSIBLE) 0503 * 0504 * THIS ROUTINE WILL CHECK FOR THE CONTENT OF THE BUFFER 0505 * TO BE :AAAA. STARTING BUFFER ADDRESS SHOULD ALREADY BE 0506 * IN THE Q-REG. NEGATIVE COUNT SHOULD ALREADY BE IN THE 0507 * X-REG. UPON RETURNING, THE Q-REG WILL BE CLEARED TO 0508 * INDICATE NO MISSMATCH. 0509 * 0118 0E0D 0510 ALL:AAAA ENT 0119 C714 00AE 0511 COPY Q,LOOPCT NEGATIVE COUNT OF WORDS TO CHECK 011A C080 0000 0512 LOOP:C COPY 0(X),Q 011B DB13 00AF 0513 XOR AAAA,Q 011C 5141 011E 0514 JEQ  Q,$+2 011D BF44 00E2 0515 JST ERROR001 ERROR ROUTINE 011E 2B01 0516 ADD =1,X 011F DF0E 00AE 0517 IMS LOOPCT 0120 9E79 011A 0518 JMP LOOP:C LOOP BACK UNTIL COUNT=0 0121 9F76 0118 0519 JMP *ALL:AAAA 0521 * 0522 * PSEUDO-DMA READ/WRITE ROUTINE 0523 * 0122 0E0D 0524 PSEUDO ENT 0123 C70A 00AE 0525 COPY Q,LOOPCT 0124 4920 0526 LOOP:A COPY =FAKEDMA,Q MODE REGISTER BIT 5 SET (:20) 0125 BF3D 00E3 0527 JST SENDMODE   SEND MODE REGISTER 0126 4900 0528 COPY =0,Q 0127 BF3B 00E3 0529 JST SENDMODE SEND MODE REGISTER AGAIN 0128 DF05 00AE 0530 IMS LOOPCT DECREMENT BYTE COUNT UNTIL ZERO 0129 9E7A 0124 0531 JMP LOOP:A KEEP LOOPING UNTIL THEN 012A 9F77 0122 0532 JMP *PSEUDO RETURN 1PAGE 0016 MACRO (E000) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-23 A0) 1980/10/06 10:24:15.75 **** S U B R O U T I N E S **** 0535 * 0536 * THIS ROUTINE WILL DEFINE THE VECTOR ADDRESS TO  0537 * BE USED IN THE TESTING OF THE VECTORING INTERRUPTS. 0538 * TO DEFINE A NEW VECTOR ADDRESS USING A DIFFERENT BIT 0539 * A BIT IS SHIFTED RIGHT EACH TIME (INITIAL VALUE IS :200)  0540 * ALL ADDRESSES NEED TO BE ODD ADDRESS,THEREFORE,THE FOLLOWING 0541 * ADDRESSES ARE GENERATED:1,3,5,9,11,21,41,81,101 (HEX). 0542 * 012B 0E0D 0543 SETJUMP ENT 012C A334 00E1 0544  COPY SAVEJUMP,X ORIGINAL ADDRESS = :200 012D 2E09 0545 SHIFT X,RO,1 SHIFT AGAIN 012E 3143 0132 0546 JEQ X,SETEND SHIFTED ALL THE WAY OUT ? 012F 3901 0547 OR =1,X  NO, EVEN IF = 1; DO 'OR'. 0130 A730 00E1 0548 COPY X,SAVEJUMP SAVE ADDRESS 0131 DE79 012B 0549  IMS SETJUMP RET+1 NORMAL RETURN 0132 9F78 012B 0550 SETEND JMP *SETJUMP 1PAGE 0017 MACRO (E000) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-23 A0) 1980/10/06 10:24:17.75 ---- LAST SECTION OF MAIN LINE CODE ----  00000133 0553 DIAG:END EQU $ 0133 4900 0554 COPY =0,Q 0134 030A 0555 XNX  A 0135 4403 0556 SELP Q,MODE RESET CONTROLLER (TO ZERO) 0136 C282 0139 0557 COPY  SAL00,Q MUST STORED LOOPBACK SAL INSTRUCTION 0137 C68B 0143 0558 COPY Q,SALOOP FOLLOWING THE CHAIN SAL INSTRUCTION 0138 9F86 013F 0559 JMP START 0138 0001 0560 ORG $-1 OVERLAY PREVIOUS WITH REAL INSTRUCTION 0138 9E89 0142 0561 JMP SALCHAIN 0562 * 0139 6600 0563 SAL00 SAL 0,0 SAL 0,0 INSTRUCTION 0008 0564 LPOOL 013A 0005 FOURBITS 013B 0108 013C 003E COMMAND 013D 0053 WAITPATT 013E 0058 WAITSTAT 013F 000D START 0140 0141 00000142 0565 SALCHAIN EQU $  0566 * SAL CHAIN AT PROGRAM END+1 00000143 0567 SALOOP EQU SALCHAIN+1  0568 * SAL LOOPBACK AT PROGRAM END+2 00000144 0569 BUFFER EQU SALOOP+1 000D  0570 END START 0000 ERRORS (0000) 0000 WARNINGS (0000) LPOOL 013A 0005 FOURBITS 013B 0108 013C 0031PAGE 0001 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:49:24.50 GENERAL DESCRIPTION SI = DH00.ISO:BIG.ASM SO = DH00.ISO:BIG.OBJ LO = DH00.ISO:BIG.LST 0003 *************************  ********************************************* 0004 *  * 0005 * SCOUT UNIVERSAL FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTIC * 0006  * * 0007 ********************************************************************** 0008 *  * 0009 * COPYRIGHT 1980, C O M P U T E R A U T O M A T I O N , I N C . * 0010 *  ALL RIGHTS RESERVED. * 0011 *  * 0012 **********************************************************************  0014 * PROGRAM DESCRIPTION: 0015 * 0016 * THIS PROGRAM IS AN ISOLITE DIAGNOSTIC FOR THE SCOUT 0017 * UNIVERSAL FLOPPY DISK CONTROLLER BOARD (54124).  0018 * THIS CONTROLLER WILL HANDLE THE 8" DISK FLOPPY DRIVES 0019 * AS WELL AS 5 1/4 " MINI-FLOPPY DRIVES,THE CONTROLLER 0020 * PROVIDES A 'SWITCH' BIT IN A REGISTER TO INTERCHANGE  0021 * FLOPPY DRIVES BANKS. MUST OF THE ISOLITE DIAGNOSTICS 0022 * WILL BE DONE IN THE MINI-FLOPPY BANK. 0023 * THE MINI-FLOPPY BANK ALLOWS ONLY THREE (3) DISK DRIVES 0024 *  TO BE CONNECTED EVEN THOUGH THERE ARE 4 LINES AVAILABLE. 0025 * THE ISOLITE DIAGNOSTICS TAKES ADVANTAGE OF THIS UNUSED 0026 * FOURTH DRIVE AS WELL AS THE PARTICULAR FEATURE THAT 0027  * THE LINES FROM THE MINI-FLOPPY DISK DRIVES ARE ALWAYS 0028 * IN THE 'READY' STATE REGARDLESS IF THERE IS A DRIVE 0029 * CONNECTED OR NOT. 0030 * 0031 * CONSOLE DATA REGISTER RUNTIME CODES: 0032 * 0033 * :0070 - INITIALIZATION  0034 * :0071 - DMA LOGIC TEST ('UIM' INCLUDED) 0035 * :0072 - INTERRUPT LOGIC TEST,'SENSE INTERRUPT STATUS'(SIS) 0036 * :0073 - 'SPECIFY','RECALIBRATE','SEEK' AND 'SIS' COMMANDS 1PAGE 0002 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:49:29.00 GENERAL DESCRIPTION  0037 * :0074 - LINEARITY TEST 0038 * :0075 - 8" BANK,'SENSE DRIVE STATUS' COMMAND 0039 * 0040 ********************************************************************** 1PAGE 0003 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:49:29.75 EQUATES, VARIABLES 0042 * LOCATIONS :0-:1FF ARE FILLED WITH THE INSTRUCTION: JST 0(Y), 0043 *  LOCATIONS FROM END OF ISOLITE BUFFER TO END OF 'RAM' ARE ALSO 0044 * FILLED WITH INSTRUCTION: JST 0 (Y).... 0045 * IN ORDER TO CATCH POSSIBLE INVALID INTERRUPTS FROM THE 0046 * CONTROLLER BOARD. MEMORY LOCATIONS ARE EXCHANGE WITH A 0047 * VALID JUMP (THROUGH REG-X) WHEN THE SPECIFIC INTERRUPT 0048 * LOCATION IS BEING TESTED. 0049 * 0050 * AN UNEXPECTED INTERRUPT FROM THE CONTROLLER WILL BE ROUTED 0051 * THRU LOC. INDICATED IN REG.Y TO THE ERROR HANDLING ROUTINE. 0052 * 1PAGE 0004 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:49:31.25 EQUATES, VARIABLES 0054 ************************* CONSTANTS ********************************** 00000001 0055 CMD:FC EQU 1 FC IN 'OUT' COMMAND(1=COMMAND) 00000100 0056 DMA:IN EQU :100 CMMD OPCODE BIT 8 INDICATES DIRECTION 00000000 0057 DMA:OUT EQU 0  CMND OPCODE BIT 8 - OFF FOR OUTPUT 00000000 0058 DMAPTR EQU 0 REG. & FC - WRITE DMA ADDR.POINTER  00000020 0059 FAKEDMA EQU :20 BIT 5 - TO FAKE DMA OPERATION 00000001 0060 INTVADR EQU 1  REG. & FC - WRITE INT.VECTOR ADDR. 00000001 0061 MAINSTAT EQU 1 N/A FC - READ UFDC MAIN STATUS REG 00000003 0062 MODE EQU 3 " " - WRITE MODE REGISTER 00000000 0063 RESULT  EQU 0 N/A FC - READ UFDC RESULT REG 00000000 0064 SPEC:FC EQU 0 FC IN 'OUT' COMMAND(0=SPEC.REG 0065 * 1PAGE 0005 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:49:33.25 EQUATES, VARIABLES 0067 ************************ VARIABLES ************************************ 0000 AAAA 0068 AAAA WORD :AAAA CONSTANT USED IN DMA BUFFER 0001 0000 0069 AREG  WORD 0 0002 02EA 0070 BUFFADR WORD BUFFER DMA BUFF.ADDR..INTIALIZED TO :AAAA 0003 032A 0071 BUFFEND WORD BUFFER+64 0004 7E10 0072 C:7E10 WORD :7E10 VECTOR TYPE ERROR CODE 0005 7E00 0073  C:7E00 WORD :7E00 REGULAR TYPE ERROR CODE 0006 0000 0074 CDR WORD 0 SAVE CONSOLE DATA REGISTER 0007 0070 0075 CDRCODE WORD :0070 CONSOLE DATA REG DISPLAY CODE 0008 0000 0076 CYL WORD 0 CYLINDER(TRACK) FOR 'SEEK' COMMAND 0009 F448 0077 D3000 WORD -3000 SOFTWARE TIME OUT ON EXPECTING INTERRUPT 000A 0000 0078 DRIVNO WORD 0 DRIVE NUMBER 000B 0000 0079 FOURBITS WORD 0 TO SET FOUR BITS EXPECTED FROM EACH DRIVE 000C 0000 0080 LOOPCT WORD 0 SAVE DIFFERENT LOOP COUNTS 000D 0000 0081 MEMFLAG WORD 0 MEMORY TEST FLAG 0= 0-:1FF 000E 0000 0082 MEMWORD WORD 0 MEMORY WORD READ 000F 0000 0083 MSRBITS WORD 0 TO ISOLATE BITS TO BE COMPARED IN MAIN STAT 0010 0000 0084 P1 WORD 0 PARAMETER STORAGE FOR CALL MACRO 0011 0000 0085 P2   WORD 0 PARAMETER STORAGE FOR CALL MACRO 0012 0000 0086 P3 WORD 0 PARAMETER STORAGE FOR CALL MACRO 0013 0000 0087 P4 WORD 0 PARAMETER STORAGE FOR CALL MACRO 0014 0000 0088 PATTERN WORD 0 INPUT TO ROUTINE,EXPECTED VALUE IN MAIN STATUS 0015 0000 0089 QREG WORD 0  SAVE Q-REGISTER 0016 0000 0090 RAMEND WORD 0 TO SAVE TOP OF RAM + 1 (ZERO IF 64K RAM) 0017 0000 0091 SAVEJUMP WORD 0 TO SAVE JUMP TO TAKE PLACE ON INTERRUPT 0018 0000 0092 SPECVAL WORD  0 SPECIFICATION REG. VALUE 0019 0000 0093 SREG WORD 0 SAVE S-REGISTER 001A 0000  0094 TRK35CNT WORD 0 TRACK 35 SEEK TIME COUNTER 001B 0000 0095 TRK70CNT WORD 0 TRACK 70 SEEK ELAPSED TIME COUNTER 001C 0000 0096 UIMADDR WORD 0 ADDRESS OF UNIMPLEMENTED MEMORY 001D 0000  0097 XREG WORD 0 001E 0000 0098 YREG WORD 0 1PAGE 0006 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:49:38.50 MACROS 0100 ********************************************************************** 0101 * MACRO SAL - GENERATES THE OPCODE FOR SCOUT SAL INSTRUCTION  * 0102 ********************************************************************** 0104  MACRO SAL 0105 SALCOD: SET 0 0106 IFT #(1,?) 0107 SALCOD: SET #(1)&:000F%4 0108 ENDC 0109 IFT #(2,?)  0110 SALCOD: SET #(2)&:000F++SALCOD: 0111 ENDC 0112 SALCOD: SET  :6600++SALCOD: 0113 WORD SALCOD: 0114 ENDM 0115 ********************************************************************** 0116 * MACRO COPYQ - COPY TO MEMORY USING THE Q REGISTER 0117 * 0118 * COPYQ SOURCE,DEST 0119 * 0120 MACRO COPYQ 0121 COPY #(1),Q 0122 COPY Q,#(2)  0123 ENDM 0124 ********************************************************************** 0125 * MACRO TSTJMP - TEST SPECIFIED BITS IN A REGISTER USING VALUE 0126 *  0127 * TSTJMP ADDRESS,REGISTER,BIT SELECT,BIT PATTERN 0128 * 0129 MACRO TSTJMP 0130 AND #(3),#(2) SELECT BITS TO TEST 0131 XOR #(4),#(2)  COMPARE WITH TEST VALUE 0132 JEQ #(2),#(1) MATCH FOUND JUMP TO ADDRESS 0133 ENDM 1PAGE 0007 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:49:42.00 MACROS 0135 **********************************************************************  0136 * MACRO CALL - JST A ROUTINE WITH A PARAMETERS 0137 * 0138 * CALL ROUTINE,PAR1,PAR2,PAR3,PAR4 0139 * 0140 * FOR NESTED ROUTINES WITH MULTIPLE PARAMETERS, SAVE P1-P4  0141 * AS LOCAL VARS UPON ENTERING ROUTINE 0142 * 0143 MACRO  CALL 0144 IFT #(2,?) 0145 COPYQ #(2),P1 0146  ENDC 0147 IFT #(3,?) 0148 COPYQ #(3),P2 0149 ENDC 0150 IFT #(4,?) 0151 COPYQ #(4),P3  0152 ENDC 0153 IFT #(5,?) 0154 COPYQ #(5),P4  0155 ENDC 0156 JST #(1) JUMP TO ROUTINE 0157  ENDM 0158 ********************************************************************** 1PAGE 0008 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:49:44.50 INITIALIZATION,ERROR & MISC.ROUTINES 0000001F 0160 START EQU $ 001F C675 0015 0161 COPY Q,QREG SAVE Q-REG 0020 4030  0162 COPYQ S,SREG SAVE S-REG 0021 C677 0019 0162+ 0022 4940 0163 COPYQ =:40,S  SET STATUS REGISTER 0023 3040 0163+ 0024 0309 0164 UIS UPDATE STATUS REGISTER 0025 A677 001D 0165 COPY X,XREG SAVE X-REGISTER 0026 E677 001E 0166 COPY Y,YREG SAVE Y-REGISTER 0027 18FC 0167 AND =:FC,A DISREGARD LOWER 2 BITS 0028 8658 0001 0168 COPY A,AREG SAVE A-REGISTER 0029 2104 0169 IN 4,X GET CONSOLE DATA REGISTER 002A A65B 0006 0170 COPY X,CDR AND SAVE IT 002B 2025 0171 XOR X,X CLEAR X-REG 002C 2202  0172 OUT X,2 TURN OFF AUTOLOAD INDICATOR 002D 2901 0173 COPY =1,X 002E 2200 0174 OUT X,0 TURN ON SENSE SWITCH INDICATOR 002F C257 0007 0175 CALL DISPLAY,CDRCODE DISPLAY DATA CODE 0030 C65F 0010 0175+ 0031 BECB 007D 0175+ 0032 34BF 0032 0176 IJNE X,$  0177 * 0178 * SET UP VALUE IN CONSOLE DATA REGISTER 0179 * 0180  * DETERMINE UNIMPLEMENTED MEMORY (IF ANY) 0181 * IF 'DMA:UIM' = 0 ,THEN THERE CAN NOT BE AN 'UIM' TEST. 0182 * 0033 C2AC 0060 0183 COPY JST1,Q INSTRUCTION: JST *$+1 0034 298A  0184 COPY =:8A,X POINT TO UIM TRAP LOCATION 0035 C480 0000 0185 COPY Q,0(X) SAVE IN TRAP LOCATION 0036 C2AB 0062 0186 COPYQ MEM:ADDR,1(X) UIM HANDLING RTN ADDR IN LOC :8B 0037 C481 0001 0186+ 0038 A29F 0058 0187 COPY =:700,X INCREMENT MEMORY 276 WDS EACH TIME 0039 C080 0000 0188 LOOP1 COPY   0(X),Q TRY TO READ THE LOCATION 003A 31C1 003C 0189 JNE X,$+2 WRAP-AROUND? 003B 9E89 0045 0190 JMP NO:UIM IF = 0, YES; IT ROLLED OVER - 64 K RAM 1PAGE 0009 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:49:49.25 INITIALIZATION,ERROR & MISC.ROUTINES 003C 6049 0191  COMP Q,Y WRITE BACK COMPLEMENTED 003D E480 0000 0192 COPY Y,0(X) TO DETERMINE END OF 'ROM' 003E E080 0000 0193 COPY 0(X),Y WHEN READ, AND THEN 'AND'ED WITH ORIGINAL 003F 6044 0194  AND Q,Y MUST YIELD ZERO 0040 71C2 0043 0195 JNE Y,$+3 0041 AA95 0057 0196 ADD =:100,X 0042 9E76 0039 0197 JMP LOOP1 0043 A652 0016 0198 COPY X,RAMEND SAVE END OF RAM JUST FOUND 0044 2900 0199 COPY =0,X INDICATE NO UIM 0200 * 00000045 0201 FOUND: EQU $ 0045 A656 001C 0202 NO:UIM COPY X,UIMADDR SAVE UN-IMPLEMENTED LOC. FOR LATER USE 0046 3141 0048 0203 JEQ X,$+2 IF NOT = 0,UIM FOUND & TOP OF RAM 0047 A64E 0016 0204 COPY X,RAMEND THEREFORE, SAVE IT ALSO AS TOP OF RAM 0048 A24D 0016 0205 COPY RAMEND,X GET RAM LIMIT(0 IF 64K & NO ROM) 0049 2AFF 0206 SUB =1,X OTHERWISE GET A VALID MEMORY TO START 004A E238 0003 0207 SETYREG COPY BUFFEND,Y END OF ISOLITE BUFFER 004B C297 0063 0208 COPY JST0Y,Q 004C C440 0000 0209 FILLOOP1 COPY Q,0(Y) 004D 6B01 0210 ADD =1,Y INCREMENT MEMORY LOCATION UNTIL TOP 004E 602A 0211 CSN X,Y TOP ? 004F 9E81 0051 0212 JMP LOWER 0050 9E7B 004C 0213 JMP  FILLOOP1 IF NOT = , THEN KEEP LOOPING 0051 C440 0000 0214 LOWER COPY Q,0(Y) LAST LOCATION 0052 E286 0059 0215 COPY =511,Y SET UP TO FILL MEMORY 0053 C440 0000 0216 FILLOOP2 COPY Q,0(Y) FILL  0054 75BE 0053 0217 JNED Y,FILLOOP2 0055 BEDB 00B1 0218 JST FILLBUF THROUGH 0056 9EEF 00C6 0219 JMP DMASTART 0009 0220 LPOOL 0057 0100 0058 0700 0059 01FF 005A 005B 005C 1PAGE 0010 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:49:54.00 INITIALIZATION,ERROR & MISC.ROUTINES 005D 005E 005F 0060 9F80 0061 0222 JST1 JMP *$+1 FOR 'UIM' TRAP 00000061 0223 BADJMP1 EQU $ UNEXPEXTED VECTOR DURING TEST:#1 00000061 0224 BADJMP2 EQU $  UNEXPECTED VECTOR DURING TEST:#2 0061 0065 0225 BADJMP3 WORD ERROR0X3 UNEXPECTED VECTOR DURING TEST:#3 0062 0045 0226 MEM:ADDR WORD FOUND: VECTOR ADDRESS FOR UIM TRAP 0063 BC40 0000 0227 JST0Y JST 0(Y)  REG.Y MUST REMAIN WITH ERROR ADDRESS 0064 BC80 0000 0228 JST0X JST 0(X) REG.X WILL CONTAIN VALID ADDRESS 0230 * 1PAGE 0011 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984 /02/29 10:49:55.75 INITIALIZATION,ERROR & MISC.ROUTINES 0065 0E0D 0232 ERROR0X3 ENT 0066 8220 0007 0233 COPY CDRCODE,A 0067 180F 0234 AND =:F,A 0068 B61B 0004 0235 OR C:7E10,A 0069 0404  0236 SELP A,4 006A 0E0D 0237 HLT 006B 9FD5 00C1 0238 JMP DIAG:END 006C 0E0D 0239 ERROR001 ENT 006D 8219 0007 0240 COPY CDRCODE,A 006E 180F 0241 AND =:F,A 006F B615 0005 0242 OR C:7E00,A 0070 0404 0243 SELP A,4 0071 827A 006C 0244 COPY ERROR001,A 0072 0E0D 0245 HLT 0073 820D 0001 0246 COPY AREG,A 0074 9FC6 00BB 0247  JMP READY RESUME TEST,SKIP DMA 0248 * 00000075 0249 ERROR002 EQU $ 00000075 0250 ERROR003 EQU $ 00000075 0251 ERROR004 EQU $ WILL CONTAIN RETURN ADDRESS 0075 0E0D  0252 ERROR005 ENT 0076 8210 0007 0253 COPY CDRCODE,A 0077 180F 0254 AND =:F,A 0078 B60C 0005 0255 OR C:7E00,A 0079 0404 0256 SELP A,4 007A 827A 0075 0257 COPY ERROR004,A AND USER CAN VIEW IT IN REG-A. 007B 0E0D 0258 HLT 007C 9FC4 00C1 0259 JMP DIAG:END 0260 * 1PAGE 0012 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:49:58.50 INITIALIZATION,ERROR & MISC.ROUTINES 0262 * DISPLAY CONSOLE DATA REGISTER 007D 0E0D 0263 DISPLAY ENT 007E C211 0010 0264 COPY P1,Q 007F 4404 0265 SELP Q,4 0080 C2C1 00C2 0266 CALL WAIT,=50829 WAIT 250 MS 0081 C60E 0010 0266+ 0082 BFC0 00C3 0266+ 0083 9F79 007D 0267  JMP *DISPLAY 0268 * 0269 * ROUTINES TO TAKE CARE OF MUST REPETITIVE GROUP OF 0270 * CODING. 1) SENDING THE COMMAND & SPEC.REGISTER 0271 * 2) SENDING THE MODE REGISTER 0272 * 3) WAITING FOR A PARTICULAR PATTERN FROM  0273 * THE MAIN STATUS REGISTER 0274 * 0084 0E0D 0275 COMMAND ENT  (P1=COMMAND CODE) 0085 C20A 0010 0276 COPY P1,Q 0086 030A 0277 XNX A 0087 4201  0278 OUT Q,CMD:FC 0088 9F7B 0084 0279 JMP *COMMAND 0280 * 0089 0E0D  0281 SPECIFIC ENT (P1=SPEC REG. VALUE) 008A C205 0010 0282 COPYQ P1,SPECVAL VALUE TO SEND AS 1ST SPEC. REG. 008B C60C 0018 0282+ 008C C2B7 00C4 0283 CALL WAITSTAT,=:190 WAIT ON PROPER STATUS FOR SPEC REG. 008D C602 0010 0283+ 008E BE95 00A4 0283+ 008F 9F79 0089 0284 JMP *SPECIFIC TIME OUT 0090 C207 0018 0285 COPY SPECVAL,Q GET VALUE TO SEND AS 1ST SPEC.REG. 0091 030A 0286 XNX A 0092 4200 0287 OUT Q,SPEC:FC 0093 DE75 0089 0288 IMS SPECIFIC 0094 9F74 0089 0289 JM P *SPECIFIC 0290 * 0095 0E0D 0291 SENDWAIT ENT (P1=COMMAND CODE, P2=SPEC REG)  0096 C3A5 00BC 0292 CALL COMMAND,P1 SEND APPROPIATE COMMAND 1PAGE 0013 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:50:03.00 INITIALIZATION,ERROR & MISC.ROUTINES 0097 C7A4 00BC 0292+ 0098 BE6B 0084 0292+ 0099 C3AB 00C5 0293 CALL SPECIFIC,P2 SEND SPEC REG. 009A C7A1 00BC 0293+ 009B BE6D 0089 0293+ 009C 9F78 0095 0294 JMP *SENDWAIT 009D DE77 0095 0295 IMS SENDWAIT 009E 9F76 0095 0296 JMP *SENDWAIT 009F 0E0D 0297 SENDMODE ENT (P1=MODE VALUE) 00A0 C39B 00BC 0298 COPY P1,Q 00A1 030A 0299 XNX A 00A2 4403 0300 SELP Q,MODE 00A3 9F7B 009F 0301 JMP *SENDMODE 1PAGE 0014 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:50:04.75 INITIALIZATION,ERROR & MISC.ROUTINES 0303 * THIS ROUTINE WILL WAIT TO ALLOW SUFFICIENT TIME 0304 * FOR THE CONTROLLER TO UPDATE THE MAIN STATUS 0305 *  REGISTER WITH THE PROPER VALUE. 00A4 0E0D 0306 WAITSTAT ENT (P1=BIT PATTERN) 00A5 4801 0307  COPYQ =-255,LOOPCT 00A6 C796 00BD 0307+ 00A7 030A 0308 WAITLOOP XNX A 00A8 4101 0309  IN MAINSTAT,Q 00A9 D794 00BE 0310 TSTJMP RETNRDY,Q,MSRBITS,P1 00AA DB91 00BC 0310+ 00AB 5143 00AF 0310+ 00AC DF90 00BD 0311 IMS LOOPCT 00AD 9E79 00A7 0312 JMP WAITLOOP 00AE 9F75 00A4 0313  JMP *WAITSTAT 00AF DE74 00A4 0314 RETNRDY IMS WAITSTAT 00B0 9F73 00A4 0315 JMP *WAITSTAT  0316 * 0317 * THIS ROUTINE WILL FILL THE BUFFER WITH 'AAAA''S 00B1 0E0D 0318 FILLBUF ENT 00B2 28C0 0319 COPY =-64,X 00B3 A789 00BD 0320 COPY X,LOOPCT 00B4 A38A 00BF 0321  COPY BUFFADR,X 00B5 C38A 00C0 0322 COPY AAAA,Q 00B6 C480 0000 0323 LOOPFILL COPY Q,0(X) 00B7 2B01 0324 ADD =1,X 00B8 DF84 00BD 0325 IMS LOOPCT 00B9 9E7C 00B6 0326 JMP  LOOPFILL 00BA 9F76 00B1 0327 JMP *FILLBUF 000B 0328 LPOOL 00BB 011B READY 00BC 0010 P1 00BD 000C LOOPCT 00BE 000F MSRBITS 00BF 0002 BUFFADR 00C0 0000 AAAA 00C1 02CC DIAG:END 1PAGE 0015 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:50:07.75 INITIALIZATION,ERROR & MISC.ROUTINES 00C2 C68D 00C3 027E WAIT 00C4 0190 00C5 0011 P2 1PAGE 0016 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:50:08.75 DMA LOGIC TEST 0330 * 0331 * D M A P S E U D O  T E S T 0332 * 0333 * THE ASSUMPTION IS MADE THAT THE DMA LOGIC MAY VERY WELL BE TESTED  0334 * BY USING BIT 5 IN THE MODE REGISTER. SETTING AND RESETTING THIS 0335 * BIT ALLOWS TO SEN D OR RECEIVE BYTE AT A TIME. IT IS REQUIRED 0336 * TO SEND THE DMA BUFFER ADDRESS AND A COMMAND REGISTER INDICATING 0337 * INPUT OR OUTPUT DIRECTION PREVIOUS TO OPERATING WITH THE BIT 0338 * MENTIONED. THE DMA BYTE COUNT IS WORTHLESS IN THIS CASE. 0339 * 0340 * PREVIOUS TO SENDING A DMA BUFFER ADDRESS TO THE CONTROLLER, 0341 * THE 'UIM' BIT IN THE MAIN STATUS REGISTER IS UNPREDICTABLE.  0342 * AFTER THE DMA BUFFER ADDRESS IS SENT TO THE CONTROLLER, IT 0343 * SHOULD SET THE 'UIM' BIT IN THE MAIN STATUS REGISTER . 0344 * THE 'UIM' BIT STATUS WILL REMAIN VALID AS LONG AS THE CONTROLLER 0345 * IS NOT RESET AT WHICH TIME IT WILL BECOME UNPREDICTABLE 0346 * AGAIN. 0347 * 000000C6 0348 DMASTART EQU $ 00C6 DFCB 0112 0349 IMS CDRCODE 00C7 C3CA 0112 0350 CALL DISPLAY,CDRCODE DISPLAY DATA REG CODE 00C8 C773 00BC 0350+ 00C9 BE33 007D 0350+ 00CA E216 0061 0351 COPY BADJMP1,Y BAD JUMP WHILE DOING DMA 00CB C2C7 0113 0352 COPYQ =:200,MSRBITS SET UP CHECK BITS IN MSR 00CC C771 00BE 0352+ 00CD C371 00BF 0353 COPY BUFFADR,Q DMA BUFFER ADDRESS TO SET UP DMA 00CE 4B0A 0354  ADD =10,Q BIASED BY 10 00CF 030A 0355 XNX A REG.A CONTAINS BOARD ID 00D0 4400  0356 SELP Q,DMAPTR WRITE DMA ADDRESS POINTER TO BUFFER 0357 * 0358 * BYTE COUNT FOR DMA TRANSFERS CAN NOT BE TESTED 0359 * 00D1 C2C1 0113 0360 CALL WAITSTAT,=:200 WAIT FOR STATUS IN MSR 00D2 C769 00BC 0360+ 00D3 BE50 00A4 0360+ 1PAGE 0017 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:50:13.50 DMA LOGIC TEST 00D4 BE17 006C 0361 JST ERROR001 TIME OUT ERROR 00D5 C201 0057 0362 CALL COMMAND,=DMA:IN COMMAND FOR INPUT BIT SET 00D6 C765 00BC 0362+ 00D7 BE2C 0084 0362+ 00D8 48C0 0363 CALL PSEUDO,=-64 *** G0 EXECUTE PSEUDO DMA CALL 00D9 C762 00BC 0363+ 00DA BFB9 0114 0363+ 00DB 48E0 0364 COPYQ =-32,LOOPCT CHECK FIRST 32 WORDS FOR ANY CHANGE 00DC C760 00BD 0364+ 00DD A361 00BF 0365 COPY BUFFADR,X GET BUFFER ADDRESS 00DE 2B0A 0366 ADD  =10,X 00DF C080 0000 0367 COPYQ 0(X),MEMWORD GET FIRST WORD W EXPECTED CHANGE 00E0 C7B4 0115 0367+ 00E1 DB5E 00C0 0368 XOR AAAA,Q COMPARE WITH :AAAA (INITIAL VALUE IN IT) 00E2 51C4 00E7 0369 JNE  Q,INSIDE IF NOT = 0, ALLRIGHT 00E3 BE08 006C 0370 MASWELL JST ERROR001 OTHERWISE DMA LOGIC ERROR 00E4 C080 0000 0371 LOOP:B COPY 0(X),Q GET NEXT WORD IN THAT BUFFER AREA 00E5 DBAF 0115 0372 XOR MEMWORD,Q ALL OF THEM SHOULD BE THE SAME 00E6 51BC 00E3 0373 JNE Q,MASWELL OTHERWISE,WE HAVE AN ERRROR 00E7 2B01 0374 INSIDE ADD =1,X KEEP ON GOING 00E8 DF54 00BD 0375 IMS LOOPCT 00E9 9E7A 00E4 03 76 JMP LOOP:B UNTIL COUNT REACHES ZERO 0377 * 00EA 48E0 0378 COPY =-32,Q 00EB 4B0A 0379 ADD =10,Q BIASED BY 10 (22 WDS MUST BE= :AAAA) 00EC 4040 0380  CALL ALL:AAAA,Q *** VERIFY CONTENT TO BE = :AAAA 00ED C74E 00BC 0380+ 00EE BFA7 0116 0380+ 00EF BE41 00B1 0381  JST FILLBUF *** RESTORE CONSTANT INTO BUFFER 0382 * 0383 * BEFORE ATTEMPTING TO TEST WRITE MODE, WE WILL CHECK IF 0384 * THERE WAS A UNIMPLEMENTED MEMORY ADDRESS FOUND,IN 0385 * WHICH CASE,THE 'UIM' BIT STATUS CHANGES IN THE 'MAIN 0386 * STATUS REGISTER' CAN BE CHECKED TO DETER'MINED IF THE 0387 * CONTROLLER IF PROPERLY SENSING THE 'UIM' CONDITION. 0388 * 1PAGE 0018 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:50:19.25 DMA LOGIC TEST 00F0 A3A6 0117 0389 COPY UIMADDR,X RETRIEVE THE ADDRESS IF ANY 00F1 31C1 00F3 0390 JNE X,$+2 INDICATED BY A NON-ZERO VALUE 00F2 9E8D 0100 0391 JMP SKIP:UIM OTHERWISE,JUST SKIP THE TEST 00F3 030A 0392 XNX A BOARD ADDRESS 00F4 2400 0393  SELP X,DMAPTR SEND INVALID ADDRESS TO THE CONTROLLER 00F5 C29D 0113 0394 COPYQ =:200,P1 00F6 C745 00BC 0394+ 00F7 BE2C 00A4 0395 JST WAITSTAT WAIT FOR PROPER VALUE IN MAIN STATUS 00F8 BF9F 0118 0396  JST ERROR001 TIME OUT ERROR 00F9 48FF 0397 CALL PSEUDO,=-1 *** G0 EXECUTE PSEUDO DMA CALL  00FA C741 00BC 0397+ 00FB BF98 0114 0397+ 00FC 4900 0398 CALL WAITSTAT,=0 WAIT FOR MSR 00FD C73E 00BC 0398+ 00FE BE25 00A4 0398+ 00FF BF98 0118 0399 JST ERROR001 TIME OUT ERROR 0401 * 0402 * THIS IS THE END OF THE 'UIM TEST', IF THE CODE FOLLOWS 0403 * THROUGH,THE TEST PASSED; BUT JUST TO DOUBLE CHECK, 0404 * SEND A GOOD BUFFER ADDRESS TO THE CONTROLLER AND  0405 * VERIFY THAT THE 'UIM' BIT IS BACK 'ON'. 0406 * 0407 *  'UIM' BIT SHOULD REMAIN ON THROUGH THE REMAINING OF TEST 0408 * 00000100 0409 SKIP:UIM EQU $ 0100 A33E 00BF 0410 COPY BUFFADR,X RESTORE BUFFER ADDRESS 0101 030A 0411 XNX A  BOARD ADDRESS 0102 2400 0412 SELP X,DMAPTR WRITE NEW DMA BUFFER ADDRESS 0103 C28F 0113 0413  CALL WAITSTAT,=:200 WAIT FOR MSR 0104 C737 00BC 0413+ 0105 BE1E 00A4 0413+ 0106 BF91 0118 0414 JST  ERROR001 TIME OUT ERROR 0107 4900 0415 CALL COMMAND,=DMA:OUT 1PAGE 0019 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:50:24.00 DMA LOGIC TEST 0108 C733 00BC 0415+ 0109 BF8F 0119 0415+ 010A 48C0 0416 CALL PSEUDO,=-64 *** G0 EXECUTE PSEUDO DMA CALL 010B C730 00BC 0416+ 010C B F87 0114 0416+ 010D A331 00BF 0417 COPY BUFFADR,X 010E 48E0 0418 CALL ALL:AAAA,=-32 *** VERIFY NOTHING CHANGED IN BUFFER 010F C72C 00BC 0418+ 0110 BF85 0116 0418+ 0111 9E89 011B 0419 JMP READY  0008 0420 LPOOL 0112 0007 CDRCODE 0113 0200 0114 0233 PSEUDO 0115 000E MEMWORD 0116 0228 ALL:AAAA 0117 001C UIMADDR 0118 006C ERROR001 0119 0084 COMMAND 1PAGE 0020 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:50:26.50 INTERRUPT LOGIC TEST 0422 * 0423 * S E T C O N T R O L L E R R E A D Y 0424 * 0425 * UP TO 90% OF THE ISOLITE DIAGNOSTICS WILL BE DONE WITH 0426 * 5 1/4" DISK FLOPPY BANK. THE MAIN REASON BEING THE CONVENIENCE 0427  * IN THE MODE OF OPERATION OF THE MINI-FLOPPY DRIVES AS WELL 0428 * AS THE FACT THAT ONLY THREE OF THESE DRVES CAN BE CONNECTED 0429 * TO THE CONTROLLER (0-2), ALLOWING US TO ADDRESS THE 4TH  0430 * MINIFLOPPY DRIVE WITH THE ASSURANCE OF NO ACTUAL DRIVE 0431 * BEING CONNECTED AT ALL; IN THIS MANNER, WE NEED NOT WORRY 0432 * WHETHER A DISK FLOPPY IS INSERTED IN THE FLOPPY DRIVES 0433 * THUS PERMITTING TESTING OF WHICH THE USER HAD TO BE 0434 * INFORMED OTHERWISE. 0435 * 0436 * BECAUSE SWITCHING TO THE 5 1/4" DISK BANK DISSABLES THE  0437 * 8" DISK FLOPPY DRIVES FROM GENERATING DOOR INTERRUPTS 0438 * AND THE MINI-FLOPPIES DO NOT, AT ANY TIME,CHANGE THE 0439 * 'READY' STATUS, NO DOOR INTERRUPTS CAN BE SENSED,THEREFORE  0440 * ALL INTERRUPTS WILL BE PREDICTABLE. 0441 * 011A 0147 0442 JMPADDR1 WORD GOODJMP1 GOOD VECTOR 0443 * 0000011B 0444 READY EQU $ 011B DF76 0112 0445  IMS CDRCODE 011C C375 0112 0446 CALL DISPLAY,CDRCODE DISPLAY DATA REG CODE 011D C71E 00BC 0446+ 011E BFBD 015C 0446+ 011F E3C2 0162 0447 COPY BADJMP2,Y RESTORE Y-REG,IN CASE IT'S A RESUME TEST 0120 C2C2 0163 0448 COPYQ =:1DF,MSRBITS 0121 C71C 00BE 0448+ 0122 C270 0113 0449 COPYQ =:200,SAVEJUMP 0123 C7C0 0164 0449+ 0124 4900 0450 COPYQ =0,MEMFLAG 0125 C7BF 0165 0450+ 0126 490A 0451 CALL  SENDMODE,=:A SET CONTROLLER READY TO TEST MINI-FLOPPY 0127 C714 00BC 0451+ 1PAGE 0021 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:50:31.00 INTERRUPT LOGIC TEST 0128 BFB4 015D 0451+ 0129 A3B4 015E 0452 COPY D3000,X MORE THAN ENOUGH TIME 012A 030A 0453 LOOP4 XNX A 012B 4101 0454 IN MAINSTAT,Q MAIN STATUS REGISTER 012C 408F 0455 TBIT 8,Q 'INT' BIT SET ? 012D 36C2 0130 0456 JF OV,GOTIT LOOP UNTIL IT IS OFF OR TIME RUNS OUT 012E 34BB 012A 0457 IJNE  X,LOOP4 CONTINUE UNTIL INTERRUPT OR IME OUT 012F BFAF 015F 0458 JST ERROR002 0130 D6B2 0163 0459 GOTIT AND =:1DF,Q BIT 5 IS UNRELIABLE 0131 4C80 0460 CLSN =:80,Q RDY(7) BIT =1 ? AND INT(8) =0? 0461 * ************************************** 0132 BFB3 0166 0462  JST SENSE4 * SENSE INTERRUPT STATUS (4 TIMES) * 0463 * ************************************** 0133 BFAB 015F 0464 JST ERROR002 ERROR FROM PREVIOUS OR FROM 'SENSE4'. 0134 BFB2 0167 0465 JST SETJUMP DEFINE VECTOR ADDRESS 0135 9E97 014D 0466 JMP ALLBITS  ALL BITS IN VECTOR ADDR. CHECKED 0136 C3B1 0168 0467 COPY JST0X,Q REPLACE LOC.CONTENT 0137 C480 0000 0468 COPY Q,0(X) WITH THE 'JMP 0(X)' (VALID VECTOR) 0138 4900 0469 CALL SENDMODE,=0 RESET THE CONTROLLER 0139 C702 00BC 0469+ 013A BFA2 015D 0469+ 013B 4801 0470 COPY =-255,Q *  * 013C 54BF 013C 0471 IJNE Q,$ ************************************** 013D 030A 0472 XNX A 013E 2401 0473 SELP X,INTVADR SEND INTERRUPT VECTOR ADDRESS 0474 * TEST MAINLY MINI-FLOPPY 0475 *  ALLOW VECTORING INTERRUPTS 013F A25A 011A 0476 COPY JMPADDR1,X HANDLING ROUTINE ADDRESS 0140 0E85  0477 SBIT 8,S ALLOW INTERRUPTS 0141 490B 0478 CALL SENDMODE,=:B SET CONTROLLER TO TEST MINI-FLOPPY 0142 C79D 0160 0478+ 0143 BF99 015D 0478+ 0144 C399 015E 0479 COPY D3000,Q WAIT (3 MS) ASSUME 'IJNE' IS 5 X FASTER 0145 54BF 0145 0480 IJNE Q,$ (IJNE 5.50 US) ASSUME 1.1 US 0146 BF98 015F 0481 JST ERROR002 TIME OUT 0147 0E0D 0482 GOODJMP1 ENT 1PAGE 0022 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:50:36.75 INTERRUPT LOGIC TEST 0148 A39B 0164 0483  COPY SAVEJUMP,X 0149 C39F 0169 0484 COPYQ JST0Y,0(X) RESTORE JMP 0(Y) 014A C480 0000 0484+ 014B 2801 0485 COPY =-255,X 014C 9E5D 012A 0486 JMP LOOP4 LOOP SHOULD BE UNNECESSARY 1PAGE 0023 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:50:37.25 RECALIBRATE AND SEEK COMMAND TEST 0488 * 0489 * THE FOLLOWING TEST WILL EXECUTE THE 'SPECIFY' COMMAND 0490 * SINCE IT IS REQUIRED BY THE 'RECALIBRATE' COMMAND. IT 0491 * WILL BE TESTED WITH THE VECTORING ADDRESS (:1FF). 0492 * THE RECALIBRATE WILL BE DIRECTED TO THE PSEUDO-DISK DRIVE #3, 0493 * AND CONSEQUENTLY TIME OUT AFTER 77 STEP PULSES. THE INTERVAL 0494 * BETWEEN PULSES IS GIVEN BY THE SPECIFY COMMAND, IN THIS CASE 0495 * 2 MS. BECAUSE THE RECALIBRA TE COMMAND RESETS THE 'PCN' 0496 * (PRESENT CYLINDER NO.) TO ZERO EVEN THOUGH IT WILL NEVER  0497 * FIND IT, WE CAN USE THIS FEATURE TO TEST THE TIMER IN THE 0498 * 'SEEK' COMMAND LATER ON. 0499 * 0000014D 0500 ALLBITS EQU $ 014D DF44 0112 0501 IMS CDRCODE 014E C343 0112 0502 CALL DISPLAY,CDRCODE DISPLAY DATA REG CODE 014F C790 0160 0502+ 0150 BF8B 015C 0502+ 0151 A298 016A 0503 COPY =:1FF,X VECTOR LOCATION FOR INTERRUPT 0152 C395 0168 0504 COPYQ JST0X,0(X) SET UP JMP 0(X) 0153 C480 0000 0504+ 0154 030A 0505 XNX A 0155 2401 0506 SELP  X,INTVADR SEND ADDRESS TO CONTROLLER 0156 BF94 016B 0507 CALL SPECIFY SPECIFY COMMAND 0157 BF87 015F 0508 JST ERROR003 ************************************** 0158 BF88 0161 0509 JST RECALSEN * RECALIBRATE & SENSE INTERRUPT * 0159 BF85 015F 0510 JST ERROR003 ************************************** 015A 5153 016E 0511 JEQ Q,TIMESEEK IF 'PCN' NOT = 0, THEN IT IS AN ERROR 015B BF83 015F 0512  JST ERROR003 0010 0513 LPOOL 015C 007D DISPLAY 015D 009F SENDMODE 015E 0009 D3000 015F 0075 ERROR002 0160 0010 P1 0161 0265 RECALSEN 0162 0061 BADJMP2 1PAGE 0024 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:50:41.75 RECALIBRATE AND SEEK COMMAND TEST 0163 01DF 0164 0017 SAVEJUMP 0165 000D MEMFLAG 0166 01D1 SENSE4 0167 0243 SETJUMP 0168 0064 JST0X 0169 0063 JST0Y 016A 01FF 016B 0257 SPECIFY  0514 * 0515 * VERIFY RELIABILITY OF TIMER IN UFDC BOARD 0516 * STEPS: 1) RECALIBRATE...PCN=0 0517 * 2) SEEK CYL 70 0518 * 3) RECALIBRATE...PCN=0 0519 * 4) SEEK CYL 35 0520 * 5) COMPARE PROPORTION IN TIME 0521 * ASSUME 2 MS PER TRACK (OR CYL) 0522 * 016C 0178 0523 JMPADDR3 WORD GOODJMP3 VECTOR THROUGH ADDRESS 016D 0196 0524 JMPADDR4 WORD GOODJMP4 VECTOR THROUGH ADDRESS 0525 * 0000016E 0526 TIMESEEK EQU $ 016E C2D6 01C5 0527 CALL WAITSTAT,=:180 WAIT FOR MSR 016F C770 0160 0527+ 0170 BFD3 01C4 0527+ 0171 BF6D 015F 0528 JST ERROR003 0172 4946 0529  CALL SEEK,=70,JMPADDR3 SEEK COMMAND, CYLINDER 70, RETN ADDR 0173 C76C 0160 0529+ 0174 C277 016C 0529+ 0175 C7D0 01C6 0529+ 0176 BFD0 01C7 0529+ 0177 BF67 015F 0530 JST ERROR003 ************************************ 0178 0E0D 0531 GOODJMP3 ENT 0179 C366 0160 0532 COPYQ P1,TRK70CNT P1 WAIT LOOP COUNT OUTPUT 017A C7CD 01C8 0532+ 017B 4988 0533 CALL WAITSTAT,=:88 WAIT FOR MSR 1PAGE 0025 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:50:45.50 RECALIBRATE AND SEEK COMMAND TEST 017C C763 0160 0533 + 017D BFC6 01C4 0533+ 017E BF60 015F 0534 JST ERROR003 ************************************** 017F BFC9 01C9 0535 JST SENSE1 * SENSE INTERRUPT STATUS * 0180 BF5E 015F 0536 JST ERROR003 ************************************** 0181 4C46 0537 CLSN =70,Q 'PCN' = 70 ? 0182 9E81 0184 0538 JMP $+2 YES,FINE.....CONTINUE 0183 BF5B 015F 0539 JST ERROR003 0184 C2C0 01C5 0540 CALL WAITSTAT,=:180 WAIT FOR MSR 0185 C75A 0160 0540+ 0186 BFBD 01C4 0540+ 0187 BF57 015F 0541  JST ERROR003 ************************************** 0188 BF58 0161 0542 JST RECALSEN *  RECALIBRATE & SENSE INTERRUPT * 0189 BF55 015F 0543 JST ERROR003 ************************************** 018A 5141 018C 0544 JEQ Q,$+2 018B BF53 015F 0545 JST ERROR003 018C C2B8 01C5 0546  CALL WAITSTAT,=:180 WAIT FOR MSR 018D C752 0160 0546+ 018E BFB5 01C4 0546+ 018F BF4F 015F 0547 JST ERROR003 0190 4923 0548 CALL SEEK,=35,JMPADDR4 SEEK COMMAND, CYLINDER 35, RETN ADDR 0191 C74E 0160 0548+  0192 C25A 016D 0548+ 0193 C7B2 01C6 0548+ 0194 BFB2 01C7 0548+ 0195 BF49 015F 0549 JST ERROR003 ************************************** 0196 0E0D 0550 GOODJMP4 ENT 0197 C348 0160 0551 COPYQ P1,TRK35CNT P1 WAIT LOOP COUNT OUTPUT 0198 C7B1 01CA 0551+ 0199 4988 0552 CALL WAITSTAT,=:88 WAIT FOR MSR 019A C745 0160 0552+ 019B BFA8 01C4 0552+ 019C BF42 015F 0553 JST ERROR003 019D BEEC 020A 0554 JST SENSE1 * SENSE INTERRUPT STATUS * 019E BF40 015F 0555 JST ERROR003 ************************************** 019F 4C23 0556 CLSN =35,Q 'PCN' = 35 ? 1PAGE 0026 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:50:51.25 RECALIBRATE AND SEEK COMMAND TEST 01A0 9E81 01A2 0557 JMP $+2 YES,FINE.........CONTINUE 01A1 BF3D 015F 0558 JST ERROR003 01A2 DFA8 01CB 0559 IMS CDRCODE 01A3 C3A7 01CB 0560 CALL DISPLAY,CDRCODE DISPLAY DATA REG CODE 01A4 C73B 0160 0560+ 01A5 BF36 015C 0560+ 01A6 BFA5 01CC 0561 JST INLIMITS VERIFY DIFFERENCE IS NOT > 3.1 % 01A7 9F37 015F 0562 JMP ERROR004 1PAGE 0027 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:50:52.50 EIGHT INCH BANK TEST (SENSE DRIVE SATUS COMMAND) 0564 * THIS SECTION WILL SWITCH THE CONTROLLER TO THE 8" BANK 0565 * AND TEST THE SENSE DRIVE STATUS, EXPECTING THAT THE  0566 * DRIVE ID RETURNED IN THE RESULT REGISTER MATCHES THE 0567 * ID IN THE SENSE DRIVE STATUS COMMAND REQUESTED. 0568 * 01A8 DFA2 01CB 0569 IMS CDRCODE 01A9 C3A1 01CB 0570  CALL DISPLAY,CDRCODE DISPLAY DATA REG CODE 01AA C735 0160 0570+ 01AB BF30 015C 0570+ 01AC 4900 0571   CALL SENDMODE,=0 SEND MODE REG 01AD C732 0160 0571+ 01AE BF2E 015D 0571+ 01AF 4801 0572 COPY  =-255,Q 01B0 54BF 01B0 0573 IJNE Q,$ 01B1 4908 0574 CALL SENDMODE,=8 SET THE CONTROLLER READY 01B2 C72D 0160 0574+ 01B3 BF29 015D 0574+ 01B4 A329 015E 0575 COPY D3000,X 01B5 030A 0576 LASTLOOP XNX A 01B6 4101 0577 IN MAINSTAT,Q FOR MAIN STATUS TO BE UPDATED 01B7 407F 0578  TBIT 7,Q 01B8 3642 01BB 0579 JT OV,$+3 01B9 34BB 01B5 0580 IJNE X,LASTLOOP 01BA BF24 015F 0581 JST ERROR005 01BB 2903 0582 COPY =3,X SET UP DRIVE NO. 01BC BF90 01CD 0583 SDRIVES JST SENSEDRV NOW GET SENSE DRIVE STATUS 01BD BF21 015F 0584 JST ERROR005 FOR EACH DRIVE 01BE 5803 0585 AND =3,Q 01BF 402A 0586 CSN X,Q X-REG & Q-REG. MUST MATCH 01C0 9E81 01C2 0587 JMP $+2 01C1 BF1D 015F 0588 JST ERROR005 01C2 35B9 01BC 0589  JNED X,SDRIVES X-REG. CONTAINS DRIVE NO. BEING TESTED 01C3 9F8A 01CE 0590 JMP DIAG:END 000B 0591 LPOOL 01C4 00A4 WAITSTAT 01C5 0180 1PAGE 0028 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:50:57.00 EIGHT INCH BANK TEST (SENSE DRIVE SATUS COMMAND) 01C6 0011 P2 01C7 0286 SEEK 01C8 001B TRK70CNT 01C9 020A SENSE1 01CA 001A TRK35CNT 01CB 0007 CDRCODE 01CC 0299 INLIMITS 01CD 02B9 SENSEDRV 01CE 02CC DIAG:END 1PAGE 0029 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:50:57.50 **** S U B R O U T I N E S **** 0593 * SENSE INTERRUPT STATUS PART 1 0594 *  THIS COMMAND IS REQUIRED IN ORDER TO SET INTERRUPT BIT 0595 * IN MAIN STATUS REGISTER FOLLOWING A RESET & SET CONTROLLER 0596 * READY. THIS BIT IS SET LOW WHEN AN INTERRUPT IS SENSED, 0597 * WHICH WILL BE, BECAUSE MINI-FLOPPY DRIVES ARE ALWAYS 0598 * READY WHEN THE CONTROLLER IS SET READY. 0599 * 0600 *.......INTERRUPT BIT IS SET LOW BY THE CONTROLLER ONLY ONCE.......... 0601 *.......BUT FOUR SENSE INTERRUPTS MUST BE ISSUED,ONE FOR EACH......... 0602 *.......POSSIBLE DISK DRIVE THAT CAN BE CONNECTED (4)................. 01CF 01D0 0603 C:1D0 WORD :1D0 INT,RDY,DIR,BUSY BITS SET ? 01D0 0180 0604 C:180 WORD :180 INT,RDY BITS SET ? OTHERS CLEAR. 0605  * 01D1 0E0D 0606 SENSE4 ENT 01D2 2025 0607 XOR X,X 01D3 A7CE 0222 0608 COPY X,FOURBITS USE TO RECORD SENSED DISK DRIVES 01D4 C2CE 0223 0609 SENSE CALL COMMAND,=:108 SENSE INTERRUPT STATUS 01D5 C70A 0160 0609+ 01D6 BFCD 0224 0609+ 01D7 C277 01CF 0610 CALL WAITSTAT,C:1D0 WAIT FOR MSR 01D8 C707 0160 0610+ 01D9 BF6A 01C4 0610+ 01DA 9F76 01D1 0611 JMP *SENSE4 PROBLEMS 0612 * 1PAGE 0030   MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:51:01.25 **** S U B R O U T I N E S **** 0614 * ** READ RESULTS FROM SENSE INTERRUPT STATUS ** 0615 * INITIALLY WE'LL SENSE AN ASSUMED INTERRUPT FROM THE FOUR 0616 * POSSIBLE MINI-FLOPPIES THAT CAN BE CONNECTED, THIS IS SO 0617 * BECAUSE WHEN THE CONTROLLER IS SET READY, IT SENSES THE 0618 *  'READY' LINES COMING FROM THE DISK FLOPPY DRIVES ASSOCIATED 0619 * WITH FLOPPY BANK ACTIVE AT THE TIME THE CONTROLLER IS SET 0620 * TO THE 'READY' STATE. SINCE THE MINI-FLOPPY DRIVES ARE  0621 * ALWAYS IN THE 'READY' STATE, AN INTERRUPT WILL BE SENSED 0622 * FOR EACH EVEN THOUGH THE INTERRUPT BIT IN THE 'MAIN STATUS 0623 * REGISTER' WILL ONLY GO LOW THE FIRST TIME IT IS SENSED.  0624 * ADDITIONAL 'SENSE INTERRUPT' COMMAND MUST BE ISSUED UNTIL 0625 * 'STATUS BYTE -0-' RETURNS AN 'INV. COMMAND ISSUED'. 0626 * 01DB 030A 0627 RESULTS XNX A BOARD ADDRESS 01DC 4100 0628 IN RESULT,Q STATUS BYTE -0- 01DD 58FB 0629 AND =:FB,Q  CAN'T DEPEND ON FBIT 2 (HEAD ADDRESS) 01DE BE95 01F4 0630 JST CHKALL4 DETERMINE IF ERROR BY NOW 01DF 9F71 01D1 0631 JMP *SENSE4 RET+0 MEANS SOMETHING WRONG 01E0 9E91 01F2 0632 JMP ALL4OK RET+1 MEANS ALL 4 DRIVES SENSED 01E1 BE9D 01FF 0633 JST CHKDRIVE RET+2 ALLRIGHT, CHECK WHICH DRIVE 01E2 030A 0634 XNX A 01E3 4101 0635 IN MAINSTAT,Q VERIFY MAIN STATUS REGISTER 01E4 D7C0 0225 0636 TSTJMP $+2,Q,MSRBITS,C:1D0 Q SHOULD NOT HAVE CHANGED 01E5 DA69 01CF 0636+ 01E6 5141 01E8 0636+ 01E7 9F69 01D1 0637 JMP *SENSE4 WHY WOULD IT CHANGE? 01E8 030A 0638 XNX A 01E9 4100 0639 IN RESULT,Q THIS MUST BE THE 'PCN' AND =0 01EA 58FF 0640 AND =:FF,Q 01EB 5141 01ED 0641 JEQ Q,$+2 IF NOT = 0 , THEN IT IS AN ERROR. 01EC 9F64 01D1 0642 JMP  *SENSE4 01ED C262 01D0 0643 CALL WAITSTAT,C:180 WAIT FOR MSR 01EE C7B2 0221 0643+ 01EF BF54 01C4 0643+ 01F0 9F60 01D1 0644 JMP *SENSE4 ANYTHING ELSE IS AN ERROR 01F1 9E62 01D4 0645 JMP SENSE  RETURN TO SEND NEXT S.I.S 1PAGE 0031 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:51:06.25 **** S U B R O U T I N E S **** 0646 * 01F2 DE5E 01D1 0647 ALL4OK IMS SENSE4 RETURN +1 01F3 9F5D 01D1 0648 JMP *SENSE4 0649 * 1PAGE 0032 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:51:06.75 **** S U B R O U T I N E S ****  0651 * THIS ROUTINE WILL VERIFY THE RESULT REGISTER FOLLOWING 0652 * THE 'SENSE INTERRUPT S TATUS' COMMAND . 0653 * THE COMMAND WAS SENT TO THE CONTROLLER INMEDIATELY AFTER 0654  * CONTROLLER WAS SET READY AND THE RESULT REGISTER IS 0655 * PREDICTABLE. IF AN 'INVALID COMMNAD' CODE IS RECEIVED 0656 * ALL FOUR DRIVES SHOULD HAVE BEEN SENSED; IF ALL FOUR 0657 * DRIVES HAD BEEN SENSED , AN 'INVALID COMMAND' CODE SHOULD 0658 * BE EXPECTED.  0659 * 01F4 0E0D 0660 CHKALL4 ENT DETERMINE IF ERROR ALREADY DETECTED 01F5 A3AC 0222 0661  COPY FOURBITS,X GET DRIVES SENSED 01F6 4C80 0662 CLSN =:80,Q INVALID COMMAND CODE 01F7 9E84 01FC 0663 JMP ALLFOUR CHECK IF ALLFOUR ALREADY RECEIVED 01F8 2C0F 0664 CLSN =:F,X NO,CHECK IF ALLFOUR ALRADY RECEIVED 01F9 9F7A 01F4 0665 JMP *CHKALL4 YES,SHOULD'NT HAVE BEEN 01FIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII  IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII! IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIe840308134409840308134409840308145823e@840308134409840308134409840308135333" e840308134409840308134409840308145433e840308134409840308134409840308134409840308134409840308134409840308134409e8010061328002580100613280475840308145538eM8010061327342580100613275500840308145616eTd'Q8402291049232584022910515025840308145718 eEv# 8403080956340084030809573225840308145813 e8212211204137582122112041475840308145822$ % & ' ( ) * + . UFDC:ISO:IDLSTISO:SMALL LSTISO:BIG LST UFDC:BOOT LST PRINT:ALL JCL, A DE79 01F4 0666 IMS CHKALL4 01FB DE78 01F4 0667 IMS CHKALL4 OK,MORE DRIVES TO BE SENSED  01FC 2C0F 0668 ALLFOUR CLSN =:F,X ARE ALL DRIVES SENSED WITH 'INV.COMMAND' 01FD DE76 01F4 0669 IMS CHKALL4 YES, GOOD RETURN 01FE 9F75 01F4 0670 JMP *CHKALL4 RETURN GOOD OR BAD  0671 * 1PAGE 0033 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:51:09.75 **** S U B R O U T I N E S **** 0673 * THIS ROUTINE WILL DETERMINE THE MINI-FLOPPY DRIVE THAT  0674 * WAS SENSED WITH THE 'SENSE INTERRUPT STATUS' COMMAND 0675 * AND SET THE APPROPIATE BIT IN REG.X; WHICH,IS 0676 * BEING USED TO DETERMINE IF ALL DRIVES WERE SENSED 0677 * PREVIOUS TO RECEIVING THE 'INVALID COMMAND' (:80) CODE. 0678 * 01FF 0E0D 0679 CHKDRIVE ENT 0200 4CC0 0680 CLSN =:C0,Q DRIVE 0? 0201 200C 0681 SBIT 0,X UNIQUE BIT SETTING FOR EACH 0202 4CC1 0682 CLSN =:C1,Q DRIVE 1? 0203 201C 0683 SBIT 1,X ETC 0204 4CC2 0684 CLSN =:C2,Q ETC... 0205 202C 0685 SBIT 2,X 0206 4CC3 0686 CLSN =:C3,Q 0207 203C 0687 SBIT 3,X 0208 A799 0222 0688 COPY  X,FOURBITS SAVE DRIVES SENSED 0209 9F75 01FF 0689 JMP *CHKDRIVE RETURN (NO ERROR POSSIBLE) 1PAGE 0034 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:51:11.75 **** S U B R O U T I N E S **** 0691 * SENSE INTERRUPT STATUS PART 2 0692 * THIS ROUTINE WILL SEND A SENSE INTERRUPT STATUS IN 0693 * ORDER TO TERMINATE THE RECALIBRATE OR SEEK COMMAND.  0694 * WILL ASSUME THAT IN EITHER CASE,THE CONTENT OF THE 0695 * STATUS BYTE -0- WILL BE THE SAME. 0696 * NORMAL RET(+1)...REG-Q = 'PCN' (LAST RESULT REG) 0697 *  0698 * NO LOOP - ONE SENSE INTERRUPT IS EXECUTED WHEN CALLED 0699 * 020A 0E0D 0700 SENSE1  ENT 020B C297 0223 0701 CALL COMMAND,=:108 SENSE INTERRUPT STATUS COMMAND 020C C794 0221 0701+ 020D BF96 0224 0701+ 020E C297 0226 0702 CALL WAITSTAT,=:1D8 WAIT FOR MSR 020F C791 0221 0702+ 0210 BF33 01C4 0702+ 0211 9F78 020A 0703 JMP *SENSE1 0212 030A 0704 XNX A 0213 4100 0705 IN  RESULT,Q 0214 580B 0706 AND =:B,Q EXPECT SOMETHING VERY DEBINITE 0215 4C03 0707  CLSN =:3,Q UNIT=3,EQU.CHK=1,...,BIT6=1,BIT=0. 0216 9E81 0218 0708 JMP $+2 NORMAL TERMINATION 0217 9F72 020A 0709 JMP *SENSE1 0218 C28E 0227 0710 CALL WAITSTAT,=:1D0 WAIT FOR MSR 0219 C787 0221 0710+ 021A BF29 01C4 0710+ 021B 9F6E 020A 0711 JMP *SENSE1 ERROR RETURN 021C 030A 07- 12 XNX A 021D 4100 0713 IN RESULT,Q 2ND RESULT 'PCN' (PRESENT CYLINDER NO.) 021E 58FF 0714 AND =:FF,Q ISOLATE THE LOWER BYTE 021F DE6A 020A 0715 IMS SENSE1 RET +1 NORMAL 0220 9F69 020A 0716 JMP *SENSE1 0007 0717 LPOOL 0221 0010 P1 0222 000B FOURBITS 0223 0108 1PAGE 0035 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:51:16.25 **** S U B R O U T I N E S **** 0224 0084 COMMAND 0225 000F MSRBITS 0226 01D8 0227 01D0 0718 * 1PAGE 0036 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:51:16.50 **** S U B R O U T I N E S **** 0720 * THIS ROUTINE WILL CHECK FOR THE CONTENT OF THE BUFFER 0721 * TO BE :AAAA. STARTING BUFFER ADDRESS SHOULD ALREADY BE 0722 * IN THE Q-REG. NEGATIVE COUNT SHOULD ALREADY BE IN THE 0723 * X-REG. UPON RETURNING, THE Q-REG WILL BE CLEARED TO 0724  * INDICATE NO MISSMATCH. 0725 * 0228 0E0D 0726 ALL:AAAA ENT (P1=NEGATIVE COUNT OF WORDS TO CHECK) 0229 C377 0221 0727 COPYQ P1,LOOPCT NEGATIVE COUNT OF WORDS TO CHECK 022A C794 023F 0727+ 022B C080 0000 0728 LOOP:C COPY 0(X),Q 022C DB93 0240 0729 XOR AAAA,Q 022D 5141 022F 0730  JEQ Q,$+2 022E BF92 0241 0731 JST ERROR001 ROUTINE USED ONLY IN TEST #1 022F 2B01 0732  ADD =1,X 0230 DF8E 023F 0733 IMS LOOPCT 0231 9E79 022B 0734 JMP LOOP:C LOOP BACK UNTIL COUNT=0 0232 9F75 0228 0735 JMP *ALL:AAAA 0736 * 1PAGE 0037 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:51:18.75 **** S U B R O U T I N E S ****  0738 * PSEUDO-DMA READ/WRITE ROUTINE 0739 * 0233 0E0D 0740 PSEUDO ENT  (P1=NO. OF BYTES TO MOVE) 0234 C36C 0221 0741 COPYQ P1,LOOPCT 0235 C789 023F 0741+ 0236 4920 0742 LOOP:A CALL SENDMODE,=FAKEDMA SET MODE REGISTER BIT 5 (:20) 0237 C769 0221 0742+ 0238 BF89 0242 0742+ 0239 4900  0743 CALL SENDMODE,=0 SEND MODE REG 023A C766 0221 0743+ 023B BF86 0242 0743+ 023C DF82 023F 0744  IMS LOOPCT DECREMENT BYTE COUNT UNTIL ZERO 023D 9E78 0236 0745 JMP LOOP:A KEEP LOOPING UNTIL THEN 023E 9F74 0233 0746 JMP *PSEUDO RETURN 0004 0747 LPOOL 023F 000C LOOPCT 0240 0000 AAAA 0241 006C ERROR001 0242 009F SENDMODE 0748 * 1PAGE 0038 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:51:21.25 **** S U B R O U T I N E S **** 0750 * THIS ROUTINE WILL DEFINE THE VECTOR ADDRESS TO BE USED IN THE 0751 * TESTING OF THE VECTORING INTERRUPTS. TO TEST LOWER MEMORY, 0752 * AN INITIAL VALUE OF :200 IS SHIFTED TO THE RIGHT BY ONE BIT .  0753 * EACH TIME, UNTIL ZERO IS REACHED; ZERO IS NOT TESTED AS AN 0754 * INTERRUPT ADDRESS. TO TEST UPPER PART OF MEMORY, THE TOP 0755 * OF 'RAM' IS OBTAINED AND SHIFTED RIGHT IN THE SAME MANNER 0756 * DESCRIBED UNTIL END OF ISOLITE BUFFER IS REACHED. 0757 * 0243 0E0D 0758 SETJUMP ENT 0244 C3E7 02AC 0759 COPY MEMFLAG,Q GET FLAG 0245 A3E7 02AD 0760 COPY SAVEJUMP,X ORIGINAL ADDRESS = :200 0246 2E09 0761 SHIFT X,RO,1 SHIFT AGAIN 0247 3146 024E 0762 JEQ X,SETEND SHIFTED ALL THE WAY OUT ? 0248 A7E4 02AD 0763 COPY X,SAVEJUMP SAVE ADDRESS 0249 5141 024B 0764 JEQ Q,SETRETN SKIP IF CHECKING 0-:1FF 024A 4026 0765 COMPARE CSM Q,X  END OF ISOLITE REACHED? 024B DE77 0243 0766 SETRETN IMS SETJUMP 024C 9F76 0243 0767 JMP *SETJUMP 024D 9F75 0243 0768 JMP *SETJUMP RETURN IF Q >= X 024E A3DF 02AE 0769 SETEND COPY RAMEND,X 024F 3142 0252 0770 JEQ X,$+3 NO UIM, MUST START FROM TOP OF MEMORY 0250 2E09 0771 SHIFT X,RO,1 GENERATE A VALID ADDRESS WITH ONE BIT 0251 9E81 0253 0772 JMP $+2 0252 20FC 0773  SBIT 15,X IF NO UIM THEN START FROM TOP 0253 A7D9 02AD 0774 COPY X,SAVEJUMP 0254 C3DA 02AF 0775 COPYQ BUFFEND,MEMFLAG CLEAR FLAG 0255 C7D6 02AC 0775+ 0256 9E73 024A 0776 JMP COMPARE  0777 * 1PAGE 0039 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:51:24.75 **** S U B R O U T I N E S **** 0779 * THIS ROUTINE WILL SEND A SPECIFY COMMAND TO THE CONTROLLER 0780 * ACCORDING TO THE STEP RATE SPECIFY IN THE X-REG UPON ENTRY 0781 * 0257 0E0D 0782 SPECIFY ENT 0258 C2D7 02B0 0783 CALL SENDWAIT,=:103,=:F1 SEND WITH STEP RATE = 2 MS 0259 C747 0221 0783+ 025A 49F1 0783+ 025B C7D5 02B1 0783+ 025C BFD5 02B2 0783+ 025D 9F79 0257 0784 JMP *SPECIFY 025E 4900 0785 CALL SPECIFIC,=0 SEND 2ND SPEC REG. 025F C741 0221 0785+ 0260 BFD2 02B3 0785+ 0261 9F75 0257 0786 JMP *SPECIFY TIME OUT ON SPEC REG 0262 DE74 0257 0787 IMS SPECIFY NORMAL RETURN +1 0263 9F73 0257 0788 JMP *SPECIFY 0789 * 1PAGE 0040 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:51:27.25 **** S U B R O U T I N E S ****  0791 * THIS ROUTINE WILL EXECUTE A RECALIBRATE COMMAND AND 0792 * CONSEQUENTLY THE SENSE INTERRUPT STATUS. IT WILL RETURN 0793 * WITH THE 'PCN' IN REG-Q. 0794 * 0264 0269  0795 JMPADDR2 WORD GOODJMP2 VECTOR THROUGH ADDRESS 0265 0E0D 0796 RECALSEN ENT 0266 A27D 0264 0797  COPY JMPADDR2,X ADDR. OF LOC. TO JUMP THROUGH VECTOR 0267 BE8A 0272 0798 JST RCLBRATE * R E / C A L I B R A T E * 0268 9F7C 0265 0799 JMP *RECALSEN ERROR 0269 0E0D 0800 GOODJMP2 ENT 026A 4988 0801 CALL WAITSTAT,=:88 WAIT FOR MSR 026B C735 0221 0801+ 026C BFBE 02AB 0801+ 026D 9F77 0265  0802 JMP *RECALSEN ERROR 026E BE1B 020A 0803 JST SENSE1 * S E N S E I N T E R R U P T * 026F 9F75 0265 0804 JMP *RECALSEN ERROR 0270 DE74 0265 0805 IMS RECALSEN NORMAL RETURN 0271 9F73 0265 0806 JMP *RECALSEN 0807 * 1PAGE 0041 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:51:30.00 **** S U B R O U T I N E S ****  0809 * THIS ROUTINE WILL EXECUTE THE RECALIBRATE COMMAND 0810 * AND MAY BE CALLED ANY TIME THE 'PCN' NEED TO BE 0811 * RESET TO 0. 0812 * 0272 0E0D 0813 RCLBRATE ENT 0273 C2C0 02B4 0814 CALL SENDWAIT,=:107,=3 SEND COMMAND,WAIT AND SEND SPEC REG 0274 C72C 0221 0814+ 0275 4903  0814+ 0276 C7BA 02B1 0814+ 0277 BFBA 02B2 0814+ 0278 9F79 0272 0815 JMP *RCLBRATE ERROR RETURN 0279 0E85 0816 SBIT 8,S ENABLE INTERRUPTS 027A 4900 0817 CALL WAIT,=0 WAIT FOR INTERRUPT WITH COUNT 027B C725 0221 0817+ 027C BE81 027E 0817+ 027D 9F74 0272 0818 JMP *RCLBRATE THIS JUMP SHOUL NEVER OCCUR 0819 * 1PAGE 0042 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:51:32.50 **** S U B R O U T I N E S **** 027E 0E0D 0821 WAIT ENT (P1=START COUNT TO 65,535) 027F 0000 0822 LOOPNOP NOP * * * * * * * * * * * * * * * * * * * 0280 0000 0823 NOP * * 0281 0000 0824 NOP  * USED TO DELAY COUNTER INCREMENT * 0282 0000 0825 NOP *  * 0283 DF1D 0221 0826 IMS P1 * * * * * * * * * * * * * * * * * * * 0284 9E7A 027F 0827 JMP LOOPNOP COUNT: 0 - 65,535 0285 9F78 027E 0828 JMP *WAIT OVERFLOW RESULTS IN AN ERROR 0829 * 1PAGE 0043 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:51:33.75 **** S U B R O U T I N E S **** 0831 * THIS ROUTINE WILL EXECUTE A 'SEEK' COMMAND TO THE TRACK 0832 * SPECIFIED IN MEMORY LOCATION 'CYL'. IT IS ASSUMED 0833 *  THAT PREVIOUS TO EXECUTING THIS COMMAND, A RECALIBRATE 0834 * COMMAND HAD BEEN ISSUED, THEREFORE, MAKING THE 0835 * CONTROLLER BELIEVE THAT THE HEAD IS ON TRACK -0-. 0836 * 0286 0E0D  0837 SEEK ENT (P1=CYLINDER NO., P2=INTERRUPT VECTOR ADDRESS) 0287 C319 0221 0838 COPYQ  P1,CYL 0288 C7AC 02B5 0838+ 0289 A3A7 02B1 0839 COPY P2,X INTERRUPT VECTOR 028A C2AB 02B6 0840 0  CALL SENDWAIT,=:10F,=3 SEND COMMAND,WAIT AND SEND SPEC REG 028B C715 0221 0840+ 028C 4903 0840+ 028D C7A3 02B1 0840+ 028E BFA3 02B2 0840+ 028F 9F76 0286 0841 JMP *SEEK 0290 C3A4 02B5 0842 CALL SPECIFIC,CYL SEND TRACK NO AS SPEC REG 0291 C70F 0221 0842+ 0292 BFA0 02B3 0842+ 0293 9F72 0286 0843 JMP *SEEK TIME OUT ON SPEC REG 0294 0E85 0844 SBIT 8,S ENABLE INTERRUPTS 0295 4900 0845  CALL WAIT,=0 WAIT FOR INTERRUPT WITH COUNT 0296 C70A 0221 0845+ 0297 BE66 027E 0845+ 0298 9F6D 0286 0846 JMP *SEEK THIS JUMP SHOULD NEVER OCCUR 0847 * 1PAGE 0044 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:51:37.75 **** S U B R O U T I N E S **** 0849 * THIS ROUTINE WILL COMPARE THE TWO COUNTS GENARATED FROM 0850 * THE SEEK OF TRACK 70 AND THE SEEK OF TRACK 35. IF TWICE 0851 * THE COUNT GENERATED IN THE TRACK 35 'SEEK' IS MORE  0852 * THAN 3.1 % OFF (UNDER & ABOVE - 6.2 % WINDOW) THEN WE 0853 * ASSUME AN ERROR IN THE CONTROLLER TIMER. 0854 * 0299 0E0D 0855 INLIMITS ENT 029A C39C 02B7 0856 COPY TRK35CNT,Q GET TRACK 35 COUNT 029B 4042 0857 ADD Q,Q 029C C79A 02B7 0858 COPY Q,TRK35CNT DOUBLE IT AND SAVE IT 029D A39A 02B8 0859 COPY TRK70CNT,X GET TRACK 70 COUNT 029E 2E4C 0860 SHIFT X,RA,5 DIVIDE BY 32,TO GET APPR. 3% 029F C398 02B8 0861 COPY TRK70CNT,Q GET COUNT FOR TRACK 70 AGAIN 02A0 4022 0862 ADD X,Q ADD 3% AMOUNT 02A1 FB95 02B7 0863 CSK Q,TRK35CNT COMPARE TO: 2X TRACK 35 COUNT 02A2 9F76 0299 0864 JMP *INLIMITS < ERROR RETURN 02A3 0000 0865  NOP > OK 02A4 C393 02B8 0866 COPY TRK70CNT,Q GET COUNT FOR TRACK 70 AGAIN 02A5 4023  0867 SUB X,Q SUBTRACT 3% AMOUNT 02A6 FB90 02B7 0868 CSK Q,TRK35CNT COMPARE TO: 2X TRACK 35 COUNT 02A7 9E81 02A9 0869 JMP $+2 < OK 02A8 9F70 0299 0870 JMP *INLIMITS > ERROR RETURN 02A9 DE6F 0299 0871 IMS INLIMITS NORMAL RETURN INDICATING:OK 02AA 9F6E 0299 0872  JMP *INLIMITS RETURN 000E 0873 LPOOL 02AB 00A4 WAITSTAT 02AC 000D MEMFLAG 02AD 0017 SAVEJUMP 02AE 0016 RAMEND 02AF 0003 BUFFEND 02B0 0103 02B1 0011 P2 02B2 0095 SENDWAIT 02B3 0089 SPECIFIC 02B4 0107 02B5 0008 CYL 1PAGE 0045 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:51:41.25 **** S U B R O U T I N E S **** 02B6 010F 02B7 001A TRK35CNT 02B8 001B TRK70CNT 0874 * 1PAGE 0046 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:51:41.50 **** S U B R O U T I N E S **** 0876 * THIS ROUTINE WILL SEND THE 'SENSE DRIVE STATUS' COMMAND 0877 * WHILE1  THE CONTROLLER IS IN THE 8" BANK, WAIT ACCORDINGLY 0878 * BEFORE SENDING THE SPECIFICATION REGISTER AND BEFORE 0879 * EXPECTING THE RESULT REGISTER , AND RETURN WITH THE 0880 * RESULT IN Q-REG. 02B9 0E0D 0881 SENSEDRV ENT 02BA C29F 02DA 0882 CALL COMMAND,=:104 02BB C79F 02DB 0882+  02BC BF9F 02DC 0882+ 02BD C29F 02DD 0883 CALL WAITSTAT,=:190 02BE C79C 02DB 0883+ 02BF BF6B 02AB 0883+ 02C0 9F78 02B9 0884 JMP *SENSEDRV RETURN ON ERROR 02C1 030A 0885 XNX A 02C2 2200 0886 OUT X,SPEC:FC SEND SPECIFICATION REGISTER 02C3 C29A 02DE 0887 CALL WAITSTAT,=:1D0 02C4 C796 02DB 0887+ 02C5 BF65 02AB 0887+ 02C6 9F72 02B9 0888 JMP *SENSEDRV 02C7 030A 0889 XNX  A 02C8 4100 0890 IN RESULT,Q GET RESULT BYTE 3 02C9 58FF 0891 AND =:FF,Q  ISOLATE LOWER BYTE 02CA DE6E 02B9 0892 IMS SENSEDRV NORMAL RETURN 02CB 9F6D 02B9 0893 JMP *SENSEDRV 1PAGE 0047 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:51:45.00 ---- LAST SECTION OF MAIN LINE CODE ---- 000002CC 0895 DIAG:END EQU $ 02CC 8392 02DF 0896 COPY AREG,A RESTORE A-REG 02CD 4900 0897 CALL SENDMODE,=0 02CE C78C 02DB 0897+ 02CF BF90 02E0 0897+ 02D0 C288 02D9 0898 COPYQ SAL00,SALOOP MUST STORED LOOPBACK SAL INSTRUCTION 02D1 C697 02E9 0898+ 02D2 A38E 02E1 0899 COPY XREG,X RESTORE X-REGISTER 02D3 C38E 02E2 0900 COPY CDR,Q RESTORE CONSOLE DATA REGISTER 02D4 4404 0901 SELP Q,4 TO THE ORIGINAL (SAVED) VALUE 02D5 C38D 02E3 0902 COPYQ SREG,S RESTORE S-REGISTER 02D6 3040 0902+ 02D7 C38C 02E4 0903 COPY QREG,Q  RESTORE Q-REGISTER 02D8 9F8C 02E5 0904 JMP START 02D8 0001 0905 ORG $-1 OVERLAY PREVIOUS WITH REAL INSTRUCTION 02D8 9E8F 02E8 0906 JMP SALCHAIN 0907 * 02D9 6600  0908 SAL00 SAL 0,0 SAL 0,0 INSTRUCTION 000E 0909 LPOOL 02DA 0104 02DB 0010 P1 02DC 0084 COMMAND 02DD 0190 02DE 01D0 02DF 0001 AREG 02E0 009F SENDMODE 02E1 001D XREG 02E2 0006 CDR 02E3 0019 SREG 02E4 0015 QREG 02E5 001F START 02E6 02E7 000002E8 0910 SALCHAIN EQU $ 0911 * SAL CHAIN  AT PROGRAM END+1 000002E9 0912 SALOOP EQU SALCHAIN+1 1PAGE 0048 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER ISOLITE DIAGNOSTICS (84-93706-20 A1) 1984/02/29 10:51:48.75 ---- LAST SECTION OF MAIN LINE CODE ---- 0913 * SAL LOOPBACK AT PROGRAM END+2 000002EA 0914 BUFFER EQU SALOOP+1 001F 0915  END START 0000 ERRORS (0000/0000) 0000 WARNINGS (0000/0000) 0911 * SAL CHAIN  AT PROGRAM END+1 000002E9 0912 SALOOP EQU SALCHAIN+1 1PAGE 0048 MACRO (F400) UNIV.FLOPPY DISK CONTROLLER 2 1PAGE 0001 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK BOOT (DSBOOT 84-93706-21-B1) 1984/03/08 09:56:35.25 1/31/80 -- REVISION OF HARD DISK BOOT (93506-29-D0) SI = DH00.UFDC:BOOT.ASM SO = DH00.UFDC:BOOT.OBJ LO = DH00.UFDC:BOOT.LST 0003 * 0004 ********************************************************************** 0005 * PROGRAM REVISION HISTORY 0006 * 0007 * B1 - ADDED TIMER TO READY LOOP IN FDC COMMAND INTERPRETER 0008 * SO TO BOOT FROM NEXT HIGHER READY DEVICE WHEN 5 1/4 INCH 0009 *  FLOPPY DISKETTES ARE NOT INSERTED. GCW 2/14/84 0010 * 0011 ********************************************************************** 0012 * 0013 * ********************************************************** 0014 ************ NOTE THAT IN THIS VERSION OF THE DISC BOOT ************ 0015 ************ THE F-LIST NEED NOT BE A CONTIGUOUS FILE ************ 0016 *  ********************************************************** 0017 * 0018 * TYPE CODES FOR THE FLAKEYS! 0019 * (TYPE CODES 1-8 AND :18 CANNOT BE CHANGED!) 0020 * 00000040 0021 TCNULL EQU :40 0000004F 0022 TCSGMT EQU :4F 00000067 0023 TCRELS EQU :67  00000069 0024 TCLOC EQU :69 0000006D 0025 TCNOTE EQU :6D 0000006F 0026 TCSGML EQU  :6F 0027 * 0028 * F-NUMBERS FOR THE FIXED ENTRIES OF THE F-LIST 0029 * 00000001 0030 DIR:NO EQU 1 00000002 0031 FLS:NO EQU 2 0032 *  0033 * 0034 * IOS DEFINED EQUATES 0035 * 00000003 0036 VC:BPS EQU  3 BYTES/SECTOR IN VCB 00000004 0037 VC:SPT EQU 4 SECTORS/TRACK IN VCB 00000005 0038 VC:TPC EQU 5 TRACKS/CYLINDER IN VCB 1PAGE 0002 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK BOOT (DSBOOT 84-93706-21-B1) 1984/03/08 09:56:37.00 1/31/80 -- REVISION OF HARD DISK BOOT (93506-29-D0) 00000006 0039 VC:CPD EQU 6 CYLINDERS/DEVICE IN VCB 00000008 0040 VC:SPA EQU 8 SECTORS/AU IN VCB  00000009 0041 VC:FLP EQU 9 POINTER (IN SECTOR 3) TO F-LIST 0000000A 0042 VC:FLG EQU 10  FLAG WORD (BIT 0 = 1, DOUBLE DENSITY) 00000004 0043 FL:NED EQU 4 COUNT OF EXTENT DESCRIPTORS 00000005 0044 FL:EXP EQU 5 POINTER (IN F-LIST ENTRY) TO FIRST EXTENT 00000006 0045 FL:LEX EQU 6 LENGTH (IN F-LIST ENTRY) OF FIRST EXTENT 0046 * 0047 * ERROR EQUATES 0048 * 00000000 0049 NOBOOT EQU :00 NO A-BOOT ON THIS PART II BOOTSTRAP!  00000011 0050 FILEOV EQU :11 END OF FILE BEFORE END TYPE-CODE 00000022 0051 BADTC EQU :3 22 BAD TYPE CODE ENCOUNTERED 00000033 0052 NOFILE EQU :33 FILE NOT IN ROOT DIRECTORY 00000044 0053 HWERR EQU :44 HARDWARE ERROR!!! 0054 *OTHER CODE IN X-REG AND DATA-REG IS I/O ERROR STATUS 0055 * 0056 * DEFINE BITS IN MASTER STATUS WORD 0057 *  00000004 0058 BUSY EQU 4 00000005 0059 DMA EQU 5 00000006 0060 DIR EQU 6 00000007 0061 RDY EQU 7 00000008 0062 INT EQU 8 0063 *  0064 * DEFINE BITS IN MODE REGISTER 0065 * 00000004 0066 MOTOR EQU 4 00000003 0067 FDCRST EQU 3 FLOPPY CONTROLLER RESET 00000002 0068 STPINV EQU 2 STEP DIRECTION INVERT 00000001 0069 ISMINI EQU 1 00000000 0070 INT:EN EQU 0 0000001A 0071 STDMINI EQU :1A 0000001C 0072 STD8IN EQU :1C 0073 * 0074 * EQUATES FOR THE SENSE DRIVE STATUS 1PAGE 0003 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK BOOT (DSBOOT 84-93706-21-B1) 1984/03/08 09:56:38.75 1/31/80 -- REVISION OF HARD DISK BOOT (93506-29-D0) 0075 * 00000004 0076 TRK0 EQU 4  0077 * 0078 * 'START' OPCODES FOR FDC 0079 * 0000010F 0080 SEEK: EQU :10F 00000106 0081 READ: EQU :106 00000108 0082 SIS: EQU :108 00000005 0083 WRITE: EQU :005 00000102 0084 R:TRK: EQU :102 0000010A 0085 RD:ID: EQU :10A 0000000D 0086 FMT: EQU :00D 00000107 0087 RECAL: EQU :107 00000103 0088 SPEC: EQU :103 00000104 0089 SDS: EQU :104 0090 * 0091 * INTERPRETER COMMAND MACROS 0092 * 0093 WCF MACRO :1000 WRITE REST OF COMMAND FILE 0094 RRF MACENT :1400 READ RESULT FILE 0095 GOTO MACENT :1800 JUMP (RELATIVE) TO ANOTHER SEQ. 0096 RETURN MACENT :1C00 RETURN TO CALLING ROUTINE 0097 IFF #(2,?) 0098 WORD #(1)-$+:1FF+#(0) 0099 ENDC 0100 IFT #(2,?) 0101 X:X:X SET #(2)-1%13 0102 WORD #(1)-$+:1FF+#(0)+X:X:X 0103 ENDC 0104 IFF #(1)-$>-:200 0105  NOTE E,'ADDRESSING ERROR' 0106 ENDC 0107 IFF #(1)-$<:201 0108 NOTE E,'ADDRESSING ERROR' 0109 ENDC 0110  ENDM 1PAGE 0004 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK BOOT (DSBOOT 84-93706-21-B1) 1984/03/08 09:56:40.50 1/31/80 -- REVISION OF HARD DISK BOOT (93506-29-D0) 0111 START MACRO :0800 INITIATE AN FDC COMMAND 4  0112 IFT #(1,?) 0113 WORD #(0)+#(1) 0114 ENDC 0115 IFF #(1,?) 0116 NOTE E,'MUST HAVE AN ARGUMENT'  0117 ENDC 0118 ENDM 0119 SETDMA MACRO :0400 ISSUE 2 SELPS TO SET UP BUFFER ADDR. AND LEN. 0120 WAIT MACENT :0C00 WAIT FOR AN INTERRUPT  0121 WORD #(0) 0122 ENDM 0123 * 0124 * TIMER DEFINITIONS FOR SPECIFY COMMANDS 0125 * 00000000 0126 SRT: EQU 0 STEP RATE = 16 MS/STEP 000000FE 0127 HLT: EQU :FE HEAD LOAD TIME = 254 MS 0000000F 0128 HUT: EQU  :F RETENTION OF HEAD LOAD TIME = 240 MS 1PAGE 0005 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK BOOT (DSBOOT 84-93706-21-B1) 1984/03/08 09:56:41.50 TABLES, ETC. 0000 0130 NAM BOOTS1 ENTRY POINT OF OMEGA4 'E' COMMAND 0000 0131 NAM BOOTS2 021B 0132 NAM LENBS1 0000 0133 NAM LENBS2 0234 0134 NAM BOOT:X ENTRY POINT OF ISOLITE AUTOLOAD  0135 * 00000000 0136 BOOTS1 EQU $ 00000000 0137 BOOTS2 EQU $ 00000000 0138 BASE:2  EQU $ 0139 ****************************************************************** 0140 *  0141 * THE FOLLOWING TABLES MUST BE IN THIS ORDER AND MUST START 0142 * AT ADDRESS 0 OF THE BOOT. THIS KEEPS THE INFORMATION IN 0143 * THE SAME PLACE BY ALL C.A. BOOTS SO THAT OTHER PROGRAMS  0144 * MAY USE IT FOR DYNAMICALLY RECONFIGURING THEMSELVES TO THE 0145 * BOOT-UP DEVICE TYPE  0146 * 0147 ******************************************************************* 0000 9EFC 007D  0148 JMP ASTRT 0001 9ED0 0052 0149 JMP BSTRT 0002 9EF9 007C 0150 JMP CSTRT 0003 0211 0151 AD:FN WORD OSNAME-BASE:2 0004 00A6 0152 AD:RL WORD RL-BASE:2 0005 0150 0153 AD:XIT WORD EXIT:PGM-BASE:2 0154 * 0006 0000 0155 WORD 0,0,0 0007 0000 0008 0000 0009 001A 0156 SPT WORD 26 SECTORS/TRACK 000A 0001 0157 TPC WORD 01 TRACKS/CYLINDER 000B 004D 0158 CPD WORD 077 CYLINDERS/DISK 000C 0001 0159 SPA WORD 01  SECTORS/AU 000D 0001 0160 SBF WORD 01 SECTORS/BUFFER 000E 0030 0161 CHAN WORD  :30 THE DEVICE ADDRESS USED! 000F 0000 0162 HOS WORD 0 HEAD OFFSET 0010 0040 0163 WPS WORD 64 WORDS/SECTOR (USED TO READ VCB ONLY) 1PAGE 0006 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK BOOT (DSBOOT 84-93706-21-B1) 1984/03/08 09:56:43.25 TABLES, ETC. 0011 0000 0164 UNI:SD WORD 0 UNIT N5 O. 0165 **** 0166 * 0167 * END OF RESERVED TABLES 0168  * 0169 **** 0170 * 0012 0000 0171 ST0:SD WORD 0 0013 0000 0172 ST1:SD WORD 0 0014 0000 0173 ST2:SD WORD 0 0015 0000 0174 CYL:SD WORD 0 0016 0000 0175 TRK:SD WORD 0 0017 0002 0176 SEC:SD WORD 2 SECTOR CONTAINING VCB 0018 0000 0177 LCD:SD WORD 0 SECTOR SIZE CODE (0-128 BYTE, 1-256 BYTE, ETC) 0019 001A 0178 SPT:SD WORD 26 NO. OF SECTORS PER TRACK 001A 0007 0179 GPL:SD WORD 7 ASSUMED GAP 3 LENGTH 001B 0080 0180 LEN:SD WORD :80 BUFFER LENGTH (128 BYTES) 0181 * 001C 021A 0182 STMOVE WORD LENBS1-1 ADDRESS OF THE LAST WORD IN THE BOOT 0183 * 001D 400F 0184 ONCE TBIT 0,Q GO THE HEADER DATA? 001E 36CF 002E 0185 JF OV,CHK:N YES, CHECK FOR OTHER ERRORS 001F 6010 0186 COPY  P,Y NO, GO TO DOUBLE DENSITY THEN 0020 6BCA 0187 ADD =RDCMD-$,Y 0021 C044 0004 0188  COPY DDREAD-RDCMD(Y),Q GET DENSITY FORM 'DDREAD' 0022 D040 0000 0189 EXCH Q,RDCMD-RDCMD(Y) EXCHANGE THE READ COMMAND WORD 0023 C444 0004 0190 COPY Q,DDREAD-RDCMD(Y) SAVE OLD DENSITY,FOR NEXT ROUND 0024 C045 0005 0191 COPY DDRDID-RDCMD(Y),Q GET DENSITY FROM 'DDRDID' 0025 D284 002A 0192 EXCH Q,RDIDSQ EXCHANGE DENSITY FOR ID ALSO 0026 C445 0005 0193 COPY Q,DDRDID-RDCMD(Y) SAVE OLD DENSITY FOR NEXT ROUND 0027 2010  0194 DORDID COPY P,X 0028 2B02 0195 ADD =RDIDSQ-$,X 0029 9EFD 00A7 0196 JMP INTRP1 GO CALL SCMD 0197 * 002A 090A 0198 RDIDSQ START RD:ID: START THE READ ID COMMAND 002B 11E5 0199 WCF UNI:SD,1 SEND UNIT NO. 1PAGE 0007 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK BOOT (DSBOOT 84-93706-21-B1) 1984/03/08 09:56:45.50 TABLES, ETC. 002C D5E5 0200 RRF ST0:SD,7 READ STATUS 002D 1DFC 0201 RETURN RDIDSQ DONE 0202 * 002E 402F 0203 CHK:N TBIT  2,Q ID MISMATCH? 002F 3637 0027 0204 JT OV,DORDID NO, ALL OK THEN 0030 C261 0012 0205 ERRCHK COPY ST0:SD,Q GET STATUS 0031 4AC0 0206 SUB =:40,Q 0032 5343 0036 0207 JGE Q,DOAGAN IT FAILED, JUST RETRY 0033 9EF6 00AA 0208 JMP GOHOME IT'S ALL OK! 0209 * 0034 86DB 0090 0210 RDAUNT COPY A,ASAVE SAVE THE A-REG 0035 E6DB 0091 0211 COPY Y,YSAVE SAVE THE Y-REG 0036 82D9 0090 0212 DOAGAN COPY ASAVE,A 0037 E2D9 0091 0213 COPY YSAVE,Y 0038 6780 0214 MUL SPA,AY CONVERT TO SECTORS 0039 FFD2 000C 003A 6781 0215 DIV SPT:SD,AY CONVERT TO TRACKS/SECTORS 003B FFDD 0019 003C 0B01 0216 ADD =1,A (SECTORS START WITH 1, NOT 0) 6 003D 8659 0017 0217 COPY A,SEC:SD SAVE SECTOR NO. 003E 0900 0218 COPY =0,A 003F 6781  0219 DIV TPC,AY CONVERT TO CYLINDERS/HEAD 0040 FFC9 000A 0041 E653 0015 0220 COPY Y,CYL:SD INSERT CYLINDER NO. INTO CTL. BLOCK 0042 8653 0016 0221 COPY A,TRK:SD STORE TRACK NO. 0043 0E11 0222 SHIFT A,LO,2 POSITION IN UNIT/HEAD FIELD 0044 B64C 0011 0223 OR UNI:SD,A 0045 864E 0014 0224 COPY A,ST2:SD UNIT GOES INTO STATUS WORD 2 0046 6000 0225 COPY A,Y  SAVE FOR SECOND READ IF NECESSARY 0047 8246 000E 0226 COPY CHAN,A 0048 2933 0227 COPY  =DOREAD-SDIO2,X 0049 9EE4 00AE 0228 JMP RDEXIT GO DO THE I/O AND RETURN 0229 * 004A C248 0013 0230 RSTUNI COPY ST1:SD,Q 004B 407F 0231 TBIT 7,Q IS THIS END-OF-CYLINDER? 004C 3690 001D 0232 JF OV,ONCE 1PAGE 0008 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK BOOT (DSBOOT 84-93706-21-B1) 1984/03/08 09:56:47.75 TABLES, ETC. 004D DE47 0015 0233 IMS CYL:SD UPDATE CYLINDER NO. IN CTL BLOCK 004E 4901 0234 COPY =1,Q 004F C647 0017 0235 COPY Q,SEC:SD FORCE SECTOR NO. TO 1 0050 E643 0014 0236 COPY Y,ST2:SD RESTORE UNIT/HEAD INFO. 0051 9EDD 00AF 0237 JMP SDIO2  CONTINUE WITH I/O 1PAGE 0009 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK BOOT (DSBOOT 84-93706-21-B1) 1984/03/08 09:56:48.25 CODE TO SET UP TYPE CODE PROCESSOR 00000052 0239 BSTRT EQU $ 0052 0901 0240 COPY =1,A  0053 8638 000C 0241 COPY A,SPA 0054 C23B 0010 0242 COPY WPS,Q 0055 BEC2 0098 0243 JST SETBUF 0056 6901 0244 COPY =1,Y READ AU#1 + 1 SECTOR 0057 BEE9 00C1 0245 JST  RD:AU 0246 *-----------------------------------------------------------* 0247 * UPON READING 1ST SECTOR,PROCEED TO CHECK IF DISKETTE WAS 0248 * LABELED UNDER OS4 BY MATCHING OFFSET LOC.7 OF VCB TO 'C1'. 0249 *-----------------------------------------------------------* 00000058 0250 GETRDY EQU  $ 0058 0904 0251 COPY =4,A 0059 8632 000C 0252 COPY A,SPA 4 SECTORS/AU 005A 9EB7 0092 0253 JMP CHK:OS4 TEST IF OS4 0254 * 0000005B 0255 OS4:DISK EQU $ 005B C630 000C 0256 COPY Q,SPA 005C C630 000D 0257 COPY Q,SBF ONE BUFFER IS ONE AU (FOR FLOPPIES) 005D 5040 0258 COPY Q,L ******** L-REG CONTAINS SECTORS/BUFFER ******** 005E 7040 0259 COPY Q,K ******* K-REG CONTAINS SECTORS/AU ******** 005F 8084 0004 0260 COPY VC:SPT(X),A 0060 8638 0019 0261 COPY A,SPT:SD 0061 8627 0009 0262 COPY A,SPT FILL IN THE BOOT TABLE 0062 8086 0006 0263 COPY VC:CPD(X),A 0063 8627 000B 0264 COPY A,CPD 0064 8083 0003 0265 7  COPY VC:BPS(X),A 0065 8635 001B 0266 COPY A,LEN:SD 0066 0E09 0267 SHIFT A,RO,1  CONVERT BYTES/SECTOR TO WORDS/SECTOR 0067 8628 0010 0268 COPY A,WPS SET UP WORDS/SECTOR FOR AU-WRAP 0068 8085 0005 0269 COPY VC:TPC(X),A 0069 8620 000A 0270 COPY A,TPC 006A 0C01 0271  CLSN =1,A 006B 9E83 006F 0272 JMP $+4 DO NOT CHANGE READ COMMAND 006C 0980 0273  COPY =:80,A GET THE MULTI-TRACK BIT 006D B6FC 00EA 0274 OR RDCMD,A 1PAGE 0010 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK BOOT (DSBOOT 84-93706-21-B1) 1984/03/08 09:56:50.75 CODE TO SET UP TYPE CODE PROCESSOR 006E 86FB 00EA 0275 COPY A,RDCMD THEN SET IT IN THE COMMAND WORD 006F 0900 0276 COPY =0,A 0070 4780 0277 MUL WPS,AQ COMPUTE BUFFER SIZE (SBF*WPS) 0071 FF9E 0010 0072 E089 0009 0278  COPY VC:FLP(X),Y GET THE ADDRESS OF THE F-LIST 0073 E6FC 00F0 0279 COPY Y,AFLST SAVE FLIST AU TO CHECK DIRECTORY ERROR 0074 BEA3 0098 0280 JST SETBUF 0075 4E01 0281 SHIFT Q,LO,1 CONVERT SIZE TO BYTES 0076 C6EC 00E3 0282 COPY Q,BUFLIM AND SAVE IT FOR 'GNB' 0077 0050 0283 COPY L,A READ BUFFER # 2 OF THE F-LIST (DIRECTORY) 0078 BEDF 00D8 0284 JST FRSTEX GO READ F-LIST ENTRY AND THE FIRST AU OF THE FILE 0079 E29D 0097 0285 D:SRCH COPY BUFEND,Y COMPUTE THE ADDRESS OF 'OSNAME' 007A E843 0003 0286 ADD AD:FN-BASE:2(Y),Y *** NOTE, HERE BUFEND IS A(BASE:2) *** 007B 9EB5 00B1 0287  JMP D:NX:N GO INITIALIZE FOR TYPE CODE PROCESSING 0288 * 007C 9EFC 00F9 0289 CSTRT JMP  CSTRT2 FINISH UP ALL I/O! 0290 * 0291 * FIND THE END OF AVAILABLE MEMORY  0292 * 007D 0940 0293 ASTRT COPY =:40,A LOAD BASIC STARTING STATUS BITS 007E 3000 0294 COPY A,S CLEAR CY, SET EA IN STATUS WORD 007F 0202 0295 OUT A,2 TURN OFF AUTOLOAD LIGHT!!! 00000080 0296 DEFALT EQU $ 0080 2900 0297 COPY =0,X POINT TO LAST WORD IN MEMORY + 1 00000081 0298 MEMLP1 EQU $ 0081 8080 0000 0299 COPY 0(X),A TRAP HERE IF GAP 0082 4009 0300 COMP A,Q 0083 D080 0000 0301 EXCH 0(X),Q COMPLEMENT THE WORD IN MEMORY 0084 9080 0000 0302 EXCH 0(X),A RESTORE MEM WORD, CHECK FOR REALLY COMP'ED 0085 0009  0303 COMP A,A ORIGINAL VALUE IN BOTH A AND Q IF RAM 0086 4005 0304 XOR A,Q  SEE IF THEY MATCH 0087 51C2 008A 0305 JNE Q,EMEM GO TO TRAP LOC. NO MATCH (END OF RAM) 0088 2BFF  0306 ADD =255,X 0089 34B7 0081 0307 IJNE X,MEMLP1 IF 64K, X=0, FALL THROUGH  0308 * 008A 34B7 0309 RES BASE:2+:8A-$,:0000 FILL GAP WITH 1 OR MORE NOP'S 1PAGE 0011 MACRO (F400)8  SCOUT UNIVERSAL FLOPPY DISK BOOT (DSBOOT 84-93706-21-B1) 1984/03/08 09:56:53.00 CODE TO SET UP TYPE CODE PROCESSOR  0310 * 0311 ********************************************* 0312 ********************************************* 0313 ** ** 0314 **  THE FOLLOWING WORD MUST BE ** 0315 ** AT ABSOLUTE MEMORY ADDRESS ** 0316 ** *** :008A *** ** 0317 ** **  0318 ********************************************* 0319 *********************************************  0320 * 008A E211 001C 0321 EMEM COPY STMOVE,Y 008B 2AFF 0322 LOOP SUB =1,X 008C 8040 0000 0323 COPY 0(Y),A 008D 8480 0000 0324 COPY A,0(X) 008E 75BC 008B 0325 JNED  Y,LOOP 008F 9C81 0001 0326 JMP 1(X) THEN GO ENTER AT SECOND EP! 0327 * 0090 0000  0328 ASAVE WORD 0 STASH FOR THE REGS 0091 0000 0329 YSAVE WORD 0 0330 * 00000092 0331 CHK:OS4 EQU $ 0092 C088 0008 0332 COPY VC:SPA(X),Q RESTORE DELETED INSTRUCTION  0093 8087 0007 0333 COPY 7(X),A OS4 IDENTIFIER IN VCB 0094 0CC1 0334 CLSN =:C1,A  OS4? 0095 9E45 005B 0335 JMP OS4:DISK YES 0096 9EDA 00F1 0336 JMP NOT:OS4 NO  0337 * 0097 0000 0338 BUFEND WORD 0 ADDRESS OF THE BOOT (END OF THE BUFFER)  0339 * 0098 0E0D 0340 SETBUF ENT 0099 2010 0341 COPY P,X 009A 2A66 0342 SUB =$-BASE:2,X 009B A67B 0097 0343 COPY X,BUFEND SET UP END OF BUFFER POINTER 009C 2043 0344  SUB Q,X 009D A6C6 00E4 0345 COPY X,BUFAD 1PAGE 0012 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK BOOT (DSBOOT 84-93706-21-B1) 1984/03/08 09:56:54.75 CODE TO SET UP TYPE CODE PROCESSOR 009E 9F79 0098 0346 JMP  *SETBUF 0347 * 009F 2B08 0348 MISMTC ADD =8,X 00A0 E276 0097 0349 COPY BUFEND,Y GET ADDRESS OF END OF BUFFER 00A1 2066 0350 CSM X,Y ARE WE THERE YET? 00A2 9E56 0079 0351 JMP D:SRCH 00A3 0000 0352 NOP 00A4 BEF9 011E 0353 JST NXT:AU READ THE NEXT AU FROM THE DISC 00A5 9E53 0079 0354 JMP D:SRCH NO, LOOK AT THIS AU 0355 * 00A6 0000 0356 RL WORD 0 RELOCATION FACTOR 0357 * 000000A7 0358 INTRP1 EQU $ 00A7 BEFF 0127 0359 JST SCMD SEND RD/ID COMMAND 00A8 9E0D 0036 0360 JMP DOAGAN THEN RETURN AND PROCESS ERRORS 0361 * 00A9 9E0A 0034 0362 J:RDAU JMP RDAUNT KEEP ON TRUCKIN' 0363 * 00AA 8265 0090 0364 GOHOME COPY ASAVE,A RESTORE THE A-REG 00AB E265 0091 0369 5 COPY YSAVE,Y RESTORE THE Y-REG 00AC A2B7 00E4 0366 COPY BUFAD,X RESTORE BUFFER PTR (SEE 'EMEM') 00AD 9F93 00C1 0367 JMP *RD:AU AND RETURN 0368 * 00AE 2012 0369 RDEXIT ADD P,X 00AF BEF7 0127 0370 SDIO2 JST SCMD GO INTERPRET THE COMMAND CHAIN 00B0 9E19 004A 0371  JMP RSTUNI RESTORE UNIT NO. AND SKIP SEC. I/O CALL IF REQ. 0372 * 00B1 48FA 0373  D:NX:N COPY =-6,Q 00B2 430A 0374 FLOOP XNX Q 00B3 8087 0007 0375 COPY 7(X),A 00B4 430A  0376 XNX Q 00B5 9846 0006 0377 XOR 6(Y),A 00B6 11A8 009F 0378 JNE A,MISMTC 00B7 54BA 00B2 0379 IJNE Q,FLOOP 0380 *** 0381 * CHECK LAST TWO CHARS OF OSNAME 1PAGE 0013 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK BOOT (DSBOOT 84-93706-21-B1) 1984/03/08 09:56:56.50 CODE TO SET UP TYPE CODE PROCESSOR 0382 *** 00B8 C080 0000 0383 COPY 0(X),Q GET FNO OF FILE FOR LATER USE 00B9 5125 009F 0384 JEQ Q,MISMTC IF NULL ENTRY, SKIP IT 00BA 8087 0007 0385 COPY 7(X),A LAST 2 CHARS FROM DIRECTORY 00BB 9846 0006 0386 XOR 6(Y),A COMPARE WITH 'CT' 00BC 1146 00C3 0387 JEQ A,SCTFND WE FOUND THE .SCT FILE 0388 * 00BD 9847 0007 0389 XOR  7(Y),A CHECK FOR .SYS 00BE 11A0 009F 0390 JNE A,MISMTC NOT IT, GET NEXT DIRECTORY ENTRY 00BF C6F6 0136 0391 COPY Q,SYSFNO SAVE FLIST NUMBER OF .SYS FILE 00C0 9E5E 009F 0392 JMP MISMTC  KEEP LOOKING FOR .SCT 0393 * 00C1 0E0D 0394 RD:AU ENT 00C2 9E66 00A9 0395 JMP  J:RDAU GO TO THE REAL ENTRY POINT 0396 * 0397 * 00C3 6040 0398 SCTFND COPY Q,Y GET FNO 0399 * 00C4 6780 0400 GETSYS MUL SBF,AY 32-BIT SECTOR NO. A=0 AT ENTRY!!!!!!!!! 00C5 FF47 000D 00C6 6781 0401 DIV SPA,AY A=SECTOR OFFSET,Y=RELATIVE AU 00C7 FF44 000C 00C8 F2EB 0134 0402 EXCH FLIST,Y SAVE AU-NO OF INTEREST 00C9 0058 0403 EXCH L,A SAVE SECTOR OFFSET, 00CA 0E01 0404 SHIFT A,LO,1 AND READ THIRD RECORD OF F-LIST 00CB BE75 00C1 0405 JST RD:AU READ THE F-LIST ENTRY 00CC 0E09 0406 SHIFT A,RO,1 (CONVERT A BACK TO SBF) 00CD 5008 0407 EXCH A,L RESTORE OFFSET TO A, SBF TO L 00CE A295 00E4 0408  COPY BUFAD,X 00CF E2E4 0134 0409 COPY FLIST,Y SET UP F-LIST NUMBER FOR TESTS 00D0 2B02  0410 ADD =2,X 00D1 EC84 0004 0411 SUB FL:LEX-2(X),Y IN THIS ENTRY? 00D2 733D 00D0 0412  JGE Y,$-2 NO, MAYBE IN THE NEXT? 00D3 E884 0004 0413 ADD FL:LEX-2(X),Y YES, RESTORE OFFSET 00D4 E883 0003 0414 ADD FL:EXP-2(X),Y THEN ADD OFFSET 00D5 BE82 00D8 0415 JST FRSTEX 1PAGE 0014:  MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK BOOT (DSBOOT 84-93706-21-B1) 1984/03/08 09:56:59.50 CODE TO SET UP TYPE CODE PROCESSOR 00D6 9EAF 0106 0416 JMP TYPE GO PROCESS THE FIRST TYPECODE! 0417 * 00D7 0000 0418 EXAD WORD 0 EXECUTION ADDRESS 0419 * 00D8 0E0D 0420 FRSTEX ENT 00D9 86D8 0132 0421 COPY A,FSOFT SAVE SECTOR OFFSET OF F-LIST ENTRY 00DA E6D9 0134 0422 COPY Y,FLIST UPDATE THE F-LIST POINTER 00DB 48FF 0423 COPY =-1,Q 00DC C6D2 012F 0424 COPY Q,AU:CNT FORCE USING THE FIRST EXTENT 00DD C6D2 0130 0425 COPY Q,EOFF AFTER INCREMENTING, POINTS TO FIRST EXTENT 00DE 4070 0426 COPY K,Q CURRENT AU ALL USED UP! 00DF C6D5 0135 0427 COPY  Q,SOFT 00E0 BEBD 011E 0428 JST NXT:AU GO GET THE FIRST AU FROM THE FILE 00E1 9F76 00D8 0429  JMP *FRSTEX 0430 * 00E2 0400 0431 DOREAD SETDMA 00E3 0080 0432 BUFLIM WORD 128 BUFFER SIZE IN BYTES 00E4 0000 0433 BUFAD WORD 0 BUFFER ADDRESS (EVERYBODY NEEDS IT!) 00E5 090F 0434 RETRY START SEEK: ISSUE SEEK TO RIGHT CYLINDER 00E6 312D 0435 WCF ST2:SD,2 (UNIT AND HEAD INFO.) 00E7 0C00 0436 WAIT 00E8 0908 0437 START SIS: SENSE CURRENT STATUS 00E9 3528 0438 RRF ST0:SD,2 RECORD STATUS 00EA 0906 0439 RDCMD START READ: READ THE SELECTED DATA 00EB F128 0440 WCF ST2:SD,8 (UNIT/HEAD/SECTOR INFO.) 00EC D525  0441 RRF ST0:SD,7 RECORD FINAL STATUS 00ED 1DF7 0442 RETURN RETRY IF DOUBLE READ REQ. GO BACK UP THERE! 0443 * 00EE 0946 0444 DDREAD START READ:+:40 00EF 094A 0445 DDRDID START RD:ID:+:40 0446 * 00F0 0000 0447 AFLST WORD 0 TO SAVE FLIST AU..CHECK DIRECTORY ERROR. 0448 * 1PAGE 0015 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK BOOT (DSBOOT 84-93706-21-B1) 1984/03/08 09:57:02.75 CODE TO SET UP TYPE CODE PROCESSOR 0451 *-----------------------------------------------------------* 0452 * THIS SECTION TAKES CARE OF READING THE 1ST 512 BYTES * 0453 * OF THE DISK ASSUMING IS NOT AN OS4 LABELED DISKETTE * 0454 * AND PROCEED TO JUMP TO LOCATION 0 IN ORDER TO EXECUTE * 0455 * WHICH EVER CODE WAS READ IN FROM THE DISK. * 0456 *-----------------------------------------------------------* 000000F1 0457 NOT:OS4 EQU $ 00F1 0900 0458  COPY =0,A 00F2 8671 00E4 0459 COPY A,BUFAD STARTING BUFFER AT LOC.0 00F3 6000 0460  COPY A,Y 00F4 00BC 0461 SBIT 11,A A = :800 (1024 DEC.WDS) 00F5 866D 00E3 0462  COPY A,BUFLIM 00F6 0060 0463 COPY Y,A 00F7 BE49 00C1 0464 JST RD:AU 00F8 9ECC 0145 ; 0465 JMP AEND TURN OFF ISOLITE LED,EXIT 0466 *-----------------------------------------------------------* 00F9 C66A 00E4 0467 CSTRT2 COPY Q,BUFAD SET UP ALTERNATE BUFFER POINTER 00FA 862B 00A6 0468 COPY A,RL INITIALIZE RELOCATION FACTOR 00FB 82AE 012A 0469 COPY TC,A WHAT TYPE CODE WAS LAST PROCESSED 00FC 000D 0470 RBIT 0,A FORGET RELOCATABILITY 00FD 0C02 0471  CLSN =2,A WAS IT AN END STATEMENT? 00FE 9E87 0106 0472 JMP TYPE YES, THEN DON'T FOOL WITH CONTINUING IT! 00FF 9E88 0108 0473 JMP TYPE+2 NO, FINISH PROCESSING IT THEN! 0474 * 1PAGE 0016 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK BOOT (DSBOOT 84-93706-21-B1) 1984/03/08 09:57:04.75 TYPE CODE PROCESSING AND MISC. DATA/ROUTINES 0100 8A25 00A6 0476 BYTC ADD RL,A 0101 8A24 00A6 0477 ADD RL,A 0102 BEE7 016A 0478 JST STUFIT 0103 9E82 0106 0479 JMP TYPE 0104 FFF6 0480 NEG10 WORD  -10 0481 * 0105 86A6 012C 0482 AORG COPY A,PC ESTABLISH THE CURRENT LOAD POINTER  0483 * 0106 BECA 0151 0484 TYPE JST GNB READ NEXT BYTE FROM FILE -18 LSI 3-05/4 BEGIN COD 0107 9EEE 0176 0485 JMP TEST . -17 0108 BEFE 0187 0486 JST GNW . -16 0109 2001 0487 NEG A,X . -15 010A A6A0 012B 0488 COPY X,CNT SAVE WORD COUNT FOR DATA -14 010B C29E 012A 0489 COPY TC,Q RESTORE TYPE CODE -13 010C 4041 0490 NEG Q,Q NEGATE TYPE CODE -12 010D FA76 0104 0491 CSK Q,NEG10 CHECK IT FOR VALIDITY -11 010E 4CE8 0492 CLSN Q,=:100-:18 IS THIS LSI-3/4 BEGIN? -10 010F 53C3 0113 0493 JLT Q,TYPE3 TYPE CODES 1-8, :18 -0F 0110 2922 0494 TYPE0 COPY =BADTC,X SET UP X AND Q FOR HALT -0E 0111 2404 0495 SELP X,:04  MOVE 'BADTC' TO DISPLAY -0D 0112 0E0D 0496 HLT AND HALT. -0C 0113 430A 0497 TYPE3 XNX Q JUMP TO TYPE CODE -0B 0114 9E89 011E 0498 JMP JMPOFF  PROCESSOR -0A 0115 9E6A 0100 0499 JMP BYTC BYTE RELOCATABLE CONST -09 0116 9EF9 0190 0500 JMP RES . -08 0117 AA0E 00A6 0501 RDATA ADD RL,X  RELOCATABLE DATA -07 0118 9EFC 0195 0502 JMP ADATA ABSOLUTE DATA -06 0119 8A0C 00A6 0503 ADD RL,A RELOCATABLE ORIGIN -05 011A 9E6A 0105 0504 JMP AORG  ABSOLUTE ORIGIN -04 011B 8A0A 00A6 0505 ADD RL,A RELOCATABLE END (XFER ADR)-03 011C 9EA8 0145 0506 JMP AEND ABSOLUTE END (XFER ADDR) -02 011D 9E68 0106 0507 JMP TYPE <  LSI-2 BEGIN CODE -01 0000011E 0508 JMPOFF EQU $ ... -00  0509 * 0510 * 011E 0E0D 0511 NXT:AU ENT 1PAGE 0017 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK BOOT (DSBOOT 84-93706-21-B1) 1984/03/08 09:57:07.25 TYPE CODE PROCESSING AND MISC. DATA/ROUTINES 011F 8295 0135 0512  COPY SOFT,A GET SECTOR OFFSET 0120 700A 0513 CSN A,K AT END OF AU YET? 0121 9E97 0139 0514 JMP NEXTAU 0122 E28B 012E 0515 CREAD COPY AU,Y RESTORE AU TO Y-REG 0123 BE1D 00C1 0516 JST RD:AU READ THE AU INTO THE BUFFER 0124 0052 0517 ADD L,A 0125 868F 0135 0518 COPY A,SOFT STORE SECTOR OFFSET TO NEXT BUFFER 0126 9F77 011E 0519 JMP *NXT:AU  RETURN 0520 * 0127 0E0D 0521 SCMD ENT 0128 86FC 01A5 0522 COPY A,DEVA SAVE THE DEVICE ADDRESS 0129 9EBF 0169 0523 JMP SCMDRSJ AND GO TO THE MAIN ENTRY POINT 0524 * 012A 0002 0525 TC WORD :02 SAVE AREA FOR LAST TYPE CODE 012B 0000 0526 CNT WORD  0 (NEGATIVE) WORD COUNT 012C 0000 0527 PC WORD 0 CURRENT WORD POINTER 012D 0000  0528 BP WORD 0 BUFFER (BYTE) OFFSET POINTER 0529 * 012E 0000 0530 AU WORD 0 012F FFFF 0531 AU:CNT WORD -1 FORCE READ THE FIRST TIME 0130 0005 0532 EOFF WORD FL:EXP 0131 0000 0533 EXTCNT WORD 0 NO. OF EXTENTS LEFT IN FILE 0132 0000 0534 FSOFT WORD 0 F-LIST SECTOR OFFSET (FROM AU BOUNDARY) 0133 00F0 0535 IAFLST WORD AFLST INDIRECT REFERENCE 0134 0000 0536 FLIST WORD 0 F-LIST ENTRY (ABSOLUTE) AU-NO 0537 * 0135 0000 0538 SOFT WORD 0 SECTOR OFFSET IN AU 0136 0000 0539 SYSFNO WORD 0 FNO OF .SYS FILE 0137 0001 0540 EXFLAG WORD 1 COPY OF CDR FOR NO-EXECUTE TEST 0138 9E0B 00C4 0541 GETSYSJ JMP GETSYS 0542 * 0139 0900 0543 NEXTAU COPY =0,A NEW AU, OFFSET MUST BE 0 013A DE73 012E 0544 IMS AU 013B DE73 012F 0545 IMS AU:CNT 013C 9E65 0122 0546 JMP CREAD 013D E276 0134 0547 COPY FLIST,Y 1PAGE 0018 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK BOOT (DSBOOT 84-93706-21-B1) 1984/03/08 09:57:09.25 TYPE CODE PROCESSING AND MISC. DATA/ROUTINES 013E 8273 0132 0548 COPY FSOFT,A 013F BE01 00C1 0549 JST RD:AU READ THE F-LIST ENTRY IN AGAIN 0140 0900 0550 COPY  =0,A AND RESTORE A 0 TO SECTOR OFFSET 0141 DE6E 0130 0551 NULEXT IMS EOFF 0142 0000 0552 NOP 0143 E26C 0130 0553 COPY EOFF,Y 0144 9ED8 019D 0554 JMP CKEOE GO CHECK FOR END OF EXTENT TABLE 0555 * 0145 8611 00D7 0556 AEND COPY A,EXAD 0146 662F 0557 SAL 2,15=  TURN OFF THE ISOLITE NOW! 0147 826F 0137 0558 COPY EXFLAG,A 0148 000F 0559 TBIT 0,A TEST THE EXECUTE BIT IN THE CDR 0149 3642 014C 0560 JT OV,RETURN IF EXECUTE SET THEN EXECUTE  014A 0E0D 0561 HLT THEN STOP 014B DE6B 0137 0562 IMS EXFLAG SET LOWER BIT SO WE DONT STOP AGAIN 014C 0900 0563 RETURN COPY =0,A 014D 92A7 0175 0564 EXCH LEN,A 014E C215 00E4 0565 COPY BUFAD,Q 014F A207 00D7 0566 COPY EXAD,X RESTORE THE ENTRY ADDRESS TO X-REG 0150 9C80 0000 0567 EXIT:PGM JMP 0(X) JUMP TO THE ENTRY ADDRESS 0568 * 0151 0E0D 0569 GNB ENT 0152 B25A 012D 0570 EXCH BP,X GET BYTE POINTER INTO X 0153 820F 00E3 0571  COPY BUFLIM,A GET LIMIT INTO A 0154 0023 0572 SUB X,A ARE WE THERE YET? 0155 11C4 015A 0573 JNE A,GNB1 NOPE, GO GET THE BYTE 0156 E693 016A 0574 GNB2 COPY Y,STUFIT SAVE Y-REG 0157 BE46 011E 0575 JST NXT:AU READ THE NEXT AU 0158 E291 016A 0576 COPY STUFIT,Y RESTORE Y 0159 2900 0577 COPY =0,X ZERO THE BYTE POINTER 015A F209 00E4 0578 GNB1 EXCH BUFAD,Y NO, THEN GET THE BYTE 015B 0E25 0579 SBIT 2,S ENTER BYTE MODE 015C 80C0 0000 0580 COPY 0(X,Y),A LOAD IT 015D 0E27 0581 RBIT 2,S EXIT BYTE MODE 015E 2B01  0582 ADD =1,X BUMP THE POINTER 015F F204 00E4 0583 EXCH BUFAD,Y RESTORE X AND Y 1PAGE 0019 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK BOOT (DSBOOT 84-93706-21-B1) 1984/03/08 09:57:11.25 TYPE CODE PROCESSING AND MISC. DATA/ROUTINES 0160 B24C 012D 0584 EXCH BP,X 0161 9F6F 0151 0585 JMP *GNB  0586 * 0162 31C2 0165 0587 NOTEOE JNE X,NOTNUL IF LENGTH IS NOT ZERO, GO GET THE EXTENT. 0163 A200 00E4 0588 COPY BUFAD,X OTHERWISE GET THE NEXT EXTENT 0164 9E5C 0141 0589 JMP NULEXT  0590 * 0165 2021 0591 NOTNUL NEG X,X 0166 A648 012F 0592 COPY X,AU:CNT 0167 E646 012E 0593 COPY Y,AU 0168 9E39 0122 0594 JMP CREAD GO READ THE AU 0595 * 0169 9EC4 01AE 0596 SCMDRSJ JMP SCMDRS 0597 * 016A 0E0D 0598 STUFIT ENT 016B 8740 012C 0599  COPY A,*PC STORE THE WORD INTO MEMORY 016C DE3F 012C 0600 IMS PC BUMP THE POINTER 016D 0000 0601 NOP AND RETURN. 016E 9F7B 016A 0602 JMP *STUFIT (EVEN IF WE SKIP) 0603 * 0604 * 0000016F 0605 NO:END EQU $ 016F 8F43 0133 0606 SUB *IAFLST,A WAS LAST AU SAME AS AU OF FLIST AS SAVED 0170 11DD 018E 0607 JNE A,NO:END2  YES, NO END TYPECODE ERROR 0171 E244 0136 0608 COPY SYSFNO,Y WAS THERE A .SYS FILE??? 0172 7185 0138 06> 09 JNE Y,GETSYSJ YES, GO READ IT 0173 2933 0610 COPY =NOFILE,X 0174 9E9A 018F 0611  JMP ABORT ELSE, NO FILE BY EITHER NAME (.SCT OR .SYS) 0175 0000 0612 LEN WORD 0  CUMULATIVE LENGTH OF THE PROGRAM TO BE LOADED 0613 * 0176 0C40 0614 TEST CLSN =TCNULL,A 0177 9E0E 0106 0615 J:TYPE JMP TYPE 0178 0C6F 0616 CLSN =TCSGML,A 0179 9EBF 01B9 0617 JMP  SGML 017A 0C4F 0618 CLSN =TCSGMT,A 017B 9EAA 01A6 0619 JMP NOTE 1PAGE 0020 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK BOOT (DSBOOT 84-93706-21-B1) 1984/03/08 09:57:13.00 TYPE CODE PROCESSING AND MISC. DATA/ROUTINES 017C 0C6D 0620 CLSN =TCNOTE,A 017D 9EA8 01A6 0621 JMP NOTE 017E 0C67 0622  CLSN =TCRELS,A 017F 9EAB 01AB 0623 JMP SETREL 0180 0C69 0624 CLSN =TCLOC,A 0181 9EA9 01AB 0625 JMP SETREL 0182 8627 012A 0626 COPY A,TC 0183 0C18 0627 CLSN  =:18,A 0184 9E03 0108 0628 JMP TYPE+2 0185 5606 014C 0629 JT CY,RETURN ELSE THIS REALLY LOADS MEMORY 0186 9E01 0108 0630 JMP TYPE+2 0631 * 0632 * 0187 0E0D  0633 GNW ENT 0188 BE48 0151 0634 JST GNB 0189 6000 0635 COPY A,Y 018A BE46 0151  0636 JST GNB 018B 6E72 0637 ROTATE Y,L,8 018C 0067 0638 OR Y,A 018D 9F79 0187 0639 JMP *GNW 0640 * 018E 2911 0641 NO:END2 COPY =FILEOV,X NO END TYPE CODE 018F 9E01 0111 0642 ABORT JMP TYPE0+1 SHIP IT TO CDR AND DIE 0643 * 0190 BE76 0187 0644 RES JST GNW GET THE WORD USED IN THE FILL 0191 3125 0177 0645 JEQ X,J:TYPE IF ZERO COUNT, THEN NO DATA TO FILL 0192 BE57 016A 0646 JST STUFIT GO STUFF THE WORD INTO MEMORY 0193 34BE 0192 0647 IJNE X,$-1 0194 9E62 0177 0648 JMP J:TYPE 0649 * 0195 2002 0650 ADATA ADD A,X ZERO X REG (UNLESS RDATA) 0196 BE70 0187 0651 JST GNW READ A DATA WORD 0197 0022 0652 ADD X,A (RELOCATE IF RDATA) 0198 BE51 016A 0653 JST STUFIT  GO STUFF THIS WORD INTO MEMORY 0199 DE11 012B 0654 IMS CNT BUMP THE COUNT 019A 9E7B 0196 0655 JMP ADATA+1 GO PROCESS NEXT WORD UNLESS FINISHED 1PAGE 0021 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK BOOT (DSBOOT 84-93706-21-B1) 1984/03/08 09:57:14.75 TYPE CODE PROCESSING AND MISC. DATA/ROUTINES 019B 9E5B 0177 0656  JMP J:TYPE GET NEXT TYPE CODE IF FINISHED 0657 * 019C 9F0A 0127 0658 RETCMD JMP *SCMD MAKE THE JUMP REACH 0659 * 019D EC84 0004 0660 CKEOE SUB FL:NED(X),Y 019E 7310 016F 0661 JGE Y,NO:END 019F E884 0004 0662 ADD FL:NED(X),Y 01A0 6E01 0663 SHIFT Y,LO? ,1 01A1 6022 0664 ADD X,Y 01A2 A046 0006 0665 COPY FL:LEX(Y),X 01A3 E045 0005 0666  COPY FL:EXP(Y),Y 01A4 9E3D 0162 0667 JMP NOTEOE 0668 * 01A5 0000 0669 DEVA  WORD 0 DEVICE ADDRESS SAVE LOCATION 0670 * 0671 * 01A6 BE2A 0151 0672 NOTE JST GNB 01A7 6001 0673 NEG A,Y 01A8 BE28 0151 0674 JST GNB 01A9 74BE 01A8  0675 IJNE Y,$-1 01AA 9E4C 0177 0676 JMP J:TYPE 0677 * 01AB BE25 0151 0678 SETREL JST GNB GO READ IN THE REL. NO. OR EXTRN NO. 01AC 9E4A 0177 0679 JMP J:TYPE AND IGNORE IT! 0680 * 1PAGE 0022 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK BOOT (DSBOOT 84-93706-21-B1) 1984/03/08 09:57:15.75 UFDC COMMAND TABLE INTERPRETER 0682 * 01AD BE97 01C5 0683 GOTO JST SETUP  LOAD NEW FILE PTR, PARSE NEXT CMD 01AE 8080 0000 0684 SCMDRS COPY 0(X),A LOAD NEXT COMMAND WORD 01AF 0202  0685 OUT A,2 RESET BATTERY-BACKUP WATCHDOG TIMER 01B0 4000 0686 COPY A,Q 01B1 0E99 0687 SHIFT A,RO,10 POSITION OPCODE IN A-REG 01B2 86E7 021A 0688 COPY A,INCNT SAVE VECTOR 01B3 0E29 0689 SHIFT A,RO,3 THROW IT AWAY 01B4 0009 0690 COMP A,A  CONVERT TO NEGATIVE COUNT 01B5 92E4 021A 0691 EXCH A,INCNT 01B6 1807 0692 AND =7,A GET RID OF BYTE COUNT 01B7 030A 0693 XNX A 01B8 9E93 01CC 0694 JMP VECT  DO SPLATTER JUMP 0695 * 01B9 BE17 0151 0696 SGML JST GNB GET THE NEXT BYTE 01BA 2001  0697 NEG A,X COMP IT 01BB B239 0175 0698 EXCH X,LEN SWAP WITH LENGTH  0699 * 01BC BE4A 0187 0700 SGMLL JST GNW 01BD 2002 0701 ADD A,X 01BE BE12 0151 0702 JST GNB 01BF DE35 0175 0703 IMS LEN 01C0 DE34 0175 0704 IMS LEN 01C1 DE33 0175 0705 IMS LEN 01C2 9E79 01BC 0706 JMP SGMLL 01C3 A631 0175 0707 COPY X,LEN 01C4 9E32 0177 0708 JMP J:TYPE 0709 * 01C5 0E0D 0710 SETUP ENT 01C6 A6D2 0219 0711 COPY X,IOX:SV SAVE X REGISTER FOR A TIME 01C7 825D 01A5 0712 COPY DEVA,A 01C8 D6AD 01F6  0713 AND H3FF,Q GET ADDRESS OF COMMAND FILE 01C9 2042 0714 ADD Q,X 01CA AEAC 01F7  0715 SUB H200,X 01CB 9F79 01C5 0716 JMP *SETUP 0717 * 1PAGE 0023 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK BOOT (DSBOOT 84-93706-21-B1) 1984/03/08 09:57:18.00 UFDC COMMAND TABLE INTERPRETER 01CC 34A1 01AE 0718 VECT IJNE X,SCMDRS IF INVALID, DO NOTHING 01CD 9EBA 0208 0719 JMP SELP ISSUE DMA CONTROL WORDS 01CE 9E99 01E8 0720 JMP WCMD WRITE COMMAND REGISTER 01CF 34DE 01EE 0721 @  IJNE X,WAIT WAIT FOR INTERRUPT 01D0 34E7 01F8 0722 IJNE X,WCF WRITE COMMAND FILE 01D1 34E6 01F8 0723 IJNE X,RRF READ RESULT FILE 01D2 349A 01AD 0724 IJNE X,GOTO MOVE POINTER IN FILE 01D3 BE71 01C5 0725 JST SETUP RETURN TO CALLER 01D4 3487 019C 0726 IJNE X,RETCMD 0727 * 0728 **************************************************************  0729 * TIMING LOOP IN READY LOOP WILL BE APPROX 6 SECONDS USING THE 0730 * 4/04 PROCESSOR AND 2.5 SECONDS USING THE 4/08 PROCESSOR. 0731 * THE COLD BOOT PROCESS WILL MOVE TO THE NEXT BOARD THAT IS READY  0732 * WITH A HIGHER BOARD ID. PLENTY OF TIME IS ALLOWED FOR 0733 * THE 1 SECOND DELAY ON THE CONTROL BOARD(54144) AND TWO 0734 * REVOLUTIONS OF THE DISKETTE. 0735 ************************************************************** 0736 * 01D5 0E0D 0737 READY ENT WAIT FOR FDC TO COME READY 01D6 A68B 01E2 0738 COPY X,REGX SAVE X REGISTER 01D7 2940 0739 COPY =:40,X SET UP OUTSIDE LOOP COUNT 01D8 030A 0740 XNX A 01D9 4101 0741 IN  1,Q LOAD MASTER STATUS WORD 01DA 407F 0742 TBIT RDY,Q WHEN RDY = 1, FDC MAY XFER DATA  01DB 3644 01E0 0743 JT OV,$+5 JUMP IF FDC READY 01DC 4909 0744 COPY =:9,Q SET UP INSIDE LOOP COUNT 01DD 55BF 01DD 0745 JNED Q,$ LOOP TO SELF UNTIL TIME OUT 01DE 34B9 01D8 0746 IJNE X,$-6 LOOP TO INPUT STATUS UNTIL TIME OUT 01DF 9E83 01E3 0747 JMP EXIT GO BOOT NEXT HIGHER DEVICE 01E0 A281 01E2 0748 COPY REGX,X RESTORE X REGISTER 01E1 9F73 01D5 0749  JMP *READY 0750 * 01E2 0000 0751 REGX WORD 0 0752 * 01E3 4900  0753 EXIT COPY =:0,Q RESET FDC CHIP 1PAGE 0024 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK BOOT (DSBOOT 84-93706-21-B1) 1984/03/08 09:57:20.00 UFDC COMMAND TABLE INTERPRETER 01E4 030A 0754 XNX A 01E5 4403 0755 SELP Q,3 01E6 0E87 0756 RBIT 8,S DISABLE INTERUPTS 01E7 6610 0757 SALPNT SAL 1,0 IF PROGRAM IS ENTERED THROUGH THE AUTOLOAD 0758 *  INSTRUCTION THIS SAL WILL NOT BE REPLACED 0759 * WITH THE NEXT HIGHER DEVICE ID 0760 * 0761 * 0762 * 01E8 823C 01A5 0763 WCMD COPY DEVA,A  LOAD DEVICE ADDRESS 01E9 BE6B 01D5 0764 CMDLP JST READY WAIT FOR FDC TO COME READY AGAIN 01EA C080 0000 0765 COPY 0(X),Q THIS IS IT! 01EB 030A 0766 XNX A 01EC 4201 0767 OUT Q,1 SEND LOW 9-BIT CODE TO FDC 01ED 34D9 0207 0768 IJNE X,GEXIT BUMP X AND RETURN A  0769 * 01EE 8236 01A5 0770 WAIT COPY DEVA,A 01EF 030A 0771 WLOOP XNX A 01F0 4101 0772 IN 1,Q LOAD MASTER STATUS WORD 01F1 408F 0773 TBIT INT,Q IF INTERRUPT IS PENDING, OR 01F2 36C2 01F5 0774 JF OV,WAITE 01F3 580F 0775 AND =:0F,Q NO SEEK IS IN PROGRESS 01F4 51BA 01EF 0776 JNE Q,WLOOP 01F5 9E38 01AE 0777 WAITE JMP SCMDRS THEN RETURN TO CALLER 0778 * 01F6 03FF 0779 H3FF WORD :03FF MASK FOR ADDRESS SELECTION 01F7 0200 0780 H200 WORD :0200 OFFSET FOR ADDRESS SELECTION 0781 * 000001F8 0782 WCF EQU $ RRF AND WCF SHARE THE SAME CODE 01F8 BE4C 01C5 0783 RRF JST SETUP SETUP DEVICE ADDR, ETC. 01F9 BE5B 01D5 0784 RWLOOP JST READY WAIT FOR THE BEASTIE TO COME READY 01FA 406F 0785  TBIT DIR,Q IN OR OUT? 01FB 3644 0200 0786 JT OV,INPUT IF INPUT 01FC C080 0000 0787  COPY 0(X),Q GET DATA TO OUTPUT 01FD 030A 0788 XNX A AND SEND IT 01FE 4200 0789 OUT Q,0 1PAGE 0025 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK BOOT (DSBOOT 84-93706-21-B1) 1984/03/08 09:57:22.00 UFDC COMMAND TABLE INTERPRETER 01FF 9E84 0204 0790 JMP ENDCHK SEE IF ANY MORE TO DO  0791 * 0200 030A 0792 INPUT XNX A 0201 4100 0793 IN 0,Q ELSE, READ ONE MORE RESULT BYTE 0202 58FF 0794 AND =:FF,Q REMOVE GARBAGE BITS 0203 C480 0000 0795  COPY Q,0(X) AND STORE IT (IN COMMAND FILE) 0796 * 0204 DE95 021A 0797 ENDCHK IMS INCNT HAVE WE PROCESSED ALL THE BYTES? 0205 34B3 01F9 0798 IJNE X,RWLOOP THEN GO GET THE NEXT 0206 B292 0219 0799 REXIT EXCH IOX:SV,X RESTORE THE COMMAND FILEPOINTER 0207 9E26 01AE 0800 GEXIT JMP SCMDRS  AND RETURN 0801 * 0802 * 0208 C081 0001 0803 SELP COPY 1(X),Q LOAD BUFFER SIZE IN BYTES 0209 821B 01A5 0804 COPY DEVA,A 020A 030A 0805 XNX A 020B 4402 0806 SELP Q,2 BYTE COUNT = 128*Q 020C C082 0002 0807 COPY 2(X),Q GET BUFFER ADDRESS 020D 030A 0808 XNX A 020E 4400 0809 SELP Q,0 SEND TO CONTROLLER 020F 2B03 0810 ADD =3,X 0210 9E64 01F5 0811 JMP WAITE BUMP FILE POINTER AND EXIT  0812 * 0211 4F53 0813 OSNAME BYTE 'OS:: SCT' NAME OF FILE TO BE BOOTED (FIRST) 0212 3A3A 0213 2020 0214 2020 0215 2020 0216 2053 0217 4354 0218 1A07 0814 WORD 'YS'--'CT' LOGICAL DIFFERENCE IN .SYS AND .SCT 0815 * 0219 0816 IOX:SV RES 1 TEMP USED BY UFDC INTERFACE 021A  0817 INCNT RES 1 TEMP USED TO COUNT BYTES IN RRF 0000021B 0818 LENBS1 EQU $-BASE:2 B  00000000 0819 LENBS2 EQU 0 1PAGE 0026 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK BOOT (DSBOOT 84-93706-21-B1) 1984/03/08 09:57:23.50 ISOLITE LOOP SUPPORT 021B 0903 0821 RSTDRV START SPEC: 021C 3214 0822 WCF  SPCL,2 021D 090F 0823 START SEEK: 021E 3210 0824 WCF FWDCMD,2 021F 0C00 0825 WAIT 0220 0908 0826 START SIS: 0221 3659 0827 RRF ISTAT,2 0222 090F  0828 START SEEK: 0223 3209 0829 WCF BCKCMD,2 0224 0C00 0830 WAIT 0225 0908 0831 START SIS: 0226 3654 0832 RRF ISTAT,2 0227 0907 0833 START RECAL: 0228 1251 0834 WCF IUNIT,1 0229 0C00 0835 WAIT 022A 0908 0836 DRVLOP START SIS: 022B 364F 0837 RRF ISTAT,2 022C 1DFD 0838 RETURN DRVLOP 0839 * 022D 0000 0840 BCKCMD WORD 0,10 022E 000A 022F 0000 0841 FWDCMD WORD 0,20 0230 0014 0231 000F 0842 SPCL WORD SRT:*16+HUT:,HLT:&:FE 0232 00FE 0233 6610 0843 SAL10 SAL 1,0 AUTOLOAD LOOP SAL 0844 * 00000234 0845 BOOT:X EQU $ ENTRY POINT FOR THE SAL INSTRUCTION 0234 A2D3 0288 0846 COPY NXT:BT,X SAVE NEXT HIGHER BOARD ID SO THAT IT 0235 A631 01E7 0847 COPY  X,SALPNT CAN BE USED WHEN PROGRAM IS SHIFTED 0848 * INTO HIGH MEMORY  0236 A27C 0233 0849 COPY SAL10,X 0237 A6D1 0289 0850 COPY X,NXT:BT+1 STUFF LOOP AROUND WORD 0238 C67A 0233 0851 COPY Q,SAL10 SAVE THE Q REG 0239 1649 0243 0852 JT SS,NORMAL IF SENSE IS ON, DO NORMAL BOOT 023A 2104 0853 IN 4,X 1PAGE 0027 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK BOOT (DSBOOT 84-93706-21-B1) 1984/03/08 09:57:27.00 ISOLITE LOOP SUPPORT 023B A7C1 027D 0854 COPY X,EXFLAG-BASE:2 SAVE FOR EXECUTE TEST 023C 200D 0855 RBIT 0,X 023D 2AFA 0856 SUB =6,X IF OFF AND CDR=6 OR 7, FORCE RETRY HERE 023E 31D6 0255 0857 JNE X,GO:OUT ELSE, GO TRY NEXT BOOT 023F A2C8 0288 0858 COPY NXT:BT,X 0240 2AFF 0859 SUB =1,X 0241 A6C6 0288 0860 COPY X,NXT:BT BOOT MYSELF IF I FAIL!! 0242 A624 01E7 0861 COPY X,SALPNT 0862 * 0243 2900 0863 NORMAL COPY =0,X 0244 18FC 0864 AND =:FC,A STRIP OFF EXTRANEOUS BITS (IF ANY) 0245 030A 0865 XNX A 0246 2403 0866 SELP X,3 RESET FDC CHIP 0247 29FF 0867  COPY =255,X 0248 35BF 0248 0868 JNED X,$ WAIT FOR 25-50 MICROSECS. 0249 291C 0869  COPY =STD8IN,X SET MOTOR ON, 8", STEP INVERTED 024A A400 0000 0870 COPY X,0 SAVE MODE 024B 030A 0871 XNX A 024C 2403 0872 SELP X,3 START FDC 08C 73 * 0874 * FDC SET UP FOR 8" STANDARD FLOPPIES 0875 * 024D 29FF 0876  COPY =:FF,X COUNT ABOUT 10 MILLISECS. 024E 35CA 0259 0877 RDYW JNED X,INTEST 024F 291A 0878  COPY =STDMINI,X IF TIME IS UP, SWITCH TO 5 1/4" DRIVES 0250 030A 0879 XNX A 0251 2403 0880 SELP X,3 MOTOR ON, 5 1/4", NORMAL STEP 0252 B000 0000 0881 EXCH X,0 ORIGINALLY 5 1/4? 0253 371A 0882 XOR =STDMINI,X IF MINI ALREADY, ABORT BOOT! 0254 31C3 0258 0883 JNE X,INTESTX 0255 C25D 0233 0884 GO:OUT COPY SAL10,Q RESTORE THE Q REG 0256 6940 0885 COPY  =:40,Y BE NICE TO THE NEXT GUY 0257 9EB0 0288 0886 JMP NXT:BT TRY TO BOOT FROM THE NEXT GUY  0887 * 0258 29FF 0888 INTESTX COPY =:FF,X 0259 030A 0889 INTEST XNX A 1PAGE 0028 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK BOOT (DSBOOT 84-93706-21-B1) 1984/03/08 09:57:29.00 ISOLITE LOOP SUPPORT 025A 4101 0890 IN 1,Q 025B 408F 0891 TBIT 8,Q 025C 3631 024E 0892 JT OV,RDYW 025D 840E 000E 0893 COPY A,CHAN-BASE:2 025E A29F 027E 0894 COPY =DRVLOP-BASE:2,X 025F BF9F 027F 0895 JST SCMD-BASE:2 0260 829A 027B 0896 COPY ISTAT,A 0261 1803 0897 AND  =3,A 0262 8411 0011 0898 COPY A,UNI:SD-BASE:2 0263 8696 027A 0899 COPY A,IUNIT 0264 864A 022F 0900 COPY A,FWDCMD 0265 8647 022D 0901 COPY A,BCKCMD 0266 BE89 0270 0902 JST RCAL1 ISSUE FOREWARD RECALIBRATE 0267 800E 000E 0903 COPY CHAN-BASE:2,A 0268 C000 0000 0904 COPY 0,Q 0269 402E 0905 CBIT STPINV,Q REVERSE THE STEP DIRECTION BIT 026A 030A 0906  XNX A 026B 4403 0907 SELP Q,3 ISSUE NEW MODE 026C C400 0000 0908 COPY Q,0  SAVE FOR OTHER PROGRAMS TO USE 026D BE82 0270 0909 JST RCAL1 REISSUE THE RECALIBRATE 026E 9E66 0255 0910 JMP GO:OUT IF IT FAILS, GO TO THE NEXT BOOT 0911 * 026F 9F90 0280 0912 GOBOOT JMP ASTRT-BASE:2 ELSE, GO COMPLETE THE BOOT 0913 * 0270 0E0D 0914 RCAL1 ENT 0271 A28F 0281 0915 COPY =RSTDRV-BASE:2,X GET RESTORE COMMAND SEQUENCE 0272 800E 000E 0916 REPT1 COPY CHAN-BASE:2,A LOAD DEVICE ADDRESS FOR SCMD 0273 BF8B 027F 0917 JST SCMD-BASE:2 0274 8286 027B 0918 COPY ISTAT,A GET RESULTANT STATUS 0275 0C80 0919 CLSN =:80,A IF END OF STATII, 0276 35BB 0272 0920 JNED X,REPT1 BACK UP TO WAIT AGAIN 0277 004F 0921 TBIT 4,A 0278 36B6 026F 0922  JF OV,GOBOOT NO ERROR, READY FOR BOOT 0279 9F76 0270 0923 RETN1 JMP *RCAL1 0924 * 027A 0925 IUNIT RES 1 1PAGE 0029 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK BOOT (DSBOOT 84-93706-21-B1) 19D 84/03/08 09:57:31.00 ISOLITE LOOP SUPPORT 027B 0926 ISTAT RES 2 0927 * 000B  0928 LPOOL 027D 0137 027E 022A 027F 0127 0280 007D 0281 021B 0282 0283 0284 0285 0286 0287  0929 * 00000288 0930 NXT:BT EQU $ 0234 0931 END BOOT:X 0000 ERRORS (0000/0000) 0000 WARNINGS (0000/0000) 1 1PAGE 0029 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK BOOT (DSBOOT 84-93706-21-B1) 19/ THIS PROCEDURE WILL PRINT ALL 'LST' FILES CONTAINED / IN THIS DISKETTE. / / IF INDIVIDUAL FILES ARE DESIRED,ABORT AND JUST KEY-IN: / PRINT 'FILE-NAME' / /P RESPOND: C = CONTINUE X = ABORT /PRINT DF1.ISO:BIG /PRINT DF1.UFDC:BOOT /PRINT DF1.UFDC:ISO:ID / / * END * 840308134409840308134409840308134409IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIE IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIF IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIH IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJ IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIK IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIL IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII