Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c98cf0cb9e | ||
|
|
71ba6e1661 |
No files matched your search
+1
-1
@@ -434,7 +434,7 @@ tup.append_table(img_files, {
|
||||
{"FSPEED", VAR_PROGS .. "/testing/fspeed/fspeed"},
|
||||
{"GMON", VAR_PROGS .. "/system/gmon/gmon"},
|
||||
{"HDD_INFO", VAR_PROGS .. "/system/hdd_info/hdd_info"},
|
||||
{"KBD", VAR_PROGS .. "/testing/kbd/kbd"},
|
||||
{"KBD", VAR_PROGS .. "/system/kbd/kbd"},
|
||||
{"KPACK", VAR_PROGS .. "/other/kpack/kpack"},
|
||||
{"LAUNCHER", VAR_PROGS .. "/system/launcher/launcher"},
|
||||
{"LOADDRV", VAR_PROGS .. "/system/loaddrv/loaddrv"},
|
||||
|
||||
@@ -26,7 +26,7 @@ fspeed;
|
||||
gmon;Информация о загрузке системы;asm;http://git.kolibrios.org/KolibriOS/kolibrios/src/branch/main/programs/system/gmon;http://board.kolibrios.org/viewtopic.php?t=470;http://wiki.kolibrios.org/wiki/Gmon/ru
|
||||
graph;Построение графиков;c (msvc);http://git.kolibrios.org/KolibriOS/kolibrios/src/branch/main/programs/other/graph;http://board.kolibrios.org/viewtopic.php?t=1059;http://wiki.kolibrios.org/wiki/Graph/ru
|
||||
hdd_info;Информация о физических дисках;asm;http://git.kolibrios.org/KolibriOS/kolibrios/src/branch/main/programs/system/hdd_info;http://board.kolibrios.org/viewtopic.php?t=1318;http://wiki.kolibrios.org/wiki/Hdd_info/ru
|
||||
kbd;Утилита, позволяющая отключить южный мост на материнской плате для экономии электроэнергии;asm;http://git.kolibrios.org/KolibriOS/kolibrios/src/branch/main/programs/testing/kbd;;http://wiki.kolibrios.org/wiki/KBD_(Kolibri_Bus_Disconnect)
|
||||
kbd;Утилита, позволяющая отключить южный мост на материнской плате для экономии электроэнергии;asm;http://git.kolibrios.org/KolibriOS/kolibrios/src/branch/main/programs/system/kbd;;http://wiki.kolibrios.org/wiki/KBD_(Kolibri_Bus_Disconnect)
|
||||
kpack;Cистемный упаковщик и распаковщик;asm;http://git.kolibrios.org/KolibriOS/kolibrios/src/branch/main/programs/other/kpack;http://board.kolibrios.org/viewtopic.php?t=355;http://wiki.kolibrios.org/wiki/Kpack/ru
|
||||
launcher;Запуск программ при старте системы;asm;http://git.kolibrios.org/KolibriOS/kolibrios/src/branch/main/programs/system/launcher;http://board.kolibrios.org/viewtopic.php?t=2454;
|
||||
loaddrv;Утилита для ручной загрузки драйверов;asm;http://git.kolibrios.org/KolibriOS/kolibrios/src/branch/main/programs/system/loaddrv;;
|
||||
|
||||
|
@@ -66,7 +66,7 @@ fasm system\docpack\docpack.asm %BIN%\docpack
|
||||
fasm system\end\end.asm %BIN%\end
|
||||
fasm system\gmon\gmon.asm %BIN%\gmon
|
||||
fasm system\icon\icon.asm %BIN%\icon
|
||||
fasm testing\kbd\kbd.ASM %BIN%\kbd
|
||||
fasm system\kbd\kbd.asm %BIN%\kbd
|
||||
fasm system\launcher\launcher.asm %BIN%\launcher
|
||||
fasm system\menu\menu.asm %BIN%\@menu
|
||||
fasm testing\mgb\mgb.asm %BIN%\mgb
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
if tup.getconfig("NO_FASM") ~= "" then return end
|
||||
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR")
|
||||
tup.include(HELPERDIR .. "/use_fasm.lua")
|
||||
tup.rule("kbd.asm", FASM .. " -dlang=" .. tup.getconfig("LANG") .. " %f %o" .. tup.getconfig("KPACK_CMD"), "kbd")
|
||||
@@ -0,0 +1,657 @@
|
||||
; SPDX-License-Identifier: NOASSERTION
|
||||
;
|
||||
; KBD - Kolibri Bus Disconnect
|
||||
;
|
||||
; Authors: Ilya Mikhailov (Ghost)
|
||||
|
||||
; ====================================================================
|
||||
|
||||
use32
|
||||
org 0
|
||||
|
||||
; ====================================================================
|
||||
|
||||
db "MENUET01" ; 8-byte signature
|
||||
dd 1 ; header version
|
||||
dd START ; entry point
|
||||
dd I_END ; image size
|
||||
dd MEM ; total memory
|
||||
dd STACKTOP ; esp
|
||||
dd PARAMS ; I_Param: cmdline buffer
|
||||
dd 0 ; I_Path: unused
|
||||
|
||||
; ====================================================================
|
||||
|
||||
include "../../macros.inc"
|
||||
include "../../KOSfuncs.inc"
|
||||
include "../../encoding.inc"
|
||||
|
||||
; ====================================================================
|
||||
|
||||
START:
|
||||
call find_north_bridge
|
||||
|
||||
; "BOOT" cmdline -> enable disconnect on boot, then exit
|
||||
cmp dword [PARAMS], "BOOT"
|
||||
jne .gui
|
||||
test dword [bd_id], -1 ; nothing to enable if not found
|
||||
jz controller_not_found
|
||||
call set_bd_stat
|
||||
mcall SF_TERMINATE_PROCESS
|
||||
|
||||
; GUI mode: always show the window, even if no controller was found
|
||||
.gui:
|
||||
mcall SF_SET_EVENTS_MASK, EVM_REDRAW + EVM_BUTTON
|
||||
jmp draw_window
|
||||
|
||||
; ====================================================================
|
||||
|
||||
controller_not_found:
|
||||
; notify the user, then terminate
|
||||
mcall SF_FILE, notify_info
|
||||
mcall SF_TERMINATE_PROCESS
|
||||
|
||||
; ====================================================================
|
||||
|
||||
still:
|
||||
mcall SF_WAIT_EVENT
|
||||
|
||||
cmp al, EV_REDRAW
|
||||
je draw_window
|
||||
cmp al, EV_BUTTON
|
||||
je button
|
||||
|
||||
jmp still
|
||||
|
||||
; ====================================================================
|
||||
|
||||
draw_window:
|
||||
mcall SF_STYLE_SETTINGS, SSF_GET_COLORS, sc, sizeof.system_colors
|
||||
mcall SF_REDRAW, SSF_BEGIN_DRAW
|
||||
|
||||
mov edx, [sc.work]
|
||||
or edx, 0x13000000
|
||||
mcall SF_CREATE_WINDOW, <100, 300>, <100, 90>, , , title
|
||||
|
||||
; labels (reuse eax = SF_DRAW_TEXT, ecx = text color + null-term flag)
|
||||
mov ecx, [sc.work_text]
|
||||
or ecx, 0x80000000 ; null-terminated strings
|
||||
mcall SF_DRAW_TEXT, <17, 30>, , msg_nb
|
||||
|
||||
mov edx, [nb_name]
|
||||
mcall , <105, 30>
|
||||
|
||||
mcall , <17, 40>, , msg_stat
|
||||
mcall , <102, 50>, , msg_divs
|
||||
mcall , <17, 62>, , msg_hdd
|
||||
mcall , <17, 72>, , msg_sgd
|
||||
|
||||
; HDD and SGD divisor values
|
||||
call get_divs
|
||||
mov ecx, [val_hdd]
|
||||
mov edx, 8
|
||||
shl edx, cl
|
||||
mov ecx, edx ; ecx = HDD divisor
|
||||
mcall SF_DRAW_NUMBER, 0x30000, , <80, 62>, [sc.work_text]
|
||||
|
||||
mov ecx, [val_sgd]
|
||||
mov edx, 8
|
||||
shl edx, cl
|
||||
mov ecx, edx ; ecx = SGD divisor
|
||||
mcall , , , <80, 72>
|
||||
|
||||
; status text (Enabled / Disabled / Not found)
|
||||
call get_bd_stat
|
||||
mov edx, msg_nf
|
||||
mov al, [bd_stat]
|
||||
test al, al
|
||||
jz @f
|
||||
mov edx, msg_dis
|
||||
dec al
|
||||
jz @f
|
||||
mov edx, msg_en
|
||||
|
||||
@@:
|
||||
mov ecx, [sc.work_text]
|
||||
or ecx, 0x80000000
|
||||
mcall SF_DRAW_TEXT, <105, 40>
|
||||
|
||||
; status toggle button
|
||||
mcall SF_DEFINE_BUTTON, <220, 70>, <27, 20>, 2, [sc.work_button]
|
||||
|
||||
; 14 divisor buttons (two rows of 7)
|
||||
mov edi, 7
|
||||
mpack ecx, 60, 10
|
||||
mov eax, SF_DEFINE_BUTTON
|
||||
mpack ebx, 105, 25
|
||||
mov edx, 3
|
||||
|
||||
@@:
|
||||
mcall
|
||||
inc edx
|
||||
add ebx, 27 shl 16
|
||||
dec edi
|
||||
jnz @b
|
||||
|
||||
add ecx, 12 shl 16
|
||||
mpack ebx, 105, 25
|
||||
mov edi, 7
|
||||
|
||||
@@:
|
||||
mcall
|
||||
inc edx
|
||||
add ebx, 27 shl 16
|
||||
dec edi
|
||||
jnz @b
|
||||
|
||||
mcall SF_REDRAW, SSF_END_DRAW
|
||||
jmp still
|
||||
|
||||
; ====================================================================
|
||||
|
||||
button:
|
||||
mcall SF_GET_BUTTON
|
||||
cmp ah, 1
|
||||
je .exit
|
||||
cmp dword [bd_id], 0
|
||||
jz draw_window ; no controller -> ignore controls
|
||||
cmp ah, 2
|
||||
jne .divisor
|
||||
|
||||
; bus disconnect toggle
|
||||
mov dl, [bd_stat]
|
||||
test dl, dl
|
||||
jz draw_window ; unsupported chipset -> just redraw
|
||||
xor eax, eax
|
||||
dec dl
|
||||
jnz @f
|
||||
inc eax
|
||||
|
||||
@@:
|
||||
call set_bd_stat
|
||||
jmp draw_window
|
||||
|
||||
; HDD divisor (buttons 3..9)
|
||||
.divisor:
|
||||
cmp ah, 9
|
||||
jg .sgd
|
||||
sub ah, 3
|
||||
movzx esi, ah
|
||||
mov edi, [val_sgd]
|
||||
call set_divs
|
||||
jmp draw_window
|
||||
|
||||
.sgd:
|
||||
; SGD divisor (buttons 10..16)
|
||||
sub ah, 10
|
||||
movzx edi, ah
|
||||
mov esi, [val_hdd]
|
||||
call set_divs
|
||||
jmp draw_window
|
||||
|
||||
.exit:
|
||||
mcall SF_TERMINATE_PROCESS
|
||||
|
||||
; ====================================================================
|
||||
|
||||
find_north_bridge:
|
||||
mov bl, 6 ; SF_PCI: read configuration dword
|
||||
xor cl, cl ; register 0 = vendor / device id
|
||||
|
||||
.next_bus:
|
||||
mov bh, [bus_num]
|
||||
mov byte [devfn], 0 ; restart sweep at device 0, function 0
|
||||
|
||||
.next_devfn:
|
||||
mov ch, [devfn]
|
||||
mcall SF_PCI
|
||||
cmp eax, 0xFFFFFFFF ; nothing at this address
|
||||
je .skip
|
||||
|
||||
; look the id up in bd_table
|
||||
mov esi, bd_table_end - bd_table - 8
|
||||
|
||||
.scan:
|
||||
cmp eax, [bd_table + esi]
|
||||
je .found
|
||||
test esi, esi
|
||||
jz .skip
|
||||
sub esi, 8
|
||||
jmp .scan
|
||||
|
||||
.skip:
|
||||
inc byte [devfn]
|
||||
jnz .next_devfn ; wraps 255->0 once all 256 slots swept
|
||||
dec byte [bus_num]
|
||||
jns .next_bus
|
||||
ret
|
||||
|
||||
.found:
|
||||
mov [bd_id], eax
|
||||
movzx eax, word [bd_table + esi + 4] ; name string
|
||||
mov [nb_name], eax
|
||||
movzx eax, word [bd_table + esi + 6] ; mask recipe
|
||||
mov [bd_msk], eax
|
||||
|
||||
ret
|
||||
|
||||
; ====================================================================
|
||||
|
||||
get_bd_stat:
|
||||
mov byte [bd_stat], 1 ; assume disconnect disabled
|
||||
cld
|
||||
mov esi, [bd_msk]
|
||||
lodsw ; al = register, ah = bit mask
|
||||
test al, al
|
||||
jnz .check
|
||||
mov byte [bd_stat], 0 ; empty recipe -> unsupported
|
||||
ret
|
||||
|
||||
.check:
|
||||
push eax
|
||||
mov bh, [bus_num]
|
||||
mov bl, 4 ; SF_PCI: read configuration byte
|
||||
mov ch, [devfn]
|
||||
mov cl, al ; register offset
|
||||
mcall SF_PCI
|
||||
pop edx ; dl = register, dh = bit mask
|
||||
and al, dh
|
||||
jnz .enabled ; masked bit set -> enabled
|
||||
|
||||
lodsw ; next register / mask pair
|
||||
test al, al
|
||||
jnz .check
|
||||
ret ; all pairs clear -> stays disabled
|
||||
|
||||
.enabled:
|
||||
mov byte [bd_stat], 2
|
||||
ret
|
||||
|
||||
; ====================================================================
|
||||
|
||||
; IN: eax = 0 -> disable, non-zero -> enable
|
||||
set_bd_stat:
|
||||
cmp dword [bd_id], 0x01E010DE ; nForce2 uses a different register
|
||||
je set_stat_nforce2
|
||||
|
||||
mov edi, eax ; edi = enable flag
|
||||
cld
|
||||
mov esi, [bd_msk]
|
||||
|
||||
.next:
|
||||
lodsw ; al = register, ah = bit mask
|
||||
test al, al
|
||||
jz .done ; end of recipe
|
||||
|
||||
mov dl, ah ; dl = bit mask
|
||||
mov bh, [bus_num]
|
||||
mov bl, 4 ; SF_PCI: read configuration byte
|
||||
mov ch, [devfn]
|
||||
mov cl, al ; register offset
|
||||
mcall SF_PCI
|
||||
|
||||
mov bl, 8 ; SF_PCI: write configuration byte
|
||||
test edi, edi
|
||||
jz .clear
|
||||
|
||||
or al, dl ; enable: set the mask bits
|
||||
mov dl, al
|
||||
mcall SF_PCI
|
||||
jmp .next
|
||||
|
||||
.clear:
|
||||
not dl ; disable: clear the mask bits
|
||||
and al, dl
|
||||
mov dl, al
|
||||
mcall SF_PCI
|
||||
jmp .next
|
||||
|
||||
.done:
|
||||
ret
|
||||
|
||||
; ====================================================================
|
||||
|
||||
; IN: eax = 0 -> disable, non-zero -> enable
|
||||
set_stat_nforce2:
|
||||
mov edi, eax ; enable flag (survives mcall)
|
||||
|
||||
mov bh, [bus_num]
|
||||
mov bl, 4 ; SF_PCI: read configuration byte
|
||||
mov ch, [devfn]
|
||||
mov cl, 0x6F
|
||||
mcall SF_PCI
|
||||
|
||||
mov dl, al
|
||||
test edi, edi
|
||||
jz .disable
|
||||
or dl, 0x10 ; enable disconnect
|
||||
jmp .write
|
||||
|
||||
.disable:
|
||||
and dl, 0xEF ; disable disconnect
|
||||
|
||||
.write:
|
||||
mov bl, 8 ; SF_PCI: write configuration byte
|
||||
mcall SF_PCI
|
||||
|
||||
test edi, edi ; C1-HALT fixup applies on enable only
|
||||
jz .done
|
||||
mov bh, [bus_num]
|
||||
mov bl, 8
|
||||
mov ch, [devfn]
|
||||
mov cl, 0x6E
|
||||
mov dl, 1
|
||||
mcall SF_PCI
|
||||
|
||||
.done:
|
||||
ret
|
||||
|
||||
; ====================================================================
|
||||
|
||||
; OUT: val_hdd / val_sgd = current divisor indices (0 = x8, 1 = x16, ...)
|
||||
get_divs:
|
||||
cmp dword [bd_id], 0
|
||||
jnz .read
|
||||
mov dword [val_hdd], 0 ; no controller -> default x8, skip MSR
|
||||
mov dword [val_sgd], 0
|
||||
ret
|
||||
|
||||
.read:
|
||||
; al = HDD divisor code, ah = SGD divisor code, bit 18 = SGD upper range
|
||||
mcall SF_SYS_MISC, SSF_READ_MSR, , 0xC001001b
|
||||
|
||||
; reverse-lookup HDD code -> index
|
||||
mov ecx, 7
|
||||
.find_hdd:
|
||||
cmp [div_hdd + ecx - 1], al
|
||||
je .got_hdd
|
||||
loop .find_hdd
|
||||
|
||||
.got_hdd:
|
||||
dec ecx
|
||||
mov [val_hdd], ecx
|
||||
|
||||
; reverse-lookup SGD code -> index
|
||||
mov ecx, 4
|
||||
.find_sgd:
|
||||
cmp [div_sgd + ecx - 1], ah
|
||||
je .got_sgd
|
||||
loop .find_sgd
|
||||
|
||||
.got_sgd:
|
||||
dec ecx
|
||||
; bit 18 set -> upper SGD range (x128..x512)
|
||||
test eax, 0x40000
|
||||
jz .store
|
||||
add ecx, 4
|
||||
|
||||
.store:
|
||||
mov [val_sgd], ecx
|
||||
ret
|
||||
|
||||
; ====================================================================
|
||||
|
||||
; IN: ESI = HDD index, EDI = SGD index (0 = x8, 1 = x16, ...)
|
||||
set_divs:
|
||||
; eax = MSR low dword, ebx = MSR high dword
|
||||
mcall SF_SYS_MISC, SSF_READ_MSR, , 0xC001001b
|
||||
|
||||
mov al, [div_hdd + esi] ; byte 0 = HDD divisor code
|
||||
mov ah, [div_sgd + edi] ; byte 1 = SGD divisor code
|
||||
and eax, 0xFFFBFFFF ; clear bit 18 (SGD range select)
|
||||
cmp edi, 3
|
||||
jle .write
|
||||
or eax, 0x40000 ; SGD index > 3 -> upper range (bit 18)
|
||||
|
||||
.write:
|
||||
mov edi, eax ; edi = patched low dword
|
||||
mov esi, ebx ; esi = high dword (unchanged)
|
||||
mcall SF_SYS_MISC, SSF_WRITE_MSR ; edx still holds the MSR index
|
||||
ret
|
||||
|
||||
; ====================================================================
|
||||
|
||||
bus_num: db 2 ; scan start bus (walks 2 -> 0)
|
||||
devfn: db 0 ; PCI dev/func scan cursor (reset per bus)
|
||||
bd_id: dd 0 ; Device ID
|
||||
bd_stat: db 0 ; 0 - not found, 1 - disabled, 2 - enabled
|
||||
|
||||
nb_name dd msg_nf
|
||||
bd_msk dd msk_none
|
||||
|
||||
; ====================================================================
|
||||
|
||||
msk_none db 0 ; empty mask = unsupported / "not found"
|
||||
|
||||
; --- AMD ---
|
||||
msk_amd751 db 0x62, 0x06, 0 ; 751, 761
|
||||
nb_amd751 db "AMD 751", 0
|
||||
nb_amd761 db "AMD 761", 0
|
||||
msk_amd762 db 0x62, 0x02, 0x6A, 0x02, 0 ; 762 (two host bridges)
|
||||
nb_amd762 db "AMD 762", 0
|
||||
|
||||
; --- nVIDIA ---
|
||||
msk_nforce db 0xE7, 0x06, 0
|
||||
nb_nforce db "nForce", 0
|
||||
msk_nforce2 db 0x6F, 0x10, 0 ; written via set_stat_nforce2
|
||||
nb_nforce2 db "nForce 2", 0
|
||||
|
||||
; --- SiS ---
|
||||
msk_sis730 db 0x6B, 0x01, 0 ; 730, 733
|
||||
nb_sis730 db "SiS 730", 0
|
||||
nb_sis733 db "SiS 733", 0
|
||||
msk_sis735 db 0x6A, 0x01, 0 ; 735, 740, 745, 755
|
||||
nb_sis735 db "SiS 735", 0
|
||||
nb_sis740 db "SiS 740", 0
|
||||
nb_sis745 db "SiS 745", 0
|
||||
nb_sis755 db "SiS 755", 0
|
||||
msk_sis746 db 0x6C, 0x01, 0 ; 741, 746, 748
|
||||
nb_sis741 db "SiS 741/741GX/M741", 0
|
||||
nb_sis746 db "SiS 746/746DX/746FX", 0
|
||||
nb_sis748 db "SiS 748", 0
|
||||
|
||||
; --- VIA ---
|
||||
msk_viakt133 db 0x52, 0x80, 0 ; KT133, KX133, KLE133
|
||||
nb_viakt133 db "VIA KT133(A)/KM133/KL133/KN133", 0
|
||||
nb_viakx133 db "VIA KX133", 0
|
||||
nb_viakle133 db "VIA KLE133", 0
|
||||
msk_viakt266 db 0x92, 0x80, 0x95, 0x02, 0 ; KT266, KM266, KN266
|
||||
nb_viakt266 db "VIA KT266(A)/KT333", 0
|
||||
nb_viakm266 db "VIA KM266(A)/KL266/KM333", 0
|
||||
nb_viakn266 db "VIA KN266", 0
|
||||
msk_viakt400 db 0xD2, 0x80, 0xD5, 0x02, 0 ; KT400, KM400
|
||||
nb_viakt400 db "VIA KT400(A)/KT600", 0
|
||||
nb_viakm400 db "VIA KM400(A)", 0
|
||||
msk_viakt880 db 0x82, 0x80, 0x85, 0x02, 0 ; KT880
|
||||
nb_viakt880 db "VIA KT880", 0
|
||||
|
||||
; entry: dd pci_id, dw ->name, dw ->mask (8 bytes)
|
||||
bd_table:
|
||||
; AMD
|
||||
dd 0x70061022 ; AMD 751
|
||||
dw nb_amd751
|
||||
dw msk_amd751
|
||||
|
||||
dd 0x700E1022 ; AMD 761
|
||||
dw nb_amd761
|
||||
dw msk_amd751
|
||||
|
||||
dd 0x700C1022 ; AMD 762
|
||||
dw nb_amd762
|
||||
dw msk_amd762
|
||||
|
||||
; nVIDIA
|
||||
dd 0x01A410DE ; nForce
|
||||
dw nb_nforce
|
||||
dw msk_nforce
|
||||
|
||||
dd 0x01E010DE ; nForce 2
|
||||
dw nb_nforce2
|
||||
dw msk_nforce2
|
||||
|
||||
; SiS
|
||||
dd 0x07301039 ; SiS 730
|
||||
dw nb_sis730
|
||||
dw msk_sis730
|
||||
|
||||
dd 0x07331039 ; SiS 733
|
||||
dw nb_sis733
|
||||
dw msk_sis730
|
||||
|
||||
dd 0x07351039 ; SiS 735
|
||||
dw nb_sis735
|
||||
dw msk_sis735
|
||||
|
||||
dd 0x07401039 ; SiS 740
|
||||
dw nb_sis740
|
||||
dw msk_sis735
|
||||
|
||||
dd 0x07411039 ; SiS 741/741GX/M741
|
||||
dw nb_sis741
|
||||
dw msk_sis746
|
||||
|
||||
dd 0x07451039 ; SiS 745
|
||||
dw nb_sis745
|
||||
dw msk_sis735
|
||||
|
||||
dd 0x07461039 ; SiS 746/746DX/746FX
|
||||
dw nb_sis746
|
||||
dw msk_sis746
|
||||
|
||||
dd 0x07481039 ; SiS 748
|
||||
dw nb_sis748
|
||||
dw msk_sis746
|
||||
|
||||
dd 0x07551039 ; SiS 755
|
||||
dw nb_sis755
|
||||
dw msk_sis735
|
||||
|
||||
; VIA
|
||||
dd 0x03051106 ; VIA KT133(A)/KM133/KL133/KN133
|
||||
dw nb_viakt133
|
||||
dw msk_viakt133
|
||||
|
||||
dd 0x03911106 ; VIA KX133
|
||||
dw nb_viakx133
|
||||
dw msk_viakt133
|
||||
|
||||
dd 0x06911106 ; VIA KX133
|
||||
dw nb_viakx133
|
||||
dw msk_viakt133
|
||||
|
||||
dd 0x31121106 ; VIA KLE133
|
||||
dw nb_viakle133
|
||||
dw msk_viakt133
|
||||
|
||||
dd 0x30991106 ; VIA KT266(A)/KT333
|
||||
dw nb_viakt266
|
||||
dw msk_viakt266
|
||||
|
||||
dd 0x31161106 ; VIA KM266(A)/KL266/KM333
|
||||
dw nb_viakm266
|
||||
dw msk_viakt266
|
||||
|
||||
dd 0x31561106 ; VIA KN266
|
||||
dw nb_viakn266
|
||||
dw msk_viakt266
|
||||
|
||||
dd 0x31891106 ; VIA KT400(A)/KT600
|
||||
dw nb_viakt400
|
||||
dw msk_viakt400
|
||||
|
||||
dd 0x32051106 ; VIA KM400(A)
|
||||
dw nb_viakm400
|
||||
dw msk_viakt400
|
||||
|
||||
dd 0x22691106 ; VIA KT880
|
||||
dw nb_viakt880
|
||||
dw msk_viakt880
|
||||
bd_table_end:
|
||||
|
||||
; ====================================================================
|
||||
|
||||
; x8 x16 x32 x64 x128 x256 x512
|
||||
div_hdd: db 0x23, 0x27, 0x2B, 0x2F, 0x63, 0x67, 0x6B ; Halt Disconnect Divisor
|
||||
div_sgd: db 0x12, 0x52, 0x92, 0xD2, 0x12, 0x52, 0x92 ; Stop Grand Divisor
|
||||
; low word of 0xC001001B MSR
|
||||
; HDD\SGD 8 16 32 64 128 256 512
|
||||
; 8 0x1223 0x5223 0x9223 0xD223 | 0x1223 0x5223 0x9223
|
||||
; 16 0x1227 |
|
||||
; 32 0x122B |
|
||||
; 64 0x122F | 0x522F
|
||||
; 128 0x1263 |
|
||||
; 256 0x1267 & bit 18 is clear | & bit 18 is set
|
||||
; 512 0x126B |
|
||||
; ^^^^
|
||||
; ||||_HDD
|
||||
; ||_SGD
|
||||
|
||||
; ====================================================================
|
||||
|
||||
notify_info:
|
||||
dd SSF_START_APP
|
||||
dd 0
|
||||
dd err_msg ; @notify command line
|
||||
dd 0
|
||||
dd 0
|
||||
db "/sys/@notify", 0
|
||||
|
||||
; ====================================================================
|
||||
|
||||
msg_divs db ' x8 x16 x32 x64 x128 x256 x512', 0
|
||||
msg_hdd db 'Hatl Disc.', 0
|
||||
msg_sgd db 'Stop Grand', 0
|
||||
msg_nb db 'North bridge :', 0
|
||||
msg_stat db 'Status :', 0
|
||||
|
||||
if lang eq it_IT
|
||||
title db "Disconnessione bus 2.0", 0
|
||||
|
||||
err_msg db "'KBD\nNorthbridge supportato non trovato' -tdE", 0
|
||||
|
||||
msg_en db "Abilitato", 0
|
||||
msg_dis db "Disabilitato", 0
|
||||
msg_nf db "Non trovato", 0
|
||||
|
||||
else if lang eq ru_RU
|
||||
title cp866 "Отключение шины 2.0", 0
|
||||
|
||||
err_msg cp866 "'KBD\nПоддерживаемый северный мост не найден' -tdE", 0
|
||||
|
||||
msg_en cp866 "Включено", 0
|
||||
msg_dis cp866 "Выключено", 0
|
||||
msg_nf cp866 "Не найдено", 0
|
||||
|
||||
else if lang eq es_ES
|
||||
title db "Desconexion del bus 2.0", 0
|
||||
|
||||
err_msg db "'KBD\nPuente norte compatible no encontrado' -tdE", 0
|
||||
|
||||
msg_en db "Activado", 0
|
||||
msg_dis db "Desactivado", 0
|
||||
msg_nf db "No encontrado", 0
|
||||
|
||||
else ; lang eq en_US
|
||||
title db "Bus Disconnect 2.0", 0
|
||||
|
||||
err_msg db "'KBD\nSupported north bridge not found' -tdE", 0
|
||||
|
||||
msg_en db "Enabled", 0
|
||||
msg_dis db "Disabled", 0
|
||||
msg_nf db "Not found", 0
|
||||
|
||||
end if
|
||||
|
||||
; ====================================================================
|
||||
|
||||
I_END:
|
||||
|
||||
sc system_colors
|
||||
val_hdd dd ?
|
||||
val_sgd dd ?
|
||||
|
||||
PARAMS rb 1024 ; command line buffer (I_Param)
|
||||
rb 2048 ; stack
|
||||
align 16
|
||||
STACKTOP:
|
||||
MEM:
|
||||
@@ -0,0 +1,60 @@
|
||||
# KolibriOS Bus Disconnect
|
||||
|
||||
```text
|
||||
Автор : Михайлов Илья Андреевич aka Ghost
|
||||
Версия : 2.0
|
||||
ОС : KolibriOS
|
||||
Форум : meos.sysbin.com -> Программы -> GMon
|
||||
Почта : ghost.nsk@mail.ru
|
||||
```
|
||||
|
||||
## Поддерживаемые чипсеты:
|
||||
|
||||
- Advanced Micro Devices:
|
||||
- AMD 751
|
||||
- AMD 761
|
||||
- AMD 762
|
||||
|
||||
- nVIDIA:
|
||||
- nForce
|
||||
- nForce 2
|
||||
|
||||
- Silicon Integrated Systems:
|
||||
- SiS 730
|
||||
- SiS 733
|
||||
- SiS 735
|
||||
- SiS 740
|
||||
- SiS 741/741GX/M741
|
||||
- SiS 745
|
||||
- SiS 746/746DX/746FX
|
||||
- SiS 748
|
||||
- SiS 755
|
||||
|
||||
- VIA Technologies:
|
||||
- VIA KT133(A)/KM133/KL133/KN133
|
||||
- VIA KX133
|
||||
- VIA KLE133
|
||||
- VIA KT266(A)/KT333
|
||||
- VIA KM266(A)/KL266/KM333
|
||||
- VIA KN266
|
||||
- VIA KT400(A)/KT600
|
||||
- VIA KM400(A)
|
||||
- VIA KT880
|
||||
|
||||
## Примечание (Heavyiron, 24.10.2006):
|
||||
|
||||
Владельцы данных чипсетов могут (при желании) поместить эту программу в автозагрузку.
|
||||
Для этого в autorun.dat необходимо добавить, например, такую строку:
|
||||
```dat
|
||||
/SYS/KBD BOOT 20 # Enable Bus Disconnect for AMD K7 processors
|
||||
```
|
||||
не забыв при этом увеличить количество запускаемых программ на одну в самом начале autorun.dat.
|
||||
|
||||
## Изменения в версии 2.0
|
||||
|
||||
- Код переписан: разделение кода и данных, компактная таблица детекции (8 байт на запись)
|
||||
- Исправлено сканирование PCI: теперь перебираются все устройства и функции, а не только типовая позиция моста
|
||||
- Исправлен nForce2: добавлен обход ошибки C1-HALT (0x6E=1), без которого включение могло вешать систему
|
||||
- Исправлен SiS 741: использовался неверный регистр (0x6A вместо 0x6C), что могло приводить к зависанию
|
||||
- Уточнены маски регистров (nForce, VIA, SiS 735) по даташитам и athcool — удалены лишние биты
|
||||
- Исправлена таблица детекции: KLE133 (правильный ID 0x3112), добавлены KX133 и SiS 755, удалён несуществующий AMD 751S
|
||||
@@ -1,7 +0,0 @@
|
||||
if tup.getconfig("NO_FASM") ~= "" then return end
|
||||
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR")
|
||||
tup.include(HELPERDIR .. "/use_fasm.lua")
|
||||
add_include(tup.getvariantdir())
|
||||
|
||||
tup.rule("echo lang fix " .. ((tup.getconfig("LANG") == "") and "en_US" or tup.getconfig("LANG")) .. " > %o", {"lang.inc"})
|
||||
tup.rule({"kbd.ASM", extra_inputs = {"lang.inc"}}, FASM .. " %f %o " .. tup.getconfig("KPACK_CMD"), "kbd")
|
||||
@@ -1,2 +0,0 @@
|
||||
@fasm kbd.asm kbd
|
||||
@pause
|
||||
@@ -1,620 +0,0 @@
|
||||
; SPDX-License-Identifier: NOASSERTION
|
||||
;
|
||||
|
||||
; Text encoded with Code Page 866 - Cyrillic
|
||||
|
||||
|
||||
; Kolibri Bus Disconnect
|
||||
; Test for bus disconnect
|
||||
;
|
||||
; Compile with FASM for Menuet
|
||||
;
|
||||
;
|
||||
|
||||
include '../../macros.inc'
|
||||
include 'lang.inc' ; Language support for locales: it_IT, en_US.
|
||||
|
||||
memsize = 1000h
|
||||
org 0
|
||||
PARAMS = memsize - 1024
|
||||
|
||||
appname equ 'Kolibri Bus Disconnect'
|
||||
version equ ' 1.1 '
|
||||
|
||||
use32 ; включить 32-битный режим ассемблера
|
||||
|
||||
db 'MENUET01' ; 8 byte id
|
||||
dd 0x01 ; header version
|
||||
dd START ; start of code
|
||||
dd I_END ; size of image
|
||||
dd memsize ; memory for app
|
||||
dd memsize - 1024 ; esp
|
||||
dd PARAMS , 0x0 ; I_Param , I_Icon
|
||||
|
||||
|
||||
|
||||
;---------------------------------------------------------------------
|
||||
;--- НАЧАЛО ПРОГРАММЫ ----------------------------------------------
|
||||
;---------------------------------------------------------------------
|
||||
|
||||
START:
|
||||
cmp [PARAMS], byte 0
|
||||
jne check_parameters
|
||||
|
||||
no_params:
|
||||
call find_north_bridg
|
||||
|
||||
test dword[bd_id], -1 ; check zero
|
||||
jnz drawwindow
|
||||
|
||||
controller_not_found:
|
||||
push .notify
|
||||
dec esp
|
||||
push 0
|
||||
push 0
|
||||
push .error_message
|
||||
push 0
|
||||
push dword 7 ;SSF_START_APP
|
||||
|
||||
mcall 70, esp
|
||||
add esp, 6*4 + 1
|
||||
mcall -1
|
||||
.error_message:
|
||||
db '"KBD\nController not found" -tdE',0
|
||||
.notify:
|
||||
db '/sys/@notify',0
|
||||
|
||||
drawwindow:
|
||||
mov eax,48
|
||||
mov ebx,3
|
||||
mov ecx,sc
|
||||
mov edx,sizeof.system_colors
|
||||
mcall
|
||||
|
||||
mov eax, 12
|
||||
mov ebx, 1 ; start redraw
|
||||
mcall
|
||||
|
||||
mov eax, 0 ; window
|
||||
mov ebx, 100 shl 16 + 300
|
||||
mov ecx, 100 shl 16 + 90
|
||||
mov edx, [sc.work]
|
||||
or edx, 0x13000000
|
||||
mov edi, title
|
||||
mcall
|
||||
|
||||
mov eax, 4
|
||||
mov ebx, 17 shl 16 + 30
|
||||
mov ecx, [sc.work_text]
|
||||
mov edx, msg_nb
|
||||
mov esi, msg_nb.length
|
||||
mcall
|
||||
|
||||
mov ebx, 105 shl 16 + 30
|
||||
mov edx, [nb_name]
|
||||
movzx esi, byte[edx]
|
||||
inc edx
|
||||
mcall
|
||||
|
||||
mov ebx, 17 shl 16 + 40
|
||||
mov edx, msg_stat
|
||||
mov esi, msg_stat.length
|
||||
mcall
|
||||
|
||||
mov ebx, 102 shl 16 + 50
|
||||
mov edx, msg_divs
|
||||
mov esi, msg_divs.length
|
||||
mcall
|
||||
mov ebx, 17 shl 16 + 62
|
||||
mov edx, msg_hdd
|
||||
mov esi, msg_hdd.length
|
||||
mcall
|
||||
mov ebx, 17 shl 16 + 72
|
||||
mov edx, msg_sgd
|
||||
mov esi, msg_sgd.length
|
||||
mcall
|
||||
|
||||
call get_divs
|
||||
mov eax, 47
|
||||
mov ebx, 0x30000
|
||||
mov ecx, [val_hdd]
|
||||
mov edx, 8
|
||||
shl edx, cl
|
||||
mov ecx, edx
|
||||
mov edx, 80 shl 16 + 62
|
||||
mov esi, [sc.work_text]
|
||||
mcall
|
||||
|
||||
mov ecx, [val_sgd]
|
||||
mov edx, 8
|
||||
shl edx, cl
|
||||
mov ecx, edx
|
||||
mov edx, 80 shl 16 + 72
|
||||
mcall
|
||||
|
||||
|
||||
call get_bd_stat
|
||||
mov ecx, [sc.work_text]
|
||||
mov esi, msg_nf.length
|
||||
mov ebx, 105 shl 16 + 40
|
||||
mov edx, msg_nf
|
||||
mov al, [bd_stat]
|
||||
test al, al
|
||||
jz @f
|
||||
mov edx, msg_dis
|
||||
dec al
|
||||
jz @f
|
||||
mov edx, msg_en
|
||||
mov esi, msg_en.length
|
||||
@@: mov eax, 4
|
||||
mcall
|
||||
|
||||
; Создаём кнопку
|
||||
mov ecx, 27 shl 16 + 20
|
||||
mov eax, 8
|
||||
mov ebx, 220 shl 16 + 70
|
||||
mov esi, [sc.work_button]
|
||||
mov edx, 2
|
||||
mcall
|
||||
|
||||
; И ещё 14 ;)
|
||||
mov edi, 7
|
||||
mov ecx, 60 shl 16 + 10
|
||||
mov eax, 8
|
||||
mov ebx, 105 shl 16 + 25
|
||||
mov edx, 3
|
||||
|
||||
@@: mcall
|
||||
inc edx
|
||||
add ebx, 27 shl 16
|
||||
dec edi
|
||||
jnz @b
|
||||
|
||||
add ecx, 12 shl 16
|
||||
mov ebx, 105 shl 16 + 25
|
||||
mov edi, 7
|
||||
@@: mcall
|
||||
inc edx
|
||||
add ebx, 27 shl 16
|
||||
dec edi
|
||||
jnz @b
|
||||
|
||||
end_dr: mov eax, 12
|
||||
mov ebx, 2 ; end redraw
|
||||
mcall
|
||||
|
||||
; Wait for event ...
|
||||
mov eax, 10
|
||||
mcall
|
||||
|
||||
cmp al, 3
|
||||
jne not_bt
|
||||
|
||||
mov eax, 17 ; get id
|
||||
mcall
|
||||
cmp ah, 1
|
||||
jne no_exit
|
||||
mov eax, -1 ; close this program
|
||||
mcall
|
||||
no_exit:
|
||||
cmp ah, 2
|
||||
jne no_ch_bt
|
||||
mov dl, [bd_stat]
|
||||
test dl, dl
|
||||
jz drawwindow
|
||||
xor eax, eax
|
||||
dec dl
|
||||
jnz @f
|
||||
inc eax
|
||||
@@: call set_bd_stat
|
||||
jmp drawwindow
|
||||
|
||||
no_ch_bt:
|
||||
cmp ah, 9
|
||||
jg no_hdd_bt
|
||||
sub ah, 3
|
||||
movzx esi, ah
|
||||
mov edi, [val_sgd]
|
||||
call set_divs
|
||||
jmp drawwindow
|
||||
no_hdd_bt:
|
||||
sub ah, 10
|
||||
movzx edi, ah
|
||||
mov esi, [val_hdd]
|
||||
call set_divs
|
||||
jmp drawwindow
|
||||
|
||||
|
||||
not_bt: cmp al, 2
|
||||
jne drawwindow
|
||||
mov eax, 2 ; пока клава не поддерживается - читаем и забываем
|
||||
mcall
|
||||
jmp drawwindow
|
||||
;--------------------------------------------------------------------------
|
||||
bus_num: db 2 ; Номер шины
|
||||
devfn: db 255
|
||||
bd_id: dd 0 ; Идентификатор устройства
|
||||
bd_stat: db 0 ; 0 - не найден, 1 - выключен, 2 - включен
|
||||
|
||||
nb_name dd nb_nf
|
||||
bd_msk dd msk_i440
|
||||
|
||||
if lang eq it_IT
|
||||
nb_nf db 11, 'Non trovato'
|
||||
else ; Default to en_US
|
||||
nb_nf db 9, 'Not found'
|
||||
end if
|
||||
msk_i440 db 0
|
||||
nb_i440 db 4, 'i440'
|
||||
msk_nforce db 0x6D, 0x80, 0xE7, 0x06, 0 ; номер регистра, маска, номер регистра, маска, ... , 0
|
||||
nb_nforce db 6, 'nForce'
|
||||
msk_nforce2 db 0x6F, 0x10, 0
|
||||
nb_nforce2 db 8, 'nForce 2'
|
||||
msk_sis730 db 0x6B, 0x01, 0
|
||||
nb_sis730 db 7, 'SiS 730'
|
||||
nb_sis733 db 7, 'SiS 733'
|
||||
msk_sis735 db 0x6A, 0x03, 0
|
||||
nb_sis735 db 7, 'SiS 735'
|
||||
nb_sis740 db 7, 'SiS 740'
|
||||
nb_sis741 db 7, 'SiS 741'
|
||||
nb_sis745 db 7, 'SiS 745'
|
||||
msk_sis746 db 0x6C, 0x01, 0
|
||||
nb_sis746 db 7, 'SiS 746'
|
||||
nb_sis748 db 7, 'SiS 748'
|
||||
msk_amd751 db 0x62, 0x06, 0
|
||||
nb_amd751 db 7, 'AMD 751'
|
||||
nb_amd751s db 8, 'AMD 751S'
|
||||
nb_amd761 db 7, 'AMD 761'
|
||||
msk_amd762 db 0x62, 0x02, 0x6A, 0x02, 0
|
||||
nb_amd762 db 7, 'AMD 762'
|
||||
msk_viakt133 db 0x52, 0x80, 0x70, 0x08, 0
|
||||
nb_viakt133 db 30, 'VIA KT133(A)/KM133/KL133/KN133'
|
||||
nb_viakx133 db 9, 'VIA KX133'
|
||||
nb_viakle133 db 10, 'VIA KLE133'
|
||||
msk_viakt266 db 0x92, 0x80, 0x95, 0x02, 0x70, 0x08, 0
|
||||
nb_viakt266 db 18, 'VIA KT266(A)/KT333'
|
||||
nb_viakm266 db 21, 'VIA KM266/KL266/KM333'
|
||||
nb_viakn266 db 9, 'VIA KN266'
|
||||
msk_viakt400 db 0xD2, 0x80, 0xD5, 0x02, 0x70, 0x08, 0
|
||||
nb_viakt400 db 18, 'VIA KT400(A)/KT600'
|
||||
nb_viakm400 db 9, 'VIA KM400'
|
||||
msk_viakt880 db 0x82, 0x80, 0x85, 0x02, 0
|
||||
nb_viakt880 db 9, 'VIA KT880'
|
||||
|
||||
|
||||
bd_table: dd 0x70061022 ; AMD 751 ----
|
||||
dd nb_amd751
|
||||
dd msk_amd751
|
||||
|
||||
dd 0x70041022 ; AMD 751S
|
||||
dd nb_amd751s
|
||||
dd msk_amd751
|
||||
|
||||
dd 0x700E1022 ; AMD 761
|
||||
dd nb_amd761
|
||||
dd msk_amd751
|
||||
|
||||
dd 0x700C1022 ; AMD 762
|
||||
dd nb_amd762
|
||||
dd msk_amd762
|
||||
|
||||
dd 0x71908086 ; i440 ---
|
||||
dd nb_i440
|
||||
dd msk_i440
|
||||
|
||||
dd 0x01A410DE ; nForce ----
|
||||
dd nb_nforce
|
||||
dd msk_nforce
|
||||
|
||||
dd 0x01E010DE ; nForce 2
|
||||
dd nb_nforce2
|
||||
dd msk_nforce2
|
||||
|
||||
dd 0x07301039 ; SiS 730 ----
|
||||
dd nb_sis730
|
||||
dd msk_sis730
|
||||
|
||||
dd 0x07331039 ; SiS 733
|
||||
dd nb_sis733
|
||||
dd msk_sis730
|
||||
|
||||
dd 0x07351039 ; SiS 735
|
||||
dd nb_sis735
|
||||
dd msk_sis735
|
||||
|
||||
dd 0x07401039 ; SiS 740
|
||||
dd nb_sis740
|
||||
dd msk_sis735
|
||||
|
||||
dd 0x07411039 ; SiS 741
|
||||
dd nb_sis741
|
||||
dd msk_sis735
|
||||
|
||||
dd 0x07451039 ; SiS 745
|
||||
dd nb_sis745
|
||||
dd msk_sis735
|
||||
|
||||
dd 0x07461039 ; SiS 746
|
||||
dd nb_sis746
|
||||
dd msk_sis746
|
||||
|
||||
dd 0x07481039 ; SiS 748
|
||||
dd nb_sis748
|
||||
dd msk_sis746
|
||||
|
||||
dd 0x03051106 ; VIA KT133(A)/KM133/KL133/KN133 ----
|
||||
dd nb_viakt133
|
||||
dd msk_viakt133
|
||||
|
||||
dd 0x03911106 ; VIA KX133
|
||||
dd nb_viakx133
|
||||
dd msk_viakt133
|
||||
|
||||
dd 0x06911106 ; VIA KLE133
|
||||
dd nb_viakle133
|
||||
dd msk_viakt133
|
||||
|
||||
dd 0x30991106 ; VIA KT266(A)/KT333
|
||||
dd nb_viakt266
|
||||
dd msk_viakt266
|
||||
|
||||
dd 0x31161106 ; VIA KM266/KL266/KM333
|
||||
dd nb_viakm266
|
||||
dd msk_viakt266
|
||||
|
||||
dd 0x31561106 ; VIA KN266
|
||||
dd nb_viakn266
|
||||
dd msk_viakt266
|
||||
|
||||
dd 0x31891106 ; VIA KT400(A)/KT600
|
||||
dd nb_viakt400
|
||||
dd msk_viakt400
|
||||
|
||||
dd 0x32051106 ; VIA KM400
|
||||
dd nb_viakm400
|
||||
dd msk_viakt400
|
||||
|
||||
dd 0x22691106 ; VIA KT880
|
||||
dd nb_viakt880
|
||||
dd msk_viakt880
|
||||
bd_table_end:
|
||||
|
||||
|
||||
find_north_bridg:
|
||||
mov bl, 6
|
||||
xor cl, cl
|
||||
nbus: mov bh, [bus_num]
|
||||
ndevfn: mov ch, [devfn]
|
||||
mov eax, 62
|
||||
mcall
|
||||
cmp eax, 0xffffffff
|
||||
je bd_next
|
||||
;---------
|
||||
mov esi, bd_table_end - bd_table - 12
|
||||
@@: cmp eax, [bd_table + esi]
|
||||
je bd_found
|
||||
test esi, esi
|
||||
jz bd_next
|
||||
sub esi, 12
|
||||
jmp @b
|
||||
;---------
|
||||
bd_next:dec byte[devfn]
|
||||
jns ndevfn
|
||||
mov byte[devfn], 0
|
||||
dec byte[bus_num]
|
||||
jns nbus
|
||||
ret
|
||||
bd_found:
|
||||
add esi, bd_table + 4
|
||||
mov edi, nb_name
|
||||
mov ecx, 2
|
||||
rep movsd
|
||||
|
||||
mov [bd_id], eax
|
||||
ret
|
||||
|
||||
;----------------------
|
||||
;bd_stat: db 0 ; 0 - не найден, 1 - выключен, 2 - включен
|
||||
get_bd_stat:
|
||||
mov byte[bd_stat], 1
|
||||
cld
|
||||
mov esi, [bd_msk]
|
||||
lodsw
|
||||
test al, al
|
||||
jnz @f
|
||||
mov byte[bd_stat], 0
|
||||
ret
|
||||
@@: push eax
|
||||
mov bh, [bus_num]
|
||||
mov bl, 4
|
||||
mov ch, [devfn]
|
||||
mov cl, al
|
||||
mov eax, 62
|
||||
mcall
|
||||
pop edx
|
||||
and al, dh
|
||||
jnz @f
|
||||
lodsw
|
||||
test al, al
|
||||
jnz @b
|
||||
ret
|
||||
@@: mov byte[bd_stat], 2
|
||||
ret
|
||||
;----------------------
|
||||
set_bd_stat:
|
||||
cmp dword[bd_id], 0x01E010DE ; специально для nForce2 400
|
||||
je set_stat_nforce2
|
||||
|
||||
mov edi, eax
|
||||
cld
|
||||
mov esi, [bd_msk]
|
||||
bd_ss_nxt:
|
||||
lodsw
|
||||
test al, al
|
||||
jz bd_ss_end
|
||||
mov dl, ah ; маска
|
||||
mov bh, [bus_num]
|
||||
mov bl, 4
|
||||
mov ch, [devfn]
|
||||
mov cl, al
|
||||
mov eax, 62
|
||||
mcall
|
||||
mov bl, 8
|
||||
test edi, edi
|
||||
jz @f
|
||||
or al, dl
|
||||
mov dl, al
|
||||
mov eax, 62
|
||||
mcall
|
||||
jmp bd_ss_nxt
|
||||
@@: not dl
|
||||
and al, dl
|
||||
mov dl, al
|
||||
mov eax, 62
|
||||
mcall
|
||||
jmp bd_ss_nxt
|
||||
bd_ss_end:
|
||||
ret
|
||||
;------- nForce 2 -----------
|
||||
set_stat_nforce2:
|
||||
; IN : eax = 0 - disable, !0 - enable
|
||||
push eax
|
||||
mov bh, [bus_num]
|
||||
mov bl, 4
|
||||
mov ch, [devfn]
|
||||
mov cl, 0x6f
|
||||
mov eax, 62
|
||||
mcall
|
||||
and al, 0x1F
|
||||
mov dl, al
|
||||
mov bl, 8
|
||||
mov eax, 62
|
||||
mcall
|
||||
pop eax
|
||||
test eax, eax
|
||||
jz @f
|
||||
or dl, 0x10
|
||||
mov eax, 62
|
||||
mcall
|
||||
ret
|
||||
@@: and dl, 0xef
|
||||
mov eax, 62
|
||||
mcall
|
||||
ret
|
||||
;--------------------------------------------------------------------------
|
||||
; x8 x16 x32 x64 x128 x256 x512
|
||||
div_hdd: db 0x23, 0x27, 0x2B, 0x2F, 0x63, 0x67, 0x6B ; Halt Disconnect Divisor
|
||||
div_sgd: db 0x12, 0x52, 0x92, 0xD2, 0x12, 0x52, 0x92 ; Stop Grand Divisor
|
||||
; low word of 0xC001001B MSR
|
||||
; HDD\SGD 8 16 32 64 128 256 512
|
||||
; 8 0x1223 0x5223 0x9223 0xD223 | 0x1223 0x5223 0x9223
|
||||
; 16 0x1227 |
|
||||
; 32 0x122B |
|
||||
; 64 0x122F | 0x522F
|
||||
; 128 0x1263 |
|
||||
; 256 0x1267 & bit 18 is clear | & bit 18 is set
|
||||
; 512 0x126B |
|
||||
; ^^^^
|
||||
; ||||_HDD
|
||||
; ||_SGD
|
||||
set_divs:
|
||||
; IN : ESI - hdd (0 = x8, 1 = x16 ..)
|
||||
; EDI - sgd (0 = x8, 1 = x16 ..)
|
||||
mov eax, 68
|
||||
mov ebx, 3
|
||||
mov edx, 0xC001001b
|
||||
mcall
|
||||
mov al, [div_hdd + esi]
|
||||
mov ah, [div_sgd + edi]
|
||||
and eax, 0xFFFBFFFF
|
||||
cmp edi, 3
|
||||
jle @f
|
||||
or eax, 0x40000
|
||||
@@: mov edi, eax
|
||||
mov esi, ebx
|
||||
mov eax, 68
|
||||
mov ebx, 4
|
||||
mcall
|
||||
ret
|
||||
|
||||
get_divs:
|
||||
; OUT : val_hdd - hdd (0 = x8, 1 = x16 ..)
|
||||
; val_sgd - sgd ...
|
||||
mov eax, 68
|
||||
mov ebx, 3
|
||||
mov edx, 0xC001001b
|
||||
mcall
|
||||
mov ecx, 7
|
||||
@@: cmp [div_hdd + ecx - 1], al
|
||||
je @f
|
||||
loop @b
|
||||
@@: dec ecx
|
||||
mov [val_hdd], ecx
|
||||
mov ecx, 4
|
||||
@@: cmp [div_sgd + ecx - 1], ah
|
||||
je @f
|
||||
loop @b
|
||||
@@: dec ecx
|
||||
test eax, 0x40000
|
||||
jz @f
|
||||
add ecx, 4
|
||||
@@: mov [val_sgd], ecx
|
||||
ret
|
||||
|
||||
;******************************************************************************
|
||||
|
||||
check_parameters:
|
||||
cmp [PARAMS], dword "BOOT" ; received BOOT parameter -> goto handler
|
||||
je boot_bd_enable
|
||||
jmp no_params
|
||||
|
||||
;******************************************************************************
|
||||
|
||||
boot_bd_enable:
|
||||
|
||||
call find_north_bridg
|
||||
test dword[bd_id], -1 ; check zero
|
||||
jz controller_not_found
|
||||
|
||||
call set_bd_stat
|
||||
mcall -1
|
||||
|
||||
;******************************************************************************
|
||||
|
||||
|
||||
;--------------------------------------------------------------------------
|
||||
|
||||
title db appname,version,0
|
||||
|
||||
msg_divs db ' x8 x16 x32 x64 x128 x256 x512'
|
||||
.length = $ - msg_divs
|
||||
msg_hdd db 'Hatl Disc.'
|
||||
.length = $ - msg_hdd
|
||||
msg_sgd db 'Stop Grand'
|
||||
.length = $ - msg_sgd
|
||||
msg_nb db 'North bridge :'
|
||||
.length = $ - msg_nb
|
||||
msg_stat db 'Status :'
|
||||
.length = $ - msg_stat
|
||||
|
||||
if lang eq it_IT
|
||||
msg_en db 'Abilitato '
|
||||
.length = $ - msg_en
|
||||
msg_dis db 'Disabilitato'
|
||||
.length = $ - msg_dis
|
||||
msg_nf db 'Non trovato '
|
||||
.length = $ - msg_nf
|
||||
else ; Default to en_US
|
||||
msg_en db 'Enabled '
|
||||
.length = $ - msg_en
|
||||
msg_dis db 'Disabled '
|
||||
.length = $ - msg_dis
|
||||
msg_nf db 'Not found'
|
||||
.length = $ - msg_nf
|
||||
end if
|
||||
|
||||
I_END:
|
||||
|
||||
sc system_colors
|
||||
val_hdd dd ?
|
||||
val_sgd dd ?
|
||||
@@ -1,18 +0,0 @@
|
||||
#!gmake
|
||||
|
||||
FASM=/opt/bin/fasm
|
||||
KPACK=/opt/bin/kpack
|
||||
LANG=lang.inc
|
||||
FILE=kbd
|
||||
SOURCE=${FILE}.ASM
|
||||
OUT=${FILE}.bin
|
||||
|
||||
en:
|
||||
echo "lang fix en_US" > ${LANG}
|
||||
${FASM} ${SOURCE} ${OUT}
|
||||
it:
|
||||
echo "lang fix it_IT" > ${LANG}
|
||||
${FASM} ${SOURCE} ${OUT}
|
||||
|
||||
clean:
|
||||
rm -f ${LANG} ${OUT}
|
||||
@@ -1,45 +0,0 @@
|
||||
Kolibri Bus Disconnect
|
||||
|
||||
└тЄюЁ : ╠шїрщыют ╚ы№ └эфЁххтшў aka Ghost
|
||||
┬хЁёш : юЄ 24/10/06
|
||||
╬╤ : Kolibri
|
||||
forum : meos.sysbin.com -> ╧ЁюуЁрьь√ -> GMon
|
||||
mailto : ghost.nsk@mail.ru
|
||||
|
||||
╧юффхЁцштрхь√х ўшяёхЄ√:
|
||||
|
||||
AMD 751
|
||||
AMD 751S
|
||||
AMD 761
|
||||
AMD 762
|
||||
|
||||
NVIDIA nForce
|
||||
NVIDIA nForce 2 (400)
|
||||
|
||||
SiS 735
|
||||
SiS 740
|
||||
SiS 741
|
||||
SiS 745
|
||||
SiS 730
|
||||
SiS 733
|
||||
SiS 746
|
||||
SiS 748
|
||||
|
||||
VIA KT133(A)/KM133/KL133/KN133 *
|
||||
VIA KX133
|
||||
VIA KLE133
|
||||
VIA KT266(A)/KT333
|
||||
VIA KM266/KL266/KM333
|
||||
VIA KN266
|
||||
VIA KT400(A)/KT600
|
||||
VIA KM400
|
||||
VIA KT880
|
||||
|
||||
╧╨╚╠┼╫└═╚┼: (Heavyiron, 24.10.2006)
|
||||
┬ырфхы№Ў√ фрээ√ї ўшяёхЄют ьюуєЄ (яЁш цхырэшш) яюьхёЄшЄ№
|
||||
¤Єє яЁюуЁрььє т ртЄючруЁєчъє ё ярЁрьхЄЁюь boot. ─ы ¤Єюую т
|
||||
autorun.dat эхюсїюфшью яюьхёЄшЄ№,эряЁшьхЁ, Єръє■ ёЄЁюъє:
|
||||
"/SYS/KBD BOOT 20 # Enable Bus Disconnect for AMD K7 processors",
|
||||
эх чрс√т яЁш ¤Єюь єтхышўшЄ№ ъюышўхёЄтю чряєёърхь√ї яЁюуЁрьь эр юфэє
|
||||
т ёрьюь эрўрых Їрщыр autorun.dat.
|
||||
|
||||
Reference in new issue
Block a user