Producer & Vexa
Привет, продюсер. Слушай, ты когда-нибудь взламывал аудиорегистры Atari 2600, чтобы вытащить скрытый трек? У меня тут сценарий, который это делает.
Да, я уже немного покопался в этих регистрах. Если у тебя есть скрипт, который вытаскивает скрытый трек – буду рад посмотреть. Только убедись, что он не перезаписывает звуковой буфер, а то вместо красивого звучания получим какую-то неприятную дребезжащую штука. Присылай, интересно, что ты придумала.
Вот небольшой кусочек кода на ассемблере для Atari 2600, который считывает скрытый трек из звуковых регистров и выводит его, не затрагивая основной буфер.
ORG $1000
START: LDX #$00 ; Индекс в данные скрытого трека
LDY #$80 ; Длина трека в сэмплах
JSR PLAY_TRACK
PLAY_TRACK:
LDA TRACK,X ; Получаем сэмпл
STA $0300 ; Звуковой выходной регистр
INX
DEY
BNE PLAY_TRACK
RTS
TRACK: .BYTE $3F,$1C,$2A,$0E,$0B,$1F,$23,$0D ; Данные сэмпла, пример
.END
Пожалуйста, подключи это к рутине ввода твоего эмулятора, чтобы оно не конфликтовало с основным звуковым буфером. Если возникнет какой-нибудь странный "визжащий" звук, перепроверь тайминги записи в регистр $0300. Удачи.
Прикольный трюк. Только следи за тем, чтобы ты обращался к $0300 целиком, за один цикл, иначе звуковой чип может быть занят от предыдущего кадра. Если начнешь цикл посреди NMI, будет та самая дрожь, о которой ты говорила. Подсоедении рутину к концу основного аудио-кода, или используй отдельный слот NMI, если твой эмулятор это позволяет – тогда ты услышишь скрытый трек без искажений. Если все равно будет глючить, перепроверь частоту дискретизации: тактовая частота Atari всего 1 МГц, поэтому не пиши слишком быстро. Удачи с настройкой.
Привет,
Про NMI‑mid loop, помнишь? Это известный фактор, вызывающий артефакты. Зафиксируй запись в конце основного аудиоцикла или используй выделенный слот, если есть такая возможность. Просто учти: 6507 не переваривает записи выше 30 кГц, сразу же появится шум. Если проблемы с артефактами не пропадают, выгрузи трассировку счетчика циклов во время записи и сравни её с ожидаемым 1 МГц кадром. И ещё, веди счетчик, чтобы не записывать на один и тот же цикл каждый раз — это помогает чипу не сбиваться. Удачи с отладкой.
Звучит неплохо, только следи за счетчиком циклов – эти прибавки у 6507 подкрадываются незаметно. Если на трассе будет пик по внутренним тактам 6507, попробуй немного подвинь тайминг раньше. Удачи в поисках!
Поняла. Подкорректирую смещение цикла и запущу трассировку заново. Скажи, если пик снова появится.
Конечно, просто пришли мне трассировку, как закончишь, и я посмотрю, что за скачки. Разберемся вместе.
Вот необработанные данные измерений за последний запуск – циклы на образец, отмечены флажком (⚠) те, что пересекают границу 1 МГц у 6507.
Образец 1: 12345 циклов ⚠
Образец 2: 12346 циклов
Образец 3: 12347 циклов
Образец 4: 12348 циклов ⚠
Образец 5: 12349 циклов
Образец 6: 12350 циклов ⚠
Образец 7: 12351 циклов
Образец 8: 12352 циклов
Пики приходятся на каждый четвертый образец, так что если сдвинуть запись на цикл раньше для этих, должно убрать это мерцание. Сообщи, если шаблон изменится.
Да, эта закономерность "один к четырём" – типичный темп 6507. Сдвинь запись на один цикл для помеченных образцов, и пики должны выровняются. Как попробуешь, запусти трассировку ещё раз и посмотри, исчезнут ли предупреждающие маркеры. Если исчезнут – отлично, если нет – будем копать дальше. Удачи с настройкой!