Fantom
#03
05 января 2000 |
|
Ассемблер - Процедура сдвига всего экрана на одно знакоместо вверх, загрузчик на вссемблере.
╔══════════════════════════════╗ ║ РАЗДЕЛ:АССЕМБЛЕР ║ ╚══════════════════════════════╝ Итак, опять вы в рубрике "Ассемблер", ну там, где всякие ассемблерские штучки для начинающих. Не очень-то хорошо получились в прошлый раз. Посудите сами: в первом но- мере мы изучаем основы, а во втором пишем фреймовые скроллеры (пересылки, что одно и то же). Ну да ладно, хрен с ним... Для начала даю процедуру сдвига всего экрана на одно знакоместо вверх. Плюсом в ней является то, что паралельно графике перебрасываются и атрибуты. Поэтому нет таких неприятных вещей, как отставание ат- рибутов от графики. А ведь это не очень красиво выглядет. Эту процедуру вполне можно использовать при написании вьюверов для хелпов или ра- зных, там, электронных изданий. 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. Приведённый загрузчик является самым простым, поэтому вы можете его совершен- ствовать сами. __________________________________________
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября