Nicron #20
14 февраля 1997

Программирование - курс изучения ассемблера от Wlodek Black, продолжение. Организация памяти.


│ ▒▒▒▒░  ▒▒▒▒░  ▒▒▒▒░ ▒▒▒▒▒▒░▒▒░ ▒▒░▒▒▒▒▒▒░  ▒▒▒▒░▒▒▒▒▒▒░▒▒▒▒▒░│
│▒▒░ ▒▒░▒▒░ ▒▒░▒▒░ ▒▒░▒▒░    ▒▒▒▒▒▒░▒▒░     ▒▒░▒▒░▒▒░    ▒▒░ ▒▒│
│▒▒░ ▒▒░▒▒░    ▒▒░    ▒▒▒▒▒░ ▒▒░ ▒▒░▒▒▒▒▒▒░ ▒▒░▒▒░▒▒▒▒▒░ ▒▒░ ▒▒│
│▒▒▒▒▒▒░▒▒░ ▒▒░▒▒░ ▒▒░▒▒░    ▒▒░ ▒▒░▒▒░ ▒▒░▒▒░ ▒▒░▒▒░    ▒▒▒▒▒░│
│▒▒░ ▒▒░ ▒▒▒▒░  ▒▒▒▒░ ▒▒▒▒▒▒░▒▒░ ▒▒░▒▒▒▒▒▒░▒▒░ ▒▒░▒▒▒▒▒▒░▒▒░z80│
╚──────────────────────────────────────────────────────────────╝

[ Продолжение ]

(C) WLODEK BLACK

Здравствуйте, друзья! Закончился основной "курс"  по ассемблеру,
включающий описание процессора и системы его команд, и...  посы-
пались вопросы и заявки. И это замечательно, потому что наличие
откликов подтверждает нужность рубрики "Ассемблер"; значит,  вы,
друзья мои, находите в ней полезное для себя; значит,  будет  и
продолжение. А потом, почему все я да  я?  Может,  кто-либо  из
опытных программистов тоже готов поделиться свежими "секретами"?
Тогда пишите или звоните. А  пользователи - тоже  пишите!  Ваши
вопросы - наши ответы. А для сегодняшнего  занятия  вы,  друзья
мои, выбрали тему:

	Организация памяти в компьютере "Спектрум-128К".

С предложением рассмотреть эту тему поступило 4 заявки.  (3 воп-
роса пришло по устройству моноблочного  загрузчика,  когда  вся
программа внешне выглядит как один бейсик-файл немеренной длины,
и по компрессии данных - как ужать цифровую дему, например).  О
монозагрузчике поговорим через неделю!

			  ┌────────────────────────┐
			┌─┴──────────────────────┐ │
		      ┌─┴──────────────────────┐ │7│
		    ┌─┴──────────────────────┐ │6│$│
		  ┌─┴──────────────────────┐ │4│ ├─┘
	--------┌─┴──────────────────────┐ │3│ ├─┘
65535	FFFF	│                        │1│ ├─┘
		│        ОЗУ 16К        0│ ├─┘    <- порт #7FFD
49152	C000	│                        ├─┘         (биты 2..0)
	--------├────────────────────────┤
	BFFF	│                        │
		│        ОЗУ 16К        2│
32768	8000	│                        │
	--------├────────────────────────┤
	7FFF	│                        │
		│        ОЗУ 16К        5│
16384	4000	│        $               ├─┐
	--------├────────────────────────┤ │
	3FFF	│                        │0│  <- порт #7FFD
		│        ПЗУ 16К        1│*│     (бит 4)
0	0000	│                       *├─┘
	--------└────────────────────────┘

На  этой  схеме  показано  распределение адресного пространства
128К, или, что то же самое, изображена карта памяти  128-й маши-
ны. Память компьютера поделена на фрагменты объемом по 16К,  на-
зываемыми страницами. Страницы 2 и 5 постоянно включены по  ука-
занным адресам, а в диапазоне адресов #C000..#FFFF может находи-
ться одна из 6-ти страниц - 0,1,3,4,6 или 7.В диапазоне адресов
#0000..#3FFF включено одно из двух ПЗУ - Бейсик-48 или  Бейсик-
128. Управление переключением карты памяти осуществляется  с по-
мощью системного регистра конфигурации, включенного  программно
как порт вывода с адресом #7FFD (32765). Вот назначение его раз-
рядов:

┌──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┐ Порт
│  --  │  --  │Блок. │ ПЗУ  │Экран │ Номер страницы ОЗУ │ #7FFD
│      │      │ 48К  │48/128│      │ в #C000...#FFFF    │<-----
└──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┘
   D7     D6     D5     D4     D3     D2     D1     D0

D0..D2 - номер страницы ОЗУ, включаемой по адресам #C000..#FFFF;
D3 - местонахождение экрана: 0 - с #4000 в странице 5,
			     1 - с #C000 в странице 7;
D4 - которое ПЗУ включено с #0000 по #3FFF: 0 - Бейсик-128;
					    1 - Бейсик-48;
D5 - бит блокировки 48К.

Теперь пояснения: бит D4 задает отображаемую на экране область -
при 0 отображается обычный экран, как в 48-й машине; при 1 ото-
бражается страница 7, причем "верхний", как говорят, экран ото-
бражается, даже когда  7-я страница не включена в карту памяти!
Бит D5 - блокировка режима "48К". Стоит установить этот бит в 1,
как компьютер превратится в 48-ю машину, и обратно уже не верну-
ться (только RESET)!
При вызове функции "USR" в порт #7FFD записано число 16 - пораз-
рядно это %00010000, то есть включено ПЗУ 48К,  0-я страница  и
основной экран. Эта конфигурация и считается основной,  и когда
вам доведется услышать выражение "включить основную память",это
будет означать именно это; говоря языком Бейсика,  OUT 32765,16.
Если активен Бейсик-128, переключать карту памяти через  OUT не
удастся, так как Бейсик-128 сам оперирует с ней. Для  получения
возможности свободно манипулировать страницами нужно отвязаться
от 128-го Бейсика, что можно достичь, например, запуском компью-
тера через сброс в режиме TR DOS, или подать команду  USR 0  из
128-го Бейсика. Но лучше всего для этой цели подойдет  специаль-
ная процедура в машинных кодах,  которая  "на ходу"  обезвредит
128-й Бейсик и переведет исполнение программы в 48-й режим,  но
без блокировки системного регистра конфигурации. Вот ее текст:

	DI
	LD SP,(23613) ; ERR_SP - стек возврата по ошибке
	POP HL ; снимаем старое значение
	LD HL,4867 ; адрес входа в основной цикл Бейсик-48
	PUSH HL ; заносим в стек на прежнее место
	LD HL,7030 ; адрес возврата из USR в 48-м Бейсике
	PUSH HL
	LD HL,23611 ; FLAGS - системная переменная
	RES 4,(HL)
	LD HL,(23631) ; адрес информации о каналах
	LD BC,15 ; смещение до адреса каналов клав./экран
	ADD HL,BC
	LD DE,5556 ; адрес образца канальной информации в 48К
	EX DE,HL
	LD C,4 ; BC=4 - количество пересылаемых байт
	LDIR ; канал клавиатуры/экрана инициализируется на 48К
	EI
	RET ; здесь уже будет работать Бейсик-48.

О том,для чего может понадобиться такая "отвязка", мы поговорим
в следующий раз, когда вместе упакуем и озагрузчим дему  из-под
DIGITAL STUDIO. Пример будет яркий и характерный!
Пишите письма!

[ Продолжение следует ].
  ╔═══════════════════════════════




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

Похожие статьи:
Информация - сегодня в приложении bodY #22.Z
Наши новости - Скоро появится нормальная версия игры NETHER EARTH.
Рассказ - фэнтэзи-рассказ: Фантазия.

В этот день...   17 ноября