;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; ;; Copyright (C) KolibriOS team 2004-2022. All rights reserved. ;; ;; Distributed under terms of the GNU General Public License ;; ;; ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; $Revision$ keymap: db '6',27 db '1234567890-=',8,9 db 'qwertyuiop[]',13 db '~asdfghjkl;',39,96,0,'\zxcvbnm,./',0,'45 ' db '@234567890123',180,178,184,'6',176,'7' db 179,'8',181,177,183,185,182 db 'AB?',0,'45 ' db '@234567890123',180,178,184,'6',176,'7' db 179,'8',181,177,183,185,182 db 'AB>D',255,'FGHIJKLMNOPQRSTUVWXYZ' db 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' db 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' db 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' keymap_alt: db ' ',27 db ' @ $ {[]}\ ',8,9 db ' ',13 db ' ',0,' ',0,'4',0,' ' db ' ',180,178,184,'6',176,'7' db 179,'8',181,177,183,185,182 db 'ABCD',255,'FGHIJKLMNOPQRSTUVWXYZ' db 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' db 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' db 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' if lang eq ru boot_initirq cp866 'Инициализация IRQ',0 boot_picinit cp866 'Инициализация PIC',0 boot_v86machine cp866 'Инициализация системной V86 машины',0 boot_inittimer cp866 'Инициализация системного таймера (IRQ0)',0 boot_initapic cp866 'Попытка инициализации APIC',0 boot_enableirq cp866 'Включить прерывания 2, 13',0 boot_disabling_ide cp866 'Запрещение прерываний в контроллере IDE',0 boot_enabling_ide cp866 'Разрешение прерываний в контроллере IDE',0 boot_set_int_IDE cp866 'Установка обработчиков прерываний IDE',0 boot_detectfloppy cp866 'Поиск floppy дисководов',0 boot_detecthdcd cp866 'Поиск жестких дисков и ATAPI приводов',0 boot_getcache cp866 'Получение памяти для кэша',0 boot_detectpart cp866 'Поиск разделов на дисковых устройствах',0 boot_init_sys cp866 'Инициализация системного каталога /sys',0 boot_loadlibs cp866 'Загрузка библиотек (.obj)',0 boot_memdetect cp866 'Количество оперативной памяти',' ',' Мб',0 boot_tss cp866 'Установка TSSs',0 boot_cpuid cp866 'Чтение CPUIDs',0 ; boot_devices cp866 'Поиск устройств',0 boot_timer cp866 'Установка таймера',0 boot_initramdisk cp866 'Инициализация рамдиска',0 boot_irqs cp866 'Переопределение IRQ',0 boot_setmouse cp866 'Установка мыши',0 boot_windefs cp866 'Установка настроек окон по умолчанию',0 boot_bgr cp866 'Установка фона',0 boot_resirqports cp866 'Резервирование IRQ и портов',0 boot_setrports cp866 'Установка адресов IRQ',0 boot_setostask cp866 'Создание процесса ядра',0 boot_allirqs cp866 'Открытие всех IRQ',0 boot_tsc cp866 'Чтение TSC',0 boot_cpufreq cp866 'Частота процессора ',' ',' МГц',0 boot_pal_ega cp866 'Установка EGA/CGA 320x200 палитры',0 boot_pal_vga cp866 'Установка VGA 640x480 палитры',0 boot_failed cp866 'Загрузка первого приложения не удалась',0 boot_mtrr cp866 'Установка MTRR',0 boot_APIC_found cp866 'APIC включен', 0 boot_APIC_nfound cp866 'APIC не найден', 0 if preboot_blogesc boot_tasking cp866 'Все готово для запуска, нажмитре ESC для старта',0 end if else if lang eq sp include 'data32sp.inc' else if lang eq et include 'data32et.inc' else boot_initirq db 'Initialize IRQ',0 boot_picinit db 'Initialize PIC',0 boot_v86machine db 'Initialize system V86 machine',0 boot_inittimer db 'Initialize system timer (IRQ0)',0 boot_initramdisk db 'Initialize ramdisk',0 boot_initapic db 'Try to initialize APIC',0 boot_enableirq db 'Enable interrupts 2, 13',0 boot_disabling_ide db 'Disable interrupts in IDE controller',0 boot_enabling_ide db 'Enable interrupts in IDE controller',0 boot_set_int_IDE db 'Set handler of interrupts for IDE',0 boot_detectfloppy db 'Search floppy drives',0 boot_detecthdcd db 'Search hard drives and ATAPI drives',0 boot_getcache db 'Get memory for cache',0 boot_detectpart db 'Search partitions on disk devices',0 boot_init_sys db 'Initialize system directory /sys',0 boot_loadlibs db 'Loading librares (.obj)',0 boot_memdetect db 'Determining amount of memory',0 boot_tss db 'Setting TSSs',0 boot_cpuid db 'Reading CPUIDs',0 ; boot_devices db 'Detecting devices',0 boot_setmouse db 'Setting mouse',0 boot_windefs db 'Setting window defaults',0 boot_bgr db 'Calculating background',0 boot_resirqports db 'Reserving IRQs & ports',0 boot_setostask db 'Setting OS task',0 boot_allirqs db 'Unmasking IRQs',0 boot_tsc db 'Reading TSC',0 boot_cpufreq db 'CPU frequency is ',' ',' MHz',0 boot_pal_ega db 'Setting EGA/CGA 320x200 palette',0 boot_pal_vga db 'Setting VGA 640x480 palette',0 boot_failed db 'Failed to start first app',0 boot_mtrr db 'Setting MTRR',0 boot_APIC_found db 'APIC enabled', 0 boot_APIC_nfound db 'APIC not found', 0 if preboot_blogesc boot_tasking db 'All set - press ESC to start',0 end if end if ;new_process_loading db 'K : New Process - loading',13,10,0 ;new_process_running db 'K : New Process - done',13,10,0 start_not_enough_memory db 'K : New Process - not enough memory',13,10,0 msg_unresolved db 'unresolved ',0 ;msg_module db 'in module ',0 ;if ~ lang eq sp ;msg_version db 'incompatible driver version',13,10,0 ;msg_www db 'please visit www.kolibrios.org',13,10,0 ;end if msg_CR db 13,10,0 szPS2MDriver db '/sys/drivers/PS2MOUSE.SYS',0 ;szCOM_MDriver db 'COM_MOUSE',0 szVidintel db '/sys/drivers/vidintel.sys',0 szUSB db 'USB',0 szEXPORTS db 'EXPORTS',0 sz_EXPORTS db '_EXPORTS',0 szIMPORTS db 'IMPORTS',0 read_firstapp db '/sys/' firstapp db '/sys/LAUNCHER',0 notifyapp db '/sys/@notify',0 if lang eq ru ud_user_message cp866 'Ошибка: неподдерживаемая инструкция процессора',0 mtrr_user_message cp866 '"Обнаружена проблема с конфигурацией MTRR.\nПроизводительность может быть пониженной" -dW',0 else if ~ lang eq sp ud_user_message db 'Error: unsupported processor instruction',0 mtrr_user_message db '"There is a problem with MTRR configuration.\nPerformance can be low" -dW',0 end if kernel_file_load: ; load kernel.mnt to _CLEAN_ZONE dd 0 ; subfunction dq 0 ; offset in file dd 0x31000 ; number of bytes to read dd _CLEAN_ZONE ; buffer for data db '/sys/KERNEL.MNT',0 dev_data_path db '/RD/1/DRIVERS/DEVICES.DAT',0 ; { Patch by Coldy, For DLL autoload dll_lib_path db '/SYS/LIB/DLL.OBJ',0 dll_error_msg db '"DLL.OBJ not found!\nTerminate application!" -dE',0 ; } End patch by Coldy, For DLL autoload align 4 shmem_list: .bk dd shmem_list .fd dd shmem_list dll_list: .bk dd dll_list .fd dd dll_list pcidev_list: .bk dd pcidev_list .fd dd pcidev_list MAX_DEFAULT_DLL_ADDR = 0x80000000 MIN_DEFAULT_DLL_ADDR = 0x70000000 dll_cur_addr dd MIN_DEFAULT_DLL_ADDR align 4 keyboard dd SYSLANG if lang eq en SYSLANG = 1 else if lang eq fi SYSLANG = 2 else if lang eq ge SYSLANG = 3 else if lang eq ru SYSLANG = 4 else if lang eq fr SYSLANG = 5 else if lang eq et SYSLANG = 6 else if lang eq ua SYSLANG = 7 else if lang eq it SYSLANG = 8 else if lang eq be SYSLANG = 9 else if lang eq sp SYSLANG = 10 else if lang eq ca SYSLANG = 11 else display 'unsupported language specified',13,10 end if syslang dd SYSLANG boot_y dd 10 pci_bios_entry dd 0 dw pci_code_sel if __DEBUG__ eq 1 include_debug_strings end if IncludeIGlobals align 16 gdts: dw gdte-$-1 dd gdts dw 0 ; Attention! Do not change the order of the first four selectors. They are used in Fast System Call ; must be : os_code, os_data, app_code, app_data, .... int_code_l: os_code_l: dw 0xffff dw 0x0000 db 0x00 dw 11011111b *256 +10011010b db 0x00 int_data_l: os_data_l: dw 0xffff dw 0x0000 db 0x00 dw 11011111b *256 +10010010b db 0x00 app_code_l: dw 0xFFFF dw 0 db 0 db cpl3 dw G32+D32+0xF; app_data_l: dw 0xFFFF dw 0 db 0 db drw3 dw G32+D32+0xF; ; ------------- PCI BIOS ------------------ pci_code_32: dw 0 ;lim 0-15 dw 0 ;base 0-15 db 0 ;base 16-23 db cpl0 ;type db D32 ;lim 16-19+props db 0 ;base 24-31 pci_data_32: dw 0 ;lim 0-15 dw 0 ;base 0-15 db 0 ;base 16-23 db dpl0 ;type db D32 ;lim 16-19+props db 0 ;base 24-31 ; --------------- APM --------------------- apm_code_32: dw 0x0f ; limit 64kb db 0, 0, 0 dw 11010000b *256 +10011010b db 0x00 apm_code_16: dw 0x0f db 0, 0, 0 dw 10010000b *256 +10011010b db 0x00 apm_data_16: dw 0x0f db 0, 0, 0 dw 10010000b *256 +10010010b db 0x00 ; ----------------------------------------- graph_data_l: dw 0x7ff dw 0x0000 db 0x00 dw 11010000b *256 +11110010b db 0x00 tss0_l: dw sizeof.TSS-1 dw tss and 0xFFFF db (tss shr 16) and 0xFF db 10001001b dw (tss shr 16) and 0xFF00 tls_data_l: dw 0x0FFF dw 0 db 0 db drw3 dw D32 gdte: diff16 "end of .data segment",0,$ endofcode: align 16 cur_saved_data: rb 4096 align 64 fpu_data: rb 0xa80 ; bochs avx512 fpu_data_size = $ - fpu_data BPSLine_calc_area rd MAX_SCREEN_HEIGHT d_width_calc_area rd MAX_SCREEN_HEIGHT mem_block_list rd 64*2 mem_used_list rd 64*2 mem_hash_cnt rd 64 thr_slot_map rd 8 _display display_t bios_fb FRB mst MEM_STATE cpu_freq dq ? heap_mutex MUTEX heap_size dd ? heap_free dd ? heap_blocks dd ? free_blocks dd ? mem_block_mask rd 2 next_memblock dd ? pte_valid_mask dd ? page_start dd ? page_end dd ? sys_page_map dd ? os_stack_seg dd ? srv.fd dd ? srv.bk dd ? LFBAddress dd ? PUTPIXEL dd ? GETPIXEL dd ? if VESA_1_2_VIDEO BANK_SWITCH dd ? ; reserved for vesa 1.2 BANK_RW dd ? end if def_cursor dd ? def_cursor_clock dd ? def_cursor_hresize dd ? def_cursor_vresize dd ? def_cursor_dresize1 dd ? def_cursor_dresize2 dd ? current_cursor dd ? cur_saved_base dd ? cur.lock dd ? ; 1 - lock update, 2- hide cur.left dd ? ; cursor clip box cur.top dd ? cur.w dd ? cur.h dd ? ipc_tmp dd ? ipc_pdir dd ? ipc_ptab dd ? proc_mem_map dd ? proc_mem_pdir dd ? proc_mem_tab dd ? tmp_task_ptab dd ? default_io_map dd ? LFBSize dd ? current_process dd ? current_slot dd ? ; pointer to APPDATA of current thread current_slot_idx dd ? ; index of current thread slot thread_count dd ? ; device addresses ;cdbase dd ? ;cdid dd ? hdbase dd ? ; for boot 0x1f0 hdid dd ? hdpos dd ? ; for boot 0x1 cdpos dd ? ;CPUID information cpu_vendor rd 3 cpu_sign dd ? cpu_info dd ? cpu_caps rd 4 xsave_area_size dd ? xsave_eax dd ? xsave_edx dd ? pg_data PG_DATA heap_test dd ? skin_data dd ? mouse_active dd ? mouse_pause dd ? BgrDrawMode dd ? BgrDataWidth dd ? BgrDataHeight dd ? buttontype dd ? windowtypechanged dd ? debug_step_pointer dd ? lba_read_enabled dd ? ; 0 = disabled , 1 = enabled pci_access_enabled dd ? ; 0 = disabled , 1 = enabled NumBiosDisks dd ? BiosDisksData rb 200h ; struct BiosDiskData BiosDiskCaches rb 80h*(cache_ide1-cache_ide0) BiosDiskPartitions rd 80h img_background dd ? mem_BACKGROUND dd ? static_background_data dd ? hd1_status dd ? ; 0 - free : other - pid application_table_owner dd ? ; 0 - free : other - pid application_table_mutex MUTEX redrawmouse_unconditional dd ? MOUSE_SCROLL_H rw 1 MOUSE_X: rw 1 MOUSE_Y: rw 1 MOUSE_SCROLL_V rw 1 X_UNDER rw 1 Y_UNDER rw 1 COLOR_TEMP dd ? MOUSE_COLOR_MEM dd ? SCR_MODE rw 2 BTN_DOWN: rb 4 cpu_phys_addr_width db ? ; also known as MAXPHYADDR in Intel manuals hdd_appl_data db ? ; 0 = system cache, 1 - application cache cd_appl_data db ? ; 0 = system cache, 1 - application cache timer_ticks_enable db ? ; for cd driver REDRAW_BACKGROUND db ? align 16 DRIVE_DATA: rb DRIVE_DATA_SIZE IncludeUGlobals uglobals_size = $ - endofcode if ~ lang eq sp diff16 "end of .bss",0,$ end if ; check if kernel fits memmap assert $-OS_BASE+PAGE_SIZE < TMP_STACK_TOP org (OS_BASE + RAMDISK_BASE) ; Currently size of memory allocated for the ramdisk is fixed. ; This should be revisited when/if memory map would become more dynamic. RAMDISK_CAPACITY = 2880 ; in sectors RAMDISK: rb RAMDISK_CAPACITY*512 _CLEAN_ZONE: CLEAN_ZONE = _CLEAN_ZONE - OS_BASE BgrAuxTable rb 32768 align 65536 SB16Buffer rb 65536 align 4096 BUTTON_INFO rb 64*1024 RESERVED_PORTS: rb 64*1024 sys_pgmap: rb 1024*1024/8 CDDataBuf: rb 0x1000