Еще под CPM нормально доступен только один дисковод. В Unreal тоже самое.
Вид для печати
Alexander Makeev, может ты и для спринтера IDE прикрутишь? ;)
схема конечно супер :v2_dizzy_facepalm:, долго сидел ломал голову, в итоге взял список портов из исходника драйвера, хз по какой маске идет адресация портов IDE, сделал #FEFF. ПЗУ увидело что на иде чето висит, но вместо имени показывает пустую строку и сразу переходит к поиску второго ide (кот. сейчас всегда нету).
Хз почему пусто, может так и должно быть? Чем можно затестить пустой винт на спринтере?
прикладываю в аттачменте exe-шник с IDE SPRINTER, попробуй отладить, т.к. я вообще в спринтере ничего не знаю :)
исходник самого девайса прилагается, для компиляции - добавить в папку Hardware/Sprinter/
Updated: разобрался - поменял маску порта регистра данных на #00FF и пзу-ха увидела имя винта :)
Сейчас выложу обновление
Обновил до версии 2741:
- добавлен девайс IDE SPRINTER (пока не тестился, но биосом определяется)
http://savepic.org/3525775.png
можно тестить, кто затестит отпишите плиз - как работает :)
Напомню, чтобы подключить винт, нужно добавить IDE девайс на шину, после применения изменений закрыть эмулятор и отредактировать ZXMAK2.vmide:
Тут test1.hdd - это имя файла (если без пути, то ищет в папке эмулятора). Если указано имя не существующего файла, будет создан новый образ винта в указанном файле.Код:<IdeDiskDescriptor>
<Image fileName="test1.hdd" isCdrom="False" isReadOnly="False" />
<Geometry cylinders="20" heads="16" sectors="63" lba="201600" />
</IdeDiskDescriptor>
Не забываем прописать параметры геометрии винта :)
Alexander Makeev, есть образ флешки на 128 метров (скачанный на этом форуме, автор утверждает, что спринтер с него грузился), как для нее расчитать параметры C/H/S и LBA? Поставил 16/255/63 (а какой должен быть LBA-параметр?), но при запуске эмуль ругается в логе:
В итоге загрузка с винта не идетКод:Error 07:45:50.056 *** unknown ATA cmd #00 ***
в ZXMAK2.LogAgent.Error(String fmt, Object[] args)
в ZXMAK2.Hardware.IC.AtaDevice.exec_ata_cmd(Byte cmd)
в ZXMAK2.Hardware.IC.AtaDevice.write(Int32 n_reg, Byte data)
в ZXMAK2.Hardware.IC.AtaPort.write(Int32 n_reg, Byte data)
в ZXMAK2.Hardware.Sprinter.IdeSprinter.WriteIdeCommand(UInt16 addr, Byte value, Boolean& iorqge)
в ZXMAK2.Interfaces.BusWriteIoProc.Invoke(UInt16 addr, Byte value, Boolean& iorqge)
в ZXMAK2.Engine.BusManager.WRPORT(UInt16 addr, Byte value)
в ZXMAK2.Engine.Z80.Z80CPU.ED_OUTCR(Byte cmd)
в ZXMAK2.Engine.Z80.Z80CPU.ExecED(Byte cmd)
в ZXMAK2.Engine.Z80.Z80CPU.ExecCycle()
в ZXMAK2.Engine.BusManager.ExecCycle()
в ZXMAK2.Engine.SpectrumConcrete.ExecuteFrame()
в ZXMAK2.Engine.VirtualMachine.runThreadProc()
в System.Threading.ThreadHelper.ThreadStart_Context(Object state)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
в System.Threading.ThreadHelper.ThreadStart()
Образ могу скинуть, куда скажешь для проверки.
Во вложении кинул образ дискеты, на которой есть прога hdtest.exe, она тестирует работу винта. В эмуле надо загрузиться с этой дискеты (в биосе выбрать загрузку с 1й дискеты) и запустить hdtest.exe. В данный момент она у меня ругается - HDD init error. Registers R/W Error
а что она должна выводить?
Переделал выборку портов:
теперь вот такое говорит:Код:bmgr.SubscribeReset(BusReset);
var dataMask = 0x00E7;//0x00FF;
var regMask = 0xC0E7;//0x00E7;//0xFEFF;
bmgr.SubscribeRdIo(dataMask, 0x0050 & dataMask, ReadIdeData);
bmgr.SubscribeWrIo(dataMask, 0x0050 & dataMask, WriteIdeData);
bmgr.SubscribeRdIo(regMask, 0x0051 & regMask, ReadIdeError);
bmgr.SubscribeWrIo(regMask, 0x0151 & regMask, WriteIdeError);
bmgr.SubscribeRdIo(regMask, 0x0052 & regMask, ReadIdeCounter);
bmgr.SubscribeWrIo(regMask, 0x0152 & regMask, WriteIdeCounter);
bmgr.SubscribeRdIo(regMask, 0x0053 & regMask, ReadIdeSector);
bmgr.SubscribeWrIo(regMask, 0x0153 & regMask, WriteIdeSector);
bmgr.SubscribeRdIo(regMask, 0x0055 & regMask, ReadIdeCylHi);
bmgr.SubscribeWrIo(regMask, 0x0155 & regMask, WriteIdeCylHi);
bmgr.SubscribeRdIo(regMask, 0x0054 & regMask, ReadIdeCylLo);
bmgr.SubscribeWrIo(regMask, 0x0154 & regMask, WriteIdeCylLo);
bmgr.SubscribeRdIo(regMask, 0x4052 & regMask, ReadIdeControl);
bmgr.SubscribeWrIo(regMask, 0x4152 & regMask, WriteIdeControl);
bmgr.SubscribeRdIo(regMask, 0x4053 & regMask, ReadIdeCommand);
bmgr.SubscribeWrIo(regMask, 0x4153 & regMask, WriteIdeCommand);
http://savepic.org/3473542.png
это правильно или нет? :v2_conf2:
Может есть какой-нибудь образ с чем-то наподобие FDISK и FORMAT? (не знаю как они на спринтере назывались)
скинь на какой-нибудь обменник образ, куда я сам толком не знаю, давно не выкладывал крупные файлы :)
Update: поправил маски, так тоже работает и так вроде-бы правильнее судя по описанию:
EXE с поправленными масками в аттачменте, проверь плизКод:var dataMask = 0x00E7;//0x00FF;
var regMask = 0xE1E7;//0x00E7;//0xFEFF;
Выложил образ, там есть кой-какой софт. должен определиться как диск С и по идее загрузиться ОС с него.
http://rghost.ru/46009536
http://rghost.ru/46009550