╔══════════════════════════════╗
║ РАЗДЕЛ:АССЕМБЛЕР ║
╚══════════════════════════════╝
Итак, опять вы в рубрике "Ассемблер", ну
там, где всякие ассемблерские штучки для
начинающих. Не очень-то хорошо получились
в прошлый раз. Посудите сами: в первом но-
мере мы изучаем основы, а во втором пишем
фреймовые скроллеры (пересылки, что одно и
то же). Ну да ладно, хрен с ним...
Для начала даю процедуру сдвига всего
экрана на одно знакоместо вверх. Плюсом в
ней является то, что паралельно графике
перебрасываются и атрибуты. Поэтому нет
таких неприятных вещей, как отставание ат-
рибутов от графики. А ведь это не очень
красиво выглядет.
Эту процедуру вполне можно использовать
при написании вьюверов для хелпов или ра-
зных, там, электронных изданий.
ORG #8000
;процедура сдвига всего экрана на одну
;строку вверх.
;паралельно графике сдвигаются и атрибуты.
SCRL LD DE,#4000 ;куда :
LD HL,#4000+32 ;откуда:
LD B,#17 ;к-во строк
ЕХХ ;атрибуты
LD DE,#5800 ;куда
LD HL,#5800+32 ;откуда
ЕХХ
LOOP1 PUSH ВС
CALL SCROLL ;СДВИГ 8 линий
POP ВС ;графики
DJNZ LOOP1
RET ;выход
SCROLL LD B,#08 ;8 линий.
LOOP PUSH ВС ;запомнили рег.п
PUSH HL
PUSH DE
LDI ;32 LDI (32 байта
LDI ;в строке). Можно
.... ;заменить на:
всего 32 LDI ;LD ВС,32
.... ;LDIR,
LDI ;но это медленно
LDI
POP HL
CALL DOWNHL ;
POP DE
ЕХ DE,HL
CALL DOWNHL
POP ВС
DJNZ LOOP
ЕХХ ;переносим атри-
LDI ;буты (32 байта)
LDI ;можно LD ВС,32
.... ; LDIR
всего 32 LDI ;но LDI быстрее.
.... ;32*16=512тактов
LDI ;32*21=672тактов
LDI
ЕХХ ;обмен
DJNZ LOOP1
RET ;выход
DOWNHL INC Н ;экранная линия
LD A,Н ;вниз для HL.
AND #07 ;(полная работа
RET NZ ;с третями экрана
LD A,L
ADD A,#20
LD L,A
RET С
LD A,Н
SUB #08
LD Н,A
RET
Я думаю, что вы сами разберётесь в том,
как она работает. По её принцыпу пишется и
скроллер вниз.
ЗАГРУЗЧИК НА АССЕМБЛЕРЕ
Для начала загрузим свой любимый ассемб-
лер и, выйдя в BASIC, наберём строчку:
10 REM *********************************
Знаков "*" для начала поставим побольше.
(зависит от длины вашего лоадера). Далее
возвращаемся в ассемблер и набираем:
ORG 23872
;пример загрузчика на ассемблере
LD С,5 ;функция LOAD
LD B,кол-во загружаемых секторов
LD DE,(23796) ;трек/сектор
LD HL,куда грузить
DI
CALL 15635
EI
JP адрес стартового перехода
Отассемблировав эту прогу, выходим в бе-
йсик и набираем:
2 CLEAR адрес:RANDOMIZE USR 23872
Удалив все ненужные строки, записываем
файл на диск. За полученным файлом дописы-
ваем загружаемый кодовый блок, а потом их
склеиваем с помощью какого-нибудь команде-
ра, например PERFECT.
Вот и всё. Мы имеем бейсик-моноблок. Его
можно перемещать по диску.
P.S. Приведённый загрузчик является самым
простым, поэтому вы можете его совершен-
ствовать сами.
__________________________________________
Other articles: