Программирование - курс изучения ассемблера от 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. Пример будет яркий и характерный!
Пишите письма!
[ Продолжение следует ].
╔═══════════════════════════════
Другие статьи номера:
|
|
|
|
|
|
Программирование - курс изучения ассемблера от Wlodek Black, продолжение. Организация памяти.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|