(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