umka/umka.asm
Ivan Baravy 5822be9942 Disable disk cache in tests.
It is useless since host OS cache is used anyway. It also slows down
coverage collection because of many taken branches.

Specialized tests should be written to test disk cache specifically.
2020-03-08 01:27:37 +03:00

433 lines
9.5 KiB
NASM

format ELF
__DEBUG__ = 1
__DEBUG_LEVEL__ = 1
public disk_add
public disk_del
public disk_list
public disk_media_changed
public xfs._.user_functions as 'xfs_user_functions'
public ext_user_functions
public fat_user_functions
public ntfs_user_functions
public i40
public coverage_begin
public coverage_end
public sha3_256_oneshot as 'hash_oneshot'
public kos_time_to_epoch
public kos_init
public win_stack_addr as 'kos_win_stack'
public win_pos_addr as 'kos_win_pos'
public lfb_base_addr as 'kos_lfb_base'
cli equ nop
iretd equ retd
lang fix en
macro int n {
if n eq 0x40
call i40
else
int n
end if
}
UEFI = 1
MAX_PRIORITY = 0 ; highest, used for kernel tasks
USER_PRIORITY = 1 ; default
IDLE_PRIORITY = 2 ; lowest, only IDLE thread goes here
section '.text' executable align 32
coverage_begin:
include 'macros.inc'
macro diff16 msg,blah2,blah3 {
if msg eq "end of .data segment"
section '.bss' writeable align 64
end if
}
include 'proc32.inc'
include 'struct.inc'
macro BOOT_LO a {}
macro BOOT a {}
window_data equ twer
CURRENT_TASK equ twer2
TASK_COUNT equ gyads
SLOT_BASE equ gfdskh
include 'const.inc'
restore window_data
restore CURRENT_TASK
restore TASK_COUNT
restore SLOT_BASE
purge BOOT_LO,BOOT
LFB_BASE = lfb_base
;window_data = os_base + 0x00001000
;CURRENT_TASK = os_base + 0x00003000
;TASK_COUNT = os_base + 0x00003004
TASK_BASE = os_base + 0x00003010
TASK_DATA = os_base + 0x00003020
TASK_EVENT = os_base + 0x00003020
CDDataBuf = os_base + 0x00005000
idts = os_base + 0x0000B100
WIN_STACK = os_base + 0x0000C000
WIN_POS = os_base + 0x0000C400
FDD_BUFF = os_base + 0x0000D000
WIN_TEMP_XY = os_base + 0x0000F300
KEY_COUNT = os_base + 0x0000F400
KEY_BUFF = os_base + 0x0000F401 ; 120*2 + 2*2 = 244 bytes, actually 255 bytes
BTN_COUNT = os_base + 0x0000F500
BTN_BUFF = os_base + 0x0000F501
BTN_ADDR = os_base + 0x0000FE88
MEM_AMOUNT = os_base + 0x0000FE8C
SYS_SHUTDOWN = os_base + 0x0000FF00
TASK_ACTIVATE = os_base + 0x0000FF01
sys_proc = os_base + 0x0006F000
SLOT_BASE = os_base + 0x00080000
VGABasePtr = os_base + 0x000A0000
UPPER_KERNEL_PAGES = os_base + 0x00400000
HEAP_BASE = os_base + 0x00800000
include 'system.inc'
include 'fdo.inc'
include 'blkdev/disk.inc'
include 'blkdev/disk_cache.inc'
include 'fs/fs_lfn.inc'
include 'crc.inc'
include 'unicode.inc'
include 'core/string.inc'
include 'core/malloc.inc'
include 'core/heap.inc'
include 'core/dll.inc'
include 'core/taskman.inc'
include 'core/timers.inc'
include 'core/clipboard.inc'
include 'core/syscall.inc'
include 'video/framebuffer.inc'
include 'video/vesa20.inc'
include 'video/vga.inc'
include 'video/blitter.inc'
include 'video/cursors.inc'
include 'sound/playnote.inc'
include 'unpacker.inc'
include 'gui/window.inc'
include 'gui/button.inc'
include 'gui/skincode.inc'
include 'gui/font.inc'
include 'gui/event.inc'
include 'gui/mouse.inc'
include 'hid/keyboard.inc'
include 'hid/mousedrv.inc'
include 'network/stack.inc'
include 'sha3.asm'
proc sha3_256_oneshot c uses ebx esi edi ebp, _ctx, _data, _len
stdcall sha3_256.oneshot, [_ctx], [_data], [_len]
ret
endp
proc kos_time_to_epoch c uses ebx esi edi ebp, _time
mov esi, [_time]
call fsCalculateTime
add eax, 978307200 ; epoch to 2001.01.01
ret
endp
proc kos_init c uses ebx esi edi ebp
mov edi, endofcode
mov ecx, uglobals_size
xor eax, eax
rep stosb
MEMORY_BYTES = 128 SHL 20
DISPLAY_WIDTH = 400
DISPLAY_HEIGHT = 300
mov [pg_data.mem_amount], MEMORY_BYTES
mov [pg_data.pages_count], MEMORY_BYTES / PAGE_SIZE
mov [pg_data.pages_free], MEMORY_BYTES / PAGE_SIZE
mov eax, MEMORY_BYTES SHR 12
mov [pg_data.kernel_pages], eax
shr eax, 10
mov [pg_data.kernel_tables], eax
call init_kernel_heap
call init_malloc
mov [BOOT.bpp], 32
mov [BOOT.x_res], 400
mov [BOOT.y_res], 300
mov [BOOT.pitch], 400*4
mov [BOOT.lfb], LFB_BASE
call init_video
stdcall kernel_alloc, (unpack.LZMA_BASE_SIZE+(unpack.LZMA_LIT_SIZE shl \
(unpack.lc+unpack.lp)))*4
mov [unpack.p], eax
call init_events
mov eax, srv.fd-SRV.fd
mov [srv.fd], eax
mov [srv.bk], eax
mov dword[sysdir_name], 'sys'
mov dword[sysdir_path], 'RD/1'
mov word[sysdir_path+4], 0
mov dword[CURRENT_TASK], 2
mov dword[TASK_COUNT], 2
mov dword[TASK_BASE], CURRENT_TASK + 2*sizeof.TASKDATA
mov [current_slot], SLOT_BASE + 256*2
;call ramdisk_init
mov ebx, SLOT_BASE + 2*256
stdcall kernel_alloc, 0x2000
mov [ebx+APPDATA.process], eax
mov word[cur_dir.path], '/'
mov [ebx+APPDATA.cur_dir], cur_dir
mov [ebx+APPDATA.wnd_clientbox.left], 0
mov [ebx+APPDATA.wnd_clientbox.top], 0
mov [X_UNDER], 500
mov [Y_UNDER], 500
mov word[MOUSE_X], 40
mov word[MOUSE_Y], 30
stdcall kernel_alloc, [_display.win_map_size]
mov [_display.win_map], eax
; set background
movi eax, 1
mov [BgrDrawMode], eax
mov [BgrDataWidth], eax
mov [BgrDataHeight], eax
mov [mem_BACKGROUND], 4
mov [img_background], static_background_data
; set clipboard
xor eax, eax
mov [clipboard_slots], eax
mov [clipboard_write_lock], eax
stdcall kernel_alloc, 4096
test eax, eax
jnz @f
dec eax
@@:
mov [clipboard_main_list], eax
call set_window_defaults
call init_background
call calculatebackground
call init_display
mov eax, [def_cursor]
mov [SLOT_BASE+APPDATA.cursor+256], eax
mov [SLOT_BASE+APPDATA.cursor+256*2], eax
; from set_variables
xor eax, eax
mov [BTN_ADDR], dword BUTTON_INFO ; address of button list
mov byte [KEY_COUNT], al ; keyboard buffer
mov byte [BTN_COUNT], al ; button buffer
;call load_default_skin
;call stack_init
ret
endp
proc sys_msg_board
cmp cl, 0x0d
jz @f
pushad
mov eax, SYS_WRITE
mov ebx, STDOUT
push ecx
mov ecx, esp
mov edx, 1
int 0x80
pop ecx
popad
@@:
ret
endp
change_task:
mov [REDRAW_BACKGROUND], 0
ret
sysfn_saveramdisk:
sysfn_meminfo:
check_fdd_motor_status:
check_ATAPI_device_event:
check_fdd_motor_status_has_work?:
check_ATAPI_device_event_has_work?:
get_clock_ns:
request_terminate:
system_shutdown:
terminate:
LoadMedium:
clear_CD_cache:
allow_medium_removal:
EjectMedium:
save_image:
init_irqs:
PIC_init:
init_sys_v86:
PIT_init:
ramdisk_init:
APIC_init:
unmask_timer:
pci_enum:
load_pe_driver:
usb_init:
fdc_init:
attach_int_handler:
mtrr_validate:
protect_from_terminate:
unprotect_from_terminate:
ReadCDWRetr:
WaitUnitReady:
prevent_medium_removal:
Read_TOC:
commit_pages:
release_pages:
mutex_init:
mutex_lock:
mutex_unlock:
lock_application_table:
unlock_application_table:
get_pg_addr:
free_page:
scheduler_add_thread:
build_interrupt_table:
init_fpu:
init_mtrr:
map_io_mem:
create_trampoline_pgmap:
alloc_page:
sys_settime:
sys_pcibios:
sys_IPC:
pci_api:
sys_resize_app_memory:
f68:
sys_posix:
ret
alloc_pages:
enable_irq:
disable_irq:
ret 4
create_ring_buffer:
ret 8
map_page:
ret 12
map_memEx:
ret 20
HEAP_BASE equ
include 'init.inc'
sys_msg_board equ __pew
include fix pew
macro pew x {}
macro pew x {inclu#de `x}
macro org x {}
macro format [x] {}
macro lea r, v {
if v eq [(ecx-(CURRENT_TASK and 1FFFFFFFh)-TASKDATA.state)*8+SLOT_BASE]
int3
else if v eq [(edx-(CURRENT_TASK and 1FFFFFFFh))*8+SLOT_BASE]
int3
else
lea r, v
end if
}
macro add r, v {
if v eq CURRENT_TASK - (SLOT_BASE shr 3)
int3
else
add r, v
end if
}
include 'kernel.asm'
purge lea,add,org
restore lea,add,org
purge sys_msg_board,HEAP_BASE
coverage_end:
section '.data' writeable align 64
timer_ticks dd 0
fpu_owner dd ?
win_stack_addr dd WIN_STACK
win_pos_addr dd WIN_POS
lfb_base_addr dd lfb_base
uglobal
context_counter dd ?
LAPIC_BASE dd ?
irq_mode dd ?
ioapic_cnt dd ?
ioapic_gsi_base dd ?
MAX_IOAPICS = 2
cache_ide0 IDE_CACHE
cache_ide1 IDE_CACHE
DiskNumber db ?
ChannelNumber db ?
DevErrorCode dd ?
CDSectorAddress dd ?
CDDataBuf_pointer dd ?
allow_dma_access db ?
ide_mutex MUTEX
ide_channel1_mutex MUTEX
ide_channel2_mutex MUTEX
ide_channel3_mutex MUTEX
ide_channel4_mutex MUTEX
ide_channel5_mutex MUTEX
ide_channel6_mutex MUTEX
ide_channel7_mutex MUTEX
ide_channel8_mutex MUTEX
os_base: rb 0x1000
window_data: rb 0x2000
CURRENT_TASK: rb 4
TASK_COUNT: rb 12
rb 0x1000000
BOOT_LO boot_data
BOOT boot_data
lfb_base rd MAX_SCREEN_WIDTH*MAX_SCREEN_HEIGHT
cur_dir:
.encoding rb 1
.path rb maxPathLength
BgrAuxTable rb 32768
BgrAuxTable equ
SB16Buffer rb 65536
SB16Buffer equ
BUTTON_INFO rb 64*1024
BUTTON_INFO equ
endg
include 'data32.inc'