- 2.3. НЕСКОЛЬКО ПОЛЕЗНЫХ ПРОГРАММ В МАШИННЫК КОДАХ
Электродные устройства, описанные* этой кнйге, требуют для своей работы
наличия программ в машинных кодах, которыебудуттакже подробно описаны, как и
приведенные в этом разделе.
2.3Л. ПЕРЕСЫЛКА ДАННЫХ ИЗ ЭКРАННОЙ
В НЕКОТОРУЮ ДРУГУЮ ОБЛАСТЬ
Мнемоника Десятичный код Комментарий
Id de,58327 17 адрес области памяти-58327
(E3D7-uiecTH.) 215
227
Id hi, 16384 33 адрес экранной области-16384
(4000-шестн.) О
Id b,27 6 настроить счетчик В (1) на
27 счет до 27
push be 107 сохранить В (1)
Id b,0 6 настроить счетчик В (2) на
0 256(-О)
Id a,(hl) 126 переслать данные из экранной
Id (dc),a 18 в буфферную область памяти
inc dc 19 байт за байтом
inc nl 35
djnz-7 16 уменьшается на 1 счетчик В (2)
244 и выполняется переход на 7
байт назад если не О
pop be 193 в счетчик загружается В (1)
djnz -12 16 уменьшается на 1 счетчик В (1)
244 и выполняется переход на 12
байт назад если не О
ret 201 возврат в БЕЙСИК
Счетчики в этой программе считают до 28 и до 256. Работа программы завершается
когда 27x256-6912 байтов будет перемещено. Из них 6144 байтов составляют экран-
ную область, а 768 байт составляют область атрибутов, в которой хранится информа-
ция о цвете.
2.3.2. ПЕРЕСЫЛКА ДАННЫХ ОБРАТНО
В ЭКРАННУЮ ОБЛАСТЬ ПАМЯТИ
Мнемоника Десятичный код Коментарий
Id hi,ООО 33 обнуление HL
О
О
add hl,sp 57 сохранить указатель стека в HL
Id de, (23653) 237 загрузка в DE адреса начала
91 свободной области памяти
101 -23653
92
and а 167
sic hl,de 237 HL-(DE) в HL; вычисление раз-
82 меров свободной области
push hi 229 передача результата в ВС
pop be 193 через стек
ret 201 возврат в БЕЙСИК
Загрузите программу.
10 FOR X —ОТО 13
20 READ n
30 POKE <3200(M-x),n
40 NEXTx
50 DATA 33,0,0,57,237,91,101,92,167,237,82,229,193,201
Эта программа, загруженная в память, может быть вызвана в любой момент с
помощью:
print usr 32000 - :
Для загрузки этой програ*«йй мЬЬйет бьп1» йсЙшьзован альтернативный REM-ме-
тод:
1 REM аааааааааааааааааааааа "вш
10 DATA 33,0,0,57>237,9167,Й7,82,22® Д93,201
20 FOR х-23760 tO 23773;^
30 READ п: РОКВ<х,п tjt4
40 NEXT х
Программа вызывает^* с помои^ёо: . »/
PRINT USR 23760 : -?Ч
в любом месте вызываем0%1ррграммы.
£*large"
В этом разделе описана программа которая будет использована во всех электрон-
ных устройствах, описанных в книге. Она позволяет отображать символы ( буквы,
цифры, знаки препинания) произвольного размера в любой точке экрана. Парамет-
ры, определяющие размер и размещение символов задаются в программе на БЕЙСИ-
КЕ так, как показано на рис.2.2.
XS, YS, CS - любое, хотя при значении около 20 один символ занимает весь экран.
Пример использования:
10 LET XS - 4 : LET YS - 4 : LET CS - 8 : LET Y- 100
LET D$ - "SPECTRUM": GOSUB 9390
9390 LET X - (256 - XS*CS*LEN D$)/2
9400 LET A - 23306: POKE A,X: POKE A+L,Y: POKE A+2,XS:
ОКЁ A+3,YS : POKE A+4,CS : LET A + A+4: FOR I - TO
EN D$ : POKE A+I, CODE D$(I) : NEXT I: POKE A+I,
55: RANDOM 12E USR 32256: RETURN
Далее приведена программа загрузки машинных кодов:
1 CLEAR 45500
2 FOR Х-32256 ТО 32532
3 READ а: РОКЕ х,а
4 NEXTx
5 DATA 33,15,91,126,35,34,0,91,111,60,200,38,0,41,41,41,237,75,
54,92,9,62,8,50,4,91,58,11,91,50,9,91,58,10,91,50,8,91,62,9,50,
5,91,126,35,34,2,91,7,50,6,91,58,5,91,61,32,50,58,4,91,61,32,
24,58,14
6 DATA 91,71,58,12,91,79,58,10,91,129,5,32,252,50,10,91,42,0,
91,125,3,126,50,4,91,58,13,91,71,58,9,91,128,50,9,91,42,2,91,
195,32,126,50,5,91,58,12,91,71,58,9,91,50,7,91,58,13,91,79,
197,205,164,126,193,58,7
7 DATA 91,60,50,7,91,13,32,241,58,8,91,60,50,8,91,5,32,221,58,
6,91,195,48,126,128,64,32,16,8,4,2,1,58,142,92,238,255,71,
58,141,92,160,71,58,8,91,230,248,111,58,7,91,254,192,208,31,
31,31,230,31,103,203,28,203,29,203,28,203,29,203,28,203,29,
62,88,180
8 DATA 103,58,142,92,166,176,119,58,7,91,71,230,7,246,64,103,
120,31,31,31,230,24,180,103,120,23,23,230,224,111,58,8,91,
71,31,31,31,230,31,181,111,235,33,156,126,120,230,7,79,6,0,
9,70,26,33,6,91,203,70,40,3,176,18,201,47,176,47,18,201
10 LET xs-4: LET ys-4: LET cs-8: LET y-100: LET d$-"Spectrum":
GO SUB 9390
20 STOP
9390 LET x-(256-xs*cs*LEN d$)/2
9400 LET a-23306: POKE a,x: POKE a+1 ,y: poke a+2,xs: poke a+3,ys
: POKE a+4,cs: LET a-a+4: FOR i-1 TO LEN d$: POKE a+i,CODE
d$(i): NEXT 1: POKE a+i,255: RANDOMIZE USR 32256: RETURN
Эта программа загружается, когда запускается основная программа. Ее можно
сохранить отдельно:
SAVE "large" CODE 32256,277 и загружать
LOAD "large" CODE 32256v277
вслед за обычной загрузкой основной программы:
LOAD""
Изменяя цвет чернил, бумаги, рамки и используя мигание можно создавать кра-
сивые надписи на экране.
При использовании данной программы с устройствами описанными в следующих
главах нужно руководствоваться следующими правилами:
1. Загрузите программу "LARGE" обычным способом и остановить магнитофон
после загрузки.
2. Наберите RUN. Программа начнет работать и произойдет загрузка машинных
кодов в область памяти с на экране появится надпись
SPECTRUM. После этого вьшВДЗгёнйё пр01}ЖМ**ызавершится в соответствии со сле-
дующим в строке 20 оператором STOP. ; Д
3. Загрузите программ^ которая должна использовать программу "LARGE", на-
пример программу "РНШр)" из глазы^ШЬ^нр такжещпользовать команду MERGE
для присоединения осЩёной программы и npOrpaMMbi^LARGE". Затем можно при-
соединить еще одну программу. ;
Например так мо^ороступий*£ программой Т1МЕ|Щриведенной ниже, необхо-
димо только загрузить игроки с 50^70: строки 9390,94(ЗЙЦЬтаются от присоединения
"LARGE" и первой прдЩммы. Бу|да; однакр^ внимателмш, не допускайте дублиро-
вания номеров строк, э^%щественШ^^ работы второй программы, так как строка
10 второй программы будет стерта строкой 10 первой%ЙЙжет показаться непонятным
почему для программы н&^ЕИСИКЕ программы -LARGE" выбраны номера строк
9390 и 9400. Этот выбор номеров программа расположена выше
любой программы и не пересекаётс^ ^ей. В строке 9390 автоматически определяется
горизонтальная координата X по котЙр)»р1азмещаются буква и слово. В строке 9400
делается остальное. Если пользователь сам хочет задать X, то строка 9390должна быть
уничтожена или заменена другой подпрограммой задающей координату X, такой как,
например, строка 80 в программе "PHOTO", вде
Х-20+(70х (Z-1)) и следующий GOSUB 9400.
С помощью этой программы можно создать большие электронные часы. Для этого
используются ячейки памяти с адресами 23674, 23673, 23672 в которых хранится
текущее время.
10 РОКЕ 23672,0: РОКЕ 23673,0: РОКЕ 23674,0
И LET т*нО: LET s-Ч) ==,.._ ==,,_ ........._ .........^........-
20 LET MNT ((65536*РЁ^К 23674+256*РЕЕ*Г236734РЕБК 23672)/50)
30 lt$-59THENCLS ^ 5 ;v "tV:
40 LET m-INT (t/60): LE^V-t-(m*60> Я.Ч /Ъ,
45 IFm-1 AND s-30 THEN BEEP 1,10
50 LET ys-4: LET xs-4: LET cs-8: LET y-10: LET d$-STR$ m: GO SUB 9390
60 LET y-100: LET d$-STR$ s: GO SUB 9390
70 GO TO 20
9390 LET x-(256-xs*cs*LEN d$) /2
9400 LET a-23306: POKE a,x: POKE a+l,y: POKE a+2,xs: POKE a+3,ys:
POKE a+4,cs: LET a-a+4: FOR i-1 TO LEN d$: POKE a+i,CODE d$(i)
: NEXT i: POKE a+i,255: RANDOMIZ E USR 32256: RETURN
Эта программа позже будет использована при описании устройств для фотогра-
фии.