Rev 627 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
627 | savelij | 1 | |
1120 | savelij | 2 | ; LAST UPDATE: 18.10.2023 savelij |
627 | savelij | 3 | |
4 | DG MACRO PAR |
||
5 | CALL PRN |
||
6 | DB PAR,0DH,0AH,0 |
||
7 | ENDM |
||
8 | |||
9 | |||
10 | ; ������� 1818��93 |
||
11 | |||
12 | FDC_DRV DW FD_RES |
||
13 | DW FD_SEEK |
||
14 | DW FD_FRM |
||
15 | DW FD_REC |
||
16 | DW FD_RD |
||
17 | DW FD_NOP |
||
18 | DW FD_WR |
||
19 | |||
20 | ;----------------------- |
||
21 | ; ��������� � ���������� FD |
||
22 | FD_TVL: LD HL,FD_TRKS |
||
23 | LD A,(IY+_DUS) |
||
24 | JP ADD_HL_A |
||
25 | |||
26 | ;----------------------- |
||
27 | ; ��������� ���������� |
||
28 | FD_ADR: LD (SV_SP),SP |
||
29 | FD_ADR1: |
||
30 | ; CALL RET_ROM |
||
31 | LD C,(IY+_DUS) |
||
32 | XOR A |
||
33 | SUB (IX-_RQHEAD) |
||
34 | CPL |
||
35 | AND 10H |
||
36 | OR C |
||
37 | LD C,(IY+_DFMFM) |
||
38 | XOR C |
||
39 | AND 0BFH |
||
40 | XOR C |
||
41 | OR 0CH |
||
42 | OUT (0FFH),A |
||
43 | CALL FDREC1 |
||
44 | CALL FD_TVL |
||
45 | LD A,(HL) |
||
46 | INC A |
||
47 | JR NZ,FD_SIT |
||
48 | CALL FR_SK1 |
||
49 | JP NZ,ERR_PAS |
||
50 | LD A,1 |
||
51 | FD_SIT: DEC A |
||
52 | OUT (3FH),A |
||
53 | FD_NOP: XOR A |
||
54 | RET |
||
55 | |||
56 | ;----------------------- |
||
57 | ; ����� ���������� |
||
58 | FD_RES: |
||
59 | ; CALL TST_RT |
||
60 | DI |
||
61 | ; CALL RET_ROM |
||
62 | LD A,8 |
||
63 | OUT (0FFH),A |
||
64 | ; LD C,0 |
||
65 | ;$1: |
||
66 | LD B,0 |
||
67 | DJNZ $ |
||
68 | ; DEC C |
||
69 | ; JR NZ,$1 |
||
70 | LD A,0CH |
||
71 | OUT (0FFH),A |
||
72 | LD A,0D0H |
||
73 | OUT (1FH),A |
||
74 | CALL FD_PAS |
||
75 | RET_OK: XOR A |
||
76 | EI |
||
77 | RET |
||
78 | ; JP RET_RAM |
||
79 | |||
80 | ;.COMMENT @ |
||
81 | ;----------------------- |
||
82 | ; DELAY |
||
83 | ;DELAY: LD B,50H |
||
84 | ;DELAY1: PUSH AF |
||
85 | ;DLP1: LD C,-1 |
||
86 | ;DLP2: DEC C |
||
87 | ; JR NZ,DLP2 |
||
88 | ; DEC B |
||
89 | ; JR NZ,DLP1 |
||
90 | ; POP AF |
||
91 | ; RET |
||
92 | ;@ |
||
93 | |||
94 | FD_PAS: PUSH AF |
||
95 | CALL FD_TVL |
||
96 | LD (HL),0FFH |
||
97 | POP AF |
||
98 | RET |
||
99 | |||
100 | |||
101 | ;----------------------- |
||
102 | ; SEEK |
||
103 | FR_SEEK: LD A,(RQCYL) |
||
104 | FR_SK1: LD C,(IY+_DFSRHUT) |
||
105 | SET 3,C |
||
106 | OR A |
||
107 | LD (HL),A |
||
108 | JR Z,FR_HM |
||
109 | OUT (7FH),A |
||
110 | SET 4,C ; SEEK COMMAND |
||
111 | LD A,(RQCOM) |
||
112 | CP _FORMAT ; FORMAT |
||
113 | JR Z,FRS_D |
||
114 | SET 2,C ; 'VERIFY TRACK NUM' FLAG |
||
115 | JR FRS_D |
||
116 | FR_HM: DEC A |
||
117 | OUT (3FH),A |
||
118 | FRS_D: LD A,C |
||
119 | FR_SW1: OUT (1FH),A |
||
120 | JP FD_WAIT |
||
121 | |||
122 | FD_SEEK:CALL FD_ADR |
||
123 | LD A,(RQCYL) |
||
124 | CP (HL) |
||
125 | JR Z,RET_OK |
||
126 | FD_SKAL:EX AF,AF' |
||
127 | CALL FR_SEEK |
||
128 | JR Z,RET_OK |
||
129 | EX AF,AF' |
||
130 | OR A |
||
131 | JR Z,ERR_PAS |
||
132 | LD A,0C0H |
||
133 | LD HL,ED_BUF |
||
134 | LD BC,87FH |
||
135 | LD DE,0 |
||
136 | DI ; READ TRACK NUMBER |
||
137 | OUT (1FH),A |
||
138 | CALL FD_RM |
||
139 | EI |
||
140 | IN A,(1FH) |
||
141 | AND 1CH |
||
142 | JR NZ,ATT3 ; IF ERROR - SKIP ATEMPT 2 |
||
143 | LD A,(ED_BUF) |
||
144 | OUT (3FH),A ; ELSE - SET IT |
||
145 | CALL FR_SEEK ; ATEMPT 2 |
||
146 | JR Z,RET_OK ; O'K |
||
147 | ATT3: XOR A |
||
148 | CALL FR_SK1 ; ATEMPT 3. HOME & SEEK |
||
149 | CALL FR_SEEK |
||
150 | JR NZ,ERR_PAS |
||
151 | JR RET_OK |
||
152 | |||
153 | ;----------------------- |
||
154 | ; CALCULATE TIMEOUT VALUE |
||
155 | EV_TOUT:LD A,(SYS_P) |
||
156 | LD B,4 |
||
157 | AND 8 |
||
158 | RET Z |
||
159 | SLA B |
||
160 | RET |
||
161 | |||
162 | ;----------------------- |
||
163 | ; WAIT FOR READY (WITH TIOME OUT CHECK) |
||
164 | FD_WDN: POP DE ; END OF WAIT |
||
165 | POP BC |
||
166 | IN A,(1FH) |
||
167 | BIT 4,A |
||
168 | RET |
||
169 | |||
170 | FD_WAIT:PUSH BC ; WAIT ITSELF |
||
171 | PUSH DE |
||
172 | CALL EV_TOUT |
||
173 | LD DE,0 |
||
174 | FD_WL: IN A,(0FFH) |
||
175 | AND 80H |
||
176 | JR NZ,FD_WDN |
||
177 | DEC DE |
||
178 | LD A,D |
||
179 | OR E |
||
180 | JR NZ,FD_WL |
||
181 | DJNZ FD_WL |
||
182 | ;--------------------------- |
||
183 | ; SOME ERRORS |
||
184 | ; TIME OUT ERROR |
||
185 | T_OUT: LD A,_NRDY |
||
186 | DB 21H ; LD HL,... |
||
187 | ; UNKNOWN ERROR |
||
188 | H_ERR: LD A,_HRDERR |
||
189 | ; ANY ERROR |
||
190 | ERR_RET:LD HL,(SV_SP) |
||
191 | INC HL |
||
192 | INC HL |
||
193 | LD SP,HL |
||
194 | LD H,A |
||
195 | ; CALL RET_ROM |
||
196 | LD A,0D0H |
||
197 | OUT (1FH),A |
||
198 | LD A,H |
||
199 | OR A |
||
200 | RET |
||
201 | ; JP RET_RAM |
||
202 | ; ERROR & PASSIVATE |
||
203 | ERR_PAS:CALL FD_PAS |
||
204 | JR H_ERR |
||
205 | |||
206 | ;----------------------- |
||
207 | ; COMMON PART FOR READ/WRITE PROC'S |
||
208 | FD_RW: LD (SV_SP),SP |
||
209 | CALL FD_ADR1 |
||
210 | IN A,(1FH) |
||
211 | AND 20H ; HEAD LOADED? |
||
212 | JR NZ,FD_RWL ; YES - JUMP |
||
213 | LD A,(HL) ; CURRENT TRACK |
||
214 | OUT (7FH),A ; SEEK IT |
||
215 | LD A,(IY+_DFSRHUT) |
||
216 | OR 18H ; SEEK WITH 15MS DELAY COMMAND |
||
217 | CALL FR_SW1 ; SEEK & WAIT |
||
218 | JR NZ,ERR_PAS ; RET IF ERROR |
||
219 | FD_RWL: LD A,(RQSECT) |
||
220 | INC A |
||
221 | OUT (5FH),A |
||
222 | CALL EV_TOUT |
||
223 | XOR A |
||
224 | SUB (IX-_RQHEAD) |
||
225 | AND 8 |
||
226 | LD HL,(DCBUF) |
||
227 | LD C,7FH |
||
228 | LD DE,0 |
||
229 | EXX |
||
230 | RET |
||
231 | |||
232 | ;----------------------- |
||
233 | ; COMMAND 'READ' |
||
234 | FD_RM: IN A,(0FFH) ; READ LOOP |
||
235 | AND 0C0H |
||
236 | JP M,TRY_ERR |
||
237 | JR NZ,FD_R1 |
||
238 | DEC DE |
||
239 | LD A,D |
||
240 | OR E |
||
241 | JR NZ,FD_RM |
||
242 | DJNZ FD_RM |
||
243 | JP T_OUT |
||
244 | FD_R: IN A,(0FFH) |
||
245 | AND 0C0H |
||
246 | JR Z,FD_R |
||
247 | RET M |
||
248 | FD_R1: INI |
||
249 | JR FD_R |
||
250 | |||
251 | FD_RD: CALL FD_RW ; 'READ' COMMAND ITSELF |
||
252 | LD C,1CH |
||
253 | EXX |
||
254 | OR 80H |
||
255 | DI |
||
256 | OUT (1FH),A |
||
257 | CALL FD_RM |
||
258 | ;----------------------- |
||
259 | ; TEST FOR R/W ERROR |
||
260 | RW_ERR_:IN A,(1FH) |
||
261 | EXX |
||
262 | AND C |
||
263 | RW_ERR1:EI |
||
264 | RET Z |
||
265 | ; JP Z,RET_RAM |
||
266 | LD C,A |
||
267 | ERR_R: BIT 4,C |
||
268 | JR NZ,TRY_SK |
||
269 | ; CALL RET_RAM |
||
270 | BIT 3,C |
||
271 | LD A,_CRC_ERR |
||
272 | RET NZ |
||
273 | BIT 2,C |
||
274 | LD A,_OVERRUN |
||
275 | RET NZ |
||
276 | BIT 5,C |
||
277 | LD A,_IOERR |
||
278 | RET NZ |
||
279 | BIT 6,C |
||
280 | LD A,_WR_PROT |
||
281 | RET NZ |
||
282 | LD A,_FATAL_ERROR |
||
283 | OR A |
||
284 | RET |
||
285 | ;--- IF 'NO ADDR MARK' ERROR - TRY TO SEEK |
||
286 | TRY_SK: CALL FD_TVL |
||
287 | LD A,(RQCYL) |
||
288 | CALL FD_SKAL |
||
289 | LD A,_NO_DATA |
||
290 | OR A |
||
291 | RET |
||
292 | ;--- IF NO ERROR & NO DATA - ERROR TOO |
||
293 | TRY_ERR:IN A,(1FH) |
||
294 | EXX |
||
295 | AND C |
||
296 | JP Z,H_ERR |
||
297 | POP BC |
||
298 | JR RW_ERR1 |
||
299 | |||
300 | ;----------------------- |
||
301 | ; COMMAND 'WRITE' |
||
302 | FD_WR: CALL FD_RW |
||
303 | LD C,7CH |
||
304 | EXX |
||
305 | OR 0A0H |
||
306 | DI |
||
307 | OUT (1FH),A |
||
308 | CALL FD_WM |
||
309 | JR RW_ERR_ |
||
310 | |||
311 | FD_WM: IN A,(0FFH) ; WRITE LOOP |
||
312 | AND 0C0H |
||
313 | JP M,TRY_ERR |
||
314 | JR NZ,FD_W1 |
||
315 | DEC DE |
||
316 | LD A,D |
||
317 | OR E |
||
318 | JR NZ,FD_WM |
||
319 | DJNZ FD_WM |
||
320 | JP T_OUT |
||
321 | |||
322 | FD_W: IN A,(0FFH) |
||
323 | AND 0C0H |
||
324 | JR Z,FD_W |
||
325 | RET M |
||
326 | FD_W1: OUTI |
||
327 | JR FD_W |
||
328 | |||
329 | ;----------------------- |
||
330 | ; RECALIBRATE SUBROUTINES |
||
331 | FD_REC: CALL FD_ADR |
||
332 | XOR A |
||
333 | CALL FR_SK1 |
||
334 | JP NZ,H_ERR |
||
335 | XOR A |
||
336 | RET |
||
337 | ; JP RET_RAM |
||
338 | |||
339 | FD_SK: OUT (7FH),A |
||
340 | LD B,A |
||
341 | LD A,C |
||
342 | OR 18H |
||
343 | OUT (1FH),A |
||
344 | CALL FD_WAIT |
||
345 | LD E,A |
||
346 | SCF |
||
347 | RET NZ |
||
348 | IN A,(3FH) |
||
349 | CP B |
||
350 | RET |
||
351 | |||
352 | FDREC1: BIT 7,(IY+_DCYLN) |
||
353 | CALL NZ,REC_TR |
||
354 | BIT 7,(IY+_DFSRHUT) |
||
355 | CALL NZ,REC_TM |
||
356 | RET |
||
357 | |||
358 | REC_TR: LD A,0FH |
||
359 | OUT (1FH),A |
||
360 | CALL FD_WAIT |
||
361 | JP NZ,H_ERR |
||
362 | LD D,80 |
||
363 | LD C,13H |
||
364 | LD A,79 |
||
365 | CALL FD_SK |
||
366 | JP C,ERR_PAS |
||
367 | JR NZ,TR40 |
||
368 | LD A,1 |
||
369 | CALL FD_SK |
||
370 | JP C,ERR_PAS |
||
371 | JR Z,TR80 |
||
372 | TR40: LD D,40 |
||
373 | TR80: BIT 1,(IY+_DHEADR) |
||
374 | LD (IY+_DCYLN),D |
||
375 | LD A,D |
||
376 | JR Z,$+3 |
||
377 | ADD A,A |
||
378 | LD (IY+_DTRACK),A |
||
379 | RET |
||
380 | |||
381 | REC_TM: LD C,0FFH |
||
382 | FD_SLOW: INC C |
||
383 | BIT 2,C |
||
384 | JP NZ,H_ERR |
||
385 | LD A,C |
||
386 | OR 8 |
||
387 | OUT (1FH),A ; HOME |
||
388 | CALL FD_WAIT |
||
389 | JR NZ,FD_SLOW |
||
390 | LD A,20 |
||
391 | CALL FD_SK ; SEEK 20 TRACK |
||
392 | JR NZ,FD_SLOW |
||
393 | LD A,1 |
||
394 | CALL FD_SK ; SEEK 1 TRACK |
||
395 | JR NZ,FD_SLOW |
||
396 | BIT 2,E |
||
397 | JR NZ,FD_SLOW |
||
398 | LD A,C |
||
399 | OR 38H |
||
400 | OUT (1FH),A ; STEP -1 |
||
401 | CALL FD_WAIT |
||
402 | JR NZ,FD_SLOW |
||
403 | BIT 2,A ; IS 0 TRACK ? |
||
404 | JP Z,FD_SLOW ; IF NOT - SLOW |
||
405 | LD (IY+_DFSRHUT),C |
||
406 | RET |
||
407 | |||
408 | ;------------------------------------- |
||
409 | ; FORMAT |
||
410 | OUT_R1: LD A,C |
||
411 | JR OUT_R |
||
412 | OUT_1: LD B,1 |
||
413 | OUT_R: EX AF,AF' |
||
414 | _O_W: IN A,(0FFH) |
||
415 | AND 0C0H |
||
416 | JR Z,_O_W |
||
417 | RET M |
||
418 | EX AF,AF' |
||
419 | OUT (7FH),A |
||
420 | DJNZ OUT_R |
||
421 | RET |
||
422 | |||
423 | _FRM_TR: LD A,(IY+_DFN) ; SECTOR SIZE |
||
424 | LD C,A ; C - COUNTER |
||
425 | OR A ; CONVERT (0,1,2,3) -> (1,1,2,4) |
||
426 | JP PO,$+4 |
||
427 | INC C |
||
428 | LD B,0 ; B - SIZE OF FIRST BLOCK FORMAT |
||
429 | SUB 1 ; FILLER (0,1,2,3) -> (128,256,256,256) |
||
430 | RR B |
||
431 | PUSH BC ; SAVE FOR LATE USE |
||
432 | LD DE,ED_BUF ; INTERLIVE TABLE |
||
433 | LD A,0F4H |
||
434 | DI |
||
435 | OUT (1FH),A |
||
436 | LD A,04EH |
||
437 | LD B,(IY+_DFGPF) ; GAP3 X 4E |
||
438 | CALL OUT_R |
||
439 | LD BC,0C00H |
||
440 | CALL OUT_R1 |
||
441 | LD BC,3F6H |
||
442 | CALL OUT_R1 |
||
443 | LD A,0FCH |
||
444 | CALL OUT_1 |
||
445 | FR_LP: LD BC,324EH |
||
446 | CALL OUT_R1 |
||
447 | LD BC,0C00H |
||
448 | CALL OUT_R1 |
||
449 | LD BC,3F5H |
||
450 | CALL OUT_R1 |
||
451 | LD A,0FEH |
||
452 | CALL OUT_1 |
||
453 | LD A,(RQCYL) ; TRACK |
||
454 | CALL OUT_1 |
||
455 | LD A,(RQHEAD) ; SIDE |
||
456 | CALL OUT_1 |
||
457 | LD A,(DE) ; SECTOR |
||
458 | INC DE |
||
459 | CALL OUT_1 |
||
460 | LD A,(IY+_DFN) ; SECTOR SIZE |
||
461 | CALL OUT_1 |
||
462 | LD A,0F7H |
||
463 | CALL OUT_1 |
||
464 | LD BC,164EH |
||
465 | CALL OUT_R1 |
||
466 | LD BC,0C00H |
||
467 | CALL OUT_R1 |
||
468 | LD BC,3F5H |
||
469 | CALL OUT_R1 |
||
470 | LD A,0FBH |
||
471 | CALL OUT_1 |
||
472 | LD A,(RQBLN) |
||
473 | POP BC |
||
474 | PUSH BC |
||
475 | FR_L1: CALL OUT_R |
||
476 | DEC C |
||
477 | JR NZ,FR_L1 |
||
478 | LD A,0F7H |
||
479 | CALL OUT_1 |
||
480 | POP HL |
||
481 | RET M |
||
482 | PUSH HL |
||
483 | LD A,(DE) |
||
484 | OR A |
||
485 | JR NZ,FR_LP |
||
486 | POP HL |
||
487 | LD C,5 |
||
488 | FR_L2: DEC C |
||
489 | RET M |
||
490 | LD A,4EH |
||
491 | CALL OUT_R |
||
492 | JP P,FR_L2 |
||
493 | XOR A |
||
494 | RET |
||
495 | |||
496 | FD_FRM LD A,(SYS_P) |
||
497 | LD (TMP_W),A |
||
498 | RES 3,(IX-_SYS_P) |
||
499 | CALL SET_SYS |
||
500 | CALL FD_ADR |
||
501 | CALL FR_SEEK |
||
502 | LD A,_HRDERR |
||
503 | RET NZ |
||
504 | LD A,(RQBADR) |
||
505 | CALL FR_FIL |
||
506 | LD B,8 |
||
507 | DI |
||
508 | FRM_1: PUSH BC |
||
509 | CALL _FRM_TR |
||
510 | POP BC |
||
511 | IN A,(1FH) |
||
512 | LD C,A |
||
513 | JP P,FR_OK |
||
514 | BIT 0,C |
||
515 | JR Z,F_SH1 |
||
516 | LD A,0D0H |
||
517 | OUT (1FH),A |
||
518 | F_SH1: BIT 6,C |
||
519 | JP NZ,ERR_R |
||
520 | WER_FL: DJNZ FRM_1 |
||
521 | JP ERR_R |
||
522 | FR_OK: LD DE,ED_BUF+1 |
||
523 | WER_LP: LD A,(DE) |
||
524 | OR A |
||
525 | JR NZ,$+3 |
||
526 | INC A |
||
527 | OUT (5FH),A |
||
528 | LD A,80H |
||
529 | OUT (1FH),A |
||
530 | WER_WT: IN A,(0FFH) |
||
531 | AND 0C0H |
||
532 | JR Z,WER_WT |
||
533 | IN A,(1FH) |
||
534 | AND 18H |
||
535 | LD C,A |
||
536 | LD A,0D0H |
||
537 | OUT (1FH),A |
||
538 | JR NZ,WER_FL |
||
539 | LD A,(DE) |
||
540 | INC DE |
||
541 | OR A |
||
542 | JR NZ,WER_LP |
||
543 | LD A,(TMP_W) |
||
544 | LD (SYS_P),A |
||
545 | CALL SET_SYS |
||
546 | JP RET_OK |
||
547 | |||
548 | FR_FIL: LD HL,ED_BUF ; A - INTERLIVE FACTOR |
||
549 | LD DE,ED_BUF+1 |
||
550 | LD C,(IY+_DSECTT) |
||
551 | LD B,0 |
||
552 | LD (HL),0 |
||
553 | LDIR |
||
554 | LD HL,ED_BUF |
||
555 | LD C,A |
||
556 | LD B,(IY+_DSECTT) |
||
557 | LD D,1 |
||
558 | JR FF_LP |
||
559 | FF_2: PUSH BC |
||
560 | LD C,1 |
||
561 | CALL FF_MOV |
||
562 | POP BC |
||
563 | FF_LP: LD A,(HL) |
||
564 | OR A |
||
565 | JR NZ,FF_2 |
||
566 | LD (HL),D |
||
567 | INC D |
||
568 | PUSH BC |
||
569 | CALL FF_MOV |
||
570 | POP BC |
||
571 | DJNZ FF_LP |
||
572 | RET |
||
573 | FF_MOV: PUSH DE |
||
574 | LD B,0 |
||
575 | ADD HL,BC |
||
576 | LD C,(IY+_DSECTT) |
||
577 | EX DE,HL |
||
578 | LD HL,ED_BUF |
||
579 | ADD HL,BC |
||
580 | DEC HL |
||
581 | SBC HL,DE |
||
582 | EX DE,HL |
||
583 | JR NC,FF_R1 |
||
584 | OR A |
||
585 | SBC HL,BC |
||
586 | FF_R1: POP DE |
||
587 | RET |
||
588 | |||
589 | ;.COMMENT @ |
||
590 | ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1 |
||
591 | ;_PRN_M: LD A,(HL) |
||
592 | ; OR A |
||
593 | ; INC HL |
||
594 | ; RET Z |
||
595 | ; CALL CONOUT |
||
596 | ; JR _PRN_M |
||
597 | |||
598 | ;PRN: EX (SP),HL |
||
599 | ; PUSH AF |
||
600 | ; CALL _PRN_M |
||
601 | ; POP AF |
||
602 | ; EX (SP),HL |
||
603 | ; JP RET_ROM |
||
604 | |||
605 | ;PHEX: |
||
606 | ; PUSH AF |
||
607 | ; RRCA |
||
608 | ; RRCA |
||
609 | ; RRCA |
||
610 | ; RRCA |
||
611 | ; CALL DHEX |
||
612 | ; POP AF |
||
613 | ; CALL DHEX |
||
614 | ; LD A,":" |
||
615 | ; JP CONOUT |
||
616 | |||
617 | ; |
||
618 | ; TYPE ONE HEX DIGIT |
||
619 | ; |
||
620 | ;DHEX: AND 0FH |
||
621 | ; ADD A,90H |
||
622 | ; DAA |
||
623 | ; ADC A,40H |
||
624 | ; DAA |
||
625 | ; JP CONOUT |