forked from KolibriOS/kolibrios
1) SouthBridge utilities;
2) reverted for the old (but stable) 62syscall for a while... git-svn-id: svn://kolibrios.org@1599 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
e5c581d60d
commit
e5b8886135
@ -7,13 +7,16 @@
|
||||
;; ;;
|
||||
;; AMD HyperTransport bus control ;;
|
||||
;; ;;
|
||||
;; art_zh <artem@jerdev.co.uk> ;;
|
||||
;; art_zh <kolibri@jerdev.co.uk> ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision: 1554 $
|
||||
|
||||
|
||||
NB_MISC_INDEX equ 0xF0000060 ; NB Misc indirect access
|
||||
NB_MISC_DATA equ 0xF0000064
|
||||
PCIEIND_INDEX equ 0xF00000E0 ; PCIe Core indirect config space access
|
||||
HTIU_NB_INDEX equ 0xF0000094 ; HyperTransport indirect config space access
|
||||
|
||||
;=============================================================================
|
||||
;
|
||||
@ -44,6 +47,10 @@ rs7xx_nbconfig_flush_pci:
|
||||
|
||||
align 4
|
||||
|
||||
;------------------------------------------
|
||||
; params: al = nbconfig register#
|
||||
; ebx = register content
|
||||
;
|
||||
rs7xx_nbconfig_write_pci:
|
||||
and eax, 0x0FC ; leave register# only
|
||||
or eax, 0x80000000 ; bdf = 0:0.0
|
||||
@ -54,6 +61,138 @@ rs7xx_nbconfig_write_pci:
|
||||
out dx, eax
|
||||
ret
|
||||
|
||||
;***************************************************************************
|
||||
; Function
|
||||
; rs7xx_unlock_bar3: unlocks the BAR3 register of nbconfig that
|
||||
; makes pcie config address space visible
|
||||
; -----------------------
|
||||
; in: nothing out: nothing destroys: eax ebx edx
|
||||
;
|
||||
;***************************************************************************
|
||||
align 4
|
||||
rs7xx_unlock_bar3:
|
||||
mov eax, NB_MISC_INDEX
|
||||
mov ebx, 0x080 ; reg#0; write-enable
|
||||
call rs7xx_nbconfig_write_pci ; set index
|
||||
mov eax, NB_MISC_DATA
|
||||
call rs7xx_nbconfig_read_pci ; read data
|
||||
mov ebx, eax
|
||||
and ebx, 0xFFFFFFF7 ; clear bit3
|
||||
mov eax, NB_MISC_DATA
|
||||
call rs7xx_nbconfig_write_pci ; write it back
|
||||
mov eax, NB_MISC_INDEX
|
||||
xor ebx, ebx ; reg#0; write-locked
|
||||
call rs7xx_nbconfig_write_pci ; set index
|
||||
ret
|
||||
|
||||
;--------------------------------------------------------------
|
||||
align 4
|
||||
rs780_read_misc:
|
||||
; in: eax(al) - reg# out: eax = NBMISCIND data
|
||||
push edx
|
||||
mov edx, NB_MISC_INDEX
|
||||
and eax, 0x07F
|
||||
mov [edx], eax
|
||||
add dl, 4
|
||||
mov eax, [edx]
|
||||
pop edx
|
||||
ret
|
||||
|
||||
;-------------------------------------------
|
||||
align 4
|
||||
rs780_write_misc:
|
||||
; in: eax(al) - reg# ebx = NBMISCIND data
|
||||
push edx
|
||||
mov edx, NB_MISC_INDEX
|
||||
and eax, 0x07F
|
||||
or eax, 0x080 ; set WE
|
||||
mov [edx], eax
|
||||
add dl, 4
|
||||
mov [edx], ebx
|
||||
sub dl, 4
|
||||
xor eax, eax
|
||||
mov [edx], eax ; safety last
|
||||
pop edx
|
||||
ret
|
||||
|
||||
;-------------------------------------------------------------
|
||||
align 4
|
||||
rs780_read_pcieind:
|
||||
; in: ah = bridge#, al = reg# out: eax = PCIEIND data
|
||||
push edx
|
||||
xor edx, edx
|
||||
mov ah, dl ; bridge# : 0 = Core+GFX; 0x10 = Core+SB
|
||||
and dl, 15 ; 0x20 = Core+GPP; 2..12 = a PortBridge
|
||||
shl edx, 15 ; device#
|
||||
add edx, PCIEIND_INDEX ; full bdf-address
|
||||
and eax, 0x30FF
|
||||
or al, al
|
||||
jnz @f
|
||||
shl eax, 4 ; set bits 17..16 for a Core bridge
|
||||
@@:
|
||||
mov [edx], eax
|
||||
add dl, 4
|
||||
mov eax, [edx]
|
||||
pop edx
|
||||
ret
|
||||
|
||||
;-------------------------------------------
|
||||
align 4
|
||||
rs780_write_pcieind:
|
||||
; in: ah = bridge#, al = reg#, ebx = PCIEIND data
|
||||
push edx
|
||||
xor edx, edx
|
||||
mov ah, dl ; bridge# : 0 = Core+GFX; 0x10 = Core+SB
|
||||
and dl, 15 ; 0x20 = Core+GPP; 2..12 = a PortBridge
|
||||
shl edx, 15 ; device#
|
||||
add edx, PCIEIND_INDEX ; full bdf-address
|
||||
and eax, 0x30FF
|
||||
or al, al
|
||||
jnz @f
|
||||
shl eax, 4 ; set bits 17..16 for a Core bridge
|
||||
@@:
|
||||
mov [edx], eax
|
||||
add dl, 4
|
||||
mov [edx], ebx
|
||||
sub dl, 4
|
||||
xor eax, eax
|
||||
mov [edx], eax ; safety last
|
||||
pop edx
|
||||
ret
|
||||
|
||||
;------------------------------------------------
|
||||
align 4
|
||||
rs780_read_htiu:
|
||||
; in: al = reg# | out: eax = HTIU data
|
||||
;------------------------------------------------
|
||||
push edx
|
||||
mov edx, HTIU_NB_INDEX
|
||||
and eax, 0x07F
|
||||
mov [edx], eax
|
||||
add dl, 4
|
||||
mov eax, [edx]
|
||||
pop edx
|
||||
ret
|
||||
;------------------------------------------------
|
||||
align 4
|
||||
rs780_write_htiu:
|
||||
; in: al = reg#; ebx = data
|
||||
;------------------------------------------------
|
||||
push edx
|
||||
mov edx, HTIU_NB_INDEX
|
||||
and eax, 0x07F
|
||||
or eax, 0x100
|
||||
mov [edx], eax
|
||||
add dl, 4
|
||||
mov [edx], ebx
|
||||
sub dl, 4
|
||||
xor eax, eax
|
||||
mov [edx], eax
|
||||
pop edx
|
||||
ret
|
||||
|
||||
|
||||
|
||||
;***************************************************************************
|
||||
; Function
|
||||
; rs7xx_pcie_init:
|
||||
@ -66,6 +205,7 @@ rs7xx_nbconfig_write_pci:
|
||||
align 4
|
||||
|
||||
rs7xx_pcie_init:
|
||||
call rs7xx_unlock_bar3
|
||||
mov al, 0x7C ; NB_IOC_CFG_CNTL
|
||||
call rs7xx_nbconfig_read_pci
|
||||
mov ebx, eax
|
||||
@ -120,7 +260,6 @@ rs7xx_pcie_init:
|
||||
xor dx, dx ; PDEs counter
|
||||
@@:
|
||||
mov dword[ebx], eax ; map 4 buses
|
||||
invlpg [ecx] ; next PgDir entry
|
||||
add bx, 4 ; new PDE
|
||||
add eax, 0x400000 ; +4M phys.
|
||||
add ecx, 0x400000 ; +4M lin.
|
||||
@ -128,6 +267,8 @@ rs7xx_pcie_init:
|
||||
jnc .pcie_cfg_mapped
|
||||
inc dl
|
||||
jmp @b
|
||||
mov eax, cr3
|
||||
mov cr3, eax ; flush TLB
|
||||
.pcie_cfg_mapped:
|
||||
mov esi, boot_pcie_ok
|
||||
call boot_log
|
||||
@ -135,13 +276,11 @@ rs7xx_pcie_init:
|
||||
.rs7xx_pcie_fail:
|
||||
mov esi, boot_rs7xx_fail
|
||||
call boot_log
|
||||
ret
|
||||
jmp $
|
||||
.rs7xx_pcie_blocked:
|
||||
mov esi, boot_rs7xx_blkd
|
||||
call boot_log
|
||||
call pci_ext_config
|
||||
jmp .addr_found
|
||||
ret
|
||||
jmp $
|
||||
|
||||
|
||||
|
||||
|
131
kernel/branches/Kolibri-A/trunk/bus/SB/SB710.ASM
Normal file
131
kernel/branches/Kolibri-A/trunk/bus/SB/SB710.ASM
Normal file
@ -0,0 +1,131 @@
|
||||
$Revision: 1598 $
|
||||
|
||||
SMBUS_PCIE_ADDR equ 0xF00A0000 ; bdf0:20.0 = SB7xx SMBus PCI Config Registers
|
||||
LPC_PCIE_ADDR equ 0xF00A3000 ; bdf0:20.3 = SB7xx LPC ISA bridge Config Registers
|
||||
|
||||
SB_SIO_INDEX equ 0x2e
|
||||
|
||||
;---------------------------------------------------------------------
|
||||
align 4
|
||||
smbus_read_pciconfig:
|
||||
; in: dl = reg# | out: eax = data
|
||||
mov ebx, SMBUS_PCIE_ADDR
|
||||
and edx, 0x0FC
|
||||
mov eax, dword [ebx+edx]
|
||||
ret
|
||||
;------------------------------------------------
|
||||
align 4
|
||||
smbus_write_pciconfig:
|
||||
; in: dl = reg#; eax = data
|
||||
mov ebx, SMBUS_PCIE_ADDR
|
||||
and edx, 0x0FC
|
||||
mov dword [ebx+edx], eax
|
||||
ret
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
align 4
|
||||
lpc_read_pciconfig:
|
||||
; in: dl = reg# | out: eax = data
|
||||
mov ebx, LPC_PCIE_ADDR
|
||||
and edx, 0x0FC
|
||||
mov eax, dword [ebx+edx]
|
||||
ret
|
||||
;------------------------------------------------
|
||||
align 4
|
||||
lpc_write_pciconfig:
|
||||
; in: dl = reg#; eax = data
|
||||
mov ebx, LPC_PCIE_ADDR
|
||||
and edx, 0x0FC
|
||||
mov dword [ebx+edx], eax
|
||||
ret
|
||||
|
||||
;--------------------------------------------------------------------
|
||||
align 4
|
||||
read_sio_cfg:
|
||||
; in: al = reg# | out: al = data
|
||||
mov dx, SB_SIO_INDEX
|
||||
out dx, al
|
||||
inc dl
|
||||
in al, dx
|
||||
ret
|
||||
|
||||
;------------------------------------------------
|
||||
align 4
|
||||
write_sio_cfg:
|
||||
; in: al = reg#; ah = data
|
||||
;------------------------------------------------
|
||||
mov dx, SB_SIO_INDEX
|
||||
out dx, al
|
||||
inc dl
|
||||
xchg al, ah
|
||||
out dx, al
|
||||
xchg al, ah
|
||||
ret
|
||||
;------------------------------------------------
|
||||
align 4
|
||||
enter_sio_cfg_mode:
|
||||
; the magic sequence to unlock the port
|
||||
;------------------------------------------------
|
||||
mov dx, SB_SIO_INDEX
|
||||
mov eax, 0x55550187 ; low byte first
|
||||
out dx, al
|
||||
shr eax, 8
|
||||
out dx, al
|
||||
shr eax, 8
|
||||
out dx, al
|
||||
shr eax, 8
|
||||
out dx, al
|
||||
ret
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; ATTENTION: the functions assume that RESET# signals use pins 84 and 34
|
||||
; of IT8712F SuperIO chip. These signals may be (and will be!) different
|
||||
; for every particular motherboard and SIO. Please refer to your m/board
|
||||
; documentation to define the correct pins and GPIO lines!
|
||||
;
|
||||
; Note this example DOES NOT PRETEND to be 100% correct implementation
|
||||
; of PCIe hotplug techniques !!
|
||||
;-----------------------------------------------------------------------
|
||||
align 4
|
||||
init_pcie_slot_control:
|
||||
;------------------------------------------------
|
||||
call enter_sio_cfg_mode
|
||||
mov ax, 0x0707 ; LDN = 07
|
||||
call write_sio_cfg
|
||||
mov al, 0x25
|
||||
call read_sio_cfg ; ah = reg25h (Multy-function pin selector)
|
||||
or ah, 3 ; set bits 0, 1 (GPIO)
|
||||
call write_sio_cfg
|
||||
mov al, 0x2A
|
||||
call read_sio_cfg ; ah = reg2Ah (Extended fn pin selector)
|
||||
or ah, 3 ; set bits 0, 1 (GPIO)
|
||||
call write_sio_cfg
|
||||
mov al, 0xB8
|
||||
call read_sio_cfg ; ah = regB8h (internal pull-up enable)
|
||||
or ah, 3 ; set bits 0, 1
|
||||
call write_sio_cfg
|
||||
mov al, 0xC0
|
||||
call read_sio_cfg ; ah = regC0h (simple IO enable)
|
||||
or ah, 3 ; set bits 0, 1
|
||||
call write_sio_cfg
|
||||
mov ax, 0x0202 ; Lock SIO config ports
|
||||
call write_sio_cfg
|
||||
ret
|
||||
|
||||
align 4
|
||||
reset_pcie_slot:
|
||||
;------------------------------------------------
|
||||
call enter_sio_cfg_mode
|
||||
mov ax, 0x0707 ; LDN = 07
|
||||
call write_sio_cfg
|
||||
mov al, 0xB0
|
||||
call read_sio_cfg ; ah = regB0h (Pin polarity)
|
||||
and ah, 0xFC ; invert bits 0, 1
|
||||
call write_sio_cfg
|
||||
or ah, 3 ; restore bits 0, 1
|
||||
call write_sio_cfg
|
||||
mov ax, 0x0202 ; Lock SIO config ports
|
||||
call write_sio_cfg
|
||||
ret
|
||||
|
||||
|
@ -94,3 +94,14 @@ pci_ext_config:
|
||||
call boot_log
|
||||
ret ; <<<<<<<<< FAILURE >>>>>>>>>
|
||||
|
||||
|
||||
;--------------------------------------------------------------------------
|
||||
; this routine is platform-specific and used to change some BIOS settengs
|
||||
; pcie_init_gfx
|
||||
; sets the GPP mode of GFX bus
|
||||
|
||||
|
||||
; this option disables external graphics
|
||||
pcie_init_gfx:
|
||||
|
||||
ret
|
||||
|
@ -1,6 +1,6 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2010. All rights reserved. ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;; ;;
|
||||
@ -8,11 +8,13 @@
|
||||
;; ;;
|
||||
;; 32 bit PCI driver code ;;
|
||||
;; ;;
|
||||
;; Version 0.4 February 2nd, 2010 ;;
|
||||
;; Version 0.3 April 9, 2007 ;;
|
||||
;; Version 0.2 December 21st, 2002 ;;
|
||||
;; ;;
|
||||
;; Author: Victor Prodan, victorprodan@yahoo.com ;;
|
||||
;; Mihailov Ilia, ghost.nsk@gmail.com ;;
|
||||
;; Artem Jerdev, kolibri@jerdev.co.uk ;;
|
||||
;; Credits: ;;
|
||||
;; Ralf Brown ;;
|
||||
;; Mike Hibbett, mikeh@oceanfree.net ;;
|
||||
@ -30,116 +32,64 @@ $Revision$
|
||||
; Description
|
||||
; entry point for system PCI calls
|
||||
;***************************************************************************
|
||||
mmio_pci_addr equ 0x400 ; set actual PCI address here to activate user-MMIO
|
||||
|
||||
iglobal
|
||||
align 4
|
||||
f62call:
|
||||
dd pci_api.0
|
||||
dd pci_api.1
|
||||
dd pci_api.2
|
||||
dd pci_api.not_support ;3
|
||||
dd pci_read_reg ;4 byte
|
||||
dd pci_read_reg ;5 word
|
||||
dd pci_read_reg ;6 dword
|
||||
dd pci_api.not_support ;7
|
||||
dd pci_write_reg ;8 byte
|
||||
dd pci_write_reg ;9 word
|
||||
dd pci_write_reg ;10 dword
|
||||
if defined mmio_pci_addr
|
||||
dd pci_mmio_init ;11
|
||||
dd pci_mmio_map ;12
|
||||
dd pci_mmio_unmap ;13
|
||||
end if
|
||||
f62_rcall:
|
||||
dd pci_read_reg.0 ;4 byte
|
||||
dd pci_read_reg.1 ;5 word
|
||||
dd pci_read_reg.2 ;6 dword
|
||||
f62_rcall2:
|
||||
dd pci_read_reg_2.0 ;4 byte
|
||||
dd pci_read_reg_2.1 ;5 word
|
||||
dd pci_read_reg_2.2 ;6 dword
|
||||
f62_wcall:
|
||||
dd pci_write_reg.0 ;4 byte
|
||||
dd pci_write_reg.1 ;5 word
|
||||
dd pci_write_reg.2 ;6 dword
|
||||
f62_wcall2:
|
||||
dd pci_write_reg_2.0 ;4 byte
|
||||
dd pci_write_reg_2.1 ;5 word
|
||||
dd pci_write_reg_2.2 ;6 dword
|
||||
endg
|
||||
mmio_pci_addr dw 0x400 ; default PCI device bdf-address
|
||||
|
||||
|
||||
align 4
|
||||
|
||||
pci_api:
|
||||
movzx eax,bl
|
||||
|
||||
cmp [pci_access_enabled],1
|
||||
jne .no_pci_access_for_applications
|
||||
jne no_pci_access_for_applications
|
||||
|
||||
if defined mmio_pci_addr
|
||||
cmp eax, 13
|
||||
jb .not_support
|
||||
else
|
||||
cmp eax, 10
|
||||
jb .not_support
|
||||
end if
|
||||
call dword [f62call+eax*4]
|
||||
mov dword [esp+32],eax
|
||||
ret
|
||||
|
||||
|
||||
|
||||
; or al,al
|
||||
; jnz pci_fn_1
|
||||
or al,al
|
||||
jnz pci_fn_1
|
||||
; PCI function 0: get pci version (AH.AL)
|
||||
.0:
|
||||
movzx eax, word [BOOT_VAR+0x9022]
|
||||
movzx eax,word [BOOT_VAR+0x9022]
|
||||
ret
|
||||
|
||||
;pci_fn_1:
|
||||
; cmp al,1
|
||||
; jnz pci_fn_2
|
||||
pci_fn_1:
|
||||
cmp al,1
|
||||
jnz pci_fn_2
|
||||
|
||||
; PCI function 1: get last bus in AL
|
||||
.1:
|
||||
movzx eax, byte [BOOT_VAR+0x9021]
|
||||
mov al,[BOOT_VAR+0x9021]
|
||||
ret
|
||||
|
||||
;pci_fn_2:
|
||||
; cmp al,2
|
||||
; jne pci_fn_3
|
||||
pci_fn_2:
|
||||
cmp al,2
|
||||
jne pci_fn_3
|
||||
; PCI function 2: get pci access mechanism
|
||||
.2:
|
||||
movzx eax, byte [BOOT_VAR+0x9020]
|
||||
mov al,[BOOT_VAR+0x9020]
|
||||
ret
|
||||
;pci_fn_3:
|
||||
pci_fn_3:
|
||||
|
||||
; cmp al,4
|
||||
; jz pci_read_reg ;byte
|
||||
; cmp al,5
|
||||
; jz pci_read_reg ;word
|
||||
; cmp al,6
|
||||
; jz pci_read_reg ;dword
|
||||
cmp al,4
|
||||
jz pci_read_reg ;byte
|
||||
cmp al,5
|
||||
jz pci_read_reg ;word
|
||||
cmp al,6
|
||||
jz pci_read_reg ;dword
|
||||
|
||||
; cmp al,8
|
||||
; jz pci_write_reg ;byte
|
||||
; cmp al,9
|
||||
; jz pci_write_reg ;word
|
||||
; cmp al,10
|
||||
; jz pci_write_reg ;dword
|
||||
cmp al,8
|
||||
jz pci_write_reg ;byte
|
||||
cmp al,9
|
||||
jz pci_write_reg ;word
|
||||
cmp al,10
|
||||
jz pci_write_reg ;dword
|
||||
|
||||
;if defined mmio_pci_addr
|
||||
; cmp al,11 ; user-level MMIO functions
|
||||
; jz pci_mmio_init
|
||||
; cmp al,12
|
||||
; jz pci_mmio_map
|
||||
; cmp al,13
|
||||
; jz pci_mmio_unmap
|
||||
;end if
|
||||
cmp al,11 ; user-level MMIO functions
|
||||
jz pci_mmio_init
|
||||
cmp al,12
|
||||
jz pci_mmio_map
|
||||
cmp al,13
|
||||
jz pci_mmio_unmap
|
||||
|
||||
|
||||
no_pci_access_for_applications:
|
||||
|
||||
or eax,-1
|
||||
|
||||
.not_support:
|
||||
.no_pci_access_for_applications:
|
||||
or eax,-1
|
||||
ret
|
||||
|
||||
;***************************************************************************
|
||||
@ -148,20 +98,20 @@ end if
|
||||
;
|
||||
; Description
|
||||
; creates a command dword for use with the PCI bus
|
||||
; bus # in bh;ah
|
||||
; device+func in ch;bh (dddddfff)
|
||||
; register in cl;bl
|
||||
; bus # in ah
|
||||
; device+func in bh (dddddfff)
|
||||
; register in bl
|
||||
;
|
||||
; command dword returned in ebx;eax ( 10000000 bbbbbbbb dddddfff rrrrrr00 )
|
||||
; command dword returned in eax ( 10000000 bbbbbbbb dddddfff rrrrrr00 )
|
||||
;***************************************************************************
|
||||
|
||||
align 4
|
||||
|
||||
pci_make_config_cmd:
|
||||
shl ebx,8;eax,8 ; move bus to bits 16-23
|
||||
mov bx,cx;ax,bx ; combine all
|
||||
and ebx,0xffffff;eax,0xffffff
|
||||
or ebx,0x80000000;eax,0x80000000
|
||||
shl eax,8 ; move bus to bits 16-23
|
||||
mov ax,bx ; combine all
|
||||
and eax,0xffffff
|
||||
or eax,0x80000000
|
||||
ret
|
||||
|
||||
;***************************************************************************
|
||||
@ -178,16 +128,12 @@ pci_make_config_cmd:
|
||||
align 4
|
||||
|
||||
pci_read_reg:
|
||||
cmp byte [BOOT_VAR+0x9020],2 ;what mechanism will we use?
|
||||
je pci_read_reg_2
|
||||
|
||||
; mechanism 1
|
||||
; push esi ; save register size into ESI
|
||||
mov esi,ebx;eax
|
||||
push esi ; save register size into ESI
|
||||
mov esi,eax
|
||||
and esi,3
|
||||
|
||||
call pci_make_config_cmd
|
||||
mov eax,ebx;ebx,eax
|
||||
mov ebx,eax
|
||||
; get current state
|
||||
mov dx,0xcf8
|
||||
in eax, dx
|
||||
@ -201,100 +147,37 @@ pci_read_reg:
|
||||
and bl,3
|
||||
or dl,bl ; add to port address first 2 bits of register address
|
||||
|
||||
; or esi,esi
|
||||
; jz pci_read_byte1
|
||||
; cmp esi,1
|
||||
; jz pci_read_word1
|
||||
; cmp esi,2
|
||||
; jz pci_read_dword1
|
||||
; jmp pci_fin_read1
|
||||
jmp dword [f62_rcall+esi*4]
|
||||
or esi,esi
|
||||
jz pci_read_byte1
|
||||
cmp esi,1
|
||||
jz pci_read_word1
|
||||
cmp esi,2
|
||||
jz pci_read_dword1
|
||||
jmp pci_fin_read1
|
||||
|
||||
.0:
|
||||
pci_read_byte1:
|
||||
in al,dx
|
||||
jmp .pci_fin_read1
|
||||
.1:
|
||||
jmp pci_fin_read1
|
||||
pci_read_word1:
|
||||
in ax,dx
|
||||
jmp .pci_fin_read1
|
||||
.2:
|
||||
jmp pci_fin_read1
|
||||
pci_read_dword1:
|
||||
in eax,dx
|
||||
; jmp pci_fin_read1
|
||||
.pci_fin_read1:
|
||||
jmp pci_fin_read1
|
||||
pci_fin_read1:
|
||||
; restore configuration control
|
||||
xchg eax,[esp]
|
||||
mov dx,0xcf8
|
||||
out dx,eax
|
||||
|
||||
pop eax
|
||||
;pop esi
|
||||
ret
|
||||
pci_read_reg_2:
|
||||
|
||||
test ch,128;bh,128 ;mech#2 only supports 16 devices per bus
|
||||
jnz pci_api.not_support
|
||||
|
||||
; push esi ; save register size into ESI
|
||||
mov esi,ebx;eax
|
||||
and esi,3
|
||||
|
||||
push ebx;eax
|
||||
mov eax,ebx
|
||||
;store current state of config space
|
||||
mov dx,0xcf8
|
||||
in al,dx
|
||||
mov ah,al
|
||||
mov dl,0xfa
|
||||
in al,dx
|
||||
|
||||
xchg eax,[esp]
|
||||
; out 0xcfa,bus
|
||||
mov al,ah
|
||||
out dx,al
|
||||
; out 0xcf8,0x80
|
||||
mov dl,0xf8
|
||||
mov al,0x80
|
||||
out dx,al
|
||||
; compute addr
|
||||
shr ch,3;bh,3 ; func is ignored in mechanism 2
|
||||
or ch,0xc0;bh,0xc0
|
||||
mov dx,cx;bx
|
||||
|
||||
; or esi,esi
|
||||
; jz pci_read_byte2
|
||||
; cmp esi,1
|
||||
; jz pci_read_word2
|
||||
; cmp esi,2
|
||||
; jz pci_read_dword2
|
||||
; jmp pci_fin_read2
|
||||
jmp dword [f62_rcall2+esi*4]
|
||||
|
||||
.0:
|
||||
in al,dx
|
||||
jmp .pci_fin_read2
|
||||
.1:
|
||||
in ax,dx
|
||||
jmp .pci_fin_read2
|
||||
.2:
|
||||
in eax,dx
|
||||
; jmp pci_fin_read2
|
||||
|
||||
.pci_fin_read2:
|
||||
|
||||
; restore configuration space
|
||||
xchg eax,[esp]
|
||||
mov dx,0xcfa
|
||||
out dx,al
|
||||
mov dl,0xf8
|
||||
mov al,ah
|
||||
out dx,al
|
||||
|
||||
pop eax
|
||||
; pop esi
|
||||
pop esi
|
||||
ret
|
||||
|
||||
;pci_read_reg_err:
|
||||
; or dword [esp+32],-1
|
||||
; ret
|
||||
pci_read_reg_err:
|
||||
xor eax,eax
|
||||
dec eax
|
||||
ret
|
||||
|
||||
|
||||
;***************************************************************************
|
||||
@ -312,17 +195,12 @@ pci_read_reg_2:
|
||||
align 4
|
||||
|
||||
pci_write_reg:
|
||||
cmp byte [BOOT_VAR+0x9020],2 ;what mechanism will we use?
|
||||
je pci_write_reg_2
|
||||
|
||||
; mechanism 1
|
||||
; push esi ; save register size into ESI
|
||||
mov esi,ebx;eax
|
||||
and esi,3 ;not need
|
||||
push esi ; save register size into ESI
|
||||
mov esi,eax
|
||||
and esi,3
|
||||
|
||||
call pci_make_config_cmd
|
||||
mov eax,ebx;ebx,eax
|
||||
mov ecx,edx ;cross registers
|
||||
mov ebx,eax
|
||||
; get current state into ecx
|
||||
mov dx,0xcf8
|
||||
in eax, dx
|
||||
@ -337,121 +215,56 @@ pci_write_reg:
|
||||
or dl,bl
|
||||
mov eax,ecx
|
||||
|
||||
; or esi,esi
|
||||
; jz pci_write_byte1
|
||||
; cmp esi,1
|
||||
; jz pci_write_word1
|
||||
; cmp esi,2
|
||||
; jz pci_write_dword1
|
||||
; jmp pci_fin_write1
|
||||
jmp dword [f62_wcall+esi*4]
|
||||
.0:
|
||||
out dx,al
|
||||
jmp .pci_fin_write1
|
||||
.1:
|
||||
out dx,ax
|
||||
jmp .pci_fin_write1
|
||||
.2:
|
||||
out dx,eax
|
||||
.pci_fin_write1:
|
||||
or esi,esi
|
||||
jz pci_write_byte1
|
||||
cmp esi,1
|
||||
jz pci_write_word1
|
||||
cmp esi,2
|
||||
jz pci_write_dword1
|
||||
jmp pci_fin_write1
|
||||
|
||||
pci_write_byte1:
|
||||
out dx,al
|
||||
jmp pci_fin_write1
|
||||
pci_write_word1:
|
||||
out dx,ax
|
||||
jmp pci_fin_write1
|
||||
pci_write_dword1:
|
||||
out dx,eax
|
||||
jmp pci_fin_write1
|
||||
pci_fin_write1:
|
||||
; restore configuration control
|
||||
pop eax
|
||||
mov dl,0xf8
|
||||
out dx,eax
|
||||
|
||||
xor eax,eax
|
||||
;pop esi
|
||||
pop esi
|
||||
ret
|
||||
pci_write_reg_2:
|
||||
|
||||
test ch,128;bh,128 ;mech#2 only supports 16 devices per bus
|
||||
jnz pci_api.not_support
|
||||
|
||||
|
||||
; push esi ; save register size into ESI
|
||||
mov esi,eax
|
||||
and esi,3 ;not need
|
||||
|
||||
push eax
|
||||
mov ecx,edx ;cross registers
|
||||
;store current state of config space
|
||||
mov dx,0xcf8
|
||||
in al,dx
|
||||
mov ah,al
|
||||
mov dl,0xfa
|
||||
in al,dx
|
||||
xchg eax,[esp]
|
||||
; out 0xcfa,bus
|
||||
mov al,ah
|
||||
out dx,al
|
||||
; out 0xcf8,0x80
|
||||
mov dl,0xf8
|
||||
mov al,0x80
|
||||
out dx,al
|
||||
; compute addr
|
||||
shr bh,3 ; func is ignored in mechanism 2
|
||||
or bh,0xc0
|
||||
mov dx,bx
|
||||
; write register
|
||||
mov eax,ecx
|
||||
|
||||
; or esi,esi
|
||||
; jz pci_write_byte2
|
||||
; cmp esi,1
|
||||
; jz pci_write_word2
|
||||
; cmp esi,2
|
||||
; jz pci_write_dword2
|
||||
; jmp pci_fin_write2
|
||||
jmp dword [f62_wcall2+esi*4]
|
||||
.0:
|
||||
out dx,al
|
||||
jmp .pci_fin_write2
|
||||
.1:
|
||||
out dx,ax
|
||||
jmp .pci_fin_write2
|
||||
.2:
|
||||
out dx,eax
|
||||
.pci_fin_write2:
|
||||
; restore configuration space
|
||||
pop eax
|
||||
mov dx,0xcfa
|
||||
out dx,al
|
||||
mov dl,0xf8
|
||||
mov al,ah
|
||||
out dx,al
|
||||
|
||||
pci_write_reg_err:
|
||||
xor eax,eax
|
||||
;pop esi
|
||||
dec eax
|
||||
ret
|
||||
|
||||
;pci_write_reg_err:
|
||||
; xor eax,eax
|
||||
; dec eax
|
||||
; ret
|
||||
|
||||
if defined mmio_pci_addr ; must be set above
|
||||
;***************************************************************************
|
||||
; Function
|
||||
; pci_mmio_init
|
||||
;
|
||||
; Description
|
||||
; IN: cx = device's PCI bus address (bbbbbbbbdddddfff)
|
||||
; Returns eax = user heap space available (bytes)
|
||||
; IN: bx = device's PCI bus address (bbbbbbbbdddddfff)
|
||||
; Returns eax = phys. address of user-accessible DMA block
|
||||
; Error codes
|
||||
; eax = -1 : PCI user access blocked,
|
||||
; eax = -2 : device not registered for uMMIO service
|
||||
; eax = -3 : user heap initialization failure
|
||||
;***************************************************************************
|
||||
pci_mmio_init:
|
||||
cmp cx, mmio_pci_addr
|
||||
jz @f
|
||||
mov eax,-2
|
||||
ret
|
||||
@@:
|
||||
mov [mmio_pci_addr],bx
|
||||
|
||||
call init_heap ; (if not initialized yet)
|
||||
or eax,eax
|
||||
jz @f
|
||||
mov eax, [UserDMAaddr]
|
||||
ret
|
||||
@@:
|
||||
mov eax,-3
|
||||
@ -465,10 +278,9 @@ pci_mmio_init:
|
||||
; Description
|
||||
; maps a block of PCI memory to user-accessible linear address
|
||||
;
|
||||
; WARNING! This VERY EXPERIMENTAL service is for one chosen PCI device only!
|
||||
; The target device address should be set in kernel var mmio_pci_addr
|
||||
;
|
||||
; IN: ah = BAR#;
|
||||
; IN: ah = BAR#; or
|
||||
; IN: ah = 0xDA for DMA-mapping requests;
|
||||
; IN: ebx = block size (bytes);
|
||||
; IN: ecx = offset in MMIO block (in 4K-pages, to avoid misaligned pages);
|
||||
;
|
||||
@ -484,17 +296,21 @@ pci_mmio_init:
|
||||
;***************************************************************************
|
||||
|
||||
pci_mmio_map:
|
||||
;cross
|
||||
mov eax,ebx
|
||||
mov ebx,ecx
|
||||
mov ecx,edx
|
||||
;;;;;;;;;;;;;;;;;;;
|
||||
and edx,0x0ffff
|
||||
cmp ah, 0xDA
|
||||
jz .dma_map
|
||||
cmp ah,6
|
||||
jc .bar_0_5
|
||||
jz .bar_rom
|
||||
jb .bar_0_5
|
||||
jz .bar_rom
|
||||
mov eax,-2
|
||||
ret
|
||||
|
||||
.dma_map:
|
||||
push ecx
|
||||
mov ecx,ebx
|
||||
mov eax,[UserDMAaddr]
|
||||
jmp .allocate_block
|
||||
|
||||
.bar_rom:
|
||||
mov ah, 8 ; bar6 = Expansion ROM base address
|
||||
.bar_0_5:
|
||||
@ -506,7 +322,7 @@ pci_mmio_map:
|
||||
shl bl, 1
|
||||
shl bl, 1
|
||||
add bl, 0x10 ; now bl = BAR offset in PCI config. space
|
||||
mov ax, mmio_pci_addr
|
||||
mov ax, [mmio_pci_addr]
|
||||
mov bh, al ; bh = dddddfff
|
||||
mov al, 2 ; al : DW to read
|
||||
call pci_read_reg
|
||||
@ -523,7 +339,9 @@ pci_mmio_map:
|
||||
pop ecx ; ecx = block size, bytes (expanded to whole page)
|
||||
mov ebx, ecx ; user_alloc destroys eax, ecx, edx, but saves ebx
|
||||
and eax, 0xFFFFFFF0
|
||||
push eax ; store MMIO physical address + keep 2DWords in the stack
|
||||
|
||||
.allocate_block:
|
||||
push eax ; store MMIO physical address + keep the stack 2x4b deep
|
||||
stdcall user_alloc, ecx
|
||||
or eax, eax
|
||||
jnz mmio_map_over
|
||||
@ -542,9 +360,7 @@ mmio_map_over:
|
||||
pop edx ; edx = MMIO shift (pages)
|
||||
shl edx, 12 ; edx = MMIO shift (bytes)
|
||||
add eax, edx ; eax = uMMIO physical address
|
||||
or eax, PG_SHARED
|
||||
or eax, PG_UW
|
||||
or eax, PG_NOCACHE
|
||||
or eax, (PG_SHARED+PG_UW+PG_NOCACHE)
|
||||
mov edi, ebx
|
||||
call commit_pages
|
||||
mov eax, edi
|
||||
@ -566,11 +382,9 @@ mmio_map_over:
|
||||
;***************************************************************************
|
||||
|
||||
pci_mmio_unmap:
|
||||
stdcall user_free, ecx;ebx
|
||||
stdcall user_free, ebx
|
||||
ret
|
||||
|
||||
end if
|
||||
|
||||
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||
uglobal
|
||||
align 4
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -99,7 +99,7 @@ iglobal
|
||||
dd 0
|
||||
dd 0
|
||||
dd 0
|
||||
dd 0;sys_pci ; 62-PCI functions
|
||||
dd sys_pci ; 62-PCI functions
|
||||
dd sys_msg_board ; 63-System message board
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
@ -170,7 +170,7 @@ iglobal
|
||||
dd undefined_syscall ; 59-reserved
|
||||
dd sys_IPC ; 60-Inter Process Communication
|
||||
dd sys_gs ; 61-Direct graphics access
|
||||
dd pci_api;cross_order ; 62-PCI functions
|
||||
dd cross_order ; 62-PCI functions
|
||||
dd cross_order ; 63-System message board
|
||||
dd sys_resize_app_memory ; 64-Resize application memory usage
|
||||
dd sys_putimage_palette ; 65-PutImagePalette
|
||||
|
@ -47,33 +47,33 @@ keymap_alt:
|
||||
db 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
||||
|
||||
|
||||
boot_memdetect db 'Determining amount of memory',0
|
||||
boot_fonts db 'Fonts loaded',0
|
||||
boot_tss db 'Setting TSSs',0
|
||||
boot_cpuid db 'Reading CPUIDs',0
|
||||
boot_devices db 'Detecting devices',0
|
||||
boot_timer db 'Setting timer',0
|
||||
boot_irqs db 'Reprogramming IRQs',0
|
||||
boot_setmouse db 'Setting mouse',0
|
||||
boot_windefs db 'Setting window defaults',0
|
||||
boot_bgr db 'Calculating background',0
|
||||
boot_resirqports db 'Reserving IRQs & ports',0
|
||||
boot_memdetect db 'Determining amount of memory',0
|
||||
boot_fonts db 'Fonts loaded',0
|
||||
boot_tss db 'Setting TSSs',0
|
||||
boot_cpuid db 'Reading CPUIDs',0
|
||||
boot_devices db 'Detecting devices',0
|
||||
boot_timer db 'Setting timer',0
|
||||
boot_irqs db 'Reprogramming IRQs',0
|
||||
boot_setmouse db 'Setting mouse',0
|
||||
boot_windefs db 'Setting window defaults',0
|
||||
boot_bgr db 'Calculating background',0
|
||||
boot_resirqports db 'Reserving IRQs & ports',0
|
||||
; boot_setrports db 'Setting addresses for IRQs',0
|
||||
boot_setostask db 'Setting OS task',0
|
||||
boot_allirqs db 'Unmasking all IRQs',0
|
||||
boot_tsc db 'Reading TSC',0
|
||||
boot_cpufreq db 'CPU frequency is ',' ',' MHz',0
|
||||
boot_setostask db 'Setting OS task',0
|
||||
boot_allirqs db 'Unmasking all IRQs',0
|
||||
boot_tsc db 'Reading TSC',0
|
||||
boot_cpufreq db 'CPU frequency is ',' ',' MHz',0
|
||||
; boot_pal_ega db 'Setting EGA/CGA 320x200 palette',0
|
||||
; boot_pal_vga db 'Setting VGA 640x480 palette',0
|
||||
boot_failed db 'Failed to start first app',0
|
||||
boot_mtrr db 'Setting MTRR',0
|
||||
boot_uDMA_ok db 'Set user DMA OK',0
|
||||
boot_pcie_ok db 'PCIe config set OK',0
|
||||
boot_pcie_fail db 'PCIe config XXX failed XXX',0
|
||||
boot_failed db 'Failed to start first app',0
|
||||
boot_mtrr db 'Setting MTRR',0
|
||||
boot_uDMA_ok db 'Set user DMA OK',0
|
||||
boot_pcie_ok db 'PCIe config set OK',0
|
||||
boot_pcie_fail db 'PCIe config XXX failed XXX',0
|
||||
boot_rs7xx_fail db 'RS7xx config XXX failed XXX',0
|
||||
boot_rs7xx_blkd db 'RS7xx config ---------- FAILED -----------',0
|
||||
if preboot_blogesc
|
||||
boot_tasking db 'All set - press ESC to start',0
|
||||
boot_tasking db 'All set - press ESC to start',0
|
||||
end if
|
||||
|
||||
;new_process_loading db 'K : New Process - loading',13,10,0
|
||||
@ -84,19 +84,19 @@ msg_unresolved db 'unresolved ',0
|
||||
msg_module db 'in module ',0
|
||||
msg_version db 'incompatible driver version',13,10,0
|
||||
msg_www db 'please visit www.kolibrios.org',13,10,0
|
||||
msg_CR db 13,10,0
|
||||
aSis db 'SIS',0
|
||||
msg_CR db 13,10,0
|
||||
aSis db 'SIS',0
|
||||
|
||||
intel_str db "GenuineIntel",0
|
||||
AMD_str db "AuthenticAMD",0
|
||||
|
||||
;szSound db 'SOUND',0
|
||||
;szInfinity db 'INFINITY',0
|
||||
szHwMouse db 'ATI2D',0
|
||||
szPS2MDriver db 'PS2MOUSE',0
|
||||
szHwMouse db 'ATI2D',0
|
||||
szPS2MDriver db 'PS2MOUSE',0
|
||||
;szCOM_MDriver db 'COM_MOUSE',0
|
||||
szUSB db 'USB',0
|
||||
szAtiHW db '/rd/1/drivers/ati2d.drv',0
|
||||
szUSB db 'USB',0
|
||||
szAtiHW db '/rd/1/drivers/ati2d.drv',0
|
||||
|
||||
szSTART db 'START',0
|
||||
szEXPORTS db 'EXPORTS',0
|
||||
@ -107,25 +107,25 @@ szIMPORTS db 'IMPORTS',0
|
||||
read_firstapp db '/sys/'
|
||||
firstapp db 'LAUNCHER',0
|
||||
|
||||
char db '/sys/FONTS/CHAR.MT',0
|
||||
char2 db '/sys/FONTS/CHAR2.MT',0
|
||||
char db '/sys/FONTS/CHAR.MT',0
|
||||
char2 db '/sys/FONTS/CHAR2.MT',0
|
||||
|
||||
bootpath db '/KOLIBRI '
|
||||
bootpath2 db 0
|
||||
vmode db '/sys/drivers/VMODE.MDR',0
|
||||
vrr_m db 'VRR_M',0
|
||||
vmode db '/sys/drivers/VMODE.MDR',0
|
||||
vrr_m db 'VRR_M',0
|
||||
kernel_file db 'KERNEL MNT'
|
||||
|
||||
|
||||
align 4
|
||||
|
||||
shmem_list:
|
||||
.bk dd shmem_list
|
||||
.fd dd shmem_list
|
||||
.bk dd shmem_list
|
||||
.fd dd shmem_list
|
||||
|
||||
dll_list:
|
||||
.bk dd dll_list
|
||||
.fd dd dll_list
|
||||
.bk dd dll_list
|
||||
.fd dd dll_list
|
||||
|
||||
MAX_DEFAULT_DLL_ADDR = 0x20000000
|
||||
MIN_DEFAULT_DLL_ADDR = 0x10000000
|
||||
@ -137,13 +137,13 @@ dll_cur_addr dd MIN_DEFAULT_DLL_ADDR
|
||||
; mike.dld {
|
||||
db 0
|
||||
dd servetable-0x10000
|
||||
draw_line dd __sys_draw_line
|
||||
draw_pointer dd __sys_draw_pointer
|
||||
draw_line dd __sys_draw_line
|
||||
draw_pointer dd __sys_draw_pointer
|
||||
;//mike.dld, 2006-08-02 [
|
||||
;drawbar dd __sys_drawbar
|
||||
drawbar dd __sys_drawbar.forced
|
||||
drawbar dd __sys_drawbar.forced
|
||||
;//mike.dld, 2006-08-02 ]
|
||||
putpixel dd __sys_putpixel
|
||||
putpixel dd __sys_putpixel
|
||||
; } mike.dld
|
||||
|
||||
|
||||
@ -151,10 +151,10 @@ align 4
|
||||
keyboard dd 1
|
||||
syslang dd 1
|
||||
|
||||
boot_y dd 10
|
||||
boot_y dd 10
|
||||
|
||||
pci_bios_entry dd 0
|
||||
dw pci_code_sel
|
||||
pci_bios_entry dd 0
|
||||
dw pci_code_sel
|
||||
|
||||
if __DEBUG__ eq 1
|
||||
include_debug_strings
|
||||
@ -165,292 +165,292 @@ IncludeIGlobals
|
||||
align 16
|
||||
gdts:
|
||||
|
||||
dw gdte-$-1
|
||||
dd gdts
|
||||
dw 0
|
||||
dw gdte-$-1
|
||||
dd gdts
|
||||
dw 0
|
||||
|
||||
; Attention! Do not change the order of the first four selectors. They are used in Fast System Call
|
||||
; must be : os_code, os_data, app_code, app_data, ....
|
||||
|
||||
int_code_l:
|
||||
os_code_l:
|
||||
dw 0xffff
|
||||
dw 0x0000
|
||||
db 0x00
|
||||
dw 11011111b *256 +10011010b
|
||||
db 0x00
|
||||
dw 0xffff
|
||||
dw 0x0000
|
||||
db 0x00
|
||||
dw 11011111b *256 +10011010b
|
||||
db 0x00
|
||||
|
||||
int_data_l:
|
||||
os_data_l:
|
||||
dw 0xffff
|
||||
dw 0x0000
|
||||
db 0x00
|
||||
dw 11011111b *256 +10010010b
|
||||
db 0x00
|
||||
dw 0xffff
|
||||
dw 0x0000
|
||||
db 0x00
|
||||
dw 11011111b *256 +10010010b
|
||||
db 0x00
|
||||
|
||||
app_code_l:
|
||||
dw 0xFFFF
|
||||
dw 0
|
||||
db 0
|
||||
db cpl3
|
||||
dw G32+D32+0xF;
|
||||
dw 0xFFFF
|
||||
dw 0
|
||||
db 0
|
||||
db cpl3
|
||||
dw G32+D32+0xF;
|
||||
|
||||
app_data_l:
|
||||
dw 0xFFFF
|
||||
dw 0
|
||||
db 0
|
||||
db drw3
|
||||
dw G32+D32+0xF;
|
||||
dw 0xFFFF
|
||||
dw 0
|
||||
db 0
|
||||
db drw3
|
||||
dw G32+D32+0xF;
|
||||
|
||||
; ------------- PCI BIOS ------------------
|
||||
|
||||
pci_code_32:
|
||||
dw 0 ;lim 0-15
|
||||
dw 0 ;base 0-15
|
||||
db 0 ;base 16-23
|
||||
db cpl0 ;type
|
||||
db D32 ;lim 16-19+props
|
||||
db 0 ;base 24-31
|
||||
dw 0 ;lim 0-15
|
||||
dw 0 ;base 0-15
|
||||
db 0 ;base 16-23
|
||||
db cpl0 ;type
|
||||
db D32 ;lim 16-19+props
|
||||
db 0 ;base 24-31
|
||||
|
||||
pci_data_32:
|
||||
dw 0 ;lim 0-15
|
||||
dw 0 ;base 0-15
|
||||
db 0 ;base 16-23
|
||||
db dpl0 ;type
|
||||
db D32 ;lim 16-19+props
|
||||
db 0 ;base 24-31
|
||||
dw 0 ;lim 0-15
|
||||
dw 0 ;base 0-15
|
||||
db 0 ;base 16-23
|
||||
db dpl0 ;type
|
||||
db D32 ;lim 16-19+props
|
||||
db 0 ;base 24-31
|
||||
|
||||
; --------------- APM ---------------------
|
||||
apm_code_32:
|
||||
dw 0x0f ; limit 64kb
|
||||
db 0, 0, 0
|
||||
dw 11010000b *256 +10011010b
|
||||
db 0x00
|
||||
dw 0x0f ; limit 64kb
|
||||
db 0, 0, 0
|
||||
dw 11010000b *256 +10011010b
|
||||
db 0x00
|
||||
apm_code_16:
|
||||
dw 0x0f
|
||||
db 0, 0, 0
|
||||
dw 10010000b *256 +10011010b
|
||||
db 0x00
|
||||
dw 0x0f
|
||||
db 0, 0, 0
|
||||
dw 10010000b *256 +10011010b
|
||||
db 0x00
|
||||
apm_data_16:
|
||||
dw 0x0f
|
||||
db 0, 0, 0
|
||||
dw 10010000b *256 +10010010b
|
||||
db 0x00
|
||||
dw 0x0f
|
||||
db 0, 0, 0
|
||||
dw 10010000b *256 +10010010b
|
||||
db 0x00
|
||||
; -----------------------------------------
|
||||
|
||||
graph_data_l:
|
||||
|
||||
dw 0x7ff
|
||||
dw 0x0000
|
||||
db 0x00
|
||||
dw 11010000b *256 +11110010b
|
||||
db 0x00
|
||||
dw 0x7ff
|
||||
dw 0x0000
|
||||
db 0x00
|
||||
dw 11010000b *256 +11110010b
|
||||
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
|
||||
dw TSS_SIZE-1
|
||||
dw tss and 0xFFFF
|
||||
db (tss shr 16) and 0xFF
|
||||
db 10001001b
|
||||
dw (tss shr 16) and 0xFF00
|
||||
|
||||
tls_data_l:
|
||||
dw 0x0FFF
|
||||
dw 0
|
||||
db 0
|
||||
db drw3
|
||||
dw D32
|
||||
dw 0x0FFF
|
||||
dw 0
|
||||
db 0
|
||||
db drw3
|
||||
dw D32
|
||||
|
||||
endofcode:
|
||||
gdte:
|
||||
|
||||
align 16
|
||||
cur_saved_data rb 4096
|
||||
fpu_data: rb 512
|
||||
cur_saved_data rb 4096
|
||||
fpu_data: rb 512
|
||||
|
||||
; device irq owners
|
||||
irq_owner rd 16 ; process id
|
||||
irq_owner rd 16 ; process id
|
||||
|
||||
; on irq read ports
|
||||
|
||||
irq00read rd 16
|
||||
irq01read rd 16
|
||||
irq02read rd 16
|
||||
irq03read rd 16
|
||||
irq04read rd 16
|
||||
irq05read rd 16
|
||||
irq06read rd 16
|
||||
irq07read rd 16
|
||||
irq08read rd 16
|
||||
irq09read rd 16
|
||||
irq10read rd 16
|
||||
irq11read rd 16
|
||||
irq12read rd 16
|
||||
irq13read rd 16
|
||||
irq14read rd 16
|
||||
irq15read rd 16
|
||||
irq00read rd 16
|
||||
irq01read rd 16
|
||||
irq02read rd 16
|
||||
irq03read rd 16
|
||||
irq04read rd 16
|
||||
irq05read rd 16
|
||||
irq06read rd 16
|
||||
irq07read rd 16
|
||||
irq08read rd 16
|
||||
irq09read rd 16
|
||||
irq10read rd 16
|
||||
irq11read rd 16
|
||||
irq12read rd 16
|
||||
irq13read rd 16
|
||||
irq14read rd 16
|
||||
irq15read rd 16
|
||||
|
||||
irq_tab rd 16
|
||||
irq_tab rd 16
|
||||
|
||||
mem_block_map rb 512
|
||||
mem_block_list rd 64
|
||||
mem_block_map rb 512
|
||||
mem_block_list rd 64
|
||||
large_block_list rd 31
|
||||
mem_block_mask rd 2
|
||||
mem_block_mask rd 2
|
||||
large_block_mask rd 1
|
||||
|
||||
mem_used.fd rd 1
|
||||
mem_used.bk rd 1
|
||||
mem_used.fd rd 1
|
||||
mem_used.bk rd 1
|
||||
|
||||
mem_block_arr rd 1
|
||||
mem_block_arr rd 1
|
||||
mem_block_start rd 1
|
||||
mem_block_end 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
|
||||
heap_mutex rd 1
|
||||
heap_size rd 1
|
||||
heap_free rd 1
|
||||
heap_blocks rd 1
|
||||
free_blocks rd 1
|
||||
|
||||
mst MEM_STATE
|
||||
|
||||
page_start rd 1
|
||||
page_end rd 1
|
||||
sys_page_map rd 1
|
||||
os_stack_seg rd 1
|
||||
page_start rd 1
|
||||
page_end rd 1
|
||||
sys_page_map rd 1
|
||||
os_stack_seg rd 1
|
||||
|
||||
|
||||
srv.fd rd 1
|
||||
srv.bk rd 1
|
||||
srv.fd rd 1
|
||||
srv.bk rd 1
|
||||
|
||||
|
||||
align 16
|
||||
|
||||
_display display_t
|
||||
_display display_t
|
||||
|
||||
_WinMapAddress rd 1
|
||||
_WinMapSize rd 1
|
||||
_WinMapAddress rd 1
|
||||
_WinMapSize rd 1
|
||||
|
||||
def_cursor rd 1
|
||||
current_cursor rd 1
|
||||
hw_cursor rd 1
|
||||
cur_saved_base rd 1
|
||||
def_cursor rd 1
|
||||
current_cursor rd 1
|
||||
hw_cursor rd 1
|
||||
cur_saved_base rd 1
|
||||
|
||||
cur.lock rd 1 ;1 - lock update, 2- hide
|
||||
cur.left rd 1 ;cursor clip box
|
||||
cur.top rd 1
|
||||
cur.right rd 1
|
||||
cur.bottom rd 1
|
||||
cur.w rd 1
|
||||
cur.h rd 1
|
||||
cur.lock rd 1 ;1 - lock update, 2- hide
|
||||
cur.left rd 1 ;cursor clip box
|
||||
cur.top rd 1
|
||||
cur.right rd 1
|
||||
cur.bottom rd 1
|
||||
cur.w rd 1
|
||||
cur.h rd 1
|
||||
|
||||
ipc_tmp rd 1
|
||||
ipc_pdir rd 1
|
||||
ipc_ptab rd 1
|
||||
ipc_tmp rd 1
|
||||
ipc_pdir rd 1
|
||||
ipc_ptab rd 1
|
||||
|
||||
proc_mem_map rd 1
|
||||
proc_mem_pdir rd 1
|
||||
proc_mem_tab rd 1
|
||||
proc_mem_map rd 1
|
||||
proc_mem_pdir rd 1
|
||||
proc_mem_tab rd 1
|
||||
|
||||
tmp_task_pdir rd 1
|
||||
tmp_task_ptab rd 1
|
||||
tmp_task_pdir rd 1
|
||||
tmp_task_ptab rd 1
|
||||
|
||||
default_io_map rd 1
|
||||
default_io_map rd 1
|
||||
|
||||
LFBSize rd 1
|
||||
LFBSize rd 1
|
||||
|
||||
stall_mcs rd 1
|
||||
current_slot rd 1
|
||||
stall_mcs rd 1
|
||||
current_slot rd 1
|
||||
|
||||
; 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
|
||||
|
||||
; device addresses
|
||||
mididp rd 1
|
||||
midisp rd 1
|
||||
mididp rd 1
|
||||
midisp rd 1
|
||||
|
||||
cdbase rd 1
|
||||
cdid rd 1
|
||||
cdbase rd 1
|
||||
cdid rd 1
|
||||
|
||||
hdbase rd 1 ; for boot 0x1f0
|
||||
hdid rd 1
|
||||
hdpos rd 1 ; for boot 0x1
|
||||
label known_part dword
|
||||
fat32part rd 1 ; for boot 0x1
|
||||
cdpos rd 1
|
||||
hdbase rd 1 ; for boot 0x1f0
|
||||
hdid rd 1
|
||||
hdpos rd 1 ; for boot 0x1
|
||||
label known_part dword
|
||||
fat32part rd 1 ; for boot 0x1
|
||||
cdpos rd 1
|
||||
|
||||
;CPUID information
|
||||
cpu_vendor rd 3
|
||||
cpu_sign rd 1
|
||||
cpu_info rd 1
|
||||
cpu_caps rd 4
|
||||
cpu_vendor rd 3
|
||||
cpu_sign rd 1
|
||||
cpu_info rd 1
|
||||
cpu_caps rd 4
|
||||
|
||||
|
||||
pg_data PG_DATA
|
||||
heap_test rd 1
|
||||
pg_data PG_DATA
|
||||
heap_test rd 1
|
||||
|
||||
buttontype rd 1
|
||||
buttontype rd 1
|
||||
windowtypechanged rd 1
|
||||
|
||||
hd_entries rd 1 ;unused ? 0xfe10
|
||||
hd_entries rd 1 ;unused ? 0xfe10
|
||||
|
||||
;* start code - Mario79
|
||||
|
||||
mouse_active rd 1
|
||||
mouse_pause rd 1
|
||||
mouse_active rd 1
|
||||
mouse_pause rd 1
|
||||
MouseTickCounter rd 1
|
||||
|
||||
;* end code - Mario79
|
||||
|
||||
img_background rd 1
|
||||
mem_BACKGROUND rd 1
|
||||
img_background rd 1
|
||||
mem_BACKGROUND rd 1
|
||||
static_background_data rd 1
|
||||
|
||||
cache_ide0:
|
||||
cache_ide0_pointer rd 1
|
||||
cache_ide0_size rd 1 ; not use
|
||||
cache_ide0_pointer rd 1
|
||||
cache_ide0_size rd 1 ; not use
|
||||
cache_ide0_data_pointer rd 1
|
||||
cache_ide0_system_data_size rd 1 ; not use
|
||||
cache_ide0_appl_data_size rd 1 ; not use
|
||||
cache_ide0_system_data rd 1
|
||||
cache_ide0_appl_data rd 1
|
||||
cache_ide0_system_data rd 1
|
||||
cache_ide0_appl_data rd 1
|
||||
cache_ide0_system_sad_size rd 1
|
||||
cache_ide0_appl_sad_size rd 1
|
||||
cache_ide0_search_start rd 1
|
||||
cache_ide0_appl_search_start rd 1
|
||||
|
||||
cache_ide1:
|
||||
cache_ide1_pointer rd 1
|
||||
cache_ide1_size rd 1 ; not use
|
||||
cache_ide1_pointer rd 1
|
||||
cache_ide1_size rd 1 ; not use
|
||||
cache_ide1_data_pointer rd 1
|
||||
cache_ide1_system_data_size rd 1 ; not use
|
||||
cache_ide1_appl_data_size rd 1 ; not use
|
||||
cache_ide1_system_data rd 1
|
||||
cache_ide1_appl_data rd 1
|
||||
cache_ide1_system_data rd 1
|
||||
cache_ide1_appl_data rd 1
|
||||
cache_ide1_system_sad_size rd 1
|
||||
cache_ide1_appl_sad_size rd 1
|
||||
cache_ide1_search_start rd 1
|
||||
cache_ide1_appl_search_start rd 1
|
||||
|
||||
cache_ide2:
|
||||
cache_ide2_pointer rd 1
|
||||
cache_ide2_size rd 1 ; not use
|
||||
cache_ide2_pointer rd 1
|
||||
cache_ide2_size rd 1 ; not use
|
||||
cache_ide2_data_pointer rd 1
|
||||
cache_ide2_system_data_size rd 1 ; not use
|
||||
cache_ide2_appl_data_size rd 1 ; not use
|
||||
cache_ide2_system_data rd 1
|
||||
cache_ide2_appl_data rd 1
|
||||
cache_ide2_system_data rd 1
|
||||
cache_ide2_appl_data rd 1
|
||||
cache_ide2_system_sad_size rd 1
|
||||
cache_ide2_appl_sad_size rd 1
|
||||
cache_ide2_search_start rd 1
|
||||
cache_ide2_appl_search_start rd 1
|
||||
|
||||
cache_ide3:
|
||||
cache_ide3_pointer rd 1
|
||||
cache_ide3_size rd 1 ; not use
|
||||
cache_ide3_pointer rd 1
|
||||
cache_ide3_size rd 1 ; not use
|
||||
cache_ide3_data_pointer rd 1
|
||||
cache_ide3_system_data_size rd 1 ; not use
|
||||
cache_ide3_appl_data_size rd 1 ; not use
|
||||
cache_ide3_system_data rd 1
|
||||
cache_ide3_appl_data rd 1
|
||||
cache_ide3_system_data rd 1
|
||||
cache_ide3_appl_data rd 1
|
||||
cache_ide3_system_sad_size rd 1
|
||||
cache_ide3_appl_sad_size rd 1
|
||||
cache_ide3_search_start rd 1
|
||||
@ -462,11 +462,11 @@ cd_appl_data rb 1 ; 0 = system cache, 1 - application cache
|
||||
|
||||
lba_read_enabled rd 1 ; 0 = disabled , 1 = enabled
|
||||
pci_access_enabled rd 1 ; 0 = disabled , 1 = enabled
|
||||
timer_ticks_enable rb 1 ; for cd driver
|
||||
timer_ticks_enable rb 1 ; for cd driver
|
||||
|
||||
NumBiosDisks rd 1
|
||||
BiosDisksData rb 200h
|
||||
BiosDiskCaches rb 80h*(cache_ide1-cache_ide0)
|
||||
NumBiosDisks rd 1
|
||||
BiosDisksData rb 200h
|
||||
BiosDiskCaches rb 80h*(cache_ide1-cache_ide0)
|
||||
BiosDiskPartitions rd 80h
|
||||
|
||||
IncludeUGlobals
|
||||
|
@ -4253,11 +4253,11 @@ sys_gs: ; direct screen access
|
||||
|
||||
;align 4 ; PCI functions
|
||||
;
|
||||
;sys_pci:
|
||||
;
|
||||
; call pci_api
|
||||
; mov [esp+36],eax
|
||||
; ret
|
||||
sys_pci:
|
||||
|
||||
call pci_api
|
||||
mov [esp+36],eax
|
||||
ret
|
||||
|
||||
|
||||
align 4 ; system functions
|
||||
|
345
kernel/branches/Kolibri-A/utilities/SB700/LPC_REG.ASM
Normal file
345
kernel/branches/Kolibri-A/utilities/SB700/LPC_REG.ASM
Normal file
@ -0,0 +1,345 @@
|
||||
;; ZiS test -- Art J ;;
|
||||
|
||||
|
||||
use32 ;
|
||||
org 0x0 ;
|
||||
|
||||
db 'MENUET01' ;
|
||||
dd 0x01 ;
|
||||
dd START ;
|
||||
dd I_END ;
|
||||
dd 0x1000 ;
|
||||
dd 0x1000 ;
|
||||
dd 0x0 ;
|
||||
dd 0x0 ;
|
||||
|
||||
include 'MACROS.INC' ;
|
||||
|
||||
PCIE_SPACE equ 0xF0000000
|
||||
PCIE_ADDR equ 0xF00A3000 ; bdf0:20.3 = SB7xx LPC Config Registers
|
||||
BOX_COLOR equ 0xE0D8D0
|
||||
|
||||
START:
|
||||
|
||||
mov edx, 0x88
|
||||
add edx, PCIE_ADDR
|
||||
mov eax, 0x00010101
|
||||
mov [edx], eax
|
||||
|
||||
|
||||
red:
|
||||
|
||||
call draw_window
|
||||
|
||||
still:
|
||||
mcall 10 ; event waiting
|
||||
|
||||
cmp eax,1 ; redraw window
|
||||
je red ;
|
||||
cmp eax,2 ; key pressed?
|
||||
je key ;
|
||||
cmp eax,3 ; button hit?
|
||||
je button ;
|
||||
|
||||
jmp still ; none of that
|
||||
|
||||
;---------------------------------------------------------------------
|
||||
|
||||
key: ; key pressed
|
||||
jmp red
|
||||
|
||||
;---------------------------------------------------------------------
|
||||
|
||||
button:
|
||||
mcall 17 ; get the button ID
|
||||
cmp ah, 1
|
||||
jne .bt2
|
||||
mcall -1
|
||||
.bt2:
|
||||
cmp ah, 2
|
||||
jne .bt3
|
||||
sub [Reg],4 ; Rg# decrement
|
||||
jmp red
|
||||
.bt3:
|
||||
cmp ah, 3
|
||||
jne .bt4
|
||||
add [Reg],4 ; Rg# increment
|
||||
jmp red
|
||||
.bt4:
|
||||
cmp ah, 4
|
||||
jne .bt5
|
||||
add [Reg],4*16 ; PgDn
|
||||
jmp red
|
||||
.bt5:
|
||||
cmp ah, 5
|
||||
jne .bt6
|
||||
mov edx, [Reg]
|
||||
cmp edx, 4*16
|
||||
jb @f
|
||||
sub edx, 4*16
|
||||
mov [Reg],edx ; PgUp
|
||||
jmp red
|
||||
@@:
|
||||
xor edx, edx
|
||||
mov [Reg], edx
|
||||
jmp red
|
||||
|
||||
.bt6:
|
||||
cmp ah, 6
|
||||
jne still
|
||||
mcall 37, 1 ; get the mouse pointer
|
||||
shr eax, 16 ; only X needed
|
||||
sub eax, 124 ; check the left border
|
||||
jb red
|
||||
xor edx, edx
|
||||
mov ebx, 12
|
||||
div ebx
|
||||
cmp eax, 32 ; check the right border
|
||||
jnb red
|
||||
mov ecx, 31
|
||||
sub ecx, eax ; reverse the bit order
|
||||
mov ebx, [Rct]
|
||||
btc ebx, ecx ; invert the bit
|
||||
mov eax, [Reg]
|
||||
add eax, PCIE_ADDR
|
||||
mov [Rct], ebx
|
||||
mov [eax], ebx
|
||||
|
||||
jmp red
|
||||
|
||||
|
||||
;------------------------------------------------
|
||||
print_config_reg:
|
||||
;------------------------------------------------
|
||||
mov eax, [reg]
|
||||
and eax, 0x0FFC
|
||||
mov ebx, 4*65536+256 ; 4 hex digits
|
||||
mov ecx, eax
|
||||
mov dx,[stX]
|
||||
shl edx,16 ; = X*65536
|
||||
mov dx,[stY] ; = edx + Y
|
||||
mov esi,0
|
||||
mcall 47 ; print reg#
|
||||
mov eax, [reg]
|
||||
add eax, PCIE_ADDR
|
||||
mov ecx, [eax]
|
||||
add edx, 36*65536 ; right column
|
||||
mov ebx, 8*65536+256 ; 8 hex digits
|
||||
mcall 47 ; print config data
|
||||
ret
|
||||
;------------------------------------------------
|
||||
read_nbconfig:
|
||||
; in: dl = reg# | out: eax = data
|
||||
;------------------------------------------------
|
||||
mov ebx, 0xF0000000
|
||||
and edx, 0x0FC
|
||||
mov eax, dword [ebx+edx]
|
||||
ret
|
||||
;------------------------------------------------
|
||||
write_nbconfig:
|
||||
; in: dl = reg#; eax = data
|
||||
;------------------------------------------------
|
||||
mov ebx, 0xF0000000
|
||||
and edx, 0x0FC
|
||||
mov dword [ebx+edx], eax
|
||||
ret
|
||||
|
||||
;------------------------------------------------
|
||||
;read_htiunbind:
|
||||
; in: [HTr] = reg# | out: eax = data
|
||||
;------------------------------------------------
|
||||
; mov dl, 0x94
|
||||
; mov al, byte[HTr]
|
||||
; and eax, 0x07C
|
||||
; call write_nbconfig
|
||||
; add dl, 4
|
||||
; call read_nbconfig
|
||||
; ret
|
||||
;------------------------------------------------
|
||||
;write_htiunbind:
|
||||
; in: [HTr] = reg#; ecx = data
|
||||
;------------------------------------------------
|
||||
; mov dl, 0x94
|
||||
; mov al, byte[Reg]
|
||||
; and eax, 0x017C
|
||||
; call write_nbconfig
|
||||
; add dl, 4
|
||||
; mov ecx, eax
|
||||
; call write_nbconfig
|
||||
; sub dl, 4
|
||||
; mov eax, 0x0
|
||||
; call write_nbconfig
|
||||
; ret
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
;------------------------------------------------
|
||||
draw_window:
|
||||
;------------------------------------------------
|
||||
|
||||
|
||||
mcall 12, 1
|
||||
mcall 0, 600*65536+530, 120*65536+290, 0x1499AAA0,,title
|
||||
; -----------------------------------------------------------------
|
||||
; BUTTONS: Xleft Xwid, Ytop Yheig
|
||||
mcall 8, 370*65536+ 40, 26*65536+ 18, 2, 0x99AABB ; <<
|
||||
mcall , , 51*65536+ 18, 3, ; >>
|
||||
mcall , 425*65536+ 90, 26*65536+ 18, 4, ; PCIe Cfg
|
||||
mcall , , 51*65536+ 18, 5, ; NB config
|
||||
mcall , 117*65536+400, 97*65536+ 40, 6, ; Bits
|
||||
|
||||
mov edx, [Reg]
|
||||
add edx, PCIE_ADDR ; reading the current reg content
|
||||
mov ecx, [edx]
|
||||
mov [Rct], ecx
|
||||
|
||||
mov ebx, bitstr2
|
||||
inc ebx
|
||||
mov edx, [Rct]
|
||||
mov ecx, 0x80000000
|
||||
xor eax, eax
|
||||
.stringtest:
|
||||
test edx, ecx
|
||||
jz @f
|
||||
mov byte [ebx+eax*2],'I' ; bit dump
|
||||
jmp .nextbit
|
||||
@@:
|
||||
mov byte [ebx+eax*2],'0'
|
||||
.nextbit:
|
||||
inc eax
|
||||
shr ecx, 1
|
||||
jnz .stringtest
|
||||
|
||||
; button txt: X *65536+ Y
|
||||
mcall 4, 378*65536+32 ,0x10000000, butstr2,3
|
||||
mcall , 378*65536+57 , , butstr3,
|
||||
mcall , 436*65536+32 , , butstr4,9
|
||||
mcall , 436*65536+57 , , butstr5,
|
||||
|
||||
mcall 4, 122*65536+101,0 , bitstr0,65
|
||||
mcall , 122*65536+110,0 , bitstr1,65
|
||||
mcall , 122*65536+117,0 , bitstr2,65
|
||||
mcall , 122*65536+126,0 , bitstr3,65
|
||||
; -----------------------------------------------------------------
|
||||
; draw the reg-value box
|
||||
mov ebx, 10*65536+100 ; Xleft | Xwidth
|
||||
mov ecx, 26*65536+250 ; Ytop | Yheight
|
||||
mov edx, BOX_COLOR
|
||||
mcall 13
|
||||
; draw the reg-address box
|
||||
mov ebx, 206*65536+146 ; Xleft | Xwidth
|
||||
mov cx, 44 ; Yheight only
|
||||
mcall 13
|
||||
; draw ZiS status box
|
||||
; mov ebx, 206*65536+274 ; Xleft | Xwidth
|
||||
; mov ecx, 84*65536+ 64 ; Ytop | Yheight
|
||||
; mcall 13
|
||||
; draw the dump box
|
||||
; mov ebx, 206*65536+274 ; Xleft | Xwidth
|
||||
; mov ecx, 190*65536+232 ; Ytop | Yheight
|
||||
; mcall 13
|
||||
|
||||
; fill the data box
|
||||
mov ebx, [Reg]
|
||||
mov [reg],ebx
|
||||
mov bx, 40 ; upper position
|
||||
mov [stY],bx
|
||||
.print_reg_names:
|
||||
call print_config_reg
|
||||
add [stY],14
|
||||
add [reg], 4
|
||||
mov edx,[Reg]
|
||||
add edx,16*4
|
||||
cmp edx,[reg]
|
||||
ja .print_reg_names
|
||||
|
||||
; fill the status box
|
||||
mcall 4, 210*65536+30,0,str1,12
|
||||
mcall , 210*65536+44, ,str2,
|
||||
mcall , 210*65536+56, ,str3,
|
||||
mov ecx, PCIE_ADDR
|
||||
mov edx, 300*65536+30
|
||||
mov ebx, 8*65536+256
|
||||
mcall 47
|
||||
add dx, 14
|
||||
mov ecx,[Reg]
|
||||
mov esi, 0
|
||||
mcall 47
|
||||
add dx,14
|
||||
mov ecx, [Rct]
|
||||
mcall 47
|
||||
|
||||
; print extra info
|
||||
mov ebx, 120*65536+180
|
||||
xor ecx, ecx
|
||||
mov edx, info1
|
||||
@@:
|
||||
mcall 4,,,,66
|
||||
add edx, 66
|
||||
add ebx, 14
|
||||
cmp edx, info_end
|
||||
jb @b
|
||||
|
||||
|
||||
mcall 12, 2 ; äãªæ¨ï 12: á®®¡é¨âì Ž‘ ®¡ ®âà¨á®¢ª¥ ®ª
|
||||
|
||||
ret
|
||||
|
||||
|
||||
align 4
|
||||
;-------------------------------------------------
|
||||
|
||||
pix dd 0x55AACC33
|
||||
pxX dd 200
|
||||
pxY dd 160
|
||||
stX dw 18
|
||||
stY dw 0
|
||||
reg dd 0
|
||||
|
||||
Rct dd 0 ; reg content
|
||||
Reg dd 0x00 ; reg number
|
||||
|
||||
|
||||
title db ' SB710 LPC Config Registers - LPC_Reg ',0
|
||||
;------------------------------------------------------------------------------------
|
||||
reg_str db 'Reg#| hex.Value '
|
||||
;------------------------------------------------------------------------------------
|
||||
str1 db 'bdf address:'
|
||||
str2 db 'Reg. number:'
|
||||
str3 db 'Reg.content:'
|
||||
|
||||
butstr2 db ' << '
|
||||
butstr3 db ' >> '
|
||||
butstr4 db 'Next Page'
|
||||
butstr5 db 'Prev Page'
|
||||
|
||||
bitstr0 db '31',209,205,209,205,209,205,209,205,209,205,209,205,'24',\
|
||||
209,205,209,205,209,205,209,205,209,205,209,205,209,205,'16',\
|
||||
209,'15',205,209,205,209,205,209,205,209,205,209,205,209,'8',\
|
||||
205,'7',209,205,209,205,209,205,209,205,209,205,209,205,209,'0',184
|
||||
bitstr1 db 179,' | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ',179
|
||||
bitstr2 db 179,'1 0 9 8',179,'7 6 5 4',179,'3 2 1 0',179,'9 8 7 6',\
|
||||
179,'5 4 3 2',179,'1 0 9 8',179,'7 6 5 4',179,'3 2 1 0',179
|
||||
bitstr3 db 212,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
|
||||
205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
|
||||
205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
|
||||
205,207,205,207,205,207,205,207,205,207,205,190
|
||||
|
||||
info1 db '--------------------------- extra info ---------------------------'
|
||||
info2 db '| reg 00[31:16] (DeviceID): 439D = SB7100/710/750 LPC bus |'
|
||||
db '| reg |'
|
||||
db '| reg |'
|
||||
db '| reg |'
|
||||
db '------------------------------------------------------------------'
|
||||
info_end:
|
||||
|
||||
I_END: ; end of program
|
||||
|
||||
rd 256
|
||||
|
||||
align 256
|
||||
st_0:
|
344
kernel/branches/Kolibri-A/utilities/SB700/PCI_REG.ASM
Normal file
344
kernel/branches/Kolibri-A/utilities/SB700/PCI_REG.ASM
Normal file
@ -0,0 +1,344 @@
|
||||
$Revision: 1598 $
|
||||
|
||||
use32 ;
|
||||
org 0x0 ;
|
||||
|
||||
db 'MENUET01' ;
|
||||
dd 0x01 ;
|
||||
dd START ;
|
||||
dd I_END ;
|
||||
dd 0x1000 ;
|
||||
dd 0x1000 ;
|
||||
dd 0x0 ;
|
||||
dd 0x0 ;
|
||||
|
||||
include 'MACROS.INC' ;
|
||||
|
||||
PCIE_SPACE equ 0xF0000000
|
||||
PCIE_ADDR equ 0xF00A0000 ; bdf0:20.0 = SB7xx PCI Config Registers
|
||||
BOX_COLOR equ 0xE0D8D0
|
||||
|
||||
START:
|
||||
|
||||
mov edx, 0x88
|
||||
add edx, PCIE_ADDR
|
||||
mov eax, 0x00010101
|
||||
mov [edx], eax
|
||||
|
||||
|
||||
red:
|
||||
|
||||
call draw_window
|
||||
|
||||
still:
|
||||
mcall 10 ; event waiting
|
||||
|
||||
cmp eax,1 ; redraw window
|
||||
je red ;
|
||||
cmp eax,2 ; key pressed?
|
||||
je key ;
|
||||
cmp eax,3 ; button hit?
|
||||
je button ;
|
||||
|
||||
jmp still ; none of that
|
||||
|
||||
;---------------------------------------------------------------------
|
||||
|
||||
key: ; key pressed
|
||||
jmp red
|
||||
|
||||
;---------------------------------------------------------------------
|
||||
|
||||
button:
|
||||
mcall 17 ; get the button ID
|
||||
cmp ah, 1
|
||||
jne .bt2
|
||||
mcall -1
|
||||
.bt2:
|
||||
cmp ah, 2
|
||||
jne .bt3
|
||||
sub [Reg],4 ; Rg# decrement
|
||||
jmp red
|
||||
.bt3:
|
||||
cmp ah, 3
|
||||
jne .bt4
|
||||
add [Reg],4 ; Rg# increment
|
||||
jmp red
|
||||
.bt4:
|
||||
cmp ah, 4
|
||||
jne .bt5
|
||||
add [Reg],4*16 ; PgDn
|
||||
jmp red
|
||||
.bt5:
|
||||
cmp ah, 5
|
||||
jne .bt6
|
||||
mov edx, [Reg]
|
||||
cmp edx, 4*16
|
||||
jb @f
|
||||
sub edx, 4*16
|
||||
mov [Reg],edx ; PgUp
|
||||
jmp red
|
||||
@@:
|
||||
xor edx, edx
|
||||
mov [Reg], edx
|
||||
jmp red
|
||||
|
||||
.bt6:
|
||||
cmp ah, 6
|
||||
jne still
|
||||
mcall 37, 1 ; get the mouse pointer
|
||||
shr eax, 16 ; only X needed
|
||||
sub eax, 124 ; check the left border
|
||||
jb red
|
||||
xor edx, edx
|
||||
mov ebx, 12
|
||||
div ebx
|
||||
cmp eax, 32 ; check the right border
|
||||
jnb red
|
||||
mov ecx, 31
|
||||
sub ecx, eax ; reverse the bit order
|
||||
mov ebx, [Rct]
|
||||
btc ebx, ecx ; invert the bit
|
||||
mov eax, [Reg]
|
||||
add eax, PCIE_ADDR
|
||||
mov [Rct], ebx
|
||||
mov [eax], ebx
|
||||
|
||||
jmp red
|
||||
|
||||
|
||||
;------------------------------------------------
|
||||
print_config_reg:
|
||||
;------------------------------------------------
|
||||
mov eax, [reg]
|
||||
and eax, 0x0FFC
|
||||
mov ebx, 4*65536+256 ; 4 hex digits
|
||||
mov ecx, eax
|
||||
mov dx,[stX]
|
||||
shl edx,16 ; = X*65536
|
||||
mov dx,[stY] ; = edx + Y
|
||||
mov esi,0
|
||||
mcall 47 ; print reg#
|
||||
mov eax, [reg]
|
||||
add eax, PCIE_ADDR
|
||||
mov ecx, [eax]
|
||||
add edx, 36*65536 ; right column
|
||||
mov ebx, 8*65536+256 ; 8 hex digits
|
||||
mcall 47 ; print config data
|
||||
ret
|
||||
;------------------------------------------------
|
||||
read_nbconfig:
|
||||
; in: dl = reg# | out: eax = data
|
||||
;------------------------------------------------
|
||||
mov ebx, 0xF0000000
|
||||
and edx, 0x0FC
|
||||
mov eax, dword [ebx+edx]
|
||||
ret
|
||||
;------------------------------------------------
|
||||
write_nbconfig:
|
||||
; in: dl = reg#; eax = data
|
||||
;------------------------------------------------
|
||||
mov ebx, 0xF0000000
|
||||
and edx, 0x0FC
|
||||
mov dword [ebx+edx], eax
|
||||
ret
|
||||
|
||||
;------------------------------------------------
|
||||
;read_htiunbind:
|
||||
; in: [HTr] = reg# | out: eax = data
|
||||
;------------------------------------------------
|
||||
; mov dl, 0x94
|
||||
; mov al, byte[HTr]
|
||||
; and eax, 0x07C
|
||||
; call write_nbconfig
|
||||
; add dl, 4
|
||||
; call read_nbconfig
|
||||
; ret
|
||||
;------------------------------------------------
|
||||
;write_htiunbind:
|
||||
; in: [HTr] = reg#; ecx = data
|
||||
;------------------------------------------------
|
||||
; mov dl, 0x94
|
||||
; mov al, byte[Reg]
|
||||
; and eax, 0x017C
|
||||
; call write_nbconfig
|
||||
; add dl, 4
|
||||
; mov ecx, eax
|
||||
; call write_nbconfig
|
||||
; sub dl, 4
|
||||
; mov eax, 0x0
|
||||
; call write_nbconfig
|
||||
; ret
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
;------------------------------------------------
|
||||
draw_window:
|
||||
;------------------------------------------------
|
||||
|
||||
|
||||
mcall 12, 1
|
||||
mcall 0, 600*65536+530, 120*65536+290, 0x1499AABB,,title
|
||||
; -----------------------------------------------------------------
|
||||
; BUTTONS: Xleft Xwid, Ytop Yheig
|
||||
mcall 8, 370*65536+ 40, 26*65536+ 18, 2, 0x99AABB ; <<
|
||||
mcall , , 51*65536+ 18, 3, ; >>
|
||||
mcall , 425*65536+ 90, 26*65536+ 18, 4, ; PCIe Cfg
|
||||
mcall , , 51*65536+ 18, 5, ; NB config
|
||||
mcall , 117*65536+400, 97*65536+ 40, 6, ; Bits
|
||||
|
||||
mov edx, [Reg]
|
||||
add edx, PCIE_ADDR ; reading the current reg content
|
||||
mov ecx, [edx]
|
||||
mov [Rct], ecx
|
||||
|
||||
mov ebx, bitstr2
|
||||
inc ebx
|
||||
mov edx, [Rct]
|
||||
mov ecx, 0x80000000
|
||||
xor eax, eax
|
||||
.stringtest:
|
||||
test edx, ecx
|
||||
jz @f
|
||||
mov byte [ebx+eax*2],'I' ; bit dump
|
||||
jmp .nextbit
|
||||
@@:
|
||||
mov byte [ebx+eax*2],'0'
|
||||
.nextbit:
|
||||
inc eax
|
||||
shr ecx, 1
|
||||
jnz .stringtest
|
||||
|
||||
; button txt: X *65536+ Y
|
||||
mcall 4, 378*65536+32 ,0x10000000, butstr2,3
|
||||
mcall , 378*65536+57 , , butstr3,
|
||||
mcall , 436*65536+32 , , butstr4,9
|
||||
mcall , 436*65536+57 , , butstr5,
|
||||
|
||||
mcall 4, 122*65536+101,0 , bitstr0,65
|
||||
mcall , 122*65536+110,0 , bitstr1,65
|
||||
mcall , 122*65536+117,0 , bitstr2,65
|
||||
mcall , 122*65536+126,0 , bitstr3,65
|
||||
; -----------------------------------------------------------------
|
||||
; draw the reg-value box
|
||||
mov ebx, 10*65536+100 ; Xleft | Xwidth
|
||||
mov ecx, 26*65536+250 ; Ytop | Yheight
|
||||
mov edx, BOX_COLOR
|
||||
mcall 13
|
||||
; draw the reg-address box
|
||||
mov ebx, 206*65536+146 ; Xleft | Xwidth
|
||||
mov cx, 44 ; Yheight only
|
||||
mcall 13
|
||||
; draw ZiS status box
|
||||
; mov ebx, 206*65536+274 ; Xleft | Xwidth
|
||||
; mov ecx, 84*65536+ 64 ; Ytop | Yheight
|
||||
; mcall 13
|
||||
; draw the dump box
|
||||
; mov ebx, 206*65536+274 ; Xleft | Xwidth
|
||||
; mov ecx, 190*65536+232 ; Ytop | Yheight
|
||||
; mcall 13
|
||||
|
||||
; fill the data box
|
||||
mov ebx, [Reg]
|
||||
mov [reg],ebx
|
||||
mov bx, 40 ; upper position
|
||||
mov [stY],bx
|
||||
.print_reg_names:
|
||||
call print_config_reg
|
||||
add [stY],14
|
||||
add [reg], 4
|
||||
mov edx,[Reg]
|
||||
add edx,16*4
|
||||
cmp edx,[reg]
|
||||
ja .print_reg_names
|
||||
|
||||
; fill the status box
|
||||
mcall 4, 210*65536+30,0,str1,12
|
||||
mcall , 210*65536+44, ,str2,
|
||||
mcall , 210*65536+56, ,str3,
|
||||
mov ecx, PCIE_ADDR
|
||||
mov edx, 300*65536+30
|
||||
mov ebx, 8*65536+256
|
||||
mcall 47
|
||||
add dx, 14
|
||||
mov ecx,[Reg]
|
||||
mov esi, 0
|
||||
mcall 47
|
||||
add dx,14
|
||||
mov ecx, [Rct]
|
||||
mcall 47
|
||||
|
||||
; print extra info
|
||||
mov ebx, 120*65536+180
|
||||
xor ecx, ecx
|
||||
mov edx, info1
|
||||
@@:
|
||||
mcall 4,,,,66
|
||||
add edx, 66
|
||||
add ebx, 14
|
||||
cmp edx, info_end
|
||||
jb @b
|
||||
|
||||
|
||||
mcall 12, 2 ; äãªæ¨ï 12: á®®¡é¨âì Ž‘ ®¡ ®âà¨á®¢ª¥ ®ª
|
||||
|
||||
ret
|
||||
|
||||
|
||||
align 4
|
||||
;-------------------------------------------------
|
||||
|
||||
pix dd 0x55AACC33
|
||||
pxX dd 200
|
||||
pxY dd 160
|
||||
stX dw 18
|
||||
stY dw 0
|
||||
reg dd 0
|
||||
|
||||
Rct dd 0 ; reg content
|
||||
Reg dd 0x00 ; reg number
|
||||
|
||||
|
||||
title db ' SB710 PCI Config Registers - PCI_Reg ',0
|
||||
;------------------------------------------------------------------------------------
|
||||
reg_str db 'Reg#| hex.Value '
|
||||
;------------------------------------------------------------------------------------
|
||||
str1 db 'bdf address:'
|
||||
str2 db 'Reg. number:'
|
||||
str3 db 'Reg.content:'
|
||||
|
||||
butstr2 db ' << '
|
||||
butstr3 db ' >> '
|
||||
butstr4 db 'Next Page'
|
||||
butstr5 db 'Prev Page'
|
||||
|
||||
bitstr0 db '31',209,205,209,205,209,205,209,205,209,205,209,205,'24',\
|
||||
209,205,209,205,209,205,209,205,209,205,209,205,209,205,'16',\
|
||||
209,'15',205,209,205,209,205,209,205,209,205,209,205,209,'8',\
|
||||
205,'7',209,205,209,205,209,205,209,205,209,205,209,205,209,'0',184
|
||||
bitstr1 db 179,' | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ',179
|
||||
bitstr2 db 179,'1 0 9 8',179,'7 6 5 4',179,'3 2 1 0',179,'9 8 7 6',\
|
||||
179,'5 4 3 2',179,'1 0 9 8',179,'7 6 5 4',179,'3 2 1 0',179
|
||||
bitstr3 db 212,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
|
||||
205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
|
||||
205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
|
||||
205,207,205,207,205,207,205,207,205,207,205,190
|
||||
|
||||
info1 db '--------------------------- extra info ---------------------------'
|
||||
info2 db '| reg 00[31:16] (DeviceID): 4385=SB7100/710/750 SMBus module |'
|
||||
db '| reg |'
|
||||
db '| reg |'
|
||||
db '| reg |'
|
||||
db '------------------------------------------------------------------'
|
||||
info_end:
|
||||
|
||||
I_END: ; end of program
|
||||
|
||||
rd 256
|
||||
|
||||
align 256
|
||||
st_0:
|
314
kernel/branches/Kolibri-A/utilities/SB700/SB_CM_RG.ASM
Normal file
314
kernel/branches/Kolibri-A/utilities/SB700/SB_CM_RG.ASM
Normal file
@ -0,0 +1,314 @@
|
||||
$Revision: 1598 $
|
||||
|
||||
use32 ;
|
||||
org 0x0 ;
|
||||
|
||||
db 'MENUET01' ;
|
||||
dd 0x01 ;
|
||||
dd START ;
|
||||
dd I_END ;
|
||||
dd 0x1000 ;
|
||||
dd 0x1000 ;
|
||||
dd 0x0 ;
|
||||
dd 0x0 ;
|
||||
|
||||
include 'MACROS.INC' ;
|
||||
|
||||
SB_PM_INDEX equ 0xC50
|
||||
SB_PM_DATA equ 0xC51
|
||||
BOX_COLOR equ 0xD0C8C0
|
||||
|
||||
START:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
red:
|
||||
|
||||
call draw_window
|
||||
|
||||
still:
|
||||
mcall 10 ; event waiting
|
||||
|
||||
cmp eax,1 ; redraw window
|
||||
je red ;
|
||||
cmp eax,2 ; key pressed?
|
||||
je key ;
|
||||
cmp eax,3 ; button hit?
|
||||
je button ;
|
||||
|
||||
jmp still ; none of that
|
||||
|
||||
;---------------------------------------------------------------------
|
||||
|
||||
key: ; key pressed
|
||||
jmp red
|
||||
|
||||
;---------------------------------------------------------------------
|
||||
|
||||
button:
|
||||
mcall 17 ; get the button ID
|
||||
cmp ah, 1
|
||||
jne .bt2
|
||||
mcall -1
|
||||
.bt2:
|
||||
cmp ah, 2
|
||||
jne .bt3
|
||||
dec [Reg] ; Rg# decrement
|
||||
jmp red
|
||||
.bt3:
|
||||
cmp ah, 3
|
||||
jne .bt4
|
||||
inc [Reg] ; Rg# increment
|
||||
jmp red
|
||||
.bt4:
|
||||
cmp ah, 4
|
||||
jne .bt5
|
||||
add [Reg],16 ; PgDn
|
||||
jmp red
|
||||
.bt5:
|
||||
cmp ah, 5
|
||||
jne .bt6
|
||||
mov edx, [Reg]
|
||||
cmp edx, 16
|
||||
jb @f
|
||||
sub edx, 16
|
||||
mov [Reg],edx ; PgUp
|
||||
jmp red
|
||||
@@:
|
||||
xor edx, edx
|
||||
mov [Reg], edx
|
||||
jmp red
|
||||
|
||||
.bt6:
|
||||
cmp ah, 6
|
||||
jne still
|
||||
mcall 37, 1 ; get the mouse pointer
|
||||
shr eax, 16 ; only X needed
|
||||
sub eax, 124 ; check the left border
|
||||
jb red
|
||||
xor edx, edx
|
||||
mov ebx, 12
|
||||
div ebx
|
||||
cmp eax, 32 ; check the right border
|
||||
jnb red
|
||||
mov ecx, 31
|
||||
sub ecx, eax ; reverse the bit order
|
||||
mov ebx, [Rct]
|
||||
btc ebx, ecx ; invert the bit
|
||||
mov eax, [Reg]
|
||||
mov [Rct], ebx
|
||||
call write_sb_pm_reg
|
||||
|
||||
jmp red
|
||||
|
||||
|
||||
;------------------------------------------------
|
||||
print_config_reg:
|
||||
;------------------------------------------------
|
||||
mov eax, [Reg]
|
||||
; and eax, 0x0FF
|
||||
mov ebx, 3*65536+256 ; 3 hex digits
|
||||
mov ecx, eax
|
||||
mov dx,[stX]
|
||||
shl edx,16 ; = X*65536
|
||||
mov dx,[stY] ; = edx + Y
|
||||
mov esi,0
|
||||
mcall 47 ; print reg#
|
||||
mov ecx, edx
|
||||
call read_sb_pm_reg
|
||||
mov edx, ecx
|
||||
mov ecx, eax
|
||||
add edx, 36*65536 ; right column
|
||||
mov ebx, 8*65536+256 ; 8 hex digits
|
||||
mcall 47 ; print config data
|
||||
ret
|
||||
|
||||
;------------------------------------------------
|
||||
read_sb_pm_reg:
|
||||
; in: [Reg] = reg# | out: eax = [Rct] = data
|
||||
;------------------------------------------------
|
||||
mov dx, SB_PM_INDEX
|
||||
xor eax, eax
|
||||
mov al, byte [Reg]
|
||||
out dx, al
|
||||
inc dl
|
||||
in al, dx
|
||||
mov [Rct], eax
|
||||
ret
|
||||
|
||||
;------------------------------------------------
|
||||
write_sb_pm_reg:
|
||||
; in: [Reg] = reg#; [Rct] = data
|
||||
;------------------------------------------------
|
||||
mov dx, SB_PM_INDEX
|
||||
xor eax, eax
|
||||
mov al, byte [Reg]
|
||||
out dx, al
|
||||
inc dl
|
||||
mov eax, [Rct]
|
||||
out dx, al
|
||||
ret
|
||||
|
||||
|
||||
;------------------------------------------------
|
||||
draw_window:
|
||||
;------------------------------------------------
|
||||
|
||||
|
||||
mcall 12, 1
|
||||
mcall 0, 600*65536+530, 410*65536+290, 0x14748090,,title
|
||||
; -----------------------------------------------------------------
|
||||
; BUTTONS: Xleft Xwid, Ytop Yheig
|
||||
mcall 8, 370*65536+ 40, 26*65536+ 18, 2, 0x94A0B0 ; <<
|
||||
mcall , , 51*65536+ 18, 3, ; >>
|
||||
mcall , 425*65536+ 90, 26*65536+ 18, 4, ; Next Page
|
||||
mcall , , 51*65536+ 18, 5, ; Prev Page
|
||||
mcall , 117*65536+400, 97*65536+ 40, 6, ; Bits
|
||||
|
||||
call read_sb_pm_reg
|
||||
|
||||
mov ebx, bitstr2
|
||||
inc ebx
|
||||
mov edx, [Rct]
|
||||
mov ecx, 0x80000000
|
||||
xor eax, eax
|
||||
.stringtest:
|
||||
test edx, ecx
|
||||
jz @f
|
||||
mov byte [ebx+eax*2],'I' ; bit dump
|
||||
jmp .nextbit
|
||||
@@:
|
||||
mov byte [ebx+eax*2],'0'
|
||||
.nextbit:
|
||||
inc eax
|
||||
shr ecx, 1
|
||||
jnz .stringtest
|
||||
|
||||
; button txt: X *65536+ Y
|
||||
mcall 4, 378*65536+32 ,0x10000000, butstr2,3
|
||||
mcall , 378*65536+57 , , butstr3,
|
||||
mcall , 436*65536+32 , , butstr4,9
|
||||
mcall , 436*65536+57 , , butstr5,
|
||||
|
||||
mcall 4, 122*65536+101,0 , bitstr0,65
|
||||
mcall , 122*65536+110,0 , bitstr1,65
|
||||
mcall , 122*65536+117,0 , bitstr2,65
|
||||
mcall , 122*65536+126,0 , bitstr3,65
|
||||
; -----------------------------------------------------------------
|
||||
; draw the reg-value box
|
||||
mov ebx, 10*65536+100 ; Xleft | Xwidth
|
||||
mov ecx, 26*65536+250 ; Ytop | Yheight
|
||||
mov edx, BOX_COLOR
|
||||
mcall 13
|
||||
; draw the reg-address box
|
||||
mov ebx, 206*65536+146 ; Xleft | Xwidth
|
||||
mov cx, 44 ; Yheight only
|
||||
mcall 13
|
||||
|
||||
; fill the data box
|
||||
mov bx, 40 ; upper position
|
||||
mov [stY],bx
|
||||
mov eax, [Reg]
|
||||
mov [reg], eax ; store original#
|
||||
.print_reg_names:
|
||||
call print_config_reg
|
||||
add [stY],14
|
||||
inc [Reg]
|
||||
mov edx,[reg]
|
||||
mov eax, 16
|
||||
add eax, edx
|
||||
cmp eax,[Reg]
|
||||
ja .print_reg_names
|
||||
mov [Reg], edx ; restore original#
|
||||
|
||||
; fill the status box
|
||||
mcall 4, 210*65536+30,0,str1,12
|
||||
mcall , 210*65536+44, ,str2,
|
||||
mcall , 210*65536+56, ,str3,
|
||||
call read_sb_pm_reg
|
||||
mov ecx, SB_PM_DATA
|
||||
mov edx, 300*65536+30
|
||||
mov ebx, 8*65536+256
|
||||
mcall 47
|
||||
add dx, 14
|
||||
mov ecx,[Reg]
|
||||
mov esi, 0
|
||||
mcall 47
|
||||
add dx,14
|
||||
mov ecx, [Rct]
|
||||
mcall 47
|
||||
|
||||
; print extra info
|
||||
mov ebx, 120*65536+170
|
||||
xor ecx, ecx
|
||||
mov edx, info1
|
||||
@@:
|
||||
mcall 4,,,,66
|
||||
add edx, 66
|
||||
add ebx, 14
|
||||
cmp edx, info_end
|
||||
jb @b
|
||||
|
||||
|
||||
mcall 12, 2 ; äãªæ¨ï 12: á®®¡é¨âì Ž‘ ®¡ ®âà¨á®¢ª¥ ®ª
|
||||
|
||||
ret
|
||||
|
||||
|
||||
align 4
|
||||
;-------------------------------------------------
|
||||
|
||||
pix dd 0x55AACC33
|
||||
pxX dd 200
|
||||
pxY dd 160
|
||||
stX dw 18
|
||||
stY dw 0
|
||||
reg dd 0
|
||||
|
||||
Rct dd 0 ; reg content
|
||||
Reg dd 0x00 ; reg number
|
||||
|
||||
|
||||
title db ' SB710 Client Management Registers - IO_CM_Reg',0
|
||||
;------------------------------------------------------------------------------------
|
||||
reg_str db 'Reg#| hex.Value '
|
||||
;------------------------------------------------------------------------------------
|
||||
str1 db 'bdf address:'
|
||||
str2 db 'Reg. number:'
|
||||
str3 db 'Reg.content:'
|
||||
|
||||
butstr2 db ' << '
|
||||
butstr3 db ' >> '
|
||||
butstr4 db 'Next Page'
|
||||
butstr5 db 'Prev Page'
|
||||
|
||||
bitstr0 db '31',209,205,209,205,209,205,209,205,209,205,209,205,'24',\
|
||||
209,205,209,205,209,205,209,205,209,205,209,205,209,205,'16',\
|
||||
209,'15',205,209,205,209,205,209,205,209,205,209,205,209,'8',\
|
||||
205,'7',209,205,209,205,209,205,209,205,209,205,209,205,209,'0',184
|
||||
bitstr1 db 179,' | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ',179
|
||||
bitstr2 db 179,'1 0 9 8',179,'7 6 5 4',179,'3 2 1 0',179,'9 8 7 6',\
|
||||
179,'5 4 3 2',179,'1 0 9 8',179,'7 6 5 4',179,'3 2 1 0',179
|
||||
bitstr3 db 212,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
|
||||
205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
|
||||
205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
|
||||
205,207,205,207,205,207,205,207,205,207,205,190
|
||||
|
||||
info1 db '------------- PM REG -------------'
|
||||
db '| see AMD SB700/710/750 Register Reference Guide, pp.172-173 |'
|
||||
info2 db '| reg 00 - IdRegister |'
|
||||
db '| reg 02 [0]: logical status of TALERT/GPIO64 input (read-clears)|'
|
||||
db '| reg 03 [1]: generate SMI# ipon TALERT |'
|
||||
db '| reg 12 - I2C Control |'
|
||||
db '| reg 13 [7:6]: GpmPortStatus (00=read; 01=OE; 10=output) |'
|
||||
db '------------------------------------------------------------------'
|
||||
info_end:
|
||||
|
||||
I_END: ; end of program
|
||||
|
||||
rd 256
|
||||
|
||||
align 256
|
||||
st_0:
|
331
kernel/branches/Kolibri-A/utilities/SB700/SB_IO_RG.ASM
Normal file
331
kernel/branches/Kolibri-A/utilities/SB700/SB_IO_RG.ASM
Normal file
@ -0,0 +1,331 @@
|
||||
$Revision: 1598 $
|
||||
|
||||
use32 ;
|
||||
org 0x0 ;
|
||||
|
||||
db 'MENUET01' ;
|
||||
dd 0x01 ;
|
||||
dd START ;
|
||||
dd I_END ;
|
||||
dd 0x1000 ;
|
||||
dd 0x1000 ;
|
||||
dd 0x0 ;
|
||||
dd 0x0 ;
|
||||
|
||||
include 'MACROS.INC' ;
|
||||
|
||||
SB_SIO_INDEX equ 0x2e
|
||||
SB_SIO_DATA equ 0x2f
|
||||
BOX_COLOR equ 0xD0C8C0
|
||||
|
||||
START:
|
||||
|
||||
call enter_cfg_mode ; call this once
|
||||
|
||||
|
||||
|
||||
red:
|
||||
|
||||
call draw_window
|
||||
|
||||
still:
|
||||
mcall 10 ; event waiting
|
||||
|
||||
cmp eax,1 ; redraw window
|
||||
je red ;
|
||||
cmp eax,2 ; key pressed?
|
||||
je key ;
|
||||
cmp eax,3 ; button hit?
|
||||
je button ;
|
||||
|
||||
jmp still ; none of that
|
||||
|
||||
;---------------------------------------------------------------------
|
||||
|
||||
key: ; key pressed
|
||||
jmp red
|
||||
|
||||
;---------------------------------------------------------------------
|
||||
|
||||
button:
|
||||
mcall 17 ; get the button ID
|
||||
cmp ah, 1
|
||||
jne .bt2
|
||||
|
||||
mov byte[Reg], 2
|
||||
mov byte[Rct], 2
|
||||
call write_sio_cfg ; exit config-mode on exit
|
||||
mcall -1
|
||||
; --------------
|
||||
.bt2:
|
||||
cmp ah, 2
|
||||
jne .bt3
|
||||
dec [Reg] ; Rg# decrement
|
||||
jmp red
|
||||
.bt3:
|
||||
cmp ah, 3
|
||||
jne .bt4
|
||||
inc [Reg] ; Rg# increment
|
||||
jmp red
|
||||
.bt4:
|
||||
cmp ah, 4
|
||||
jne .bt5
|
||||
add [Reg],16 ; PgDn
|
||||
jmp red
|
||||
.bt5:
|
||||
cmp ah, 5
|
||||
jne .bt6
|
||||
mov edx, [Reg]
|
||||
cmp edx, 16
|
||||
jb @f
|
||||
sub edx, 16
|
||||
mov [Reg],edx ; PgUp
|
||||
jmp red
|
||||
@@:
|
||||
xor edx, edx
|
||||
mov [Reg], edx
|
||||
jmp red
|
||||
|
||||
.bt6:
|
||||
cmp ah, 6
|
||||
jne still
|
||||
mcall 37, 1 ; get the mouse pointer
|
||||
shr eax, 16 ; only X needed
|
||||
sub eax, 124 ; check the left border
|
||||
jb red
|
||||
xor edx, edx
|
||||
mov ebx, 12
|
||||
div ebx
|
||||
cmp eax, 32 ; check the right border
|
||||
jnb red
|
||||
mov ecx, 31
|
||||
sub ecx, eax ; reverse the bit order
|
||||
mov ebx, [Rct]
|
||||
btc ebx, ecx ; invert the bit
|
||||
mov eax, [Reg]
|
||||
mov [Rct], ebx
|
||||
call write_sio_cfg
|
||||
|
||||
jmp red
|
||||
|
||||
|
||||
;------------------------------------------------
|
||||
print_config_reg:
|
||||
;------------------------------------------------
|
||||
mov eax, [Reg]
|
||||
; and eax, 0x0FF
|
||||
mov ebx, 3*65536+256 ; 3 hex digits
|
||||
mov ecx, eax
|
||||
mov dx,[stX]
|
||||
shl edx,16 ; = X*65536
|
||||
mov dx,[stY] ; = edx + Y
|
||||
mov esi,0
|
||||
mcall 47 ; print reg#
|
||||
mov ecx, edx
|
||||
call read_sio_cfg
|
||||
mov edx, ecx
|
||||
mov ecx, eax
|
||||
add edx, 36*65536 ; right column
|
||||
mov ebx, 8*65536+256 ; 8 hex digits
|
||||
mcall 47 ; print config data
|
||||
ret
|
||||
|
||||
;------------------------------------------------
|
||||
read_sio_cfg:
|
||||
; in: [Reg] = reg# | out: eax = [Rct] = data
|
||||
;------------------------------------------------
|
||||
mov dx, SB_SIO_INDEX
|
||||
xor eax, eax
|
||||
mov al, byte [Reg]
|
||||
out dx, al
|
||||
inc dl
|
||||
in al, dx
|
||||
mov [Rct], eax
|
||||
ret
|
||||
|
||||
;------------------------------------------------
|
||||
write_sio_cfg:
|
||||
; in: [Reg] = reg#; [Rct] = data
|
||||
;------------------------------------------------
|
||||
mov dx, SB_SIO_INDEX
|
||||
mov eax, [Reg]
|
||||
out dx, al
|
||||
inc dl
|
||||
mov eax, [Rct]
|
||||
out dx, al
|
||||
ret
|
||||
;------------------------------------------------
|
||||
enter_cfg_mode:
|
||||
; the magic sequence to unlock the port
|
||||
;------------------------------------------------
|
||||
mov dx, SB_SIO_INDEX
|
||||
mov eax, 0x55550187 ; low byte first
|
||||
out dx, al
|
||||
shr eax, 8
|
||||
out dx, al
|
||||
shr eax, 8
|
||||
out dx, al
|
||||
shr eax, 8
|
||||
out dx, al
|
||||
ret
|
||||
|
||||
;------------------------------------------------
|
||||
draw_window:
|
||||
;------------------------------------------------
|
||||
|
||||
|
||||
mcall 12, 1
|
||||
mcall 0, 600*65536+530, 410*65536+290, 0x14748090,,title
|
||||
; -----------------------------------------------------------------
|
||||
; BUTTONS: Xleft Xwid, Ytop Yheig
|
||||
mcall 8, 370*65536+ 40, 26*65536+ 18, 2, 0x94A0B0 ; <<
|
||||
mcall , , 51*65536+ 18, 3, ; >>
|
||||
mcall , 425*65536+ 90, 26*65536+ 18, 4, ; Next Page
|
||||
mcall , , 51*65536+ 18, 5, ; Prev Page
|
||||
mcall , 117*65536+400, 97*65536+ 40, 6, ; Bits
|
||||
|
||||
call read_sio_cfg
|
||||
|
||||
mov ebx, bitstr2
|
||||
inc ebx
|
||||
mov edx, [Rct]
|
||||
mov ecx, 0x80000000
|
||||
xor eax, eax
|
||||
.stringtest:
|
||||
test edx, ecx
|
||||
jz @f
|
||||
mov byte [ebx+eax*2],'I' ; bit dump
|
||||
jmp .nextbit
|
||||
@@:
|
||||
mov byte [ebx+eax*2],'0'
|
||||
.nextbit:
|
||||
inc eax
|
||||
shr ecx, 1
|
||||
jnz .stringtest
|
||||
|
||||
; button txt: X *65536+ Y
|
||||
mcall 4, 378*65536+32 ,0x10000000, butstr2,3
|
||||
mcall , 378*65536+57 , , butstr3,
|
||||
mcall , 436*65536+32 , , butstr4,9
|
||||
mcall , 436*65536+57 , , butstr5,
|
||||
|
||||
mcall 4, 122*65536+101,0 , bitstr0,65
|
||||
mcall , 122*65536+110,0 , bitstr1,65
|
||||
mcall , 122*65536+117,0 , bitstr2,65
|
||||
mcall , 122*65536+126,0 , bitstr3,65
|
||||
; -----------------------------------------------------------------
|
||||
; draw the reg-value box
|
||||
mov ebx, 10*65536+100 ; Xleft | Xwidth
|
||||
mov ecx, 26*65536+250 ; Ytop | Yheight
|
||||
mov edx, BOX_COLOR
|
||||
mcall 13
|
||||
; draw the reg-address box
|
||||
mov ebx, 206*65536+146 ; Xleft | Xwidth
|
||||
mov cx, 44 ; Yheight only
|
||||
mcall 13
|
||||
|
||||
; fill the data box
|
||||
mov bx, 40 ; upper position
|
||||
mov [stY],bx
|
||||
mov eax, [Reg]
|
||||
mov [reg], eax ; store original#
|
||||
.print_reg_names:
|
||||
call print_config_reg
|
||||
add [stY],14
|
||||
inc [Reg]
|
||||
mov edx,[reg]
|
||||
mov eax, 16
|
||||
add eax, edx
|
||||
cmp eax,[Reg]
|
||||
ja .print_reg_names
|
||||
mov [Reg], edx ; restore original#
|
||||
|
||||
; fill the status box
|
||||
mcall 4, 210*65536+30,0,str1,12
|
||||
mcall , 210*65536+44, ,str2,
|
||||
mcall , 210*65536+56, ,str3,
|
||||
call read_sio_cfg
|
||||
mov ecx, SB_SIO_DATA
|
||||
mov edx, 300*65536+30
|
||||
mov ebx, 8*65536+256
|
||||
mcall 47
|
||||
add dx, 14
|
||||
mov ecx,[Reg]
|
||||
mov esi, 0
|
||||
mcall 47
|
||||
add dx,14
|
||||
mov ecx, [Rct]
|
||||
mcall 47
|
||||
|
||||
; print extra info
|
||||
mov ebx, 120*65536+170
|
||||
xor ecx, ecx
|
||||
mov edx, info1
|
||||
@@:
|
||||
mcall 4,,,,66
|
||||
add edx, 66
|
||||
add ebx, 14
|
||||
cmp edx, info_end
|
||||
jb @b
|
||||
|
||||
|
||||
mcall 12, 2 ; äãªæ¨ï 12: á®®¡é¨âì Ž‘ ®¡ ®âà¨á®¢ª¥ ®ª
|
||||
|
||||
ret
|
||||
|
||||
|
||||
align 4
|
||||
;-------------------------------------------------
|
||||
|
||||
pix dd 0x55AACC33
|
||||
pxX dd 200
|
||||
pxY dd 160
|
||||
stX dw 18
|
||||
stY dw 0
|
||||
reg dd 0
|
||||
|
||||
Rct dd 0 ; reg content
|
||||
Reg dd 0x00 ; reg number
|
||||
|
||||
|
||||
title db ' IT8712F -- Super IO control - SIO_Reg',0
|
||||
;------------------------------------------------------------------------------------
|
||||
reg_str db 'Reg#| hex.Value '
|
||||
;------------------------------------------------------------------------------------
|
||||
str1 db 'bdf address:'
|
||||
str2 db 'Reg. number:'
|
||||
str3 db 'Reg.content:'
|
||||
|
||||
butstr2 db ' << '
|
||||
butstr3 db ' >> '
|
||||
butstr4 db 'Next Page'
|
||||
butstr5 db 'Prev Page'
|
||||
|
||||
bitstr0 db '31',209,205,209,205,209,205,209,205,209,205,209,205,'24',\
|
||||
209,205,209,205,209,205,209,205,209,205,209,205,209,205,'16',\
|
||||
209,'15',205,209,205,209,205,209,205,209,205,209,205,209,'8',\
|
||||
205,'7',209,205,209,205,209,205,209,205,209,205,209,205,209,'0',184
|
||||
bitstr1 db 179,' | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ',179
|
||||
bitstr2 db 179,'1 0 9 8',179,'7 6 5 4',179,'3 2 1 0',179,'9 8 7 6',\
|
||||
179,'5 4 3 2',179,'1 0 9 8',179,'7 6 5 4',179,'3 2 1 0',179
|
||||
bitstr3 db 212,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
|
||||
205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
|
||||
205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
|
||||
205,207,205,207,205,207,205,207,205,207,205,190
|
||||
|
||||
info1 db '------------- SIO REG -------------'
|
||||
db '| see AMD SB700/710/750 Register Reference Guide, pp. |'
|
||||
info2 db '| |'
|
||||
db '| reg |'
|
||||
db '| reg |'
|
||||
db '| reg |'
|
||||
db '| reg |'
|
||||
db '------------------------------------------------------------------'
|
||||
info_end:
|
||||
|
||||
I_END: ; end of program
|
||||
|
||||
rd 256
|
||||
|
||||
align 256
|
||||
st_0:
|
314
kernel/branches/Kolibri-A/utilities/SB700/SB_PM2RG.ASM
Normal file
314
kernel/branches/Kolibri-A/utilities/SB700/SB_PM2RG.ASM
Normal file
@ -0,0 +1,314 @@
|
||||
$Revision: 1598 $
|
||||
|
||||
use32 ;
|
||||
org 0x0 ;
|
||||
|
||||
db 'MENUET01' ;
|
||||
dd 0x01 ;
|
||||
dd START ;
|
||||
dd I_END ;
|
||||
dd 0x1000 ;
|
||||
dd 0x1000 ;
|
||||
dd 0x0 ;
|
||||
dd 0x0 ;
|
||||
|
||||
include 'MACROS.INC' ;
|
||||
|
||||
SB_PM2_INDEX equ 0xCD0
|
||||
SB_PM2_DATA equ 0xCD1
|
||||
BOX_COLOR equ 0xD0C8C0
|
||||
|
||||
START:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
red:
|
||||
|
||||
call draw_window
|
||||
|
||||
still:
|
||||
mcall 10 ; event waiting
|
||||
|
||||
cmp eax,1 ; redraw window
|
||||
je red ;
|
||||
cmp eax,2 ; key pressed?
|
||||
je key ;
|
||||
cmp eax,3 ; button hit?
|
||||
je button ;
|
||||
|
||||
jmp still ; none of that
|
||||
|
||||
;---------------------------------------------------------------------
|
||||
|
||||
key: ; key pressed
|
||||
jmp red
|
||||
|
||||
;---------------------------------------------------------------------
|
||||
|
||||
button:
|
||||
mcall 17 ; get the button ID
|
||||
cmp ah, 1
|
||||
jne .bt2
|
||||
mcall -1
|
||||
.bt2:
|
||||
cmp ah, 2
|
||||
jne .bt3
|
||||
dec [Reg] ; Rg# decrement
|
||||
jmp red
|
||||
.bt3:
|
||||
cmp ah, 3
|
||||
jne .bt4
|
||||
inc [Reg] ; Rg# increment
|
||||
jmp red
|
||||
.bt4:
|
||||
cmp ah, 4
|
||||
jne .bt5
|
||||
add [Reg],16 ; PgDn
|
||||
jmp red
|
||||
.bt5:
|
||||
cmp ah, 5
|
||||
jne .bt6
|
||||
mov edx, [Reg]
|
||||
cmp edx, 16
|
||||
jb @f
|
||||
sub edx, 16
|
||||
mov [Reg],edx ; PgUp
|
||||
jmp red
|
||||
@@:
|
||||
xor edx, edx
|
||||
mov [Reg], edx
|
||||
jmp red
|
||||
|
||||
.bt6:
|
||||
cmp ah, 6
|
||||
jne still
|
||||
mcall 37, 1 ; get the mouse pointer
|
||||
shr eax, 16 ; only X needed
|
||||
sub eax, 124 ; check the left border
|
||||
jb red
|
||||
xor edx, edx
|
||||
mov ebx, 12
|
||||
div ebx
|
||||
cmp eax, 32 ; check the right border
|
||||
jnb red
|
||||
mov ecx, 31
|
||||
sub ecx, eax ; reverse the bit order
|
||||
mov ebx, [Rct]
|
||||
btc ebx, ecx ; invert the bit
|
||||
mov eax, [Reg]
|
||||
mov [Rct], ebx
|
||||
call write_sb_pm2_reg
|
||||
|
||||
jmp red
|
||||
|
||||
|
||||
;------------------------------------------------
|
||||
print_config_reg:
|
||||
;------------------------------------------------
|
||||
mov eax, [Reg]
|
||||
; and eax, 0x0FF
|
||||
mov ebx, 3*65536+256 ; 3 hex digits
|
||||
mov ecx, eax
|
||||
mov dx,[stX]
|
||||
shl edx,16 ; = X*65536
|
||||
mov dx,[stY] ; = edx + Y
|
||||
mov esi,0
|
||||
mcall 47 ; print reg#
|
||||
mov ecx, edx
|
||||
call read_sb_pm2_reg
|
||||
mov edx, ecx
|
||||
mov ecx, eax
|
||||
add edx, 36*65536 ; right column
|
||||
mov ebx, 8*65536+256 ; 8 hex digits
|
||||
mcall 47 ; print config data
|
||||
ret
|
||||
|
||||
;------------------------------------------------
|
||||
read_sb_pm2_reg:
|
||||
; in: [Reg] = reg# | out: eax = [Rct] = data
|
||||
;------------------------------------------------
|
||||
mov dx, SB_PM2_INDEX
|
||||
xor eax, eax
|
||||
mov al, byte [Reg]
|
||||
out dx, al
|
||||
inc dl
|
||||
in al, dx
|
||||
mov [Rct], eax
|
||||
ret
|
||||
|
||||
;------------------------------------------------
|
||||
write_sb_pm2_reg:
|
||||
; in: [Reg] = reg#; [Rct] = data
|
||||
;------------------------------------------------
|
||||
mov dx, SB_PM2_INDEX
|
||||
xor eax, eax
|
||||
mov al, byte [Reg]
|
||||
out dx, al
|
||||
inc dl
|
||||
mov eax, [Rct]
|
||||
out dx, al
|
||||
ret
|
||||
|
||||
|
||||
;------------------------------------------------
|
||||
draw_window:
|
||||
;------------------------------------------------
|
||||
|
||||
|
||||
mcall 12, 1
|
||||
mcall 0, 600*65536+530, 410*65536+290, 0x14848090,,title
|
||||
; -----------------------------------------------------------------
|
||||
; BUTTONS: Xleft Xwid, Ytop Yheig
|
||||
mcall 8, 370*65536+ 40, 26*65536+ 18, 2, 0x94A0B0 ; <<
|
||||
mcall , , 51*65536+ 18, 3, ; >>
|
||||
mcall , 425*65536+ 90, 26*65536+ 18, 4, ; Next Page
|
||||
mcall , , 51*65536+ 18, 5, ; Prev Page
|
||||
mcall , 117*65536+400, 97*65536+ 40, 6, ; Bits
|
||||
|
||||
call read_sb_pm2_reg
|
||||
|
||||
mov ebx, bitstr2
|
||||
inc ebx
|
||||
mov edx, [Rct]
|
||||
mov ecx, 0x80000000
|
||||
xor eax, eax
|
||||
.stringtest:
|
||||
test edx, ecx
|
||||
jz @f
|
||||
mov byte [ebx+eax*2],'I' ; bit dump
|
||||
jmp .nextbit
|
||||
@@:
|
||||
mov byte [ebx+eax*2],'0'
|
||||
.nextbit:
|
||||
inc eax
|
||||
shr ecx, 1
|
||||
jnz .stringtest
|
||||
|
||||
; button txt: X *65536+ Y
|
||||
mcall 4, 378*65536+32 ,0x10000000, butstr2,3
|
||||
mcall , 378*65536+57 , , butstr3,
|
||||
mcall , 436*65536+32 , , butstr4,9
|
||||
mcall , 436*65536+57 , , butstr5,
|
||||
|
||||
mcall 4, 122*65536+101,0 , bitstr0,65
|
||||
mcall , 122*65536+110,0 , bitstr1,65
|
||||
mcall , 122*65536+117,0 , bitstr2,65
|
||||
mcall , 122*65536+126,0 , bitstr3,65
|
||||
; -----------------------------------------------------------------
|
||||
; draw the reg-value box
|
||||
mov ebx, 10*65536+100 ; Xleft | Xwidth
|
||||
mov ecx, 26*65536+250 ; Ytop | Yheight
|
||||
mov edx, BOX_COLOR
|
||||
mcall 13
|
||||
; draw the reg-address box
|
||||
mov ebx, 206*65536+146 ; Xleft | Xwidth
|
||||
mov cx, 44 ; Yheight only
|
||||
mcall 13
|
||||
|
||||
; fill the data box
|
||||
mov bx, 40 ; upper position
|
||||
mov [stY],bx
|
||||
mov eax, [Reg]
|
||||
mov [reg], eax ; store original#
|
||||
.print_reg_names:
|
||||
call print_config_reg
|
||||
add [stY],14
|
||||
inc [Reg]
|
||||
mov edx,[reg]
|
||||
mov eax, 16
|
||||
add eax, edx
|
||||
cmp eax,[Reg]
|
||||
ja .print_reg_names
|
||||
mov [Reg], edx ; restore original#
|
||||
|
||||
; fill the status box
|
||||
mcall 4, 210*65536+30,0,str1,12
|
||||
mcall , 210*65536+44, ,str2,
|
||||
mcall , 210*65536+56, ,str3,
|
||||
call read_sb_pm2_reg
|
||||
mov ecx, SB_PM2_DATA
|
||||
mov edx, 300*65536+30
|
||||
mov ebx, 8*65536+256
|
||||
mcall 47
|
||||
add dx, 14
|
||||
mov ecx,[Reg]
|
||||
mov esi, 0
|
||||
mcall 47
|
||||
add dx,14
|
||||
mov ecx, [Rct]
|
||||
mcall 47
|
||||
|
||||
; print extra info
|
||||
mov ebx, 120*65536+170
|
||||
xor ecx, ecx
|
||||
mov edx, info1
|
||||
@@:
|
||||
mcall 4,,,,66
|
||||
add edx, 66
|
||||
add ebx, 14
|
||||
cmp edx, info_end
|
||||
jb @b
|
||||
|
||||
|
||||
mcall 12, 2 ; äãªæ¨ï 12: á®®¡é¨âì Ž‘ ®¡ ®âà¨á®¢ª¥ ®ª
|
||||
|
||||
ret
|
||||
|
||||
|
||||
align 4
|
||||
;-------------------------------------------------
|
||||
|
||||
pix dd 0x55AACC33
|
||||
pxX dd 200
|
||||
pxY dd 160
|
||||
stX dw 18
|
||||
stY dw 0
|
||||
reg dd 0
|
||||
|
||||
Rct dd 0 ; reg content
|
||||
Reg dd 0x00 ; reg number
|
||||
|
||||
|
||||
title db ' SB710 PowerManagement (Block2) registers - PM2_Reg',0
|
||||
;------------------------------------------------------------------------------------
|
||||
reg_str db 'Reg#| hex.Value '
|
||||
;------------------------------------------------------------------------------------
|
||||
str1 db 'bdf address:'
|
||||
str2 db 'Reg. number:'
|
||||
str3 db 'Reg.content:'
|
||||
|
||||
butstr2 db ' << '
|
||||
butstr3 db ' >> '
|
||||
butstr4 db 'Next Page'
|
||||
butstr5 db 'Prev Page'
|
||||
|
||||
bitstr0 db '31',209,205,209,205,209,205,209,205,209,205,209,205,'24',\
|
||||
209,205,209,205,209,205,209,205,209,205,209,205,209,205,'16',\
|
||||
209,'15',205,209,205,209,205,209,205,209,205,209,205,209,'8',\
|
||||
205,'7',209,205,209,205,209,205,209,205,209,205,209,205,209,'0',184
|
||||
bitstr1 db 179,' | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ',179
|
||||
bitstr2 db 179,'1 0 9 8',179,'7 6 5 4',179,'3 2 1 0',179,'9 8 7 6',\
|
||||
179,'5 4 3 2',179,'1 0 9 8',179,'7 6 5 4',179,'3 2 1 0',179
|
||||
bitstr3 db 212,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
|
||||
205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
|
||||
205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
|
||||
205,207,205,207,205,207,205,207,205,207,205,190
|
||||
|
||||
info1 db '------------- PM2 REG ------------'
|
||||
db '| see AMD SB700/710/750 Register Reference Guide, pp.228-258 |'
|
||||
info2 db '| reg |'
|
||||
db '| reg |'
|
||||
db '| reg |'
|
||||
db '| reg |'
|
||||
db '| reg F6: Gpm3-0pull; F7: Gpm7-4pull; F8: Gpm9-8pull |'
|
||||
db '------------------------------------------------------------------'
|
||||
info_end:
|
||||
|
||||
I_END: ; end of program
|
||||
|
||||
rd 256
|
||||
|
||||
align 256
|
||||
st_0:
|
314
kernel/branches/Kolibri-A/utilities/SB700/SB_PM_RG.ASM
Normal file
314
kernel/branches/Kolibri-A/utilities/SB700/SB_PM_RG.ASM
Normal file
@ -0,0 +1,314 @@
|
||||
$Revision: 1598 $
|
||||
|
||||
use32 ;
|
||||
org 0x0 ;
|
||||
|
||||
db 'MENUET01' ;
|
||||
dd 0x01 ;
|
||||
dd START ;
|
||||
dd I_END ;
|
||||
dd 0x1000 ;
|
||||
dd 0x1000 ;
|
||||
dd 0x0 ;
|
||||
dd 0x0 ;
|
||||
|
||||
include 'MACROS.INC' ;
|
||||
|
||||
SB_PM_INDEX equ 0xCD6
|
||||
SB_PM_DATA equ 0xCD7
|
||||
BOX_COLOR equ 0xD0C8C0
|
||||
|
||||
START:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
red:
|
||||
|
||||
call draw_window
|
||||
|
||||
still:
|
||||
mcall 10 ; event waiting
|
||||
|
||||
cmp eax,1 ; redraw window
|
||||
je red ;
|
||||
cmp eax,2 ; key pressed?
|
||||
je key ;
|
||||
cmp eax,3 ; button hit?
|
||||
je button ;
|
||||
|
||||
jmp still ; none of that
|
||||
|
||||
;---------------------------------------------------------------------
|
||||
|
||||
key: ; key pressed
|
||||
jmp red
|
||||
|
||||
;---------------------------------------------------------------------
|
||||
|
||||
button:
|
||||
mcall 17 ; get the button ID
|
||||
cmp ah, 1
|
||||
jne .bt2
|
||||
mcall -1
|
||||
.bt2:
|
||||
cmp ah, 2
|
||||
jne .bt3
|
||||
dec [Reg] ; Rg# decrement
|
||||
jmp red
|
||||
.bt3:
|
||||
cmp ah, 3
|
||||
jne .bt4
|
||||
inc [Reg] ; Rg# increment
|
||||
jmp red
|
||||
.bt4:
|
||||
cmp ah, 4
|
||||
jne .bt5
|
||||
add [Reg],16 ; PgDn
|
||||
jmp red
|
||||
.bt5:
|
||||
cmp ah, 5
|
||||
jne .bt6
|
||||
mov edx, [Reg]
|
||||
cmp edx, 16
|
||||
jb @f
|
||||
sub edx, 16
|
||||
mov [Reg],edx ; PgUp
|
||||
jmp red
|
||||
@@:
|
||||
xor edx, edx
|
||||
mov [Reg], edx
|
||||
jmp red
|
||||
|
||||
.bt6:
|
||||
cmp ah, 6
|
||||
jne still
|
||||
mcall 37, 1 ; get the mouse pointer
|
||||
shr eax, 16 ; only X needed
|
||||
sub eax, 124 ; check the left border
|
||||
jb red
|
||||
xor edx, edx
|
||||
mov ebx, 12
|
||||
div ebx
|
||||
cmp eax, 32 ; check the right border
|
||||
jnb red
|
||||
mov ecx, 31
|
||||
sub ecx, eax ; reverse the bit order
|
||||
mov ebx, [Rct]
|
||||
btc ebx, ecx ; invert the bit
|
||||
mov eax, [Reg]
|
||||
mov [Rct], ebx
|
||||
call write_sb_pm_reg
|
||||
|
||||
jmp red
|
||||
|
||||
|
||||
;------------------------------------------------
|
||||
print_config_reg:
|
||||
;------------------------------------------------
|
||||
mov eax, [Reg]
|
||||
; and eax, 0x0FF
|
||||
mov ebx, 3*65536+256 ; 3 hex digits
|
||||
mov ecx, eax
|
||||
mov dx,[stX]
|
||||
shl edx,16 ; = X*65536
|
||||
mov dx,[stY] ; = edx + Y
|
||||
mov esi,0
|
||||
mcall 47 ; print reg#
|
||||
mov ecx, edx
|
||||
call read_sb_pm_reg
|
||||
mov edx, ecx
|
||||
mov ecx, eax
|
||||
add edx, 36*65536 ; right column
|
||||
mov ebx, 8*65536+256 ; 8 hex digits
|
||||
mcall 47 ; print config data
|
||||
ret
|
||||
|
||||
;------------------------------------------------
|
||||
read_sb_pm_reg:
|
||||
; in: [Reg] = reg# | out: eax = [Rct] = data
|
||||
;------------------------------------------------
|
||||
mov dx, SB_PM_INDEX
|
||||
xor eax, eax
|
||||
mov al, byte [Reg]
|
||||
out dx, al
|
||||
inc dl
|
||||
in al, dx
|
||||
mov [Rct], eax
|
||||
ret
|
||||
|
||||
;------------------------------------------------
|
||||
write_sb_pm_reg:
|
||||
; in: [Reg] = reg#; [Rct] = data
|
||||
;------------------------------------------------
|
||||
mov dx, SB_PM_INDEX
|
||||
xor eax, eax
|
||||
mov al, byte [Reg]
|
||||
out dx, al
|
||||
inc dl
|
||||
mov eax, [Rct]
|
||||
out dx, al
|
||||
ret
|
||||
|
||||
|
||||
;------------------------------------------------
|
||||
draw_window:
|
||||
;------------------------------------------------
|
||||
|
||||
|
||||
mcall 12, 1
|
||||
mcall 0, 600*65536+530, 410*65536+290, 0x14748090,,title
|
||||
; -----------------------------------------------------------------
|
||||
; BUTTONS: Xleft Xwid, Ytop Yheig
|
||||
mcall 8, 370*65536+ 40, 26*65536+ 18, 2, 0x94A0B0 ; <<
|
||||
mcall , , 51*65536+ 18, 3, ; >>
|
||||
mcall , 425*65536+ 90, 26*65536+ 18, 4, ; Next Page
|
||||
mcall , , 51*65536+ 18, 5, ; Prev Page
|
||||
mcall , 117*65536+400, 97*65536+ 40, 6, ; Bits
|
||||
|
||||
call read_sb_pm_reg
|
||||
|
||||
mov ebx, bitstr2
|
||||
inc ebx
|
||||
mov edx, [Rct]
|
||||
mov ecx, 0x80000000
|
||||
xor eax, eax
|
||||
.stringtest:
|
||||
test edx, ecx
|
||||
jz @f
|
||||
mov byte [ebx+eax*2],'I' ; bit dump
|
||||
jmp .nextbit
|
||||
@@:
|
||||
mov byte [ebx+eax*2],'0'
|
||||
.nextbit:
|
||||
inc eax
|
||||
shr ecx, 1
|
||||
jnz .stringtest
|
||||
|
||||
; button txt: X *65536+ Y
|
||||
mcall 4, 378*65536+32 ,0x10000000, butstr2,3
|
||||
mcall , 378*65536+57 , , butstr3,
|
||||
mcall , 436*65536+32 , , butstr4,9
|
||||
mcall , 436*65536+57 , , butstr5,
|
||||
|
||||
mcall 4, 122*65536+101,0 , bitstr0,65
|
||||
mcall , 122*65536+110,0 , bitstr1,65
|
||||
mcall , 122*65536+117,0 , bitstr2,65
|
||||
mcall , 122*65536+126,0 , bitstr3,65
|
||||
; -----------------------------------------------------------------
|
||||
; draw the reg-value box
|
||||
mov ebx, 10*65536+100 ; Xleft | Xwidth
|
||||
mov ecx, 26*65536+250 ; Ytop | Yheight
|
||||
mov edx, BOX_COLOR
|
||||
mcall 13
|
||||
; draw the reg-address box
|
||||
mov ebx, 206*65536+146 ; Xleft | Xwidth
|
||||
mov cx, 44 ; Yheight only
|
||||
mcall 13
|
||||
|
||||
; fill the data box
|
||||
mov bx, 40 ; upper position
|
||||
mov [stY],bx
|
||||
mov eax, [Reg]
|
||||
mov [reg], eax ; store original#
|
||||
.print_reg_names:
|
||||
call print_config_reg
|
||||
add [stY],14
|
||||
inc [Reg]
|
||||
mov edx,[reg]
|
||||
mov eax, 16
|
||||
add eax, edx
|
||||
cmp eax,[Reg]
|
||||
ja .print_reg_names
|
||||
mov [Reg], edx ; restore original#
|
||||
|
||||
; fill the status box
|
||||
mcall 4, 210*65536+30,0,str1,12
|
||||
mcall , 210*65536+44, ,str2,
|
||||
mcall , 210*65536+56, ,str3,
|
||||
call read_sb_pm_reg
|
||||
mov ecx, SB_PM_DATA
|
||||
mov edx, 300*65536+30
|
||||
mov ebx, 8*65536+256
|
||||
mcall 47
|
||||
add dx, 14
|
||||
mov ecx,[Reg]
|
||||
mov esi, 0
|
||||
mcall 47
|
||||
add dx,14
|
||||
mov ecx, [Rct]
|
||||
mcall 47
|
||||
|
||||
; print extra info
|
||||
mov ebx, 120*65536+170
|
||||
xor ecx, ecx
|
||||
mov edx, info1
|
||||
@@:
|
||||
mcall 4,,,,66
|
||||
add edx, 66
|
||||
add ebx, 14
|
||||
cmp edx, info_end
|
||||
jb @b
|
||||
|
||||
|
||||
mcall 12, 2 ; äãªæ¨ï 12: á®®¡é¨âì Ž‘ ®¡ ®âà¨á®¢ª¥ ®ª
|
||||
|
||||
ret
|
||||
|
||||
|
||||
align 4
|
||||
;-------------------------------------------------
|
||||
|
||||
pix dd 0x55AACC33
|
||||
pxX dd 200
|
||||
pxY dd 160
|
||||
stX dw 18
|
||||
stY dw 0
|
||||
reg dd 0
|
||||
|
||||
Rct dd 0 ; reg content
|
||||
Reg dd 0x00 ; reg number
|
||||
|
||||
|
||||
title db ' SB710 PowerManagement registers - PM_Reg',0
|
||||
;------------------------------------------------------------------------------------
|
||||
reg_str db 'Reg#| hex.Value '
|
||||
;------------------------------------------------------------------------------------
|
||||
str1 db 'bdf address:'
|
||||
str2 db 'Reg. number:'
|
||||
str3 db 'Reg.content:'
|
||||
|
||||
butstr2 db ' << '
|
||||
butstr3 db ' >> '
|
||||
butstr4 db 'Next Page'
|
||||
butstr5 db 'Prev Page'
|
||||
|
||||
bitstr0 db '31',209,205,209,205,209,205,209,205,209,205,209,205,'24',\
|
||||
209,205,209,205,209,205,209,205,209,205,209,205,209,205,'16',\
|
||||
209,'15',205,209,205,209,205,209,205,209,205,209,205,209,'8',\
|
||||
205,'7',209,205,209,205,209,205,209,205,209,205,209,205,209,'0',184
|
||||
bitstr1 db 179,' | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ',179
|
||||
bitstr2 db 179,'1 0 9 8',179,'7 6 5 4',179,'3 2 1 0',179,'9 8 7 6',\
|
||||
179,'5 4 3 2',179,'1 0 9 8',179,'7 6 5 4',179,'3 2 1 0',179
|
||||
bitstr3 db 212,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
|
||||
205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
|
||||
205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
|
||||
205,207,205,207,205,207,205,207,205,207,205,190
|
||||
|
||||
info1 db '------------- PM REG -------------'
|
||||
db '| see AMD SB700/710/750 Register Reference Guide, pp.174-223 |'
|
||||
info2 db '| |'
|
||||
db '| reg |'
|
||||
db '| reg |'
|
||||
db '| reg |'
|
||||
db '| reg |'
|
||||
db '------------------------------------------------------------------'
|
||||
info_end:
|
||||
|
||||
I_END: ; end of program
|
||||
|
||||
rd 256
|
||||
|
||||
align 256
|
||||
st_0:
|
Loading…
Reference in New Issue
Block a user