Электронные устройства для "Sinclar ZX Spectrum" 1993 г.

Программное обеспечение - коды или бейсик? Программирование в машинных кодах для начинающих.


2. ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
КОМПЬЮТЕРА

Компьютер "СПЕКТРУМ" может выполнять программы как написанные на БЕЙ-
СИКЕ, так и в машинных кодах микропроцессора Z80. Оба типа программ нашли
широкое применение. Программы написанные в машинных кодах непосредственно
оперируют с адресами, данными, регистрами микропроцессора, поэтому они работа-
юте весьма высокой скоростью, выполняя 875000 операций в секунду. Например, для
пересылки 6000 байт из экранной области в другую и обратно требуются доли секун-
ды. В электронных играх этот прие^*1ШКШЛуется для создания движущихся изобра-
жений. ,/ '

Программа принимает сШй&тл и данные от клавиатуры и входных портов и затем
генерирует выходные сшШлы для данных и выходиых портов.

2.1. МЛШИтЩЁ КОДЫ ИЛИ БЕЙСИК ?

Для выполнения программы вЦ&шинных кодах необходимы некоторые операторы
БЕЙСИК, например: --J-. 4 ;

10 LET L - USR 62000 y ; .

В тех случаях коща скорость выполнения программ недостаточна используются
подпрограммы написанныёв машинных кодах. К^мё того команды БЕЙСИКА сами
являются подпрограммами в' мштднных кодах которые выполняются одна после дру-
гой. Например программа на ВВЙШС^вь^^Щая точку на экран:

10 PLOT 50,100 "

состоит из профамм в машинных кодах:

10 - Интерпретатор БЕЙСИКА "зашитый" в ПЗУ преобразует номер строки в два
байта в соответствующей области памяти. В этой области содержится информация о
последовательности выполнения команд.

PLOT - Интерпретатор БЕЙСИКА вызывает программу MONITOR, состоящую из
большого количества машинных команд, хранящихся в памяти в виде 8 и 16-разряд-
ных слов.

50 - Этот номер преобразуется подпрограммой PLOT в х-координату соответству-
ющей тощи HaJV дисплее (см^разд^л 2*2jL^.^ --•—- =,. :

, - ПоЩрмусимво^г определяютсйгзко^вц числа 50*1 началочисла 1 ООв программе
МОК1ТОЙШспольз6вгшие в качестве разделителя любого яруфпр символа приводит
к ошибке - попробуйте/ Ц- : I

100 - ВтфЮй ндмер П1>еобра^^ётся программойР®Т в^координат^Шответству-
ющей точки на TV дисплее.

ENTER - При вводе программы эта последняя команда идентифицируется как
конец числа 100.

RUN - Запускает выполнение программы.

В результате выполнения программы в соответствующую ячейку экранной области
памяти записывается двоичная "1" и на экране засвечивается точка с координатами
50,100 <см. раздел 1.3). Конец программы определяется по отсутствию следующих
номеров строк и компьютер переходит в режим ожидания (ОК).

Для работы с описанными в этой книге схемами используются программы на
БЕЙСИКЕ и в машинных кодах. Предполагается, что с БЕЙСИКОМ Вы уже знакомы,
а. с программированием в машинных кодах рекомендуем познакомиться.

2.2. ПРОГРАММИРОВАНИЕ В МАШИННЫХ
КОДАХ ДЛЯ НАЧИНАЮЩИХ

Не стоит пугаться программирования в машинных кодах. Обычные пользователи
знакомые с БЕЙСИКОМ считают программирование в машинных кодах сложным и
запутанным делом. Однако для повышения скорости работы программ, например,
программирование в машинных кодах - основной способ. Понятно, что перенести
картинку из одной области памяти в другую лучше за 1 /30 секунды, чем за 30 секунд.
Использование SCREEN $ наглядно демонстрирует это.

Программы написанные в машинных кодах отличаются от программ на БЕЙСИКЕ
тем, в частности, что отсутствуют номера строк. Для размещения программы можно
использовать любую область памяти имеющую адреса от 24000 до верхней границы
памяти (RAMTOP); для 16 К "СПЕКТРУМА" это 32767, а для 48 К версии - 65535.
Разумно оставлять достаточно памяти для программ на БЕЙСИКЕ, начинающихся с
адреса 23760. Размещение программы в машинных кодах сразу за верхней границей
БЕЙСИКА приводит к нарушению работы системы. Подходящими начальными ад-
ресами для размещения программ в машинных кодах будут 32000 (7D00 в шестнад-
цатиричном коде) для 16 К "СПЕКТРУМА" и 64000 (FA00 в шестнадцатиричном
коде) для 48 К модели.

При загрузке программ в машинных кодах разумно сначала очистить соответству-
ющую область памяти. Например, CLEAR 32000 очищает область памяти с адреса
32000 и предупреждает использование этой области интерпретатором БЕЙСИКА.
Вот несколько методов загрузки программ в машинных кодах:

1. Использование 16-ричного загрузчика:
10 LET D-32000

20 DEF FN А <А$,В) - CODE А$(В)-48

-7+(CODE А$(В)>57)
30 DEF FN C(A$)-16*FN A(A$,1)+FN А(А$2)
40 READ A$:IF A$oH**"THEN

POKE D,FN C(A$):LET D-D+l : 60 TO 40
50 DATA "00V0r,,,0FV....V**"

Строка 50 содержит шестнадцатиричные коды в десятиричном виде, которые
будут расположены в памяти начиная с адреса 32000.

2. Использование оператора REM для резервирования
области под программу в машинных кодах
в начале программы на БЕЙСИКЕ:
1 REM.... любые 50 символов...
10 DATA 6,192,17,10,0,33... (всего 50 чисел)
20 FOR X - 23760 ТО 23810
30 READ V : POKE X,V
40 NEXT X

Этот пример требует ввода 50 чисел до ввода основной программы, которая вызы-
вает программу в машинных кодах
LETL-USR 23760

Строки 10-40 могут быть уничтожены до ввода основной программы, коща машин-
ные коды будут уже загружены в облать памяти, зарезервированную оператором REM
в 1 строке. Загружая программу с листинга можно встретить странную последователь-
ностъ символов в строке 1. Не нужно ее изменять - это программа в машинных кодах
в символическом виде. Важно отметить, что всегда в таких случаях используется
начальный адрес 23760. Одно из достоинств указанного метода в том, что программа
в машинных кодах содержится внутри программы на БЕЙСИКЕ и возможность ее
испортить при выполнении меньше.

3. Загрузка программы в машинных кодах в процессе
загрузки программы на БЕЙСИКЕ, требует
только одной операции загрузки:
10 FOR Х-32000ТО 32050
20 READ М; POKE Х,М ^_; - : ,
30 NEXT X ^ Ш''^" ' '

40 DATA 1,99,0,33*^2 й т.д. всего 51 число.
100 .... далее текстфиовной программын* БЕЙШКЕ.

Количество чисел *зШераторе^ФАТА должно точнб^оответствовать количеству
зарезервированных в строке 10 ячве&^амяти; в нашем примере 51, в противном случае
появится сообщение об ошибкейОЙТ OF DATA ERROp^ При запуске программы
(вводом команды RU^^camnHHbiejIdAH будут загружен^^основная программа будет
вызывать эту прюграмму' как и раньше: Н

LET L - USR 32000 :4 ^ V

Мы выберем 3-ий метдалзд следующим причинам! > :

1. Он прост, только 4 стоишь >

2. В нем не используется Шр^ 1, что затруднительно для
непрофессиональных программистов;^- :

3. Загрузка происходит быстро (около секунды) и не происходит остановки для
удаления лишних строк (как в методе 2).

Взамен

LET L-USR 32000

может быть использована альтернативная команда БЕЙСИКА,
RANDOMIZE USR 32000

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

(RUN). ;= ^ ............................... ...........................................

ПрогрШлма машинных коЩ*, поЩто^йЗ, сохраняема впамяти

даже есл*Щудёт загр^ена новайцроП>г фатБЕЙСИКЕ тц лмашинйых кодах (
в другую Щйсгъ гйяй|| конечЙф7 Прогр£ммана БЕЙСИКЕ мфкет бъщ сохранена
обычным способов*: _,"-:* .У'

SAVE "Имя" когда нужен автозапуск программы.
SAVE "Имя" LINE 1 или

SAVE "Имя" CODE, если в памяти только программа в машинных кодах, или
SAVE "Имя" CODE стартового адреса, длина программы (если нужно сохранить
только часть памяти).

Программирование в машинных кодах заключает в себе следующие основные
элементы:

1. Загрузка констант в регистры HL, ВС, DE.

2. Преобразование, сравнение, перемещение данных путем выполнения различ-
ных операций (увеличение/уменьшение на 1, сложение и т.д.).

3. Ввод и вывод данных из различных регистров, особенно это относится к регистру
А (аккумулятору). Многие программы производят загрузку данных в ячейки экранной
области памяти, начинающейся с ячейки 16384.

4. Вызов программ из ПЗУ "СПЕКТРУМА", например CALL-DRAW.

5. В конце программы в машинных кодах обезателен оператор RET без которого
работа системы нарушается. Этот оператор возвращает управление БЕЙСИКУ.

В Приложении 1 приведены все машинные коды микропроцессора 280 в 16-рич-
ном виде, когда используются шестнадцатиричные загрузчики. В десятичном виде
(для загрузки с помощью оператора DATA) их можно представить с помощью табли-
цы из Приложения 2. Указано также и количество байт в команде. Простая команда
пересылки может быть однобайтной; если используется в команде однобайтовое чис-
ло, то команда двухбайтная; если используется двухбайтное число (например адрес),
то команда состоит из 3-х байт. Вместе с мнемоническим сокращением дано краткое
описание команды.

Регистр HL часто используется для задания адреса ячейки памяти и для изменения
содержимого ячейки:

ld(hl),NN

По этой команде в ячейку памяти загружается шестнадцатиричные число. Адрес
ячейки соответствует числу содержащемуся в регистре HL.

Id hl,00FF

По этой команде в регистр Н загружается число 00, а в регистр L загружается
FF(255).

ld(EE00),hl

По этой команде в ячейку с адресом EE00 (60 928) загружается число 255.

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

Мнемоника Шестнадцатиричный Десятичный

команд код команд код команд

Id hl,00FF 21 33

FF 255

00 0

ld(EE00),hl 22 34

00 0

ЕЕ 238

На рис.2.1 показаны правила выполнения перехода по относительному адресу при
выполнении операции увеличения или уменьшения на 1. (Например jr nz, х). Для
перехода вперёд значение х лежит в интервале 0 - 127(дес.), для перехода назад это
значение лежит в интервале 128 - 254, (значение 255 - переход на следующий адрес,
254 - переход на адрес ячейки где хранится значение х и т.д.) Кроме перехода по
относительному адресу, возможен переход по абсолютному адресу, например JP NN.




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Программинг - Game Making: Mad Killer делится опытом создания игр для ZX Spectrum.
The Final Words Of Wisdom
Подробности - Новая операционная система - NeOS.
Анкета - Zеg/Fеnоmеn.
Учебник - "Ветви персика": Многотомное издание индийских монахов, которые пытаются научить духовной и плотской любви людей (продолжение).

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