From ded978bb382e5ba0b2594b3cf4fbbe4786b428ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rn=20Guldberg?= Date: Tue, 25 Jun 2019 21:58:35 +0200 Subject: [PATCH] Save work --- build.sh | 13 ++++++-- disk.out | Bin 0 -> 534 bytes driver/disk.h | 75 +++++++++++++++++++++++++++++++------------- main.c | 67 +++++++++++++++++++++++++++++---------- main.s | Bin 0 -> 10618 bytes std_singos/string.h | 2 +- 6 files changed, 116 insertions(+), 41 deletions(-) create mode 100644 disk.out create mode 100644 main.s diff --git a/build.sh b/build.sh index ff5e461..87ed891 100644 --- a/build.sh +++ b/build.sh @@ -1,6 +1,15 @@ bcc -S main.c -echo -e "jmp _main\n$(cat main.s)" > main.s +echo -e "push bp + mov bp,sp + push 12[bp] + push 10[bp] + push 8[bp] + push 6[bp] + call _main + add sp, 0x4 + pop bp + retf $(cat main.s)" > main.s sed -i '/.globl ___mkargv/d' ./main.s sed -i '/.globl _environ/d' ./main.s -sed -i '/.data/d' ./main.s +sed -i '/^.data$/d' ./main.s as86 -b disk.out main.s diff --git a/disk.out b/disk.out new file mode 100644 index 0000000000000000000000000000000000000000..bf68117c46bb608c6ecd5fbe7c7c47da4c1004a2 GIT binary patch literal 534 zcmWITeEPqP=YJX3|1ysMWo$1dGBB&LFvOk??R**#9L^Rd*X_pAdA!?=t?xj$8%O7{ zZa1#J8{K>X3`?x}7#K>JJzsy5k7JLIj)*-B)RM5Hm0^}v4FdyE*WzA=?l`tixpszb zKdw%`ZienKj!v;ohJCFJTb#PYrZSur1}jaBJuJY03K~FWg@^6XVu*_en;RbH5lu*8TX|-?ps$topGQ3mwkGn57Yp(hv~H-$R-gW z&+tI=5do0X;S8XEy31H*xdVd+>>;^;o(sTmgbGE-LwyN!Hr&Vm%UE8#{O{rd)Cvx# zSddImYGR5)T4qkFl>&oLYH@LJW^O@FsvA%sxU#q;H8 4 bytes ) + DAPACK.dap_Size: db 0x10 + DAPACK.rev_byte: db 0x0 + DAPACK.blkcnt: dw 0x0 + DAPACK.db_addr_offset: dw 0x0 + DAPACK.db_addr_segment: dw 0x0 + DAPACK.lba_addr_dw_low: dd 0x0 + DAPACK.lba_addr_dw_high: dd 0x0 + + global_disk_identifier: db 0x80 + #endasm +} +int sec_stub() +{ + return 42; } \ No newline at end of file diff --git a/main.c b/main.c index d7521e7..bd09681 100644 --- a/main.c +++ b/main.c @@ -18,6 +18,7 @@ #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; @@ -40,16 +41,16 @@ 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]; + 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]; }; @@ -62,8 +63,9 @@ struct test int argument; void print(argument); -int main(selector, path, path_segment) +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 @@ -73,8 +75,10 @@ char path[256]; 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 *hello = "LessSimpleFileSystem"; + char *fs_info; + char *hello = "LessSimpleFileSystem_Hello"; char *yes = "Read file: "; + int nubmer; my_struct.first = hello; @@ -86,10 +90,19 @@ char path[256]; FSCI fsci; print(my_struct.first); print(my_struct.second); - strcpy(local_path, local_segment, path, path_segment); + //strcpy(local_path, local_segment, path, path_segment); print(local_path); - fsci.master_table_index[0] = 32; - dump_ax(fsci.master_table_index[0]); + fsci.master_table_index[0] = 42; + nubmer = 0x55; + //dump_ax(fsci.master_table_index[0]); + dump_ax(nubmer); + fsci.filesystem_information[0] = 'i'; + fsci.filesystem_information[1] = '\0'; + stub(fsci_lba_index, 1, &fsci, 0x8fc0); + fs_info = fsci.filesystem_information; + //dump_ax(&fsci); + print_stack( fs_info ); + //dump_ax(fsci.master_table_index[0]); } else { @@ -106,12 +119,31 @@ void print(argument) #asm push bp mov bp,sp - mov si,4[bp] + 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; { @@ -124,6 +156,9 @@ void* input; // Force the variable in ax dump_ax_return(input) #asm + push bp + mov bp,sp call 0x000:0x7C2A + pop bp #endasm } diff --git a/main.s b/main.s new file mode 100644 index 0000000000000000000000000000000000000000..5707315cf4090e0a80271b3b075513e134f5e5fa GIT binary patch literal 10618 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 B-TD9k literal 0 HcmV?d00001 diff --git a/std_singos/string.h b/std_singos/string.h index 7a3c49c..e9b8a22 100644 --- a/std_singos/string.h +++ b/std_singos/string.h @@ -34,7 +34,7 @@ int source_segment; mov si, ax mov ax, SOURCE_SEGMENT; mov ds, ax - mov cx, 0x050 + mov cx, 0x050 // TODO(Jørn) Hardcded number of bytes to copy .loop: movsb cmp cx, 0x0