APU mmio area: hack-ready
git-svn-id: svn://kolibrios.org@3519 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
a0f9d2e236
commit
bcdfe175d7
@ -62,10 +62,6 @@ cfgmanager:
|
|||||||
; mov [es:0x901C], al
|
; mov [es:0x901C], al
|
||||||
|
|
||||||
|
|
||||||
; VRR_M USE
|
|
||||||
|
|
||||||
; mov [es:0x9030], byte 2
|
|
||||||
|
|
||||||
; BOOT DEVICE
|
; BOOT DEVICE
|
||||||
|
|
||||||
xor ax, ax
|
xor ax, ax
|
||||||
|
@ -145,7 +145,7 @@ rs7xx_pcie_init:
|
|||||||
; (eax = phys. address of PCIe conf.space)
|
; (eax = phys. address of PCIe conf.space)
|
||||||
;
|
;
|
||||||
map_pcie_pages:
|
map_pcie_pages:
|
||||||
or eax, (PG_NOCACHE + PG_SHARED + PG_LARGE + PG_UW) ; UW is unsafe, fix it!
|
or eax, (PG_NOCACHE + PG_SHARED + PG_LARGE + PG_UW) ; UW is unsafe!
|
||||||
mov ecx, PCIe_CONFIG_SPACE ; linear address
|
mov ecx, PCIe_CONFIG_SPACE ; linear address
|
||||||
mov ebx, ecx
|
mov ebx, ecx
|
||||||
shr ebx, 20
|
shr ebx, 20
|
||||||
@ -163,13 +163,9 @@ map_pcie_pages:
|
|||||||
add eax, 0x400000 ; +4M phys.
|
add eax, 0x400000 ; +4M phys.
|
||||||
add ecx, 0x400000 ; +4M lin.
|
add ecx, 0x400000 ; +4M lin.
|
||||||
cmp dl, byte[mmio_pcie_cfg_pdes-OS_BASE]
|
cmp dl, byte[mmio_pcie_cfg_pdes-OS_BASE]
|
||||||
jae .pcie_cfg_mapped
|
jae pcie_cfg_mapped
|
||||||
inc dl
|
inc dl
|
||||||
jmp .write_pde
|
jmp .write_pde
|
||||||
; mov eax, cr3
|
|
||||||
; mov cr3, eax ; flush TLB
|
|
||||||
.pcie_cfg_mapped:
|
|
||||||
ret ; <<< OK >>>
|
|
||||||
|
|
||||||
; ---- stepping 10h CPUs and Fusion APUs: the configspace is stored in MSR_C001_0058 ----
|
; ---- stepping 10h CPUs and Fusion APUs: the configspace is stored in MSR_C001_0058 ----
|
||||||
align 4
|
align 4
|
||||||
@ -196,7 +192,25 @@ fusion_pcie_init:
|
|||||||
add edx, eax ; the upper configspace limit
|
add edx, eax ; the upper configspace limit
|
||||||
mov dword[mmio_pcie_cfg_lim-OS_BASE], edx
|
mov dword[mmio_pcie_cfg_lim-OS_BASE], edx
|
||||||
|
|
||||||
jmp map_pcie_pages
|
pcie_cfg_mapped:
|
||||||
|
|
||||||
|
create_mmio_pte:
|
||||||
|
|
||||||
|
mov ecx, mmio_pte ; physical address
|
||||||
|
or ecx, (PG_NOCACHE + PG_SHARED)
|
||||||
|
mov ebx, FUSION_MMIO ; linear address
|
||||||
|
shr ebx, 20
|
||||||
|
add ebx, (sys_pgdir - OS_BASE) ; PgDir entry @
|
||||||
|
mov dword[ebx], ecx ; Fusion MMIO tables
|
||||||
|
|
||||||
|
map_apic_mmio:
|
||||||
|
mov ecx, 0x01B ; APIC BAR
|
||||||
|
rdmsr
|
||||||
|
and eax, 0xFFFFF000 ; physical address
|
||||||
|
or eax, (PG_NOCACHE + PG_SHARED + PG_UW) ; UW is unsafe!
|
||||||
|
mov dword[mmio_pte + 0], eax
|
||||||
|
|
||||||
|
ret ; <<< OK >>>
|
||||||
|
|
||||||
; ================================================================================
|
; ================================================================================
|
||||||
|
|
||||||
|
@ -206,6 +206,8 @@ PUTPIXEL equ (OS_BASE+0x0006820)
|
|||||||
GETPIXEL equ (OS_BASE+0x0006824)
|
GETPIXEL equ (OS_BASE+0x0006824)
|
||||||
mouseunder equ (OS_BASE+0x0006900)
|
mouseunder equ (OS_BASE+0x0006900)
|
||||||
|
|
||||||
|
IDE_DMA equ 0x0007000
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
MOUSE_VISIBLE equ (OS_BASE+0x000F204)
|
MOUSE_VISIBLE equ (OS_BASE+0x000F204)
|
||||||
@ -266,19 +268,18 @@ MOUSE_BACKGROUND equ (OS_BASE+0x000FFF4)
|
|||||||
DONT_DRAW_MOUSE equ (OS_BASE+0x000FFF5)
|
DONT_DRAW_MOUSE equ (OS_BASE+0x000FFF5)
|
||||||
DONT_SWITCH equ (OS_BASE+0x000FFFF)
|
DONT_SWITCH equ (OS_BASE+0x000FFFF)
|
||||||
|
|
||||||
TMP_STACK_TOP equ 0x006CC00
|
FONT_II equ (OS_BASE+0x005DC00)
|
||||||
|
FONT_I equ (OS_BASE+0x005E600)
|
||||||
|
|
||||||
FONT_II equ (OS_BASE+0x006DC00)
|
TMP_STACK_TOP equ 0x006C000
|
||||||
FONT_I equ (OS_BASE+0x006E600)
|
|
||||||
|
|
||||||
|
mmio_pte equ 0x006E000
|
||||||
sys_pgdir equ (OS_BASE+0x006F000)
|
sys_pgdir equ (OS_BASE+0x006F000)
|
||||||
|
|
||||||
DRIVE_DATA equ (OS_BASE+0x0070000)
|
DRIVE_DATA equ (OS_BASE+0x0070000)
|
||||||
|
|
||||||
SLOT_BASE equ (OS_BASE+0x0080000)
|
SLOT_BASE equ (OS_BASE+0x0080000)
|
||||||
|
|
||||||
;unused
|
|
||||||
;TMP_BUFF equ (OS_BASE+0x0090000)
|
|
||||||
|
|
||||||
;VGABasePtr equ (OS_BASE+0x00A0000)
|
;VGABasePtr equ (OS_BASE+0x00A0000)
|
||||||
|
|
||||||
@ -286,25 +287,18 @@ RAMDISK equ (OS_BASE+0x0100000)
|
|||||||
RAMDISK_FAT equ (OS_BASE+0x0280000)
|
RAMDISK_FAT equ (OS_BASE+0x0280000)
|
||||||
|
|
||||||
CLEAN_ZONE equ 0x280000
|
CLEAN_ZONE equ 0x280000
|
||||||
IDE_DMA equ 0x284000
|
|
||||||
|
|
||||||
BgrAuxTable equ (OS_BASE+0x0298000)
|
|
||||||
; unused?
|
|
||||||
SB16Buffer equ (OS_BASE+0x02A0000)
|
|
||||||
SB16_Status equ (OS_BASE+0x02B0000)
|
|
||||||
|
|
||||||
BUTTON_INFO equ (OS_BASE+0x02C0000)
|
BUTTON_INFO equ (OS_BASE+0x02C0000)
|
||||||
RESERVED_PORTS equ (OS_BASE+0x02D0000)
|
RESERVED_PORTS equ (OS_BASE+0x02D0000)
|
||||||
IRQ_SAVE equ (OS_BASE+0x02E0000)
|
IRQ_SAVE equ (OS_BASE+0x02E0000)
|
||||||
;BOOT_VAR equ (OS_BASE+0x02F0000)
|
|
||||||
|
|
||||||
|
|
||||||
stack_data_start equ (OS_BASE+0x0300000)
|
stack_data_start equ (OS_BASE+0x0300000)
|
||||||
eth_data_start equ (OS_BASE+0x0300000)
|
eth_data_start equ (OS_BASE+0x0300000)
|
||||||
stack_data equ (OS_BASE+0x0304000)
|
stack_data equ (OS_BASE+0x0304000)
|
||||||
stack_data_end equ (OS_BASE+0x031ffff)
|
stack_data_end equ (OS_BASE+0x031ffff)
|
||||||
resendQ equ (OS_BASE+0x0320000)
|
resendQ equ (OS_BASE+0x0320000)
|
||||||
;VMODE_BASE equ (OS_BASE+0x0328000)
|
BgrAuxTable equ (OS_BASE+0x0328000)
|
||||||
skin_data equ (OS_BASE+0x0330000)
|
skin_data equ (OS_BASE+0x0330000)
|
||||||
draw_data equ (OS_BASE+0x0338000);
|
draw_data equ (OS_BASE+0x0338000);
|
||||||
|
|
||||||
@ -327,6 +321,8 @@ HEAP_MIN_SIZE equ 0x02000000
|
|||||||
PCIe_CONFIG_SPACE equ 0xF0000000
|
PCIe_CONFIG_SPACE equ 0xF0000000
|
||||||
USER_DMA_BUFFER equ 0xFD000000 ; linear addr.
|
USER_DMA_BUFFER equ 0xFD000000 ; linear addr.
|
||||||
USER_DMA_SIZE equ 0x00800000
|
USER_DMA_SIZE equ 0x00800000
|
||||||
|
FUSION_MMIO equ 0xFD800000
|
||||||
|
LAPIC_BAR equ 0xFD800000 ; ==
|
||||||
|
|
||||||
page_tabs equ 0xFDC00000
|
page_tabs equ 0xFDC00000
|
||||||
app_page_tabs equ 0xFDC00000
|
app_page_tabs equ 0xFDC00000
|
||||||
|
@ -20,7 +20,6 @@ irq0:
|
|||||||
mov es, ax
|
mov es, ax
|
||||||
inc [timer_ticks]
|
inc [timer_ticks]
|
||||||
mov eax, [timer_ticks]
|
mov eax, [timer_ticks]
|
||||||
; call playNote ; <<<--- Speaker driver
|
|
||||||
sub eax,[next_usage_update]
|
sub eax,[next_usage_update]
|
||||||
cmp eax,100
|
cmp eax,100
|
||||||
jb .nocounter
|
jb .nocounter
|
||||||
|
@ -105,7 +105,7 @@ char2 db '/sys/FONTS/CHAR2.MT',0
|
|||||||
bootpath db '/KOLIBRI '
|
bootpath db '/KOLIBRI '
|
||||||
bootpath2 db 0
|
bootpath2 db 0
|
||||||
vmode db '/sys/drivers/VMODE.MDR',0
|
vmode db '/sys/drivers/VMODE.MDR',0
|
||||||
vrr_m db 'VRR_M',0
|
;vrr_m db 'VRR_M',0
|
||||||
kernel_file db 'KERNEL MNT'
|
kernel_file db 'KERNEL MNT'
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,30 +0,0 @@
|
|||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
;; ;;
|
|
||||||
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;;
|
|
||||||
;; Distributed under terms of the GNU General Public License ;;
|
|
||||||
;; ;;
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
|
|
||||||
$Revision$
|
|
||||||
|
|
||||||
|
|
||||||
;***************************************************
|
|
||||||
; ïðåäâàðèòåëüíàÿ î÷èñòêà îáëàñòè òàáëèöû
|
|
||||||
; ïîèñê è çàíåñåíèå â òàáëèöó ïðèâîäîâ FDD
|
|
||||||
; àâòîð Mario79
|
|
||||||
;***************************************************
|
|
||||||
xor eax,eax
|
|
||||||
mov edi,DRIVE_DATA
|
|
||||||
mov ecx,16384
|
|
||||||
cld
|
|
||||||
rep stosd
|
|
||||||
|
|
||||||
mov al,0x10
|
|
||||||
out 0x70,al
|
|
||||||
mov cx,0xff
|
|
||||||
wait_cmos:
|
|
||||||
dec cx
|
|
||||||
test cx,cx
|
|
||||||
jnz wait_cmos
|
|
||||||
in al,0x71
|
|
||||||
mov [DRIVE_DATA],al
|
|
@ -21,25 +21,13 @@ FindHDD:
|
|||||||
mov [ChannelNumber],1
|
mov [ChannelNumber],1
|
||||||
mov [DiskNumber],0
|
mov [DiskNumber],0
|
||||||
call FindHDD_3
|
call FindHDD_3
|
||||||
; mov ax,[Sector512+176]
|
|
||||||
; mov [DRIVE_DATA+6],ax
|
|
||||||
; mov ax,[Sector512+126]
|
|
||||||
; mov [DRIVE_DATA+8],ax
|
|
||||||
; mov ax,[Sector512+128]
|
|
||||||
; mov [DRIVE_DATA+8],ax
|
|
||||||
mov [DiskNumber],1
|
mov [DiskNumber],1
|
||||||
call FindHDD_3
|
call FindHDD_3
|
||||||
; mov al,[Sector512+176]
|
|
||||||
; mov [DRIVE_DATA+7],al
|
|
||||||
inc [ChannelNumber]
|
inc [ChannelNumber]
|
||||||
mov [DiskNumber],0
|
mov [DiskNumber],0
|
||||||
call FindHDD_3
|
call FindHDD_3
|
||||||
; mov al,[Sector512+176]
|
|
||||||
; mov [DRIVE_DATA+8],al
|
|
||||||
mov [DiskNumber],1
|
mov [DiskNumber],1
|
||||||
call FindHDD_1
|
call FindHDD_1
|
||||||
; mov al,[Sector512+176]
|
|
||||||
; mov [DRIVE_DATA+9],al
|
|
||||||
|
|
||||||
jmp EndFindHDD
|
jmp EndFindHDD
|
||||||
|
|
||||||
@ -57,9 +45,9 @@ FindHDD_1:
|
|||||||
call DeviceReset
|
call DeviceReset
|
||||||
cmp [DevErrorCode],0
|
cmp [DevErrorCode],0
|
||||||
jne FindHDD_2_2
|
jne FindHDD_2_2
|
||||||
call ReadCD_ID
|
; call ReadCD_ID
|
||||||
cmp [DevErrorCode],0
|
; cmp [DevErrorCode],0
|
||||||
jne FindHDD_2_2
|
; jne FindHDD_2_2
|
||||||
inc byte [DRIVE_DATA+1]
|
inc byte [DRIVE_DATA+1]
|
||||||
inc byte [DRIVE_DATA+1]
|
inc byte [DRIVE_DATA+1]
|
||||||
FindHDD_2_2:
|
FindHDD_2_2:
|
||||||
@ -111,8 +99,6 @@ ReadHDD_ID:
|
|||||||
test AL,08h ;состояние сигнала DRQ
|
test AL,08h ;состояние сигнала DRQ
|
||||||
jz @@WaitCompleet
|
jz @@WaitCompleet
|
||||||
; Принять блок данных от контроллера
|
; Принять блок данных от контроллера
|
||||||
; mov AX,DS
|
|
||||||
; mov ES,AX
|
|
||||||
mov EDI,Sector512 ;offset Sector512
|
mov EDI,Sector512 ;offset Sector512
|
||||||
mov DX,[ATABasePortAddr] ;регистр данных
|
mov DX,[ATABasePortAddr] ;регистр данных
|
||||||
mov CX,256 ;число считываемых слов
|
mov CX,256 ;число считываемых слов
|
||||||
@ -201,17 +187,10 @@ SendCommandToHDD:
|
|||||||
; Ожидать, пока диск не будет готов
|
; Ожидать, пока диск не будет готов
|
||||||
inc DX
|
inc DX
|
||||||
mov ecx,0xfff
|
mov ecx,0xfff
|
||||||
; mov eax,[timer_ticks]
|
|
||||||
; mov [TickCounter_1],eax
|
|
||||||
@@WaitHDReady:
|
@@WaitHDReady:
|
||||||
; Проверить время ожидани
|
; Проверить время ожидани
|
||||||
dec ecx
|
dec ecx
|
||||||
; cmp ecx,0
|
|
||||||
jz @@Err1
|
jz @@Err1
|
||||||
; mov eax,[timer_ticks]
|
|
||||||
; sub eax,[TickCounter_1]
|
|
||||||
; cmp eax,300 ;îæèäàòü 300 òèêîâ
|
|
||||||
; ja @@Err1 ;îøèáêà òàéì-àóòà
|
|
||||||
; Прочитать регистр состояни
|
; Прочитать регистр состояни
|
||||||
in AL,DX
|
in AL,DX
|
||||||
; Проверить состояние сигнала BSY
|
; Проверить состояние сигнала BSY
|
||||||
@ -270,6 +249,7 @@ SendCommandToHDD:
|
|||||||
; Завершение работы программы
|
; Завершение работы программы
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
if 0
|
||||||
;*************************************************
|
;*************************************************
|
||||||
;* ЧТЕНИЕ ИДЕНТИФИКАТОРА УСТРОЙСТВА ATAPI *
|
;* ЧТЕНИЕ ИДЕНТИФИКАТОРА УСТРОЙСТВА ATAPI *
|
||||||
;* Входные параметры передаются через глобальные *
|
;* Входные параметры передаются через глобальные *
|
||||||
@ -299,7 +279,6 @@ ReadCD_ID:
|
|||||||
@@WaitCompleet_1:
|
@@WaitCompleet_1:
|
||||||
; Проверить врем
|
; Проверить врем
|
||||||
dec ecx
|
dec ecx
|
||||||
; cmp ecx,0
|
|
||||||
jz @@Error1_1 ;ошибка тайм-аута
|
jz @@Error1_1 ;ошибка тайм-аута
|
||||||
; Проверить готовность
|
; Проверить готовность
|
||||||
in AL,DX
|
in AL,DX
|
||||||
@ -310,8 +289,6 @@ ReadCD_ID:
|
|||||||
test AL,08h ;состояние сигнала DRQ
|
test AL,08h ;состояние сигнала DRQ
|
||||||
jz @@WaitCompleet_1
|
jz @@WaitCompleet_1
|
||||||
; Принять блок данных от контроллера
|
; Принять блок данных от контроллера
|
||||||
; mov AX,DS
|
|
||||||
; mov ES,AX
|
|
||||||
mov EDI,Sector512 ;offset Sector512
|
mov EDI,Sector512 ;offset Sector512
|
||||||
mov DX,[ATABasePortAddr] ;порт 1x0h
|
mov DX,[ATABasePortAddr] ;порт 1x0h
|
||||||
mov CX,256 ;число считываемых слов
|
mov CX,256 ;число считываемых слов
|
||||||
@ -326,6 +303,8 @@ ReadCD_ID:
|
|||||||
@@End_1:
|
@@End_1:
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
end if
|
||||||
|
|
||||||
;*************************************************
|
;*************************************************
|
||||||
;* СБРОС УСТРОЙСТВА *
|
;* СБРОС УСТРОЙСТВА *
|
||||||
;* Входные параметры передаются через глобальные *
|
;* Входные параметры передаются через глобальные *
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
$Revision$
|
$Revision$
|
||||||
|
|
||||||
|
|
||||||
include 'dev_fd.inc'
|
;include 'dev_fd.inc'
|
||||||
include 'dev_hdcd.inc'
|
include 'dev_hdcd.inc'
|
||||||
include 'getcache.inc'
|
include 'getcache.inc'
|
||||||
include 'sear_par.inc'
|
include 'sear_par.inc'
|
||||||
|
@ -508,11 +508,11 @@ high_code:
|
|||||||
out 0xA1, al
|
out 0xA1, al
|
||||||
|
|
||||||
; Enable interrupts in IDE controller
|
; Enable interrupts in IDE controller
|
||||||
mov al, 0
|
; mov al, 0
|
||||||
mov dx, 0x3F6
|
; mov dx, 0x3F6
|
||||||
out dx, al
|
; out dx, al
|
||||||
mov dl, 0x76
|
; mov dl, 0x76
|
||||||
out dx, al
|
; out dx, al
|
||||||
|
|
||||||
;!!!!!!!!!!!!!!!!!!!!!!!!!!
|
;!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
include 'detect/disks.inc'
|
include 'detect/disks.inc'
|
||||||
@ -721,7 +721,8 @@ include 'detect/disks.inc'
|
|||||||
|
|
||||||
; LOAD FIRST APPLICATION
|
; LOAD FIRST APPLICATION
|
||||||
cli
|
cli
|
||||||
|
if 0
|
||||||
|
<<<
|
||||||
cmp byte [BOOT_VAR+0x9030],1
|
cmp byte [BOOT_VAR+0x9030],1
|
||||||
jne no_load_vrr_m
|
jne no_load_vrr_m
|
||||||
|
|
||||||
@ -732,8 +733,8 @@ include 'detect/disks.inc'
|
|||||||
sub eax,2
|
sub eax,2
|
||||||
jz first_app_found
|
jz first_app_found
|
||||||
|
|
||||||
no_load_vrr_m:
|
no_load_vrr_m: <<<
|
||||||
|
end if
|
||||||
mov ebp, firstapp
|
mov ebp, firstapp
|
||||||
call fs_execute_from_sysdir
|
call fs_execute_from_sysdir
|
||||||
|
|
||||||
|
@ -70,14 +70,10 @@
|
|||||||
|
|
||||||
; 6000 -> 68FF << free (2k5)
|
; 6000 -> 68FF << free (2k5)
|
||||||
|
|
||||||
; 6900 -> 7EFF << saved picture under mouse pointer (1k5)
|
; 6900 -> 6EFF << saved picture under mouse pointer (1k5)
|
||||||
;
|
;
|
||||||
; 7F00 -> 7FFF << SB16_Status (256) \\
|
; 7000 -> EFFF HDD DMA AREA (32k)
|
||||||
;
|
;
|
||||||
; 8000 -> 87FF free (2k)
|
|
||||||
; 0x80008000 -> 9FFF ramdisk fat (8k)
|
|
||||||
|
|
||||||
; A000 -> F9FF free (23k)
|
|
||||||
|
|
||||||
; FA00 byte no of keys in buffer
|
; FA00 byte no of keys in buffer
|
||||||
; FA01 byte 'buffer'
|
; FA01 byte 'buffer'
|
||||||
@ -151,11 +147,13 @@
|
|||||||
; -> 3B752 end_of_kernel
|
; -> 3B752 end_of_kernel
|
||||||
; -> 3C000 not used (>200k)
|
; -> 3C000 not used (>200k)
|
||||||
; 0x80050000 -> 090000 zero-filled zone after preinit_mem
|
; 0x80050000 -> 090000 zero-filled zone after preinit_mem
|
||||||
; 0x8006CC00 -> 6DBFF stack at boot time (4Kb)
|
; 0x8006DC00 -> 5E5FF basic text font II
|
||||||
|
; 0x8006E600 -> 5Efff basic text font I
|
||||||
|
|
||||||
|
; 0x8006C000 -> 6CFFF stack at boot time (4Kb)
|
||||||
;
|
;
|
||||||
; 0x8006DC00 -> 6E5FF basic text font II
|
; 0x8006E000 -> 6EFFF MMIO PTE directory (4Kb)
|
||||||
; 0x8006E600 -> 6Efff basic text font I
|
; 0x8006F000 -> 6FFFF main page directory (4Kb)
|
||||||
; 0x8006F000 -> 6FFFF main page directory
|
|
||||||
|
|
||||||
; 0x80070000 -> 7FFFF data of retrieved disks and partitions (Mario79)
|
; 0x80070000 -> 7FFFF data of retrieved disks and partitions (Mario79)
|
||||||
; 0x80080000 -> 8FFFF additional app info, in 256 byte steps - 256 entries
|
; 0x80080000 -> 8FFFF additional app info, in 256 byte steps - 256 entries
|
||||||
@ -200,28 +198,16 @@
|
|||||||
; BC dword address of debug event memory
|
; BC dword address of debug event memory
|
||||||
; C0 5 dd thread debug registers: DR0,DR1,DR2,DR3,DR7
|
; C0 5 dd thread debug registers: DR0,DR1,DR2,DR3,DR7
|
||||||
;
|
;
|
||||||
; 0x80090000 -> 9FFFF wav device buffer (64k) ; << SB16Buffer
|
; 0x80090000 -> 9FFFF free (64k)
|
||||||
; 0x800A0000 -> AFFFF screen access area << VGA legacy buffer
|
; 0x800A0000 -> AFFFF screen access area << VGA legacy buffer
|
||||||
; 0x800B0000 -> FFFFF bios rest in peace -area (320k), << purpose unknown
|
; 0x800B0000 -> FFFFF bios rest in peace -area (320k), << purpose unknown
|
||||||
|
|
||||||
; 0x80100000 -> 283FFF diskette image (1m5)
|
; 0x80100000 -> 283FFF diskette image (1m5)
|
||||||
|
; 0x80280000 -> 9FFF ramdisk fat (8k)
|
||||||
|
|
||||||
; 0x80284000 -> HEAP_BASE zero-filled zone after preinit_mem
|
; 0x80280000 -> HEAP_BASE zero-filled zone after preinit_mem
|
||||||
;
|
;
|
||||||
; 0x80284000 -> 28BFFF HDD DMA AREA (32k)
|
; 0x80280000 -> 2Bffff free (262k)
|
||||||
; 0x8028C000 -> 297FFF free (48k)
|
|
||||||
;
|
|
||||||
; 0x80298000 -> 29ffff auxiliary table for background smoothing code (32k)
|
|
||||||
;
|
|
||||||
; 0x802A0000 -> 2Bffff free (128k)
|
|
||||||
; 0x80328000 -> 32FFFF !vrr driver (32k)
|
|
||||||
|
|
||||||
|
|
||||||
; 0x80338000 -> 338FFF draw data - 256 entries (4k)
|
|
||||||
; 00 dword draw limit - x start
|
|
||||||
; 04 dword draw limit - y start
|
|
||||||
; 08 dword draw limit - x end
|
|
||||||
; 0C dword draw limit - y end
|
|
||||||
; 0x80339000 -> 3BFFF3 free (12k)
|
|
||||||
|
|
||||||
; 0x802C0000 -> 2C3fff button info (8k)
|
; 0x802C0000 -> 2C3fff button info (8k)
|
||||||
;
|
;
|
||||||
@ -244,8 +230,20 @@
|
|||||||
; dword start port
|
; dword start port
|
||||||
; dword end port
|
; dword end port
|
||||||
; dword 0
|
; dword 0
|
||||||
|
|
||||||
|
; 0x802E0000 -> 2EFFFF irq data area (64k)
|
||||||
|
; 0x802F0000 -> 327fff free (229k)
|
||||||
|
|
||||||
|
; 0x80328000 -> 29ffff auxiliary table for background smoothing code (32k)
|
||||||
|
;
|
||||||
|
; 0x80338000 -> 338FFF draw data - 256 entries (4k)
|
||||||
|
; 00 dword draw limit - x start
|
||||||
|
; 04 dword draw limit - y start
|
||||||
|
; 08 dword draw limit - x end
|
||||||
|
; 0C dword draw limit - y end
|
||||||
|
; 0x80339000 -> 3BFFF3 free (12k)
|
||||||
|
|
||||||
;
|
;
|
||||||
; 0x80370000 -> 37FFFF irq data area (64k)
|
|
||||||
; 0x80380000 -> 38FFFF low memory save (64k)
|
; 0x80380000 -> 38FFFF low memory save (64k)
|
||||||
;
|
;
|
||||||
; 0x80390000 -> 3AFFFF tcp memory (128k)
|
; 0x80390000 -> 3AFFFF tcp memory (128k)
|
||||||
@ -265,7 +263,10 @@
|
|||||||
; 0x80800000 ->827FFFFF kernel heap
|
; 0x80800000 ->827FFFFF kernel heap
|
||||||
|
|
||||||
; 0xF0000000 -> 0xF1FFFFFF PCI-express extended config space
|
; 0xF0000000 -> 0xF1FFFFFF PCI-express extended config space
|
||||||
; 0xFD000000 -> 0xFD3FFFFF static system buffer 4Mb
|
|
||||||
|
; 0xFD000000 -> 0xFD7FFFFF static system buffer (8Mb reserved)
|
||||||
|
; 0xFD800000 -> 0xFBFFFFFF CPU & Southbridge memory-mapped IO (4Mb reserved)
|
||||||
|
; +0000..0FFF LAPIC BAR (4k)
|
||||||
; 0xFDC00000 -> 0xFDFFFFFF page tables 4Mb
|
; 0xFDC00000 -> 0xFDFFFFFF page tables 4Mb
|
||||||
; 0xFE000000 -> 0xFFFFFFFF LFB 32Mb
|
; 0xFE000000 -> 0xFFFFFFFF LFB 32Mb
|
||||||
; 0xFE000000 -> 0xFE7FFFFF application available LFB 8Mb
|
; 0xFE000000 -> 0xFE7FFFFF application available LFB 8Mb
|
||||||
|
@ -1,166 +0,0 @@
|
|||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
;; ;;
|
|
||||||
;; Copyright (C) KolibriOS team 2004-2008. All rights reserved. ;;
|
|
||||||
;; Distributed under terms of the GNU General Public License ;;
|
|
||||||
;; ;;
|
|
||||||
;; PLAYNOTE.INC version 1.1 22 November 2003 ;;
|
|
||||||
;; ;;
|
|
||||||
;; Player Notes for Speaker PC ;;
|
|
||||||
;; subfunction #55 from function #55 Menuet OS ;;
|
|
||||||
;; ;;
|
|
||||||
;; Copyright 2003 VaStaNi ;;
|
|
||||||
;; vastani@ukr.net ;;
|
|
||||||
;; >>>- SIMPLY - QUICKLY - SHORTLY -<<< ;;
|
|
||||||
;; ;;
|
|
||||||
;; Note: playnote.txt ;;
|
|
||||||
;; ;;
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
|
|
||||||
$Revision$
|
|
||||||
|
|
||||||
align 4
|
|
||||||
sound_interface:
|
|
||||||
|
|
||||||
cmp eax,ebx ; this is subfunction #55 ?
|
|
||||||
jne retFunc55 ; if no then return.
|
|
||||||
|
|
||||||
cmp byte [sound_flag],0
|
|
||||||
jne retFunc55
|
|
||||||
|
|
||||||
movzx eax, byte [countDelayNote]
|
|
||||||
or al, al ; player is busy ?
|
|
||||||
jnz retFunc55 ; return counter delay Note
|
|
||||||
|
|
||||||
mov [memAdrNote],esi;edx
|
|
||||||
call get_pid
|
|
||||||
mov [pidProcessNote],eax
|
|
||||||
xor eax, eax ; Ok! EAX = 0
|
|
||||||
retFunc55:
|
|
||||||
mov [esp+32], eax ; return value EAX for application
|
|
||||||
ret
|
|
||||||
|
|
||||||
iglobal
|
|
||||||
align 4
|
|
||||||
kontrOctave dw 0x4742, 0x4342, 0x3F7C, 0x3BEC, 0x388F, 0x3562
|
|
||||||
dw 0x3264, 0x2F8F, 0x2CE4, 0x2A5F, 0x2802, 0x25BF
|
|
||||||
memAdrNote dd 0
|
|
||||||
pidProcessNote dd 0
|
|
||||||
slotProcessNote dd 0
|
|
||||||
count_timer_Note dd 1
|
|
||||||
mem8253r42 dw 0
|
|
||||||
countDelayNote db 0
|
|
||||||
endg
|
|
||||||
|
|
||||||
playNote:
|
|
||||||
; jmp NotPlayNotes
|
|
||||||
mov esi, [memAdrNote]
|
|
||||||
or esi, esi ; ESI = 0 ? - OFF Notes Play ?
|
|
||||||
jz NotPlayNotes ; if ESI = 0 -> ignore play pocedure
|
|
||||||
cmp eax, [count_timer_Note]
|
|
||||||
jb NotPlayNotes
|
|
||||||
push eax
|
|
||||||
inc eax
|
|
||||||
mov [count_timer_Note], eax
|
|
||||||
mov al, [countDelayNote]
|
|
||||||
dec al ; decrement counter Delay for Playing Note
|
|
||||||
jz NewLoadNote@Delay
|
|
||||||
cmp al, 0xFF ; this is first Note Play ?
|
|
||||||
jne NextDelayNote
|
|
||||||
;This is FIRST Note, save counter channel 2 chip 8253
|
|
||||||
mov al, 0xB6 ; control byte to timer chip 8253
|
|
||||||
out 0x43, al ; Send it to the control port chip 8253
|
|
||||||
in al, 0x42 ; Read Lower byte counter channel 2 chip 8253
|
|
||||||
mov ah, al ; AH = Lower byte counter channel 2
|
|
||||||
in al, 0x42 ; Read Upper byte counter channel 2 chip 8253
|
|
||||||
mov [mem8253r42], ax ; Save counter channel 2 timer chip 8253
|
|
||||||
NewLoadNote@Delay:
|
|
||||||
cld
|
|
||||||
; lodsb ; load AL - counter Delay
|
|
||||||
call ReadNoteByte
|
|
||||||
or al, al ; THE END ?
|
|
||||||
jz EndPlayNote
|
|
||||||
cmp al, 0x81
|
|
||||||
jnc NoteforOctave
|
|
||||||
mov [countDelayNote], al
|
|
||||||
; lodsw ; load AX - counter for Note!
|
|
||||||
call ReadNoteByte
|
|
||||||
mov ah,al
|
|
||||||
call ReadNoteByte
|
|
||||||
xchg al,ah
|
|
||||||
jmp pokeNote
|
|
||||||
|
|
||||||
EndPlayNote: ; THE END Play Notes!
|
|
||||||
in al, 0x61 ; Get contents of system port B chip 8255
|
|
||||||
and al, 0xFC ; Turn OFF timer and speaker
|
|
||||||
out 0x61, al ; Send out new values to port B chip 8255
|
|
||||||
mov ax, [mem8253r42] ; memorize counter channel 2 timer chip 8253
|
|
||||||
xchg al, ah ; reverse byte in word
|
|
||||||
out 0x42, al ; restore Lower byte counter channel 2
|
|
||||||
mov al, ah ; AL = Upper byte counter channel 2
|
|
||||||
out 0x42, al ; restore Upper byte channel 2
|
|
||||||
xor eax, eax ; EAX = 0
|
|
||||||
mov [memAdrNote], eax ; clear header control Delay-Note string
|
|
||||||
NextDelayNote:
|
|
||||||
mov [countDelayNote], al ; save new counter delay Note
|
|
||||||
pop eax
|
|
||||||
NotPlayNotes:
|
|
||||||
RET
|
|
||||||
|
|
||||||
NoteforOctave:
|
|
||||||
sub al, 0x81 ; correction value for delay Note
|
|
||||||
mov [countDelayNote], al ; save counter delay this new Note
|
|
||||||
; lodsb ; load pack control code
|
|
||||||
call ReadNoteByte
|
|
||||||
cmp al, 0xFF ; this is PAUSE ?
|
|
||||||
jne packCode ; no, this is PACK CODE
|
|
||||||
in al, 0x61 ; Get contents of system port B chip 8255
|
|
||||||
and al, 0xFC ; Turn OFF timer and speaker
|
|
||||||
out 0x61, al ; Send out new values to port B chip 8255
|
|
||||||
jmp saveESI
|
|
||||||
|
|
||||||
packCode:
|
|
||||||
mov cl, al ; save code
|
|
||||||
and al, 0xF ; clear upper bits
|
|
||||||
dec al ; correction
|
|
||||||
add al, al ; transform number to offset constant
|
|
||||||
movsx eax, al ; EAX - offset
|
|
||||||
add eax, dword kontrOctave ; EAX - address from constant
|
|
||||||
mov ax, [eax] ; read constant
|
|
||||||
shr cl, 4 ; transform for number Octave
|
|
||||||
shr ax, cl ; calculate from Note this Octave!
|
|
||||||
pokeNote:
|
|
||||||
out 0x42, al ; Lower byte Out to channel 2 timer chip 8253
|
|
||||||
mov al, ah
|
|
||||||
out 0x42, al ; Upper byte Out to channel 2 timer chip 8253
|
|
||||||
in al, 0x61 ; Get contents of system port B chip 8255
|
|
||||||
or al, 3 ; Turn ON timer and speaker
|
|
||||||
out 0x61, al ; Send out new values to port B chip 8255
|
|
||||||
saveESI:
|
|
||||||
; mov [memAdrNote], esi ; save new header control Delay-Note string
|
|
||||||
pop eax
|
|
||||||
RET
|
|
||||||
ReadNoteByte:
|
|
||||||
;result:
|
|
||||||
; al - note
|
|
||||||
push eax
|
|
||||||
push ecx
|
|
||||||
push edx
|
|
||||||
push esi
|
|
||||||
|
|
||||||
mov eax,[pidProcessNote]
|
|
||||||
call pid_to_slot
|
|
||||||
test eax,eax
|
|
||||||
jz .failed
|
|
||||||
lea ecx,[esp+12]
|
|
||||||
mov edx,1
|
|
||||||
mov esi,[memAdrNote]
|
|
||||||
inc [memAdrNote]
|
|
||||||
|
|
||||||
call read_process_memory
|
|
||||||
.failed:
|
|
||||||
pop esi
|
|
||||||
pop edx
|
|
||||||
pop ecx
|
|
||||||
pop eax
|
|
||||||
ret
|
|
||||||
;------------------- END CODE -------------------
|
|
Loading…
Reference in New Issue
Block a user