ИФК: А сейчас предоставим слово Котлярову Евгению из г. Оренбурга.
КОРР: Я хочу предложить читателям две свои процедуры в машинных кодах и надеюсь, что они будут полезны.
Первая процедура предназначена для поиска шрифтов и спрайтов. Подобные программы на БЕЙСИКЕ уже печатались в ZX РЕВЮ, но эта отличается большими возможностями: она компактна (239 байт), релоцируема, с ее помощью можно искать не только шрифты, но и спрайты размером от 1*1 до 7*31 знакомест. Самое удобное для нее место, на мой взгляд, - буфер принтера. Клавиши управления:
1 - уменьшить длину окна;
2 - увеличить длину окна;
3 - увеличить высоту окна;
4 - уменьшить высоту окна;
5 - переключение спрайт-шрифт;
6 - увеличение адреса на 32;
7 - уменьшение адреса на 32;
8 - увеличение адреса на 1;
9 - уменьшение адреса на 1; 0 - выход из программы.
Вызвать программу можно, например, так: RANDOMIZE ADDRES1: LET A=USR ADDRES2,
где ADDRES1 - адрес начала поиска, ADDRES2 - адрес загрузки. После выхода в A, будет возвращен текущий адрес. Определить режим поиска можно по переменной FLAG, находящейся по адресу #59FD в области атрибутов. Если это знакоместо черного цвета, значит производится поиск шрифтов, если ярко-белого - спрайтов.
Вот ее листинг:
EQU |
23670 |
EQU |
#5 9FF |
EQU |
#5 9FE |
EQU |
#5 9FD |
ORG |
40000 |
ENT |
$ |
LD |
A,2 |
LD |
(LEN),A |
LD |
(HEI),A |
CALL |
#1601 |
XOR |
A |
LD |
(FLAG),A |
LD |
HL,(SEED) |
PUSH |
HL |
PUSH |
HL |
LD |
BC,#0921 |
CALL |
#0DD9 |
POP |
BC |
CALL |
#2D2B |
CALL |
#2DE3 |
POP |
HL |
LD |
A,32 |
RST |
16 |
LD |
A, #EF |
IN |
A,(#FE) |
RRA |
|
LD |
B, H |
LD |
C, L |
RET |
NC |
RRA |
|
JR |
C, L2 |
DEC |
HL |
RRA |
|
JR |
C, L3 |
INC |
HL |
RRA |
|
SEED HEI LEN FLAG
START
L2
L3
|
LD |
BC, 32 |
|
JR |
C, L4 |
|
SBC |
HL, BC |
L4 |
RRA |
|
|
JR |
C, L5 |
|
ADD |
HL, BC |
L5 |
LD |
A,#F7 |
|
IN |
A,(#FE) |
|
LD |
C,A |
|
RR |
C |
|
LD |
A,(LEN) |
|
JR |
C, L6 |
|
DEC |
A |
|
JR |
NZ, L6 |
|
INC |
A |
L6 |
RR |
C |
|
JR |
C, L70 |
|
CP |
31 |
|
JR |
Z,L7 |
|
INC |
A |
L7 0 |
LD |
(LEN),A |
L7 |
RR |
C |
|
LD |
A,(HEI) |
|
JR |
C, L8 |
|
CP |
8 |
|
JR |
Z,L8 |
|
INC |
A |
L8 |
RR |
C |
|
JR |
C, L90 |
|
DEC |
A |
|
JR |
Z,L9 |
|
PUSH |
AF |
|
PUSH |
BC |
|
PUSH |
HL |
|
XOR |
7 |
|
INC |
A |
|
LD |
B,A |
|
CALL |
#0E44 |
|
POP |
HL |
|
POP |
BC |
|
POP |
AF |
L90 |
LD |
(HEI),A |
L9 |
RR |
C |
|
LD |
A,(FLAG) |
|
JR |
C, RUN |
|
CPL |
|
|
LD |
(FLAG),A |
RUN |
OR |
A |
|
JR |
Z,FO_FIND |
|
JR |
FIND |
START1 |
JR |
START |
FIND |
PUSH |
HL |
|
LD |
BC,(LEN) |
|
LD |
DE,#5000 |
L10 |
PUSH |
BC |
|
LD |
B, 8 |
L11 |
PUSH |
BC |
|
LD |
B, 0 |
|
LDIR |
|
|
XOR |
A |
|
LD |
(DE),A |
|
POP |
BC |
|
INC |
D |
|
LD |
A, E |
FO FIND
SUB |
C |
LD |
E,A |
DJNZ |
L11 |
POP |
BC |
LD |
D,%010100 |
ADD |
A,32 |
LD |
E,A |
DJNZ |
L10 |
POP |
HL |
JR |
START1 |
PUSH |
HL |
LD |
A,(LEN) |
LD |
B,A |
LD |
DE,#5000 |
PUSH |
BC |
PUSH |
DE |
LD |
A, (HEI) |
RLCA |
|
RLCA |
|
RLCA |
|
LD |
C,A |
LDI |
|
LD |
A, B |
CP |
1 |
JR |
NZ,L14 |
XOR |
A |
LD |
(DE),A |
DEC |
DE |
LD |
A, D |
AND |
7 |
CP |
7 |
JR |
NZ,L15 |
LD |
A, D |
AND |
%11111000 |
LD |
D,A |
LD |
A, E |
ADD |
A,32 |
LD |
E,A |
JR |
L16 |
INC |
D |
LD |
A, C |
OR |
A |
JR |
NZ,L13 |
POP |
DE |
INC |
DE |
POP |
BC |
DJNZ |
L12 |
POP |
HL |
JR |
START1 |