Ремонт принтеров, сканнеров, факсов и остальной офисной техники


назад Оглавление вперед




[34]

лера "Агат". Учитывая это при написании программ, рекомендуется использовать следующие соглашения об областях памяти компьютера:

00-FF

- нулевая страница:

100-IFF

- стек МП 6502;

200-2FF

- буфер ввода-вывода;

300-3BF

- программы на ассемблере;

3CO-3FF

- векторы ДОС и монитора;

400-7FF

- страница 1 режима АЦР или ГНР;

800-BFF

- страница 2 режима АЦР или ГНР;

COO-IFFF

- для программ пользователя;

2000-3FFF

- страница 1 режима ГСР или ГВР;

4000-5FFF

- страница 2 режима ГСР или ГВР;

6000-95FF

- для программ пользователя;

9600-BFFF

- ДОС;

C000-CFFF

- ячейки ввода-вывода;.

ГХХЮ-DFFF

- резерв;

F000-F7FF

- интерпретатор языка БЕЙСИК;

F800-FFFF

- системный монитор.

Такое условное разбиение адресного пространства используется при программировании на компьютерах "ПРАВЕЦ-82". "APPLE IT, "APPLE II+" и т.п.

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

Отметим, что интерпретатор языка БЕЙСИК начинает располагать данные с адреса, определенного оператором LOMEM (по умолчанию 808) или директивой ДОС "FP". Команды (строки программы) интерпретатор располагает в памяти начиная с адреса й 801 • Последний байт программы определяется адресом, содержащимся в Д AF и ft ВО. Кроме того, при программировании на языке БЕЙСИК могут быть полезны следующие советы:

используйте по возможности одноцифровые числа;

используйте однобуквенные имена в переменных;

избегайте использовать целочисленные (помеченные символом %) и строковые (помеченные символом ft ) переменные; команду PRINT заменяйте на символ ?;

опускайте имя счетчика цикла на одиночном операторе NEXT; объединяйте два последовательных оператора NEXT в один (например, вместо NEXT I:NEXT J напишите NEXT I,J);

опускайте незначащие нули в дробных числах (.5 вместо 0.5);

когда это можно, оператор GOTO, как начинающий программу, заменяйте на RUN.

Рассмотрим примеры применения некоторых операторов интерпретатора языка БЕЙСИК. Используя оператор DATA в программе, можно запомнить константы, которые в ходе выполнения программы могут быть присвоены любым переменным.

Проиллюстрируем это на примере:

10 FOR N=1 ТО 10 : READ А : PRINT А : NEXT

20 FOR К=1 ТО 8 : READ В й : PRINT В ft : NEXT

30 DATA 1,2.3.4,5.6,7.8,9.0, "А", "В", "С", "D", "Е", "F", "G", "Н"


В строке 10 организовано десятикратное повторение операторов READ А и PRINT А. Такое многократное повторение одной и той же группы операторов называется циклом. Цикл строится командой FOR и параметрами этой команды: N - счетчик цикла, 1 - начальное значение счетчика цикла, 10 - конечное значение счетчика цикла, NEXT - конец цикла. Все операторы (READ А и PRINT А), стоящие между FOR N=1 ТО 10 и NEXT, будут повторены 10 раз, так как N будет менять свое значение от 1 до 10 тоже 10 раз.

В строке 30 записан оператор DATA, содержащий последовательность констант, разделенных запятыми.

При первом выполнении оператора READ А первая константа (1) из DATA будет прочитана в переменную А; при втором выполнении команды READ А вторая константа (число 2) из DATA будет снова прочитано в А (при этом старое содержимое в А стирается, но в операторе DATA константа не теряется) и т.д.

После очередного чтения из DATA в переменную А значение А отображается оператором PRINT А на экране ВКУ.

Применение других команд интерпретатора языка БЕЙСИК будет рассмотрено ниже в соответствующих разделах.

6.2. ПРОГРАММИРОВАНИЕ ВСТРОЕННОГО ИНТЕРФЕЙСА

Встроенный интерфейс ПЭВМ "Агат" является программно доступным.

Управление звуковым каналом. Управление динамиком основывается на возможности извлечь короткий звуковой сигнал при обращении к одной из ячеек СОЗО - C03F.

Для создания музыкальной мелодии нужно организовать многократное обращение к этим ячейкам. На рис. 6.1 приведена программа на языке ассемблера, воспроизводящая звуковой сигнал, длительность и тональность которого опреде-

**300L

302:

0300-

А0

С9

LDY

**C9

0302-

98

TYA

304:

0303-

АА

TAX

0304-

СА

DEX

307:

0305-

D0

FD

BNE

«0304

0307-

AD

30 СО

LDA

*C030

030А-

88

DEY

30A:

030В-

DO

F5

BNE

«0302

30B:

030D-

60

RTS

03 0Е-

00

BRK

Рис. 6.1. Программа воспроизведения мелодии

30D:

310:

312: 313:

315:

Рис. 6.2. Программа воспроизведения ноты 317:

LDY #*00 (вагрувка 0 в регистр Y

LDX *300 (вагрувка ив 300 ячейки в X

LDA *С030 (посылка импульса

на динамик

DEY{Y»Y-1

BNE «312 (переход по

ненулевому ревультату

DEC «301 (содержимое ячейки

301 уменшили на 1

BEQ *317 (переход по

нулевому ревультату

DEX(Х=Х-1

BNE *30А (переход по

ненулевому ревультату

BEQ 4304 (переход по

нулевому ревультату

RTS (вовврат на точку входа


t

255 240 228 214 204 192 184 171 160 /52

Рис. 6.3. Числовые рактеристики нот

-1--Г~й-1-т-i"-tT?"-!"*-

gj ft* Г Г Г Г

/Д? 114

4f-

108 102 96 92 85 80

76 72 68 64

60 57 54 51 48 45

40 J« Jff

J« 32 30 28

26 25

J = »5 J

1=32 b=96

Л1-

J =128 *

=16 .=48

J71-

J> =64 J

.=192

5)

23

= 43+43+43

21 + 21+21

ЛЯЮТСЯ числом Д C9, содержащимся в ячейке Д 301. Команда LDA ДСОЗО непосредственно извлекает один импульс, длительностью 5 мкс.

Для создания звукового сигнала, различимого человеческим ухом, в программе используются два цикла, построенные на двух командах BNE. Задав многократное повторение этой программы, можно получить музыкальный гудок. Если же при этом многократном обращении еще и изменять содержимое ячейки Д 301, получится случайная. музыкальная мелодия.

Используя язык БЕЙСИК, можно написать программу, организующую такое многократное обращение:

10 FOR 1=1 ТО 255 : РОКЕ 769,1 : CALL 768 : NEXT

Программа, состоящая из одной строки, выводит на динамик сигнал, напоминающий сирену. Конечно, перед запуском этой программы в память начиная с адреса Д 300, необходимо записать приведенную на рис. 6.1 программу. Это можно сделать, используя программу "Системный монитор" или операторы языка БЕЙСИК. Переведем шестнадцатеричные коды программы на языке ассемблера в десятичные эквиваленты (АО-160, С9-201 и т.д.):

160,201.152,170,202,208.253,173.48.192.136,208,245,96.

Эту последовательность на языке БЕЙСИК можно запомнить оператором DATA. Используя совместно с оператором DATA команды READ (чтение из DATA) и команды РОКЕ (занесение байта по адресу), можно организовать запись программы, приведенной на рис. 6.1, непосредственно в память начиная с адреса 768 СД302):

1DATA 160,201,152,170,202,208,253.173.48.192.136.208,245,96

2FOR 1=770 ТО 781: READ А : POKE I.A : NEXT

На рис. 6.2 приведена программа на языке ассемблера, извлекающая звук заданной длительности и тональности. Используя эту программу, можно заставлять компьютер исполнять любую мелодию. На рис. 6.3, а изображены нотные



[стр.Начало] [стр.1] [стр.2] [стр.3] [стр.4] [стр.5] [стр.6] [стр.7] [стр.8] [стр.9] [стр.10] [стр.11] [стр.12] [стр.13] [стр.14] [стр.15] [стр.16] [стр.17] [стр.18] [стр.19] [стр.20] [стр.21] [стр.22] [стр.23] [стр.24] [стр.25] [стр.26] [стр.27] [стр.28] [стр.29] [стр.30] [стр.31] [стр.32] [стр.33] [стр.34] [стр.35] [стр.36] [стр.37] [стр.38] [стр.39] [стр.40] [стр.41] [стр.42] [стр.43] [стр.44] [стр.45] [стр.46] [стр.47] [стр.48] [стр.49] [стр.50] [стр.51] [стр.52] [стр.53] [стр.54] [стр.55] [стр.56] [стр.57] [стр.58] [стр.59] [стр.60] [стр.61] [стр.62] [стр.63] [стр.64] [стр.65] [стр.66] [стр.67] [стр.68] [стр.69] [стр.70] [стр.71] [стр.72] [стр.73] [стр.74] [стр.75] [стр.76] [стр.77] [стр.78] [стр.79] [стр.80] [стр.81] [стр.82] [стр.83] [стр.84] [стр.85] [стр.86] [стр.87] [стр.88] [стр.89] [стр.90] [стр.91] [стр.92] [стр.93] [стр.94] [стр.95] [стр.96] [стр.97] [стр.98]