Важная информация

User Tag List

Показано с 1 по 10 из 15

Тема: Как проги определяют 128к?

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Moderator Аватар для BYTEMAN
    Регистрация
    11.01.2006
    Адрес
    Брест/Минск
    Сообщений
    8,394
    Записей в дневнике
    4
    Спасибо Благодарностей отдано 
    179
    Спасибо Благодарностей получено 
    115
    Поблагодарили
    57 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Как проги определяют 128к?

    В ближайшем времени буду ставить 128к на байт. Многие игрушки во время загрузки определяют какой у тебя комп.(48 или 128) Они определяют прошивку или объём памяти? Придётся ли мне ставить ещё одну прошивку (переключаемую) или не надо?
    С уважением, Александр.
    Scorpion ZS-256 Turbo+ GMX-2048
    SID-Blaster/ZX
    Музей ретрокомпьютеров в Минске!
    Здесь ничего нет => http://byteman.by
    И здесь тоже --->>> http://bytespace.by

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Veteran Аватар для jtn
    Регистрация
    15.01.2005
    Адрес
    Kievska Rus
    Сообщений
    1,149
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    байт (я так понял у тебя он) это вообще тяжелый случай.. но 99% программ используют только обычную 48ю прошивку, так что всё будет нормально

  4. #3
    Veteran
    Регистрация
    22.02.2005
    Адрес
    Украина, Харьков
    Сообщений
    1,527
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Компьютер из 48K в 128K (и более) можно превратить даже не имея в наличии прошивки BASIC128, важен лишь порт переключения страниц и экранов (7ffd). Проги, по крайней мере подавляющее большинство, в этом случае прекрасно понимают что они работают на Spectrum128. Кроме того интересно и то, что имея только 48К и порт 7ffd сам BASIC128 прекрасно запускается и считает что компьютер Spectrum128 (но кажется также понимает что верхняя память "повреждена").
    Детект факта 128К проги осуществляют как правило занесением инфы по #C000-#FFFF и переключением банков памяти с последующим сравнением занесенного и считанного значения.

  5. #4
    Guru
    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    13,780
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    144
    Спасибо Благодарностей получено 
    1,182
    Поблагодарили
    777 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    есть несколько прог которые определяют размер памяти по ячейки ПЗУ или переменной 23388, но таких очень мало

  6. #5
    Moderator Аватар для BYTEMAN
    Регистрация
    11.01.2006
    Адрес
    Брест/Минск
    Сообщений
    8,394
    Записей в дневнике
    4
    Спасибо Благодарностей отдано 
    179
    Спасибо Благодарностей получено 
    115
    Поблагодарили
    57 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Всё понятно. А то думаю как CHASE HQ определяет. На Spectrum128 грузится дольше и заставка другая и АУ работает...
    С уважением, Александр.
    Scorpion ZS-256 Turbo+ GMX-2048
    SID-Blaster/ZX
    Музей ретрокомпьютеров в Минске!
    Здесь ничего нет => http://byteman.by
    И здесь тоже --->>> http://bytespace.by

  7. #6
    Veteran Аватар для Grand
    Регистрация
    10.04.2005
    Адрес
    Сибирь
    Сообщений
    1,154
    Спасибо Благодарностей отдано 
    214
    Спасибо Благодарностей получено 
    331
    Поблагодарили
    146 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В своих программах я определяю 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

  8. #7
    Veteran Аватар для SMT
    Регистрация
    16.01.2005
    Адрес
    Бобруйск
    Сообщений
    1,267
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Еще ПЗУ128 нужно по моему в игре "48 утюгов"
    точно нет, я его адаптировал под ленту и 48k. мелодии приходилось слушать перед запуском уровня

  9. #8
    Veteran Аватар для Grand
    Регистрация
    10.04.2005
    Адрес
    Сибирь
    Сообщений
    1,154
    Спасибо Благодарностей отдано 
    214
    Спасибо Благодарностей получено 
    331
    Поблагодарили
    146 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Arrow

    Цитата Сообщение от Spectre
    И что? В #10-ой странице все равно 1 ячейку испортил. Это не критично /.../
    Разумеется, ячейки не нужно восстанавливать, если, скажем, в них будет загружен код.



    Для программ, завершающих свою работу возвратом в систему 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 - сайт об электронно-вычислительной технике (зеркало)

  10. #9
    Veteran Аватар для GriV
    Регистрация
    18.02.2005
    Адрес
    Набережные Челны
    Сообщений
    1,574
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(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 восстаналивает страницы при каждом прерывании, кроме того, прерывание может криво отработаться, если была активна не та страничка, что прописана в системных переменных.
    Последний раз редактировалось GriV; 27.08.2007 в 10:45.
    Биты рулят лучше байтов, байты рулят шустрее!
    View, Звук, Цвет

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Не могу доделать 128К
    от rw6hrm в разделе Несортированное железо
    Ответов: 29
    Последнее: 04.03.2006, 10:39
  2. Вопрос о переводе проги c TRD
    от AAA в разделе Разный софт
    Ответов: 23
    Последнее: 16.01.2006, 16:52
  3. ZX Speccy 128к и СИММ
    от BaguM в разделе Несортированное железо
    Ответов: 5
    Последнее: 29.12.2005, 12:35
  4. радолюбительские проги
    от rw6hrm в разделе Софт
    Ответов: 6
    Последнее: 15.07.2005, 00:34

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •