Я в нем не силен, но когда я попробовал как-то почитать доку по нему, у меня возникло впечатление, что собственно никакого контроллера и нет, а ты напрямую заставляешь мотор крутиться, а головку двигаться :)
Вид для печати
Ну да..
Т.е. нужна просто небольшая программка, которая принимает через порт терминала байтовый образ дорожки, преобразует его в формат MX и пишет на диск.
Так можно будет автоматически создавать через порт терминала копии дисков MX из их образов на PC.
---------- Post added at 15:52 ---------- Previous post was at 15:50 ----------
Если кто-то хочет заняться - вот исходник драйвера MX:
Код:.TITLE MX
.IDENT /V5.03/
.NLIST
MMG$T=1
DEBUG$ = 1
.ENABLE LC
.MCALL .DRDEF,.PRINT
.IIF DF DEBUG$, TIM$IT=1
KOEFF = 1
KPAR1=172342
MXDSIZE=880.
CSGO = 40000
CSWRT = 20000
CSSIDE= 10000
JSW = 44
.ASECT
. = 200
BR 1$
BR 2$
1$: MOV PC,R0
ADD #<LEN$-.>,R0
2$: CLC
RTS PC
LEN$: .ASCIi <007>/?MX-I-5.25" Single Density Floppy Disk Handler./
.asciz / Un_Soft 1991. V5.03/
.EVEN
.RAD50 /KUZMIN/
.DRDEF MX,376,FILST$,MXDSIZ,MX$CSR,MX$VEC
.DRSET NTRK,35.,NBLOK,NUM
.IIF NDF TIM$IT, TIM$IT=0
.IIF NDF MMG$T,MMG$T=0
.IIF NDF ERL$G,ERL$G=0
.IIF NDF MXT$O,MXT$O=0
.IIF NDF MX$VEC,MX$VEC=0
.IIF NDF MX$CSR,MX$CSR=177130
;****************** SET Mx NTRK=N ********************
NBLOK: MOV #385.,MXTRK ;мин. к-во блоков
SUB R3,R0 ;R0<--N, R3<--35.
BLE NBLOK2
NBLOK1: ADD #11.,MXTRK
SOB R0,NBLOK1
NBLOK2: MOV MXTRK,54-6-.(PC);кол.блоков->54(загол.)
RTS PC
MXTRK: .WORD 80.
.DRBEG MX
MOV (PC)+,(PC)+
.WORD 3. ;RETRY
NRETR: .WORD 0
MOV MXCQE,R3
MOV (R3)+,R0
ASL R0 ;#блока*2
MOV R0,BLKN2
TSTB (R3)+ ;пропуск Q.FUNC, Q.JNUM
BITB #4,@R3
BNE ERROR ;ошибка
MOVB (R3)+,R0
BIC #-4,R0
ASL R0
ASL R0
MOV CSRMX,R4
BIC #14,@R4 ;MX0
BIS R0,@R4 ;MXn
BIC #177663,@R4
BIT #100,@R4 ;двиг. включен ?
BNE .1124 ;-да, исп. R0,R3
BIS #100,@R4 ;включить
MOV #<800./KOEFF>,R1 ;задержка по вн.
JSR PC,DELAY ;таймеру
.1124: ASR R0 ;MX.UNIT*2
ADD PC,R0
ADD #<TRKTAB-.>,R0
MOV R0,TRKCR
TST @R0
BPL .1150
JSR PC,INIT
.1150: MOV (R3)+,USBUFF ;Q.BUFF
MOV (R3)+,WCNTI ;Q.WCNT
BPL READ
BIT #2000,@R4 ;запрет записи
BNE ERROR
BIS #20000,WRFLG
NEG WCNTI
BR PHYTRK
READ: CLR WRFLG
PHYTRK: MOV (PC)+,R3 ;вычисление
BLKN2: .WORD 0 ;дорожки, сектора,
MOV #8.,R2 ;стороны
.1222: CMP #5400,R3
BHI .1234
ADD #-5400,R3
.1234: ROL R3
DEC R2
BGT .1222
MOVB R3,R2
CLRB R3
SWAB R3
INC R3
BIC #10000,@R4
CMP #11.,R3
BGE .1274
BIS #10000,@R4
SUB #11.,R3
.1274:
.1302: MOV R2,TRACK
MOV R3,NSECT
BR INOUT
.1376:
ERROR: MOV MXCQE,R3
.1320: BIS #1,@-(R3)
ENDMX: MOV MXCQE,R5
cmp mxlqe,R5
BNE 1$
BIS #2,@R4
BIC #100,@R4
1$: .DRFIN MX
;.1376 MOV CNT,WCNTI
.1404: DEC NRETR
BLE ERROR
JSR PC,INIT
INOUT:
MOV (PC)+,R4
CSRMX: .WORD 177130
MOV TRACK,R0
SUB @TRKCR,R0
BPL 1$
NEG R0
BIC #40,@R4 ;от центра
MOV #5377,.1512 ;DEC
BR 2$
1$: BIS #40,@R4
MOV #5277,.1512 ;INC
2$: TST R0 ;число дорожек для перехода
BEQ .1520
.1506: JSR PC,STEP ;должен быть готов мотор
.1512: INC @TRKCR
SOB R0,.1506
.1520: MOV #11520,OPER ;MOV @R5,(R0)+
BIC #20000,@R4 ;чтение
JSR PC,REAWRT
MOV PC,R0
ADD #<BUFTR+2-.>,R0
CMP TRACK,(R0)+ ;проверка номера дорожки
BNE .1404
MOV NSECT,R3
.1556: DEC R3
BEQ .1570
ADD #402,R0 ;смещение в буфере дорожки
BR .1556
.1570: TST WRFLG
BNE .1606
MOV #12023,OPER1 ;BUFTRK-->@USBUFF
BR .1626
.1606: MOV #12015,OPER ;MOV (R0)+,@R5
MOV #12320,OPER1 ;BUFTRK<--@USBUFF
BIS #20000,@R4
.1626:
.IF NE MMG$T
MOV MXCQE,R3
MOV Q$PAR(R3),PARVAL
.ENDC
MOV USBUFF,R3
.1632: MOV #200,R2
MOV R3,USBUFF
MOV WCNTI,CNT ;запомнить на сл. сбоя
BNE 1$
JMP .2136
1$:
.IF NE MMG$T
;d MFPS PRIOR
;d MTPS #340
MOV @#KPAR1,-(SP)
MOV PARVAL,@#KPAR1
.ENDC
OPER1: MOV (R0)+,(R3)+
DEC WCNTI
BEQ ERW
SOB R2,OPER1
ERW:
.IF NE MMG$T
MOV (SP)+,@#KPAR1
;d MTPS PRIOR
.ENDC
TST R2
BNE ENDRW
.IF NE MMG$T
ADD #4,PARVAL
.ENDC
JSR PC,CTRSUM ;подсчет контрольной суммы
.IF NE MMG$T
ADD #-400,R3
MOV R3,-(SP)
MOV MXCQE,R3
MOV PARVAL,Q$PAR(R3)
MOV (SP)+,R3
.ENDC
TST WRFLG
BEQ .1702
MOV R2,(R0)+ ;запись контр. суммы
BR .1714
.IF NE MMG$T
PARVAL: .WORD 0
.ENDC
.1702: CMP R2,(R0)+
.1704: BEQ 1$
JMP .1376 ;несовпадение контр. суммы
1$: MOV #3.,NRETR
.1714: CMP #11.,NSECT
BEQ .1732
INC NSECT
BR .1632
.1732:
MOV R3,USBUFF
TST WRFLG
BEQ .1750
.1744: JSR PC,REAWRT
.1750: MOV #1,NSECT
BIT #10000,@R4
BEQ .1776
INC TRACK
BIC #10000,@R4
BR .2000
.1776: BIS #10000,@R4
.2000: JMP INOUT
ENDRW: TST WRFLG
BEQ .2112
DEC R2
BEQ .2024
.2020: CLR (R0)+ ;дозапись нулей
SOB R2,.2020
.2024: JSR PC,CTRSUM
MOV R2,(R0)+
BIT #1,NSECT
BEQ .2052
BIT #10000,@R4 ;верх
BNE .2102
BR .2060
.2052: BIT #10000,@R4
BEQ .2102
.2060: CMP #11.,NSECT
BEQ .1744
MOV #200,R2
INC NSECT
BR .2020
.2102: JSR PC,REAWRT
JMP ENDMX
.2112: DEC R2
BEQ .2122
.2116: TST (R0)+
SOB R2,.2116
.2122:
.IF NE MMG$T
ADD #4,PARVAL
.ENDC
JSR PC,CTRSUM
CMP R2,(R0)+
BNE .1704
JMP ENDMX
.2136: TST WRFLG
BEQ .2112
BR .2020
REAWRT: BIC #2,@R4 ;выбор накопителя
MOV #<20./KOEFF>,R1
JSR PC,DELAY
MOV PC,R0
ADD #<BUFTR-.>,R0
MOV #3.,R5
3$: MOV #77777,R3
2$: BIT #1000,@R4
BNE 1$
SOB R3,2$
SOB R5,3$
TST (SP)+
BR ERJ01
1$: MOV #2617,R3
MOV R4,R5
TST (R5)+ ;подстройка
MFPS PRIOR
MTPS #340
BIT #20000,@R4
BEQ .2242 ;чтение
MOV #36,R1
BIS #40000,@R4 ;пуск
.2230: TST @R4 ;запись синхрозоны(?)
BPL .2230
CLR @R5
SOB R1,.2230
.2240: BR RWTRK
.2242: BIS #40000,@R4
RWTRK: mov r1,-(sp)
mov #77777,r1
rw.tr: TST @R4
Bmi op.er
sob r1,rw.tr
mov mxcqe,r1
bis #hderr$,@-(r1)
mov (sp)+,r1
br .2256
op.er: mov (sp)+,r1
OPER: MOV @R5,(R0)+
SOB R3,RWTRK
.2256: BIC #40000,@R4
MTPS PRIOR
MXINT == .+2 ;точка аннулирования
RTS PC
STEP: BIS #20,@R4 ;шаг
MOV #<5./KOEFF>,R1
JSR PC,DELAY
RTS PC
INIT: BIT #4000,@R4 ;бит "00"
BNE .2352
BIC #40,@R4 ;от центра
MOV #81.,R2 ;MAX кол-во дорожек (?)
.2326: JSR PC,STEP
BIT #4000,@R4
BNE .2352
SOB R2,.2326
.2344: TST (SP)+ ;для JSR PC
ERJ01: JMP ERROR
.2352: CLR @TRKCR
RTS PC
CTRSUM: SUB #400,R0
MOV #200,R1
CLR R2
.2372: ADD (R0)+,R2
SOB R1,.2372
.2376: RTS PC
DELAY:
BIS #200,@R4 ;бит таймера
.2406: TSTB @R4
BPL .2406
SOB R1,.2406
.2420: BIC #200,@R4
RTS PC
PRIOR: .WORD 0
USBUFF: .WORD 0
WCNTI: .WORD 0
CNT: .WORD 0
TRACK: .WORD 0
TRKCR: .WORD 0
NSECT: .WORD 0
WRFLG: .WORD 0
TRKTAB: .WORD 100000,100000,100000,100000
BUFTR: .BLKW 2617
.LIST
.DRBOT MX,BOOT1,BREAD
. = MXBOOT+40
BOOT1: NOP
JMP BOOT
TRSIZ:: .WORD 0
BTRKCR: .WORD 100000
MXUNIT: .BYTE 100,104,110,114
. = MXBOOT+104
BREAD:: CLR @#JSW ;вход по BOOT MXn:
MOV #MX$CSR,R4
BIC #-400,@R4
MOV @#B$DEVU,R3
MOVB <MXUNIT-MXBOOT>(R3),@R4
JSR PC,BDELAY
JSR PC,BINIT
MOV #<READ1-MXBOOT>,@#B$READ
READ1: MOV #MX$CSR,R4 ;вход втор. загрузчика
ASL R0 ;R0 # блока
BIC #10002,@R4 ;R1 кол. слов
JSR PC,BDELAY ;R2 адр. буфера
MOV R0,R5
MOV #8.,R3
.10314: CMP #5400,R5
BHI .10326
ADD #-5400,R5
.10326: ROL R5
DEC R3
BGT .10314
MOVB R5,R3
CLRB R5
SWAB R5
INC R5
CMP #11.,R5
BGE .10364
BIS #10000,@R4
SUB #11.,R5
.10364:
.10370: MOV R5,R0
SUB BTRKCR,R3
BPL .10416
NEG R3
BIC #40,@R4
MOV #5367,DEINC ;DEC
BR .10430
.10416: BIS #40,@R4
MOV #5267,DEINC ;INC
.10430: TST R3
BEQ .10446
.10434: JSR PC,BSTEP
DEINC: INC BTRKCR
SOB R3,.10434
.10446: DEC R0
BEQ .10460
ADD #201,R3
BR .10446
.10460: JSR PC,BDELAY
MOV #2613,R0
CLR -(SP)
MOV R4,R5
TST (R5)+
BIS #40000,@R4
.10502: TST @R4
BPL .10502
TST @R5
.10510: TST @R4
BPL .10510
CMP @R5,BTRKCR
BNE BIOERR
TST R3
BEQ .10540
.10526: TST @R4
BPL .10526
TST @R5
DEC R0
SOB R3,.10526
.10540: MOV #200,R3
CLR @SP
.10546: TST @R4
BPL .10546
DEC R0
MOV @R5,@R2
ADD (R2)+,@SP
DEC R1
BEQ .10614
SOB R3,.10546
.10566: TST @R4
BPL .10566
CMP @R5,@SP
BNE BIOERR
TST R1
BEQ .10630
SOB R0,.10540
.10604: TST (SP)+
BIC #40000,@R4
BR .10640
.10614: TST @R4
BPL .10614
DEC R3
BEQ .10566
ADD @R5,@SP
BR .10614
.10630: TST (SP)+
BIC #40000,@R4
RTS PC
.10640: BIT #10000,@R4
BNE .10654
BIS #10000,@R4
BR .10460
.10654: BIC #10000,@R4
BIS #40,@R4
JSR PC,BSTEP
INC BTRKCR
BR .10460
BDELAY: MOV #100,R5
BIS #200,@R4
.10706: TSTB @R4
BPL .10706
SOB R5,.10706
.10714: BIC #200,@R4
RTS PC
BSTEP: BIS #20,@R4
JSR PC,BDELAY
RTS PC
BINIT: JSR PC,BSTEP
BIT #4000,@R4
BEQ BINIT
CLR BTRKCR
RTS PC
;. = MXBOOT+664
BOOT: CLR BTRKCR
MOV #<READ1-MXBOOT>,@#B$READ
MOV #B$DNAME,@#B$DEVN
.10770: MOV (SP)+,@#B$DEVU
MOV #10000,SP
JMP @#B$BOOT
.DREND MX
.END
Остроумно :)Код:.IIF DF DEBUG$, TIM$IT=1
То есть если сказал DEBUG - в системе появилась поддержка device timeout и не... :)
Загрузился с помощью TU58 на УКНЦ через кабель COM-С2. В архива образ диска dd-uknc.dsk, аналогичный, как у Andrey_Ak(dd-dvk.dsk). Там DD.SYS, настроенный под С2 УКНЦ, но никаких MZ, WD там нет. Диск просто для того, чтобы загрузиться. Все остальное на Ваше усмотрение и фантазию.
Ну делался он под ДВК. Никто не мешает заточить под УКНЦ.
На самом деле я даже делал такой для УКНЦ и просил попробовать, но как обычно никто не обратил внимания на это :)
---------- Post added at 21:32 ---------- Previous post was at 21:28 ----------
RT-11 V5.7c который вариант я делал содержит полный набор стандартных драйверов для С2: DD, XL, LS :)
Эмулятор дает или читать или создает с нуля и дает писать.
Причем писать на него можно только цельный образ из RT-11 через COP/DEV - видимо это связано с тем, что в оригинале это все-таки лента хотя и с организацией как у диска. Сейчас думаю над своим эмулятором так как для виндовса к примеру ни одного рабочего не нашел.
---------- Post added at 21:44 ---------- Previous post was at 21:42 ----------
RT-11 V5.7c на флопе.
Загрузил командой TU58 dd-uknc.dsk, т.е. без ключика -r. Все нормально, дает и записывать. Создал файл командой CREATE, появился.