© И. Пивен.
КОРР: Решил вынести на ваш суд свою первую (законченную) процедуру в машинных кодах. Сей релоцируемый программный модуль позволяет выводить на экран 4 любых символа в восьмикратном увеличении (8*4=32, как известно). Надеюсь, на основе моей идеи читатели создадут "BIG RUNLINE" - это, вообще-то, цель письма. Итак, вперед:
; (C) SELINA SPACE 8*8
можно и любой другой адрес подготовка для файла атрибутов
23296
HL,22520 BC, 8
124
ORG
EXX
LD
LD
EXX
CALL
RET - обеспечение релацируемости и
FIR NEX
NEX LIN
|
DEC |
SP | |
|
DEC |
SP | |
|
POP |
HL | |
|
LD |
BC, 10 |
8 |
|
ADD |
HL, BC | |
|
LD |
A, (HL) | |
|
CP |
255 | |
|
JR |
NZ,CONT | |
|
LD |
HL,10072 | |
|
EXX | ||
|
RET | ||
|
INC |
HL | |
|
PUSH |
HL | |
|
LD |
L,A | |
|
LD |
H, 0 | |
|
ADD |
HL, HL | |
|
ADD |
HL, HL | |
|
ADD |
HL, HL | |
|
PUSH |
HL | |
|
POP |
BC | |
|
LD |
HL, (23606) | |
|
ADD |
HL, BC | |
|
PUSH |
HL | |
|
POP |
DE | |
|
EXX | ||
|
ADD |
HL, BC | |
|
PUSH |
HL | |
|
LD |
B, 8 | |
|
PUSH |
BC | |
|
LD |
A,(DE) | |
|
INC |
DE | |
|
BIT |
7,A | |
|
JR |
Z, AA | |
|
LD |
(HL) , |
214 |
|
INC |
HL | |
|
BIT |
6,A | |
|
JR |
Z,BB | |
|
LD |
(HL) , |
214 |
|
INC |
HL | |
|
BIT |
5,A | |
|
JR |
Z, CC | |
|
LD |
(HL) , |
214 |
|
INC |
HL | |
|
BIT |
4,A | |
|
JR |
Z,DD | |
|
LD |
(HL) , |
214 |
|
INC |
HL | |
|
BIT |
3,A | |
|
JR |
Z, EE | |
|
LD |
(HL) , |
214 |
|
INC |
HL | |
|
BIT |
2,A | |
|
JR |
Z, FF | |
|
LD |
(HL) , |
214 |
|
INC |
HL | |
|
BIT |
1,A | |
|
JR |
Z, GG | |
|
LD |
(HL) , |
214 |
|
INC |
HL | |
|
BIT |
0,A | |
|
JR |
Z, HH | |
|
LD |
(HL) , |
214 |
|
LD |
BC, 25 | |
|
ADD |
HL, BC | |
; расчет адреса сообщения
; получаем STRING
; подготовка или возврат, если END
;расчет адреса матрицы символа
; расчет адреса в файле атрибутов
; количество "огромных" знаколиний для цикла
; байт матрицы в аккумулятор и проверяя каждый бит,
; включаем или не включаем соответствующий байт
; атрибутов.
AA
; 214 - параметры (атрибуты) знакоместа
; переход к следующей "огромной" знаколинии
CONT
BB
CC
DD
EE
FF
GG
HH
восстанавливаем параметр цикла не закончили? Тогда на NEX-LINE адрес следующего символа вернули на FIR_NEX начнем сначала.
POP DJNZ POP JR
BC
NEX_LIN HL
FIR_NEX
КОРР: Конечно, не забываю рубрику "ИДЕЯ" и дарю довольно интересную мысль читателям. Вероятно, с самых первых шагов общения с RAM, каждый сталкивается с областью системных переменных, и, в первую очередь, с CHARS. Ну, конечно, у Вас уже мелькнула стереотипная мысль: "CHARS указывает на 256 байтов ниже истинного положения фонта". А почему?! Любой Ваш ответ неверен! На самом деле, CHARS указывает туда, куда надо! Просто процедура печати из ПЗУ не изображает символы с кодами 0...31. Ага! Начинает доходить? Ведь это нужно для работы БЕЙСИКА! А в кодах? Вы собственноручно создаете процедуру печати, которая не игнорирует " контрольные коды" и, таким образом, получаете вдобавок еще 32 символа в Вашем фонте. Создать символы можно в ART STUDIO, указать в CHARS непосредственно на них, а остальной набор загрузить на 256 байтов выше. И все! На базе этой идеи можно создать или доработать текстовый редактор, который, думаю, заинтересовал бы многих.
© Васильев Антон (EARTH SOFTWARE) г. Снежинск
КОРР: Здравствуй уважаемый ИНФОРКОМ! Посылаю вам пару программ - ответов на вопросы Сергея Колотова, а также несколько своих программ.
Итак, сначала ответы: 1. HL= B*C
L1
DJNZ L1 RET
2. Напечатать символ, код которого в A, атрибутом, заданным в С, на весь экран.
LD (L6+1),A
ADD HL, HL
ADD HL, HL
ADD HL, HL
LD DE,15616
ADD HL,DE
LD DE,BUF
LD BC,8 LDIR
LD HL,22528
LD DE,BUF
LD (HL),A
L1
L2
L6 L3 L4
|
POP |
HL |
|
PUSH |
HL |
|
LD |
B, 64 |
|
LD |
A, (HL) |
|
LD |
(DE),A |
|
INC |
HL |
|
INC |
DE |
|
DJNZ |
L5 |
|
POP |
HL |
|
LD |
DE, 96 |
|
ADD |
HL, DE |
|
POP |
DE |
|
INC |
DE |
|
POP |
BC |
|
DJNZ |
L1 |
|
RET | |
|
DEFS |
8 |
BUF