Нас поправляют радиослушатели, точнее, нас поправляет Blade. Запись происходит всё же на последнем такте.
Думаем по шагам
out (c),b ; настроили чёрный бордер
out (#FE),a ; включили в самом конце команды другой цвет
out (c),b ; другой цвет держался ровно 12 тактов, как и положено для out (c),b
Если написать наоборот, будет
out (254),а ; настроили чёрный бордер
out (c),b ; включили в самом конце команды другой цвет
out (254),a ; другой цвет держался ровно 11 тактов, как и положено для out (254),a
Т.е. если бы я подумал чуть-чуть мозгом перед тем как писать самый первый пример кода, ничего бы этого не случилось. Так что, извиняйте :)
Цвет меняется не в конце команды ассемблера, а где-то внутри. Если лепить out (254),a: out (254),a: out (254),a… то от записи до записи, понятно 11 тактов. Если лепить out (c),b: out (c),b: out (c),b… то от записи до записи будет 12 тактов. А если команды чередовать, то будет от записи внутри одной команды, до записи внутри другой команды. Как показывают ваши тесты, для комбинации out (c),b: out (#FE),a: out (c),b выходит чёрточка в 12 тактов. Ну ок, тогда я написал чёрточку ниже out (#FE),a: out (c),b: out (#FE),a и получил другую длину.
azesmbog, ты забыл, что собственно запись в порт происходит совсем не обязательно на последнем такте команды. Тот пример, что я написал из головы, очевидно, записал ровно 12 тактов, хотя между 12-тактовыми командами сидела 11-тактовая.
Смотря что именно эмулирует твой эмулятор. Дело в том что на классических спектрумах (и скорпионах) цвет бордера выровнен до границ знакомест (именно поэтому мой бордерный формат хранит данные с точностью до знакомест). Чтобы увидеть 22 пикселя, тебе нужен не только правильный код, но ещё и пентагон, или пентагон-совместимый комп.
Я возмутился вот этому в первую очередь: «покажите мне на примере линию на бордюре в 22 пикселя \11 тактов». Показал. А потом было столько уточнений и поправок, что сам чёрт не разберёт уже.
Представь отрисовку кадра на экране. Есть собственно экран спектрума в центре (192 строки по 256 пикселов) и есть бордер, который шире, который тоже рисуется на телеэкране. Всего на кадре сформированном на пентагоне 320 строк. 64 из них рисуются до начала отрисовки экрана 256х192, потом рисуется экран, потом рисуются оставшиеся 48 строк.
Каждая строка пентагона рисуется за 224 такта процессора. У меня было написано: «Заметили, что батут в нижней трети? Значит у нас есть верхний бордер (64 строки на пентагоне), плюс две трети экрана на рисование (ещё 128 строк), т.о. у нас есть до начала отрисовки батута где-то (64+128)*224 = 43008 тактов.» Экран спектрума хранится в памяти кусками по 2кб, таких кусков три, поэтому многие эффекты, не только в этом демо, организованы так, чтобы воспользоваться такой организацией памяти. Поэтому идёт речь о третях экрана.
Ха, так даже ещё интереснее, потому что получается, тебе пришлось переоткрыть самостоятельно почти все магистральные направления в биперных движках 1980-х. Я прочёл больше кода из-за того, что в какой-то момент делал сборник своей любимой биперной музыки и мне пришлось разобраться в структуре движков, в основном для выдирания.
Скважность у тебя в Tritone я и так знал что оригинальная (хотя Savage содержит очень похожие идеи) — слишком ни на что не похож движок. Про ZX7 я наврал; я имел в виду конечно ZX10, просто нумерация у Дика безумная. Когда я выравнивал Octode, мне очень нужно было ускорить обработку каналов и я написал с десяток вариантов обновления 8-битных счётчиков. Представь себе моё удивление, когда я уже потом прочёл код ZX10 и понял, что он делает там совершенно то же самое, что оказалось в итоге сделано в Octode XL.
Shiru, ну как же, ты не можешь не знать что первый (одноголосный) движок Смита — из Пинг Понга (май 1986) — вызвал в своё время фурор, т.к. был первым движком с нетривиальным звуком ударных. Думаю, многие не понимали, что ударные прерывающие, так что речь шла о как бы двух каналах — ударных и соло. Идея контролировать биперный движок через прерывания — явно из Plip Plop (её нет ни в Wham, ни у Фоллина), т.е. Joffa наверняка писал свой код до двухканального движка (они называли это driver) Whittacker'а, который использован в Dizzy (1987 год).
Движки Follin'а мне, кстати, похожими не кажутся, т.к. Фоллин контролирует ширину иголок, а движки Смита/Уиттекера — честно меняют скважность. Если бы я должен был провести линии заимствования, я бы предположил что-то типа:
Plip Plop -> Dizzy / Special FX / Dark Fusion -> 4chan etc
Wham -> Savage -> Tritone
Follin -> ZX7 -> Octode
Когда я писал свой первый движок, я в основном опирался на движок из Wham, и внедрил в него нечто похожее на движок из Dizzy (движок Смита мне всегда казался переусложнённым, я не люблю его код и по сей день). Т.е. ветки, конечно, могут и пересекаться.
Спасибо за трекер! Если бы я был музыкантом, я бы мог, конечно, применить его по назначению, но даже просто как кодеру бипера, это реально очень круто — иметь трекер с такой гибкостью адаптации к новым движкам.
В АТМ Turbo на битах 5 и 7 висела защита и какой-то там бит состояния, то ли АЦП, то ли ЦАП, не помню. Но 3й бит адреса там как раз позволял переключать яркость на бордере.
Все 16 без ограничений на соседние цвета? Сомневаюсь.
А с ограничениями — это усложняет работу художника, я не очень люблю такие решения.
Ну и, давай будем до конца честными. То есть, ты признаешься вслух, для какого именно клона возможны все 16 цветов на бордере, а уж мы тебя тогда, как АТМщика, искренне тут распнём! :)))
Но это не одна из таких вещей.
Думаем по шагам
Если написать наоборот, будет
Т.е. если бы я подумал чуть-чуть мозгом перед тем как писать самый первый пример кода, ничего бы этого не случилось. Так что, извиняйте :)
www.dropbox.com/s/selbdtzr5b37n7h/out11.sna?dl=0
azesmbog, ты забыл, что собственно запись в порт происходит совсем не обязательно на последнем такте команды. Тот пример, что я написал из головы, очевидно, записал ровно 12 тактов, хотя между 12-тактовыми командами сидела 11-тактовая.
Я возмутился вот этому в первую очередь: «покажите мне на примере линию на бордюре в 22 пикселя \11 тактов». Показал. А потом было столько уточнений и поправок, что сам чёрт не разберёт уже.
Каждая строка пентагона рисуется за 224 такта процессора. У меня было написано: «Заметили, что батут в нижней трети? Значит у нас есть верхний бордер (64 строки на пентагоне), плюс две трети экрана на рисование (ещё 128 строк), т.о. у нас есть до начала отрисовки батута где-то (64+128)*224 = 43008 тактов.» Экран спектрума хранится в памяти кусками по 2кб, таких кусков три, поэтому многие эффекты, не только в этом демо, организованы так, чтобы воспользоваться такой организацией памяти. Поэтому идёт речь о третях экрана.
Скважность у тебя в Tritone я и так знал что оригинальная (хотя Savage содержит очень похожие идеи) — слишком ни на что не похож движок. Про ZX7 я наврал; я имел в виду конечно ZX10, просто нумерация у Дика безумная. Когда я выравнивал Octode, мне очень нужно было ускорить обработку каналов и я написал с десяток вариантов обновления 8-битных счётчиков. Представь себе моё удивление, когда я уже потом прочёл код ZX10 и понял, что он делает там совершенно то же самое, что оказалось в итоге сделано в Octode XL.
Движки Follin'а мне, кстати, похожими не кажутся, т.к. Фоллин контролирует ширину иголок, а движки Смита/Уиттекера — честно меняют скважность. Если бы я должен был провести линии заимствования, я бы предположил что-то типа:
Plip Plop -> Dizzy / Special FX / Dark Fusion -> 4chan etc
Wham -> Savage -> Tritone
Follin -> ZX7 -> Octode
Когда я писал свой первый движок, я в основном опирался на движок из Wham, и внедрил в него нечто похожее на движок из Dizzy (движок Смита мне всегда казался переусложнённым, я не люблю его код и по сей день). Т.е. ветки, конечно, могут и пересекаться.
На самом деле, действительно странное ограничение у спектрума в этом плане. Непонятное.
А с ограничениями — это усложняет работу художника, я не очень люблю такие решения.
Ну и, давай будем до конца честными. То есть, ты признаешься вслух, для какого именно клона возможны все 16 цветов на бордере, а уж мы тебя тогда, как АТМщика, искренне тут распнём! :)))