(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
Other articles: