drw0 equ 10010010b ; data read/write dpl0 drw3 equ 11110010b ; data read/write dpl3 cpl0 equ 10011010b ; code read dpl0 cpl3 equ 11111010b ; code read dpl3 D32 equ 01000000b ; 32bit segment G32 equ 10000000b ; page gran ;;;;;;;;;;;;cpu_caps flags;;;;;;;;;;;;;;;; CPU_386 equ 3 CPU_486 equ 4 CPU_PENTIUM equ 5 CPU_P6 equ 6 CPU_PENTIUM4 equ 0x0F CAPS_FPU equ 00 ;on-chip x87 floating point unit CAPS_VME equ 01 ;virtual-mode enhancements CAPS_DE equ 02 ;debugging extensions CAPS_PSE equ 03 ;page-size extensions CAPS_TSC equ 04 ;time stamp counter CAPS_MSR equ 05 ;model-specific registers CAPS_PAE equ 06 ;physical-address extensions CAPS_MCE equ 07 ;machine check exception CAPS_CX8 equ 08 ;CMPXCHG8B instruction CAPS_APIC equ 09 ;on-chip advanced programmable ; interrupt controller ; 10 ;unused CAPS_SEP equ 11 ;SYSENTER and SYSEXIT instructions CAPS_MTRR equ 12 ;memory-type range registers CAPS_PGE equ 13 ;page global extension CAPS_MCA equ 14 ;machine check architecture CAPS_CMOV equ 15 ;conditional move instructions CAPS_PAT equ 16 ;page attribute table CAPS_PSE36 equ 17 ;page-size extensions CAPS_PSN equ 18 ;processor serial number CAPS_CLFLUSH equ 19 ;CLFUSH instruction CAPS_DS equ 21 ;debug store CAPS_ACPI equ 22 ;thermal monitor and software ;controlled clock supported CAPS_MMX equ 23 ;MMX instructions CAPS_FXSR equ 24 ;FXSAVE and FXRSTOR instructions CAPS_SSE equ 25 ;SSE instructions CAPS_SSE2 equ 26 ;SSE2 instructions CAPS_SS equ 27 ;self-snoop CAPS_HTT equ 28 ;hyper-threading technology CAPS_TM equ 29 ;thermal monitor supported CAPS_IA64 equ 30 ;IA64 capabilities CAPS_PBE equ 31 ;pending break enable ;ecx CAPS_SSE3 equ 32 ;SSE3 instructions ; 33 ; 34 CAPS_MONITOR equ 35 ;MONITOR/MWAIT instructions CAPS_DS_CPL equ 36 ; CAPS_VMX equ 37 ;virtual mode extensions ; 38 ; CAPS_EST equ 39 ;enhansed speed step CAPS_TM2 equ 40 ;thermal monitor2 supported ; 41 CAPS_CID equ 42 ; ; 43 ; 44 CAPS_CX16 equ 45 ;CMPXCHG16B instruction CAPS_xTPR equ 46 ; ; ;reserved ; ;ext edx /ecx CAPS_SYSCAL equ 64 ; CAPS_XD equ 65 ;execution disable CAPS_FFXSR equ 66 ; CAPS_RDTSCP equ 67 ; CAPS_X64 equ 68 ; CAPS_3DNOW equ 69 ; CAPS_3DNOWEXT equ 70 ; CAPS_LAHF equ 71 ; CAPS_CMP_LEG equ 72 ; CAPS_SVM equ 73 ;secure virual machine CAPS_ALTMOVCR8 equ 74 ; ; CPU MSR names MSR_SYSENTER_CS equ 0x174 MSR_SYSENTER_ESP equ 0x175 MSR_SYSENTER_EIP equ 0x176 MSR_AMD_EFER equ 0xC0000080 ; Extended Feature Enable Register MSR_AMD_STAR equ 0xC0000081 ; SYSCALL/SYSRET Target Address Register CR0_PE equ 0x00000001 ;protected mode CR0_MP equ 0x00000002 ;monitor fpu CR0_EM equ 0x00000004 ;fpu emulation CR0_TS equ 0x00000008 ;task switch CR0_ET equ 0x00000010 ;extension type hardcoded to 1 CR0_NE equ 0x00000020 ;numeric error CR0_WP equ 0x00010000 ;write protect CR0_AM equ 0x00040000 ;alignment check CR0_NW equ 0x20000000 ;not write-through CR0_CD equ 0x40000000 ;cache disable CR0_PG equ 0x80000000 ;paging CR4_VME equ 0x0001 CR4_PVI equ 0x0002 CR4_TSD equ 0x0004 CR4_DE equ 0x0008 CR4_PSE equ 0x0010 CR4_PAE equ 0x0020 CR4_MCE equ 0x0040 CR4_PGE equ 0x0080 CR4_PCE equ 0x0100 CR4_OSFXSR equ 0x0200 CR4_OSXMMEXPT equ 0x0400 SSE_IE equ 0x0001 SSE_DE equ 0x0002 SSE_ZE equ 0x0004 SSE_OE equ 0x0008 SSE_UE equ 0x0010 SSE_PE equ 0x0020 SSE_DAZ equ 0x0040 SSE_IM equ 0x0080 SSE_DM equ 0x0100 SSE_ZM equ 0x0200 SSE_OM equ 0x0400 SSE_UM equ 0x0800 SSE_PM equ 0x1000 SSE_FZ equ 0x8000 SSE_INIT equ (SSE_IM+SSE_DM+SSE_ZM+SSE_OM+SSE_UM+SSE_PM) OS_BASE equ 0; 0x80400000 window_data equ OS_BASE+0x0000000 CURRENT_TASK equ OS_BASE+0x0003000 TASK_COUNT equ OS_BASE+0x0003004 TASK_BASE equ OS_BASE+0x0003010 TASK_DATA equ OS_BASE+0x0003020 TASK_EVENT equ OS_BASE+0x0003020 ;mouseunder equ OS_BASE+0x0006900 FLOPPY_BUFF equ OS_BASE+0x0008000 ACTIVE_PROC_STACK equ OS_BASE+0x000A400 idts equ OS_BASE+0x000B100 WIN_STACK equ OS_BASE+0x000C000 WIN_POS equ OS_BASE+0x000C400 FDD_DATA equ OS_BASE+0x000D000 ENABLE_TASKSWITCH equ OS_BASE+0x000E000 PUTPIXEL equ OS_BASE+0x000E020 GETPIXEL equ OS_BASE+0x000E024 BANK_SWITCH equ OS_BASE+0x000E030 MOUSE_PICTURE equ OS_BASE+0x000F200 MOUSE_VISIBLE equ OS_BASE+0x000F204 XY_TEMP equ OS_BASE+0x000F300 KEY_COUNT equ OS_BASE+0x000F400 KEY_BUFF equ OS_BASE+0x000F401 BTN_COUNT equ OS_BASE+0x000F500 BTN_BUFF equ OS_BASE+0x000F501 CPU_FREQ equ OS_BASE+0x000F600 MOUSE_PORT equ OS_BASE+0x000F604 PS2_CHUNK equ OS_BASE+0x000FB00 MOUSE_X equ OS_BASE+0x000FB0A MOUSE_Y equ OS_BASE+0x000FB0C MOUSE_COLOR_MEM equ OS_BASE+0x000FB10 COLOR_TEMP equ OS_BASE+0x000FB30 BTN_DOWN equ OS_BASE+0x000FB40 MOUSE_DOWN equ OS_BASE+0x000FB44 X_UNDER equ OS_BASE+0x000FB4A Y_UNDER equ OS_BASE+0x000FB4C ScreenBPP equ OS_BASE+0x000FBF1 MOUSE_BUFF_COUNT equ OS_BASE+0x000FCFF LFBAddress equ OS_BASE+0x000FE80 MEM_AMOUNT equ OS_BASE+0x000FE8C ;LFBSize equ OS_BASE+0x02f9050 SCR_X_SIZE equ OS_BASE+0x000FE00 SCR_Y_SIZE equ OS_BASE+0x000FE04 SCR_BYTES_PER_LINE equ OS_BASE+0x000FE08 SCR_MODE equ OS_BASE+0x000FE0C BTN_ADDR equ OS_BASE+0x000FE88 SYS_SHUTDOWN equ OS_BASE+0x000FF00 TASK_ACTIVATE equ OS_BASE+0x000FF01 REDRAW_BACKGROUND equ OS_BASE+0x000FFF0 BANK_RW equ OS_BASE+0x000FFF2 MOUSE_BACKGROUND equ OS_BASE+0x000FFF4 DONT_DRAW_MOUSE equ OS_BASE+0x000FFF5 DONT_SWITCH equ OS_BASE+0x000FFFF STACK_TOP equ OS_BASE+0x003EC00 FONT_II equ OS_BASE+0x003EC00 FONT_I equ OS_BASE+0x003F600 DISK_DATA equ OS_BASE+0x0040000 PROC_BASE equ OS_BASE+0x0080000 TMP_BUFF equ OS_BASE+0x0090000 VGABasePtr equ OS_BASE+0x00A0000 RAMDISK equ OS_BASE+0x0100000 RAMDISK_FAT equ OS_BASE+0x0280000 FLOPPY_FAT equ OS_BASE+0x0282000 SB16_Status equ OS_BASE+0x02B0000 BUTTON_INFO equ OS_BASE+0x02C0000 RESERVED_PORTS equ OS_BASE+0x02D0000 IRQ_SAVE equ OS_BASE+0x02E0000 SYS_VAR equ OS_BASE+0x02f0000 IMG_BACKGROUND equ OS_BASE+0x0300000 WinMapAddress equ OS_BASE+0x0460000 display_data equ OS_BASE+0x0460000 HD_CACHE equ OS_BASE+0x0600000 stack_data_start equ OS_BASE+0x0700000 eth_data_start equ OS_BASE+0x0700000 stack_data equ OS_BASE+0x0704000 stack_data_end equ OS_BASE+0x071ffff VMODE_BASE equ OS_BASE+0x0760000 resendQ equ OS_BASE+0x0770000 ;skin_data equ OS_BASE+0x0778000 tss_data equ 0x780000 draw_data equ 0x988000 HEAP_BASE equ 0x98B000 page_tabs equ 0x60000000 master_tab equ 0x60180000 current_pgdir equ 0x60180000 sys_pgdir equ OS_BASE+0x00050000 sys_master_tab equ OS_BASE+0x00051000 sys_pgmap equ OS_BASE+0x00052000 new_app_base equ 0x60400000 twdw equ (CURRENT_TASK-window_data) std_application_base_address equ new_app_base RING0_STACK_SIZE equ 0x2000 - 512 ;512 байт для контекста FPU PAGES_USED equ 4 PG_UNMAP equ 0x000 PG_MAP equ 0x001 PG_WRITE equ 0x002 PG_SW equ 0x003 PG_USER equ 0x005 PG_UW equ 0x007 PG_NOCACHE equ 0x018 PG_LARGE equ 0x080 PG_GLOBAL equ 0x100 ;;;;;;;;;;;boot time variables ;BOOT_BPP equ 0x9000 ;byte bits per pixel BOOT_SCANLINE equ 0x9001 ;word scanline length BOOT_VESA_MODE equ 0x9008 ;word vesa video mode ;;BOOT_X_RES equ 0x900A ;word X res ;;BOOT_Y_RES equ 0x900C ;word Y res ;;BOOT_MOUSE_PORT equ 0x9010 ;byte mouse port - not used BOOT_BANK_SW equ 0x9014 ;dword Vesa 1.2 pm bank switch BOOT_LFB equ 0x9018 ;dword Vesa 2.0 LFB address BOOT_MTRR equ 0x901C ;byte 0 or 1 : enable MTRR graphics acceleration BOOT_LOG equ 0x901D ;byte not used anymore (0 or 1 : enable system log display) BOOT_DIRECT_LFB equ 0x901E ;byte 0 or 1 : enable direct lfb write, paging disabled BOOT_PCI_DATA equ 0x9020 ;8bytes pci data BOOT_VRR equ 0x9030 ;byte VRR start enabled 1, 2-no BOOT_IDE_BASE_ADDR equ 0x9031 ;word IDEContrRegsBaseAddr BOOT_MEM_AMOUNT equ 0x9034 ;dword memory amount TMP_FILE_NAME equ 0 TMP_CMD_LINE equ 1024 TMP_ICON_OFFS equ 1280 EVENT_REDRAW equ 0x00000001 EVENT_KEY equ 0x00000002 EVENT_BUTTON equ 0x00000004 EVENT_BACKGROUND equ 0x00000010 EVENT_MOUSE equ 0x00000020 EVENT_IPC equ 0x00000040 EVENT_NETWORK equ 0x00000080 EVENT_DEBUG equ 0x00000100 EVENT_EXTENDED equ 0x00000200 EV_INTR equ 1 struc SYS_VARS { .bpp dd ? .scanline dd ? .vesa_mode dd ? .x_res dd ? .y_res dd ? .cpu_caps dd ? dd ? dd ? dd ? } struc APPOBJ ;common object header { .magic dd ? ; .destroy dd ? ;internal destructor .fd dd ? ;next object in list .bk dd ? ;prev object in list .pid dd ? ;owner id }; virtual at 0 APPOBJ APPOBJ end virtual APP_OBJ_OFFSET equ 48 APP_EV_OFFSET equ 40 struc CURSOR {;common object header .magic dd ? ;'CURS' .destroy dd ? ;internal destructor .fd dd ? ;next object in list .bk dd ? ;prev object in list .pid dd ? ;owner id ;cursor data .base dd ? ;allocated memory .hot_x dd ? ;hotspot coords .hot_y dd ? } virtual at 0 CURSOR CURSOR end virtual CURSOR_SIZE equ 32 struc EVENT { .magic dd ? ;'EVNT' .destroy dd ? ;internal destructor .fd dd ? ;next object in list .bk dd ? ;prev object in list .pid dd ? ;owner id .id dd ? ;event uid .state dd ? ;internal flags .code dd ? rd 5 } EVENT_SIZE equ 52 virtual at 0 EVENT EVENT end virtual struc HEAP_DATA { .mutex rd 1 .refcount rd 1 .heap_base rd 1 .heap_top rd 1 .app_mem rd 1 } HEAP_DATA_SIZE equ 20 virtual at 0 HEAP_DATA HEAP_DATA end virtual struc BOOT_DATA { .bpp dd ? .scanline dd ? .vesa_mode dd ? .x_res dd ? .y_res dd ? .mouse_port dd ? .bank_switch dd ? .lfb dd ? .vesa_mem dd ? .log dd ? .direct_lfb dd ? .pci_data dd ? ; dd ? .vrr dd ? .ide_base dd ? .mem_amount dd ? .pages_count dd ? .pagemap_size dd ? .kernel_max dd ? .kernel_pages dd ? .kernel_tables dd ? .cpu_vendor dd ? dd ? dd ? .cpu_sign dd ? .cpu_info dd ? .cpu_caps dd ? dd ? dd ? } virtual at 0 BOOT_DATA BOOT_DATA end virtual struc MEM_STATE { .mutex rd 1 .smallmap rd 1 .treemap rd 1 .topsize rd 1 .top rd 1 .smallbins rd 4*32 .treebins rd 32 } struc PG_DATA { .mem_amount dd ? .vesa_mem dd ? .pages_count dd ? .pages_free dd ? .pages_faults dd ? .pagemap_size dd ? .kernel_max dd ? .kernel_pages dd ? .kernel_tables dd ? .sys_page_dir dd ? .pg_mutex dd ? } ;struc LIB ;{ .lib_name rb 16 ; .lib_base dd ? ; .lib_start dd ? ; .export dd ? ; .import dd ? ;} struc SRV { .srv_name rb 16 ;ASCIIZ string .magic dd ? ;+0x10 ;'SRV ' .size dd ? ;+0x14 ;size of structure SRV .fd dd ? ;+0x18 ;next SRV descriptor .bk dd ? ;+0x1C ;prev SRV descriptor .base dd ? ;+0x20 ;service base address .entry dd ? ;+0x24 ;service START function .srv_proc dd ? ;+0x28 ;main service handler } SRV_FD_OFFSET equ 0x18 SRV_SIZE equ 44 struc COFF_HEADER { .machine dw ? .nSections dw ? .DataTime dd ? .pSymTable dd ? .nSymbols dd ? .optHeader dw ? .flags dw ? }; struc COFF_SECTION { .Name rb 8 .VirtualSize dd ? .VirtualAddress dd ? .SizeOfRawData dd ? .PtrRawData dd ? .PtrReloc dd ? .PtrLinenumbers dd ? .NumReloc dw ? .NumLinenum dw ? .Characteristics dd ? } COFF_SECTION_SIZE equ 40 struc COFF_RELOC { .VirtualAddress dd ? .SymIndex dd ? .Type dw ? } struc COFF_SYM { .Name rb 8 .Value dd ? .SectionNumber dw ? .Type dw ? .StorageClass db ? .NumAuxSymbols db ? } CSYM_SIZE equ 18 struc IOCTL { .handle dd ? .io_code dd ? .input dd ? .inp_size dd ? .output dd ? .out_size dd ? } virtual at 0 IOCTL IOCTL end virtual ;virtual at 0 ; LIB LIB ;end virtual virtual at 0 SRV SRV end virtual virtual at 0 CFH COFF_HEADER end virtual virtual at 0 CFS COFF_SECTION end virtual virtual at 0 CRELOC COFF_RELOC end virtual virtual at 0 CSYM COFF_SYM end virtual