IMD 1.16: 2/09/2008 14:26:11 f73401 84-93734-xx a200 scout winchester isolite & autoload files 20apr83    @0|)wwЀЀtQql)  " }gA `_l M@IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIOS4 MF182070911093200830408103700 830408103700@F73401 VOLSCOUT WINCHESTER & AUTOLOAD FILES 84-93734-XX A200   IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII_l M@iGyy GGG`HZ@ b G`^Y e IQ BBp@;:9 :7P@ G:پN 8!0. * C'xC# b# }B @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 rAS LO=LP MACRO SWI:BOOT(L=,MACH=404) MACRO SWI:ISO:ID(L=,MACH=404) MACRO SWI:ISOLITE(L=,MACH=404) LINK SWI:BOOT LINK SWI:ISO:ID LINK SWI:ISOLITE AUTOGEN SWI:ISOLITE.ROM(S=2048)=SWI:ISOLITE.BIN(N=0,C,X,:200)+ SWI:BOOT.BIN(N=1,C,X,:200)+ SWI:ISO:ID.BIN(N=2,:1D) TCDUMP SWI:ISOLITE.ROM AS LO=TV PRINT SWI:BOOT PRINT SWI:ISO:ID PRINT SWI:ISOLITE 820709110932820709110932820114155732 RESET BBU 0469 9E7E 0468 0803 JMP $-1 WAIT FOR INTERRUPT 0000046A 0804 RET7 EQU  $ 046A BF86 0471 0805 JST RESET RESET STATUS 046B 9F23 040F 0806 JMP *STAT 0011 0807 LPOOL 046C 0202 JST:INT 046D 02CE GOOD:INT 046E 0201 TRAPLOC 046F 0297 COMMAND 0470 028C SENSE 0471 02C8 RESET 0472 8402 0473 8410 0474 0FFF 0475 8600 0476 8C00 0477 02D4 BAD:INT 0478 02B3 TIMER 0479 046A RET7 047A 00IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII93 047B 0200 JMP 047C 0092 1PAGE 0024 MACRO (F200) SCOUT WINCHESTER DISK INTERFACE ISOLITE TEST 84-93734-10 (A100) 1983/04/20 15:38:34.25 STATUS CHECK ROUTINE (STATUS TEST - RUN CODE A2) 0000047D 0809 ENDISO EQU $ 0000047D 0810 SALCHAIN EQU $ 0811 * SAL CHAIN 0000047E 0812 SALOOP EQU SALCHAIN+1  0813 * SAL LOOP BACK 0205 0814 END START:WI 0000 ERRORS (0000/0000) 0000 WARNINGS (0000/0000) eAdy 8207071732377583040810313525830420153725 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIAS LO=LP MACRO SWI:BOOT(L=,MACH=404) MACRO SWI:ISO:ID(L=,MACH=404) MACRO SWI:ISOLITE(L=,MACH=404) LINK SWI:BOOT LINK SWI:ISO:ID LINK SWI:ISOLITE AUTOGEN SWI:ISOLITE.ROM(S=2048)=SWI:ISOLITE.BIN(N=0,C,X,:200)+ SWI:BOOT.BIN(N=1,C,X,:200)+ SWI:ISO:ID.BIN(N=2,:1D) TCDUMP SWI:ISOLITE.ROM PRINT SWI:BOOT PRINT SWI:ISO:ID PRINT SWI:ISOLITE 820709110932820709110932830408103307}EW`@fA)$@00@  ")"g)Āā)b1`I`DqêӞvV*IȀ  I iԿĢ`#`aDĀ+"t) »ćºIi¾I@6°@#֪N B֥I  iǜ0@DI@0@ @*΀~} ´ " vz Ā  "z Q¢wo "|  g`i` )Ă `Upx W z W|{ WIV W ANq@gD ~ ID) Ić+IiXI+I:²i 9"~Kiª3") I" |66Ğr9I6IIIi "~'Ib I) ĂI IiþIImi "~QBJg¸) 5) I ąIIiI AI Ii¡ "~I I I)5AeH)¹)5I @b) I_I i]aI [AIXI XIRiž M"~LIGޓRI@+kU;UUHzxt@ *5N @b) IIi$IAII Yi "~IMIGQFFJ@+kU⅝@ IDIQNI) IiпIheII) I iIYV½I IiIK´HIIiI?©<œIiI  I ii ”ǔÔǔ"~#Ȅjf~|H!x *1袭*@  $ } " }_SE@6PD iBSJXQfSQC@6A HMi@Upx W z W|{ WIV W ANq@gD ~ ID) Ić+IiXI+I:²i 9"~Kiª3") I" |66Ğr9I6IIIi "~'Ib I) ĂI IiþIImi  "~QBJg¸) 5) I ąIIiI AI Ii¡ "~I I I)5AeH)¹)5I @b) I_I i]aI [AIXI XIRiž M"~LIGޓRIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIO0SEGMENTBLANK oEim MACRO (F200) @  f~|H!x *1袭 *@  $ }  " }_SE@6PD  iBSJXQfSQC@6A HMi@820709110932820709110932830420153601 TITL SCOUT WINCHESTER DISK INTERFACE ISOLITE TEST 84-93734-10 (A200) TITL GENERAL DESCRIPTION ************************************************************ * * * SCOUT WINCHESTER DISK DRIVE INTERFACE * * ISOLITE TEST PROGRAM * *  * ************************************************************ *  * * COPYRIGHT 1982, COMPUTER AUTOMATION,INC. * *  * ************************************************************ * * PROGRAM DESCRIPTION: * * THIS PROGRAM IS AN ISOLITE TEST PROGRAM FOR THE SCOUT * WINCHESTER DISK DRIVE INTERFACE BOARD (54140). * * THIS TEST PROGRAM WILL ACCESS THE WINCHESTER DISK BY * MEANS OF SEEKS AND READS. NO DATA IS EVER WRITTEN TO THE * DISK AND SHOULD NEVER BE WRITTEN TO THE DISK. * * * THE PROGRAM WAS DESIGNED AND CODED BY ANATOLY VASERFIRER. * THE PROGRAM WAS TESTED AND MODIFIED BY B.CANCIO JULY,1982. * * REVISIONS: * *  A1 - RESET INTERRUPT STATUS UPON EXIT (UIS :40) * LEFT DEBUG IN AS COMMENTS * MOVED MA  IN PROGRAM TO TOP WITH ABS :200 * DAVE HALE 1/14/83 * * A2 - CHANGED INITIAL WAIT FOR FIRST JST SENSE TO 10 MS * DAVE HALE 4/20/83 * ************************************************************ TITL TITL EQUATES ETC.. * EXTR DEBUG4 DEBUG BLOCK NAM G:0 DEBUG LINK ADDRESS * ABS 0 *DEBUG JST *$+1 * WORD DEBUG4 DEBUG BLOCK NAM G:G,G:T,START:WI REL RAMSIZ EQU 1 DMACOUNT EQU 2 QREG EQU 3 AREG EQU 4 XREG EQU 5 DATREG EQU 6 SREG EQU 7 YREG EQU 8 DEVADD EQU 9 COUNT2 EQU 10 COUNT1 EQU 11 ERRLOC EQU 12 OPCODE EQU 13 UNIT EQU 14 CYL EQU 15 HEAD EQU 16 SECTOR EQU 17 WCOUNT EQU 18 MEMADDR EQU 19 INTADDR EQU 20 DCIOB EQU 21 WPROC EQU 22 CONSTAT EQU 23 DRSTAT EQU 24 CWCOUNT EQU 25 CMEMADDR EQU 26 CRES EQU 27 CDCIOB EQU 28 EXWORDS EQU 29 EXSTATUS EQU 30 EXPECTED STATUS FLAG & MASK READ STATUS * ABS :200 * DEBUG REGISTER G:G EQU $ JMP JMP *$+1 TRAPLOC WORD 0 JST:INT JST 0(X) JST JST *$+1 SAL00 SAL 0,0 TITL MAIN ENTRY POINT TO THE PROGRAM - START:WI G:T EQU $ DEBUG REGISTER * * MAIN ENTRY POINT TO THE PROGRAM * START:WI EQU $ G:0 EQU $ DEBUG START SAL 2,14 ORG $-1 B.C. WORD 0 B.C COPY Q,QREG SAVE Q REGISTER COPY A,AREG SAVE A REGISTER COPY X,XREG SAVE X REGISTER COPY Y,YREG SAVE Y REGISTER IN 4,Q GET DATA REGISTER COPY Q,DATREG SAVE DATA REGISTER COPY =:A0,X WINCHESER ISOLITE CODE SELP X,4 SEND IT TO CDR COPY S,Q GET S REGISTER COPY Q,SREG SAVE S REGISTER COPY =:1040,Q NEW S REGISTER COPY Q,S SET S REGISTER UIS AND =:F8,A GET DEVICE ADDRESS OUT OF SAL INFORMATION COPY A,DEVADD SAVE DEVICE ADDRESS FOR A FUTURE OUT X,2 TURN OFF AUTOLOAD INDICATOR COPY =1,X OUT X,0 TURN ON SENSE SWITCH * * CHECK A SIZE OF THE RAM * AND WHERE STARTS UIM * * COPY JMP,Q COPY =:8A,X GET UIM TRAP LOCATION COPY Q,0(X) SET TRAP LOCATION COPY =TRAP,Q GET SERVICE ROUTINE ADDRESS COPY Q,1(X) SET IT IN THE TRAP LOCATION COPY =0,X COPY X,TRAPLOC START WIT RATE ERROR TEST DISABLE COPY =:1000,X GET END OF PROGRAM LOOP EQU $ COPY 0(X),Q B.C. JNE X,$+2 B.C JMP NO:UIM B.C COMP Q,Y B.C. COMPLEMENT VALUE READ FROM MEMORY COPY Y,0(X) B.C. AND TRY TO STORED IT BACK COPY 0(X),Y B.C. READ BACK TO VERIFY IF ROM OR RAM AND Q,Y B.C. 'AND'ING VALUE & COMP = ZERO JNE Y,GO  B.C. IF NOT = 0; MUST BE ROM ADD =:100,X B.C. INCREMENT MEMORY JMP LOOP * TRAP EQU $ COPY X,TRAPLOC RATE ERROR TEST POSSIBLE TO EXECUTE GO EQU $ NO:UIM EQU $ NO UNIMPLEMENTED MEMORY SUB  =1,X MAKE VALID ADDRESS COPY X,RAMSIZ SAVE RAMSIZE COPY =1,Q ERROR CODE 1 (POWER IS NOT ON WCI) JST PLACE SET ERRLOC COPY DEVADD,A RESTORE DEVICE ADDRESS XNX A SST 4 SENSE CONTROLLER JST ERR COPY =2,Q ERROR CODE 2 (DID NOT GO IDLE AFTER INITIALIZE) XNX A SELP A,4 INITIALIZE CONTROLLER COPY =20,Y SET TIME TO 20 SECOND JST SENSE SENSE CONTROLLER FOR IDLE JST RESET RESET STATUS COPY =ENDISO+3,X GET END OF PROGRAM COPY RAMSIZ,Y GET RAM SIZE SUB X,Y GET NUMBER OF LOCA  TIONS TO FILL WITH JST NEG Y PREPARE IT FOR IJNE COPY JST:INT,Q GET JST 0(X) FILLOOP EQU $ COPY Q,0(X) FILL A LOCATION WITH JST 0(Y) ADD =1,X BUMP LOCATION COUNTER OUT X,2 RESET BBU IJNE Y,FILLOOP COPY =OPCODE,X GET THE ADDRESS OF COMMAND BLOCK COPY =GOOD:INT,Q GET GOOD INTERRUPT ROUTINE COPY Q,7(X) SET IT IN COMMAND BLOCK COPY =:8000,Q GET MICRODIAGNOSTIC CODE JST COMMAND SEND COMMAND BLOCK COPY =3,Q ERROR CODE 3 (DID NOT GO IDLE AFTER MICRODIAGOSTIC) COPY =1,Y SET THE TIME FOR 1 SECOND JST SENSE SENSE CONTROLLER FOR IDLE JST RESET RESET STATUS COPY =4,Q ERROR CODE 4 (STATUS IS BAD AFTER MICRODIAGNOSTIC) COPY CONSTAT,Q B.C. TBIT 15,Q B.C. CHECK ONLY BIT 15 FOR MICRODIAG.. JF OV,$+2  JST ERR B.C. IF SET,THEN ERROR CONDITION COPY =:7FFF,Q INVERTED DATA IN OPERATION CODE WORD CSK Q,DRSTAT NOP  JST ERR DID NOT INVERT OPERATION CODE WORD COPY =ENDISO+3,X B.C.DETERMINE BUFFERS FOR READ TESTS COPY  RAMSIZ,Q SUB X,Q B.C.TOTAL RAM MINUS ISOLITE PROGRAM AND =:FFFE,Q B.C. ROUND OFF  SHIFT Q,RO,1 B.C. DIVIDE/2 COPY X,LOWBUF B.C. SAVE CALCULATED LOW BUFFER ADD Q,X  B.C. CALCULATE HIGH BUFFER COPY X,HIGHBUF B.C. SAVE CALCULATED HIGH BUFFER AND =:FFFE,Q  B.C. ROUND OFF COPY Q,DMACOUNT B.C. SAVE FOR DMA TEST COPY =0,Q B.C. CLEAR STATUS FLAG COPY Q,EXSTATUS B.C. JST IN:OUT EXECUTE BASIC FUNCTIONS TEST JST STAT EXECUTE STATUS CHECK ROUTINE EXIT EQU $ JST RESET RESET STATUS COPY DEVADD,A RESTORE DEVICE ADDRESS XNX A SELP A,4 RESET CONTROLLER COPY =1,Y SET TIME FOR 1 SECOND JST SENSE TEST FOR END OF OPERATION JST RESET RESET STATUS COPY SAL00,Q GET SAL 0,0 COPY Q,SALOOP SAVE IT FOR LOOPING COPY SREG,Q GET ENTRY S REGISTER COPY Q,S RESTORE S REGISTER COPY DATREG,Q GET ENTRY DATA REGISTER SELP Q,4 RESTORE DATA REGISTER COPY XREG,X RESTORE X REGISTER COPY QREG,Q RESTORE Q REGISTER COPY YREG,Y RESTORE Y REGISTER COPY AREG,A RESTORE A REGISTER COPY =:40,Q COPY Q,S UIS JMP START:WI B.C. ORG $-1  B.C. JMP SALCHAIN EXECUTE A NEXT PROGRAM LPOOL TITL TITL SUBROUTINES * ROUTINE TO SENSE CONTROLLER IDLE * * COPY =NUMBER OF SECONDS,Y * COPY =ERRCODE,Q * JST SENSE * SENSE ENT JST PLACE COPY =ERR+1,Q JST TIMER SET THE REAL TIME CLOCK COPY DEVADD,A RESTORE DEVICE ADDRESS IDLE EQU $ OUT X,2 RESET BBU XNX A SST 0 SENSE CONTROLLER JMP $+2 STILL BUSY JMP *SENSE NOT BUSY JMP IDLE * * ROUTINE TO OUTPUT COMMAND BLOCK TO CONTROLLER * * COPY OPCODE,Q * COPY =OPCODE,X * JST COMMAND * COMMAND ENT COPY Q,0(X) SET OPERATION CODE IN COMMAND BLOCK COPY DEVADD,A RESTORE DEVICE ADDRESS XNX A OUT X,0 SEND COMMAD BLOCK TO CONTROLLER JMP *COMMAND RETURN * * ROUTINE TO CHECK STATUS FOR END OF OPERATION * SINCE THE DISK DRIVE MAY NOT BE FORMATTED, THERE MAY BE CASES WHEN * A READ CAN NOT BE EXECUTED AND THE TEST MUST THEREFORE BE OMITTED. * * COPY =ERRCODE,Q * JST STATUS * STATUS ENT JST PLACE SET ERRLOC COPY EXSTATUS,Q B.C. IF STATUS IS FOR READ OPERATION JNE Q,READSTAT B.  C. THEN WE MUST IGNORE CERTAIN BITS COPY =:400,Q EXPECTED STATUS CSK Q,CONSTAT ACTUAL CHECK NOP JST ERR ERROR STATUS JMP *STATUS READSTAT EQU $ B.C. COPY CONSTAT,A B.C. STATUS RECEIVED ON READ OPERATION AND  EXSTATUS,A B.C. ISOLATE PERTINENT BITS CSK A,=:400 B.C. WHICH SHOULD THEN RESULT IN :400 NOP B.C. JST ERR B.C. COPY CONSTAT,A B.C. MUST PASS INFO. TO SKIP VERIFY RBIT 10,A B.C CLEAR FOR SIMPLE CHECK UPON RETURN JMP *STATUS JST ERR RUN OUT OF TIME * *ROUTINE TO SET ERROR LOCATION * * COPY =ERROR CODE,Q * JST PLACE * PLACE ENT COPY Q,ERRLOC SET ERROR CODE OUT X,2 RESET BBU JMP *PLACE * * REAL TIME CLOCK ROUTINE * * COPY =NUMBER OF SECONDS,Y * JST TIMER * TIMER ENT OUT A,2 RESET BBU COPY =0,A MUL =120,AY NUMBER OF TICKS COMP Y COPY Y,:91 SAVE IT FOR A CLOCK COPY X,Y SAVE X REG COPY =:91,X COPY JMP,A GET JMP *$+1 COPY A,1(X) COPY Q,2(X) COPY Y,X RESTORE X REG SBIT 8,S ENABLE CLOCK INTERRUPTS SBIT 5,S JMP *TIMER LPOOL TITL TITL SUBROUTINES * ROUTINE TO RESET STATUS WORD * RESET ENT SBIT 12,S RBIT 8,S RBIT 5,S UIS JMP *RESET * * ROUTINE TO HOLD EXPECTED INTERRUPTS * GOOD:INT EQU $ JST INT INT ENT SBIT 12,S DISABLE EOB RBIT 5,S DISABLE CLOCK COPY Q,INT SET RETURN ADDRESS JMP *INT RETURN * * ROUTINE TO HOLD UNEXPECTED INTERRUPTS * BAD:INT ENT SBIT 12,S DISABLE CONTROLLER INTERRUPTS RBIT 5,S DISABLE CLOCK COPY =3,Q ERROR CODE 3 (BAD INTERRUPT) JST PLACE SET ERRLOC JST ERR EXIT * * ROUTINE TO OUTPUT ERROR CODE TO CDR AND HALT * * ASSUMES ERROR CODE IN 'ERRLOC' - SEE SUBROUTINE 'PLACE'. * ERR ENT SBIT 12,S RBIT 5,S UIS COPY ERRLOC,Y GET ERROR CODE IN 4,Q GET CDR SHIFT Q,LO,8 SET IT INTO POSITION OR Y,Q MERGE TWO CODES SELP Q,4 SEND IT TO CDR HLT HALT THE PROCESSOR!!!!!!!!! JMP $-1 DO NOT GO ANYWHERE!!!!!!! TITL TITL ROUTINE TO EXECUTE I/O TEST (READ,SEEKS,READ VERIFY ETC..) * ROUTINE TO EXECUTE TEST I/O, READ, READ VERIFY * AND SEEK OPERATIONS * IN:OUT ENT COPY =:A1,Q BASIC FUNCTIONS TEST INDICATOR SELP Q,4 SEND IT TO CDR COPY =OPCODE,X COMMAND BLOCK ADDRESS COPY =0,Q OPERATION TIO COPY Q,7(X) B.C. CLEAR INTERRUPT ADDRESS IN CIOB JST COMMAND SEND IT TO CONTROLLER COPY =1,Q ERROR CODE 1 (DID NOT GO IDLE AFTER TIO) COPY =2,Y WAIT 2WO SECONDS FOR IDLE JST SENSE SENSE CONTROLLER FOR IDLE JST RESET RESET STATUS COPY =4,Q ERROR CODE 4 (STATUS BAD AFTER TIO) JST STATUS CHECK STATUS WORD COPY =BAD:INT,X GET ADDR OF UNEXPECTED INTERRUPT COPY =2,Q ERROR CODE 2 (NO INTERRUPT AFTER TIO) JST PLACE SET ERRLOC COPY =RET1,Q GET RETURN ADDRESS COPY =1,Y WAIT ONE SECOND FOR INTERRUPT RBIT 12,S ENABLE CONTROLLER INTERRUPTS UIS JST TIMER WAIT FOR INTERRUPT OUT X,2 RESET BBU JMP $-1 WAIT INTERRUPT RET1 EQU $ JST RESET RESET STATUS COPY =20,Y SET CLOCK FOR 20 SECONDS COPY =EXIT,Q CHANGE EXIT TO GOOD JST TIMER TIO EQU $ OUT X,2 RESET BBU COPY =OPCODE,X COMMAND BLOCK ADDRESS COPY =0,Q TIO OPERATION JST COMMAND SEND CONTROL BLOCK TO CONTROLLER OUT X,2 RESET BBU XNX A SST 0 CHECK FOR IDLE JMP $-3 NOT YET COPY DRSTAT,A GET DRIVE STATUS TBIT 15,A TEST FOR DRIVE A JF OV,READY:A DRIVE A IS READY TBIT 14,A TEST   FOR DRIVE B JF OV,READY:B DRIVE B IS READY JMP TIO DO IT AGEIN READY:A EQU $ JST RESET RESET STATUS COPY =0,Q SET DATA FOR COMMAND BLOCK JMP SET:UNIT GO SET CONTROL BLOK FOR SEEK OPERATION READY:B EQU $ JST RESET RESET STATUS COPY =1,Q SET UNIT FOR COMMAND BLOCK SET:UNIT EQU $ COPY Q,UNIT SET READY UNIT COPY =4,Q ERROR CODE 4 (STATUS IS BAD AFTER TIO) JST STATUS CHECK THE STATUS WORD COPY =BAD:INT,X GET JMP TO EXPECTED INT. ROUTINE COPY =2,Q ERROR CODE 2 (NO INTERRUPT AFTER TIO) JST PLACE SET ERRLOC COPY =RET2,Q GET RETURN ADDRESS COPY =1,Y WAIT TWO SECONDS RBIT 12,S UIS JST TIMER SET REAL TIME CLOCK OUT X,2 RESET BBU JMP $-1 WAIT FOR I RET2 EQU $ JST RESET RESET STATUS COPY =0,Q COPY Q,CYL SET CYL. =0 COPY Q,HEAD SET HEAD =0 COPY Q,SECTOR SET SECTOR =0 COPY Q,DCIOB CHAIN ADDRESS = 0 JMP SEEK LPOOL TITL TITL SEEK TEST (I/O TEST - RUN CODE A1 * * SEEK TEST * SEEK EQU $ COPY =:80,Q B.C. SEEK CYLINDER 128 (DEC) SEEKNEXT EQU $ B.C. COPY =OPCODE,X GET CIOB ADDRESS COPY Q,2(X) B.C. MOVE CYL. TO CIOB COPY =9,Q GET SEEK OPCODE JST COMMAND SEND CIOB TO CONTROLLER COPY =5,Q ERROR CODE 5 (DID NOT GO IDLE AFTER SEEK) COPY =2,Y SET TIME FOR TWO SECONDS JST SENSE SENSE CONTROLLER FOR IDLE JST RESET RESET STATUS COPY =6,Q ERROR CODE 6 (BAD STATUS AFTER SEEK) JST STATUS CHECK STATUS COPY =7,Q ERROR CODE 7 (NO INT AFTER SEEK) JST PLACE SET ERRLOC COPY =BAD:INT,X GET BAD INTERRUPT ADDRESS COPY =1,Y WAIT ONE SECOND FOR INTERRUPT COPY =RET3,Q GET RETURN ADDRESS RBIT 12,S ENABLE INTERRUPTS UIS JST TIMER WAIT FOR INTERRUPT OUT X,2 RESET BBU JMP $-1 WAIT FOR INTERRUPT RET3 EQU $ JST RESET RESET STATUS COPY CYL,Q B.C. GET LAST CYLINDER SEEK JEQ  Q,VERIFY B.C. THROUGH; GO TO NEXT TEST SUB =:10,Q B.C. ADJUST FOR NEXT SEEK JMP SEEKNEXT B.C. GO BACK & CONTINUE SEEKING TITL TITL READ VERIFY (I/O TEST - RUN CODE A1) * * READ VERIFY TEST * VERIFY EQU $ B.C. COPY =:7F8F,Q B.C. MASK TO ISOLATE BITS COPY Q,EXSTATUS B.C. MOVE IT TO FLAG COPY =ENDISO+3,Y B.C. SET-UP BUFFER FOR POSIBLE FAILURE COPY Y,MEMADDR B.C. USE SAME BUFFER AS FOR READ TEST COPY AAAA,Q B.C. PATTERN TO REMAIN INTACT IN MEMORY COPY =:20,X B.C. SIZE OF MEMORY BUFFER FOR TEST FILLING1 EQU $ B.C. COPY Q,0(X,Y) B.C. FILL MEMORY WITH PATTERN :AAAA JNED X,FILLING1 B.C. COPY =OPCODE,X GET CIOB ADDRESS COPY =:20,Q NUMBER OF WORDS TO BE PROCESSED COPY Q,5(X) SET WORD COUNT IN CIOB COPY =8,Q OPERATION CODE READ VERIFY JST COMMAND SEND CIOB TO CONTROLLER COPY =8,Q ERROR CODE 8 (DID NOT IDLE AFTER READ VERIFY) COPY =4,Y SET TIMER FOR 4 SECONDS JST SENSE SENSE CONTROLLER FOR IDLE JST RESET RESET STATUS COPY =:9,Q ERROR CODE 9 (STATUS BAD AFTER READ VERIFY) JST STATUS CHECK STATUS WORD JEQ A,$+2 CONTINUE TESTING IF ALL'S FINE JMP READTEST MAYBE TRY NEXT READ TEST COPY =:A,Q ERROR CODE A (NO INTERRUPT AFTER READ VERIFY) JST PLACE SET ERRLOC COPY =BAD:INT,X ADDRESS OF BAD INTERRUPT ROUTINE COPY =1,Y SET TIME FOR ONE SECONDS COPY   =RET4,Q GET RETURN ADDRESS RBIT 12,S ENABLE INTERRUPTS UIS JST TIMER WAIT FOR INTERRUPT OUT X,2 RESET BBU JMP $-1 WAIT FOR INTERRUPT RET4 EQU $ JST RESET RESET STATUS WORD COPY =:B,Q ERROR CODE B (WORD COUNT IS BAD AFTER READ VERIFY) JST PLACE SET ERRLOC COPY =:20,Q GET EXPECTED NUMBER CSK Q,WPROC CHECK THE NUMBER NOP JST ERR BAD NEWS, ERROR EXIT * * CHANGES BELOW BY B.C. 2 JULY '82 * COPY =:14,Q ERR CODE (READ VERIFY ACTUALLY READ-SHOULD JST PLACE COPY MEMADDR,Y GET BUFFER ADDR. COPY AAAA,Q COPY =:19,X BUFFER SI CHKING1 EQU $  CSK Q,0(X,Y) COMPARE;MUST HAVE REMAINED INTACT NOP JST ERR JNED X,CHKING1 B.C. DECREMENT & GO BACK IF NOT THROUGH JMP READTEST B.C. GO TO THE NEXT TEST LPOOL B.C TITL TITL READ TEST (I/O TEST - RUN CODE A1) ************************************************************************** * * READ TEST * READTEST EQU $ B.C. COPY =-1,Q B.C. COPY Q,FLAG B.C. 1ST/2ND BUFFER FILLING INDICATOR COPY =0,X END OF CHAIN COPY X,CDCIOB SET IT IN CHAIN BLOCK COPY LOWBUF,Y  B.C. LOW BUFFER FIRST COPY AAAA,Q B.C. IN THIS CASE IT MUST DESTROY PATTERN READT EQU $ COPY Y,MEMADDR FILL COMMAND BLOCK COPY =:19,X FILLING2 EQU $ COPY Q,0(X,Y) B.C. FILL IN WITH PATTERN :AAAA  JNED X,FILLING2 B.C. CONTINUE UNTIL THROUGH COPY =:10,Q GET LENGTH OF BUFFER COPY Q,WCOUNT SET WORD COUNT IN COMMAND BLOCK COPY Q,CWCOUNT SET WORD COUNT IN CHAIN COMMAND BLOCK COPY =CWCOUNT,A GET CHAIN BLOCK ADDRESS COPY A,DCIOB SET IT IN COMMAND BLOCK ADD Y,Q GET CHAIN BUFFER ADDRESS COPY Q,CMEMADDR SET IT IN CHAIN BLOCK COPY =OPCODE,X GET COMMAND BLOCK ADDRESS COPY =4,Q READ OPERATION JST COMMAND OUTPUT COMMAND BLOCK TO CONTROLLER COPY =:C,Q ERROR CODE C (DID NOT GO IDLE AFTER READ) COPY =6,Y WAIT 6 SECONDS JST SENSE SENSE IDLE JST RESET RESET STATUS COPY =:D,Q ERROR CODE D (STATUS IS BAD AFTER READ)  JST STATUS CHECK STATUS WORD JEQ A,$+2 IF R.A=0,CONTINE WITH TEST JMP DMATEST OTHERWISE MAYBE TRY DMATEST COPY =:E,Q ERROR CODE E (WORD COUNT IS BAD AFTER READ) JST PLACE SET ERRLOC COPY =:20,Q EXPECTED WORD COUNT CSK Q,WPROC CHECK THE NUMBER OF WORDS PROCESSED NOP JST ERR ERROR EXIT COPY =:F,Q ERROR CODE F (NO INTERRUPT AFTER READ) JST PLACE SET ERRLOC COPY =BAD:INT,X BAD INTERRUPT ROUTINE ADDRESS COPY =1,Y WAIT ONE SECONDS COPY =RET5,Q GET RETUN ADDRESS RBIT 12,S ENABLE INTERRUPTS UIS JST TIMER WAIT FOR INTERRUPT OUT X,2 RESET BBU JMP $-1 WAIT FOR INTERRUPT RET5 EQU $ JST RESET RESET STATUS COPY =:15,Q B.C. ERR CODE (READ DID NOT REALLY READ) JST PLACE B.C. IMS FLAG B.C. INDICATES IF 2ND BUFFER TO BE DONE JMP NEXT1 B.C. 2ND BUFFER READ ALREADY COPY HIGHBUF,Y B.C. HIGHER BUFFER TO BE FILLED W/PATTERN COPY ALL5S,Q B.C. PATTERN  JMP READT B.C. GO BACK & FILL 2ND BUFFER NEXT1 EQU $ COPY HIGHBUF,X B.C. MUST VERIFY  THAT BOTH MATCH COPY LOWBUF,Y B.C. IF READ WORKS AS IT SHOULD COPY =:19,Q B.C. VERFY1 EQU $ COPY 0(X),A B.C. GET FROM ONE BUFFER XOR 0(Y),A B.C. RESULT SHOULD BE ZERO (0)  JNE A,NOMATCH B.C. ERROR IF NO MATCH ADD =1,X B.C. ADD =1,Y B.C  JNED Q,VERFY1 B.C. JMP DMATEST B.C. NOMATCH EQU $ JST ERR B.C. HALT WITH ERROR CODE :15 AAAA WORD :AAAA B.C. PATTERN FOR READ TEST ALL5S WORD :5555 B.C. PATTERN FOR READ TEST HIGHBUF WORD 0 LOWBUF WORD 0 FLAG WORD 0 -1 = 1ST BUFF. 0 = 2ND BUFF. LPOOL TITL TITL DMA TEST (I/O * * DMA TEST * DMATEST EQU $ B.C. COPY =-1,Q B.C.  COPY Q,FLAG B.C. 1ST/2ND BUFFER FILLING INDICATOR COPY LOWBUF,Y B.C. GET ADDRESS OF 1ST BUFFER  COPY AAAA,A B.C. AND PATTERN TO MOVE INTO IT READMA EQU $ B.C. COPY Y,MEMADDR  B.C. MOVE IT CIOB COPY DMACOUNT,X B.C. NO. WORDS TO TRANSFER COPY X,Q SUB =1,X  B.C. ADJUST FOR 'JNED' INSTRUCTION LOOP2 EQU $ COPY A,0(X,Y) B.C. MOVE PATTERN TO MEMORY  JNED X,LOOP2 B.C. DECREMENT UNTIL THROUGH COPY Q,EXWORDS SAVE EXPECTED WORD COUNT SHIFT Q,RO,1 GET A HALF COPY Q,WCOUNT SET WORD COUNT IN COMMAND BLOCK COPY Q,CWCOUNT SET WORD COUNT IN CHAIN BLOCK ADD Y,Q GET CHAIN BUFFER ADDRESS COPY Q,CMEMADDR SET IT IN CHAIN BLOCK COPY =OPCODE,X GET COMMAND BLOCK ADDRESS COPY =4,Q READ OPERATION JST COMMAND OUTPUT COMMAND BLOCK TO CONTROLLER COPY =:10,Q ERROR CODE 10 (DID NOT GO IDLE AFTER READ) COPY =36,Y WAIT 36 SECONDS JST SENSE SENSE IDLE JST RESET RESET STATUS COPY =:11,Q ERROR CODE 11 (STATUS IS BAD AFTER READ) JST STATUS CHECK STATUS WORD JEQ A,$+2  B.C. IF NOT ZERO,SKIP READ TEST JMP IOEXIT B.C. COPY =:12,Q ERROR CODE 12 (WORD COUNT IS BAD AFTER READ) JST PLACE SET ERRLOC COPY EXWORDS,Q EXPECTED WORD COUNT CSK Q,WPROC CHECK THE NUMBER OF WORDS PROCESSED NOP JST ERR ERROR EXIT COPY =:13,Q ERROR CODE 13 (NO INTERRUPT AFTER READ) JST PLACE SET ERRLOC COPY =BAD:INT,X BAD INTERRUPT ROUTINE ADDRESS COPY =1,Y WAIT ONE SECONDS COPY =RET6,Q GET RETURN ADDRESS RBIT 12,S ENABLE INTERRUPTS UIS JST TIMER WAIT FOR INTERRUPT OUT X,2 RESET BBU JMP $-1 WAIT FOR INTERRUPT RET6 EQU $ JST RESET RESET STATUS COPY =:16,Q B.C. DID NOT READ IN DMA OPERATION JST PLACE B.C. STORE ERROR CODE IMS FLAG B.C. 2ND BUFFER TO FILL ? JMP NEXT2 B.C. NO, THROUGH WITH READ,NOW VERIFY COPY HIGHBUF,Y B.C. GET 2ND BUFFER ADDRESS COPY ALL5S,A B.C. GET DIFFERENT PATTERN JMP READMA B.C. AND GO BACK FOR 2ND ROUND NEXT2 EQU $ COPY HIGHBUF,X B.C. GET BOTH BUFFER ADDRESSES COPY LOWBUF,Y COPY DMACOUNT,Q B.C. AND NO.OF WORDS TRANSFERED FOR EACH SUB =1,Q B.C. ADJUST FOR 'JNED' INSTRUCTION VERIFY2   EQU $ COPY 0(X),A B.C. WORD READ FROM DISK INTO UPPER BUF XOR 0(Y),A B.C. WORD READ FROM DISK INTO LOWER BUF JNE A,NOMATCH2 B.C. BAD READ ADD =1,X B.C. POINT TO NEXT BUFFER LOCATION ADD =1,Y B.C. JNED Q,VERIFY2 B.C. THROUGH WHEN IT IS = ZERO COPY Q,EXSTATUS B.C. CLEAR EXPECTED STATUS IOEXIT EQU $ COPY =IN:OUT,Y GET RETURN ADDRESS JMP *0(Y) NOMATCH2 EQU $  JST ERR B.C. HALT WITH ERROR CODE :16 LPOOL TITL TITL STATUS CHECK ROUTINE (STATUS TEST - RUN CODE A2) STAT ENT COPY =:A2,Q TEST IDENTIFICATION SELP Q,4 SEND IT TO CDR COPY =0,Q COPY Q,INTADDR DISABLE INTERRUPTS ON THE CONTROLLER  COPY Q,DCIOB SET COMMAND BLOCK COPY JST:INT,Q GET JST 0(X) COPY Q,GOOD:INT DO NOT EXPECT INT * * RATE ERROR TEST * COPY TRAPLOC,Q UIM TRAP LOCATION JEQ Q,ID:TEST RATE ERROR TEST IMPOSSIBLE TO EXECUTE COPY Q,MEMADDR BUFFER ADDRESS COPY =4,Q READ OPERATION COPY =OPCODE,X COMMAND BLOCK ADDRESS JST COMMAND SEND COMMAND BLOCK COPY =1,Q ERROR CODE 1 (DID NOT GO IDLE, RATE ERROR TEST) COPY =1,Y WAT A SECOND JST SENSE SENSE IDLE JST RESET RESET STATUS COPY =2,Q ERROR CODE 2 (STATUS BAD, RATE ERROR EXPECTED) JST PLACE SET ERRLOC COPY =:8402,Q EXPECTED STATUS CSK Q,CONSTAT CHECK THE STATUS NOP JST ERR ERROR EXIT * * ID TEST * ID:TEST EQU $ COPY =:FF,Q INVALID SECTOR ID COPY Q,SECTOR SET IT IN COMMAND BLOCK COPY =4,Q OPERATION READ COPY =OPCODE,X COMMAND BLOCK ADDRESS JST COMMAND SEND COMMAND BLOCK COPY =:B,Q ERROR CODE :B (DID NOT GO IDLE, ID TEST) COPY =1,Y WAIT A SECOND JST SENSE SENSE IDLE JST RESET RESET STATUS COPY =4,Q ERROR CODE 4 (STATUS BAD, ID ERROR EXPECTED) JST PLACE SET ERRLOC COPY =:8410,Q EXPECTED STATUS CSK Q,CONSTAT CHECK STATUS WORD NOP JST ERR ERROR EXIT * * SEEK ERROR TEST * COPY =:FFF,Q GET UNUSUAL CYLINDER COPY Q,CYL SET COMMAND BLOCK COPY =9,Q SEEK OPERATION JST COMMAND SEND CONTROL BLOCK ADDRESS COPY =5,Q ERROR CODE 5 ( DID NOT GO IDLE AFTER SEEK, STATUS TEST) COPY =1,Y WAIT A SEOND JST SENSE SENSE IDLE JST RESET RESET STATUS COPY =6,Q ERROR CODE 6 (STATUS BAD,SEEK ERROR EXPECTED) JST PLACE SET ERRLOC COPY =:8600,Q EXPECTED STATUS CSK Q,CONSTAT CHECK THE STATUS WORD NOP JST ERR ERROR EXIT * * END OF MEDIA TEST * COPY =4,Q OPERATION READ JST COMMAND SEND COMMAND BLOCK ADDRESS COPY =7,Q ERROR CODE 7 (DID NOT GO IDLE, STATUS TEST) COPY =1,Y WAIT A SECOND JST SENSE SENSE IDLE JST RESET RESET STATUS  COPY =8,Q ERROR CODE 8 (STATUS BAD, END OF MEDIA EXPECTED) JST PLACE SET COPY =:8C00,Q EXPECTED STATUS CSK Q,CONSTAT CHECK THE STATUS WORD NOP JST ERR ERROR EXIT * * INTERRUPT RESET TEST * COPY =GOOD:INT,Q GET INTERRUPT ROUTINE ADDRESS COPY Q,INTADDR SET IT IN COMMAND BLOCK COPY =4,Q OPERATION READ JST COMMAND SEND IT TO CONTROLLER COPY =1,Y WAIT A SECOND COPY =9,Q ERROR CODE 9 (DID NOT GO IDLE,STATUS TEST) JST SENSE SENSE IDLE JST RESET RESET STATUS COPY DEVADD,A RESTORE DEVICE ADDRESS XNX A SELP A,4 RESET INTERRUPT COPY =:A,Q ERROR CODE A (DID NOT GO IDLE AFTER RESET) COPY =1,Y WAIT A SECOND JST SENSE SENSE IDLE JST RESET RESET STATUS COPY =BAD:INT,X UNEXPECTED INTERRUPT COPY =1,Y WAIT A SECOND RBIT 12,S ENABLE CONTROLLER INTERRUPTS  UIS JST TIMER SET RTC COPY =RET7,Q GOOD RETURN ADDRESS COPY Q,:93 SET RTC COPY JMP,Q GET JMP *$+1 COPY Q,:92 SET RTC OUT X,2 RESET BBU JMP $-1 WAIT FOR INTERRUPT RET7 EQU $ JST RESET RESET STATUS JMP *STAT LPOOL TITL ENDISO EQU $ SALCHAIN EQU $ * SAL CHAIN SALOOP EQU SALCHAIN+1 * SAL LOOP BACK END START:WI LE AFTER RESET) COPY =1,Y WAIT A SECOND JST SENSE SENSE IDLE JST RESET RESET STATUS COPY =BAD:INT,X UNEXPECTED INTERRUPT COPY =1,Y WAIT A SECOND RBIT 12,S ENABLE CONTROLLER INTERRUPTS1PAGE 0001 MACRO (F400) SCOUT WINCHESTER DISK INTERFACE ISOLITE TEST 84-93734-10 (A200) 1982/09/09 17:38:17.75 GENERAL DESCRIPTION SI = DM01.SWI:ISOLITE.ASM SO = DM01.SWI:ISOLITE.OBJ LO = DM01.SWI:ISOLITE.LST 0003 ************************************************************ 0004 *  * 0005 * SCOUT WINCHESTER DISK DRIVE INTERFACE * 0006 * ISOLITE TEST PROGRAM * 0007 * *  0008 ************************************************************ 0009 *  * 0010 * COPYRIGHT 1982, COMPUTER AUTOMATION,INC. *  0011 * * 0012 ************************************************************ 0013 * 0014 * PROGRAM DESCRIPTION: 0015  * 0016 * THIS PROGRAM IS AN ISOLITE TEST PROGRAM FOR THE SCOUT 0017 * WINCHESTER DISK DRIVE INTERFACE BOARD (54140). 0018 * 0019 * THIS TEST PROGRAM WILL ACCESS THE WINCHESTER DISK BY 0020 * MEANS OF SEEKS AND READS. NO DATA IS EVER WRITTEN TO THE 0021 * DISK AND SHOULD NEVER BE WRITTEN TO THE DISK. 0022 * 0023 * 0024 * THE PROGRAM WAS DESIGNED AND CODED BY ANATOLY VASERFIRER. 0025 * THE PROGRAM WAS TESTED AND MODIFIED BY B.CANCIO JULY,1982.  0026 * 0027 * REVISIONS: 0028 * 0029 * A1 - RESET INTERRUPT STATUS UPON EXIT (UIS :40) 0030 * LEFT DEBUG IN AS COMMENTS 0031 *  MOVED MAIN PROGRAM TO TOP WITH ABS :200 0032 * DAVE HALE 1/14/83  0033 * 0034 * A2 - CHANGED INITIAL WAIT FOR FIRST JST SENSE TO 10 MS 0035 *  DAVE HALE 4/20/83 0036 * 0037 ************************************************************ 1PAGE 0002 MACRO (F400) SCOUT WINCHESTER DISK INTERFACE ISOLITE TEST 84-93734-10 (A200) 1982/09/09 17:38:19.00 EQUATES ETC.. 0040 * EXTR DEBUG4 DEBUG BLOCK 0205 0041 NAM G:0  DEBUG LINK ADDRESS 0042 * ABS 0 0043 *DEBUG JST *$+1   0044 * WORD DEBUG4 DEBUG BLOCK 0200 0045 NAM G:G,G:T,START:WI 0205 0205  0000 0001 0046 REL 00000001 0047 RAMSIZ EQU 1 00000002 0048 DMACOUNT EQU 2 00000003 0049 QREG EQU 3 00000004 0050 AREG EQU 4 00000005 0051 XREG EQU 5 00000006 0052 DATREG EQU 6 00000007 0053 SREG EQU 7 00000008 0054 YREG EQU 8 00000009 0055 DEVADD EQU 9 0000000A 0056 COUNT2 EQU 10 0000000B 0057 COUNT1 EQU 11  0000000C 0058 ERRLOC EQU 12 0000000D 0059 OPCODE EQU 13 0000000E 0060 UNIT EQU 14  0000000F 0061 CYL EQU 15 00000010 0062 HEAD EQU 16 00000011 0063 SECTOR EQU  17 00000012 0064 WCOUNT EQU 18 00000013 0065 MEMADDR EQU 19 00000014 0066 INTADDR EQU  20 00000015 0067 DCIOB EQU 21 00000016 0068 WPROC EQU 22 00000017 0069 CONSTAT EQU 23 00000018 0070 DRSTAT EQU 24 00000019 0071 CWCOUNT EQU 25 0000001A 0072 CMEMADDR EQU 26 0000001B 0073 CRES EQU 27 1PAGE 0003 MACRO (F400) SCOUT WINCHESTER DISK INTERFACE ISOLITE TEST 84-93734-10 (A200) 1982/09/09 17:38:20.00 EQUATES ETC.. 0000001C 0074 CDCIOB EQU 28 0000001D 0075 EXWORDS EQU 29 0000001E 0076 EXSTATUS EQU 30 EXPECTED STATUS FLAG & MASK READ STATUS  0077 * 0200 0000 0078 ABS :200 0079 * DEBUG REGISTER 00000200 0080 G:G EQU $ 0200 9F80 0201 0081 JMP JMP *$+1 0201 0000 0082 TRAPLOC WORD 0 0202 BC80 0000 0083  JST:INT JST 0(X) 0203 BF80 0204 0084 JST JST *$+1 0204 6600 0085 SAL00 SAL 0,0 1PAGE 0004 MACRO (F400) SCOUT WINCHESTER DISK INTERFACE ISOLITE TEST 84-93734-10 (A200) 1982/09/09 17:38:20.25 MAIN ENTRY POINT TO THE PROGRAM - START:WI 00000205 0087 G:T EQU $ DEBUG REGISTER 0088 *  0089 * MAIN ENTRY POINT TO THE PROGRAM 0090 * 00000205 0091 START:WI EQU $ 00000205  0092 G:0 EQU $ DEBUG START 0205 662E 0093 SAL 2,14 0205 0000 0094  ORG $-1 B.C. 0205 0000 0095 WORD 0 B.C 0206 C403 0003 0096 COPY  Q,QREG SAVE Q REGISTER 0207 8404 0004 0097 COPY A,AREG SAVE A REGISTER 0208 A405 0005 0098  COPY X,XREG SAVE X REGISTER 0209 E408 0008 0099 COPY Y,YREG SAVE Y REGISTER 020A 4104 0100 IN 4,Q GET DATA REGISTER 020B C406 0006 0101 COPY Q,DATREG SAVE DATA REGISTER 020C 29A0 0102 COPY =:A0,X WINCHESER ISOLITE CODE 020D 2404 0103 SELP X,4 SEND IT TO CDR 020E 4030 0104 COPY S,Q GET S REGISTER 020F C407 0007 0105   COPY Q,SREG SAVE S REGISTER 0210 C2E8 0279 0106 COPY =:1040,Q NEW S REGISTER 0211 3040  0107 COPY Q,S SET S REGISTER 0212 0309 0108 UIS 0213 18F8 0109 AND  =:F8,A GET DEVICE ADDRESS OUT OF SAL INFORMATION 0214 8409 0009 0110 COPY A,DEVADD SAVE DEVICE ADDRESS FOR A FUTURE 0215 2202 0111 OUT X,2 TURN OFF AUTOLOAD INDICATOR 0216 2901 0112  COPY =1,X 0217 2200 0113 OUT X,0 TURN ON SENSE SWITCH 0114 *  0115 * CHECK A SIZE OF THE RAM 0116 * AND WHERE STARTS UIM 0117 *  0118 * 0218 C267 0200 0119 COPY JMP,Q 0219 298A 0120 COPY =:8A,X GET UIM TRAP LOCATION 021A C480 0000 0121 COPY Q,0(X) SET TRAP LOCATION 021B C2DE 027A 0122 COPY =TRAP,Q  GET SERVICE ROUTINE ADDRESS 1PAGE 0005 MACRO (F400) SCOUT WINCHESTER DISK INTERFACE ISOLITE TEST 84-93734-10 (A200) 1982/09/09 17:38:21.75 MAIN ENTRY POINT TO THE PROGRAM - START:WI 021C C481 0001 0123 COPY Q,1(X) SET IT IN THE TRAP LOCATION 021D 2900 0124 COPY =0,X 021E A662 0201 0125 COPY X,TRAPLOC START WIT RATE ERROR TEST DISABLE 021F A2DB 027B 0126 COPY =:1000,X GET END OF PROGRAM 00000220 0127 LOOP EQU $ 0220 C080 0000 0128 COPY 0(X),Q B.C. 0221 31C1 0223 0129 JNE X,$+2  B.C 0222 9E88 022B 0130 JMP NO:UIM B.C 0223 6049 0131 COMP Q,Y B.C. COMPLEMENT VALUE READ FROM MEMORY 0224 E480 0000 0132 COPY Y,0(X) B.C. AND TRY TO STORED IT BACK 0225 E080 0000 0133 COPY 0(X),Y B.C. READ BACK TO VERIFY IF ROM OR RAM 0226 6044 0134 AND Q,Y B.C. 'AND'ING VALUE & COMP = ZERO 0227 71C3 022B 0135 JNE Y,GO B.C. IF NOT = 0; MUST BE ROM 0228 AAD3 027C 0136 ADD =:100,X B.C. INCREMENT MEMORY 0229 9E76 0220 0137 JMP LOOP  0138 * 0000022A 0139 TRAP EQU $ 022A A656 0201 0140 COPY X,TRAPLOC RATE ERROR TEST POSSIBLE TO EXECUTE 0000022B 0141 GO EQU $ 0000022B 0142 NO:UIM EQU $ NO UNIMPLEMENTED MEMORY 022B 2AFF 0143 SUB =1,X MAKE VALID ADDRESS 022C A401 0001 0144  COPY X,RAMSIZ SAVE RAMSIZE 022D 4901 0145 COPY =1,Q ERROR CODE 1 (POWER IS NOT ON WCI) 022E BFC8 0277 0146 JST PLACE SET ERRLOC 022F 8009 0009 0147 COPY DEVADD,A RESTORE DEVICE ADDRESS 0230 030A 0148 XNX A 0231 0604 0149 SST 4 SENSE CONTROLLER 0232 BFC5 0278 0150 JST ERR 0233 4902 0151 COPY =2,Q ERROR CODE 2 (DID NOT GO IDLE AFTER INITIALIZE) 0234 030A 0152 XNX A 0235 0404 0153 SELP A,4 INITIALI ZE CONTROLLER 0236 6914 0154 COPY =20,Y SET TIME TO 20 SECOND 0237 BED4 028C 0155 JST  SENSE SENSE CONTROLLER FOR IDLE 0238 BFC4 027D 0156 JST RESET RESET STATUS 0239 A2C4 027E  0157 COPY =ENDISO+3,X GET END OF PROGRAM 023A E001 0001 0158 COPY RAMSIZ,Y GET RAM SIZE 1PAGE 0006 MACRO (F400) SCOUT WINCHESTER DISK INTERFACE ISOLITE TEST 84-93734-10 (A200) 1982/09/09 17:38:23.25 MAIN ENTRY POINT TO THE PROGRAM - START:WI 023B 6023 0159 SUB X,Y GET NUMBER OF LOCATIONS TO FILL WITH JST 023C 6061 0160 NEG Y PREPARE IT FOR IJNE 023D C244 0202 0161 COPY JST:INT,Q  GET JST 0(X) 0000023E 0162 FILLOOP EQU $ 023E C480 0000 0163 COPY Q,0(X) FILL A LOCATION WITH JST 0(Y) 023F 2B01 0164 ADD =1,X BUMP LOCATION COUNTER 0240 2202 0165 OUT  X,2 RESET BBU 0241 74BC 023E 0166 IJNE Y,FILLOOP 0242 290D 0167 COPY =OPCODE,X GET THE ADDRESS OF COMMAND BLOCK 0243 C2BB 027F 0168 COPY =GOOD:INT,Q GET GOOD INTERRUPT ROUTINE 0244 C487 0007 0169 COPY Q,7(X) SET IT IN COMMAND BLOCK 0245 C2BA 0280 0170 COPY =:8000,Q GET MICRODIAGNOSTIC CODE 0246 BED0 0297 0171 JST COMMAND SEND COMMAND BLOCK 0247 4903 0172  COPY =3,Q ERROR CODE 3 (DID NOT GO IDLE AFTER MICRODIAGOSTIC) 0248 6901 0173 COPY =1,Y  SET THE TIME FOR 1 SECOND 0249 BEC2 028C 0174 JST SENSE SENSE CONTROLLER FOR IDLE 024A BEFD 02C8 0175 JST RESET RESET STATUS 024B 4904 0176 COPY =4,Q ERROR CODE 4 (STATUS IS BAD AFTER MICRODIAGNOSTIC) 024C C017 0017 0177 COPY CONSTAT,Q B.C. 024D 40FF 0178 TBIT  15,Q B.C. CHECK ONLY BIT 15 FOR MICRODIAG.. 024E 36C1 0250 0179 JF OV,$+2 024F BFA8 0278 0180  JST ERR B.C. IF SET,THEN ERROR CONDITION 0250 C2B0 0281 0181 COPY =:7FFF,Q INVERTED DATA IN OPERATION CODE WORD 0251 F818 0018 0182 CSK Q,DRSTAT 0252 0000 0183 NOP 0253 BFA4 0278 0184 JST ERR DID NOT INVERT OPERATION CODE WORD 0254 A2A9 027E 0185 COPY =ENDISO+3,X  B.C.DETERMINE BUFFERS FOR READ TESTS 0255 C001 0001 0186 COPY RAMSIZ,Q 0256 4023 0187 SUB  X,Q B.C.TOTAL RAM MINUS ISOLITE PROGRAM 0257 D6AA 0282 0188 AND =:FFFE,Q B.C. ROUND OFF 0258 4E09 0189 SHIFT Q,RO,1 B.C. DIVIDE/2 0259 A7A9 0283 0190 COPY X,LOWBUF B.C. SAVE CALCULATED LOW BUFFER 025A 2042 0191 ADD Q,X B.C. CALCULATE HIGH BUFFER 025B A7A8 0284 0192  COPY X,HIGHBUF B.C. SAVE CALCULATED HIGH BUFFER 025C D6A5 0282 0193 AND =:FFFE,Q B.C. ROUND OFF 025D C402 0002 0194 COPY Q,DMACOUNT B.C. SAVE FOR DMA TEST 1PAGE 0007 MACRO (F400) SCOUT WINCHESTER D ISK INTERFACE ISOLITE TEST 84-93734-10 (A200) 1982/09/09 17:38:24.75 MAIN ENTRY POINT TO THE PROGRAM - START:WI 025E 4900  0195 COPY =0,Q B.C. CLEAR STATUS FLAG 025F C41E 001E 0196 COPY Q,EXSTATUS B.C. 0260 BFA4 0285 0197 JST IN:OUT EXECUTE BASIC FUNCTIONS TEST 0261 BFA4 0286 0198 JST STAT EXECUTE STATUS CHECK ROUTINE 00000262 0199 EXIT EQU $ 0262 BEE5 02C8 0200 JST RESET RESET STATUS 0263 8009 0009 0201 COPY DEVADD,A RESTORE DEVICE ADDRESS 0264 030A 0202  XNX A 0265 0404 0203 SELP A,4 RESET CONTROLLER 0266 6901 0204 COPY =1,Y SET TIME FOR 1 SECOND 0267 BEA4 028C 0205 JST SENSE TEST FOR END OF OPERATION 0268 BEDF 02C8 0206 JST RESET RESET STATUS 0269 C21A 0204 0207 COPY SAL00,Q GET SAL 0,0 026A C79C 0287 0208 COPY Q,SALOOP SAVE IT FOR LOOPING 026B C007 0007 0209 COPY SREG,Q GET ENTRY S REGISTER 026C 3040 0210 COPY Q,S RESTORE S REGISTER 026D C006 0006 0211 COPY DATREG,Q GET ENTRY DATA REGISTER 026E 4404 0212 SELP Q,4 RESTORE DATA REGISTER 026F A005 0005 0213 COPY XREG,X RESTORE X REGISTER 0270 C003 0003 0214 COPY QREG,Q RESTORE Q REGISTER 0271 E008 0008 0215 COPY YREG,Y RESTORE Y REGISTER 0272 8004 0004 0216 COPY AREG,A RESTORE A REGISTER 0273 4940 0217 COPY =:40,Q 0274 3040 0218 COPY Q,S 0275 0309 0219 UIS 0276 9E0E 0205 0220 JMP START:WI B.C. 0276 0000 0221 ORG $-1 B.C. 0276 9F91 0288 0222 JMP SALCHAIN EXECUTE A NEXT PROGRAM 0015 0223  LPOOL 0277 02AF PLACE 0278 02DA ERR 0279 1040 027A 022A TRAP 027B 1000 027C 0100 027D 02C8 RESET 1PAGE 0008 MACRO (F400) SCOUT WINCHESTER DISK INTERFACE ISOLITE TEST 84-93734-10 (A200) 1982/09/09 17:38:26.00 MAIN ENTRY POINT TO THE PROGRAM - START:WI 027E 0480 027F 02CE GOOD:INT 0280 8000 0281 7FFF 0282 FFFE 0283 03C5 LOWBUF 0284 03C4 HIGHBUF 0285 02E5 IN:OUT 0286 040F STAT 0287 047E SALOOP 0288 047D SALCHAIN 0289 028A 028B 1PAGE 0009 MACRO (F400) SCOUT WINCHESTER DISK INTERFACE ISOLITE TEST 84-93734-10 (A200) 1982/09/09 17:38:26.25 SUBROUTINES 0226 * ROUTINE TO SENSE CONTROLLER IDLE 0227 * 0228 * COPY =NUMBER OF SECONDS,Y 0229 * COPY =ERRCODE,Q 0230 * JST SENSE 0231 * 028C 0E0D 0232 SENSE ENT 028D BEA1 02AF 0233  JST PLACE 028E C2B4 02C3 0234 COPY =ERR+1,Q 028F BEA3 02B3 0235 JST TIMER SET THE REAL TIME CLOCK 0290 8009 0009 0236 COPY DEVADD,A RESTORE DEVICE ADDRESS 00000291 0237 IDLE EQU $ 0291 2202 0238 OUT X,2 RESET BBU 0292 030A 0239 XNX A 0293 0600  0240 SST 0 SENSE CONTROLLER 0294 9E81 0296 0241 JMP $+2 STILL BUSY  0295 9F76 028C 0242 JMP *SENSE NOT BUSY 0296 9E7A 0291 0243 JMP IDLE 0244 * 0245 * ROUTINE TO OUTPUT COMMAND BLOCK TO CONTROLLER 0246 * 0247 * COPY OPCODE,Q 0248 * COPY =OPCODE,X 0249 * JST COMMAND 0250 * 0297 0E0D  0251 COMMAND ENT 0298 C480 0000 0252 COPY Q,0(X) SET OPERATION CODE IN COMMAND BLOCK 0299 8009 0009 0253 COPY DEVADD,A RESTORE DEVICE ADDRESS 029A 030A 0254 XNX A 029B 2200 0255 OUT X,0 SEND COMMAD BLOCK TO CONTROLLER 029C 9F7A 0297 0256 JMP *COMMAND RETURN 0257 * 0258 * ROUTINE TO CHECK STATUS FOR END OF OPERATION 0259 * SINCE THE DISK DRIVE MAY NOT BE FORMATTED, THERE MAY BE CASES WHEN 0260 * A READ CAN NOT BE EXECUTED AND THE TEST MUST THEREFORE BE OMITTED. 0261 * 1PAGE 0010 MACRO (F400) SCOUT WINCHESTER DISK INTERFACE ISOLITE TEST 84-93734-10 (A200) 1982/09/09 17:38:27.50 SUBROUTINES 0262 * COPY =ERRCODE,Q 0263 * JST STATUS  0264 * 029D 0E0D 0265 STATUS ENT 029E BE90 02AF 0266 JST PLACE SET ERRLOC 029F C01E 001E 0267 COPY EXSTATUS,Q B.C. IF STATUS IS FOR READ OPERATION 02A0 51C5 02A6 0268 JNE  Q,READSTAT B.C. THEN WE MUST IGNORE CERTAIN BITS 02A1 C2A2 02C4 0269 COPY =:400,Q EXPECTED STATUS 02A2 F817 0017 0270 CSK Q,CONSTAT ACTUAL CHECK 02A3 0000 0271 NOP 02A4 BEB5 02DA 0272  JST ERR ERROR STATUS 02A5 9F77 029D 0273 JMP *STATUS 000002A6 0274 READSTAT EQU  $ B.C. 02A6 8017 0017 0275 COPY CONSTAT,A B.C. STATUS RECEIVED ON READ OPERATION 02A7 941E 001E 0276 AND EXSTATUS,A B.C. ISOLATE PERTINENT BITS 02A8 BA9B 02C4 0277 CSK A,=:400 B.C. WHICH SHOULD THEN RESULT IN :400 02A9 0000 0278 NOP B.C. 02AA BEAF 02DA 0279  JST ERR B.C. 02AB 8017 0017 0280 COPY CONSTAT,A B.C. MUST PASS INFO. TO SKIP VERIFY 02AC 00AD 0281 RBIT 10,A B.C CLEAR FOR SIMPLE CHECK UPON RETURN 02AD 9F6F 029D 0282 JMP *STATUS 02AE BEAB 02DA 0283 JST ERR RUN OUT OF TIME 0284 * 0285 *ROUTINE TO SET ERROR LOCATION 0286 * 0287 * COPY =ERROR CODE,Q 0288 * JST PLACE 0289 * 02AF 0E0D 0290 PLACE ENT 02B0 C40C 000C 0291 COPY Q,ERRLOC SET ERROR CODE 02B1 2202 0292 OUT X,2 RESET BBU 02B2 9F7C 02AF 0293 JMP *PLACE  0294 * 0295 * REAL TIME CLOCK ROUTINE 0296 * 0297 * COPY =NUM BER OF SECONDS,Y 1PAGE 0011 MACRO (F400) SCOUT WINCHESTER DISK INTERFACE ISOLITE TEST 84-93734-10 (A200) 1982/09/09 17:38:29.00 SUBROUTINES 0298 * JST TIMER 0299 * 02B3 0E0D 0300 TIMER ENT 02B4 0202  0301 OUT A,2 RESET BBU 02B5 0900 0302 COPY =0,A 02B6 6700 0303  MUL =120,AY NUMBER OF TICKS 02B7 02C5 02B8 6069 0304 COMP Y 02B9 E78C 02C6 0305 COPY Y,:91 SAVE IT FOR A CLOCK 02BA 6020 0306 COPY X,Y SAVE X REG 02BB 2991 0307 COPY =:91,X 02BC 838A 02C7 0308 COPY JMP,A GET JMP *$+1 02BD 8481 0001 0309 COPY A,1(X) 02BE C482 0002 0310 COPY Q,2(X) 02BF 2060 0311 COPY Y,X RESTORE X REG 02C0 0E85 0312 SBIT 8,S ENABLE CLOCK INTERRUPTS 02C1 0E55 0313 SBIT 5,S 02C2 9F70 02B3 0314 JMP *TIMER 0005 0315 LPOOL 02C3 02DB 02C4 0400 02C5 0078 02C6 0091 02C7 0200 JMP 1PAGE 0012 MACRO (F400) SCOUT WINCHESTER DISK INTERFACE ISOLITE TEST 84-93734-10 (A200) 1982/09/09 17:38:29.75 SUBROUTINES 0318 * ROUTINE TO RESET STATUS WORD 0319 * 02C8 0E0D 0320 RESET  ENT 02C9 0EC5 0321 SBIT 12,S 02CA 0E87 0322 RBIT 8,S 02CB 0E57 0323  RBIT 5,S 02CC 0309 0324 UIS 02CD 9F7A 02C8 0325 JMP *RESET 0326 *  0327 * ROUTINE TO HOLD EXPECTED INTERRUPTS 0328 * 000002CE 0329 GOOD:INT EQU $ 02CE BE80 02CF 0330 JST INT 02CF 0E0D 0331 INT ENT 02D0 0EC5 0332 SBIT 12,S  DISABLE EOB 02D1 0E57 0333 RBIT 5,S DISABLE CLOCK 02D2 C67C 02CF 0334 COPY Q,INT SET RETURN ADDRESS 02D3 9F7B 02CF 0335 JMP *INT RETURN 0336 *  0337 * ROUTINE TO HOLD UNEXPECTED INTERRUPTS 0338 * 02D4 0E0D 0339 BAD:INT ENT 02D5 0EC5  0340 SBIT 12,S DISABLE CONTROLLER INTERRUPTS 02D6 0E57 0341 RBIT 5,S DISABLE CLOCK 02D7 4903 0342 COPY =3,Q ERROR CODE 3 (BAD INTERRUPT) 02D8 BE56 02AF 0343  JST PLACE SET ERRLOC 02D9 BE80 02DA 0344 JST ERR EXIT 0345 *  0346 * ROUTINE TO OUTPUT ERROR CODE TO CDR AND HALT 0347 * 0348 * ASSUMES ERROR CODE IN 'ERRLOC' - SEE SUBROUTINE 'PLACE'. 0349 * 02DA 0E0D 0350 ERR ENT 02DB 0EC5 0351  SBIT 12,S 02DC 0E57 0352 RBIT 5,S 02DD 0309 0353 UIS 1PAGE 0013 MACRO (F400) SCOUT WINCHESTER DISK INTERFACE ISOLITE TEST 84-93734-10 (A200) 1982/09/09 17:38:30.75 SUBROUTINES 02DE E00C 000C 0354  COPY ERRLOC,Y GET ERROR CODE 02DF 4104 0355 IN 4,Q GET CDR 02E0 4E71 035 6 SHIFT Q,LO,8 SET IT INTO POSITION 02E1 4067 0357 OR Y,Q MERGE TWO CODES 02E2 4404 0358 SELP Q,4 SEND IT TO CDR 02E3 0E0D 0359 HLT HALT THE PROCESSOR!!!!!!!!! 02E4 9E7E 02E3 0360 JMP $-1 DO NOT GO ANYWHERE!!!!!!! 1PAGE 0014 MACRO (F400) SCOUT WINCHESTER DISK INTERFACE ISOLITE TEST 84-93734-10 (A200) 1982/09/09 17:38:31.00 ROUTINE TO EXECUTE I/O TEST (READ,SEEKS,READ VERIFY ETC..) 0363 * ROUTINE TO EXECUTE TEST I/O, READ, READ VERIFY 0364 *  AND SEEK OPERATIONS 0365 * 02E5 0E0D 0366 IN:OUT ENT 02E6 49A1 0367 COPY =:A1,Q BASIC FUNCTIONS TEST INDICATOR 02E7 4404 0368 SELP Q,4 SEND IT TO CDR 02E8 290D  0369 COPY =OPCODE,X COMMAND BLOCK ADDRESS 02E9 4900 0370 COPY =0,Q OPERATION TIO 02EA C487 0007 0371 COPY Q,7(X) B.C. CLEAR INTERRUPT ADDRESS IN CIOB 02EB BE2B 0297 0372 JST COMMAND SEND IT TO CONTROLLER 02EC 4901 0373 COPY =1,Q ERROR CODE 1 (DID NOT GO IDLE AFTER TIO) 02ED 6902 0374 COPY =2,Y WAIT 2WO SECONDS FOR IDLE 02EE BE1D 028C 0375 JST  SENSE SENSE CONTROLLER FOR IDLE 02EF BE58 02C8 0376 JST RESET RESET STATUS 02F0 4904  0377 COPY =4,Q ERROR CODE 4 (STATUS BAD AFTER TIO) 02F1 BE2B 029D 0378 JST STATUS  CHECK STATUS WORD 02F2 A2B4 0327 0379 COPY =BAD:INT,X GET ADDR OF UNEXPECTED INTERRUPT 02F3 4902 0380 COPY =2,Q ERROR CODE 2 (NO INTERRUPT AFTER TIO) 02F4 BE3A 02AF 0381 JST PLACE  SET ERRLOC 02F5 C2B2 0328 0382 COPY =RET1,Q GET RETURN ADDRESS 02F6 6901 0383 COPY =1,Y WAIT ONE SECOND FOR INTERRUPT 02F7 0EC7 0384 RBIT 12,S ENABLE CONTROLLER INTERRUPTS 02F8 0309 0385 UIS 02F9 BE39 02B3 0386 JST TIMER WAIT FOR INTERRUPT 02FA 2202 0387 OUT X,2 RESET BBU 02FB 9E7E 02FA 0388 JMP $-1 WAIT INTERRUPT 000002FC 0389 RET1 EQU $ 02FC BE4B 02C8 0390 JST RESET RESET STATUS 02FD 6914 0391  COPY =20,Y SET CLOCK FOR 20 SECONDS 02FE C2AA 0329 0392 COPY =EXIT,Q CHANGE EXIT TO GOOD 02FF BE33 02B3 0393 JST TIMER 00000300 0394 TIO EQU $ 0300 2202 0395 OUT  X,2 RESET BBU 0301 290D 0396 COPY =OPCODE,X COMMAND BLOCK ADDRESS 0302 4900 0397  COPY =0,Q TIO OPERATION 0303 BE13 0297 0398 JST COMMAND SEND CONTROL BLOCK TO CONTROLLER 1PAGE 0015 MACRO (F400) SCOUT WINCHESTER DISK INTERFACE ISOLITE TEST 84-93734-10 (A200) 1982/09/09 17:38:32.50 ROUTINE TO EXECUTE I/O TEST (READ,SEEKS,READ VERIFY ETC..) 0304 2202 0399 OUT X,2 RESET BBU 0305 030A   0400 XNX A 0306 0600 0401 SST 0 CHECK FOR IDLE 0307 9E7C 0304 0402  JMP $-3 NOT YET 0308 8018 0018 0403 COPY DRSTAT,A GET DRIVE STATUS 0309 00FF 0404 TBIT 15,A TEST FOR DRIVE A 030A 36C3 030E 0405 JF OV,READY:A DRIVE A IS READY 030B 00EF 0406 TBIT 14,A TEST FOR DRIVE B 030C 36C4 0311 0407 JF OV,READY:B DRIVE B IS READY 030D 9E72 0300 0408 JMP TIO DO IT AGEIN 0000030E 0409 READY:A EQU $ 030E BE39 02C8 0410 JST RESET RESET STATUS 030F 4900 0411 COPY =0,Q SET DATA FOR COMMAND BLOCK 0310 9E82 0313 0412 JMP SET:UNIT GO SET CONTROL BLOK FOR SEEK OPERATION 00000311 0413 READY:B EQU $ 0311 BE36 02C8 0414 JST RESET RESET STATUS 0312 4901 0415 COPY =1,Q SET UNIT FOR COMMAND BLOCK 00000313 0416 SET:UNIT EQU $ 0313 C40E 000E 0417 COPY  Q,UNIT SET READY UNIT 0314 4904 0418 COPY =4,Q ERROR CODE 4 (STATUS IS BAD AFTER TIO) 0315 BE07 029D 0419 JST STATUS CHECK THE STATUS WORD 0316 A290 0327 0420 COPY =BAD:INT,X  GET JMP TO EXPECTED INT. ROUTINE 0317 4902 0421 COPY =2,Q ERROR CODE 2 (NO INTERRUPT AFTER TIO) 0318 BE16 02AF 0422 JST PLACE SET ERRLOC 0319 C290 032A 0423 COPY =RET2,Q GET RETURN ADDRESS 031A 6901 0424 COPY =1,Y WAIT TWO SECONDS 031B 0EC7 0425 RBIT 12,S 031C 0309 0426 UIS 031D BE15 02B3 0427 JST TIMER SET REAL TIME CLOCK 031E 2202  0428 OUT X,2 RESET BBU 031F 9E7E 031E 0429 JMP $-1 WAIT FOR I 00000320 0430 RET2 EQU $ 0320 BE27 02C8 0431 JST RESET RESET STATUS 0321 4900 0432  COPY =0,Q 0322 C40F 000F 0433 COPY Q,CYL SET CYL. =0 0323 C410 0010 0434 COPY Q,HEAD SET HEAD =0 1PAGE 0016 MACRO (F400) SCOUT WINCHESTER DISK INTERFACE ISOLITE TEST 84-93734-10 (A200) 1982/09/09 17:38:33.75 ROUTINE TO EXECUTE I/O TEST (READ,SEEKS,READ VERIFY ETC..) 0324 C411 0011 0435 COPY Q,SECTOR SET SECTOR =0 0325 C415 0015 0436 COPY Q,DCIOB CHAIN ADDRESS = 0 0326 9E85 032C 0437 JMP SEEK 0005 0438 LPOOL 0327 02D4 BAD:INT 0328 02FC RET1 0329 0262 EXIT 032A 0320 RET2 032B 1PAGE 0017  MACRO (F400) SCOUT WINCHESTER DISK INTERFACE ISOLITE TEST 84-93734-10 (A200) 1982/09/09 17:38:34.00 SEEK TEST (I/O TEST - RUN CODE A1 0441 * 0442 * SEEK TEST 0443 * 0000032C 0444 SEEK  EQU $ 032C 4980 0445 COPY =:80,Q B.C. SEEK CYLINDER 128 (DEC) 0000032D 0446 SEEKNEXT EQU $ B.C. 032D 290D 0447 COPY =OPCODE,X GET CIOB ADDRESS 032E C482 0002 0448   COPY Q,2(X) B.C. MOVE CYL. TO CIOB 032F 4909 0449 COPY =9,Q GET SEEK OPCODE 0330 BFC5 0376 0450 JST COMMAND SEND CIOB TO CONTROLLER 0331 4905 0451 COPY =5,Q ERROR CODE 5 (DID NOT GO IDLE AFTER SEEK) 0332 6902 0452 COPY =2,Y SET TIME FOR TWO SECONDS 0333 BFC3 0377 0453 JST SENSE SENSE CONTROLLER FOR IDLE 0334 BE13 02C8 0454 JST RESET  RESET STATUS 0335 4906 0455 COPY =6,Q ERROR CODE 6 (BAD STATUS AFTER SEEK) 0336 BFC1 0378 0456  JST STATUS CHECK STATUS 0337 4907 0457 COPY =7,Q ERROR CODE 7 (NO INT AFTER SEEK) 0338 BFC0 0379 0458 JST PLACE SET ERRLOC 0339 A26D 0327 0459 COPY =BAD:INT,X GET BAD INTERRUPT ADDRESS 033A 6901 0460 COPY =1,Y WAIT ONE SECOND FOR INTERRUPT 033B C2C2 037E 0461 COPY =RET3,Q GET RETURN ADDRESS 033C 0EC7 0462 RBIT 12,S ENABLE INTERRUPTS 033D 0309 0463 UIS 033E BFBB 037A 0464 JST TIMER WAIT FOR INTERRUPT 033F 2202 0465 OUT X,2 RESET BBU 0340 9E7E 033F 0466 JMP $-1 WAIT FOR INTERRUPT 00000341 0467 RET3 EQU $ 0341 BE06 02C8 0468 JST RESET RESET STATUS 0342 C00F 000F 0469  COPY CYL,Q B.C. GET LAST CYLINDER SEEK 0343 5142 0346 0470 JEQ Q,VERIFY B.C. THROUGH; GO TO NEXT TEST 0344 4AF0 0471 SUB =:10,Q B.C. ADJUST FOR NEXT SEEK 0345 9E67 032D 0472  JMP SEEKNEXT B.C. GO BACK & CONTINUE SEEKING 1PAGE 0018 MACRO (F400) SCOUT WINCHESTER DISK INTERFACE ISOLITE TEST 84-93734-10 (A200) 1982/09/09 17:38:35.50 READ VERIFY (I/O TEST - RUN CODE A1) 0475 * 0476 * READ VERIFY TEST 0477 * 00000346 0478 VERIFY EQU $ B.C. 0346 C2B8 037F 0479 COPY =:7F8F,Q B.C. MASK TO ISOLATE BITS 0347 C41E 001E 0480 COPY Q,EXSTATUS B.C. MOVE IT TO FLAG 0348 E2B7 0380 0481 COPY =ENDISO+3,Y B.C. SET-UP BUFFER FOR POSIBLE FAILURE 0349 E413 0013 0482  COPY Y,MEMADDR B.C. USE SAME BUFFER AS FOR READ TEST 034A C2F7 03C2 0483 COPY AAAA,Q B.C. PATTERN TO REMAIN INTACT IN MEMORY 034B 2920 0484 COPY =:20,X B.C. SIZE OF MEMORY BUFFER FOR TEST  0000034C 0485 FILLING1 EQU $ B.C. 034C C4C0 0000 0486 COPY Q,0(X,Y) B.C. FILL MEMORY WITH PATTERN :AAAA 034D 35BE 034C 0487 JNED X,FILLING1 B.C. 034E 290D 0488 COPY =OPCODE,X GET CIOB ADDRESS 034F 4920 0489 COPY =:20,Q NUMBER OF WORDS TO BE PROCESSED 0350 C485 0005  0490 COPY Q,5(X) SET WORD COUNT IN CIOB 0351 4908 0491 COPY =8,Q OPERATION CODE READ VERIFY 0352 BFA3 0376 0492 JST COMMAND SEND CIOB TO CONTROLLER 0353 4908 0493 C OPY =8,Q ERROR CODE 8 (DID NOT IDLE AFTER READ VERIFY) 0354 6904 0494 COPY =4,Y SET TIMER FOR 4 SECONDS 0355 BFA1 0377 0495 JST SENSE SENSE CONTROLLER FOR IDLE 0356 BFA5 037C 0496  JST RESET RESET STATUS 0357 4909 0497 COPY =:9,Q ERROR CODE 9 (STATUS BAD AFTER READ VERIFY) 0358 BF9F 0378 0498 JST STATUS CHECK STATUS WORD 0359 1141 035B 0499 JEQ A,$+2 CONTINUE TESTING IF ALL'S FINE 035A 9EA8 0383 0500 JMP READTEST MAYBE TRY NEXT READ TEST 035B 490A 0501 COPY =:A,Q ERROR CODE A (NO INTERRUPT AFTER READ VERIFY) 035C BF9C 0379 0502 JST PLACE SET ERRLOC 035D A249 0327 0503 COPY =BAD:INT,X ADDRESS OF BAD INTERRUPT ROUTINE 035E 6901 0504 COPY =1,Y SET TIME FOR ONE SECONDS 035F C2A1 0381 0505 COPY =RET4,Q GET RETURN ADDRESS 0360 0EC7 0506 RBIT 12,S ENABLE INTERRUPTS 0361 0309 0507 UIS  0362 BF97 037A 0508 JST TIMER WAIT FOR INTERRUPT 0363 2202 0509 OUT X,2  RESET BBU 0364 9E7E 0363 0510 JMP $-1 WAIT FOR INTERRUPT 1PAGE 0019 MACRO (F400) SCOUT WINCHESTER DISK INTERFACE ISOLITE TEST 84-93734-10 (A200) 1982/09/09 17:38:37.25 READ VERIFY (I/O TEST - RUN CODE A1) 00000365  0511 RET4 EQU $ 0365 BF96 037C 0512 JST RESET RESET STATUS WORD 0366 490B 0513  COPY =:B,Q ERROR CODE B (WORD COUNT IS BAD AFTER READ VERIFY) 0367 BF91 0379 0514 JST PLACE  SET ERRLOC 0368 4920 0515 COPY =:20,Q GET EXPECTED NUMBER 0369 F816 0016 0516 CSK  Q,WPROC CHECK THE NUMBER 036A 0000 0517 NOP 036B BF91 037D 0518 JST ERR BAD NEWS, ERROR EXIT 0519 * 0520 * CHANGES BELOW BY B.C. 2 JULY '82 0521 * 036C 4914 0522 COPY =:14,Q ERR CODE (READ VERIFY ACTUALLY READ-SHOULD 036D BF8B 0379 0523  JST PLACE 036E E013 0013 0524 COPY MEMADDR,Y GET BUFFER ADDR. 036F C2D2 03C2 0525 COPY AAAA,Q 0370 2919 0526 COPY =:19,X BUFFER SI 00000371 0527 CHKING1 EQU $ 0371 F8C0 0000 0528 CSK Q,0(X,Y) COMPARE;MUST HAVE REMAINED INTACT 0372 0000 0529 NOP 0373 BF89 037D 0530 JST ERR 0374 35BC 0371 0531 JNED X,CHKING1 B.C. DECREMENT & GO BACK IF NOT THROUGH 0375 9E8D 0383 0532 JMP READTEST B.C. GO TO THE NEXT TEST 000D 0533 LPOOL  B.C 0376 0297 COMMAND 0377 028C SENSE 0378 029D STATUS 0379 02AF PLACE 037A 02B3 TIMER 037B 03C2 AAAA 037C 02C8 RESET 037D 02DA ERR 037E 0341 RET3 037F 7F8F 0380 0480 0381 0365 RET4 0382 1PAGE 0020 MACRO (F400) SCOUT WINCHESTER DISK INTERFACE ISOLITE TEST 84-93734-10 (A200) 1982/09/09 17:38:38.25 READ TEST (I/O TEST - RUN CODE A1) 0536   ************************************************************************** 0537 * 0538 * READ TEST 0539 * 00000383 0540 READTEST EQU $ B.C. 0383 48FF 0541 COPY =-1,Q B.C. 0384 C6C1 03C6 0542 COPY Q,FLAG B.C. 1ST/2ND BUFFER FILLING INDICATOR 0385 2900 0543 COPY =0,X END OF CHAIN 0386 A41C 001C 0544 COPY X,CDCIOB SET IT IN CHAIN BLOCK 0387 E2BD 03C5 0545 COPY LOWBUF,Y B.C. LOW BUFFER FIRST 0388 C2B9 03C2 0546 COPY AAAA,Q B.C. IN THIS CASE IT MUST DESTROY PATTERN 00000389 0547 READT EQU $ 0389 E413 0013 0548 COPY Y,MEMADDR FILL COMMAND BLOCK 038A 2919 0549 COPY =:19,X 0000038B 0550 FILLING2 EQU  $ 038B C4C0 0000 0551 COPY Q,0(X,Y) B.C. FILL IN WITH PATTERN :AAAA 038C 35BE 038B 0552 JNED X,FILLING2 B.C. CONTINUE UNTIL THROUGH 038D 4910 0553 COPY =:10,Q GET LENGTH OF BUFFER 038E C412 0012 0554 COPY Q,WCOUNT SET WORD COUNT IN COMMAND BLOCK 038F C419 0019 0555 COPY Q,CWCOUNT SET WORD COUNT IN CHAIN COMMAND BLOCK 0390 0919 0556 COPY =CWCOUNT,A GET CHAIN BLOCK ADDRESS 0391 8415 0015 0557 COPY A,DCIOB SET IT IN COMMAND BLOCK 0392 4062 0558 ADD Y,Q  GET CHAIN BUFFER ADDRESS 0393 C41A 001A 0559 COPY Q,CMEMADDR SET IT IN CHAIN BLOCK 0394 290D 0560  COPY =OPCODE,X GET COMMAND BLOCK ADDRESS 0395 4904 0561 COPY =4,Q READ OPERATION 0396 BF5F 0376 0562 JST COMMAND OUTPUT COMMAND BLOCK TO CONTROLLER 0397 490C 0563 COPY  =:C,Q ERROR CODE C (DID NOT GO IDLE AFTER READ) 0398 6906 0564 COPY =6,Y WAIT 6 SECONDS 0399 BF5D 0377 0565 JST SENSE SENSE IDLE 039A BF61 037C 0566 JST RESET RESET STATUS 039B 490D 0567 COPY =:D,Q ERROR CODE D (STATUS IS BAD AFTER READ) 039C BF5B 0378 0568  JST STATUS CHECK STATUS WORD 039D 1141 039F 0569 JEQ A,$+2 IF R.A=0,CONTINE WITH TEST 039E 9EAB 03CA 0570 JMP DMATEST OTHERWISE MAYBE TRY DMATEST 039F 490E 0571 COPY =:E,Q ERROR CODE E (WORD COUNT IS BAD AFTER READ) 1PAGE 0021 MACRO (F400) SCOUT WINCHESTER DISK INTERFACE ISOLITE TEST 84-93734-10 (A200) 1982/09/09 17:38:40.00 READ TEST (I/O TEST - RUN CODE A1) 03A0 BF58 0379 0572 JST PLACE  SET ERRLOC 03A1 4920 0573 COPY =:20,Q EXPECTED WORD COUNT 03A2 F816 0016 0574 CSK Q,WPROC CHECK THE NUMBER OF WORDS PROCESSED 03A3 0000 0575 NOP 03A4 BF58 037D 0576 JST ERR ERROR EXIT 03A5 490F 0577 COPY =:F,Q ERROR CODE F (NO INTERRUPT AFTER READ) 03A6 BF52 0379 0578 JST PLACE SET ERRLOC 03A7 A29F 03C7 0579 COPY =BAD:INT,X BAD INTERR UPT ROUTINE ADDRESS 03A8 6901 0580 COPY =1,Y WAIT ONE SECONDS 03A9 C29E 03C8 0581 COPY =RET5,Q GET RETUN ADDRESS 03AA 0EC7 0582 RBIT 12,S ENABLE INTERRUPTS 03AB 0309 0583 UIS 03AC BF4D 037A 0584 JST TIMER WAIT FOR INTERRUPT 03AD 2202 0585 OUT  X,2 RESET BBU 03AE 9E7E 03AD 0586 JMP $-1 WAIT FOR INTERRUPT 000003AF 0587 RET5 EQU $ 03AF BF4C 037C 0588 JST RESET RESET STATUS 03B0 4915 0589 COPY =:15,Q B.C. ERR CODE (READ DID NOT REALLY READ) 03B1 BF47 0379 0590 JST PLACE B.C. 03B2 DE93 03C6 0591 IMS FLAG B.C. INDICATES IF 2ND BUFFER TO BE DONE 03B3 9E83 03B7 0592 JMP NEXT1  B.C. 2ND BUFFER READ ALREADY 03B4 E28F 03C4 0593 COPY HIGHBUF,Y B.C. HIGHER BUFFER TO BE FILLED W/PATTERN 03B5 C28D 03C3 0594 COPY ALL5S,Q B.C. PATTERN 03B6 9E52 0389 0595 JMP READT  B.C. GO BACK & FILL 2ND BUFFER 000003B7 0596 NEXT1 EQU $ 03B7 A28C 03C4 0597 COPY HIGHBUF,X  B.C. MUST VERIFY THAT BOTH MATCH 03B8 E28C 03C5 0598 COPY LOWBUF,Y B.C. IF READ WORKS AS IT SHOULD 03B9 4919 0599 COPY =:19,Q B.C. 000003BA 0600 VERFY1 EQU $ 03BA 8080 0000 0601  COPY 0(X),A B.C. GET FROM ONE BUFFER 03BB 9840 0000 0602 XOR 0(Y),A B.C. RESULT SHOULD BE ZERO (0) 03BC 11C4 03C1 0603 JNE A,NOMATCH B.C. ERROR IF NO MATCH 03BD 2B01 0604 ADD =1,X B.C. 03BE 6B01 0605 ADD =1,Y B.C 03BF 55BA 03BA 0606 JNED Q,VERFY1  B.C. 03C0 9E89 03CA 0607 JMP DMATEST B.C. 1PAGE 0022 MACRO (F400) SCOUT WINCHESTER DISK INTERFACE ISOLITE TEST 84-93734-10 (A200) 1982/09/09 17:38:41.25 READ TEST (I/O TEST - RUN CODE A1) 000003C1 0608 NOMATCH EQU $ 03C1 BF3B 037D 0609 JST ERR B.C. HALT WITH ERROR CODE :15 03C2 AAAA 0610 AAAA WORD :AAAA B.C. PATTERN FOR READ TEST 03C3 5555 0611 ALL5S WORD :5555 B.C. PATTERN FOR READ TEST 03C4 0000 0612 HIGHBUF WORD 0 03C5 0000 0613 LOWBUF WORD 0 03C6 0000 0614 FLAG WORD 0 -1 = 1ST BUFF. 0 = 2ND BUFF. 0003 0615 LPOOL 03C7 02D4 BAD:INT 03C8 03AF RET5 03C9 1PAGE 0023 MACRO (F400) SCOUT WINCHESTER DISK INTERFACE ISOLITE TEST 84-93734-10 (A200) 1982/09/09 17:38:41.75 DMA TEST (I/O  0618 * 0619 * DMA TEST 0620 * 000003CA 0621 DMATEST EQU $  B.C. 03CA 48FF 0622 COPY =-1,Q B.C. 03CB C67A 03C6 0623 COPY Q,FLAG  B.C. 1ST/2ND BUFFER FILLING INDICATOR 03CC E278 03C5 0624 COPY LOWBUF,Y B.C. GET ADDRESS OF 1ST BUFFER 03CD 8274 03C2 0625 COPY AAAA,A B.C. AND PATTERN TO MOVE INTO IT 000003CE 0626 READMA EQU  $ B.C. 03CE E413 0013 0627 COPY Y,MEMADDR B.C. MOVE IT CIOB 03CF A002 0002 0628 COPY DMACOUNT,X B.C. NO. WORDS TO TRANSFER 03D0 4020 0629 COPY X,Q 03D1 2AFF 0630 SUB  =1,X B.C. ADJUST FOR 'JNED' INSTRUCTION 000003D2 0631 LOOP2 EQU $ 03D2 84C0 0000 0632 COPY A,0(X,Y) B.C. MOVE PATTERN TO MEMORY 03D3 35BE 03D2 0633 JNED X,LOOP2 B.C. DECREMENT UNTIL THROUGH 03D4 C41D 001D 0634 COPY Q,EXWORDS SAVE EXPECTED WORD COUNT 03D5 4E09 0635 SHIFT Q,RO,1 GET A HALF 03D6 C412 0012 0636 COPY Q,WCOUNT SET WORD COUNT IN COMMAND BLOCK 03D7 C419 0019  0637 COPY Q,CWCOUNT SET WORD COUNT IN CHAIN BLOCK 03D8 4062 0638 ADD Y,Q GET CHAIN BUFFER ADDRESS 03D9 C41A 001A 0639 COPY Q,CMEMADDR SET IT IN CHAIN BLOCK 03DA 290D 0640  COPY =OPCODE,X GET COMMAND BLOCK ADDRESS 03DB 4904 0641 COPY =4,Q READ OPERATION 03DC BF19 0376 0642 JST COMMAND OUTPUT COMMAND BLOCK TO CONTROLLER 03DD 4910 0643 COPY =:10,Q ERROR CODE 10 (DID NOT GO IDLE AFTER READ) 03DE 6924 0644 COPY =36,Y WAIT 36 SECONDS 03DF BF17 0377 0645 JST SENSE SENSE IDLE 03E0 BF1B 037C 0646 JST RESET RESET STATUS 03E1 4911 0647 COPY =:11,Q ERROR CODE 11 (STATUS IS BAD AFTER READ) 03E2 BF15 0378 0648  JST STATUS CHECK STATUS WORD 03E3 1141 03E5 0649 JEQ A,$+2 B.C. IF NOT ZERO,SKIP READ TEST 03E4 9EA3 0408 0650 JMP IOEXIT B.C. 03E5 4912 0651 COPY =:12,Q ERROR CODE 12 (WORD COUNT IS BAD AFTER READ) 03E6 BF12 0379 0652 JST PLACE SET ERRLOC 03E7 C01D 001D 0653  COPY EXWORDS,Q EXPECTED WORD COUNT 1PAGE 0024 MACRO (F400) SCOUT WINCHESTER DISK INTERFACE ISOLITE TEST 84-93734-10 (A200) 1982/09/09 17:38:43.25 DMA TEST (I/O 03E8 F816 0016 0654 CSK Q,WPROC CHECK THE NUMBER OF WORDS PROCESSED 03E9 0000 0655 NOP 03EA BF12 037D 0656 JST ERR ERROR EXIT 03EB 4913  0657 COPY =:13,Q ERROR CODE 13 (NO INTERRUPT AFTER READ) 03EC BF0C 0379 0658 JST PLACE SET ERRLOC 03ED A259 03C7 0659 COPY =BAD:INT,X BAD INTERRUPT ROUTINE ADDRESS 03EE 6901 0660  COPY =1,Y WAIT ONE SECONDS 03EF C29D 040D 0661 COPY =RET6,Q GET RETURN ADDRESS 03F0 0EC7 0662 RBIT 12,S ENABLE INTERRUPTS 03F1 0309 0663 UIS 03F2 BF07 037A 0664  JST TIMER WAIT FOR INTERRUPT 03F3 2202 0665 OUT X,2 RESET BBU 03F4 9E7E 03F3 0666 JMP $-1 WAIT FOR INTERRUPT 000003F5 0667 RET6 EQU $ 03F5 BF06 037C 0668  JST RESET RESET STATUS 03F6 4916 0669 COPY =:16,Q B.C. DID NOT READ IN DMA OPE RATION 03F7 BF93 040B 0670 JST PLACE B.C. STORE ERROR CODE 03F8 DE4D 03C6 0671 IMS FLAG B.C. 2ND BUFFER TO FILL ? 03F9 9E83 03FD 0672 JMP NEXT2 B.C. NO, THROUGH WITH READ,NOW VERIFY 03FA E249 03C4 0673 COPY HIGHBUF,Y B.C. GET 2ND BUFFER ADDRESS 03FB 8247 03C3 0674 COPY ALL5S,A B.C. GET DIFFERENT PATTERN 03FC 9E51 03CE 0675 JMP READMA B.C. AND GO BACK FOR 2ND ROUND  000003FD 0676 NEXT2 EQU $ 03FD A246 03C4 0677 COPY HIGHBUF,X B.C. GET BOTH BUFFER ADDRESSES 03FE E246 03C5 0678 COPY LOWBUF,Y 03FF C002 0002 0679 COPY DMACOUNT,Q B.C. AND NO.OF WORDS TRANSFERED FOR EACH 0400 4AFF 0680 SUB =1,Q B.C. ADJUST FOR 'JNED' INSTRUCTION 00000401 0681  VERIFY2 EQU $ 0401 8080 0000 0682 COPY 0(X),A B.C. WORD READ FROM DISK INTO UPPER BUF 0402 9840 0000 0683 XOR 0(Y),A B.C. WORD READ FROM DISK INTO LOWER BUF 0403 11C6 040A 0684 JNE A,NOMATCH2 B.C. BAD READ 0404 2B01 0685 ADD =1,X B.C. POINT TO NEXT BUFFER LOCATION 0405 6B01  0686 ADD =1,Y B.C. 0406 55BA 0401 0687 JNED Q,VERIFY2 B.C. THROUGH WHEN IT IS = ZERO 0407 C41E 001E 0688 COPY Q,EXSTATUS B.C. CLEAR EXPECTED STATUS 00000408 0689 IOEXIT EQU $ 1PAGE 0025 MACRO (F400) SCOUT WINCHESTER DISK INTERFACE ISOLITE TEST 84-93734-10 (A200) 1982/09/09 17:38:45.00 DMA TEST (I/O 0408 E285 040E 0690 COPY =IN:OUT,Y GET RETURN ADDRESS 0409 9D40 0000 0691 JMP *0(Y)  0000040A 0692 NOMATCH2 EQU $ 040A BF81 040C 0693 JST ERR B.C. HALT WITH ERROR CODE :16  0004 0694 LPOOL 040B 02AF PLACE 040C 02DA ERR 040D 03F5 RET6 040E 02E5 IN:OUT 1PAGE 0026 MACRO (F400) SCOUT WINCHESTER DISK INTERFACE ISOLITE TEST 84-93734-10 (A200) 1982/09/09 17:38:45.25 STATUS CHECK ROUTINE (STATUS TEST - RUN CODE A2) 040F 0E0D 0697 STAT ENT 0410 49A2 0698 COPY =:A2,Q TEST IDENTIFICATION 0411 4404 0699 SELP Q,4 SEND IT TO CDR 0412 4900 0700 COPY =0,Q 0413 C414 0014  0701 COPY Q,INTADDR DISABLE INTERRUPTS ON THE CONTROLLER 0414 C415 0015 0702 COPY Q,DCIOB  SET COMMAND BLOCK 0415 C3D6 046C 0703 COPY JST:INT,Q GET JST 0(X) 0416 C7D6 046D 0704 COPY  Q,GOOD:INT DO NOT EXPECT INT 0705 * 0706 * RATE ERROR TEST 0707 * 0417 C3D6 046E 0708 COPY TRAPLOC,Q UIM TRAP LOCATION 0418 514E 0427 0709 JEQ Q,ID:TEST RATE ERROR TEST IMPOSSIBLE TO EXECUTE 0419 C413 0013 0710 COPY Q,MEMADDR BUFFER ADDRESS 041A 4904 0711  COPY =4,Q READ OPERATION 041B 290D 0712 COPY =OPCODE,X COMMAND BLOCK ADDRESS 041C BFD2 046F 0713 JST COMMAND SEND COMMAND BLOCK 041D 4901 0714 COPY =1,Q ERR OR CODE 1 (DID NOT GO IDLE, RATE ERROR TEST) 041E 6901 0715 COPY =1,Y WAT A SECOND 041F BFD0 0470 0716 JST SENSE SENSE IDLE 0420 BFD0 0471 0717 JST RESET RESET STATUS 0421 4902 0718 COPY =2,Q ERROR CODE 2 (STATUS BAD, RATE ERROR EXPECTED) 0422 BF68 040B 0719 JST PLACE SET ERRLOC 0423 C2CE 0472 0720 COPY =:8402,Q EXPECTED STATUS 0424 F817 0017 0721  CSK Q,CONSTAT CHECK THE STATUS 0425 0000 0722 NOP 0426 BF65 040C 0723 JST ERR  ERROR EXIT 0724 * 0725 * ID TEST 0726 * 00000427 0727 ID:TEST EQU $ 0427 49FF 0728 COPY =:FF,Q INVALID SECTOR ID 0428 C411 0011 0729 COPY  Q,SECTOR SET IT IN COMMAND BLOCK 0429 4904 0730 COPY =4,Q OPERATION READ 042A 290D  0731 COPY =OPCODE,X COMMAND BLOCK ADDRESS 042B BFC3 046F 0732 JST COMMAND SEND COMMAND BLOCK 1PAGE 0027 MACRO (F400) SCOUT WINCHESTER DISK INTERFACE ISOLITE TEST 84-93734-10 (A200) 1982/09/09 17:38:46.50 STATUS CHECK ROUTINE (STATUS TEST - RUN CODE A2) 042C 490B 0733 COPY =:B,Q ERROR CODE :B (DID NOT GO IDLE, ID TEST) 042D 6901 0734 COPY =1,Y WAIT A SECOND 042E BFC1 0470 0735 JST SENSE SENSE IDLE 042F BFC1 0471 0736 JST RESET RESET STATUS 0430 4904 0737 COPY  =4,Q ERROR CODE 4 (STATUS BAD, ID ERROR EXPECTED) 0431 BF59 040B 0738 JST PLACE SET ERRLOC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII  IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII! IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+e820709110932820709110932820909174518e@820709110932820709110932820909174516" e820709110932820709110932830408103328e820709110932820709110932820709110932820709110932820709110932820709110932e81aC8209091734577582090917350500830420163156er8207071732362583042015383700830420154026e2 P8207091323340082070913233600830420153628 e7# 8207071722370083042015362975830420153857 e58304201540345083042015405150830420154111RN e8304201539052583042015391925830420154115RN e 8304201541027583042015412325830420154143  eidv ݞ8209091738170082090917385025830420163329er8207071722385083042015363025830420154205e18304201539487583042015400250830420154122RN$ e<8207091400462582070914004750830420153650e>@8207071732137583042015365100830420153940e18301141639442583011416395900830408112138e?8207071732155083042015365125830420154210eV8201141610447582011416104900830408104618eM8304081046142583040810461850830420154151e B% _8301140308275083011403084450830114032408& ' ( ) * + p?. SWI:ISOLITEASMSWI:ISOLITEOBJSWI:BOOT ASM SWI:BOOT OBJ SWI:ISOLITEBIN SWI:BOOT BIN SWI:ISOLITEROM SWI:ISOLITELSTSWI:BOOT LSTSWI:ISO:ID BINSWI:ISO:ID ASMSWI:ISO:ID OBJSWI:ISO:ID BINSWI:ISO:ID LSTSWI:ISOBOOTBAKSWI:ISOBOOTJCLSWI:ISOLITEASM, 1PAGE 0001 MACRO (F200) SCOUT WINCHESTER DISK INTERFACE AUTOLOAD PROGRAM 84-93734-11 (A000 1983/04/20 15:36:21.50 GENERAL DESCRIPTION SI = DF01.SWI:BOOT.ASM SO = DF01.SWI:BOOT.OBJ LO = DF01.SWI:BOOT.LST 0004 * THE PROGRAM WILL CHECK IF THE DISK FROM WHICH TO AUTOLOAD 0005 * CONTAINS A STANDARD OS4 BOOT, IN WHICH CASE IT WILL PROCEED TO 0006 * MODIFY THE DEFAULT DEVICE ADDRESS TO A VALID ONE AS RETURNED IN 0007 * REG.A (LOWER HALF) THROUGH THE 'SAL' INSTRUCTION. 0008 * 0009 * THE ASSUMED DEFAULT ADDRESS IS THAT OF THE HIGH CAPACITY DISK DRIVE 0010 * :A8, THIS WAY THE LABEL UTILITY MAY USE THE BOOT FOR SUCH A DEVICE  0011 * AS IS (WITH NO CHANGES AT ALL) WHEN LABELING A SCOUT WINCHESTER DISK. 0012 *  0013 * 0014 * THIS PROGRAM WAS CODED BY M.SIMS 1982. 0015 * RELEASED BY B.CANCIO - JULY 1982 0016 * 0017 * 00000200 0018 BUFLEN EQU :200 BOOT IS 512 WORDS LONG 0000000E 0019 DAOFS EQU :0E ADDRESS OF DEVICE ADDR WITHIN BOOT RECORD 000000A8 0020 DADFLT EQU :A8 DEFAULT DEVICE ADDRESS 1PAGE 0002 MACRO (F200) SCOUT WINCHESTER DISK INTERFACE AUTOLOAD PROGRAM 84-93734-11 (A000 1983/04/20 15:36:22.50 MAIN PROGRAM 0023 *** 0024 * 0025 * THIS IS THE DISK CONTROLLER CIOB TO READ TRACK 0 SECTOR 0 HEAD 0 0026 * INTO MEMORY AT ADDRESS 0  0027 * 0028 *** 0000 0004 0029 OPCODE WORD :4 READ OPCODE 0001 0000  0030 UNIT WORD 0 0002 0000 0031 CYL WORD 0 0003 0000 0032 HEAD WORD 0 0004 0000 0033 SECTOR WORD 0 0005 0200 0034 WCOUNT WORD BUFLEN LENGTH OF DATA TO READ 0006 0000 0035 BUFFER WORD 0 0007 0000 0036 INTER WORD 0 0008 0000 0037 DCIOB WORD 0 0009 0000  0038 XFERLEN WORD 0 WORDS READ 000A 0000 0039 CST WORD 0 CONTROLLER STATUS WORD  000B 0000 0040 DST WORD 0 DEVICE STATUS 0041 * 000C 0000 0042 EXFLAG WORD 0 EXECUTION TEST FLAG 000D 6610 0043 SAL10 SAL 1,0 AUTOLOAD LOOP SAL  0044 * 0000000E 0045 BOOTSWI EQU $ ENTRY POINT FOR THE SAL INSTRUCTION 000E A27E 000D 0046  COPY SAL10,X 000F A6B6 0046 0047 COPY X,NXT:BT+1 STUFF LOOP AROUND WORD 0010 C67C 000D 0048  COPY Q,SAL10 SAVE THE Q REG 0011 1648 001A 0049 JT SS,NORMAL IF SENSE IS ON, DO NORMAL BOOT 0012 2104 0050 IN 4,X 0013 A678 000C 0051 COPY X,EXFLAG SAVE FOR EXECUTE TEST 0014 200D 0052 RBIT 0,X 0015 2AFC 0053 SUB =4,X IF OFF AND CDR=4 OR 5, FORCE RETRY HERE 0016 31E8 003F 0054 JNE X,GO:OUT ELSE, GO TRY NEXT BOOT 0017 A2AD 0045 0055 COPY NX- T:BT,X 0018 2AFF 0056 SUB =1,X MODIFY SAL CHAIN INSTRUCTION 0019 A6AB 0045 0057 COPY  X,NXT:BT BOOT MYSELF IF I FAIL!! 0058 *** 0059 * 0060 * READ THE SECTOR AND GO TO IT 0061 * 0062 *** 001A 18F8 0063 NORMAL AND =:F8,A  REMOVE GARBAGE FROM DEVICE ADDRESS 001B 4000 0064 COPY A,Q IN CASE OF ERROR 001C 030A 0065 XNX A TEST FOR CONTROLLER PRESENT 1PAGE 0003 MACRO (F200) SCOUT WINCHESTER DISK INTERFACE AUTOLOAD PROGRAM 84-93734-11 (A000 1983/04/20 15:36:24.25 MAIN PROGRAM 001D 0604 0066 SST 4 001E 9E8F 002E  0067 JMP ERROR WE HAVE A BOOT, BUT NO CONTROLLER!!! 0068 * 001F 030A 0069  XNX A 0020 2404 0070 SELP X,4 RESET THE CONTROLLER 0021 030A 0071 BUSY XNX  A WAIT FOR NOT BUSY 0022 0600 0072 SST 0 0023 9E7D 0021 0073 JMP BUSY  0074 * 0024 A29D 0042 0075 COPY =OPCODE,X GET ADDRESS OF IOB 0025 030A 0076  XNX A 0026 2200 0077 OUT X,0 CRANK UP THE READ 0078 * 0027 030A 0079 WAIT XNX A WAIT FOR COMPLETE 0028 0600 0080 SST 0 0029 9E7D 0027 0081  JMP WAIT 0082 * 002A C25F 000A 0083 COPY CST,Q TEST STATUS 002B 5345 0031 0084 JGE Q,GO:BOOT IF GOOD NEWS 002C 400F 0085 TBIT 0,Q TEST DISK READY ERROR 002D 3650 003E 0086 JT OV,NOTRDY 0087 * 002E 4404 0088 ERROR SELP Q,4 SEND ERROR CODE TO CDR 002F 0E0D 0089 HLT AND DIE 0030 9E69 001A 0090 JMP NORMAL TRY AGAIN IF HE RESTARTS 0091 * 00000031 0092 GO:BOOT EQU $ 0031 4202 0093  OUT Q,2 TURN OFF AUTOLOAD LITE AND RESET THE BBU 0032 A253 0006 0094 COPY BUFFER,X  GET BUFFER ADDRESS FROM IOB 0033 C08E 000E 0095 COPY DAOFS(X),Q DOES BOOT SECTOR DEVICE ADDR MATCH OUR DEFAULT 0034 4A58 0096 SUB =DADFLT,Q 0035 51C1 0037 0097 JNE Q,NOTOS4 NOPE, CANT BE OS4 BOOT 0036 848E 000E 0098 COPY A,DAOFS(X) PUT ACTUAL DEVICE ADDRESS INTO BOOT TABLE 0037 66FF 0099 NOTOS4 SAL :F,:F TURN OFF ISOLITE LED 0038 C253 000C 0100 COPY EXFLAG,Q TEST EXECUTE FLAG 0039 5143 003D 0101 JEQ Q,DOIT IF DEFAULT MODE, ALWAYS GO 003A 400F 0102 TBIT 0,Q 003B 3641 003D 0103 JT OV,DOIT IF HE SAID TO GO 003C 0E0D 0104 HLT STOP 'CAUSE HE WANTS TO PLAY WITH MEMORY 003D 9F48 0006 0105 DOIT JMP *BUFFER GO TO THE START OF THE I/O BUFFER  0106 * 003E 169B 001A 0107 NOTRDY JF SS,NORMAL IF DEMAND MODE AND NOT READY TRY AGAIN 003F C24D 000D.  0108 GO:OUT COPY SAL10,Q RESTORE THE Q REG 1PAGE 0004 MACRO (F200) SCOUT WINCHESTER DISK INTERFACE AUTOLOAD PROGRAM 84-93734-11 (A000 1983/04/20 15:36:26.50 MAIN PROGRAM 0040 6940 0109 COPY =:40,Y BE NICE TO THE NEXT GUY 0041 9E83 0045 0110 JMP NXT:BT TRY TO BOOT FROM THE NEXT GUY 0111 *  0003 0112 LPOOL 0042 0000 OPCODE 0043 0044 0113 * 00000045 0114 NXT:BT EQU  $ 000E 0115 END BOOTSWI 0000 ERRORS (0000/0000) 0000 WARNINGS (0000/0000) OFF ISOLITE LED COPY EXFLAG,Q TEST EXECUTE FLAG JEQ Q,DOIT IF DEFAULT MODE, ALWAYS GO TBIT 0,Q JT OV,DOIT IF HE SAID TO GO HLT STOP 'CAUSE HE WANTS TO PLAY WITH MEMORY DOIT JMP *BUFFER GO TO THE START OF THE I/O BUFFER * NOTRDY JF SS,NORMAL IF DEMAND MODE AND NOT READY TRY AGAIN GO:OUT COPY SAL10,Q RESTORE THE Q REG COPY =:40,Y BE NICE TO THE NEXT GUY JMP NXT:BIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII/ IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII TITL SCOUT WINCHESTER DISK INTERFACE AUTOLOAD PROGRAM 84-93734-11 (A000) TITL GENERAL DESCRIPTION SPACE 2 * THE PROGRAM WILL CHECK IF THE DISK FROM WHICH TO AUTOLOAD * CONTAINS A STANDARD OS4 BOOT, IN WHICH CASE IT WILL PROCEED TO * MODIFY THE DEFAULT DEVICE ADDRESS TO A VALID ONE AS RETURNED IN * REG.A (LOWER HALF) THROUGH THE 'SAL' INSTRUCTION. * * THE ASSUMED DEFAULT ADDRESS IS THAT OF THE HIGH CAPACITY DISK DRIVE * :A8, THIS WAY THE LABEL UTILITY MAY USE THE BOOT FOR SUCH A DEVICE * AS IS (WITH NO CHANGES AT ALL) WHEN LABELING A SCOUT WINCHESTER DISK. * * * THIS PROGRAM WAS CODED BY M.SIMS 1982. * RELEASED BY B.CANCIO - JULY 1982 * * BUFLEN EQU :200 BOOT IS 512 WORDS LONG DAOFS EQU :0E ADDRESS OF DEVICE ADDR WITHIN BOOT RECORD DADFLT EQU :A8 DEFAULT DEVICE ADDRESS TITL TITL MAIN PROGRAM *** * * THIS IS THE DISK CONTROLLER CIOB TO READ TRACK 0 SECTOR 0 HEAD 0 * INTO MEMORY AT ADDRESS 0 * *** OPCODE WORD :4 READ OPCODE UNIT WORD 0 CYL WORD 0 HEAD WORD 0 SECTOR WORD 0 WCOUNT WORD BUFLEN LENGTH OF DATA TO READ BUFFER WORD 0 INTER WORD 0 DCIOB WORD 0 XFERLEN WORD 0 WORDS READ CST WORD 0 CONTROLLER STATUS WORD DST WORD 0 DEVICE STATUS * EXFLAG WORD 0 EXECUTION TEST FLAG SAL10 SAL 1,0 AUTOLOAD LOOP SAL * BOOTSWI EQU $ ENTRY POINT FOR THE SAL INSTRUCTION COPY SAL10,X COPY X,NXT:BT+1 STUFF LOOP AROUND WORD COPY Q,SAL10 SAVE THE Q REG  JT SS,NORMAL IF SENSE IS ON, DO NORMAL BOOT IN 4,X COPY X,EXFLAG SAVE FOR EXECUTE TEST RBIT 0,X SUB =4,X IF OFF AND CDR=4 OR 5, FORCE RETRY HERE JNE X,GO:OUT ELSE, GO TRY NEXT BOOT COPY NXT:BT,X SUB =1,X MODIFY SAL CHAIN INSTRUCTION COPY X,NXT:BT BOOT MYSELF IF I FAIL!! *** * * READ THE SECTOR AND GO TO IT * *** NORMAL AND =:F8,A REMOVE GARBAGE FROM DEVICE ADDRESS COPY A,Q IN CASE OF ERROR XNX A TEST FOR CONTROLLER PRESENT SST 4 JMP ERROR WE HAVE A BOOT, BUT NO CONTROLLER!!! * XNX A SELP X,4 RESET THE CONTROLLER BUSY XNX A WAIT FOR NOT BUSY SST 0 JMP BUSY * COPY =OPCODE,X GET ADDRESS OF IOB XNX A OUT X,0 CRANK UP THE READ * WAIT XNX A WAIT FOR COMPLETE SST 0 JMP WAIT * COPY CST,Q TEST STATUS JGE Q,GO:BOOT IF GOOD NEWS TBIT 0,Q TEST DISK READY ERROR JT OV,NOTRDY * ERROR SELP Q,4 SEND ERROR CODE TO CDR HLT AND DIE JMP NORMAL TRY AGAIN IF HE RESTARTS * GO:BOOT EQU $ OUT Q,2 TURN OFF AUTOLOAD LITE AND RESET THE BBU COPY BUFFER,X GET BUFFER ADDRESS FROM IOB COPY DAOFS(X),Q DOES BOOT SECTOR DEVICE ADDR MATCH OUR DEFAULT SUB =DADFLT,Q JNE Q,NOTOS4 NOPE, CANT BE OS4 BOOT COPY A,DAOFS(X) PUT ACTUAL DEVICE ADDRESS INTO BOOT TABLE NOTOS4 SAL :F,:F TURN OFF ISOLITE LED COPY EXFLAG,Q TEST EXECUTE FLAG JEQ Q,DOIT IF DEFAULT MODE, ALWAYS GO TBIT 0,Q JT OV,DOIT IF HE SAID TO GO HLT STOP 'CAUSE HE WANTS TO PLAY WITH MEMORY DOIT JMP *BUFFER GO TO THE START OF THE I/O BUFFER * NOTRDY JF SS,NORMAL IF DEMAND MODE AND NOT READY TRY AGAIN GO:OUT COPY SAL10,Q RESTORE THE Q REG COPY =:40,Y BE NICE TO THE NEXT GUY JMP NXT:B0 T TRY TO BOOT FROM THE NEXT GUY * LPOOL * NXT:BT EQU $ END BOOTSWI O BOOT TABLE NOTOS4 SAL :F,:F TURN OFF ISOLITE LED COPY EXFLAG,Q TEST EXECUTE FLAG JEQ Q,DOIT IF DEFAULT MODE, ALWAYS GO TBIT 0,Q JT OV,DOIT IF HE SAID TO GO HLT STOP 'CAUSE HE WANTS TO PLAY WITH MEMORY DOIT JMP *BUFFER GO TO THE START OF THE I/O BUFFER * NOTRDY JF SS,NORMAL IF DEMAND MODE AND NOT READY TRY AGAIN GO:OUT COPY SAL10,Q RESTORE THE Q REG COPY =:40,Y BE NICE TO THE NEXT GUY JMP NXT:BIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII TITL SCOUT WINCHESTER INTER. ISOLITE ROM BOARD ID FILE 84-93734-12 A000 *** * * THIS PROGRAM CONTAINS THE SCOUT WINCHESTER (54140) ISOLITE ROM * BOARD IDENTIFICATION FILE (FILE NUMBER TWO IN THE ISOLITE ROM) * * THIS IS USED SO THAT THE USER CAN FIND THE BOARD I.D. OF THE * UFDC BOARD IN HIS SYSTEM SO THAT HIS PROGRAM CAN LOAD THE BOOT FILE * FROM THE ISOLITE ROM. FILE THREE IS THE BOOT FILE * WITH NO-EXECUTE SPECIFIED IN THE ROM HEADER BLOCK (POINTS * TO SAME CODE AS THE AUTO-LOAD BOOT FILE (FILE ONE)). * *** SWI:ID WORD 0 FIRST WORD OF TYPE FILE IS 0 WORD :0300 03=WINCHESTER 00=54140  WORD 0 FILL OUT THE THREE WORD BLOCK END WO IN THE ISOLITE ROM) * * THIS IS USED SO THAT THE USER CAN FIND THE BOARD I.D. OF THE * UFDC BOARD IN HIS SYSTEM SO THAT HIS PROGRAM CAN LOAD THE BOOT FILE * FROM THE ISOLITE ROM. FILE THREE IS THE BOOT FILE * WITH NO-EXECUTE SPECIFIED IN THE ROM HEADER BLOCK (POINTS * TO SAME CODE AS THE AUTO-LOAD BOOT FILEO0SEGMENTBLANK oim MACRO (F200) @1 8207091109328207091109328304201536011PAGE 0001 MACRO (F200) SCOUT WINCHESTER INTER. ISOLITE ROM BOARD ID FILE 84-93734-12 A000 1983/04/20 15:36:47.50 SI = DF01.SWI:ISO:ID.ASM SO = DF01.SWI:ISO:ID.OBJ LO = DF01.SWI:ISO:ID.LST 0002 *** 0003 *  0004 * THIS PROGRAM CONTAINS THE SCOUT WINCHESTER (54140) 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 SWI:ID WORD 0 FIRST WORD OF TYPE FILE IS 0 0001 0300 0015 WORD :0300 03=WINCHESTER 00=54140 0002 0000 0016 WORD 0 FILL OUT THE THREE WORD BLOCK 0017 END 0000 ERRORS (0000/0000) 0000 WARNINGS (0000/0000) FIND THE BOARD I.D. OF THE * UFDC BOARD IN HIS SYSTEM SO THAT HIS PROGRAM CAN LOAD THE BOOT FILE * FROM THE ISOLITE ROM. FILE THREE IS THE BOOT FILE * WITH NO-EXECUTE SPECIFIED IN THE ROM HEADER BLOCK (POINTS * TO SAME CODE AS THE AUTO-LOAD BOOT FILEIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII2 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII3 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII4 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII5 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII6 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII7 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII8 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJSTART:WIG:T G:G JG:0 O0SEGMENTBLANK oim MACRO (F200) @igfgggf. A)$@0 0@  ")"g)Āā )b1`I`Dqê vV*IȀ  I  iԿĢ`#`aDĀ9 +" t) »ćºIi¾I @6°@#֪N  B֥I   iǜ0@DI@0@ v @*΀ ~}  ´ " vz Ā   "z Q¢w o " |  g`i` ) Ă `Upx  W z W|{  WIV W ANq@g D ~ ID) Ić+Ii XI+I:²i 9 "~Kiª3") I"  |66Ğr9I6 IIIi  "~'Ib  I) ĂI IiþI Imi "~ QBJg¸) 5 ) I ąIIiI A I Ii¡ "~ I I I) 5 AeH)¹ )5I @b) I _I i]aI [AIXI  XIRiž M" ~LIGޓRI @+kU;UU Hzxt@ * 5N @b) II i$IAI I Yi "~ IMIGQFFJ @+kU⅝@  IDIQN I) IiпIh eII) I iIY V½I Ii IK´HIIi I?©<œIiI   I ii  ”ǔÔǔ"~# Ȅj8207091109328207091109328304201536010432 C2C0 0473 0739 COPY =:8410,Q EXPECTED STATUS 0433 F817 0017 0740 CSK Q,CONSTAT CHECK STATUS WORD 0434 0000 0741 NOP 0435 BF56 040C 0742 JST ERR ERROR EXIT  0743 * 0744 * SEEK ERROR TEST 0745 * 0436 C2BD 0474 0746 COPY =:FFF,Q GET UNUSUAL CYLINDER 0437 C40F 000F 0747 COPY Q,CYL SET COMMAND BLOCK 0438 4909 0748  COPY =9,Q SEEK OPERATION 0439 BFB5 046F 0749 JST COMMAND SEND CONTROL BLOCK ADDRESS 043A 4905 0750 COPY =5,Q ERROR CODE 5 ( DID NOT GO IDLE AFTER SEEK, STATUS T 043B 6901 0751  COPY =1,Y WAIT A SEOND 043C BFB3 0470 0752 JST SENSE SENSE IDLE 043D BFB3 0471 0753 JST RESET RESET STATUS 043E 4906 0754 COPY =6,Q ERROR CODE 6 (STATUS BAD,SEEK ERROR EXPECTED) 043F BF4B 040B 0755 JST PLACE SET ERRLOC 0440 C2B4 0475 0756 COPY  =:8600,Q EXPECTED STATUS 0441 F817 0017 0757 CSK Q,CONSTAT CHECK THE STATUS WORD 0442 0000 0758 NOP 0443 BF48 040C 0759 JST ERR ERROR EXIT 0760 * 0761 * END OF MEDIA TEST 0762 * 0444 4904 0763 COPY =4,Q OPERATION READ 0445 BFA9:  046F 0764 JST COMMAND SEND COMMAND BLOCK ADDRESS 0446 4907 0765 COPY =7,Q ERROR CODE 7 (DID NOT GO IDLE, STATUS TEST) 0447 6901 0766 COPY =1,Y WAIT A SECOND 0448 BFA7 0470  0767 JST SENSE SENSE IDLE 0449 BFA7 0471 0768 JST RESET RESET STATUS 1PAGE 0028 MACRO (F400) SCOUT WINCHESTER DISK INTERFACE ISOLITE TEST 84-93734-10 (A200) 1982/09/09 17:38:47.75 STATUS CHECK ROUTINE (STATUS TEST - RUN CODE A2) 044A 4908 0769 COPY =8,Q ERROR CODE 8 (STATUS BAD, END OF MEDIA EXPECTED) 044B BF3F 040B 0770 JST PLACE SET 044C C2A9 0476 0771 COPY =:8C00,Q EXPECTED STATUS 044D F817 0017 0772 CSK Q,CONSTAT CHECK THE STATUS WORD 044E 0000 0773 NOP 044F BF3C 040C 0774 JST ERR ERROR EXIT 0775 * 0776 * INTERRUPT RESET TEST 0777 * 0450 C29C 046D 0778 COPY =GOOD:INT,Q GET INTERRUPT ROUTINE ADDRESS 0451 C414 0014 0779 COPY Q,INTADDR SET IT IN COMMAND BLOCK 0452 4904 0780 COPY =4,Q OPERATION READ 0453 BF9B 046F 0781 JST COMMAND SEND IT TO CONTROLLER 0454 6901 0782 COPY =1,Y  WAIT A SECOND 0455 4909 0783 COPY =9,Q ERROR CODE 9 (DID NOT GO IDLE,STATUS TEST) 0456 BF99 0470 0784 JST SENSE SENSE IDLE 0457 BF99 0471 0785 JST RESET RESET STATUS 0458 8009 0009 0786 COPY DEVADD,A RESTORE DEVICE ADDRESS 0459 030A 0787 XNX A 045A 0404 0788 SELP A,4 RESET INTERRUPT 045B 490A 0789 COPY =:A,Q ERROR CODE A (DID NOT GO IDLE AFTER RESET) 045C 6901 0790 COPY =1,Y WAIT A SECOND 045D BF92 0470 0791  JST SENSE SENSE IDLE 045E BF92 0471 0792 JST RESET RESET STATUS 045F A297 0477 0793 COPY =BAD:INT,X UNEXPECTED INTERRUPT 0460 6901 0794 COPY =1,Y WAIT A SECOND 0461 0EC7 0795 RBIT 12,S ENABLE CONTROLLER INTERRUPTS 0462 0309 0796 UIS 0463 BF94 0478 0797 JST TIMER SET RTC 0464 C294 0479 0798 COPY =RET7,Q GOOD RETURN ADDRESS 0465 C794 047A 0799 COPY Q,:93 SET RTC 0466 C394 047B 0800 COPY JMP,Q GET JMP *$+1 0467 C794 047C 0801 COPY Q,:92 SET RTC 0468 2202 0802 OUT X,2 RESET BBU 0469 9E7E 0468 0803 JMP $-1 WAIT FOR INTERRUPT 0000046A 0804 RET7 EQU $ 1PAGE 0029 MACRO (F400) SCOUT WINCHESTER DISK INTERFACE ISOLITE TEST 84-93734-10 (A200) 1982/09/09 17:38:49.25 STATUS CHECK ROUTINE (STATUS TEST - RUN CODE A2) 046A BF86 0471 0805 JST RESET RESET STATUS 046B 9F23 040F 0806  JMP *STAT 0011 0807 LPOOL 046C 0202 JST:INT 046D 02CE GOOD:INT 046E 0201 TRAPLOC 046F 0297 COMMA; ND 0470 028C SENSE 0471 02C8 RESET 0472 8402 0473 8410 0474 0FFF 0475 8600 0476 8C00 0477 02D4 BAD:INT 0478 02B3 TIMER  0479 046A RET7 047A 0093 047B 0200 JMP 047C 0092 1PAGE 0030 MACRO (F400) SCOUT WINCHESTER DISK INTERFACE ISOLITE TEST 84-93734-10 (A200) 1982/09/09 17:38:49.50 STATUS CHECK ROUTINE (STATUS TEST - RUN CODE A2) 0000047D 0809 ENDISO EQU  $ 0000047D 0810 SALCHAIN EQU $ 0811 * SAL CHAIN 0000047E 0812 SALOOP EQU SALCHAIN+1 0813 * SAL LOOP BACK 0205 0814 END START:WI 0000 ERRORS (0000/0000) 0000 WARNINGS (0000/0000) 7B 0200 JMP 047C 0092 1PAGE 0030 MACRO (F400) SCOUT WINCHESTER DISK INTERFACE ISOLITE TEST 84-9IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII TITL SCOUT WINCHESTER DISK INTERFACE ISOLITE TEST 84-93734-10 (A100) TITL GENERAL DESCRIPTION ************************************************************ * * * SCOUT WINCHESTER DISK DRIVE INTERFACE * * ISOLITE TEST PROGRAM * *  * ************************************************************ *  * * COPYRIGHT 1982, COMPUTER AUTOMATION,INC. * *  * ************************************************************ * * PROGRAM DESCRIPTION: * * THIS PROGRAM IS AN ISOLITE TEST PROGRAM FOR THE SCOUT * WINCHESTER DISK DRIVE INTERFACE BOARD (54140). * * THIS TEST PROGRAM WILL ACCESS THE WINCHESTER DISK BY * MEANS OF SEEKS AND READS. NO DATA IS EVER WRITTEN TO THE * DISK AND SHOULD NEVER BE WRITTEN TO THE DISK. * * * THE PROGRAM WAS DESIGNED AND CODED BY ANATOLY VASERFIRER. * THE PROGRAM WAS TESTED AND MODIFIED BY B.CANCIO JULY,1982. * * REVISIONS: * *  A1 - RESET INTERRUPT STATUS UPON EXIT (UIS :40) * LEFT DEBUG IN AS COMMENTS * MOVED MAIN PROGRAM TO TOP WITH ABS :200 * DAVE HALE 1/14/83 * * A2 - CHANGED INITIAL WAIT FOR FIRST JST SENSE TO 10 MS * DAVE HALE 4/20/83 * ************************************************************ TITL TIT< L EQUATES ETC.. * EXTR DEBUG4 DEBUG BLOCK NAM G:0 DEBUG LINK ADDRESS * ABS 0 *DEBUG JST *$+1 * WORD DEBUG4 DEBUG BLOCK NAM G:G,G:T,START:WI REL RAMSIZ EQU 1 DMACOUNT EQU 2 QREG EQU 3 AREG EQU 4 XREG EQU 5 DATREG EQU 6 SREG EQU 7 YREG EQU 8 DEVADD EQU 9 COUNT2 EQU 10 COUNT1 EQU 11 ERRLOC EQU 12 OPCODE EQU 13 UNIT EQU 14 CYL EQU 15 HEAD EQU 16 SECTOR EQU 17 WCOUNT EQU 18 MEMADDR EQU 19 INTADDR EQU 20 DCIOB EQU 21 WPROC EQU 22 CONSTAT EQU 23 DRSTAT EQU 24 CWCOUNT EQU 25 CMEMADDR EQU 26 CRES EQU 27 CDCIOB EQU 28 EXWORDS EQU 29 EXSTATUS EQU 30 EXPECTED STATUS FLAG & MASK READ STATUS * ABS :200 * DEBUG REGISTER G:G EQU $ JMP JMP *$+1 TRAPLOC WORD 0 JST:INT JST 0(X) JST JST *$+1 SAL00 SAL 0,0 TITL MAIN ENTRY POINT TO THE PROGRAM - START:WI G:T EQU $ DEBUG REGISTER * * MAIN ENTRY POINT TO THE PROGRAM * START:WI EQU $ G:0 EQU $ DEBUG START SAL 2,14 ORG $-1 B.C. WORD 0 B.C COPY Q,QREG SAVE Q REGISTER COPY A,AREG SAVE A REGISTER COPY X,XREG SAVE X REGISTER COPY Y,YREG SAVE Y REGISTER IN 4,Q GET DATA REGISTER COPY Q,DATREG SAVE DATA REGISTER COPY =:A0,X WINCHESER ISOLITE CODE SELP X,4 SEND IT TO CDR COPY S,Q GET S REGISTER COPY Q,SREG SAVE S REGISTER COPY =:1040,Q NEW S REGISTER COPY Q,S SET S REGISTER UIS AND =:F8,A GET DEVICE ADDRESS OUT OF SAL INFORMATION COPY A,DEVADD SAVE DEVICE ADDRESS FOR A FUTURE OUT X,2 TURN OFF AUTOLOAD INDICATOR COPY =1,X OUT X,0 TURN ON SENSE SWITCH * * CHECK A SIZE OF THE RAM * AND WHERE STARTS UIM * * COPY JMP,Q COPY =:8A,X GET UIM TRAP LOCATION COPY Q,0(X) SET TRAP LOCATION COPY =TRAP,Q GET SERVICE ROUTINE ADDRESS COPY Q,1(X) SET IT IN THE TRAP LOCATION COPY =0,X COPY X,TRAPLOC START WIT RATE ERROR TEST DISABLE COPY =:1000,X GET END OF PROGRAM LOOP EQU $ COPY 0(X),Q B.C. JNE X,$+2 B.C JMP NO:UIM B.C COMP Q,Y B.C. COMPLEMENT VALUE READ FROM MEMORY COPY Y,0(X) B.C. AND TRY TO STORED IT BACK COPY 0(X),Y B.C. READ BACK TO VERIFY IF ROM OR RAM AND Q,Y B.C. 'AND'ING VALUE & COMP = ZERO JNE Y,GO  B.C. IF NOT = 0; MUST BE ROM ADD =:100,X B.C. INCREMENT MEMORY JMP LOOP * TRAP EQU $ COPY X,TRAPLOC RATE ERROR TEST POSSIBLE TO EXECUTE GO EQU $ NO:UIM EQU $ NO UNIMPLEMENTED MEMORY SUB  =1,X MAKE VALID ADDRESS COPY X,RAMSIZ SAVE RAMSIZE COPY =1,Q ERROR CODE 1 (POWER IS NOT ON WCI) JST PLACE SET ERRLOC COPY DEVADD,A RESTORE DEVICE ADDRESS XNX A SST 4 SENSE CONTROLLER JST ERR COPY =2,Q ERROR CODE 2 (DID NOT GO IDLE AFTER INITIALIZE) XNX A SELP A,4 INITIALIZE CONTROLLER COPY =20,Y SET TIME TO 20 SECOND JST SENSE SENSE CONTROLLER FOR IDLE JST RESET RESET STATUS COPY =ENDISO+3,X GET END OF PROGRAM COPY RAMSIZ,Y GET RAM SIZE SUB X,Y GET NUMBER OF LOCATIONS TO FILL WITH JST NEG Y PREPARE IT FOR IJNE COPY JST:INT,Q GET JST 0(X) FILLOOP EQU $ COPY Q,0(X) FILL A LOCATION WITH JST 0(Y) ADD =1,X BUMP LOCATION COUNTER OUT X,2 RESET BBU IJNE Y,FILLOOP COPY =OPCODE,X GET THE ADDRESS OF COMMAND BLOCK COP= Y =GOOD:INT,Q GET GOOD INTERRUPT ROUTINE COPY Q,7(X) SET IT IN COMMAND BLOCK COPY =:8000,Q GET MICRODIAGNOSTIC CODE JST COMMAND SEND COMMAND BLOCK COPY =3,Q ERROR CODE 3 (DID NOT GO IDLE AFTER MICRODIAGOSTIC) COPY =1,Y SET THE TIME FOR 1 SECOND JST SENSE SENSE CONTROLLER FOR IDLE JST RESET RESET STATUS COPY =4,Q ERROR CODE 4 (STATUS IS BAD AFTER MICRODIAGNOSTIC) COPY CONSTAT,Q B.C. TBIT 15,Q B.C. CHECK ONLY BIT 15 FOR MICRODIAG.. JF OV,$+2  JST ERR B.C. IF SET,THEN ERROR CONDITION COPY =:7FFF,Q INVERTED DATA IN OPERATION CODE WORD CSK Q,DRSTAT NOP  JST ERR DID NOT INVERT OPERATION CODE WORD COPY =ENDISO+3,X B.C.DETERMINE BUFFERS FOR READ TESTS COPY  RAMSIZ,Q SUB X,Q B.C.TOTAL RAM MINUS ISOLITE PROGRAM AND =:FFFE,Q B.C. ROUND OFF  SHIFT Q,RO,1 B.C. DIVIDE/2 COPY X,LOWBUF B.C. SAVE CALCULATED LOW BUFFER ADD Q,X  B.C. CALCULATE HIGH BUFFER COPY X,HIGHBUF B.C. SAVE CALCULATED HIGH BUFFER AND =:FFFE,Q  B.C. ROUND OFF COPY Q,DMACOUNT B.C. SAVE FOR DMA TEST COPY =0,Q B.C. CLEAR STATUS FLAG COPY Q,EXSTATUS B.C. JST IN:OUT EXECUTE BASIC FUNCTIONS TEST JST STAT EXECUTE STATUS CHECK ROUTINE EXIT EQU $ JST RESET RESET STATUS COPY DEVADD,A RESTORE DEVICE ADDRESS XNX A SELP A,4 RESET CONTROLLER COPY =1,Y SET TIME FOR 1 SECOND JST SENSE TEST FOR END OF OPERATION JST RESET RESET STATUS COPY SAL00,Q GET SAL 0,0 COPY Q,SALOOP SAVE IT FOR LOOPING COPY SREG,Q GET ENTRY S REGISTER COPY Q,S RESTORE S REGISTER COPY DATREG,Q GET ENTRY DATA REGISTER SELP Q,4 RESTORE DATA REGISTER COPY XREG,X RESTORE X REGISTER COPY QREG,Q RESTORE Q REGISTER COPY YREG,Y RESTORE Y REGISTER COPY AREG,A RESTORE A REGISTER COPY =:40,Q COPY Q,S UIS JMP START:WI B.C. ORG $-1  B.C. JMP SALCHAIN EXECUTE A NEXT PROGRAM LPOOL TITL TITL SUBROUTINES * ROUTINE TO SENSE CONTROLLER IDLE * * COPY =NUMBER OF SECONDS,Y * COPY =ERRCODE,Q * JST SENSE * SENSE ENT JST PLACE COPY =ERR+1,Q JST TIMER SET THE REAL TIME CLOCK COPY DEVADD,A RESTORE DEVICE ADDRESS IDLE EQU $ OUT X,2 RESET BBU XNX A SST 0 SENSE CONTROLLER JMP $+2 STILL BUSY JMP *SENSE NOT BUSY JMP IDLE * * ROUTINE TO OUTPUT COMMAND BLOCK TO CONTROLLER * * COPY OPCODE,Q * COPY =OPCODE,X * JST COMMAND * COMMAND ENT COPY Q,0(X) SET OPERATION CODE IN COMMAND BLOCK COPY DEVADD,A RESTORE DEVICE ADDRESS XNX A OUT X,0 SEND COMMAD BLOCK TO CONTROLLER JMP *COMMAND RETURN * * ROUTINE TO CHECK STATUS FOR END OF OPERATION * SINCE THE DISK DRIVE MAY NOT BE FORMATTED, THERE MAY BE CASES WHEN * A READ CAN NOT BE EXECUTED AND THE TEST MUST THEREFORE BE OMITTED. * * COPY =ERRCODE,Q * JST STATUS * STATUS ENT JST PLACE SET ERRLOC COPY EXSTATUS,Q B.C. IF STATUS IS FOR READ OPERATION JNE Q,READSTAT B.C. THEN WE MUST IGNORE CERTAIN BITS COPY =:400,Q EXPECTED STATUS CSK Q,CONSTAT ACTUAL CHECK NOP JST ERR ERROR STATUS JMP *STATUS READSTAT EQU $ B.C. COPY CONSTAT,A B.C. STATUS RECEIVED ON READ OPERATION AND >  EXSTATUS,A B.C. ISOLATE PERTINENT BITS CSK A,=:400 B.C. WHICH SHOULD THEN RESULT IN :400 NOP B.C. JST ERR B.C. COPY CONSTAT,A B.C. MUST PASS INFO. TO SKIP VERIFY RBIT 10,A B.C CLEAR FOR SIMPLE CHECK UPON RETURN JMP *STATUS JST ERR RUN OUT OF TIME * *ROUTINE TO SET ERROR LOCATION * * COPY =ERROR CODE,Q * JST PLACE * PLACE ENT COPY Q,ERRLOC SET ERROR CODE OUT X,2 RESET BBU JMP *PLACE * * REAL TIME CLOCK ROUTINE * * COPY =NUMBER OF SECONDS,Y * JST TIMER * TIMER ENT OUT A,2 RESET BBU COPY =0,A MUL =120,AY NUMBER OF TICKS COMP Y COPY Y,:91 SAVE IT FOR A CLOCK COPY X,Y SAVE X REG COPY =:91,X COPY JMP,A GET JMP *$+1 COPY A,1(X) COPY Q,2(X) COPY Y,X RESTORE X REG SBIT 8,S ENABLE CLOCK INTERRUPTS SBIT 5,S JMP *TIMER LPOOL TITL TITL SUBROUTINES * ROUTINE TO RESET STATUS WORD * RESET ENT SBIT 12,S RBIT 8,S RBIT 5,S UIS JMP *RESET * * ROUTINE TO HOLD EXPECTED INTERRUPTS * GOOD:INT EQU $ JST INT INT ENT SBIT 12,S DISABLE EOB RBIT 5,S DISABLE CLOCK COPY Q,INT SET RETURN ADDRESS JMP *INT RETURN * * ROUTINE TO HOLD UNEXPECTED INTERRUPTS * BAD:INT ENT SBIT 12,S DISABLE CONTROLLER INTERRUPTS RBIT 5,S DISABLE CLOCK COPY =3,Q ERROR CODE 3 (BAD INTERRUPT) JST PLACE SET ERRLOC JST ERR EXIT * * ROUTINE TO OUTPUT ERROR CODE TO CDR AND HALT * * ASSUMES ERROR CODE IN 'ERRLOC' - SEE SUBROUTINE 'PLACE'. * ERR ENT SBIT 12,S RBIT 5,S UIS COPY ERRLOC,Y GET ERROR CODE IN 4,Q GET CDR SHIFT Q,LO,8 SET IT INTO POSITION OR Y,Q MERGE TWO CODES SELP Q,4 SEND IT TO CDR HLT HALT THE PROCESSOR!!!!!!!!! JMP $-1 DO NOT GO ANYWHERE!!!!!!! TITL TITL ROUTINE TO EXECUTE I/O TEST (READ,SEEKS,READ VERIFY ETC..) * ROUTINE TO EXECUTE TEST I/O, READ, READ VERIFY * AND SEEK OPERATIONS * IN:OUT ENT COPY =:A1,Q BASIC FUNCTIONS TEST INDICATOR SELP Q,4 SEND IT TO CDR COPY =OPCODE,X COMMAND BLOCK ADDRESS COPY =0,Q OPERATION TIO COPY Q,7(X) B.C. CLEAR INTERRUPT ADDRESS IN CIOB JST COMMAND SEND IT TO CONTROLLER COPY =1,Q ERROR CODE 1 (DID NOT GO IDLE AFTER TIO) COPY =2,Y WAIT 2WO SECONDS FOR IDLE JST SENSE SENSE CONTROLLER FOR IDLE JST RESET RESET STATUS COPY =4,Q ERROR CODE 4 (STATUS BAD AFTER TIO) JST STATUS CHECK STATUS WORD COPY =BAD:INT,X GET ADDR OF UNEXPECTED INTERRUPT COPY =2,Q ERROR CODE 2 (NO INTERRUPT AFTER TIO) JST PLACE SET ERRLOC COPY =RET1,Q GET RETURN ADDRESS COPY =1,Y WAIT ONE SECOND FOR INTERRUPT RBIT 12,S ENABLE CONTROLLER INTERRUPTS UIS JST TIMER WAIT FOR INTERRUPT OUT X,2 RESET BBU JMP $-1 WAIT INTERRUPT RET1 EQU $ JST RESET RESET STATUS COPY =20,Y SET CLOCK FOR 20 SECONDS COPY =EXIT,Q CHANGE EXIT TO GOOD JST TIMER TIO EQU $ OUT X,2 RESET BBU COPY =OPCODE,X COMMAND BLOCK ADDRESS COPY =0,Q TIO OPERATION JST COMMAND SEND CONTROL BLOCK TO CONTROLLER OUT X,2 RESET BBU XNX A SST 0 CHECK FOR IDLE JMP $-3 NOT YET COPY DRSTAT,A GET DRIVE STATUS TBIT 15,A TEST FOR DRIVE A JF OV,READY:A DRIVE A IS READY TBIT 14,A TEST FOR DRIVE B JF OV,READY:B DRIVE B IS READY JMP TIO DO IT AGEIN READY:A EQU $ JST RESET RESET STATUS COPY =0,Q SET DATA FOR COMMAND BLOCK JMP SET:UNIT GO SET CONTROL BLOK FOR SEEK OPERATION READY:B EQU $ JST RESET RESET STATUS COPY =1,Q SET UNIT FOR?  COMMAND BLOCK SET:UNIT EQU $ COPY Q,UNIT SET READY UNIT COPY =4,Q ERROR CODE 4 (STATUS IS BAD AFTER TIO) JST STATUS CHECK THE STATUS WORD COPY =BAD:INT,X GET JMP TO EXPECTED INT. ROUTINE COPY =2,Q ERROR CODE 2 (NO INTERRUPT AFTER TIO) JST PLACE SET ERRLOC COPY =RET2,Q GET RETURN ADDRESS COPY =1,Y WAIT TWO SECONDS RBIT 12,S UIS JST TIMER SET REAL TIME CLOCK OUT X,2 RESET BBU JMP $-1 WAIT FOR I RET2 EQU $ JST RESET RESET STATUS COPY =0,Q COPY Q,CYL SET CYL. =0 COPY Q,HEAD SET HEAD =0 COPY Q,SECTOR SET SECTOR =0 COPY Q,DCIOB CHAIN ADDRESS = 0 JMP SEEK LPOOL TITL TITL SEEK TEST (I/O TEST - RUN CODE A1 * * SEEK TEST * SEEK EQU $ COPY =:80,Q B.C. SEEK CYLINDER 128 (DEC) SEEKNEXT EQU $ B.C. COPY =OPCODE,X GET CIOB ADDRESS COPY Q,2(X) B.C. MOVE CYL. TO CIOB COPY =9,Q GET SEEK OPCODE JST COMMAND SEND CIOB TO CONTROLLER COPY =5,Q ERROR CODE 5 (DID NOT GO IDLE AFTER SEEK) COPY =2,Y SET TIME FOR TWO SECONDS JST SENSE SENSE CONTROLLER FOR IDLE JST RESET RESET STATUS COPY =6,Q ERROR CODE 6 (BAD STATUS AFTER SEEK) JST STATUS CHECK STATUS COPY =7,Q ERROR CODE 7 (NO INT AFTER SEEK) JST PLACE SET ERRLOC COPY =BAD:INT,X GET BAD INTERRUPT ADDRESS COPY =1,Y WAIT ONE SECOND FOR INTERRUPT COPY =RET3,Q GET RETURN ADDRESS RBIT 12,S ENABLE INTERRUPTS UIS JST TIMER WAIT FOR INTERRUPT OUT X,2 RESET BBU JMP $-1 WAIT FOR INTERRUPT RET3 EQU $ JST RESET RESET STATUS COPY CYL,Q B.C. GET LAST CYLINDER SEEK JEQ  Q,VERIFY B.C. THROUGH; GO TO NEXT TEST SUB =:10,Q B.C. ADJUST FOR NEXT SEEK JMP SEEKNEXT B.C. GO BACK & CONTINUE SEEKING TITL TITL READ VERIFY (I/O TEST - RUN CODE A1) * * READ VERIFY TEST * VERIFY EQU $ B.C. COPY =:7F8F,Q B.C. MASK TO ISOLATE BITS COPY Q,EXSTATUS B.C. MOVE IT TO FLAG COPY =ENDISO+3,Y B.C. SET-UP BUFFER FOR POSIBLE FAILURE COPY Y,MEMADDR B.C. USE SAME BUFFER AS FOR READ TEST COPY AAAA,Q B.C. PATTERN TO REMAIN INTACT IN MEMORY COPY =:20,X B.C. SIZE OF MEMORY BUFFER FOR TEST FILLING1 EQU $ B.C. COPY Q,0(X,Y) B.C. FILL MEMORY WITH PATTERN :AAAA JNED X,FILLING1 B.C. COPY =OPCODE,X GET CIOB ADDRESS COPY =:20,Q NUMBER OF WORDS TO BE PROCESSED COPY Q,5(X) SET WORD COUNT IN CIOB COPY =8,Q OPERATION CODE READ VERIFY JST COMMAND SEND CIOB TO CONTROLLER COPY =8,Q ERROR CODE 8 (DID NOT IDLE AFTER READ VERIFY) COPY =4,Y SET TIMER FOR 4 SECONDS JST SENSE SENSE CONTROLLER FOR IDLE JST RESET RESET STATUS COPY =:9,Q ERROR CODE 9 (STATUS BAD AFTER READ VERIFY) JST STATUS CHECK STATUS WORD JEQ A,$+2 CONTINUE TESTING IF ALL'S FINE JMP READTEST MAYBE TRY NEXT READ TEST COPY =:A,Q ERROR CODE A (NO INTERRUPT AFTER READ VERIFY) JST PLACE SET ERRLOC COPY =BAD:INT,X ADDRESS OF BAD INTERRUPT ROUTINE COPY =1,Y SET TIME FOR ONE SECONDS COPY =RET4,Q GET RETURN ADDRESS RBIT 12,S ENABLE INTERRUPTS UIS JST TIMER WAIT FOR INTERRUPT OUT X,2 RESET BBU JMP $-1 WAIT FOR INTERRUPT RET4 EQU $ JST RESET RESET STATUS WORD COPY =:B,Q ERROR CODE B (WORD COUNT IS BAD AFTER READ VERIFY) JST PLACE SET@  ERRLOC COPY =:20,Q GET EXPECTED NUMBER CSK Q,WPROC CHECK THE NUMBER NOP JST ERR BAD NEWS, ERROR EXIT * * CHANGES BELOW BY B.C. 2 JULY '82 * COPY =:14,Q ERR CODE (READ VERIFY ACTUALLY READ-SHOULD JST PLACE COPY MEMADDR,Y GET BUFFER ADDR. COPY AAAA,Q COPY =:19,X BUFFER SI CHKING1 EQU $  CSK Q,0(X,Y) COMPARE;MUST HAVE REMAINED INTACT NOP JST ERR JNED X,CHKING1 B.C. DECREMENT & GO BACK IF NOT THROUGH JMP READTEST B.C. GO TO THE NEXT TEST LPOOL B.C TITL TITL READ TEST (I/O TEST - RUN CODE A1) ************************************************************************** * * READ TEST * READTEST EQU $ B.C. COPY =-1,Q B.C. COPY Q,FLAG B.C. 1ST/2ND BUFFER FILLING INDICATOR COPY =0,X END OF CHAIN COPY X,CDCIOB SET IT IN CHAIN BLOCK COPY LOWBUF,Y  B.C. LOW BUFFER FIRST COPY AAAA,Q B.C. IN THIS CASE IT MUST DESTROY PATTERN READT EQU $ COPY Y,MEMADDR FILL COMMAND BLOCK COPY =:19,X FILLING2 EQU $ COPY Q,0(X,Y) B.C. FILL IN WITH PATTERN :AAAA  JNED X,FILLING2 B.C. CONTINUE UNTIL THROUGH COPY =:10,Q GET LENGTH OF BUFFER COPY Q,WCOUNT SET WORD COUNT IN COMMAND BLOCK COPY Q,CWCOUNT SET WORD COUNT IN CHAIN COMMAND BLOCK COPY =CWCOUNT,A GET CHAIN BLOCK ADDRESS COPY A,DCIOB SET IT IN COMMAND BLOCK ADD Y,Q GET CHAIN BUFFER ADDRESS COPY Q,CMEMADDR SET IT IN CHAIN BLOCK COPY =OPCODE,X GET COMMAND BLOCK ADDRESS COPY =4,Q READ OPERATION JST COMMAND OUTPUT COMMAND BLOCK TO CONTROLLER COPY =:C,Q ERROR CODE C (DID NOT GO IDLE AFTER READ) COPY =6,Y WAIT 6 SECONDS JST SENSE SENSE IDLE JST RESET RESET STATUS COPY =:D,Q ERROR CODE D (STATUS IS BAD AFTER READ)  JST STATUS CHECK STATUS WORD JEQ A,$+2 IF R.A=0,CONTINE WITH TEST JMP DMATEST OTHERWISE MAYBE TRY DMATEST COPY =:E,Q ERROR CODE E (WORD COUNT IS BAD AFTER READ) JST PLACE SET ERRLOC COPY =:20,Q EXPECTED WORD COUNT CSK Q,WPROC CHECK THE NUMBER OF WORDS PROCESSED NOP JST ERR ERROR EXIT COPY =:F,Q ERROR CODE F (NO INTERRUPT AFTER READ) JST PLACE SET ERRLOC COPY =BAD:INT,X BAD INTERRUPT ROUTINE ADDRESS COPY =1,Y WAIT ONE SECONDS COPY =RET5,Q GET RETUN ADDRESS RBIT 12,S ENABLE INTERRUPTS UIS JST TIMER WAIT FOR INTERRUPT OUT X,2 RESET BBU JMP $-1 WAIT FOR INTERRUPT RET5 EQU $ JST RESET RESET STATUS COPY =:15,Q B.C. ERR CODE (READ DID NOT REALLY READ) JST PLACE B.C. IMS FLAG B.C. INDICATES IF 2ND BUFFER TO BE DONE JMP NEXT1 B.C. 2ND BUFFER READ ALREADY COPY HIGHBUF,Y B.C. HIGHER BUFFER TO BE FILLED W/PATTERN COPY ALL5S,Q B.C. PATTERN  JMP READT B.C. GO BACK & FILL 2ND BUFFER NEXT1 EQU $ COPY HIGHBUF,X B.C. MUST VERIFY THAT BOTH MATCH COPY LOWBUF,Y B.C. IF READ WORKS AS IT SHOULD COPY =:19,Q B.C. VERFY1 EQU $ COPY 0(X),A B.C. GET FROM ONE BUFFER XOR 0(Y),A B.C. RESULT SHOULD BE ZERO (0) A  JNE A,NOMATCH B.C. ERROR IF NO MATCH ADD =1,X B.C. ADD =1,Y B.C  JNED Q,VERFY1 B.C. JMP DMATEST B.C. NOMATCH EQU $ JST ERR B.C. HALT WITH ERROR CODE :15 AAAA WORD :AAAA B.C. PATTERN FOR READ TEST ALL5S WORD :5555 B.C. PATTERN FOR READ TEST HIGHBUF WORD 0 LOWBUF WORD 0 FLAG WORD 0 -1 = 1ST BUFF. 0 = 2ND BUFF. LPOOL TITL TITL DMA TEST (I/O * * DMA TEST * DMATEST EQU $ B.C. COPY =-1,Q B.C.  COPY Q,FLAG B.C. 1ST/2ND BUFFER FILLING INDICATOR COPY LOWBUF,Y B.C. GET ADDRESS OF 1ST BUFFER  COPY AAAA,A B.C. AND PATTERN TO MOVE INTO IT READMA EQU $ B.C. COPY Y,MEMADDR  B.C. MOVE IT CIOB COPY DMACOUNT,X B.C. NO. WORDS TO TRANSFER COPY X,Q SUB =1,X  B.C. ADJUST FOR 'JNED' INSTRUCTION LOOP2 EQU $ COPY A,0(X,Y) B.C. MOVE PATTERN TO MEMORY  JNED X,LOOP2 B.C. DECREMENT UNTIL THROUGH COPY Q,EXWORDS SAVE EXPECTED WORD COUNT SHIFT Q,RO,1 GET A HALF COPY Q,WCOUNT SET WORD COUNT IN COMMAND BLOCK COPY Q,CWCOUNT SET WORD COUNT IN CHAIN BLOCK ADD Y,Q GET CHAIN BUFFER ADDRESS COPY Q,CMEMADDR SET IT IN CHAIN BLOCK COPY =OPCODE,X GET COMMAND BLOCK ADDRESS COPY =4,Q READ OPERATION JST COMMAND OUTPUT COMMAND BLOCK TO CONTROLLER COPY =:10,Q ERROR CODE 10 (DID NOT GO IDLE AFTER READ) COPY =36,Y WAIT 36 SECONDS JST SENSE SENSE IDLE JST RESET RESET STATUS COPY =:11,Q ERROR CODE 11 (STATUS IS BAD AFTER READ) JST STATUS CHECK STATUS WORD JEQ A,$+2  B.C. IF NOT ZERO,SKIP READ TEST JMP IOEXIT B.C. COPY =:12,Q ERROR CODE 12 (WORD COUNT IS BAD AFTER READ) JST PLACE SET ERRLOC COPY EXWORDS,Q EXPECTED WORD COUNT CSK Q,WPROC CHECK THE NUMBER OF WORDS PROCESSED NOP JST ERR ERROR EXIT COPY =:13,Q ERROR CODE 13 (NO INTERRUPT AFTER READ) JST PLACE SET ERRLOC COPY =BAD:INT,X BAD INTERRUPT ROUTINE ADDRESS COPY =1,Y WAIT ONE SECONDS COPY =RET6,Q GET RETURN ADDRESS RBIT 12,S ENABLE INTERRUPTS UIS JST TIMER WAIT FOR INTERRUPT OUT X,2 RESET BBU JMP $-1 WAIT FOR INTERRUPT RET6 EQU $ JST RESET RESET STATUS COPY =:16,Q B.C. DID NOT READ IN DMA OPERATION JST PLACE B.C. STORE ERROR CODE IMS FLAG B.C. 2ND BUFFER TO FILL ? JMP NEXT2 B.C. NO, THROUGH WITH READ,NOW VERIFY COPY HIGHBUF,Y B.C. GET 2ND BUFFER ADDRESS COPY ALL5S,A B.C. GET DIFFERENT PATTERN JMP READMA B.C. AND GO BACK FOR 2ND ROUND NEXT2 EQU $ COPY HIGHBUF,X B.C. GET BOTH BUFFER ADDRESSES COPY LOWBUF,Y COPY DMACOUNT,Q B.C. AND NO.OF WORDS TRANSFERED FOR EACH SUB =1,Q B.C. ADJUST FOR 'JNED' INSTRUCTION VERIFY2  EQU $ COPY 0(X),A B.C. WORD READ FROM DISK INTO UPPER BUF XOR 0(Y),A B.C. WORD READ FROM DISK INTO LOWER BUF JNE A,NOMATCH2 B.C. BAD READ ADD =1,X B.C. POINT TO NEXT BUFFEB R LOCATION ADD =1,Y B.C. JNED Q,VERIFY2 B.C. THROUGH WHEN IT IS = ZERO COPY Q,EXSTATUS B.C. CLEAR EXPECTED STATUS IOEXIT EQU $ COPY =IN:OUT,Y GET RETURN ADDRESS JMP *0(Y) NOMATCH2 EQU $  JST ERR B.C. HALT WITH ERROR CODE :16 LPOOL TITL TITL STATUS CHECK ROUTINE (STATUS TEST - RUN CODE A2) STAT ENT COPY =:A2,Q TEST IDENTIFICATION SELP Q,4 SEND IT TO CDR COPY =0,Q COPY Q,INTADDR DISABLE INTERRUPTS ON THE CONTROLLER  COPY Q,DCIOB SET COMMAND BLOCK COPY JST:INT,Q GET JST 0(X) COPY Q,GOOD:INT DO NOT EXPECT INT * * RATE ERROR TEST * COPY TRAPLOC,Q UIM TRAP LOCATION JEQ Q,ID:TEST RATE ERROR TEST IMPOSSIBLE TO EXECUTE COPY Q,MEMADDR BUFFER ADDRESS COPY =4,Q READ OPERATION COPY =OPCODE,X COMMAND BLOCK ADDRESS JST COMMAND SEND COMMAND BLOCK COPY =1,Q ERROR CODE 1 (DID NOT GO IDLE, RATE ERROR TEST) COPY =1,Y WAT A SECOND JST SENSE SENSE IDLE JST RESET RESET STATUS COPY =2,Q ERROR CODE 2 (STATUS BAD, RATE ERROR EXPECTED) JST PLACE SET ERRLOC COPY =:8402,Q EXPECTED STATUS CSK Q,CONSTAT CHECK THE STATUS NOP JST ERR ERROR EXIT * * ID TEST * ID:TEST EQU $ COPY =:FF,Q INVALID SECTOR ID COPY Q,SECTOR SET IT IN COMMAND BLOCK COPY =4,Q OPERATION READ COPY =OPCODE,X COMMAND BLOCK ADDRESS JST COMMAND SEND COMMAND BLOCK COPY =:B,Q ERROR CODE :B (DID NOT GO IDLE, ID TEST) COPY =1,Y WAIT A SECOND JST SENSE SENSE IDLE JST RESET RESET STATUS COPY =4,Q ERROR CODE 4 (STATUS BAD, ID ERROR EXPECTED) JST PLACE SET ERRLOC COPY =:8410,Q EXPECTED STATUS CSK Q,CONSTAT CHECK STATUS WORD NOP JST ERR ERROR EXIT * * SEEK ERROR TEST * COPY =:FFF,Q GET UNUSUAL CYLINDER COPY Q,CYL SET COMMAND BLOCK COPY =9,Q SEEK OPERATION JST COMMAND SEND CONTROL BLOCK ADDRESS COPY =5,Q ERROR CODE 5 ( DID NOT GO IDLE AFTER SEEK, STATUS TEST) COPY =1,Y WAIT A SEOND JST SENSE SENSE IDLE JST RESET RESET STATUS COPY =6,Q ERROR CODE 6 (STATUS BAD,SEEK ERROR EXPECTED) JST PLACE SET ERRLOC COPY =:8600,Q EXPECTED STATUS CSK Q,CONSTAT CHECK THE STATUS WORD NOP JST ERR ERROR EXIT * * END OF MEDIA TEST * COPY =4,Q OPERATION READ JST COMMAND SEND COMMAND BLOCK ADDRESS COPY =7,Q ERROR CODE 7 (DID NOT GO IDLE, STATUS TEST) COPY =1,Y WAIT A SECOND JST SENSE SENSE IDLE JST RESET RESET STATUS  COPY =8,Q ERROR CODE 8 (STATUS BAD, END OF MEDIA EXPECTED) JST PLACE SET COPY =:8C00,Q EXPECTED STATUS CSK Q,CONSTAT CHECK THE STATUS WORD NOP JST ERR ERROR EXIT * * INTERRUPT RESET TEST * COPY =GOOD:INT,Q GET INTERRUPT ROUTINE ADDRESS COPY Q,INTADDR SET IT IN COMMAND BLOCK COPY =4,Q OPERATION READ JST COMMAND SEND IT TO CONTROLLER COPY =1,Y WAIT A SECOND COPY =9,Q ERROR CODE 9 (DID NOT GO IDLE,STATUS TEST) JST SENSE SENSE IDLE JST RESET RESET STATUS COPY DEVADD,A RESTORE DEVICE ADDRESS XNX A SELP A,4 RESET INTERRUPT COPY =:A,Q ERROR CODE A (DID NOT GO IDLE AFTER RESET) COPY =1,Y WAIT A SECOND JST SENSE SENSE IDLE JST RESET RESET STATUS COPY =BAD:INT,X UNEXPECTED INTERRUPT COPY =1,Y WAIT A SECOND RBIT 12,S ENABLE CONTROLLER INTERRUPTS UIS JST TIMER SET RTC COPY =RET7,Q GOOD RETURN ADDRESS COPY Q,:93 SET RTC COPY JMP,Q GET JMP *$+1 COPY Q,:92 SET RTC OUT X,2 RESET BBU JMP $-1 WAIT FOR INTERRUPT RET7 EQU $ JST RESET RESET STATUS JMP *STAT LPOOL TITL ENDISO EQU $ SALCHAIN EQUC  $ * SAL CHAIN SALOOP EQU SALCHAIN+1 * SAL LOOP BACK END START:WI LE AFTER RESET) COPY =1,Y WAIT A SECOND JST SENSE SENSE IDLE JST RESET RESET STATUS COPY =BAD:INT,X UNEXPECTED INTERRUPT COPY =1,Y WAIT A SECOND RBIT 12,S ENABLE CONTROLLER INTERRUPTSOVicEdDanoEBf~|H!x *1袭*@  $ } " }_SE@6PD iBSJXQfSQC@6A HMi@mF1EBE5E3--E3E1I?©<œIiI  I ii ”ǔÔǔ"~#ȄjmF1EBE5E3--E3E1IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIOVicEdDanomF1EBE5E3--E3E1T 84-93734-10 (A100) TITL GENERAL DESCRIPTION ************************************************************ * * * SCOUT WINCHESTER DISK DRIVE INTERFACE * * ISOLITE TEST PROGRAM * *  * ************************************************************ * OVicEdDanoff.rA)$@00@  ")"g)Āā)b1`I`DqêӞvV*IȀ  I iԿĢ`#`aDĀ+"t) »ćºIi¾I@6°@#֪N B֥I  iǜ0@DI@0@ v@*΀~} ´ " vz Ā  "z Q¢wo "|  g`i` )Ă `Upx W z W|{ WIV W ANq@gD ~ ID) Ić+IiXI+I:²i 9"~Kiª3") I" |66Ğr9I6IIIi "~'Ib I) ĂI IiþIImi "~QBJg¸) 5) I ąIIiI AI Ii¡ "~I I I)5AeH)¹)5I @b) I_I i]aI [AIXI XIRiž M"~LIGޓRI@+kU;UUHzxt@ *5N @b) IIi$IAII Yi "~IMIGQFFJ@+kU⅝@ IDIQNI) IiпIheII) I iIYV½I IiIK´HIIiI?©<œIiI  I ii ”ǔÔǔ"~#ȄjmF1EBE5E3--E3E19 COUNT2 EQU 10 COUNT1 EQU 11 ERRLOC EQU 12 OPCODE EQU 13 UNIT EQU 14 CYL EQU 15 HEAD EQU 16 SECTOR EQU 17 WCOUNT EQU 18 MEMADDR EQU 19 INTADDR EQU 20 DCIOB EQU 21 WPROC EQU 22 CONSTAT EQU 23 DRSTAT EQU IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIID IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIE IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIF IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIH IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJ IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIK IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIL IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII