Dnieprobite
#03
31 октября 2003 |
|
Code - пишем Mini Boot.
(C) SEEENS/DnieproBite#3 ┌─┬─┐ ┌──┐ │ │ │┌ │ ┌┘ │ │ │┬ ┌ ├─┤ ┌─┐┌─┐─┼─ │ │ ││┌─┐┬ │ └┐│ ││ │ │ │ │││ ││ │ ││ ││ │ │ ┴ ┴┴┴ ┴┴ └──┘└─┘└─┘ ┴ Сегодня вашему вниманию представляю один из самых малых boot загрузчиков! Данный бут занимает всего 1 (!) сектор, и легко ассемблируется в ZX-Asm и в других, доступных вам, или любимых вами ассемблерами. Идея кодинга данного бута позаимство- вана у M.M.A, кодера из Самары. Вам представлен ниже текст boot'а, который вы можете спокойно выгрузить без управляющих кодов, и импортировать в любой вам доступный Assembler. Например в ZX-Asm загружаете текст, редактируете его, затем вылазите в Бейсик, удаляете все строки, пишите свою строку, в 256 байт, то есть чтобы PRINT PEEK 23869 показывало число не выше этого! И затем залазите обратно в ассемблер, компилируете вылазите опять в Бейсик и сохраняете Boot RANDOMIZE USR 15619:REM:SAVE"boot" LINE 1, в общем не мне вам говорить, как вы будете использовать уж данный код, это уже ваше дело...;) Итак... ORG #5DЗB AUTHOR EQU #5D52 FILE_P EQU #5D52 ;BASIC СТРОЧКА ДЛЯ ЗАПУСКА DEFB #00,#01,#F8,#00,#E7,#C3,#A7,#3A DEFB #F9,#C0,#B0,#22,#32,#33,#39,#30 DEFB #35,#22,#3A,#EA,#3A,#F7,#22 DEFB 23,11,32,"DnieproBite" ;) ;ИНФОРМАЦИЯ ОБ АВТОРЕ - >=8 СИМВ. DEFB #22 ;КОНЕЦ BASIC-СТРОКИ DEFB #D ;"СВОБОДНЫЙ" БАЙТ ;1 SECTOR BOOT LD (IY+#53),#5 ;УСТАНОВКА ЦВЕТА PAPER В ЯЧЕЙКУ #5C8D ;BORDER УЖЕ УСТАНОВЛЕН ИЗ BASIC'A NEW_DISK ;ЗАЧИТЫВАНИЕ ДИСКА CALL #DбB ;ОЧ.ЭКР. ;НА ВЫХОДЕ DE=0,HL=#50E0,BC=#1721 ADD HL,BC LD BC,#905 PUSH HL CALL #3D13 ;ЗАГРУЖАЕМ КАТАЛОГ ДИСКА С АДРЕСА #6801 LD DE,AUTHOR LD C,#D CALL #203C ;ПЕЧАТАЕМ ИНФОРМАЦИЮ ОБ АВТОРЕ LD A,#2 ;ОТКРЫВАЕМ ПОТОК ПЕЧАТИ НА ЭКРАН CALL #1601 POP HL LD D,H LD E,L SORT ;СОРТИРОВКА КАТАЛОГА LD BC,#8 DEC (HL) JR Z,NEXT_F ;СТЕРТЫЙ ФАЙЛ INC (HL) JR Z,END_SORT;КОНЕЦ КАТАЛОГА PUSH HL ADD HL,BC LD A,(HL) POP HL CP "B" ;ТИП ФАЙЛА JR NZ,NEXT_F PUSH HL LD A,#20 RST #10 MAKE_FILE LD A,(HL) ;ПЕЧАТЬ RST #10 ;БУКВЫ LDI ;И ЕЁ ПЕРЕНОС JP PE,MAKE_FILE ;(ДЛЯ УПЛОТНЕНИЯ КАТАЛОГА) LD HL,#70D1 ;СЧЁТЧИК ФАЙЛОВ INC (HL) LD A,(HL) FILE_C ;ВЫЧИСЛЯЕМ,НАПЕЧАТАНО-ЛИ SUB #03 ;3 ИМЕНИ ФАЙЛОВ В ОДНОЙ СТРОКЕ JR Z,FILE_C1 JR NC,FILE_C LD A,#20 ;НЕТ,НЕ НАПЕЧАТАНО RST #10 FILE_C1 ;ДА,НАПЕЧАТАНО LD A,#20 RST #10 POP HL NEXT_F LD C,#10 ;ПЕРЕХОДИМ ADD HL,BC ;К СЛЕДУЮЩЕМУ ФАЙЛУ JR SORT END_SORT ;КОНЕЦ СОРТИРОВКИ NEW_CUR ;РЕГИСТР В=0 LD C,B ;РЕГИСТР С-СЧЁТЧИК ФАЙЛОВ MOVE_CUR LD HL,#57F5 LD DE,#B XOR A ;РЕГИСТР А-ВРЕМЕННЫЙ СЧЁТЧИК MOVE_C1 LD B,#03 MOVE_C2 ADD HL,DE ;ВЫЧИСЛЯЕМ ПОЗИЦИЮ КУРСОРА CP C JR Z,CURSOR INC A DJNZ MOVE_C2 DEC HL JR MOVE_C1 CURSOR ;РИСУЕМ КУРСОР LD B,#A LD DE,(#70D3) LD (#70D3),HL LD A,#5 CURSOR1 LD (DE),A ;СТИРАЕМ СТАРЫЙ КУРСОР INC DE LD (HL),#16 ;РИСУЕМ НОВЫЙ КУРСОР INC HL DJNZ CURSOR1 LD HL,#5C08 ;ОБНУЛЯЕМ СИСТЕМНУЮ ПЕРЕМЕННУЮ LD (HL),B ;LAST_KEY KEYS ;ОПРОС КЛАВИШ LD A,(HL) CP " " ;ПРОБЕЛ-ПЕРЕЗАЧИТЫВАНИЕ ДИСКА JR Z,NEW_DISK CP #D ;ENTER-ЗАПУСК ПРОГРАММЫ JR Z,START_F CP "0" ;0-ЗАПУСК ПРОГРАММЫ JR Z,START_F CP "7" JR Z,L_RIGHT CP "6" JR Z,L__LEFT CP "8" JR Z,L__DOWN CP "9" JR Z,L____UP OR #20 ;СБРОС РЕГИСТРА БУКВ CP "p" JR Z,L_RIGHT CP "o" JR Z,L__LEFT CP "a" JR Z,L__DOWN CP "q" JR NZ,KEYS L____UP ;КУРСОР ВВЕРХ DEC C DEC C L__LEFT ;КУРСОР ВЛЕВО DEC C JP P,MOVE_CUR ;КУРСОР НЕ ДОШЕЛ ДО НАЧАЛА КАТАЛОГА LD BC,(#70D1) ;КУРСОР-НА КОНЕЦ КАТАЛОГА DEC C JR MOVE_CUR L__DOWN ;КУРСОР ВНИЗ INC C INC C L_RIGHT ;КУРСОР ВПРАВО INC C LD A,(#70D1) DEC A CP C JR NC,MOVE_CUR ;КУРСОР НЕ ДОШЕЛ ДО КОНЦА КАТАЛОГА JR NEW_CUR ;КУРСОР-НА НАЧАЛО КАТАЛОГА START_F ;ЗАПУСК ФАЙЛА LD A,C INC A LD C,L ;РЕГИСТР L=8 LD HL,#67F9 ;АДРЕС НАЧАЛА КАТАЛОГА МИНУС 8 ST_F1 ADD HL,BC ;ВЫЧИСЛЯЕМ ПОЗИЦИЮ ИМЕНИ ФАЙЛА DEC A ;В КАТАЛОГЕ JR NZ,ST_F1 LD DE,FILE_P ;ПЕРЕНОСИМ ИМЯ ФАЙЛА В BASIC LDIR JP #3D03 ;ВЫХОДИМ В BASIC С ЗАПУСКОМ ФАЙЛА Вот, вроде и все...И не говорите то, что вы это уже видели, и что это уже было... Не все такие "продвинутые" как вы, и многие могли просто не видеть (замечать) данного boot'а ;)... SEEENS/DnieproBite
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября