Просмотр полной версии : Некоторые вопросы по внутренностям C64
Вобщем, многие наверное знают, что BYTEMAN и Prusak задумали и по слухам даже воплощают в жизнь свой SIDBlaster.
Так вот мне стало так сказать интересно и любопытство меня одолевает не подетски :)
А посему есть пару вопросов.
1. В коммодорке стоит проц MOS6510. У него так сказать есть внутренний порт, отображенный так сказать на память. Но есть одно но, он не так сильно распространен и стоимость его нельзя сказать из доступных.
Зато сейчас навалом всяких 65С02. По сути оно как бы то же самое, только без внутреннего порта. В принципе, этот порт можно как бы и эмулировать в ПЛИС или тупо перехватывать обращение к памяти по определенным адресам. Вроде как сложного в этом нет. Вот только нет ли каких недокументированных команд в 6510, которые могут быть камнем предкновения в случае допустим замены 6510 на 65С02.
2.В работе с SID музыкой насколько полно юзается 6526, точнее сказать как она там юзается. Это вопрос больше на тему эмуляции 6526 в ПЛИС, т.е. что можно выкинуть допустим из 6526, чтобы можно было без проблем слушать SID музон.
Зато сейчас навалом всяких 65С02. По сути оно как бы то же самое, только без внутреннего порта. В принципе, этот порт можно как бы и эмулировать в ПЛИС или тупо перехватывать обращение к памяти по определенным адресам. Вроде как сложного в этом нет. Вот только нет ли каких недокументированных команд в 6510, которые могут быть камнем предкновения в случае допустим замены 6510 на 65С02.
у 65C02 есть свои команды, которых в 6510 нет. Используют ли SID-треки недокументированные команды мне тоже доподлинно неизвестно, но когда я в симуляторе 6502 ставил 65С02, вроде как треки не падали. Встроенные в процессор регистры можно заэмулировать как внешние, думаю что с этим проблемы особой не будет.
2.В работе с SID музыкой насколько полно юзается 6526, точнее сказать как она там юзается. Это вопрос больше на тему эмуляции 6526 в ПЛИС, т.е. что можно выкинуть допустим из 6526, чтобы можно было без проблем слушать SID музон.
думаю что можно выкинуть внешние порты и оставить только куски, ответственные за прерывания.
---------- Post added at 16:56 ---------- Previous post was at 16:54 ----------
про процессор думаю если тот же наш бластер пересаживать на ПЛИС (что мы давно хотели сделать, но знаний наших на это совсем не хватало, ни я ни Сергей не знаем про плисы ровным счётом ничего), то процессор и весь его обвяз можно закинуть в плисину, благо софткорки для проца и 6526, да даже вроде как VIC точно существуют.
---------- Post added at 16:57 ---------- Previous post was at 16:56 ----------
offtop: Mick, на CC будешь?
у 65C02 есть свои команды, которых в 6510 нет. Используют ли SID-треки недокументированные команды мне тоже доподлинно неизвестно, но когда я в симуляторе 6502 ставил 65С02, вроде как треки не падали. Встроенные в процессор регистры можно заэмулировать как внешние, думаю что с этим проблемы особой не будет.
То что у 65С02 есть свои команды, это не страшно, главное чтобы не было у 6510 своих чудных, не воспринимаемых 65С02.
В принципе у меня есть пару 6510. Я могу попробовать и на них. Но так сказать это считай вопрос на будущее :)
думаю что можно выкинуть внешние порты и оставить только куски, ответственные за прерывания.
Вот это я и спрашивал.
про процессор думаю если тот же наш бластер пересаживать на ПЛИС (что мы давно хотели сделать, но знаний наших на это совсем не хватало, ни я ни Сергей не знаем про плисы ровным счётом ничего), то процессор и весь его обвяз можно закинуть в плисину, благо софткорки для проца и 6526, да даже вроде как VIC точно существуют.
Конечно все запихнуть в ПЛИС это конечно круто. Но я хотя бы за реальный проц, по типу GS. Так сказать карта душевнее выглядит.
6526 однозначно пихать в ПЛИС, потому как их две, да и с урезанными возможностями.
offtop: Mick, на CC будешь?
offtop: Вообще планирую, но только на субботу. Но как говорится, по обстоятельствам будет видно - поеду или нет.
В принципе у меня есть пару 6510. Я могу попробовать и на них. Но так сказать это считай вопрос на будущее
ну вроде как 6510 впринципе не дефицит, буржуи торгуют, так что думаю что замена на 65С02 пока что не сильно актуальна. Но в рамках эксперимента можно и попробовать, всего-то придётся треков 100 переслушать типовых :)
Конечно все запихнуть в ПЛИС это конечно круто. Но я хотя бы за реальный проц, по типу GS. Так сказать карта душевнее выглядит.
6526 однозначно пихать в ПЛИС, потому как их две, да и с урезанными возможностями.
угу, согласен.
offtop: Вообще планирую, но только на субботу. Но как говорится, по обстоятельствам будет видно - поеду или нет.
если удастся пересечься там вживую, можно будет обстоятельнее побеседовать :)
ну вроде как 6510 впринципе не дефицит, буржуи торгуют, так что думаю что замена на 65С02 пока что не сильно актуальна. Но в рамках эксперимента можно и попробовать, всего-то придётся треков 100 переслушать типовых :)
Ну да, в принципе согласен.
Кстати, а сорцы 6526 на VHDL где можно надыбать?
Надо смотреть проекты по реализации с64 на плисах... Я ещё поисками не занимался.
Надо смотреть проекты по реализации с64 на плисах... Я ещё поисками не занимался.
А сорцы плеера для SID, хоть понять как 6526 настраивают?
У меня есть CPLD EPM7512AE в 144 ногом корпусе. Вот думаю смогет она пару урезанных таймеров осилить.
А сорцы плеера для SID, хоть понять как 6526 настраивают?
после ЦЦ всё выложим. Сейчас там ещё много нерешённых проблем в карточке. Чтобы долго не ждать, можешь пока что исходники родного kernal от С64 посмотреть, я всё по аналогии делаю с небольшой поправкой на другое окружение.
Так на вскидку поглядел пару файлов PSID с CIA. Так там в одном случае таймер настраивается на 100Гц прерывания и больше не трогается, а во втором случае простая оцифровка, таймер настраивается на 8000Гц. Это насколько я понял
В кернеле вроде таймер настраивается на частоту прерывания 50Гц. (в зависимости от кварца.)
Тоесть по сути получается обычный делитель входной частоты процессора. А вроде ты говорил про синхронизацию с частотой кадров или скважностью?
А понял, что ты имел в виду. Если настроить таймер B на счет от срабатывания от таймера А, по сути как бы просто продолжение счета, то получится можно задать скважность импульса.
Тогда получается параллельный порт, последовательный и TOD в принципе можно выкинуть.
Mick, там CIA довольно редко используется. Без CIA у нас очень много треков играло очень хорошо, даже многие RSID играли как следует, но оцифровок не было (в том же 2ND Reality вроде, или в Desert Dream, не помню точно в каком из них, просто не было оцифрованных звуков, мелодия шла без проблем). Смотреть надо в сторону прерываний от VIC, что собсно мы и сделали на рассыпухе. Основная часть схемы - это именно виковские прерывания и диспетчер памяти.
Смотреть надо в сторону прерываний от VIC, что собсно мы и сделали на рассыпухе. Основная часть схемы - это именно виковские прерывания и диспетчер памяти.
Да но прерывания от VIC задаются в какой линии растра они будут возникать. Если задать их один раз, то они будут возникать только в одной линии, тобишь как бы привязка к кадровому импульсу. Да, но никто не мешает задавать другие линии растра по пришествию прерывания.
Иными словами если задать прерывание допустим на 255 линии, то будет частота 50Гц, а если допустим сделать сначала в 127 линии, а затем изменить на 255, то частота прерываний как бы будет уже 100Гц.
Получается, что в реальности линией IRQ 6510 управляют два таймера.
Один от VIC - от линий растра, второй от 6526 - делением входной частоты.
В первом случае мы получаем синхронизацию с видео типа для дем.
А во втором, если не надо сихронизироваться с видео.
Ну и третьей возможностью это является еще и NMI.
Итого имеем четыре 16 разрядных счетчика (таймеры А и B) 6526
и один 8 разрадный счетчик линий растра. Причем у последнего
полный период должен быть равен 50 Гц
Хотя я сомневаюсь, что таймер B в 6526 используется для работы с SID.
На счет оцифровки по CIA - посмотри файл - Aefro.sid
многие плееры переставляют прерывание ВИКа в процессе работы. Aefro кстати на карте работает))) Сейчас не играет BMX Kidz, ещё не разбирался где косяк...
Кстати небольшая выжимка из sid file header:
The default C64 environment is as follows:
VIC - IRQ set to raster 0, but not enabled.
CIA 1 timer A - set to 60Hz with the counter running and IRQs active.
Other timers - disabled and loaded with $FFFF.
Bank register - $37
Ещё у 6526 есть TOD, не исключено что он тоже может юзаться.
Ещё у 6526 есть TOD, не исключено что он тоже может юзаться.
TOD это же клоки на часы. Но они вроде как фиксированы 50/60Гц.
Да и прерывание от них вроде когда будильник сработает. Так что я думаю вряд ли резонно музон по будильнику играть, когда есть таймер А и B, которые гибко позволяют настроить частоту следования прерываний.
Да и прерывание от них вроде когда будильник сработает. Так что я думаю вряд ли резонно музон по будильнику играть, когда есть таймер А и B, которые гибко позволяют настроить частоту следования прерываний.
всякий изврат мог быть. в реальном С64 TOD вообще от сети тактировался...
всякий изврат мог быть. в реальном С64 TOD вообще от сети тактировался...
Ну уж я думаю не стоит снисходить до извартов. :)
Ну уж я думаю не стоит снисходить до извартов.
мы у себя в карточке на всякий случай завели генерацию 50/60Гц на TOD обоих 6526.
---------- Post added at 14:45 ---------- Previous post was at 14:45 ----------
Причем у последнего
полный период должен быть равен 50 Гц
60Гц для NTSC. Много треков его требуют.
60Гц для NTSC. Много треков его требуют.
Ну насколько я понял, там частота кадров зависит от кварца. PAL (50 Гц)
и NTSC (60 Гц). Это уже фигня, переключать входную частоту.
---------- Post added at 15:58 ---------- Previous post was at 15:55 ----------
мы у себя в карточке на всякий случай завели генерацию 50/60Гц на TOD обоих 6526.
Не я настолько изварщаться не хочу. Я полагаю у вас же входы CNT не задействованы на 6526. А то ведь можно изваратится и подать на разъем какую нибудь другую опороную частоту. И все играть модуль уже не будет :)
Да и если найдется какой нибудь уродский модуль с TOD, его проще на таймер переложить, чем заморачиваться с эмуляцией часов.
Частота кадров не столько от кварца зависит, сколько от VIC'а (хотя кварц там тоже другой). У этих виков разное количество строк в кадре. Отсюда и разная частота. Мы с прусаком это кстати учли, у нас кол-во строк можно плавно изменять, частоту следования строк тоже. Благодаря этому мы можем очень плавно варьировать скорость воспроизведения трека. Единственное что мы не смогли сделать - это плавно менять частоту проца, т.к. ВИ53 на момент программирования самой себя убирает частоту на выходе. В итоге карта повисает.
Частота кадров не столько от кварца зависит, сколько от VIC'а (хотя кварц там тоже другой). У этих виков разное количество строк в кадре. Отсюда и разная частота.
Но как бы регистр строк то 8 битный - тоесть максимальное число строк 256, в пределах которых можно задавать прерывания.
Приеду домой посмотрю схему. Там 8 бит никак не может быть, ибо строк там 625/2 для пала...
Приеду домой посмотрю схему. Там 8 бит никак не может быть, ибо строк там 625/2 для пала...
вот описание регистра VIC
$D012 (53266)
Read: Current raster line (bits #0-#7).
Write: Raster line to generate interrupt at (bits #0-#7).
На самом деле все намного проще
Ведь C64 расчитан как бы на две системы NTSC и PAL.
У каждого из них свой кварцевый резонатор, а также как строчная развертка, так и кадровая. Собственно из-за разности кварцевых резонаторов и частота процессора разная.
А теперь мои размышления
система NTSC
частота строк = 15750Гц
частота кадров = 60Гц
система PAL
частота строк = 15625Гц
частота кадров = 50Гц
Итак имеем кварцы
NTSC = 14,31818 МГц
PAL = 17,734472 МГц
Получаем для начала частоту строк
NTSC 14318180 / 909 = 15751 Гц
PAL 17734472 / 1135 = 15625 Гц
Вот после этого начинаются 256 строк для обоих случаев.
Кадровые счетчики при этом в конечном итоге имеют
NTSC 15751 / 262 = 60Гц
PAL 15625 / 312 = 50Гц
Где то так.
NTSC 256 линий прерываний + 6 линий до сброса
PAL 256 линий прерываний + 56 линий до сброса
---------- Post added at 19:34 ---------- Previous post was at 19:32 ----------
9 бит там
Это 9 битный счетчик кадров а не линий прерываний.
Да, у меня вроде как были такие же расчёты) только это было в 2010м году, и по памяти не вспомню, всё дома лежит, а я ещё не приехал)
$d011 : Control Register 1/ Vertical Fine Scrolling
Bits 0-2: Fine Scrolling Value Y-Axis (0-7)
Bit 3: # Text Display Rows (1=25 rows, 0=24 rows)
Bit 4: Blank entire screen to background color (0=blank)
Bit 5: Enable bitmap graphics mode
Bit 6: Enable extended color text mode
Bit 7: MSB of Raster Compare Register ($d012)
Blade, а разъяснить непонятливым?
В смысле Bit 7: MSB of Raster Compare Register ($d012) идет как за девятый бит?
Да.
Bit 7 in register $d011 (RST8) is bit 8 of register $d012. Together they
are called "RASTER" in the following. A write access to these bits sets
the comparison line for the raster interrupt (see section 3.12.).
Тогда понятно.
Получается, что в принципе все линии кадрового счетчика можно использовать для прерываний.
NTSC 262 линий прерываний
PAL 312 линий прерываний
---------- Post added at 21:44 ---------- Previous post was at 19:51 ----------
Кстати, тут подумал. Так как в SID карте видео ни к чему, то можно немного упростить. И получить необходимые 50 и 60Гц только от одной частоты 15750Гц
60Гц = 15750 / 262
50Гц = 15750 / 315
Как видно в режиме 50Гц будет не 312 линий а 315 линий. Это страшно для SIDа или нет?
Это один вариант.
Второй вариант, использовать загружаемый счетчик для получения строчки.
Тоесть 6510 в процессе инициализации частоты, записывает в конфигурационный регистр коэфициент деления(сравнения).
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot