You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

166 lines
3.4 KiB

// 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
}