Просмотр полной версии : Особенности фирменного Спектрума
Очень интересуют ВСЕ особенности работы фирменного Спектрума: куда можно, куда нельзя размещать векторы прерываний; адреса начала/конца медленной/быстрой памяти, особенности работы экранной области, размер инта, и т.д. В общем - как можно больше информации о его работе. Нужно для правильного написания игры - хочется, чтобы она корректно работала на ВСЕХ машинах. Да, и еще хочется знать об особенностях работы музыкального процессора на фирменных Спектрумах, так как слышал (по-моему, читал это в каком-то Спектрофоне), что звучание несколько иное (что-то связано с частотой).
Очень интересуют ВСЕ особенности работы фирменного Спектрума: куда можно, куда нельзя размещать векторы прерываний; адреса начала/конца медленной/быстрой памяти, особенности работы экранной области, размер инта, и т.д. В общем - как можно больше информации о его работе. Нужно для правильного написания игры - хочется, чтобы она корректно работала на ВСЕХ машинах. Да, и еще хочется знать об особенностях работы музыкального процессора на фирменных Спектрумах, так как слышал (по-моему, читал это в каком-то Спектрофоне), что звучание несколько иное (что-то связано с частотой).
Что я знаю:
1. Им2 таблички только в фастпамяти - т.е. #8000-#bfff (куда I указывает).
2. Быстрые странички - в каких-то 128к это 0,1,2,3, в каких-то - 0,2,4,6. Точнее не знаю
3. АУк - частота 1.773447 Мгц - т.е. стандартная частота 4.433619 Мгц, поделённая на 2.5
1. Им2 таблички только в фастпамяти - т.е. #8000-#bfff (куда I указывает).
А вся остальная память - это медленная (я имею ввиду #4000-#7FFF)?
2. Быстрые странички - в каких-то 128к это 0,1,2,3, в каких-то - 0,2,4,6. Точнее не знаю
3. АУк - частота 1.773447 Мгц - т.е. стандартная частота 4.433619 Мгц, поделённая на 2.5
Спасибо.
А вся остальная память - это медленная (я имею ввиду #4000-#7FFF)?
Медленная ещё хрен бы с ней, главное, чтоб в неё не попал I - а то будет снег и глюки (правда, я сам этого не видел, но люди говорят... =)
Медленная ещё хрен бы с ней, главное, чтоб в неё не попал I - а то будет снег и глюки (правда, я сам этого не видел, но люди говорят... =)
Это я знаю... ;)
Неужели это и все особенности?...
Это я знаю... ;)
Неужели это и все особенности?...Про медленную/быструю память уже обсуждали тут: http://zx.pk.ru/showpost.php?p=1675&postcount=11
У lvd ощибка в П.2.
Про прерывания расскажу чуть позднее.
Но вот какой вопрос, а в чем смысл делать игрушку совместимой с фирменными моделями, ведь основная их масса это были машинки с 48К?
Но вот какой вопрос, а в чем смысл делать игрушку совместимой с фирменными моделями, ведь основная их масса это были машинки с 48К?
Спасибо за ссылку.
Моя цель - сделать игруху, которая бы шла на большинстве как отечественных, так и зарубежных клонов Спектрумов. Вполне возможно, что будет версия и исключительно под 48к.
Сейчас доделываю движок игры (это бегалка, она не очень много жрет паямти/тактов). Посмотрю, в общем.
У lvd ощибка в П.2.
Нет у меня никакой ошибки, именно так - на одних 0,1,2,3 быстрые, на других 0,2,4,6 быстрые.
Читать fa preview (zxdemo.org/item.php?id=2578) до полного просветления. :)
Нет у меня никакой ошибки, именно так - на одних 0,1,2,3 быстрые, на других 0,2,4,6 быстрые.
Читать fa preview (zxdemo.org/item.php?id=2578) до полного просветления. :)
Спасибо за ссылку. Теперь понятно на что ссылались при обсуждении этой же «проблемы» из comp.sys.sinclair :smile: Прямо как в анекдоте про «Чукчу и метеоролога». Даже «пофиксили» ее в одном из эмуляторов. :wink:
Но все равно это ошибка (пусть и не у lvd). Читаем в фирменном Service Manual к ZX Spectrum 128 П.4.2.:
Pages 0-3 are uncontended and are accessed solely by the Z80. Pages 4-7 are contended in that the Z80 and ULA IC1 both require access to pages 5 and 7 in order to generate the memory mapped displays.
ftp://ftp.worldofspectrum.org/pub/sinclair/technical-docs/ZXSpectrum128K_TechnicalManual.pdf (ftp://ftp.worldofspectrum.org/pub/sinclair/technical-docs/ZXSpectrum128K_TechnicalManual.pdf)
до еще более полного просветления :p .
Но все равно это ошибка (пусть и не у lvd).
Таки что - мне писать тестовую программу?...
Читаем в фирменном Service Manual к ZX Spectrum 128 П.4.2.:ftp://ftp.worldofspectrum.org/pub/sinclair/technical-docs/ZXSpectrum128K_TechnicalManual.pdf (ftp://ftp.worldofspectrum.org/pub/sinclair/technical-docs/ZXSpectrum128K_TechnicalManual.pdf)
А где фирменные сервис мануалы к +2, +2a, +3 ?
Таки что - мне писать тестовую программу?...
если есть на чем ее прогнать, то конечно :wink:
А где фирменные сервис мануалы к +2, +2a, +3 ?
http://www.worldofspectrum.org/documentation.html#manuals
только с +2a и +3 все в порядке (инфа не расходится с zxdemo.org/item.php?id=2578). А +2 то же самое что и просто 128
Очень интересуют ВСЕ особенности работы фирменного Спектрума: куда можно, куда нельзя размещать векторы прерываний; адреса начала/конца медленной/быстрой памяти, особенности работы экранной области, размер инта, и т.д. В общем - как можно больше информации о его работе. Нужно для правильного написания игры - хочется, чтобы она корректно работала на ВСЕХ машинах. Да, и еще хочется знать об особенностях работы музыкального процессора на фирменных Спектрумах, так как слышал (по-моему, читал это в каком-то Спектрофоне), что звучание несколько иное (что-то связано с частотой).
Привет, Ден !
Особенностей очень много !!! Кроме тормозящих страничек есть ещё разница в смещении начала экрана ! Кстати, торможение происходит только когда отоброжается SCREEN !!! То есть, если ты до начала отображения экрана повесиш плейер музыки в тормозяшую страничку, то ничего страшного не произойдёт ! На этом принципе работало много фирменных игр. Очень на высоком уровне писали такие люди как Pete Cooke или Batty !!! Самое страшное, если указать I на тормозящу память, например 41H и при этом сделать последовательность OTI, это встречаетс в TR-Dos'е, после чего запарывается и диск и память усеивается произвольными битами !!! А по-поводу разницы с +2 +3 и т.д., то они как братики, только добавлены всяческие интерфейсы. И ещё особенность, на фирмовом Speccy нельзя быстро опрашивать клавиатуру !!! На нём стоит дешифратор, и в саму клавиатуру заходит целая туча сигналов, и среди них есть твой IN, который является 0.001% всех этих сигналов. получается, что вероятность сбоя просто гигантская. Поэтому лучше всего многократно сделать IN, и по наибольшей вероятности повторений снятых данных выбрать нужные, после этой пачки желательно подождать пару сотен тактов. С клавиатурой есть ещё одна особенность, но я её точно не опишу, помню, что при чтении из 254-ого порта один из битов указывает на инверсию битов клавиш. Этот алгоритм точно есть в игре Saboteur-2, как, вообщем-то, у большенства игр фирмы Durrel. Как сейчас помню, что в своё время получил эту игру из Польши и не мог понять, почему на фирменном Speccy она работает, а на Pentagon'е не работала, думал что какая-то мудрёная защита, а оказалось всё очень просто. И ещё одна особенность, в доработанных Spectrum 48 до 128, в фирменных, вектор прерываний начинал сампроизвольно плавать в диапазоне 256-ти байт ! Поэтому нужно было стереть, апример, для 128-ого вектора кусок памяти от 32768 до 33024, к примеру числом 254. Тогда адрес прерывания будет 254+254*256. Изврат, но будет работать !!! Кстати, у меня стоит фирменный Speccy доработанный до 512, так что любые работы могу протестировать и в точности сказать что и где не так работает !!!
если есть на чем ее прогнать, то конечно :wink:
На #z80
http://www.worldofspectrum.org/documentation.html#manuals
только с +2a и +3 все в порядке (инфа не расходится с zxdemo.org/item.php?id=2578). А +2 то же самое что и просто 128
Кроме того мануала по 128k, ни в одном другом мануале по +3/etc. нет упоминания про расположение быстрых страниц.
И ещё одна особенность, в доработанных Spectrum 48 до 128, в фирменных, вектор прерываний начинал сампроизвольно плавать в диапазоне 256-ти байт ! Поэтому нужно было стереть, апример, для 128-ого вектора кусок памяти от 32768 до 33024, к примеру числом 254. Тогда адрес прерывания будет 254+254*256. Изврат, но будет работать !!!
Вообще-то 257-байтовая таблица для вектора прерывания - стандартное правило хорошего тона, равно как и использование порта #7ffd вместо #fd с левыми битами в старшей части шины. Если ты не знал. =)
И какой-нибудь левоватый демопитон со свистом пролетит, если шина будет нестабильной в цикле считывания вектора прерывания или не дай бог будет полная дешифрация #7ffd. Так что решать про извраты - не тебе, а тому, у кого это просто не заработает.
Кроме того мануала по 128k, ни в одном другом мануале по +3/etc. нет упоминания про расположение быстрых страниц.Глава из +3 мануала: http://www.worldofspectrum.org/ZXSpectrum128+3Manual/chapter8pt24.html
The RAM banks are of two types: RAM pages 4 to 7 which are contended
(meaning that they share time with the video circuitry), and RAM pages
0 to 3 which are uncontended (where the processor has exclusive
use).
А почему такой интерес к +2A/+3? Они же не расходятся по описанию ни с чем.
Медленная ещё хрен бы с ней, главное, чтоб в неё не попал I - а то будет снег и глюки (правда, я сам этого не видел, но люди говорят... =)
Был у меня (недолго) фирменный zx-spectrum+2. ЖуСть, как там большенство отечественного софта работало начала 90 годов. Более поздний уже как-то более-менее, народ старался не совать I в медленную память. А тормоза, глюки и действительно мусор (СНЕГ) в экран лезли :( , если в все же в торррррмозную память засунуть чего не надо совать :D .
Привет, Ден !
Привет, Леха!
Спасибо за ценнейшую информацию. Я сделал вывод, что нужно "расковырять" как можно больше фирмовых игрух, и проанализировать что и как там сделано. ;)
Кстати, у меня стоит фирменный Speccy доработанный до 512, так что любые работы могу протестировать и в точности сказать что и где не так работает !!!
Буду очень признателен. Сочтемся на SpeXtream. ;)
Вообще-то 257-байтовая таблица для вектора прерывания - стандартное правило хорошего тона...
Есть такой спектрумист по имени sic|maggot, так он эти таблички принципиально не делает. ;)
Ну а например я, когда еще даже не знал для чего эта табличка нужна - делал ее ;)
И какой-нибудь левоватый демопитон со свистом пролетит, если шина будет нестабильной в цикле считывания вектора прерывания или не дай бог будет полная дешифрация #7ffd. Так что решать про извраты - не тебе, а тому, у кого это просто не заработает.
Эта типа намек? ;)
Есть такой спектрумист по имени sic|maggot, так он эти таблички принципиально не делает. ;)
Ну а например я, когда еще даже не знал для чего эта табличка нужна - делал ее ;)Если речь идет об "особенностях фирменных моделей", то шина данных на них стабильна все время кроме вывода экрана. А на моделях +2А/B/+3 стабильна всегда (как и на большинстве клонов). Клоны (или "доделанные" фирменные модели) с нестабильной шиной во время INT, это откровенно "кривое" железо. Если брать такое в рассчет, то нужно вспомнить про все клоны (и отдельные экземпляры) с "кривизной".
Клоны (или "доделанные" фирменные модели) с нестабильной шиной во время INT, это откровенно "кривое" железо. Если брать такое в рассчет, то нужно вспомнить про все клоны (и отдельные экземпляры) с "кривизной".
А реально ли написать программу так, чтобы она шла ВЕЗДЕ?
А реально ли написать программу так, чтобы она шла ВЕЗДЕ?Я про то же и говорю :wink:. Поэтому некоторые "особенности", не стоит возводить в ранг стандартов. Скорее всего к таким "глюкам" относится и нестабильная шина.
Вообще-то 257-байтовая таблица для вектора прерывания - стандартное правило хорошего тона, равно как и использование порта #7ffd вместо #fd с левыми битами в старшей части шины. Если ты не знал. =)
Какраз #7ffd, пошло от пентагона, поскольку создатели обломались посмотреть на устоявшиеся стандарты ... Так, что есть такая знаменитая игра как Target Renegade, где да же и не пахнет портом #7ffd, вот именно пентагоны, доработанные до 512 хорошо пролетали ... И на всякий случай, перед работой с простым портом #fd делаеш всего-то один OUT (#7ffd), с нужными битами в верхних двух битах, а после OUT (#fd) велеколепно работает, за исключением левых пентагонов !
И какой-нибудь левоватый демопитон со свистом пролетит, если шина будет нестабильной в цикле считывания вектора прерывания или не дай бог будет полная дешифрация #7ffd. Так что решать про извраты - не тебе, а тому, у кого это просто не заработает.
У меня стоит фирменный Speccy, всё работает идеально, а у Вас, пролетает ??? А по поводу нормального тона советую изучить методы программирования такх фирм как Durell, или CRL, или посмотреть как сделана игра Untochables на 512к, и станет всё ясно, у кого какие Speccy !!!
Не мы задавали эти стандарты, а те, кто создавали свои работы до 1990-ого года ... Наши могли только подхватить идеи, и реализовать их лучше ... Ну, или создать пентагон, сделать его более-менее комерческим и сказать, что это есть стандарт ...
--------
Убедительная просьба воздерживаться от оскорбительных выражений. ОЧЕНЬ УБЕДИТЕЛЬНАЯ.
Shadow Maker
25.12.2008, 00:01
Вернемся к медленной памяти. То есть если я повешу хэндлер прерываний и само табло в #8000-#bfff, и всю работу с экраном тоже в ней - то мне уже пофигу, будет работать везде нормально?
По ходу нет.
Ещё ведь и длительность INT`а не везде одинкова...
Я тут игруху дописываю, пришлось INI-счетчик ставить, прерывание считать и автоконфиг под модель...
Так-же и автоопределятор наличия AY и Kempston joystick...
Вот только с анти-дребезгом не знаю как быть. Нет возможности протестировать, эмуль у меня...
Shadow Maker
25.12.2008, 01:23
У меня на прерываниях тока музыка висит. Тем более как длина инта влияет на медленную память? Вопрос был только конкретно про неё.
В принципе да - все будет нормально. Только если игра фреймовая - то надо расчитывать тысяч на 65 в прерывании... я тестирую наши демы в ZxSpin - если работает нормально, то никто не жалуется.
У меня на прерываниях тока музыка висит. Тем более как длина инта влияет на медленную память? Вопрос был только конкретно про неё.
1. Длина инта влияет только на количество команд в инте ... То есть, если пришло прерывание, и ты в нём с делал только одну команду RETI, а длина инта была 32 такта, то он сразу тебя вернёт назад в инт, но при этом произойдёт тормоз на один инт. Так что если у тебя в инте музыка, а она уж точно более 224 тактов, то не стоит переживать ...
2. Если твой плеер занимает не более 10000 тактов, то глубоко наплевать в каком адресе он будет играться. Можешь его положить в тормозящую память и всё будет идеально. Тормоза тормозящей памяти начинаются только в момент высвечивания пикселов экрана. То есть пока лучь выше экранной области никаких тормозов не будет.
3. Если вектор прерывания лежит в тормозяще области то вот тут самое страшное. А если ещё и точка входа в инт в тормозящую область, то будет тормоз-тормозов ...
Вообщем, I=128..191, точка входа в любое место, главное до начала отрисовки экрана начать выполнять код в нетормозяще области ...
а если данные выбираются ? скажем копируется вирт экран в 5 на реальный там же? и не укладываются в инт?
а если данные выбираются ? скажем копируется вирт экран в 5 на реальный там же? и не укладываются в инт?
Ну ... Собственно и не должно ... Или я не понял ... Переброска всего экрана как минимум скушает целый инт ... Ты, соответственно, превысишь лимит времени начала отрисовки экрана и начинает тормозить. Но если ты сделаешь все операции с тормозящей областью до начала отрисовки экрана, то как на пентагоне, так и на фирменно будет работать одинаково.
---------------------------------------------------------------------------
Кстати не досказал насчёт длины инта ... Бывает ещё так, что длина инта слишком мала. Допустим вы делаете LDIR, и в этот момент пришёл инт. Который в тактах меньше тактов LDIR'а ... Тогда инт пропустится ...
Какраз #7ffd, пошло от пентагона, поскольку создатели обломались посмотреть на устоявшиеся стандарты ... Так, что есть такая знаменитая игра как Target Renegade, где да же и не пахнет портом #7ffd, вот именно пентагоны, доработанные до 512 хорошо пролетали ... И на всякий случай, перед работой с простым портом #fd делаеш всего-то один OUT (#7ffd), с нужными битами в верхних двух битах, а после OUT (#fd) велеколепно работает, за исключением левых пентагонов !
ЭТО в каком месте в таргете порт #fd - там полная адресация везде
AlexCrush
30.12.2008, 22:25
Бывает ещё так, что длина инта слишком мала. Допустим вы делаете LDIR, и в этот момент пришёл инт. Который в тактах меньше тактов LDIR'а ... Тогда инт пропустится ...
Уточняю, что длина INT-а должна быть не менее чем длина самой длинной команды, а это, вроде бы, 23 такта.
По поводу LDIR-а, т.к. он может оперироват большущими блоками и выполняться куда больше чем 23 такта, то выполняется он так:
1. читается код команды (LDIR) из памяти
2. читается байт из (HL)
3. пишется байт в (DE)
4. увеличивается HL, DE, уменьшается BC
5. если BC = 0 то PC = PC + 2
6. Анализируется INT, если = 0 то выполняется прерывание
Таким образом, когда BC <> 0 счетчик PC не изменяется и повторно читается та же самая команда (LDIR) из памяти.
1. читается код команды (LDIR) из памяти
2. читается байт из (HL)
3. пишется байт в (DE)
4. увеличивается HL, DE, уменьшается BC
5. если BC = 0 то PC = PC + 2
6. Анализируется INT, если = 0 то выполняется прерывание
Не совсем.
1. Запрещаются прерывания
2. Читается префикс команды
3. Читается команда
4. Разрешаются прерывания
5. Выполняются пункты 2-4 из твоего списка
6. Если BC != 0, то PC -= 2
AlexCrush
31.12.2008, 14:01
Не совсем.
Может и так, сейчас уж точно не помню.
В любом случае, суть в том, что LDIR выполняется не непрерывным блоком а как большое кол-во LDI, между которыми возможно прерывание.
Сорри что увел тему немного в сторону от особенностей фирменного спека ;)
С новым годом всех! :v2_cheer:
1. Запрещаются прерывания
2. Читается префикс команды
3. Читается команда
4. Разрешаются прерывания
5. Выполняются пункты 2-4 из твоего списка
6. Если BC != 0, то PC -= 2
т.е. прерывание может быть обработано после выборки команды, но до ее выполнения? Можно ссылочку на источник информации? Просто в Z80 Family CPU User Manual (um0080.pdf) написано (Timing / Interrupt Request/Acknowledge Cycle): The CPU samples the interrupt signal (/INT) with the rising edge of the last clock cycle at the end of any instruction.
т.е. прерывание может быть обработано после выборки команды, но до ее выполнения?
Ммм... Наврал, похоже. Прерывания разрешаются в конце действа. Точнее, после выполнения всех действий команды принимается в расчет установленный сигнал на ноге INT. С этим и связано упомянутое ранее требование к длине инта- если сигнал на ноге пропадет до конца выполнения текущей команды, то прерывание не засчитается. Вроде так...
Вроде так...
Только так !!!
У фирменного спека есть прекрасная особенность ... Если сделать HALT в момент торможения, то есть когда отрисовывается пиксель экрана, то число тактов при окончании исполнения HALT будет делиться на 4 !!! В итоге, если вы хотите сделаьть мультиколорный эффект, то просто делаете один HALT в середине отрисовки экрана, и вы ввалитесь в прерывание чётко с первыйм тактом самого инта. Таким образом вы всегда будете синхронизированы с лучём, и можете рисовать на брдюре и на экране одновременно, - пиксель в пиксель ... На пентагоне такое сделать нельзя !!! Всегда будет несовпадение как минимум на 4 пикселя !!!
Original Speccy - BEST ...
У фирменного спека есть прекрасная особенность ... Если сделать HALT в момент торможения, то есть когда отрисовывается пиксель экрана, то число тактов при окончании исполнения HALT будет делиться на 4 !!! В итоге, если вы хотите сделаьть мультиколорный эффект, то просто делаете один HALT в середине отрисовки экрана, и вы ввалитесь в прерывание чётко с первыйм тактом самого инта. Таким образом вы всегда будете синхронизированы с лучём, и можете рисовать на брдюре и на экране одновременно, - пиксель в пиксель ... На пентагоне такое сделать нельзя !!! Всегда будет несовпадение как минимум на 4 пикселя !!! Original Speccy - BEST ...
Hi Robus, вот чего никогда не мог сделать так это понять что ты хотел сказать с первого раза :)
Вот и тут пришлось мне 10 минут думать над этой фразой. На скоко я понимаю речь тут идет о том что если сделать HALT до того как ULA прочитает последний байт в текущем кадре то схема торможения проца выровняет последующие выполнения операций NOP таким образом что при поступлении сигнала прерывания процессор начнет выполнять процедуру обработчик прерывания всегда в один и тот же такт по отношению к кадровому синхроимпульсу и самому сигналу прерывания. Если же сденать HALT в нижней части border-a под paper-ом то никакого торможения и выравнивания выполнения NOP-ов не произойдет и учитывая что сигнал прерывания может прийти на 1,2,3,4 такте команды NOP можно ожидать различное время начала выполнения процедуры обработчика прерывания а значит и срыв синхронизации эфектов multicolora.
Но вот вопрос как по другому можно синхронизироватся? Порт 0xff ?
Black_Cat
06.01.2009, 16:02
как по другому можно синхронизироватся? Порт 0xff ?#FF ниже и выше экрана тебе аналогично не поможет
Но вот вопрос как по другому можно синхронизироватся?
Пентагон прекрасная штука ... Если бы можно было как-то кинхронизироваться на нём, то я бы его считал лучшим из спеков ...
Black_Cat
06.01.2009, 17:47
Если бы можно было как-то кинхронизироваться на нём, то я бы его считал лучшим из спеков ...а по #FF синхриться на экране недостаточно будет? мож у тебя есть на этот счёт какие идеи, типо аппаратных доработок которые решат вопрос?
а по #FF синхриться
#FF реализован не во всех фирменных компах ... У меня дома лежат два спека ... Старая модель (48к) имеет #FF, новая (128к +2) не имеет. Хотя, как я понимаю, значение непосредственно считывается с ULA, наверное просто не реализовали ... Насчёт пентагона не знаю ... А для меня, если не везде поддерживается, то не стоит и использовать.
Black_Cat
07.01.2009, 11:29
новая (128к +2) не имеетну да, не имеет, хотя физически его и в 48 нет :) но это легко исправляется с помощью если не паяла, то подтыкания к ZXBus например.. Или есть какие предубеждения на этот счёт? По сути #FF для синхронизации устраивает, или с ним есть какие затыки?
или с ним есть какие затыки?
Нет с ним затыков ... Всё "прозрачно" ... Конечно, то же нужно помудохаться, поймать переход с 1 в 0 в момент исполнения нужного такта в команде IN, и синхронизация готова. Но с тем же успехом можно сделать доработку и с WAIT'ом. Не на 100% но HALT будет работать в точности как фирменном. Но сразу предупреждаю, я не помню какая именно доработка, это когда-то делал наш Codanger !!!
Но в любом случае - доработка !!!
А можно вообще сделать супер доработку ... Берём контроллера на 100 мегагерц, чтоит 3 доллара, и вешаем его на управление бордюром. И придумываем как программировать со стороны ZX'а !!! И в него загружаем пикселы, которые мы хотим получить ... И не надо синхронизировать ...
Но опять-таки - доработка !!!
Black_Cat
08.01.2009, 09:54
ясно, значит единственный абсолютно универсальный вариант - это через порт #FF
с тем же успехом можно сделать доработку и с WAIT'омне, это уже противоречит концепции минимализма Спектрума, да и зачем нужны эти вэйты например в пентагоне - он после этого перестанет быть пентагоном..
Берём контроллера на 100 мегагерцне, эт уже совсем не наш путь если речь о стандартном видеорежиме :) , кстати нечто в таком духе уже есть - контроллер DMA, используемый для мультиколоров.. Правда, как там программная синхронизация выполнена я не в курсе, но вообще-то это тож не наш путь, т.к. на более быстрых клонах можно вполне обойтись и без DMA..
#FF реализован не во всех фирменных компах ... У меня дома лежат два спека ... Старая модель (48к) имеет #FF, новая (128к +2) не имеет. Хотя, как я понимаю, значение непосредственно считывается с ULA, наверное просто не реализовали
Похоже на то что у тебя "черный" +2 а не "серый" (если не видно 0xff) значит это +2A, несмотря на то что на коробке написанно +2 (это версия +3 с магнитофоном).
Пример синхронизации по порту 0xff можно глянуть в Arkanoid. Нужно вытаскивать из порта 0xff значения и зная содежимое экрана (и пикселов и атрибутов) можно вычислить где сейчас луч монитора. Можно и нужно использовать в test-ах на оригинальность ULA путем замера количества тактов от начала прерывания до считывания какого-то атрибута или байта пикселей.
Powered by vBulletin® Version 4.2.5 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot