Системные программы для ZX-Spectrum 128K 1969 г.

Руководство по программированию на языке Бейсик - работа с принтером. Работа с портами. Память.


7.7. РАБОТА С ПРИНТЕРОМ

LPRINT, LLIST, COPY

Скорость обмена с принтером устанавливается командой:

FORMAT "Р", скорость в бодах

Если скорость не установлена, принимается 9600 бод.

Команды LPRINT, LLIST аналогичны PRINT и LIST,но работают с принтером.

Команда COPY передает изображение экрана на принтер.

7.8. РАБОТА С ПОРТАМИ
IN, OUT

Функции IN и OUT используются для чтения и записи в порты ввода/вывода.

IN адрес - чтение

OUT адрес,значение - запись.

Адреса: данных и состояния клавиатуры

IN 62278 - CAPS SHIFT-V
IN 65022 - a-g
IN 64510 - q-т

IN 63486 - 1 -5 (JOYSTICK 2)
IN 61438 - 0-6 (JOYSTICK 1)
IN 57342 - p-y
IN 49150 - ENTER-h
IN 32766 - SPACE-b

7.9. ПАМЯТЬ

Рассмотрим понятие CLEAR.

Глубоко внутри ПК "Спектрум 128К" все записано в виде байтов, т.е. чисел в
диапазоне от 0 до 255.

Каждое место в памяти, где может быть записан байт, имеет адрес, который
является числом от 0 до FFFFh (малое h в конце цифр означает, что число
шестнадцатиричное). Это значит, что адрес может быть записан двумя байтами.

В ПК "Спектрум 128К" используется памяти в два с лишним раза больше, чем
можно удобно использовать. Хотя компьютер "Спектрум 128К" может адресовать
65536 байтов, фактически имеется 131072 байта ЗУПВ и 32768 байтов ПЗУ, что
образует 163840 байтов (160 Кбайт) общего об'ема памяти. Все это скрыто от
процессора путем использования в аппаратуре процесса, называемого страничным
вызовом - БЕЙСИК (и процессор) всегда "видит" память как 16 Кбайт ПЗУ и 48 Кбайт
ЗУПВ.

Карта памяти компьютера "Спектрум 128К" приведена на нижеследующем
рисунке:

Для того, чтобы просмотреть содержимое памяти, воспользуемся командой РЕЕК.
Ее аргументом служит адрес памяти, а результат есть его содержимое. Например,
ниже приведенная программа печатает 21 байт ПЗУ (и их адреса):

10 PRINT "Address"; TAB 8:"Byte"

20 FOR A-0 TO 20

30 PRINT A; TAB 8; PEEK A

40 NEXT A

Чтобы изменить содержимое памяти, мы используем команду РОКЕ. Она имеет
следующий вид:

РОКЕ адрес,содержимое,

где адрес и содержимое есть численные выражения. Например, если Вы выполните
такую команду:

РОКЕ 31000,57,

то байт по адресу 31000 получает новое значение 57. Теперь выполните команду:

PRINT РЕЕК 31000,

чтобы убедиться в этом. Новое значение должно лежать в пределах от -255 до
"Спектрум 128К"55; если значение отрицательно, то к нему добавляется 256.

Теперь рассмотрим подробнее, как используется ЗУПВ.

Память разделена на различные зоны (см. рис.) для записи различных типов
информации.

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

I - буфер печати; 2 - системные переменные;
3 - только в режиме 48К; 4 - дисплейный файл;

5 - атрибуты; 6 - системные переменные;

7 - карты микродрайвера; 8 - информация о каналах;

9 - программа Бейсика 10 - переменные;

II - команда или строка 12 - данные INPUT;
программы, подлежащая

редактированию;

13 - временное рабочее пространство; 14 - стек калькулятора;

15-свободно; 16 - стек машины;

17 - стек GOSUB; 18 - графика, определенная пользователем.

Системные переменные содержат различные элементы информации и сообщат
ПК, в каком состоянии она находится. Они полностью перечислены в нн части этой
главы, но здесь заметим, что имеются некоторые переменные (называемые CHANS,
PROG, VARS, E_LINE и др.), которые содержат адреса границ между различными
областями в памяти. Это не переменные Бейсика и их имена не будут распознаваться
компьютером "Спектрум 128К".

Карты микродрайва используются только с микродрайвером. Обычно там ничего
нет.

Информация о каналах содержит сведения об устройствах ввода и вывода, а
именно, о клавиатуре (вместе с нижней половиной экрана) верхней ча^ти экрана и
печатающем устройстве.

1 - старший значащий байт; 2 - младший значащий байт;

3-2 байта; 4 - номер строки;

5 - длина текста; 6 - текст.

Заметим, что в отличии от всех остальных случаев двухбайтовых чисел в Z80 номер
строки здесь записан так, что сначала идет старший значащий байт, т.е. в том порядке,
в каком Вы их записали.

Численная константа в программе сопровождается ее двоичной формой с
использованием символа CHR$ 14, вслед за чем идут пять байтов самого числа.

Переменные имеют различные форматы в соответствии с их различной природой.
Буквы в именах должны представляться как строки из маленьких букв.

1-2 байта; 2-1 байт;

3-5 байтов каждый; 4 - буква;

5 - общая длина элементов и 6 - число размерностей;

размерность+1 для числа
размерностей;

7-1-я размерность; 8 - последняя размерность;

9 - элементы.

Порядок элементов следующий: первый - элементы, для которых первый индекс
равен 1. Следующий - элементы, для которых первый индекс равен 3 и т.д. для всех
возможных значений первого индекса.

Элементы с заданным первым индексом упорядочены тем же образом с
использованием второго индекса и т.д. до последнего индекса.

Например, элементы массива 3*6 записаны в следующем порядке:

с(1,1) с(1,2) с(1,3) с(1,4) с(1,5) с(1,6)
с(3,1) с(3,2) с(3,3) с(3,4) с(3,5) с(3,6)

I - младший значащий байт;
3-5 байтов;

5-1 байт;
7 - значение;
9 - шаг;

II - номер предложения в строке.
Строка:

2 - старший значащий байт;
4-2 байта;
6 - буква;
8 - предел;
10 - строка цикла;

1 - 2 байта; 2 - 1 байт;

3 - по одному байту каждый; 4 - буква;

5 - общее число байтов и 6 - число размерностей;

размерностей +1 для числа размерностей;

7 - 1-ая размерность; 8 - последняя размерность;

9 - элементы.

Калькулятор есть часть системы БЕЙСИКа, который работает с арифметикой, и
числа, с которыми он оперирует, в большинстве содержатся в стеке калькулятора.

Свободная часть содержит пространство, до сих пор не использованное.

Стек машины есть стек, использованный процессором Z80 для хранения адресов
возврата и т.д. Стек GO SUB упомянут выше.

Байт, "на который указывает" RAMTOP имеет наибольший адрес, используемый
системой БЕЙСИК. Даже NEW, которая очищает ЗУГ1В, делает это только до сих пор.
Так что она не изменяет графику, определениыю пользователем. Вы можете изменить
адрес RAMTOP, поместив число в предложение CLEAR, т.е. выполнить:

CLEAR новое RAMTOP
При этом происходит следующее:

1. Очищаются все переменные

2. Очищается экран как при CLS

3. Графический курсор устанавливается в О

4. Указатель DATA устанавливается в начало

5. Очищается GO SUB стек и устанавливается новый RAMTOP
(высший доступный адрес ОЗУ)

RUN также выполняет CLEAR, но никогда не изменяет RAMTOP.

Используя таким образом CLEAR, Вы можете либо переместить RAMTOP вверх,
чтобы оставить больше места для Бейсика путем занятия места графики,
определенной пользователем, либо Вы можете сдвинуть RAMTOP вниз, чтобы
оставить больше памяти, защищенной от NEW.

УПРАВЛЕНИЕ ПАМЯТЬЮ

Мы упоминали ранее, что ПК имеет гораздо больше памяти, чем доступно
процессору. Поскольку процессор может адресовать только 64К памяти
одновременно, дополнительная память может подключаться и отключаться из этого
объема по желанию. К примеру - телевизор. Хотя он может использовать только один
канал в данный момент времени, всегда имеются еще три канала, которые можно
выбрать, нажав соответствующую кнопку.

Почти то же самое относится и к процессору. Путем установки требуемых битов в
порте ввода/вывода можно выбрать, какую часть из 160 Кбайт памяти требуется
использовать. Большую часть времени БЕЙСИК игнорирует большую часть памяти,
но для игр очень полезно иметь столько памяти ЗУПВ. Посмотрите снова на карту
памяти компьютера "Спектрум 128К", показанную в начале данного раздела. ЗУПВ
2 и 5 всегда находятся в показанных положениях, но нет причин, почему они не могут
размещаться в сменном разделе (COOOh - FFFFh) - однако будет трудно найти этому
какое-либо применение. Элементы ЗУПВ делятся на два типа: ЗУПВ с 4 по 7
состязательные (это значит, что они делят время со схемами видеоканала) и ЗУПВ с
0 по 3 - несостязательные (где процессор имеет исключительное право пользования).
Любой машинный код, который имеет критическое время исполнения (такой, как
музыка или программы связи), должен сохранять все подобные программы в
несостязательных элементах.

Переключатель памяти находится по адресу ввода/вывода 7FFDh (32765
десятичное). Поле бит по этому адресу следующее:

DO... D2 - выбор ЗУПВ;

D3 - выбор экрана;

D4 - выбор ПЗУ;

D5 - замок 48К.

DO... D2 образуют трехбитовое число, которое указывает, какое ЗУПВ помещается
в раз'ем C000...FFF. В БЕЙСИКе обычно используют ЗУПВ 0, а при редактировании
используется ЗУПВ 7 для различных буферов и "набросков". D3 включает экраны:
экран 0 содержится в ЗУПВ 5 (начиная с 4000h) и является тем, который использует
БЕЙСИК; экран 1 содержится в ЗУПВ 7 (начиная с С000) и может использоваться
программами в машинных кодах. Вполне возможно установить экран в ЗУПВ 7 и
затем перелистнуть страницу, сохранив все 48 Кбайт свободными для данных и
программ. D4 определяет, что установлено с OOOOh по FFFFh; ПЗУ редактирования
или ПЗУ 1 (ПЗУ БЕЙСИКа). D5 есть запасное средство: когда этот бит установлен,
машина принимает стандартную конфигурацию Spectrum 48К и вся память сверх 48
Кбайт отключается. Нельзя вернуться в режим ПК 128К иным способом, кроме
отключения или сброса (нажатия кнопки RESET ПК); однако, микросхема звука все
еще управляется через OUT.




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Опровержение - неправильно указаная информация о ремонте.
Демопати - первые полные результаты Chaos Construction'2000.
Наш гость - Megus рассказывает историю создания Star Group (BrainWave).
Мозаика - Как играть в сетевой вариант игры "Laser Squad". Коды уровней к игре "Fire Gear".
От редакции - Задержка с выходом номера газеты.

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