diff --git a/kernel.nasm b/kernel.nasm index f3a51c9..806fb11 100644 --- a/kernel.nasm +++ b/kernel.nasm @@ -1,12 +1,69 @@ BITS 16 -ORG 0x512 start_sing: ; loading essentials for SingOS to run + mov ax, 0x0150 + mov ds, ax + mov es, ax + + ; Setup stack + mov ax, 0x8fc0 + mov ss, ax ; Set 'ss' to this location (the beginning of our stack region) + mov sp, 0xffff ; Set 'ss:sp' to the top of our 8K stack + mov bp, sp + + mov [global_disk_FSCI_LBA_position], bx ; passed by the volume boot record. + mov [global_disk_identifier], dl ; saving disk_identifier, this is the number the disk that we are booting from. ; This number is set by the bios ;call lsfs_check_extended_support ; Check that the int 0x13 extended read and write is available -jmp sing_loaded + ; setup file system information +; mov cx, [global_disk_FSCI_LBA_position] +; mov WORD [Parameter_Struct.buffer_segment], 0x50 +; mov WORD [Parameter_Struct.buffer_address], 0x2000 ; Heap memory start adresses for the file system +; mov WORD [Parameter_Struct.buffer_size], 0x3000 ; End address for the heap +; mov WORD [Parameter_Struct.data_length], cx +; +; mov bx, ds +; mov cx, Parameter_Struct +; mov ax, 0x1 +; push cx +; push bx +; push ax +; mov cx, 0x50 +; mov ds, cx +; mov es, cx +; call 0x50:0x00 +; add sp, 0x6 ; skip the paramerts +; mov cx, 0x0150 +; mov ds, cx +; mov es, cx + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; SYSTEM CALL TABLE STARTING AT POSITION 0x0050:0x0000 +; To already support 64-bit, the entries is 64-bit +; But in 16-bit, the adresses is only 16-bit +; These are stored in the first 16-bits +; There is reserved 2 sectors to the table witch means that we have room for +; 128 System Calls +; |----|----------------------------------------------------------------------------| +; | 1 | Master Table| call [0x0050:0x0000] Pointer to the Master File Table | +; |----|----------------------------------------------------------------------------| +; | 2 | FILE SYSTEM | call [0x0050:0x0008] for arguments see under the file system | +; |----|----------------------------------------------------------------------------| +; | 3 | OS_LIB | call [0x0050:0x0016] for arguments see under the file system | +; |----|----------------------------------------------------------------------------| +; | 1 | FILE SYSTEM | call [0x0050:0x0000] for arguments see under the file system | +; |----|----------------------------------------------------------------------------| +; | 2 | OS_LIB | call [0x0050:0x0008] for arguments see under the file system | +; |----|----------------------------------------------------------------------------| +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + xor bx, bx + mov al, 0x49 + mov ah, 0x0E + int 0x10 +jmp 0x0150:sing_loaded ;%include "mem_lib/mem_lib.nasm" %include "lib/os_lib.nasm" %include "lib/string.nasm" @@ -18,12 +75,15 @@ jmp sing_loaded %include "CLI/CLI.nasm" sing_loaded: ; SingOS is ready for the user: - - mov ax, 0x8fc0 - mov ss, ax ; Set 'ss' to this location (the beginning of our stack region) - mov sp, 0xffff ; Set 'ss:sp' to the top of our 8K stack - mov bp, sp - + xor bx, bx + mov al, 0x49 + mov ah, 0x0E + int 0x10 +; mov ax, 0x8fc0 +; mov ss, ax ; Set 'ss' to this location (the beginning of our stack region) +; mov sp, 0xffff ; Set 'ss:sp' to the top of our 8K stack +; mov bp, sp +; sing_ready: ; SingOS is ready for the user: %if 0 call Go32Bit @@ -285,6 +345,7 @@ global_vars: ; creation of a new file. global_disk_identifier db 0 ; set by the bios passed by the bootloader, ; this is the bios ID + global_disk_FSCI_LBA_position db 0 data: welcome db "###############################################################################", 13, 10, "# Welcome to SingOS - VERSION 0.0.6.1 #", 13, 10, "# #", 13, 10, "###############################################################################", 13, 10, 'Press ESC to halt.', 13, 10, 13, 10, 0 @@ -293,15 +354,18 @@ data: number_one_zstring db '71', 0 example_format_string db "(%x-%x-%x){%d%%}",0 -;times 131072-($-$$) db 0 ; 256 sectos -;GLOBAL_VSFS_START db 'VSFS v0.1' ; sector 257 reserved for file system information -%include "go32bit.nasm" +Parameter_Struct: + .path dw 0x00 ; char* + .new_path dw 0x00 ; char* + .buffer_segment dw 0x00 ; int + .buffer_address dw 0x00 ; int + .buffer_size dw 0x00 ; int + .data_length dw 0x00 ; int + .byte_offset_into_file dw 0x00 ; int + .entry_kind dw 0x00 ; Table_Entry_Kind -; times ((1<<13)-($-$$)) db 0 ; sector 258 to sector 2048 should be avaliable to the filesystem. - - -times ((1<<20)-($-$$) - 26) db 0 ; sector 258 to sector 2048 should be avaliable to the filesystem. -magic_string_end_of_SingOS_kernel db '** END OF KERNEL SingOS **' +;times 131072-($-$$) db 0 ; 256 sectos +;GLOBAL_VSFS_START db 'VSFS v0.1' ; sector 257 reserved for file system information -times ((1<<23)-($-$$)) db 0 \ No newline at end of file +%include "go32bit.nasm" \ No newline at end of file diff --git a/vbr.nasm b/vbr.nasm index 2ff530d..1ada1b7 100644 --- a/vbr.nasm +++ b/vbr.nasm @@ -1,192 +1,196 @@ +ORG 0x7c00 BITS 16 -%define DISK_SERVICE 0x0050:0x0256 -%define KERNEL 0x0050:0x0512 +%define DISK_SERVICE 0x0050:0x0000 +%define KERNEL 0x2500:0x0000 ;0x0050:0x0512 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - jmp short vbr_lfsf - nop ; Used later as a FLAG byte for extended INT 13 Disk Func.'s (See instruction at: 7CADh). - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - ; 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 - ; NOTE(jakob): From MikeOS - ; Why do we need this... damn BIOS -;times 71 - ($-$$) db 0 - OEMLabel db "SingOs " ; Disk label - ; 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 - ; ; (224 * 32 = 7168 = 14 sectors to read) - ; LogicalSectors dw 0x4000 ; Number of logical sectors - ; MediumByte db 0xF0 ; 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 0 ; Drive signature: 41 for floppy - ; VolumeID dd 0x00000000 ; Volume ID: any number -; VolumeLabel db "SingOs "; Volume Label: any 11 chars -; FileSystem db "VSFS " ; File system type: don't change! - -vbr_lfsf: ; Volume Boot Record ; This will start SingOS from the disk ; The disk format has to be LessSimpleFileSystem +; Loading /kernel/kernel.bin which should contain the kernel for the system ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + ; Ensure that the data segment and extra segment is set to 0x00 + mov ax, 0x00 + mov ds, ax + mov es, ax -; loading essentials for SingOS to run - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; SYSTEM CALL TABLE STARTING AT POSITION 0x0050:0x0000 -; To already support 64-bit, the entries is 64-bit -; But in 16-bit, the adresses is only 16-bit -; These are stored in the first 16-bits -; There is reserved 2 sectors to the table witch means that we have room for -; 128 System Calls -; |----|----------------------------------------------------------------------------| -; | 1 | Master Table| call [0x0050:0x0000] Pointer to the Master File Table | -; |----|----------------------------------------------------------------------------| -; | 2 | FILE SYSTEM | call [0x0050:0x0008] for arguments see under the file system | -; |----|----------------------------------------------------------------------------| -; | 3 | OS_LIB | call [0x0050:0x0016] for arguments see under the file system | -; |----|----------------------------------------------------------------------------| -; | 1 | FILE SYSTEM | call [0x0050:0x0000] for arguments see under the file system | -; |----|----------------------------------------------------------------------------| -; | 2 | OS_LIB | call [0x0050:0x0008] for arguments see under the file system | -; |----|----------------------------------------------------------------------------| -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - - mov [vbr_disk_identifier], dl ; saving disk_identifier, this is the number the disk that we are booting from. - ; This number is set by the bios - - xor ax, ax - mov al, dl + ; Setup stack + mov ax, 0x8fc0 + mov ss, ax ; Set 'ss' to this location (the beginning of our stack region) + mov sp, 0xffff ; Set 'ss:sp' to the top of our 8K stack + mov bp, sp - mov al, [vbr_disk_identifier] + mov [global_disk_identifier], dl ; saving disk_identifier, this is the number the disk that we are booting from. - mov [vbr_lba_position_at_disk], ax ; From the MBR we need information of where we are located at the disk. - ; If this fails, we could lookup our self, in the MBR where we are located. - ;mov ax, 0x50 - ;mov cs, ax - ;mov ds, ax - ;mov ax, 0x8fc0 - ;mov ss, ax ; Set 'ss' to this location (the beginning of our stack region) - ;mov sp, 0xffff ; Set 'ss:sp' to the top of our 8K stack - ;mov bp, sp ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; The system has to support int13 bios extended system calls, otherwise is SingOS not supporting the hardware. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; mov ah, 0x41 ;Set AH = 0x41 mov bx, 0x55aa ;BX = 0x55AA - mov dl, [vbr_disk_identifier] ;DL = disk_id - int 0x13 ;Issue an INT 0x13. - jc .is_not_supported - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - ; The system is suportted - ; We are now loading the filesystem - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - - ;mov WORD bx, [vbr_lba_position_at_disk] - mov WORD [DAPACK.lba_addr_dw_low], 89 - mov WORD [DAPACK.blkcnt], 0x08 ; Read to sectors, that is what the space is for the buffer in svim - mov WORD [DAPACK.db_addr_segment], 0x50 - mov WORD [DAPACK.db_addr_offset], 0x256 - mov si, DAPACK ; address of "disk address packet" - mov ah, 0x42 ; READ - mov dl, [vbr_disk_identifier] - int 0x13 - ;call dumpax - ;call DISK_SERVICE - - mov [vbr_disk_identifier], dl - mov al, dl - ;call DISK_SERVICE - - ;mov ax, 0 - ;mov ah, 0x10 - ;int 0x16 - - ;mov ah, 0x0e - ;mov al, 66 ; backspace - ;int 0x10 ; print char - - ;call DISK_SERVICE + mov dl, [global_disk_identifier] ;DL = disk_id + int 0x13 ;Issue an INT 0x13. + jnc ext_disk_supported + ; The System does support exented read write + mov si, vbr_lsfs_disk_error_msg + call 0x00:tmp_print + cli + hlt - ;mov ax, 0 - ;mov ah, 0x10 - ;int 0x16 - - ;mov ah, 0x0e - ;mov al, 66 ; backspace - ;int 0x10 ; print char - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - ; The disk service is now loaded. - ; Now we are going to load the Master table. - ; - ; We are now loading the filesystem - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;Routine for printing a 'ax' as hex + ;tmp_dumpax: + ;pusha ; save registers + ;mov bx, ax + ;mov ah, 0xE ; Teletype output + + ;mov cx, 4 ; 4 nipples in a 16 bit word + ;.loop: + ;rol bx, 4 ; rotate to next nipple + ;mov al, bl ; we copy to al because we need to mask only the low 4 bits + ;and al, 1111b ; Do the masking + ;add al, '0' ; convert to ASCII + ;cmp al, '9' ; If we are greater than 9 ascii, we add 7 to make digit 10 be represented as 'A' + ;jbe .skip ; -|- + ;add al, 7 ; -|- + ;.skip: ; -|- + ;int 0x10 ; BIOS call 'output' + ;loop .loop + + ;popa ; restore registers + ;retf + + tmp_print: + ; Prints string in si + ; IN si: zero terminated string to print + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;mov ax, 0x7e55 + ;mov ax, si + ;call 0x00:tmp_dumpax + mov ah, 0xE ; Specify 'int 0x10' 'teletype output' function + ; [AL = Character, BH = Page Number, BL = Colour (in graphics mode)] + .printchar: + lodsb ; Load byte at address SI into AL, and increment SI + test al, al + jz .done ; If the character is zero (NUL), stop writing the string + int 0x10 ; Otherwise, print the character via 'int 0x10' + jmp .printchar ; Repeat for the next character + .done: + retf - mov WORD [DAPACK.lba_addr_dw_low], 97 - mov WORD [DAPACK.blkcnt], 0x1f - mov WORD [DAPACK.db_addr_segment], 0x50 - mov WORD [DAPACK.db_addr_offset], 0x0512 +; loading essentials for SingOS to run +; starting by loading the rest of the VBR: +ext_disk_supported: + mov si, vbr_message + call 0x00:tmp_print + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ; The system is suportted + ; We are now loading the kernel "/kernel/kernel.bin" + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + ; INPUT + ; ax = sector index for the FSCI that has to be loaded. + ; bx = segment + ;mov ax, [vbr_LBA_FSCI] + ;mov bx, 0x00 + ;call lsfs_load_fsci_info; + + ;INPUT + ; ax = filename + ; bx = pointer to buffer + ; cx = buffer_size + ; dx = offset in file + ; es = segment to read in data + ;call lsfs_read_file + ; RETURN + ; ax preserved + ; bx preserved + ; cx preserved + ; dx data read + ; es = remember to restore es if this has to be saved. + + mov ax, [vbr_LBA_address] + inc ax + mov dl, [global_disk_identifier] + mov WORD [DAPACK.lba_addr_dw_low], ax + mov WORD [DAPACK.blkcnt], 0x10 + mov WORD [DAPACK.db_addr_segment], 0x7e0 + mov WORD [DAPACK.db_addr_offset], 0x00 mov si, DAPACK ; address of "disk address packet" mov ah, 0x42 ; READ - mov dl, [vbr_disk_identifier] + mov dl, [global_disk_identifier] int 0x13 - - ;call dumpax - - - xor ax, ax - mov dl, [vbr_disk_identifier] - mov al, dl - ;call dumpax - mov dl, [vbr_disk_identifier] - - jmp KERNEL + mov cx, [vbr_LBA_FSCI] + mov bx, ds + mov ax, 0x1 + push cx + push bx + push ax + mov cx, 0x7e0 + mov ds, cx + mov es, cx + call 0x7e0:0x00 + add sp, 0x6 ; skip the paramerts + mov cx, 0x0 + mov ds, cx + mov es, cx + + ; Set the Parameter_Struct + mov ax, lsfs_path + mov [Parameter_Struct.path], ax + mov WORD [Parameter_Struct.buffer_segment], 0x50 + mov WORD [Parameter_Struct.buffer_address], 0x00 + mov WORD [Parameter_Struct.buffer_size], 0xFFFF + mov WORD [Parameter_Struct.byte_offset_into_file], 0x00 + + mov cx, Parameter_Struct + mov bx, ds + mov ax, 0x2 + push cx + push bx + push ax + mov cx, 0x7e0 + mov ds, cx + mov es, cx + call 0x7e0:0x00 + add sp, 0x6 ; skip the paramerts + mov cx, 0x0 + mov ds, cx + mov es, cx + + ; Set the Parameter_Struct + mov ax, kernel_path + mov [Parameter_Struct.path], ax + mov WORD [Parameter_Struct.buffer_segment], 0x2500 + mov WORD [Parameter_Struct.buffer_address], 0x00 + mov WORD [Parameter_Struct.buffer_size], 0xFFFF + mov WORD [Parameter_Struct.byte_offset_into_file], 0x00 + + mov cx, Parameter_Struct + mov bx, ds + mov ax, 0x2 + push cx + push bx + push ax + mov cx, 0x7e0 + mov ds, cx + mov es, cx + call 0x7e0:0x00 + add sp, 0x6 ; skip the paramerts + mov cx, 0x0 + mov ds, cx + mov es, cx + + + ; ready to jump to the kernel + mov bx, [vbr_LBA_FSCI] + mov dl, [global_disk_identifier] + jmp KERNEL nop cli hlt - .is_not_supported: - ; The System does support exented read write - mov si, lsfs_disk_error_msg - ;call print - -;Routine for printing a 'ax' as hex -dumpax: - pusha ; save registers - mov bx, ax - mov ah, 0xE ; Teletype output - - mov cx, 4 ; 4 nipples in a 16 bit word - .loop: - rol bx, 4 ; rotate to next nipple - mov al, bl ; we copy to al because we need to mask only the low 4 bits - and al, 1111b ; Do the masking - add al, '0' ; convert to ASCII - cmp al, '9' ; If we are greater than 9 ascii, we add 7 to make digit 10 be represented as 'A' - jbe .skip ; -|- - add al, 7 ; -|- - .skip: ; -|- - int 0x10 ; BIOS call 'output' - loop .loop - - popa ; restore registers - ret - - -vbr_disk_identifier db 0 -vbr_lba_position_at_disk dw 0 -lsfs_disk_error_msg db 'The system does not support disk operations,', 13, 10, 0 - DAPACK: .dap_Size: db 0x10 ; This is always 16 bytes (0x10) .rev_byte: db 0x0 ; reserved byte, should always be zero @@ -196,97 +200,32 @@ DAPACK: .lba_addr_dw_low: dd 0x0 ; put the lba to read in this spot .lba_addr_dw_high: dd 0x0 ; more storage bytes only for big lba's ( > 4 bytes ) - times 4096-($-$$) db 0 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; HERE START THE FILE SYSTEM -; This is the Master Table -; This is the fixed entries when the system is compilet -; DEFAULT SIZE IS 64 FILES -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -; Entry one: -;.filename: -db 'LSFS v0.1.4-exp', 13, 10, '(LessSimpelFileSystem)', 13, 10, 'Developed to SingOS', 13, 10, 'by Jorn Guldberg', 13, 10, 0 ; 66 chars + 8 bytes -times 175 db 0 ; 256 bytes file system informaiton -dw 24, 0x00, 0x00, 0x00 ; offset on disk asb LBA address -dw 23, 0x00, 0x00, 0x00 ; offset on disk asb LBA address -dw 2306, 0x00, 0x00, 0x00 ; Next free LBA partition index free -dw 0x04, 0x00, 0x00, 0x00 ; Next free uniqe ID -dw 0x00, 0x00, 0x00, 0x00 ; next_sector_reuse_pointer -dw 0xff, 0xff, 0xff, 0xff ; last_sector_index_on_partition -dw 0x00, 0x00, 0x00, 0x00 ; sectors_size_on_disk -times 200 db 0 - -;db 'File_System_Control_information', 0 -;times 224 db 0 -;.file_id: -;dw 0x0, 0x0, 0x0, 0x00 ; 64-bits -;.file_size -;dw 512, 0x0, 0x0, 0x0 ; 64-bits Should be the actual number of bytes. -;.ext_file_data 64-bits (Extended data about the file, timestamps etc.) -;dw 0x0, 0x0, 0x0, 0x0 -;control_bits 64-bits -;dw 0x0, 0x0, 0x0, 0x0 -;.file_data_pointers -;dw 88, 0x0, 0x0, 0x0 -;times 216 db 0 - -; Entry Two: -db 'LessSimpelFileSystem.module', 0 -times 228 db 0 -;.file_id: -dw 0x01, 0x0, 0x0, 0x0 -;.file_size -dw 4096, 0x0, 0x0, 0x0 -;.ext_file_data 64-bits (Extended data about the file, timestamps etc.) -dw 0x0, 0x0, 0x0, 0x0 -;control_bits 32-bits -db 0x0, 0x0, 0x0, 0x0 - -; entry kind -db 0x1 ; 1 is file - -db 0x0, 0x0, 0x0 -;.file_data_pointers -dw 89, 0x0, 0x0, 0x0 -times 216 db 0 - -; Entry Three: -db 'kernel', 0 -times 249 db 0 -;.file_id: -dw 0x02, 0x0, 0x0, 0x0 -;.file_size -dw 0x00, 0x10, 0x0, 0x0 -;.ext_file_data 64-bits (Extended data about the file, timestamps etc.) -dw 0x0, 0x0, 0x0, 0x0 -;control_bits 32-bits -db 0x0, 0x0, 0x0, 0x0 -; entry kind -db 0x1 ; 1 is file -db 0x0, 0x0, 0x0 -;.file_data_pointers -dw 97, 0x0, 0x0, 0x0 -times 216 db 0 - -; Entry Three: -db 'First_Folder', 0 -times 243 db 0 -;.file_id: -dw 0x03, 0x0, 0x0, 0x0 -;.file_size -dw 0x20, 0x00, 0x0, 0x0 -;.ext_file_data 64-bits (Extended data about the file, timestamps etc.) -dw 0x0, 0x0, 0x0, 0x0 -;control_bits 32-bits -db 0x0, 0x0, 0x0, 0x0 -; entry kind -db 0x2 ; 1 is folder -db 0x0, 0x0, 0x0 -;.file_data_pointers -dw 0x0, 0x0, 0x0, 0x0 -times 216 db 0 - -times 4096 + (32768-($-$$)) db 0 \ No newline at end of file +Parameter_Struct: + .path dw 0x00 ; char* + .new_path dw 0x00 ; char* + .buffer_segment dw 0x00 ; int + .buffer_address dw 0x00 ; int + .buffer_size dw 0x00 ; int + .data_length dw 0x00 ; int + .byte_offset_into_file dw 0x00 ; int + .entry_kind dw 0x00 ; Table_Entry_Kind + + +global_disk_identifier db 0 +vbr_message db 'VBR: Less Simple File System', 13, 10, 'Loading system', 13, 10, 0 +vbr_lsfs_disk_error_msg db 'The system does not support disk operations', 0 +lsfs_path db '/kernel/utils/lsfs.bin', 0 +kernel_path db '/kernel/kernel.bin', 0 + +times 446-($-$$) db 0 +vbr_size_in_bytes dw 0x00, 0x00, 0x00, 0x00 ; size of the VBR in secotrs (Such that we can load the rest of the VBR) +vbr_LBA_address dw 0x00, 0x00, 0x00, 0x00 ; Abselout LBA adress of this VBR, such that we know where to find the FSCI (offset 1MB) +vbr_LBA_FSCI dw 0x00, 0x00, 0x00, 0x00 +times 510-($-$$) db 0 +dw 0x1818; Signature, homemade, sshould it be 0xAA55? + +; rest of VBR, which has to be loaded in the first part of the VBR +;%include "filesystems/lsfs/lsfs.nasm" +incbin "../lsfs_16-bit/disk.out" +; By specification the max size can be 1MB of the compiled file. \ No newline at end of file