User Tag List

Страница 100 из 224 ПерваяПервая ... 96979899100101102103104 ... ПоследняяПоследняя
Показано с 991 по 1,000 из 2231

Тема: ZXMAK2 - Виртуальная машина ZX Spectrum

  1. #991

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Eltaron Посмотреть сообщение
    Точно срабатывает.
    Вот тут лежит самый первый эмулятор Кворума, он правильно работает. В современном Unreal по NMI лишь зависание, меню не появляется.
    к сожалению в отладчике этого эмулятора не отображаются значения портов и номера страниц, поэтому понять что происходит при нажатии алт+ф11 сложно
    Последний раз редактировалось ZXMAK; 31.05.2013 в 11:31.
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  2. #991
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #992

    Регистрация
    16.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    2,082
    Записей в дневнике
    11
    Спасибо Благодарностей отдано 
    173
    Спасибо Благодарностей получено 
    493
    Поблагодарили
    343 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    к сожалению в отладчике этого эмулятора не отображаются значения портов и номера страниц, поэтому понять что происходит при нажатии алт+ф11 сложно
    Сравнил содержимое регистров при PC=0x0066 и PC=0x0072, то есть на момент входа в обработчик NMI и на момент выхода. Unreal восстанавливает всё, а в ZXMAK2 содержимое регистра I испорчено. Покопаю в этом направлении на выходных.
    Граф Дракула наш кумир, патамушта он вомпир!
    VKINK 9 : BORDER NOT PI YTINK 9 Channel

  4. #993

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Eltaron Посмотреть сообщение
    Сравнил содержимое регистров при PC=0x0066 и PC=0x0072, то есть на момент входа в обработчик NMI и на момент выхода. Unreal восстанавливает всё, а в ZXMAK2 содержимое регистра I испорчено. Покопаю в этом направлении на выходных.
    там возможно с дешифрацией порта #7FFD что-то неправильно, при переходе в бейсик в ZXMAK2 0-я страница, а в unreal20quorum 7-я, видимо где-то запись в #7FFD не проходит
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  5. #994

    Регистрация
    16.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    2,082
    Записей в дневнике
    11
    Спасибо Благодарностей отдано 
    173
    Спасибо Благодарностей получено 
    493
    Поблагодарили
    343 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    там возможно с дешифрацией порта #7FFD что-то неправильно, при переходе в бейсик в ZXMAK2 0-я страница, а в unreal20quorum 7-я, видимо где-то запись в #7FFD не проходит
    Там глубже, там идет хитрая проверка (с #02FD в сервисной странице ПЗУ): пишется число в #0000, а потом читается из #C000, если не совпало - идет переход еще на какую-то логику. Подразумевается, что в этот момент в качестве теневого ОЗУ подключена 0-я страница, и она же впечатана в окно с #C000.

    Я добился такого же поведения (грубо - MapWrite0000 = RamPages[ramPage0000]; безо всяких условий), но оно все равно виснет, хотя теперь выходит из обработчика NMI с верными регистрами и страницами.
    Последний раз редактировалось Eltaron; 31.05.2013 в 22:09.
    Граф Дракула наш кумир, патамушта он вомпир!
    VKINK 9 : BORDER NOT PI YTINK 9 Channel

  6. #995

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Eltaron Посмотреть сообщение
    Там глубже, там идет хитрая проверка (с #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 ----------

    Цитата Сообщение от Eltaron Посмотреть сообщение
    Там глубже, там идет хитрая проверка (с #02FD в сервисной странице ПЗУ): пишется число в #0000, а потом читается из #C000, если не совпало - идет переход еще на какую-то логику. Подразумевается, что в этот момент в качестве теневого ОЗУ подключена 0-я страница, и она же впечатана в окно с #C000.
    не, тут все хитрее - в этот момент подключено обычное пзу, а в окно #C000 замаплена нулевая страница, но в унрилкворуме при записи в нулевую ячейку, запись происходит в 0-ю страницу, а в пзу значение остается страрым...
    Странное поведение, почему при записи в пзу происходит запись в нулевую страницу?

    предположил что запись в 0-ю страницу при выключенном бите blkwr работает всегда, попробовал так:
    Код:
                MapWrite0000 = !blkwr ? RamPages[ramPage0000] : m_trashPage;
    в этом случае при Restart бейсик запускается с 7 страницей, но при выходе из из NMI зависает...
    Последний раз редактировалось ZXMAK; 31.05.2013 в 23:47.
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  7. #996

    Регистрация
    16.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    2,082
    Записей в дневнике
    11
    Спасибо Благодарностей отдано 
    173
    Спасибо Благодарностей получено 
    493
    Поблагодарили
    343 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    Странное поведение, почему при записи в пзу происходит запись в нулевую страницу?
    Смущает почему именно в нулевую или почему запись проходит? Если второе, то это нормально, теневое озу в кворуме так и работает, писать туда можно даже если счас ПЗУ замаплено.
    Граф Дракула наш кумир, патамушта он вомпир!
    VKINK 9 : BORDER NOT PI YTINK 9 Channel

  8. #997

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Eltaron Посмотреть сообщение
    это нормально, теневое озу в кворуме так и работает, писать туда можно даже если счас ПЗУ замаплено.
    хм, тогда правильно так:
    Код:
                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 в аппаратной реализации
    Последний раз редактировалось ZXMAK; 01.06.2013 в 00:27.
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  9. #998

    Регистрация
    16.01.2005
    Адрес
    Moscow
    Сообщений
    800
    Спасибо Благодарностей отдано 
    437
    Спасибо Благодарностей получено 
    43
    Поблагодарили
    26 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    перед загрузкой MagOS мышку захвати (двойной клик по окну) и покрути, чтобы у мыши не нулевые значения получились. Просто дефолтные нули магос воспринимает как отсутствие мыши
    Наличие мыши он проверяет в момент перед появлением надписи "system istalled press any key"
    А может более логичным было бы сделать так, что бы при старте эмулятора в #FBDF и #FFDF были различные значения?
    IT FOUND A VOICE... NOW IT NEEDS A BODY

  10. #999

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В модели 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 ----------

    Цитата Сообщение от [bETA]mEN Посмотреть сообщение
    А может более логичным было бы сделать так, что бы при старте эмулятора в #FBDF и #FFDF были различные значения?
    Готово

    ---------- Post added at 03:16 ---------- Previous post was at 02:59 ----------

    Обновил эмулятор до версии 2751:
    - исправлен менеджер памяти QUORUM
    - исправлена логика обработки NMI у QUORUM
    - при запуске устанавливается начальное положение мыши отличное от нуля

    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  11. #1000

    Регистрация
    16.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    2,082
    Записей в дневнике
    11
    Спасибо Благодарностей отдано 
    173
    Спасибо Благодарностей получено 
    493
    Поблагодарили
    343 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    Собственно эту модель NMI и реализовал. Т.е. теперь NMI срабатывает когда активны INT и M1. Теперь выход из NMI в кворуме работает также как в унриалкворум и даже надежнее - NMI можно вызывать на любом такте кадра
    Офигенно! Спасибо!

    На реале, правда, к INT привязки нет:


    К M1 есть:


    Схема получения NMI (K.NMI и K.RES - сигналы с клавиатуры):


    PS Возможно, используемое в эмуляторе ПЗУ 4.2 1997го года ставилось на какие-нибудь доработанные версии. Я попробую считать свою прошивку 3.5 94го и сравнить.
    Последний раз редактировалось Eltaron; 01.06.2013 в 09:32.
    Граф Дракула наш кумир, патамушта он вомпир!
    VKINK 9 : BORDER NOT PI YTINK 9 Channel

Страница 100 из 224 ПерваяПервая ... 96979899100101102103104 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 2 (пользователей: 0 , гостей: 2)

Похожие темы

  1. Ответов: 7
    Последнее: 06.04.2012, 21:37
  2. Машина Тьюринга для Z80
    от ZXMAK в разделе Эмуляторы
    Ответов: 4
    Последнее: 15.08.2011, 03:26
  3. Продвинутая Мелко Машина 1
    от Black_Cat в разделе Зарубежные компьютеры
    Ответов: 74
    Последнее: 03.03.2009, 09:05
  4. Что за машина такая??? Commodore 128...
    от ILoveSpeccy в разделе Commodore 16/64/128
    Ответов: 5
    Последнее: 31.10.2007, 10:25
  5. Java-машина
    от Error404 в разделе Программирование
    Ответов: 2
    Последнее: 15.01.2007, 15:11

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •