diff --git a/disk.out b/disk.out index ebbd0b7..2f3f9d1 100644 Binary files a/disk.out and b/disk.out differ diff --git a/driver/disk.h b/driver/disk.h index ccd6b81..187f3d8 100644 --- a/driver/disk.h +++ b/driver/disk.h @@ -9,7 +9,7 @@ unsigned int data_buffer_segment; { #asm - #define index 4[bp]; // Note that this is a 32-bit argument. + #define index 4[bp]; /* Note that this is a 32-bit argument. */ #define number_sectors 8[bp]; #define data_buffer 12[bp]; #define data_buffer_segment 14[bp]; diff --git a/implementation/lsfs.c b/implementation/lsfs.c index 5cfad1b..bd25d41 100644 --- a/implementation/lsfs.c +++ b/implementation/lsfs.c @@ -43,7 +43,7 @@ short drop_filename; String_Array *split_path; Directory_Table *dir_table = calloc(1, sizeof(Directory_Table)); /* printf("Table index: %lu \n",fsci.master_table_index ); */ - disk_service_read_data_from_disk(fsci.master_table_index[0], DEFAULT_TABLE_SIZE, dir_table, 0x7e0); + disk_service_read_data_from_disk(fsci.master_table_index[0], DEFAULT_TABLE_SIZE, dir_table, 0x50); split_path = string_split_c(path, '/', false); number_of_traversal = split_path->length; @@ -118,10 +118,10 @@ unsigned int data_segment; { break; } - disk_service_read_data_from_disk(file->data_pointer[data_pointer_index], DEFAULT_DATA_POINTER_SIZE, tmp_buffer, 0x7e0); + disk_service_read_data_from_disk(file->data_pointer[data_pointer_index], DEFAULT_DATA_POINTER_SIZE, tmp_buffer, 0x50); print_newline(); print_newline(); - memcpy((data + amount_read), data_segment, tmp_buffer, 0x7e0, amount_to_read); + memcpy((data + amount_read), data_segment, tmp_buffer, 0x50, amount_to_read); data_length -= amount_to_read; amount_read += amount_to_read; data_pointer_index = data_pointer_index + 2; /* Rember that we only use 32-bit, and thats why we jump to at a time*/ @@ -141,9 +141,9 @@ unsigned int data_segment; amount_to_read = ((DEFAULT_DATA_POINTER_SIZE * SECTOR_SIZE) - remaining_offset); } - disk_service_read_data_from_disk(file->data_pointer[data_pointer_index], DEFAULT_DATA_POINTER_SIZE, tmp_buffer, 0x7e0); + disk_service_read_data_from_disk(file->data_pointer[data_pointer_index], DEFAULT_DATA_POINTER_SIZE, tmp_buffer, 0x50); - memcpy(data, data_segment, (tmp_buffer + remaining_offset), 0x7e0, amount_to_read); + memcpy(data, data_segment, (tmp_buffer + remaining_offset), 0x50, amount_to_read); data_length -= amount_to_read; amount_read += amount_to_read; remaining_offset -= amount_to_read; diff --git a/main.c b/main.c index 7e0bcd2..1abcb34 100644 --- a/main.c +++ b/main.c @@ -13,7 +13,7 @@ void* pointer_parameter_struct; Service_Action service_action; Directory_Table current_table; Parameter_Struct parameter_struct; - int local_segment = 0x7e0; + int local_segment = 0x50; unsigned int heap_start = 0x2200; unsigned int heap_end = 0xffff; int stack_segment = 0x8fc0; @@ -80,16 +80,13 @@ void* pointer_parameter_struct; find_file = calloc(sizeof(lsfs_file), 1); lsfs_disk_getattr(find_file, local_path, fsci); print_newline(); - print("Loding SingOS kernel: "); - print(find_file->filename); + print("Buffer_address: "); + dump_ax(parameter_struct.buffer_address); print_newline(); - print("Kernel file id: "); - print_newline(); - print("Kernel file size: "); - print_newline(); - print("Kernel first data pointer: "); + print("Buffer_segmnent: "); + dump_ax(parameter_struct.buffer_segment); - lsfs_disk_read_data_from_file(find_file, 0xffff, 0x00, (long) 0x0, 0x50); + lsfs_disk_read_data_from_file(find_file, parameter_struct.buffer_size, parameter_struct.buffer_address, (long) 0x0, parameter_struct.buffer_segment); } break; @@ -110,9 +107,17 @@ void* pointer_parameter_struct; { print("Hit WRITE case"); } break; + case SERIVCE_WRITE_FS_INFO: + { + print_newline(); + print(fsci->filesystem_information); + print_newline(); + } break; + default: { - print("Default case"); + print("Default case: "); + dump_ax(service_action); } } diff --git a/main.h b/main.h index 33201a8..a371b4c 100644 --- a/main.h +++ b/main.h @@ -38,6 +38,7 @@ typedef enum Service_Action SERVICE_FIND_ENTRY = 2, SERIVCE_READ_DATA = 3, SERIVCE_WRITE_DATA = 4, + SERIVCE_WRITE_FS_INFO = 10, } Service_Action; @@ -61,11 +62,11 @@ struct Parameter_Struct { char* path; char* new_path; - int buffer_segment; - int buffer_address; - int buffer_size; - int data_length; - int byte_offset_into_file; + unsigned int buffer_segment; + unsigned int buffer_address; + unsigned int buffer_size; + unsigned int data_length; + unsigned int byte_offset_into_file; short entry_kind; }; diff --git a/main.s b/main.s index 1a879c3..ce7b8ad 100644 --- a/main.s +++ b/main.s @@ -1422,10 +1422,7 @@ _disk_service_read_data_from_disk.data_buffer set $A _disk_service_read_data_from_disk.number_sectors set 6 _disk_service_read_data_from_disk.data_buffer_segment set $C _disk_service_read_data_from_disk.index set 2 - -! 13 define number_sectors 8[bp]; - - +! 12 16 push bp mov bp,sp @@ -1489,59 +1486,60 @@ ret ! 38 SERVICE_FIND_ENTRY = 2, ! 39 SERIVCE_READ_DATA = 3, ! 40 SERIVCE_WRITE_DATA = 4, -! 41 -! 42 } Service_Action; +! 41 SERIVCE_WRITE_FS_INFO = 10, +! 42 +! 43 } Service_Action; !BCC_EOS -! 43 -! 44 struct File_System_Control_Information -! 45 { -! 46 char filesystem_information[256]; +! 44 +! 45 struct File_System_Control_Information +! 46 { +! 47 char filesystem_information[256]; !BCC_EOS -! 47 long master_table_index[2]; +! 48 long master_table_index[2]; !BCC_EOS -! 48 long this_partition_offset_on_disk[2]; +! 49 long this_partition_offset_on_disk[2]; !BCC_EOS -! 49 long next_free_sector[2 -! 49 ]; +! 50 long next_free_sector[2]; !BCC_EOS -! 50 long next_uniqe_id[2]; +! 51 +! 51 long next_uniqe_id[2]; !BCC_EOS -! 51 long next_sector_reuse_pointer[2]; +! 52 long next_sector_reuse_pointer[2]; !BCC_EOS -! 52 long last_sector_index_on_partition[2]; +! 53 long last_sector_index_on_partition[2]; !BCC_EOS -! 53 long maximum_sectors_on_disk[2]; +! 54 long maximum_sectors_on_disk[2]; !BCC_EOS -! 54 long sector_size_on_disk[2]; +! 55 long sector_size_on_disk[2]; !BCC_EOS -! 55 long not_used[48]; +! 56 long not_used[48]; !BCC_EOS -! 56 -! 57 }; +! 57 +! 58 }; !BCC_EOS -! 58 ! 59 -! 60 struct Parameter_Struct -! 61 { -! 62 char* path; +! 60 +! 61 struct Parameter_Struct +! 62 { +! 63 char* path; !BCC_EOS -! 63 char* new_path; +! 64 char* new_path; !BCC_EOS -! 64 int buffer_segment; +! 65 unsigned int buffer_segment; !BCC_EOS -! 65 int buffer_address; +! 66 unsigned int buffer_address; !BCC_EOS -! 66 int buffer_size; +! 67 unsigned int buffer_size; !BCC_EOS -! 67 int data_length; +! 68 unsigned int data_length; !BCC_EOS -! 68 int byte_offset_into_file; +! 69 unsigned int byte_offset_into_file; !BCC_EOS -! 69 short entry_kind; +! 70 short entry_kind; !BCC_EOS -! 70 }; +! 71 }; !BCC_EOS -! 71 # 6 "implementation/lsfs.h" +! 72 # 6 "implementation/lsfs.h" ! 6 typedef struct lsfs_file lsfs_file; !BCC_EOS ! 7 typedef struct Directory_Table Directory_Table; @@ -1681,10 +1679,10 @@ mov -$A[bp],bx !BCC_EOS ! 83 ! 84 -! 85 Directory_Table *dir_table = lsfs_find_directory(pa +! 85 Directory +! 85 _Table *dir_table = lsfs_find_directory(path, 1 , fsci); dec sp dec sp -! 85 th, 1 , fsci); ! Debug: list * struct File_System_Control_Information fsci = [S+$E+6] (used reg = ) push 8[bp] ! Debug: list int = const 1 (used reg = ) @@ -2144,8 +2142,9 @@ mov -6[bp],ax ! 146 } ! 147 ! 148 -! 149 for (i = 0; i < number_of_traversal; ++i) +! 149 for (i = .38: +! 149 0; i < number_of_traversal; ++i) ! Debug: eq int = const 0 to int i = [S+$10-$A] (used reg = ) xor ax,ax mov -8[bp],ax @@ -2154,8 +2153,7 @@ mov -8[bp],ax ! 150 { br .3C .3D: -! 151 -! 151 for (j = 0; j < 16 ; ++j) +! 151 for (j = 0; j < 16 ; ++j) ! Debug: eq int = const 0 to int j = [S+$10-$C] (used reg = ) xor ax,ax mov -$A[bp],ax @@ -2520,6 +2518,7 @@ br .4A call _print_newline !BCC_EOS ! 225 dump_ax(file->data_pointer[data_pointer_index]); +! 225 mov bx,4[bp] ! Debug: ptradd int data_pointer_index = [S+$1A-$18] to [$36] long = bx+$44 (used reg = ) mov ax,-$16[bp] @@ -2537,8 +2536,7 @@ add sp,*4 ! Debug: func () void = print_newline+0 (used reg = ) call _print_newline !BCC_EOS -! 227 -! 227 next_data = data + amount_read; +! 227 next_data = data + amount_read; ! Debug: ptradd unsigned int amount_read = [S+$1A-$10] to * char data = [S+$1A+6] (used reg = ) mov ax,-$E[bp] add ax,8[bp] @@ -2802,14 +2800,14 @@ _main: !BCC_EOS ! 15 Parameter_Struct parameter_struct; !BCC_EOS -! 16 int local_segment = 0x7e0; +! 16 int local_segment = 0x50; push bp mov bp,sp push di push si add sp,#-$2014 -! Debug: eq int = const $7E0 to int local_segment = [S+$201A-$201A] (used reg = ) -mov ax,#$7E0 +! Debug: eq int = const $50 to int local_segment = [S+$201A-$201A] (used reg = ) +mov ax,*$50 mov -$2018[bp],ax !BCC_EOS ! 17 unsigned int heap_start = 0x2200; @@ -2864,12 +2862,12 @@ mov ax,4[bp] mov -6[bp],ax !BCC_EOS ! 26 +! 27 ! 27 switch (service_action) mov ax,-6[bp] ! 28 { br .5E -! 29 -! 29 case SERIVCE_LOAD_DISK: +! 29 case SERIVCE_LOAD_DISK: ! 30 { .5F: ! 31 @@ -3149,7 +3147,7 @@ add sp,*6 ! Debug: func () void = print_newline+0 (used reg = ) call _print_newline !BCC_EOS -! 83 print("Loding SingOS kernel: "); +! 83 print("Buffer_address: "); ! Debug: list * char = .67+0 (used reg = ) mov bx,#.67 push bx @@ -3158,12 +3156,11 @@ call _print inc sp inc sp !BCC_EOS -! 84 print(find_file->filename); -mov bx,-$202C[bp] -! Debug: list * char = [bx+$12] (used reg = ) -push $12[bx] -! Debug: func () void = print+0 (used reg = ) -call _print +! 84 dump_ax(parameter_struct.buffer_address); +! Debug: list unsigned int parameter_struct = [S+$2030-$2012] (used reg = ) +push -$2010[bp] +! Debug: func () void = dump_ax+0 (used reg = ) +call _dump_ax inc sp inc sp !BCC_EOS @@ -3171,7 +3168,7 @@ inc sp ! Debug: func () void = print_newline+0 (used reg = ) call _print_newline !BCC_EOS -! 86 print("Kernel file id: "); +! 86 print("Buffer_segmnent: "); ! Debug: list * char = .68+0 (used reg = ) mov bx,#.68 push bx @@ -3180,66 +3177,60 @@ call _print inc sp inc sp !BCC_EOS -! 87 print_newline(); -! Debug: func () void = print_newline+0 (used reg = ) -call _print_newline -!BCC_EOS -! 88 print("Kernel file size: "); -! Debug: list * char = .69+0 (used reg = ) -mov bx,#.69 -push bx -! Debug: func () void = print+0 (used reg = ) -call _print -inc sp -inc sp -!BCC_EOS -! 89 print_newline(); -! Debug: func () void = print_newline+0 (used reg = ) -call _print_newline -!BCC_EOS -! 90 print("Kernel first data pointer: "); -! Debug: list * char = .6A+0 (used reg = ) -mov bx,#.6A -push bx -! Debug: func () void = print+0 (used reg = ) -call _print +! 87 dump_ax(parameter_struct.buffer_segment); +! Debug: list unsigned int parameter_struct = [S+$2030-$2014] (used reg = ) +push -$2012[bp] +! Debug: func () void = dump_ax+0 (used reg = ) +call _dump_ax inc sp inc sp !BCC_EOS -! 91 -! 92 lsfs_disk_read_data_from_file(find_file, 0xffff, 0x -! 92 00, (long) 0x0, 0x50); -! Debug: list int = const $50 (used reg = ) -mov ax,*$50 -push ax +! 88 +! 89 lsfs_disk_read_data_from_file(find_file, parameter_struct.buffer_size, parameter_struct.buffer_a +! 89 ddress, (long) 0x0, parameter_struct.buffer_segment); +! Debug: list unsigned int parameter_struct = [S+$2030-$2014] (used reg = ) +push -$2012[bp] ! Debug: list long = const 0 (used reg = ) xor ax,ax xor bx,bx push bx push ax -! Debug: list int = const 0 (used reg = ) -xor ax,ax -push ax -! Debug: list unsigned int = const $FFFF (used reg = ) -mov ax,#$FFFF -push ax +! Debug: list unsigned int parameter_struct = [S+$2036-$2012] (used reg = ) +push -$2010[bp] +! Debug: list unsigned int parameter_struct = [S+$2038-$2010] (used reg = ) +push -$200E[bp] ! Debug: list * struct lsfs_file find_file = [S+$203A-$202E] (used reg = ) push -$202C[bp] ! Debug: func () int = lsfs_disk_read_data_from_file+0 (used reg = ) call _lsfs_disk_read_data_from_file add sp,*$C !BCC_EOS -! 93 -! 94 -! 95 } break; +! 90 +! 91 +! 92 } break; +jmp .5C +!BCC_EOS +! 93 case SERIVCE_READ_DATA: +! 94 { +.69: +! 95 # 103 +! 103 +! 104 print("Hit READ case"); +! Debug: list * char = .6A+0 (used reg = ) +mov bx,#.6A +push bx +! Debug: func () void = print+0 (used reg = ) +call _print +inc sp +inc sp +!BCC_EOS +! 105 } break; jmp .5C !BCC_EOS -! 96 case SERIVCE_READ_DATA: -! 97 { +! 106 case SERIVCE_WRITE_DATA: +! 107 { .6B: -! 98 # 106 -! 106 -! 107 print("Hit READ case"); +! 108 print("Hit WRITE case"); ! Debug: list * char = .6C+0 (used reg = ) mov bx,#.6C push bx @@ -3248,40 +3239,57 @@ call _print inc sp inc sp !BCC_EOS -! 108 } break; +! 109 } break; jmp .5C !BCC_EOS -! 109 case SERIVCE_WRITE_DATA: -! 110 { +! 110 case SERIVCE_WRITE_FS_INFO: +! 111 { .6D: -! 111 print("Hit WRITE case"); -! Debug: list * char = .6E+0 (used reg = ) -mov bx,#.6E -push bx +! 112 print_newline(); +! Debug: func () void = print_newline+0 (used reg = ) +call _print_newline +!BCC_EOS +! 113 print(fsci->filesystem_information); +! Debug: cast * char = const 0 to [$100] char fsci = [S+$202A-$202A] (used reg = ) +! Debug: list * char fsci = [S+$202A-$202A] (used reg = ) +push -$2028[bp] ! Debug: func () void = print+0 (used reg = ) call _print inc sp inc sp !BCC_EOS -! 112 } break; +! 114 print_newline(); +! Debug: func () void = print_newline+0 (used reg = ) +call _print_newline +!BCC_EOS +! 115 } break; jmp .5C !BCC_EOS -! 113 default: -! 114 { -.6F: -! 115 print("Default case"); -! Debug: list * char = .70+0 (used reg = ) -mov bx,#.70 +! 116 +! 117 default: +! 118 { +.6E: +! 119 print("Default case: "); +! Debug: list * char = .6F+0 (used reg = ) +mov bx,#.6F push bx ! Debug: func () void = print+0 (used reg = ) call _print inc sp inc sp !BCC_EOS -! 116 } -! 117 } -! 118 -! 119 return 0; +! 120 dump_ax(service_action); +! Debug: list int service_action = [S+$202A-8] (used reg = ) +push -6[bp] +! Debug: func () void = dump_ax+0 (used reg = ) +call _dump_ax +inc sp +inc sp +!BCC_EOS +! 121 } +! 122 } +! 123 +! 124 return 0; jmp .5C .5E: add sp,*-6 @@ -3290,10 +3298,12 @@ beq .5F sub ax,*1 beq .61 sub ax,*1 -je .6B +je .69 sub ax,*1 +je .6B +sub ax,*6 je .6D -jmp .6F +jmp .6E .5C: ..FFFF = -$2030 add sp,*6 @@ -3304,52 +3314,44 @@ pop di pop bp ret !BCC_EOS -! 120 -! 121 } -! 122 +! 125 +! 126 } +! 127 ! Register BX used in function main +.6F: .70: -.71: -.ascii "Default case" -.byte 0 -.6E: -.72: -.ascii "Hit WRITE case" +.ascii "Default case: " .byte 0 .6C: -.73: -.ascii "Hit READ case" +.71: +.ascii "Hit WRITE case" .byte 0 .6A: -.74: -.ascii "Kernel first data pointer: " -.byte 0 -.69: -.75: -.ascii "Kernel file size: " +.72: +.ascii "Hit READ case" .byte 0 .68: -.76: -.ascii "Kernel file id: " +.73: +.ascii "Buffer_segmnent: " .byte 0 .67: -.77: -.ascii "Loding SingOS kernel: " +.74: +.ascii "Buffer_address: " .byte 0 .60: -.78: +.75: .ascii "File System has been loaded: " .byte 0 .43: -.79: +.76: .ascii "vs " .byte 0 .42: -.7A: +.77: .ascii "New: " .byte 0 .2E: -.7B: +.78: .ascii "Size of table_entry: " .byte 0 .bss