Да, SAA в ветке TSL работает - не хватает только бегунка громкости.
Да, SAA в ветке TSL работает - не хватает только бегунка громкости.
ZX-Evo Rev. C4 (Double-config) / VDAC2 / NeoGS / ZX-Multisound / NemoIDE / ZiFi
Scorpion ZS 256 Turbo+ (Light) / GMX / ZXM-GS / TSFM / SMUC / ZXKM / Gotek
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Скачал тестовую версию эмуля с поддержкой 128К-ROM для ATM-1 по ссылке, данной в другой ветке обсуждения. Не пашет. При попытке выбрать вторую половинку ПЗУ через "честный" OUT значения %00000100 в порт #FDFD (а точнее, вывод в бейсике OUT 65021,4) получаем зависание эмуля (именно эмуля, а не эмулируемого компа - т.е. даже флэш курсора мерцать перестает), а при попытке ресета - выброс в винду с ошибкой.
Для проверок работоспособности кидаю 128Кб-прошивку для АТМ-1, изготовленную исключительно для опытов для определения работоспособности расширенного ПЗУ (т.е. ничего нового там пока нет).
atm1_27010.zip
Что она из себя представляет и как с ней работать:
Нижние 64Кб - это стандартная прошивка с BIOS 1.041R (которую я выкладывал на днях), а верхние это палалледбно наложенные по аналогии с нижними страницами - вместо странички с CP/M - место забито FF, бейсики 48 и 128 аналогично параллельно стоят на своих местах. А вот TR-DOS иное - если в нижних страницах стоит стандартная для прошивок АТМ-1 версия 5.03, то в верхних страницах я поставил версию 5.04.
А так можно проверить рабочесть 128К ПЗУ через эту прошивку:
Из стартового меню с картой (даже при нынешнем глюке в эмуле по ресету в него выходим без проблем) выходим в бейсик-48 (хотя можно и в бейсик-128, просто так проще). Блокировка порта #7FFD при этом неважна - порт #FDFD при любом раскладе должен функционировать.
А далее в бейсике можем выбрать любую половинку ПЗУ:
OUT 65021,0 - нижняя (стандартная) половинка ПЗУ
OUT 65021,4 - верхняя половинка ПЗУ
При этом после выбора каждой половинки делаем USR 0 и заходим в TR-DOS через USR 15616.
Если все работает правильно, то после OUT 65021,0 мы должны попасть в TR-DOS v5.03, а после OUT 65021,4 - в TR-DOS v5.04
Вот такие дела. Жду результатов!![]()
Максагор, NedoPC group
ПК ATM-turbo 2+ 1024Kb RAM, 1,7Gb HDD, CD-ROM, Turbo FM, GS-512
[ZX rulezzz 4reva!!!]
http://atmturbo.nedopc.com
http://vk.com/atmturbo
http://maksagor.livejournal.com
http://moskprf.ru
[СССР][Коммунизм][КПРФ] ну [ZX], естественно...
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
Да, эту багу мы заметили на днях. Какой-то регрешн из свежих. Пофиксается.
Пофиксалось.
Фигово пофиксалось. ну да , тактов 12 ты подвинул. но из 10 раз запуска одного и того же файла, 3-5 раз точно на такт туда сюда гуляет. и не на одном таком файле.
Все познается в сравнении. со снапшотами - так и не работают, не все, но некоторые - точно.. (если что - я их просто драгдропаю на эмуль). ну еще нашел. Там просто не хватает тактов.
out(c),0 надеюсь по тактам то не изменился в меньшую сторону?
Profi v3.2 -=- Speccy2010,r2
Регрешн пролез, когда добавилась поцикловая эмуляция ОЗУ. Делал это не я, потому сходу не асиливаю сказать, где сломалось. Квик-н-дирти хак не помог, но и не рассчитывалось особо.
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
На пентеве ОЗУ работает в циклах, частота которых 7МГц, следовательно в строке их 448. Циклы разделены между:
- цпу
- видео
- ТСУ (с видеоконтроллером никак не связан, отдельный девайс)
- ДМА.
Каждый девайс может обратиться к ОЗУ в порядке своей очереди. Например, ДМА имеет наименьший приоритет. Все было кое-как, пока к ДМА не прикрутили INT. Он приходит по окончанию транзакции, а следовательно в эмуляции необходимо учесть всю цепочку событий, иначе невозможно этот инт сгенерить вовремя.
Поэтому сейчас все девайсы, потенциально могущие запрашивать ОЗУ, обрабатываются после каждого машцикла цпу, в порядке приоритета. Например, цикл RM (чтение из ОЗУ, 3 такта, название условное). Если процессор работает на частоте большей, чем частота циклов ОЗУ, он тормозится. Его клок "растягивается" до момента, когда ОЗУ может выдать данные. В эмуле к счетчику тактов прибавляется некая константа, а счетчик выравнивается на некоторую фазу (напомню, что счетчик дробный: 3.5МГц до запятой, и 8 бит - после). К окончанию машцикла счетчик тактов содержит новою "отметку времени" в котором живет проц. Мы знаем, сколько циклов ОЗУ прошло за период машцикла. Если проц работает на 7МГц, он не тормозится, и в этом самом простом случае прошло 3 такта = 3 цикла ОЗУ, из которых проц отхавал 1. Т.е. осталось 2. После этого мы вызываем видео и смотрим, были ли за данный период машцикла обращения видеоконтроллера, если были, отнимаем их. Потом вызываем TSU, отнимаем его циклы (если есть свободные еще циклы); если ТСУ неактивен - лесом. И только тогда вызываем ДМА и отдаем ему все, что упало со стола. И вот тогда мы только сможем узнать, когда закончится транзакция ДМА и когда нам формировать прерывание.
Как несложно догадаться, вся это прелесть оформлена в виде FSM не первой простоты и быстродействия.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)