chore: sync repo
This commit is contained in:
parent
8589a5c433
commit
c682f38209
|
@ -2,16 +2,26 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <coff.h>
|
#include <coff.h>
|
||||||
|
|
||||||
|
# define BASE_ADDRESS = 0x100000
|
||||||
|
|
||||||
static char *prg_name;
|
static char *prg_name;
|
||||||
static char *outfile = "a.out";
|
static char *outfile = "a.out";
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
size_t size;
|
||||||
|
uint8_t *raw;
|
||||||
} Section;
|
} Section;
|
||||||
|
|
||||||
|
typedef struct object {
|
||||||
|
size_t section_count;
|
||||||
|
Section *sections;
|
||||||
|
|
||||||
|
struct object *next;
|
||||||
|
} Object;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
||||||
} Object;
|
} Symtab;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
usage(int retcode)
|
usage(int retcode)
|
||||||
|
@ -36,7 +46,7 @@ usage(int retcode)
|
||||||
static void
|
static void
|
||||||
version(void)
|
version(void)
|
||||||
{
|
{
|
||||||
printf("%s commit %s\n", prg_name, MK_COMMIT);
|
printf("%s (%s) %s", prg_name, MK_PACKAGE, MK_COMMIT);
|
||||||
exit(EXIT_SUCCESS);
|
exit(EXIT_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,49 +87,7 @@ main(int argc, char **argv)
|
||||||
|
|
||||||
if (argc <= 1) usage(EXIT_FAILURE);
|
if (argc <= 1) usage(EXIT_FAILURE);
|
||||||
|
|
||||||
fp = fopen(argv[1], "rb");
|
|
||||||
if (fp == NULL)
|
|
||||||
{
|
|
||||||
return (EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
fread(&fhdr, 1, FILHSZ, fp);
|
|
||||||
printf("magic: 0x%hx\n", fhdr.f_magic);
|
|
||||||
printf("n section: %hd\n", fhdr.f_nscns);
|
|
||||||
printf("symtab: 0x%X\n", fhdr.f_symptr);
|
|
||||||
printf("sym entries: %d\n", fhdr.f_nsyms);
|
|
||||||
printf("optional hdr size: %hu\n", fhdr.f_opthdr);
|
|
||||||
printf("flags: 0x%hx\n", fhdr.f_flags);
|
|
||||||
|
|
||||||
if (fhdr.f_opthdr > 0)
|
|
||||||
{
|
|
||||||
buffer = malloc(fhdr.f_opthdr);
|
|
||||||
fread(buffer, 1, fhdr.f_opthdr, fp);
|
|
||||||
free(buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (idx = 0; idx < fhdr.f_nscns; idx++)
|
|
||||||
{
|
|
||||||
fread(&shdr, 1, SCNHSZ, fp);
|
|
||||||
printf("Section: %c%c%c%c%c%c%c%c\n", shdr.s_name[0], shdr.s_name[1],shdr.s_name[2],shdr.s_name[3],shdr.s_name[4],shdr.s_name[5],shdr.s_name[6],shdr.s_name[7]);
|
|
||||||
printf("\tflags: 0x%x\n", shdr.s_flags);
|
|
||||||
printf("\tsize: %d\n", shdr.s_size);
|
|
||||||
}
|
|
||||||
|
|
||||||
fseek(fp, fhdr.f_symptr, SEEK_SET);
|
|
||||||
|
|
||||||
for (idx = 0; idx < fhdr.f_nsyms; idx++)
|
|
||||||
{
|
|
||||||
fread(&entry, 1, SYMESZ, fp);
|
|
||||||
printf("name: %c%c%c%c%c%c%c%c\n", entry.n_name[0], entry.n_name[1],entry.n_name[2],entry.n_name[3],entry.n_name[4],entry.n_name[5],entry.n_name[6],entry.n_name[7]);
|
|
||||||
printf("\tvalue: %d\n", entry.n_value);
|
|
||||||
printf("\tscnum: %hd\n", entry.n_scnum);
|
|
||||||
printf("\ttype: %hd\n", entry.n_type);
|
|
||||||
printf("\tsclass: %d\n", entry.n_sclass);
|
|
||||||
printf("\tnumaux: %d\n", entry.n_numaux);
|
|
||||||
}
|
|
||||||
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
return (EXIT_SUCCESS);
|
return (EXIT_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
|
@ -71,6 +71,8 @@ main(int argc, char **argv)
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
int idx;
|
int idx;
|
||||||
time_t timedat;
|
time_t timedat;
|
||||||
|
char *string_table;
|
||||||
|
size_t sz_stable;
|
||||||
|
|
||||||
#ifndef __stupidos__
|
#ifndef __stupidos__
|
||||||
prg_name = basename(argv[0]);
|
prg_name = basename(argv[0]);
|
||||||
|
@ -139,6 +141,22 @@ main(int argc, char **argv)
|
||||||
printf(" Flags: 0x%hx\n\n", file_header.f_flags);
|
printf(" Flags: 0x%hx\n\n", file_header.f_flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (display_optional_header)
|
||||||
|
{
|
||||||
|
if (file_header.f_opthdr)
|
||||||
|
{
|
||||||
|
fread(&aout_header, 1, AOUTHSZ, fp);
|
||||||
|
printf("A.out header\n");
|
||||||
|
printf(" Magic: %hx\n", aout_header.magic);
|
||||||
|
printf(" Entry: 0x%08X\n", aout_header.entry);
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("There are no optional header.\n\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (display_sections)
|
if (display_sections)
|
||||||
{
|
{
|
||||||
fseek(fp, file_header.f_opthdr + FILHSZ, SEEK_SET);
|
fseek(fp, file_header.f_opthdr + FILHSZ, SEEK_SET);
|
||||||
|
@ -177,6 +195,11 @@ main(int argc, char **argv)
|
||||||
|
|
||||||
if (display_symbol_table)
|
if (display_symbol_table)
|
||||||
{
|
{
|
||||||
|
fseek(fp, 0L, SEEK_END);
|
||||||
|
sz_stable = ftell(fp) - file_header.f_symptr + (SYMESZ * file_header.f_nsyms);
|
||||||
|
string_table = malloc(sz_stable);
|
||||||
|
fseek(fp, file_header.f_symptr + (SYMESZ * file_header.f_nsyms), SEEK_SET);
|
||||||
|
fread(string_table, 1, sz_stable, fp);
|
||||||
printf("Symbol table contains %d entries:\n", file_header.f_nsyms);
|
printf("Symbol table contains %d entries:\n", file_header.f_nsyms);
|
||||||
printf(" Num: Value Type Name\n");
|
printf(" Num: Value Type Name\n");
|
||||||
assert(sizeof(SYMENT) == SYMESZ);
|
assert(sizeof(SYMENT) == SYMESZ);
|
||||||
|
@ -186,7 +209,18 @@ main(int argc, char **argv)
|
||||||
fread(&sym_entry, 1, SYMESZ, fp);
|
fread(&sym_entry, 1, SYMESZ, fp);
|
||||||
memset(name, 0, 9);
|
memset(name, 0, 9);
|
||||||
memcpy(name, sym_entry.n_name, 8);
|
memcpy(name, sym_entry.n_name, 8);
|
||||||
printf(" %d: %08x %hd %s\n", idx, sym_entry.n_value, sym_entry.n_type, name);
|
if (sym_entry.n_zeroes == 0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
printf(" %2d: %08x %hd ", idx, sym_entry.n_value, sym_entry.n_type);
|
||||||
|
if (sym_entry.n_zeroes)
|
||||||
|
{
|
||||||
|
printf("%s\n", name);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("%s\n", string_table + sym_entry.n_offset);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -81,6 +81,7 @@ fat_search_root:
|
||||||
ret
|
ret
|
||||||
.file_found:
|
.file_found:
|
||||||
mov ax, [es:di + fat_entry.start]
|
mov ax, [es:di + fat_entry.start]
|
||||||
|
mov ebx, [es:di + fat_entry.size]
|
||||||
clc
|
clc
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
|
@ -55,11 +55,14 @@ _start:
|
||||||
@@:
|
@@:
|
||||||
; detect filesystem (FAT12/16 or StpdFS)
|
; detect filesystem (FAT12/16 or StpdFS)
|
||||||
; load kernel from filesystem
|
; load kernel from filesystem
|
||||||
; +---------+--------+---------+
|
|
||||||
; | bootsec | sect 1 | stpd sb |
|
; StupidFS layout
|
||||||
; +---------+--------+---------+
|
; +---------+---------+---------....--+----....---+
|
||||||
; 0 512 1024
|
; | bootsec | stpd sb | i-nodes ... | data |
|
||||||
|
; +---------+---------+---------0...--+----....---+
|
||||||
|
; 0 512 1024 XXXX XXXX
|
||||||
;
|
;
|
||||||
|
|
||||||
; for now fat12 is asumed
|
; for now fat12 is asumed
|
||||||
|
|
||||||
call fat_load_root
|
call fat_load_root
|
||||||
|
@ -67,8 +70,12 @@ _start:
|
||||||
mov si, szKernelFile
|
mov si, szKernelFile
|
||||||
call fat_search_root
|
call fat_search_root
|
||||||
jc .error_not_found
|
jc .error_not_found
|
||||||
|
|
||||||
mov [pKernelStartFat], ax
|
mov [pKernelStartFat], ax
|
||||||
|
mov [uKernelSize], ebx
|
||||||
|
|
||||||
|
push ebx
|
||||||
|
mov si, szMsgKernelFound
|
||||||
|
call bios_log
|
||||||
|
|
||||||
; load fat
|
; load fat
|
||||||
xor ax, ax
|
xor ax, ax
|
||||||
|
@ -141,9 +148,11 @@ uDrive rb 1
|
||||||
bDriveLBA db FALSE
|
bDriveLBA db FALSE
|
||||||
|
|
||||||
pKernelStartFat dw 0
|
pKernelStartFat dw 0
|
||||||
|
uKernelSize dd 0
|
||||||
|
|
||||||
szMsgStage2 db "StupidOS Loader", 0
|
szMsgStage2 db "StupidOS Loader", 0
|
||||||
szKernelFile db "VMSTUPIDSYS", 0
|
szKernelFile db "VMSTUPIDSYS", 0
|
||||||
|
szMsgKernelFound db "Kernel found, size: %x", 0
|
||||||
szMsgErrorA20 db "ERROR: can't enable a20 line", 0
|
szMsgErrorA20 db "ERROR: can't enable a20 line", 0
|
||||||
szMsgErrorMemory db "ERROR: can't detect available memory", 0
|
szMsgErrorMemory db "ERROR: can't detect available memory", 0
|
||||||
szMsgErrorSector db "ERROR: reading sector", CR, LF, 0
|
szMsgErrorSector db "ERROR: reading sector", CR, LF, 0
|
||||||
|
@ -170,6 +179,16 @@ common32:
|
||||||
; identity map first 1MB
|
; identity map first 1MB
|
||||||
; map kernel to 0xC000000
|
; map kernel to 0xC000000
|
||||||
; -----------------------
|
; -----------------------
|
||||||
|
mov edi, boot_768_page_table
|
||||||
|
mov esi, 0
|
||||||
|
mov ecx, 1023
|
||||||
|
.1:
|
||||||
|
cmp esi, MULTIBOOT_BASE
|
||||||
|
jl .2
|
||||||
|
.2:
|
||||||
|
|
||||||
|
.3:
|
||||||
|
|
||||||
|
|
||||||
push STPDBOOT_MAGIC
|
push STPDBOOT_MAGIC
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue