Просмотр полной версии : ZXMAK2 - Виртуальная машина ZX Spectrum
Страницы :
1
2
3
[
4]
5
6
7
8
9
обновил до версии 2731 (https://zxmak2.codeplex.com/releases/view/106199):
- fix ULA Delta border size
- ROM loader refactoring (note that ~mapping.xml schema was changed!);
- add configurable romset for memory modules;
- add configurable shadow rom for Pentagon 512/1024 (manual vmz edit only)
- fix default state for View->Display Icon setting
- fix Cannot create vmz file issue
- add prompt "Please install DirectX End-User Runtime and try again"
- fix PROFI ULA renderer (added top&bottom border, fix multicolor)
- Alt key without menu activation (works when input captured by double click)
- pentagon power on chess board emulation :)
теперь ромсеты можно задавать через VMZ файл, нужно просто указать имя нужного ромсета в аттрибуте romSet. Список ромсетов задается в ~mapping.xml внутри ROMS.PAK (это ZIP архив).
Там-же можно отключить сброс в shadow пзу для pentagon 512/1024 (прописать enableShadow="False").
При захвате ввода (двойным кликом по окну эмулятора), нажатие кнопки Alt уже не приводит к активации меню.
http://savepic.org/3445538.png
Есть небольшое предложение - вообще все писать на английском, а не только обновления. В конце концов, мы же английские люди, и русский язык нам совершенно ни к чему.
технарям наверно проще на английском. меня больше пугают сокращения типа НГМД
[bETA]mEN
05.05.2013, 18:51
Попробовал использовать SMUC hdd , которым я в Unreal пользуюсь. Прописал геометрию и файл в ZXMAK2.vmide. Вроде всё подключилось, но в мониторе получил такое:
http://img19.imageshack_.us/img19/5479/clipboard02uw.png (http://img19.imageshack_.us/i/clipboard02uw.png/)
в логе ошибка:
Error 18:45:07.080 *** unknown ATA cmd #62 ***
в ZXMAK2.LogAgent.Error(String fmt, Object[] args)
в ZXMAK2.Hardware.General.AtaDevice.exec_ata_cmd(Byt e cmd)
в ZXMAK2.Hardware.General.AtaDevice.write(Int32 n_reg, Byte data)
в ZXMAK2.Hardware.General.AtaPort.write(Int32 n_reg, Byte data)
в ZXMAK2.Hardware.General.SmucDevice.writeIde(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(ExecutionCon text executionContext, ContextCallback callback, Object state)
в System.Threading.ThreadHelper.ThreadStart()
mEN;598671']Попробовал использовать SMUC hdd , которым я в Unreal пользуюсь. Прописал геометрию и файл в ZXMAK2.vmide. Вроде всё подключилось, но в мониторе получил такое:
в логе ошибка:
покажи конфигурацию машины
Возможно смук конфликтует с каким-то другим девайсом? Я помню такое наблюдал когда какой-то порт смука кем-то был занят. В итоге часть данных не доезжает до смука и он воспринимает данные как команды
У меня смук на скорпионе работает:
http://savepic.org/3447610.png
[bETA]mEN
05.05.2013, 20:01
У меня смук на скорпионе работает
как оказалось, достаточно заменить isReadOnly= с "True" на "False" и всё нормально работает.
mEN;598681']как оказалось, достаточно заменить isReadOnly= с "True" на "False" и всё нормально работает.
а, да, есть такое - если включен readOnly, то при попытке записи эмулятор просто отменяет команду и выставляет ошибку, а монитор скорпиона не видит ошибку и продолжает писать данные для записи, в итоге они как новая команда обрабатываются...
В данном случае не совсем ясно как корректнее обрабатывать readOnly, чтобы прошивка увидела ошибку при неудачной попытке записи. У настоящих винтов readOnly нету :)
еще раз обновил до 2732 (https://zxmak2.codeplex.com/releases/view/106218), небольшой баг фикс :)
- исправлен баг менюшки View (в предыдущей версии сбивалась настройка Scale при любом изменении других настроек)
- добавлена возможность выбора ромсета из окна настройки машины
- отладчики теперь в отдельной категории устройств
http://savepic.org/3468108.png
[bETA]mEN
05.05.2013, 23:53
У настоящих винтов readOnly нету :)
это и то, что isReadOnly идёт после isCdrom="False" реально сбивает с толку.
еще обновление 2733 (https://zxmak2.codeplex.com/releases/view/106228)
Добавлены устройства PROFI COVOX и PENTAGON COVOX
http://savepic.org/3461954.png
abelenki
06.05.2013, 13:45
не знаю, в какой именно из последних версий произошёл такой прогресс, но:
1. теперь в full screen СОВСЕМ нет искажений (раньше буквы в меню могли быть на один пиксел больше или меньше).
2. теперь в full screen нет искажений и нормальный бордюр у фирменного ZX Spectrum 128.
автору огромное спасибо!!
Ждём поддержку GS и мечтаем о нормальной эмуляции AY/YM/TS/TSFM
abelenki
06.05.2013, 14:13
Ждём поддержку GS
да, было бы интересно.
и мечтаем о нормальной эмуляции AY/YM/TS/TSFM
насчёт TurboSound/TurboSound FM согласен (т.к. их эмуляция отсутствует, аналогично GS), а чем не устраивает эмуляция AY/YM?
слушаю на дорогой акустике (см. подпись) - звучит очень чисто. правда, pseudo-stereo, но так даже лучше. единственное, что можно улучшить - это сделать переключалку mono/pseudo-stereo...
а чем не устраивает эмуляция AY/YM?
Стоит только познать в сравнении. Например, с тем же Unreal.
[bETA]mEN
06.05.2013, 19:48
Помню, что сталкивался в UnrealSpeccy с таким же перезапуском после выхода из монитора, но не помню, как это лечилось :sleep:
http://i.imgur.com/Pgk8shn.gif
mEN;599005']Помню, что сталкивался в UnrealSpeccy с таким же перезапуском после выхода из монитора, но не помню, как это лечилось :sleep:
а что ты нажимаешь чтобы это воспроизвести?
---------- Post added at 21:09 ---------- Previous post was at 21:08 ----------
Стоит только познать в сравнении. Например, с тем же Unreal.
в unreal AY задушен фильтрами
Сравнение эмуляции звука AY чипа (http://www.youtube.com/watch?v=fLEERieGOHc)
http://i3.ytimg.com/vi/fLEERieGOHc/mqdefault.jpg
в unreal AY задушен фильтрами
Не задушен, а выправлен. Особо похабные звуки получаются при высокой частоте тона и огибающей. Лечится исключительно фильтрацией ДО децимации сигнала.
Советую послушать BinaryLove.
Ну тогда уж надо для верности и звук с живого AY записать ;)
Сравнение эмуляции звука AY чипа (http://www.youtube.com/watch?v=fLEERieGOHc)
http://i3.ytimg.com/vi/fLEERieGOHc/mqdefault.jpg
чтобы выяснить причину, сделал тестовую версию, попробуй сравнить шум в этом верианте. Появлась ли "глубина" шума, о которой ты пишешь?
т.к. форум не принимает большие файлы, положил в архив только exe-шник, machines.pak и roms.pak брать из последней версии (https://zxmak2.codeplex.com/releases/view/106228) эмулятора.
чтобы выяснить причину, сделал тестовую версию, попробуй сравнить шум в этом верианте.
Отлично! Это уже похоже на то, что должно быть. Звучит совсем иначе и очень приятно.
Еще бы предусмотреть панарамирование, как это сделано у Vitamin, в zx-tune, чтобы каждый под себя выбрал расположение каналов и их расположение относительно центра.
[bETA]mEN
07.05.2013, 02:33
а что ты нажимаешь чтобы это воспроизвести?
SCORPION/SCORPION PRO: NMI -> Monitor -> выход из монитора -> обращение к диску -> reset.
http://i.imgur.com/oYk29g7.gif
Сравнение эмуляции звука AY чипа
Шум в ZXMAK вообще не АИшный, слишком бархатистый, у AY грубее.
Abadonna
07.05.2013, 18:20
Александр, спасибо Вам за терпение возиться с проектом :) Даже по-доброму завидно становится: я все мечтаю, а Вы сделали ;)
Снова спрошу скромненько, на счет TapeRecorder`a не передумали еще? Пусть даже сохраняет в виде кучи файлов tap или еще каких экзотических форматов (только заголовки и данные вместе пусть будут, а то совсем потеряются) или в виде wav файла :)
Cool, now BORDER is equal :v2_dizzy_roll:. It would be nice if it was a total "Byte" emulation with VI53 :v2_thumb:
My suggestions:
in Tape window please fix 2 buttons usage. After put LOAD"" command in main window, need click two times button Play in Tape window to began to play. Similar while loading oryginal tape "Byte" need stop tape to read short manual pressing Enter to go next page and at end page again need click Play button 2 times :-(
maybe add support to pause from WAV file loading. "Byte" all tape is in one file WAV, after stop playing, next pressing is play from the beginning :-(
of course add support VI53 :-) .
Maybe this help you from VI53:
Intel 8253 Overview (http://www.sharpmz.org/mz-700/8253ovview.htm)
Source code Programmable Interval Timer 8253/8254 (http://mamedev.org/source/src/emu/machine/pit8253.c.html)
Programming the Intel 8253 (http://www.intel-assembler.it/portale/5/Programming-the-Intel-8253-8354-pit/howto-program-intel-pit-8253-8254.asp)
Fake86 8086 PC emulator with Intel 8253 programmable interval timer is emulated (http://fake86.rubbermallet.org/)
Source codes (https://bitbucket.org/infact/fake86gc/src/1032b15335c9/src/fake86?at=default) Fake86 (i8253.h (https://bitbucket.org/infact/fake86gc/src/1032b15335c9/src/fake86/i8253.h?at=default) & i8253.c (https://bitbucket.org/infact/fake86gc/src/1032b15335c9/src/fake86/i8253.c?at=default))
Regards
mEN;599097']SCORPION/SCORPION PRO: NMI -> Monitor -> выход из монитора -> обращение к диску -> reset.
не получается воспроизвести, можешь по шагам написать что ты нажимаешь?
[bETA]mEN
07.05.2013, 20:55
не получается воспроизвести, можешь по шагам написать что ты нажимаешь?
Как пример:
Конфигурация SCORPION (можно ничего не менять)
1. Запускаем Real Commander
2. NMI - попадаем в теневой монитор
3. Сразу можно нажать на enter и вернутся в программу
4. Наблюдаем reset (всё как на gif несколькими постами выше).
mEN;599256']Как пример:
Конфигурация SCORPION (можно ничего не менять)
1. Запускаем Real Commander
2. NMI - попадаем в теневой монитор
3. Сразу можно нажать на enter и вернутся в программу
4. Наблюдаем reset (всё как на gif несколькими постами выше).
я уже понял в чем дело - намудрил с обработкой NMI.. :)
а у кого-то есть реальный Scorpion? Нужно проверить такую штуку - в менюшке 128 выбираем BASIC 48 и после появления надписи "(c)1982 " пытаемся зайти в монитор, получится-ли?
а у кого-то есть реальный Scorpion? Нужно проверить такую штуку - в менюшке 128 выбираем BASIC 48 и после появления надписи "(c)1982 " пытаемся зайти в монитор, получится-ли?
Насколько я помню - нет. Только из 128 бейсика можно зайти.
Александр, спасибо Вам за терпение возиться с проектом :) Даже по-доброму завидно становится: я все мечтаю, а Вы сделали ;)
Снова спрошу скромненько, на счет TapeRecorder`a не передумали еще? Пусть даже сохраняет в виде кучи файлов tap или еще каких экзотических форматов (только заголовки и данные вместе пусть будут, а то совсем потеряются) или в виде wav файла :)
чтобы хорошо реализовать запись нужно переписать часть кода от магнитофона, делать временное решение с записью в какую-то папку я не вижу смысла - всеравно потом переделывать.Такая фича в планах, но будет реализована позже.
---------- Post added at 00:32 ---------- Previous post was at 00:15 ----------
Обновил до версии 2734 (https://zxmak2.codeplex.com/releases/view/106306):
- поправлено смешивание шума с сигналом для AY
- переработана обработка NMI (исправлена обработка для Scorpion, TRDOS-MAGIC, Quorum)
- в рамках рефакторинга переименованы имена методов BusManager
http://savepic.org/3472076.png
[bETA]mEN
08.05.2013, 02:05
переработана обработка NMI (исправлена обработка для Scorpion, TRDOS-MAGIC, Quorum)
у меня всё равно сброс происходит :(
mEN;599349']у меня всё равно сброс происходит :(
1. Запускаем Real Commander (брал тут: http://realsoft.zxby.org/Download/Spectrum/rc_2_6fe.zip)
2. Кликаем меню VM->NMI - попадаем в теневой монитор
3. Нажимаем Enter или 0 - выходим назад в real commander
4. Повторяем шаги 2-3 раз десять - все продолжает работать, не сбрасывается...
что я делаю не так? Может ты два раза NMI нажимал? или не тот exe файл эмулятора запускаешь? :)
Кстати интересный прикол - если два раза NMI нажать на PROF-ROM прошивке, то по бордюру полосы пойдут :)
А обычная прошивка никакой разницы не делает и входит в монитор повторно, выйти потом разумеется не может.
то по бордюру полосы пойдут
ЕМНИП, такого не должно быть... надо достать скорпион из завалов, чтоб проверить.
ЕМНИП, такого не должно быть... надо достать скорпион из завалов, чтоб проверить.
думаю что это так должно быть.
А никто не знает, проф-ром поддерживает пзу-шки более 256к? если да, то откуда брать старший бит адреса A18?
проф-ром поддерживает пзу-шки более 256к? если да, то откуда брать старший бит адреса A18?
не поддерживает.
Умельцы ставили и 512Кб, тублером переключали старший бит, получая либо большой РОМ-диск, либо разные версии ПрофПЭ
Abadonna
08.05.2013, 13:25
а у кого-то есть реальный Scorpion? Нужно проверить такую штуку - в менюшке 128 выбираем BASIC 48 и после появления надписи "(c)1982 " пытаемся зайти в монитор, получится-ли?
На моем зеленом не получается, проверял неоднократно. Из 128 получается. Если нужно, попробую в различных режимах эту кнопочку потыкать :)
Зеленый Scorpion среагирует на нажатие мейджика только при чтении ОПКОДа из ОЗУ судя по схеме.
[bETA]mEN
08.05.2013, 18:14
что я делаю не так?
Вот версия RC, которая сбрасывается. Там же на диске есть игра Action Fighter. Если её запустить, дождаться запуска интро и нажать nmi, то игра нормально вернётся в интро, но потом space и всё сбросится. Без нажатия nmi игра нормально загрузится.
mEN;599486']Вот версия RC, которая сбрасывается. Там же на диске есть игра Action Fighter. Если её запустить, дождаться запуска интро и нажать nmi, то игра нормально вернётся в интро, но потом space и всё сбросится. Без нажатия nmi игра нормально загрузится.
интересная версия RC, в спектакуляторе тоже сбрасывается, а на риале как она себя ведет?
причина сброса - при выходе из монитора неправильно восстанавливается значение CMR0 (порт #7FFD), в результате вместо 48 пзу оказывается замапленым 128-е. Почему пока непонятно.
---------- Post added at 19:56 ---------- Previous post was at 18:25 ----------
Наткнулся на статью в DejaVu #0A (http://zxpress.ru/article.php?id=11214), в которой упоминается следующее:
Те, у кого
есть SCORPION ZS 256/1024 TURBO+, наверня-
ка читали Зоновскую листовку о том, какой
хороший этот компер, по сравнению с други-
ми и даже с этим же, но ранней версии. Мо-
жет это и так, но мнения у всех разные,и я
не хочу навязывать свое. Ну, это не важно.
Так вот, там упоминается о том, что, цити-
рую: При разработе платы TURBO+ была зало-
жена возможность чтения отдельных разрядов
системных портов #7FFD и #1FFD через порт
музыкального процессора,что необходимо для
более корректной работы теневого сервис-
-монитора при определении текущей конфигу-
рации компьютера в момент нажатия кнопки
Magic. Конец цитаты. А как определять это
состояние я так нигде и не нашел, а может
и не хотел искать. Ну, да Бог с ним.
кто-то знает как это чтение работает?
SAM style
08.05.2013, 21:35
кто-то знает как это чтение работает?
По схеме зелёного скорпиона через AY читается такие биты:
0:B0
1:B1
2:B2
3:SCR
4:B3
5:ROM1
B3B2B1B0 - это включенная банка
SCR - текущий экран
ROM1 - это bit4 из 7FFD (выбор половинок ПЗУ)
По ходу, это читается из регистра 14 или 15 AY-ки
все оказалось банальнее, похоже скорпион обрабатывает NMI через обычную процедуру MAGIC в TRDOS, а у меня для NMI мапилось сервисное пзу... :)
---------- Post added at 23:04 ---------- Previous post was at 21:53 ----------
Обновил эмулятор до версии 2735 (https://zxmak2.codeplex.com/releases/view/106353):
Из основных изменений:
исправлена обработка NMI для Scorpion;
добавлена модель памяти Scorpion PROF-ROM 1024K;
оптимизирована загрузка плагинов
небольшой рефакторинг записи/загрузки конфигурации машины
теперь чекбокс Write Protect на закладке BDI автоматически блокируется в состоянии включено, если файл открыт из ZIP архива (раньше было не видно что файл из архива открывается всегда в режиме read only)
добавлена поддержка RAW имиджей ROM'ов в родном формате для PROFI, QUORUM и ATM450. Т.е. теперь можно просто брать полный образ рома снятый с реальной машины и мапить его одной страницей с именем RAW. Обычный мапинг через имена страниц разумеется тоже продолжает работать. Порядок перечисления страниц в ~mapping.xml сохраняется при загрузке ромов. Т.е. можно загрузить RAW образ, а потом например перегрузить только страницу DOS.
при сравнении и поиске имен ромсетов теперь нет зависимости от регистра
рефакторинг ROMS.PAK (удалены дубликаты, замена постраничного мапинга на RAW и т.п.)
в ROMS.PAK добавлены тестовые прошивки для ATM1 и Scorpion (какие нашел :))
теперь в окне Memory Map можно редактировать значения регистров CMR0/CMR1 менеджера памяти. Для редактирвоания нужно сделать двойной клик на значении.
http://savepic.org/3444471.pnghttp://savepic.ru/4521833.png
impressed
09.05.2013, 13:44
Решил тряхнуть стариной и забрал последнюю версию исходников из SVN.
Собрал при помощи VS2012 Update2. При запуске сразу же свалилось с исключением:
************** Текст исключения **************
System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
в ZXMAK2.Controls.FormMain.FormMain_FormClosing(Obje ct sender, FormClosingEventArgs e) в c:\Users\Viktor\zxmak2\SRC\ZXMAK2\Controls\FormMai n.cs:строка 191
в System.Windows.Forms.Form.OnFormClosing(FormClosin gEventArgs e)
в System.Windows.Forms.Form.RaiseFormClosingOnAppExi t()
в System.Windows.Forms.Application.ExitInternal()
в System.Windows.Forms.Application.ThreadContext.OnT hreadException(Exception t)
в System.Windows.Forms.Control.InvokeMarshaledCallba cks()
в System.Windows.Forms.Control.WndProc(Message& m)
в System.Windows.Forms.ScrollableControl.WndProc(Mes sage& m)
в System.Windows.Forms.ContainerControl.WndProc(Mess age& m)
в System.Windows.Forms.Form.WndProc(Message& m)
в System.Windows.Forms.Control.ControlNativeWindow.O nMessage(Message& m)
в System.Windows.Forms.Control.ControlNativeWindow.W ndProc(Message& m)
в System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Версия Windows 7 SP1 x32, работает под Oracle Virtual Box 4.2.12 под Gentoo ;)
Не прикалываюсь, просто по долгу службы приходится кодить под Windows на C# а дома ставить на машину как постоянную ОС Windows я не хочу. Вот и приходится такими костылями пользоваться =)
UPD:
Если верить трассировке -- валится из-за того что VM под VirtualBox не совсем хорошо работает с граф.оборудованием. Свалилось в Managed-сборке DirectX....
Нельзя-ли как-то это поправить или оно совсем завязано на Win и DirectX? А так бы хороший кросс-платформенный продукт получился, который бы и под Mono работал.
Еще вопросик:
Почему такая старая версия .NET Framework в проекте (2.0)? Уже пора хотя-бы на 3.5 или 4.0 переходить. 2.0 Все-таки еще с XP SP2 умерла, которой уже ни где нет
еще одно обновление версия 2736 (https://zxmak2.codeplex.com/releases/view/106379):
- исправлена и переработана эмуляция RTC (CMOS) для девайсов PROFI CMOS, GLUCK CMOS, SPRINTER RTC
- добавлены новые ромы в ромпак: PROFI v450 и SCORPION TEST
- демо образ с софтом для профи удален из этого релиза в целях экономии объема
http://savepic.org/3458588.pnghttp://savepic.ru/4501372.png
---------- Post added at 13:12 ---------- Previous post was at 12:55 ----------
Если верить трассировке -- валится из-за того что VM под VirtualBox не совсем хорошо работает с граф.оборудованием. Свалилось в Managed-сборке DirectX....
естественно под Mono работать не будет, т.к. в этой версии вывод завязан на DirectX, которого в линуксе нету :)
Чтобы работало под моно, нужно делать вывод через SDL. Как показал опыт ZXMAK.NET, который был в трех вариантах - для DirectX, для SDL и для XNA - это гиблый путь, т.к. распыляет все силы на поддержку всех платформ. Сейчас времени у меня едва хватает чтобы потихоньку развивать хотя-бы DirectX вариант.
Если нужно запустить под линуксом - это можно сделать в Wine. Сам не пробовал, но люди пишут что запускают и работает.
Нельзя-ли как-то это поправить или оно совсем завязано на Win и DirectX? А так бы хороший кросс-платформенный продукт получился, который бы и под Mono работал.
сама эмуляция не завязана. Используются Direct 3D - для быстрой отрисовки и масштабирования, DirectInput для опроса клавиатуры и мыши, DirectSound для вывода звука. Ктото тут делал порт для SDL, чтобы под моно запускать, но похоже забросил это дело. У меня, как написал выше, просто нет времени на это, поэтому я делаю с DirectX, т.к. он мне более знаком чем SDL.
Еще вопросик:
Почему такая старая версия .NET Framework в проекте (2.0)? Уже пора хотя-бы на 3.5 или 4.0 переходить. 2.0 Все-таки еще с XP SP2 умерла, которой уже ни где нет
да ничего не мешает переключить на 4 фреймворк и перекомпилировать, 2-ой фреймворк используется потому что не у всех 4-й установлен.
А в чём бонус от .NET? У меня он вообще не установлен, никакой.
[bETA]mEN
09.05.2013, 15:06
С часами явно что то не то:
http://i.imgur.com/yDHNWQS.png
impressed
09.05.2013, 15:36
Сообщение от impressed Посмотреть сообщение
Если верить трассировке -- валится из-за того что VM под VirtualBox не совсем хорошо работает с граф.оборудованием. Свалилось в Managed-сборке DirectX....
естественно под Mono работать не будет, т.к. в этой версии вывод завязан на DirectX, которого в линуксе нету
Чтобы работало под моно, нужно делать вывод через SDL. Как показал опыт ZXMAK.NET, который был в трех вариантах - для DirectX, для SDL и для XNA - это гиблый путь, т.к. распыляет все силы на поддержку всех платформ. Сейчас времени у меня едва хватает чтобы потихоньку развивать хотя-бы DirectX вариант.
Если нужно запустить под линуксом - это можно сделать в Wine. Сам не пробовал, но люди пишут что запускают и работает.
Под VirtualBox стоит чистая лицензионая Windows 7 + VisualStudio 2012. Там нет Mono. Про моно это были мысли в слух. Все валится при инициализации Managed DirectX. Не плохо было бы сделать fall-back режим, на случай если вдруг у кого-то старое железо или с видюхой проблемы, иначе вылазиет исключение инициализации DirectX.
Как вариант юзать софтовый рендер как было в старых гамезах =)
АТМ нужно исправить и добавить драйвер АТ клавиатуры..
При выборк АТМ 7.10 загружается не та прошивка..
http://s07.radikal.ru/i180/1305/b0/dc7bccc3c264t.jpg (http://s07.radikal.ru/i180/1305/b0/dc7bccc3c264.jpg)
Должно быть так:
http://s019.radikal.ru/i611/1305/d7/0cf67880b469t.jpg (http://s019.radikal.ru/i611/1305/d7/0cf67880b469.jpg)
http://s020.radikal.ru/i709/1305/a6/c2757388c09dt.jpg (http://s020.radikal.ru/i709/1305/a6/c2757388c09d.jpg)
impressed
09.05.2013, 15:41
А в чём бонус от .NET? У меня он вообще не установлен, никакой.
.NET среда для исполнения управляемого кода, аналог Java только избавленный от косяков Java т.к появился гораздо позже.
Бонус в том, что запустить исполняемый файл можно под любой ОС для которой есть CLR-среда (Common Language Run-time) без перекомпиляции последнего из исходников.
Правда как и везде есть свои минусы --скомпилированное под новые версии CLR не запустится на старых т.к в старых нет тех компонентво которые есть в новых, работает несколько медленее чем написанное на обычных языках, памяти жрет поболее засчет GC и управляемой памяти.
mEN;599680']С часами явно что то не то:
http://i.imgur.com/yDHNWQS.png
А как ты включил часы в риал командере?
думаю проблема в том что RC не умеет настраивать/интерпретировать данные часов. Скорее всего проблема в настройках регистров A и B. Попробуй настроить часы вручную - исправь 10-й и 11-й байты (смещение #0A и #0B) в файле ZXMAK2.cmos. Варианты такие:
- формат 24-часа/двоичное представление: A=#27, B=#07;
- формат 24-часа/bcd представление: A=27, B=#03
И попробуй снова. Перед исправлением эмулятор закрыть, иначе он перепишит содержимое cmos файла.
Судя по товоему скрину, сейчас у тебя биты 1 и 2 регистра B установлены в 0 (скорее всего просто дефолтное значение #00), что соответствует 12-часовому формату и bcd представлению, в котором 95:03 означает 15:03 PM.
Добавлю в следующей версии дефолтную установку регистров А и Б в #27, #03. Судя по моим тестам весь софт поддерживает такой формат.
---------- Post added at 20:43 ---------- Previous post was at 20:41 ----------
АТМ нужно исправить и добавить драйвер АТ клавиатуры..
При выборк АТМ 7.10 загружается не та прошивка..
так это-ж не официальная прошивка, а сейчас в эмуляторе официальная, разве нет? :v2_conf2:
Чтобы работало под моно, нужно делать вывод через SDL.
При нынешней архитектуре эмулятора это очень просто, кстати. Я писал как-то враппер, который выводил графику и звук от zxmak2 через SDL. EXE-шник эмулятора не менял и даже не перекомпилировал, просто притянул как reference. Там были интересные проблемы из-за того, что ни SDL.NET, ни Tao.Sdl не дружат с 64bit, но под 32битный линукс портировать не проблема, как и не проблема запускать 32битное приложение под 64битной операционкой.
Самое гиблое там - это сильная привязка к WinForms. Скажем то, что устройства, которые добавляют пункты меню, прямо у себя в коде создают System.Windows.Forms.MenuItem и вставляют его куда следует.
Если нужно запустить под линуксом - это можно сделать в Wine. Сам не пробовал, но люди пишут что запускают и работает.
Отлично работает всё, даже Drag'n'Drop. Ну, разве что фуллскрин плохо дружит с Unity. В Xfce всё хорошо было.
[bETA]mEN
09.05.2013, 22:08
А как ты включил часы в риал командере?
Если при загрузке держать нажатым backspace, то попадаеш в setup.
думаю проблема в том что RC не умеет настраивать/интерпретировать данные часов. Скорее всего проблема в настройках регистров A и B. Попробуй настроить часы вручную - исправь 10-й и 11-й байты (смещение #0A и #0B) в файле ZXMAK2.cmos. Варианты такие:
- формат 24-часа/двоичное представление: A=#27, B=#07;
- формат 24-часа/bcd представление: A=27, B=#03
И попробуй снова. Перед исправлением эмулятор закрыть, иначе он перепишит содержимое cmos файла.
Судя по товоему скрину, сейчас у тебя биты 1 и 2 регистра B установлены в 0 (скорее всего просто дефолтное значение #00), что соответствует 12-часовому формату и bcd представлению, в котором 95:03 означает 15:03 PM.
Не очень понял. У меня содержимое ZXMAK2.cmos выглядит так:
http://i.imgur.com/GorYQ7p.png
Если верить трассировке -- валится из-за того что VM под VirtualBox не совсем хорошо работает с граф.оборудованием. Свалилось в Managed-сборке DirectX....
Галочка на 3D-акселерацию в свойствах VM стоит? У меня с ней эмуль работает под VirtualBox без проблем (и без видимых тормозов).
mEN;599758']Если при загрузке держать нажатым backspace, то попадаеш в setup.
Не очень понял. У меня содержимое ZXMAK2.cmos выглядит так:
проверил, RC понимает конфигурацию #07, похоже это самая понимаемая конфигурация для speccy софта, пропиши вот так:
http://savepic.org/3446311.png
добавил #27, #07 как дефолтное значение, если cmos файл отсутствует.
Да, прошивка ATM 2 официальная, есть еще более поздняя не офф - eXtra bios. Но ATM 2 в эмуляторе работает не правильно. Думаю не правильная организациия памяти. Есть замечательный Honey Commander для ATM2
http://atmturbo.nedopc.com/download/trdos/hc4_00/hc4_00.htm
Программа висит резидентом в памяти и при ресете из запущенной из коммандера программе, должен быть возврат в HC. В Unreal ZX это работает. В ZXMAK2 нет.
http://atmturbo.nedopc.com/download/trdos/hc4_00/hc4_00.zip
Галочка на 3D-акселерацию в свойствах VM стоит? У меня с ней эмуль работает под VirtualBox без проблем (и без видимых тормозов).
похоже он запускает VirtualBox в Wine из под линукса, не факт что при таком раскладе VirtualBox сможет аппаратное ускорение использовать :)
---------- Post added at 22:01 ---------- Previous post was at 21:55 ----------
Самое гиблое там - это сильная привязка к WinForms. Скажем то, что устройства, которые добавляют пункты меню, прямо у себя в коде создают System.Windows.Forms.MenuItem и вставляют его куда следует.
Задумывалось что для SDL в AttachGui будет передаваться не Windows.Form, а чтото другое. Для этого и тип задан object, а не Windows.Form. Компонент сам проверяет поддерживает ли он это что-то другое и если не поддерживает, то он к гую просто не цепляется и все. Поэтому это не должно быть проблемой.
Если есть идеи как сделать это более красиво - велкам :)
SAM style
09.05.2013, 23:05
похоже он запускает VirtualBox в Wine из под линукса, не факт что при таком раскладе VirtualBox сможет аппаратное ускорение использовать :)Это надо быть особым извращенцем, чтобы так делать... Сразу вспомнилось - http://bash.im/quote/59325 (дико извиняюсь, если отвлёк :))
Да, прошивка ATM 2 официальная, есть еще более поздняя не офф - eXtra bios. Но ATM 2 в эмуляторе работает не правильно. Думаю не правильная организациия памяти. Есть замечательный Honey Commander для ATM2
http://atmturbo.nedopc.com/download/trdos/hc4_00/hc4_00.htm
Программа висит резидентом в памяти и при ресете из запущенной из коммандера программе, должен быть возврат в HC. В Unreal ZX это работает. В ZXMAK2 нет.
http://atmturbo.nedopc.com/download/trdos/hc4_00/hc4_00.zip
хм, а как это работает интересно?
Компонент сам проверяет поддерживает ли он это что-то другое и если не поддерживает, то он к гую просто не цепляется и все. Поэтому это не должно быть проблемой.
А если будет 10 разных фронт-ендов, то у компонента код разрастется до умопомпрачительных размеров :) В идеале компонент вообще не должен знать откуда он запущен. Он, имхо, должен сказать на AttachGui что-то в духе
var item = m_vm.AddMenuItem(MenuItems.Tools, "Hello, world", OnMenuItemClick); // Menu section, Item title, Callback
а на DetachGui
m_vm.RemoveMenuItem(item);
а остальным должен заниматься какой-нибудь обработчик, который можно подменить извне (по типу как сделан VirtualMachine.OnUpdateVideo)
Он, имхо, должен сказать на AttachGui что-то в духе
написать обертки для менюшек не проблема, а как быть с окнами? Например MemoryBase по менюшке выводит свое окно. Как это сделать переносимым и в то-же время не привязывать компонент к реализации окна? :)
написать обертки для менюшек не проблема, а как быть с окнами? Например MemoryBase по менюшке выводит свое окно. Как это сделать переносимым и в то-же время не привязывать компонент к реализации окна? :)
А оно откроется. Mono умеет открывать WinForms-окна.
Проблема только с менюшками - невозможно в SDL-окно прицепить WinForms-меню, потому что SDL работает через P/Invoke и окна создаёт нативным кодом.
---------- Post added at 02:12 ---------- Previous post was at 02:07 ----------
Ну то есть в идеале конечно было бы надо написать свою обертку над вообще всем оконным интерфейсом, но у такой работы показатель сложность/полезность будет стремиться к бесконечности. Это пригодится только если под Win8 или браузерный Silverlight портировать.
Думаю не правильная организациия памяти.
да, похоже модуль памяти ATM710 работает неправильно:
1) перезапускаем эмулятор (чтобы получить начальное значение памяти)
2) загружаем HC
3) запускаем ReadMe.B
4) ставим точку останова на #808D и делаем сброс
5) на точке останова замаплена пзу ROM#01 (trdos). До этого момента все страницы памяти и пзу переключаются идентично с unreal.
7) делаем шаг [out (#FF77),#AB], получаем ROM#00 и отключение флага доступа к портам, в то время как в unreal флаг доступа продолжает оставаться включен и пзу не меняется... нужно разбираться почему...
[bETA]mEN
10.05.2013, 00:16
Mono умеет открывать WinForms-окна.
http://mono-project.com/FAQ:_Licensing
For people who need full compatibility with the Windows platform, Mono's strategy for dealing with any potential issues that might arise with ASP.NET, ADO.NET or Windows.Forms is: (1) work around the patent by using a different implementation technique that retains the API, but changes the mechanism; if that is not possible, we would (2) remove the pieces of code that were covered by those patents, and also (3) find prior art that would render the patent useless.
А оно откроется. Mono умеет открывать WinForms-окна.
Проблема только с менюшками - невозможно в SDL-окно прицепить WinForms-меню, потому что SDL работает через P/Invoke и окна создаёт нативным кодом.
хм, вот в чем дело, теперь ясно, постараюсь отвязать компоненты от менюшек в ближайших версиях...
mEN;599807']http://mono-project.com/FAQ:_Licensing
Касаемо окошек мелкие отличия есть, серьезных проблем не встречал.
Серьезные отличия mono от дотнета - они в области WCF, WPF, Remoting, ADO.NET и прочих вещей критичных для Enterprise-разработок, но совершенно ненужных для эмулятора.
7) делаем шаг [out (#FF77),#AB], получаем ROM#00 и отключение флага доступа к портам
Как сделано отключение TR-DOS?
Как сделано отключение TR-DOS?
Порты TRDOS активируются по сигналу DOSEN (обычная логика TRDOS) или SYSEN (известен как CPM= (m_aFF77 & 0x200) == 0)
m_aFF77 - адрес последнего обращения к системному порту #FF77, при записи в порт #FF77 устанавливается так:
if (DOSEN || SYSEN)
{
m_pFF77 = value;
m_aFF77 = addr;
UpdateMapping();
}
Пзу TRDOS мапится так:
int index = ((CMR0 & 0x10) >> 2);
int w0 = m_pXFF7[index + 0];
int w1 = m_pXFF7[index + 1];
int w2 = m_pXFF7[index + 2];
int w3 = m_pXFF7[index + 3];
int romPage0 = (w0 & 0x80) != 0 ? (w0 & romMask & 0xFE) | (DOSEN | SYSEN ? 1 : 0) : w0 & romMask;
int romPage1 = (w1 & 0x80) != 0 ? (w1 & romMask & 0xFE) | (DOSEN | SYSEN ? 1 : 0) : w1 & romMask;
int romPage2 = (w2 & 0x80) != 0 ? (w2 & romMask & 0xFE) | (DOSEN | SYSEN ? 1 : 0) : w2 & romMask;
int romPage3 = (w3 & 0x80) != 0 ? (w3 & romMask & 0xFE) | (DOSEN | SYSEN ? 1 : 0) : w3 & romMask;
Здесь:
CMR0 - значение порта #7FFD
romMask - маска пзу, зависит от объема пзу (вычисляется как pageCount-1, где pageCount - число страниц пзу)
m_pXFF7 - значения вывода в порт #xFF7, при записи в порт формируется так:
m_pXFF7[((CMR0 & 0x10) >> 2) | ((addr >> 14) & 3)] = value ^ 0x3F;
Здесь addr - это адрес порта, value - значение которое выводится в порт.
DOSEN не должен отключаться при выполнении кода в #808D, если там подключено ПЗУ. А он похоже отключается.
DOSEN не должен отключаться при выполнении кода в #808D, если там подключено ПЗУ. А он похоже отключается.
при записи в порт #FF77 значения #AB происходит сброс сигнала CPM (значение бита A9 в адресе #FF77), поэтому тут-же происходит отключение пзу TRDOS с последующим подключением пзу согласно текущиму значению m_pXFF7 и бита D4 в порте #7FFD.
почему-же TRDOS должен оставаться замапленым? :v2_conf2:
Updated:
Нашел почему не загружался резидент Honney Commander при сбросе - у меня блокировался вывод в порт #7FFD из пзу TRDOS. В unreal такой блокировки нет. Убрал блокировку и Honney Commander стал загружаться при сбросе нормально.
Обновил эмулятор до версии 2737 (https://zxmak2.codeplex.com/releases/view/106408):
- добавлена настройка RTC по дефолту
- исправлена выборка портов модулей памяти ATM (сброс в Honney Commander 4.0)
http://savepic.org/3421751.png
Есть некоторые вопросы по поводу маппинга пзу трдос в АТМ, сделал небольшой тест. Запустите его на реальном АТМ2. Он должен сбросить машину, вопрос в том - как это произойдет? Точнее в какую ПЗУ сбросится машина - в 48к или в трдос?
Тест в аттачменте - запускать просто RUN из трдоса
при записи в порт #FF77 значения #AB происходит сброс сигнала CPM (значение бита A9 в адресе #FF77), поэтому тут-же происходит отключение пзу TRDOS
Отключение пзу TR-DOS происходит не сразу же, а при следующем чтении КОП из ОЗУ. Сигналы CPM и DOSEN связаны. При активном СPM, DOSEN удерживается в "1" независимо от того, где исполняется код.
Вот часть схемы ATM2, на ней все видно:
http://f14.ifotki_.info/org/50d4b74a1ef8b904d76e6189cb1930c2c383b0150827757.pn g (http://ifotki_.info/)
[bETA]mEN
10.05.2013, 11:43
Вопрос, который я уже задавал, но так и не получио ответа: кто знает, что это за ATM:
http://i.imgur.com/QsV47Yh.png
mEN;599852']Вопрос, который я уже задавал, но так и не получио ответа: кто знает, что это за ATM:
http://i.imgur.com/QsV47Yh.png
Здесь все http://atmturbo.nedopc.com/
А точнее http://atmturbo.nedopc.com/atmshem.htm
Прошивка ПЗУ для ATM-turbo 2 (BIOS 0.91 - с MSX-DOS)
[bETA]mEN
10.05.2013, 15:46
Попытка запустить Prince of Persia:
http://i.imgur.com/PxclUUo.png
В unreal этот образ нормально работает:
http://i.imgur.com/eanaoWC.png
Попытка запустить CP/M для QUORUM закончилась черным экраном :(
mEN;599896']Попытка запустить Prince of Persia:
IMG
В unreal этот образ нормально работает:
IMG
Попытка запустить CP/M для QUORUM закончилась черным экраном :(
Это проблема эмуляции вг93. Нужно включать флаг nodelay. В unreal nodelay по дефолту включен
[bETA]mEN
10.05.2013, 16:11
http://i.imgur.com/QLM9GMU.png
Принц всё равно не хочет запускаться :v2_conf2:
mEN;599901']
Принц всё равно не хочет запускаться :v2_conf2:
у вг93 иногда бывают сбои чтения при загрузке принца
Кстати, может надо какие-нибудь тесты на реальной ВГ93 погонять, чтоб тайминги задержек поправить? Есть 8-канальный логический анализатор, есть Магик-05 (48К) с бетадиском, могу что-нибудь понамерить.
Кстати, может надо какие-нибудь тесты на реальной ВГ93 погонять, чтоб тайминги задержек поправить? Есть 8-канальный логический анализатор, есть Магик-05 (48К) с бетадиском, могу что-нибудь понамерить.
конечно, я уже думал что найти человека с реальной вг93 нереально :)
Правда так вот неожиданно даже не знаю с чего начать, нужно тесты продумать... :)
Что самое интересное хотелось бы затестить на вг93 - какой статус она выставляет сразу после подачи команд.
А на магик-05 стандартное пзу трдос? нельзя ли его заменить на пзу содержащее in a,(c):ret для тестов?
Еще лучше было-бы разрешить доступ к портам вг93 из пзу48к на время тестов - меньше задержки на IO операции.
---------- Post added at 15:53 ---------- Previous post was at 15:52 ----------
Отключение пзу TR-DOS происходит не сразу же, а при следующем чтении КОП из ОЗУ. Сигналы CPM и DOSEN связаны. При активном СPM, DOSEN удерживается в "1" независимо от того, где исполняется код.
Вот часть схемы ATM2, на ней все видно:
Да, судя по схеме CPM дает такой-же результат как попадание в трдос гейт, но убедиться бы не помешало, [URL="http://zx.pk.ru/showpost.php?p=599841&postcount=820"]этот тест (http://ifotki_.info/) на реальной атм2 сбрасывается в трдос?
А на магик-05 стандартное пзу трдос? нельзя ли его заменить на пзу содержащее in a,(c):ret для тестов?
Да, стандартное. ПЗУ заменить можно, я только плохо представляю, что и как там внутри прошито - оно на 64 килобайта.
Еще лучше было-бы разрешить доступ к портам вг93 из пзу48к на время тестов - меньше задержки на IO операции.
Ну, у меня, в принципе, есть еще и Кворумы, у них порты вообще всегда видны (хотя и по другим адресам. Впрочем, кому я рассказываю :) ). Там, правда, контроллер дисковода стоит в одном корпусе с самим дисководом и блоком питания, туда лазить не очень удобно, но ради благого дела найду резиновые перчатки :)
В ATM 2 не запускаются или крашатся некоторые 128к программы, что из HC, что просто из 128 режима. Например эта дема http://vtrdos.ru/demoz/enl96/EYEACHE-.ZIP Она точно работала и на реальном ATM 2. В Unreal работает.
Что самое интересное хотелось бы затестить на вг93 - какой статус она выставляет сразу после подачи команд.
То есть просто что-то в духе
BETA_DATA EQU #83 ; порт данных ВГ93 на Кворуме
BETA_COMMAND EQU #80; порт состояния/команд ВГ93 на Кворуме
LD BC, BETA_COMMAND
XOR A
OUT (C), A ; команда на восстановление
LD BC, BETA_DATA
LD A, 20
OUT (C), A ; 20 дорожка
LD BC, BETA_COMMAND
LD A, #10 ; команда на поиск дорожки
OUT (C), A
IN (C), A ; в A - статус
?
Отключение пзу TR-DOS происходит не сразу же, а при следующем чтении КОП из ОЗУ. Сигналы CPM и DOSEN связаны. При активном СPM, DOSEN удерживается в "1" независимо от того, где исполняется код.
Вот часть схемы ATM2, на ней все видно:
http://f14.ifotki_.info/org/50d4b74a1ef8b904d76e6189cb1930c2c383b0150827757.pn g (http://ifotki_.info/)
а где эту схему посмотреть можно? на сайте atmturbo не доступна...
И еще повторюсь, ктото проверил на реальном АТМ2, этот тест (http://zx.pk.ru/showpost.php?p=599841&postcount=820) сбрасывается в трдос или в 48к?
---------- Post added at 22:22 ---------- Previous post was at 22:19 ----------
То есть просто что-то в духе
?
именно! :)
в идеале бы конечно хорошо знать и как меняется это значение со временем, но то что читается непосредственно сразу после подачи команды самое интересное :)
Тут есть несколько ключевых моментов:
1) определить насколько быстро вг реагирует на команду регистром статуса. Успеет ли Z80 прочитать еще не изменившийся статус или меняется мгновенно или быстрее чем Z80 успевает сделать OUT/IN. Скорей всего последнее, но нужно проверить.
2) какие значения читаются сразу после подачи команд различных типов, именно сразу, т.е. еще до того как вг успеет чтото начитать с диска и начнет выставлять прерывания
а где эту схему посмотреть можно? на сайте atmturbo не доступна...
Схема для платы 7.10 лежит здесь (http://www.nedopc.com/ATMZAK/atm71green.zip)
http://www.nedopc.com/ATMZAK/zakatm710.php
для Платы 7.00 (TURBO 2+) здесь (http://atmturbo.nedopc.com/download/shems/atm700.zip) и более ранних версий
http://atmturbo.nedopc.com/atmshem.htm#atm2
так это-ж не официальная прошивка, а сейчас в эмуляторе официальная, разве нет? :v2_conf2:
За поддержку АТМ турбо спасибо :)
Но к АТМ версии 7.10 к этой прошивке не имеет отношения.
Версия платы 7.10 относится более поздней версии платы от nedopc, так же как и вместе с последними прошивками eXtra BIOS ... XT.. В эмуляторе прошивка для АТМ ранних версий..
Проверил в тесте от Чунина Романа, Тест не работает.. И не весь софт в формате CP/M работает из-за отсутствия поддержки драйвера клавиатуры, знакогенератора и контроллера HDD АТМ.. :)
В этой программе IDE-installer (BOOTDISK) (http://atmturbo.nedopc.com/download/cpm/system/boot/bootdisk.zip) Описание (http://atmturbo.nedopc.com/download/cpm/system/boot/bootdisk.htm) , После того выскакивает заставка нужно нажать пробел, на пробел не реагирует.
И еще повторюсь, ктото проверил на реальном АТМ2, этот тест (http://zx.pk.ru/showpost.php?p=599841&postcount=820) сбрасывается в трдос или в 48к?[COLOR="Silver"]
Реального АТМ2 нет, могу только на Пентеве проверить. Там сбрасывается в TR-DOS.
В ATM 2 не запускаются или крашатся некоторые 128к программы, что из HC, что просто из 128 режима. Например эта дема http://vtrdos.ru/demoz/enl96/EYEACHE-.ZIP Она точно работала и на реальном ATM 2. В Unreal работает.
EYEACHE не работает потому что для АТМ используется выборка порта #7FFD по маске #8202 (A1, A9, A15).
А в unreal используется маска Пентагона #8002, т.е. игнорируется значение A9.
Странно что "она точно работала на реальном АТМ 2"... Нужно проверить по схеме, действительно ли АТМ 2 не использует A9 для выборки #7FFD.
updated: проверил по схеме - АТМ2 использует выборку #7FFD с использованием линии А9, поэтому дема EYEACHE на реальном АТМ-е не должна работать.
---------- Post added at 00:27 ---------- Previous post was at 00:09 ----------
Проверил в тесте от Чунина Романа, Тест не работает..
тест Чунина - это что и где его взять?
И не весь софт в формате CP/M работает из-за отсутствия поддержки драйвера клавиатуры, знакогенератора и контроллера HDD АТМ.. :)
В этой программе IDE-installer (BOOTDISK) (http://atmturbo.nedopc.com/download/cpm/system/boot/bootdisk.zip) Описание (http://atmturbo.nedopc.com/download/cpm/system/boot/bootdisk.htm) После того выскакивает заставка нужно нажать пробел, на пробел не реагирует.
поддержки IDE для АТМ пока нет, т.к. нужно разобраться какие порты в нем используются. Если реализация IDE аналогична смуку, то зная порты можно за 5 мин сделать, если доступ к IDE более сложный, то нужно разбираться.
updated: проверил по схеме - АТМ2 использует выборку #7FFD с использованием линии А9, поэтому дема EYEACHE на реальном АТМ-е не должна работать.
На плате 7.10 рекомендуют делать исправления для лучшей совместимости с устраняющая учитывание линии A9 при выборке порта #7FFD.. http://www.nedopc.com/ATMZAK/atm710re.htm#re11
---------- Post added at 02:04 ---------- Previous post was at 02:03 ----------
тест Чунина - это что и где его взять?
А вот здесь писал про тест и остальные прошивки http://zx-pk.ru/showpost.php?p=599686&postcount=1089
Тест памяти ATM-turbo 2+ от Чунина Романа (2004 год) для версии платы 7.10 (http://atmturbo.nedopc.com/download/shems/roms/testatm.zip)
Тест так должен работать. (http://zx-pk.ru/showpost.php?p=567107&postcount=248)
Вдруг пригодится на всякий случай продублирую здесь исходник теста АТМ турбо (http://zx-pk.ru/showpost.php?p=567024&postcount=243)..
и прошивок клавы (http://zx-pk.ru/showpost.php?p=570108&postcount=267)
---------- Post added at 02:29 ---------- Previous post was at 02:04 ----------
поддержки IDE для АТМ пока нет, т.к. нужно разобраться какие порты в нем используются. Если реализация IDE аналогична смуку, то зная порты можно за 5 мин сделать, если доступ к IDE более сложный, то нужно разбираться.
Нашел вроде полное описание внутренней архитектуры и внешних устройств АТМ турбо 2+ ..
http://atmturbo.nedopc.com/inf/books/nedopc/atm_hard.zip
Книги NedoPC group
http://atmturbo.nedopc.com/atmcpm.htm#books
в идеале бы конечно хорошо знать и как меняется это значение со временем, но то что читается непосредственно сразу после подачи команды самое интересное :)
Изучаю Ларченко-Родионова и попутно кропаю.
https://dl.dropboxusercontent.com/u/4166599/zx/test01.png
Шесть строк - шесть результатов команд. Восстановление, прерывание, переход на дорожку, шаг вперед, шаг назад, шаг. Сразу после выполнения команды циклически читается статус и пишется в память пока она (память) не кончится. После этого в полученном массиве ищутся позиции, в которых байт статуса изменялся (включая самый первый IN), и выводятся на экран. Исходник и tap-ка приаттачены.
В эмуляторе почему-то вообще не работает. И как будто бы диск не видит - после ресета CP/M не запускается. Сейчас еще на виндовой машине проверю.
В эмуляторе почему-то вообще не работает. И как будто бы диск не видит - после ресета CP/M не запускается. Сейчас еще на виндовой машине проверю.
ничего не понял, что именно не работает? какая модель? :v2_conf2:
---------- Post added at 03:54 ---------- Previous post was at 02:22 ----------
Обновил до версии 2740 (https://zxmak2.codeplex.com/releases/view/106498). Баги с DOSEN в ATM оказались не такие простые, в итоге пришлось немного поменять архитектуру устройств BDI и памяти.
Теперь есть две разновидности BDI:
1) FDD контроллеры - для моделей с нативной поддержкой ТРДОС (из которых вырезать трдос невозможно, например PROFI, ATM, SCORPION, PENTAGON 512), не вмешивается в маппинг пзу, предоставляет только порты для доступа к контроллеру дисководов
2) BDI - это контроллер + логика маппинга пзу ТРДОС, используется для классических спектрумов, которые изначально не содержат трдос.
Что нового - менеджер памяти АТМ710 полностью переписан в соответствии со схемой. Тест CHRV заработал :)
Добавлены тестовые пзу для АТМ.
Код ВГ93 вынесен в отдельный клас, чтобы не мешать реализацию девайсов и микросхем. Практически все девайсы памяти подверглись небольшим изменениям, поэтому провел серию тестов - все вроде работает :)
http://savepic.org/3494323.png
ничего не понял, что именно не работает? какая модель? :v2_conf2:
Кворум. Вставлял диск в BDI-устройство, жал Ctrl+Alt+Insert, и должна была б идти загрузка с диска, но не шла. Мне казалось, что статус 0xC4 именно из-за этого появляется. Но сейчас проверил под виндой в свежей версии - всё работает, CP/M по ресету грузится, а статус всё равно C4/C5.
Кворум. Вставлял диск в BDI-устройство, жал Ctrl+Alt+Insert, и должна была б идти загрузка с диска, но не шла. Мне казалось, что статус 0xC4 именно из-за этого появляется. Но сейчас проверил под виндой в свежей версии - всё работает, CP/M по ресету грузится, а статус всё равно C4/C5.
4 - это TRK00, а #40 - это WRITE PROTECT, #80 - это NOTRDY, т.е. дисковод не готов. А какие значения на рельном вг 93 получаются? второй скриншот - это реальная машина? Для чистоты эксперимента, запускай тест когда головка на 0-й дорожке и попробуй заклеивать отверстие блокировки записи и запускать тест с открытым дисководом...
второй скриншот - это реальная машина?
Ага, настоящий Кворум-128.
Alexander Makeev, Спасибо за обновление, такое чувство, что работаешь за реальным АТМ ) Еще не хватает COVOX от АТМ, для полноценной эмуляции АТМ..
в игре BOMB TETRIS (http://atmturbo.nedopc.com/download/cpm/games/b-tetris/b-tetris.zip) (описание к игре (http://atmturbo.nedopc.com/download/cpm/games/b-tetris/b-tetris.htm)) если запускать на Unreal, там работает... Пробовал подключать COVOX от профи и пентагона, не работает ((
[bETA]mEN
12.05.2013, 14:26
Сравнил дамп ПЗУ ATM Turbo-2 BIOS Version 0.91a который делал я, с тем, который выложен на http://atmturbo.nedopc.com/atmshem.htm
Отличие в первых 3-х байтах, относящихся к 48 ROM. Эта "доработка" имеет какой то смысл, кроме "ускорения" запуска бейсика?
http://i.imgur.com/nihnBv0.png
http://i.imgur.com/EVko8j2.png
Пофиксил баги и добавил длительную паузу после команды инициализации, стало больше похоже не правду
https://dl.dropboxusercontent.com/u/4166599/zx/test10.png
https://dl.dropboxusercontent.com/u/4166599/zx/test11.png
Тут строки длинные и перенеслись, всего их 7. К предыдущим 6 командам (Восстановление, прерывание, переход на дорожку, шаг вперед, шаг назад, шаг) добавлено чтение сектора.
Alexander Makeev, Спасибо за обновление, такое чувство, что работаешь за реальным АТМ ) Еще не хватает COVOX от АТМ, для полноценной эмуляции АТМ..
в игре BOMB TETRIS (http://atmturbo.nedopc.com/download/cpm/games/b-tetris/b-tetris.zip) (описание к игре (http://atmturbo.nedopc.com/download/cpm/games/b-tetris/b-tetris.htm)) если запускать на Unreal, там работает... Пробовал подключать COVOX от профи и пентагона, не работает ((
а как его включить? запустил в unreal, тоже ковокс не услышал.
Кстати на каком он порту находится? Если судить по схеме, то маска 7, порт 3 (DD16 выход PRWR), верно?
а как его включить? запустил в unreal, тоже ковокс не услышал. там при запуске, во время загрузки, запись голосовая.. Может с чем-то другим спутал, чето посчитал что голос воспроизводится через COVOX.
Кстати на каком он порту находится? Если судить по схеме, то маска 7, порт 3 (DD16 выход PRWR), верно?
В АТМ, используется порт такой же как и в пентагоне #FB. Проверил на демке, COVOX работает, если загрузить в конфигурацию пентагоновский COVOX .. :)
там при запуске, во время загрузки, запись голосовая.. Может с чем-то другим спутал, чето посчитал что голос воспроизводится через COVOX.
запускал в unreal - нет голоса...
solegstar
12.05.2013, 21:24
запускал в unreal - нет голоса...
в конфиге выключен???:v2_dizzy_botan:
Alexander Makeev, я на этой сборке проверял http://atmturbo.nedopc.com/atmemul.htm#emul
в конфиге выключен???:v2_dizzy_botan:
SD=1 ; enable/disable soundrive
CovoxFB=1 ; enable/disable pentagon covox
CovoxDD=1 ; enable/disable scorpion covox
solegstar
12.05.2013, 22:11
SD=1 ; enable/disable soundrive
CovoxFB=1 ; enable/disable pentagon covox
CovoxDD=1 ; enable/disable scorpion covox
а громкость на максимуме в gui setup? у меня zorel`a трдшка играет. порты выставлял оба 251.
а громкость на максимуме в gui setup? у меня zorel`a трдшка играет. порты выставлял оба 251.
уже разобрался, нужно было предупредить что запускать нужно "TETRIS", а не "T" :)
Как выяснилось в игре используется ковокс с портами скорпиона, я этот ковокс не добавил, т.к. не нашел софта под него.
Добавил, голос заработал, только есть проблемка - ковокс конфликтует с ВГ93. Нужно смотреть по какой маске в атм доступ к портам вг93 реализован, возможно из-за этого и сбои в чтении вг93 на атм проявлялись :)
Updated: ошибся, на ковокс в игре всетаки пентагоновский (когда проверял забыл маску исправить). Но проблема с конфликтом системного порта FDD есть, исправлю путем выборки портов вг93 по маске #87 вместо #83
Alexander Makeev, Огромное спасибо за отличный эмулятор, когда заработал ATM, как будто на 20 лет назад съездил :-) . Заметил в работе некоторые баги.
В CP/M ATM2 при загрузке игр есть артефакты в заставках.
http://pixant.ru/07ui/12052013-210453
http://pixant.ru/07uj/12052013-211303
В Unreal тоже есть, но уже на бордюре, если это в CP/M так можно назвать
http://pixant.ru/07uk/12052013-211736
http://pixant.ru/07ul/12052013-212046
А если в Unreal установить small border тогда не видно мусора
http://pixant.ru/07un/12052013-220337
http://pixant.ru/07um/12052013-220201
И еще в ZXMAK2 не зпускается игра под CP/M с FDI образа
http://atmturbo.nedopc.com/download/cpm/games/goblins/goblins1.zip
Обновил до версии 2741 (https://zxmak2.codeplex.com/releases/view/106542):
- добавлен девайс IDE ATM (настройка аналогична IDE SMUC - редактированием файла ZXMAK2.vmide)
- SMUC теперь называется IDE SMUC и переехал из категории Other в категорию Disk;
- девайсы BEEPER/COVOX/CMOS переименованы для лучшей читаемости имен;
- исправлен COVOX PENTAGON (удалена проверка dosen), изменена маска выборки порта на #FF
- добавлен COVOX SCORPION, который пока совсем не тестировался, т.к. не знаю софта под него;
- исправлена маска выборки портов FDD контроллера (теперь #97 вместо #83), т.к. старая конфликтовала с IDE ATM и COVOX PENTAGON
http://savepic.org/3514868.png
ide-installer висит на предложении нажать SPACE потому что опрашивает порт #FE необычным образом - загружает в BC=#0000 и делает IN a,(c) после чего ожидает увидеть код символа #20 в регистре A. Очевидно это расчитано на клавиатуру ATM, которая пока эмулируется как обычная ZX. загружаем в A=#20 отладчиком и запускаем на выполнение - далее АТМ клавиатура не требуется, пока не дойдет дело до FDISK, где разделы создаются расширенными кнопками, а их эмуляции пока нет :)
---------- Post added at 23:53 ---------- Previous post was at 23:45 ----------
Alexander Makeev, Огромное спасибо за отличный эмулятор, когда заработал ATM, как будто на 20 лет назад съездил :-) . Заметил в работе некоторые баги.
В CP/M ATM2 при загрузке игр есть артефакты в заставках.
http://pixant.ru/07ui/12052013-210453
http://pixant.ru/07uj/12052013-211303
В Unreal тоже есть, но уже на бордюре, если это в CP/M так можно назвать
http://pixant.ru/07uk/12052013-211736
http://pixant.ru/07ul/12052013-212046
А если в Unreal установить small border тогда не видно мусора
http://pixant.ru/07un/12052013-220337
http://pixant.ru/07um/12052013-220201
это проблема эмуляции ВГ93, в данном случае данные почему-то иногда читаются с ошибками. На повторном запуске ошибок может не быть, а могут появиться в другом месте. Причина пока не ясна. Нужно копаться в коде вг93
Alexander Makeev, Заметно ковокс играет медлеее.. поддержки Турбо режима еще не хватает до 7, 14 мгц ? :)
За обновление спасибо..
Alexander Makeev, Заметно ковокс играет медлеее.. поддержки Турбо режима еще не хватает до 7, 14 мгц ? :)
в рантайме турбу включать опасно, т.к. некоторые компоненты зависят от таймингов, а механизма уведомления о смене таймингов пока нет.
В последней версии я добавил ULA девайс ATM [turbo] - с ним будет постоянный турборежим. Т.е. пока переключение турбы только сменой ULA девайса :)
Alexander Makeev, Не обратил внимание в настройках, спасибо :)
И еще в ZXMAK2 не зпускается игра под CP/M с FDI образа
http://atmturbo.nedopc.com/download/cpm/games/goblins/goblins1.zip
тут похоже тоже проблема с вг93, раза с десятого запустилась. Видимо в unreal задержка на какой-то команде другая и вызывает меньше ошибок
http://savepic.org/3534326.png
SoftLight
13.05.2013, 11:34
Маленькое пожелание. Хорошо бы завести файлик типа 'release notes' или 'news' как в unreal и класть его в архив с новым релизом эмулятора. Автор все равно пишет комменты по релизу на codeplex и здесь в сообщениях с новыми версиями, ничего не нужно нового делать. Там ведь очень полезные сведения, но их будет тяжело найти если какой-нибудь гоблин грохнет форум или захочется посмотреть а что там было в версии полугодовой давности.
тут похоже тоже проблема с вг93, раза с десятого запустилась. Видимо в unreal задержка на какой-то команде другая и вызывает меньше ошибок
Еще под CPM нормально доступен только один дисковод. В Unreal тоже самое.
Alexander Makeev, может ты и для спринтера IDE прикрутишь? ;)
Alexander Makeev, может ты и для спринтера IDE прикрутишь? ;)
конечно, если подскажешь порты и алгоритм записи чтения :)
конечно, если подскажешь порты и алгоритм записи чтения
Во вложении схема контроллера на мелкой логике с описанием работы, а так же сырок BIOS по части работы с HDD.
Во вложении схема контроллера на мелкой логике с описанием работы, а так же сырок BIOS по части работы с HDD.
схема конечно супер :v2_dizzy_facepalm:, долго сидел ломал голову, в итоге взял список портов из исходника драйвера, хз по какой маске идет адресация портов IDE, сделал #FEFF. ПЗУ увидело что на иде чето висит, но вместо имени показывает пустую строку и сразу переходит к поиску второго ide (кот. сейчас всегда нету).
Хз почему пусто, может так и должно быть? Чем можно затестить пустой винт на спринтере?
прикладываю в аттачменте exe-шник с IDE SPRINTER, попробуй отладить, т.к. я вообще в спринтере ничего не знаю :)
исходник самого девайса прилагается, для компиляции - добавить в папку Hardware/Sprinter/
Updated: разобрался - поменял маску порта регистра данных на #00FF и пзу-ха увидела имя винта :)
Сейчас выложу обновление
Обновил до версии 2741 (https://zxmak2.codeplex.com/releases/view/106644):
- добавлен девайс IDE SPRINTER (пока не тестился, но биосом определяется)
http://savepic.org/3525775.png
можно тестить, кто затестит отпишите плиз - как работает :)
Напомню, чтобы подключить винт, нужно добавить IDE девайс на шину, после применения изменений закрыть эмулятор и отредактировать ZXMAK2.vmide:
<IdeDiskDescriptor>
<Image fileName="test1.hdd" isCdrom="False" isReadOnly="False" />
<Geometry cylinders="20" heads="16" sectors="63" lba="201600" />
</IdeDiskDescriptor>
Тут test1.hdd - это имя файла (если без пути, то ищет в папке эмулятора). Если указано имя не существующего файла, будет создан новый образ винта в указанном файле.
Не забываем прописать параметры геометрии винта :)
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.WriteIdeComma nd(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(ExecutionCon text executionContext, ContextCallback callback, Object state)
в System.Threading.ThreadHelper.ThreadStart()
В итоге загрузка с винта не идет
Образ могу скинуть, куда скажешь для проверки.
Во вложении кинул образ дискеты, на которой есть прога hdtest.exe, она тестирует работу винта. В эмуле надо загрузиться с этой дискеты (в биосе выбрать загрузку с 1й дискеты) и запустить hdtest.exe. В данный момент она у меня ругается - HDD init error. Registers R/W Error
Образ могу скинуть, куда скажешь для проверки.
Во вложении кинул образ дискеты, на которой есть прога 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: поправил маски, так тоже работает и так вроде-бы правильнее судя по описанию:
var dataMask = 0x00E7;//0x00FF;
var regMask = 0xE1E7;//0x00E7;//0xFEFF;
EXE с поправленными масками в аттачменте, проверь плиз
Выложил образ, там есть кой-какой софт. должен определиться как диск С и по идее загрузиться ОС с него.
http://rghost.ru/46009536
http://rghost.ru/46009550
Выложил образ, там есть кой-какой софт. должен определиться как диск С и по идее загрузиться ОС с него.
http://rghost.ru/46009536
http://rghost.ru/46009550
а какие у него параметры не знаешь?
Вот что мне выдает тест с имеющимся образом.
Ось не определила диск - не видно содержимого. Но возможно из-за некорректных параметров геометрии, подскажи, плиз, как правильно настроить.
<IdeDiskDescriptor>
<Image fileName="SprinterHDD.img" isCdrom="False" isReadOnly="False" />
<Geometry cylinders="20" heads="199" sectors="63" lba="201600" />
</IdeDiskDescriptor>
Если подсунуть пустой образ, то "Not stable write" нет сообщений.
а какие у него параметры не знаешь?
не знаю... это образ с флешки на 128 мб.
---------- Post added at 10:53 ---------- Previous post was at 10:52 ----------
образ своего винта могу снять только вечером или завтра, как притащу его на работу
---------- Post added at 10:55 ---------- Previous post was at 10:53 ----------
Утилит типа fdisk или format на спринтере нет, использовались диски размеченные средствами IBM PC, понимает файловую систему FAT16.
Вот что мне выдает тест с имеющимся образом.
Ось не определила диск - не видно содержимого. Но возможно из-за некорректных параметров геометрии, подскажи, плиз, как правильно настроить.
я сам уже не помню, надо разбираться. LBA - это помоемому общий объем в секторах, т.е. полный объем /512, а сколько дорожек, головок, секторов нужно смотртеть. Только сам образ может не включать область в конце диска, в которую не производилась запись :)
Ты только смотри что некорректное обращение к винту могло попортить на образе данные. А с включеным write protect может не работать. Поэтому после неудачных экспериментов нужно восстанавливать образ или проверять md5.
Пожалуй нужно будет переделать защиту от записи путем корректной обработки команд записи, но реально данные в образ не писать. Сейчас команда просто прерывается с ошибкой. Из-за этого например скорпион не хочет работать с винтом защищенным от записи (он не видит что команда прервалась и продолжает слать данные).
Нашел винт (на наклейке все параметры описаны), сейчас отформачу его и попробую сделать образ.
Ну что там, какой результат?
Alexander Makeev, в общем на созданном из винта образе (на коротом была создана партиция fat16 и закинуто несколько файлов), эмуль увидел эту самую партицию, но... никаких файлов там не нашел, попытка записи на это образ средствами спринтера в эмуляторе (копирование файлов с дискеты на винт) не выдало никаких ошибок, но и результата тоже никакого не дало. Но стоит заметить, что образ был размером 57гб (винт макстор на 60гб), так что тут могут быть какие-то заморочки иного плана, а другого винта под рукой с описанной геометрией под рукой не было.
Снял винт с реального спринтера, он у меня на 500 мб, завтра на работе сниму с него образ и посмотрим уже более детально.
И все-таки хотелось бы разобраться как правильно указывать геометрию для образов флешек, т.к. у меня на спринтере тоже стоит одна флешка CF и одна SD через переходник - работают отлично, причем приоритетное использование именно флешек, нежели винта. Может кто подскажет, а?
И все-таки хотелось бы разобраться как правильно указывать геометрию для образов флешек, т.к. у меня на спринтере тоже стоит одна флешка CF и одна SD через переходник - работают отлично, причем приоритетное использование именно флешек, нежели винта. Может кто подскажет, а?
самому хотелось бы узнать, а можешь прочитать геометрию через IDE порты и выложить вместе с объемом винта на флешке и размером его образа?
Залогировал обмен, в момент загрузки:
Message 23:57:14.594 WR ATACTL: #A0
Message 23:57:14.595 WR ATACTL: #A0
Message 23:57:14.595 RD ATACMD: #50
Message 23:57:14.595 WR ATACNT: #05
Message 23:57:14.596 RD ATACNT: #05
Message 23:57:14.596 WR ATACMD: #00
Error 23:57:14.599 *** unknown ATA cmd #00 ***
дальше идет куча каких-то команд, но такой ошибки быть не должно, т.к. команды с кодом #00 нет, чтото не так...
Хотя не исключено что это ошибка в прошивке спринтера. В конце читает какие-то сектора и после вычитывания последнего байта затихает. Вероятно не нравится содержимое...
Updated: похоже с регистрами путаница получилось, выглядит так что сейчас порты CYL-LO и CYL-HI перепутаны местами, нужно разбираться. Еще не совсем ясно какой должен быть регистр на порту Control - 6-й или 8-й (CS=1,DA=6)
Вобщем что выяснилось:
1) При сбросе спринтер вначале читает сектор lba=1, затем lba=0. Если в нулевом секторе не оказалось таблицы разделов, то эмуль на этом прекращает обращение к винту.
2) образ флешки который ты выкладывал спринтеру чем-то не нравится, после чтения секторов 1 и 0, больше обращений к диску не производится
3) нашел в инете образ винта wc.hdd на 1 ГБ (не от спринтера). С этим образом спринтер после чтения первых двух секторов начинает читать сектор lba=63, где судя по сигнатюрам лежит какой-то загрузочный сектор. Но после этого опять читает сектор 0 и прекращает обращения к винту.
4) похоже я перепутал регистры СYL HI и CYL LO, может поэтому у тебя эмуль не увидел файлов на винте.
Прикладываю исправленный EXE (CYL LO и CYL HI поменял местами), с полным логированием обращений к винту, в лог пишутся все команды со значением PC во время вывода команды, физическое чтение/запись секторов и весь обмен с IDE
Все оказалось проще, в твоем образе от спринтера пустая таблица разделов :)
Вобщем нужен нормальный образ винта от спринтера :)
Cделал утилитку, выводит информацию о разделах в указанном образе.
Обновил эмулятор до версии 2743 (https://zxmak2.codeplex.com/releases/view/106690):
- исправлен контроллер IDE SPRINTER
http://savepic.org/3538120.png
полноценно восстановить образ винта, который тут выкладывали, не хватило времени. В нем отсутствовала таблица разделов. Забил просто от балды значения побольше, основная задача была получить доступ к файлам. Кому интересно, в аттачменте екзешник с исходником который фиксит образ диска который тут выкладывали.
Что он делает - добавляет в начало сектор с MBR (который отсутствует в образе) и забивает в этот MBR подходящие параметры.
Настроеный ZXMAK2.vmide также прилагается :)
Т.к. параметры МБР особо не расчитывались, а забиты от балды, то естественно могут быть глюки с размером винта/раздела, но это не важно, все файлы должны попасть в читаемую область.
Все читается! :biggrin:
пустая таблица разделов
насколько я помню для флеш-накопителей это нормальное явление. Но через конвертер SD-IDE спринтер грузится, мож сам конвертер чет подменяет на лету - хз.
---------- Post added at 08:10 ---------- Previous post was at 07:25 ----------
Alexander Makeev, с чтением все ок. А вот с записью бока: скопировал файл с помощью FlexNavigator, после завершения выдается ошибка "Drive not ready". После ресета Спринтера - биос винта уже не видит. Если перезапустить эмуль, то винт обнаруживается, но в той папке, куда копировался файл - мусор.
Образ винта в архиве 1,4Гб, даж не знаю куда его залить :)
---------- Post added at 08:13 ---------- Previous post was at 08:10 ----------
В викии нашел статью по LBA, там дана формула пересчета CHS в LBA, по идее можно провести расчет и в обратную сторону, это для справки.
---------- Post added at 09:42 ---------- Previous post was at 08:13 ----------
Образ винта в архиве 1,4Гб, даж не знаю куда его залить
Далеко ходить не надо, то же самое происходит и с fix-ированным образом флешки.
Делаем так, грузимся с дискеты что была выложена выше, запускаем "c:\fn\fn.exe", пытаемся скопировать какой-либо файл куда-либо... наблюдаем за результатом.
Я тут выше выкладывал exe с логированием всех операций - этопо сути уже исправленная версия, можно по логам посмотреть что происходит.
Кстати непонятно - зачем спринтер при сбросе пишет в иде невалидную команду #00, не знаешь?
зачем спринтер при сбросе пишет в иде невалидную команду #00, не знаешь?
даж не в курсе. Биос спринтера не безгрешен - это факт :) там и в fdd-драйвере есть очень серьезная ошибка, из-за которой дискеты читаются в эмуле только при NoDelay :) При дисковой ошибке чтение повторяется, а адрес чтения увеличивается, как-будто бы чтение продолжается. Потому, если задержки включить, то при загрузке ос с дискеты мы увидим повисание - т.к. буфер чтения наехал на код самого загрузчика.
Приложил лог-файл, че там происходит мне не понятно :)
После копирования файла из папки на винте в папку на винте - образ портится, устройство в эмуле спринтером не опознается.
кстати, в логировании обмена с иде в exe файле с логами, на значения lba и offset в записи ATA WRITE SECTOR можно не обращать внимание, это ошибка в логировании - не удалил запись lba и offset, на самом деле используются значения которые до этого были в SEEK.
Судя по логам (смотрел по своему логу), спринтер пишет сектор, после записи последнего байта сектора отправляет старший байт данных для следующего сектора и после этого уходит в зацикливание на чтении статуса - эмулятор возвращает статус #18, на этом спринтер долго циклится, пока не выдает ошибку drive not ready.
Вот описание регистра статуса:
bit 0 : error bit. If this bit is set then an error has
occurred while executing the latest command. The error
status itself is to be found in the error register.
bit 1 : index pulse. Each revolution of the disk this bit is
pulsed to '1' once. I have never looked at this bit, I
do not even know if that really happens.
bit 2 : ECC bit. if this bit is set then an ECC correction on
the data was executed. I ignore this bit.
bit 3 : DRQ bit. If this bit is set then the disk either wants
data (disk write) or has data for you (disk read).
bit 4 : SKC bit. Indicates that a seek has been executed with
success. I ignore this bit.
bit 5 : WFT bit. indicates a write error has happened. I do
not know what to do with this bit here and now. I've
never seen it go active.
bit 6 : RDY bit. indicates that the disk has finished its
power-up. Wait for this bit to be active before doing
anything (execpt reset) with the disk. I once ignored
this bit and was rewarded with a completely unusable
disk.
bit 7 : BSY bit. This bit is set when the disk is doing
something for you. You have to wait for this bit to
clear before you can start giving orders to the disk.
что ему не нравится непонятно... :v2_conf2:
может не расчитывает что винт скушает сектор и не подавясь попросит следующий без ожидания?
может не расчитывает что винт скушает сектор и не подавясь попросит следующий без ожидания?
ща надо посмотреть сырки драйвера
аха, ясно, отладчиком выяснил что спринтер ждет установки бита RDY :)
0CBB 210000 LD HL,#0000
0CBE ED78 IN A,(C) ; BC=#4053 (регистр команды/статуса)
0CC0 A2 AND D ; D=#C1 (читается #18)
0CC1 BB CP E ; E=#40
0CC2 2002 JR NZ,#0CC6
0CC4 A7 AND A
0CC5 C9 RET
0CC6 2B DEC HL
0CC7 7D LD A,L
0CC8 B4 OR H
0CC9 C2BE0C JP NZ,#0CBE
Интересно, перед началом передачи данных для первого сектора этот бит спринтера не смутил, а вот на втором уже не понравился :)
Тоже дошел до этого кода:
До начала передачи:
LD DE,#8908 ;WAIT BUSY=0 & DRQ=1 & ERR=0
LD BC,HDR_CTL
CALL WAITPRT
EXX
RET C
По завершению передачи:
LD DE,#C140 ;WAIT BUSY=0 & ERR=0 & READY=1
LD BC,HDR_CTL
CALL WAITPRT
WAITPRT - это та процедура, листинг которой ты выше привел.
WAITPRT - это та процедура, листинг которой ты выше привел.
добавил в конец метода AtaDevice.write_sectors (Hardware\IC\AtaPort.cs:736) установку флага RDY:
reg.err = HD_ERROR.ERR_NONE;
reg.status = HD_STATUS.STATUS_DRDY | HD_STATUS.STATUS_DRQ | HD_STATUS.STATUS_DSC;
запись стала проходить, но содержимое папки, куда идет запись портится... :confused_std:
А на реальном спринтере копирование в FN вообще работает?
А на реальном спринтере копирование в FN вообще работает?
Да, работает. Я тоже по началу грешил на FN, попробовал консольную copy - результат тот же.
Да, работает. Я тоже по началу грешил на FN, попробовал консольную copy - результат тот же.
через FM копирование вообще подвисает, даже если RDY устанавливается. Нужно разбираться что он пишет и почему результат получается такой... Может вечером посмотрю
через FM
это демка, там возможно команды не реализованы.
---------- Post added at 11:27 ---------- Previous post was at 11:17 ----------
У меня тут другое подозрение... возможно корень зла и не в IDE, при записи на дискету в эмуле тоже проблема с порчей информации происходит, но я грешил на BDI и растактовку... Надо придумать как найти этот глюк.
---------- Post added at 12:34 ---------- Previous post was at 11:27 ----------
Alexander Makeev, дай, плиз, подправленную версию. и как можно выкачать сырки с кодеплекса?
Сырки можно выкачать на закладке Source. Там есть три подзакладки, открываешь хистори - увидишь историю чекинов, выбираешь чекин, там можно будет увидеть изменения. Справа вверху есть тулбарчик и там ссылочка Download, она скачивает zip с исходниками нужной версии.
Где изменение сделать я выше писал - там указан файл, номер строки и фрагмент кода с подчеркнутым изменением.
Зачекинил небольшое изменение для IDE, регистры теперь идентифицируются по имени enum'а.
Также добавлено настраиваемое логирование обмена с IDE SPRINTER.
Логирование включается через редактирование VMZ файла - нужно установить аттрибут logIo="True". Логи пишутся в таком формате:
Message 10:23:14.316 IDE WR HeadAndDrive : #A0 @ PC=#9648
Message 10:23:14.316 IDE WR HeadAndDrive : #A0 @ PC=#9659
Message 10:23:14.317 IDE RD CommandStatus: #50 @ PC=#965E
Message 10:23:14.317 IDE WR SectorCount : #05 @ PC=#9686
Message 10:23:14.317 IDE RD SectorCount : #05 @ PC=#9693
Message 10:23:14.317 IDE WR CommandStatus: #00 @ PC=#96A6
...
Message 10:59:10.918 IDE WR CommandStatus: #20 @ PC=#0A76
Message 10:59:10.918 IDE HDD SEEK lba=1 [fileOffset=#00000200]
Message 10:59:10.918 IDE HDD READ SECTOR ************************************************** **************
Message 10:59:10.919 IDE RD CommandStatus: #58 @ PC=#0CC0
Message 10:59:10.919 IDE RD DATA LO: #EB @ PC=#0A91 [#3CEB]
Message 10:59:10.919 IDE RD DATA HI: #3C @ PC=#0A93
Message 10:59:10.919 IDE RD DATA LO: #90 @ PC=#0A95 [#4D90]
Message 10:59:10.919 IDE RD DATA HI: #4D @ PC=#0A97
Message 10:59:10.919 IDE RD DATA LO: #53 @ PC=#0A99 [#4453]
Message 10:59:10.919 IDE RD DATA HI: #44 @ PC=#0A9B
...
Фикс для DRDY (http://zx.pk.ru/showpost.php?p=601485&postcount=889) (теперь это строка 816) пока не чекинил, т.к. еще не совсем ясно насколько это корректно.
Релиз пока не делал
Нашел причину порчи при записи - неправильно эмулируется защелка 16 битного слова данных при записи данных. В спринтере она работает наоборот чем в смуке. Вечером попробую исправить.
Обновил эмулятор до версии 2744 (https://zxmak2.codeplex.com/releases/view/106766):
На скрине видно что поменялось :)
http://savepic.org/3507249.png
В эмуляторе нормальная загрузка только с дисковода А:. При загрузке с B: C: D: происходит краш некоторых дисков. Например попробуйте вот этот http://vtrdos.ru/full_ver/SI.ZIP. Это происходит и под BDI и FDD. В CP/M тоже, DIR работает только на A:
В эмуляторе нормальная загрузка только с дисковода А:. При загрузке с B: C: D: происходит краш некоторых дисков. Например попробуйте вот этот http://vtrdos.ru/full_ver/SI.ZIP. Это происходит и под BDI и FDD. В CP/M тоже, DIR работает только на A:
что значит краш? эта игрушка и не должна грузиться с диска Б - в ней загрузчкик на это не расчитан, в unreal с диска Б тоже зависает.
В CPM нужно включить флажок nodelay в настройках BDI/FDD чтобы диск читался - где-то косяк с эмуляцией задержек на ВГ93.
Почему не должна грузится с дисковода отличного от A: ? У меня вседа были реальные ZX c 2-мя дисководами. При выборе по умолчанию *"B:* Всё грузилось с B: Последний реал ATM-Turbo2. Я всегда пользовался Honey Commader, диск с HC был всегда в дисководе A:. В B: вставлялось все остальное, в том числе и SI. Все работало. Что касается CP/M, то на ATM под CP/M , была непонятная мне реализация дисководов A:>B: B:>A: . При вставке в реальный B: и выборе в CP/M A:, по команде DIR читалось содержимое диска. В ZXMAK2 не читаестя. nodelay не помогает. А Unreal тоже не эталон. На фоне теперешнего ZXMAK2, так вовсе курит в сторонке :-) . Я не программист, но думаю где-то, что-то не так в реализации эмуляции ВГ93.
что-то не так в реализации эмуляции ВГ93.
Никто не спорит, мало того автор эмуля будет рад полезной информации по поводу некорректной эмуляции ВГ93.
У меня вседа были реальные ZX c 2-мя дисководами.
Всё грузилось с B:
Не знаю на счет этого SI, но у меня тоже был спектрум с 2мя дисководами и вот программы не все грузились с B из-за криворукости программистов, т.к. лепили турболоадеры куда не попадя и с грубыми ошибками, которые не позволяли работать с дисководами отличными от А.
Почему не должна грузится с дисковода отличного от A: ? У меня вседа были реальные ZX c 2-мя дисководами. При выборе по умолчанию *"B:* Всё грузилось с B: Последний реал ATM-Turbo2. Я всегда пользовался Honey Commader, диск с HC был всегда в дисководе A:. В B: вставлялось все остальное, в том числе и SI. Все работало.
Скорее всего ты просто SI с другим загрузчиком использовал. Тот что на VTRDOS лежит не расчитан на загрузку с диска Б.
Что касается CP/M, то на ATM под CP/M , была непонятная мне реализация дисководов A:>B: B:>A: . При вставке в реальный B: и выборе в CP/M A:, по команде DIR читалось содержимое диска. В ZXMAK2 не читаестя. nodelay не помогает. А Unreal тоже не эталон. На фоне теперешнего ZXMAK2, так вовсе курит в сторонке :-) . Я не программист, но думаю где-то, что-то не так в реализации эмуляции ВГ93.
Не исключено что на атм выбор диска неправильно реализован. По поводу эмуляции вг93 - тут проблема в том что пока нет ни одного эмулятора более менее нормально эмулирующего вг93.
В unreal примитивная эмуляция образа дорожки, но относительно неплохо тайминги позиционирования головки реализованы. В первом ZXMAK эмуляция дорожки была более полной, но таймингов позиционирвания практически не было и код был жуткий. :rolleyes:
В ZXMAK2 сейчас используется реализация вг93 от unreal, но с некоторыми переделками - где-то чтото улучшено, где-то наоборот сломано. Проверять не на чем - железа нет, тестов нет.
[bETA]mEN
18.05.2013, 11:47
Если в bios Спринтера поставить Quick ROM Start : Enabled, то эмулятор попадает в такое состояние:
http://i.imgur.com/bcxtAQk.png
из которого нельзя выйти "перезагрузкой", только закрыв сам эмулятор.
[bETA]mEN, насколько я понимаю - это быстрый запуск спектрумовского ПЗУ, но эта фича пока не реализована, как и режим эмуляции спектрума спринтером. Реализация данной фичи требует детального изучения режима, но он не описан нигде, автор компа смутно что-то помнит и на конкретные вопросы местами ответить не в состоянии. Поэтому по возможности исследуются программы использующие те или иные возможности ПК Sprinter и вносится поддержка этих возможностей в эмуль. В текущей версии эмуля реализованы не все фичи компьютера, мало того, часть их не будет реализована никогда - увы :(
mEN;601915']Если в bios Спринтера поставить Quick ROM Start : Enabled, то эмулятор попадает в такое состояние:
из которого нельзя выйти "перезагрузкой", только закрыв сам эмулятор.
хм :v2_conf2: нужно у Дмитрия спросить с чем это связано, я в коде девайсов Спринтера и архитектуре Спринтера плохо ориентируюсь :smile:
2Дмитрий: а чем кстати Спринтер звук выводит? может ковокс какой прикрутить, чтобы WAV проигрывать?
2Дмитрий: а чем кстати Спринтер звук выводит? может ковокс какой прикрутить, чтобы WAV проигрывать?
там ковокс с буфером в 256 байт на канал, емнип :) все думал начать реализацию, но звук пока еще не программил на ПЦ :)
Во вложении описание (уж какое есть :)) программирования Спринтера, там на 17й стр. описано устройство Covox-Blaster это оно и есть.
UPD: и обычный ковокс тож реализован на порте FBh и 4Fh
UPD: соврал, в описании написано, что все-таки моно-ковокс :)
там стерео-ковокс с буфером в 256 байт на канал, емнип :) все думал начать реализацию, но звук пока еще не программил на ПЦ :)
в эмуле звук особо программить не нужно, если наследуешься от SoundDeviceBase, то вообще достаточно метод UpdateDac вызывать с 16 битными значениями для левого и правого канала. Базовый класс сам смотрит какой такт процессора в момент вызова UpdateDac и обрабатывает.
Единственный момент - девайс сам должен управлять громкостью в зависимости от значения Volume. Если перегрузить метод OnUpdateVolume, то можно сразу пересчитать коэффициент, исходя из новой громкости, и потом просто умножать результаты на него.
Вот например код стереоковокса для PROFI:
public class CovoxProfi : SoundDeviceBase
{
#region IBusDevice
public override string Name { get { return "COVOX PROFI"; } }
public override string Description { get { return "COVOX PROFI \r\n#3F - right channel\r\n#5F - left channel"; } }
public override BusDeviceCategory Category { get { return BusDeviceCategory.Sound; } }
public override void BusInit(IBusManager bmgr)
{
base.BusInit(bmgr);
m_memory = bmgr.FindDevice<IMemoryDevice>();
bmgr.SubscribeWrIo(0x00FF, 0x003F, WritePortR);
bmgr.SubscribeWrIo(0x00FF, 0x005F, WritePortL);
}
#endregion
private IMemoryDevice m_memory;
private ushort m_left = 0;
private ushort m_right = 0;
private int m_mult = 0;
private void WritePortL(ushort addr, byte value, ref bool iorqge)
{
if (m_memory.DOSEN)
return;
if (!iorqge)
return;
iorqge = false;
m_left = (ushort)(value * m_mult);
UpdateDac(m_left, m_right);
}
private void WritePortR(ushort addr, byte value, ref bool iorqge)
{
if (m_memory.DOSEN)
return;
if (!iorqge)
return;
iorqge = false;
m_right = (ushort)(value * m_mult);
UpdateDac(m_left, m_right);
}
protected override void OnVolumeChanged(int oldVolume, int newVolume)
{
m_mult = (0xFFFF * newVolume) / (100 * 0xFF);
}
}
Куда уж проще :)
Вот правда с реализацией буфферизации посложнее будет, видимо прийдется доработать SoundDeviceBase, например чтобы он вызывал что-то вроде OnSampleEvent или как-то так :)
Насчёт TD0 - действительно всё работает, я просто забыл, как Q-DOS запускать (надо из-под TR-DOS, а я упорно пытался из CP/M). Меня ввела в заблуждение надпись, возникающая при монтировании TD0 образа "Sector data had bad CRC". Что забавно, эта надпись возникает, а иногда и не возникает при монтировании одного и того же образа!
а что это за такой образ диска FDI? на котором ошибка то появляется то не появляется, можно его выложить?
Пытаюсь найти инфу и какой-то софт для IDE PROFI, но что-то ничего не найду. Может кто подкинет ссылочку?
John North
19.05.2013, 10:07
Sayman
10.03.2009, 06:22
как всегда, порты профи указаны неверно:
IDESYS Equ 06ABH ; Системный регистр IDE /W
IDECOM Equ 07EBH ; Регистр комманд /W
IDESTAT Equ 07CBH ; Регистр состояния /R
SELHDW Equ 06EBH ; Регистр номера головы /
W
SELHDR Equ 06CBH ; Регистр номера головы /
R
IDESECTW Equ 03EBH ; Регистр номера
сектора /W
IDESECTR Equ 03CBH ; Регистр номера
сектора /R
IDECYLHW Equ 05EBH ; Регистр ст.байта
номера циллиндра /W
IDECYLHR Equ 05CBH ; Регистр ст.байта
номера циллиндра /R
IDECYLLW Equ 04EBH ; РегистР мл.байта
номера циллиндра /W
IDECYLLR Equ 04CBH ; Регистр мл.байта
номера циллиндра /R
SECTNUMW Equ 02EBH ; Регистр счетчика
секторов /W
SECTNUMR Equ 02CBH ; Регистр счетчика
секторов /R
IDEERROR Equ 01CBH ; Регистр ошибок /R
IDEPRED Equ 01EBH ; Регистр стартового
цилиндра предк./W
IDEDATHW Equ 0FFCBH; Рег.данных: ст.байт -
Запись
IDEDATHR Equ 0FFEBH; Рег.данных: ст.байт -
Чтехие
IDEDATLW Equ 00EBH ; Рег.данных: мл.байт -
Запись
IDEDATLR Equ 00CBH ; Рег.данных: мл.байт -
Чтение
по другим портам можно словить
невероятное количество голюнов. прошу
принять к сведени
---------- Post added at 10:07 ---------- Previous post was at 09:50 ----------
вот тут еще про порты Профи
zxpress.ru/article.php?id=4477
Разбираясь с периферией Profi сделал подборку информации по портам из разных источников, предварительная версия :(
P.S.
Законченная версия где то потерялась :v2_conf2:
ногами сильно не пинать могут быть ошибки.
[bETA]mEN
19.05.2013, 12:39
Просьба к обладателям реалов запустить приложенный тест. Особенно интересует выполнение BIT n,(HL), LDI, LDD, CPI и CPD.
mEN;602171']Просьба к обладателям реалов запустить приложенный тест. Особенно интересует выполнение BIT n,(HL), LDI, LDD, CPI и CPD.
Тест проходит без ошибок. Как на реале, так и в эмуляторе.
[bETA]mEN
19.05.2013, 17:24
Тест проходит без ошибок. Как на реале, так и в эмуляторе.
Применительно к ZXMak это выглядит так:
http://i.imgur.com/RnCCSpR.png
mEN;602247']Применительно к ZXMak это выглядит так:
Может ZXMak не виноват? В процессе тестирования используются данные ПЗУ, так что для корректной работы теста обязательно наличие оригинальной ПЗУ 82 года.
[bETA]mEN
19.05.2013, 18:03
Может ZXMak не виноват? С процессе тестирования используются данные ПЗУ, так что для корректной работы теста обязательно наличие оригинальной ПЗУ 82 года.
Mea culpa
http://i.imgur.com/d3RHI07.png
Alexander Makeev, А можно вверху на тулбаре, там где File и прочее, разместить кнопку, что-то типа Disk или BetaDisk, чтобы не делать лишних телодвижений, для более быстрого доступа, если надо пользоваться одновременно не одним дисководом?
Может ZXMak не виноват? С процессе тестирования используются данные ПЗУ, так что для корректной работы теста обязательно наличие оригинальной ПЗУ 82 года.
совершенно верно, этот тест нужно запускать на модели ZX Spectrum 48 :)
Обновил до версии 2745 (https://zxmak2.codeplex.com/releases/view/106820)
http://savepic.org/3513248.png
:biggrin:
SoftLight
20.05.2013, 00:33
Второй эмуль в мире поддерживающий пентевочку!!!
IDE вроде работает - показывает папки на винчестере (винт тот самый от спринтера). Странно только что показываются только папки, а файлы не видны. это так и должно быть?
При переходе в 48 бейсик чего-то ждет с черным экраном, долго возился с этим, все детали менеджера памяти вроде заимплементил, а оно висит, потом отладчиком выяснил что это оно просто ждет пока в порту IRB у AY-ка младший бит в ноль сбросится. Если нажать капс-брейк, то ожидание прекращается и появляется заставка. Непонятно - чего оно ожидает увидеть на порту AY8910?
[bETA]mEN
20.05.2013, 00:59
Непонятно - чего оно ожидает увидеть на порту AY8910?
Принтерный интерфейс по стандарту AY-принтер?
Alexander Makeev, А можно вверху на тулбаре, там где File и прочее, разместить кнопку, что-то типа Disk или BetaDisk, чтобы не делать лишних телодвижений, для более быстрого доступа, если надо пользоваться одновременно не одним дисководом?
Тулбар добавлю после шорткатов. С шорткатами пока не ясно где брать источник ивентов - DirectInput или Windows Messages. Задача пересекается с расширением api для эмуляторов клавиатуры - нужно добавить возможность чтения очереди сканкодов. Как это все реализовать пока не придумал.
Сюда же можно добавить возможность настройки клавиш, как в unreal. Как это все соединить - задача непростая :)
---------- Post added at 06:36 ---------- Previous post was at 06:03 ----------
Кстати не сказал - в PentEvo пока используется ULA от ATM2, поэтому доп видеорежимов пентевы пока нет.
в PentEvo пока используется ULA от ATM2, поэтому доп видеорежимов пентевы пока нет.
Дык вроде ZEK реализовывал уже ПентЭву на ZXMAK, или я чет путаю?
---------- Post added at 07:10 ---------- Previous post was at 07:09 ----------
IDE вроде работает - показывает папки на винчестере (винт тот самый от спринтера). Странно только что показываются только папки, а файлы не видны. это так и должно быть?
Оно ищет определенные файлы - образы дискет и хобеты.
Дык вроде ZEK реализовывал уже ПентЭву на ZXMAK, или я чет путаю?
---------- Post added at 07:10 ---------- Previous post was at 07:09 ----------
Оно ищет определенные файлы - образы дискет и хобеты.
реализовывал, но для какой-то старой версий с переделками. Тогда код затерялся, на днях нашел и пытался перетянуть на новую архитектуру, изменений довольно много было, да и код мудреный был, вобщем с наскока не получилось. Даже скомпилить со старой версией не удалось. Тогда написал модуль памяти заново, на основе свежего кода АТМ2. Код получился достаточно прозрачный.
Реализацию CMOS взял из кода ZEK'а, возможно правильнее было бы использовать уже имеющийся эмулятор DS чипов, но я прочитал что в пентеве используется какой-то хитрый эмулятор CMOS на пике, поэтому взял фукнционал из кода ZEK'а.
Там еще контроллер сдкарт был и какой-то код для эмуляции эмулятора вг93, правда я не понял что он делает, можно и это перетянуть.
FDD контроллер - дешифрацию портов взял в коде ZEK'а. В его коде не понял смысла эмуляции эмулятора, который с виду сводился к записи значений в переменную. Поэтому эту часть не переносил, т.е. сейчас FDD PentEvo работает как обычный FDD контроллер.
---------- Post added at 07:28 ---------- Previous post was at 07:23 ----------
Оно ищет определенные файлы - образы дискет и хобеты.
ага, я уже увидел - трд показывает, только загрузить не получилось - очень странный и непонятный для меня трдос в пентеве :v2_eek:
Насколько я понял в этом эмуляторе трдоса используются т.н. "аппаратные ловушки"? Это я пока не реализовал, нужно разбираться что это такое и как работает.
т.н. "аппаратные ловушки"? Это я пока не реализовал, нужно разбираться что это такое и как работает.
По этому поводу лучше Savelij-я потеребить, он ЭвоДОС писал.
Думаю прикрутить сохранение карты памяти ATM2 и PentEvo в SZX. Но вот не уверен будут ли они совместимы между собой? Поэтому вначале нужно разобраться как сохранять карту памяти в совместимом формате.
Пока что думаю попробовать сохренение в виде содержимого РУ2 + расширенные биты пентевы в виде такого-же массива и системные регистры. В режиме АТМ писать в расширенные биты пентевы FF.
Т.е. как-то так:
8 bytes - ATM D72&D22 155RU2 content
8 bytes - EVO extension bits placed into D0,D1 (D6,D7 output to the port #F7F7)
2 bytes - ATM aFF77
1 byte - ATM pFF77
1 byte - EVO pXXBF
1 byte - EVO pEFF7
кстати если есть разработчики пентевы, может кто подскажет как физически было реализовано сохранение старших битов в порт #F7F7 (когда старшие биты используются для адресации 4МБ озу, вместо управления ram/rom и dos)
Насколько я понял в этом эмуляторе трдоса используются т.н. "аппаратные ловушки"? Это я пока не реализовал, нужно разбираться что это такое и как работает.
В бейзконфе аппаратные ловушки не используются. Там две страницы ПЗУ с Эводосом. Одна для работы с дискетами, другая для эмуляции ВГ93. Для эмуляции ВГ93 нужны 4 порта в области TR-DOS: 2F,4F,6F,8F. Это обычные ячейки памяти: читается последнее записанное значение.
может кто подскажет как физически было реализовано сохранение старших битов в порт #F7F7 (когда старшие биты используются для адресации 4МБ озу, вместо управления ram/rom и dos)
Исходники же открыты. Вот:
// port reading: sets pages, ramnrom, dos_7ffd
//
always @(posedge fclk) if( atmF7_wr )
begin
if( za[15:14]==ADDR )
begin
if( za[11] ) // xff7 ports - 1 meg
begin
pages [ pent1m_ROM ] <= ~{ 2'b11, zd[5:0] };
ramnrom [ pent1m_ROM ] <= zd[6];
dos_7ffd[ pent1m_ROM ] <= zd[7];
end
else // x7f7 ports - 4 meg ram
begin
pages [ pent1m_ROM ] <= ~zd;
ramnrom [ pent1m_ROM ] <= 1'b1; // RAM on
// dos_7ffd - UNCHANGED!!! (possibility to use 7ffd 1m and 128k addressing in the whole 4m!)
end
end
end
Please fix in Byte emu:
- after restart ZXMAX2 settings not stored e.g. switched ON COBMECT. This is for working BDI
- after change disk in title bar ZXMAX2 not change name used disk. Name need change if make e.g. command TR-DOS *"B:" or *"A:" and also while open disk image from File Menu.
- after reset emu name disk still is in title bar
Please fix in Byte emu:
- after restart ZXMAX2 settings not stored e.g. switched ON COBMECT. This is for working BDI
done, will be available in the next release
- after change disk in title bar ZXMAX2 not change name used disk. Name need change if make e.g. command TR-DOS *"B:" or *"A:" and also while open disk image from File Menu.
- after reset emu name disk still is in title bar
planned
I test ZXMAK2 with "Byte48" emulation + BDI and this is my findings:
In manual BDI wrote that need use RANDOMIZE USR 15360 to run TR-DOS but in Byte is something different. I can run TR-DOS in 2 ways:
1. RANDOMIZE USR 15616 - working with COBMECT or without COBMECT
or
2. Selecting COBMECT from menu Tools and RANDOMIZE USR 15360 or RANDOMIZE USR 15616
Is this is normal?
I test ZXMAK2 with "Byte48" emulation + BDI and this is my findings:
In manual BDI wrote that need use RANDOMIZE USR 15360 to run TR-DOS but in Byte is something different. I can run TR-DOS in 2 ways:
1. RANDOMIZE USR 15616 - working with COBMECT or without COBMECT
or
2. Selecting COBMECT from menu Tools and RANDOMIZE USR 15360 or RANDOMIZE USR 15616
Is this is normal?
I don't know exactly how it should works. Currently byte romset uses standard tr-dos rom image.
If you have any info on how it should works - let me know and I'll implement it.
I'm sorry but I read exactly both manuals BDI & BDI128:
To run TR-DOS from BDI (http://www.sinclair.hu/speccyalista/konyvtar/kezikonyvek/Beta%20Disk%20Interface%20User%20Manual%20v2.pdf) - RANDOMIZE USR 15360
To run TR-DOS from BDI 128 (ftp://ftp.worldofspectrum.org/pub/sinclair/hardware-info/Beta128DiskInterface_Manual.txt) - RANDOMIZE USR 15616
I see that ZXMAK2 use BETA 128 so need run this with 15616 and this working good with or without COBMECT :-)
COBMECT is need for input english character in TR-DOS e.g. change drive from A to B. If COBMECT not switch ON then have rus character set and not possible change drive.
обновил до версии 2746 (https://zxmak2.codeplex.com/releases/view/107063)
- добавилась эмуляция эмулятора вг93 для PENTEVO
- добавился контроллер SD CARD (написанный ZEK'ом)
- добавился контроллер IDE PROFI
- немного изменилась архитектура девайсов, теперь они умеют сами инициировать сохранение конфигурации. Ну и как результат теперь сохраняются настройки Tape Traps/Autostart, COBMECT для BYTE и т.п.
http://savepic.org/3483148.png
Долго возился с кемпстон маусом и навигатором из этого образа, так и не понял почему курсор в навигаторе не двигается, хотя нажатия кнопок видит. По отладчику видно, что код отлично читает значения координат из кемпстон мауса, но затем начинает делать непонятные манипуляции над прочитанными значениями. В итоге понять почему курсор не двигается не удалось. Вероятно мышка в этом навигаторе не работала изначально.
В закромах нашелся также образ с ProfiDOS Ver 4.0, который мне тут кто-то выкладывал (скорее всего Sayman).
С этим образом тоже пришлось повозиться - он зависает на загрузке, причина зависания - в регистр IDE HeadAndDrive пишется значение #C1, это включает режим адресации LBA и устанавливает старший байт номера LBA блока в 01, т.е. попытка прочитать сектор с номером #01000101. Попытка естественно заканчивается неудачей, т.к. размер винчестера меньше 8 гигабайт. Но профидос 4.0 это оказывается не интересно, он игнорирует флаг ошибки и ждет флага готовности данных... :)
solegstar
25.05.2013, 17:24
Долго возился с кемпстон маусом и навигатором из этого образа, так и не понял почему курсор в навигаторе не двигается, хотя нажатия кнопок видит. По отладчику видно, что код отлично читает значения координат из кемпстон мауса, но затем начинает делать непонятные манипуляции над прочитанными значениями. В итоге понять почему курсор не двигается не удалось. Вероятно мышка в этом навигаторе не работала изначально.
припоминаю такие же проблемы с мышей в HopCommander`e. Нормально кемпстон-мыша не заработала. Мышь подключалась через ZXMC2 и отлично работает в спектрум-режиме. Возможно, кто-то исправит драйверок...
P.S.
Законченная версия где то потерялась :v2_conf2:
ногами сильно не пинать могут быть ошибки.
с дешифрацией портов в профи пока путаница.
Спасибо за таблицы, правда сложно по ним что-то понять, например в чем разница между этими таблицами так и не понял:
- "Расширенная периферия в короткой адресации только для Profi2+"
- "Расширенная периферия в короткой адресации только для Profi2+"
называются одинаково, а значения в таблицах разные... :v2_wacko:
---------- Post added at 17:58 ---------- Previous post was at 17:57 ----------
припоминаю такие же проблемы с мышей в HopCommander`e. Нормально кемпстон-мыша не заработала. Мышь подключалась через ZXMC2 и отлично работает в спектрум-режиме. Возможно, кто-то исправит драйверок...
ну да, я про HopCommander и говорю
кстати если есть разработчики пентевы, может кто подскажет как физически было реализовано сохранение старших битов в порт #F7F7 (когда старшие биты используются для адресации 4МБ озу, вместо управления ram/rom и dos)
я сделал память по Verilog исходнику, точно так как реализовано в железе,
эмулятор ВГ93 нужен для эводоса, юзается для эмуляции дисков в рам диске
---------- Post added at 19:27 ---------- Previous post was at 19:08 ----------
RTC там отличается, помимо EEPROM читает еще данные разные левые, скан коды клавиатуры
---------- Post added at 19:28 ---------- Previous post was at 19:27 ----------
Я бы наследовался бы, но не помню или не было его тогда, или нельзя было расширить пространство адресов EEPROM
с дешифрацией портов в профи пока путаница.
Спасибо за таблицы, правда сложно по ним что-то понять, например в чем разница между этими таблицами так и не понял:
- "Расширенная периферия в короткой адресации только для Profi2+"
- "Расширенная периферия в короткой адресации только для Profi2+"
называются одинаково, а значения в таблицах разные... :v2_wacko:
---------- Post added at 17:58 ---------- Previous post was at 17:57 ----------
Щас сам вспоминаю, делал таблицу три года назад законченный документ утрачен :(
При установки бита D5 порта #DFFD и и бита D4 порта #7FFD
модифицируется доступ к расширенной периферии ,адреса периферии меняются.
порты:
вг 93
вв55
ви1 будет доступен по дополнительным адресам
(регистры микросхема часов доступна всегда, и режиме <Spectrum>.
P.S.
Тут ошибка написано :
Порты контроллера IDE
доступны только при CP/M=1 & ROM14=0
должно быть как я понимаю CP/M=1 & ROM14=1 :v2_conf2:
у меня такой вопрос - а на профи вообще есть софт, который с винчестером работает нормально? Из того что я нашел - все некорректно с винтом обращается. При инициализации зачем-то с первого цилиндра сектора вычитываются вместо нулевого.
Возникает вопрос чем вообще протестить можно корректно ли иде эмулируется или нет?
у меня такой вопрос - а на профи вообще есть софт, который с винчестером работает нормально? Из того что я нашел - все некорректно с винтом обращается. При инициализации зачем-то с первого цилиндра сектора вычитываются вместо нулевого.
Возникает вопрос чем вообще протестить можно корректно ли иде эмулируется или нет?
У меня получилось в Unrealе с этим образом:
видео инструкцию установки системы на hdd
http://i4.imageban.ru/out/2011/10/19/4c8ddc42505ca6418781cd0980e60417.gif
ВИДЕО: http://dropmefiles.com/AHlBq
У меня получилось в Unrealе с этим образом:
видео инструкцию установки системы на hdd
форматируется и в ZXMAK2, можно файлы записать, читаются. Вот только правильно ли физически на диск пишется, почему кроме этого образа ниодин другой нормально с винтом не работает?
ps: по картинке сложно понять что там происходит, лучше видео выкладывать.
---------- Post added at 22:39 ---------- Previous post was at 21:51 ----------
Результаты получаются одинаковые у unreal и zxmak2, но вот это наводит на подозрения что тут что-то не так:
http://savepic.org/3482132.png
---------- Post added at 23:58 ---------- Previous post was at 22:39 ----------
Кстати, а как запустить образ 530_HD? он у меня как и в unreal вываливается с ошибкой HDD Failure или вообще висит - в зависимости от содержимого на винте...
---------- Post added 26.05.2013 at 00:48 ---------- Previous post was 25.05.2013 at 23:58 ----------
Обновил эмулятор до версии 2747 (https://zxmak2.codeplex.com/releases/view/107074), исправлены ошибки дешифрации портов
http://savepic.org/3496488.png
Кстати, а как запустить образ 530_HD? он у меня как и в unreal вываливается с ошибкой HDD Failure или вообще висит - в зависимости от содержимого на винте..
С образ 530_HD система сразу стартует с HDD после запуска файла BOOTSTRT.COM с дискеты
нужно про инициализировать винт (запустить программу FORMATHD и вы-
полнить операцию Set Boot_Flag) и скопировать компоненты системы на HDD.
описание на диске:
Можно добавить в ZXMAK поддержку образов .PRO
простой по секторной копии данных дискеты.
формат образа:
80 track 5 x 1024kb sector 819200kb
Track 000 Side 0 1,2,3,4,9
Track 001 Side 1 1,2,3,4,5
--------------------------------
Track 158 Side 0 1,2,3,4,5
Track 159 Side 1 1,2,3,4,5
работать с образами .PRO умеет
ZX Disk Studio (http://zx.pk.ru/showpost.php?p=282368&postcount=1) ,ATM CP/M Explorer (http://zx.pk.ru/showpost.php?p=530861&postcount=102)
и Unreal Speccy.
С образ 530_HD система сразу стартует с HDD после запуска файла BOOTSTRT.COM с дискеты
нужно про инициализировать винт (запустить программу FORMATHD и вы-
полнить операцию Set Boot_Flag) и скопировать компоненты системы на HDD.
хех, точно, правда загрузиться с винта созданного по инструкции в гифке не получилось - после выбора Jazz/HC вылазит красное окно: "File not found DOSBIO DRV". На обоих дискетах этого файла нет и где его брать непонятно.
Файл в области user15, может скопировать в user0 :confused:
а на HDD в корневой каталог :)
P.S.
А как подключить образ HDD к ZXMAK,или скачать с уже подключённым для примера :(
Можно добавить в ZXMAK поддержку образов .PRO
простой по секторной копии данных дискеты.
формат образа:
80 track 5 x 1024kb sector 819200kb
Track 000 Side 0 1,2,3,4,9
Track 001 Side 1 1,2,3,4,5
--------------------------------
Track 158 Side 0 1,2,3,4,5
Track 159 Side 1 1,2,3,4,5
работать с образами .PRO умеет
сделал, работает, но пока не чекинил - есть вопрос, я правильно понял что вместо 5-го сектора на нулевом треке пишется сектор с ID 9? Или это опечатка?
Да девятый , чтобы стартовать TR-DOSе.
А как подключить образ HDD к ZXMAK,или скачать с уже подключённым для примера :(
в конфигурации машины добавить девайс IDE и применить изменения. На диске, рядом с ZXMAK2.vmz (это файл конфигурации машины), появится файл ZXMAK2.vmide - это текстовый XML файл. В нем указывается ссылка на файл с обаразом и его параметры CHS (число цилиндров/голов/секторов на дорогу) и размер LBA.
Указать образ диска пока можно только вручную отредактировав этот файл (эмуль желательно закрыть на время редактирования).
Размер LBA должен быть равен С * H * S.
Если указано имя файла, который не существует, то будет создан новый образ с таким именем.
Чёто у меня образ не создался,буду пробовать.
Чёто у меня образ не создался,буду пробовать.
Если в конфигурации машины есть IDE девайс, то пустой файл (имя которого прописано в ZXMAK2.vmide, должен появиться сразу при запуске эмулятора.
Вот содержимое ZXMAK2.vmide для создания/использования образа "profi.hdd":
<IdeDiskDescriptor>
<Image fileName="profi.hdd" isCdrom="False" isReadOnly="False" />
<Geometry cylinders="609" heads="16" sectors="63" lba="613872" />
</IdeDiskDescriptor>
это такие-же параметры образа как на GIF'ке, которую ты выкладывал выше. Файл с образом появится рядом с эмулятором.
Можно прописать путь к образу:
<IdeDiskDescriptor>
<Image fileName="C:\profi.hdd" isCdrom="False" isReadOnly="False" />
<Geometry cylinders="609" heads="16" sectors="63" lba="613872" />
</IdeDiskDescriptor>
---------- Post added at 12:24 ---------- Previous post was at 11:44 ----------
Файл в области user15, может скопировать в user0 :confused:
а на HDD в корневой каталог :)
про юзеров не знал, скопировал с дискеты USER15 на hdd USER15 и стало грузиться с винта :biggrin:
В образе 530 есть ошибка в каталоге невидны файлы области user15 :(
файлы для системы надо брать с образ 530_HD в user15
и скопировать HDD в корневой каталог.
загрузился с винта !:v2_dizzy_roll:
P.S.
Вот бы разместить загрузчик в ПЗУ,хотя бы в место 128 вasicа
всего 768 байт.
В образе 530 есть ошибка в каталоге невидны файлы области user15 :(
файлы для системы надо брать с образ 530_HD в user15
и скопировать HDD в корневой каталог.
загрузился с винта !:v2_dizzy_roll:
P.S.
Вот бы разместить загрузчик в ПЗУ,хотя бы в место 128 вasicа
всего 4 кб.
я во внутреностях профи доса не разбираюсь, если образ для пзу, то его можно подключить добавив в ромпак. можно например так сделать:
<RomSet name="PROFI-DOSBOOT">
<Page name="RAW" image="PROFI/PROF-M.ROM" />
<Page name="128" image="PROFI/dosboot.rom" />
</RomSet>
в этом случае будет загружена обычная пзу-шка профи, а 128-я пзуха будет взята из dosboot.rom, вот только где взять этот ром?
А что, для профи не было прошивок, которые сразу с винта грузились?
я во внутреностях профи доса не разбираюсь, если образ для пзу, то его можно подключить добавив в ромпак. можно например так сделать:
<RomSet name="PROFI-DOSBOOT">
<Page name="RAW" image="PROFI/PROF-M.ROM" />
<Page name="128" image="PROFI/dosboot.rom" />
</RomSet>
в этом случае будет загружена обычная пзу-шка профи, а 128-я пзуха будет взята из dosboot.rom, вот только где взять этот ром?
А что, для профи не было прошивок, которые сразу с винта грузились?
Мне не попадались:(
Технология запуска дисков профи доса такая же как и в Is-dosе
При выполнении любой команды (в том числе пустой) TR-DOS предпринимает попытку чтения сектора 9 на 0 дорожке, в котором содержится информация о диске. Если размер сектора оказывается больше принятого в TR-DOS (256 байт, у CP\M — 1024 байта), то память за буфером, в которой, кроме всего, располагается область информации о каналах ввода-вывода (с адресами обработчиков), оказывается затертой считанными данными. При попытке выдать ошибку (через канал вывода на дополнительный экран) TR-DOS передает управление загрузчику операционной системы, адрес которого попал в поле адреса соответствующего обработчика в результате переполнения.
может кто-то знает софт который использует расширенные видеорежимы PENTEVO?
Т.е. "ZX 256x192 16 цветов" (Alco 16?), "ZX hardware multicolor" и EVO TEXT (в одной странице).
Нужно для отладки этих режимов :)
может кто-то знает софт который использует расширенные видеорежимы PENTEVO?
Т.е. "ZX 256x192 16 цветов" (Alco 16?),
«Pang 16C (http://atmturbo.nedopc.com/download/trdos/games/pang16c/pang16c.zip)» и «Ball Quest (http://alonecoder.nedopc.com/zx/BQZX.rar)»
"ZX hardware multicolor"
Для этого помоему вообще только 1 игра написана — «Hexagonal Filler (http://alonecoder.nedopc.com/zx/index.html)»
и EVO TEXT (в одной странице).
Нужно для отладки этих режимов :)
Ну самое первое, что приходит на ум — «ALASM 5.09 + ATM textmode version (http://alonecoder.nedopc.com/zx/index.html)»
А вообще весь «такой» софт найдёшь на странице — http://alonecoder.nedopc.com/zx/
Ну самое первое, что приходит на ум — «ALASM 5.09 + ATM textmode version (http://alonecoder.nedopc.com/zx/index.html)»
не, проверил - он обычный текстовый режим ATM использует (с двумя видеостраницами). Этот режим давно отлажен.
Меня интересует софт под текстовый режим EVO (с одной видеостраницей).
Меня интересует софт под текстовый режим EVO (с одной видеостраницей).
Вот: http://dlcorp.nedopc.com/viewtopic.php?f=17&t=958
Обновил эмулятор до версии 2748 (https://zxmak2.codeplex.com/releases/view/107106):
- добавлен формат файлов PRO (PROFI disk image 5x1024 sectors x 2 sides x 80 cyls)
- добавлена ULA PENTEVA с ее расширенными видеорежимами
http://savepic.org/3503708.pnghttp://savepic.ru/4562577.png
http://savepic.net/3695226.png
Вот бы разместить загрузчик в ПЗУ,хотя бы в место 128 вasicа всего 4 кб.
Тестирен битте :)
В закромах нашелся также образ с ProfiDOS Ver 4.0, который мне тут кто-то выкладывал (скорее всего Sayman).
С этим образом тоже пришлось повозиться - он зависает на загрузке, причина зависания - в регистр IDE HeadAndDrive пишется значение #C1, это включает режим адресации LBA и устанавливает старший байт номера LBA блока в 01, т.е. попытка прочитать сектор с номером #01000101. Попытка естественно заканчивается неудачей, т.к. размер винчестера меньше 8 гигабайт. Но профидос 4.0 это оказывается не интересно, он игнорирует флаг ошибки и ждет флага готовности данных... :)
Это еще что, есть еще и счетчик на 255 головок :) Хотя ответа на вопрос как можно в 4 бита засунуть 8 битное число я так и не получил :)
добавлена ULA PENTEVA с ее расширенными видеорежимами
ммм… назови лучше «ZXEvo (BaseConf)»
Потому что есть ещё другой вариант «PentEvo (TSConf)»
Это еще что, есть еще и счетчик на 255 головок :) Хотя ответа на вопрос как можно в 4 бита засунуть 8 битное число я так и не получил :)
в результате отладки IDE, выяснились такие интересные детали:
1) весь имеющийся у меня софт для Profi (профидос, QDOS в разных вариациях), адресует винчестер с 1-го цилиндра, а не с нулевого. Т.е. 16 треков по 63 сектора фактически не используются;
2) данные секторов записываются с перевернутыми младшей/старшей половинками 16 битных слов. Т.е. текст "TEST" будет записан как "ETTS". Зачем - для меня осталось загадкой
Данные записанные на винчестер с помощью профи, читать на других машинах похоже никто и не собирался :v2_dizzy_no:
Тестирен битте :)
Ошибка вышла :v2_dizzy_facepalm:
всего 768 байт
Тестирен битте :)
Что-то не работает.
После сброса - как обычно скрин подождите, к винту не обращается.
При переходе в бейсик 128 - появляется 128-е меню.
А ты тестил эту прошивку на эмуле?
Если что вот образ загрузочного винта в аттачменте
Что-то не работает.
После сброса - как обычно скрин подождите, к винту не обращается.
При переходе в бейсик 128 - появляется 128-е меню.
А ты тестил эту прошивку на эмуле?
Если что вот образ загрузочного винта в аттачменте
У меня реала нет, на реале тестировал Solegstar. У него все работало. И да загрузка с винта запускается из меню старта загрузки цпм. Единственный вариант. На Профике нет никаких вариантов доступа к винту из пзу, как и возможности возврата в сервис ром из озу. Потому загрузчик пашет из озу и при проблемах только сбросом можно вернуть пзу.
---------- Post added at 22:49 ---------- Previous post was at 22:47 ----------
Загрузчик интегрирован с прилагаемой дискеты, как с чем то другим будет не имею понятия.
solegstar
26.05.2013, 22:56
У меня реала нет, на реале тестировал Solegstar. У него все работало. И да загрузка с винта запускается из меню старта загрузки цпм.....
Подтверждаю, всё работало отлично на реале. :)
Работает !!! :)
ах! моя ошибка что я не попробовал нажать "загрузка системы", действительно все работает! :biggrin:
А это официальная прошивка 2.1 или просто любительский мод?
Кстати есть небольшой баг - после загрузки системы с моего загурзочного винта, профидос пытается читать дискету в дисководе, а в дисководе пусто - вываливается ошибка. Это проблема в моем образе винта или в загрузчике из пзу?
ах! моя ошибка что я не попробовал нажать "загрузка системы", действительно все работает! :biggrin:
А это официальная прошивка 2.1 или просто любительский мод?
Кстати есть небольшой баг - после загрузки системы с моего загурзочного винта, профидос пытается читать дискету в дисководе, а в дисководе пусто - вываливается ошибка. Это проблема в моем образе винта или в загрузчике из пзу?
Гы, последняя официальная была версии 2.0. А это новая типо профессианальный мод ;)
Я на винт копировал с приложенного образа. Не замечал такого эффекта.
---------- Post added at 23:43 ---------- Previous post was at 23:41 ----------
Загрузчик это кусочек кода загружающий код системы и отдающий ему управление. Никак не может заглюкивать на дисковод тем более после запуска системы.
Загрузчик это кусочек кода загружающий код системы и отдающий ему управление. Никак не может заглюкивать на дисковод тем более после запуска системы.
это по всей видимости так система у меня на винте настроена, посмотри плиз мой загрузочный винт (я выше образ выкладывал), что там нужно настроить чтобы он к A диску не обращался во время загрузки?
Вот такая ошибка при загрузке:
http://savepic.org/3519062.png
И еще - как можно редактор WRITE установить? После копирования на винт он почему-то отказывается запускаться... а чем текстовые файлы смотреть непонятно...
это по всей видимости так система у меня на винте настроена, посмотри плиз мой загрузочный винт (я выше образ выкладывал), что там нужно настроить чтобы он к A диску не обращался во время загрузки?
Вот такая ошибка при загрузке:
http://savepic.org/3519062.png
И еще - как можно редактор WRITE установить? После копирования на винт он почему-то отказывается запускаться... а чем текстовые файлы смотреть непонятно...
Вот рабочий образ винта с кучкой файлов, и write там рабочий. По крайне мере под анрылом пашет как часы и выше описанных глюков нет. В меню запущенной системы не пашет пункт 2. Остальное пашет. Параметры винта из анрыла:
Image0=profihdd.img
CHS0=100/16/63
LBA0=100800
Вот рабочий образ винта с кучкой файлов, и write там рабочий. По крайне мере под анрылом пашет как часы и выше описанных глюков нет.
да, с этого образа грузится без обращений к дискете :v2_dizzy_drink:
а рабочий драйвер kempston mouse в природе существует?
да, с этого образа грузится без обращений к дискете :v2_dizzy_drink:
а рабочий драйвер kempston mouse в природе существует?
А зачем? И да в цпм Профика нет кемпстон мауса, там комовская мышь и соотвествующий драйвер.
А зачем? И да в цпм Профика нет кемпстон мауса, там комовская мышь и соотвествующий драйвер.
в профидосе, на тех дискетках что тут выше приводили мышка кемпстоновская, только почему-то не реагирует на движения. По отладчику видно что драйвер считывает изменившееся положение мыши, но курсор в HC почему-то не двигается. А вот на кнопки реакция видна.
В системе JAZZ, драйвер DIAMONDа для kempston mouse работает.
А как сохранить изменённый образ диска в ZXMAK2 :v2_conf2:
А как сохранить изменённый образ диска в ZXMAK2 :v2_conf2:
Меню File->Save as
В диалоге выбрать желаемый формат для сохранения
А с Drive B: ...
С drive B...D можно только закрыв эмулятор или открыв другой образ - должно быть предложено сохранить изменения. При этом открытый файл должен быть в формате поддерживающем сохранение.
Спасибо,сохранение в формате .pro работает
с drive B только в udi.
solegstar
27.05.2013, 17:36
Разбираясь с периферией Profi сделал подборку информации по портам из разных источников, предварительная версия :(
P.S.
Законченная версия где то потерялась :v2_conf2:
ногами сильно не пинать могут быть ошибки.
а можешь выложить (или отправить мне на электропочту - мой_ник (собачка)укр.нет) оригинал с таблицами, как раз пишу прошивку под верхушку разбираясь с дешифрацией, и чтоб не делать таблицы заново, могу твои проверить и поправить, если будут неточности. Спасибо. :)
а можешь выложить (или отправить мне на электропочту - мой_ник (собачка)укр.нет) оригинал с таблицами, как раз пишу прошивку под верхушку разбираясь с дешифрацией, и чтоб не делать таблицы заново, могу твои проверить и поправить, если будут неточности. Спасибо. :)
Сейчас подготовлю.
ZXMAK, раз Байт уже отлажен, быть может самое время добавить эмуляцию Байта-01? ;)
---------- Post added at 21:30 ---------- Previous post was at 21:30 ----------
там есть весьма интресные фишки :)
Александр, а можешь еще один дисковый сериализатор добавить, qdi? Это формат кворумских дисков, поддерживаемый "ATM CP/M Explorer"-ом.
Исходник в аттаче. Там, правда, сплошной копипаст из ProSerializer - он от него отличается 4 строчками :)
Пример qdi диска вот - http://dl.dropboxusercontent.com/u/20289147/M80.QDI
Обновил до версии 2749 (https://zxmak2.codeplex.com/releases/view/107219):
- добавлена эмуляция загрузки шрифтов для пентевы
- добавлен формат дисков QDI
http://savepic.org/3548646.png
ZXMAK, раз Байт уже отлажен, быть может самое время добавить эмуляцию Байта-01? ;)
---------- Post added at 21:30 ---------- Previous post was at 21:30 ----------
там есть весьма интресные фишки :)
я бы с удовольствием, но у меня появились грандиозные планы насчет дебаггера, так что байт-01 как-нибудь потом. А может кто-то возьмется помочь ;)
Попробовал загрузить древнею систему 91г CP/M под монохромный Profi
не могу понять такое ощущение что система пишет в другую экранную область , на экране нечего невидно :confused:
в unreal speccy работает.
Попробовал загрузить древнею систему 91г CP/M под монохромный Profi
не могу понять такое ощущение что система пишет в другую экранную область , на экране нечего невидно :confused:
в unreal speccy работает.
ошибка дешфирации порта DFFD, исправил - обновил до версии 2750:
- исправлена дешифрация порта DFFD для PROFI
- добавлен ромсет PROFI-HDDBOOT
http://savepic.org/3565881.png
Мелкий баг - в VMZ-модели Кворума не хватает девайса кемпстон-джойстика. Из-за этого в оболочке RUNIC мельтешит курсор - http://dl.dropboxusercontent.com/u/20289147/RUNIC03.QDI
И еще баг в эмуляции "Кворума" в обработке NMI:
1. Стартуем без дискеты. В начальном меню (на черном фоне) выбираем Basic 48
2. В меню бейсика-48 выбираем Restart
3. Жмем NMI
...и ничего не происходит.
На реале происходит возврат в меню бейсика-48.
В MemoryQuorum256.cs есть такой код
protected virtual void BusNmiRq(BusCancelArgs e)
{
e.Cancel = (m_cpu.regs.PC&0xC000) == 0;
}
если его закомментировать, то меню по NMI появляется. Однако вернутся назад в бейсик из него не выходит - всё виснет.
[bETA]mEN
31.05.2013, 00:58
MagOS почему то не видит мыши. В других программах в скорпионе таких проблем нет.
http://i.imgur.com/tQtynyf.png
В MemoryQuorum256.cs есть такой код
protected virtual void BusNmiRq(BusCancelArgs e)
{
e.Cancel = (m_cpu.regs.PC&0xC000) == 0;
}
если его закомментировать, то меню по NMI появляется. Однако вернутся назад в бейсик из него не выходит - всё виснет.
информации как обрабатывается NMI на кворуме у меня нет. Указанная проверка разрешает NMI только при выполнении кода в озу. С ней все вроде корректно работает. Если точно на риале в 48 бейсике NMI срабатывает, то нужно узнать что в нем происходит одновременно с подачей сигнала NMI на процессор
---------- Post added at 01:58 ---------- Previous post was at 01:24 ----------
mEN;605806']MagOS почему то не видит мыши. В других программах в скорпионе таких проблем нет.
перед загрузкой MagOS мышку захвати (двойной клик по окну) и покрути, чтобы у мыши не нулевые значения получились. Просто дефолтные нули магос воспринимает как отсутствие мыши :)
Наличие мыши он проверяет в момент перед появлением надписи "system istalled press any key"
Если точно на риале в 48 бейсике NMI срабатывает, то нужно узнать что в нем происходит одновременно с подачей сигнала NMI на процессор
Точно срабатывает.
Вот тут (http://atmturbo.nedopc.com/atmemul.htm#kv_emul) лежит самый первый эмулятор Кворума, он правильно работает. В современном Unreal по NMI лишь зависание, меню не появляется.
Точно срабатывает.
Вот тут (http://atmturbo.nedopc.com/atmemul.htm#kv_emul) лежит самый первый эмулятор Кворума, он правильно работает. В современном Unreal по NMI лишь зависание, меню не появляется.
к сожалению в отладчике этого эмулятора не отображаются значения портов и номера страниц, поэтому понять что происходит при нажатии алт+ф11 сложно
к сожалению в отладчике этого эмулятора не отображаются значения портов и номера страниц, поэтому понять что происходит при нажатии алт+ф11 сложно
Сравнил содержимое регистров при PC=0x0066 и PC=0x0072, то есть на момент входа в обработчик NMI и на момент выхода. Unreal восстанавливает всё, а в ZXMAK2 содержимое регистра I испорчено. Покопаю в этом направлении на выходных.
Сравнил содержимое регистров при PC=0x0066 и PC=0x0072, то есть на момент входа в обработчик NMI и на момент выхода. Unreal восстанавливает всё, а в ZXMAK2 содержимое регистра I испорчено. Покопаю в этом направлении на выходных.
там возможно с дешифрацией порта #7FFD что-то неправильно, при переходе в бейсик в ZXMAK2 0-я страница, а в unreal20quorum 7-я, видимо где-то запись в #7FFD не проходит
там возможно с дешифрацией порта #7FFD что-то неправильно, при переходе в бейсик в ZXMAK2 0-я страница, а в unreal20quorum 7-я, видимо где-то запись в #7FFD не проходит
Там глубже, там идет хитрая проверка (с #02FD в сервисной странице ПЗУ): пишется число в #0000, а потом читается из #C000, если не совпало - идет переход еще на какую-то логику. Подразумевается, что в этот момент в качестве теневого ОЗУ подключена 0-я страница, и она же впечатана в окно с #C000.
Я добился такого же поведения (грубо - MapWrite0000 = RamPages[ramPage0000]; безо всяких условий), но оно все равно виснет, хотя теперь выходит из обработчика NMI с верными регистрами и страницами.
Там глубже, там идет хитрая проверка (с #02FD в сервисной странице ПЗУ): пишется число в #0000, а потом читается из #C000, если не совпало - идет переход еще на какую-то логику. Подразумевается, что в этот момент в качестве теневого ОЗУ подключена 0-я страница, и она же впечатана в окно с #C000.
Я добился такого же поведения (грубо - MapWrite0000 = RamPages[ramPage0000]; безо всяких условий), но оно все равно виснет, хотя теперь выходит из обработчика NMI с верными регистрами и страницами.
тут проблема в том что при выполнении меню Restart между двумя точками pc=#02F8 и pc=#004e в унриале в порту 7ffd оказывается #17, а в ZXMAK #10. Вначале подумал блокировка не дает записать значение в #7FFD, проверил - в ZXMAK2 в этот промежуток вообще нет обращений к порту #7FFD...
Кстати если поставить брейкпоинт на #0000, после выполнения меню Restart вывалившись на точке останова прописать в CMR0 значение #17, вместо #10 (окно Memory Map), то в ZXMAK2 NMI работает нормально - возвращается без проблем, как и в унрилкворуме. Т.е. проблема с портом #7FFD.
Теперь нужно отловить, где между точками pc=#02F8 и pc=#004e происходит запись значения #17 в порт #7ffd
---------- Post added at 22:40 ---------- Previous post was at 22:25 ----------
Там глубже, там идет хитрая проверка (с #02FD в сервисной странице ПЗУ): пишется число в #0000, а потом читается из #C000, если не совпало - идет переход еще на какую-то логику. Подразумевается, что в этот момент в качестве теневого ОЗУ подключена 0-я страница, и она же впечатана в окно с #C000.
не, тут все хитрее - в этот момент подключено обычное пзу, а в окно #C000 замаплена нулевая страница, но в унрилкворуме при записи в нулевую ячейку, запись происходит в 0-ю страницу, а в пзу значение остается страрым...
Странное поведение, почему при записи в пзу происходит запись в нулевую страницу? :v2_conf2:
предположил что запись в 0-ю страницу при выключенном бите blkwr работает всегда, попробовал так:
MapWrite0000 = !blkwr ? RamPages[ramPage0000] : m_trashPage;
в этом случае при Restart бейсик запускается с 7 страницей, но при выходе из из NMI зависает...
Странное поведение, почему при записи в пзу происходит запись в нулевую страницу? :v2_conf2:
Смущает почему именно в нулевую или почему запись проходит? Если второе, то это нормально, теневое озу в кворуме так и работает, писать туда можно даже если счас ПЗУ замаплено.
это нормально, теневое озу в кворуме так и работает, писать туда можно даже если счас ПЗУ замаплено.
хм, тогда правильно так:
MapWrite0000 = !blkwr ? RamPages[ramPage0000] : m_trashPage;
и действительно - вход в бейсик так получается с правильными страницами, но выход из NMI всеравно не работает
а описание хардварной части кворума где-то можно найти?
---------- Post added at 23:40 ---------- Previous post was at 23:00 ----------
На данный момент удалось заставить возвращаться из NMI, вот такой доработкой:
protected virtual void BusNmiRq(BusCancelArgs e)
{
e.Cancel = (m_cpu.regs.PC&0xC000) == 0 &&
m_cpu.regs.PC!=0x0038;
}
плюс вышеупомянутая доработка UpdateMapping, для разрешения записи в кэш при замапленом пзу:
MapWrite0000 = !blkwr ? RamPages[ramPage0000] : m_trashPage;
правда есть большие сомнения насчет проверки pc на 0x0038 в аппаратной реализации :)
[bETA]mEN
01.06.2013, 03:29
перед загрузкой MagOS мышку захвати (двойной клик по окну) и покрути, чтобы у мыши не нулевые значения получились. Просто дефолтные нули магос воспринимает как отсутствие мыши :)
Наличие мыши он проверяет в момент перед появлением надписи "system istalled press any key"
А может более логичным было бы сделать так, что бы при старте эмулятора в #FBDF и #FFDF были различные значения?
В модели QOURUM оказалось было еще пара ошибок маппинга страниц пзу, исправил.
Проблему с NMI это не решило, как выяснилось после выхода не включаются прерывания. Более того, как выяснилось, выход в унриалкворум работает только если NMI сработал вначале кадра. Т.е. если по шагам нащелкать N-ое число тактов, подальше от 0, а затем нажать альт-ф11, то будет та-же самая проблема - прерывания при выходе запрещены.
Проанализировав как это сейчас работает, я пришел к выводу что работает это только из расчета что NMI будет формироваться когда активны INT и M1, т.е. когда началось выполнение обработчика прерывания - обработчик при выходе разрешит их.
Собственно эту модель NMI и реализовал. Т.е. теперь NMI срабатывает когда активны INT и M1. Теперь выход из NMI в кворуме работает также как в унриалкворум и даже надежнее - NMI можно вызывать на любом такте кадра :)
---------- Post added at 02:59 ---------- Previous post was at 02:57 ----------
mEN;606128']А может более логичным было бы сделать так, что бы при старте эмулятора в #FBDF и #FFDF были различные значения?
Готово
---------- Post added at 03:16 ---------- Previous post was at 02:59 ----------
Обновил эмулятор до версии 2751 (https://zxmak2.codeplex.com/releases/view/107379):
- исправлен менеджер памяти QUORUM
- исправлена логика обработки NMI у QUORUM
- при запуске устанавливается начальное положение мыши отличное от нуля
http://savepic.org/3562669.png
Собственно эту модель NMI и реализовал. Т.е. теперь NMI срабатывает когда активны INT и M1. Теперь выход из NMI в кворуме работает также как в унриалкворум и даже надежнее - NMI можно вызывать на любом такте кадра :)
Офигенно! Спасибо!
На реале, правда, к INT привязки нет:
https://dl.dropboxusercontent.com/u/4166599/zx/quorum-nmi1.png
К M1 есть:
https://dl.dropboxusercontent.com/u/4166599/zx/quorum-nmi2.png
Схема получения NMI (K.NMI и K.RES - сигналы с клавиатуры):
https://dl.dropboxusercontent.com/u/4166599/zx/quorum-nmi3.png
PS Возможно, используемое в эмуляторе ПЗУ 4.2 1997го года ставилось на какие-нибудь доработанные версии. Я попробую считать свою прошивку 3.5 94го и сравнить.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot