|
|
- push bp
- mov bp,sp
- push 12[bp]
- push 10[bp]
- push 8[bp]
- push 6[bp]
- call _main
- add sp, #0x8
- pop bp
- retf
- ! 1
- ! 1 # 1 "main.c"
- ! 1 # 1 "std_singos/string.h"
- ! 1 void strcpy (destination, destination_segment, source, source_segment );
- !BCC_EOS
- ! 2
- ! 3 void strcpy (destination, destination_segment, source, source_segment )
- ! 4 char *destination;
- export _strcpy
- _strcpy:
- !BCC_EOS
- ! 5 int destination_segment;
- !BCC_EOS
- ! 6 char *source;
- !BCC_EOS
- ! 7 int source_segment;
- !BCC_EOS
- ! 8 {
- ! 9 #asm
- !BCC_ASM
- _strcpy.source set 6
- _strcpy.destination set 2
- _strcpy.source_segment set 8
- _strcpy.destination_segment set 4
- ; copy two strings
- ; IN si: the first (zero terminated) string
- ; IN di: the second (zero terminated) string
- ; OUT SF and ZF (same semantics as cmp)
-
- ! 15 19
-
- push bp
- mov bp,sp
- stringcompare:
- push ax
- push bx
- push di
- push es
- push si
- push ds
- mov ax, 4[bp]; ;
- mov di, ax
- mov ax, 6[bp]; ;
- mov es, ax
- mov ax, 8[bp]; ;
- mov si, ax
- mov ax, 10[bp]; ;
- mov ds, ax
- mov cx, 0x050
- .loop:
- movsb
- cmp cx, 0x0
- je .end
- dec cx
- jmp .loop
- .end:
- pop ds
- pop si
- pop es
- pop di
- pop bx
- pop ax
- pop bp
-
- ! 53 endasm
- !BCC_ENDASM
- ! 54 }
- ret
- ! 55 # 1 "driver/disk.h"
- ! 1 int data_from_disk(index, number_sectors, data_buffer, data_buffer_segment);
- !BCC_EOS
- ! 2 int sec_stub();
- !BCC_EOS
- ! 3 int stub(index, number_sectors, data_buffer, data_buffer_segment);
- !BCC_EOS
- ! 4
- ! 5 int stub(index, number_sectors, data_buffer, data_buffer_segment)
- ! 6 long* index;
- export _stub
- _stub:
- !BCC_EOS
- ! 7 long number_sectors;
- !BCC_EOS
- ! 8 void* data_buffer;
- !BCC_EOS
- ! 9 int data_buffer_segment;
- !BCC_EOS
- ! 10 {
- ! 11
- ! 12 #asm
- !BCC_ASM
- _stub.data_buffer set 8
- _stub.number_sectors set 4
- _stub.data_buffer_segment set $A
- _stub.index set 2
- ! 13 17
-
- push bp
- mov bp,sp
- pusha
-
-
-
-
- mov ax, #DAPACK
- call 0x0000:0x7C2A
-
- lsfs_load_data:
- mov ax, 4[bp];
- mov WORD [DAPACK.lba_addr_dw_low], ax
- mov bx, 6[bp];
- mov WORD [DAPACK.blkcnt], bx
- mov cx, 10[bp];
- mov WORD [DAPACK.db_addr_segment], cx
- mov dx, 8[bp]; ;
- mov WORD [DAPACK.db_addr_offset], dx
- mov si, #DAPACK ; address of
- mov ah, #0x42 ; READ
- mov dl, [global_disk_identifier]
- int #0x13
- call 0x0000:0x7C2A
- popa
- pop bp
- ret
-
-
- DAPACK:
- 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
-
- ! 58 endasm
- !BCC_ENDASM
- ! 59 }
- ret
- ! 60
- ! 61 int sec_stub()
- ! 62 {
- export _sec_stub
- _sec_stub:
- ! 63 return 42;
- push bp
- mov bp,sp
- push di
- push si
- mov ax,*$2A
- pop si
- pop di
- pop bp
- ret
- !BCC_EOS
- ! 64 # 7 "main.c"
- ! 7 }
- ! 8
- ! 9
- ! 10 #define SPACE_VBR_RECORD 2048
- ! 11
- ! 12 #define DEFAULT_ENTRY_SIZE 1
- ! 13
- ! 14 #define NUMBER_OF_MBR_PARTITIONS 4
- ! 15
- ! 16 #define DEFAULT_DATA_POINTER_SIZE 4
- ! 17
- ! 18
- ! 19
- ! 20 void dump_ax(input);
- !BCC_EOS
- ! 21 void print_stack(argument);
- !BCC_EOS
- ! 22
- ! 23 typedef struct Directory_Table Directory_Table;
- !BCC_EOS
- ! 24 typedef struct struct_table_entry struct_table_entry;
- !BCC_EOS
- ! 25 typedef struct struct_partition_control partition_control;
- !BCC_EOS
- ! 26 typedef struct File_System_Control_Information FSCI;
- !BCC_EOS
- ! 27 typedef struct meta_information_format mif;
- !BCC_EOS
- ! 28 typedef struct tag_record tag_record;
- !BCC_EOS
- ! 29 typedef struct lsfs_file lsfs_file;
- !BCC_EOS
- ! 30
- ! 31 typedef enum Table_Entry_Kind
- ! 32 {
- ! 33
- ! 34 ENTRY_EMPTY = 0,
- ! 35 ENTRY_FILE = 1,
- ! 36 ENTRY_DIRECTORY = 2,
- ! 37 } Table_Entry_Kind;
- !BCC_EOS
- ! 38
- ! 39 int number_low;
- !BCC_EOS
- ! 40 int selector;
- !BCC_EOS
- ! 41
- ! 42 struct File_System_Control_Information
- ! 43 {
- ! 44 char filesystem_information[256];
- !BCC_EOS
- ! 45 long master_table_index[2];
- !BCC_EOS
- ! 46 long this_partition_offset_on_disk[2];
- !BCC_EOS
- ! 47 long next_free_sector[2];
- !BCC_EOS
- ! 48 long next_uniqe_id[2];
- !BCC_EOS
- ! 49 long next_sector_reuse_pointer[2];
- !BCC_EOS
- ! 50 long last_sector_index_on_partition[2];
- !BCC_EOS
- ! 51 long maximum_sectors_on_disk[2];
- !BCC_EOS
- ! 52 long sector_size_on_disk[2];
- !BCC_EOS
- ! 53 long not_used[48];
- !BCC_EOS
- ! 54
- ! 55 };
- !BCC_EOS
- ! 56
- ! 57 struct test
- ! 58 {
- ! 59 char* first;
- !BCC_EOS
- ! 60 char* second;
- !BCC_EOS
- ! 61 };
- !BCC_EOS
- ! 62
- ! 63 int argument;
- !BCC_EOS
- ! 64 void print(argument);
- !BCC_EOS
- ! 65
- ! 66 int main(selector, path, path_segment, fsci_lba_index)
- ! 67 int path_segment;
- export _main
- _main:
- !BCC_EOS
- ! 68 int fsci_lba_index;
- !BCC_EOS
- ! 69 char path[256];
- !BCC_EOS
- ! 70 {
- ! 71
- ! 72
- ! 73
- ! 74
- ! 75 int local_segment = 0x7e0;
- push bp
- mov bp,sp
- push di
- push si
- dec sp
- dec sp
- ! Debug: eq int = const $7E0 to int local_segment = [S+8-8] (used reg = )
- mov ax,#$7E0
- mov -6[bp],ax
- !BCC_EOS
- ! 76 char* local_path = "Hello world
|