Очень низкоуровневый эмулятор 6502 / NES
Автор |
Сообщение |
16 окт 2013, 08:54 |
|
|
org писал(а): мне казалось что восстановлением интерлейса занимается телеприемник Можно попробовать самому "склеить", но это лишняя трата ресурсов. У нас же монитор, а не телевизор. Логика PPU просто вырабатывает максимально совместимый сигнал. Телевизор, тоже не на весь экран картинку растягивает и видно, что она меньше. В детстве даже пытался посчитать, сколько символов по горизонтали (был у меня ZX Spectrum, сравнивал). Однозначно нужны все 50 полукадров, а при 25 анимация не плавная. (Заметил, что на разных по мощности компьютерах разное число глюков в кадрах, наверное, на менее мощном не все кадры отображаются.) Еще одна деталь, которая поставила меня в тупик. Эмуляцию некоторых инструкция CPU делал ассемблерным кодом и потом считывал состояние флагов реального процессора и сохранял в эмулятор. На разных процессорах игры вели себя по разному: в T2 не запускалась заставка с буквами, а вылезала титульная картинка, но на другом было все нормально. Потом я вычитал, что есть какая-то проблема с флагом переполнения и его не используют программы. Пришлось все команды опять пересчитывать честно. За отладочные регистры APU спасибо, не посмотрел логику откуда идут линии выбора этих регистров.
|
|
16 окт 2013, 10:35 |
|
Зарегистрирован: 14 ноя 2007, 11:19 Сообщения: 370
|
Сори что вливаюсь не особо читая, но не понял с Carry проблемы? где? на каком проце?
|
|
16 окт 2013, 10:44 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
Цитата: Можно попробовать самому "склеить", но это лишняя трата ресурсов. Если хотите честной эмуляции, то имитировать телевизор всё таки придется) По крайней мере я планирую делать именно так, потому что на выходе своего PPU буду получать сигнал. Цитата: Телевизор, тоже не на весь экран картинку растягивает и видно, что она меньше. Телевизор вообще делает с сигналом что захочет ) Главное чтобы частота сигнала соответствовала стандарту, а телевизор будет пытаться уместить отрезок сигнала на одну строку. Ну а дальше оффтоп)
|
|
16 окт 2013, 21:59 |
|
|
Восхищаюсь вашим упорством. Очень интересно следить за вашей работой. Спасибо.
|
|
18 окт 2013, 09:21 |
|
|
Wind писал(а): Сори что вливаюсь не особо читая, но не понял с Carry проблемы? где? на каком проце? Проблема с флагом переполнения а не переноса. Точную информацию найти не смог, по памяти скажу, что флаг процессор не использует, нужно переключать режим. Дальше писать не буду пока не найду источник этой информации. А все-таки интереснее выглядит картинка не 256 х 240, а 312 х 480 (интерлейс). Но нужно дублировать каждый пиксель в линии, иначе узкая получается. А со схемой выбора на строку отображаемых спрайтов еще не разбирались? А то на счетчиках и регистрах сдвига проще сделать вывод спрайтов, да и симуляция точнее выйдет.
|
|
18 окт 2013, 10:01 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
Цитата: Проблема с флагом переполнения а не переноса. Переполнение это если при арифметических действиях произошел перенос из 6го в 7й разряд. Цитата: А все-таки интереснее выглядит картинка не 256 х 240, а 312 х 480 Почему 312 ? У PPU 341 точка, но из них "видимых" (пикселей) только 256, остальное это служебные "пиксели", для формирования порции сигнала вертикальной синхронизации и color burst. Вот развертка NTSC сигнала : Со спрайтами ещё не разбирались, там хитрая схема sprite evaluation.
|
|
18 окт 2013, 10:29 |
|
Зарегистрирован: 14 ноя 2007, 11:19 Сообщения: 370
|
Так на каком проце-то такие сложности возникают?
|
|
19 окт 2013, 18:17 |
|
|
Виноват! Не 312, а 512. 256 пикселей, и каждый 2 раза. И это только, чтоб сохранить пропорцию изображения. Можно взять и 341, но не дублировать все видимые пиксели, а просто дополнить сканлайн до этого значения. Тогда полный кадр будет выглядеть как 341 х 480. Это явно уже, чем 512 х 480 (нарисовал 512 точек, а эмуляция проходит для 341-й)
|
|
19 окт 2013, 18:49 |
|
Зарегистрирован: 19 окт 2013, 18:46 Сообщения: 18 Откуда: Россия, г. Златоуст
|
Wind писал(а): Так на каком проце-то такие сложности возникают? Сложности возникли у меня, когда я пытался использовать флаги реального процессора, на котором выполнялся код эмулятора. Проблемы возникли с эмуляцией флага V процессора NES. Проблема в том, что виртуальный должен складывать и вычитать 8 разрядные числа, при чем без десятичной коррекции, а реальный работает с числами в 32 разряда + знаковые числа + десятичная коррекция. Так, вот и не знаешь, что он выдаст в ответе после сложения или вычитания. Короче не стал мучиться, и пересчитывал этот флаг отдельно. Хотя, я ему "говорил", чтоб складывал только Low части (младшие 8 бит) регистров. Если, это что-то даст, то все PC были на интеловских процессорах.
|
|
19 окт 2013, 18:54 |
|
|
что мешает сложить два signed char ?
|
|
19 окт 2013, 19:54 |
|
Зарегистрирован: 14 ноя 2007, 11:19 Сообщения: 370
|
Иван, ну вобще-то никаких проблем с флагами нет на x86 процах, просто нужно не забывать что где-то 80% комманд меняют и взводят флаги и в отличии к примеру от ARM запретить взведение флагов никак нельзя.
|
|
12 ноя 2013, 18:13 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
Накатал большой трактат по симуляции логических схем : http://wiki.breaknes.com/sim
|
|
15 ноя 2013, 01:36 |
|
Зарегистрирован: 06 апр 2008, 13:46 Сообщения: 119
|
Увлекательный проект. Пару дней изучал и читал взахлёб информацию по теме. Спасибо за труды
|
|
04 апр 2014, 05:55 |
|
Зарегистрирован: 28 дек 2012, 05:58 Сообщения: 19 Откуда: Курган
|
Сайт ещё вернётся или усё? ( --- Заработало, спасибо.
|
|
10 апр 2014, 08:21 |
|
Зарегистрирован: 10 апр 2014, 07:58 Сообщения: 4 Откуда: оттуда
|
Бета в природе существует?
_________________ Lord of Folly
|
|
10 апр 2014, 14:12 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
всё что сделано лежит на SVN : http://code.google.com/p/breaks
|
|
13 апр 2014, 08:40 |
|
Зарегистрирован: 10 апр 2014, 07:58 Сообщения: 4 Откуда: оттуда
|
_________________ Lord of Folly
|
|
07 июн 2014, 22:03 |
|
Зарегистрирован: 24 июл 2007, 06:54 Сообщения: 492 Откуда: Embedded
|
Org, ответь на ответ. Как устроен DMA? Дело в том, что есть DMA который загружает спрайты. А есть DPCM, который может использовать DMA. Вопрос в следующем: корка DMA общая или это 2 разных устройства? Ну и останавливается ли корка 6502 на время работы DMA. И касаемо спрайтового DMA: внешний сигнал R/W же общий, стало быть 2 цикла на 1 передаваемый байт, так? Где он храниться при этом внутри чипа?
PS Понимаю, что пора бы уже транзисторную схему разбирать, но я этим займусь несколько позже.
_________________ Tried so hard and got so far, but in the end, it doesn't even matter...
|
|
08 июн 2014, 02:28 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
Точно сказать пока не могу, я схему нарисовал, но толком не разбирал. Сейчас с frame counter парюсь) http://wiki.breaknes.com/apu:lfohttps://code.google.com/p/breaks/source ... U/LFO.circ
|
|
21 июн 2014, 08:45 |
|
Зарегистрирован: 19 окт 2013, 18:46 Сообщения: 18 Откуда: Россия, г. Златоуст
|
Что происходит с 6502, когда встречается "неверный" код операции? Как его обрабатывает логика, и сколько циклов тратит процессор на обработку? Разные коды будут вызывать разное поведение?
|
|
|
Кто сейчас на конференции |
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20 |
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения
|
|