ZX Review #7-8-9-10
08 ноября 1997

Читатель-читателю - ZX Spectrum 128 - новые возможности, новые проблемы.

(c) В.Сироткин

         SPECTRUM 128 -
       НОВЫЕ ВОЗМОЖНОСТИ,
         НОВЫЕ ПРОБЛЕМЫ

   Дальнейшим  развитием  'СПЕК-
ТРУМ'а стала  модель  с  объемом
памяти  128  килобайт.  Так  как
процессор Z-80 является 8-и раз-
рядным  процессором, и  адресное
пространство у него физически не
может простираться выше значения
#FFFF (65535), то расширение па-
мяти компьютера было сделано  по
методу  перекрытия  16-килобайт-
ных страниц памяти в верхних ад-
ресах компьютера.
   Пользователь получил  в  свое
распоряжение 8  страниц  памяти,
которые он мог по желанию перек-
лючать в любой момент времени.
   Основное  же  адресное  прос-
транство компьютера осталось для
пользователя как бы без  видимых
изменений.
   Наличие 128 килобайт  еще  не
означало, что для Спектрума ста-
ло  возможно  писать   программы
длиною больше, чем 48  килобайт,
но если программу  разбивали  на
части и загружали их по частям в
дополнительные  страницы  ОЗУ, а
потом  в  определенные   моменты
времени вызывали  эти  страницы,
то, естественно, создавалась ил-
люзия огромного  рабочего  прос-
транства компьютера  (такой  ме-
тод работы называется ОВЕРЛЕЕМ).
   128 килобайт позволили  пере-
вести многие программы (у  кото-
рых были подгружаемые уровни или
многостадийная,   многоуровневая
загрузка) в режим: "загрузка  за
один раз - все сразу".
   Владельцы  Спектрума-128,  ко
всему прочему, стали обладателя-
ми мощного редактора  для  ввода
программ на языке Бейсик  и, что
самое главное, в компьютере поя-
вился  музыкальный  процессор, с
помощью которого  звуковые  воз-
можности  Спектрума  увеличились
на несколько порядков.

      РАСПРЕДЕЛЕНИЕ ПАМЯТИ

   Итак, у вас появился СПЕКТРУМ
128. Появилось неоспоримое преи-
мущество - наличие  дополнитель-
ной памяти, но одновременно поя-
вилось и множество проблем...  А
как всем этим управлять???
   С точки зрения адресного про-
странства -  все  осталось  так,
как и в  старом  компьютере.  По
тем  же  адресам  экран, систем-
ные переменные и все  остальное.
Правда, теперь у  вас  появилась
еще одна область системных пере-
менных для режима 128 и располо-
жена эта область с адреса  #5B00
(23296)  (да, да, да,  в  буфере
принтера. И не дай Бог, если при
включенном режиме 128 ваши игро-
вые или системные программы  ис-
пользуют буфер принтера - нарве-
тесь на  неприятности!!!  А  так
как очень многие программы СПЕК-
ТРУМа-48 используют эту область, 
то для  их  нормального  запуска
необходимо или выходить из режи-
ма 128 Кб в режим 48 Кб, или пе-
ределывать программы).
   Память  ОЗУ  компьютера  (так
же, как и в старом)  простирает-
ся с #4000 до #FFFF. Верхняя об-
ласть ОЗУ - с адреса #C000 и  до
конца - называется оверлейной, и
вот в эту-то область как  раз  и
может  включаться  любая  из   8
страниц  ОЗУ  (естественно, лишь
одна!)
   Сразу после включения компью-
тера  в  эту  область   включена
страница 0.
   За всем  остальным  простран-
ством ОЗУ компьютера ЖЕСТКО  за-
креплены  следующие  страницы: с
#4000 до #7FFF - страница  5,  с
#8000 до #BFFF - страница 2.
   Из всего  этого  следует, что
можно получить ситуацию, когда в
рабочем пространстве  компьютера
одновременно по  разным  адресам
будет:

1) страница 5 - и с адреса #4000
   (жестко)  и  с  адреса  #C000
   (оверлей)

ИЛИ !
2) страница 2 - и с адреса #8000
   (жестко)  и  с  адреса  #C000
   (оверлей)

ИЛИ !
3) страница 7 - и с адреса #4000
   (замещение)  и с адреса #C000
   (оверлей)

   Дополнительные    возможности
предоставляет  страница  7  (или
дополнительное  видео-ОЗУ).  Эта
страница может замещать  страни-
цу 5  (основное  видео-ОЗУ), что
дает богатую пищу  для  програм-
мных трюков с выводом видеоизоб-
ражения.
   Необходимо  только   помнить,
что все системные процедуры  пе-
чати, вывода графики  и  т.п.  в
любом случае работают  со  стра-
ницей 5, т.е. с основным  видео-
ОЗУ!
   Для  того, чтобы  работать  с
дополнительным  видео-ОЗУ, стра-
ницу  7  впечатывают  с   адреса
#C000, строят (или загружают) по
этим адресам  видеоинформацию, а
затем включают страницу 7  вмес-
то страницы 5, и все, что было с
адреса #C000, мгновенно проявит-
ся на экране (с  адреса  #4000).
Распределение адресов  экрана  в
7-й странице в этом случае будет
таким:

пикселы экрана с #C000 до #D7FF
                (49152)  (55295)

атрибуты (цвет) с #D800 до #DAFF
                 (55296) (56063)

   Все переключения страниц ОЗУ,
а также переключение ПЗУ-48/ПЗУ-
128 и режим ЗАЩЕЛКА 48Кб возмож-
ны через системный порт с  адре-
сом:

          #7FFD (32765)

   Соответственно, командой  OUT
32765,xx можно управлять  конфи-
гурацией компьютера.  Ниже  дана
раскладка битов этого порта:

                  СИСТЕМНЫЙ ПОРТ #7FFD (32765)

       ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
       │  7  │  6  │  5  │  4  │  3  │  2  │  1  │  0  │
       │     │     │     │     │     │     │     │     │
       └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
                      ^     ^    ^     ^     ^     ^
                      │     │    │     └─────┴─────┘
                      │     │    │     Номер страницы ОЗУ
                      │     │    │      с адреса #C000
                   Защелка  │    │
                   48 Кб    │    └─- Страница Видео-ОЗУ
                            │         0 - рабочая (5-я)
                            │         1 - дополнительная
                            │                  (7-я)
                            │
                            └──── 0 - ПЗУ 128 Кб
                                  1 - ПЗУ 48 Кб

   6 и 7 биты в Спектруме-128 не
используются.  Могут применяться
для расширения ОЗУ компьютера до
512 Кбайт.
   Правила работы в системе  128
Кб и с  системным  портом  #7FFD
(32765).
   Если вы работаете с системным
портом  из  БЕЙСИКа-128, то  вам
необходимо помнить, что:

 - перед  переключением  страниц
   ОЗУ желательна команда  CLEAR
   32767, чтобы не сбить систем-
   ный стек.

 - прежде, чем  занести  байт  в
   системный  порт,  он   должен
   дублироваться  в    системной
   ячейке BANK_M с адресом #5B5C
   (23388)

 - управлять переключением стра-
   ниц из  Бейсика  можно  путем
   занесения байта  в  системную
   ячейку BANK_M (подавать  байт
   в порт в этом случае не  нуж-
   но).

 - если для своих нужд вы перек-
   лючились  на   дополнительное
   ВИДЕО-ОЗУ, то при  выходе  из
   вашей программы система авто-
   матически активизирует ОСНОВ-
   НОЕ видео-ОЗУ.

 - при включении 7-й страницы на
   экран (вместо 5-й) 7-я  стра-
   ница может оставаться на  эк-
   ране при любых других  перек-
   лючениях страниц ОЗУ.

 - занесение информации в допол-
   нительное видео-ОЗУ  (7 стра-
   ница) возможно только  тогда,
   когда она включена  с  адреса
   #C000.

 - если вы из Бейсика  вызываете
   процедуру, написанную  в  ко-
   дах, которая работает с  сис-
   темным портом, то первой  ко-
   мандой этой процедуры  должна
   быть  команда  'DI' -  запрет
   прерывания.

 - так как все  команды  Бейсика
   автоматически  включают    на
   время своей работы бит 4 сис-
   темного порта, т.е.  включают
   ПЗУ 48 Кб, то при  работе  из
   Бейсика  с  системным  портом
   или с переменной  BANK_M  же-
   лательно принудительно  вклю-
   чать бит 4 (значит, байт опе-
   рации по  переключению  стра-
   ниц ОЗУ  должен  быть  суммой
   числа #10 (16) с нужным  бай-
   том).  При  окончании  работы
   вашей Бейсик-программы систе-
   ма сама активизирует ПЗУ-128.

 - если вы запускаете  программу
   (неважно, с ленты или с  дис-
   ка), которая ранее работала в
   Спектруме-48, смотрите, чтобы
   во время загрузки  не  запор-
   тился  буфер  принтера, иначе
   система зависнет.

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

   Бейсик-128 почти ничем не от-
личается  от  Бейсика-48,  разве
что мощным экранным  редактором,
да тем, что операторы надо наби-
рать побуквенно (что очень  сни-
жает скорость  набора  программ,
да и возможность  набора  цвето-
вых атрибутов в строке Бейсика у
этого редактора отсутствует).
   По  сути,  ПЗУ-128  постоянно
обращается к ПЗУ-48 за  процеду-
рами выполнения  Бейсик-програм-
мы. В самом ПЗУ-128 почти ничего
интересного  нет:  программа-ре-
дактор, процедуры, обслуживающие
музыкальный процессор по  опера-
тору 'PLAY', да программа  рабо-
ты с виртуальным диском  (опера-
торы CAT!, SAVE!, LOAD!, MERGE!,
ERASE!)
   Тем, кто спит и видит, как бы
покопаться в ПЗУ-128 - совет:  в
ПЗУ-128 нельзя войти ни отладчи-
ками, ни  дизассемблерами.  Даже
на диск и ленту простыми  спосо-
бами ее не запишешь.
   Выход  один - написать  прос-
тенькую программу в  кодах  типа
этой и запустить ее из  Бейсика-
128:
140.
          org ????     ; область запуска
start     di           ; запретим прерывания
          ld a,0       ; байт для системного порта
          ld bc,#7ffd  ; системный порт
          out (c),a    ; ВКЛЮЧИМ ПЗУ-3128
          ld hl,0      ; и теперь перекинем
          ld bc,#3fff  ; все содержимое ПЗУ
          ld de,3#????  ; в свободное место
          ldir
          ei           ; разрешим прерывание
          ret          ; выйдем
2
   Перекинув содержимое  ПЗУ-128
в свободное место ОЗУ, можно те-
перь  оттуда  сохранить  его  на
диск или ленту.
   Кто  выписывал  или   покупал
журналы ZX РЕВЮ за прошлые годы,
тот может узнать много  интерес-
ного о СПЕКТРУМЕ-128...  Ну нап-
ример:

 - как выходить в  Бейсик-48  из
   режима  128, не  останавливая
   программу и сохраняя  возмож-
   ность  переключать   страницы
   ОЗУ и возвращаться обратно;   

 - как  работать  с  виртуальным
   диском  методом  "канального"
   управления;

 - что можно выжать  из  систем-
   ных переменных 128К и многое,
   многое другое.

   Нас  же,  в  первую  очередь,
должен волновать вопрос: "А  как
обстоят дела с  дисковой  систе-
мой?"  А точно так же, как  и  в
старом компьютере! Только появи-
лось  огромное  преимущество   -
есть куда загружать  файлы, есть
много свободного места под прог-
раммы  работы  с  диском.   Знай
только переключай страницы ОЗУ.
   Все это так, но как только  у
вас  программа  пойдет  по  пути
загрузки  через   дополнительные
страницы ОЗУ, так сразу же може-
те забыть о своих приятелях, ко-
торые еще не  смогли  приобрести
Спектрум-128 и  работают  на  48
килобайтах.
   Нормальным выходом  из  такой
ситуации является метод настрой-
ки  программы   на   архитектуру
компьютера.    Если    компьютер
'128-й' - включается  одна  под-
программа, и  загрузка  происхо-
дит через дополнительные страни-
цы ОЗУ  (включается фоновая  му-
зыка для музпроцессора  и  т.д.)
Если же компьютер '48-й', то все
происходит  по-другому   (пример
такой настройки - это такие  ши-
роко  известные  программы,  как
"RICK DANGEROUS 2", "SNOW.STREA-
KER", системная оболочка "CONVER
COMMANDER" Ковалевского и  много
других).

   Программно  определять  архи-
тектуру компьютера можно  разны-
ми путями:

 - сканировать  область   буфера
   принтера на наличие системных
   переменных для '128-го';

 - попытаться 'включить' ПЗУ-128
   и считать из него информацию;

 - записать информацию в адрес с
   #C000, а потом, подав в  сис-
   темный порт  байт  переключе-
   ния страниц  ОЗУ, проанализи-
   ровать - произошло  ли  пере-
   ключение.

   Но если вы выбрали  путь  для
своей программы  "только 128 ки-
лобайт"  (а таких  программ  уже
достаточно много), то хотя бы  в
заставке   программы   выводите:
"128 ONLY".
   А теперь поговорим о "МАГИК"-
файлах в свете имеющихся 128 ки-
лобайт.
   Если вы сбрасываете  програм-
му, которая  не  использует  до-
полнительные страницы ОЗУ, то  в
этом случае МАГИК-сброс ничем не
отличается от МАГИКА-48. Если же
программа, которую вы сбрасывае-
те, использовала  дополнительные
страницы ОЗУ, то наряду с основ-
ным файлом @, на диске образовы-
ваются файлы с  именами  @0, @1,
@2, @3, @4, @5, @6, @7 по номеру
страницы.  Не  все,  конечно,  а
только те страницы, которые  бы-
ли  задействованы  в   программе
(т.е. те, в которых была  какая-
то информация на момент сброса).
   Эти файлы всегда имеют  длину
#4000 (16384) и стартовый  адрес
#C000 (49152).  Также  сбрасыва-
ется файл  с  именем  '@8' - это
файл, который содержит  страницу
дополнительного видео-ОЗУ.
   Основной файл с именем  '@' -
это рабочая область компьютера с
адреса #4000  по  #FFFF  (как  в
обычном МАГИК-файле).
   Запустить МАГИК-сборку  прос-
той командой "GO TO" уже не  по-
лучится. Для запуска  вам  будет
необходимо   сначала   загрузить
файлы в соответствующие  страни-
цы, а потом уже командой "GO TO"
запускать основной файл.
   Предположим, что после  нажа-
тия МАГИКа у вас на диске  обра-
зовались следующие файлы:

       @  - основной файл
       @1 - 1-я страница
       @7 - 7-я страницa

   Тогда в Бейсике запуск МАГИК-
сборки  может  иметь   следующий
вид:

10 CLEAR 32767
20 POKE 23388,7+16
       (включим страницу 7 и основное ПЗУ)
30 RANDOMIZE USR 15619:REM:LOAD "@7" CODE
       (загрузим страницу 7)
20 POKE 23388,1+16
       (включим страницу 1 и основное ПЗУ)
30 RANDOMIZE USR 15619:REM:LOAD "@1" CODE
       (загрузим страницу 1)
20 POKE 23388,16
       (включим страницу 0 и основное ПЗУ)
30 RANDOMIZE USR 15619:REM: GOTO "@" CODE
       (загрузим и запустим основной файл)

   Все файлы МАГИК-сборки  можно
переименовать и дать  им  другие
имена, не  забывая, конечно, ка-
кой файл какой странице ОЗУ при-
надлежит. И, естественно, не за-
бывайте, что программа, работаю-
щая во  втором  прерывании, дол-
жна  иметь  в  имени   основного
МАГИК-файла первый символ '$'!

   И в заключение приведем  таб-
лицу всех  системных  переменных
"128-го" компьютера.

        Системные переменные Sinclair ZX Spectrum 128
  ┌──────┬───────┬───────────┬──────────────────────────────┐
  │ HEX  │  DEC  │ len/name  │         НАЗНАЧЕНИЕ           │
  ├──────┼───────┼───────────┼──────────────────────────────┤
  │ 5B00 │ 23296 │ 20 SWAP   │  Страничная подпрограмма     │
  │ 5B14 │ 23316 │ 9 AYOUNGER│  Страничная подпрограмма     │
  │ 5B1D │ 23325 │ 18 ONERR  │  Страничная подпрограмма     │
  │ 5B2F │ 23343 │ 5 PIN     │  Подпрограмма ввода RS232    │
  │ 5B54 │ 23348 │ 22 POUT   │  Подпрограмма вывода метки   │
  │      │       │           │                       RS232  │
  │      │       │           │  Можно применить для обхода  │
  │      │       │           │   фильтра кода управления    │
  │ 5B4A │ 23370 │ 14 POUT2  │  Подпрограмма вывода символа │
  │      │       │           │                       RS232  │
  │ 5B58 │ 23384 │ 2 TARGET  │  Адрес подпрограммы в ПЗУ-1  │
  │ 5B5A │ 23386 │ 2 RETADR  │  Адрес возврата в ПЗУ-0      │
  │ 5B5C │ 23388 │ 1 BANKM   │  Копия последнего байта      │
  │      │       │           │   вывода в банк              │
  │ 5B5D │ 23389 │ 1 RAMRST  │  Команда RST 8               │
  │ 5B5E │ 23390 │ 1 RAMERR  │  Номер ошибки ПЗУ-1          │
  │ 5B5F │ 23391 │ 2 BAUD    │  RS232: период бита в        │
  │      │       │           │         Т-состоянии/26       │
  │ 5B61 │ 23393 │ 2 SEREL   │  Флаг возврата 2-го символа  │
  │      │       │           │   и данные                   │
  │ 5B63 │ 23395 │ 1 COL     │  Текущий столбец от 1 до     │
  │      │       │           │   ширины                     │
  │ 5B64 │ 23396 │ 1 WIDTH   │  Ширина столбца бумаги       │
  │ 5B65 │ 23397 │ 1 TVPARS  │  Число параметров в строке,  │
  │      │       │           │   ожидаемое RS232            │
  │ 5B66 │ 23398 │ 1 FLAGS3  │  Различные флаги             │
  │ 5B67 │ 23399 │ 10 NSTR1  │  Имя файла                   │
  │ 5B71 │ 23409 │ 1 HD00    │  Код типа файла              │
  │ 5B72 │ 23410 │ 2 HD0B    │  Длина блока                 │
  │ 5B74 │ 23412 │ 2 HD0D    │  Начало блока                │
  │ 5B76 │ 23414 │ 2 HD0F    │  Длина программы             │
  │ 5B78 │ 23416 │ 2 HD11    │  Номер строки                │
  │ 5B7A │ 23418 │ 1 SC00    │  Второй набор - код типа     │
  │      │       │           │                    файла     │
  │ 5B7B │ 23419 │ 2 SC08    │  Второй набор - длина блока  │
  │ 5B7D │ 23421 │ 2 SC0D    │  Второй набор - начало блока │
  │ 5B7F │ 23423 │ 2 SC0F    │  Второй набор - длина        │
  │      │       │           │                  программы   │
  │ 5B81 │ 23425 │ 2 OLDSP   │  Старое SP, когда использу-  │
  │      │       │           │    ется T TACK               │
  │ 5B83 │ 23427 │ 2 SFNEXT  │  Указатель на первый пустой  │
  │      │       │           │   вход справочника           │
  │ 5B85 │ 23429 │ 3 SPSPACE │  Число оставленных байтов    │
  │      │       │           │                   (17 бит)   │
  │ 5B88 │ 23432 │ 1 ROW01   │  Флаги планшета и образ      │
  │      │       │           │   ряда 1                     │
  │ 5B89 │ 23433 │ 1 ROW23   │  Образы строк 2 и 3 клавиа-  │
  │      │       │           │   туры                       │
  │ 5B8A │ 23434 │ 1 ROW45   │  Ряды 4 и 5 клавиатуры       │
  │ 5B8B │ 23435 │ 2 SYNRET  │  Адрес возврата для ONERR    │
  │ 5B8D │ 23437 │ 5 LASTV   │  Последнее значение, напеча- │
  │      │       │           │  танное калькулятором        │
  │ 5B92 │ 23442 │ 2 RNLINE  │  Текущая запомненная строка  │
  │ 5B94 │ 23444 │ 2 RNFIRST │  Номер строки начала для     │
  │      │       │           │   RENUMBER                   │
  │ 5B96 │ 23446 │ 2 RNSTEP  │  Величина приращения для     │
  │      │       │           │   RENUMBER                   │
  │ 5B98 │ 23448 │ 8 STRIP1  │  Карта бит полосы 1          │
  │ 5BA0 │ 23456 │ 8 STRIP2  │  Карта бит полосы 2          │
  │ 5BFF │ 23551 │XX TSTASK  │  Временный стек растет       │
  │      │       │           │   отсюда вниз                │
  └──────┴───────┴───────────┴──────────────────────────────┘

           *   *   *





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

Похожие статьи:
Юмор - последняя встреча с Иконгнито на Спектруме.
Иcтoрия BLАCK MEТАL - oт Mankubus.
Проходилка - пошаговое прохождение игры Зеркало.

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