Compile in /init.inc
This commit is contained in:
@@ -24,6 +24,9 @@ kolibri.img: ../default.skn ../fill.cur
|
|||||||
mkfs.vfat -n KOLIBRIOS -F 12 $@
|
mkfs.vfat -n KOLIBRIOS -F 12 $@
|
||||||
mcopy -vmoi $@ ../default.skn ::DEFAULT.SKN
|
mcopy -vmoi $@ ../default.skn ::DEFAULT.SKN
|
||||||
mcopy -vmoi $@ ../fill.cur ::FILL.CUR
|
mcopy -vmoi $@ ../fill.cur ::FILL.CUR
|
||||||
|
mcopy -vmoi $@ ../spray.cur ::SPRAY.CUR
|
||||||
|
mmd -i $@ ::LIB
|
||||||
|
mcopy -vmoi $@ ../network.obj ::LIB/NETWORK.OBJ
|
||||||
|
|
||||||
jfs.img:
|
jfs.img:
|
||||||
fallocate -l 16MiB $@
|
fallocate -l 16MiB $@
|
||||||
|
BIN
network.obj
Normal file
BIN
network.obj
Normal file
Binary file not shown.
18
shell.c
18
shell.c
@@ -2439,6 +2439,23 @@ shell_pci_get_path(struct shell_ctx *ctx, int argc, char **argv) {
|
|||||||
fprintf(ctx->fout, "pci path: %s\n", pci_path);
|
fprintf(ctx->fout, "pci path: %s\n", pci_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
shell_load_dll(struct shell_ctx *ctx, int argc, char **argv) {
|
||||||
|
const char *usage = \
|
||||||
|
"usage: load_dll <path>\n"
|
||||||
|
" path /path/to/library.obj in KolibriOS fs\n";
|
||||||
|
if (argc != 2) {
|
||||||
|
fputs(usage, ctx->fout);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
COVERAGE_ON();
|
||||||
|
void *export = umka_sys_load_dll(argv[1]);
|
||||||
|
COVERAGE_OFF();
|
||||||
|
// if (ctx->reproducible)
|
||||||
|
fprintf(ctx->fout, "### export: %p\n", export);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -3337,6 +3354,7 @@ func_table_t shell_cmds[] = {
|
|||||||
{ "i40", shell_i40 },
|
{ "i40", shell_i40 },
|
||||||
{ "load_cursor_from_file", shell_load_cursor_from_file },
|
{ "load_cursor_from_file", shell_load_cursor_from_file },
|
||||||
{ "load_cursor_from_mem", shell_load_cursor_from_mem },
|
{ "load_cursor_from_mem", shell_load_cursor_from_mem },
|
||||||
|
{ "load_dll", shell_load_dll },
|
||||||
{ "ls70", shell_ls70 },
|
{ "ls70", shell_ls70 },
|
||||||
{ "ls80", shell_ls80 },
|
{ "ls80", shell_ls80 },
|
||||||
{ "move_window", shell_move_window },
|
{ "move_window", shell_move_window },
|
||||||
|
106
umka.asm
106
umka.asm
@@ -174,6 +174,9 @@ pubsym BOOT, 'kos_boot'
|
|||||||
|
|
||||||
EFLAGS.ID = 1 SHL 21
|
EFLAGS.ID = 1 SHL 21
|
||||||
|
|
||||||
|
macro invlpg addr {
|
||||||
|
}
|
||||||
|
|
||||||
macro cli {
|
macro cli {
|
||||||
pushfd
|
pushfd
|
||||||
bts dword[esp], BSF EFLAGS.ID
|
bts dword[esp], BSF EFLAGS.ID
|
||||||
@@ -242,6 +245,7 @@ SLOT_BASE equ __pew20
|
|||||||
sys_proc equ __pew21
|
sys_proc equ __pew21
|
||||||
VGABasePtr equ __pew22
|
VGABasePtr equ __pew22
|
||||||
HEAP_BASE equ __pew23
|
HEAP_BASE equ __pew23
|
||||||
|
page_tabs equ page_tabs_pew
|
||||||
;macro OS_BASE [x] {
|
;macro OS_BASE [x] {
|
||||||
; OS_BASE equ os_base
|
; OS_BASE equ os_base
|
||||||
;}
|
;}
|
||||||
@@ -251,6 +255,7 @@ restore CDDataBuf,idts,WIN_STACK,WIN_POS
|
|||||||
restore FDD_BUFF,WIN_TEMP_XY,KEY_COUNT,KEY_BUFF,BTN_COUNT,BTN_BUFF,BTN_ADDR
|
restore FDD_BUFF,WIN_TEMP_XY,KEY_COUNT,KEY_BUFF,BTN_COUNT,BTN_BUFF,BTN_ADDR
|
||||||
restore MEM_AMOUNT,SYS_SHUTDOWN,SLOT_BASE,sys_proc,VGABasePtr
|
restore MEM_AMOUNT,SYS_SHUTDOWN,SLOT_BASE,sys_proc,VGABasePtr
|
||||||
restore HEAP_BASE
|
restore HEAP_BASE
|
||||||
|
restore page_tabs
|
||||||
purge BOOT_LO,BOOT
|
purge BOOT_LO,BOOT
|
||||||
|
|
||||||
LFB_BASE = lfb_base
|
LFB_BASE = lfb_base
|
||||||
@@ -267,6 +272,8 @@ macro stdcall target, [args] {
|
|||||||
common
|
common
|
||||||
if target eq is_region_userspace
|
if target eq is_region_userspace
|
||||||
cmp esp, esp ; ZF
|
cmp esp, esp ; ZF
|
||||||
|
else if target eq is_string_userspace
|
||||||
|
cmp esp, esp ; ZF
|
||||||
else
|
else
|
||||||
stdcall target, args
|
stdcall target, args
|
||||||
end if
|
end if
|
||||||
@@ -275,6 +282,48 @@ common
|
|||||||
include 'system.inc'
|
include 'system.inc'
|
||||||
include 'fdo.inc'
|
include 'fdo.inc'
|
||||||
|
|
||||||
|
OS_BASE equ 0
|
||||||
|
macro mov target, source {
|
||||||
|
if source eq (HEAP_BASE - 0 + HEAP_MIN_SIZE)/4096
|
||||||
|
push eax eax
|
||||||
|
mov eax, HEAP_BASE
|
||||||
|
add eax, HEAP_MIN_SIZE
|
||||||
|
shr eax, 12
|
||||||
|
mov [esp+4], eax
|
||||||
|
pop eax
|
||||||
|
pop target
|
||||||
|
else if target eq dword [sys_proc-0+PROC.pdt_0+(page_tabs shr 20)]
|
||||||
|
push eax ecx
|
||||||
|
mov eax, page_tabs
|
||||||
|
shr eax, 20
|
||||||
|
add eax, PROC.pdt_0
|
||||||
|
add eax, sys_proc
|
||||||
|
mov ecx, sys_proc+PROC.pdt_0+PG_SWR
|
||||||
|
mov [eax], ecx
|
||||||
|
pop ecx eax
|
||||||
|
else
|
||||||
|
mov target, source
|
||||||
|
end if
|
||||||
|
}
|
||||||
|
macro cmp target, source {
|
||||||
|
if source eq (HEAP_BASE - 0 + HEAP_MIN_SIZE)/4096
|
||||||
|
push eax eax
|
||||||
|
mov eax, HEAP_BASE
|
||||||
|
add eax, HEAP_MIN_SIZE
|
||||||
|
shr eax, 12
|
||||||
|
mov [esp], eax
|
||||||
|
mov eax, [esp+4]
|
||||||
|
cmp target, [esp]
|
||||||
|
pop eax eax
|
||||||
|
else
|
||||||
|
mov target, source
|
||||||
|
end if
|
||||||
|
}
|
||||||
|
|
||||||
|
include 'init.inc'
|
||||||
|
purge cmp
|
||||||
|
purge mov
|
||||||
|
restore OS_BASE
|
||||||
include 'core/sync.inc'
|
include 'core/sync.inc'
|
||||||
;include 'core/sys32.inc'
|
;include 'core/sys32.inc'
|
||||||
macro call target {
|
macro call target {
|
||||||
@@ -291,11 +340,32 @@ purge call
|
|||||||
restore irq0
|
restore irq0
|
||||||
include 'core/syscall.inc'
|
include 'core/syscall.inc'
|
||||||
;include 'core/fpu.inc'
|
;include 'core/fpu.inc'
|
||||||
;include 'core/memory.inc'
|
map_io_mem equ map_io_mem_pew
|
||||||
|
create_trampoline_pgmap equ create_trampoline_pgmap_pew
|
||||||
|
alloc_page equ alloc_page_pew
|
||||||
|
alloc_pages equ alloc_pages_pew
|
||||||
|
free_page equ free_page_pew
|
||||||
|
include 'core/memory.inc'
|
||||||
|
restore map_io_mem, free_page, create_trampoline_pgmap, alloc_page, alloc_pages
|
||||||
;include 'core/mtrr.inc'
|
;include 'core/mtrr.inc'
|
||||||
include 'core/heap.inc'
|
include 'core/heap.inc'
|
||||||
include 'core/malloc.inc'
|
include 'core/malloc.inc'
|
||||||
|
macro mov target, source {
|
||||||
|
if target eq [edi - 4096 + (page_tabs shr 20)]
|
||||||
|
push eax ebx
|
||||||
|
mov ebx, eax
|
||||||
|
mov eax, page_tabs
|
||||||
|
shr eax, 20
|
||||||
|
sub eax, 4096
|
||||||
|
add eax, edi
|
||||||
|
mov [eax], ebx
|
||||||
|
pop ebx eax
|
||||||
|
else
|
||||||
|
mov target, source
|
||||||
|
end if
|
||||||
|
}
|
||||||
include 'core/taskman.inc'
|
include 'core/taskman.inc'
|
||||||
|
purge mov
|
||||||
include 'core/dll.inc'
|
include 'core/dll.inc'
|
||||||
macro call target {
|
macro call target {
|
||||||
if target eq pci_read_reg
|
if target eq pci_read_reg
|
||||||
@@ -459,6 +529,8 @@ proc umka_init c uses ebx esi edi ebp
|
|||||||
xor eax, eax
|
xor eax, eax
|
||||||
rep stosb
|
rep stosb
|
||||||
|
|
||||||
|
; call init_page_map
|
||||||
|
|
||||||
mov [xsave_area_size], 0x1000
|
mov [xsave_area_size], 0x1000
|
||||||
|
|
||||||
mov ecx, pg_data.mutex
|
mov ecx, pg_data.mutex
|
||||||
@@ -782,7 +854,7 @@ endp
|
|||||||
extrn system_shutdown
|
extrn system_shutdown
|
||||||
|
|
||||||
sysfn_saveramdisk:
|
sysfn_saveramdisk:
|
||||||
sysfn_meminfo:
|
;sysfn_meminfo:
|
||||||
check_fdd_motor_status:
|
check_fdd_motor_status:
|
||||||
check_ATAPI_device_event:
|
check_ATAPI_device_event:
|
||||||
check_fdd_motor_status_has_work?:
|
check_fdd_motor_status_has_work?:
|
||||||
@@ -795,7 +867,7 @@ allow_medium_removal:
|
|||||||
EjectMedium:
|
EjectMedium:
|
||||||
save_image:
|
save_image:
|
||||||
init_sys_v86:
|
init_sys_v86:
|
||||||
load_pe_driver:
|
;load_pe_driver:
|
||||||
usb_init:
|
usb_init:
|
||||||
fdc_init:
|
fdc_init:
|
||||||
mtrr_validate:
|
mtrr_validate:
|
||||||
@@ -805,11 +877,8 @@ ReadCDWRetr:
|
|||||||
WaitUnitReady:
|
WaitUnitReady:
|
||||||
prevent_medium_removal:
|
prevent_medium_removal:
|
||||||
Read_TOC:
|
Read_TOC:
|
||||||
commit_pages:
|
|
||||||
release_pages:
|
|
||||||
lock_application_table:
|
lock_application_table:
|
||||||
unlock_application_table:
|
unlock_application_table:
|
||||||
get_pg_addr:
|
|
||||||
free_page:
|
free_page:
|
||||||
build_interrupt_table:
|
build_interrupt_table:
|
||||||
init_fpu:
|
init_fpu:
|
||||||
@@ -817,16 +886,16 @@ init_mtrr:
|
|||||||
create_trampoline_pgmap:
|
create_trampoline_pgmap:
|
||||||
alloc_page:
|
alloc_page:
|
||||||
|
|
||||||
sys_IPC:
|
;sys_IPC:
|
||||||
sys_resize_app_memory:
|
sys_resize_app_memory:
|
||||||
f68:
|
;f68:
|
||||||
v86_irq:
|
v86_irq:
|
||||||
test_cpu:
|
;test_cpu:
|
||||||
acpi_locate:
|
;acpi_locate:
|
||||||
init_BIOS32:
|
;init_BIOS32:
|
||||||
mem_test:
|
;mem_test:
|
||||||
init_mem:
|
;init_mem:
|
||||||
init_page_map:
|
;init_page_map:
|
||||||
ahci_init:
|
ahci_init:
|
||||||
enable_acpi:
|
enable_acpi:
|
||||||
acpi.call_name:
|
acpi.call_name:
|
||||||
@@ -843,13 +912,14 @@ acpi._.lookup_node:
|
|||||||
acpi._.print_tree:
|
acpi._.print_tree:
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
load_PE:
|
||||||
alloc_pages:
|
alloc_pages:
|
||||||
ret 4
|
ret 4
|
||||||
create_ring_buffer:
|
;create_ring_buffer:
|
||||||
ret 8
|
ret 8
|
||||||
map_page:
|
;map_page:
|
||||||
ret 12
|
ret 12
|
||||||
map_memEx:
|
;map_memEx:
|
||||||
ret 20
|
ret 20
|
||||||
|
|
||||||
uglobal
|
uglobal
|
||||||
@@ -924,6 +994,8 @@ HEAP_BASE rb UMKA_MEMORY_BYTES - (HEAP_BASE - os_base + \
|
|||||||
endg
|
endg
|
||||||
|
|
||||||
uglobal
|
uglobal
|
||||||
|
page_tabs:
|
||||||
|
rb 256*1024*1024
|
||||||
v86_irqhooks rd IRQ_RESERVED*2
|
v86_irqhooks rd IRQ_RESERVED*2
|
||||||
cache_ide0 IDE_CACHE
|
cache_ide0 IDE_CACHE
|
||||||
cache_ide1 IDE_CACHE
|
cache_ide1 IDE_CACHE
|
||||||
|
35
umka.h
35
umka.h
@@ -394,6 +394,26 @@ typedef struct {
|
|||||||
// Protocol family
|
// Protocol family
|
||||||
#define AF_INET4 AF_INET
|
#define AF_INET4 AF_INET
|
||||||
|
|
||||||
|
/*
|
||||||
|
struct sockaddr_in {
|
||||||
|
uint16_t sin_family; // sa_family_t
|
||||||
|
uint16_t sin_port; // in_port_t
|
||||||
|
uint32_t sin_addr; // struct in_addr
|
||||||
|
uint8_t sin_zero[8]; // zero
|
||||||
|
};
|
||||||
|
|
||||||
|
struct addrinfo {
|
||||||
|
uint32_t ai_flags; // bitmask of AI_*
|
||||||
|
uint32_t ai_family; // PF_*
|
||||||
|
uint32_t ai_socktype; // SOCK_*
|
||||||
|
uint32_t ai_protocol; // 0 or IPPROTO_*
|
||||||
|
uint32_t ai_addrlen; // length of ai_addr
|
||||||
|
uint32_t ai_canonname; // char*
|
||||||
|
uint32_t ai_addr; // struct sockaddr*
|
||||||
|
uint32_t ai_next; // struct addrinfo*
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
|
||||||
typedef struct net_device_t net_device_t;
|
typedef struct net_device_t net_device_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@@ -708,7 +728,7 @@ typedef struct {
|
|||||||
extern display_t kos_display;
|
extern display_t kos_display;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint64_t addr;
|
void *addr;
|
||||||
uint64_t size;
|
uint64_t size;
|
||||||
uint32_t type;
|
uint32_t type;
|
||||||
} e820entry_t;
|
} e820entry_t;
|
||||||
@@ -1633,6 +1653,19 @@ umka_sys_move_window(size_t x, size_t y, ssize_t xsize, ssize_t ysize) {
|
|||||||
: "memory");
|
: "memory");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void*
|
||||||
|
umka_sys_load_dll(const char *fname) {
|
||||||
|
void *table;
|
||||||
|
__asm__ __inline__ __volatile__ (
|
||||||
|
"call i40"
|
||||||
|
: "=a"(table)
|
||||||
|
: "a"(68),
|
||||||
|
"b"(19),
|
||||||
|
"c"(fname)
|
||||||
|
: "memory");
|
||||||
|
return table;
|
||||||
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
umka_sys_lfn(void *f7080sXarg, f7080ret_t *r, f70or80_t f70or80) {
|
umka_sys_lfn(void *f7080sXarg, f7080ret_t *r, f70or80_t f70or80) {
|
||||||
__asm__ __inline__ __volatile__ (
|
__asm__ __inline__ __volatile__ (
|
||||||
|
@@ -40,6 +40,10 @@ void build_history_filename() {
|
|||||||
sprintf(history_filename, "%s/%s", dir_name, HIST_FILE_BASENAME);
|
sprintf(history_filename, "%s/%s", dir_name, HIST_FILE_BASENAME);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t mem0[64*1024*1024];
|
||||||
|
uint8_t mem1[128*1024*1024];
|
||||||
|
uint8_t mem2[256*1024*1024];
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int argc, char **argv) {
|
main(int argc, char **argv) {
|
||||||
(void)argc;
|
(void)argc;
|
||||||
@@ -55,6 +59,11 @@ main(int argc, char **argv) {
|
|||||||
.hist_file = history_filename};
|
.hist_file = history_filename};
|
||||||
build_history_filename();
|
build_history_filename();
|
||||||
|
|
||||||
|
kos_boot.memmap_block_cnt = 3;
|
||||||
|
kos_boot.memmap_blocks[0] = (e820entry_t){mem0, 64*1024*1024, 1};
|
||||||
|
kos_boot.memmap_blocks[1] = (e820entry_t){mem1, 128*1024*1024, 1};
|
||||||
|
kos_boot.memmap_blocks[2] = (e820entry_t){mem2, 256*1024*1024, 1};
|
||||||
|
|
||||||
kos_boot.bpp = 32;
|
kos_boot.bpp = 32;
|
||||||
kos_boot.x_res = UMKA_DEFAULT_DISPLAY_WIDTH;
|
kos_boot.x_res = UMKA_DEFAULT_DISPLAY_WIDTH;
|
||||||
kos_boot.y_res = UMKA_DEFAULT_DISPLAY_HEIGHT;
|
kos_boot.y_res = UMKA_DEFAULT_DISPLAY_HEIGHT;
|
||||||
|
Reference in New Issue
Block a user