Уважаемый ИНФОРКОМ! В своей разработке "Большие Возможности Вашего СПЕКТРУМа" Вы пишете о том, что в 128 килобайтных моделях область памяти, которая в 48 килобайтных машинах отводилась для буфера принтера, теперь занята новыми системными переменными. Эта область расположена в адресах с 23296 по 23551. Но как же так, ведь у компьютеров с памятью 128К размер ПЗУ равен 32К? Почему же в его пределах может существовать область системных переменных?
Вопросы, подобные приведенному, нам задают многие читатели. И это не случайно. Если информационный голод по 48-килобайтным машинам еще как-то утоляется, в том числе и нашими стараниями, то про модели 128К этого пока сказать нельзя. Многие просят рассказать об организации памяти в этом компьютере, а она действительно несколько необычна, дело в том, что SINCLAIR RESEARCH, приступая к этой разработке поставила задачу добиться в первую очередь максимальной совместимости со своими предыдущими моделями SPECTRUM 16 и SPECTRUM 48 как по программному обеспечению, так и по имевшемуся периферийному окружению. Именно это требование и наложило серьезный отпечаток на организацию памяти в новой модели.
В нескольких номерах ZX-РЕВЮ мы поделимся с Вами тем, что знаем по этому вопросу.
Во-первых, основным отличием этой модели от своих предшественников является очевидно значительное увеличение как оперативной, так и постоянной памяти. Фактически "СПЕКТРУМ 128" имеет 32К ПЗУ и 128К ОЗУ, т.е. всего 160 килобайт. Отнюдь немалое количество для домашнего ПК! И организована эта память в страницы. Страница - это просто отдельный блок памяти. Каждая страница имеет 16 килобайт и, тем самым, в 128-килобайтных машинах можно выделить 2 страницы ПЗУ и восемь страниц ОЗУ.
2*16K = 32К (ПЗУ)
8*16К =128К (ОЗУ)
Те, кто читал уже наши разработки, знают, что в обычном "СПЕКТРУМЕ-48" память непрерывна и имеет 65535 байтов (64К). В шестнадцатеричной системе ее адреса записываются от 0000 до FFFF, причем первые 16К, т.е. от 0000 до 3FFF занимает ПЗУ, а остальное - ОЗУ. Понятно, что если мы хотим записать адреса в компьютере, имеющем больший объем памяти, то четырех знаков шестнадцатеричных чисел нам уже недостаточно, и необходимо вводить пятый знак, тогда адреса могут записываться, скажем 13579 или, скажем, 6ABCD.
Для того, чтобы разобраться как все это работает, давайте рассмотрим сначала организацию ПЗУ, ответив на вопрос нашего читателя.
ПЗУ организовано в две страницы, каждая из которых имеет по 16К. Первая страница имеет адреса от 00000 до 03FFF и называется ПЗУ-0, или "Новым ПЗУ". Когда Вы впервые включаете компьютер в сеть, или нажимаете кнопку RESET, если у Вас она есть, то происходит старт с нулевого адреса именно этого ПЗУ. "Новое ПЗУ" действительно совершенно новое, его не было в моделях 48К.
Вторая страница ПЗУ называется ПЗУ-1 и имеет адреса от 10000 до 13FFF. Его иногда называют "Старым ПЗУ". Хоть в него и были внесены небольшие изменения, но практически оно соответствует тому ПЗУ, которое стоит в 48-килобайтных компьютерах. Обратите внимание, что теперь уже адресное пространство не является непрерывным, т.е. есть очевидный зазор между концом нулевого ПЗУ 03FFF и началом первого ПЗУ -10000.
Сердцем компьютера является, как известно процессор. Синклер-совместимые компьютеры собраны на процессоре Z-80, который может работать с 16-битной адресацией. Другими словами, адресное пространство, которое в состоянии обслужить этот процессор, составляет 2 в шестнадцатой степени байтов, т.е. 64 килобайта, точнее 65536 адресов, никаких других адресов вне этих процессор не знает и знать не может.
Поэтому в командах процессора все адреса могут выражаться только четырьмя разрядами шестнадцатеричных чисел, но никак не пятью. Например, команда CALL может быть записана только как CALL nnnn. но никак не как CALL xnnnn. Точно также и все регистры процессора, даже двойные никак не могут содержать числа больше 4-х разрядов (в шестнадцатеричном виде), где же выход? Как работать с адресами ПЗУ типа 03463 или 12466?
А выход очень простой, он состоит в том, что команда CALL 2466 означает то же самое, что и команда CALL 02466, и то же самое, что и CALL 12466. Все зависит только от того, какая страница ПЗУ подключена в данный момент - нулевая или первая. Процессору все равно, с какой работать, но только с одной. Обе вместе не могут быть подключены, или, как говорят "впечатаны", никогда.
Поскольку существуют только два ПЗУ, то конечно такие адреса, как скажем А2468 не могут существовать, но те, кто разрабатывают разнообразные периферийные устройства с "теневым" (замещающим) ПЗУ могут рассматривать их адресные пространства как 2-ую страницу ПЗУ, третью и т.д. Надо только позаботиться, чтобы она была правильно впечатана в нужное время и в нужное место. О том как впечатываются страницы в 128-килобайтных "СПЕКТРУМах" мы расскажем в следующем выпуске, а сейчас остановимся на страничной организации ОЗУ.
Адресное пространство ОЗУ составляют адреса от С000 до FFFF и, так же как и для ПЗУ, сюда может быть впечатана только одна страница, страницы ОЗУ нумеруются от 0 до 7, всего их восемь и, соответственно, адреса ОЗУ могут быть представлены для соответствующих страниц как:
0ЗУ-0 0С000 - 0FFFF;
ОЗУ-1 1С000 - 1FFFF;
ОЗУ-6 6С000 - 6FFFF;
ОЗУ-7 7С000 - 7FFFF.
То ОЗУ, которое в данный момент впечатано, считается текущим ОЗУ или, иначе говоря, текущей страницей, номер текущей страницы таким образом, задается числом от 0 до 7, а с прочими числами, входящими в адрес, процессор работает как с обычными четырехразрядными шестнадцатеричными числами.
Теперь внимательный читатель наверное уже почувствовал, что здесь что-то не так.
Мы сказали выше, что все адреса от х0000 до x3FFF принадлежат ПЗУ, а все адреса от хС000 до xFFFF принадлежат ОЗУ, а куда же подевались адреса от 4000 до BFFF, т.е. целых 32К?
Ответ достаточно неожиданный. Этот участок разбит на два блока по 16К.
Первый - от 4000 до 7FFF.
Второй - от 8000 до BFFF.
За первым постоянно закреплена пятая страница ОЗУ, а за вторым - страница 2. Итак, вторая и пятая страницы имеют постоянное закрепленное за ними место, да еще могут впечатываться в верхние 16K компьютера, как и все другие страницы. Возникает интересная ситуация, когда адрес 4000 означает то же самое, что и 5C000. Соответственно тождественны и адреса:
5000 и 5D000 6000 и 5E000
7000 и 5F000. То же относится и к странице 2.
Таким трюком К.Синклер создает иллюзию непрерывности адресного пространства в 128-килобайтних машинах, этим закладывается возможность программной совместимости с предыдущими моделями. С точки зрения процессора теперь любой доступный ему адрес от 0000 до FFFF физически что-то означает. В каждом адресе всегда есть ячейка памяти, причем ячейки от 0000 до 3FFF представляют ПЗУ, а остальные - ОЗУ. Да и ОЗУ простирается непрерывно от 4000 до FFFF, все как в обычных "CnEKTPyMax".
На этой мы прервемся до следующего номера, в котором расскажем о том, как выполняется впечатывание страниц ПЗУ и ОЗУ, а заодно расскажем о том малоизвестном факте, что компьютеры 128К имеют две экранных области вместо одной.