В ближайшем времени буду ставить 128к на байт. Многие игрушки во время загрузки определяют какой у тебя комп.(48 или 128) Они определяют прошивку или объём памяти? Придётся ли мне ставить ещё одну прошивку (переключаемую) или не надо?
В ближайшем времени буду ставить 128к на байт. Многие игрушки во время загрузки определяют какой у тебя комп.(48 или 128) Они определяют прошивку или объём памяти? Придётся ли мне ставить ещё одну прошивку (переключаемую) или не надо?
С уважением, Александр.
Scorpion ZS-256 Turbo+ GMX-2048
SID-Blaster/ZX
Музей ретрокомпьютеров в Минске!
Здесь ничего нет => http://byteman.by
И здесь тоже --->>> http://bytespace.by
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
байт (я так понял у тебя он) это вообще тяжелый случай.. но 99% программ используют только обычную 48ю прошивку, так что всё будет нормально
Компьютер из 48K в 128K (и более) можно превратить даже не имея в наличии прошивки BASIC128, важен лишь порт переключения страниц и экранов (7ffd). Проги, по крайней мере подавляющее большинство, в этом случае прекрасно понимают что они работают на Spectrum128. Кроме того интересно и то, что имея только 48К и порт 7ffd сам BASIC128 прекрасно запускается и считает что компьютер Spectrum128 (но кажется также понимает что верхняя память "повреждена").
Детект факта 128К проги осуществляют как правило занесением инфы по #C000-#FFFF и переключением банков памяти с последующим сравнением занесенного и считанного значения.
есть несколько прог которые определяют размер памяти по ячейки ПЗУ или переменной 23388, но таких очень мало
Всё понятно. А то думаю как CHASE HQ определяет. На Spectrum128 грузится дольше и заставка другая и АУ работает...
С уважением, Александр.
Scorpion ZS-256 Turbo+ GMX-2048
SID-Blaster/ZX
Музей ретрокомпьютеров в Минске!
Здесь ничего нет => http://byteman.by
И здесь тоже --->>> http://bytespace.by
В своих программах я определяю 128К такой максимально оптимизированной процедурой:Код:DI LD HL,#D110 LD BC,#7FFD OUT (C),L LD (HL),B OUT (C),H LD (HL),C OUT (C),L LD A,(HL) CP B LD A,L LD (23388),A EI ;на выходе, если Z=1, то 128K
точно нет, я его адаптировал под ленту и 48k. мелодии приходилось слушать перед запуском уровняЕще ПЗУ128 нужно по моему в игре "48 утюгов"
Разумеется, ячейки не нужно восстанавливать, если, скажем, в них будет загружен код.Сообщение от Spectre
Для программ, завершающих свою работу возвратом в систему ZX Spectrum (не кнопкой Reset, естественно) подойдет процедура очищающая электронный диск попутно с проверкой памяти.Код:;Проверка наличия памяти 128K и очистка ;электронного диска BASIC 128. ;(C) GRAND, 12.11.2006. LD BC,#7FFD LD DE,#1017 OUT (C),D LD HL,#EBEC LD (HL),D OUT (C),E LD E,19 LD (HL),0 INC HL DEC E JR NZ,$-4 LD L,#F7 LD (HL),#C0 OUT (C),D LD L,#EC LD A,(HL) OR A LD (23388),A;BANKM LD (23427),HL;SFNEXT LD H,#2B LD A,1 LD (23429),HL;SFSPACE LD (23431),A; ;на выходе флаг Z=0 - означает наличие 128K. ;При работе процедуры прерывания должны быть ;запрещены, а ее код НЕ должен распологаться ;в диапазоне, где устанавливаются банки ;памяти, т.е. #C000...#FFFF. Процедура оперирует :только с системными переменными BASIC 128, :расположенными как в бывшем буфере принтера, ;так и в банке 7, поэтому никакое изменение ;ячеек, установленных после ее работы, недопустимо!
Что касается вопроса о якобы некорректной работе порта #7FFD на всех остальных компьютерах, кроме Pentagon'а, при обращении к нему, скажем, LD A,#10 \ OUT (#FD),A, то после того, как кодеры правильных компьютеров стали исправлять этот бред на LD A,%01010000 \ OUT (#FD),A, проблема бумерангом вернулась на тот клон (Pentagon), где она была порождена, и это вполне справедливо.
Последний раз редактировалось Grand; 04.09.2007 в 03:41.
Если в каком-либо моем посте перестала работать гиперссылка или показываться картинка, напишите мне об этом в личном сообщении,чтобы я смог это исправить.
Grand's - сайт об электронно-вычислительной технике (зеркало)
Вопрос был - КАК?
ответ
1) Через ПЗУ, проверяются какие то ячейки, причём адрес ячейки как правило выбирается наобум, не очень понятно как такие программы реагируют на изменённые версии ПЗУ.
Типовой код проверки:
________LD A,(ADDR) ; ADDR - откуда то из ПЗУ
________CP #XX ; ячейка которая должна соответствовать якобы ПЗУ-48
________JR Z,ROM48
________CP #YY ; для ПЗУ-128
________JR Z,ROM128
________RET
может быть другой вариант:
________LD A,(ADDR) ; ADDR - откуда то из ПЗУ
________CP #XX ; ячейка которая должна соответствовать якобы ПЗУ-48
________JR (N)Z,ROM48 ; проверка на (не)совпадение
________JR ROM128
Причём, очевидно, что глюков и та и другая процедура имеет немерянно.
2) Проверять системные переменные
Это более предпочитительный (по сравнению с первым вариантом) способ. Тут его уже комментировали
3) Проверять реагирует ли хоть что-то при выводе разных значений в порт #7ffd. Опять же типовой код был приведён несколькими постами выше.
Я считаю этот способ самым правильным, однако необходимо в любом случае восстанавливать ячейки памяти, которые, возможно, были похерены. Работа программы-загрузчика может завершиться неудачно, а там могут оказаться какие-то данные, необходимые для SOS-48 или SOS-128.
И ещё, приведённые программы страдают недостатком - при переключении страничек рекомендуется либо ждать начала прерывания (команда HALT) либо на время работы процедуры определения отрубать прерывания. Это связано с тем, что SOS-128 восстаналивает страницы при каждом прерывании, кроме того, прерывание может криво отработаться, если была активна не та страничка, что прописана в системных переменных.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)