ZX-Ревю 1991 №6 1990 г.

128K - RAM-диск.


128 K

Итак, сегодня мы продолжаем разговор о некоторых особенностях компьютеров с памятью 128К. Мы уже рассмотрели вопросы, связанные с особенностями организации оперативной памяти и знаем, как подключаются дополнительные страницы при программировании в машинных кодах.

Здесь мы рассмотрим работу системы организации памяти в виде так называемого "ЭЛЕКТРОННОГО ДИСКА" (RAM-диска).

Итак, в Бейсике Вы имеете возможность выгружать программы, данные или машинный код на электронный диск примерно таким же образом, как это делается при выгрузке на ленту. Разница, конечно, в скорости этой операции, да и команда немного отличается. При выгрузке на квазидиск - это SAVE!, а при выгрузке на ленту, как Вы знаете, просто SAVE.

Аналогичным образом работают и команды LOAD!, VERIFY!, MERGE!.

Очевидным недостатком электронного диска является то, что все, что на нем хранится, стирается из памяти при выключении питания.

В нашей статье мы рассмотрим организацию системы "электронного диска" с точки зрения логики машинного кода.

Необходимо отметить, что термины "электронный диск", "квазидиск", "RAM-диск" -конечно же очень неточные, поскольку никаких дисков в компьютере нет. Есть 128 килобайт оперативной памяти, а называется система ее использования "электронным диском" только потому, что она имитирует работу как бы с внешним дисководом.

Страница ОЗУ.

В предыдущих выпусках мы с Вами уже говорили о страничной организации памяти и говорили о страницах ОЗУ и страницах ПЗУ. Сейчас мы коснемся страниц ОЗУ несколько глубже. Как Вы помните, в компьютере есть 8 страниц ОЗУ, пронумерованных от 0 до 7, объемом по 16К каждая, что и дает в сумме 128К.

Сейчас же мы добавим к этому, что эти страницы ОЗУ разделены на две группы, которые назовем:

ОСНОВНАЯ ПАМЯТЬ и ПАМЯТЬ ЭЛЕКТРОННОГО ДИСКА.

На Рис. 1 показано распределение страниц ОЗУ по этим группам.

ОСНОВНАЯ ПАМЯТЬ

5

2

0

4000Н 1

0FFFFH 1

ПАМЯТЬ ЭЛЕКТРОННОГО ДИСКА

1

Код 5

1

3

4

6

7

КодО

Код 1

Код 2

Код 3

Код 4

Рис.1

Как видно из рис. 1, основная память содержит три страницы ОЗУ по 16К каждая, что в сумме составляет 48К. Здесь находится память экрана, системные переменные, рабочая БЕЙСИК-программа со своей областью переменных, область информации о каналах, стек калькулятора, графика пользователя и все прочее, чему положено быть. Одним словом, как видите, это раздел 128-го мало отличается от карты памяти стандартной 48-килобайтной машины. Все нововведения коснулись другого раздела ОЗУ - области памяти электронного диска.

Основная память ОЗУ состоит из страниц 5,2,0 (именно в этом порядке). Страница 5 постоянно впечатана, начиная с адреса 4000H, страница 2 - постоянно, начиная с адреса 8000, а страница 0 - при нормальных обстоятельствах, начиная с адреса 0С000К Это означает, что для того, чтобы иметь доступ к одной из этих страниц, Вы должны впечатать ее вместо нулевой страницы, начиная с адреса 0^00H (а ее сохранить и впоследствии восстановить). Итак, нельзя иметь одновременный доступ ко всей памяти электронного диска.

Чтобы упростить дальнейшие рассуждения, введем понятие код страницы ОЗУ. Это не то же самое, что номер страницы. На рис. 1 показано, как кодируются страницы основной памяти и памяти электронного квазидиска. Итак, код страницы - число от 0 до 5.

В прошлых выпусках мы говорили о том, что для обозначения памяти выше 64 килобайт четырех шестнадцатеричных разрядов уже недостаточно и ввели пятый разряд -так, что адрес ^000H обозначает первую страницу ОЗУ и, соответственно, адрес C000H на этой странице, соответственно аналогично можно поступить и с кодами страниц. Рассмотрим начало области памяти электронного диска.

Оно существует на странице ОЗУ с номером 1. Она же - страница с кодом 0. Тогда можно указать на адрес, принадлежащий этой странице, указав на код страницы [0] и на адрес, например C000.

Чтобы избежать путаницы кодов страниц с номерами страниц, мы будем писать код в квадратных скобках.

Итак, начало области электронного диска имеет абсолютный адрес 1C000H, а в терминологии кодов страниц - адрес [0]С000.

Чтобы это было понятнее, вот несколько примеров:

1FFFF = [0]FFFF 3C001 = [1]C001 4D800 = [2]D800 6ЕЕ00 = [3]EE00 7EBEC = [4]EBEC 4000 = [5]4000 ABCD = [5]ABCD F000 = [5]F000

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

В качестве примера рассмотрим такой случай. Нам надо сохранить адрес [4]EBEC в тройном регистре AHL. Тогда регистр A должен содержать 04, а пара HL - число EBEC.

Для чего вообще нужен был переход от номеров страниц к их кодам? Для упрощения операций адресации в машинных кодах. Номера страниц связаны с физической организацией памяти, и потому идут, как видно из рис. 1 не подряд. Коды же страниц - чисто логическая конструкция, и потому идут подряд и манипулировать с ними проще. Например:

Пусть AHL содержит адрес какого-либо байта в памяти электронного диска. Как отыскать адрес следующего за ним байта (Рис.2):

Увеличили адрес на единицу Проверили старший разряд на 0. Поскольку в нормальных условиях там всегда единица, то появление нуля будет свидетельствовать о том, что страница исчерпана.

Если не 0, то все в порядке и возврат. В противном случае переходим на новую страницу и выставляем ее начальный физический адрес C000.

Увеличиваем на единицу номер страницы. Возврат.

INC HL BIT 7,H

RET NZ LD HL,C000

INC A RET

Рис.2

А теперь представьте, во что бы превратилась эта нехитрая процедура, если бы мы использовали не коды страниц, а их физические номера. Ведь нельзя же было бы использовать простую и быструю операцию INC A.

На этом мы прервемся до следующего выпуска, в котором подробно рассмотрим карту памяти RAM-диска и разберем несколько примеров по работе с RAM-диском из машинного кода.




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



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

Похожие статьи:
Новости - Халло ,всем пользователям рулез-компьютера Speccy.
Лоцман - О игре SubSunk.
Психоделический гуру - Трудно найти в истории молодежных движений 60-х годов фигуру более противоречивую, даже сканлдальную, чем Тимоти Лири.
Системки - Разработка с помощью NedoOS
ANSI и ASCII ART - Видали мы графику с некоторых летних party. Ну это нечто! А на Конструкциях Хаоса сплошной бред!

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