PDA

Просмотр полной версии : Некоторые вопросы по внутренностям C64



Mick
09.08.2014, 17:07
Вобщем, многие наверное знают, что BYTEMAN и Prusak задумали и по слухам даже воплощают в жизнь свой SIDBlaster.
Так вот мне стало так сказать интересно и любопытство меня одолевает не подетски :)
А посему есть пару вопросов.
1. В коммодорке стоит проц MOS6510. У него так сказать есть внутренний порт, отображенный так сказать на память. Но есть одно но, он не так сильно распространен и стоимость его нельзя сказать из доступных.
Зато сейчас навалом всяких 65С02. По сути оно как бы то же самое, только без внутреннего порта. В принципе, этот порт можно как бы и эмулировать в ПЛИС или тупо перехватывать обращение к памяти по определенным адресам. Вроде как сложного в этом нет. Вот только нет ли каких недокументированных команд в 6510, которые могут быть камнем предкновения в случае допустим замены 6510 на 65С02.

2.В работе с SID музыкой насколько полно юзается 6526, точнее сказать как она там юзается. Это вопрос больше на тему эмуляции 6526 в ПЛИС, т.е. что можно выкинуть допустим из 6526, чтобы можно было без проблем слушать SID музон.

BYTEMAN
09.08.2014, 17:57
Зато сейчас навалом всяких 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 будешь?

Mick
09.08.2014, 19:27
у 65C02 есть свои команды, которых в 6510 нет. Используют ли SID-треки недокументированные команды мне тоже доподлинно неизвестно, но когда я в симуляторе 6502 ставил 65С02, вроде как треки не падали. Встроенные в процессор регистры можно заэмулировать как внешние, думаю что с этим проблемы особой не будет.


То что у 65С02 есть свои команды, это не страшно, главное чтобы не было у 6510 своих чудных, не воспринимаемых 65С02.
В принципе у меня есть пару 6510. Я могу попробовать и на них. Но так сказать это считай вопрос на будущее :)



думаю что можно выкинуть внешние порты и оставить только куски, ответственные за прерывания.

Вот это я и спрашивал.



про процессор думаю если тот же наш бластер пересаживать на ПЛИС (что мы давно хотели сделать, но знаний наших на это совсем не хватало, ни я ни Сергей не знаем про плисы ровным счётом ничего), то процессор и весь его обвяз можно закинуть в плисину, благо софткорки для проца и 6526, да даже вроде как VIC точно существуют.

Конечно все запихнуть в ПЛИС это конечно круто. Но я хотя бы за реальный проц, по типу GS. Так сказать карта душевнее выглядит.
6526 однозначно пихать в ПЛИС, потому как их две, да и с урезанными возможностями.


offtop: Mick, на CC будешь?

offtop: Вообще планирую, но только на субботу. Но как говорится, по обстоятельствам будет видно - поеду или нет.

BYTEMAN
09.08.2014, 21:58
В принципе у меня есть пару 6510. Я могу попробовать и на них. Но так сказать это считай вопрос на будущее
ну вроде как 6510 впринципе не дефицит, буржуи торгуют, так что думаю что замена на 65С02 пока что не сильно актуальна. Но в рамках эксперимента можно и попробовать, всего-то придётся треков 100 переслушать типовых :)


Конечно все запихнуть в ПЛИС это конечно круто. Но я хотя бы за реальный проц, по типу GS. Так сказать карта душевнее выглядит.
6526 однозначно пихать в ПЛИС, потому как их две, да и с урезанными возможностями.
угу, согласен.

offtop: Вообще планирую, но только на субботу. Но как говорится, по обстоятельствам будет видно - поеду или нет.
если удастся пересечься там вживую, можно будет обстоятельнее побеседовать :)

Mick
09.08.2014, 22:23
ну вроде как 6510 впринципе не дефицит, буржуи торгуют, так что думаю что замена на 65С02 пока что не сильно актуальна. Но в рамках эксперимента можно и попробовать, всего-то придётся треков 100 переслушать типовых :)


Ну да, в принципе согласен.

Кстати, а сорцы 6526 на VHDL где можно надыбать?

BYTEMAN
09.08.2014, 22:32
Надо смотреть проекты по реализации с64 на плисах... Я ещё поисками не занимался.

Mick
09.08.2014, 22:34
Надо смотреть проекты по реализации с64 на плисах... Я ещё поисками не занимался.

А сорцы плеера для SID, хоть понять как 6526 настраивают?
У меня есть CPLD EPM7512AE в 144 ногом корпусе. Вот думаю смогет она пару урезанных таймеров осилить.

BYTEMAN
11.08.2014, 02:35
А сорцы плеера для SID, хоть понять как 6526 настраивают?

после ЦЦ всё выложим. Сейчас там ещё много нерешённых проблем в карточке. Чтобы долго не ждать, можешь пока что исходники родного kernal от С64 посмотреть, я всё по аналогии делаю с небольшой поправкой на другое окружение.

Mick
11.08.2014, 12:22
Так на вскидку поглядел пару файлов PSID с CIA. Так там в одном случае таймер настраивается на 100Гц прерывания и больше не трогается, а во втором случае простая оцифровка, таймер настраивается на 8000Гц. Это насколько я понял

В кернеле вроде таймер настраивается на частоту прерывания 50Гц. (в зависимости от кварца.)

Тоесть по сути получается обычный делитель входной частоты процессора. А вроде ты говорил про синхронизацию с частотой кадров или скважностью?

А понял, что ты имел в виду. Если настроить таймер B на счет от срабатывания от таймера А, по сути как бы просто продолжение счета, то получится можно задать скважность импульса.
Тогда получается параллельный порт, последовательный и TOD в принципе можно выкинуть.

BYTEMAN
11.08.2014, 13:54
Mick, там CIA довольно редко используется. Без CIA у нас очень много треков играло очень хорошо, даже многие RSID играли как следует, но оцифровок не было (в том же 2ND Reality вроде, или в Desert Dream, не помню точно в каком из них, просто не было оцифрованных звуков, мелодия шла без проблем). Смотреть надо в сторону прерываний от VIC, что собсно мы и сделали на рассыпухе. Основная часть схемы - это именно виковские прерывания и диспетчер памяти.

Mick
11.08.2014, 15:01
Смотреть надо в сторону прерываний от VIC, что собсно мы и сделали на рассыпухе. Основная часть схемы - это именно виковские прерывания и диспетчер памяти.

Да но прерывания от VIC задаются в какой линии растра они будут возникать. Если задать их один раз, то они будут возникать только в одной линии, тобишь как бы привязка к кадровому импульсу. Да, но никто не мешает задавать другие линии растра по пришествию прерывания.
Иными словами если задать прерывание допустим на 255 линии, то будет частота 50Гц, а если допустим сделать сначала в 127 линии, а затем изменить на 255, то частота прерываний как бы будет уже 100Гц.

Получается, что в реальности линией IRQ 6510 управляют два таймера.
Один от VIC - от линий растра, второй от 6526 - делением входной частоты.
В первом случае мы получаем синхронизацию с видео типа для дем.
А во втором, если не надо сихронизироваться с видео.

Ну и третьей возможностью это является еще и NMI.

Итого имеем четыре 16 разрядных счетчика (таймеры А и B) 6526
и один 8 разрадный счетчик линий растра. Причем у последнего
полный период должен быть равен 50 Гц

Хотя я сомневаюсь, что таймер B в 6526 используется для работы с SID.

На счет оцифровки по CIA - посмотри файл - Aefro.sid

BYTEMAN
11.08.2014, 15:09
многие плееры переставляют прерывание ВИКа в процессе работы. 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, не исключено что он тоже может юзаться.

Mick
11.08.2014, 15:32
Ещё у 6526 есть TOD, не исключено что он тоже может юзаться.

TOD это же клоки на часы. Но они вроде как фиксированы 50/60Гц.
Да и прерывание от них вроде когда будильник сработает. Так что я думаю вряд ли резонно музон по будильнику играть, когда есть таймер А и B, которые гибко позволяют настроить частоту следования прерываний.

BYTEMAN
11.08.2014, 15:35
Да и прерывание от них вроде когда будильник сработает. Так что я думаю вряд ли резонно музон по будильнику играть, когда есть таймер А и B, которые гибко позволяют настроить частоту следования прерываний.

всякий изврат мог быть. в реальном С64 TOD вообще от сети тактировался...

Mick
11.08.2014, 15:43
всякий изврат мог быть. в реальном С64 TOD вообще от сети тактировался...

Ну уж я думаю не стоит снисходить до извартов. :)

BYTEMAN
11.08.2014, 15:45
Ну уж я думаю не стоит снисходить до извартов.
мы у себя в карточке на всякий случай завели генерацию 50/60Гц на TOD обоих 6526.

---------- Post added at 14:45 ---------- Previous post was at 14:45 ----------


Причем у последнего
полный период должен быть равен 50 Гц
60Гц для NTSC. Много треков его требуют.

Mick
11.08.2014, 15:58
60Гц для NTSC. Много треков его требуют.

Ну насколько я понял, там частота кадров зависит от кварца. PAL (50 Гц)
и NTSC (60 Гц). Это уже фигня, переключать входную частоту.

---------- Post added at 15:58 ---------- Previous post was at 15:55 ----------


мы у себя в карточке на всякий случай завели генерацию 50/60Гц на TOD обоих 6526.


Не я настолько изварщаться не хочу. Я полагаю у вас же входы CNT не задействованы на 6526. А то ведь можно изваратится и подать на разъем какую нибудь другую опороную частоту. И все играть модуль уже не будет :)

Да и если найдется какой нибудь уродский модуль с TOD, его проще на таймер переложить, чем заморачиваться с эмуляцией часов.

BYTEMAN
11.08.2014, 17:31
Частота кадров не столько от кварца зависит, сколько от VIC'а (хотя кварц там тоже другой). У этих виков разное количество строк в кадре. Отсюда и разная частота. Мы с прусаком это кстати учли, у нас кол-во строк можно плавно изменять, частоту следования строк тоже. Благодаря этому мы можем очень плавно варьировать скорость воспроизведения трека. Единственное что мы не смогли сделать - это плавно менять частоту проца, т.к. ВИ53 на момент программирования самой себя убирает частоту на выходе. В итоге карта повисает.

Mick
11.08.2014, 18:20
Частота кадров не столько от кварца зависит, сколько от VIC'а (хотя кварц там тоже другой). У этих виков разное количество строк в кадре. Отсюда и разная частота.

Но как бы регистр строк то 8 битный - тоесть максимальное число строк 256, в пределах которых можно задавать прерывания.

BYTEMAN
11.08.2014, 18:43
Приеду домой посмотрю схему. Там 8 бит никак не может быть, ибо строк там 625/2 для пала...

Blade
11.08.2014, 19:20
9 бит там

Mick
11.08.2014, 19:34
Приеду домой посмотрю схему. Там 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 битный счетчик кадров а не линий прерываний.

BYTEMAN
11.08.2014, 19:34
Да, у меня вроде как были такие же расчёты) только это было в 2010м году, и по памяти не вспомню, всё дома лежит, а я ещё не приехал)

Blade
11.08.2014, 19:36
$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)

Mick
11.08.2014, 19:43
Blade, а разъяснить непонятливым?

В смысле Bit 7: MSB of Raster Compare Register ($d012) идет как за девятый бит?

Blade
11.08.2014, 19:45
Да.

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.).

Mick
11.08.2014, 21:44
Тогда понятно.
Получается, что в принципе все линии кадрового счетчика можно использовать для прерываний.

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 в процессе инициализации частоты, записывает в конфигурационный регистр коэфициент деления(сравнения).