(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