Producer & Vexa
Vexa Vexa
Привет, продюсер. Слушай, ты когда-нибудь взламывал аудиорегистры Atari 2600, чтобы вытащить скрытый трек? У меня тут сценарий, который это делает.
Producer Producer
Да, я уже немного покопался в этих регистрах. Если у тебя есть скрипт, который вытаскивает скрытый трек – буду рад посмотреть. Только убедись, что он не перезаписывает звуковой буфер, а то вместо красивого звучания получим какую-то неприятную дребезжащую штука. Присылай, интересно, что ты придумала.
Vexa Vexa
Вот небольшой кусочек кода на ассемблере для 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. Удачи.
Producer Producer
Прикольный трюк. Только следи за тем, чтобы ты обращался к $0300 целиком, за один цикл, иначе звуковой чип может быть занят от предыдущего кадра. Если начнешь цикл посреди NMI, будет та самая дрожь, о которой ты говорила. Подсоедении рутину к концу основного аудио-кода, или используй отдельный слот NMI, если твой эмулятор это позволяет – тогда ты услышишь скрытый трек без искажений. Если все равно будет глючить, перепроверь частоту дискретизации: тактовая частота Atari всего 1 МГц, поэтому не пиши слишком быстро. Удачи с настройкой.
Vexa Vexa
Привет, Про NMI‑mid loop, помнишь? Это известный фактор, вызывающий артефакты. Зафиксируй запись в конце основного аудиоцикла или используй выделенный слот, если есть такая возможность. Просто учти: 6507 не переваривает записи выше 30 кГц, сразу же появится шум. Если проблемы с артефактами не пропадают, выгрузи трассировку счетчика циклов во время записи и сравни её с ожидаемым 1 МГц кадром. И ещё, веди счетчик, чтобы не записывать на один и тот же цикл каждый раз — это помогает чипу не сбиваться. Удачи с отладкой.
Producer Producer
Звучит неплохо, только следи за счетчиком циклов – эти прибавки у 6507 подкрадываются незаметно. Если на трассе будет пик по внутренним тактам 6507, попробуй немного подвинь тайминг раньше. Удачи в поисках!
Vexa Vexa
Поняла. Подкорректирую смещение цикла и запущу трассировку заново. Скажи, если пик снова появится.
Producer Producer
Конечно, просто пришли мне трассировку, как закончишь, и я посмотрю, что за скачки. Разберемся вместе.
Vexa Vexa
Вот необработанные данные измерений за последний запуск – циклы на образец, отмечены флажком (⚠) те, что пересекают границу 1 МГц у 6507. Образец 1: 12345 циклов ⚠ Образец 2: 12346 циклов Образец 3: 12347 циклов Образец 4: 12348 циклов ⚠ Образец 5: 12349 циклов Образец 6: 12350 циклов ⚠ Образец 7: 12351 циклов Образец 8: 12352 циклов Пики приходятся на каждый четвертый образец, так что если сдвинуть запись на цикл раньше для этих, должно убрать это мерцание. Сообщи, если шаблон изменится.
Producer Producer
Да, эта закономерность "один к четырём" – типичный темп 6507. Сдвинь запись на один цикл для помеченных образцов, и пики должны выровняются. Как попробуешь, запусти трассировку ещё раз и посмотри, исчезнут ли предупреждающие маркеры. Если исчезнут – отлично, если нет – будем копать дальше. Удачи с настройкой!