|
Читатель - читателю - хочу предложить читателям свою программу "SYMBOL-NINJA".
|
Процедура SYMBOL-NINJA
© Дмитрий Глотов, г. Нижний Новгород, 1994 г.
Я хочу предложить читателям свою программу "SYMBOL-NINJA". Эту небольшую процедуру можно использовать и для оформления программ, и для оформления загрузчика. Программа по одной букве, оригинальным образом выводит сообщение со звуковым сопровождением. Звуки я создавал с применением программы "SPECSOUND" и после программы привожу дисассемблер этих звуков. Программа выводит одну строку сообщения с одним звуком, а другую - с другим. Итак, программа.
00010 |
LEN |
EQU |
63 |
Полная длина сообщения. |
00020 |
LEN1 |
EQU |
32 |
Половина длины сообщения. |
00030 |
ADR |
EQU |
22464 |
Адрес в дисплейном файле. |
00040 |
|
ORG |
40000 |
|
00050 |
|
ENT |
|
|
00060 |
|
LD |
HL,LEN |
B HL - длина сообщения. |
00070 |
|
LD |
(BUFF),HL |
Пересылка ее в буфер. |
00080 |
|
LD |
BC,ADR |
Место вывода сообщения на экран. |
00090 |
|
LD |
IY,DATA |
B IY - адрес сообщения. |
00100 |
SCROLL |
LD |
L, (IY) |
Код первого символа сообщения. |
00110 |
|
LD |
H, 0 |
Очистка Н. |
00120 |
|
PUSH |
IY |
Сохранение регистров на стеке |
00130 |
|
PUSH |
BC |
для последующих расчетов. |
00140 |
|
LD |
DE, (23606) |
Расчет места |
00150 |
|
ADD |
HL, HL |
шаблона символа |
00160 |
|
ADD |
HL, HL |
в символьном |
00170 |
|
ADD |
HL, HL |
наборе. |
00180 |
|
ADD |
HL, DE |
|
00190 |
|
EX |
DE, HL |
|
00200 |
|
LD |
H, B |
|
00210 |
|
LD |
L, C |
B HL - адрес начала вывода символа. |
00220 |
|
LD |
A, 1 |
Нач. количество выводимых линий символа |
00230 |
LOOP |
LD |
B, A |
Счетчик выводимых на экран линий. |
00240 |
|
PUSH |
DE |
Адрес первой линии символа. |
00250 |
|
PUSH |
HL |
Адрес начала вывода сообщения. |
00260 |
|
PUSH |
AF |
в А - количество выводов на экран, для вывода всего символа - 8 повтор. |
00270 |
LOOP1 |
LD |
A,(DE) |
Переброска одной линии |
00280 |
|
LD |
(HL),A |
символа на экран. |
00290 |
|
PUSH |
BC |
Вызов |
00300 |
|
CALL |
WAIT |
процедуры |
00310 |
|
POP |
BC |
задержки. |
00320 |
|
INC |
DE |
Переход к следующей линии символа. |
00330 |
|
INC |
H |
Переход к месту печати следующей линии. |
00340 |
|
DJNZ |
LOOP1 |
Повторение для всех 8 линий символа. |
00350 |
|
POP |
AF |
Восстановление |
00360 |
|
POP |
HL |
значений |
00370 |
|
POP |
DE |
регистров. |
00380 |
|
DEC |
H |
Переход для вывода на 1 линию выше. |
00390 |
|
|
|
Увеличение счетчика числа выводов. |
00400 |
|
CP |
9 |
Если выведены все 8 линий (А=9), |
00410 |
|
JR |
Z,LOOP2 |
то переход к выводу звука. |
00420 |
|
JR |
LOOP |
Иначе - возврат и повторение. |
00430 |
LOOP2 |
CALL |
SOUND |
Вызов звука. |
00440 |
|
POP |
BC |
Восстановление адреса вывода сообщения, |
00450 |
|
POP |
IY |
Восстановление адреса хранения сообщени |
00460 |
|
INC |
BC |
Переход к следующему знакоместу. |
00470 |
|
INC |
IY |
Переход к следующему символу. |
00480 |
|
LD |
A, (IY) |
B A - код символа. |
00490 |
|
CP |
0 |
Проверка на маркер конца (А=0). |
00500 |
|
JR |
Z, END |
Если конец достигнут, завершение. |
00510 |
|
JR |
SCROLL |
Иначе - вывод следующего символа. |
00520 |
WAIT |
LD |
BC,500 |
Время задержки. |
00530 |
WAIT1 |
DEC |
BC |
Уменьшение счетчика задержки. |
00540 |
|
LD |
A, B |
Проверка содержимого |
|
|
|
ЧШСЯЖЕЛЪ |
|
00550 |
|
OR |
C |
BC на ноль. |
00560 |
|
OR |
NZ,WAIT1 ; |
Если нет, то повтор. |
00570 |
|
RET |
|
Иначе - возврат. |
00580 |
END |
LD |
IY,23610 |
Восстанов. IY для корректного завершения |
00590 |
|
RET |
|
Выход из процедуры. |
00600 |
DATA |
DEFM |
" WRITTEN BY |
Текст сообщения. |
00610 |
|
DEFM |
" (C)CRYSTAL |
|
00620 |
|
DEFM |
"SOFT 1994 ; |
|
00630 |
|
DEFM |
" N.NOVGOROD |
|
00640 |
|
DEFM |
" TEL. (8312) |
|
00650 |
|
DEFM |
"54-95-320 |
|
00660 |
|
DEFB |
0 |
Маркер конца сообщения. |
00670 |
BUFF |
DEFW |
0 |
Буфер. |
00680 |
SOUND |
XOR |
A |
Обнуление А. |
00690 |
|
LD |
HL,(BUFF) |
B HL - длина сообщения. |
00700 |
|
DEC |
L |
Уменьшили на единицу. |
00710 |
|
LD |
(BUFF),HL |
Зафиксировали новую длину. |
00720 |
|
LD |
A, L |
Проверка достижения половины. |
00730 |
|
CP |
LEN1 ; |
Половина сообщения достигнута? |
00740 |
|
JR |
CSOUND2 |
Если да, то смена звука. |
00750 |
SOUNDI |
LD |
C,1 ; |
Процедура |
00760 |
N1 |
LD |
B, 15 |
"звук 1", |
00770 |
N2 |
LD |
HL,100 |
используется |
00780 |
|
PUSH |
BC |
при выводе |
00790 |
|
LD |
DE,1 ; |
первой |
00800 |
|
PUSH |
HL |
ПОЛОВИНЫ |
00810 |
|
CALL |
#03B5 |
сообщения. |
00820 |
|
POP |
HL |
|
00830 |
|
LD |
DE,100 ; |
|
00840 |
|
ADC |
HL, DE |
|
00850 |
|
POP |
BC |
|
00860 |
|
DJNZ |
N2 |
|
00870 |
|
LD |
A,2 ; |
|
00880 |
|
INC |
C |
|
00890 |
|
LD |
B, C |
|
00900 |
|
CP |
B |
|
00910 |
|
OR |
NZ, N1 |
|
00920 |
|
RET |
|
|
00930 |
SOUND2 |
LD |
C,1 ; |
Процедура |
00940 |
N3 |
LD |
B, 3 |
"звук 2", |
00950 |
N4 |
LD |
HL,300 |
используется |
00960 |
|
PUSH |
BC |
при выводе |
00970 |
|
LD |
DE,8 ; |
второй |
00980 |
|
PUSH |
HL |
половины |
00990 |
|
CALL |
#03B5 |
сообщения. |
01000 |
|
POP |
HL |
|
01010 |
|
LD |
DE,300 ; |
|
01020 |
|
ADC |
HL, DE |
|
01030 |
|
POP |
BC |
|
01040 |
|
DJNZ |
N4 |
|
01050 |
|
LD |
A,2 ; |
|
01060 |
|
INC |
C |
|
01070 |
|
LD |
B, C |
|
01080 |
|
CP |
B |
|
01090 |
|
JR |
NZ, N3 |
|
01100 |
|
RET |
|
|
Start |
of object: #9C40 |
(40000) |
|
Length |
: #00EB |
(00235) |
|
Executes |
: # 9C4 0 |
(40000) |
|
Теперь, как обычно, приводим шестнадцатеричный дамп приведенной процедуры. Стартовый адрес -40000, длина - 235 байт:
9C40 |
21 |
3F |
00 |
22 |
DC |
9C |
01 |
C0 |
|
97 |
9C48 |
57 |
FD |
21 |
9C |
9C |
FD |
6E |
00 |
|
FC |
9C50 |
26 |
00 |
FD |
E5 |
C5 |
ED |
5B |
36 |
|
37 |
9C58 |
5C |
29 |
29 |
29 |
19 |
EB |
60 |
69 |
|
98 |
9C60 |
3E |
01 |
47 |
D5 |
E5 |
F5 |
1A |
77 |
|
C2 |
9C68 |
C5 |
CD |
8E |
9C |
C1 |
13 |
24 |
10 |
|
C8 |
9C70 |
F5 |
F1 |
E1 |
D1 |
25 |
3C |
FE |
09 |
|
0C |
9C78 |
28 |
02 |
18 |
E6 |
CD |
DE |
9C |
C1 |
|
44 |
9C80 |
FD |
E1 |
03 |
FD |
23 |
FD |
7E |
00 |
|
98 |
9C88 |
FE |
00 |
28 |
0B |
18 |
BF |
01 |
F4 |
|
21 |
9C90 |
01 |
0B |
78 |
B1 |
20 |
FB |
C9 |
FD |
|
42 |
9C98 |
21 |
3A |
5C |
C9 |
20 |
57 |
52 |
49 |
|
C6 |
9CA0 |
54 |
54 |
45 |
4E |
20 |
42 |
59 |
20 |
|
52 |
9CA8 |
28 |
43 |
29 |
43 |
52 |
59 |
53 |
54 |
|
6D |
9CB0 |
41 |
4C |
53 |
4F |
46 |
54 |
20 |
31 |
|
66 |
9CB8 |
39 |
39 |
34 |
20 |
20 |
4E |
2E |
4E |
|
04 |
9CC0 |
4F |
56 |
47 |
4F |
52 |
4F |
44 |
20 |
|
9C |
9CC8 |
54 |
45 |
4C |
2E |
28 |
38 |
33 |
31 |
|
3B |
9CD0 |
32 |
29 |
35 |
34 |
2D |
39 |
35 |
2D |
|
F8 |
9CD8 |
33 |
32 |
30 |
00 |
00 |
00 |
AF |
2A |
|
E2 |
9CE0 |
DC |
9C |
2D |
22 |
DC |
9C |
7D |
FE |
|
36 |
9CE8 |
20 |
38 |
20 |
0E |
01 |
06 |
0F |
21 |
|
41 |
9CF0 |
64 |
00 |
C5 |
11 |
01 |
00 |
E5 |
CD |
|
79 |
9CF8 |
B5 |
03 |
E1 |
11 |
64 |
00 |
ED |
5A |
|
E9 |
9D00 |
C1 |
10 |
EC |
3E |
02 |
0C |
41 |
B8 |
|
9F |
9D08 |
20 |
E3 |
C9 |
0E |
01 |
06 |
03 |
21 |
|
AA |
9D10 |
2C |
01 |
C5 |
11 |
08 |
00 |
E5 |
CD |
|
6A |
9D18 |
B5 |
03 |
E1 |
11 |
2C |
01 |
ED |
5A |
|
D3 |
9D20 |
C1 |
10 |
EC |
3E |
02 |
0C |
41 |
B8 |
|
BF |
9D28 |
20 |
E3 |
C9 |
00 |
00 |
00 |
00 |
00 |
|
91 |
И еще несколько слов о процедурах звуковых эффектов, отмеченных в листинге метками SOUND1 и SOUND2. Те, кто хочет получить исчерпывающую информацию на эту тему, могут обратиться к материалу, подготовленному в свое время Андреем Алексеевым (см. РЕВЮ-92, № 11-12, стр. 241).
* * *
|
|