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     #5D3B
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    #D6B     ;ОЧ.ЭКР.
                         ;НА ВЫХОДЕ 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



Другие статьи номера:

От автора - Тут я общался со Slavk'ой Kalinin'ым...

BeeOS - краткое описание от Alex Freud.

X-Files - досье на Seens: "по газетам, журналам я кое как узнал что такое Спек".

Судный день - обзор игр Little Computer People, Castle Master, Dark Start, Nemesis, Nether Earth.

Bugs! - какае-та хрень сожрала первую полосу экрана, тоесть самые верхний ряд pixels.

Code - пишем Mini Boot.

Artang - обращаюсь к профессионалам, может кто-то и подхватит...

Просто FUN - шутки прибаутки.

Рекламус - Внимание! Требуется программа озвучки под AY!

Edit off - Не забывайте присылать отклики по поводу газеты и свои материалы на E-Mail.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
DRUNKENNESS
BBS - список станций BBS ZXNet.
Рецензии - рецензия на игру "Тайны Капитана Шелтона".

В этот день...   23 июля