forked from KolibriOS/kolibrios
move kernel vars into .bss
git-svn-id: svn://kolibrios.org@928 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
d43e578cc8
commit
072729a7f2
@ -525,7 +525,7 @@ hdd_irq14:
|
|||||||
; mov [dma_slot_ptr], eax
|
; mov [dma_slot_ptr], eax
|
||||||
; mov [CURRENT_TASK], ebx
|
; mov [CURRENT_TASK], ebx
|
||||||
; mov [TASK_BASE], edi
|
; mov [TASK_BASE], edi
|
||||||
; mov byte [DONT_SWITCH], 1
|
; mov [dont_switch], 1
|
||||||
; call do_change_task
|
; call do_change_task
|
||||||
.noswitch:
|
.noswitch:
|
||||||
popad
|
popad
|
||||||
@ -556,7 +556,7 @@ hdd_irq15:
|
|||||||
; mov [dma_slot_ptr], eax
|
; mov [dma_slot_ptr], eax
|
||||||
; mov [CURRENT_TASK], ebx
|
; mov [CURRENT_TASK], ebx
|
||||||
; mov [TASK_BASE], edi
|
; mov [TASK_BASE], edi
|
||||||
; mov byte [DONT_SWITCH], 1
|
; mov [dont_switch], 1
|
||||||
; call do_change_task
|
; call do_change_task
|
||||||
.noswitch:
|
.noswitch:
|
||||||
popad
|
popad
|
||||||
|
@ -24,7 +24,7 @@ public _poweroff
|
|||||||
|
|
||||||
public _bx_from_load
|
public _bx_from_load
|
||||||
|
|
||||||
extrn __setvars
|
extrn core_init
|
||||||
|
|
||||||
section '.boot' code readable align 16
|
section '.boot' code readable align 16
|
||||||
|
|
||||||
@ -64,24 +64,13 @@ include "bootcode.inc" ; 16 bit system boot code
|
|||||||
include "../bus/pci/pci16.inc"
|
include "../bus/pci/pci16.inc"
|
||||||
include "../detect/biosdisk.inc"
|
include "../detect/biosdisk.inc"
|
||||||
|
|
||||||
|
|
||||||
cli
|
cli
|
||||||
|
|
||||||
mov eax, cr0
|
mov eax, cr0
|
||||||
or eax, CR0_PG+CR0_WP+CR0_PE
|
or eax, CR0_PG+CR0_WP+CR0_PE
|
||||||
mov cr0, eax
|
mov cr0, eax
|
||||||
|
|
||||||
jmp pword 0x08:__setvars
|
jmp pword 0x10:core_init
|
||||||
|
|
||||||
|
|
||||||
;align 4
|
|
||||||
;_leave_16bit:
|
|
||||||
;
|
|
||||||
; cli
|
|
||||||
; mov eax, cr0
|
|
||||||
; or eax, CR0_PG+CR0_WP+CR0_PE
|
|
||||||
; mov cr0, eax
|
|
||||||
; hlt
|
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
rmode_idt:
|
rmode_idt:
|
||||||
|
@ -9,7 +9,7 @@ include "../const.inc"
|
|||||||
|
|
||||||
public __start
|
public __start
|
||||||
|
|
||||||
extrn _high_code
|
extrn high_code
|
||||||
extrn __os_stack
|
extrn __os_stack
|
||||||
extrn _boot_mbi
|
extrn _boot_mbi
|
||||||
extrn _sys_pdbr
|
extrn _sys_pdbr
|
||||||
@ -70,8 +70,9 @@ __start:
|
|||||||
; ENABLE PAGING
|
; ENABLE PAGING
|
||||||
|
|
||||||
mov ecx, 64
|
mov ecx, 64
|
||||||
mov edi, _sys_pdbr+(OS_BASE shr 20)+(0x100000000-OS_BASE)
|
|
||||||
mov eax, PG_LARGE+PG_SW
|
mov eax, PG_LARGE+PG_SW
|
||||||
|
mov edi, _sys_pdbr+(OS_BASE shr 20)+(0x100000000-OS_BASE)
|
||||||
|
mov [edi-4], dword (PG_LARGE+PG_USER)
|
||||||
@@:
|
@@:
|
||||||
stosd
|
stosd
|
||||||
add eax, 4*1024*1024
|
add eax, 4*1024*1024
|
||||||
@ -110,8 +111,8 @@ __start:
|
|||||||
add ecx, 4095
|
add ecx, 4095
|
||||||
and ecx, not 4095
|
and ecx, not 4095
|
||||||
|
|
||||||
lgdt [_gdts+(0x100000000-OS_BASE)]
|
lgdt [_gdts] ;+(0x100000000-OS_BASE)]
|
||||||
jmp pword 0x08:_high_code
|
jmp pword 0x10:high_code
|
||||||
|
|
||||||
|
|
||||||
.fault:
|
.fault:
|
||||||
|
@ -385,7 +385,7 @@ sys_pcibios:
|
|||||||
jz .emulate_bios
|
jz .emulate_bios
|
||||||
|
|
||||||
push ds
|
push ds
|
||||||
mov ax, pci_data_sel
|
mov ax, sel_pci_data
|
||||||
mov ds, ax
|
mov ds, ax
|
||||||
mov eax, ebp
|
mov eax, ebp
|
||||||
mov ah, 0B1h
|
mov ah, 0B1h
|
||||||
|
@ -8,10 +8,13 @@
|
|||||||
$Revision$
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
dpl0 equ 10010000b ; data read dpl0
|
dpl0 equ 10010000b ; data read dpl0
|
||||||
drw0 equ 10010010b ; data read/write dpl0
|
drw0 equ 10010010b ; data read/write dpl0
|
||||||
|
drw1 equ 10110010b ; data read/write dpl1
|
||||||
drw3 equ 11110010b ; data read/write dpl3
|
drw3 equ 11110010b ; data read/write dpl3
|
||||||
|
|
||||||
cpl0 equ 10011010b ; code read dpl0
|
cpl0 equ 10011010b ; code read dpl0
|
||||||
|
cpl1 equ 10111010b ; code read dpl1
|
||||||
cpl3 equ 11111010b ; code read dpl3
|
cpl3 equ 11111010b ; code read dpl3
|
||||||
|
|
||||||
D32 equ 01000000b ; 32bit segment
|
D32 equ 01000000b ; 32bit segment
|
||||||
@ -20,11 +23,11 @@ G32 equ 10000000b ; page gran
|
|||||||
|
|
||||||
;;;;;;;;;;;;cpu_caps flags;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;cpu_caps flags;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
CPU_386 equ 3
|
CPU_386 equ 3
|
||||||
CPU_486 equ 4
|
CPU_486 equ 4
|
||||||
CPU_PENTIUM equ 5
|
CPU_PENTIUM equ 5
|
||||||
CPU_P6 equ 6
|
CPU_P6 equ 6
|
||||||
CPU_PENTIUM4 equ 0x0F
|
CPU_PENTIUM4 equ 0x0F
|
||||||
|
|
||||||
CAPS_FPU equ 00 ;on-chip x87 floating point unit
|
CAPS_FPU equ 00 ;on-chip x87 floating point unit
|
||||||
CAPS_VME equ 01 ;virtual-mode enhancements
|
CAPS_VME equ 01 ;virtual-mode enhancements
|
||||||
@ -188,16 +191,17 @@ HEAP_BASE equ 0x80000000
|
|||||||
|
|
||||||
HEAP_MIN_SIZE equ 0x01000000
|
HEAP_MIN_SIZE equ 0x01000000
|
||||||
|
|
||||||
LFB_BASE equ 0xDF000000
|
page_tabs equ 0xDDC00000
|
||||||
|
app_page_tabs equ 0xDDC00000
|
||||||
page_tabs equ 0xDF800000
|
|
||||||
app_page_tabs equ 0xDF800000
|
|
||||||
|
|
||||||
OS_TEMP equ 0xDFC00000
|
|
||||||
|
|
||||||
heap_tabs equ (page_tabs+ (HEAP_BASE shr 10))
|
heap_tabs equ (page_tabs+ (HEAP_BASE shr 10))
|
||||||
kernel_tabs equ (page_tabs+ (OS_BASE shr 10)) ;0xFDE00000
|
kernel_tabs equ (page_tabs+ (OS_BASE shr 10))
|
||||||
master_tab equ (page_tabs+ (page_tabs shr 10)) ;0xFDFF70000
|
master_tab equ (page_tabs+ (page_tabs shr 10))
|
||||||
|
|
||||||
|
LFB_BASE equ 0xDE000000
|
||||||
|
SHADOWFB equ 0 ;0xDE800000
|
||||||
|
|
||||||
|
TEXT_BASE equ 0xDFC00000
|
||||||
|
|
||||||
_16BIT_BASE equ 0x00010000
|
_16BIT_BASE equ 0x00010000
|
||||||
LOAD_BASE equ 0x00100000
|
LOAD_BASE equ 0x00100000
|
||||||
@ -221,81 +225,10 @@ WIN_STACK equ (OS_BASE+0x000C000)
|
|||||||
WIN_POS equ (OS_BASE+0x000C400)
|
WIN_POS equ (OS_BASE+0x000C400)
|
||||||
FDD_BUFF equ (OS_BASE+0x000D000)
|
FDD_BUFF equ (OS_BASE+0x000D000)
|
||||||
|
|
||||||
;unused ? only one reference
|
|
||||||
ENABLE_TASKSWITCH equ (OS_BASE+0x000E000)
|
|
||||||
|
|
||||||
PUTPIXEL equ (OS_BASE+0x000E020)
|
|
||||||
GETPIXEL equ (OS_BASE+0x000E024)
|
|
||||||
|
|
||||||
;unused ? only one reference
|
|
||||||
BANK_SWITCH equ (OS_BASE+0x000E030)
|
|
||||||
|
|
||||||
;unused ? store mousepointer
|
|
||||||
MOUSE_PICTURE equ (OS_BASE+0x000F200)
|
|
||||||
|
|
||||||
MOUSE_VISIBLE equ (OS_BASE+0x000F204)
|
|
||||||
WIN_TEMP_XY 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)
|
|
||||||
|
|
||||||
;unused ? no active references
|
|
||||||
MOUSE_PORT equ (OS_BASE+0x000F604)
|
|
||||||
|
|
||||||
;unused
|
|
||||||
PS2_CHUNK equ (OS_BASE+0x000FB00)
|
|
||||||
|
|
||||||
MOUSE_SCROLL_H equ (OS_BASE+0x000FB08)
|
|
||||||
MOUSE_X equ (OS_BASE+0x000FB0A)
|
|
||||||
MOUSE_Y equ (OS_BASE+0x000FB0C)
|
|
||||||
MOUSE_SCROLL_V equ (OS_BASE+0x000FB0E)
|
|
||||||
|
|
||||||
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)
|
|
||||||
|
|
||||||
;unused ? only one reference
|
|
||||||
MOUSE_BUFF_COUNT equ (OS_BASE+0x000FCFF)
|
|
||||||
|
|
||||||
LFBAddress equ (OS_BASE+0x000FE80)
|
|
||||||
|
|
||||||
Screen_Max_X equ (OS_BASE+0x000FE00)
|
|
||||||
Screen_Max_Y equ (OS_BASE+0x000FE04)
|
|
||||||
BytesPerScanLine 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)
|
|
||||||
|
|
||||||
;TMP_STACK_TOP equ 0x006CC00
|
|
||||||
|
|
||||||
FONT_II equ (OS_BASE+0x006DC00)
|
|
||||||
FONT_I equ (OS_BASE+0x006E600)
|
|
||||||
|
|
||||||
;sys_pgdir equ (OS_BASE+0x006F000)
|
|
||||||
|
|
||||||
DRIVE_DATA equ (OS_BASE+0x0070000)
|
DRIVE_DATA equ (OS_BASE+0x0070000)
|
||||||
|
|
||||||
SLOT_BASE equ (OS_BASE+0x0080000)
|
SLOT_BASE equ (OS_BASE+0x0080000)
|
||||||
|
|
||||||
;unused
|
|
||||||
TMP_BUFF equ (OS_BASE+0x0090000)
|
|
||||||
|
|
||||||
VGABasePtr equ (OS_BASE+0x00A0000)
|
VGABasePtr equ (OS_BASE+0x00A0000)
|
||||||
|
|
||||||
RAMDISK_FAT equ (OS_BASE+0x0180000)
|
RAMDISK_FAT equ (OS_BASE+0x0180000)
|
||||||
@ -377,7 +310,6 @@ BOOT_SCANLINE equ 0x9001 ;word scanline length
|
|||||||
BOOT_VESA_MODE equ 0x9008 ;word vesa video mode
|
BOOT_VESA_MODE equ 0x9008 ;word vesa video mode
|
||||||
;;BOOT_X_RES equ 0x900A ;word X res
|
;;BOOT_X_RES equ 0x900A ;word X res
|
||||||
;;BOOT_Y_RES equ 0x900C ;word Y 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_BANK_SW equ 0x9014 ;dword Vesa 1.2 pm bank switch
|
||||||
BOOT_LFB equ 0x9018 ;dword Vesa 2.0 LFB address
|
BOOT_LFB equ 0x9018 ;dword Vesa 2.0 LFB address
|
||||||
BOOT_MTRR equ 0x901C ;byte 0 or 1 : enable MTRR graphics acceleration
|
BOOT_MTRR equ 0x901C ;byte 0 or 1 : enable MTRR graphics acceleration
|
||||||
@ -658,3 +590,37 @@ virtual at 0
|
|||||||
CSYM COFF_SYM
|
CSYM COFF_SYM
|
||||||
end virtual
|
end virtual
|
||||||
|
|
||||||
|
struc THR
|
||||||
|
{
|
||||||
|
.edi rd 1 ; 0x00
|
||||||
|
.esi rd 1 ; 0x04
|
||||||
|
.ebp rd 1 ; 0x08
|
||||||
|
rd 1 ; 0x0C ;esp
|
||||||
|
.ebx rd 1 ; 0x10
|
||||||
|
.edx rd 1 ; 0x14
|
||||||
|
.ecx rd 1 ; 0x18
|
||||||
|
.eax rd 1 ; 0x1C
|
||||||
|
.retaddr rd 1 ; 0x20 ;èëè êîä îøèáêè
|
||||||
|
.eip rd 1 ; 0x24
|
||||||
|
.cs rd 1 ; 0x28
|
||||||
|
.eflags rd 1 ; 0x2C
|
||||||
|
.esp rd 1 ; 0x30
|
||||||
|
.ss rd 1 ; 0x34
|
||||||
|
|
||||||
|
.pl0_stack:
|
||||||
|
|
||||||
|
.tid rd 1 ; ; number of this process (for fast access)
|
||||||
|
.slot rd 1 ; ; number of this process (for fast access)
|
||||||
|
.pdir rd 1 ; ;
|
||||||
|
.thr_flags rd 1 ; ; process is runnable only if zero
|
||||||
|
.ticks_left rd 1 ; ; number of scheduling ticks left
|
||||||
|
.quantum_size rd 1 ; ; quantum size in ticks
|
||||||
|
.user_time rd 1 ; ; user time in ticks
|
||||||
|
.sys_time rd 1 ; ; sys time in ticks
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual at 0
|
||||||
|
THR THR
|
||||||
|
end virtual
|
||||||
|
|
||||||
|
|
||||||
|
@ -421,7 +421,7 @@ debug_exc:
|
|||||||
; int 1 = #DB
|
; int 1 = #DB
|
||||||
save_ring3_context
|
save_ring3_context
|
||||||
cld
|
cld
|
||||||
mov ax, app_data ;os_data
|
mov ax, sel_app_data
|
||||||
mov ds, ax
|
mov ds, ax
|
||||||
mov es, ax
|
mov es, ax
|
||||||
mov eax, dr6
|
mov eax, dr6
|
||||||
|
@ -366,7 +366,6 @@ int sys_exec(char *path, char *cmdline, u32_t flags)
|
|||||||
return pe_app_param(path, raw, ex_pg_dir, ex_stack);
|
return pe_app_param(path, raw, ex_pg_dir, ex_stack);
|
||||||
};
|
};
|
||||||
|
|
||||||
#define master_tab (page_tabs+ (page_tabs>>10))
|
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
@ -385,11 +384,6 @@ typedef struct
|
|||||||
u32_t pe_ss;
|
u32_t pe_ss;
|
||||||
}thr_stack_t;
|
}thr_stack_t;
|
||||||
|
|
||||||
#define EFL_IF 0x0200
|
|
||||||
#define EFL_IOPL1 0x1000
|
|
||||||
#define EFL_IOPL2 0x2000
|
|
||||||
#define EFL_IOPL3 0x3000
|
|
||||||
|
|
||||||
void sys_app_entry(addr_t raw, thr_stack_t *thr_stack, exec_stack_t *ex_stack)
|
void sys_app_entry(addr_t raw, thr_stack_t *thr_stack, exec_stack_t *ex_stack)
|
||||||
{
|
{
|
||||||
PIMAGE_DOS_HEADER dos;
|
PIMAGE_DOS_HEADER dos;
|
||||||
|
@ -159,7 +159,7 @@ align 16
|
|||||||
.main:
|
.main:
|
||||||
save_ring3_context
|
save_ring3_context
|
||||||
mov eax, [esp + 32]
|
mov eax, [esp + 32]
|
||||||
mov bx, app_data ;os_data
|
mov bx, sel_app_data
|
||||||
mov ds, bx
|
mov ds, bx
|
||||||
mov es, bx
|
mov es, bx
|
||||||
|
|
||||||
@ -514,7 +514,7 @@ proc get_fileinfo stdcall, file_name:dword, info:dword
|
|||||||
|
|
||||||
mov eax, 70
|
mov eax, 70
|
||||||
lea ebx, [cmd]
|
lea ebx, [cmd]
|
||||||
int 0x40
|
int 0x41
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
|
@ -67,8 +67,7 @@ iglobal
|
|||||||
szSysMsgBoardStr db 'SysMsgBoardStr', 0
|
szSysMsgBoardStr db 'SysMsgBoardStr', 0
|
||||||
szSysMsgBoardChar db 'SysMsgBoardChar', 0
|
szSysMsgBoardChar db 'SysMsgBoardChar', 0
|
||||||
szGetCurrentTask db 'GetCurrentTask',0
|
szGetCurrentTask db 'GetCurrentTask',0
|
||||||
szLFBAddress db 'LFBAddress',0
|
szLoadFile db 'LoadFile',0
|
||||||
szLoadFile db 'LoadFile',0
|
|
||||||
szSendEvent db 'SendEvent',0
|
szSendEvent db 'SendEvent',0
|
||||||
szSetMouseData db 'SetMouseData',0
|
szSetMouseData db 'SetMouseData',0
|
||||||
szSleep db 'Sleep',0
|
szSleep db 'Sleep',0
|
||||||
@ -150,9 +149,7 @@ kernel_export:
|
|||||||
dd szStrchr , strchr
|
dd szStrchr , strchr
|
||||||
dd szStrrchr , strrchr
|
dd szStrrchr , strrchr
|
||||||
|
|
||||||
exp_lfb:
|
dd 0 ;terminator, must be zero
|
||||||
dd szLFBAddress , 0
|
|
||||||
dd 0 ;terminator, must be zero
|
|
||||||
|
|
||||||
endg
|
endg
|
||||||
|
|
||||||
|
@ -145,7 +145,7 @@ align 4
|
|||||||
e7: ;#NM exception handler
|
e7: ;#NM exception handler
|
||||||
save_ring3_context
|
save_ring3_context
|
||||||
clts
|
clts
|
||||||
mov ax, app_data ;
|
mov ax, sel_app_data
|
||||||
mov ds, ax
|
mov ds, ax
|
||||||
mov es, ax
|
mov es, ax
|
||||||
|
|
||||||
|
@ -6,8 +6,6 @@
|
|||||||
#include <mm.h>
|
#include <mm.h>
|
||||||
#include <slab.h>
|
#include <slab.h>
|
||||||
|
|
||||||
#define page_tabs 0xDF800000
|
|
||||||
|
|
||||||
|
|
||||||
#define MD_FREE 1
|
#define MD_FREE 1
|
||||||
#define MD_USED 2
|
#define MD_USED 2
|
||||||
|
478
kernel/branches/kolibri_pe/core/init.asm
Normal file
478
kernel/branches/kolibri_pe/core/init.asm
Normal file
@ -0,0 +1,478 @@
|
|||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; ;;
|
||||||
|
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;;
|
||||||
|
;; Distributed under terms of the GNU General Public License ;;
|
||||||
|
;; ;;
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
include "../macros.inc"
|
||||||
|
include "../proc32.inc"
|
||||||
|
include "../const.inc"
|
||||||
|
|
||||||
|
$Revision: 847 $
|
||||||
|
|
||||||
|
sel_tss equ 0x08
|
||||||
|
|
||||||
|
sel_os_code equ 0x10
|
||||||
|
sel_os_stack equ 0x18
|
||||||
|
|
||||||
|
sel_app_code equ 0x23
|
||||||
|
sel_app_data equ 0x2B
|
||||||
|
|
||||||
|
sel_srv_code equ 0x31
|
||||||
|
sel_srv_stack equ 0x39
|
||||||
|
|
||||||
|
sel_code_16 equ 0x70
|
||||||
|
|
||||||
|
format MS COFF
|
||||||
|
|
||||||
|
use32
|
||||||
|
|
||||||
|
public __os_stack
|
||||||
|
public _pg_balloc
|
||||||
|
|
||||||
|
|
||||||
|
public high_code
|
||||||
|
|
||||||
|
public core_init
|
||||||
|
|
||||||
|
public test_cpu
|
||||||
|
|
||||||
|
public cpu_vendor
|
||||||
|
public cpu_sign
|
||||||
|
public cpu_info
|
||||||
|
public cpu_caps
|
||||||
|
|
||||||
|
extrn _parse_mbi
|
||||||
|
|
||||||
|
extrn _16bit_start
|
||||||
|
extrn _16bit_end
|
||||||
|
extrn _enter_bootscreen
|
||||||
|
|
||||||
|
extrn init_fpu
|
||||||
|
extrn init_idt
|
||||||
|
extrn _init_mm
|
||||||
|
extrn _slab_cache_init
|
||||||
|
extrn @init_heap@8
|
||||||
|
extrn init_malloc
|
||||||
|
extrn _init_core_dll
|
||||||
|
extrn _init_threads
|
||||||
|
extrn init_mtrr
|
||||||
|
extrn system_init
|
||||||
|
|
||||||
|
extrn sysenter_entry
|
||||||
|
extrn syscall_entry
|
||||||
|
|
||||||
|
|
||||||
|
extrn @create_systhread@4
|
||||||
|
|
||||||
|
extrn _sys_pdbr
|
||||||
|
extrn _current_thread
|
||||||
|
extrn _k_reenter:dword
|
||||||
|
|
||||||
|
extrn scr_mode:dword
|
||||||
|
extrn LFBAddress:dword
|
||||||
|
extrn LFBSize:dword
|
||||||
|
|
||||||
|
section '.text' code readable align 16
|
||||||
|
|
||||||
|
high_code:
|
||||||
|
|
||||||
|
mov ax, sel_os_stack
|
||||||
|
mov dx, sel_app_data
|
||||||
|
mov ss, ax
|
||||||
|
mov esp, __os_stack
|
||||||
|
|
||||||
|
mov ds, dx
|
||||||
|
mov es, dx
|
||||||
|
mov fs, dx
|
||||||
|
mov gs, dx
|
||||||
|
|
||||||
|
|
||||||
|
; bt [cpu_caps], CAPS_PGE
|
||||||
|
; jnc @F
|
||||||
|
|
||||||
|
; or dword [sys_pgdir-OS_BASE+(OS_BASE shr 20)], PG_GLOBAL
|
||||||
|
|
||||||
|
; mov ebx, cr4
|
||||||
|
; or ebx, CR4_PGE
|
||||||
|
; mov cr4, ebx
|
||||||
|
@@:
|
||||||
|
; mov eax, cr3
|
||||||
|
; mov cr3, eax ; flush TLB
|
||||||
|
|
||||||
|
mov edx, 0x3fB
|
||||||
|
mov eax, 3
|
||||||
|
out dx, al
|
||||||
|
|
||||||
|
call test_cpu
|
||||||
|
call _parse_mbi
|
||||||
|
|
||||||
|
; mov eax, [_pg_balloc]
|
||||||
|
; mov [_copy_pg_balloc], eax
|
||||||
|
|
||||||
|
__core_restart:
|
||||||
|
|
||||||
|
mov esi, _16bit_start
|
||||||
|
mov ecx, _16bit_end
|
||||||
|
shr ecx, 2
|
||||||
|
mov edi, _16BIT_BASE
|
||||||
|
cld
|
||||||
|
rep movsd
|
||||||
|
|
||||||
|
jmp far sel_code_16:_enter_bootscreen;
|
||||||
|
|
||||||
|
align 16
|
||||||
|
core_init:
|
||||||
|
cld
|
||||||
|
|
||||||
|
mov ax, sel_os_stack
|
||||||
|
mov dx, sel_app_data
|
||||||
|
mov ss, ax
|
||||||
|
mov esp, __os_stack
|
||||||
|
|
||||||
|
mov ds, dx
|
||||||
|
mov es, dx
|
||||||
|
mov fs, dx
|
||||||
|
mov gs, dx
|
||||||
|
|
||||||
|
mov [tss._ss0], sel_os_stack
|
||||||
|
mov [tss._esp0], __os_stack
|
||||||
|
mov [tss._esp], __os_stack
|
||||||
|
mov [tss._cs], sel_os_code
|
||||||
|
mov [tss._ss], sel_os_stack
|
||||||
|
mov [tss._ds], sel_app_data
|
||||||
|
mov [tss._es], sel_app_data
|
||||||
|
mov [tss._fs], sel_app_data
|
||||||
|
mov [tss._gs], sel_app_data
|
||||||
|
mov [tss._io], 128
|
||||||
|
;Add IO access table - bit array of permitted ports
|
||||||
|
mov edi, tss._io_map_0
|
||||||
|
xor eax, eax
|
||||||
|
; not eax
|
||||||
|
mov ecx, 8192/4
|
||||||
|
rep stosd ; access to 4096*8=65536 ports
|
||||||
|
|
||||||
|
mov ax, sel_tss
|
||||||
|
ltr ax
|
||||||
|
|
||||||
|
; -------- Fast System Call init ----------
|
||||||
|
; Intel SYSENTER/SYSEXIT (AMD CPU support it too)
|
||||||
|
bt [cpu_caps], CAPS_SEP
|
||||||
|
jnc .SEnP ; SysEnter not Present
|
||||||
|
|
||||||
|
xor edx, edx
|
||||||
|
mov ecx, MSR_SYSENTER_CS
|
||||||
|
mov eax, sel_os_code
|
||||||
|
wrmsr
|
||||||
|
mov ecx, MSR_SYSENTER_ESP
|
||||||
|
; mov eax, sysenter_stack ; Check it
|
||||||
|
xor eax, eax
|
||||||
|
wrmsr
|
||||||
|
mov ecx, MSR_SYSENTER_EIP
|
||||||
|
mov eax, sysenter_entry
|
||||||
|
wrmsr
|
||||||
|
|
||||||
|
.SEnP:
|
||||||
|
; AMD SYSCALL/SYSRET
|
||||||
|
cmp byte[cpu_vendor], 'A'
|
||||||
|
jne .noSYSCALL
|
||||||
|
mov eax, 0x80000001
|
||||||
|
cpuid
|
||||||
|
test edx, 0x800 ; bit_11 - SYSCALL/SYSRET support
|
||||||
|
jz .noSYSCALL
|
||||||
|
mov ecx, MSR_AMD_EFER
|
||||||
|
rdmsr
|
||||||
|
or eax, 1 ; bit_0 - System Call Extension (SCE)
|
||||||
|
wrmsr
|
||||||
|
|
||||||
|
; Bits of EDX :
|
||||||
|
; Bit 31–16 During the SYSRET instruction, this field is copied into the CS register
|
||||||
|
; and the contents of this field, plus 8, are copied into the SS register.
|
||||||
|
; Bit 15–0 During the SYSCALL instruction, this field is copied into the CS register
|
||||||
|
; and the contents of this field, plus 8, are copied into the SS register.
|
||||||
|
|
||||||
|
mov edx, ((sel_os_code + 16) shl 16) + sel_os_code
|
||||||
|
|
||||||
|
mov eax, syscall_entry
|
||||||
|
mov ecx, MSR_AMD_STAR
|
||||||
|
wrmsr
|
||||||
|
.noSYSCALL:
|
||||||
|
|
||||||
|
call init_fpu
|
||||||
|
|
||||||
|
call init_idt
|
||||||
|
|
||||||
|
call _init_mm
|
||||||
|
|
||||||
|
call init_malloc
|
||||||
|
call _slab_cache_init
|
||||||
|
|
||||||
|
mov ecx, 0x80000000
|
||||||
|
mov edx, 0x40000000
|
||||||
|
call @init_heap@8
|
||||||
|
|
||||||
|
call _init_core_dll
|
||||||
|
call _init_threads
|
||||||
|
|
||||||
|
; SAVE & CLEAR 0-0xffff
|
||||||
|
|
||||||
|
cld
|
||||||
|
xor esi, esi
|
||||||
|
mov edi,BOOT_VAR
|
||||||
|
mov ecx,0x10000 / 4
|
||||||
|
rep movsd
|
||||||
|
|
||||||
|
xor edi, edi
|
||||||
|
xor eax, eax
|
||||||
|
mov ecx,0x10000 / 4
|
||||||
|
rep stosd
|
||||||
|
|
||||||
|
mov edi, 0x40000
|
||||||
|
mov ecx, (0x90000-0x40000)/4
|
||||||
|
rep stosd
|
||||||
|
|
||||||
|
mov dword [_sys_pdbr], eax
|
||||||
|
mov dword [_sys_pdbr+4], eax
|
||||||
|
|
||||||
|
xchg bx, bx
|
||||||
|
|
||||||
|
movzx eax,word [BOOT_VAR+0x9008] ; screen mode
|
||||||
|
mov [scr_mode],eax
|
||||||
|
|
||||||
|
mov eax,[BOOT_VAR+0x9018]
|
||||||
|
call map_LFB
|
||||||
|
|
||||||
|
mov eax, cr3
|
||||||
|
mov cr3, eax
|
||||||
|
|
||||||
|
|
||||||
|
jmp system_init
|
||||||
|
|
||||||
|
if 0
|
||||||
|
mov ecx, system_init
|
||||||
|
call @create_systhread@4
|
||||||
|
|
||||||
|
mov [_current_thread], eax
|
||||||
|
|
||||||
|
xchg bx, bx
|
||||||
|
|
||||||
|
mov ebx, [eax+THR.pdir]
|
||||||
|
mov ecx, cr3
|
||||||
|
cmp ebx, ecx
|
||||||
|
je .skip
|
||||||
|
mov cr3, ebx
|
||||||
|
.skip:
|
||||||
|
mov esp, [_current_thread]
|
||||||
|
; lea eax, [esp+THR.pl0_stack]
|
||||||
|
; mov [tss._esp0], eax
|
||||||
|
restart1:
|
||||||
|
dec [_k_reenter]
|
||||||
|
popad
|
||||||
|
add esp, 4 ; skip return adr
|
||||||
|
iretd ; continue process
|
||||||
|
end if
|
||||||
|
|
||||||
|
align 4
|
||||||
|
map_LFB:
|
||||||
|
cmp eax, -1
|
||||||
|
jne @f
|
||||||
|
|
||||||
|
ret
|
||||||
|
@@:
|
||||||
|
test [scr_mode], 0100000000000000b
|
||||||
|
jnz @f
|
||||||
|
mov [BOOT_VAR+0x901c],byte 2
|
||||||
|
ret
|
||||||
|
@@:
|
||||||
|
mov [LFBAddress], eax
|
||||||
|
mov [LFBSize], 0x800000
|
||||||
|
call init_mtrr
|
||||||
|
|
||||||
|
mov eax, [LFBAddress]
|
||||||
|
or eax, PG_LARGE+PG_UW
|
||||||
|
mov [_sys_pdbr+(LFB_BASE shr 20)], eax
|
||||||
|
add eax, 0x00400000
|
||||||
|
mov [_sys_pdbr+4+(LFB_BASE shr 20)], eax
|
||||||
|
if SHADOWFB
|
||||||
|
mov ecx, 11
|
||||||
|
call @core_alloc@4
|
||||||
|
or eax, PG_LARGE+PG_UW
|
||||||
|
mov [_sys_pdbr+(SHADOWFB shr 20)], eax
|
||||||
|
add eax, 0x00400000
|
||||||
|
mov [_sys_pdbr+4+(SHADOWFB shr 20)], eax
|
||||||
|
end if
|
||||||
|
|
||||||
|
bt [cpu_caps], CAPS_PGE
|
||||||
|
jnc @F
|
||||||
|
or dword [_sys_pdbr+(LFB_BASE shr 20)], PG_GLOBAL
|
||||||
|
@@:
|
||||||
|
mov dword [LFBAddress], LFB_BASE
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
align 4
|
||||||
|
proc test_cpu
|
||||||
|
locals
|
||||||
|
cpu_type dd ?
|
||||||
|
cpu_id dd ?
|
||||||
|
cpu_Intel dd ?
|
||||||
|
cpu_AMD dd ?
|
||||||
|
endl
|
||||||
|
|
||||||
|
mov [cpu_type], 0
|
||||||
|
xor eax, eax
|
||||||
|
mov [cpu_caps], eax
|
||||||
|
mov [cpu_caps+4], eax
|
||||||
|
|
||||||
|
xor eax, eax
|
||||||
|
cpuid
|
||||||
|
|
||||||
|
mov [cpu_vendor], ebx
|
||||||
|
mov [cpu_vendor+4], edx
|
||||||
|
mov [cpu_vendor+8], ecx
|
||||||
|
cmp ebx, dword [intel_str]
|
||||||
|
jne .check_AMD
|
||||||
|
cmp edx, dword [intel_str+4]
|
||||||
|
jne .check_AMD
|
||||||
|
cmp ecx, dword [intel_str+8]
|
||||||
|
jne .check_AMD
|
||||||
|
mov [cpu_Intel], 1
|
||||||
|
cmp eax, 1
|
||||||
|
jl .end_cpuid
|
||||||
|
mov eax, 1
|
||||||
|
cpuid
|
||||||
|
mov [cpu_sign], eax
|
||||||
|
mov [cpu_info], ebx
|
||||||
|
mov [cpu_caps], edx
|
||||||
|
mov [cpu_caps+4],ecx
|
||||||
|
|
||||||
|
shr eax, 8
|
||||||
|
and eax, 0x0f
|
||||||
|
ret
|
||||||
|
.end_cpuid:
|
||||||
|
mov eax, [cpu_type]
|
||||||
|
ret
|
||||||
|
|
||||||
|
.check_AMD:
|
||||||
|
cmp ebx, dword [AMD_str]
|
||||||
|
jne .unknown
|
||||||
|
cmp edx, dword [AMD_str+4]
|
||||||
|
jne .unknown
|
||||||
|
cmp ecx, dword [AMD_str+8]
|
||||||
|
jne .unknown
|
||||||
|
mov [cpu_AMD], 1
|
||||||
|
cmp eax, 1
|
||||||
|
jl .unknown
|
||||||
|
mov eax, 1
|
||||||
|
cpuid
|
||||||
|
mov [cpu_sign], eax
|
||||||
|
mov [cpu_info], ebx
|
||||||
|
mov [cpu_caps], edx
|
||||||
|
mov [cpu_caps+4],ecx
|
||||||
|
shr eax, 8
|
||||||
|
and eax, 0x0f
|
||||||
|
ret
|
||||||
|
.unknown:
|
||||||
|
mov eax, 1
|
||||||
|
cpuid
|
||||||
|
mov [cpu_sign], eax
|
||||||
|
mov [cpu_info], ebx
|
||||||
|
mov [cpu_caps], edx
|
||||||
|
mov [cpu_caps+4],ecx
|
||||||
|
shr eax, 8
|
||||||
|
and eax, 0x0f
|
||||||
|
ret
|
||||||
|
endp
|
||||||
|
|
||||||
|
intel_str db "GenuineIntel",0
|
||||||
|
AMD_str db "AuthenticAMD",0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if 0
|
||||||
|
align 4
|
||||||
|
|
||||||
|
init_BIOS32:
|
||||||
|
mov edi, 0xE0000
|
||||||
|
.pcibios_nxt:
|
||||||
|
cmp dword[edi], '_32_' ; "magic" word
|
||||||
|
je .BIOS32_found
|
||||||
|
.pcibios_nxt2:
|
||||||
|
add edi, 0x10
|
||||||
|
cmp edi, 0xFFFF0
|
||||||
|
je .BIOS32_not_found
|
||||||
|
jmp .pcibios_nxt
|
||||||
|
.BIOS32_found: ; magic word found, check control summ
|
||||||
|
|
||||||
|
movzx ecx, byte[edi + 9]
|
||||||
|
shl ecx, 4
|
||||||
|
mov esi, edi
|
||||||
|
xor eax, eax
|
||||||
|
cld ; paranoia
|
||||||
|
@@: lodsb
|
||||||
|
add ah, al
|
||||||
|
loop @b
|
||||||
|
jnz .pcibios_nxt2 ; control summ must be zero
|
||||||
|
; BIOS32 service found !
|
||||||
|
mov ebp, [edi + 4]
|
||||||
|
mov [bios32_entry], ebp
|
||||||
|
; check PCI BIOS present
|
||||||
|
mov eax, '$PCI'
|
||||||
|
xor ebx, ebx
|
||||||
|
push cs ; special for 'ret far' from BIOS
|
||||||
|
call ebp
|
||||||
|
test al, al
|
||||||
|
jnz .PCI_BIOS32_not_found
|
||||||
|
|
||||||
|
; çäåñü ñîçäàþòñÿ äèñêðèïòîðû äëÿ PCI BIOS
|
||||||
|
|
||||||
|
add ebx, OS_BASE
|
||||||
|
dec ecx
|
||||||
|
mov [(pci_code_32-OS_BASE)], cx ;limit 0-15
|
||||||
|
mov [(pci_data_32-OS_BASE)], cx ;limit 0-15
|
||||||
|
|
||||||
|
mov [(pci_code_32-OS_BASE)+2], bx ;base 0-15
|
||||||
|
mov [(pci_data_32-OS_BASE)+2], bx ;base 0-15
|
||||||
|
|
||||||
|
shr ebx, 16
|
||||||
|
mov [(pci_code_32-OS_BASE)+4], bl ;base 16-23
|
||||||
|
mov [(pci_data_32-OS_BASE)+4], bl ;base 16-23
|
||||||
|
|
||||||
|
shr ecx, 16
|
||||||
|
and cl, 0x0F
|
||||||
|
mov ch, bh
|
||||||
|
add cx, D32
|
||||||
|
mov [(pci_code_32-OS_BASE)+6], cx ;lim 16-19 &
|
||||||
|
mov [(pci_data_32-OS_BASE)+6], cx ;base 24-31
|
||||||
|
|
||||||
|
mov [(pci_bios_entry-OS_BASE)], edx
|
||||||
|
; jmp .end
|
||||||
|
.PCI_BIOS32_not_found:
|
||||||
|
; çäåñü äîëæíà çàïîëíÿòñÿ pci_emu_dat
|
||||||
|
.BIOS32_not_found:
|
||||||
|
.end:
|
||||||
|
ret
|
||||||
|
|
||||||
|
end if
|
||||||
|
|
||||||
|
section '.data' data writeable align 16
|
||||||
|
|
||||||
|
_pg_balloc dd LAST_PAGE
|
||||||
|
|
||||||
|
section '.bss' data writeable align 16
|
||||||
|
|
||||||
|
rb 8192-512
|
||||||
|
|
||||||
|
__os_stack rb 512
|
||||||
|
|
||||||
|
;CPUID information
|
||||||
|
|
||||||
|
cpu_vendor rd 3
|
||||||
|
cpu_sign rd 1
|
||||||
|
cpu_info rd 1
|
||||||
|
cpu_caps rd 4
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -19,7 +19,7 @@ extern multiboot_info_t *boot_mbi;
|
|||||||
/* Check if the bit BIT in FLAGS is set. */
|
/* Check if the bit BIT in FLAGS is set. */
|
||||||
#define CHECK_FLAG(flags,bit) ((flags) & (1 << (bit)))
|
#define CHECK_FLAG(flags,bit) ((flags) & (1 << (bit)))
|
||||||
|
|
||||||
void init()
|
void parse_mbi()
|
||||||
{
|
{
|
||||||
u32_t last_page = 0;
|
u32_t last_page = 0;
|
||||||
|
|
@ -178,46 +178,6 @@ proc map_page_table stdcall, lin_addr:dword, phis_addr:dword
|
|||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
align 4
|
|
||||||
proc init_LFB
|
|
||||||
locals
|
|
||||||
pg_count dd ?
|
|
||||||
endl
|
|
||||||
|
|
||||||
cmp dword [LFBAddress], -1
|
|
||||||
jne @f
|
|
||||||
mov [BOOT_VAR+0x901c],byte 2
|
|
||||||
mov ecx, 0x280000
|
|
||||||
mov edx, PG_SW
|
|
||||||
call @mem_alloc@8
|
|
||||||
mov [LFBAddress], eax
|
|
||||||
ret
|
|
||||||
@@:
|
|
||||||
test [SCR_MODE],word 0100000000000000b
|
|
||||||
jnz @f
|
|
||||||
mov [BOOT_VAR+0x901c],byte 2
|
|
||||||
ret
|
|
||||||
@@:
|
|
||||||
call init_mtrr
|
|
||||||
|
|
||||||
mov eax, [LFBAddress]
|
|
||||||
or eax, PG_LARGE+PG_UW
|
|
||||||
mov [_sys_pdbr+(LFB_BASE shr 20)], eax
|
|
||||||
add eax, 0x00400000
|
|
||||||
mov [_sys_pdbr+4+(LFB_BASE shr 20)], eax
|
|
||||||
|
|
||||||
mov dword [exp_lfb+4], LFB_BASE
|
|
||||||
|
|
||||||
bt [cpu_caps], CAPS_PGE
|
|
||||||
jnc @F
|
|
||||||
or dword [_sys_pdbr+(LFB_BASE shr 20)], PG_GLOBAL
|
|
||||||
@@:
|
|
||||||
mov dword [LFBAddress], LFB_BASE
|
|
||||||
mov eax, cr3 ;flush TLB
|
|
||||||
mov cr3, eax
|
|
||||||
|
|
||||||
ret
|
|
||||||
endp
|
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
proc new_mem_resize stdcall, new_size:dword
|
proc new_mem_resize stdcall, new_size:dword
|
||||||
@ -395,7 +355,7 @@ proc page_fault_handler
|
|||||||
mov eax, cr2
|
mov eax, cr2
|
||||||
push eax
|
push eax
|
||||||
|
|
||||||
mov ax, app_data
|
mov ax, sel_app_data
|
||||||
mov ds, ax
|
mov ds, ax
|
||||||
mov es, ax
|
mov es, ax
|
||||||
|
|
||||||
@ -407,25 +367,22 @@ proc page_fault_handler
|
|||||||
cmp ebx, HEAP_BASE
|
cmp ebx, HEAP_BASE
|
||||||
jb .user_space ;ñòðàíèöà â ïàìÿòè ïðèëîæåíèÿ ;
|
jb .user_space ;ñòðàíèöà â ïàìÿòè ïðèëîæåíèÿ ;
|
||||||
|
|
||||||
cmp ebx, LFB_BASE
|
|
||||||
jb .kernel_heap
|
|
||||||
|
|
||||||
cmp ebx, page_tabs
|
cmp ebx, page_tabs
|
||||||
jb .lfb
|
jb .kernel_heap
|
||||||
|
|
||||||
cmp ebx, heap_tabs
|
cmp ebx, heap_tabs
|
||||||
jb .user_tabs
|
jb .user_tabs
|
||||||
|
|
||||||
cmp ebx, OS_BASE
|
cmp ebx, LFB_BASE
|
||||||
jb .heap_tab
|
jb .heap_tab
|
||||||
|
|
||||||
|
cmp ebx, OS_BASE
|
||||||
|
jb .lfb
|
||||||
|
|
||||||
; cmp ebx, kernel_tabs
|
; cmp ebx, kernel_tabs
|
||||||
; jb .alloc;.app_tabs ;òàáëèöû ñòðàíèö ïðèëîæåíèÿ ;
|
; jb .alloc;.app_tabs ;òàáëèöû ñòðàíèö ïðèëîæåíèÿ ;
|
||||||
;ïðîñòî ñîçäàäèì îäíó
|
;ïðîñòî ñîçäàäèì îäíó
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.lfb:
|
.lfb:
|
||||||
shr ebx, 22
|
shr ebx, 22
|
||||||
mov edx, [_sys_pdbr + ebx*4]
|
mov edx, [_sys_pdbr + ebx*4]
|
||||||
@ -996,7 +953,7 @@ new_services:
|
|||||||
ret
|
ret
|
||||||
@@:
|
@@:
|
||||||
cmp eax, 21 ;for test purposes only
|
cmp eax, 21 ;for test purposes only
|
||||||
ja @f ;will be removed soon
|
ja .fail ;will be removed soon
|
||||||
cmp ebx, OS_BASE
|
cmp ebx, OS_BASE
|
||||||
jae .fail
|
jae .fail
|
||||||
|
|
||||||
@ -1178,7 +1135,6 @@ align 4
|
|||||||
_balloc: ; gcc fastcall
|
_balloc: ; gcc fastcall
|
||||||
@balloc@4:
|
@balloc@4:
|
||||||
|
|
||||||
|
|
||||||
mov eax, [_pg_balloc]
|
mov eax, [_pg_balloc]
|
||||||
add ecx, 4095
|
add ecx, 4095
|
||||||
and ecx, -4096
|
and ecx, -4096
|
||||||
|
@ -1,51 +0,0 @@
|
|||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
;; ;;
|
|
||||||
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;;
|
|
||||||
;; Distributed under terms of the GNU General Public License ;;
|
|
||||||
;; ;;
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
|
|
||||||
$Revision$
|
|
||||||
|
|
||||||
include 'export.inc'
|
|
||||||
|
|
||||||
align 4
|
|
||||||
|
|
||||||
|
|
||||||
align 16
|
|
||||||
_kernel_exports:
|
|
||||||
export 'KERNEL', \
|
|
||||||
commit_pages, 'CommitPages', \ ; eax, ebx, ecx
|
|
||||||
create_kernel_object, 'CreateObject', \
|
|
||||||
create_ring_buffer, 'CreateRingBuffer', \ ; stdcall
|
|
||||||
destroy_kernel_object, 'DestroyObject', \
|
|
||||||
free_kernel_space, 'FreeKernelSpace', \ ; stdcall
|
|
||||||
malloc, 'Kmalloc', \
|
|
||||||
free, 'Kfree', \
|
|
||||||
map_io_mem, 'MapIoMem', \ ; stdcall
|
|
||||||
get_pg_addr, 'GetPgAddr', \ ; eax
|
|
||||||
@mem_alloc@8, 'mem_alloc', \ ; fastcall
|
|
||||||
@mem_free@4, 'mem_free', \ ; fastcall
|
|
||||||
\
|
|
||||||
select_hw_cursor, 'SelectHwCursor', \ ; stdcall
|
|
||||||
set_hw_cursor, 'SetHwCursor', \ ; stdcall
|
|
||||||
hw_restore, 'HwCursorRestore', \ ;
|
|
||||||
create_cursor, 'HwCursorCreate', \ ;
|
|
||||||
\
|
|
||||||
set_screen, 'SetScreen', \
|
|
||||||
pci_api, 'PciApi', \
|
|
||||||
pci_read8, 'PciRead8', \ ; stdcall
|
|
||||||
pci_read16, 'PciRead16', \ ; stdcall
|
|
||||||
pci_read32, 'PciRead32', \ ; stdcall
|
|
||||||
pci_write8, 'PciWrite8', \ ; stdcall
|
|
||||||
pci_write16, 'PciWrite16', \ ; stdcall
|
|
||||||
pci_write32, 'PciWrite32', \ ; stdcall
|
|
||||||
\
|
|
||||||
reg_service, 'RegService', \ ; stdcall
|
|
||||||
user_alloc, 'UserAlloc', \ ; stdcall
|
|
||||||
user_free, 'UserFree', \ ; stdcall
|
|
||||||
unmap_pages, 'UnmapPages', \ ; eax, ecx
|
|
||||||
sys_msg_board_str, 'SysMsgBoardStr'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -16,7 +16,7 @@ $Revision$
|
|||||||
align 32
|
align 32
|
||||||
irq0:
|
irq0:
|
||||||
pushad
|
pushad
|
||||||
mov ax, app_data ;
|
mov ax, sel_app_data
|
||||||
mov ds, ax
|
mov ds, ax
|
||||||
mov es, ax
|
mov es, ax
|
||||||
|
|
||||||
@ -31,14 +31,14 @@ irq0:
|
|||||||
mov [next_usage_update],eax
|
mov [next_usage_update],eax
|
||||||
call updatecputimes
|
call updatecputimes
|
||||||
.nocounter:
|
.nocounter:
|
||||||
cmp [DONT_SWITCH], byte 1
|
cmp [dont_switch], 1
|
||||||
jne .change_task
|
jne .change_task
|
||||||
|
|
||||||
mov al,0x20 ; send End Of Interrupt signal
|
mov al,0x20 ; send End Of Interrupt signal
|
||||||
mov dx,0x20
|
mov dx,0x20
|
||||||
out dx,al
|
out dx,al
|
||||||
|
|
||||||
mov [DONT_SWITCH], byte 0
|
mov [dont_switch], 0
|
||||||
|
|
||||||
popad
|
popad
|
||||||
iretd
|
iretd
|
||||||
@ -95,7 +95,7 @@ end if
|
|||||||
test eax, eax ; the same task -> skip switch
|
test eax, eax ; the same task -> skip switch
|
||||||
jnz .return
|
jnz .return
|
||||||
@@:
|
@@:
|
||||||
mov [DONT_SWITCH],byte 1
|
mov [dont_switch], 1
|
||||||
call do_change_task
|
call do_change_task
|
||||||
|
|
||||||
.return:
|
.return:
|
||||||
@ -225,7 +225,7 @@ do_change_task:
|
|||||||
@@:
|
@@:
|
||||||
mov eax, [ebx+APPDATA.saved_esp0]
|
mov eax, [ebx+APPDATA.saved_esp0]
|
||||||
mov [tss._esp0], eax
|
mov [tss._esp0], eax
|
||||||
mov ax, graph_data
|
mov ax, sel_graph_data
|
||||||
mov gs, ax
|
mov gs, ax
|
||||||
|
|
||||||
mov eax, [CURRENT_TASK]
|
mov eax, [CURRENT_TASK]
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
$Revision$
|
$Revision$
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
_init_idt:
|
init_idt:
|
||||||
push edi
|
push edi
|
||||||
push esi
|
push esi
|
||||||
mov edi, idts
|
mov edi, idts
|
||||||
@ -25,28 +25,35 @@ _init_idt:
|
|||||||
@@:
|
@@:
|
||||||
lodsd
|
lodsd
|
||||||
mov [edi], ax ; lower part of offset
|
mov [edi], ax ; lower part of offset
|
||||||
mov [edi+2], word os_code ; segment selector
|
mov [edi+2], word sel_os_code ; segment selector
|
||||||
mov ax, word 10001110b shl 8 ; type: interrupt gate
|
mov ax, word 10001110b shl 8 ; type: interrupt gate
|
||||||
mov [edi+4], eax
|
mov [edi+4], eax
|
||||||
add edi, 8
|
add edi, 8
|
||||||
loop @b
|
loop @b
|
||||||
|
|
||||||
mov eax, i40
|
mov eax, _i40
|
||||||
mov ecx, i40
|
mov ecx, _i40
|
||||||
and eax, 0x0000FFFF
|
and eax, 0x0000FFFF
|
||||||
and ecx, 0xFFFF0000
|
and ecx, 0xFFFF0000
|
||||||
or eax, os_code shl 16
|
or eax, sel_app_code shl 16
|
||||||
or ecx, (11101111b shl 8)
|
or ecx, (11101111b shl 8)
|
||||||
mov [edi], eax
|
mov [edi], eax
|
||||||
mov [edi+4], ecx
|
mov [edi+4], ecx
|
||||||
|
|
||||||
|
mov eax, i41
|
||||||
|
mov ecx, i41
|
||||||
|
and eax, 0x0000FFFF
|
||||||
|
and ecx, 0xFFFF0000
|
||||||
|
or eax, sel_os_code shl 16
|
||||||
|
or ecx, (11101111b shl 8)
|
||||||
|
mov [edi+8], eax
|
||||||
|
mov [edi+12], ecx
|
||||||
|
|
||||||
lidt [idtreg]
|
lidt [idtreg]
|
||||||
pop esi
|
pop esi
|
||||||
pop edi
|
pop edi
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
iglobal
|
iglobal
|
||||||
|
|
||||||
msg_sel_ker db "kernel", 0
|
msg_sel_ker db "kernel", 0
|
||||||
@ -75,10 +82,10 @@ end if
|
|||||||
|
|
||||||
times 16 dd unknown_interrupt
|
times 16 dd unknown_interrupt
|
||||||
|
|
||||||
dd i40
|
dd i41
|
||||||
|
|
||||||
idtreg:
|
idtreg:
|
||||||
dw 8*0x41-1
|
dw 8*0x42-1
|
||||||
dd idts
|
dd idts
|
||||||
|
|
||||||
endg
|
endg
|
||||||
@ -118,10 +125,11 @@ macro exc_w_code [num]
|
|||||||
exc_wo_code 0, 2, 3, 4, 5, 6, 9, 15, 18
|
exc_wo_code 0, 2, 3, 4, 5, 6, 9, 15, 18
|
||||||
exc_w_code 8, 10, 11, 12, 13, 14, 17
|
exc_w_code 8, 10, 11, 12, 13, 14, 17
|
||||||
|
|
||||||
|
align 4
|
||||||
exc_c:
|
exc_c:
|
||||||
mov ax, app_data ;èñêëþ÷åíèå
|
mov ax, sel_app_data ;èñêëþ÷åíèå
|
||||||
mov ds, ax ;çàãðóçèì ïðàâèëüíûå çíà÷åíè
|
mov ds, ax ;çàãðóçèì ïðàâèëüíûå çíà÷åíèÿ'
|
||||||
mov es, ax ;â ðåãèñòðû
|
mov es, ax ;â ðåãèñòðû
|
||||||
|
|
||||||
; redirect to V86 manager? (EFLAGS & 0x20000) != 0?
|
; redirect to V86 manager? (EFLAGS & 0x20000) != 0?
|
||||||
test byte [esp+20h+8+2], 2
|
test byte [esp+20h+8+2], 2
|
||||||
@ -215,7 +223,7 @@ defined_error:
|
|||||||
mov eax, [esp + 8 + 0x20]
|
mov eax, [esp + 8 + 0x20]
|
||||||
mov edi, msg_sel_app
|
mov edi, msg_sel_app
|
||||||
mov ebx, [esp + 16 + 0x20]
|
mov ebx, [esp + 16 + 0x20]
|
||||||
cmp eax, app_code
|
cmp eax, sel_app_code
|
||||||
je @f
|
je @f
|
||||||
mov edi, msg_sel_ker
|
mov edi, msg_sel_ker
|
||||||
mov ebx, [esp - 16 + 0x20]
|
mov ebx, [esp - 16 + 0x20]
|
||||||
@ -239,7 +247,7 @@ irqh 2,3,4,5,7,8,9,10,11
|
|||||||
|
|
||||||
p_irq6:
|
p_irq6:
|
||||||
save_ring3_context
|
save_ring3_context
|
||||||
mov ax, app_data ;os_data
|
mov ax, sel_app_data
|
||||||
mov ds, ax
|
mov ds, ax
|
||||||
mov es, ax
|
mov es, ax
|
||||||
call fdc_irq
|
call fdc_irq
|
||||||
@ -250,7 +258,7 @@ p_irq6:
|
|||||||
|
|
||||||
p_irq14:
|
p_irq14:
|
||||||
save_ring3_context
|
save_ring3_context
|
||||||
mov ax, app_data ;os_data
|
mov ax, sel_app_data
|
||||||
mov ds, ax
|
mov ds, ax
|
||||||
mov es, ax
|
mov es, ax
|
||||||
mov byte [BOOT_VAR + 0x48E], 0xFF
|
mov byte [BOOT_VAR + 0x48E], 0xFF
|
||||||
@ -260,7 +268,7 @@ p_irq14:
|
|||||||
iret
|
iret
|
||||||
p_irq15:
|
p_irq15:
|
||||||
save_ring3_context
|
save_ring3_context
|
||||||
mov ax, app_data ;os_data
|
mov ax, sel_app_data
|
||||||
mov ds, ax
|
mov ds, ax
|
||||||
mov es, ax
|
mov es, ax
|
||||||
mov byte [BOOT_VAR + 0x48E], 0xFF
|
mov byte [BOOT_VAR + 0x48E], 0xFF
|
||||||
@ -284,7 +292,7 @@ ready_for_next_irq_1:
|
|||||||
|
|
||||||
irqD:
|
irqD:
|
||||||
save_ring3_context
|
save_ring3_context
|
||||||
mov ax, app_data ;os_data
|
mov ax, sel_app_data
|
||||||
mov ds, ax
|
mov ds, ax
|
||||||
mov es, ax
|
mov es, ax
|
||||||
|
|
||||||
@ -518,8 +526,8 @@ term9:
|
|||||||
frstor [eax]
|
frstor [eax]
|
||||||
@@:
|
@@:
|
||||||
|
|
||||||
mov [KEY_COUNT],byte 0 ; empty keyboard buffer
|
mov [KEY_COUNT], 0 ; empty keyboard buffer
|
||||||
mov [BTN_COUNT],byte 0 ; empty button buffer
|
mov [BTN_COUNT], 0 ; empty button buffer
|
||||||
|
|
||||||
|
|
||||||
; remove defined hotkeys
|
; remove defined hotkeys
|
||||||
@ -558,7 +566,7 @@ term9:
|
|||||||
|
|
||||||
mov ecx,esi ; remove buttons
|
mov ecx,esi ; remove buttons
|
||||||
bnewba2:
|
bnewba2:
|
||||||
mov edi,[BTN_ADDR]
|
mov edi,[btn_addr]
|
||||||
mov eax,edi
|
mov eax,edi
|
||||||
cld
|
cld
|
||||||
movzx ebx,word [edi]
|
movzx ebx,word [edi]
|
||||||
@ -804,8 +812,8 @@ term9:
|
|||||||
xor esi, esi
|
xor esi, esi
|
||||||
call redrawscreen
|
call redrawscreen
|
||||||
|
|
||||||
mov [MOUSE_BACKGROUND],byte 0 ; no mouse background
|
mov [mouse_background], 0 ; no mouse background
|
||||||
mov [DONT_DRAW_MOUSE],byte 0 ; draw mouse
|
mov [dont_draw_mouse], 0 ; draw mouse
|
||||||
|
|
||||||
mov [application_table_status],0
|
mov [application_table_status],0
|
||||||
;mov esi,process_terminated
|
;mov esi,process_terminated
|
||||||
|
16
kernel/branches/kolibri_pe/core/syscall.asm
Normal file
16
kernel/branches/kolibri_pe/core/syscall.asm
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
|
||||||
|
format MS COFF
|
||||||
|
|
||||||
|
public _i40
|
||||||
|
|
||||||
|
|
||||||
|
section '.text' code readable align 16
|
||||||
|
|
||||||
|
align 16
|
||||||
|
|
||||||
|
_i40:
|
||||||
|
; xchg bx, bx
|
||||||
|
|
||||||
|
int 0x41
|
||||||
|
iretd
|
||||||
|
|
@ -30,7 +30,7 @@ cross_order:
|
|||||||
|
|
||||||
|
|
||||||
align 16
|
align 16
|
||||||
i40:
|
i41:
|
||||||
pushad
|
pushad
|
||||||
cld
|
cld
|
||||||
movzx eax, al
|
movzx eax, al
|
||||||
|
@ -1281,12 +1281,12 @@ proc set_app_params stdcall,slot:dword, params:dword,\
|
|||||||
|
|
||||||
mov eax, [esi+0x08] ;app_eip
|
mov eax, [esi+0x08] ;app_eip
|
||||||
mov [ebx+REG_EIP], eax ;app_entry
|
mov [ebx+REG_EIP], eax ;app_entry
|
||||||
mov [ebx+REG_CS], dword app_code
|
mov [ebx+REG_CS], dword sel_app_code
|
||||||
mov [ebx+REG_EFLAGS], dword EFL_IOPL3+EFL_IF
|
mov [ebx+REG_EFLAGS], dword EFL_IOPL3+EFL_IF
|
||||||
|
|
||||||
mov eax, [esi+0x0C] ;app_esp
|
mov eax, [esi+0x0C] ;app_esp
|
||||||
mov [ebx+REG_APP_ESP], eax ;app_stack
|
mov [ebx+REG_APP_ESP], eax ;app_stack
|
||||||
mov [ebx+REG_SS], dword app_data
|
mov [ebx+REG_SS], dword sel_app_data
|
||||||
|
|
||||||
lea ecx, [ebx+REG_RET]
|
lea ecx, [ebx+REG_RET]
|
||||||
mov ebx, [slot]
|
mov ebx, [slot]
|
||||||
|
68
kernel/branches/kolibri_pe/core/thread.c
Normal file
68
kernel/branches/kolibri_pe/core/thread.c
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
|
||||||
|
#include <types.h>
|
||||||
|
#include <core.h>
|
||||||
|
#include <spinlock.h>
|
||||||
|
#include <link.h>
|
||||||
|
#include <mm.h>
|
||||||
|
#include <slab.h>
|
||||||
|
|
||||||
|
addr_t thr_ptr;
|
||||||
|
|
||||||
|
slab_cache_t *thr_slab;
|
||||||
|
|
||||||
|
extern addr_t sys_pdbr;
|
||||||
|
|
||||||
|
void init_threads()
|
||||||
|
{
|
||||||
|
thr_slab = slab_cache_create(sizeof(thr_t), 16,
|
||||||
|
NULL,NULL,SLAB_CACHE_MAGDEFERRED);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
thr_t* __fastcall create_systhread(addr_t entry_ptr)
|
||||||
|
{
|
||||||
|
static count_t thr_cnt = 0;
|
||||||
|
static count_t slot = 1;
|
||||||
|
|
||||||
|
thr_t *thr;
|
||||||
|
addr_t thr_stack;
|
||||||
|
|
||||||
|
thr = (thr_t*)slab_alloc(thr_slab,0);
|
||||||
|
thr_stack = PA2KA(core_alloc(1));
|
||||||
|
|
||||||
|
thr_cnt++;
|
||||||
|
|
||||||
|
thr->eax = (thr_cnt<<8)|slot;
|
||||||
|
thr->tid = (thr_cnt<<8)|slot;
|
||||||
|
|
||||||
|
thr->slot = slot;
|
||||||
|
|
||||||
|
slot++;
|
||||||
|
|
||||||
|
thr->pdir = KA2PA(&sys_pdbr);
|
||||||
|
|
||||||
|
thr->ebx = 0;
|
||||||
|
|
||||||
|
thr->edi = 0;
|
||||||
|
thr->esi = 0;
|
||||||
|
thr->ebp = 0;
|
||||||
|
thr->edx = 0;
|
||||||
|
thr->ecx = 0;
|
||||||
|
|
||||||
|
thr->cs = sel_srv_code;
|
||||||
|
thr->eflags = EFL_IOPL1;
|
||||||
|
thr->esp = thr_stack + 8192;
|
||||||
|
thr->ss = sel_srv_stack;
|
||||||
|
|
||||||
|
thr->thr_flags = 0;
|
||||||
|
|
||||||
|
thr->ticks_left = 8;
|
||||||
|
thr->quantum_size = 8;
|
||||||
|
|
||||||
|
thr->eip = entry_ptr;
|
||||||
|
|
||||||
|
//lock_enqueue(thr_ptr); /* add to scheduling queues */
|
||||||
|
|
||||||
|
return thr;
|
||||||
|
};
|
||||||
|
|
@ -392,7 +392,7 @@ v86_irqerr db 'V86 : IRQ already hooked',13,10,0
|
|||||||
endg
|
endg
|
||||||
|
|
||||||
v86_exc_c:
|
v86_exc_c:
|
||||||
mov ax, app_data
|
mov ax, sel_app_data
|
||||||
mov ds, ax
|
mov ds, ax
|
||||||
mov es, ax
|
mov es, ax
|
||||||
; Did we all that we have wanted to do?
|
; Did we all that we have wanted to do?
|
||||||
|
@ -81,8 +81,6 @@ msg_version db 'incompatible driver version',13,10,0
|
|||||||
msg_www db 'please visit www.kolibrios.org',13,10,0
|
msg_www db 'please visit www.kolibrios.org',13,10,0
|
||||||
msg_CR db 13,10,0
|
msg_CR db 13,10,0
|
||||||
|
|
||||||
intel_str db "GenuineIntel",0
|
|
||||||
AMD_str db "AuthenticAMD",0
|
|
||||||
|
|
||||||
;szSound db 'SOUND',0
|
;szSound db 'SOUND',0
|
||||||
;szInfinity db 'INFINITY',0
|
;szInfinity db 'INFINITY',0
|
||||||
@ -108,9 +106,6 @@ vmode db '/sys/drivers/VMODE.MDR',0
|
|||||||
vrr_m db 'VRR_M',0
|
vrr_m db 'VRR_M',0
|
||||||
kernel_file db 'KERNEL MNT'
|
kernel_file db 'KERNEL MNT'
|
||||||
|
|
||||||
align 4
|
|
||||||
|
|
||||||
_pg_balloc dd LAST_PAGE
|
|
||||||
|
|
||||||
;supported videomodes
|
;supported videomodes
|
||||||
mode_1280_1024_32:
|
mode_1280_1024_32:
|
||||||
@ -162,7 +157,7 @@ syslang dd 1
|
|||||||
boot_y dd 10
|
boot_y dd 10
|
||||||
|
|
||||||
pci_bios_entry dd 0
|
pci_bios_entry dd 0
|
||||||
dw pci_code_sel
|
dw sel_pci_code
|
||||||
|
|
||||||
if __DEBUG__ eq 1
|
if __DEBUG__ eq 1
|
||||||
include_debug_strings
|
include_debug_strings
|
||||||
@ -173,42 +168,61 @@ IncludeIGlobals
|
|||||||
align 16
|
align 16
|
||||||
_gdts:
|
_gdts:
|
||||||
|
|
||||||
dw 0x67; gdte-$-1
|
dw (gdte - _gdts -1)
|
||||||
dd _gdts
|
dd _gdts
|
||||||
dw 0
|
dw 0
|
||||||
|
|
||||||
|
tss_l:
|
||||||
|
dw TSS_SIZE-1
|
||||||
|
dw tss and 0xFFFF
|
||||||
|
db (tss shr 16) and 0xFF
|
||||||
|
db 10001001b
|
||||||
|
dw (tss shr 16) and 0xFF00
|
||||||
|
|
||||||
; Attention! Do not change the order of the first four selectors. They are used in Fast System Call
|
; 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, ....
|
; must be : os_code, os_data, app_code, app_data, ....
|
||||||
|
|
||||||
int_code_l:
|
os_code_l: ;0x10
|
||||||
os_code_l:
|
|
||||||
dw 0xffff
|
dw 0xffff
|
||||||
dw 0x0000
|
dw 0x0000
|
||||||
db 0x00
|
db 0x00
|
||||||
dw 11011111b *256 +10011010b
|
dw 11011111b *256 +10011010b
|
||||||
db 0x00
|
db 0x00
|
||||||
|
|
||||||
int_data_l:
|
os_stacK_l: ;0x18
|
||||||
os_data_l:
|
|
||||||
dw 0xffff
|
dw 0xffff
|
||||||
dw 0x0000
|
dw 0x0000
|
||||||
db 0x00
|
db 0x00
|
||||||
dw 11011111b *256 +10010010b
|
dw 11011111b *256 +10010010b
|
||||||
db 0x00
|
db 0x00
|
||||||
|
|
||||||
app_code_l:
|
app_code_l: ;0x20
|
||||||
dw 0xFFFF
|
dw 0xFFFF
|
||||||
dw 0
|
dw 0
|
||||||
db 0
|
db 0
|
||||||
db cpl3
|
db cpl3
|
||||||
dw G32+D32+0xF;
|
dw G32+D32+0xF;
|
||||||
|
|
||||||
app_data_l:
|
app_data_l: ;0x28
|
||||||
dw 0xFFFF
|
dw 0xFFFF
|
||||||
dw 0
|
dw 0
|
||||||
db 0
|
db 0
|
||||||
db drw3
|
db drw3
|
||||||
dw G32+D32+0xF;
|
dw G32+D32+0xF;
|
||||||
|
|
||||||
|
srv_code_l: ;0x30
|
||||||
|
dw 0xFFFF
|
||||||
|
dw 0
|
||||||
|
db 0
|
||||||
|
db cpl1
|
||||||
|
dw G32+D32+0xF;
|
||||||
|
|
||||||
|
srv_stack_l: ;0x38
|
||||||
|
dw 0xFFFF
|
||||||
|
dw 0
|
||||||
|
db 0
|
||||||
|
db drw1
|
||||||
|
dw G32+D32+0xF;
|
||||||
|
|
||||||
; ------------- PCI BIOS ------------------
|
; ------------- PCI BIOS ------------------
|
||||||
|
|
||||||
@ -253,19 +267,13 @@ graph_data_l:
|
|||||||
db 0x00
|
db 0x00
|
||||||
dw 11010000b *256 +11110010b
|
dw 11010000b *256 +11110010b
|
||||||
db 0x00
|
db 0x00
|
||||||
tss0_l:
|
|
||||||
dw TSS_SIZE-1
|
|
||||||
dw tss and 0xFFFF
|
|
||||||
db (tss shr 16) and 0xFF
|
|
||||||
db 10001001b
|
|
||||||
dw (tss shr 16) and 0xFF00
|
|
||||||
|
|
||||||
code_16:
|
code_16_l:
|
||||||
dw 0xFFFF
|
dw 0xFFFF
|
||||||
dw 0
|
dw 0
|
||||||
db 1
|
db 1
|
||||||
db cpl0
|
db cpl0
|
||||||
dw 0
|
dw 0
|
||||||
|
|
||||||
endofcode:
|
endofcode:
|
||||||
gdte:
|
gdte:
|
||||||
@ -274,17 +282,14 @@ section '.bss' data writeable align 4096
|
|||||||
|
|
||||||
align 4096
|
align 4096
|
||||||
|
|
||||||
_sys_pdbr rd 1024
|
_sys_pdbr rd 1024
|
||||||
|
|
||||||
rb 8192-512
|
|
||||||
|
|
||||||
__os_stack rb 512
|
|
||||||
|
|
||||||
cur_saved_data rb 4096
|
|
||||||
fpu_data: rb 512
|
|
||||||
|
|
||||||
|
|
||||||
idts rq 0x41
|
cur_saved_data rb 4096
|
||||||
|
|
||||||
|
fpu_data: rb 512
|
||||||
|
|
||||||
|
idts rq 0x42
|
||||||
|
|
||||||
; device irq owners
|
; device irq owners
|
||||||
irq_owner rd 16 ; process id
|
irq_owner rd 16 ; process id
|
||||||
@ -310,11 +315,14 @@ irq15read rd 16
|
|||||||
|
|
||||||
irq_tab rd 16
|
irq_tab rd 16
|
||||||
|
|
||||||
|
FONT_I rb 2304 ;16*144
|
||||||
|
FONT_II rb 2560 ;16*160
|
||||||
|
|
||||||
_z_core rd 52
|
_z_core rd 52
|
||||||
|
|
||||||
mem_block_map rb 512
|
mem_block_map rb 512
|
||||||
|
|
||||||
event_map rb 64
|
event_map rb 64
|
||||||
mem_block_list rd 64
|
mem_block_list rd 64
|
||||||
large_block_list rd 31
|
large_block_list rd 31
|
||||||
mem_block_mask rd 2
|
mem_block_mask rd 2
|
||||||
@ -330,18 +338,11 @@ _rd_fat_end rd 1 ;RAMDISK + 512 + 4278
|
|||||||
_rd_root rd 1 ;RAMDISK + 512*18 + 512
|
_rd_root rd 1 ;RAMDISK + 512*18 + 512
|
||||||
_rd_root_end rd 1 ;RAMDISK + 512*33
|
_rd_root_end rd 1 ;RAMDISK + 512*33
|
||||||
|
|
||||||
mem_used.fd rd 1
|
heap_mutex rd 1
|
||||||
mem_used.bk rd 1
|
heap_size rd 1
|
||||||
|
heap_free rd 1
|
||||||
mem_block_arr rd 1
|
heap_blocks rd 1
|
||||||
mem_block_start rd 1
|
free_blocks rd 1
|
||||||
mem_block_end rd 1
|
|
||||||
|
|
||||||
heap_mutex rd 1
|
|
||||||
heap_size rd 1
|
|
||||||
heap_free rd 1
|
|
||||||
heap_blocks rd 1
|
|
||||||
free_blocks rd 1
|
|
||||||
|
|
||||||
mst MEM_STATE
|
mst MEM_STATE
|
||||||
|
|
||||||
@ -393,51 +394,98 @@ tmp_task_ptab rd 1
|
|||||||
|
|
||||||
default_io_map rd 1
|
default_io_map rd 1
|
||||||
|
|
||||||
LFBSize rd 1 ;8Mb hardcoded
|
|
||||||
|
|
||||||
stall_mcs rd 1
|
stall_mcs rd 1
|
||||||
|
|
||||||
_current_slot:
|
_current_slot:
|
||||||
current_slot rd 1
|
current_slot rd 1
|
||||||
|
|
||||||
_display_data rd 1
|
_display_data rd 1
|
||||||
|
|
||||||
|
_current_thread rd 1
|
||||||
|
_k_reenter rd 1
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
scr_mode rd 1
|
||||||
|
|
||||||
|
LFBAddress rd 1
|
||||||
|
LFBSize rd 1 ;8Mb hardcoded
|
||||||
|
ScreenBPP rd 1
|
||||||
|
BytesPerScanLine rd 1
|
||||||
|
|
||||||
|
put_pixel rd 1
|
||||||
|
get_pixel rd 1
|
||||||
|
|
||||||
|
Screen_Max_X rd 1
|
||||||
|
Screen_Max_Y rd 1
|
||||||
|
|
||||||
|
btn_addr rd 1
|
||||||
|
|
||||||
|
redraw_background rd 1
|
||||||
|
mouse_background rd 1
|
||||||
|
dont_draw_mouse rd 1
|
||||||
|
|
||||||
|
MOUSE_VISIBLE rd 1
|
||||||
|
WIN_TEMP_XY rd 1
|
||||||
|
MOUSE_X rw 1
|
||||||
|
MOUSE_Y rw 1
|
||||||
|
mouse_scroll_v rd 1
|
||||||
|
mouse_scroll_h rd 1
|
||||||
|
|
||||||
|
BTN_COUNT rd 1
|
||||||
|
BTN_BUFF rd 1
|
||||||
|
|
||||||
|
KEY_COUNT rd 1
|
||||||
|
KEY_BUFF rb 128
|
||||||
|
|
||||||
|
|
||||||
|
mouse_color_mem rd 1
|
||||||
|
color_temp rd 1
|
||||||
|
btn_down rd 1
|
||||||
|
x_under rd 1
|
||||||
|
y_under rd 1
|
||||||
|
|
||||||
|
dont_switch rd 1
|
||||||
|
|
||||||
|
sys_shutdown rd 1
|
||||||
|
|
||||||
|
bank_rw rd 1
|
||||||
|
|
||||||
|
CPU_FREQ rd 1
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
; status
|
; status
|
||||||
hd1_status rd 1 ; 0 - free : other - pid
|
hd1_status rd 1 ; 0 - free : other - pid
|
||||||
application_table_status rd 1 ; 0 - free : other - pid
|
application_table_status rd 1 ; 0 - free : other - pid
|
||||||
|
|
||||||
; device addresses
|
; device addresses
|
||||||
mididp rd 1
|
mididp rd 1
|
||||||
midisp rd 1
|
midisp rd 1
|
||||||
|
|
||||||
cdbase rd 1
|
cdbase rd 1
|
||||||
cdid rd 1
|
cdid rd 1
|
||||||
|
|
||||||
hdbase rd 1 ; for boot 0x1f0
|
hdbase rd 1 ; for boot 0x1f0
|
||||||
hdid rd 1
|
hdid rd 1
|
||||||
hdpos rd 1 ; for boot 0x1
|
hdpos rd 1 ; for boot 0x1
|
||||||
fat32part rd 1 ; for boot 0x1
|
fat32part rd 1 ; for boot 0x1
|
||||||
cdpos rd 1
|
cdpos rd 1
|
||||||
|
|
||||||
;CPUID information
|
|
||||||
cpu_vendor rd 3
|
|
||||||
cpu_sign rd 1
|
|
||||||
cpu_info rd 1
|
|
||||||
cpu_caps rd 4
|
|
||||||
|
|
||||||
|
|
||||||
pg_data PG_DATA
|
|
||||||
heap_test rd 1
|
|
||||||
|
|
||||||
buttontype rd 1
|
pg_data PG_DATA
|
||||||
|
heap_test rd 1
|
||||||
|
|
||||||
|
buttontype rd 1
|
||||||
windowtypechanged rd 1
|
windowtypechanged rd 1
|
||||||
|
|
||||||
hd_entries rd 1 ;unused ? 0xfe10
|
hd_entries rd 1 ;unused ? 0xfe10
|
||||||
|
|
||||||
;* start code - Mario79
|
;* start code - Mario79
|
||||||
|
|
||||||
mouse_active rd 1
|
mouse_active rd 1
|
||||||
mouse_pause rd 1
|
mouse_pause rd 1
|
||||||
MouseTickCounter rd 1
|
MouseTickCounter rd 1
|
||||||
|
|
||||||
;* end code - Mario79
|
;* end code - Mario79
|
||||||
@ -447,8 +495,8 @@ mem_BACKGROUND rd 1
|
|||||||
wraw_bacground_select rb 1
|
wraw_bacground_select rb 1
|
||||||
|
|
||||||
cache_ide0:
|
cache_ide0:
|
||||||
cache_ide0_pointer rd 1
|
cache_ide0_pointer rd 1
|
||||||
cache_ide0_size rd 1 ; not use
|
cache_ide0_size rd 1 ; not use
|
||||||
cache_ide0_data_pointer rd 1
|
cache_ide0_data_pointer rd 1
|
||||||
cache_ide0_system_data_size rd 1 ; not use
|
cache_ide0_system_data_size rd 1 ; not use
|
||||||
cache_ide0_appl_data_size rd 1 ; not use
|
cache_ide0_appl_data_size rd 1 ; not use
|
||||||
@ -460,8 +508,8 @@ cache_ide0_search_start rd 1
|
|||||||
cache_ide0_appl_search_start rd 1
|
cache_ide0_appl_search_start rd 1
|
||||||
|
|
||||||
cache_ide1:
|
cache_ide1:
|
||||||
cache_ide1_pointer rd 1
|
cache_ide1_pointer rd 1
|
||||||
cache_ide1_size rd 1 ; not use
|
cache_ide1_size rd 1 ; not use
|
||||||
cache_ide1_data_pointer rd 1
|
cache_ide1_data_pointer rd 1
|
||||||
cache_ide1_system_data_size rd 1 ; not use
|
cache_ide1_system_data_size rd 1 ; not use
|
||||||
cache_ide1_appl_data_size rd 1 ; not use
|
cache_ide1_appl_data_size rd 1 ; not use
|
||||||
@ -473,8 +521,8 @@ cache_ide1_search_start rd 1
|
|||||||
cache_ide1_appl_search_start rd 1
|
cache_ide1_appl_search_start rd 1
|
||||||
|
|
||||||
cache_ide2:
|
cache_ide2:
|
||||||
cache_ide2_pointer rd 1
|
cache_ide2_pointer rd 1
|
||||||
cache_ide2_size rd 1 ; not use
|
cache_ide2_size rd 1 ; not use
|
||||||
cache_ide2_data_pointer rd 1
|
cache_ide2_data_pointer rd 1
|
||||||
cache_ide2_system_data_size rd 1 ; not use
|
cache_ide2_system_data_size rd 1 ; not use
|
||||||
cache_ide2_appl_data_size rd 1 ; not use
|
cache_ide2_appl_data_size rd 1 ; not use
|
||||||
@ -486,8 +534,8 @@ cache_ide2_search_start rd 1
|
|||||||
cache_ide2_appl_search_start rd 1
|
cache_ide2_appl_search_start rd 1
|
||||||
|
|
||||||
cache_ide3:
|
cache_ide3:
|
||||||
cache_ide3_pointer rd 1
|
cache_ide3_pointer rd 1
|
||||||
cache_ide3_size rd 1 ; not use
|
cache_ide3_size rd 1 ; not use
|
||||||
cache_ide3_data_pointer rd 1
|
cache_ide3_data_pointer rd 1
|
||||||
cache_ide3_system_data_size rd 1 ; not use
|
cache_ide3_system_data_size rd 1 ; not use
|
||||||
cache_ide3_appl_data_size rd 1 ; not use
|
cache_ide3_appl_data_size rd 1 ; not use
|
||||||
@ -498,18 +546,21 @@ cache_ide3_appl_sad_size rd 1
|
|||||||
cache_ide3_search_start rd 1
|
cache_ide3_search_start rd 1
|
||||||
cache_ide3_appl_search_start rd 1
|
cache_ide3_appl_search_start rd 1
|
||||||
|
|
||||||
debug_step_pointer rd 1
|
debug_step_pointer rd 1
|
||||||
hdd_appl_data rb 1 ; 0 = system cache, 1 - application cache
|
|
||||||
cd_appl_data rb 1 ; 0 = system cache, 1 - application cache
|
|
||||||
|
|
||||||
lba_read_enabled rd 1 ; 0 = disabled , 1 = enabled
|
hdd_appl_data rb 1 ; 0 = system cache, 1 - application cache
|
||||||
pci_access_enabled rd 1 ; 0 = disabled , 1 = enabled
|
cd_appl_data rb 1 ; 0 = system cache, 1 - application cache
|
||||||
timer_ticks_enable rb 1 ; for cd driver
|
|
||||||
|
|
||||||
NumBiosDisks rd 1
|
align 4
|
||||||
BiosDisksData rb 200h
|
lba_read_enabled rd 1 ; 0 = disabled , 1 = enabled
|
||||||
BiosDiskCaches rb 80h*(cache_ide1-cache_ide0)
|
pci_access_enabled rd 1 ; 0 = disabled , 1 = enabled
|
||||||
BiosDiskPartitions rd 80h
|
timer_ticks_enable rb 1 ; for cd driver
|
||||||
|
|
||||||
|
align 4
|
||||||
|
NumBiosDisks rd 1
|
||||||
|
BiosDisksData rb 200h
|
||||||
|
BiosDiskCaches rb 80h*(cache_ide1-cache_ide0)
|
||||||
|
BiosDiskPartitions rd 80h
|
||||||
|
|
||||||
IncludeUGlobals
|
IncludeUGlobals
|
||||||
|
|
||||||
|
@ -571,7 +571,7 @@ proc r200_SetCursor stdcall, hcursor:dword, x:dword, y:dword
|
|||||||
|
|
||||||
shl edx, 8
|
shl edx, 8
|
||||||
add edx, [esi+CURSOR.base]
|
add edx, [esi+CURSOR.base]
|
||||||
sub edx, LFBAddress
|
sub edx, LFB_BASE
|
||||||
wrr CUR_OFFSET, edx
|
wrr CUR_OFFSET, edx
|
||||||
popfd
|
popfd
|
||||||
ret
|
ret
|
||||||
@ -602,7 +602,7 @@ proc video_alloc
|
|||||||
lea eax,[eax+ebx*8]
|
lea eax,[eax+ebx*8]
|
||||||
|
|
||||||
shl eax,14
|
shl eax,14
|
||||||
add eax, LFBAddress+CURSOR_IMAGE_OFFSET
|
add eax, LFB_BASE+CURSOR_IMAGE_OFFSET
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
@ -610,7 +610,7 @@ align 4
|
|||||||
video_free:
|
video_free:
|
||||||
pushfd
|
pushfd
|
||||||
cli
|
cli
|
||||||
sub eax, LFBAddress+CURSOR_IMAGE_OFFSET
|
sub eax, LFB_BASE+CURSOR_IMAGE_OFFSET
|
||||||
shr eax, 14
|
shr eax, 14
|
||||||
mov ebx, cursor_map
|
mov ebx, cursor_map
|
||||||
bts [ebx], eax
|
bts [ebx], eax
|
||||||
|
@ -82,6 +82,6 @@ kernel_export \
|
|||||||
strncmp,\
|
strncmp,\
|
||||||
strnlen,\
|
strnlen,\
|
||||||
strchr,\
|
strchr,\
|
||||||
strrchr,\
|
strrchr
|
||||||
\
|
|
||||||
LFBAddress
|
|
||||||
|
@ -227,7 +227,7 @@ sys_button:
|
|||||||
button_no_draw:
|
button_no_draw:
|
||||||
|
|
||||||
push edi
|
push edi
|
||||||
mov edi, [BTN_ADDR]
|
mov edi, [btn_addr]
|
||||||
movzx eax, word [edi]
|
movzx eax, word [edi]
|
||||||
cmp eax, max_buttons
|
cmp eax, max_buttons
|
||||||
jge noaddbutt
|
jge noaddbutt
|
||||||
@ -264,7 +264,7 @@ remove_button:
|
|||||||
|
|
||||||
rnewba2:
|
rnewba2:
|
||||||
|
|
||||||
mov edi, [BTN_ADDR]
|
mov edi, [btn_addr]
|
||||||
mov eax, edi
|
mov eax, edi
|
||||||
movzx ebx, word [edi]
|
movzx ebx, word [edi]
|
||||||
inc ebx
|
inc ebx
|
||||||
@ -429,7 +429,7 @@ negativebutton:
|
|||||||
|
|
||||||
checkbuttons:
|
checkbuttons:
|
||||||
|
|
||||||
cmp [BTN_DOWN],byte 0 ; mouse buttons pressed
|
cmp byte [btn_down], 0 ; mouse buttons pressed
|
||||||
jnz @f
|
jnz @f
|
||||||
;..................................... start 1/5 : modified by vhanla .............................
|
;..................................... start 1/5 : modified by vhanla .............................
|
||||||
mov [bPressedMouseXY_B],0
|
mov [bPressedMouseXY_B],0
|
||||||
@ -439,7 +439,7 @@ checkbuttons:
|
|||||||
pushad
|
pushad
|
||||||
|
|
||||||
xor esi, esi
|
xor esi, esi
|
||||||
mov edi, [BTN_ADDR]
|
mov edi, [btn_addr]
|
||||||
movzx edx, word [edi]
|
movzx edx, word [edi]
|
||||||
test edx, edx
|
test edx, edx
|
||||||
jne @f
|
jne @f
|
||||||
@ -449,7 +449,7 @@ checkbuttons:
|
|||||||
@@:
|
@@:
|
||||||
;..................................... start 2/5 : modified by vhanla .............................
|
;..................................... start 2/5 : modified by vhanla .............................
|
||||||
;here i catch the coordinates when the mouse's button is clicked
|
;here i catch the coordinates when the mouse's button is clicked
|
||||||
push ax
|
push eax
|
||||||
cmp [bPressedMouseXY_B],0;FALSE
|
cmp [bPressedMouseXY_B],0;FALSE
|
||||||
jnz @f
|
jnz @f
|
||||||
mov [bPressedMouseXY_B],1;TRUE - it was already clicked
|
mov [bPressedMouseXY_B],1;TRUE - it was already clicked
|
||||||
@ -458,7 +458,7 @@ checkbuttons:
|
|||||||
mov ax,[MOUSE_Y]
|
mov ax,[MOUSE_Y]
|
||||||
mov [my],ax
|
mov [my],ax
|
||||||
@@:
|
@@:
|
||||||
pop ax
|
pop eax
|
||||||
;and it is only refreshed after the mouse's button release
|
;and it is only refreshed after the mouse's button release
|
||||||
;..................................... end 2/5 : modified by vhanla .............................
|
;..................................... end 2/5 : modified by vhanla .............................
|
||||||
|
|
||||||
@ -520,7 +520,7 @@ checkbuttons:
|
|||||||
movzx edx,word [eax+4] ; button x start
|
movzx edx,word [eax+4] ; button x start
|
||||||
add edx,ecx
|
add edx,ecx
|
||||||
;..................................... start 3/5 : modified by vhanla .............................
|
;..................................... start 3/5 : modified by vhanla .............................
|
||||||
mov cx,[mx] ;mov cx,[MOUSE_X]
|
mov cx,[mx] ;mov cx,[mouse_x]
|
||||||
;..................................... end 3/5 : modified by vhanla .............................
|
;..................................... end 3/5 : modified by vhanla .............................
|
||||||
cmp edx,ecx
|
cmp edx,ecx
|
||||||
jg buttonnewcheck
|
jg buttonnewcheck
|
||||||
@ -555,17 +555,16 @@ checkbuttons:
|
|||||||
|
|
||||||
mov bx,[eax+0xc] ; button id : bits 16-31
|
mov bx,[eax+0xc] ; button id : bits 16-31
|
||||||
shl ebx,16
|
shl ebx,16
|
||||||
mov bx,[eax+2] ; button id : bits 00-16
|
mov bx,[eax+2] ; button id : bits 00-16
|
||||||
push ebx
|
push ebx
|
||||||
|
|
||||||
mov [MOUSE_DOWN],byte 1 ; no mouse down checks
|
|
||||||
call find_pressed_button_frames
|
call find_pressed_button_frames
|
||||||
call negativebutton
|
call negativebutton
|
||||||
|
|
||||||
pushad
|
pushad
|
||||||
; // Alver 22.06.2008 // {
|
; // Alver 22.06.2008 // {
|
||||||
push eax
|
push eax
|
||||||
mov al, byte [BTN_DOWN]
|
mov al, byte [btn_down]
|
||||||
mov byte [btn_down_determ], al
|
mov byte [btn_down_determ], al
|
||||||
pop eax
|
pop eax
|
||||||
; } \\ Alver \\
|
; } \\ Alver \\
|
||||||
@ -580,13 +579,13 @@ checkbuttons:
|
|||||||
call stack_handler
|
call stack_handler
|
||||||
popad
|
popad
|
||||||
|
|
||||||
cmp [BTN_DOWN],byte 0 ; mouse buttons pressed ?
|
cmp byte [btn_down], 0 ; mouse buttons pressed ?
|
||||||
jnz cbwaitmouseup
|
jnz cbwaitmouseup
|
||||||
popad
|
popad
|
||||||
|
|
||||||
call negativebutton
|
call negativebutton
|
||||||
mov [MOUSE_BACKGROUND],byte 0 ; no mouse background
|
mov [mouse_background], 0 ; no mouse background
|
||||||
mov [DONT_DRAW_MOUSE],byte 0 ; draw mouse
|
mov [dont_draw_mouse], 0 ; draw mouse
|
||||||
;..................................... start 5/5 : modified by vhanla .............................
|
;..................................... start 5/5 : modified by vhanla .............................
|
||||||
; check coordinates
|
; check coordinates
|
||||||
iglobal
|
iglobal
|
||||||
@ -629,16 +628,15 @@ endg
|
|||||||
cmp ecx,edx
|
cmp ecx,edx
|
||||||
jg no_on_button
|
jg no_on_button
|
||||||
popa
|
popa
|
||||||
mov [BTN_COUNT],byte 1 ; no of buttons in buffer
|
mov [BTN_COUNT], 1 ; no of buttons in buffer
|
||||||
pop ebx
|
pop ebx
|
||||||
mov [BTN_BUFF],ebx ; lets put the button id in buffer
|
mov [BTN_BUFF],ebx ; lets put the button id in buffer
|
||||||
push ebx
|
push ebx
|
||||||
pusha
|
pusha
|
||||||
jmp yes_on_button
|
jmp yes_on_button
|
||||||
no_on_button:
|
no_on_button:
|
||||||
mov [BTN_COUNT],byte 0 ; no of buttons in buffer
|
mov [BTN_COUNT], 0 ; no of buttons in buffer
|
||||||
yes_on_button:
|
yes_on_button:
|
||||||
mov [MOUSE_DOWN],byte 0 ; mouse down -> do not draw
|
|
||||||
popa
|
popa
|
||||||
pop ebx
|
pop ebx
|
||||||
popa
|
popa
|
||||||
|
@ -507,13 +507,13 @@ sys_sendwindowmsg:
|
|||||||
.sendkey:
|
.sendkey:
|
||||||
pushf
|
pushf
|
||||||
cli
|
cli
|
||||||
movzx eax, byte [KEY_COUNT]
|
mov eax, [KEY_COUNT]
|
||||||
cmp al, 120
|
cmp eax, 120
|
||||||
jae .overflow
|
jae .overflow
|
||||||
inc eax
|
inc eax
|
||||||
mov [KEY_COUNT], al
|
mov [KEY_COUNT], eax
|
||||||
mov [KEY_COUNT+eax], cl
|
mov [KEY_BUFF+eax-1], cl
|
||||||
jmp .ok
|
jmp .ok
|
||||||
.overflow:
|
.overflow:
|
||||||
popf
|
popf
|
||||||
mov dword [esp+36], 1
|
mov dword [esp+36], 1
|
||||||
@ -521,9 +521,9 @@ sys_sendwindowmsg:
|
|||||||
.sendbtn:
|
.sendbtn:
|
||||||
pushf
|
pushf
|
||||||
cli
|
cli
|
||||||
cmp byte [BTN_COUNT], 0
|
cmp [BTN_COUNT], 0
|
||||||
jnz .overflow
|
jnz .overflow
|
||||||
mov byte [BTN_COUNT], 1
|
mov [BTN_COUNT], 1
|
||||||
mov [BTN_BUFF], ecx
|
mov [BTN_BUFF], ecx
|
||||||
.ok:
|
.ok:
|
||||||
popf
|
popf
|
||||||
@ -554,7 +554,7 @@ get_event_for_app:
|
|||||||
mov eax, [TASK_COUNT]
|
mov eax, [TASK_COUNT]
|
||||||
cmp eax,edx
|
cmp eax,edx
|
||||||
jne no_eventoccur2x
|
jne no_eventoccur2x
|
||||||
cmp [KEY_COUNT],byte 0
|
cmp [KEY_COUNT], 0
|
||||||
je no_eventoccur2x
|
je no_eventoccur2x
|
||||||
eventoccur2:
|
eventoccur2:
|
||||||
popad
|
popad
|
||||||
@ -573,7 +573,7 @@ get_event_for_app:
|
|||||||
;mov edi,[TASK_BASE] ; BUTTON IN BUFFER
|
;mov edi,[TASK_BASE] ; BUTTON IN BUFFER
|
||||||
test [edi+TASKDATA.event_mask],dword 4
|
test [edi+TASKDATA.event_mask],dword 4
|
||||||
jz no_eventoccur3
|
jz no_eventoccur3
|
||||||
cmp [BTN_COUNT],byte 0
|
cmp [BTN_COUNT], 0
|
||||||
je no_eventoccur3
|
je no_eventoccur3
|
||||||
mov ecx, [CURRENT_TASK]
|
mov ecx, [CURRENT_TASK]
|
||||||
movzx edx, word [WIN_STACK+ecx*2]
|
movzx edx, word [WIN_STACK+ecx*2]
|
||||||
@ -589,7 +589,7 @@ get_event_for_app:
|
|||||||
|
|
||||||
no_event_1:
|
no_event_1:
|
||||||
mov [window_minimize],1
|
mov [window_minimize],1
|
||||||
mov [BTN_COUNT],byte 0
|
mov [BTN_COUNT], 0
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
@ -613,7 +613,7 @@ no_mouse_event:
|
|||||||
;mov edi,[TASK_BASE] ; DESKTOP BACKGROUND REDRAW
|
;mov edi,[TASK_BASE] ; DESKTOP BACKGROUND REDRAW
|
||||||
test [edi+TASKDATA.event_mask], 16
|
test [edi+TASKDATA.event_mask], 16
|
||||||
jz no_eventoccur5
|
jz no_eventoccur5
|
||||||
; cmp [REDRAW_BACKGROUND],byte 2
|
; cmp [redraw_background], 2
|
||||||
; jnz no_eventoccur5
|
; jnz no_eventoccur5
|
||||||
test [eax+APPDATA.event_mask], 16
|
test [eax+APPDATA.event_mask], 16
|
||||||
jz no_eventoccur5
|
jz no_eventoccur5
|
||||||
|
@ -379,7 +379,7 @@ drawwindow_IV:
|
|||||||
jne no_skin_add_button
|
jne no_skin_add_button
|
||||||
|
|
||||||
;* close button
|
;* close button
|
||||||
mov edi,[BTN_ADDR]
|
mov edi,[btn_addr]
|
||||||
movzx eax,word [edi]
|
movzx eax,word [edi]
|
||||||
cmp eax,1000
|
cmp eax,1000
|
||||||
jge no_skin_add_button
|
jge no_skin_add_button
|
||||||
@ -418,7 +418,7 @@ drawwindow_IV:
|
|||||||
mov [eax],bx
|
mov [eax],bx
|
||||||
|
|
||||||
;* minimize button
|
;* minimize button
|
||||||
mov edi,[BTN_ADDR]
|
mov edi,[btn_addr]
|
||||||
movzx eax,word [edi]
|
movzx eax,word [edi]
|
||||||
cmp eax,1000
|
cmp eax,1000
|
||||||
jge no_skin_add_button
|
jge no_skin_add_button
|
||||||
|
@ -629,8 +629,8 @@ sys_window_mouse:
|
|||||||
cmp [new_window_starting],eax
|
cmp [new_window_starting],eax
|
||||||
jb swml1
|
jb swml1
|
||||||
|
|
||||||
mov [MOUSE_BACKGROUND],byte 0 ; no mouse background
|
mov [mouse_background], 0 ; no mouse background
|
||||||
mov [DONT_DRAW_MOUSE],byte 0 ; draw mouse
|
mov [dont_draw_mouse], 0 ; draw mouse
|
||||||
|
|
||||||
mov [new_window_starting],eax
|
mov [new_window_starting],eax
|
||||||
|
|
||||||
@ -926,7 +926,7 @@ windowactivate:
|
|||||||
movzx eax, word [WIN_STACK+eax*2] ; ax <- position in window stack
|
movzx eax, word [WIN_STACK+eax*2] ; ax <- position in window stack
|
||||||
|
|
||||||
xor esi, esi ; drop others
|
xor esi, esi ; drop others
|
||||||
waloop:
|
waloop:
|
||||||
cmp esi, dword [TASK_COUNT]
|
cmp esi, dword [TASK_COUNT]
|
||||||
jae wacont
|
jae wacont
|
||||||
inc esi
|
inc esi
|
||||||
@ -938,17 +938,17 @@ windowactivate:
|
|||||||
mov [edi], bx
|
mov [edi], bx
|
||||||
@@:
|
@@:
|
||||||
jmp waloop
|
jmp waloop
|
||||||
wacont:
|
wacont:
|
||||||
; set to no 1
|
; set to no 1
|
||||||
pop esi ; esi = pointer at 0xC400
|
pop esi ; esi = pointer at 0xC400
|
||||||
|
|
||||||
movzx eax, word [esi]
|
movzx eax, word [esi]
|
||||||
mov bx, [TASK_COUNT] ; number of processes
|
mov bx, [TASK_COUNT] ; number of processes
|
||||||
mov [WIN_STACK+eax*2], bx ; this is the last (and the upper)
|
mov [WIN_STACK+eax*2], bx ; this is the last (and the upper)
|
||||||
|
|
||||||
; update on screen -window stack
|
; update on screen -window stack
|
||||||
xor esi, esi
|
xor esi, esi
|
||||||
waloop2:
|
waloop2:
|
||||||
mov edi, [TASK_COUNT]
|
mov edi, [TASK_COUNT]
|
||||||
cmp esi, edi
|
cmp esi, edi
|
||||||
jae wacont2
|
jae wacont2
|
||||||
@ -956,11 +956,11 @@ windowactivate:
|
|||||||
movzx ebx, word [esi*2 + WIN_STACK]
|
movzx ebx, word [esi*2 + WIN_STACK]
|
||||||
mov [ebx*2 + WIN_POS], si
|
mov [ebx*2 + WIN_POS], si
|
||||||
jmp waloop2
|
jmp waloop2
|
||||||
wacont2:
|
wacont2:
|
||||||
mov [KEY_COUNT], byte 0 ; empty keyboard buffer
|
mov [KEY_COUNT], 0 ; empty keyboard buffer
|
||||||
mov [BTN_COUNT], byte 0 ; empty button buffer
|
mov [BTN_COUNT], 0 ; empty button buffer
|
||||||
mov [MOUSE_SCROLL_H], word 0 ; zero mouse z-index
|
mov [mouse_scroll_h], 0 ; zero mouse z-index
|
||||||
mov [MOUSE_SCROLL_V], word 0 ; zero mouse z-index
|
mov [mouse_scroll_v], 0 ; zero mouse z-index
|
||||||
popad
|
popad
|
||||||
ret
|
ret
|
||||||
|
|
||||||
@ -1056,7 +1056,6 @@ waredraw: ; if redraw necessary at activate
|
|||||||
jz .do_not_draw
|
jz .do_not_draw
|
||||||
|
|
||||||
popad
|
popad
|
||||||
mov [MOUSE_DOWN], byte 1 ; do draw mouse
|
|
||||||
call windowactivate
|
call windowactivate
|
||||||
|
|
||||||
; update screen info
|
; update screen info
|
||||||
@ -1081,7 +1080,6 @@ waredraw: ; if redraw necessary at activate
|
|||||||
popad
|
popad
|
||||||
|
|
||||||
mov [edi + WDATA.fl_redraw], 1 ; redraw flag for app
|
mov [edi + WDATA.fl_redraw], 1 ; redraw flag for app
|
||||||
mov [MOUSE_DOWN],byte 0 ; mouse down checks
|
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
@ -1090,9 +1088,8 @@ waredraw: ; if redraw necessary at activate
|
|||||||
popad
|
popad
|
||||||
|
|
||||||
call windowactivate
|
call windowactivate
|
||||||
mov [MOUSE_DOWN],byte 0 ; mouse down checks
|
mov [mouse_background], 0 ; no mouse background
|
||||||
mov [MOUSE_BACKGROUND],byte 0 ; no mouse background
|
mov [dont_draw_mouse], 0 ; draw mouse
|
||||||
mov [DONT_DRAW_MOUSE],byte 0 ; draw mouse
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
@ -1159,7 +1156,7 @@ restore_minimized_window:
|
|||||||
add edx, [edi+WDATA.box.height]
|
add edx, [edi+WDATA.box.height]
|
||||||
call calculatescreen
|
call calculatescreen
|
||||||
.done:
|
.done:
|
||||||
mov [MOUSE_BACKGROUND],byte 0 ; no mouse under
|
mov [mouse_background], 0 ; no mouse under
|
||||||
.skip_redrawings:
|
.skip_redrawings:
|
||||||
popfd
|
popfd
|
||||||
ret
|
ret
|
||||||
@ -1189,7 +1186,7 @@ checkwindows:
|
|||||||
.continue:
|
.continue:
|
||||||
.no_minimizing:
|
.no_minimizing:
|
||||||
|
|
||||||
cmp [BTN_DOWN],byte 0 ; mouse buttons pressed ?
|
cmp byte [btn_down], 0 ; mouse buttons pressed ?
|
||||||
jne .mouse_buttons_pressed
|
jne .mouse_buttons_pressed
|
||||||
;..................................... start 1/4 : modified by vhanla .................
|
;..................................... start 1/4 : modified by vhanla .................
|
||||||
mov [bPressedMouseXY_W],0
|
mov [bPressedMouseXY_W],0
|
||||||
@ -1206,7 +1203,7 @@ checkwindows:
|
|||||||
inc esi
|
inc esi
|
||||||
|
|
||||||
;..................................... start 3/4 : modified by vhanla .................
|
;..................................... start 3/4 : modified by vhanla .................
|
||||||
push ax
|
push eax
|
||||||
cmp [bPressedMouseXY_W],0
|
cmp [bPressedMouseXY_W],0
|
||||||
jnz @f
|
jnz @f
|
||||||
mov [bPressedMouseXY_W],1
|
mov [bPressedMouseXY_W],1
|
||||||
@ -1215,7 +1212,7 @@ checkwindows:
|
|||||||
mov ax,[MOUSE_Y]
|
mov ax,[MOUSE_Y]
|
||||||
mov [my],ax
|
mov [my],ax
|
||||||
@@:
|
@@:
|
||||||
pop ax
|
pop eax
|
||||||
;..................................... end 3/4 : modified by vhanla ...................
|
;..................................... end 3/4 : modified by vhanla ...................
|
||||||
|
|
||||||
cwloop:
|
cwloop:
|
||||||
@ -1236,7 +1233,7 @@ checkwindows:
|
|||||||
jnz cwloop
|
jnz cwloop
|
||||||
|
|
||||||
;..................................... start 4/4 : modified by vhanla .................
|
;..................................... start 4/4 : modified by vhanla .................
|
||||||
movzx eax, word [mx]; movzx eax,word[MOUSE_X]
|
movzx eax, word [mx]; movzx eax,word[mouse_x]
|
||||||
movzx ebx, word [my]; movzx ebx,word[MOUSE_Y]
|
movzx ebx, word [my]; movzx ebx,word[MOUSE_Y]
|
||||||
;..................................... endt 4/4 : modified by vhanla ..................
|
;..................................... endt 4/4 : modified by vhanla ..................
|
||||||
cmp ecx, eax
|
cmp ecx, eax
|
||||||
@ -1321,7 +1318,7 @@ checkwindows:
|
|||||||
mov [latest_window_touch], ecx
|
mov [latest_window_touch], ecx
|
||||||
mov [latest_window_touch_delta], edx
|
mov [latest_window_touch_delta], edx
|
||||||
|
|
||||||
mov cl, [BTN_DOWN] ; save for shade check
|
mov cl, byte [btn_down] ; save for shade check
|
||||||
mov [do_resize], cl
|
mov [do_resize], cl
|
||||||
no_emulation_righ_button:
|
no_emulation_righ_button:
|
||||||
mov ecx, [edi + WDATA.box.left]
|
mov ecx, [edi + WDATA.box.left]
|
||||||
@ -1341,7 +1338,7 @@ checkwindows:
|
|||||||
sub eax, ecx
|
sub eax, ecx
|
||||||
sub ebx, edx
|
sub ebx, edx
|
||||||
|
|
||||||
mov esi, [MOUSE_X]
|
mov esi, dword [MOUSE_X]
|
||||||
mov [WIN_TEMP_XY], esi
|
mov [WIN_TEMP_XY], esi
|
||||||
|
|
||||||
pushad ; wait for putimages to finish
|
pushad ; wait for putimages to finish
|
||||||
@ -1369,19 +1366,18 @@ checkwindows:
|
|||||||
call drawwindowframes
|
call drawwindowframes
|
||||||
|
|
||||||
mov [reposition],0
|
mov [reposition],0
|
||||||
mov [MOUSE_DOWN],byte 1 ; no reaction to mouse up/down
|
|
||||||
|
|
||||||
; move window
|
; move window
|
||||||
|
|
||||||
newchm:
|
newchm:
|
||||||
|
|
||||||
mov [DONT_DRAW_MOUSE],byte 1
|
mov [dont_draw_mouse], 1
|
||||||
|
|
||||||
call checkidle
|
call checkidle
|
||||||
|
|
||||||
call checkVga_N13
|
call checkVga_N13
|
||||||
|
|
||||||
mov [MOUSE_BACKGROUND],byte 0
|
mov [mouse_background], 0
|
||||||
|
|
||||||
call [draw_pointer]
|
call [draw_pointer]
|
||||||
|
|
||||||
@ -1390,7 +1386,7 @@ checkwindows:
|
|||||||
popad
|
popad
|
||||||
|
|
||||||
mov esi,[WIN_TEMP_XY]
|
mov esi,[WIN_TEMP_XY]
|
||||||
cmp esi,[MOUSE_X]
|
cmp esi, dword [MOUSE_X]
|
||||||
je cwb
|
je cwb
|
||||||
|
|
||||||
mov cx,[MOUSE_X]
|
mov cx,[MOUSE_X]
|
||||||
@ -1403,8 +1399,8 @@ checkwindows:
|
|||||||
|
|
||||||
call drawwindowframes
|
call drawwindowframes
|
||||||
|
|
||||||
mov ax,[Screen_Max_X]
|
mov ax, word [Screen_Max_X]
|
||||||
mov bx,[Screen_Max_Y]
|
mov bx, word [Screen_Max_Y]
|
||||||
|
|
||||||
cmp [do_resize_from_corner],1
|
cmp [do_resize_from_corner],1
|
||||||
je no_new_position
|
je no_new_position
|
||||||
@ -1477,14 +1473,14 @@ checkwindows:
|
|||||||
pop ax
|
pop ax
|
||||||
call drawwindowframes
|
call drawwindowframes
|
||||||
|
|
||||||
mov esi,[MOUSE_X]
|
mov esi, dword [MOUSE_X]
|
||||||
mov [WIN_TEMP_XY],esi
|
mov [WIN_TEMP_XY],esi
|
||||||
|
|
||||||
cwb:
|
cwb:
|
||||||
cmp [BTN_DOWN],byte 0
|
cmp byte [btn_down], 0
|
||||||
jne newchm
|
jne newchm
|
||||||
; new position done
|
; new position done
|
||||||
mov [DONT_DRAW_MOUSE],byte 1
|
mov [dont_draw_mouse], 1
|
||||||
mov cl,0
|
mov cl,0
|
||||||
test [edi+WDATA.fl_wstate],WSTATE_MAXIMIZED
|
test [edi+WDATA.fl_wstate],WSTATE_MAXIMIZED
|
||||||
jnz @f
|
jnz @f
|
||||||
@ -1637,7 +1633,7 @@ checkwindows:
|
|||||||
cmp [reposition],0
|
cmp [reposition],0
|
||||||
je retwm
|
je retwm
|
||||||
|
|
||||||
mov [DONT_DRAW_MOUSE],byte 1 ; no mouse
|
mov [dont_draw_mouse], 1 ; no mouse
|
||||||
|
|
||||||
|
|
||||||
push eax ebx ecx edx
|
push eax ebx ecx edx
|
||||||
@ -1666,7 +1662,7 @@ checkwindows:
|
|||||||
|
|
||||||
mov ecx,100 ; wait to avoid mouse residuals
|
mov ecx,100 ; wait to avoid mouse residuals
|
||||||
waitre2:
|
waitre2:
|
||||||
mov [DONT_DRAW_MOUSE],byte 1
|
mov [dont_draw_mouse], 1
|
||||||
call checkidle
|
call checkidle
|
||||||
cmp [edi+WDATA.fl_redraw],0
|
cmp [edi+WDATA.fl_redraw],0
|
||||||
jz retwm
|
jz retwm
|
||||||
@ -1674,9 +1670,8 @@ checkwindows:
|
|||||||
|
|
||||||
retwm:
|
retwm:
|
||||||
|
|
||||||
mov [DONT_DRAW_MOUSE],byte 0 ; mouse pointer
|
mov [dont_draw_mouse], 0 ; mouse pointer
|
||||||
mov [MOUSE_BACKGROUND],byte 0 ; no mouse under
|
mov [mouse_background], 0 ; no mouse under
|
||||||
mov [MOUSE_DOWN],byte 0 ; react to mouse up/down
|
|
||||||
|
|
||||||
mov esi,window_moved
|
mov esi,window_moved
|
||||||
call sys_msg_board_str
|
call sys_msg_board_str
|
||||||
|
@ -300,12 +300,12 @@ irq1:
|
|||||||
.scancode:
|
.scancode:
|
||||||
mov bl, ch
|
mov bl, ch
|
||||||
.dowrite:
|
.dowrite:
|
||||||
movzx eax,byte[KEY_COUNT]
|
mov eax, [KEY_COUNT]
|
||||||
cmp al,120
|
cmp al,120
|
||||||
jae .exit.irq1
|
jae .exit.irq1
|
||||||
inc eax
|
inc eax
|
||||||
mov [KEY_COUNT],al
|
mov [KEY_COUNT], eax
|
||||||
mov [KEY_COUNT+eax],bl
|
mov [KEY_BUFF+eax-1],bl
|
||||||
|
|
||||||
.exit.irq1:
|
.exit.irq1:
|
||||||
mov [check_idle_semaphore],5
|
mov [check_idle_semaphore],5
|
||||||
@ -340,4 +340,4 @@ numlock_map:
|
|||||||
db 0x33 ;Num 3
|
db 0x33 ;Num 3
|
||||||
db 0x30 ;Num 0
|
db 0x30 ;Num 0
|
||||||
db 0x2E ;Num .
|
db 0x2E ;Num .
|
||||||
;..........................Part2 End................................................
|
;..........................Part2 End................................................
|
||||||
|
@ -17,9 +17,6 @@ $Revision$
|
|||||||
; FB22 y move
|
; FB22 y move
|
||||||
; FB30 color temp
|
; FB30 color temp
|
||||||
; FB28 high bits temp
|
; FB28 high bits temp
|
||||||
; FB4A -> FB4D FB4A-B x-under - FB4C-D y-under
|
|
||||||
; FC00 -> FCFE com1/ps2 buffer
|
|
||||||
; FCFF com1/ps2 buffer count starting from FC00
|
|
||||||
|
|
||||||
uglobal
|
uglobal
|
||||||
mousecount dd 0x0
|
mousecount dd 0x0
|
||||||
@ -27,35 +24,20 @@ uglobal
|
|||||||
endg
|
endg
|
||||||
|
|
||||||
iglobal
|
iglobal
|
||||||
mouse_delay dd 10
|
mouse_delay dd 10
|
||||||
mouse_speed_factor: dd 3
|
mouse_speed_factor: dd 3
|
||||||
mouse_timer_ticks dd 0
|
mouse_timer_ticks dd 0
|
||||||
endg
|
endg
|
||||||
|
|
||||||
;include 'm_com.inc'
|
align 4
|
||||||
|
|
||||||
|
|
||||||
;test_mario79:
|
|
||||||
; push esi
|
|
||||||
; push eax
|
|
||||||
; mov [write_error_to],process_test_m79+43
|
|
||||||
; movzx eax,al ;[DevErrorCode]
|
|
||||||
; call writehex
|
|
||||||
; mov esi,process_test_m79
|
|
||||||
; call sys_msg_board_str
|
|
||||||
; pop eax
|
|
||||||
; pop esi
|
|
||||||
; ret
|
|
||||||
;process_test_m79 db 'K : Process - test Mario79 error 00000000',13,10,0
|
|
||||||
|
|
||||||
draw_mouse_under:
|
draw_mouse_under:
|
||||||
; return old picture
|
; return old picture
|
||||||
|
|
||||||
cmp [set_hw_cursor], 0
|
cmp [set_hw_cursor], 0
|
||||||
jz @F
|
jz @F
|
||||||
pushad
|
pushad
|
||||||
movzx eax,word [X_UNDER]
|
mov eax, [x_under]
|
||||||
movzx ebx,word [Y_UNDER]
|
mov ebx, [y_under]
|
||||||
stdcall [hw_restore], eax, ebx
|
stdcall [hw_restore], eax, ebx
|
||||||
popad
|
popad
|
||||||
ret
|
ret
|
||||||
@ -65,8 +47,8 @@ draw_mouse_under:
|
|||||||
xor edx,edx
|
xor edx,edx
|
||||||
align 4
|
align 4
|
||||||
mres:
|
mres:
|
||||||
movzx eax,word [X_UNDER]
|
mov eax, [x_under]
|
||||||
movzx ebx,word [Y_UNDER]
|
mov ebx, [y_under]
|
||||||
add eax,ecx
|
add eax,ecx
|
||||||
add ebx,edx
|
add ebx,edx
|
||||||
push ecx
|
push ecx
|
||||||
@ -101,8 +83,8 @@ save_draw_mouse:
|
|||||||
je .no_hw_cursor
|
je .no_hw_cursor
|
||||||
pushad
|
pushad
|
||||||
|
|
||||||
mov [X_UNDER],ax
|
mov [x_under], eax
|
||||||
mov [Y_UNDER],bx
|
mov [y_under], ebx
|
||||||
movzx eax,word [MOUSE_Y]
|
movzx eax,word [MOUSE_Y]
|
||||||
movzx ebx,word [MOUSE_X]
|
movzx ebx,word [MOUSE_X]
|
||||||
push eax
|
push eax
|
||||||
@ -139,8 +121,8 @@ save_draw_mouse:
|
|||||||
.no_hw_cursor:
|
.no_hw_cursor:
|
||||||
pushad
|
pushad
|
||||||
; save & draw
|
; save & draw
|
||||||
mov [X_UNDER],ax
|
mov [x_under], eax
|
||||||
mov [Y_UNDER],bx
|
mov [y_under], ebx
|
||||||
push eax
|
push eax
|
||||||
push ebx
|
push ebx
|
||||||
mov ecx,0
|
mov ecx,0
|
||||||
@ -157,29 +139,26 @@ drm:
|
|||||||
add ebx,edx
|
add ebx,edx
|
||||||
push ecx
|
push ecx
|
||||||
call getpixel
|
call getpixel
|
||||||
mov [COLOR_TEMP],ecx
|
mov [color_temp],ecx
|
||||||
pop ecx
|
pop ecx
|
||||||
mov eax,edx
|
mov eax,edx
|
||||||
shl eax,6
|
shl eax,6
|
||||||
shl ecx,2
|
shl ecx,2
|
||||||
add eax,ecx
|
add eax,ecx
|
||||||
add eax,mouseunder
|
add eax,mouseunder
|
||||||
mov ebx,[COLOR_TEMP]
|
mov ebx,[color_temp]
|
||||||
mov [eax],ebx
|
mov [eax],ebx
|
||||||
pop ecx
|
pop ecx
|
||||||
mov edi,edx ; y cycle
|
mov edi,edx ; y cycle
|
||||||
shl edi,4 ; *16 bytes per row
|
shl edi,4 ; *16 bytes per row
|
||||||
add edi,ecx ; x cycle
|
add edi,ecx ; x cycle
|
||||||
mov esi, edi
|
lea edi, [mousepointer+edi+edi*2] ; we have our str address
|
||||||
add edi, esi
|
|
||||||
add edi, esi ; *3
|
|
||||||
add edi,[MOUSE_PICTURE] ; we have our str address
|
|
||||||
mov esi, edi
|
mov esi, edi
|
||||||
add esi, 16*24*3
|
add esi, 16*24*3
|
||||||
push ecx
|
push ecx
|
||||||
mov ecx, [COLOR_TEMP]
|
mov ecx, [color_temp]
|
||||||
call combine_colors
|
call combine_colors
|
||||||
mov [MOUSE_COLOR_MEM], ecx
|
mov [mouse_color_mem], ecx
|
||||||
pop ecx
|
pop ecx
|
||||||
pop edx
|
pop edx
|
||||||
pop ecx
|
pop ecx
|
||||||
@ -188,13 +167,13 @@ drm:
|
|||||||
add eax,ecx ; we have x coord+cycle
|
add eax,ecx ; we have x coord+cycle
|
||||||
add ebx,edx ; and y coord+cycle
|
add ebx,edx ; and y coord+cycle
|
||||||
push ecx
|
push ecx
|
||||||
mov ecx, [MOUSE_COLOR_MEM]
|
mov ecx, [mouse_color_mem]
|
||||||
mov edi, 1
|
mov edi, 1
|
||||||
call [putpixel]
|
call [putpixel]
|
||||||
pop ecx
|
pop ecx
|
||||||
mov ebx,[esp+0] ; pure y coord again
|
mov ebx,[esp+0] ; pure y coord again
|
||||||
mov eax,[esp+4] ; and x
|
mov eax,[esp+4] ; and x
|
||||||
inc ecx ; +1 cycle
|
inc ecx ; +1 cycle
|
||||||
cmp ecx,16 ; if more than 16
|
cmp ecx,16 ; if more than 16
|
||||||
jnz drm
|
jnz drm
|
||||||
xor ecx, ecx
|
xor ecx, ecx
|
||||||
@ -276,7 +255,7 @@ combine_colors:
|
|||||||
|
|
||||||
|
|
||||||
__sys_disable_mouse:
|
__sys_disable_mouse:
|
||||||
cmp dword [MOUSE_VISIBLE],dword 0
|
cmp [MOUSE_VISIBLE], 0
|
||||||
je @f
|
je @f
|
||||||
ret
|
ret
|
||||||
@@:
|
@@:
|
||||||
@ -334,13 +313,13 @@ yes_mouse_disable:
|
|||||||
cmp ebx,ecx
|
cmp ebx,ecx
|
||||||
jg no_mouse_disable
|
jg no_mouse_disable
|
||||||
disable_m:
|
disable_m:
|
||||||
cmp dword [MOUSE_VISIBLE],dword 0
|
cmp [MOUSE_VISIBLE], 0
|
||||||
jne no_mouse_disable
|
jne no_mouse_disable
|
||||||
pushf
|
pushf
|
||||||
cli
|
cli
|
||||||
call draw_mouse_under
|
call draw_mouse_under
|
||||||
popf
|
popf
|
||||||
mov [MOUSE_VISIBLE],dword 1
|
mov [MOUSE_VISIBLE], 1
|
||||||
no_mouse_disable:
|
no_mouse_disable:
|
||||||
popad
|
popad
|
||||||
ret
|
ret
|
||||||
@ -362,9 +341,9 @@ __sys_draw_pointer:
|
|||||||
mov [MouseTickCounter],eax
|
mov [MouseTickCounter],eax
|
||||||
pop eax
|
pop eax
|
||||||
pushad
|
pushad
|
||||||
cmp dword [MOUSE_VISIBLE],dword 0 ; mouse visible ?
|
cmp [MOUSE_VISIBLE], 0 ; mouse visible ?
|
||||||
je chms00
|
je chms00
|
||||||
mov [MOUSE_VISIBLE], dword 0
|
mov [MOUSE_VISIBLE], 0
|
||||||
movzx ebx,word [MOUSE_Y]
|
movzx ebx,word [MOUSE_Y]
|
||||||
movzx eax,word [MOUSE_X]
|
movzx eax,word [MOUSE_X]
|
||||||
pushfd
|
pushfd
|
||||||
@ -375,8 +354,8 @@ nodmu2:
|
|||||||
popad
|
popad
|
||||||
ret
|
ret
|
||||||
chms00:
|
chms00:
|
||||||
movzx ecx,word [X_UNDER]
|
mov ecx, [x_under]
|
||||||
movzx edx,word [Y_UNDER]
|
mov edx, [y_under]
|
||||||
movzx ebx,word [MOUSE_Y]
|
movzx ebx,word [MOUSE_Y]
|
||||||
movzx eax,word [MOUSE_X]
|
movzx eax,word [MOUSE_X]
|
||||||
cmp eax,ecx
|
cmp eax,ecx
|
||||||
@ -397,7 +376,7 @@ nodmp:
|
|||||||
proc set_mouse_data stdcall, BtnState:dword, XMoving:dword, YMoving:dword, VScroll:dword, HScroll:dword
|
proc set_mouse_data stdcall, BtnState:dword, XMoving:dword, YMoving:dword, VScroll:dword, HScroll:dword
|
||||||
|
|
||||||
mov eax,[BtnState]
|
mov eax,[BtnState]
|
||||||
mov [BTN_DOWN],eax
|
mov [btn_down],eax
|
||||||
|
|
||||||
mov eax,[XMoving]
|
mov eax,[XMoving]
|
||||||
call mouse_acceleration
|
call mouse_acceleration
|
||||||
@ -407,9 +386,9 @@ proc set_mouse_data stdcall, BtnState:dword, XMoving:dword, YMoving:dword, VScro
|
|||||||
mov eax,0
|
mov eax,0
|
||||||
jmp @@M2
|
jmp @@M2
|
||||||
@@M1:
|
@@M1:
|
||||||
cmp ax,[Screen_Max_X] ;ScreenLength
|
cmp ax, word [Screen_Max_X] ;ScreenLength
|
||||||
jl @@M2
|
jl @@M2
|
||||||
mov ax,[Screen_Max_X] ;ScreenLength-1
|
mov ax, word [Screen_Max_X] ;ScreenLength-1
|
||||||
|
|
||||||
@@M2:
|
@@M2:
|
||||||
mov [MOUSE_X],ax ;[XCoordinate]
|
mov [MOUSE_X],ax ;[XCoordinate]
|
||||||
@ -424,18 +403,18 @@ proc set_mouse_data stdcall, BtnState:dword, XMoving:dword, YMoving:dword, VScro
|
|||||||
mov ax,0
|
mov ax,0
|
||||||
jmp @@M4
|
jmp @@M4
|
||||||
@@M3:
|
@@M3:
|
||||||
cmp ax,[Screen_Max_Y] ;ScreenHeigth
|
cmp ax, word [Screen_Max_Y] ;ScreenHeigth
|
||||||
jl @@M4
|
jl @@M4
|
||||||
mov ax,[Screen_Max_Y] ;ScreenHeigth-1
|
mov ax, word [Screen_Max_Y] ;ScreenHeigth-1
|
||||||
|
|
||||||
@@M4:
|
@@M4:
|
||||||
mov [MOUSE_Y],ax ;[YCoordinate]
|
mov [MOUSE_Y],ax ;[YCoordinate]
|
||||||
|
|
||||||
mov eax,[VScroll]
|
mov eax,[VScroll]
|
||||||
add [MOUSE_SCROLL_V],ax
|
add [mouse_scroll_v], eax
|
||||||
|
|
||||||
mov eax,[HScroll]
|
mov eax,[HScroll]
|
||||||
add [MOUSE_SCROLL_H],ax
|
add [mouse_scroll_h], eax
|
||||||
|
|
||||||
mov [mouse_active],1
|
mov [mouse_active],1
|
||||||
mov eax,[timer_ticks]
|
mov eax,[timer_ticks]
|
||||||
|
@ -4,8 +4,20 @@
|
|||||||
#define LOAD_BASE 0x00100000
|
#define LOAD_BASE 0x00100000
|
||||||
|
|
||||||
|
|
||||||
#define page_tabs 0xDF800000
|
#define page_tabs 0xDDC00000
|
||||||
|
|
||||||
|
#define master_tab (page_tabs+(page_tabs>>10))
|
||||||
|
|
||||||
|
#define sel_tss 0x08
|
||||||
|
|
||||||
|
#define sel_os_stack 0x10
|
||||||
|
#define sel_os_code 0x18
|
||||||
|
|
||||||
|
#define sel_app_code 0x23
|
||||||
|
#define sel_app_data 0x2B
|
||||||
|
|
||||||
|
#define sel_srv_code 0x31
|
||||||
|
#define sel_srv_stack 0x39
|
||||||
|
|
||||||
|
|
||||||
void printf (const char *format, ...);
|
void printf (const char *format, ...);
|
||||||
@ -53,8 +65,7 @@ static inline eflags_t safe_cli(void)
|
|||||||
"pushfl\n\t"
|
"pushfl\n\t"
|
||||||
"popl %0\n\t"
|
"popl %0\n\t"
|
||||||
"cli\n"
|
"cli\n"
|
||||||
: "=r" (tmp)
|
: "=r" (tmp));
|
||||||
);
|
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,41 +81,35 @@ static inline void safe_sti(eflags_t efl)
|
|||||||
static inline count_t fnzb(u32_t arg)
|
static inline count_t fnzb(u32_t arg)
|
||||||
{
|
{
|
||||||
count_t n;
|
count_t n;
|
||||||
asm volatile ("xorl %0, %0 \n\t"
|
asm volatile (
|
||||||
|
"xorl %0, %0 \n\t"
|
||||||
"bsr %1, %0"
|
"bsr %1, %0"
|
||||||
:"=&r" (n)
|
:"=&r"(n) :"r"(arg) );
|
||||||
:"r"(arg)
|
|
||||||
);
|
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline count_t _bsf(u32_t arg)
|
static inline count_t _bsf(u32_t arg)
|
||||||
{
|
{
|
||||||
count_t n;
|
count_t n;
|
||||||
asm volatile ("xorl %0, %0 \n\t"
|
asm volatile (
|
||||||
|
"xorl %0, %0 \n\t"
|
||||||
"bsf %1, %0"
|
"bsf %1, %0"
|
||||||
:"=&r" (n)
|
:"=&r" (n) :"r"(arg));
|
||||||
:"r"(arg)
|
|
||||||
);
|
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void _bts(u32_t *data, count_t val)
|
static inline void _bts(u32_t *data, count_t val)
|
||||||
{
|
{
|
||||||
asm volatile ("bts %0, %1 \n\t"
|
asm volatile (
|
||||||
:
|
"bts %0, %1 \n\t"
|
||||||
:"g"(data), "r"(val)
|
::"g"(data), "r"(val):"cc");
|
||||||
:"cc"
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extern inline void _btr(u32_t *data, count_t val)
|
extern inline void _btr(u32_t *data, count_t val)
|
||||||
{
|
{
|
||||||
asm volatile ("btr %0, %1 \n\t"
|
asm volatile (
|
||||||
:
|
"btr %0, %1 \n\t"
|
||||||
:"g"(data), "r"(val)
|
::"g"(data), "r"(val):"cc");
|
||||||
:"cc"
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extern inline void* load_file(const char *path, size_t *size)
|
extern inline void* load_file(const char *path, size_t *size)
|
||||||
@ -124,4 +129,63 @@ extern inline void* load_file(const char *path, size_t *size)
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* reemain part
|
||||||
|
saved_box BOX
|
||||||
|
ipc_start dd ?
|
||||||
|
ipc_size dd ?
|
||||||
|
event_mask dd ?
|
||||||
|
debugger_slot dd ?
|
||||||
|
dd ?
|
||||||
|
keyboard_mode db ?
|
||||||
|
db 3 dup(?)
|
||||||
|
dir_table dd ?
|
||||||
|
dbg_event_mem dd ?
|
||||||
|
dbg_regs:
|
||||||
|
dbg_regs.dr0 dd ?
|
||||||
|
dbg_regs.dr1 dd ?
|
||||||
|
dbg_regs.dr2 dd ?
|
||||||
|
dbg_regs.dr3 dd ?
|
||||||
|
dbg_regs.dr7 dd ?
|
||||||
|
wnd_caption dd ?
|
||||||
|
wnd_clientbox BOX
|
||||||
|
*/
|
||||||
|
|
||||||
//extern __fastcall void* load_file(const char *path, size_t *size);
|
//extern __fastcall void* load_file(const char *path, size_t *size);
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
u32_t edi;
|
||||||
|
u32_t esi;
|
||||||
|
u32_t ebp;
|
||||||
|
u32_t tmp; // esp
|
||||||
|
u32_t ebx;
|
||||||
|
u32_t edx;
|
||||||
|
u32_t ecx;
|
||||||
|
u32_t eax;
|
||||||
|
addr_t retaddr;
|
||||||
|
addr_t eip;
|
||||||
|
u32_t cs;
|
||||||
|
u32_t eflags;
|
||||||
|
addr_t esp;
|
||||||
|
u32_t ss; // 14*4
|
||||||
|
|
||||||
|
u32_t tid; // thread id
|
||||||
|
u32_t slot; // thread slot
|
||||||
|
|
||||||
|
addr_t pdir; //
|
||||||
|
|
||||||
|
u32_t thr_flags; // process is runnable only if zero
|
||||||
|
|
||||||
|
int ticks_left; // number of scheduling ticks left */
|
||||||
|
int quantum_size; // quantum size in ticks */
|
||||||
|
|
||||||
|
u32_t user_time; // user time in ticks
|
||||||
|
u32_t sys_time; // sys time in ticks
|
||||||
|
|
||||||
|
}thr_t;
|
||||||
|
|
||||||
|
#define EFL_IF 0x0200
|
||||||
|
#define EFL_IOPL1 0x1000
|
||||||
|
#define EFL_IOPL2 0x2000
|
||||||
|
#define EFL_IOPL3 0x3000
|
||||||
|
@ -1,76 +0,0 @@
|
|||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
;; ;;
|
|
||||||
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;;
|
|
||||||
;; Distributed under terms of the GNU General Public License ;;
|
|
||||||
;; ;;
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
|
|
||||||
$Revision$
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
align 4
|
|
||||||
|
|
||||||
init_BIOS32:
|
|
||||||
mov edi, 0xE0000
|
|
||||||
.pcibios_nxt:
|
|
||||||
cmp dword[edi], '_32_' ; "magic" word
|
|
||||||
je .BIOS32_found
|
|
||||||
.pcibios_nxt2:
|
|
||||||
add edi, 0x10
|
|
||||||
cmp edi, 0xFFFF0
|
|
||||||
je .BIOS32_not_found
|
|
||||||
jmp .pcibios_nxt
|
|
||||||
.BIOS32_found: ; magic word found, check control summ
|
|
||||||
|
|
||||||
movzx ecx, byte[edi + 9]
|
|
||||||
shl ecx, 4
|
|
||||||
mov esi, edi
|
|
||||||
xor eax, eax
|
|
||||||
cld ; paranoia
|
|
||||||
@@: lodsb
|
|
||||||
add ah, al
|
|
||||||
loop @b
|
|
||||||
jnz .pcibios_nxt2 ; control summ must be zero
|
|
||||||
; BIOS32 service found !
|
|
||||||
mov ebp, [edi + 4]
|
|
||||||
mov [bios32_entry], ebp
|
|
||||||
; check PCI BIOS present
|
|
||||||
mov eax, '$PCI'
|
|
||||||
xor ebx, ebx
|
|
||||||
push cs ; special for 'ret far' from BIOS
|
|
||||||
call ebp
|
|
||||||
test al, al
|
|
||||||
jnz .PCI_BIOS32_not_found
|
|
||||||
|
|
||||||
; çäåñü ñîçäàþòñÿ äèñêðèïòîðû äëÿ PCI BIOS
|
|
||||||
|
|
||||||
add ebx, OS_BASE
|
|
||||||
dec ecx
|
|
||||||
mov [(pci_code_32-OS_BASE)], cx ;limit 0-15
|
|
||||||
mov [(pci_data_32-OS_BASE)], cx ;limit 0-15
|
|
||||||
|
|
||||||
mov [(pci_code_32-OS_BASE)+2], bx ;base 0-15
|
|
||||||
mov [(pci_data_32-OS_BASE)+2], bx ;base 0-15
|
|
||||||
|
|
||||||
shr ebx, 16
|
|
||||||
mov [(pci_code_32-OS_BASE)+4], bl ;base 16-23
|
|
||||||
mov [(pci_data_32-OS_BASE)+4], bl ;base 16-23
|
|
||||||
|
|
||||||
shr ecx, 16
|
|
||||||
and cl, 0x0F
|
|
||||||
mov ch, bh
|
|
||||||
add cx, D32
|
|
||||||
mov [(pci_code_32-OS_BASE)+6], cx ;lim 16-19 &
|
|
||||||
mov [(pci_data_32-OS_BASE)+6], cx ;base 24-31
|
|
||||||
|
|
||||||
mov [(pci_bios_entry-OS_BASE)], edx
|
|
||||||
; jmp .end
|
|
||||||
.PCI_BIOS32_not_found:
|
|
||||||
; çäåñü äîëæíà çàïîëíÿòñÿ pci_emu_dat
|
|
||||||
.BIOS32_not_found:
|
|
||||||
.end:
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
@ -16,9 +16,15 @@ SECTIONS
|
|||||||
. = ALIGN(4096);
|
. = ALIGN(4096);
|
||||||
}
|
}
|
||||||
|
|
||||||
.flat . + 0xE0000000:
|
.text . + 0xDFC00000:
|
||||||
{
|
{
|
||||||
*(.flat) *(.text) *(.rdata) *(.data)
|
*(.text) *(.rdata)
|
||||||
|
. = ALIGN(4096);
|
||||||
|
}
|
||||||
|
|
||||||
|
.flat . + 0x00400000:
|
||||||
|
{
|
||||||
|
*(.flat) *(.data)
|
||||||
}
|
}
|
||||||
|
|
||||||
.edata ALIGN(32):
|
.edata ALIGN(32):
|
||||||
|
@ -28,13 +28,16 @@ KERNEL_SRC:= \
|
|||||||
|
|
||||||
|
|
||||||
PE_SRC:= \
|
PE_SRC:= \
|
||||||
init.c \
|
init.asm \
|
||||||
|
mbi.c \
|
||||||
mm.c \
|
mm.c \
|
||||||
slab.c \
|
slab.c \
|
||||||
heap.c \
|
heap.c \
|
||||||
pe.c \
|
pe.c \
|
||||||
dll.c \
|
dll.c \
|
||||||
spinlock.c \
|
spinlock.c \
|
||||||
|
thread.c \
|
||||||
|
syscall.asm \
|
||||||
boot/boot.asm \
|
boot/boot.asm \
|
||||||
boot/start.asm
|
boot/start.asm
|
||||||
|
|
||||||
@ -63,6 +66,9 @@ kernel.mnt: kernel.obj bin/export.obj $(PE_OBJS) Makefile ld.x
|
|||||||
|
|
||||||
bin/%.obj : core/%.c $(H_SRC) Makefile
|
bin/%.obj : core/%.c $(H_SRC) Makefile
|
||||||
$(CC) $(CFLAGS) -o $@ $<
|
$(CC) $(CFLAGS) -o $@ $<
|
||||||
|
|
||||||
|
bin/%.obj: core/%.asm Makefile
|
||||||
|
$(FASM) $< $@
|
||||||
|
|
||||||
bin/%.obj: %.asm
|
bin/%.obj: %.asm
|
||||||
$(FASM) $< $@
|
$(FASM) $< $@
|
||||||
|
@ -453,13 +453,13 @@ select_cursor:
|
|||||||
align 4
|
align 4
|
||||||
proc init_cursors
|
proc init_cursors
|
||||||
|
|
||||||
cmp [SCR_MODE],word 0x13
|
cmp [scr_mode], 0x13
|
||||||
jbe .fail
|
jbe .fail
|
||||||
|
|
||||||
test word [SCR_MODE], 0x4000
|
test [scr_mode], 0x4000
|
||||||
jz .fail
|
jz .fail
|
||||||
|
|
||||||
movzx eax, byte [ScreenBPP]
|
mov eax, [ScreenBPP]
|
||||||
mov ebx, [BytesPerScanLine]
|
mov ebx, [BytesPerScanLine]
|
||||||
cmp eax, 32
|
cmp eax, 32
|
||||||
jne @F
|
jne @F
|
||||||
@ -493,7 +493,7 @@ proc init_cursors
|
|||||||
mov [scr_width], ecx
|
mov [scr_width], ecx
|
||||||
mov [scr_height], edx
|
mov [scr_height], edx
|
||||||
|
|
||||||
movzx ebx, byte [ScreenBPP]
|
mov ebx, [ScreenBPP]
|
||||||
cmp ebx, 32
|
cmp ebx, 32
|
||||||
jne @F
|
jne @F
|
||||||
|
|
||||||
@ -598,8 +598,7 @@ proc cursor_24 stdcall, hcursor:dword, x:dword, y:dword
|
|||||||
mov [_dy], edi
|
mov [_dy], edi
|
||||||
|
|
||||||
mul ebx
|
mul ebx
|
||||||
lea esi, [ecx+ecx*2]
|
lea esi, [LFB_BASE+ecx+ecx*2]
|
||||||
add esi, [LFBAddress]
|
|
||||||
add esi, eax
|
add esi, eax
|
||||||
mov [cur_saved_base],esi
|
mov [cur_saved_base],esi
|
||||||
|
|
||||||
@ -710,8 +709,7 @@ proc cursor_32 stdcall, hcursor:dword, x:dword, y:dword
|
|||||||
mov [_dy], edi
|
mov [_dy], edi
|
||||||
|
|
||||||
mul ebx
|
mul ebx
|
||||||
lea esi, [eax+ecx*4]
|
lea esi, [LFB_BASE+eax+ecx*4]
|
||||||
add esi, [LFBAddress]
|
|
||||||
mov [cur_saved_base],esi
|
mov [cur_saved_base],esi
|
||||||
|
|
||||||
mov edi, [scr_width]
|
mov edi, [scr_width]
|
||||||
|
@ -63,10 +63,10 @@ if TRIDENT
|
|||||||
set_bank:
|
set_bank:
|
||||||
pushfd
|
pushfd
|
||||||
cli
|
cli
|
||||||
cmp al,[BANK_RW]
|
cmp al, byte [bank_rw]
|
||||||
je .retsb
|
je .retsb
|
||||||
|
|
||||||
mov [BANK_RW],al
|
mov byte [bank_rw],al
|
||||||
push dx
|
push dx
|
||||||
mov dx,3D8h
|
mov dx,3D8h
|
||||||
out dx,al
|
out dx,al
|
||||||
@ -84,10 +84,10 @@ if S3_VIDEO
|
|||||||
set_bank:
|
set_bank:
|
||||||
pushfd
|
pushfd
|
||||||
cli
|
cli
|
||||||
cmp al,[BANK_RW]
|
cmp al, byte [bank_rw]
|
||||||
je .retsb
|
je .retsb
|
||||||
|
|
||||||
mov [BANK_RW],al
|
mov byte [bank_rw],al
|
||||||
push ax
|
push ax
|
||||||
push dx
|
push dx
|
||||||
push cx
|
push cx
|
||||||
@ -172,10 +172,10 @@ set_bank:
|
|||||||
pushfd
|
pushfd
|
||||||
cli
|
cli
|
||||||
|
|
||||||
cmp al,[BANK_RW]
|
cmp al, byte [bank_rw]
|
||||||
je .retsb
|
je .retsb
|
||||||
|
|
||||||
mov [BANK_RW],al
|
mov byte [bank_rw],al
|
||||||
push ax
|
push ax
|
||||||
push dx
|
push dx
|
||||||
mov dx,3CEh
|
mov dx,3CEh
|
||||||
@ -206,10 +206,10 @@ set_bank:
|
|||||||
pushfd
|
pushfd
|
||||||
cli
|
cli
|
||||||
|
|
||||||
cmp al,[BANK_RW]
|
cmp al, byte [bank_rw]
|
||||||
je .retsb
|
je .retsb
|
||||||
|
|
||||||
mov [BANK_RW],al
|
mov byte [bank_rw],al
|
||||||
push ax
|
push ax
|
||||||
push dx
|
push dx
|
||||||
mov ah,al
|
mov ah,al
|
||||||
@ -336,7 +336,7 @@ vesa12_drawbackground:
|
|||||||
mul ebx
|
mul ebx
|
||||||
add eax, esi
|
add eax, esi
|
||||||
lea eax, [VGABasePtr+eax+esi*2]
|
lea eax, [VGABasePtr+eax+esi*2]
|
||||||
cmp [ScreenBPP],byte 24
|
cmp byte [ScreenBPP], 24
|
||||||
jz v12bgl3
|
jz v12bgl3
|
||||||
add eax,esi
|
add eax,esi
|
||||||
|
|
||||||
@ -410,7 +410,7 @@ vesa12_drawbar:
|
|||||||
add eax,ecx ; x
|
add eax,ecx ; x
|
||||||
add eax,ecx
|
add eax,ecx
|
||||||
add eax,ecx
|
add eax,ecx
|
||||||
cmp [ScreenBPP],byte 24 ; 24 or 32 bpp ? - x start
|
cmp byte [ScreenBPP], 24 ; 24 or 32 bpp ? - x start
|
||||||
jz dbpi2412
|
jz dbpi2412
|
||||||
add eax,ecx
|
add eax,ecx
|
||||||
|
|
||||||
@ -425,7 +425,7 @@ vesa12_drawbar:
|
|||||||
mov ecx,eax
|
mov ecx,eax
|
||||||
add ecx,eax
|
add ecx,eax
|
||||||
add ecx,eax
|
add ecx,eax
|
||||||
cmp [ScreenBPP],byte 24 ; 24 or 32 bpp ? - x size
|
cmp byte [ScreenBPP], 24 ; 24 or 32 bpp ? - x size
|
||||||
jz dbpi24312
|
jz dbpi24312
|
||||||
add ecx,eax
|
add ecx,eax
|
||||||
|
|
||||||
@ -463,7 +463,7 @@ vesa12_drawbar:
|
|||||||
|
|
||||||
dbcblimitlno12:
|
dbcblimitlno12:
|
||||||
|
|
||||||
cmp [ScreenBPP],byte 24 ; 24 or 32 bpp ?
|
cmp byte [ScreenBPP], 24 ; 24 or 32 bpp ?
|
||||||
jz dbpi24bit12
|
jz dbpi24bit12
|
||||||
jmp dbpi32bit12
|
jmp dbpi32bit12
|
||||||
|
|
||||||
@ -776,7 +776,7 @@ vesa12_putimage:
|
|||||||
add eax,ecx ; x
|
add eax,ecx ; x
|
||||||
add eax,ecx
|
add eax,ecx
|
||||||
add eax,ecx
|
add eax,ecx
|
||||||
cmp [ScreenBPP],byte 24 ; 24 or 32 bpp ? - x start
|
cmp byte [ScreenBPP], 24 ; 24 or 32 bpp ? - x start
|
||||||
jz pi2412
|
jz pi2412
|
||||||
add eax,ecx
|
add eax,ecx
|
||||||
|
|
||||||
@ -817,7 +817,7 @@ vesa12_putimage:
|
|||||||
|
|
||||||
dbcblimitlno212:
|
dbcblimitlno212:
|
||||||
|
|
||||||
cmp [ScreenBPP],byte 24 ; 24 or 32 bpp ?
|
cmp byte [ScreenBPP], 24 ; 24 or 32 bpp ?
|
||||||
jnz pi32bit12
|
jnz pi32bit12
|
||||||
|
|
||||||
pi24bit12:
|
pi24bit12:
|
||||||
@ -974,7 +974,7 @@ vesa12_putimage:
|
|||||||
vesa12_read_screen_pixel:
|
vesa12_read_screen_pixel:
|
||||||
|
|
||||||
and eax,0x3FFFFF
|
and eax,0x3FFFFF
|
||||||
cmp [ScreenBPP],byte 24 ; 24 or 32 bpp ?
|
cmp byte [ScreenBPP], 24 ; 24 or 32 bpp ?
|
||||||
jz v12rsp24
|
jz v12rsp24
|
||||||
mov edi,eax
|
mov edi,eax
|
||||||
shl edi,2
|
shl edi,2
|
||||||
|
@ -23,12 +23,6 @@ $Revision$
|
|||||||
; If you're planning to write your own video driver I suggest
|
; If you're planning to write your own video driver I suggest
|
||||||
; you replace the VESA12.INC file and see those instructions.
|
; you replace the VESA12.INC file and see those instructions.
|
||||||
|
|
||||||
;Screen_Max_X equ 0xfe00
|
|
||||||
;Screen_Max_Y equ 0xfe04
|
|
||||||
;BytesPerScanLine equ 0xfe08
|
|
||||||
;LFBAddress equ 0xfe80
|
|
||||||
;ScreenBPP equ 0xfbf1
|
|
||||||
|
|
||||||
|
|
||||||
;*************************************************
|
;*************************************************
|
||||||
; getpixel
|
; getpixel
|
||||||
@ -42,7 +36,7 @@ $Revision$
|
|||||||
|
|
||||||
getpixel:
|
getpixel:
|
||||||
push eax ebx edx edi
|
push eax ebx edx edi
|
||||||
call dword [GETPIXEL]
|
call [get_pixel]
|
||||||
pop edi edx ebx eax
|
pop edi edx ebx eax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
@ -52,16 +46,22 @@ Vesa20_getpixel24:
|
|||||||
imul ebx, [BytesPerScanLine] ; ebx = y * y multiplier
|
imul ebx, [BytesPerScanLine] ; ebx = y * y multiplier
|
||||||
lea edi, [eax+eax*2] ; edi = x*3
|
lea edi, [eax+eax*2] ; edi = x*3
|
||||||
add edi, ebx ; edi = x*3+(y*y multiplier)
|
add edi, ebx ; edi = x*3+(y*y multiplier)
|
||||||
add edi, [LFBAddress] ; ebx = where pixel is in memory
|
if SHADOWFB
|
||||||
mov ecx, [edi]
|
mov ecx, [SHADOWFB+edi]
|
||||||
|
else
|
||||||
|
mov ecx, [LFB_BASE+edi]
|
||||||
|
end if
|
||||||
and ecx, 0xffffff
|
and ecx, 0xffffff
|
||||||
ret
|
ret
|
||||||
|
|
||||||
Vesa20_getpixel32:
|
Vesa20_getpixel32:
|
||||||
imul ebx, [BytesPerScanLine] ; ebx = y * y multiplier
|
imul ebx, [BytesPerScanLine] ; ebx = y * y multiplier
|
||||||
lea edi, [ebx+eax*4] ; edi = x*4+(y*y multiplier)
|
lea edi, [ebx+eax*4] ; edi = x*4+(y*y multiplier)
|
||||||
add edi, [LFBAddress] ; ebx = where pixel is in memory
|
if SHADOWFB
|
||||||
mov ecx, [edi]
|
mov ecx, [SHADOWFB+edi]
|
||||||
|
else
|
||||||
|
mov ecx, [LFB_BASE+edi]
|
||||||
|
end if
|
||||||
and ecx, 0xffffff
|
and ecx, 0xffffff
|
||||||
ret
|
ret
|
||||||
|
|
||||||
@ -177,7 +177,7 @@ vesa20_putimage:
|
|||||||
mov [putimg.winmap_newline], eax
|
mov [putimg.winmap_newline], eax
|
||||||
; screen new line increment
|
; screen new line increment
|
||||||
mov eax, [BytesPerScanLine]
|
mov eax, [BytesPerScanLine]
|
||||||
movzx ebx, byte [ScreenBPP]
|
mov ebx, [ScreenBPP]
|
||||||
shr ebx, 3
|
shr ebx, 3
|
||||||
imul ecx, ebx
|
imul ecx, ebx
|
||||||
sub eax, ecx
|
sub eax, ecx
|
||||||
@ -188,11 +188,10 @@ vesa20_putimage:
|
|||||||
mov edx, [putimg.abs_cy]
|
mov edx, [putimg.abs_cy]
|
||||||
imul edx, [BytesPerScanLine]
|
imul edx, [BytesPerScanLine]
|
||||||
mov eax, [putimg.abs_cx]
|
mov eax, [putimg.abs_cx]
|
||||||
movzx ebx, byte [ScreenBPP]
|
mov ebx, [ScreenBPP]
|
||||||
shr ebx, 3
|
shr ebx, 3
|
||||||
imul eax, ebx
|
imul eax, ebx
|
||||||
add edx, eax
|
add edx, eax
|
||||||
add edx, [LFBAddress]
|
|
||||||
; pointer to pixel map
|
; pointer to pixel map
|
||||||
mov eax, [putimg.abs_cy]
|
mov eax, [putimg.abs_cy]
|
||||||
imul eax, [Screen_Max_X]
|
imul eax, [Screen_Max_X]
|
||||||
@ -218,9 +217,15 @@ align 4
|
|||||||
cmp [ebp], bl
|
cmp [ebp], bl
|
||||||
jne .skip
|
jne .skip
|
||||||
; mov eax, [esi] ; eax = RRBBGGRR
|
; mov eax, [esi] ; eax = RRBBGGRR
|
||||||
mov [edx], ax
|
if SHADOWFB
|
||||||
|
mov [SHADOWFB+edx], ax
|
||||||
|
end if
|
||||||
|
mov [LFB_BASE+edx], ax
|
||||||
shr eax, 16
|
shr eax, 16
|
||||||
mov [edx+2], al
|
if SHADOWFB
|
||||||
|
mov [SHADOWFB+edx+2], al
|
||||||
|
end if
|
||||||
|
mov [LFB_BASE+edx+2], al
|
||||||
.skip:
|
.skip:
|
||||||
; add esi, 3 ;[putimg.source_bpp]
|
; add esi, 3 ;[putimg.source_bpp]
|
||||||
add edx, 3
|
add edx, 3
|
||||||
@ -261,7 +266,10 @@ align 4
|
|||||||
cmp [ebp], bl
|
cmp [ebp], bl
|
||||||
jne .skip
|
jne .skip
|
||||||
; mov eax, [esi] ; ecx = RRBBGGRR
|
; mov eax, [esi] ; ecx = RRBBGGRR
|
||||||
mov [edx], eax
|
if SHADOWFB
|
||||||
|
mov [SHADOWFB+edx], eax
|
||||||
|
end if
|
||||||
|
mov [LFB_BASE+edx], eax
|
||||||
.skip:
|
.skip:
|
||||||
; add esi, [putimg.source_bpp]
|
; add esi, [putimg.source_bpp]
|
||||||
add edx, 4
|
add edx, 4
|
||||||
@ -324,7 +332,7 @@ __sys_putpixel:
|
|||||||
mov [esp+32-8],ecx
|
mov [esp+32-8],ecx
|
||||||
.noneg:
|
.noneg:
|
||||||
; OK to set pixel
|
; OK to set pixel
|
||||||
call dword [PUTPIXEL] ; call the real put_pixel function
|
call [put_pixel] ; call the real put_pixel function
|
||||||
.exit:
|
.exit:
|
||||||
popad
|
popad
|
||||||
ret
|
ret
|
||||||
@ -336,11 +344,15 @@ Vesa20_putpixel24:
|
|||||||
imul ebx, [BytesPerScanLine] ; ebx = y * y multiplier
|
imul ebx, [BytesPerScanLine] ; ebx = y * y multiplier
|
||||||
lea edi, [eax+eax*2] ; edi = x*3
|
lea edi, [eax+eax*2] ; edi = x*3
|
||||||
mov eax, [esp+32-8+4]
|
mov eax, [esp+32-8+4]
|
||||||
add edi, [LFBAddress]
|
if SHADOWFB
|
||||||
add edi, ebx ; ebx = where to put pixel in memory
|
mov [SHADOWFB+ebx+edi], ax
|
||||||
mov [edi], ax
|
end if
|
||||||
|
mov [LFB_BASE+ebx+edi], ax
|
||||||
shr eax, 16
|
shr eax, 16
|
||||||
mov [edi+2], al
|
if SHADOWFB
|
||||||
|
mov [SHADOWFB+ebx+edi+2], al
|
||||||
|
end if
|
||||||
|
mov [LFB_BASE+ebx+edi+2], al
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
@ -351,8 +363,10 @@ Vesa20_putpixel32:
|
|||||||
imul ebx, [BytesPerScanLine] ; ebx = y * y multiplier
|
imul ebx, [BytesPerScanLine] ; ebx = y * y multiplier
|
||||||
lea edi, [ebx+eax*4] ; edi = x*4+(y*y multiplier)
|
lea edi, [ebx+eax*4] ; edi = x*4+(y*y multiplier)
|
||||||
mov eax, [esp+32-8+4] ; eax = color
|
mov eax, [esp+32-8+4] ; eax = color
|
||||||
add edi, [LFBAddress] ; ebx = where to put pixel in memory
|
if SHADOWFB
|
||||||
mov [edi], eax
|
mov [SHADOWFB+edi], eax
|
||||||
|
end if
|
||||||
|
mov [LFB_BASE+edi], eax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
;*************************************************
|
;*************************************************
|
||||||
@ -623,7 +637,7 @@ vesa20_drawbar:
|
|||||||
mov [drbar.line_inc_map], eax
|
mov [drbar.line_inc_map], eax
|
||||||
; line_inc_scr
|
; line_inc_scr
|
||||||
mov eax, [drbar.real_sx]
|
mov eax, [drbar.real_sx]
|
||||||
movzx ebx, byte [ScreenBPP]
|
mov ebx, [ScreenBPP]
|
||||||
shr ebx, 3
|
shr ebx, 3
|
||||||
imul eax, ebx
|
imul eax, ebx
|
||||||
neg eax
|
neg eax
|
||||||
@ -633,11 +647,10 @@ vesa20_drawbar:
|
|||||||
mov edx, [drbar.abs_cy]
|
mov edx, [drbar.abs_cy]
|
||||||
imul edx, [BytesPerScanLine]
|
imul edx, [BytesPerScanLine]
|
||||||
mov eax, [drbar.abs_cx]
|
mov eax, [drbar.abs_cx]
|
||||||
; movzx ebx, byte [ScreenBPP]
|
; mov ebx, [ScreenBPP]
|
||||||
; shr ebx, 3
|
; shr ebx, 3
|
||||||
imul eax, ebx
|
imul eax, ebx
|
||||||
add edx, eax
|
add edx, eax
|
||||||
add edx, [LFBAddress]
|
|
||||||
; pointer to pixel map
|
; pointer to pixel map
|
||||||
mov eax, [drbar.abs_cy]
|
mov eax, [drbar.abs_cy]
|
||||||
imul eax, [Screen_Max_X]
|
imul eax, [Screen_Max_X]
|
||||||
@ -668,8 +681,12 @@ align 4
|
|||||||
.new_x:
|
.new_x:
|
||||||
cmp byte [ebp], bl
|
cmp byte [ebp], bl
|
||||||
jne .skip
|
jne .skip
|
||||||
mov [edx], bh
|
if SHADOWFB
|
||||||
mov [edx + 1], ax
|
mov [SHADOWFB+edx], bh
|
||||||
|
mov [SHADOWFB+edx + 1], ax
|
||||||
|
end if
|
||||||
|
mov [LFB_BASE+edx], bh
|
||||||
|
mov [LFB_BASE+edx + 1], ax
|
||||||
.skip:
|
.skip:
|
||||||
; add pixel
|
; add pixel
|
||||||
add edx, 3
|
add edx, 3
|
||||||
@ -704,7 +721,10 @@ align 4
|
|||||||
.new_x:
|
.new_x:
|
||||||
cmp byte [ebp], bl
|
cmp byte [ebp], bl
|
||||||
jne .skip
|
jne .skip
|
||||||
mov [edx], eax
|
if SHADOWFB
|
||||||
|
mov [SHADOWFB+edx], eax
|
||||||
|
end if
|
||||||
|
mov [LFB_BASE+edx], eax
|
||||||
.skip:
|
.skip:
|
||||||
; add pixel
|
; add pixel
|
||||||
add edx, 4
|
add edx, 4
|
||||||
@ -731,59 +751,6 @@ align 4
|
|||||||
mov [EGA_counter],1
|
mov [EGA_counter],1
|
||||||
ret
|
ret
|
||||||
|
|
||||||
;voodoodbcplimit:
|
|
||||||
|
|
||||||
; ebp:=(y+Ywin)*(ScreenXSize+1)+(x+Xwin)+AddrBuffer
|
|
||||||
|
|
||||||
|
|
||||||
; pusha
|
|
||||||
|
|
||||||
; xor edx,edx
|
|
||||||
; mov eax,ebp
|
|
||||||
; mov ebx,[Screen_Max_X] ; Screen_X_size
|
|
||||||
; inc ebx ; +1
|
|
||||||
; sub eax,display_data ; -AddrBuffer
|
|
||||||
; div ebx ;
|
|
||||||
; mov ebx,eax ; ebx:=Y
|
|
||||||
; mov eax,edx ; eax:=X
|
|
||||||
; call cplimit
|
|
||||||
|
|
||||||
; test ecx,ecx
|
|
||||||
; jne dbcpl12
|
|
||||||
; popa
|
|
||||||
; clc
|
|
||||||
; ret
|
|
||||||
; dbcpl12:
|
|
||||||
; popa
|
|
||||||
; stc
|
|
||||||
; ret
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;dbcplimit:
|
|
||||||
|
|
||||||
; pusha
|
|
||||||
|
|
||||||
; xor edx,edx
|
|
||||||
; mov ebx,[Screen_Max_X]
|
|
||||||
; inc ebx
|
|
||||||
; sub eax,display_data
|
|
||||||
; div ebx
|
|
||||||
; mov ebx,eax
|
|
||||||
; mov eax,edx
|
|
||||||
; call cplimit
|
|
||||||
|
|
||||||
; test ecx,ecx
|
|
||||||
; jne dbcpl1
|
|
||||||
; popa
|
|
||||||
; clc
|
|
||||||
; ret
|
|
||||||
; dbcpl1:
|
|
||||||
; popa
|
|
||||||
; stc
|
|
||||||
; ret
|
|
||||||
|
|
||||||
|
|
||||||
vesa20_drawbackground_tiled:
|
vesa20_drawbackground_tiled:
|
||||||
call [disable_mouse]
|
call [disable_mouse]
|
||||||
@ -800,11 +767,11 @@ dp2:
|
|||||||
add ebp, eax
|
add ebp, eax
|
||||||
add ebp, eax
|
add ebp, eax
|
||||||
add ebp, eax
|
add ebp, eax
|
||||||
cmp [ScreenBPP], byte 24 ; 24 or 32 bpp ? - x size
|
cmp byte [ScreenBPP], 24 ; 24 or 32 bpp ? - x size
|
||||||
jz @f
|
jz @f
|
||||||
add ebp, eax
|
add ebp, eax
|
||||||
@@:
|
@@:
|
||||||
add ebp, [LFBAddress]
|
; add ebp, LFB_BASE
|
||||||
; ebp:=Y*BytesPerScanLine+X*BytesPerPixel+AddrLFB
|
; ebp:=Y*BytesPerScanLine+X*BytesPerPixel+AddrLFB
|
||||||
call calculate_edi
|
call calculate_edi
|
||||||
xchg edi, ebp
|
xchg edi, ebp
|
||||||
@ -849,7 +816,7 @@ nbgp:
|
|||||||
add esi, 3
|
add esi, 3
|
||||||
add edi, 3
|
add edi, 3
|
||||||
@@:
|
@@:
|
||||||
cmp [ScreenBPP], byte 25 ; 24 or 32 bpp?
|
cmp byte [ScreenBPP], 25 ; 24 or 32 bpp?
|
||||||
sbb edi, -1 ; +1 for 32 bpp
|
sbb edi, -1 ; +1 for 32 bpp
|
||||||
; I do not use 'inc eax' because this is slightly slower then 'add eax,1'
|
; I do not use 'inc eax' because this is slightly slower then 'add eax,1'
|
||||||
add ebp, edx
|
add ebp, edx
|
||||||
@ -910,11 +877,10 @@ vesa20_drawbackground_stretch:
|
|||||||
add ebp, eax
|
add ebp, eax
|
||||||
add ebp, eax
|
add ebp, eax
|
||||||
add ebp, eax
|
add ebp, eax
|
||||||
cmp [ScreenBPP], byte 24 ; 24 or 32 bpp ? - x size
|
cmp byte [ScreenBPP], 24 ; 24 or 32 bpp ? - x size
|
||||||
jz @f
|
jz @f
|
||||||
add ebp, eax
|
add ebp, eax
|
||||||
@@:
|
@@:
|
||||||
add ebp, [LFBAddress]
|
|
||||||
; ebp:=Y*BytesPerScanLine+X*BytesPerPixel+AddrLFB
|
; ebp:=Y*BytesPerScanLine+X*BytesPerPixel+AddrLFB
|
||||||
call calculate_edi
|
call calculate_edi
|
||||||
xchg edi, ebp
|
xchg edi, ebp
|
||||||
@ -991,11 +957,17 @@ sdp3a:
|
|||||||
mov ebx, [bgr_next_line+esi]
|
mov ebx, [bgr_next_line+esi]
|
||||||
call [overlapping_of_points_ptr]
|
call [overlapping_of_points_ptr]
|
||||||
.novert:
|
.novert:
|
||||||
mov [edi], ax
|
if SHADOWFB
|
||||||
|
mov [SHADOWFB+edi], ax
|
||||||
|
end if
|
||||||
|
mov [LFB_BASE+edi], ax
|
||||||
shr eax, 16
|
shr eax, 16
|
||||||
mov [edi+2], al
|
if SHADOWFB
|
||||||
|
mov [SHADOWFB+edi+2], al
|
||||||
|
end if
|
||||||
|
mov [LFB_BASE+edi+2], al
|
||||||
snbgp:
|
snbgp:
|
||||||
cmp [ScreenBPP], byte 25
|
cmp byte [ScreenBPP], 25
|
||||||
sbb edi, -4
|
sbb edi, -4
|
||||||
add ebp, 1
|
add ebp, 1
|
||||||
mov eax, [esp+20]
|
mov eax, [esp+20]
|
||||||
@ -1019,7 +991,7 @@ sdp4:
|
|||||||
sub edi, eax
|
sub edi, eax
|
||||||
sub edi, eax
|
sub edi, eax
|
||||||
sub edi, eax
|
sub edi, eax
|
||||||
cmp [ScreenBPP], byte 24
|
cmp byte [ScreenBPP], 24
|
||||||
jz @f
|
jz @f
|
||||||
sub edi, eax
|
sub edi, eax
|
||||||
@@:
|
@@:
|
||||||
|
@ -126,14 +126,14 @@ endg
|
|||||||
|
|
||||||
checkVga_N13:
|
checkVga_N13:
|
||||||
|
|
||||||
cmp [SCR_MODE],dword 0x13
|
cmp [scr_mode], 0x13
|
||||||
jne @f
|
jne @f
|
||||||
|
|
||||||
; cnvl:
|
; cnvl:
|
||||||
pushad
|
pushad
|
||||||
cmp [EGA_counter],1
|
cmp [EGA_counter],1
|
||||||
je novesal
|
je novesal
|
||||||
mov ecx,[MOUSE_X]
|
mov ecx, dword [MOUSE_X]
|
||||||
cmp ecx,[novesachecksum]
|
cmp ecx,[novesachecksum]
|
||||||
jne novesal
|
jne novesal
|
||||||
popad
|
popad
|
||||||
@ -201,7 +201,7 @@ checkVga_N13:
|
|||||||
|
|
||||||
VGA_drawbackground:
|
VGA_drawbackground:
|
||||||
; draw all
|
; draw all
|
||||||
cmp [SCR_MODE],dword 0x12
|
cmp [scr_mode], 0x12
|
||||||
jne .end
|
jne .end
|
||||||
pushad
|
pushad
|
||||||
mov esi,[LFBAddress]
|
mov esi,[LFBAddress]
|
||||||
@ -377,7 +377,7 @@ VGA_putpixel:
|
|||||||
VGA__putimage:
|
VGA__putimage:
|
||||||
; ecx = size [x|y]
|
; ecx = size [x|y]
|
||||||
; edx = coordinates [x|y]
|
; edx = coordinates [x|y]
|
||||||
cmp [SCR_MODE],dword 0x12
|
cmp [scr_mode], 0x12
|
||||||
jne @f
|
jne @f
|
||||||
pushad
|
pushad
|
||||||
rol edx,16
|
rol edx,16
|
||||||
@ -397,7 +397,7 @@ VGA_draw_bar:
|
|||||||
; ebx cy
|
; ebx cy
|
||||||
; ecx xe
|
; ecx xe
|
||||||
; edx ye
|
; edx ye
|
||||||
cmp [SCR_MODE],dword 0x12
|
cmp [scr_mode], 0x12
|
||||||
jne @f
|
jne @f
|
||||||
pushad
|
pushad
|
||||||
sub ecx,eax
|
sub ecx,eax
|
||||||
|
Loading…
Reference in New Issue
Block a user