Очень низкоуровневый эмулятор 6502 / NES
Автор |
Сообщение |
08 авг 2013, 14:48 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
HWM, нужна помощь в получении развертки тактовых сигналов 6502 : http://wiki.breaknes.com/6502:clock
|
|
08 авг 2013, 17:06 |
|
Зарегистрирован: 24 июл 2007, 06:54 Сообщения: 492 Откуда: Embedded
|
Все в норме, я считаю. А мультиплексор в данном включении сокращается на 1 элемент.
_________________ Tried so hard and got so far, but in the end, it doesn't even matter...
|
|
08 авг 2013, 17:12 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
спасибо, но почему-то во всех документациях написано, что нижний уровень PHI1/PHI2 немного длиннее верхнего, для того чтобы они гарантированно не были оба "1"
Вложения:
4672299.png [ 7.55 КБ | Просмотров: 12176 ]
|
|
11 авг 2013, 11:40 |
|
Зарегистрирован: 24 июл 2007, 06:54 Сообщения: 492 Откуда: Embedded
|
В общем, симуляция в протеусе тоже странная. Единственный выход - паять. Если очень интересно, могу сделать.
_________________ Tried so hard and got so far, but in the end, it doesn't even matter...
|
|
11 авг 2013, 21:19 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
Вот тут товарищи на транзисторном уровне проверили, но диаграммы я пока толком не смотрел. http://forum.6502.org/viewtopic.php?f=8&p=27750#p27750
|
|
12 авг 2013, 08:52 |
|
Зарегистрирован: 24 июл 2007, 06:54 Сообщения: 492 Откуда: Embedded
|
Аа, затягивание фронта из-за не симметричного каскада инвертора.
_________________ Tried so hard and got so far, but in the end, it doesn't even matter...
|
|
12 авг 2013, 09:26 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
То есть выходит что нарастание "растягивается", поэтому нижний уровень становится типа длиннее ?
|
|
12 авг 2013, 11:27 |
|
Зарегистрирован: 24 июл 2007, 06:54 Сообщения: 492 Откуда: Embedded
|
Типа того.
_________________ Tried so hard and got so far, but in the end, it doesn't even matter...
|
|
16 авг 2013, 15:15 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
Определился с внешним видом и функционалом отладчика и среды, в которой будет работать эмулятор. Приложение работает на базе Qt, создание проекта происходит в QtCreator. Qt стал действительно мощным и удобным тулкитом. Отладчик будет представлять собой окно, с загруженной туда картинкой транзисторной (или какой-либо ещё) схемой процессора и расположенными поверх неё виджетами. Минимальный набор - это кнопка "Next Step", которая вызывает функцию Step() этой микросхемы, для симуляции одного полутакта. Все контрольные линии, защелки и триггеры будут выглядеть в виде чекбоксов, которые можно щелкать, тем самым меняя значение с 0 на 1 и наоборот. Задний фон совместно с чекбоксами может масштабироваться и скроллиться мышкой для быстрого перемещения по схеме. Таким образом управляющие элементы топологически становятся привязанными к схеме, чтобы не запутаться. Вначале я хотел сделать это через HTML5 + Webkit, при этом задник рендерился бы как GIS-карта, но мне не удалось победить чекбоксы - они прыгали по всей схеме, при изменении размеров окна. Поэтому сделал по другому - в виде QGraphScene (загрузив туда jpg) + обычные QWidgets.
|
|
16 авг 2013, 20:11 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
Прилагаю исходники основной реализации. При желании можно переделать под свои цели.
|
|
19 авг 2013, 22:55 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
В отладчик добавлены новые элементы управления : "локаторы" и "коллекторы". Локаторы позволяют быстро перемещаться между блоками микросхемы, а коллекторы позволяют выводить и изменять сразу пачку битов (регистры, шины) посредством окошка ввода. Дублируемые галочки теперь изменяются одновременно. Также добавлена поддержка закладок, при этом в каждой закладке отображается своя микросхема. Подчищен код проекта и полностью переведён на Qt. Делаются попытки собрать статичную линковку Qt SDK, но пока безуспешные =) Исходники нового отладчика теперь на SVN : https://code.google.com/p/breaks/source ... /trunk/SRC
|
|
23 авг 2013, 14:09 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
Наконец-то получен ключевой механизм работы 6502, подробное описание тут : http://wiki.breaknes.com/6502:phi1
|
|
09 сен 2013, 22:31 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
Состряпал такую схемку - взаимодействие контекста 6502.
Вложения:
6502_context.jpg [ 167.76 КБ | Просмотров: 11793 ]
|
|
15 сен 2013, 15:12 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
Дедуля Хенсон и оригнальные блюпринты 6502. До сих пор жмет их. http://www.flickr.com/photos/textfiles/ ... 600581004/
|
|
25 сен 2013, 14:33 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
|
|
14 окт 2013, 08:03 |
|
|
Ребят! А сколько кадров выдает PPU PAL в секунду? 25 или 50? Я так понимаю, что всего 25 (50 полукадров). Тогда какое же разрешение у полного кадра, если его составить из двух полукадров? И сколько полукадров или кадров должен строить эмулятор в секунду. И происходит ли что-нибудь между четным и нечетным полукадром особенное. Или точно будем знать, когда полностью PPU разберем?
|
|
14 окт 2013, 12:17 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
PAL версия PPU выдает по 312 сканлайнов на каждый полукадр. Ширина строки - 341 точка. Итого получается 106392 точек, на частоте 26.601712 MHz ÷ 5, итого получается что частота полукадров (когда все точки показываются на экран) составляет 26601712 / 5 / 106392 = 50,007 Hz.
Кадров выходит примерно 25 в секунду.
|
|
14 окт 2013, 13:47 |
|
Зарегистрирован: 24 июл 2007, 06:54 Сообщения: 492 Откуда: Embedded
|
PPU не имеет интерлейс-режима, поэтому у него оба полукадра одинаковые. Так же, если оба полукадра имеют одинаковое количество строк, то телевизор "склеит" их вместе (речь идет именно о CRT телике, а не LCD). Поэтому, на самом деле, PPU у нас 240P @50FPS. Ибо программе позволено менять каждый кадр по VBlank.
_________________ Tried so hard and got so far, but in the end, it doesn't even matter...
|
|
15 окт 2013, 09:13 |
|
|
HardWareMan писал(а): PPU не имеет интерлейс-режима, поэтому у него оба полукадра одинаковые. Так же, если оба полукадра имеют одинаковое количество строк, то телевизор "склеит" их вместе (речь идет именно о CRT телике, а не LCD). Поэтому, на самом деле, PPU у нас 240P @50FPS. Ибо программе позволено менять каждый кадр по VBlank. Получается, что телевизор может склеить два разных по содержанию полукадра, но из-за высокой скорости, разницы в расположении объектов на соседних строчках мы не увидим. (полукадры в движении все разные, если эмулировать по 1 полукадру, то видна разница) Значит реальный продукт PPU - это 256х240 ~50 раз в секунду, а схема преобразует его в 341 точку х 312 линий х 2 полукадра, т.е. достраивает для совместимости с видеосигналом. Для просчета 50 кадров уходит много времени, по-этому решил просчитывать только каждый нечетный кадр. Получилось 25 кадров в секунду, но из-за отсутствия четных полукадров, игры начинают сбоить(не всегда), т.к. нет определения столкновений спрайтов с задним планом (не факт, может коряво написал). При полном просчете скорость не поднимается выше 15 FPS (поведение картинки меняется в лучшую сторону). Вот и спросил, сколько их просчитывать нужно. (не просчитывал строки только 0-240, остальные, как полагается). Иногда, при 50 полукадрах, наблюдал правильные четные, и неверно просчитанные нечетные (не на тех линиях были переключения банков графики, или кадр вообще был сдвинут.) вот и возник данный вопрос, что именно посылает во втором полукадре PPU. Буду капать в сторону циклов CPU. И еще, не совсем по моему вопросу. Увидел в схеме APU, что возможно считывание в адреса $4019. Он возвращает в D0-D3 текущее значение DAC треугольника, а в D4-D7 значение DAC канала шума. Запись в $401A:биты D0-D4 загружаются в DAC треугольника. И есть вопрос по схеме шумового канала - там делитель частоты или тоже сдвиговой регистр, как в генераторе RAND.
|
|
15 окт 2013, 12:14 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
мне казалось что восстановлением интерлейса занимается телеприемник -- 15 окт 2013, 11:29 -- Цитата: И еще, не совсем по моему вопросу. Увидел в схеме APU, что возможно считывание в адреса $4019. Он возвращает в D0-D3 текущее значение DAC треугольника, а в D4-D7 значение DAC канала шума. Запись в $401A:биты D0-D4 загружаются в DAC треугольника. И есть вопрос по схеме шумового канала - там делитель частоты или тоже сдвиговой регистр, как в генераторе RAND. $4019 итп это отладочные регистры, доступны если на ногу DBG подать +5 V. Обычно на NES/Famicom эта нога не запитана и регистры недоступны. В шумовом канале LFSR - регистр сдвига с обратной связью.
|
|
|
Кто сейчас на конференции |
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 51 |
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения
|
|