PDA

Просмотр полной версии : Особенности фирменного Спектрума



dwt
24.03.2005, 18:15
Очень интересуют ВСЕ особенности работы фирменного Спектрума: куда можно, куда нельзя размещать векторы прерываний; адреса начала/конца медленной/быстрой памяти, особенности работы экранной области, размер инта, и т.д. В общем - как можно больше информации о его работе. Нужно для правильного написания игры - хочется, чтобы она корректно работала на ВСЕХ машинах. Да, и еще хочется знать об особенностях работы музыкального процессора на фирменных Спектрумах, так как слышал (по-моему, читал это в каком-то Спектрофоне), что звучание несколько иное (что-то связано с частотой).

lvd
24.03.2005, 20:11
Очень интересуют ВСЕ особенности работы фирменного Спектрума: куда можно, куда нельзя размещать векторы прерываний; адреса начала/конца медленной/быстрой памяти, особенности работы экранной области, размер инта, и т.д. В общем - как можно больше информации о его работе. Нужно для правильного написания игры - хочется, чтобы она корректно работала на ВСЕХ машинах. Да, и еще хочется знать об особенностях работы музыкального процессора на фирменных Спектрумах, так как слышал (по-моему, читал это в каком-то Спектрофоне), что звучание несколько иное (что-то связано с частотой).

Что я знаю:

1. Им2 таблички только в фастпамяти - т.е. #8000-#bfff (куда I указывает).

2. Быстрые странички - в каких-то 128к это 0,1,2,3, в каких-то - 0,2,4,6. Точнее не знаю

3. АУк - частота 1.773447 Мгц - т.е. стандартная частота 4.433619 Мгц, поделённая на 2.5

dwt
25.03.2005, 12:18
1. Им2 таблички только в фастпамяти - т.е. #8000-#bfff (куда I указывает).
А вся остальная память - это медленная (я имею ввиду #4000-#7FFF)?

2. Быстрые странички - в каких-то 128к это 0,1,2,3, в каких-то - 0,2,4,6. Точнее не знаю
3. АУк - частота 1.773447 Мгц - т.е. стандартная частота 4.433619 Мгц, поделённая на 2.5
Спасибо.

lvd
25.03.2005, 12:57
А вся остальная память - это медленная (я имею ввиду #4000-#7FFF)?


Медленная ещё хрен бы с ней, главное, чтоб в неё не попал I - а то будет снег и глюки (правда, я сам этого не видел, но люди говорят... =)

dwt
25.03.2005, 16:09
Медленная ещё хрен бы с ней, главное, чтоб в неё не попал I - а то будет снег и глюки (правда, я сам этого не видел, но люди говорят... =)
Это я знаю... ;)
Неужели это и все особенности?...

Conan
25.03.2005, 16:14
Это я знаю... ;)
Неужели это и все особенности?...Про медленную/быструю память уже обсуждали тут: http://zx.pk.ru/showpost.php?p=1675&postcount=11
У lvd ощибка в П.2.
Про прерывания расскажу чуть позднее.
Но вот какой вопрос, а в чем смысл делать игрушку совместимой с фирменными моделями, ведь основная их масса это были машинки с 48К?

dwt
25.03.2005, 16:22
Но вот какой вопрос, а в чем смысл делать игрушку совместимой с фирменными моделями, ведь основная их масса это были машинки с 48К?
Спасибо за ссылку.
Моя цель - сделать игруху, которая бы шла на большинстве как отечественных, так и зарубежных клонов Спектрумов. Вполне возможно, что будет версия и исключительно под 48к.
Сейчас доделываю движок игры (это бегалка, она не очень много жрет паямти/тактов). Посмотрю, в общем.

lvd
25.03.2005, 21:57
У lvd ощибка в П.2.


Нет у меня никакой ошибки, именно так - на одних 0,1,2,3 быстрые, на других 0,2,4,6 быстрые.

Читать fa preview (zxdemo.org/item.php?id=2578) до полного просветления. :)

Conan
25.03.2005, 22:50
Нет у меня никакой ошибки, именно так - на одних 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
25.03.2005, 23:06
Но все равно это ошибка (пусть и не у 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 ?

Conan
25.03.2005, 23:53
Таки что - мне писать тестовую программу?...
если есть на чем ее прогнать, то конечно :wink:


А где фирменные сервис мануалы к +2, +2a, +3 ?
http://www.worldofspectrum.org/documentation.html#manuals
только с +2a и +3 все в порядке (инфа не расходится с zxdemo.org/item.php?id=2578). А +2 то же самое что и просто 128

Robus
26.03.2005, 01:42
Очень интересуют ВСЕ особенности работы фирменного Спектрума: куда можно, куда нельзя размещать векторы прерываний; адреса начала/конца медленной/быстрой памяти, особенности работы экранной области, размер инта, и т.д. В общем - как можно больше информации о его работе. Нужно для правильного написания игры - хочется, чтобы она корректно работала на ВСЕХ машинах. Да, и еще хочется знать об особенностях работы музыкального процессора на фирменных Спектрумах, так как слышал (по-моему, читал это в каком-то Спектрофоне), что звучание несколько иное (что-то связано с частотой).

Привет, Ден !

Особенностей очень много !!! Кроме тормозящих страничек есть ещё разница в смещении начала экрана ! Кстати, торможение происходит только когда отоброжается 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, так что любые работы могу протестировать и в точности сказать что и где не так работает !!!

lvd
26.03.2005, 12:56
если есть на чем ее прогнать, то конечно :wink:

На #z80


http://www.worldofspectrum.org/documentation.html#manuals
только с +2a и +3 все в порядке (инфа не расходится с zxdemo.org/item.php?id=2578). А +2 то же самое что и просто 128

Кроме того мануала по 128k, ни в одном другом мануале по +3/etc. нет упоминания про расположение быстрых страниц.

lvd
26.03.2005, 13:08
И ещё одна особенность, в доработанных Spectrum 48 до 128, в фирменных, вектор прерываний начинал сампроизвольно плавать в диапазоне 256-ти байт ! Поэтому нужно было стереть, апример, для 128-ого вектора кусок памяти от 32768 до 33024, к примеру числом 254. Тогда адрес прерывания будет 254+254*256. Изврат, но будет работать !!!


Вообще-то 257-байтовая таблица для вектора прерывания - стандартное правило хорошего тона, равно как и использование порта #7ffd вместо #fd с левыми битами в старшей части шины. Если ты не знал. =)

И какой-нибудь левоватый демопитон со свистом пролетит, если шина будет нестабильной в цикле считывания вектора прерывания или не дай бог будет полная дешифрация #7ffd. Так что решать про извраты - не тебе, а тому, у кого это просто не заработает.

Conan
26.03.2005, 14:01
Кроме того мануала по 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? Они же не расходятся по описанию ни с чем.

Zeg
26.03.2005, 15:54
Медленная ещё хрен бы с ней, главное, чтоб в неё не попал I - а то будет снег и глюки (правда, я сам этого не видел, но люди говорят... =)

Был у меня (недолго) фирменный zx-spectrum+2. ЖуСть, как там большенство отечественного софта работало начала 90 годов. Более поздний уже как-то более-менее, народ старался не совать I в медленную память. А тормоза, глюки и действительно мусор (СНЕГ) в экран лезли :( , если в все же в торррррмозную память засунуть чего не надо совать :D .

dwt
27.03.2005, 10:05
Привет, Ден !
Привет, Леха!
Спасибо за ценнейшую информацию. Я сделал вывод, что нужно "расковырять" как можно больше фирмовых игрух, и проанализировать что и как там сделано. ;)

Кстати, у меня стоит фирменный Speccy доработанный до 512, так что любые работы могу протестировать и в точности сказать что и где не так работает !!!
Буду очень признателен. Сочтемся на SpeXtream. ;)

dwt
27.03.2005, 10:10
Вообще-то 257-байтовая таблица для вектора прерывания - стандартное правило хорошего тона...
Есть такой спектрумист по имени sic|maggot, так он эти таблички принципиально не делает. ;)
Ну а например я, когда еще даже не знал для чего эта табличка нужна - делал ее ;)

И какой-нибудь левоватый демопитон со свистом пролетит, если шина будет нестабильной в цикле считывания вектора прерывания или не дай бог будет полная дешифрация #7ffd. Так что решать про извраты - не тебе, а тому, у кого это просто не заработает.
Эта типа намек? ;)

Conan
27.03.2005, 15:08
Есть такой спектрумист по имени sic|maggot, так он эти таблички принципиально не делает. ;)
Ну а например я, когда еще даже не знал для чего эта табличка нужна - делал ее ;)Если речь идет об "особенностях фирменных моделей", то шина данных на них стабильна все время кроме вывода экрана. А на моделях +2А/B/+3 стабильна всегда (как и на большинстве клонов). Клоны (или "доделанные" фирменные модели) с нестабильной шиной во время INT, это откровенно "кривое" железо. Если брать такое в рассчет, то нужно вспомнить про все клоны (и отдельные экземпляры) с "кривизной".

dwt
27.03.2005, 15:26
Клоны (или "доделанные" фирменные модели) с нестабильной шиной во время INT, это откровенно "кривое" железо. Если брать такое в рассчет, то нужно вспомнить про все клоны (и отдельные экземпляры) с "кривизной".
А реально ли написать программу так, чтобы она шла ВЕЗДЕ?

Conan
27.03.2005, 15:31
А реально ли написать программу так, чтобы она шла ВЕЗДЕ?Я про то же и говорю :wink:. Поэтому некоторые "особенности", не стоит возводить в ранг стандартов. Скорее всего к таким "глюкам" относится и нестабильная шина.

Robus
28.03.2005, 00:20
Вообще-то 257-байтовая таблица для вектора прерывания - стандартное правило хорошего тона, равно как и использование порта #7ffd вместо #fd с левыми битами в старшей части шины. Если ты не знал. =)

Какраз #7ffd, пошло от пентагона, поскольку создатели обломались посмотреть на устоявшиеся стандарты ... Так, что есть такая знаменитая игра как Target Renegade, где да же и не пахнет портом #7ffd, вот именно пентагоны, доработанные до 512 хорошо пролетали ... И на всякий случай, перед работой с простым портом #fd делаеш всего-то один OUT (#7ffd), с нужными битами в верхних двух битах, а после OUT (#fd) велеколепно работает, за исключением левых пентагонов !


И какой-нибудь левоватый демопитон со свистом пролетит, если шина будет нестабильной в цикле считывания вектора прерывания или не дай бог будет полная дешифрация #7ffd. Так что решать про извраты - не тебе, а тому, у кого это просто не заработает.

У меня стоит фирменный Speccy, всё работает идеально, а у Вас, пролетает ??? А по поводу нормального тона советую изучить методы программирования такх фирм как Durell, или CRL, или посмотреть как сделана игра Untochables на 512к, и станет всё ясно, у кого какие Speccy !!!

Не мы задавали эти стандарты, а те, кто создавали свои работы до 1990-ого года ... Наши могли только подхватить идеи, и реализовать их лучше ... Ну, или создать пентагон, сделать его более-менее комерческим и сказать, что это есть стандарт ...

Looker
29.03.2005, 08:55
--------


Убедительная просьба воздерживаться от оскорбительных выражений. ОЧЕНЬ УБЕДИТЕЛЬНАЯ.

Shadow Maker
25.12.2008, 00:01
Вернемся к медленной памяти. То есть если я повешу хэндлер прерываний и само табло в #8000-#bfff, и всю работу с экраном тоже в ней - то мне уже пофигу, будет работать везде нормально?

Destr
25.12.2008, 00:59
По ходу нет.
Ещё ведь и длительность INT`а не везде одинкова...
Я тут игруху дописываю, пришлось INI-счетчик ставить, прерывание считать и автоконфиг под модель...
Так-же и автоопределятор наличия AY и Kempston joystick...
Вот только с анти-дребезгом не знаю как быть. Нет возможности протестировать, эмуль у меня...

Shadow Maker
25.12.2008, 01:23
У меня на прерываниях тока музыка висит. Тем более как длина инта влияет на медленную память? Вопрос был только конкретно про неё.

psndcj
25.12.2008, 11:50
В принципе да - все будет нормально. Только если игра фреймовая - то надо расчитывать тысяч на 65 в прерывании... я тестирую наши демы в ZxSpin - если работает нормально, то никто не жалуется.

Robus
29.12.2008, 11:05
У меня на прерываниях тока музыка висит. Тем более как длина инта влияет на медленную память? Вопрос был только конкретно про неё.

1. Длина инта влияет только на количество команд в инте ... То есть, если пришло прерывание, и ты в нём с делал только одну команду RETI, а длина инта была 32 такта, то он сразу тебя вернёт назад в инт, но при этом произойдёт тормоз на один инт. Так что если у тебя в инте музыка, а она уж точно более 224 тактов, то не стоит переживать ...

2. Если твой плеер занимает не более 10000 тактов, то глубоко наплевать в каком адресе он будет играться. Можешь его положить в тормозящую память и всё будет идеально. Тормоза тормозящей памяти начинаются только в момент высвечивания пикселов экрана. То есть пока лучь выше экранной области никаких тормозов не будет.

3. Если вектор прерывания лежит в тормозяще области то вот тут самое страшное. А если ещё и точка входа в инт в тормозящую область, то будет тормоз-тормозов ...

Вообщем, I=128..191, точка входа в любое место, главное до начала отрисовки экрана начать выполнять код в нетормозяще области ...

Totem
29.12.2008, 16:42
а если данные выбираются ? скажем копируется вирт экран в 5 на реальный там же? и не укладываются в инт?

Robus
30.12.2008, 11:10
а если данные выбираются ? скажем копируется вирт экран в 5 на реальный там же? и не укладываются в инт?
Ну ... Собственно и не должно ... Или я не понял ... Переброска всего экрана как минимум скушает целый инт ... Ты, соответственно, превысишь лимит времени начала отрисовки экрана и начинает тормозить. Но если ты сделаешь все операции с тормозящей областью до начала отрисовки экрана, то как на пентагоне, так и на фирменно будет работать одинаково.

---------------------------------------------------------------------------

Кстати не досказал насчёт длины инта ... Бывает ещё так, что длина инта слишком мала. Допустим вы делаете LDIR, и в этот момент пришёл инт. Который в тактах меньше тактов LDIR'а ... Тогда инт пропустится ...

jerri
30.12.2008, 19:05
Какраз #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) из памяти.

Vitamin
31.12.2008, 00:45
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:

ivagor
01.01.2009, 14:36
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.

Vitamin
06.01.2009, 01:10
т.е. прерывание может быть обработано после выборки команды, но до ее выполнения?
Ммм... Наврал, похоже. Прерывания разрешаются в конце действа. Точнее, после выполнения всех действий команды принимается в расчет установленный сигнал на ноге INT. С этим и связано упомянутое ранее требование к длине инта- если сигнал на ноге пропадет до конца выполнения текущей команды, то прерывание не засчитается. Вроде так...

Robus
06.01.2009, 12:23
Вроде так...
Только так !!!

У фирменного спека есть прекрасная особенность ... Если сделать HALT в момент торможения, то есть когда отрисовывается пиксель экрана, то число тактов при окончании исполнения HALT будет делиться на 4 !!! В итоге, если вы хотите сделаьть мультиколорный эффект, то просто делаете один HALT в середине отрисовки экрана, и вы ввалитесь в прерывание чётко с первыйм тактом самого инта. Таким образом вы всегда будете синхронизированы с лучём, и можете рисовать на брдюре и на экране одновременно, - пиксель в пиксель ... На пентагоне такое сделать нельзя !!! Всегда будет несовпадение как минимум на 4 пикселя !!!

Original Speccy - BEST ...

bigral
06.01.2009, 15:42
У фирменного спека есть прекрасная особенность ... Если сделать 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 ниже и выше экрана тебе аналогично не поможет

Robus
06.01.2009, 16:42
Но вот вопрос как по другому можно синхронизироватся?
Пентагон прекрасная штука ... Если бы можно было как-то кинхронизироваться на нём, то я бы его считал лучшим из спеков ...

Black_Cat
06.01.2009, 17:47
Если бы можно было как-то кинхронизироваться на нём, то я бы его считал лучшим из спеков ...а по #FF синхриться на экране недостаточно будет? мож у тебя есть на этот счёт какие идеи, типо аппаратных доработок которые решат вопрос?

Robus
07.01.2009, 11:05
а по #FF синхриться
#FF реализован не во всех фирменных компах ... У меня дома лежат два спека ... Старая модель (48к) имеет #FF, новая (128к +2) не имеет. Хотя, как я понимаю, значение непосредственно считывается с ULA, наверное просто не реализовали ... Насчёт пентагона не знаю ... А для меня, если не везде поддерживается, то не стоит и использовать.

Black_Cat
07.01.2009, 11:29
новая (128к +2) не имеетну да, не имеет, хотя физически его и в 48 нет :) но это легко исправляется с помощью если не паяла, то подтыкания к ZXBus например.. Или есть какие предубеждения на этот счёт? По сути #FF для синхронизации устраивает, или с ним есть какие затыки?

Robus
08.01.2009, 09:29
или с ним есть какие затыки?
Нет с ним затыков ... Всё "прозрачно" ... Конечно, то же нужно помудохаться, поймать переход с 1 в 0 в момент исполнения нужного такта в команде IN, и синхронизация готова. Но с тем же успехом можно сделать доработку и с WAIT'ом. Не на 100% но HALT будет работать в точности как фирменном. Но сразу предупреждаю, я не помню какая именно доработка, это когда-то делал наш Codanger !!!

Но в любом случае - доработка !!!

А можно вообще сделать супер доработку ... Берём контроллера на 100 мегагерц, чтоит 3 доллара, и вешаем его на управление бордюром. И придумываем как программировать со стороны ZX'а !!! И в него загружаем пикселы, которые мы хотим получить ... И не надо синхронизировать ...

Но опять-таки - доработка !!!

Black_Cat
08.01.2009, 09:54
ясно, значит единственный абсолютно универсальный вариант - это через порт #FF

с тем же успехом можно сделать доработку и с WAIT'омне, это уже противоречит концепции минимализма Спектрума, да и зачем нужны эти вэйты например в пентагоне - он после этого перестанет быть пентагоном..
Берём контроллера на 100 мегагерцне, эт уже совсем не наш путь если речь о стандартном видеорежиме :) , кстати нечто в таком духе уже есть - контроллер DMA, используемый для мультиколоров.. Правда, как там программная синхронизация выполнена я не в курсе, но вообще-то это тож не наш путь, т.к. на более быстрых клонах можно вполне обойтись и без DMA..

bigral
08.01.2009, 14:34
#FF реализован не во всех фирменных компах ... У меня дома лежат два спека ... Старая модель (48к) имеет #FF, новая (128к +2) не имеет. Хотя, как я понимаю, значение непосредственно считывается с ULA, наверное просто не реализовали

Похоже на то что у тебя "черный" +2 а не "серый" (если не видно 0xff) значит это +2A, несмотря на то что на коробке написанно +2 (это версия +3 с магнитофоном).

Пример синхронизации по порту 0xff можно глянуть в Arkanoid. Нужно вытаскивать из порта 0xff значения и зная содежимое экрана (и пикселов и атрибутов) можно вычислить где сейчас луч монитора. Можно и нужно использовать в test-ах на оригинальность ULA путем замера количества тактов от начала прерывания до считывания какого-то атрибута или байта пикселей.