ZXNet эхоконференция «code.zx»


тема: Переключение памяти.



от: 812/01.14
кому: Andrey Senichkin
дата: 29 Aug 1997

Огромный Вам дружеский привет, Andrey!!!

Однажды, грохоча клавишами, числа где-то
27-08-97 ровно в 20:47 Andrey Senichkin
писал(а) to All:

AS> Приветствую тебя уважаемый , ALL !!

AS> Так как у нас нету эхи для чайников
AS> приходится писать сюда.

Дык а куда же еще, раз по теме эхи???

AS> Может кто поможет мне : опишет порты
AS> для переключения памяти на Скорпе и напи-
AS> шет прогу для этого.

============ линия разгрыза ===================

Значит, так. Верхняя память Scorpion'а
распределена след. образом: восемь страниц
размером по 16 кБ (16384 байт), подключае-
мые в 3-й банк процессора (адресное прост-
ранство 0c000h..0ffffh) через стандартный
порт ZX Spectrum-128 07ffdh. Hазначение
бит этого порта:


D0..D2 - номер страницы ОЗУ;
D3 - переключение адреса начала экранной
области: 0 - 04000h, 1 - 0c000h;
D4 - переключение ПЗУ: 0 - ZX128, 1 - ZX48;
D5 - 0 - ничего не меняет, 1 - блокирует
дальнейшую конфигурацию порта.

Теперь подробнее. Hомера страниц изменяют-
ся от 0 до 7, причем страница 2 всегда
отображается во 2-м банке CPU (08000h..0bfffh),
а страница 5 - в 1-м банке CPU (04000h..07fffh).
Итого в наше распоряжение поступают такие
страницы: 0, 1, 3, 4, 6, 7.

В странице 7 в первых 6912 байтах может
располагаться картинка, включить отображе-
ние которой можно установив бит D3 порта 07ffdh.

Бит D4 сбрасывается при работе расширенного
интерпретатора Бейсика-128, поэтому при
работе пользовательских программ этот бит
должен быть установлен (иногда, правда,
необходимо бывает воспользоваться некото-
рыми подпрограммами расширенного интерпре-
татора, тогда этот бит сбрасывают).

Бит D5 устанавливают, если предполагается
заблокировать вывод в порт 07ffdh для пре-
дотвращения его реконфигурации. Это необходимо,
например, для программ, использующих буфер
принтера (как правило, интерпретатор Бейсика-128
использует буфер принтера как дополнительную
область для процедуры обработки прерываний).

Подключить какую-либо страницу памяти
очень просто:

LD BC,#7FFD ;заносим в BC адрес порта
LD A,%00010000 ;подключаем
; страницу с номером
; 0 и включаем
; ПЗУ ZX-48
OUT (C),A ;собственно вывод в порт

Перед выводом в порт 07ffdh необходимо
запретить прерывания командой DI, а потом
не забыть их разрешить - EI (если, разуме-
ется, они до этого были разрешены).

В шестнадцатиричной системе счисления
вышеперечисленное действие еще более по-
нятно реализуемо:

LD BC,#7FFD
LD A,#10 ;0-я страница
OUT (C),A

при этом остальные страницы подключаются
выводом следующих чисел:

#11 - 1-я
#13 - 3-я
#14 - 4-я
#16 - 6-я
#17 - 7-я

А чтобы "железно" перейти в 48-й режим,
необходимо записать в порт число %00110000
или 48 в десятичной - сразу ясно, что надо
48-й режим...

Теперь - "скорпионовские" страницы. Они
подключаются все в то же адресное прост-
ранство 0c000h..0ffffh, их тоже восемь, но
теперь они могут использоваться все. Пе-
реключение страниц Scorpion'а делает порт
01ffdh:

D0 - блокировка ПЗУ в области 0-го банка CPU;
D1 - выбор ПЗУ Expansion;
D2 - используется для вывода по RS-232C;
D4 - расширение ОЗУ: 0 - страницы 0..7,
1 - страницы 8..15;
D5 - строб CENTRONICS.

Разряд D0 управляет подключением ПЗУ в ад-
ресном пространстве 0-го банка CPU
(00000h..03fffh). Установка - и вместо ПЗУ
установлена одна из страниц ОЗУ (использу-
ется системой iS-DOS Chic).

D1 тоже упрадляет ПЗУ, подключая на место
ранее находившегося "скорпионовское" ПЗУ.
Используется, например, для определения
версии Теневого Сервис-Монитора.

D4. Вот мы и добрались до этого разряда.
Он подключает на место 3-го банка CPU
страницу с номером "pg+8", где pg - стра-
ница, установленная ранее выводом в порт
07ffdh. Иначе говоря, чтобы установить,
например, десятый банк ОЗУ, надо выполнить
след. программу:

LD BC,#7FFD
LD A,#12 ;10 - 8 = 2
OUT (C),A
LD B,#1F ;BC = #1FFD
LD A,#10
OUT (C),A

а чтобы вырнуть стандартную конфигурацию,
надо выполнить:

LD BC,#7FFD
LD A,#10
OUT (C),A
LD B,#1F
XOR A ;A = 0
OUT (C),A

И не забывайте о прерываниях!

============ линия разгрыза ===================

AS> Заранее спасибо !!!

Да не за что... ;-)

С уважением, Юрий.

-+- iS-DOS v4.5 с макросом

от: 812/03.08
кому: Andrey Senichkin
дата: 29 Aug 1997

Приветик тебе Andrey !!!

Как-то жарким летним вечерком, числа
эдак 27-08-97, ровно в 20:47 Andrey Se-
nichkin написал(а) to All на тему 'Перек-
лючение памяти.':

AS> Может кто поможет мне : опишет порты
AS> для переключения памяти на Скорпе и напи-
AS> шет прогу для этого.

Да, вобщем-то, тут и переключать нечего,
просто берешь и устанавливаешь бит D4 в
порте #1FFD, и у тебя получается странич-
ка с номером на 8 большая, чем была. Hап-
ример, была 0 страница, стала - 8; была -
2, стала - 10.
Hапример, нужно установить страницу 10:
PAGE LD A,#12 ; включается 2 стр.
LD BC,#7FFD
OUT (C),A
LD B,#1F ; включается 10 стр.
LD A,#10
OUT (C),A
RET
И все ;)

AS> Заранее спасибо !!!

Да, пожалуйста ;)

With best wishes, Dmitry.

-+- Доска длиной 4.5 метра




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Elite - Кто такой кульный сценер? Элитарные спектрумисты, кто они? Unbeliever и Arty?
Предисловие - В играх ZHAK и TARZAN GOES APE в интрах можно поиграть в игру типа ARKANOID.
Крик души - Не могу молчать.

В этот день...   8 декабря