Причина может быть (например) в том, что при форматировании предкомпенсация использовалась с нулевой дорожки. Если диск рассчитан на иное - формат может плохо читаться.
Причина может быть (например) в том, что при форматировании предкомпенсация использовалась с нулевой дорожки. Если диск рассчитан на иное - формат может плохо читаться.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Остается проверить эти два диска на ХТ-ишке? Но сдается мне они будут нормально работать...
Andrey_Ak WEB: www.tis.kz ICQ: 345-005-908 Mail: admin@tis.kz Fido: 2:5083/1 Radio: UN7GKQ
Где DESS DW:
Который после Invalid directory...
- - - Добавлено - - -
Попробуй поредактировать несколько секторов. Исправил что-то в одном, перешел в другой блок (буква "b", DESS спросит, записывать ли прошлый блок, скажешь Y), исправишь что-нибудь другое в этом новом блоке, вернешься в нулевой, посмотришь, в общем, сообразишь.
Кто мешает тебе выдумать порох непромокаемый? (К.Прутков, мысль № 133)
может просто выставлю ДВК в сеть и попробуете помучать?
Andrey_Ak WEB: www.tis.kz ICQ: 345-005-908 Mail: admin@tis.kz Fido: 2:5083/1 Radio: UN7GKQ
Нашел еще один исходник DW, судя по содержимому описанию он как раз от ДВК
Кто сможет посмотреть и проверить оно ли это?
http://tis.kz/progs/dvk/DW.rar
Скрытый текст
Код:.ENABL LC .DSABL GBL ; This DW handler was altered too much! Be careful! No error logging support; ; increased time-out for "controller busy" state. Up to 8 heads/16 sectors ; format supported. Cylinder number must be set for both types of drives. ; Only Q=BUS Zelenograd DW - controller supported. ; Alternations made by Andrey : 141-44-85 (home). .SBTTL PRIMARY DECLARATIONS DWST = 20 DW$CSR = 174000+DWST DW$VEC = 300 PC$PRI = 4 DW$ID = 401 HdRelx = 1 ;wait for head relaxation before write ;after positioning .iif ndf HdRelx HdRelx=0 ;default - write as fast as possible DW$SEC = 16. DW$SRF = 5. DW$C51 = 1024. ;306. cylinders must be for 10 MB drive ;668. cylinders for 21 MB (ST250) ;820. cylinders for 40 MB (ST251-1) CYL0DRV = 306. ; number of cylinders for dw0, the rest is for dw1 SECBIT = 4 SRFBIT = 3 SECMSK = ^C<17> SRFMSK = ^C<17> CYLMSK = ^C<3777> ASIZ51 = DW$SEC*DW$SRF*<DW$C51-cyl0drv> USIZ51 = <DW$SEC*DW$SRF*<DW$C51-cyl0drv-1>>-1 .SBTTL PREAMBLE SECTION .MCALL .DRDEF, .ASSUME .DRDEF DW,53,FILST$!SPFUN$!VARSZ$,USIZ51,DW$CSR,DW$VEC .SBTTL CONSTANT DEFINITIONS SYSPTR = 54 P1EXT = 432 CMD0 = 1 CMD1 = 2 CMD2 = 4 CMD3 = 10 CMD4 = 20 CMD5 = 40 CMD6 = 100 CMD7 = 200 PRESEL = 260. DWID = 0-DWST DWERR = 4-DWST DWPRE = 4-DWST DWREV = 6-DWST DWSEC = 6-DWST DWBUF = 10-DWST DWCYL = 12-DWST DWHEAD = 14-DWST DWST2 = 16-DWST DWCMD = 16-DWST DWSTAT = 20-DWST DWINIT = 20-DWST EDWM = 0400 ERTR0 = 01000 ERABO = 02000 ERIDNF = 10000 ERICRC = 20000 EDWCRC = 40000 S2ERR = 400 S2DRQ = 4000 S2SEK = 10000 S2WRF = 20000 S2DWY = 40000 CMREST = 20 CMREAD = 40 CMWRIT = 60 CMFORM = 120 STOPND = 1 STDRQ = 200 STDCAP = 400 STBUSY = 100000 STINIT = 10 STINT = 100 RETRYS = 2. WREQ = 100000 RDAWRT = 1 .SBTTL INSTALLATION VERIFICATION ROUTINE .ASECT . = 200 BR 3$ 1$: MOV #DW$CSR,R0 TST @R0 .ASSUME <STBUSY> EQ 100000 BMI 1$ CMP #DW$ID,DWID(R0) BNE 2$ TST (PC)+ 2$: SEC RETURN 3$: JSR R0,4$ .ASCIZ /?FAST_DW-I-Altered: 5surf. 1024cyl./ .EVEN 4$: TST (SP)+ EMT 351 BR 1$ .SBTTL HANDLER SET OPTIONS .DRSET RETRY, RETRY, O.RTRY, NUM .SBTTL HANDLER MODIFICATION ROUTINES O.RTRY: CMP R0,R3 BHI O.BAD MOV R0,DRETRY BNE O.GOOD BR O.BAD O.GOOD: TST (PC)+ O.BAD: SEC RETURN .IIF GT,<.-1000> .ERROR .ASECT . = 1000 .SBTTL HEADER SECTION .DRBEG DW BR DWENT DRETRY: .WORD RETRYS .SBTTL I/O INITIATION SECTION DWENT: .IF NE MMG$T MOV @#SYSPTR,R4 MOV P1EXT(R4),(PC)+ $P1EXT: .WORD P1EXT .ENDC MOV #DW$CSR,R4 1$: MOV #2000.,R1 2$: CLR R3 3$: TST @R4 .ASSUME <STBUSY> EQ 100000 BPL STRT SOB R3,3$ SOB R1,2$ BR JMPFD1 STRT: ASL (PC)+ .WORD 100000 BCC 10$ BIT #STDCAP,@R4 BNE 10$ 10$: MOV DRETRY,RETRY CLR INREST CLR FNFLAG MOV DWCQE,R5 clr addcyl mov #<DW$SEC*DW$SRF*<cyl0drv-1>>-1,siz1 bitb #7,q$unit(5) beq 101$ mov dwusiz,siz1 mov #cyl0drv,addcyl 101$: MOV @R5,R3 MOVB Q$FUNC(R5),R0 ADD #FNEG,R0 CMP R0,#FNUM BLO DISPAT JMPFU1: JMP DWFUE JMPFD1: JMP DWFDE addcyl: .word 0 siz1: .word 0 RETRY: .WORD 0 INREST: .WORD 0 FNFLAG: .WORD 0 WCNT: .WORD 0 CRNTCYL:.WORD 0 CRNTHD: .WORD 0 CRNTSEC:.WORD 0 DWASIZ: .WORD ASIZ51 DWUSIZ: .WORD USIZ51 DW$CYL: .WORD DW$C51 .IF EQ MMG$T BUFF: .WORD 0 .ENDC .SBTTL COMMAND DISPATCH DISPAT: ASL R0 ADD PC,R0 ADD #FNTBL-.,R0 ADD @R0,PC JMPREF: FNTBL: .WORD <DSIZ - JMPREF> .WORD <DWFUE- JMPREF> .WORD <DWFUE- JMPREF> .WORD <DWFUE- JMPREF> .WORD <DWFUE- JMPREF> FTBZER: .WORD <RW - JMPREF> FTBEND: FNEG = <FTBZER - FNTBL>/2 FNUM = <FTBEND - FNTBL>/2 .SBTTL HANDLER FUNCTIONS SECTION .SBTTL - READ(X)/WRIT(X) FUNCTION RW: BIT #1,Q$BUFF(R5) BNE JMPFUE MOV #1,FNFLAG TST Q$WCNT(R5) BMI 1$ BNE RWNEXT JMP DWRQS ; to DRFIN 1$: BIT #S2WRF,DWST2(R4) ;Has a write`fault occured? BNE JMPFDE .ASSUME . LE DWSTRT+1000 10$: MOV #WREQ,FNFLAG NEG Q$WCNT(R5) RWNEXT: MOV R3,R1 2$: CMP R3,DWUSIZ BHIS JMPFUE INC R1 25$: BIC #SECMSK,R1 .REPT SECBIT ASR R3 .ENDR clr r2 div #dw$srf,r2 add addcyl,r2 mov r2,crntcyl mov r3,crnthd BIC #CYLMSK,R3 tst addcyl bne 104$ cmp r3,#cyl0drv bhis jmpfue 104$: CMP R3,DW$CYL BHIS JMPFUE MOV R1,CRNTSEC RWRTRY: ;### Relax here... .if ne <hdrelx> ;wait for head relaxation cmp crntcyl,dwcyl(4) beq 91$ tst fnflag bpl 91$ mov crntcyl,dwcyl(4) mov #0,dwhead(4) mov #13.,dwsec(4) mov #cmread,dwcmd(4) 93$: tst @r4 bmi 93$ ;??? mov #256.,r0 94$: tst dwbuf(4) ;no hurry! sob r0,94$ 91$: .endc ;wait for head relaxation MOV CRNTCYL,DWCYL(R4) MOV CRNTHD,DWHEAD(R4) MOV CRNTSEC,DWSEC(R4) TST FNFLAG BMI 3$ MOV #CMREAD,DWCMD(R4) BIS #STINT,@R4 BR 4$ 3$: BIC #RDAWRT,FNFLAG MOV #CMWRIT,DWCMD(R4) JSR R0,MTFILL tst (pc)+ ; MOV (R2)+,@R4 CLR @R4 BIS #STINT,@R4 4$: RETURN JMPFDE: JMP DWFDE JMPFUE: JMP DWFUE FMRTRY: MOV CRNTCYL,DWCYL(R4) MOV CRNTHD,DWHEAD(R4) MOV #CMFORM,DWCMD(R4) JSR R0,MTFILL tst (pc)+ ; MOV (R2)+,@R4 CLR @R4 BIS #STINT,@R4 RETURN .SBTTL DSIZ - Get disk size DSIZ: .IF EQ MMG$T MOV siz1,@Q$BUFF(R5) .IFF MOV R4,-(SP) mov siz1,-(sp) MOV R5,R4 CALL @$PTWRD MOV (SP)+,R4 .ENDC JMP DWRQS ; to DRFIN .SBTTL EMPTY/FILL THE CONTROLLER'S SECTOR BUFFER SUBROUTINE .ENABL LSB MTFILL: MOV R5,-(SP) MOV R4,-(SP) MOV (R0)+,93$ MOV (R0)+,5$ MOV R4,R3 ADD #DWBUF,R4 MOV Q$BUFF(R5),R2 MOV Q$WCNT(R5),R1 BEQ 4$ MOV R1,WCNT CMP R1,#256. BLOS 1$ MOV #256.,R1 1$: TST FNFLAG BPL 100$ ASL (PC)+ .WORD 100000 BCS 10$ 100$: SUB R1,WCNT 10$: .IF NE MMG$T MOV Q$PAR(R5),PARVAL JSR R0,@$P1EXT .WORD PARVAL-. .IFF MOV R2,BUFF TST FNFLAG BPL 200$ ASL (PC)+ .WORD 100000 bcs 93$ ; BCS 2$ 200$: ADD #512.,BUFF .ENDC 93$: tst (pc)+ ; var.cmd.! may be nop for read or tst (pc)+ for wrt. br 270$ BIT #7,R1 BEQ 202$ 201$: MOVB @R3,R5 BPL 201$ 3$: mov (2)+,@r4 ; MOV (R2)+,@R4 for write SOB R1,3$ BR 203$ 202$: ASR R1 ASR R1 ASR R1 ; MOV (R2)+,@R4 for write ; MOV @R4,(R2)+ for read 321$: mov (2)+,@r4 mov (2)+,@r4 mov (2)+,@r4 mov (2)+,@r4 mov (2)+,@r4 mov (2)+,@r4 mov (2)+,@r4 mov (2)+,@r4 SOB R1,321$ br 203$ 270$: BIT #7,R1 BEQ 272$ 271$: MOVB @R3,R5 BPL 271$ 370$: mov @r4,(2)+ ; MOV @r4,(R2)+ for write SOB R1,370$ BR 203$ 272$: ASR R1 ASR R1 ASR R1 ; MOV (R2)+,@R4 for write ; MOV @R4,(R2)+ for read 371$: mov @r4,(2)+ mov @r4,(2)+ mov @r4,(2)+ mov @r4,(2)+ mov @r4,(2)+ mov @r4,(2)+ mov @r4,(2)+ mov @r4,(2)+ SOB R1,371$ 203$: .IF NE MMG$T PARVAL: .WORD 0 TST FNFLAG BPL 30$ ASL (PC)+ .WORD 100000 BCS 300$ 30$: ADD #<256./32.>,PARVAL 300$: .ENDC 4$: MOV @R3,R5 BMI 6$ ASR R5 BCS 6$ ASLB R5 BPL 4$ 5$: .WORD 0 ; VARIABLE COMMAND!!! ; CLR @R4 for write ; MOV @R4,R5 for read BR 4$ 6$: TSTB @R3 BPL 7$ HALT 7$: MOV (SP)+,R4 MOV (SP)+,R5 RTS R0 .DSABL LSB .SBTTL DUMP THE CONTROLLER'S SECTOR BUFFER SUBROUTINE DUMP: MOV R4,R2 MOV R4,R3 ADD #DWBUF,R3 1$: MOV @R2,R1 ASR R1 BCS 2$ ASLB R1 BPL 1$ MOV @R3,R1 BR 1$ 2$: TSTB @R2 BPL 3$ HALT 3$: RETURN .SBTTL INTERRUPT SERVICE SECTION INTFDE: JMP DWFDE INTRQS: JMP DWRQS ; to DRFIN .DRAST DW,PC$PRI MOV #DW$CSR,R4 BIC #STINT,@R4 .FORK DWFBLK MOV DWCQE,R5 TST @R4 BMI INTFDE BIT #S2ERR,DWST2(R4) ;Error status? BNE 4$ TST INREST BNE 6$ 80$: MOV FNFLAG,R0 BEQ INTRQS BMI 3$ JSR R0,MTFILL nop ; MOV @R4,(R2)+ MOV @R4,R5 3$: MOV WCNT,Q$WCNT(R5) BEQ INTRQS .IF NE MMG$T MOV PARVAL, Q$PAR(R5) .IFF MOV BUFF,Q$BUFF(R5) .ENDC TST FNFLAG BPL 30$ ASL (PC)+ .WORD 100000 BCS 35$ 30$: INC @R5 35$: MOV @R5,R3 MOV DRETRY,RETRY JMP RWNEXT 4$: TST INREST BNE DWFDE BIT #<ERTR0!ERABO>,DWERR(R4) BNE DWFDE TSTB @R4 BPL 5$ CALL DUMP 5$: BIT #ERIDNF,DWERR(R4) BEQ 6$ MOV DWST2(R4),R3 BIT #S2WRF,R3 BNE DWFDE BIC #^C<S2SEK!S2DWY>,R3 CMP #<S2SEK!S2DWY>,R3 BNE DWFDE MOV #-1,INREST MOV #CMREST,DWCMD(R4) BIS #STINT,@R4 RETURN 6$: DEC RETRY BEQ DWFDE CLR INREST TST FNFLAG BEQ 8$ BPL 7$ BIT #RDAWRT,FNFLAG BNE 9$ 7$: JMP RWRTRY 8$: JMP FMRTRY 9$: MOV CRNTCYL,DWCYL(R4) MOV CRNTHD,DWHEAD(R4) MOV CRNTSEC,DWSEC(R4) MOV #CMREAD,DWCMD(R4) BIS #STINT,@R4 RETURN .SBTTL I/O COMPLETION SECTION DWFDE: DWFUE: BIS #HDERR$,@Q$CSW(R5) DWRQS: .DRFIN DW DWFBLK: .WORD 0,0,0,0 .SBTTL BOOTSTRAP READ ROUTINE .DRBOT DW,BOOT1,READ,CONTROL=<CBUS> . = DWBOOT + 40 BOOT1: JMP @#<BOOT-DWBOOT> .ENABL LSB . = DWBOOT + 210 READ: MOV #DW$CSR,R4 TST @R4 BMI 40$ ASL (PC)+ .WORD 100000 BCC 10$ BIT #STDCAP,@R4 BNE 10$ MOV #DW$C51,DW$CY1 10$: MOV R0,-(SP) MOV R1,-(SP) 20$: MOV @SP,R1 CMP R1,#256. BLOS 30$ MOV #256.,R1 30$: SUB R1,@SP MOV 2(SP),R0 INC 2(SP) MOV R0,R5 INC R5 BIC #SECMSK,R5 MOV R5,DWSEC(R4) .REPT SECBIT ASR R0 .ENDR MOV R0,R5 ; BIC #SRFMSK,R5 ; 4 surf. clr (pc)+ ; Calculate head and cylinder 101$: .word 0 ; numbers. 102$: cmp r5,#<dw$srf-1> ; ble 103$ ; inc 101$ ; sub #<dw$srf>,r5 ; br 102$ ; 103$: ; MOV R5,DWHEAD(R4) ; .REPT SRFBIT ; ASR R0 ; .ENDR mov 101$,r0 BIC #CYLMSK,R0 CMP R0,(PC)+ DW$CY1: .WORD 153. BLO 50$ 40$: JMP @#<BIOERR-DWBOOT> 50$: MOV R0,DWCYL(R4) MOV #CMREAD,DWCMD(R4) MOV R4,R0 MOV R4,R5 ADD #DWBUF,R5 60$: TST @R0 BMI 60$ BIT #S2ERR,DWST2(R4) BNE 40$ 70$: TSTB @R0 BPL 70$ MOV @R5,(R2)+ SOB R1,70$ 80$: BIT #STOPND,@R0 BNE 90$ TSTB @R0 BPL 80$ TST @R5 BR 80$ 90$: TST @SP BNE 20$ CMP (SP)+,(SP)+ CLC RETURN .DSABL LSB . = DWBOOT+500 BOOT: MOV #10000,SP MOV #2,R0 MOV #<4*256.>,R1 MOV #1000,R2 JSR PC,READ MOV #<READ-DWBOOT>,@#B$READ MOV #B$DNAM,@#B$DEVN CLR @#B$DEVU JMP @#B$BOOT .DREND DW .END[свернуть]
Andrey_Ak WEB: www.tis.kz ICQ: 345-005-908 Mail: admin@tis.kz Fido: 2:5083/1 Radio: UN7GKQ
В чём отличие от файла по ссылке в начале темы?
http://zx-pk.ru/showthread.php?t=261...l=1#post855619
размер? значения констант? алгоритм?
Аха, оно и есть... Просто тогда не так внимательно посмотрел..
Там же еще есть программа форматирования DWOPT.MAC
Выкладываю, в надежде что кто-то сможет просмотреть исходник и понять,
для какого контроллера этот исходник, от ДВК или нет..
А потом переписать драйвер..
К сожалению я в коде почти не понимаю.. ((
- - - Добавлено - - -
Может попробуем удаленно?
Andrey_Ak WEB: www.tis.kz ICQ: 345-005-908 Mail: admin@tis.kz Fido: 2:5083/1 Radio: UN7GKQ
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)