IMD 1.16: 2/09/2008 13:30:09 84-93720-04 c100 f72004 scout ufdc listing file - part II    @0|)wwЀЀtQql)  " }gA `_l M@IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIOS4 MF282092110292100820921102921 820921102921 .F72004 VOLSCOUT UFDC LISTING FILE - PART I   IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII_l M@iGyy GGG`HZ@ b G`^Y e IQ BBp@;:9 :7P@ G:پN 8!0. * C'xC# b# }B!9 @0DAJL w+™ЀЀΖQA1"   i ž} š} @EEFF)DEۄF8 џ} ԟ} ̟} * `jUBBI,v BI, # @ G9H@pܾrCHC C GTq` Lg"gEXC P+s=胾P+c fQN p $Rxnj  ޔniZ ތ⊞ } }HGž Ÿ@ALS)"$ C k20j.h( +$`%ꂜ\1 !M' y %'+os慾)sY ed|{ @8 o O m J K i gN )V% t%sLn`"E F. F„ D>) =`;nrgy w"G,{Kq1 A&}E*`(t@% ;c  765y342(.OS:: SYS"iwvc Bc A@6<# Ic B# gIjHc r1PAGE 0115 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:01:20.75 TESTS (TEST I) 2895 ****************************** 2896 * 2897 * TEST I - THIS TEST WILL CHECK THE WRITE DATA AND 2898 * READ DATA OPERATIONS FOR MULTIPLE SECTOR 2899  * I/O. A '2 SECTOR' RECORD IS WRITTEN TO THE 2900 * SPECIFIED SECTORS/TRACKS USING THE  2901 * INCREMENTING DATA PATTERN :00-:FF. EACH 2902 * SECTOR IS THEN READ TO VERIFY THE DATA 2903 * PATTERN AND THE TRAILING NULLS. 2904 * 2905 * CALLING SEQUENCE: 2906 * JSK TESTI 2907 * 2908 ****************************** 2909 * 0000087F 2910 TESTI EQU $ 087F 0980 2911 COPY  =:80,A GET CDR TEST DISPLAY 0880 B773 0874 2911+ OR TSTCDR,A OR IN TEST GROUP 0881 0404 2911+ SELP A,CONSL;CDR SEND TO CDR 0882 82D2 08D5 2911+ COPY =' I',A GET TEST LETTER 0883 87 1A 081E 2911+ COPY A,TNUM: SET CURRENT TEST 0884 BF1A 081F 2911+ JST MSGA OUTPUT TITLE 0885 1772 2911+ WORD TSTNUM 'TEST ' 2911+ * 0886 831E 0825 2912 COPY NBYTES,A GET SECTOR SIZE IN BYTES 0887 0E01 2913 SHIFT A,LO,1 MAKE INTO 2 SECTORS 0888 FF6C 0875 2914 JSK BUFINCR INC. DATA PATTERN (2 SECTORS) 0889 BF16 0820 2915 JST SPECIFY  INITIALIZE 088A BF16 0821 2916 JST ERROR DISPLAY ANY ERRORS 0000088B 2917 TESTI2 EQU  $ START OVER POINT 088B 0900 2918 COPY =0,A SET FIRST HEAD NUMBER 088C 876D 087A 2918+ COPY A,HEAD CURRENT HEAD=0 088D 836C 087A 2918+ IHEAD COPY HEAD,A GET CURRENT HEAD 088E C313 0822 2918+ COPY HEADS,Q AND REQUIRED HEADS 088F 4C02 2918+ CLSN Q,=2 BOTH HEADS? 0890 9E83 0894 2918+ JMP $+4 YES, DO THE CODE! 1PAGE 0116 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:01:22.25 TESTS (TEST I) 0891 400A 2918+ CSN A,Q NO , BUT IS HEAD=HEADS? 0892 9E81 0894 2918+ JMP $+2 YES, DO THE CODE! 0893 9EB3 08C7 2918+ JMP HEADI NO MATCH, SKIP THE CODE 0894 BF61 0876 2919 JST RECAL: RECALIBRATE 0895 BF0B 0821 2920 JST ERROR DISPLAY ANY ERRORS 2921 * 0896 830C 0823 2922  COPY TRACKS,A GET STARTING TRACK 0897 870C 0824 2923 TSTI00 COPY A,TRM SET CURRENT TRACK NUM. 0898 BF5E 0877 2924 JST SEEK: DO SEEK OPERATION 0899 BF07 0821 2925 JST ERROR DISPLAY ANY ERRORS 2926 * 089A 835D 0878 2927 COPY SECTORS,A GET STARTING SECTOR 089B 875D 0879 2928 TSTI01 COPY A,SECTOR SET CURRENT SECTOR NUMBER 089C BB5F 087C 2929 CSK A,SECTORS+1 DO RANGE CHECK 089D 9E82 08A0 2930 JMP $+3 IF LES, WRITE DATA 089E 0000 2931 NOP 089F 9E8F 08AF 2932 JMP TSTI02 ELSE READ DATA 08A0 C3AC 08CD 2933 COPY NBYTES,Q GET SECTOR SIZE IN BYTES 08A1 4E01 2934 SHIFT Q,LO,1 MAKE 2 SECTOR SIZE 08A2 FFAB 08CE 2935 JSK WRITES WRITE 2 SECTORS 08A3 BFAB 08CF 2936 JST STATUS CHECK STATUS 08A4 BFAB 08D0 2937  JST ERROR DISPLAY ANY ERRORS 08A5 83AB 08D1 2938 COPY FIRST,A GET 1ST-TIME FLAG 08A6 1143 08AA 2939 JEQ A,$+4 JUMP IF NOT THE 1ST TIME 08A7 0900 2940 COPY =0,A OTHERWISE RESET FLAG 08A8 87A8 08D1 2941 COPY A,FIRST 08A9 9E61 088B 2942 JMP TESTI2 START OVER 08AA 834E 0879 2943 COPY SECTOR,A GET CURRENT SECTOR 08AB 0B02 2944 ADD =2,A  INC. BY 2 SECTORS 08AC BB4F 087C 2945 CSK A,SECTORS+1 DO RANGE CHECK 08AD 9E6D 089B 2946 JMP   TSTI01 STILL MORE TO GO 08AE 0000 2947 NOP DONE 2948 * 08AF 0900 2949 TSTI02 COPY =0,A RESET A-REG. 08B0 87A5 08D6 2950 COPY A,TEMP4 SET FIRST FOR 1 SECTOR 08B1 8346 0878 2951 COPY SECTORS,A GET STARTING SECTOR 1PAGE 0117 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:01:24.00 TESTS (TEST I) 08B2 8746 0879 2952 TSTI03 COPY  A,SECTOR SET SECTOR NUMBER 08B3 FF9E 08D2 2953 JSK READS READ SECTOR OPERATION 08B4 BF9A 08CF  2954 JST STATUS CHECK STATUS 08B5 BF9A 08D0 2955 JST ERROR DISPLAY ANY ERRORS 08B6 839F 08D6 2956 COPY TEMP4,A GET BUFFER COUNT 08B7 1801 2957 AND =1,A MASK IT 08B8 BF9A 08D3 2958 JST BUFCOMP DO BUFFER COMPARE 08B9 BF96 08D0 2959 JST ERROR  DISPLAY ANY ERRORS 08BA DF9B 08D6 2960 IMS TEMP4 INC. BUFFER COUNT 08BB 833D 0879 2961  COPY SECTOR,A GET CURRENT SECTOR 08BC 0B01 2962 ADD =1,A INC. SECTOR NUMBER 08BD BB3E 087C 2963 CSK A,SECTORS+1 DO RANGE CHECK 08BE 9E73 08B2 2964 JMP TSTI03 STILL MORE TO GO 08BF 9E81 08C1 2965 JMP $+2 DONE 08C0 9E71 08B2 2966 JMP TSTI03 STILL MORE TO GO 2967 * 08C1 8392 08D4 2968 COPY TRM,A GET CURRENT TRACK 08C2 0B01 2969  ADD =1,A INC. TRACK NUMBER 08C3 BB39 087D 2970 CSK A,TRACKS+1 DO RANGE CHECK 08C4 9E52 0897 2971 JMP TSTI00 STILL MORE TO GO 08C5 9E81 08C7 2972 JMP $+2 DONE 08C6 9E50 0897 2973 JMP TSTI00 STILL MORE TO GO 08C7 8332 087A 2974 HEADI COPY HEAD,A GET CURRENT HEAD 08C8 0C01 2974+ CLSN A,=1 IF 1 THEN DONE! 08C9 9E82 08CC 2974+ JMP $+3  YES, EXIT 08CA DF2F 087A 2974+ IMS HEAD NO, BUMP HEAD 08CB 9E41 088D 2974+ JMP  IHEAD TRY ANOTHER HEAD 08CC 2309 2975 RSK EXIT 2976 * 000E 2977 LPOOL 08CD 130D NBYTES 08CE 0C5C WRITES 08CF 0E42 STATUS 08D0 0EFA ERROR 08D1 1316 FIRST 08D2 0C7D READS 1PAGE 0118 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:01:25.25 TESTS (TEST I) 08D3 0B66 BUFCOMP 08D4 1310 TRM 08D5 2049 08D6 12FF TEMP4 08D7 08D8 08D9 08DA 1PAGE 0119 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:01:25.25 TESTS (TEST J) 2979 ****************************** 2980 * 2981 * TEST J - THIS TEST WILL CHECK THE WRITE DATA AND  2982 * READ DATA OPERATIONS FOR CROSS CYLINDER 2983 * INTERFERENCE. ALTERNATE TRACKS OF ZEROS 2984 * AND ONES ARE WRITTEN TO THE SPECIFIED 2985 * S ECTORS/TRACKS. THE FIRST REQUESTED TRACK 2986 * WILL BE WRITTEN WITH ZEROS AND THE TRACK  2987 * CONTENTS WILL THEN ALTERNATE. EACH REQUESTED 2988 * TRACK IS THEN READ TO VERIFY EACH SECTOR. 2989 * 2990 * CALLING SEQUENCE: 2991 * JSK TESTJ 2992 * 2993 ****************************** 2994 * 000008DB 2995 TESTJ EQU $ 08DB 0990 2996 COPY =:90,A GET CDR TEST DISPLAY 08DC B717 0874 2996+  OR TSTCDR,A OR IN TEST GROUP 08DD 0404 2996+ SELP A,CONSL;CDR SEND TO CDR 08DE 82D9 0938 2996+ COPY =' J',A GET TEST LETTER 08DF 87D9 0939 2996+ COPY A,TNUM: SET CURRENT TEST 08E0 BFCF 0930 2996+ JST MSGA OUTPUT TITLE 08E1 1772 2996+ WORD TSTNUM 'TEST '  2996+ * 08E2 BFCE 0931 2997 JST SPECIFY INITIALIZE 08E3 BF6C 08D0 2998 JST  ERROR DISPLAY ANY ERRORS 000008E4 2999 TESTJ2 EQU $ START OVER POINT 08E4 0900 3000 COPY =0,A SET FIRST HEAD NUMBER 08E5 8714 087A 3000+ COPY A,HEAD CURRENT HEAD=0  08E6 8313 087A 3000+ JHEAD COPY HEAD,A GET CURRENT HEAD 08E7 C3CA 0932 3000+ COPY HEADS,Q AND REQUIRED HEADS 08E8 4C02 3000+ CLSN Q,=2 BOTH HEADS? 08E9 9E83 08ED 3000+ JMP $+4 YES, DO THE CODE! 08EA 400A 3000+ CSN A,Q NO , BUT IS HEAD=HEADS? 08EB 9E81 08ED 3000+ JMP $+2 YES, DO THE CODE! 1PAGE 0120 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:01:26.75 TESTS (TEST J) 08EC 9EBD 092A 3000+ JMP HEADJ NO MATCH, SKIP THE CODE 08ED BF08 0876 3001 JST RECAL: RECALIBRATE 08EE BF61 08D0 3002 JST ERROR  DISPLAY ANY ERRORS 3003 * 08EF 0901 3004 COPY =1,A NOT ZERO 08F0 87C9 093A 3005 COPY A,BUFR STORE IN BUFF. 08F1 83C1 0933 3006 COPY TRACKS,A GET STARTING TRACK NUM. 08F2 8761 08D4 3007 TSTJ00 COPY A,TRM SET CURRENT TRACK NUM. 08F3 BF03 0877 3008 JST SEEK: DO SEEK OPERATION 08F4 BF5B 08D0 3009 JST ERROR DISPLAY ANY ERRORS 08F5 FFC5 093B 3010  JSK BUFALT DO BUFFER FILL 3011 * 08F6 83BD 0934 3012 COPY SECTORS,A GET STARTING SECTOR NUM. 08F7 87BD 0935 3013 TSTJ01 COPY A,SECTOR SET CURRENT SECTOR NUM. 08F8 C354 08CD 3014  COPY NBYTES,Q GET SECTOR SIZE IN BYTES 08F9 FF54 08CE 3015 JSK WRITES WRITE SECTOR 08FA BF54 08CF 3016 JST STATUS CHECK STATUS 08FB BF54 08D0 3017 JST ERROR DISPLAY ANY ERRORS 08FC 8354 08D1 3018 COPY FIRST,A GET 1ST-TIME FLAG 08FD 1143 0901 3019 JEQ A,$+4   JUMP IF NOT THE 1ST TIME 08FE 0900 3020 COPY =0,A OTHERWISE RESET FLAG 08FF 8751 08D1 3021  COPY A,FIRST 0900 9E63 08E4 3022 JMP TESTJ2 START OVER 0901 83B3 0935 3023 COPY SECTOR,A GET CURRENT SECTOR 0902 0B01 3024 ADD =1,A INC. SECTOR NUM. 0903 BBB8 093C 3025 CSK A,SECTORS+1 DO RANGE CHECK 0904 9E72 08F7 3026 JMP TSTJ01 STILL MORE TO GO 0905 9E81 0907 3027 JMP $+2 DONE 0906 9E70 08F7 3028 JMP TSTJ01 STILL MORE TO GO 3029 * 0907 834C 08D4 3030 COPY TRM,A GET CURRENT TRACK 0908 0B01 3031  ADD =1,A INC. TRACK NUM. 0909 BBB3 093D 3032 CSK A,TRACKS+1 DO RANGE CHECK 090A 9E67 08F2  3033 JMP TSTJ00 STILL MORE TO GO 090B 9E81 090D 3034 JMP $+2 DONE 090C 9E65 08F2 3035 JMP TSTJ00 STILL MORE TO GO 1PAGE 0121 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:01:28.25 TESTS (TEST J) 3036 * 090D BFB0 093E 3037 JST  RECAL: RECALIBRATE 090E BF41 08D0 3038 JST ERROR DISPLAY ANY ERRORS 090F 0901 3039  COPY =1,A NOT ZERO 0910 87A9 093A 3040 COPY A,BUFR STORE IN BUFF. 0911 83A1 0933 3041 COPY TRACKS,A GET STARTING TRACK NUM. 0912 8741 08D4 3042 TSTJ02 COPY A,TRM SET CURRENT TRACK NUM. 0913 BFA2 0936 3043 JST SEEK: DO SEEK OPERATION 0914 BF3B 08D0 3044 JST ERROR DISPLAY ANY ERRORS 0915 FFA5 093B 3045 JSK BUFALT DO BUFFFER FILL 3046 * 0916 839D 0934 3047 COPY SECTORS,A GET STARTING SECTOR NUM. 0917 879D 0935 3048 TSTJ03 COPY A,SECTOR  SET CURRENT SECTOR NUM. 0918 FF39 08D2 3049 JSK READS READ SECTOR 0919 BF35 08CF 3050 JST STATUS CHECK STATUS 091A BF35 08D0 3051 JST ERROR DISPLAY ANY ERRORS 091B 0900 3052 COPY =0,A COMPARE FIRST BUFFER 091C BF36 08D3 3053 JST BUFCOMP DO BUFFER COMPARE 091D BF32 08D0 3054 JST ERROR DISPLAY ANY ERRORS 091E 8396 0935 3055 COPY SECTOR,A  GET CURRENT SECTOR 091F 0B01 3056 ADD =1,A INC. SECTOR NUM. 0920 BB9B 093C 3057 CSK A,SECTORS+1 DO RANGE CHECK 0921 9E75 0917 3058 JMP TSTJ03 STILL MORE TO GO 0922 9E81 0924 3059 JMP $+2 DONE 0923 9E73 0917 3060 JMP TSTJ03 STILL MORE TO GO 3061 * 0924 832F 08D4 3062 COPY TRM,A GET CURRENT TRACK 0925 0B01 3063 ADD =1,A  INC. TRACK NUM. 0926 BB96 093D 3064 CSK A,TRACKS+1 DO RANGE CHECK 0927 9E6A 0912 3065 JMP TSTJ02 STILL MORE TO GO 0928 9E81 092A 3066 JMP $+2 DONE 0929 9E68 0912 3067   JMP TSTJ02 STILL MORE TO GO 092A 838C 0937 3068 HEADJ COPY HEAD,A GET CURRENT HEAD 092B 0C01  3068+ CLSN A,=1 IF 1 THEN DONE! 092C 9E82 092F 3068+ JMP $+3 YES, EXIT 092D DF89 0937 3068+ IMS HEAD NO, BUMP HEAD 1PAGE 0122 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:01:30.00 TESTS (TEST J) 092E 9E37 08E6 3068+ JMP JHEAD TRY ANOTHER HEAD 092F 2309 3069 RSK EXIT 3070 * 0011 3071 LPOOL 0930 10BD MSGA 0931 0B83 SPECIFY 0932 1349 HEADS 0933 1345 TRACKS 0934 1347 SECTORS 0935 1312 SECTOR 0936 0BDC SEEK: 0937 1311 HEAD 0938 204A 0939 1776 TNUM: 093A 17C1 BUFR 093B 0B5E BUFALT 093C 1348 093D 1346 093E 0BC1 RECAL: 093F 0940 1PAGE 0123 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:01:30.25 TESTS (TECH TEST) 3073 ****************************** 3074 * 3075 * TECH TEST - THE TECH TEST WILL EXECUTE REPEATEDLY 1 3076 * OF THE FOLLOWING SELECTED FUNCTIONS.  3077 * IF AN ERROR IS DETECTED, AN 'E' WILL BLINK 3078 * IN THE UPPER NIBBLE OF THE CONSOLE DATA REG. 3079 * 3080 * READ MAIN STATUS REGISTER 3081 *  INITIALIZE UFDC 3082 * READ DATA 3083 * READ DELETED DATA 3084 *  READ ID 3085 * WRITE DATA 3086 * WRITE DELETED DATA 3087 * SCAN EQUAL 3088 * SCAN LOW OR EQUAL 3089 * SCAN HIGH OR EQUAL 3090 * RECALIBRATE 3091 * SEEK 3092 * SENSE DRIVE STATUS 3093 * SENSE INTERRUPT STATUS 3094 * FORMAT TRACK 3095 * INVALID COMMAND 3096 * WRITE DMA ADDRESS POINTER 3097 * WRITE INTERRUPT VECTOR ADDRESS 3098 * WRITE DMA BYTE COUNT REGISTER 3099 * WRITE MODE REGISTER 3100 * 'SAL' INSTRUCTION 3101 * 3102 ****************************** 3103 * 00000941 3104 TECHT EQU $  0941 0900 3105 COPY =0,A RESET A-REG. 0942 0200 3106 OUT A,CONSL;SSW RESET SENSE SWITCH 0943 83BE 0982 3107 COPY TSTFUNC,A GET FUNCTION 0944 0E31 3108 SHIFT A,LO,4 SHIFT FOR CDR 1PAGE 0124 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:01:31.50 TESTS (TECH TEST) 0945 1906 3109 OR =6,A OR IN TECH TEST 0946 0404 3110  SELP A,CONSL;CDR SEND TO CDR 0947 A3BA 0982 3111 COPY TSTFUNC,X GET FUNCTION AGAIN 0948 AABD 0986 3112 ADD =TTMAD,X ADD IN MESS. TABLE ADD. 0949 8080 0000 3113 COPY 0(X),A GET ACTU AL MESS. ADD. 094A 8681 094C 3114 COPY A,$+2 STORE FOR DISPLAY 094B BF64 0930 3115 JST MSGA OUTPUT MESS 094C 1658 3116 WORD TCHM010 094D 83B4 0982 3117 COPY TSTFUNC,A  GET FUNCTION 094E 115C 096B 3118 JEQ A,TECHT1 IF 0, JUMP 094F 0D14 3119 CSK A,=20  DO RANGE CHECK 0950 0D10 3120 CSK A,=16 DITTO 0951 9E82 0954 3121 JMP $+3 IF NONE OF THE ABOVE, JUMP 0952 9E98 096B 3122 JMP TECHT1 0953 9E97 096B 3123 JMP TECHT1 0954 83B2 0987 3124 COPY UNITS,A GET UNIT TO TEST 0955 0AFF 3125 SUB =1,A  GENERATE CORRECT UNIT NUM. 0956 87B1 0988 3126 COPY A,UNIT SET UNIT NUMBER 0957 845A 001A 3127  COPY A,UF:US(Y) DITTO 0958 BF58 0931 3128 JST SPECIFY INITIALIZE 0959 BFA9 0983 3129  JST ERROR BLINK THE 'E' IN THE CDR 095A 090A 3130 COPY =UF:RECAL,A GET RECAL FUNCTION CODE 095B 8453 0013 3131 COPY A,UF:FC(Y) STORE FUNCTION CODE 095C FFA7 0984 3132 JSK UFDC:EX DO IT 095D BFA7 0985 3133 JST STATUS CHECK STATUS 095E BFA4 0983 3134 JST ERROR  BLINK THE 'E' IN THE CDR. 095F 82A9 0989 3135 COPY =DLYLONG,A SET A-REG. FOR LONG DELAY 0960 FFA9 098A 3136 JSK WAIT DO WAIT 0961 BFA3 0985 3137 JST STATUS CHECK STATUS 0962 BFA0 0983 3138 JST ERROR BLINK THE 'E' IN THE CDR. 0963 090D 3139 COPY =UF:SIS,A GET SIS FUNCTION CODE 0964 8453 0013 3140 COPY A,UF:FC(Y) STORE FUNCTION CODE 0965 FF9E 0984 3141 JSK UFDC:EX DO IT 0966 2902 3142 COPY =2,X SET STATUS FLAG FOR RECALIBRATE 0967 BF9D 0985 3143 JST STATUS CHECK STATUS 0968 BF9A 0983 3144 JST ERROR BLINK THE 'E' IN THE CDR. 1PAGE 0125 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:01:33.50 TESTS (TECH TEST) 0969 FFA1 098B 3145 JSK BUFUSER INITIALIZE BUFFER 096A 8397 0982 3146 COPY  TSTFUNC,A GET FUNCTION 096B 030A 3147 TECHT1 XNX A INDEX INTO SPATTER TABLE 096C 9F80 096D 3148 JMP *$+1 DO IT TO IT 096D 098C 3149 WORD TCHT010 READ MAIN STATUS REG. 096E 0990 3150 WORD TCHT020 INITIALIZE UFDC 096F 0998 3151 WORD TCHT030 READ DATA 0970 0998 3152 WORD TCHT040 READ DELETED DATA 0971 09C6 3153 WORD TCHT050  READ ID 0972 0A21 3154 WORD TCHT070 WRITE DATA 0973 0A21 3155 WORD TCHT080  WRITE DELETED DATA 0974 0A4E 3156 WORD TCHT090 SCAN EQUAL 0975 0A4E 3157 WORD  TCHT100 SCAN LOW OR EQUAL 0976 0A4E 3158 WORD TCHT110 SCAN HIGH OR EQUAL 0977 0A87 31 59 WORD TCHT120 RECALIBRATE 0978 0A99 3160 WORD TCHT130 SEEK 0979 0ABD 3161 WORD TCHT140 SENSE DRIVE STATUS 097A 0A87 3162 WORD TCHT120 SENSE INT. STATUS (SAME AS RECAL) 097B 0AD6 3163 WORD TCHT160 FORMAT TRACK 097C 0AF7 3164 WORD TCHT170 INVALID COMMAND 097D 0AFF 3165 WORD TCHT180 WRITE DMA ADD. POINTER 097E 0AFF 3166  WORD TCHT190 WRITE INT. VECTOR ADD. 097F 0AFF 3167 WORD TCHT200 WRITE BYTE COUNT 0980 0AFF 3168 WORD TCHT210 WRITE MODE REG. 0981 0B0C 3169 WORD TCHT220 'SAL' INSTRUCTION 3170 * 000A 3171 LPOOL 0982 1308 TSTFUNC 0983 0EFA ERROR 0984 0CE7 UFDC:EX 0985 0E42 STATUS 0986 1411 TTMAD 0987 1340 UNITS 0988 1313 UNIT 0989 FA24 DLYLONG 098A 0DCE WAIT 1PAGE 0126 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:01:34.75 TESTS (TECH TEST) 098B 0B3B BUFUSER 1PAGE 0127 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:01:34.75 TESTS (TECH TEST) 3173 * 3174 * READ MAIN STATUS REG. 3175 * 0000098C 3176 TCHT010 EQU $ 098C 16C1 098E 3177 JF SS,$+2 IF SSW OFF, DO IT 098D 9FB1 09BF 3178  JMP TCHTEND ELSE EXIT. 098E FFB3 09C2 3179 JSK RDMNST DO IT 098F 9E7C 098C 3180  JMP TCHT010 LOOP BACK 3181 * 3182 * INITIALIZE UFDC 3183 *  00000990 3184 TCHT020 EQU $ 0990 0901 3185 COPY =UF:INIT,A SPECIFY OP CODE 0991 8453 0013  3186 COPY A,UF:FC(Y) STORE FUNCTION CODE 0992 16C1 0994 3187 TCHT021 JF SS,$+2 IF SSW OFF, DO IT. 0993 9FAB 09BF 3188 JMP TCHTEND ELSE EXIT. 0994 FF6F 0984 3189 JSK UFDC:EX DO IT 0995 BF6F 0985 3190 JST STATUS CHECK STATUS 0996 BF6C 0983 3191 JST ERROR BLINK THE 'E' IN THE CDR. 0997 9E7A 0992 3192 JMP TCHT021 LOOP BACK 3193 *  3194 * READ DATA 3195 * READ DELETED DATA 3196 * 00000998 3197 TCHT030 EQU  $ 00000998 3198 TCHT040 EQU $ 0998 0900 3199 COPY =0,A SET FIRST HEAD NUMBER 0999 871D 0937 3199+ COPY A,HEAD CURRENT HEAD=0 099A 831C 0937 3199+ TCHT041 COPY HEAD,A GET CURRENT HEAD 099B C316 0932 3199+ COPY HEADS,Q AND REQUIRED HEADS 099C 4C02 3199+ CLSN Q,=2 BOTH HEADS? 099D 9E83 09A1 3199+ JMP $+4 YES, DO THE CODE! 099E 400A 3199+  CSN A,Q NO , BUT IS HEAD=HEADS? 099F 9E81 09A1 3199+ JMP $+2 YES, DO THE CODE! 09A0 9E98 09B9 3199+ JMP TCHT044 NO MATCH, SKIP THE CODE 09A1 8311 0933 3200 COPY TRACKS,A   GET STARTING TRACK 1PAGE 0128 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:01:36.00 TESTS (TECH TEST) 09A2 879D 09C0 3201 TCHT042 COPY A,TRM SET CURRENT TRACK NUM. 09A3 BF12 0936 3202  JST SEEK: DO SEEK OPERATION 09A4 BF5E 0983 3203 JST ERROR BLINK THE 'E' IN THE CDR. 09A5 830E 0934 3204 COPY SECTORS,A GET STARTING SECTOR 09A6 870E 0935 3205 TCHT043 COPY A,SECTOR  SET CURRENT SECTOR NUM. 09A7 16C1 09A9 3206 JF SS,$+2 IF SSW OFF, DO IT. 09A8 9F96 09BF 3207  JMP TCHTEND ELSE EXIT. 09A9 8358 0982 3208 COPY TSTFUNC,A GET FUNCTION CODE 09AA FF98 09C3 3209 JSK READS+2 DO IT 09AB BF59 0985 3210 JST STATUS CHECK STATUS 09AC BF56 0983 3211 JST ERROR BLINK THE 'E' IN THE CDR. 09AD 8307 0935 3212 COPY SECTOR,A GET CURRENT SECTOR 09AE 0B01 3213 ADD =1,A INC. SECTOR NUM. 09AF BB0C 093C 3214 CSK A,SECTORS+1 DO RANGE CHECK 09B0 9E75 09A6 3215 JMP TCHT043 STILL MORE TO GO 09B1 9E81 09B3 3216  JMP $+2 DONE 09B2 9E73 09A6 3217 JMP TCHT043 STILL MORE TO GO 09B3 838C 09C0 3218  COPY TRM,A GET CURRENT TRACK 09B4 0B01 3219 ADD =1,A INC. TRACK NUM. 09B5 BB8E 09C4 3220 CSK A,TRACKS+1 DO RANGE CHECK 09B6 9E6B 09A2 3221 JMP TCHT042 STILL MORE TO GO 09B7 9E81 09B9 3222 JMP $+2 DONE 09B8 9E69 09A2 3223 JMP TCHT042 STILL MORE TO GO 09B9 8387 09C1 3224 TCHT044 COPY HEAD,A GET CURRENT HEAD 09BA 0C01 3224+ CLSN A,=1  IF 1 THEN DONE! 09BB 9E82 09BE 3224+ JMP $+3 YES, EXIT 09BC DF84 09C1 3224+ IMS  HEAD NO, BUMP HEAD 09BD 9E5C 099A 3224+ JMP TCHT041 TRY ANOTHER HEAD 09BE 9E59 0998 3225  JMP TCHT040 LOOP BACK 3226 * 0007 3227 LPOOL 09BF 0B11 TCHTEND 09C0 1310 TRM 09C1 1311 HEAD 09C2 0E34 RDMNST 09C3 0C7F 1PAGE 0129 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:01:37.50 TESTS (TECH TEST) 09C4 1346 09C5 1PAGE 0130 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:01:37.50 TESTS (TECH TEST) 3229 * 3230 * READ ID 3231 * 000009C6 3232 TCHT050 EQU $ 09C6 0900 3233 COPY =0,A SET FIRST HEAD NUMBER 09C7 8779 09C1 3233+ COPY A,HEAD CURRENT HEAD=0 09C8 8378 09C1 3233+ TCHT051 COPY HEAD,A GET CURRENT HEAD 09C9 C3C8 0A12 3233+ COPY HEADS,Q AND REQUIRED HEADS 09CA 4C02 3233+ CLSN Q,=2 BOTH HEADS? 09CB 9E83 09CF 3233+ JMP $+4 YES, DO THE CODE! 09CC 400A 3233+ CSN A,Q NO , BUT IS HEAD=HEADS? 09CD 9E81 09CF 3233+ JMP $+2   YES, DO THE CODE! 09CE 9E93 09E2 3233+ JMP TCHT053 NO MATCH, SKIP THE CODE 09CF 83C3 0A13 3234 COPY TRACKS,A GET STARTING TRACK 09D0 876F 09C0 3235 TCHT052 COPY A,TRM SET CURRENT TRACK 09D1 16C1 09D3 3236 JF SS,$+2 IF SSW OFF, DO IT. 09D2 9F6C 09BF 3237 JMP TCHTEND ELSE EXIT. 09D3 BFC0 0A14 3238 JST SEEK: DO SEEK OPERATION 09D4 BF2E 0983 3239 JST ERROR BLINK THE 'E' IN THE CDR. 09D5 0904 3240 COPY =UF:RDID,A READ ID FUNCTION CODE 09D6 8453 0013 3241 COPY A,UF:FC(Y) STORE FUNCTION CODE 09D7 83C2 0A1A 3242 COPY DENSITY,A GET DENSITY FLAG 09D8 845C 001C 3243 COPY A,UF:MF(Y) STORE FLAG 09D9 FF2A 0984 3244 JSK UFDC:EX DO IT 09DA BF2A 0985 3245 JST STATUS CHECK STATUS 09DB BF27 0983 3246 JST ERROR BLINK THE 'E' IN THE CDR. 09DC 8363 09C0 3247 COPY TRM,A GET CURRENT TRACK 09DD 0B01 3248  ADD =1,A INC. TRACK NUM. 09DE BB65 09C4 3249 CSK A,TRACKS+1 DO RANGE CHECK 09DF 9E70 09D0 3250 JMP TCHT052 STILL MORE TO GO 09E0 9E81 09E2 3251 JMP $+2 DONE 09E1 9E6E 09D0 3252 JMP TCHT052 STILL MORE TO GO 09E2 835E 09C1 3253 TCHT053 COPY HEAD,A GET CURRENT HEAD 09E3 0C01 3253+ CLSN A,=1 IF 1 THEN DONE! 09E4 9E82 09E7 3253+ JMP $+3  YES, EXIT 09E5 DF5B 09C1 3253+ IMS HEAD NO, BUMP HEAD 1PAGE 0131 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:01:39.00 TESTS (TECH TEST) 09E6 9E61 09C8 3253+ JMP TCHT051 TRY ANOTHER HEAD 09E7 9E5E 09C6 3254 JMP TCHT050 LOOP BACK 3255 *  3256 * READ TRACK (THIS FUNCTION NOT IMPLEMENTED) 3257 * 000009E8 3258 TCHT060 EQU $ 09E8 82B2 0A1B 3259 COPY =DEFSTR,A GET DEFAULT START ADD. 09E9 87B2 0A1C 3260 COPY A,QERY19 NO MORE 'DEBUG'! 09EA 82B2 0A1D 3261 COPY =ENDPROG,A GET BUFF. ADD. 09EB 8457 0017 3262 COPY A,UF:DMA(Y) SET DMA ADD. 09EC 0900 3263 COPY =0,A RESET A-REG. 09ED A3A7 0A15 3264  COPY NBYTES,X GET SECTOR SIZE 09EE 2700 3265 MUL SC,AX GENERATE TRACK SIZE 09EF 130E 09F0 A458 0018 3266 COPY X,UF:BCT(Y) BYTE COUNT 09F1 83A4 0A16 3267 COPY SECTORS,A GET STARTING SECTOR 09F2 87A4 0A17 3268 COPY A,SECTOR SET IT 000009F3 3269 TCHT061 EQU $ 09F3 0900 3270 COPY =0,A SET FIRST HEAD NUMBER 09F4 874C 09C1 3270+ COPY A,HEAD CURRENT HEAD=0 09F5 834B 09C1 3270+ TCHT062 COPY HEAD,A GET CURRENT HEAD 09F6 C39B 0A12 3270+ COPY HEADS,Q AND REQUIRED HEADS 09F7 4C02 3270+ CLSN Q,=2 BOTH HEADS? 09F8 9E83 09FC 3270+   JMP $+4 YES, DO THE CODE! 09F9 400A 3270+ CSN A,Q NO , BUT IS HEAD=HEADS? 09FA 9E81 09FC 3270+ JMP $+2 YES, DO THE CODE! 09FB 9E90 0A0C 3270+ JMP TCHT064 NO MATCH, SKIP THE CODE 09FC 8396 0A13 3271 COPY TRACKS,A GET STARTING TRACK 09FD 8742 09C0 3272 TCHT063 COPY  A,TRM SET CURRENT TRACK NUM. 09FE BF95 0A14 3273 JST SEEK: DO SEEK OPERATION 09FF BF03 0983 3274 JST ERROR BLINK THE 'E' IN THE CDR. 0A00 16C1 0A02 3275 JF SS,$+2 IF SSW OFF, DO IT. 0A01 9F3D 09BF 3276 JMP TCHTEND ELSE EXIT. 3277 * COPY =UF:RDTR,A READ TRACK FUNCTION CODE 0A02 8453 0013 3278 COPY A,UF:FC(Y) STORE FUNCTION CODE 0A03 FF9A 0A1E 3279 JSK  READS1 DO IT 1PAGE 0132 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:01:40.50 TESTS (TECH TEST) 0A04 BF93 0A18 3280 JST STATUS CHECK STATUS 0A05 BF93 0A19 3281  JST ERROR BLINK THE 'E' IN THE CDR. 0A06 8339 09C0 3282 COPY TRM,A GET CURRENT TRACK 0A07 0B01 3283 ADD =1,A INC. TRACK NUM. 0A08 BB3B 09C4 3284 CSK A,TRACKS+1 DO RANGE CHECK 0A09 9E73 09FD 3285 JMP TCHT063 STILL MORE TO GO 0A0A 9E81 0A0C 3286 JMP $+2  DONE 0A0B 9E71 09FD 3287 JMP TCHT063 STILL MORE TO GO 0A0C 8334 09C1 3288 TCHT064 COPY HEAD,A GET CURRENT HEAD 0A0D 0C01 3288+ CLSN A,=1 IF 1 THEN DONE! 0A0E 9E82 0A11 3288+  JMP $+3 YES, EXIT 0A0F DF31 09C1 3288+ IMS HEAD NO, BUMP HEAD 0A10 9E64 09F5 3288+ JMP TCHT062 TRY ANOTHER HEAD 0A11 9E61 09F3 3289 JMP TCHT061 LOOP BACK  3290 * 000F 3291 LPOOL 0A12 1349 HEADS 0A13 1345 TRACKS 0A14 0BDC SEEK: 0A15 130D NBYTES 0A16 1347 SECTORS 0A17 1312 SECTOR 0A18 0E42 STATUS 0A19 0EFA ERROR 0A1A 134A DENSITY 0A1B 0200 DEFSTR 0A1C 0277 QERY19 0A1D 2041 ENDPROG 0A1E 0C84 READS1 0A1F 0A20 1PAGE 0133 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:01:41.50 TESTS (TECH TEST) 3293 * 3294 * WRITE DATA 3295 * WRITE DELETED DATA 3296 * 00000A21 3297 TCHT070 EQU $ 00000A21 3298 TCHT080 EQU $ 0A21 0900 3299 COPY =0,A SET FIRST HEAD NUMBER 0A22 871E 09C1 3299+ COPY  A,HEAD CURRENT HEAD=0 0A23 831D 09C1 3299+ TCHT081 COPY HEAD,A GET CURRENT HEAD 0A24 C36D 0A12 3299+  COPY HEADS,Q AND REQUIRED HEADS 0A25 4C02 3299+ CLSN Q,=2 BOTH HEADS? 0A26 9E83 0A2A 3299+ JMP $+4 YES, DO THE CODE! 0A27 400A 3299+ CSN A,Q NO , BUT IS HEAD=HEADS? 0A28 9E81 0A2A 3299+ JMP $+2 YES, DO THE CODE! 0A29 9E99 0A43 3299+ JMP TCH  T084 NO MATCH, SKIP THE CODE 0A2A 8368 0A13 3300 COPY TRACKS,A GET STARTING TRACK 0A2B 8714 09C0 3301 TCHT082 COPY A,TRM SET CURRENT TRACK NUM. 0A2C BF67 0A14 3302 JST SEEK: DO SEEK OPERATION 0A2D BF6B 0A19 3303 JST ERROR BLINK THE 'E' IN THE CDR. 0A2E 8367 0A16 3304 COPY SECTORS,A GET STARTING SECTOR 0A2F 8767 0A17 3305 TCHT083 COPY A,SECTOR SET CURRENT SECTOR 0A30 16C1 0A32 3306  JF SS,$+2 IF SSW OFF, DO IT. 0A31 9F0D 09BF 3307 JMP TCHTEND ELSE EXIT. 0A32 C362 0A15 3308 COPY NBYTES,Q SET SECTOR LENGTH 0A33 8395 0A49 3309 COPY TSTFUNC,A GET FUNCTION CODE 0A34 FF96 0A4B 3310 JSK WRITES1 DO IT 0A35 BF62 0A18 3311 JST STATUS CHECK STATUS 0A36 BF62 0A19 3312 JST ERROR BLINK THE 'E' IN THE CDR. 0A37 835F 0A17 3313 COPY  SECTOR,A GET CURRENT SECTOR 0A38 0B01 3314 ADD =1,A INC. SECTOR NUM. 0A39 BB92 0A4C 3315 CSK A,SECTORS+1 DO RANGE CHECK 0A3A 9E74 0A2F 3316 JMP TCHT083 STILL MORE TO GO 0A3B 9E81 0A3D 3317 JMP $+2 DONE 0A3C 9E72 0A2F 3318 JMP TCHT083 STILL MORE TO GO 0A3D 8302 09C0 3319 COPY TRM,A GET CURRENT TRACK 0A3E 0B01 3320 ADD =1,A INC. TRACK NUM. 1PAGE 0134 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:01:43.25  TESTS (TECH TEST) 0A3F BB8D 0A4D 3321 CSK A,TRACKS+1 DO RANGE CHECK 0A40 9E6A 0A2B 3322 JMP  TCHT082 STILL MORE TO GO 0A41 9E81 0A43 3323 JMP $+2 DONE 0A42 9E68 0A2B 3324 JMP TCHT082 STILL MORE TO GO 0A43 8386 0A4A 3325 TCHT084 COPY HEAD,A GET CURRENT HEAD 0A44 0C01 3325+ CLSN A,=1 IF 1 THEN DONE! 0A45 9E82 0A48 3325+ JMP $+3 YES, EXIT 0A46 DF83 0A4A 3325+ IMS HEAD NO, BUMP HEAD 0A47 9E5B 0A23 3325+ JMP TCHT081 TRY ANOTHER HEAD 0A48 9E58 0A21 3326 JMP TCHT080 LOOP BACK 3327 * 0005 3328 LPOOL 0A49 1308 TSTFUNC 0A4A 1311 HEAD 0A4B 0C5E WRITES1 0A4C 1348 0A4D 1346 1PAGE 0135 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:01:43.75 TESTS (TECH TEST) 3330 *  3331 * SCAN EQUAL 3332 * SCAN LOW OR EQUAL 3333 * SCAN HIGH OR EQUAL 3334 * 00000A4E 3335 TCHT090 EQU $ 00000A4E 3336 TCHT100 EQU $ 00000A4E 3337 TCHT110 EQU $ 0A4E 0900 3338 COPY =0,A SET FIRST HEAD NUMBER 0A4F 877A 0A4A 3338+ COPY A,HEAD CURRENT HEAD=0 0A50 8379 0A4A 3338+ TCHT111 COPY HEAD,A GET CURRENT HEAD 0A51 C340 0A12 3338+  COPY HEADS,Q AND REQUIRED HEADS 0A52 4C02 3338+ CLSN Q,=2 BOTH HEADS? 0A53 9E83 0A57   3338+ JMP $+4 YES, DO THE CODE! 0A54 400A 3338+ CSN A,Q NO , BUT IS HEAD=HEADS? 0A55 9E81 0A57 3338+ JMP $+2 YES, DO THE CODE! 0A56 9EA4 0A7B 3338+ JMP TCHT117 NO MATCH, SKIP THE CODE 0A57 833B 0A13 3339 COPY TRACKS,A GET STARTING TRACK 0A58 87A8 0A81 3340  TCHT112 COPY A,TRM SET CURRENT TRACK NUM. 0A59 BF3A 0A14 3341 JST SEEK: DO SEEK OPERATION 0A5A BF3E 0A19 3342 JST ERROR BLINK THE 'E' IN THE CDR. 0A5B 833A 0A16 3343 COPY SECTORS,A GET STARTING SECTOR 0A5C 873A 0A17 3344 TCHT113 COPY A,SECTOR SET CURRENT SECTOR NUM. 0A5D 16C1 0A5F 3345 JF SS,$+2 IF SSW ON, DO IT. 0A5E 9FA3 0A82 3346 JMP TCHTEND ELSE EXIT. 0A5F C369 0A49 3347 COPY TSTFUNC,Q GET FUNCTION CODE 0A60 8331 0A12 3348 COPY HEADS,A GET HEAD NUM. 0A61 0C02 3349 CLSN A,=2 BOTH HEADS? 0A62 9E82 0A65 3350 JMP TCHT114 YES, SCAN BOTH SIDES, MT=1 0A63 0900 3351 COPY =0,A NO, SCAN ONE SIDE, MT=0 0A64 9E88 0A6D 3352  JMP TCHT115 SCAN - 1 SECTOR 0A65 8364 0A4A 3353 TCHT114 COPY HEAD,A GET CURRENT HEAD 0A66 1141 0A68 3354 JEQ A,$+2 IF ZERO, DO IT 0A67 9E88 0A70 3355 JMP TCHT116 ELSE DON'T  0A68 832E 0A17 3356 COPY SECTOR,A GET CURRENT SECTOR 0A69 BB99 0A83 3357 CSK A,SC  EQUAL TO SECTORS/TRACK? 1PAGE 0136 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:01:45.50 TESTS (TECH TEST) 0A6A 9E85 0A70 3358 JMP TCHT116 NO, SKIP 0A6B 0000 3359 NOP 0A6C 0901 3360 COPY =1,A SCAN - 2 SECTORS 0A6D FF96 0A84 3361 TCHT115 JSK SCAN1  DO IT 0A6E BF29 0A18 3362 JST STATUS CHECK STATUS 0A6F BF29 0A19 3363 JST ERROR  BLINK THE 'E' IN THE CDR. 0A70 8326 0A17 3364 TCHT116 COPY SECTOR,A GET CURRENT SECTOR 0A71 0B01 3365  ADD =1,A INC. SECTOR NUM. 0A72 BB59 0A4C 3366 CSK A,SECTORS+1 EQUAL TO MAX. SECTOR? 0A73 9E68 0A5C 3367 JMP TCHT113 NO, TRY SOME MORE 0A74 0000 3368 NOP DONE 0A75 838B 0A81 3369 COPY TRM,A GET CURRENT TRACK 0A76 0B01 3370 ADD =1,A  INC. TRACK NUM. 0A77 BB55 0A4D 3371 CSK A,TRACKS+1 DO RANGE CHECK 0A78 9E5F 0A58 3372 JMP  TCHT112 STILL MORE TO GO 0A79 9E81 0A7B 3373 JMP $+2 DONE 0A7A 9E5D 0A58 3374 JMP  TCHT112 STILL MORE TO GO 0A7B 834E 0A4A 3375 TCHT117 COPY HEAD,A GET CURRENT HEAD 0A7C 0C01 3375+ CLSN A,=1 IF 1 THEN DONE! 0A7D 9E82 0A80 3375+ JMP $+3 YES, EXIT 0A7E DF4B 0A4A 3375+ IMS HEAD NO, BUMP HEAD 0A7F 9E50 0A50 3375+ JMP TCHT111 TRY ANOTHER HEAD   0A80 9E4D 0A4E 3376 JMP TCHT110 LOOP BACK 3377 * 0006 3378 LPOOL 0A81 1310 TRM 0A82 0B11 TCHTEND 0A83 130E SC 0A84 0BFE SCAN1 0A85 0A86 1PAGE 0137 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:01:46.50 TESTS (TECH TEST) 3380 * 3381 * RECALIBRATE 3382 * SENSE INTERRUPT STATUS 3383 * 00000A87 3384 TCHT120 EQU $ 0A87 16C1 0A89 3385 JF SS,$+2 IF SSW OFF, DO IT. 0A88 9F79 0A82 3386 JMP TCHTEND ELSE EXIT. 0A89 090A 3387 COPY =UF:RECAL,A FUNCTION CODE 0A8A 8453 0013 3388 COPY  A,UF:FC(Y) STORE IT 0A8B FFA8 0AB4 3389 JSK UFDC:EX DO IT 0A8C BF0B 0A18 3390 JST STATUS CHECK STATUS 0A8D BF0B 0A19 3391 JST ERROR BLINK THE 'E' IN THE CDR. 0A8E 82AB 0ABA 3392 COPY =DLYLONG,A SET A-REG. FOR LONG DELAY 0A8F FFAB 0ABB 3393 JSK WAIT DO WAIT 0A90 BF07 0A18 3394 JST STATUS CHECK STATUS 0A91 BF07 0A19 3395 JST ERROR BLINK THE 'E' IN THE CDR. 0A92 090D 3396 COPY =UF:SIS,A S. I. S. 0A93 8453 0013 3397 COPY A,UF:FC(Y) STORE IT 0A94 FF9F 0AB4 3398 JSK UFDC:EX DO IT 0A95 2902 3399 COPY =2,X  SET STATUS-CHECK FLAG FOR RECALIBRATE 0A96 BF9E 0AB5 3400 JST STATUS CHECK STATUS 0A97 BF9E 0AB6 3401 JST ERROR BLINK THE 'E' IN THE CDR. 0A98 9E6E 0A87 3402 JMP TCHT120 LOOP BACK 3403 * 3404 * SEEK 3405 * 00000A99 3406 TCHT130 EQU $ 0A99 0900 3407 COPY =0,A SET FIRST HEAD NUMBER 0A9A 872F 0A4A 3407+ COPY A,HEAD  CURRENT HEAD=0 0A9B 832E 0A4A 3407+ TCHT131 COPY HEAD,A GET CURRENT HEAD 0A9C C39A 0AB7 3407+ COPY  HEADS,Q AND REQUIRED HEADS 0A9D 4C02 3407+ CLSN Q,=2 BOTH HEADS? 0A9E 9E83 0AA2 3407+  JMP $+4 YES, DO THE CODE! 0A9F 400A 3407+ CSN A,Q NO , BUT IS HEAD=HEADS? 0AA0 9E81 0AA2 3407+ JMP $+2 YES, DO THE CODE! 0AA1 9E8C 0AAE 3407+ JMP TCHT133 NO MATCH, SKIP THE CODE 1PAGE 0138 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:01:48.00 TESTS (TECH TEST) 0AA2 8395 0AB8 3408 COPY TRACKS,A GET STARTING TRACK 0AA3 875D 0A81 3409 TCHT132 COPY A,TRM SET CURRENT TRACK NUM. 0AA4 16C1 0AA6 3410 JF SS,$+2 IF SSW OFF, DO IT. 0AA5 9EEB 0B11 3411 JMP TCHTEND ELSE EXIT. 0AA6 BF92 0AB9 3412 JST SEEK: DO A SEEK 0AA7 BF8E 0AB6 3413 JST ERROR BLINK THE 'E' IN THE CDR. 0AA8 8358 0A81 3414 COPY TRM,A GET CURRENT TRACK 0AA9 0B01 3415 ADD =1,A INC. TRACK NUM. 0AAA BB22 0A4D 3416   CSK A,TRACKS+1 DO RANGE CHECK 0AAB 9E77 0AA3 3417 JMP TCHT132 STILL MORE TO GO 0AAC 9E81 0AAE  3418 JMP $+2 DONE 0AAD 9E75 0AA3 3419 JMP TCHT132 STILL MORE TO GO 0AAE 831B 0A4A 3420 TCHT133 COPY HEAD,A GET CURRENT HEAD 0AAF 0C01 3420+ CLSN A,=1 IF 1 THEN DONE! 0AB0 9E82 0AB3 3420+ JMP $+3 YES, EXIT 0AB1 DF18 0A4A 3420+ IMS HEAD NO, BUMP HEAD 0AB2 9E68 0A9B 3420+ JMP TCHT131 TRY ANOTHER HEAD 0AB3 9E65 0A99 3421 JMP TCHT130 LOOP BACK 3422 * 0009 3423 LPOOL 0AB4 0CE7 UFDC:EX 0AB5 0E42 STATUS 0AB6 0EFA ERROR 0AB7 1349 HEADS 0AB8 1345 TRACKS 0AB9 0BDC SEEK: 0ABA FA24 DLYLONG 0ABB 0DCE WAIT 0ABC 1PAGE 0139 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:01:49.00 TESTS (TECH TEST) 3425 * 3426 * SENSE DRIVE STATUS 3427 * 00000ABD 3428 TCHT140 EQU $ 0ABD C30B 0A49 3429 COPY TSTFUNC,Q GET FUNCTION CODE 0ABE C453 0013 3430 COPY Q,UF:FC(Y) STORE FUNCTION CODE 00000ABF 3431 TCHT151 EQU $ 0ABF 0900 3432 COPY =0,A SET FIRST HEAD NUMBER 0AC0 8709 0A4A 3432+ COPY A,HEAD CURRENT HEAD=0 0AC1 8308 0A4A 3432+ TCHT152 COPY HEAD,A GET CURRENT HEAD 0AC2 C374 0AB7 3432+ COPY HEADS,Q AND REQUIRED HEADS 0AC3 4C02 3432+ CLSN  Q,=2 BOTH HEADS? 0AC4 9E83 0AC8 3432+ JMP $+4 YES, DO THE CODE! 0AC5 400A 3432+  CSN A,Q NO , BUT IS HEAD=HEADS? 0AC6 9E81 0AC8 3432+ JMP $+2 YES, DO THE CODE! 0AC7 9E88 0AD0 3432+ JMP TCHT153 NO MATCH, SKIP THE CODE 0AC8 16C1 0ACA 3433 JF SS,$+2  IF SSW OFF, DO IT. 0AC9 9EC7 0B11 3434 JMP TCHTEND ELSE EXIT. 0ACA 83A9 0AF4 3435 COPY  HEAD,A GET HEAD 0ACB 8441 0001 3436 COPY A,UF:HD(Y) STORE HEAD ADD. 0ACC FF67 0AB4 3437 JSK UFDC:EX DO IT 0ACD 2900 3438 COPY =0,X SET STATUS FLAG FOR NEITHER SEEK NOR RECAL 0ACE BF66 0AB5 3439 JST STATUS CHECK STATUS 0ACF BF66 0AB6 3440 JST ERROR BLINK THE 'E' IN THE CDR. 0AD0 83A3 0AF4 3441 TCHT153 COPY HEAD,A GET CURRENT HEAD 0AD1 0C01 3441+ CLSN  A,=1 IF 1 THEN DONE! 0AD2 9E82 0AD5 3441+ JMP $+3 YES, EXIT 0AD3 DFA0 0AF4 3441+  IMS HEAD NO, BUMP HEAD 0AD4 9E6C 0AC1 3441+ JMP TCHT152 TRY ANOTHER HEAD 0AD5 9E69 0ABF  3442 JMP TCHT151 LOOP BACK 3443 * 3444 * FORMAT 3445 * 00000AD6 3446 TCHT160 EQU $ 0AD6 0900 3447 COPY =0,A SET FIRST HEAD NUMBER 0AD7 879C 0AF4 3447+ COPY A,HEAD CURRENT HEAD=0 1PAGE 0140 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLL ER TEST PROGRAM 93720-10C1 1982/09/30 09:01:50.50 TESTS (TECH TEST) 0AD8 839B 0AF4 3447+ TCHT161 COPY HEAD,A GET CURRENT HEAD 0AD9 C35D 0AB7 3447+ COPY HEADS,Q AND REQUIRED HEADS 0ADA 4C02 3447+ CLSN  Q,=2 BOTH HEADS? 0ADB 9E83 0ADF 3447+ JMP $+4 YES, DO THE CODE! 0ADC 400A 3447+  CSN A,Q NO , BUT IS HEAD=HEADS? 0ADD 9E81 0ADF 3447+ JMP $+2 YES, DO THE CODE! 0ADE 9E8F 0AEE 3447+ JMP TCHT163 NO MATCH, SKIP THE CODE 0ADF 8358 0AB8 3448 COPY TRACKS,A  GET STARTING TRACK NUM. 0AE0 8720 0A81 3449 TCHT162 COPY A,TRM SET CURRENT TRACK NUM. 0AE1 16C1 0AE3 3450 JF SS,$+2 IF SSW OFF, DO IT. 0AE2 9EAE 0B11 3451 JMP TCHTEND ELSE EXIT. 0AE3 BF55 0AB9 3452 JST SEEK: DO SEEK OPERATION 0AE4 BF51 0AB6 3453 JST ERROR BLINK THE 'E' IN THE CDR. 0AE5 FF8F 0AF5 3454 JSK FORMAT FORMAT TRACK 0AE6 BF4E 0AB5 3455 JST STATUS CHECK STATUS 0AE7 BF4E 0AB6 3456 JST ERROR BLINK THE 'E' IN THE CDR. 0AE8 8318 0A81 3457  COPY TRM,A GET CURRENT TRACK NUM. 0AE9 0B01 3458 ADD =1,A INC. TRACK NUM. 0AEA BB8B 0AF6 3459 CSK A,TRACKS+1 DO RANGE CHECK 0AEB 9E74 0AE0 3460 JMP TCHT162 STILL MORE TO GO 0AEC 9E81 0AEE 3461 JMP $+2 DONE 0AED 9E72 0AE0 3462 JMP TCHT162 STILL MORE TO GO 0AEE 8385 0AF4 3463 TCHT163 COPY HEAD,A GET CURRENT HEAD 0AEF 0C01 3463+ CLSN  A,=1 IF 1 THEN DONE! 0AF0 9E82 0AF3 3463+ JMP $+3 YES, EXIT 0AF1 DF82 0AF4 3463+  IMS HEAD NO, BUMP HEAD 0AF2 9E65 0AD8 3463+ JMP TCHT161 TRY ANOTHER HEAD 0AF3 9E62 0AD6 3464 JMP TCHT160 LOOP BACK 3465 * 0003 3466 LPOOL 0AF4 1311 HEAD 0AF5 0C2B FORMAT 0AF6 1346 1PAGE 0141 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30  09:01:52.00 TESTS (TECH TEST) 3468 * 3469 * INVALID COMMAND 3470 *  00000AF7 3471 TCHT170 EQU $ 0AF7 0900 3472 COPY =UF:INV,A GET INVALID FUNCTION 0AF8 8453 0013 3473 COPY A,UF:FC(Y) STORE FUNCTION CODE 0AF9 16C1 0AFB 3474 TCHT171 JF SS,$+2 IF SSW OFF, DO IT. 0AFA 9E96 0B11 3475 JMP TCHTEND ELSE EXIT. 0AFB FF38 0AB4 3476 JSK UFDC:EX  DO IT 0AFC BF38 0AB5 3477 JST STATUS CHECK STATUS 0AFD BF38 0AB6 3478 JST ERROR  BLINK THE 'E' IN THE CDR. 0AFE 9E7A 0AF9 3479 JMP TCHT171 LOOP BACK 3480 *  3481 * WRITE DMA ADDRESS POINTER 3482 * WRITE INTERRUPT VECTOR ADDRESS 3483 * WRITE DMA BYTE COUNT REGISTER 3484 * WRITE MODE REGISTER 3485 * 00000AFF 3486 TCHT1 80 EQU $ 00000AFF 3487 TCHT190 EQU $ 00000AFF 3488 TCHT200 EQU $ 00000AFF 3489 TCHT210 EQU $ 0AFF C397 0B17 3490 COPY TSTFUNC,Q GET FUNCTION CODE 0B00 8397 0B18 3491 COPY  WPAT,A GET PATTERN 0B01 16C1 0B03 3492 TCHT211 JF SS,$+2 IF SSW OFF, DO IT. 0B02 9E8E 0B11 3493  JMP TCHTEND ELSE EXIT. 0B03 4C10 3494 CLSN Q,=16 WRITE DMA ADD.? 0B04 FF94 0B19 3495 JSK WRDMAP YES 0B05 4C11 3496 CLSN Q,=17 WRITE INT. VEC. ADD.? 0B06 FF93 0B1A 3497 JSK WRINVA YES 0B07 4C12 3498 CLSN Q,=18 WRITE BYTE COUNT? 0B08 FF92 0B1B 3499 JSK WRDBCR 0B09 4C13 3500 CLSN Q,=19 WRITE MODE REG.? 0B0A FF8B 0B16 3501 JSK WRMDRG YES 0B0B 9E75 0B01 3502 JMP TCHT211 LOOP BACK 1PAGE 0142 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:01:53.25 TESTS (TECH TEST)  3504 * 3505 * 'SAL' INSTRUCTION 3506 * 00000B0C 3507 TCHT220 EQU $ 0B0C 16C1 0B0E 3508 JF SS,$+2 IF SSW OFF, DO IT. 0B0D 9E83 0B11 3509 JMP TCHTEND ELSE EXIT. 0B0E 030A 3510 XNX A INDEX INTO NEXT 0B0F 6620 3511 SAL 2,0  HERE IT IS 0B10 9E7A 0B0B 3512 JMP $-5 LOOP BACK 3513 * 3514 * TECH TEST END 3515 * 00000B11 3516 TCHTEND EQU $ 0B11 0900 3517 COPY  =0,A RESET A-REG. 0B12 FF83 0B16 3518 JSK WRMDRG RESET UFDC 0B13 14BF 0B13 3519 IJNE A,$ WAIT FOR SSW TO DEBOUNCE 0B14 0200 3520 OUT A,CONSL;SSW RESET SENSE SWITCH 0B15 9F86 0B1C 3521 JMP QERYG0 GO TO TECH TEST QUERIES 3522 * 0007 3523  LPOOL 0B16 0E40 WRMDRG 0B17 1308 TSTFUNC 0B18 1309 WPAT 0B19 0E3A WRDMAP 0B1A 0E3C WRINVA 0B1B 0E3E WRDBCR 0B1C 04E2 QERYG0 1PAGE 0143 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:01:54.00 TEST UTILITIES (UNITFND) 3525 ****************************** 3526 * 3527 * UNITFND - THIS SUBROUTINE WILL FIND THE FIRST 3528 * AND SECOND UNITS TO TEST FOR TESTS  3529 * B & D. 3530 * 3531 * IF A SECOND UNIT CANNOT BE FOUND THE  3532 * APPROPRIATE RETURN WILL BE MADE. 3533 * 3534 * CALLING SEQUENCE: 3535 * JST UNITFND 3536 * JMP ? SECOND UNIT NOT FOUND R  3537 * JMP ? FOUND SECOND UNIT R+1 3538 * 3539 ****************************** 3540 * 0B1D 0E0D 3541 UNITFND ENT 0B1E 8397 0B36 3542 COPY U NIT,A GET CURRENT UNIT 0B1F 8797 0B37 3543 COPY A,UNITA WILL BE FIRST UNIT 0B20 A397 0B38 3544  COPY UNTADD,X GET UNIT TABLE ADD. 0B21 8081 0001 3545 UNITFND1 COPY 1(X),A GET NEXT UNIT 0B22 1146 0B29 3546 JEQ A,UNITFND2 IF END OF TABLE, TRY START 0B23 0AFF 3547 SUB =1,A  GENERATE UNIT NUMBER 0B24 BB92 0B37 3548 CSK A,UNITA SAME AS FIRST UNIT? 0B25 0000 3549  NOP 0B26 9E8C 0B33 3550 JMP UNITFND4 NO, FOUND ANOTHER 0B27 2B01 3551 ADD =1,X  INC. TABLE POINTER 0B28 9E78 0B21 3552 JMP UNITFND1 TRY ANOTHER 0B29 A28F 0B39 3553 UNITFND2 COPY  =UNITS,X GET TABLE ADD. 0B2A 8080 0000 3554 UNITFND3 COPY 0(X),A GET UNIT 0B2B 11C1 0B2D 3555  JNE A,$+2 IF NOT LAST ONE, JUMP 0B2C 9F70 0B1D 3556 JMP *UNITFND ELSE EXIT 0B2D 0AFF 3557 SUB =1,A GENERATE UNIT NUMBER 0B2E BB88 0B37 3558 CSK A,UNITA SAME AS FIRST UNIT? 0B2F 0000 3559 NOP 0B30 9E82 0B33 3560 JMP UNITFND4 NO, FOUND ANOTHER 1PAGE 0144 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:01:55.25 TEST UTILITIES (UNITFND)  0B31 2B01 3561 ADD =1,X INC. TABLE POINTER 0B32 9E77 0B2A 3562 JMP UNITFND3  TRY ANOTHER 0B33 8786 0B3A 3563 UNITFND4 COPY A,UNITB WILL BE SECOND UNIT 0B34 DE68 0B1D 3564 IMS  UNITFND SET RETURN ADD. 0B35 9F67 0B1D 3565 JMP *UNITFND EXIT 3566 * 0005  3567 LPOOL 0B36 1313 UNIT 0B37 1314 UNITA 0B38 130B UNTADD 0B39 1340 UNITS 0B3A 1315 UNITB 1PAGE 0145 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:01:55.50 TEST UTILITIES (BUFCON & BUFUSER) 3569 ****************************** 3570 * 3571 * BUFUSER - FILL BUFFER WITH USER SUPPLIED PATTERN 3572 * 3573 * BUFCON - FILL BUFFER WITH CONSTANT IN A-REG. 3574 * 3575 * THIS SUBROUTINE WILL FILL THE OUTPUT 3576 *  BUFFER WITH THE USER SUPPLIED PATTERN 3577 * OR WITH A CONSTANT. 3578 *  3579 * CALLING SEQUENCE: 3580 * COPY =CONSTANT,A JSK BUFUSER  3581 * JSK BUFCON 3582 * 3583 *******************************  3584 * 00000B3B 3585 BUFUSER EQU $ 0B3B 839F 0B5B 3586 COPY PATTERN,A GET USER PATTERN 3587 * 00000B3C 3588 BUFCON EQU $ 0B3C 4000 3589 COPY A,Q CONSTANT IN Q REG 0B3D 0E71 3590 SHIFT A,LO,8 CONSTANT IN LEFT BYTE 0B3E 0047 3591 OR Q,A BOTH BYTES OF A REG = CONSTANT 0B3F 8799 0B59 3592 COPY A,BUFR SET FIRST WORD OF BUF FER 0B40 8399 0B5A 3593 COPY NBYTES,A GET NUMBER OF BYTES 0B41 0E09 3594 SHIFT A,RO,1  DIVIDE BY 2 0B42 0001 3595 NEG A -WORDS/SECTOR 0B43 BF98 0B5C 3596 JST MOVE FILL BUFFER 0B44 17C1 3597 WORD BUFR 'FROM' 0B45 17C2 3598 WORD  BUFR+1 'TO' 0B46 2309 3599 RSK EXIT 1PAGE 0146 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:01:56.75 TEST UTILITIES (BUFINCR) 3601 ****************************** 3602 * 3603 * BUFINCR - THIS SUBROUTINE WILL CLEAR THE  3604 * BUFFER OF 2 SECTORS THEN FILL WITH 3605 * AN INCREMENTING PATTERN.  3606 * 3607 * CALLING SEQUENCE: 3608 * COPY =LENGTH(BYTES),A  3609 * JSK BUFINCR 3610 * 3611 *******************************  3612 * 00000B47 3613 BUFINCR EQU $ 0B47 4900 3614 COPY =0,Q RESET Q-REG. 0B48 C790 0B59 3615 COPY Q,BUFR SET FIRST WORD IN BUFF. 0B49 C390 0B5A 3616 COPY NBYTES,Q  GET NUMBER OF BYTES (TOTAL) 0B4A 4041 3617 NEG Q MAKE NEG. 0B4B 4008 3618 EXCH A,Q EXCHANGE NUMBERS 0B4C BF8F 0B5C 3619 JST MOVE CLEAR BUFFER 0B4D 17C1 3620  WORD BUFR 'FROM' 0B4E 17C2 3621 WORD BUFR+1 'TO' 3622 *  3623 * FILL IN WITH PATTERN (:0-:FF) 3624 * 0B4F 4041 3625 NEG Q  MAKE NEGATIVE 0B50 0900 3626 COPY =0,A START WITH 0 0B51 A28B 0B5D 3627 COPY =BUFR*2,X BUFFER BYTE ADDRESS 0B52 0E25 3628 INCRWR SBIT BY:,S SET BYTE MODE 0B53 8480 0000 3629  COPYB A,0(X) STORE BYTE 0B54 0E27 3630 RBIT BY:,S SET WORD MODE 0B55 2B01 3631 ADD =1,X INC. BUFFER POINTER 0B56 0B01 3632 ADD =1,A INC. PATTERN 0B57 54BA 0B52 3633 IJNE Q,INCRWR DEC. COUNT 0B58 2309 3634 RSK EXIT  3635 * 0005 3636 LPOOL 1PAGE 0147 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:01:57.75 TEST UTILITIES (BUFINCR) 0B59 17C1 BUFR 0B5A 130D NBYTES 0B5B 134C PATTERN 0B5C 1294 MOVE 0B5D 2F82 1PAGE 0148 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:01:58.00 TEST UTILITIES (BUFALT) 3638 ****************************** 3639 *  3640 * BUFALT - THIS SUBROUTINE WILL FILL THE 3641 * BUFFER ALTERNATELY WITH ONES  3642 * AND ZEROS. 3643 * 3644 * CALLING SEQUENCE: 3645 *   JSK BUFALT 3646 * 3647 ******************************* 3648 *  00000B5E 3649 BUFALT EQU $ 0B5E 837A 0B59 3650 COPY BUFR,A FIRST WORD OF BUFFER 0B5F 1143 0B63 3651 JEQ A,BUFONE ZERO? 0B60 0900 3652 COPY =0,A RESET A-REG. 0B61 FE5A 0B3C 3653 JSK BUFCON FILL BUFF. 0B62 2309 3654 RSK EXIT 0B63 09FF  3655 BUFONE COPY =:FF,A SET A-REG. TO ONES 0B64 FE57 0B3C 3656 JSK BUFCON FILL BUFF. 0B65 2309 3657 RSK EXIT 1PAGE 0149 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:01:58.75 TEST UTILITIES (BUFCOMP) 3659 ****************************** 3660 * 3661 * BUFCOMP - THIS SUBROUTINE WILL COMPARE THE INPUT 3662 *  BUFFER (1 SECTOR) TO THE OUTPUT 3663 * BUFFER (1 SECTOR). ANY MISCOMPARE WILL  3664 * BE REPORTED AS A 'DATA MISCOMPARE' ERROR. 3665 * 3666 * UPON ENTERING THIS SUBROUTINE THE A-REG. 3667 * WILL CONTAIN THE OUTPUT BUFFER/SECTOR  3668 * NUMBER 0 OR 1. 3669 * 3670 * CALLING SEQUENCE: 3671  * COPY =BUFFER NUMBER,A 3672 * JST BUFCOMP 3673 * JMP ?  DATA MISCOMPARE R 3674 * JMP ? GOOD DATA R+1 3675 * 3676 ****************************** 3677 * 0B66 0E0D 3678 BUFCOMP ENT 0B67 C372 0B5A 3679 COPY NBYTES,Q BYTES/SECTOR 0B68 A274 0B5D 3680 COPY =BUFR*2,X BYTE ADD. OF OUTPUT BUFF. 0B69 1141 0B6B 3681 JEQ A,$+2 BUFF. 0 0B6A 2042 3682 ADD Q,X BUFF. 1 ADD. OFFSET 0B6B A696 0B82 3683 COPY X,OUTADD SET OUTPUT ADD. 0B6C A2C6 0BB3 3684 COPY =INBUFR*2,X BYTE ADD. OF INPUT BUFF. 0B6D 4041 3685 NEG Q -COUNT OF BYTES 0B6E 0E25 3686 BUFCOMP1 SBIT BY:,S SET BYTE MODE 0B6F 8392 0B82 3687 COPYB *OUTADD,A GET OUTPUT BUFF. BYTE 0B70 9880 0000 3688 XORB 0(X),A COMPARE TO INPUT BUFF. BYTE 0B71 11C6 0B78 3689 JNE A,BUFCOMP2 IF NOT SAME, JUMP 0B72 0E27 3690 RBIT BY:,S SET WORD MODE 0B73 2B01 3691 ADD =1,X  BUMP OUTPUT POINTER 0B74 DE8D 0B82 3692 IMS OUTADD BUMP OUTPUT POINTER 0B75 54B8 0B6E 3693  IJNE Q,BUFCOMP1 LOOP FOR MORE 0B76 DE6F 0B66 3694 IMS BUFCOMP SET GOOD RETURN 1PAGE 0150 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:00.25 TEST UTILITIES (BUFCOMP)  0B77 9F6E 0B66 3695 JMP *BUFCOMP EXIT 3696 * 0B78 8389 0B82 3697 BUFCOMP2 COPYB *O UTADD,A GET OUTPUT BYTE 0B79 C080 0000 3698 COPYB 0(X),Q GET INPUT BYTE 0B7A 0E27 3699  RBIT BY:,S SET WORD MODE 0B7B 87B8 0BB4 3700 COPY A,EXP STORE EXPECTED BYTE 0B7C C7B8 0BB5 3701 COPY Q,ACT STORE ACTUAL BYTE 0B7D 2E09 3702 SHIFT X,RO,1 MAKE WORD ADD. 0B7E A7B7 0BB6 3703 COPY X,BUFADR STORE ADD. FOR ERROR 0B7F E2AE 0BAE 3704 COPY =Y1,Y  SET Y-CTRL. BLK. ADD. 0B80 0925 3705 COPY =ERR037,A 'DATA MISCOMPARE' 0B81 9F64 0B66 3706  JMP *BUFCOMP EXIT 3707 * 0B82 0000 3708 OUTADD WORD 0 OUTPUT BUFF. BYTE ADD. 1PAGE 0151 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:01.00 TEST UTILITIES (SPECIFY) 3710 ****************************** 3711 * 3712 * SPECIFY - THIS SUBROUTINE WILL INITIALIZE 3713 * THE UFDC TIMERS AND SEND OUT A 3714  * SPECIFY COMMAND. 3715 * 3716 * CALLING SEQUENCE: 3717 *  JST SPECIFY 3718 * JMP ? BAD RETURN R 3719 * JMP ?  GOOD RETURN R+1 3720 * 3721 ***************************** 3722 * 0B83 0E0D 3723 SPECIFY ENT 0B84 E2A9 0BAE 3724 COPY =Y1,Y SET Y-CTRL. BLK. ADD. 0B85 83B1 0BB7 3725  COPY DEVADR,A GET CURRENT DEVICE ADD. 0B86 87AD 0BB4 3726 COPY A,EXP STORE AS EXPECTED 0B87 0E87 3727 RBIT GI:,S DISABLE INTS. FOR NOW 0B88 83AF 0BB8 3728 COPY BDID,A  GET BOARD ID 0B89 030A 3729 XNX A INDEX NEXT 0B8A 6620 3730 SAL 2,0 HERE IT IS 0B8B 18FC 3731 AND =:FC,A MASK IT 0B8C 87A8 0BB5 3732 COPY A,ACT STORE AS ACTUAL 0B8D BBA9 0BB7 3733 CSK A,DEVADR COMPARE 0B8E 0000 3734 NOP  0B8F 9E81 0B91 3735 JMP $+2 BAD 0B90 9E82 0B93 3736 JMP SPEC0 GOOD 0B91 092C 3737 COPY =ERR044,A 'BAD DEVICE ADDRESS' 0B92 BF9C 0BAF 3738 JST ERROR DISPLAY IT 3739 * 0B93 0900 3740 SPEC0 COPY =0,A RESET A-REG. 0B94 FF01 0B16 3741  JSK WRMDRG RESET MODE REG. 0B95 0801 3742 COPY =-255,A SET TIME CONSTANT 0B96 14BF 0B96 3743 IJNE A,$ WAIT FOR UFDC TO RESET 30 MICROSEC 0B97 82A1 0BB9 3744 COPY =VECTOR,A  GET INT. ADD. 0B98 FFA1 0BBA 3745 JSK WRINVA SEND IT TO UFDC. 1PAGE 0152 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:02.50 TEST UTILITIES (SPECIFY) 0B99 8059 0019 3746  COPY UF:MODE(Y),A GET MODE REG. 0B9A FFA0 0BBB 3747 JSK WRMDRG SEND IT TO THE UFDC 0B9B 08F D 3748 COPY =DLYSHRT,A SET SHORT DELAY 0B9C FF93 0BB0 3749 JSK WAIT WAIT FOR INT. 0B9D 28FC 3750 COPY =-4,X SET COUNT TO 4 TIMES 0B9E 829D 0BBC 3751 SPEC1 COPY =OP:SIS,A GET SIS OP CODE 0B9F FF9D 0BBD 3752 JSK UF:COM SEND IT TO UFDC 0BA0 FF9D 0BBE 3753 JSK UF:GET GET ST0 0BA1 879D 0BBF 3754 COPY A,TEMP1 SAVE IT 0BA2 FF9B 0BBE 3755 JSK  UF:GET GET PCN 0BA3 839B 0BBF 3756 COPY TEMP1,A RESTORE ST0 0BA4 0C80 3757 CLSN A,=:80 BAD COMMAND? 0BA5 9E81 0BA7 3758 JMP $+2 YES, ALL DONE 0BA6 34B7 0B9E 3759  IJNE X,SPEC1 TRY ANOTHER 0BA7 0901 3760 COPY =UF:INIT,A INITIALIZE UFDC (RESET, SPECIFY) 0BA8 8453 0013 3761 COPY A,UF:FC(Y) STORE FUNCTION CODE 0BA9 FF87 0BB1 3762 JSK UFDC:EX  DO IT 0BAA BF87 0BB2 3763 JST STATUS CHECK FOR ERRORS 0BAB 9F57 0B83 3764 JMP *SPECIFY BAD RETURN 0BAC DE56 0B83 3765 IMS SPECIFY SET GOOD RETURN 0BAD 9F55 0B83 3766 JMP  *SPECIFY EXIT 3767 * 0013 3768 LPOOL 0BAE 179B Y1 0BAF 0EFA ERROR 0BB0 0DCE WAIT 0BB1 0CE7 UFDC:EX 0BB2 0E42 STATUS 0BB3 3782 0BB4 1047 EXP 0BB5 1048 ACT 0BB6 1049 BUFADR 0BB7 134D DEVADR 0BB8 134E BDID 0BB9 0DEE VECTOR 0BBA 0E3C WRINVA 1PAGE 0153 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:03.50 TEST UTILITIES (SPECIFY) 0BBB 0E40 WRMDRG 0BBC 0108 OP:SIS 0BBD 0E1F UF:COM 0BBE 0E06 UF:GET  0BBF 12FC TEMP1 0BC0 1PAGE 0154 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:03.50 TEST UTILITIES (RECAL:) 3770 ****************************** 3771 *  3772 * RECAL: - THIS SUBROUTINE WILL EXECUTE 3773 * A RECALIBRATE COMMAND FOLLOWED BY A  3774 * SENSE INTERRUPT STATUS COMMAND. 3775 * 3776 * UPON EXITING THE A-REG. WILL CONTAIN 3777 * 0=NO ERROR, NON-0=ERROR. 3778 * 3779 * CALLING SEQUENCE: 3780 * JST RECAL: 3781 * JMP ? BAD RETURN R 3782 * JMP ? GOOD RETURN R+1 3783 * 3784 ****************************** 3785 * 0BC1 0E0D 3786 RECAL: ENT 0BC2 E26B 0BAE 3787 COPY =Y1,Y SCRATCHPAD #1 0BC3 8396 0BDA 3788 COPY UNIT,A GET CURRENT UNIT 0BC4 845A 001A 3789 COPY A,UF:US(Y) UNIT SELECT 0BC5 005C 3790 SBIT ST0:SE,A SET SEEK END BIT 0BC6 8462 0022 3791  COPY A,UF:EX0(Y) EXPECTED STATUS BYTE 0 0BC7 090A 3792 COPY =UF:RECAL,A RECALIBRATE 0BC8 8453 0013 3793 COPY A,UF:FC(Y) FUNCTION CODE 0BC9 0900 3794 COPY =0,A ZERO 0BCA 8440 00 00 3795 COPY A,UF:C(Y) AND CYLINDER NUMBER 0BCB FF65 0BB1 3796 JSK UFDC:EX 0BCC BF65 0BB2 3797 JST STATUS CHECK STATUS 0BCD BF61 0BAF 3798 JST ERROR DO ERROR REPORT 0BCE 828C 0BDB 3799 COPY =DLYLONG,A SET A-REG. FOR LONLY DELAY 0BCF FF60 0BB0 3800 JSK WAIT  DO WAIT 0BD0 BF61 0BB2 3801 JST STATUS DO STATUS CHECK 0BD1 BF5D 0BAF 3802 JST ERROR DISPLAY ERROR 0BD2 090D 3803 COPY =UF:SIS,A S.I.S. 0BD3 8453 0013 3804 COPY A,UF:FC(Y) FUNCTION CODE 0BD4 FF5C 0BB1 3805 JSK UFDC:EX 1PAGE 0155 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:05.00 TEST UTILITIES (RECAL:) 0BD5 2902 3806 COPY  =2,X SET STATUS FLAG FOR 'RECALIBRATE' 0BD6 BF5B 0BB2 3807 JST STATUS CHECK STATUS 0BD7 9F69 0BC1 3808 JMP *RECAL: BAD RETURN 0BD8 DE68 0BC1 3809 IMS RECAL: SET GOOD RETURN 0BD9 9F67 0BC1 3810 JMP *RECAL: EXIT 3811 * 0002 3812 LPOOL 0BDA 1313 UNIT 0BDB FA24 DLYLONG 1PAGE 0156 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:05.25 TEST UTILITIES (SEEK:) 3814 ****************************** 3815 *  3816 * SEEK: - THIS SUBROUTINE WILL SEEK 3817 * TO A SPECIFIED TRACK. 3818 * 3819 * UPON EXITING THE A-REG. WILL CONTAIN 3820 * 0=NO ERROR, NON-0=ERROR. 3821 * 3822 * CALLING SEQUENCE: 3823 * JST SEEK:  3824 * JMP ? BAD RETURN R 3825 * JMP ? GOOD RETURN R+1 3826 * 3827 ****************************** 3828 * 0BDC 0E0D 3829 SEEK: ENT 0BDD E250 0BAE 3830 COPY =Y1,Y SCRATCHPAD #1 0BDE 090B 3831 COPY =UF:SEEK,A SEEK 0BDF 8453 0013 3832 COPY A,UF:FC(Y) FUNCTION CODE 0BE0 83C1 0C22 3833 COPY HEAD,A 0 OR 1 0BE1 8441 0001 3834 COPY A,UF:HD(Y) HEAD ADR 0BE2 8377 0BDA 3835 COPY UNIT,A CURRENT 0BE3 845A 001A 3836 COPY A,UF:US(Y) UNIT SELECT 0BE4 005C 3837 SBIT ST0:SE,A SET SEEK END BIT 0BE5 8462 0022 3838 COPY A,UF:EX0(Y) EXPECTED STATUS BYTE 0 0BE6 83BC 0C23 3839 COPY TRM,A 0BE7 8440 0000 3840 COPY A,UF:NCN(Y) NEW CYL NUMBER 0BE8 FF48 0BB1 3841 JSK UFDC:EX 0BE9 BF48 0BB2 3842 JST STATUS CHECK STATUS 0BEA BF44 0BAF 3843 JST ERROR DO ERROR REPORT 0BEB 826F 0BDB 3844 COPY =DLYLONG,A SET A-REG. FOR LONG DELAY 0BEC FF43 0BB0 3845 JSK WAIT  DO WAIT 0BED BF44 0BB2 3846 JST STATUS DO STATUS CHECK 0BEE BF40 0BAF 3847 JST   ERROR DISPLAY ERROR 0BEF 090D 3848 COPY =UF:SIS,A S.I.S. 0BF0 8453 0013 3849 COPY  A,UF:FC(Y) FUNCTION CODE 1PAGE 0157 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:06.75 TEST UTILITIES (SEEK:) 0BF1 FF3F 0BB1 3850 JSK UFDC:EX 0BF2 2901 3851 COPY =1,X SET STATUS FLAG FOR 'SEEK' 0BF3 BF3E 0BB2 3852 JST STATUS CHECK STATUS 0BF4 9F67 0BDC 3853 JMP *SEEK: BAD RETURN 0BF5 8040 0000 3854 COPY UF:NCN(Y),A GET NEW CYL. NUM. 0BF6 984D 000D 3855 XOR UF:PCN(Y),A SAME AS PRESENT? 0BF7 1142 0BFA 3856 JEQ A,$+3 IF SO, JUMP 0BF8 0923 3857 COPY =ERR035,A 'CYLINDER NUMBER MISMATCH' 0BF9 9F62 0BDC 3858 JMP  *SEEK: BAD RETURN 0BFA DE61 0BDC 3859 IMS SEEK: SET GOOD RETURN 0BFB 9F60 0BDC 3860  JMP *SEEK: EXIT 1PAGE 0158 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:07.25 TEST UTILITIES (SCAN:) 3862 ******************************** 3863 *  3864 * SCAN: - THIS SUBROUTINE WILL EXECUTE 3865 * A SCAN ON EQUAL COMMAND.  3866 * 3867 * UPON ENTERING THE A-REG. WILL CONTAIN 3868 * THE (MT) PARAMETER 0=1 SECTOR, OR 3869 * 1=2 SECTORS. 3870 * 3871 * CALLING SEQUENCE: 3872 * JSK SCAN: 3873 * 3874 ******************************** 3875 * 00000BFC 3876 SCAN: EQU $ 0BFC E231 0BAE 3877 COPY =Y1,Y  SCRATCHPAD #1 0BFD 4907 3878 COPY =UF:SCEQ,Q SCAN EQUAL 0BFE C453 0013 3879 SCAN1 COPY Q,UF:FC(Y) FUNCTION CODE 0BFF C2A4 0C24 3880 COPY =BUFR,Q BUFFER IN RAM 0C00 C457 0017 3881 COPY Q,UF:DMA(Y) DMA ADR 0C01 845B 001B 3882 COPY A,UF:MT(Y) MT= 0 OR 1 (ONE SIDE OR BOTH) 0C02 C3A2 0C25  3883 COPY NBYTES,Q BYTES/SECTOR 0C03 1141 0C05 3884 JEQ A,$+2 MT=0 ? 0C04 4042  3885 ADD Q,Q NO, DOUBLE BYTE COUNT, 2 SECTORS 0C05 C458 0018 3886 COPY Q,UF:BCT(Y)  DMA BYTE COUNT 0C06 839F 0C26 3887 COPY DENSITY,A 0C07 845C 001C 3888 COPY A,UF:MF(Y) DENSITY 0C08 0901 3889 COPY =1,A 0C09 845D 001D 3890 COPY A,UF:SK(Y) SCAN ALL SECTORS 0C0A 8397 0C22 3891 COPY HEAD,A 0C0B 8441 0001 3892 COPY A,UF:HD(Y) HEAD ADR 0 OR 1 0C0C 834D 0BDA 3893 COPY UNIT,A 0C0D 845A 001A 3894 COPY A,UF:US(Y) UNIT SELECT 0C0E 8462 0022 3895  COPY A,UF:EX0(Y) EXPECTED STATUS BYTE 0 0C0F 0900 3896 COPY =0,A RESET A-REG. 0C10 8463 0023 3897 COPY A,UF:EX1(Y) EXPECTED STATUS BYTE 1 1PAGE 0159 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLL ER TEST PROGRAM 93720-10C1 1982/09/30 09:02:08.50 TEST UTILITIES (SCAN:) 0C11 8464 0024 3898 COPY A,UF:EX2(Y) EXPECTED STATUS BYTE 2 0C12 8390 0C23 3899 COPY TRM,A 0C13 8440 0000 3900 COPY A,UF:C(Y)  CYL NUMBER 0C14 8392 0C27 3901 COPY SECTOR,A 0C15 8442 0002 3902 COPY A,UF:R(Y) START SECTOR 0C16 8391 0C28 3903 COPY N,A 0C17 8443 0003 3904 COPY A,UF:N(Y) BYTES/SECTOR CODE 0C18 8390 0C29 3905 COPY SC,A 0C19 8444 0004 3906 COPY A,UF:EOT(Y) SECTORS/TRACK 0C1A 838F 0C2A 3907 COPY GPL,A 0C1B 0E79 3908 SHIFT A,RO,8 UPPER BYTE ONLY 0C1C 8445 0005 3909  COPY A,UF:GPL(Y) GAP LENGTH 0C1D 0901 3910 COPY =1,A 0C1E 8449 0009 3911 COPY A,UF:STP(Y) SCAN EACH SECTOR 0C1F 2900 3912 COPY =0,X SET STATUS CHECK FLAG 0C20 FF10 0BB1 3913  JSK UFDC:EX DO IT 0C21 2309 3914 RSK EXIT 3915 * 0009 3916 LPOOL 0C22 1311 HEAD 0C23 1310 TRM 0C24 17C1 BUFR 0C25 130D NBYTES 0C26 134A DENSITY 0C27 1312 SECTOR 0C28 134B N 0C29 130E SC 0C2A 130F GPL 1PAGE 0160 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:09.75 TEST UTILITIES (FORMAT) 3918 ******************************  3919 * 3920 * FORMAT - THIS SUBROUTINE WILL FORMAT ONE TRACK. 3921 * SECTOR TABLES ARE IN 'BUFR'. 3922 * 3923 * CALLING SEQUENCE: 3924 * JSK FORMAT 3925 * 3926 ****************************** 3927 * 00000C2B  3928 FORMAT EQU $ 0C2B E202 0BAE 3929 COPY =Y1,Y SET Y-CTRL. BLK. ADD. 0C2C 837C 0C29 3930  COPY SC,A GET SECTORS/TRACKS 0C2D 8447 0007 3931 COPY A,UF:SC(Y) SET INTO BLOCK 0C2E 4900 3932 COPY =0,Q SECTOR COUNTER 0C2F A274 0C24 3933 COPY =BUFR,X ADR OF TABLE 0C30 4B01 3934 FBUILD ADD =1,Q BUMP COUNT 0C31 8371 0C23 3935 COPY TRM,A CYL NUMBER 0C32 0E71 3936 SHIFT A,LO,8 IN LEFT BYTE 0C33 B76E 0C22 3937 OR HEAD,A  CYL/HEAD 0C34 8480 0000 3938 COPY A,0(X) FIRST WORD 0C35 0040 3939 COPY Q,A  SECTOR NUMBER 0C36 0E71 3940 SHIFT A,LO,8 IN LEFT BYTE 0C37 B770 0C28 3941 OR N,A BYTES/SECTOR IN RIGHT BYTE 0C38 8481 0001 3942 COPY A,1(X) SECOND WORD 0C39 2B02 3943  ADD =2,X POINT TO NEXT ENTRY 0C3A F847 0007 3944 CSK Q,UF:SC(Y) DONE ALL SECTORS FOR TRACK? 0C3B 9E74 0C30 3945 JMP FBUILD NO, DO ANOTHER 0C3C 0000 3946 NOP  YES, TABLE COMPLETE 3947 * 3948 * FORMAT 3949 * 0C3D 090E 395 0 COPY =UF:FMT,A FORMAT 0C3E 8453 0013 3951 COPY A,UF:FC(Y) FUNCTION CODE 0C3F 8264 0C24 3952 COPY =BUFR,A BUFFER IN RAM 0C40 8457 0017 3953 COPY A,UF:DMA(Y) DMA ADR 1PAGE 0161 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:11.00 TEST UTILITIES (FORMAT)  0C41 8047 0007 3954 COPY UF:SC(Y),A SECTORS/TRACK 0C42 0E11 3955 SHIFT A,LO,2 *4 0C43 8458 0018 3956 COPY A,UF:BCT(Y) DMA BYTE COUNT 0C44 835D 0C22 3957 COPY HEAD,A 0 OR 1 0C45 8441 0001 3958 COPY A,UF:HD(Y) HEAD ADR 0C46 0E11 3959 SHIFT A,LO,2 SHIFT INTO PLACE 0C47 B712 0BDA 3960 OR UNIT,A 'OR' IN UNIT SELECT 0C48 8462 0022 3961 COPY A,UF:EX0(Y) EXPECTED STATUS BYTE 0 0C49 0900 3962 COPY =0,A 0C4A 8463 0023 3963 COPY A,UF:EX1(Y) EXPECTED STATUS BYTE 1 0C4B 8464 0024 3964 COPY A,UF:EX2(Y) EXPECTED STATUS BYTE 2 0C4C 830D 0BDA 3965 COPY UNIT,A 0C4D 845A 001A 3966 COPY A,UF:US(Y) UNIT SELECT 0C4E 8359 0C28 3967  COPY N,A 0C4F 8443 0003 3968 COPY A,UF:N(Y) BYTES/SECTOR CODE 0C50 8359 0C2A 3969 COPY GPL,A GET GAP LENGTH 0C51 18FF 3970 AND =:FF,A LOWER BYTE IS GPL (2) 0C52 8445 0005 3971  COPY A,UF:GPL(Y) GAP LENGTH 0C53 8387 0C5B 3972 COPY PATTERN,A 0C54 8448 0008 3973 COPY A,UF:D(Y) DATA PATTERN 0C55 8350 0C26 3974 COPY DENSITY,A DENSITY = 0 (SINGLE) OR 1 (DOUBLE) 0C56 845C 001C 3975 COPY A,UF:MF(Y) DENSITY = 0 OR 1 0C57 2900 3976 COPY =0,X SET STATUS CHECK FLAG 0C58 FF81 0C5A 3977 JSK UFDC:EX 0C59 2309 3978 RSK EXIT  3979 * 0002 3980 LPOOL 0C5A 0CE7 UFDC:EX 0C5B 134C PATTERN 1PAGE 0162 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:12.25 TEST UTILITIES (WRITES)  3982 ****************************** 3983 * 3984 * WRITES - THIS SUBROUTINE WILL WRITE OUT 3985 * ONE SECTOR OF DATA TO THE 3986 * UFDC. 3987 * 3988 * UPON ENTERING THE A-REG. CONTAINS 3989 * THE SECTOR LENGTH (BYTES). 3990 * 3991 * CALLING SEQUENCE: 3992 * COPY =LENGTH,A  3993 * JSK WRITES 3994 * 3995 ******************************  3996 * 00000C5C 3997 WRITES EQU $ 0C5C E2C6 0CA3 3998 COPY =Y1,Y SCRATCHPAD #1 0C5D 0905 3999 COPY =UF:WD,A WRITE DATA 0C5E 8453 0013 4000 WRITES1 COPY A,UF:FC(Y) FUNCTION CODE 0C5F 8244 0C24 4001 COPY =BUFR,A BUFFER IN RAM 0C60 8457 0017 4002 COPY A,UF:DMA( Y) DMA ADR 0C61 C458 0018 4003 COPY Q,UF:BCT(Y) DMA BYTE COUNT 0C62 8343 0C26 4004 COPY DENSITY,A 0 OR 1 0C63 845C 001C 4005 COPY A,UF:MF(Y) DENSITY 0C64 0900 4006 COPY =0,A 0C65 845B 001B 4007 COPY A,UF:MT(Y) SINGLE SIDE 0C66 833B 0C22 4008 COPY HEAD,A 0C67 8441 0001 4009 COPY A,UF:HD(Y) HEAD ADR 0 OR 1 0C68 0E11 4010 SHIFT A,LO,2 SHIFT INTO PLACE  0C69 B7BA 0CA4 4011 OR UNIT,A 'OR' IN UNIT SELECT 0C6A 8462 0022 4012 COPY A,UF:EX0(Y)  EXPECTED STATUS BYTE 0 0C6B 0900 4013 COPY =0,A 0C6C 8463 0023 4014 COPY A,UF:EX1(Y) EXPECTED STATUS BYTE 1 0C6D 8464 0024 4015 COPY A,UF:EX2(Y) EXPECTED STATUS BYTE 2 0C6E 83B5 0CA4 4016  COPY UNIT,A 0C6F 845A 001A 4017 COPY A,UF:US(Y) UNIT SELECT 1PAGE 0163 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:13.75 TEST UTILITIES (WRITES) 0C70 8332 0C23 4018  COPY TRM,A 0C71 8440 0000 4019 COPY A,UF:C(Y) CYL NUMBER 0C72 8334 0C27 4020 COPY SECTOR,A 0C73 8442 0002 4021 COPY A,UF:R(Y) SECTOR NUMBER 0C74 8334 0C29 4022 COPY SC,A 0C75 8444 0004 4023 COPY A,UF:EOT(Y) SECTORS/TRACK 0C76 8333 0C2A 4024 COPY GPL,A 0C77 8445 0005 4025 COPY A,UF:GPL(Y) GAP LENGTH 0C78 0980 4026 COPY =128,A 0C79 8446 0006 4027 COPY A,UF:DTL(Y) 128 BYTES/SECTOR (IF N=0) 0C7A 2900 4028 COPY =0,X SET STATUS CHECK FLAG 0C7B FEEB 0CE7 4029 JSK UFDC:EX 0C7C 2309 4030 RSK EXIT 1PAGE 0164 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:14.25 TEST UTILITIES (READS)  4032 ****************************** 4033 * 4034 * READS - THIS SUBROUTINE WILL READ IN ONE 4035 * SECTOR OF DATA FROM THE UFDC. 4036 * 4037 * CALLING SEQUENCE: 4038 * JSK READS 4039 * 4040 ****************************** 4041 * 00000C7D 4042 READS EQU $ 0C7D E2A5 0CA3 4043 COPY =Y1,Y  SCRATCHPAD #1 0C7E 0902 4044 COPY =UF:RD,A READ DATA 0C7F 8453 0013 4045 COPY A,UF:FC(Y) FUNCTION CODE 0C80 82A4 0CA5 4046 COPY =INBUFR,A INPUT BUFFER IN RAM 0C81 8457 0017 4047  COPY A,UF:DMA(Y) DMA ADR 0C82 8322 0C25 4048 COPY NBYTES,A RECORD LENGTH 0C83 8458 0018 4049  COPY A,UF:BCT(Y) DMA BYTE COUNT 0C84 8321 0C26 4050 READS1 COPY DENSITY,A 0 OR 1 0C85 845C 001C 4051  COPY A,UF:MF(Y) DENSITY 0C86 8321 0C28 4052 COPY N,A 0,1,2 0C87 8443 0003 4053  COPY A,UF:N(Y) BYTES/SECTOR CODE 0C88 0900 4054 COPY =0,A 0C89 845B 001B 4055 COP Y A,UF:MT(Y) SINGLE SIDE 0C8A 0900 4056 COPY =0,A 0C8B 845D 001D 4057 COPY A,UF:SK(Y) DO NOT SKIP THIS SECTOR! 0C8C 8315 0C22 4058 COPY HEAD,A 0C8D 8441 0001 4059 COPY A,UF:HD(Y) HEAD ADR 0 OR 1 0C8E 0E11 4060 SHIFT A,LO,2 SHIFT INTO PLACE 0C8F B794 0CA4 4061 OR  UNIT,A 'OR' IN UNIT SELECT 0C90 8462 0022 4062 COPY A,UF:EX0(Y) EXPECTED STATUS BYTE 0 0C91 0900 4063 COPY =0,A 0C92 8463 0023 4064 COPY A,UF:EX1(Y) EXPECTED STATUS BYTE 1 0C93 8464 0024 4065 COPY A,UF:EX2(Y) EXPECTED STATUS BYTE 2 0C94 838F 0CA4 4066 COPY UNIT,A 0C95 845A 001A  4067 COPY A,UF:US(Y) UNIT SELECT 1PAGE 0165 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:15.50 TEST UTILITIES (READS) 0C96 830C 0C23 4068 COPY TRM,A 0C97 8440 0000 4069 COPY A,UF:C(Y) CYL NUMBER 0C98 830E 0C27 4070 COPY SECTOR,A 0C99 8442 0002 4071  COPY A,UF:R(Y) SECTOR NUMBER 0C9A 830E 0C29 4072 COPY SC,A 0C9B 8444 0004 4073 COPY A,UF:EOT(Y) SECTORS/TRACK 0C9C 830D 0C2A 4074 COPY GPL,A 0C9D 8445 0005 4075 COPY A,UF:GPL(Y) GAP LENGTH 0C9E 0980 4076 COPY =128,A 0C9F 8446 0006 4077 COPY A,UF:DTL(Y) 128 BYTES/SECTOR (IF N=0) 0CA0 2900 4078 COPY =0,X SET STATUS CHECK FLAG 0CA1 FEC5 0CE7 4079 JSK  UFDC:EX 0CA2 2309 4080 RSK EXIT 4081 * 0003 4082 LPOOL 0CA3 179B Y1 0CA4 1313 UNIT 0CA5 1BC1 INBUFR 1PAGE 0166 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:16.25 TEST UTILITIES (SEEK2 & RECAL2) 4084 ******************************  4085 * 4086 * SEEK2 - SIMULTANEOUS SEEKS 4087 * RECAL2 - SIMULTANEOUS RECALIBRATES 4088 * 4089 * THESE SUBROUTINES WILL DO SIMULTANEOUS 4090 * SEEKS OR RECALIBRATES FOR TWO UNITS. 4091 * 4092 * CALLING SEQUENCE:  4093 * JSK SEEK2 OR JSK RECAL2 4094 * 4095 ****************************** 4096 * 00000CA6 4097 SEEK2 EQU $ 0CA6 C3B7 0CDE 4098 COPY TRM,Q  GET CURRENT TRACK NUM. 0CA7 2901 4099 COPY =1,X SET STATUS FLAG FOR 'SEEK' 0CA8 090B 4100  COPY =UF:SEEK,A GET SEEK FUNCTION CODE 0CA9 9E83 0CAD 4101 JMP RECAL21 DO IT  4102 * 00000CAA 4103 RECAL2 EQU $ 0CAA 2902 4104 COPY =2,X SET STATUS FLAG FOR 'RECALIBRATE' 0CAB 090A 4105 COPY =UF:RECAL,A GET RECAL FUNCTION CODE 0CAC 4900 4106  COPY =0,Q SET TRACK NUM. TO 0 0CAD E275 0CA3 4107 RECAL21 COPY =Y1,Y SET Y-CTRL. BLK. ADD. 0CAE A 7B0 0CDF 4108 COPY X,TEMP3 SAVE STATUS FLAG 0CAF 8453 0013 4109 COPY A,UF:FC(Y) STORE FUNCTION CODE 0CB0 87AF 0CE0 4110 COPY A,TEMP4 SAVE FUNCTION CODE 0CB1 C440 0000 4111 COPY Q,UF:C(Y) STORE TRACK NUM. 0CB2 83AE 0CE1 4112 COPY UNITA,A GET FRIST UNIT NUM. 0CB3 8770 0CA4 4113  COPY A,UNIT STORE UNIT NUM. 0CB4 845A 001A 4114 COPY A,UF:US(Y) DITTO 0CB5 83AC 0CE2 4115 COPY HEAD,A GET CURRENT HEAD NUM. 0CB6 8441 0001 4116 COPY A,UF:HD(Y) STORE HEAD NUM. 0CB7 0E87 4117 RBIT GI:,S DISABLE INTS. 0CB8 FEAE 0CE7 4118 JSK UFDC:EX DO IT, FIRST UNIT 0CB9 BFA9 0CE3 4119 JST STATUS CHECK STATUS 1PAGE 0167 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:17.75 TEST UTILITIES (SEEK2 & RECAL2) 0CBA BFA9 0CE4 4120  JST ERROR DISPLAY ANY ERROR 4121 * 0CBB 83A9 0CE5 4122 COPY UNITB,A  GET SECOND UNIT NUM. 0CBC 8767 0CA4 4123 COPY A,UNIT STORE UNIT NUM. 0CBD 845A 001A 4124 COPY A,UF:US(Y) DITTO 0CBE FEA8 0CE7 4125 JSK UFDC:EX DO IT, SECOND UNIT 0CBF BFA3 0CE3 4126  JST STATUS CHECK STATUS 0CC0 BFA3 0CE4 4127 JST ERROR DISPLAY ANY ERROR  4128 * 0CC1 08FE 4129 COPY =-2,A SET COUNT FOR 2 0CC2 8455 0015 4130 COPY A,UF:TMP(Y) STORE COUNT 0CC3 839D 0CE1 4131 COPY UNITA,A GET FRIST UNIT 0CC4 875F 0CA4 4132 SIS2 COPY  A,UNIT DITTO 0CC5 845A 001A 4133 COPY A,UF:US(Y) STORE UNIT 0CC6 005C 4134 SBIT  ST0:SE,A SET SEEK END BIT 0CC7 8462 0022 4135 COPY A,UF:EX0(Y) EXPECTED STATUS BYTE 0 0CC8 829D 0CE6 4136 WAIT2 COPY =DLYLONG,A SET A-REG. FOR LONG DELAY 0CC9 FF93 0CDD 4137 JSK WAIT DO IT 0CCA BF98 0CE3 4138 JST STATUS CHECK STATUS 0CCB BF98 0CE4 4139 JST ERROR DISPLAY ANY ERROR 0CCC 090D 4140 COPY =UF:SIS,A GET SIS FUNCTION CODE 0CCD 8453 0013 4141 COPY A,UF:FC(Y) STORE FUNCTION CODE 0CCE FE98 0CE7 4142 JSK UFDC:EX DO IT 0CCF A38F 0CDF 4143 COPY TEMP3,X GET STATUS FLAG 0CD0 BF92 0CE3 4144 JST STATUS CHECK STATUS 0CD1 BF92 0CE4 4145  JST ERROR DISPLAY ANY ERROR 0CD2 804D 000D 4146 COPY UF:PCN(Y),A GET RETURNED TRACK 0CD3 9840 0000 4147 XOR UF:C(Y),A SAME AS SENT? 0CD4 1142 0CD7 4148 JEQ A,$+3 IF SO, JUMP 0CD5 0923 4149 COPY =ERR035,A 'MISMATCHED TRACK NUMS. 0CD6 BF8D 0CE4 4150 JST ERROR DISPLAY ERROR 0CD7 8388 0CE0 4151 COPY TEMP4,A GET ORIGINAL FUNCTION CODE 0CD8 8453 0013 4152 COPY A,UF:FC(Y) STORE IT 0CD9 838B 0CE5 4153 COPY UNITB,A GET SECOND UNIT 0CDA DC55 001 5 4154 IMS UF:TMP(Y) INC. COUNT 0CDB 9E68 0CC4 4155 JMP SIS2 LOOP BACK 1PAGE 0168 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:19.75 TEST UTILITIES (SEEK2 & RECAL2) 0CDC 2309 4156 RSK EXIT 4157 * 000A 4158 LPOOL 0CDD 0DCE WAIT 0CDE 1310 TRM 0CDF 12FE TEMP3 0CE0 12FF TEMP4 0CE1 1314 UNITA 0CE2 1311 HEAD 0CE3 0E42 STATUS 0CE4 0EFA ERROR 0CE5 1315 UNITB 0CE6 FA24 DLYLONG 1PAGE 0169 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:19.75 TEST UTILITIES (UFDC:EX) 4160 ******************************  4161 * 4162 * UFDC:EX - THIS SUBROUTINE WILL EXECUTE THE 4163 * UFDC FUNCTION GIVEN IN THE Y-CTRL. 4164 * BLK. ALL PARAMETERS NEEDED FOR THE 4165 *  FUNCTION MUST BE CONTAINED IN THE 4166 * Y-CTRL. BLK. 4167 * 4168 * CALLING SEQUENCE: 4169 * 4170 * JSK UFDC:EX 4171 *  4172 ****************************** 4173 * 00000CE7 4174 UFDC:EX EQU $ 0CE7 4309 4175 PUSH :10 SAVE EVERYTHING 0CE8 0010 0CE9 0E87 4176 RBIT GI:,S DISABLE INTS. 0CEA 82B9 0D24 4177 COPY =VECTOR,A GET INT. ADD. 0CEB FFB9 0D25 4178 JSK WRINVA SEND TO UFDC 0CEC 0900 4179 COPY =0,A CLEAR RESULT STATUS WORDS 0CED 844A 000A 4180  COPY A,UF:ST0(Y) STATUS BYTE 0 0CEE 844B 000B 4181 COPY A,UF:ST1(Y) STATUS BYTE 1 0CEF 844C 000C 4182 COPY A,UF:ST2(Y) STATUS BYTE 2 0CF0 8451 0011 4183 COPY A,UF:ST3(Y) STATUS BYTE 3 0CF1 844D 000D 4184 COPY A,UF:C2(Y) RETURNED CYLINDER NUMBER 0CF2 844E 000E 4185 COPY A,UF:H2(Y)  RETURNED HEAD NUMBER 0CF3 844F 000F 4186 COPY A,UF:R2(Y) RETURNED RECORD (SECTOR) 0CF4 8450 0010 4187  COPY A,UF:N2(Y) RETURNED BYTES/SECTOR CODE 0CF5 8456 0016 4188 COPY A,UF:STAT(Y) MAIN STATUS REG. 0CF6 844D 000D 4189 COPY A,UF:PCN(Y) PRESENT CYLINDER NUMBER 4190 * 0CF7 8053 0013 4191  COPY UF:FC(Y),A GET FUNCTION CODE 0CF8 030A 4192 XNX A INDEX INTO SPATTER TABLE 0CF9 9F80 0CFA 4193 JMP *$+1 SPLATTER TO CORRECT OPERATION 0CFA 0D09 4194 WORD INV INVALID COMMAND 1PAGE 0170 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:21.25 TEST UTILITIES (UFDC:EX) 0CFB 0D14 4195 WORD INIT INITIALIZE UFDC (RESET, SPECIFY) 0CFC 0D2D 4196 WORD RD READ DATA 0CFD 0D2F 4197 WORD RDEL READ DELETED DATA 0CFE 0D51 4198 WORD RDID READ ID 0CFF 0D5A 4199 WORD WD   WRITE DATA 0D00 0D5C 4200 WORD WDEL WRITE DELETED DATA 0D01 0D62 4201 WORD  SCEQ SCAN EQUAL 0D02 0D64 4202 WORD SCLE SCAN LOW OR EQUAL 0D03 0D66 4203  WORD SCHE SCAN HIGH OR EQUAL 0D04 0D79 4204 WORD RECAL RECALIBRATE 0D05 0D7E  4205 WORD SEEK SEEK 0D06 0D8B 4206 WORD SDS SENSE DRIVE STATUS 0D07 0D95 4207 WORD SIS SENSE INTERRUPT STATUS 0D08 0DA4 4208 WORD FMT FORMAT A TRACK 1PAGE 0171 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:21.75 TEST UTILITIES (UFDC:EX - SEN) 4210 ****************************** 4211 * 4212 * INV - INVALID COMMAND 4213 * 4214 * ENTER: NONE 4215 *  4216 * EXIT: UF:ERR = 0 4217 * UF:ST0 = STATUS BYTE 0 4218 *  4219 ****************************** 4220 * 00000D09 4221 INV EQU $ 0D09 829C 0D26 4222 COPY =:1FF,A SET INVALID COMMAND 0D0A FF95 0D20 4223 JSK UF:COM SEND IT 0D0B 51C2 0D0E 4224 JNE Q,EXIT:EX EXIT ON ERROR 0D0C FF94 0D21 4225 JSK UF:GET GET ST0 0D0D 844A 000A 4226 COPY A,UF:ST0(Y) STORE STATUS BYTE 0 0D0E C454 0014 4227 EXIT:EX COPY Q,UF:ERR(Y) STORE CODE 0D0F FF92 0D22 4228 JSK RDMNST READ MAIN STATUS REG. 0D10 8456 0016 4229 COPY A,UF:STAT(Y) STORE STATUS 0D11 6309 4230 POP RESTORE REGS. 0D12 0E85 4231 SBIT GI:,S ENABLE INTS. 0D13 2309 4232 RSK EXIT 1PAGE 0172 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:22.75 TEST UTILITIES (UFDC:EX - INIT)  4234 ****************************** 4235 * 4236 * INIT - INITIALIZE UFDC (RESET, SPECIFY, 4237 * READY INTERRUPT) 4238 * 4239 * ENTER: UF:HUT = HEAD UNLOAD TIME 4240 * UF:HLT = HEAD LOAD TIME 4241 * UF:SRT = STEP RATE TIME 4242 * 4243 * EXIT: UF:ERR = 0 OR ERROR 4244 * UF:OP = COMMAND OP CODE 4245 * 4246 ***************************** 4247 * 00000D14 4248 INIT EQU $ 0D14 8292 0D27 4249 COPY =OP:INIT,A SPECIFY OP CODE 0D15 FF8A 0D20 4250  JSK UF:COM SEND CMD TO UFDC 0D16 51C8 0D1F 4251 JNE Q,INITER EXIT ON ERROR 0D17 805E 001E 4252 COPY UF:SRT(Y),A STEP RATE TIME 0D18 0E31 4253 SHIFT A,LO,4 SHIFT LEFT 1 NYBLE 0D19 B45F 001F 4254 OR UF:HUT(Y),A SRT, HUT IN A-REG. 0D1A FF88 0D23 4255 JSK UF:PUT   SEND TO UFDC 0D1B 51C3 0D1F 4256 JNE Q,INITER EXIT ON ERROR 0D1C 8060 0020 4257 COPY UF:HLT(Y),A HEAD LOAD TIME 0D1D 0E01 4258 SHIFT A,LO,1 HLT WITH ND=0 (ALWAYS USING DMA) 0D1E FF84 0D23 4259 JSK UF:PUT SEND TO UFDC 0D1F 9E6E 0D0E 4260 INITER JMP EXIT:EX EXIT  4261 * 0008 4262 LPOOL 0D20 0E1F UF:COM 0D21 0E06 UF:GET 0D22 0E34 RDMNST 0D23 0E12 UF:PUT 0D24 0DEE VECTOR 0D25 0E3C WRINVA 0D26 01FF 1PAGE 0173 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:23.75 TEST UTILITIES (UFDC:EX - INIT) 0D27 0103 OP:INIT 1PAGE 0174 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:23.75 TEST UTILITIES (UFDC:EX - RD, RDEL, RDTR) 4264 ****************************** 4265 * 4266 * RDTR - READ TRACK 4267  * RD - READ DATA 4268 * RDEL - READ DELETED DATA 4269 * 4270 * ENTER: UF:DMA = DMA ADDRESS UF:C = CYLINDER 4271 * UF:BCT = DMA BYTE CNT. UF:H = HEAD IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII  IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII! IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIe820921102921820921102921820930093656e@820921102921820921102921820930093655" e820921102921820921102921820921102921e820921102921820921102921820921102921820921102921820921102921820921102921e8209300930342582093009332125820930093645# $ % & ' ( ) * + . UFDCDIAG:2 LST,  4272 * UF:MT = MULTI. TRACK UF:R = RECORD (SECTOR) 4273 * UF:MF = DOUBLE DEN. UF:N = BYTES/SECTOR CODE 4274 * UF:SK = SKIP UF:EOT = LAS SECTOR NUM. 4275 * UF:HD = HEAD ADR. UF:GPL = GAP LENGTH 4276 * UF:US = UNIT SELECT UF:DTL = DATA LENGTH 4277 * 4278 * EXIT: UF:ERR = 0 OR ERROR UF:C2 = RET. CYLINDER 4279 * UF:ST0 = STATUS BYTE 0 UF:H2 = RET. HEAD 4280 * UF:ST1 = STATUS BYTE 1 UF:R2 = RET. RECORD (SECTOR) 4281 * UF:ST2 = STATUS BYTE 2 UF:N2 = RET. BYTES/SECTOR CODE 4282 * UF:OP = COMMAND CODE 4283 * 4284 ******************************  4285 * 00000D28 4286 RDTR EQU $ 0D28 A2A2 0D4B 4287 COPY =OP:RDTR,X READ TRACK OP CODE 0D29 FF9D 0D47 4288 JSK DMA SEND DMA ADR. & BYTE COUNT 0D2A FF9D 0D48 4289 JSK MTMFSK GENERATE MT, MF, SK 0D2B 1860 4290 AND =:60,A MASK FOR MF & SK 0D2C 9E85 0D32 4291  JMP WRRDE DO IT 4292 * 00000D2D 4293 RD EQU $ 0D2D A29E 0D4C 4294  COPY =OP:RD,X READ DATA OP CODE 0D2E 9E81 0D30 4295 JMP $+2 DO IT 4296 * 00000D2F 4297 RDEL EQU $ 0D2F A29D 0D4D 4298 COPY =OP:RDEL,X READ DELETED DATA OP CODE  0D30 FF96 0D47 4299 JSK DMA SEND DMA ADR. & BYTE COUNT 1PAGE 0175 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:25.25 TEST UTILITIES (UFDC:EX - RD, RDEL, RDTR) 0D31 FF96 0D48 4300 JSK MTMFSK GENERATE MT, MF, SK 0D32 0027 4301 WRRDE OR X,A 'OR' IN OP CODE 0D33 FF6C 0D20 4302 JSK UF:COM SEND COMMAND 0D34 51D1 0D46 4303 JNE Q,WRRDER EXIT ON ERROR 0D35 FF93 0D49 4304 JSK HDUS GENERATE HD & US 0D36 FF6C 0D23 4305 JSK UF:PUT SEND TO UFDC 0D37 51CE 0D46 4306 JNE Q,WRRDER EXIT ON ERROR 0D38 FF91 0D4A 4307 JSK UF:SETUP SEND C, H, R, N, EOT, GPL 0D39 51CC 0D46 4308 JNE Q,WRRDER EXIT ON ERROR 0D3A 8046 0006 4309 COPY UF:DTL(Y),A GET DATA LENGTH 0D3B FF67 0D23 4310 JSK UF:PUT SEND TO UFDC 0D3C 51C9 0D46 4311 JNE Q,WRRDER EXIT ON ERROR 4312 * 0D3D 8059 0019 4313 RDDLY COPY UF:MODE(Y),A GET MODE REGISTER 0D3E 001F 4314 TBIT MR:5OR8,A 5" OR 8" 0D3F 36C2 0D42 4315  JF OV,$+3 0 = 8", 1 = 5" 0D40 828D 0D4E 4316 COPY =DLY1200,A 1200MS DELAY FOR 5" 0D41 9E81 0D43 4317 JMP $+2 0D42 828C 0D4F 4318 COPY =DLYMEDM,A 600MS DELAY FOR 8" 0D43 FF19 0CDD 4319 JSK WAIT WAIT FOR INTERRUPT 4320 * 0D44 51C1 0D46 4321 JNE Q,WRRDE- R EXIT ON ERROR 0D45 FEFF 0DC5 4322 JSK UF:RSULT READ ST0, ST1, ST2, C2, H2, R2, N2 0D46 9E47 0D0E 4323 WRRDER JMP EXIT:EX STORE ERROR 4324 * 000A 4325 LPOOL 0D47 0E01 DMA  0D48 0DF8 MTMFSK 0D49 0DF3 HDUS 0D4A 0DBC UF:SETUP 0D4B 0102 OP:RDTR 0D4C 0106 OP:RD 0D4D 010C OP:RDEL 0D4E FB50 DLY1200  0D4F FDA8 DLYMEDM 0D50 1PAGE 0176 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:26.50 TEST UTILITIES (UFDC:EX - RDID) 4327 ****************************** 4328 *  4329 * RDID - READ ID 4330 * 4331 * ENTER: UF:MT = MULTI. TRACK UF:HD = HEAD ADR. 4332 * UF:MF = DOUBLE DEN. UF:US = UNIT SELECT 4333 * UF:SK = SKIP 4334 * 4335 * EXIT: UF:ERR = O OR ERROR UF:C2 = RET. CYLINDER 4336 * UF:ST0 = STATUS BYTE 0 UF:H2 = RET. HEAD 4337 * UF:ST1 = STATUS BYTE 1 UF:R2 = RET. SECTOR 4338 * UF:ST2 = STATUS BYTE 2 UF:N2 = RET. BYTES/SECTOR CODE 4339 * UF:OP = COMMAND CODE 4340 * 4341 ****************************** 4342 *  00000D51 4343 RDID EQU $ 0D51 FF76 0D48 4344 JSK MTMFSK GENERATE MT, MF, SK 0D52 1840  4345 AND =:40,A MASK FOR MF ONLY 0D53 B68D 0D61 4346 OR =OP:RDID,A READ ID OP CODE 0D54 FF4B 0D20 4347 JSK UF:COM SEND COMMAND 0D55 51B0 0D46 4348 JNE Q,WRRDER EXIT ON ERROR 0D56 FF72 0D49 4349 JSK HDUS GENERATE HD & US 0D57 FF4B 0D23 4350 JSK UF:PUT SEND TO UFDC 0D58 51AD 0D46 4351 JNE Q,WRRDER EXIT ON ERROR 0D59 9E63 0D3D 4352 JMP  RDDLY DO DELAY 1PAGE 0177 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:27.25 TEST UTILITIES (UFDC:EX - WD, WDEL) 4354 ****************************** 4355 * 4356 * WD - WRITE DATA 4357 * WDEL - WRITE DELETED DATA 4358 *  4359 * ENTER: UF:DMA = DMA ADDRESS UF:C = CYLINDER 4360 * UF:BCT = DMA BYTE CNT.  UF:H = HEAD 4361 * UF:MT = MULTI. TRACK UF:R = SECTOR 4362 * UF:MF = DOUBLE DEN. UF:N = BYTES/SECTOR CODE 4363 * UF:SK = SKIP UF:EOT = LAST SECTOR NUM.  4364 * UF:HD = HEAD ADR. UF:GPL = GAP LENGTH 4365 * UF:US = UNIT SELECT UF:DTL = DATA LENGTH 4366 * 4367 * EXIT: UF:ERR = 0 OR ERROR UF:C2 = RET. CYLINDER 4368 * UF:ST0 = STATUS BYTE 0 UF:H2 = RET. HEAD 4369 * UF:ST1 = STATUS BYTE 1 UF:R2 = RET. SECTOR 4370 * UF:ST2 = STATUS BYTE 2 UF:N2 = RET. BYTES/SECTOR CODE .  4371 * UF:OP = COMMAND CODE 4372 * 4373 ******************************  4374 * 00000D5A 4375 WD EQU $ 0D5A 2905 4376 COPY =OP:WD,X WRITE DATA OP CODE 0D5B 9E81 0D5D 4377 JMP $+2 DO IT 4378 * 00000D5C 4379 WDEL EQU $ 0D5C 2909 4380 COPY =OP:WDEL,X WRITE DELETED DATA OP CODE 0D5D FF69 0D47 4381 JSK DMA SEND DMA ADR. & BYTE COUNT 0D5E FF69 0D48 4382 JSK MTMFSK GENERATE MT, MF, SK 0D5F 18C0 4383 AND =:C0,A MASK FOR MT & MF ONLY 0D60 9E51 0D32 4384 JMP WRRDE DO IT 4385 * 0001 4386 LPOOL 0D61 010A OP:RDID 1PAGE 0178 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:29.00 TEST UTILITIES (UFDC:EX - SCEQ, SCLE, SCHE)  4388 ****************************** 4389 * 4390 * SCEQ - SCAN EQUAL  4391 * SCLE - SCAN LOW OR EQUAL 4392 * SCHE - SCAN HIGH OR EQUAL 4393 *  4394 * ENTER: UF:DMA = DMA ADDRESS UF:C = CYLINDER 4395 * UF:BCT = DMA BYTE CNT. UF:H = HEAD 4396 * UF:MT = MULTI. TRACK UF:R = SECTOR 4397 * UF:MF = DOUBLE DEN. UF:N = BYTES/SECTOR CODE 4398 * UF:SK = SKIP UF:EOT = LAST SECTOR NUM.  4399 * UF:HD = HEAD ADR. UF:GPL = GAP LENGTH 4400 * UF:US = UNIT SELECT UF:STP = SCAN SECTOR 4401 * 4402 * EXIT: UF:ERR = 0 OR ERROR UF:C2 = RET. CYLINDER  4403 * UF:ST0 = STATUS BYTE 0 UF:H2 = RET. HEAD 4404 * UF:ST1 = STATUS BYTE 1 UF:R2 = RET. SECTOR 4405 * UF:ST2 = STATUS BYTE 2 UF:N2 = RET. BYTES/SECTOR CODE 4406 * UF:OP = COMMAND CODE 4407 * 4408 ******************************  4409 * 00000D62 4410 SCEQ EQU $ 0D62 A293 0D76 4411 COPY =OP:SCEQ,X SCAN EQUAL OP CODE 0D63 9E83 0D67 4412 JMP SCAN DO IT 4413 * 00000D64 4414 SCLE EQU $  0D64 A292 0D77 4415 COPY =OP:SCLE,X SCAN LOW OR EQUAL 0D65 9E81 0D67 4416 JMP SCAN DO IT 4417 * 00000D66 4418 SCHE EQU $ 0D66 A291 0D78 4419 COPY =OP:SCHE,X  SCAN HIGH OR EQUAL 0D67 FF5F 0D47 4420 SCAN JSK DMA SEND DMA ADR. & BYTE COUNT 0D68 FF5F 0D48 4421  JSK MTMFSK GENERATE MT, MF, SK 0D69 0027 4422 OR X,A 'OR' IN OP CODE 0D6A FF35 0D20 4423 JSK UF:COM SEND COMMAND 1PAGE 0179 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:30.50 TEST UTILITIES (UFDC:EX - SCEQ, SCLE, SCHE) 0D6B 51C9 0D75 4424 JNE/  Q,SCANERR EXIT ON ERROR 0D6C FF5C 0D49 4425 JSK HDUS GENERATE HD & US 0D6D FF35 0D23 4426  JSK UF:PUT SEND TO UFDC 0D6E 51C6 0D75 4427 JNE Q,SCANERR EXIT ON ERROR 0D6F FECC 0DBC 4428 JSK UF:SETUP SEND C, H, R, N, EOT, GPL 0D70 51C4 0D75 4429 JNE Q,SCANERR EXIT ON ERROR 0D71 8049 0009 4430 COPY UF:STP(Y),A SCAN EACH/ALTERNATE SECTOR 0D72 FF30 0D23 4431 JSK  UF:PUT SEND TO UFDC 0D73 51C1 0D75 4432 JNE Q,SCANERR EXIT ON ERROR 0D74 9E48 0D3D 4433  JMP RDDLY DO DELAY 0D75 9E18 0D0E 4434 SCANERR JMP EXIT:EX ERROR EXIT 4435 *  0003 4436 LPOOL 0D76 0111 OP:SCEQ 0D77 0119 OP:SCLE 0D78 011D OP:SCHE 1PAGE 0180 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:31.00 TEST UTILITIES (UFDC:EX - RECAL)  4438 ****************************** 4439 * 4440 * RECAL - RECALIBRATE  4441 * 4442 * ENTER: UF:HD = HEAD ADR. 4443 * UF:US = UNIT SELECT  4444 * 4445 * EXIT: UF:ERR = 0 OR ERROR 4446 * UF:OP = COMMAND OP CODE  4447 * 4448 ****************************** 4449 * 00000D79 4450 RECAL EQU $ 0D79 82A5 0D9F 4451 COPY =OP:RECAL,A RECALIBRATE OP CODE 0D7A FF25 0D20 4452 JSK  UF:COM SEND CMD TO UFDC 0D7B 51B9 0D75 4453 JNE Q,SCANERR EXIT ON ERROR 0D7C 805A 001A 4454  COPY UF:US(Y),A GET UNIT NUM. 0D7D 9E87 0D85 4455 JMP COMPL DO DELAY 1PAGE 0181 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:31.50 TEST UTILITIES (UFDC:EX - SEEK)  4457 ****************************** 4458 * 4459 * SEEK - SEEK TO A TRACK 4460 * 4461 * ENTER: UF:HD = HEAD ADR. UF:NCN = NEW CYLINDER NUMBER 4462 * UF:US = UNIT SELECT 4463 * 4464 * EXIT: UF:ERR = 0 OR ERROR  4465 * UF:OP = COMMAND OP CODE 4466 * 4467 *****************************  4468 * 00000D7E 4469 SEEK EQU $ 0D7E 82A1 0DA0 4470 COPY =OP:SEEK,A SEEK OP CODE 0D7F FF20 0D20 4471 JSK UF:COM SEND CMD TO UFDC 0D80 51D3 0D94 4472 JNE Q,SDSER  ON ERROR 0D81 FEF1 0DF3 4473 JSK HDUS GENERATE HD & US 0D82 FF20 0D23 4474 JSK UF:PUT SEND TO UFDC 0D83 51D0 0D94 4475 JNE Q,SDSER ON ERROR 0D84 8040 0000 4476 COPY UF:NCN(Y),A NEW CYLINDER NUMBER 0D85 FF1D 0D23 4477 COMPL JSK UF:PUT SEND TO UFDC 0D86 C454 0014 4478  COPY Q,UF:ERR(Y) STORE ERROR CODE 0D87 FF1A 0D22 4479 JSK RDMNST READ MAIN STATUS 0D88 8456 0 0016 4480 COPY A,UF:STAT(Y) STORE STATUS 0D89 6309 4481 POP RESTORE 0D8A 2309 4482 RSK EXIT THIS MESS 1PAGE 0182 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:32.50 TEST UTILITIES (UFDC:EX - SDS) 4484 ****************************** 4485 * 4486 * SDS - SENSE DRIVE STATUS 4487 * 4488 * ENTER: UF:HD = HEAD ADR 4489 * UF:US = UNIT SELECT 4490 * 4491 * EXIT: UF:ERR = 0 OR ERROR 4492 * UF:ST3 = STATUS BYTE 3 4493 * UF:OP = COMMAND OP CODE 4494 * 4495 ***************************** 4496 *  00000D8B 4497 SDS EQU $ 0D8B 8295 0DA1 4498 COPY =OP:SDS,A SENSE DRIVE STATUS OP CODE 0D8C FF13 0D20 4499 JSK UF:COM SEND CMD TO UFDC 0D8D 51C6 0D94 4500 JNE Q,SDSER ON ERROR 0D8E FEE4 0DF3 4501 JSK HDUS GENERATE HD & US 0D8F FF13 0D23 4502 JSK UF:PUT  SEND TO UFDC 0D90 51C3 0D94 4503 JNE Q,SDSER ON ERROR 0D91 FEF4 0E06 4504 JSK UF:GET  READ ST3 0D92 51C1 0D94 4505 JNE Q,SDSER ON ERROR 0D93 8451 0011 4506 COPY A,UF:ST3(Y) STORE ST3 0D94 9F8D 0DA2 4507 SDSER JMP EXIT:EX GET OUT 1PAGE 0183 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:33.25 TEST UTILITIES (UFDC:EX - SIS) 4509 ****************************** 4510 * 4511 * SIS - SENSE INTERRUPT STATUS 4512 * 4513 * ENTER: NONE 4514 * 4515 * EXIT: UF:ERR = 0 OR ERROR  4516 * UF:ST0 = STATUS BYTE 0 4517 * UF:PCN = PRESENT CYLINDER NUMBER 4518 * UF:OP = COMMAND OP CODE 4519 * 4520 ******************************  4521 * 00000D95 4522 SIS EQU $ 0D95 828D 0DA3 4523 COPY =OP:SIS,A SIS OP CODE 0D96 FF09 0D20 4524 JSK UF:COM SEND CMD TO UFDC 0D97 51C6 0D9E 4525 JNE Q,SISER ON ERROR 0D98 FEED 0E06 4526 JSK UF:GET READ ST0 0D99 51C4 0D9E 4527 JNE Q,SISER ON ERROR 0D9A 844A 000A 4528 COPY A,UF:ST0(Y) STORE ST0 0D9B FEEA 0E06 4529 JSK UF:GET READ PCN 0D9C 51C1 0D9E 4530 JNE Q,SISER ON ERROR 0D9D 844D 000D 4531 COPY A,UF:PCN(Y) STORE PCN 0D9E 9F83 0DA2 4532 SISER JMP EXIT:EX EXIT 4533 * 0005 4534 LPOOL 0D9F 0107 OP:RECAL 0DA0 010F OP:SEEK 0DA1 0104 OP:SDS 0DA2 0D0E EXIT:EX 0DA3 0108 OP:SIS 1PAGE 0184 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:34.25 TEST UTILITIES (UFDC:EX - FMT) 1  4536 ****************************** 4537 * 4538 * FMT - FORMAT A TRACK  4539 * 4540 * ENTER: UF:DMA = DMA ADDRESS UF:N = BYTES/SECTOR CODE 4541 *  UF:BCT = DMA BYTE CNT. UF:SC = SECTORS/CYLINDER 4542 * UF:MF = DOUBLE DEN. UF:GPL = GAP LENGTH 4543 * UF:HD = HEAD ADR. UF:D = DATA BYTE 4544 * 4545 *  EXIT: UF:ERR = 0 OR ERROR UF:C2 = RET. CYLINDER 4546 * UF:ST0 = STATUS BYTE 0 UF:H2 = RET. HEAD 4547 * UF:ST1 = STATUS BYTE 1 UF:R2 = RET. SECTOR 4548 * UF:ST2 = STATUS BYTE 2 UF:N2 = RET. BYTES/SECTOR CODE 4549 * UF:OP = COMMAND CODE 4550 *  4551 ****************************** 4552 * 00000DA4 4553 FMT EQU $ 0DA4 FEDC 0E01 4554 JSK DMA SEND DMA ADR AND BYTE COUNT TO UFDC 0DA5 FED2 0DF8 4555 JSK MTMFSK  GENERATE MT, MF, SK 0DA6 1840 4556 AND =:40,A MASK FOR MF ONLY 0DA7 190D 4557  OR =OP:FMT,A FORMAT OP CODE 0DA8 FEF6 0E1F 4558 JSK UF:COM SEND CMD TO UFDC 0DA9 51B4 0D9E 4559 JNE Q,SISER EXIT ON ERROR 0DAA FEC8 0DF3 4560 JSK HDUS GENERATE HD & US 0DAB FEE6 0E12 4561 JSK UF:PUT SEND TO UFDC 0DAC 51B1 0D9E 4562 JNE Q,SISER EXIT ON ERROR 0DAD 8043 0003 4563 COPY UF:N(Y),A NUMBER OF BYTES IN A SECTOR 0DAE FEE3 0E12 4564 JSK  UF:PUT SEND TO UFDC 0DAF 51AE 0D9E 4565 JNE Q,SISER ON ERROR 0DB0 8047 0007 4566 COPY UF:SC(Y),A SECTORS PER CYLINDER 0DB1 FEE0 0E12 4567 JSK UF:PUT SEND TO UFDC 0DB2 51AB 0D9E 4568 JNE Q,SISER ON ERROR 0DB3 8045 0005 4569 COPY UF:GPL(Y),A GAP LENGTH BETWEEN SECTORS 0DB4 FEDD 0E12 4570 JSK UF:PUT SEND TO UFDC 0DB5 51A8 0D9E 4571 JNE Q,SISER ON ERROR 1PAGE 0185 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:35.50 TEST UTILITIES (UFDC:EX - FMT) 0DB6 8048 0008 4572 COPY UF:D(Y),A DATA BYTE TO WRITE INTO SECTOR 0DB7 FEDA 0E12 4573 JSK UF:PUT SEND TO UFDC 0DB8 51A5 0D9E 4574 JNE Q,SISER ON ERROR 0DB9 9E03 0D3D  4575 JMP RDDLY EXIT ALTOGETHER 4576 * 0002 4577 LPOOL 0DBA 0E12 UF:PUT 0DBB 1PAGE 0186 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:35.75  TEST UTILITIES (UF:SETUP) 4579 ****************************** 4580 * 4581 * UF:SETUP - THIS SUBROUTINE WILL SEND THE FOLLOWING 4582 * PARAMETERS TO THE UFDC:  4583 * 4584 * UF:C - CYLINDER NUMBER 0 TO 76 4585 * UF:H 2  - HEAD ADDRESS 0 OR 1 4586 * UF:R - RECORD (SECTOR) NUMBER 4587 *  UF:N - BYTES/SECTOR CODE 4588 * UF:EOT - END OF TRACK/FINAL SECTOR NUMBER 4589 * UF:GPL - GAP LENGTH BETWEEN SECTOR 4590 * ENTER: Y-REG. = CTRL. BLK. ADD. 4591 * 4592 * EXIT: Q-REG. = ERROR/NO ERROR CODE 4593 * 4594 * CALLING SEQUENCE: 4595 * 4596 * JSK UF:SETUP 4597 * 4598 ****************************** 4599 * 00000DBC 4600 UF:SETUP EQU $ 0DBC 2900 4601  COPY =0,X SET UP FOR LOOP 0DBD 230A 4602 UF:SETLP XNX X INDEX INTO UFDC BLOCK 0DBE 8040 0000 4603 COPY UF:C(Y),A GET SETUP PARAMETER 0DBF FED2 0E12 4604 JSK UF:PUT SEND TO UFDC 0DC0 51C2 0DC3 4605 JNE Q,UF:SETDN BAD TRANSMISSION 0DC1 2B01 4606 ADD =1,X  BUMP COUNT/PTR 0DC2 2C06 4607 CLSN X,=6 COMPARE TO LIMIT 0DC3 2309 4608 UF:SETDN RSK  FINISHED 0DC4 9E78 0DBD 4609 JMP UF:SETLP MORE 1PAGE 0187 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:36.75 TEST UTILITIES (UF:RSULT) 4611 ****************************** 4612 * 4613 * UF:RSULT - THIS SUBROUTINE WILL READ THE FOLLOWING 4614 * PARAMETERS FROM THE UFDC: 4615 * 4616 * UF:ST0 - STATUS BYTE 0 4617 * UF:ST1 - STATUS BYTE 1 4618 * UF:ST2 - STATUS BYTE 2 4619 * UF:C2 - CYLINDER NUMBER 0 TO 76 (SECTOR ID INFO.) 4620 *  UF:H2 - HEAD ADDRESS 0 OR 1 (SECTOR ID INFO.) 4621 * UF:R2 - RECORD (SECTOR) NUMBER (SECTOR ID INFO.) 4622 * UF:N2 - BYTES/SECTOR CODE (SECTOR ID INFO.) 4623 * ENTER: Y-REG. = CTRL. BLK. ADDRESS 4624 * 4625 * EXIT: Q-REG. = ERROR/NO ERROR CODE 4626 * 4627 * CALLING SEQUENCE: 4628 * 4629 *  JSK UF:RSULT 4630 * 4631 ****************************** 4632 * 00000DC5 4633 UF:RSULT EQU $ 0DC5 2900 4634 COPY =0,X SET UP FOR LOOP 0DC6 FEBF 0E06 4635 UF:RSULP JSK UF:GET GET RESULT FROM UFDC 0DC7 51C4 0DCC 4636 JNE Q,UF:RSUDN BAD RECEPTION 0DC8 230A 4637 XNX X INDEX INTO UFDC BLOCK 0DC9 844A 000A 4638 COPY A,UF:ST0(Y) STORE RESULT 0DCA 2B01 4639 ADD =1,X BUMP COUNT/PTR 0DCB 2C07 4640 CLSN X,=7  COMPARE TO LIMIT 0DCC 2309 4641 UF:RSUDN RSK FINISHED 0DCD 9E78 0DC6 4642 JMP 3  UF:RSULP MORE 1PAGE 0188 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:38.25 TEST UTILITIES (WAIT) 4644 ****************************** 4645 * 4646 * WAIT - THIS SUBROUTINE WILL WAIT FOR AN INTERRUPT 4647 * IF INTERRUPTS ARE USED OR INPUT STATUS AND 4648 * TEST FOR AN INTERRUPT. 4649 * 4650 * ENTER: A-REG. = MILLISECOND COUNT 4651 * 4652 * EXIT: Q-REG. = ERROR/NO ERROR CODE 4653 * 4654 * CALLING SEQUENCE: 4655 * 4656 * COPY =-DELAY,A  4657 * JSK WAIT 4658 * 4659 ****************************** 4660 * 00000DCE 4661 WAIT EQU $ 0DCE 4900 4662 COPY =0,Q RESET Q-REG. 0DCF C7A1 0DF1 4663 COPY Q,INTFLG RESET INT. FLAG 0DD0 0E85 4664 SBIT GI:,S ENABLE INTS. 0DD1 C059 0019 4665 COPY UF:MODE(Y),Q MODE REGISTER 0DD2 400F 4666 TBIT MR:INTDS,Q INTERRUPTS? 0DD3 364A 0DDE 4667 JT OV,WAITINT YES 4668 * 4669 * WAIT FOR INTERRUPT BIT IN MAIN STATUS REG. 4670 * 0DD4 2000 4671 COPY A,X PUT COUNT INTO X-REG. 0DD5 FEDE 0E34 4672 WAITBIT JSK RDMNST READ MAIN STATUS REG. 0DD6 008F 4673 TBIT MSR:INT,A GET INTERRUPT BIT 0DD7 4900 4674 COPY =NORML:,Q NO ERROR AT THIS POINT 0DD8 36D2 0DEB 4675 JF OV,WAITRN INTERRUPT HAS OCCURRED, NO ERROR 0DD9 484C 4676 COPY =-180,Q SET COUNT 0DDA 54BF 0DDA 4677 IJNE Q,$ WAIT HERE FOR 1 MILLISEC 0DDB 34B9 0DD5 4678 IJNE X,WAITBIT NO INTERRUPT YET, TRY AGAIN 0DDC 49F3 4679 COPY =UFDC:NIB,Q NO STATUS INTERRUPT 1PAGE 0189 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:39.50 TEST UTILITIES (WAIT) 0DDD 9E8D 0DEB 4680 JMP WAITRN DO BAD EXIT 4681 * 4682 * WAIT FOR INTERRUPT TO OCCUR 4683 * 0DDE 484C 4684 WAITINT COPY =-180,Q SET TIME COUNT 0DDF 54BF 0DDF 4685 IJNE Q,$ WAIT HERE FOR 1 MILLISECOND 0DE0 14BD 0DDE 4686 IJNE A,$-2 REPEAT COUNT 0DE1 49F1 4687 COPY =UFDC:NIA,Q ERROR NO INTERRUPT 0DE2 9E88 0DEB 4688 JMP WAITRN  EXIT FOREVER 4689 * 4690 * HERE IS THE INTERRUPT SERVICE ROUTINE 4691 * 0DE3 0E0D 4692 WAITLOC ENT 0DE4 4900 4693 COPY =NORML:,Q SET FOR NO ERROR 0DE5 838B 0DF1  4694 COPY INTFLG,A GET INT. FLAG 0DE6 11C3 0DEA 4695 JNE A,$+4 IS SET, IS BAD 0DE7 8059 0019 4696 COPY UF:MODE(Y),A GET MODE REGISTER 0DE8 000F 4697 TBIT MR:INTDS,A INTER4 RUPTS? 0DE9 3641 0DEB 4698 JT OV,$+2 IS SET, IS OK 0DEA 49F2 4699 COPY =UFDC:UXI,Q UNEXPECTED INTERRUPT 0DEB DF85 0DF1 4700 WAITRN IMS INTFLG SET INTERRUPT FLAG 0DEC C454 0014 4701  COPY Q,UF:ERR(Y) STORE RET. CODE 0DED 2309 4702 RSK EXIT 4703 *  4704 * HERE IS THE INTERRUPT VECTOR 4705 * 0DEE BF80 0DEF 4706 VECTOR JST *$+1  JMP TO IT 0DEF 0DE3 4707 WORD WAITLOC INTERRUPT SERVICE ROUTINE 4708 * 0003 4709 LPOOL 0DF0 0E34 RDMNST 0DF1 1307 INTFLG 0DF2 1PAGE 0190 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:40.50 TEST UTILITIES (HDUS) 4711 ****************************** 4712 * 4713 * HDUS - THIS SUBROUTINE WILL GENERATE THE HEAD 4714  * AND UNIT SELECT WORD AND RETURN IT IN 4715 * THE A-REG. 4716 *  4717 * ENTER: Y-REG. = CTRL. BLK. ADD. 4718 * UF:HD = HEAD ADR. 4719 *  UF:US = UNIT SELECT 4720 * 4721 * EXIT: A-REG. = HEAD/UNIT COMMAND WORD  4722 * 4723 * CALLING SEQUENCE: 4724 * 4725 * JSK HDUS  4726 * 4727 ****************************** 4728 * 00000DF3 4729 HDUS  EQU $ 0DF3 8041 0001 4730 COPY UF:HD(Y),A HEAD ADR 0DF4 0E11 4731 SHIFT A,LO,2  SHIFT LEFT 2 BITS 0DF5 C05A 001A 4732 COPY UF:US(Y),Q UNIT SELECT 0DF6 0047 4733 OR  Q,A HD, US IN A REG 0DF7 2309 4734 RSK 1PAGE 0191 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:41.25 TEST UTILITIES (MTMFSK) 4736 ****************************** 4737 * 4738 * MTMFSK - THIS SUBROUTINE WILL GENERATE THE MT, 4739 * MF AND SK PARAMETERS INTO ONE COMMAND 4740 * WORD AND RETURN IT IN THE A-REG.  4741 * 4742 * ENTER: Y-REG. = CTRL. BLK. ADDRESS 4743 * UF:MT = MULTIPLE TRACKS 4744 * UF:MF = DOUBLE DENSITY 4745 * UF:SK = SKIP  4746 * 4747 * EXIT: A-REG. = MT/MF/SK COMMAND WORD 4748 * 4749 * CALLING SEQUENCE: 4750 * 4751 * JSK MTMFSK 4752 * 4753 ****************************** 4754 * 00000DF8 4755 MTMFSK EQU $ 0DF8 805B 001B 4756  COPY UF:MT(Y),A MULTIPLE TRACK 0DF9 0E61 4757 SHIFT A,LO,7 SHIFT INTO PLACE 0DFA C05C 001C 4758 COPY UF:MF(Y),Q DOUBLE DENSITY 0DFB 4E51 4759 SHIFT Q,LO,6 SHIFT INTO PLAC5 E 0DFC 0047 4760 OR Q,A GENERATE MT & MF 0DFD C05D 001D 4761 COPY UF:SK(Y),Q  SKIP 0DFE 4E41 4762 SHIFT Q,LO,5 SHIFT INTO PLACE 0DFF 0047 4763 OR Q,A  GENERATE MT, MF, SK 0E00 2309 4764 RSK EXIT 1PAGE 0192 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:42.00 TEST UTILITIES (DMA) 4766 ****************************** 4767 * 4768 * DMA - THIS SUBROUTINE WILL OUTPUT THE DMA  4769 * ADDRESS POINTER AND THE DMA BYTE 4770 * COUNT TO THE UFDC. 4771 *  4772 * ENTER: Y-REG. = CTRL. BLK. ADDRESS 4773 * UF:DMA = DMA ADDRESS  4774 * UF:BCT = DMA BYTE COUNT 4775 * 4776 * EXIT: NONE 4777  * 4778 * CALLING SEQUENCE: 4779 * 4780 * JSK DMA  4781 * 4782 ****************************** 4783 * 00000E01 4784 DMA EQU  $ 0E01 8057 0017 4785 COPY UF:DMA(Y),A DMA ADR 0E02 FEB7 0E3A 4786 JSK WRDMAP SEND IT TO THE UFDC 0E03 8058 0018 4787 COPY UF:BCT(Y),A DMA BYTE COUNT 0E04 FEB9 0E3E 4788 JSK WRDBCR SEND IT TO THE UFDC 0E05 2309 4789 RSK EXIT 1PAGE 0193 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:42.75 TEST UTILITIES (UF:GET) 4791 ****************************** 4792 * 4793 * UF:GET - THIS SUBROUTINE WILL INPUT A ONE  4794 * BYTE RESULT FROM THE UFDC. IT 4795 * WILL TRY THIS 200 TIMES BEFORE  4796 * AN ERROR OCCURS. 4797 * 4798 * ENTER: Y-REG. = CTRL. BLK. ADDRESS 4799 * 4800 * EXIT: A-REG. = RESULT BYTE 4801 * Q-REG. = ERROR/NO ERROR CODE 4802 * 4803 * CALLING SEQUENCE: 4804 *  4805 * JSK UF:GET 4806 * 4807 ****************************** 4808 * 00000E06 4809 UF:GET EQU $ 0E06 4838 4810 COPY =-200,Q 200 ATTEMPTS POSSIBLE 0E07 FEAC 0E34 4811 UF:GETLP JSK RDMNST READ MAIN STATUS 0E08 18D0 4812 AND =:D0,A RDY,DIR,BSY 0E09 0CD0 4813 CLSN A,=:D0 RDY=1,DIR=1,BSY=1? 0E0A 9E83 0E0E 4814 JMP UF:GETIT YES, READ RESULT 0E0B 54BB 0E07 4815 IJNE Q,UF:GETLP NO, TRY AGAIN 0E0C 49F0 4816  COPY =UFDC:RE1,Q TOO MANY REPEATS 0E0D 2309 4817 RSK EXIT 0E0E FEA3 0E32 4818 UF:GETIT JSK RDREGF GET RESULT 0E0F 18FF 4819 AND =:FF,A CLEAR UPPER BYTE OF A REG 0E10 496 00 4820 COPY =NORML:,Q NO ERROR 0E11 2309 4821 RSK EXIT 1PAGE 0194  MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:43.75 TEST UTILITIES (UF:PUT)  4823 ****************************** 4824 * 4825 * UF:PUT - THIS SUBROUTINE WILL OUTPUT A ONE 4826 * BYTE 'COMMAND' TO THE UFDC. IT WILL 4827 * TRY THIS 200 TIMES BEFORE AN ERROR 4828 * OCCURS. 4829 * 4830 * ENTER: Y-REG. = CTRL. BLK. ADDRESS 4831 * A-REG. = BYTE TO OUTPUT 4832 *  4833 * EXIT: Q-REG. = ERROR/NO ERROR CODE 4834 * 4835 * CALLING SEQUENCE:  4836 * 4837 * JSK UF:PUT 4838 * 4839 ****************************** 4840 * 00000E12 4841 UF:PUT EQU $ 0E12 4838 4842 COPY =-200,Q 200 ATTEMPTS POSSIBLE 0E13 8798 0E2C 4843 COPY A,TEMP2 SAVE BYTE 0E14 FE9F 0E34 4844 UF:PUTLP JSK RDMNST READ MAIN STATUS 0E15 18D0 4845 AND =:D0,A RDY,DIR,BSY 0E16 0C90 4846  CLSN A,=:90 RDY=1,DIR=0,BSY=1? 0E17 9E83 0E1B 4847 JMP UF:PUTIT YES, PUT BYTE TO UFDC  0E18 54BB 0E14 4848 IJNE Q,UF:PUTLP NO, TRY AGAIN 0E19 49F4 4849 COPY =UFDC:RE2,Q TOO MANY REPEATS 0E1A 2309 4850 RSK EXIT 0E1B 8390 0E2C 4851 UF:PUTIT COPY TEMP2,A RESTORE A-REG. 0E1C FE99 0E36 4852 JSK WRCDSP SEND BYTE TO UFDC 0E1D 4900 4853 COPY  =NORML:,Q NO ERROR 0E1E 2309 4854 RSK EXIT 1PAGE 0195 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:44.75 TEST UTILITIES (UF:COM) 4856 ****************************** 4857 * 4858 * UF:COM - THIS SUBROUTINE WILL OUTPUT 4859 * A WORD COMMAND TO THE UFDC. IT 4860 * WILL TRY THIS 200 TIMES BEFORE  4861 * AN ERROR OCCURS. 4862 * 4863 * ENTER: Y-REG. = CTRL. BLK. ADDRESS  4864 * A-REG. = COMMAND WORD 4865 * 4866 * EXIT: Q-REG. = ERROR/NO ERROR CODE 4867 * UF:OP = COMMAND OP CODE 4868 * 4869 * CALLING SEQUENCE: 4870 * 4871 * JSK UF:COM 4872 * 4873 ****************************** 4874 * 00000E1F 4875 UF:COM EQU $ 0E1F 8461 0021 4876  COPY A,UF:OP(Y) SAVE IT FOR ERROR REPORT 0E20 4838 4877 COPY =-200,Q 200 ATTEMPTS POSSIBLE 0E21 FE92 0E34 4878 UF:COMLP JSK RDMNST GET MAIN STATUS 0E22 18D0 4879 AND =:D0,A RDY7 ,DIR,BSY 0E23 0C80 4880 CLSN A,=:80 RDY=1,DIR=0,BSY=0? 0E24 9E83 0E28 4881 JMP UF:COMIT YES, PUT COMMAND WORD TO UFDC 0E25 54BB 0E21 4882 IJNE Q,UF:COMLP NO, READ STATUS AGAIN 0E26 49F5  4883 COPY =UFDC:RE3,Q TOO MANY REPEATS 0E27 2309 4884 RSK EXIT 0E28 8061 0021 4885 UF:COMIT COPY UF:OP(Y),A RESTORE A-REG. 0E29 FE8E 0E38 4886 JSK WRCDRG WRTIE COMMAND WORD 0E2A 4900 4887 COPY =NORML:,Q NO ERROR 0E2B 2309 4888 RSK EXIT 4889 * 0006 4890 LPOOL 0E2C 12FD TEMP2 1PAGE 0196 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:46.00 TEST UTILITIES (UF:COM) 0E2D 0E2E 0E2F 0E30 0E31 1PAGE 0197 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:46.25 TEST UTILITIES (I/O SUBROUTINES) 4892 ****************************** 4893 * 4894 * RDREGF - READ UFDC RESULT REGISTER FILE 4895 * 4896 * RDMNST - READ UFDC MAIN STATUS REGISTER 4897 * 4898 * WRCDSP - WRITE UFDC COMMAND SPECIFICATION REGISTERS 4899 * 4900 * WRCDRG - WRITE UFDC COMMAND REGISTER 4901 * 4902 * WRDMAP - WRITE DMA ADDRESS POINTER 4903 * 4904 * WRINVA - WRITE INTERRUPT VECTOR ADDRESS  4905 * 4906 * WRDBCR - WRITE DMA BYTE COUNT REGISTER 4907 * 4908 * WRMDRG - WRITE MODE REGISTER 4909 * 4910 * CALLING SEQUENCE: 4911 *  4912 * ENTER/EXIT WITH PARAMETER IN A-REG. 4913 * 4914 * RDREGF - JSK RDREGF 4915 * 4916 * RDMNST - JSK RDMNST 4917 * 4918 * WRCDSP - JSK WRCDSP 4919 * 4920 * WRCDRG - JSK WRCDRG  4921 * 4922 * WRDMAP - JSK WRDMAP 4923 * 4924 * WRINVA - JSK WRINVA 4925 * 4926 * WRDBCR - JSK WRDBCR 4927 * 1PAGE 0198 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:47.25 TEST UTILITIES (I/O SUBROUTINES) 4928 * WRMDRG - JSK WRMDRG 4929 * 4930 ******************************* 4931 * 00000E32 4932 RDREGF EQU $ 0E32 0130 4933 DA1 IN UFDCDA,A  GET RESULT REG. FILE 0E33 2309 4934 RSK 4935 * 00000E34 4936 RDMNST EQU $ 0E34 0131 4937 DA2 IN UFDCDA;1,A GET MAIN STATUS REG. 0E35 2309 4938 RSK  4939 * 00000E36 4940 WRCDSP EQU $ 0E36 0230 4941 DA3 OUT A,UFDCDA WRITE COMMAND SPECS8 . REGS. 0E37 2309 4942 RSK 4943 * 00000E38 4944 WRCDRG EQU $ 0E38 0231  4945 DA4 OUT A,UFDCDA;1 WRITE COMMAND REG. 0E39 2309 4946 RSK 4947 * 00000E3A 4948 WRDMAP EQU $ 0E3A 0430 4949 DA5 SELP A,UFDCDA WRITE DMA ADD. POINTER 0E3B 2309  4950 RSK 4951 * 00000E3C 4952 WRINVA EQU $ 0E3C 0431 4953 DA6 SELP  A,UFDCDA;1 WRITE INT. VECTOR ADD. 0E3D 2309 4954 RSK 4955 * 00000E3E 4956 WRDBCR EQU $ 0E3E 0432 4957 DA7 SELP A,UFDCDA;2 WRITE DMA BYTE COUNT REG. 0E3F 2309 4958 RSK 4959 * 00000E40 4960 WRMDRG EQU $ 0E40 0433 4961 DA8 SELP A,UFDCDA;3 WRITE MODE REG. 0E41 2309 4962 RSK 1PAGE 0199 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:48.25 TEST UTILITIES (STATUS) 4964 ******************************  4965 * 4966 * STATUS - THIS SUBROUTINE WILL CHECK THE RETURNED 4967 * STATUS BYTES (0-3) FOR ERROR BITS BEING 4968 * SET. 4969 * 4970 *  IF PREVIOUS COMMAND BEFORE A 'SENSE 4971 * INTERRUPT STATUS' COMMAND WAS EITHER  4972 * A 'SEEK' OR 'RECALIBRATE' THEN SET 4973 * THE X-REG. AS FOLLOWS:  4974 * 4975 * X-REG. = 0 - NEITHER 'SEEK' OR 'RECAL' 4976 *  1 - 'SEEK' COMMAND 4977 * 2 - 'RECALIBRATE' COMMAND 4978 *  4979 * Q-REG. HOLDS ORIGINAL (ERROR) CODE RETURNED 4980 * FROM I/O OPERATION:  4981 * 4982 * Q-REG. = 0 - NO ERROR 4983 * :F0 - TOO MANY REPEATS (RESULT BYTE) 4984 * :F1 - NO ACTUAL INTERRUPT 4985 *  :F2 - UNEXPECTED INTERRUPT 4986 * :F3 - NO 'STATUS' INTERRUPT  4987 * :F4 - TOO MANY REPEATS (COMMAND BYTE) 4988 * :F5 - TOO MANY REPEATS (SPEC. BYTE) 4989 * :XX - UNKNOWN ERROR CODE 4990 *  4991 * CALLING SEQUENCE: 4992 * JST STATUS 4993 * JMP ? ERROR RETURN R 4994 * JMP ? GOOD RETURN R+1 4995 * 4996 ****************************** 4997 * 0E42 0E0D 4998 STATUS ENT 0E43 C054 0014 4999 COPY UF:ERR(Y),Q GET POSSIBLE ERROR CODE 1PAGE 0200 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:49.75 TEST UTILITIES (STATUS) 0E44 5150 0E55 5000 JEQ Q,STAT10 JUMP IF Q-REG. IS OK 0E9 45 0900 5001 COPY =0,A RESET ERROR FLAG 0E46 4CF0 5002 CLSN Q,=UFDC:RE1 TOO MANY REPEATS? 0E47 0901 5003 COPY =ERR001,A YES, SET ERROR CODE 0E48 4CF1 5004 CLSN  Q,=UFDC:NIA NO INTERRUPT? 0E49 0902 5005 COPY =ERR002,A YES, SET ERROR CODE 0E4A 4CF2 5006  CLSN Q,=UFDC:UXI UNEXPECTED INTERRUPT? 0E4B 0903 5007 COPY =ERR003,A YES SET ERROR CODE  0E4C 4CF3 5008 CLSN Q,=UFDC:NIB NO STATUS INT.? 0E4D 0929 5009 COPY =ERR041,A YES, SET ERROR CODE 0E4E 4CF4 5010 CLSN Q,=UFDC:RE2 TOO MANY REPEATS 0E4F 092A 5011 COPY  =ERR042,A YES, SET ERROR CODE 0E50 4CF5 5012 CLSN Q,=UFDC:RE3 TOO MANY REPEATS? 0E51 092B 5013 COPY =ERR043,A YES, SET ERROR CODE 0E52 11C1 0E54 5014 JNE A,$+2 IF ERROR, JUMP 0E53 0904 5015 COPY =ERR004,A 'UNKNOWN ERROR CODE' 0E54 9F6D 0E42 5016 JMP *STATUS  ERROR EXIT 5017 * 0E55 8053 0013 5018 STAT10 COPY UF:FC(Y),A GET FUNCTION CODE 0E56 030A 5019 XNX A INDEX INTO SPLATTER TABLE 0E57 9E80 0E58 5020 JMP $+1 SPLATTER TO CORRECT OPERATION 0E58 9E8E 0E67 5021 JMP STAT20 INVALID 0E59 9E9E 0E78 5022 JMP STAT60 INITIALIZE 0E5A 9E91 0E6C 5023 JMP STAT30 READ DATA 0E5B 9E90 0E6C 5024 JMP STAT30 READ DELETED DATA 0E5C 9E8F 0E6C 5025 JMP STAT30 READ ID 0E5D 9E8E 0E6C 5026 JMP STAT30 WRITE DATA 0E5E 9E8D 0E6C 5027 JMP STAT30 WRITE DELETED DATA 0E5F 9E8C 0E6C 5028 JMP STAT30 SCAN EQUAL 0E60 9E8B 0E6C 5029 JMP STAT30 SCAN LOW OR EQUAL 0E61 9E8A 0E6C 5030 JMP STAT30 SCAN HIGH OR EQUAL 0E62 9E95 0E78 5031 JMP STAT60 RECALIBRATE 0E63 9E94 0E78 5032 JMP STAT60 SEEK 0E64 9E8E 0E73 5033 JMP STAT40 SENSE DRIVE STATUS 0E65 9E90 0E76 5034 JMP STAT50 SENSE INTERRUPT STATUS 0E66 9E85 0E6C 5035 JMP STAT30 FORMAT 1PAGE 0201 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:51.25 TEST UTILITIES (STATUS) 5036 * 0E67 804A 000A 5037 STAT20 COPY UF:ST0(Y),A GET STATUS BYTE 0 0E68 0C80 5038 CLSN A,=:80 INVALID COMMAND? 0E69 9E8E 0E78 5039 JMP STAT60  YES, EXIT 0E6A 0926 5040 COPY =ERR038,A 'BAD STATUS' 0E6B 9F56 0E42 5041 JMP *STATUS DISPLAY ERROR 5042 * 0E6C BE91 0E7E 5043 STAT30 JST ST:ST0 CHECK STATUS BYTE 0 0E6D 9F54 0E42 5044 JMP *STATUS DISPLAY ERROR 0E6E BEB4 0EA3 5045 JST ST:ST1 CHECK STATUS BYTE 1 0E6F 9F52 0E42 5046 JMP *STATUS DISPLAY ERROR 0E70 BED7 0EC8 5047 JST ST:ST2 :  CHECK STATUS BYTE 2 0E71 9F50 0E42 5048 JMP *STATUS DISPLAY ERROR 0E72 9E85 0E78 5049 JMP STAT60 ELSE EXIT 5050 * 0E73 BEF2 0EE6 5051 STAT40 JST ST:ST3 CHECK STATUS BYTE 3 0E74 9F4D 0E42 5052 JMP *STATUS DISPLAY ERROR 0E75 9E82 0E78 5053 JMP STAT60 ELSE EXIT 5054 * 0E76 BE87 0E7E 5055 STAT50 JST ST:ST0 CHECK STATUS BYTE 0 0E77 9F4A 0E42 5056 JMP *STATUS DISPLAY ERROR 5057 * 0E78 DE49 0E42 5058 STAT60 IMS STATUS  SET GOOD RETURN 0E79 9F48 0E42 5059 JMP *STATUS EXIT 5060 * 0004 5061  LPOOL 0E7A 0E7B 0E7C 0E7D 1PAGE 0202 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:52.00 TEST UTILITIES (STATUS - ST:ST0) 5063 ******************************  5064 * 5065 * ST:ST0 - THIS SUBROUTINE WILL CHECK STATUS 5066 * BYTE 0 FOR THE FOLLOWING ERROR 5067 * BITS BEING SET: 5068 * 5069 *  ST0:IC1 ST0:NR 5070 * ST0:IC0 ST0:EC 5071 * ST0:SE  5072 * 5073 * CALLING SEQUENCE: 5074 * JST ST:ST0 5075 *  JMP ? ERROR RETURN R 5076 * JMP ? GOOD RETURN R+1 5077 *  5078 ****************************** 5079 * 0E7E 0E0D 5080 ST:ST0 ENT 0E7F C04A 000A 5081 COPY UF:ST0(Y),Q GET STATUS BYTE 0 0E80 58C0 5082 AND =:C0,Q MASK FOR LAST BITS  0E81 5146 0E88 5083 JEQ Q,ST:S001 IF ZERO, JUMP 0E82 0905 5084 COPY =ERR005,A 'ABNORMAL TERMINATION' 0E83 4C80 5085 CLSN Q,=:80 INVALID COMMAND? 0E84 0906 5086 COPY  =ERR006,A YES, SET ERROR CODE 0E85 4CC0 5087 CLSN Q,=:C0 ABNORMAL TERMINATION? 0E86 0907  5088 COPY =ERR007,A YES, SET ERROR CODE 0E87 9F76 0E7E 5089 JMP *ST:ST0 DISPLAY ERROR 5090 * 0E88 C04A 000A 5091 ST:S001 COPY UF:ST0(Y),Q GET STATUS BYTE 0 0E89 314D 0E97 5092  JEQ X,ST:S003 IF NOT SEEK OR RECAL, JUMP 0E8A 2C01 5093 CLSN X,=1 SEEK? 0E8B 9E87 0E93 5094 JMP ST:S002 YES, JUMP 0E8C 0908 5095 COPY =ERR008,A 'EQUIPMENT CHECK' 0E8D 404F 5096 TBIT ST0:EC,Q CHECK BIT 0E8E 3652 0EA1 5097 JT OV,ST:S006 IF SET, ERROR 0E8F 0927 5098 COPY =ERR039,A 'BAD RECAL SEEK' 1PAGE 0203 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:53.50 TEST UTILITIES (STATUS - ST:ST0) 0E90 405F 5099  TBIT ST0:SE,Q CHECK BIT 0E91 36CF 0EA1 5100 JF OV,ST:S006 IF RESET, ERROR 0E92 9E8A 0E9D 5101 ;  JMP ST:S005 CHECK 'SE' BIT 5102 * 0E93 0909 5103 ST:S002 COPY =ERR009,A 'BAD SEEK END' 0E94 405F 5104 TBIT ST0:SE,Q CHECK BIT 0E95 36CB 0EA1 5105 JF OV,ST:S006 IF NOT SET, ERROR 0E96 9E83 0E9A 5106 JMP ST:S004 DO EC BIT CHECK 5107 * 0E97 090A 5108 ST:S003 COPY =ERR010,A 'SE BIT HIGH' 0E98 405F 5109 TBIT ST0:SE,Q CHECK BIT 0E99 3647 0EA1 5110 JT OV,ST:S006 IF SET, ERROR 0E9A 090B 5111 ST:S004 COPY =ERR011,A 'EC BIT HIGH' 0E9B 404F 5112 TBIT ST0:EC,Q CHECK BIT 0E9C 3644 0EA1 5113 JT OV,ST:S006  IF SET, ERROR 5114 * 0E9D 090C 5115 ST:S005 COPY =ERR012,A 'NOT READY' 0E9E 403F 5116 TBIT ST0:NR,Q CHECK BIT 0E9F 3641 0EA1 5117 JT OV,ST:S006 IF SET, ERROR  5118 * 0EA0 DE5D 0E7E 5119 IMS ST:ST0 SET GOOD RETURN 0EA1 2900 5120 ST:S006 COPY =0,X  RESET STATUS FLAG 0EA2 9F5B 0E7E 5121 JMP *ST:ST0 EXIT GOOD OR BAD 1PAGE 0204 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:54.25 TEST UTILITIES (STATUS - ST:ST1)  5123 ****************************** 5124 * 5125 * ST:ST1 - THIS SUBROUTINE WILL CHECK STATUS BYTE 5126 * 1 FOR THE FOLLOWING ERROR BITS BEING 5127 * SET: 5128 * 5129 * ST1:EN ST1:3 - SHOULD BE LOW 5130 * ST1:6 - SHOULD BE LOW ST1:ND 5131 * ST1:DE ST1:NW  5132 * ST1:OR ST1:MA 5133 * 5134 * CALLING SEQUENCE:  5135 * JST ST:ST1 5136 * JMP ? ERROR RETURN R 5137 *  JMP ? GOOD RETURN R+1 5138 * 5139 ****************************** 5140 * 0EA3 0E0D 5141 ST:ST1 ENT 0EA4 C04B 000B 5142 COPY UF:ST1(Y),Q GET STATUS BYTE 1 0EA5 090F  5143 COPY =ERR015,A 'END OF CYLINDER' 0EA6 407F 5144 TBIT ST1:EN,Q CHECK BIT 0EA7 3652 0EBA 5145 JT OV,ST:S101 IF SET, ERROR 5146 * 0EA8 0910 5147 COPY =ERR016,A ' BIT 6 IS SET' 0EA9 406F 5148 TBIT ST1:6,Q CHECK BIT 0EAA 364F 0EBA 5149  JT OV,ST:S101 IF SET, ERROR 5150 * 0EAB 0911 5151 COPY =ERR017,A 'DATA ERROR' 0EAC 405F 5152 TBIT ST1:DE,Q CHECK BIT 0EAD 364C 0EBA 5153 JT OV,ST:S101 IF SET, ERROR 5154 * 0EAE 0912 5155 COPY =ERR018,A 'OVER RUN' 0EAF 404F 5156  TBIT ST1:OR,Q CHECK BIT 0EB0 3649 0EBA 5157 JT OV,ST:S101 IF SET, ERROR 51< 58 * 1PAGE 0205 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:55.75 TEST UTILITIES (STATUS - ST:ST1) 0EB1 0913 5159 COPY =ERR019,A 'BIT 3 IS SET' 0EB2 403F 5160  TBIT ST1:3,Q CHECK BIT 0EB3 3646 0EBA 5161 JT OV,ST:S101 IF SET, ERROR 5162 * 0EB4 402F 5163 TBIT ST1:ND,Q CHECK BIT 0EB5 36C5 0EBB 5164 JF OV,ST:S102 IF NOT SET, JUMP 0EB6 A053 0013 5165 COPY UF:FC(Y),X GET FUNCTION CODE 0EB7 0914 5166 COPY =ERR020,A 'NO DATA' 0EB8 2C04 5167 CLSN X,=UF:RDID READ ID? 0EB9 0915 5168 COPY =ERR021,A YES, SET ERROR CODE 0EBA 9F68 0EA3 5169 ST:S101 JMP *ST:ST1 DISPLAY ERROR 5170 * 0EBB 0917 5171 ST:S102 COPY =ERR023,A 'NOT WRITABLE' 0EBC 401F 5172 TBIT ST1:NW,Q CHECK BIT 0EBD 363C 0EBA 5173 JT OV,ST:S101 IF SET, ERROR 5174 * 0EBE 400F 5175  TBIT ST1:MA,Q CHECK BIT 0EBF 36C6 0EC6 5176 JF OV,ST:S103 IF RESET, JUMP 0EC0 804C 000C 5177  COPY UF:ST2(Y),A GET STATUS BYTE 2 0EC1 000F 5178 TBIT ST2:MD,A CHECK BIT 0EC2 0918  5179 COPY =ERR024,A 'MISSING ADDRESS MARK' 0EC3 36C1 0EC5 5180 JF OV,$+2 IF RESET, JUMP 0EC4 0919 5181 COPY =ERR025,A 'MISSING ADDRESS MARK' 0EC5 9F5D 0EA3 5182 JMP *ST:ST1 DISPLAY ERROR 5183 * 0EC6 DE5C 0EA3 5184 ST:S103 IMS ST:ST1 SET GOOD RETURN 0EC7 9F5B 0EA3 5185 JMP *ST:ST1 EXIT 1PAGE 0206 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:56.75 TEST UTILITIES (STATUS - ST:ST2) 5187 ****************************** 5188 * 5189 * ST:ST2 - THIS SUBROUTINE WILL CHECK STATUS BYTE 5190 *  2 FOR THE FOLLOWING ERROR BITS BEING 5191 * SET: 5192 * 5193 * ST2:7 - SHOULD BE LOW ST2:SN 5194 * ST2:DD ST2:BC  5195 * ST2:WC ST2:MD 5196 * 5197 * CALLING SEQUENCE:  5198 * JST ST:ST2 5199 * JMP ? ERROR RETURN R 5200  * JMP ? GOOD RETURN R+1 5201 * 5202 ******************************  5203 * 0EC8 0E0D 5204 ST:ST2 ENT 0EC9 C04C 000C 5205 COPY UF:ST2(Y),Q GET STATUS BYTE 2 0ECA 091A 5206 COPY =ERR026,A 'BIT 7 IS SET' 0ECB 407F 5207 TBIT ST2:7,Q CHECK BIT 0ECC 3658 0EE5 5208 JT OV,ST:S203 IF SET, ERROR 5209 * 0ECD 091B 5210  COPY =ERR027,A 'DATA ERROR' 0ECE 405F 5211 TBIT ST2:DD,Q CHECK BIT 0ECF 3655 0EE5 5212 =  JT OV,ST:S203 IF SET, ERROR 5213 * 0ED0 091C 5214 COPY =ERR028,A 'WRONG CYLINDER' 0ED1 404F 5215 TBIT ST2:WC,Q CHECK BIT 0ED2 3652 0EE5 5216 JT OV,ST:S203 IF SET, ERROR 5217 * 0ED3 8053 0013 5218 COPY UF:FC(Y),A SET FUNCTION CODE 0ED4 0C07 5219 CLSN A,=UF:SCEQ SCAN EQUAL? 0ED5 9E85 0EDB 5220 JMP ST:S201 YES, JUMP 0ED6 0C08 5221 CLSN A,=UF:SCLE SCAN LOW OR EQUAL? 0ED7 9E83 0EDB 5222 JMP ST:S201 YES, JUMP 1PAGE 0207 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:58.00 TEST UTILITIES (STATUS - ST:ST2) 0ED8 0C09 5223 CLSN A,=UF:SCHE SCAN HIGH OR EQUAL? 0ED9 9E81 0EDB 5224  JMP $+2 YES, JUMP 0EDA 9E83 0EDE 5225 JMP ST:S202 ELSE CONTINUE 0EDB 091D 5226 ST:S201 COPY =ERR029,A 'SCAN NOT SATISFIED' 0EDC 402F 5227 TBIT ST2:SN,Q CHECK BIT 0EDD 3647 0EE5 5228 JT OV,ST:S203 IF SET, ERROR 5229 * 0EDE 091E 5230 ST:S202 COPY =ERR030,A 'BAD CYLINDER' 0EDF 401F 5231 TBIT ST2:BC,Q CHECK BIT 0EE0 3644 0EE5 5232 JT OV,ST:S203 IF SET, ERROR 5233 * 0EE1 091F 5234 COPY =ERR031,A 'MISSING ADDRESS MARK' 0EE2 400F 5235 TBIT ST2:MD,Q CHECK BIT 0EE3 3641 0EE5 5236 JT OV,ST:S203  IF SET, ERROR 5237 * 0EE4 DE63 0EC8 5238 IMS ST:ST2 SET GOOD RETURN 0EE5 9F62 0EC8  5239 ST:S203 JMP *ST:ST2 EXIT GOOD OR BAD 1PAGE 0208 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:02:58.75 TEST UTILITIES (STATUS - ST:ST3) 5241 ****************************** 5242 * 5243 * ST:ST3 - THIS SUBROUTINE WILL CHECK STATUS BYTE 5244 *  3 FOR THE FOLLOWING ERROR BITS BEING 5245 * SET: 5246 *  5247 * ST3:FT 5248 * ST3:HD - MATCH ON HEAD ADDRESS 5249 * ST3:US1 - MATCH ON UNIT SELECT 5250 * ST3:US0 - 5251 * 5252 * CALLING SEQUENCE: 5253 * JST ST:ST3 5254 * JMP ? ERROR RETURN R  5255 * JMP ? GOOD RETURN R+1 5256 * 5257 ****************************** 5258 * 0EE6 0E0D 5259 ST:ST3 ENT 0EE7 C051 0011 5260 COPY UF:ST3(Y),Q GET STATUS BYTE 3 0EE8 0920 5261 COPY =ERR032,A 'FAULT' 0EE9 407F 5262 TBIT ST3:FT,Q CHECK BIT 0EEA 364C 0EF7 5263 JT OV,ST:S301 IF SET, ERROR 5264 * 0EEB 0040  5265 COPY Q,A PUT 'ST3' INTO A-REG. 0EEC 0E19 5266 SHIFT A,RO,ST3:HD SHIFT INTO P> LACE 0EED 1801 5267 AND =1,A MASK BIT 0EEE 9841 0001 5268 XOR UF:H(Y),A SAME AS SENT? 0EEF 1142 0EF2 5269 JEQ A,$+3 IF SO, JUMP 0EF0 0921 5270 COPY =ERR033,A  'HEAD ADDRESS NOT SAME' 0EF1 9F74 0EE6 5271 JMP *ST:ST3 DISPLAY ERROR 5272 * 0EF2 0040 5273 COPY Q,A PUT 'ST3' INTO A-REG. 0EF3 1803 5274 AND =3,A MASK BITS 0EF4 985A 001A 5275 XOR UF:US(Y),A SAME AS SENT? 0EF5 1142 0EF8 5276 JEQ A,$+3  IF SO, JUMP 1PAGE 0209 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:03:00.00 TEST UTILITIES (STATUS - ST:ST3) 0EF6 0922 5277 COPY =ERR034,A 'UNIT SELECT NOT SAME' 0EF7 9F6E 0EE6 5278 ST:S301 JMP *ST:ST3 DISPLAY ERROR 5279 * 0EF8 DE6D 0EE6 5280 IMS ST:ST3 SET GOOD RETURN 0EF9 9F6C 0EE6 5281 JMP *ST:ST3 EXIT 1PAGE 0210 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:03:00.25 TEST UTILITIES (ERROR) 5283 ****************************** 5284 * 5285 * ERROR - DISPLAY ERROR REPORT 5286 *  5287 * THIS SUBROUTINE WILL DISPLAY AN ERROR REPORT 5288 * IN THE FOLLOWING FORMAT ACCORDING TO SENSE 5289 * SWITCH AND CTRL. WORD SETTING: 5290 *  5291 * ER XX ER ADD :XXXX UNIT X PASS X TEST X 5292 * COM OP :XXXX (FUNCTION) MODE REG :XX ( XXXX XXXX ) 5293 * Y-CTRL BLK ADD :XXXX INT VEC ADD :XXXX 5294 * DMA ADD :XXXX DMA BYTE COUNT :XXXX 5295 * HEAD X TRACK XX SECTOR XX BYTES/SECTOR X 5296 * *MAIN STATUS REG :XXXX ( XXXX XXXX XXXX XXXX ) 5297 * *ST 0 :XX ( XXXX XXXX ) EXP :XX ( XXXX XXXX ) 5298 * *ST 1 :XX ( XXXX XXXX ) EXP :XX ( XXXX XXXX ) 5299 * *ST 2 :XX ( XXXX XXXX ) EXP :XX ( XXXX XXXX ) 5300 * *ST 3 :XX ( XXXX XXXX ) EXP :XX ( XXXX XXXX ) 5301 * *HEAD X TRACK XX SECTOR XX BYTES/SECTOR X 5302 * EXP :XX ACT :XX DMA ER ADD :XXXX 5303 * 5304 *  THE FOLLOWING PARAMETERS/MEMORY LOCATIONS 5305 * MUST BE SET UP PRIOR TO ENTERING THIS  5306 * SUBROUTINE: 5307 * Y-REG. - CTRL. BLK. ADD. 5308 *  UF:OP - COMMAND OP CODE;MT;MF;SK 5309 * EXP - EXPECTED DATA BYTE (DATA MISCOMPARE) ('SAL' ERROR) 5310 * ACT - ACTUAL DATA BYTE (DATA MISCOMPARE) ('SAL' ERROR) 5311 *  BUFADR - BUFFER ERROR ADD. (DATA MISCOMPARE) 5312 * 5313 * 5314 * ?  ENTER WITH ERROR CODE IN THE A-REG. 5315 * 5316 * CALLING SEQUENCE:  5317 * COPY =ERROR CODE,A 5318 * JST ERROR 1PAGE 0211 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:03:01.50 TEST UTILITIES (ERROR) 5319 *  5320 ****************************** 5321 * 0EFA 0E0D 5322 ERROR ENT ERROR ROUTINE 0EFB 4309 5323 PUSH :10 SAVE ALL REGS. 0EFC 0010 5324 * 0EFD A3DC 0F5A 5325 COPY TESTFLG,X GET TEST FLAG 0EFE 2AFD 5326 SUB =3,X ARE WE IN THE TECH TEST? 0EFF 31CD 0F0D 5327 JNE X,ERRO01 JUMP IF NOT IN TECH TEST 0F00 C3DA 0F5B 5328 COPY  FIRST,Q GET FIRST FLAG 0F01 5144 0F06 5329 JEQ Q,$+5 1ST 3 TIMES, DON'T BLINK IT 0F02 4AFF  5330 SUB =1,Q 0F03 C7D7 0F5B 5331 COPY Q,FIRST DECREMENT FIRST FLAG 0F04 6309 5332 POP 0F05 9F74 0EFA 5333 JMP *ERROR EXIT ERROR 0F06 4104 5334 IN CONSL;CDR,Q GET FUNCTION NUMBER 0F07 40DE 5335 CBIT 13,Q BLINK THE 'E' IN THE CDR. 0F08 40EE  5336 CBIT 14,Q 0F09 40FE 5337 CBIT 15,Q 0F0A 4404 5338 SELP Q,CONSL;CDR BLINK IT 0F0B 6309 5339 POP 0F0C 9F6D 0EFA 5340 JMP *ERROR EXIT ERROR  5341 * 0F0D C3CD 0F5B 5342 ERRO01 COPY FIRST,Q GET FIRST TIME FLAG 0F0E 5142 0F11 5343 JEQ Q,$+3 CONTINUE IF NOT FIRST TIME 0F0F 6309 5344 POP 0F10 9F69 0EFA 5345 JMP *ERROR  DON'T REPORT ERRORS 1ST TIME 0F11 8454 0014 5346 COPY A,UF:ERR(Y) SAVE ERROR CODE 0F12 4104 5347  IN CONSL;CDR,Q GET CDR 0F13 58FF 5348 AND =:FF,Q MASK FOR TESTS 0F14 0E71 5349 SHIFT A,LO,8 SHIFT UP 0F15 00FC 5350 SBIT 15,A SET HIGH ORDER BIT 0F16 4007 5351 OR A,Q OR TOGETHER 0F17 4404 5352 SELP Q,CONSL;CDR DISPLAY IT  5353 * 1PAGE 0212 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:03:03.00 TEST UTILITIES (ERROR) 0F18 A3C3 0F5C 5354 COPY ERRTADD,X GET ERROR TABLE ADD. 0F19 8080 0000 5355 COPY 0(X),A GET HARD ERROR COUNT 0F1A BAC2 0F5D 5356 CSK A,=10000 IS IT GREATER THAN 10000 0F1B DC80 0000 5357 IMS 0(X) NO, INC. ERROR COUNT 0F1C 0000 5358 NOP  5359 * 0F1D C3C0 0F5E 5360 COPY CONSOL,Q IS THERE A PROG CONSOLE 0F1E 514C 0F2B 5361 JEQ Q,ERRO10 IF NOT, JUMP & PRINT 0F1F 16CB 0F2B 5362 JF SS,ERRO10 CONTINUE IF NO SENSE SWITCH 0F20 FFB4 0F55 5363 ERRO05 JSK CRLF DO IT 0F21 6309 5364 POP RESTORE ALL @ 0F22 C3BC 0F5F 5365 COPY CNTWD,Q GET CTRL. WORD 0F23 406F 5366 TBIT BEL,Q RING BELL? 0F24 36C2 0F27 5367 JF OV,$+3 NO, JUMP 0F25 0907 5368 COPY =BELL,A BELL CHAR. 0F26 FFB9 0F60 5369 JSK OTTY RING IT 0F27 402F 5370 TBIT HLT,Q HALT ON ERROR 0F28 36C1 0F2A 5371 JF OV,$+2 IF NO, EXIT 0F29 0E0D 5372 HLT  WAIT HERE 0F2A 9F4F 0EFA 5373 JMP *ERROR EXIT 5374 * 0F2B BFAA 0F56 5375 ERRO10 JST MSGA OUTPUT MESS. 0F2C 159F 5376 WORD EMSG01 'ER ' 0F2D 8054 0014 5377  COPY UF:ERR(Y),A GET ERROR CODE 0F2E FFA8 0F57 5378 JSK ODEC DISPLAY IT 0F2F FFA8 0F58 5379 JSK SPACE3 5380 * 0F30 BFA5 0F56 5381 JST MSGA OUTPUT MESS. 0F31 15A2 5382 WORD EMSG02 'ER ADD ' 0F32 8247 0EFA 5383 COPY ERROR,A GET ADD. 0F33 FFA5 0F59 5384 JSK OHEXW DISPLAY IT 0F34 FFA3 0F58 5385 JSK SPACE3 5386 * 0F35 BFA0 0F56 5387 JST MSGA OUTPUT MESS. 0F36 1798 5388 WORD UNTMG+1  'UNIT ' 0F37 83A9 0F61 5389 COPY UNIT,A GET UNIT ADD. 1PAGE 0213 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:03:04.50 TEST UTILITIES (ERROR) 0F38 FF9E 0F57 5390 JSK  ODEC DISPLAY IT 0F39 FF9E 0F58 5391 JSK SPACE3 5392 * 0F3A BF9B 0F56 5393  JST MSGA OUTPUT MESS. 0F3B 1779 5394 WORD PASSMG+1 'PASS ' 0F3C 83A5 0F62 5395  COPY PASSN,A GET PASS NUMBER 0F3D FF99 0F57 5396 JSK ODEC DISPLAY IT 0F3E FF99 0F58 5397 JSK SPACE3 5398 * 0F3F BF96 0F56 5399 JST MSGA OUTPUT MESS.  0F40 1774 5400 WORD TSTNUM+2 'TEST ' 0F41 839D 0F5F 5401 COPY CNTWD,A GET CTRL. WORD 0F42 000F 5402 TBIT ERR,A COMPRESSED REPORT? 0F43 361C 0F20 5403 JT OV,ERRO05 YES, EXIT 0F44 8054 0014 5404 COPY UF:ERR(Y),A GET ERROR CODE 0F45 0C2C 5405 CLSN A,=ERR044 'SAL' ERROR? 0F46 9F9C 0F63 5406 JMP ERRO40+4 YES, JUMP 5407 * 0F47 FF8D 0F55 5408 JSK CRLF DO IT 0F48 BF8D 0F56 5409 JST MSGA OUTPUT MESS. 0F49 15A6  5410 WORD EMSG03 'COM OP ' 0F4A 8061 0021 5411 COPY UF:OP(Y),A GET COMMAND OP CODE 0F4B FF8D 0F59 5412 JSK OHEXW DISPLAY IT 0F4C FF8B 0F58 5413 JSK SPACE3 0F4D A053 0013 5414 COPY UF:FC(Y),X GET FUNCTION CODE 0F4E AA95 0F64 5415 ADD =OPCOTBL,X ADD TABLE OFFSET 0F4F 8080 0000 5416 COPY 0(X),A GET ACTUAL MESS. ADD. 0F50 8681 0F52 5417 COPY A,$+2 A  SET ADD. 0F51 BF84 0F56 5418 JST MSGA OUTPUT MESS. 0F52 1618 5419 WORD EROP0 0F53 FF84 0F58 5420 JSK SPACE3 0F54 9E91 0F66 5421 JMP ERRO20 CONTINUE  5422 * 0011 5423 LPOOL 0F55 128F CRLF 0F56 10BD MSGA 1PAGE 0214 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:03:06.00 TEST UTILITIES (ERROR) 0F57 1235 ODEC 0F58 10A5 SPACE3 0F59 11D7 OHEXW 0F5A 1306 TESTFLG 0F5B 1316 FIRST 0F5C 130A ERRTADD 0F5D 2710 0F5E 1317 CONSOL 0F5F 134F CNTWD 0F60 1124 OTTY 0F61 1313 UNIT 0F62 12F8 PASSN 0F63 1031 0F64 1402 OPCOTBL 0F65 1PAGE 0215 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:03:06.25 TEST UTILITIES (ERROR) 5425 *  5426 * ERROR REPORT (CONT.) 5427 * 0F66 BF6F 0F56 5428 ERRO20 JST MSGA OUTPUT MESS. 0F67 15AA 5429 WORD EMSG04 'MODE REG ' 0F68 8059 0019 5430 COPY UF:MODE(Y),A GET MODE REG. 0F69 FFD4 0FBE 5431 JSK OHEXB DISPLAY IT 0F6A FF6D 0F58 5432 JSK SPACE3 0F6B 8059 0019 5433 COPY UF:MODE(Y),A GET MODE REG. AGAIN 0F6C FFD2 0FBF 5434 JSK OBINB DISPLAY BINARY 5435 * 0F6D BF68 0F56 5436 JST MSGA OUTPUT MESS. 0F6E 15AF 5437  WORD EMSG05 'Y-CTRL BLK ADD ' 0F6F 0060 5438 COPY Y,A GET ADD. 0F70 FF68 0F59 5439 JSK OHEXW DISPLAY IT 0F71 FF66 0F58 5440 JSK SPACE3 0F72 8059 0019 5441 COPY UF:MODE(Y),A GET MODE REG. AGAIN 0F73 000F 5442 TBIT MR:INTDS,A INTERRUPTS? 0F74 36C4 0F79 5443 JF OV,ERRO21 NO, JUMP 5444 * 0F75 BF60 0F56 5445 JST MSGA OUTPUT MESS. 0F76 15B8 5446 WORD EMSG06 'INT VEC ADD ' 0F77 82C8 0FC0 5447 COPY =VECTOR,A GET INT. ADD. 0F78 FF60 0F59 5448 JSK OHEXW DISPLAY IT 5449 * 0F79 8053 0013 5450 ERRO21 COPY UF:FC(Y),A GET COMMAND FUNCTION CODE 0F7A 0C00 5451 CLSN A,=UF:INV INVALID COMMAND? 0F7B 9E93 0F8F 5452 JMP ERRO22 YES, JUMP 0F7C 0C0B 5453 CLSN A,=UF:SEEK  SEEK? 0F7D 9E91 0F8F 5454 JMP ERRO22 YES, JUMP 0F7E 0C04 5455 CLSN A,=UF:RDID READ ID? 0F7F 9E8F 0F8F 5456 JMP ERRO22 YES, JUMP 0F80 0C0D 5457 CLSN A,=UF:SIS  SENSE INTERRUPT STATUS? 0F81 9E8D 0F8F 5458 JMP ERRO22 YES, JUMP 0F82 0C0A 5459 CLSN  A,=UF:RECAL RECALIBRATE? 0F83 9E8B 0F8F 5460 JMP ERRO22 YES, JUMP 1PAGE 0216 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:03:07.75 TEST UTILITIES (ERROR) 0F84 0C01 5461 CLSN A,=UF:INIT SPECIFY? 0F85 9E89 0F8F 5462 JMP ERRO22 YES, JUMP 0F86 BF4F 0F56 546B 3 JST MSGA OUTPUT MESS. 0F87 15BF 5464 WORD EMSG07 'DMA ADD ' 0F88 8057 0017 5465 COPY UF:DMA(Y),A GET ADD. 0F89 FF4F 0F59 5466 JSK OHEXW DISPLAY IT 0F8A FF4D 0F58 5467 JSK SPACE3 5468 * 0F8B BF4A 0F56 5469 JST MSGA OUTPUT MESS. 0F8C 15C5 5470 WORD EMSG08 'DMA BYTE COUNT ' 0F8D 8058 0018 5471 COPY UF:BCT(Y),A  GET BYTE COUNT 0F8E FF4A 0F59 5472 JSK OHEXW DISPLAY IT 5473 * 0F8F FF45 0F55 5474 ERRO22 JSK CRLF DO IT 0F90 8053 0013 5475 COPY UF:FC(Y),A GET COMMAND 0F91 0C00 5476 CLSN A,=UF:INV INVALID COMMAND? 0F92 9EAF 0FC2 5477 JMP ERRO30 YES, JUMP 0F93 0C01  5478 CLSN A,=UF:INIT SPECIFY? 0F94 9EAD 0FC2 5479 JMP ERRO30 YES, JUMP 0F95 0C0D  5480 CLSN A,=UF:SIS SENSE INTERRUPT STATUS? 0F96 9E9C 0FB3 5481 JMP ERRO23 YES, JUMP 0F97 0C0C 5482 CLSN A,=UF:SDS SENSE DRIVE STATUS? 0F98 9EA9 0FC2 5483 JMP ERRO30  YES, JUMP 0F99 0C0A 5484 CLSN A,=UF:RECAL RECALIBRATE? 0F9A 9EA7 0FC2 5485 JMP ERRO30 YES, JUMP 0F9B 0C0B 5486 CLSN A,=UF:SEEK SEEK? 0F9C 9E96 0FB3 5487 JMP ERRO23 YES, JUMP 0F9D 0C04 5488 CLSN A,=UF:RDID READ ID? 0F9E 9E94 0FB3 5489 JMP ERRO23 YES, JUMP 0F9F BF36 0F56 5490 JST MSGA OUTPUT MESS. 0FA0 15CD 5491 WORD  EMSG09 'HEAD ' 0FA1 8041 0001 5492 COPY UF:H(Y),A GET HEAD 0FA2 FF34 0F57 5493 JSK  ODEC DISPLAY IT 0FA3 FF34 0F58 5494 JSK SPACE3 5495 * 0FA4 BF31 0F56 5496  JST MSGA OUTPUT MESS. 1PAGE 0217 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1  1982/09/30 09:03:09.25 TEST UTILITIES (ERROR) 0FA5 15D0 5497 WORD EMSG10 'TRACK ' 0FA6 8040 0000 5498 COPY UF:C(Y),A GET TRACK 0FA7 FF2F 0F57 5499 JSK ODEC DISPLAY IT 0FA8 FF2F 0F58 5500 JSK SPACE3 5501 * 0FA9 BF2C 0F56 5502 JST MSGA OUTPUT MESS. 0FAA 15D4 5503 WORD EMSG11 'SECTOR ' 0FAB 8042 0002 5504 COPY UF:R(Y),A GET SECTOR 0FAC FF2A 0F57 5505 JSK ODEC DISPLAY IT 0FAD FF2A 0F58 5506 JSK SPACE3  5507 * 0FAE BF27 0F56 5508 JST MSGA OUTPUT MESS. 0FAF 15D8 5509 WORD EMSG12 'BYTES/SECTOR ' 0FB0 8043 0003 5510 COPY UF:N(Y),A GET CODE 0FB1 FF25 0F57 5511 JSK  ODEC DISPLAY IT 0FB2 9E89 0FBC 5512 JMP ERRO24 CONTINUE 5513 * 0FB3 BF22 0F56 5514 ERRO23 JST MSGA OUTPUT MESS. 0FB4 15CD 5515 WORD EMSG09 'HEAD ' 0FB5 C 8041 0001 5516 COPY UF:H(Y),A GET HEAD 0FB6 FF20 0F57 5517 JSK ODEC DISPLAY IT 0FB7 FF20 0F58 5518 JSK SPACE3 5519 * 0FB8 BF1D 0F56 5520 JST MSGA OUTPUT MESS. 0FB9 15D0 5521 WORD EMSG10 'TRACK ' 0FBA 8040 0000 5522 COPY UF:C(Y),A GET TRACK 0FBB FF1B 0F57 5523 JSK ODEC DISPLAY IT 0FBC FF18 0F55 5524 ERRO24 JSK CRLF  DO IT 0FBD 9E84 0FC2 5525 JMP ERRO30 CONTINUE 5526 * 0004 5527  LPOOL 0FBE 11D2 OHEXB 0FBF 11ED OBINB 0FC0 0DEE VECTOR 0FC1 1PAGE 0218 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:03:10.50 TEST UTILITIES (ERROR) 5529 * 5530 *  ERROR REPORT (CONT.) 5531 * 0FC2 BF13 0F56 5532 ERRO30 JST MSGA OUTPUT MESS. 0FC3 15DF  5533 WORD EMSG13 '*MAIN STATUS REG ' 0FC4 8056 0016 5534 COPY UF:STAT(Y),A GET STATUS  0FC5 FF13 0F59 5535 JSK OHEXW DISPLAY IT 0FC6 FF11 0F58 5536 JSK SPACE3 0FC7 8056 0016 5537 COPY UF:STAT(Y),A GET STATUS AGAIN 0FC8 FFE0 1029 5538 JSK OBINW DISPLAY BINARY  5539 * 0FC9 8053 0013 5540 COPY UF:FC(Y),A GET COMMAND 0FCA 0C01 5541 CLSN A,=UF:INIT SPECIFY? 0FCB 9FD8 1024 5542 JMP ERRO05 YES, EXIT 0FCC 0C0A 5543 CLSN A,=UF:RECAL RECALIBRATE? 0FCD 9FD6 1024 5544 JMP ERRO05 YES, EXIT 0FCE 0C0B 5545  CLSN A,=UF:SEEK SEEK? 0FCF 9FD4 1024 5546 JMP ERRO05 YES, EXIT 0FD0 0C0C 5547 CLSN A,=UF:SDS SENSE DRIVE STATUS? 0FD1 9EB9 100B 5548 JMP ERRO31 YES, JUMP 0FD2 0C0D 5549 CLSN A,=UF:SIS SENSE INTERRUPT STATUS? 0FD3 9EC5 1019 5550 JMP ERRO32 YES, JUMP 0FD4 0C00 5551 CLSN A,=UF:INV INVALID COMMAND 0FD5 9ECC 1022 5552 JMP ERRO33 YES, JUMP 5553 * 0FD6 FEF6 104D 5554 JSK ERR:ST0 DISPLAY STATUS BYTE 0 5555  * 0FD7 BFCD 1025 5556 JST MSGA OUTPUT MESS. 0FD8 15ED 5557 WORD EMSG15 '*ST 1 ' 0FD9 804B 000B 5558 COPY UF:ST1(Y),A GET STATUS BYTE 1 0FDA FF63 0FBE 5559 JSK OHEXB  DISPLAY IT 0FDB FFCA 1026 5560 JSK SPACE3 0FDC FF62 0FBF 5561 JSK OBINB DISPLAY BINARY 0FDD FFC8 1026 5562 JSK SPACE3 0FDE BFC6 1025 5563 JST MSGA OUTPUT MESS. 0FDF 15FD 5564 WORD EMSG18+1 'EXP ' 1PAGE 0219 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:03:12.00 TEST UTILITIES (ERROR) 0FE0 8063 0023 5565 COPY UF:EX1(Y),A GET EXPECTED STATUS BYTE 0 0FE1 FF5C 0FBE 5566 JSK OHEXB DISPLAY HEX 0FE2 FFC3 1026 5567 JSK D  SPACE3 0FE3 FF5B 0FBF 5568 JSK OBINB DISPLAY BINARY 5569 * 0FE4 BFC0 1025 5570  JST MSGA OUTPUT MESS. 0FE5 15F2 5571 WORD EMSG16 '*ST 2 ' 0FE6 804C 000C 5572 COPY UF:ST2(Y),A GET STATUS BYTE 2 0FE7 FF56 0FBE 5573 JSK OHEXB DISPLAY IT 0FE8 FFBD 1026 5574 JSK SPACE3 0FE9 FF55 0FBF 5575 JSK OBINB DISPLAY BINARY 0FEA FFBB 1026 5576 JSK SPACE3 0FEB BFB9 1025 5577 JST MSGA OUTPUT MESS. 0FEC 15FD 5578  WORD EMSG18+1 'EXP ' 0FED 8064 0024 5579 COPY UF:EX2(Y),A EXPECTED STATUS BYTE 2 0FEE FF4F 0FBE 5580 JSK OHEXB DISPLAY HEX 0FEF FFB6 1026 5581 JSK SPACE3 0FF0 FF4E 0FBF 5582  JSK OBINB DISPLAY BINARY 0FF1 8053 0013 5583 COPY UF:FC(Y),A GET FUNCTION CODE 0FF2 0C0E  5584 CLSN A,=UF:FMT FORMAT? 0FF3 9FB0 1024 5585 JMP ERRO05 YES, EXIT 0FF4 FFB2 1027 5586 JSK CRLF DO IT 5587 * 0FF5 092A 5588 COPY ='*',A ASTERIK 0FF6 FFB1 1028 5589 JSK OTTY DISPLAY IT 0FF7 BFAD 1025 5590 JST MSGA OUTPUT MESS. 0FF8 15CD 5591 WORD EMSG09 'HEAD ' 0FF9 804E 000E 5592 COPY UF:H2(Y),A  GET HEAD 0FFA FFAF 102A 5593 JSK ODEC DISPLAY IT 0FFB FFAA 1026 5594 JSK SPACE3  5595 * 0FFC BFA8 1025 5596 JST MSGA OUTPUT MESS. 0FFD 15D0 5597 WORD  EMSG10 'TRACK ' 0FFE 804D 000D 5598 COPY UF:C2(Y),A GET TRACK 0FFF FFAA 102A 5599 JSK  ODEC DISPLAY IT 1000 FFA5 1026 5600 JSK SPACE3 1PAGE 0220 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:03:13.75 TEST UTILITIES (ERROR) 5601 * 1001 BFA3 1025 5602 JST MSGA OUTPUT MESS. 1002 15D4 5603 WORD EMSG11 'SECTOR ' 1003 804F 000F 5604 COPY UF:R2(Y),A GET SECTOR 1004 FFA5 102A 5605 JSK ODEC DISPLAY IT 1005 FFA0 1026 5606 JSK SPACE3 5607 * 1006 BF9E 1025 5608 JST MSGA OUTPUT MESS. 1007 15D8 5609 WORD EMSG12 'BYTES/SECTOR ' 1008 8050 0010 5610 COPY UF:N2(Y),A GET CODE 1009 FFA0 102A 5611 JSK ODEC DISPLAY IT 100A 9EA2 102D 5612 JMP ERRO40 CONTINUE 5613 * 100B BF99 1025 5614 ERRO31 JST MSGA OUTPUT MESS. 100C 15F7 5615 WORD EMSG17 '*ST 3 ' 100D 8051 0011 5616 COPY UF:ST3(Y),A GET STATUS BYTE 3 100E FF2F 0FBE 5617 JSK OHEXB DISPLAY IT 100F FF96 1026 5618 JSK SPACE3 1010 FF2E 0FBF 5619  JSK OBINB DISPLAY BINARY 1011 FF94 1026 5620 JSK SPACE3 1012 BF92 1025 5621 JE ST MSGA OUTPUT MESS. 1013 15FD 5622 WORD EMSG18+1 'EXP ' 1014 8065 0025 5623  COPY UF:EX3(Y),A GET EXPTED STATUS BYTE 3 1015 FF28 0FBE 5624 JSK OHEXB DISPLAY HEX 1016 FF8F 1026 5625 JSK SPACE3 1017 FF27 0FBF 5626 JSK OBINB DISPLAY BINARY 1018 9F8B 1024 5627  JMP ERRO05 EXIT 5628 * 1019 FEB3 104D 5629 ERRO32 JSK ERR:ST0 DISPLAY STATUS BYTE 0 101A FF8C 1027 5630 JSK CRLF DO IT 101B 092A 5631 COPY ='*',A ASTERIK 101C FF8B 1028 5632 JSK OTTY DISPLAY IT 101D BF87 1025 5633 JST MSGA  OUTPUT MESS. 101E 15D0 5634 WORD EMSG10 'TRACK ' 101F 804D 000D 5635 COPY UF:C2(Y),A GET RET. TRACK NUM. 1020 FF89 102A 5636 JSK ODEC DISPLAY IT 1PAGE 0221 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:03:15.50 TEST UTILITIES (ERROR) 1021 9F82 1024 5637  JMP ERRO05 EXIT 5638 * 1022 FEAA 104D 5639 ERRO33 JSK ERR:ST0 DISPLAY STATUS BYTE 0 1023 9F80 1024 5640 JMP ERRO05 EXIT 5641 * 0009 5642 LPOOL 1024 0F20 ERRO05 1025 10BD MSGA 1026 10A5 SPACE3 1027 128F CRLF 1028 1124 OTTY 1029 11F4 OBINW 102A 1235 ODEC 102B 102C 1PAGE 0222 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:03:15.75 TEST UTILITIES (ERROR) 5644 * 5645 * ERROR REPORT (CONT.) 5646 * 102D 8054 0014 5647 ERRO40 COPY UF:ERR(Y),A GET ERROR 102E 0C25 5648 CLSN A,=ERR037 DATA MISCOMPARE? 102F 9E81 1031 5649 JMP $+2 IF SO, JUMP 1030 9F73 1024 5650 JMP ERRO05 ELSE, EXIT  1031 BF73 1025 5651 JST MSGA OUTPUT MESS 1032 15FC 5652 WORD EMSG18 'EXP ' 1033 8293 1047 5653 COPY EXP,A GET EXPECTED DATA 1034 FF09 0FBE 5654 JSK OHEXB  DISPLAY IT 1035 FEEF 10A5 5655 JSK SPACE3 5656 * 1036 BF6E 1025 5657 JST MSGA OUTPUT MES. 1037 1600 5658 WORD EMSG19 'ACT ' 1038 828F 1048 5659 COPY ACT,A GET ACTUAL DATA 1039 FF04 0FBE 5660 JSK OHEXB DISPLAY IT 103A 8054 0014 5661 COPY UF:ERR(Y),A GET ERROR CODE 103B 0C2C 5662 CLSN A,=ERR044 'SAL' ERROR? 103C 9F67 1024 5663  JMP ERRO05 EXIT ROUTINE 103D FEE7 10A5 5664 JSK SPACE3 5665 * 103E BEFE 10BD 5666 JST MSGA OUTPUT MESS. 103F 1603 5667 WORD EMSG20 'DMA ER ADD ' 1040 8288 1049 5668 COPY BUFADR,A GET BUFFER ADD. 1041 FF88 104A 5669 JSK OHEXW DISPLAY IT 1042 8388 104B 5670 COPY CNTWD,A GET CTRL. WORD 1043 005F 5671 TBIT DMP,A F  DUMP? 1044 36C1 1046 5672 JF OV,$+2 IF NOT, JUMP 1045 FE97 105D 5673 JSK DUMP  DUMP BUFFER 1046 9F5D 1024 5674 JMP ERRO05 EXIT 5675 * 1047 0000 5676 EXP RES 1,0 EXPECTED DATA BYTE 1048 0000 5677 ACT RES 1,0 ACTUAL DATA BYTE 1049 0000 5678 BUFADR RES 1,0 BUFFER ERROR ADD. 5679 * 1PAGE 0223 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:03:17.25 TEST UTILITIES (ERROR) 0003 5680  LPOOL 104A 11D7 OHEXW 104B 134F CNTWD 104C 1PAGE 0224 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:03:17.25 TEST UTILITIES (ERR:ST0) 5682 ******************************  5683 * 5684 * ERR:ST0 - THIS SUBROUTINE WILL DISPLAY STATUS BYTE 0 5685 *  AND ITS EXPECTED VALUE IN THE FOLLOWING 5686 * FORMAT: 5687 *  5688 * *ST 0 :XX ( XXXX XXXX ) EXP :XX ( XXXX XXXX ) 5689 * 5690 * CALLING SEQUENCE: 5691 * JSK ERR:ST0 5692 * 5693 ****************************** 5694 * 0000104D 5695 ERR:ST0 EQU $ 104D BEEF 10BD 5696 JST MSGA  OUTPUT MESS. 104E 15E8 5697 WORD EMSG14 '*ST 0' 104F 804A 000A 5698 COPY UF:ST0(Y),A GET STATUS BYTE 0 1050 FF8A 105B 5699 JSK OHEXB DISPLAY HEX 1051 FED3 10A5 5700  JSK SPACE3 1052 FF89 105C 5701 JSK OBINB DISPLAY BINARY 1053 FED1 10A5 5702 JSK SPACE3 1054 BEE8 10BD 5703 JST MSGA OUTPUT MESS. 1055 15FD 5704 WORD EMSG18+1  'EXP ' 1056 8062 0022 5705 COPY UF:EX0(Y),A GET EXPECTED STATUS BYTE 0 1057 FF83 105B 5706 JSK  OHEXB DISPLAY HEX 1058 FECC 10A5 5707 JSK SPACE3 1059 FF82 105C 5708 JSK OBINB  DISPLAY BINARY 105A 2309 5709 RSK EXIT 5710 * 0002 5711  LPOOL 105B 11D2 OHEXB 105C 11ED OBINB 1PAGE 0225 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:03:18.25 TEST UTILITIES (DUMP) 5713 ******************************  5714 * 5715 * DUMP - THIS SUBROUTIE WILL DUMP (DISPLAY) 5716 * THE INPUT BUFFER AFTER A READ 5717 * OPERATION AS FOLLOWS: 5718 * 5719 * INPUT BUFFER DUMP, AT :XXXX 5720 * :XXXX = XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX 5721 * :XXXX = XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX 5722 * :XXXX = XX XX XX XX XX XX . . . . 5723 * 5724 * CALLING SEQUENCE: 5725 * JSK DUMP G  5726 * 5727 ****************************** 5728 * 0000105D 5729 DUMP EQU  $ 105D BEDF 10BD 5730 JST MSGA OUTPUT MESS. 105E 1609 5731 WORD EMSG21  'INPUT BUFFER DUMP, AT ' 105F A2B6 1096 5732 COPY =INBUFR,X GET BUFF. ADD. 1060 83B6 1097 5733 COPY NBYTES,A GET SECTOR SIZE IN BYTES 1061 0A80 5734 SUB =128,A IS IT 128 BYTES/SECTOR? 1062 1151 1074 5735 JEQ A,DUMP0 YES, DISPLAY ALL OF THE BUFFER 1063 8265 1049 5736 COPY BUFADR,A GET ERROR ADDRESS 1064 0AE0 5737 SUB =32,A BACK IT UP 64 BYTES 1065 002B 5738  CSK A,X WITHIN BUFFER RANGE? 1066 9E8D 1074 5739 JMP DUMP0 YES, DISPLAY FIRST 128 BYTES 1067 9E81 1069 5740 JMP $+2 NO, CONTINUE AT OTHER END 1068 9E8B 1074 5741 JMP  DUMP0 YES, DISPLAY FIRST 128 BYTES 1069 C3AD 1097 5742 COPY NBYTES,Q GET SECTOR SIZE IN BYTES 106A 4E09 5743 SHIFT Q,RO,1 MAKE SECTOR SIZE IN WORDS 106B 2042 5744 ADD Q,X  GENERATE LAST ADD. 106C 0B40 5745 ADD =64,A GO OVER 128 WORDS 106D 002B 5746  CSK A,X NEAR END OF BUFFER? 106E 9E83 1072 5747 JMP $+4 NO, DO DISPLAY AROUND ERROR ADD. 106F 0000 5748 NOP 1PAGE 0226 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:03:19.75 TEST UTILITIES (DUMP) 1070 2AC0 5749 SUB =64,X YES, GENERATE STARTING ADD. 1071 9E82 1074 5750 JMP DUMP0 DISPLAY LAST 128 BYTES 1072 A256 1049 5751 COPY BUFADR,X GET ERROR ADD. 1073 2AE0 5752 SUB =32,X GENERATE STARTING ADD. 1074 0020 5753 DUMP0 COPY X,A PUT ADD. INTO A-REG. 1075 FF54 104A 5754 JSK OHEXW DISPLAY STARTING ADD. 1076 2E01 5755 SHIFT X,LO,1 MAKE BYTE ADD. 1077 48F8 5756 COPY =-8,Q SET COUNT FOR EIGHT 16 BYTE BLOCKS 1078 FF2E 1027 5757 DUMP1 JSK CRLF DO IT 1079 0020 5758 COPY X,A PUT INTO A-REG. 107A 0E09 5759 SHIFT A,RO,1 MAKE WORD ADD. 107B FF4E 104A 5760 JSK OHEXW DISPLAY IT 107C BEC0 10BD 5761 JST MSGA OUTPUT MESS. 107D 1616  5762 WORD EMSG22 ' =' 107E 68F0 5763 COPY =-16,Y SET COUNT FOR 16 BYTES 107F 0920 5764 DUMP2 COPY =' ',A DISPLAY AN 1080 FF27 1028 5765 JSK OTTY ASCII SPACE 1081 0E25 5766 SBIT BY:,S SET BYTE MODE 1082 8080 0000 5767 COPYB 0(X),A GET BYTE 1083 0E27 5768 RBIT BY:,S SET WORD MODE 1084 2B01 5769 ADD =1,X  INC. ADDRESS 1085 8792 1098 5770 COPY A,TEMP1 SAVE BYTE 1086 0E39 5771 SHIFT A,RO,4 H  SHIFT IT 1087 0B30 5772 ADD ='0',A ASCII OFFSET 1088 0D39 5773 CSK A,='9' DO RANGE CHECK 1089 9E81 108B 5774 JMP $+2 IF LESS, OK 108A 0B07 5775 ADD =7,A ADD MORE OFFSET 108B FF1C 1028 5776 JSK OTTY DISPLAY IT 108C 838B 1098 5777  COPY TEMP1,A RESTORE BYTE 108D 180F 5778 AND =:F,A MASK IT 108E 0B30 5779  ADD ='0',A ASCII OFFSET 108F 0D39 5780 CSK A,='9' DO RANGE CHECK 1090 9E81 1092 5781 JMP $+2 IF LESS, OK 1091 0B07 5782 ADD =7,A ADD MORE OFFSET 1092 FF15 1028 5783 JSK OTTY DISPLAY IT 1093 74AB 107F 5784 IJNE Y,DUMP2 GO FOR MORE 1PAGE 0227 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:03:21.25 TEST UTILITIES (DUMP) 1094 54A3 1078 5785 IJNE Q,DUMP1 DITTO 1095 2309 5786 RSK  EXIT 5787 * 0003 5788 LPOOL 1096 1BC1 INBUFR 1097 130D NBYTES 1098 12FC TEMP1 ET 1092 FF15 1028 5783 JSK OTTY DISPLAY IT 1093 74AB 107F 5784 IJNE Y,DUMP2 GO FOR MORE 1PAGE 0227 MACRO (F400) SCOUT UNIVERSAL FLOPPY DISK CONTROLLER TEST PROGRAM 93720-10C1 1982/09/30 09:03:21.25 TEST UTILITIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJ IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIK IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIL IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII