* DP$X - MAY 29 2007 - VERSION 1.01 PAGE 1 0001 * DP$X - MAY 29 2007 - VERSION 1.01 0002 * 0003 * DRIVER FOR THE MOVING HEAD DISK. 0004 * 0005 * SEE FOR HARDWARE AND PROGRAMMING DETAILS THE HONEYWELL SERIES 16 MANUAL: 0006 * MOVING-HEAD DISK, OPTIONS 4613,4651 AND 4720 0007 * PROGRAMMERS' REFERENCE MANUAL 0008 * DOC NUMBER: CA38 / 701300725228 0009 * 0010 * THE DRIVER IS CONFIGURED FOR 4 * DP-4651 CONNECTED TO DMC CHANNEL 1. 0011 * DISC SIZE = 1662976 BYTES AND IS FORMATTED WITH 12 (OR 6) SECTORS OF 0012 * 256 (OR 512) BYTES PER TRACK 0013 * THE DISC HAS 200 + 3 CYLINDERS AND 2 HEADS; CYLINDER 0 IS AT THE RIM. 0014 * TOTAL NUMBER OF SECTORS: 200 * 2 * 12 = 4800 (FOR 203 CYLS: 4872) 0015 * (WHEN FORMATTED WITH 6 SECTORS PER TRACK, THE TOTAL NUMBER OF SECTORS IS 0016 * 2400 FOR THE 200 CYLINDERS, OR 2036 FOR THE 203 CYLINDERS). 0017 * 0018 * THE DRIVER SUPPORTS 4 UNITS MAXIMUM 0019 * 0020 * BY ADAPTING THE CONSTANTS AS DEFINED FOR THE DISC PARAMETERS IN THIS DRIVER 0021 * (REFLECTING THE 4651 DISC TYPE AND FORMATTED WITH 12 * 128 WORD SECTORS 0022 * PER TRACK) THE DRIVER CAN BE USED FOR ANOTHER DISC TYPE AND/OR ANOTHER FORMAT. 0023 * 0024 * HONEYWELL X16 16 BIT COMPUTER SOFTWARE 0025 * 0026 * THE SOURCE IS CREATED BY: THEO ENGEL (THEO.ENGEL@HETNET.NL) 0027 * 0028 * CALLING SEQUENCE: 0029 * CALL DP$W / DP$R (W=WRITE BLOCK, R=READ BLOCK) 0030 * DEC UNIT NUMBER (0..3) 0031 * DEC BLOCK NUMBER (0..4799) 0032 * DAC BLOCK BUFFER ADDRESS (POINTER TO 128 WORD BUFFER) 0033 * ERROR RETURN (A=STATUS NE 0) 0034 * NORMAL RETURN (A=0) 0035 * 0036 * DRIVER INITIALIZATION: 0037 * CALL DP$I * DP$X - MAY 29 2007 - VERSION 1.01 PAGE 2 0038 * OCT RESULT 0039 * NORMAL RETURN 0040 * 0041 * RESULT IN BITS<9:16> 0042 * UNIT 3 BIT9 =1 UNIT NOT AVAILABLE ELSE 0 0043 * UNIT 3 BIT10 =1 SEEK ERROR ELSE 0 0044 * UNIT 2 BIT11 =1 UNIT NOT AVAILABLE ELSE 0 0045 * UNIT 2 BIT12 =1 SEEK ERROR ELSE 0 0046 * UNIT 1 BIT13 =1 UNIT NOT AVAILABLE ELSE 0 0047 * UNIT 1 BIT14 =1 SEEK ERROR ELSE 0 0048 * UNIT 0 BIT15 =1 UNIT NOT AVAILABLE ELSE 0 0049 * UNIT 0 BIT16 =1 SEEK ERROR ELSE 0 0050 * 0051 SUBR DP$R READ BLOCK 0052 SUBR DP$W WRITE BLOCK 0053 SUBR DP$I INIT DRIVER FOR ALL UNITS 0054 REL 0055 EJCT * DP$X - MAY 29 2007 - VERSION 1.01 PAGE 3 0056 ******************* 0057 * DISC PARAMETERS * 0058 ******************* 0059 * DP-4651 CONSTANTS (FORMAT 12*128 WORD SEQUENTIAL BLOCKS PER TRACK) 0060 000310 NC EQU 200 NUMBER OF CYLINDERS 0061 000002 NH EQU 2 NUMBER OF HEADS PER UNIT 0062 000014 SPT EQU 12 12 SECTORS PER TRACK (FORMATTED) 0063 000030 SPC EQU 24 SECTORS PER CYLINDER (NH*SPT) 0064 000200 SL EQU 128 SECTOR LENGTH: 128 WORDS (FORMATTED) 0065 000002 BPW EQU 2 2 BYTES PER WORD 0066 011300 SMAX EQU 4800 MAX SECTORS (NC*NH*SPT) 0067 * 0068 * DP-4651 CONSTANTS (FORMAT 6*256 WORD SEQUENTIAL BLOCKS PER TRACK) 0069 *NC EQU 200 NUMBER OF CYLINDERS 0070 *NH EQU 2 NUMBER OF HEADS PER UNIT 0071 *SPT EQU 6 6 SECTORS PER TRACK (FORMATTED) 0072 *SPC EQU 12 SECTORS PER CYLINDER (NH*SPT) 0073 *SL EQU 256 SECTOR LENGTH: 256 WORDS (FORMATTED) 0074 *BPW EQU 2 2 BYTES PER WORD 0075 *SMAX EQU 2400 MAX SECTORS (NC*NH*SPT) 0076 * 0077 00000 011300 BMAX DEC SMAX+0 MAX NUMBER OF SECTORS 0078 00001 000177 BLM1 DEC SL-1 SECTOR LENGTH - 1 0079 00002 000030 SCYL DEC SPC+0 SECTORS PER CYLINDER 0080 00003 000014 STRK DEC SPT+0 SECTORS PER TRACK 0081 * 0082 * CONTROLLER / DRIVES CONNECTED TO MULTIPLEX CHANNEL 1 0083 000020 MSTR EQU '20 DMC START ADDRESS CHANNEL 1 0084 000021 MEND EQU '21 DMC END ADDRESS CHANNEL 1 0085 * 0086 00004 000000 CYL OCT 0 REQUESTED CYLINDER 0087 00005 000000 HEAD OCT 0 REQUESTED HEAD 0088 00006 000000 SECT OCT 0 REQUESTED SECTOR IN TRACK 0089 00007 000000 ADDR OCT 0 SECTOR ADDRESS PATTERN IN TRACK AS FORMATTED 0090 * 0091 ***************** * DP$X - MAY 29 2007 - VERSION 1.01 PAGE 4 0092 * ADDR / FORMAT * 0093 ***************** 0094 * TO LOCATE A SECTOR IN A TRACK, ADDR MUST HAVE THE SECTOR ADDRESS PATTERN OF 0095 * THE SECTOR IN THE TRACK AS WRITTEN BY FORMAT!. 0096 * IT IS EITHER A SEQUENTUAL ADDRESS OR A GEOMETRIC ADDRESS. 0097 * SEQUENTUAL ADDRESSES ARE STARTING WITH ADDRESS 0 IN TRACK-0 AND ENDING WITH 0098 * MAX-SECTOR-NUMBER-1 IN THE LAST TRACK. SO WHEN FORMATTED WITH 6 SECTORS 0099 * PER TRACK, THE SECTOR ADDRESS IN TRACK-0 ARE 0,1,2,3,4,5, IN TRACK-1 ARE 0100 * 6,7,8,9,10,11, ETC. AND IN THE LAST TRACK MAX-6, MAX-5, MAX-4, MAX-3, MAX-2, 0101 * MAX-1. 0102 * GEOMETRIC ADDRESSES ARE TO BE PROCUCED FROM THE COMBINATION OF CYL-HEAD-SECT, 0103 * WHERE CYL IS BITS<1:8>, HEAD IS BITS<9:13> AND SECT IS THE SECTOR NUMBER 0104 * OF THE SECTOR IN THE TRACK BITS<14:16> (SO THIS ADDRESS TYPE CAN BE USED 0105 * FOR MAX 8 SECTORS PER TRACK.) 0106 * 0107 * THIS DRIVER USES DISCS FORMATTED WITH SEQUENTIAL ADDRESSES. THE READ/WRITE 0108 * BLOCK DRIVER ROUTINES ARE CALLED WITH A SEQUENTIAL (LOGICAL) BLOCK NUMBER, 0109 * WHICH IS MAPPED BY THE ROUTINE CVBN TO A PHYSICAL CYLINDER/HEAD/SECTOR 0110 * NUMBER. THE BLOCK IS LOCATED BY USING THE CALCULATED CYLINDER/HEAD, AND USES 0111 * THE LOGICAL BLOCK NUMBER FOR ADDR TO LOCATE THE SECTOR IN THE TRACK 0112 * (ISO OF THE CALCULATE DSECTOR ADDRESS). 0113 * WHEN THE DISC IS FORMATTED WITH GEOMETRIC ADDRESSES, THE CYLINDER/HEAD/SECTOR 0114 * VALUES CALCULATED BY CVBN MUST BE USED TO PRODUCE ADDR IN ORDER TO LOCATE THE 0115 * SECTOR IN HE TRACK. THE ROUTINE CVBN HAS TO BE ADAPTED TO OBTAIN SUPPORT FOR 0116 * THIS TYPE OF FORMATTED SECTOR ADDRESSES 0117 EJCT * DP$X - MAY 29 2007 - VERSION 1.01 PAGE 5 0118 * WORKING STORAGE AND CONSTANTS 0119 * 0120 00010 000000 CMD OCT 0 SET READ='100000 OR WRITE='000000 0121 00011 000000 UNIT OCT 0 SAVED UNIT NUMBER FOR PRODUCING SETUP WORDS 0122 00012 000000 RTRY OCT 0 RETRY COUNTER 0123 000013 CCYL EQU * CURRENT CYLINDER 0124 00013 000000 OCT 0 DRIVE 0 0125 00014 000000 OCT 0 DRIVE 1 0126 00015 000000 OCT 0 DRIVE 2 0127 00016 000000 OCT 0 DRIVE 3 0128 EJCT * DP$X - MAY 29 2007 - VERSION 1.01 PAGE 6 0129 * DRIVE INITILIZATION 0130 00017 0 000000 DP$I DAC ** INIT THE DRIVER FOR 4 UNITS 0131 00020 0410 40 LLL 32 CLEAR A AND B 0132 00021 -0 04 00017 STA* DP$I CLEAR RESULT 0133 00022 0 04 00024 STA UNI 0134 00023 0 10 00226 NUN JST CAL CALIBRATE UNIT 0135 00024 000000 UNI OCT 0 NUMBER OF UNIT TO INITIALIZE 0136 00025 0 01 00040 JMP IERR ERROR RETURN 0137 00026 0400 76 SR LRL 2 NORMAL RETURN (A=0); SHIFT RESULT TO B 0138 00027 0 12 00024 IRS UNI NEXT UNIT 0139 00030 0 02 00024 LDA UNI 0140 00031 0 07 00317 SUB =4 0141 00032 100040 SZE 0142 00033 0 01 00023 JMP NUN NEXT UNIT 0143 00034 0410 70 LLL 8 GET RESULT FOR THE 4 UNITS 0144 00035 -0 04 00017 STA* DP$I AND SAVE 0145 00036 0 12 00017 IRS DP$I 0146 00037 -0 01 00017 JMP* DP$I 0147 00040 34 0425 IERR SKS '425 BUSY ? 0148 00041 0 01 00040 JMP *-1 0149 00042 14 1125 OCP '1125 GET STATUS 0150 00043 54 1025 INA '1025 0151 00044 0 01 00043 JMP *-1 0152 00045 0404 67 LGR 9 SAVE UNIT AVAILABLE BIT AND SEEK ERROR BIT 0153 00046 0 01 00026 JMP SR 0154 EJCT * DP$X - MAY 29 2007 - VERSION 1.01 PAGE 7 0155 * READ BLOCK 0156 00047 0 000000 DP$R DAC ** ENTRY POINT READ BLOCK ROUTINE 0157 00050 0 02 00047 LDA DP$R MOVE LINK 0158 00051 0 04 00054 STA DP$W 0159 00052 0 02 00316 LDA ='100000 SET READ COMMAND 0160 00053 0 01 00056 JMP SCMD 0161 * 0162 * WRITE BLOCK 0163 00054 0 000000 DP$W DAC ** ENTRY POINT WRITE BLOCK ROUTINE 0164 00055 140040 CRA SET WRITE COMMAND 0165 00056 0 04 00010 SCMD STA CMD 0166 00057 0 02 00315 LDA =-3 0167 00060 0 04 00012 STA RTRY SET RETRY COUNTER 0168 00061 -0 02 00054 LDA* DP$W GET UNIT NUMBER 0169 00062 0 04 00000 STA 0 X = UNIT NUMBER 0170 00063 0414 65 LGL 11 0171 00064 0 04 00011 STA UNIT UNIT NUMBER FOR SETUP WORDS 0172 00065 0 12 00054 IRS DP$W POINT TO BLOCK NUMBER 0173 00066 -0 02 00054 LDA* DP$W GET BLOCK NUMBER 0174 00067 0 12 00054 IRS DP$W POINT TO BLOCK BUFFER ADDRESS 0175 00070 0 04 00077 STA BN BLOCK NUMBER 0176 * BECAUSE SEEK IS USING 8-BIT OFFSETS, WRONG OFFSETS BIGGER THAN 8 BITS 0177 * MIGHT NOT BE DETECTED BY THE HARDWARE. THEREFOR THIS ADDITIONAL TEST. 0178 00071 100400 SPL WITHIN RANGE ? 0179 00072 0 01 00215 JMP ERR1 BLOCK NUMBER NOT SUPPORTED (<0) 0180 00073 0 07 00000 SUB BMAX WITHIN RANGE ? 0181 00074 101400 SMI 0182 00075 0 01 00215 JMP ERR1 BLOCK NUMBER NOT SUPPORTED (TOO BIG) 0183 00076 0 10 00260 JST CVBN CONVERT BLOCK NUMBER TO PHYSICAL CYL-HEAD-SECTOR 0184 00077 000000 BN OCT 0 STORED REQUESTED BLOCK NUMBER 0185 * SEEK TO REQUESTED CYLINDER 0186 00100 14 1725 NEXT OCP '1725 ENABLE IO BUS MODE; ALSO ENTRY FOR A RETRY 0187 00101 0 02 00000 LDA 0 UNIT NUMBER 0188 00102 0414 72 LGL 6 0189 00103 0 06 00257 ADD SKS SKS UNIT NOT SEEKING? 0190 00104 0 04 00110 STA SKS0 * DP$X - MAY 29 2007 - VERSION 1.01 PAGE 8 0191 00105 0 04 00131 STA SKS1 0192 00106 34 0425 SKS '425 CONTROLLER BUSY ? 0193 00107 0 10 00173 JST TERR ERROR? 0194 00110 000000 SKS0 OCT 0 UNIT NOT SEEKING ? 0195 00111 0 10 00173 JST TERR ERROR? 0196 00112 1 02 00013 LDA CCYL,1 CURRENT CYLINDER 0197 00113 0 07 00004 SUB CYL REQUESTED CYLINDER 0198 00114 101400 SMI 0199 00115 0 01 00120 JMP RIM REQUESTED CYLINDER <= CURRENT CYLINDER => D=1 0200 00116 140407 TCA REQUESTED CYLINDER > CURRENT CYLINDER => D=0 0201 00117 0 01 00123 JMP AUT 0202 * REQUESTED CYLINDER <= CURRENT CYLINDER => D=1 0203 00120 101040 RIM SNZ 0204 00121 0 01 00135 JMP SIO REQUESTED CYLINDER = CURRENT CYLINDER 0205 00122 0 06 00314 ADD ='400 SET D=1 0206 00123 0 06 00011 AUT ADD UNIT = SETUP WORD FOR DIRECT SEEK 0207 00124 14 0125 OCP '125 DIRECT SEEK 0208 00125 74 0025 OTA '25 OUTPUT SEEK SETUP WORD 0209 00126 0 10 00173 JST TERR 0210 00127 34 0425 SKS '425 CONTROLLER BUSY ? 0211 00130 0 10 00173 JST TERR TEST FOR ERROR 0212 00131 000000 SKS1 OCT 0 WAIT FOR SEEKING COMPLETE 0213 00132 0 10 00173 JST TERR TEST FOR ERRORS 0214 00133 0 02 00004 LDA CYL 0215 00134 1 04 00013 STA CCYL,1 SAVE CURRENT CYLINDER = REQUESTED CYLINDER 0216 * SET MULTIPLEX CHANNEL FOR I/O TRANSFER 0217 00135 -0 02 00054 SIO LDA* DP$W GET BLOCK BUFFER ADDRESS 0218 00136 0 05 00010 ERA CMD FLAG=0 FOR WRITE; FLAG=1 FOR READ 0219 00137 0 04 00020 STA MSTR DMC START ADDRESS 0220 00140 0 05 00010 ERA CMD RESET FLAG IF SET 0221 00141 0 06 00001 ADD BLM1 BLOCK LENGTH - 1 0222 00142 0 04 00021 STA MEND DMC ENDING ADDRESS 0223 * START I/O TRANSFER 0224 00143 0 02 00010 LDA CMD MAKE 1ST SETUP WORD 0225 00144 140401 CMA 0226 00145 0 03 00316 ANA ='100000 READ/WRITE BIT 0227 00146 0 05 00011 ERA UNIT * DP$X - MAY 29 2007 - VERSION 1.01 PAGE 9 0228 00147 0 05 00005 ERA HEAD 0229 00150 14 0625 OCP '625 START IO 0230 00151 74 0025 OTA '25 OUTPUT 1ST SETUP WORD 0231 00152 0 10 00173 JST TERR 0232 00153 0 02 00007 LDA ADDR 2ND SETUP WORD, FORMATTED SECTOR ADDRESS 0233 00154 74 0025 OTA '25 OUTPUT 2ND SETUP WORD 0234 00155 0 10 00173 JST TERR 0235 * WAIT FOR TRANSFER READY 0236 00156 14 1325 OCP '1325 ENABLE DMC/DMA MODE 0237 00157 0 02 00313 LDA ='10000 MASK BIT 0238 00160 74 0020 SMK '20 0239 00161 34 0125 SKS '125 WAIT FOR END OF RANGE INTERRUPT 0240 00162 100000 SKP YES, INTERRUPT 0241 00163 0 01 00161 JMP *-2 0242 00164 34 0425 SKS '425 CONTROLLER BUSY ? 0243 00165 0 10 00173 JST TERR CHECK FOR ERRORS 0244 00166 14 1425 OCP '1425 ACKNOWLEDGE INTERRUPT 0245 00167 140040 CRA RETURN OK 0246 00170 0 12 00054 IRS DP$W 0247 00171 0 12 00054 IRS DP$W NORMAL RETURN 0248 00172 -0 01 00054 JMP* DP$W 0249 EJCT * DP$X - MAY 29 2007 - VERSION 1.01 PAGE 10 0250 * TEST FOR ERRORS DURING THE EXECUTION OF A DRIVE COMMAND 0251 * DP$W IS POINTING TO THE BLOCK BUFFER ADDRESS 0252 00173 0 000000 TERR DAC ** 0253 00174 000201 IAB SAVE A 0254 00175 34 0325 SKS '325 ERROR ? 0255 00176 0 01 00204 JMP YES 0256 00177 0 02 00173 LDA TERR 0257 00200 0 07 00312 SUB =2 0258 00201 0 04 00173 STA TERR 0259 00202 000201 IAB RESTORE A 0260 00203 -0 01 00173 JMP* TERR 0261 * ERROR 0262 00204 0 12 00012 YES IRS RTRY RETRY ? 0263 00205 0 01 00217 JMP CALI YES 0264 * RETRY/RECALIBRATION DOES NOT HELP 0265 00206 34 0425 ERR SKS '425 BUSY ? 0266 00207 0 01 00206 JMP *-1 0267 00210 14 1125 OCP '1125 GET STATUS 0268 00211 54 1025 INA '1025 0269 00212 0 01 00211 JMP *-1 A = DISC UNIT STATE 0270 00213 0 12 00054 ERRX IRS DP$W BLOCK NUMBER TOO BIG 0271 00214 -0 01 00054 JMP* DP$W DRIVER ERROR RETURN 0272 00215 0 02 00311 ERR1 LDA ='1002 SEEK OUT OFF RANGE STATUS 0273 00216 0 01 00213 JMP ERRX 0274 * RECALIBRATE, AND RESTART THE REQUESTED DRIVER COMMAND 0275 00217 0 02 00011 CALI LDA UNIT 0276 00220 0404 65 LGR 11 0277 00221 0 04 00223 STA UN UNIT NUMBER 0278 00222 0 10 00226 JST CAL CALIBRATE THE DRIVE 0279 00223 000000 UN OCT 0 UNIT NUMBER 0280 00224 0 01 00206 JMP ERR ERROR DURING CALIBRATION 0281 00225 0 01 00100 JMP NEXT RETRY THE DRIVER COMMAND 0282 EJCT * DP$X - MAY 29 2007 - VERSION 1.01 PAGE 11 0283 * CALIBRATE A DISC UNIT; SEEK TO CYLINDER 0 0284 * CALLING SEQUENCE: 0285 * JST CAL 0286 * OCT UNIT NUMBER 0287 * ERROR RETURN 0288 * NORMAL RETURN (A=0) 0289 * 0290 00226 0 000000 CAL DAC ** 0291 00227 -0 02 00226 LDA* CAL UNIT NUMBER 0292 00230 0 04 00000 STA 0 X = UNIT NUMNER 0293 00231 0414 72 LGL 6 0294 00232 0 06 00257 ADD SKS SKS UNIT SEEKING ? 0295 00233 0 04 00236 STA SKS2 0296 00234 34 0425 SKS '425 CONTROLLER BUSY ? 0297 00235 0 01 00234 JMP *-1 0298 00236 000000 SKS2 OCT 0 UNIT SEEKING ? 0299 00237 0 01 00236 JMP *-1 0300 00240 14 1725 OCP '1725 USE THE IO BUS 0301 00241 14 0025 OCP '25 GO TO CYLINDER 0 0302 00242 -0 02 00226 LDA* CAL UNIT NUMBER 0303 00243 0414 65 LGL 11 0304 00244 74 0025 OTA '25 OUTPUT SETUP WORD 0305 00245 0 01 00244 JMP *-1 0306 00246 34 0425 SKS '425 CONTROLLER BUSY ? 0307 00247 0 01 00246 JMP *-1 0308 00250 34 0325 SKS '325 ERROR ? 0309 00251 0 01 00255 JMP CERR YES 0310 * WE ARE ON CYLINDER 0 ON THIS UNIT 0311 00252 140040 CRA 0312 00253 1 04 00013 STA CCYL,1 SAVE CURRENT CYLINDER NUMBER 0313 00254 0 12 00226 IRS CAL NORMAL RETURN 0314 00255 0 12 00226 CERR IRS CAL ERROR RETURN 0315 00256 -0 01 00226 JMP* CAL 0316 00257 34 1125 SKS SKS '1125 UNIT 0 NOT SEEKING? 0317 EJCT * DP$X - MAY 29 2007 - VERSION 1.01 PAGE 12 0318 * CONVERT BLOCK NUMBER TO PHYSICAL CYL - HEAD - SECTOR 0319 * BLOCK NUMBER = (LOGICAL) SEQUENTIAL SECTOR NUMBER 0320 * BLOCKS AND SECTORS HAVE EQUAL LENGTH 0321 * 0322 * CALLING SEQUENCE: 0323 * X = UNIT NUMBER 0324 * JST CVBN 0325 * OCT BLOCK NUMBER TO CONVERT 0326 * 0327 * THE ROUTINE FILLS THE WORDS CYL AND HEAD WITH THE CALCULATED VALUES TO 0328 * LOCATE THE TRACK IN WHICH THE REQUESTED BLOCK LIVES. 0329 * FOR LOCATING THE SECTOR IN THE TRACK, THE SEQUENTIAL BLOCK NUMBER IS USED AS 0330 * THE PATTERN (WRITTEN BY FORMAT) TO LOCATE THE SECTOR AND IS STORED THEREFOR 0331 * AS THE 4RD VALUE IN THE WORD ADDR. 0332 * WHEN GEOMETRIC ADDRESS ARE USED TO IDENTIFY SECTORS IN THE TRACK, 0333 * CYL/HEAD/SECT HAVE TO BE COMBINED IN ADDR (CYL = BITS<1:8>, HEAD = BITS<9:13> 0334 * SECT = ) 0335 * 0336 00260 0 000000 CVBN DAC ** 0337 00261 140040 CRA 0338 00262 0 04 00004 STA CYL 0339 00263 0 04 00005 STA HEAD 0340 00264 -0 02 00260 LDA* CVBN GET BLOCK NUMBER TO CONVERT 0341 * CALCULATE REQUESTED CYLINDER = BLOCKNUMBER / SECTORS PER CYL 0342 * THE REMAINDER = SECTOR NUMBER IN THE CALCULATED CYLINDER 0343 00265 0 07 00002 CSUB SUB SCYL SECTORS PER CYLINDER 0344 00266 100400 SPL 0345 00267 0 01 00272 JMP H 0346 00270 0 12 00004 IRS CYL 0347 00271 0 01 00265 JMP CSUB 0348 * REMAINDER = SECTOR NUMBER IN THE CALCULATED CYLINDER 0349 00272 0 06 00002 H ADD SCYL = REMAINDER 0350 * CALCULATE REQUESTED HEAD = SECTOR NUMBER IN CYLINDER / SECTORS PER TRACK 0351 * REMAINDER = SECTOR NUMBER IN TRACK 0352 00273 0 07 00003 HSUB SUB STRK SECTORS PER TRACK 0353 00274 100400 SPL * DP$X - MAY 29 2007 - VERSION 1.01 PAGE 13 0354 00275 0 01 00300 JMP S 0355 00276 0 12 00005 IRS HEAD 0356 00277 0 01 00273 JMP HSUB 0357 * REMAINDER = SECTOR NUMBER IN TRACK 0358 00300 0 06 00003 S ADD STRK 0359 00301 0 04 00006 STA SECT 0360 * SHIFT HEAD TO PLACE FOR USING IT IN SETUP WORDS 0361 00302 0 02 00005 LDA HEAD 0362 00303 0414 72 LGL 6 0363 00304 0 04 00005 STA HEAD 0364 * 0365 * STORE THE PATTERN USED TO IDENTIFY THE SECTOR IN THE TRACK IN ADDR 0366 ***** ADAPT IF DISCS ARE USED FORMATTED WITH GEOMETRIC SECTOR ADDRESSES ***** 0367 00305 -0 02 00260 LDA* CVBN 0368 00306 0 04 00007 STA ADDR STORE SECTOR ADDRESS PATTERN 0369 00307 0 12 00260 IRS CVBN 0370 00310 -0 01 00260 JMP* CVBN 0371 00311 001002 FIN 00312 000002 00313 010000 00314 000400 00315 177775 00316 100000 00317 000004 0372 END NO ERRORS IN ABOVE ASSEMBLY. DAP-16 REV. E