Hello,
I'm developing an simple OS, as you can see in my previous posts, but now i have a file that is too big for the boot sector(510 bytes), then i want to split it in two files, one that will be in the boot sector of the floppy and the other that will be in the normal sectors of the floppy, then at the boot time i need that the file that is in the boot sector(a simple boot loader), boots the other that is in the normal sectors of the floppy, but i don't know how to do this, someone can help me!. If needed, here is my code:
[BITS 16] ; 16 bit code generation
[ORG 0x7C00] ; ORGin location is 7C00
JMP short main ; Jump past disk description section
NOP ; Pad out before disk description
; ------------------------------------------------------------------
; Disk description table, to make it a valid floppy
; Note: some of these values are hard-coded in the source!
; Values are those used by IBM for 1.44 MB, 3.5" diskette
OEMLabel db "BERL OS" ; Disk label - 8 chars
BytesPerSector dw 512 ; Bytes per sector
SectorsPerCluster db 1 ; Sectors per cluster
ReservedForBoot dw 1 ; Reserved sectors for boot record
NumberOfFats db 2 ; Number of copies of the FAT
RootDirEntries dw 224 ; Number of entries in root dir
LogicalSectors dw 2880 ; Number of logical sectors
MediumByte db 0F0h ; Medium descriptor byte
SectorsPerFat dw 9 ; Sectors per FAT
SectorsPerTrack dw 18 ; Sectors per track (36/cylinder)
Sides dw 2 ; Number of sides/heads
HiddenSectors dd 0 ; Number of hidden sectors
LargeSectors dd 0 ; Number of LBA sectors
DriveNo dw 0 ; Drive No: 0
Signature db 41 ; Drive signature: 41 for floppy
VolumeID dd 00000000h ; Volume ID: any number
VolumeLabel db "BERL OS" ; Volume Label: any 11 chars
FileSystem db "FAT12" ; File system type: don't change!
; End of the disk description table
; ------------------------------------------------------------------
; ------------------------------------------
; Beginning messages
main:
MOV BX, 0 ; Disable blinking.
MOV BH, 00h
MOV BL, 07h ; Color settings
MOV AL, 1
MOV BH, 0
MOV BL, 02h
MOV CX, osmsgend - os_msg ; Calculate message size.
MOV DL, 30
MOV DH, 0
PUSH CS
POP ES
MOV BP, os_msg
MOV AH, 13h
INT 10h
JMP wel
wel:
MOV BH, 00h
MOV BL, 07h
MOV AL, 1
MOV BH, 0
MOV BL, 059
MOV CX, welcome_end - welcome ; Calculate message size.
MOV DL, 32
MOV DH, 2
PUSH CS
POP ES
MOV BP, welcome
MOV AH, 13h
INT 10h
JMP comm_tag
; Beginning messages end
; ------------------------------------------
; Commands Area
; ------------------------------------------
; Show version command end
ver_show:
MOV BH, 00h
MOV BL, 07h
MOV AL, 1
MOV BH, 0
MOV BL, 059
MOV CX, ver_end - ver_msg ; Calculate message size.
MOV DL, 0
MOV DH, 3
PUSH CS
POP ES
MOV BP, ver_msg
MOV AH, 13h
INT 10h
JMP osmsgend
; Show version command end
; ------------------------------------------
comm_tag:
MOV BH, 00h
MOV BL, 07h
MOV AL, 1
MOV BH, 0
MOV CX, con_end - con ; Calculate message size.
MOV DL, 0
MOV DH, 3
PUSH CS
POP ES
MOV BP, ver_msg
MOV AH, 13h
INT 10h
JMP ver_KeyIn
; ------------------------------------------
; Keyboard input method
xVer db 'ver', 0
Key: times 128 db 0 ; reserve 128 byte Keyboard
KScan: times 128 db 0 ; reserve 128 byte scan
ver_KeyIn:
xor bx,bx
ver_KeyIn0:
mov ah,0
int 16h ; KEYBOARD
;ah=scan code al=ASCII character
mov [Key+bx],al
mov [KScan+bx],ah
inc bx
cmp al,0dh ; Carriage return
jne ver_KeyIn0
; bx = buffer Length
mov word [Key + bx - 1],0 ; Overwrite with terminator
; String now in buffer
mov ax,Key
mov dx,xVer
call StrICmp
JMP ver_show
; End of input characters method
; ------------------------------------------
StrICmp:
stc
ret
con DB "> "
con_end:
ver_msg DB "BerlOS Version 0.0.1 beta"
ver_end:
welcome DB "Welcome !"
welcome_end:
os_msg DB "BerlOS v0.0.1"
osmsgend:
JMP $
; Boot things
TIMES 510-($-$$) DB 0 ; Fill the rest of the sector with zeros
DW 0xAA55 ; Boot signature
Thanks,
Nathan Paulino Campos