|
|
- // Adress to dump ax, 7C2A
- // Address to print 7C47
- //
- //
-
- #include "std_singos/string.h"
- #include "driver/disk.h"
-
- #define SPACE_MBR_RECORD 2048 // Sectors
- #define SPACE_VBR_RECORD 2048 // Sectors
- #define SIZE_FSCI_RECORD 1 // Sectors
- #define DEFAULT_ENTRY_SIZE 1 // Sectors
- #define SECTOR_SIZE 512 // BYTES
- #define NUMBER_OF_MBR_PARTITIONS 4
- #define DEFAULT_FILE_SIZE 4 // This is in sectors
- #define DEFAULT_DATA_POINTER_SIZE 4 // This is in sectors
- #define DEFAULT_TABLE_SIZE 16
- #define NUM_DATA_POINTERS 27
-
- void dump_ax(input);
- void print_stack(argument);
-
- typedef struct Directory_Table Directory_Table;
- typedef struct struct_table_entry struct_table_entry;
- typedef struct struct_partition_control partition_control;
- typedef struct File_System_Control_Information FSCI;
- typedef struct meta_information_format mif;
- typedef struct tag_record tag_record;
- typedef struct lsfs_file lsfs_file;
-
- typedef enum Table_Entry_Kind
- {
- // These are specific values since, is has to corrospond to the implementation in assembly
- ENTRY_EMPTY = 0,
- ENTRY_FILE = 1,
- ENTRY_DIRECTORY = 2,
- } Table_Entry_Kind;
-
- int number_low;
- int selector;
-
- struct File_System_Control_Information
- {
- char filesystem_information[256];
- long master_table_index[2];
- long this_partition_offset_on_disk[2];
- long next_free_sector[2];
- long next_uniqe_id[2]; // both files and directories gets this.
- long next_sector_reuse_pointer[2];
- long last_sector_index_on_partition[2];
- long maximum_sectors_on_disk[2];
- long sector_size_on_disk[2];
- long not_used[48];
-
- };
-
- struct test
- {
- char* first;
- char* second;
- };
-
- int argument;
- void print(argument);
-
- int main(selector, path, path_segment, fsci_lba_index)
- int path_segment;
- int fsci_lba_index;
- char path[256];
- {
- // selectot should be a "selector" for which disk service
- // one wnats to use.
- // 0 should not be used, to try to ensure that a value has been set explicitly.
-
- int local_segment = 0x7e0;
- char* local_path = "Hello world\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
- struct test my_struct;
- char *fs_info;
- char *hello = "LessSimpleFileSystem_Hello";
- char *yes = "Read file: ";
- int nubmer;
-
-
- my_struct.first = hello;
- my_struct.second = yes;
-
- if (selector == 1)
- {
- // SERVICE: READ FILE
- FSCI fsci;
- print(my_struct.first);
- print(my_struct.second);
- //strcpy(local_path, local_segment, path, path_segment);
- print(local_path);
- fsci.master_table_index[0] = 42;
- nubmer = 0x55;
- //dump_ax(fsci.master_table_index[0]);
- //dump_ax(nubmer);
- //fsci_lba_index = 0x1000;
- fsci.filesystem_information[0] = 'i';
- fsci.filesystem_information[1] = '\0';
- dump_ax(fsci_lba_index);
- stub(fsci_lba_index, 1, &fsci, 0x8fc0);
- //fs_info = fsci.filesystem_information;
- //dump_ax(&fsci);
- print_stack(fsci.filesystem_information);
- dump_ax(fsci.master_table_index[0]);
- }
- else
- {
- print(my_struct.first);
- return 0;
- }
-
- return 0;
-
- }
-
- void print(argument)
- {
- #asm
- push bp
- mov bp,sp
- mov si,4[bp]
- call 0x0000:0x7C47
- pop bp
- #endasm
- }
-
- void print_stack(argument)
- {
- #asm
- push bp
- mov bp,sp
- push ds
- push ax
-
- mov ax, ss
- mov ds, ax
- mov si,4[bp]
- call 0x0000:0x7C47
-
- pop ax
- pop ds
- pop bp
- #endasm
- }
-
- dump_ax_return(input)
- void* input;
- {
- return input;
- }
-
- void dump_ax(input)
- void* input;
- {
- // Force the variable in ax
- dump_ax_return(input)
- #asm
- push bp
- mov bp,sp
- call 0x000:0x7C2A
- pop bp
- #endasm
- }
|