Code - write Mini Boot.

(C) SEEENS/DnieproBite#3



          ┌─┬─┐ ┌──┐
          │ │ │┌ │ ┌┘
          │ │ │┬ ┌ ├─┤ ┌─┐┌─┐─┼─
          │ │ ││┌─┐┬ │ └┐│ ││ │ │
          │ │││ ││ │ ││ ││ │ │
          ┴ ┴┴┴ ┴┴ └──┘└─┘└─┘ ┴



 Today I present to your attention
one of the smallest boot loaders!
This boot occupies only 1 (!) sector,
and is easily assembled in ZX-Asm and in
others available to you or loved by you
assemblers.
    The idea of coding this boot is borrowed from
VanM.M.A,coder from Samara.
   You are presented with the boot text below,
which you can safely unload without
control codes, and import into
any Assembler available to you.
   For example, you load text into ZX-Asm,
edit it, then go into BASIC,
delete all lines, write your own line,
in 256 bytes, that is, to PRINT PEEK 23869
showed a number no higher than this! And then
climb back into the assembler, compile
go back to BASIC and save Boot
RANDOMIZE USR 15619:REM:SAVE"boot" LINE 1,
in general, it’s not for me to tell you how you are
you will use this code, it
It's up to you...;)
   So...

        ORG #5DЗB
AUTHOR EQU#5D52
FILE_P EQU #5D52
;BASIC LINE TO START
 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" ;)
;INFORMATION ABOUT THE AUTHOR - >=8 CHARACTERS.
 DEFB #22  ;END OF BASIC LINE
     DEFB #D  ;"FREE" BYTE
;1 SECTOR BOOT
 LD (IY+#53),#5
;SETTING PAPER COLOR IN CELL #5C8D
;BORDER IS ALREADY INSTALLED FROM BASIC

NEW_DISK ;READING DISC
        CALL #DbB ;BLACK SCREEN
                         ;OUTPUT DE=0,HL=#50E0,BC=#1721
        ADD HL,BC
        LD BC,#905
        PUSH HL
        CALL #3D13 ;LOAD DISK CATALOG FROM ADDRESS #6801
        LD DE,AUTHOR
        LD C,#D
        CALL #203C ;PRINTING INFORMATION ABOUT THE AUTHOR
        LD A,#2 ;OPEN PRINT STREAM TO SCREEN
        CALL #1601
        POP HL
        LD D,H
        LD E,L
SORT ; SORTING THE DIRECTORY
        LD BC,#8
        DEC (HL)
        JR Z,NEXT_F ;ERASED FILE
        INC(HL)
        JR Z,END_SORT;END OF DIRECTORY
        PUSH HL
        ADD HL,BC
        LD A,(HL)
        POP HL
        CP "B" ;FILE TYPE
        JR NZ,NEXT_F
        PUSH HL
        LD A,#20
        RST #10
MAKE_FILE
        LD A,(HL) ;PRINT
        RST #10 ;LETTERS
        LDI ;AND ITS TRANSFER
        JP PE,MAKE_FILE ;(FOR COMPACTING THE DIRECTORY)

        LD HL,#70D1 ;FILE COUNTER
        INC(HL)
        LD A,(HL)
FILE_C ;CALCULATE IF PRINTED
        SUB #03 ;3 FILE NAMES ON ONE LINE
        JR Z,FILE_C1
        JR NC,FILE_C
        LD A,#20 ;NO,NOT PRINTED
        RST #10
FILE_C1 ;YES,PRINTED
        LD A,#20
        RST #10

        POP HL
NEXT_F
        LD C,#10 ;GO ON
        ADD HL,BC ;TO NEXT FILE
        JR SORT
END_SORT ;END OF SORT

NEW_CUR ;REGISTER B=0
        LD C,B ;REGISTER C-FILE COUNTER
MOVE_CUR
        LD HL,#57F5
        LD DE,#B
        XOR A ;REGISTER A-TIME COUNTER
MOVE_C1
        LD B,#03
MOVE_C2
        ADD HL,DE ;CALCULATE CURSOR POSITION
        CP C
        JRZ,CURSOR
        INC A
        DJNZ MOVE_C2
        DEC HL
        JR MOVE_C1
CURSOR ;DRAW CURSOR
        LD B,#A
        LD DE,(#70D3)
        LD (#70D3),HL
        LD A,#5
CURSOR1
        LD (DE),A ;ERASE THE OLD CURSOR
        INC DE
        LD (HL),#16 ;DRAW A NEW CURSOR
        INC HL
        DJNZ CURSOR1

        LD HL,#5C08 ;RESET THE SYSTEM VARIABLE
        LD (HL),B ;LAST_KEY
KEYS ;POLLING KEYS
        LD A,(HL)
        CP " ";SPACEBAR - DISC RELOAD
        JR Z,NEW_DISK
        CP #D ;ENTER-START PROGRAM
        JR Z,START_F
        CP "0" ;0-PROGRAM START
        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 ;LETTER CASE RESET
        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 ;CURSOR UP
        DEC C
        DEC C
L__LEFT ;CURSOR LEFT
        DEC CJP P,MOVE_CUR ;CURSOR HAS NOT REACHED THE BEGINNING OF THE DIRECTORY
        LD BC,(#70D1) ;CURSOR TO END OF DIRECTORY
        DEC C
        JR MOVE_CUR
L__DOWN ;CURSOR DOWN
        INC C
        INC C
L_RIGHT ;CURSOR RIGHT
        INC C
        LD A,(#70D1)
        DEC A
        CP C
        JR NC,MOVE_CUR ;CURSOR HAS NOT REACHED THE END OF THE DIRECTORY
        JR NEW_CUR ;CURSOR TO THE BEGINNING OF THE CATALOG

START_F ;START FILE
        LD A,C
        INC A
        LD C,L ;REGISTER L=8
        LD HL,#67F9 ;ADDRESS OF THE BEGINNING OF THE CATALOG MINUS 8
ST_F1
        ADD HL,BC ;CALCULATE FILE NAME POSITION
        DEC A ;IN THE CATALOG
        JR NZ,ST_F1

        LD DE,FILE_P ;TRANSFER THE FILE NAME TO BASIC
        LDIR
        JP #3D03 ;EXIT TO BASIC WITH FILE LAUNCH


  That seems to be all... And don’t say what
you've already seen it, and that it's already happened...
Not everyone is as “advanced” as you, and
many might simply not see (notice)
of this boot ;)...

 SEEENS/DnieproBite

Share your thoughts about the article