Я решил запустить MeOS и посмотреть, что же это такое. К сожалению, на моем ноутбуке установлена видеокарточка S3, которая MeOS поддерживается криво Но я решил исправить это упущение
; set_bank modified by kmeaw
set_bank:
cli
cmp al,[0xfff2]
je retsb
mov [0xfff2],al
push ax
push dx
push cx
mov cl, al
mov dx, 0x3D4
mov al, 0x38
out dx, al
inc dx
mov al, 0x48
out dx, al
dec dx
mov al, 0x31
out dx, al
inc dx
in al, dx
dec dx
mov ah, al
mov al, 0x31
out dx, ax
mov al, ah
or al, 9
inc dx
out dx, al
dec dx
mov al, 0x35
out dx, al
inc dx
in al, dx
dec dx
and al, 0xF0
mov ch, cl
and ch, 0x0F
or ch, al
mov al, 0x35
out dx, al
inc dx
mov al, ch
out dx, ax
dec dx
mov al, 0x51
out dx, al
inc dx
in al, dx
dec dx
and al, 0xF3
shr cl, 2
and cl, 0x0C
or cl, al
mov al, 0x51
out dx, al
inc dx
mov al, cl
out dx, al
dec dx
mov al, 0x38
out dx, al
inc dx
xor al, al
out dx, al
dec dx
pop cx
pop dx
pop ax
retsb:
sti
ret
А теперь вопрос: как собрать ядро Kolibri4 fasm`ом? Он ругается на отсутствие (undefined) servetable в KERNEL.ASM:92.
kmeaw$ fasm -V
flat assembler version 1.64
Собираю из под Linux.
S3
Нужно либо использовать версию фасма (cтрого) до 1.61 либо заменить файл kglobals.inc на следующий:
Причина этого в том, что версии fasm'a после 1.61 не являются обратно совместимыми с 1.60.
Code: Select all
;------------------------------------------------------------------
; use "iglobal" for inserting initialized global data definitions.
;------------------------------------------------------------------
macro iglobal {
IGlobals equ IGlobals,
macro __IGlobalBlock { }
;-------------------------------------------------------------
; use 'uglobal' for inserting uninitialized global definitions.
; even when you define some data values, these variables
; will be stored as uninitialized data.
;-------------------------------------------------------------
macro uglobal {
UGlobals equ UGlobals,
macro __UGlobalBlock { }
endg fix } ; Use endg for ending iglobal and uglobal blocks.
macro IncludeIGlobals{
macro IGlobals dummy,[n] \{ __IGlobalBlock
purge __IGlobalBlock \}
match I, IGlobals \{ I \} }
macro IncludeUGlobals{
macro UGlobals dummy,[n] \{
\common
\local begin, size
begin = $
virtual at $
\forward
__UGlobalBlock
purge __UGlobalBlock
\common
size = $ - begin
end virtual
rb size
\}
match U, UGlobals \{ U \} }
macro IncludeAllGlobals {
IncludeIGlobals
IncludeUGlobals
}
iglobal
endg
uglobal
endg
Спасибо за информацию про fasm. Собрал - теперь вообще ничего не показывает, хотя аналогичное изменение (vesa12) на официальном ядре (menuetos.org) исправило все мои проблемы
Попробовал fasm160 - все равно не работает... Вижу лог загрузки, панель задач и черный квадрат (предположительно иконка). Но когда я беру официальное ядро, то Kolibri запускается, но очень криво (видимо несоответствие чего-то).
Плохо дело. Могу лишь предложить следующее - оставить в автозагрузке только @panel. После загрузки (знаю, что все будет выглядеть ужасно) запусти mfar или run (через меню) и запускай по очереди программы из автозагрузки в поисках проблемы.
PS Если видна панель задач (снизу) - значит твой код работает. Если банки не переключаются, то все изображение сконцентрировано на небольшой верхней полоске. (Для справки: если мигают часы, значит система не зависла; если двигается мышь, значит не зависла основная задача ОС.)
Какова частота процессора, сколько оперативной памяти и как разбит винт? (возможно ОС повисла при определении разделов винта - этого кода нет в официальном ядре; если дело в этом, то нужно будет убрать из автозагрузки setup)
PSPS Откуда инфа по переключению банков?
PS Если видна панель задач (снизу) - значит твой код работает. Если банки не переключаются, то все изображение сконцентрировано на небольшой верхней полоске. (Для справки: если мигают часы, значит система не зависла; если двигается мышь, значит не зависла основная задача ОС.)
Какова частота процессора, сколько оперативной памяти и как разбит винт? (возможно ОС повисла при определении разделов винта - этого кода нет в официальном ядре; если дело в этом, то нужно будет убрать из автозагрузки setup)
PSPS Откуда инфа по переключению банков?
Code: Select all
set_bank: ; S3
cli
cmp al,[0xfff2]
je .exit
mov [0xfff2],al
push eax edx
mov ah,al
; unlock S3 registers
mov dx,3D4h
mov al,38h
out dx,al
inc edx
mov al,48h
out dx,al
dec edx
mov al,39h
out dx,al
inc edx
mov al,0A5h
out dx,al
; do the bank-switch
mov dx,3D4h
mov al,35h
out dx,al
inc edx
in al,dx
and al,0F0h
or al,ah
out dx,al
pop edx eax
.exit:
sti
ret
Code: Select all
| kmeaw | mike.dld
--------------------------
RANDBOX | 3220 | 3955
RANDPUT | 7040 | 11185
LIBTEST | 4850 | 5080
in code we trust
233MMX, 32Mb RAM, винта нет вообщеhalyavin wrote:Какова частота процессора, сколько оперативной памяти и как разбит винт? (возможно ОС повисла при определении разделов винта - этого кода нет в официальном ядре; если дело в этом, то нужно будет убрать из автозагрузки setup)
PSPS Откуда инфа по переключению банков?
Инфа о переключении банков из XFree.
kmeaw
В общем, на сегодня текущая версия файла Vesa12.inc является не рабочей. В следующий выпуск я включу файл, который был в Колибри2. Он хоть как-то работает, правда криво. Я сам не занимался видеодрайвером, потому здесь я не причем. Так как выяснил это я лишь недавно, когда у меня появилась инфа по Trident9440. Переключатель банков я сделал для него, но результат как у тебя. В старой версии файла он работает, но как уже писал криво.
В общем, на сегодня текущая версия файла Vesa12.inc является не рабочей. В следующий выпуск я включу файл, который был в Колибри2. Он хоть как-то работает, правда криво. Я сам не занимался видеодрайвером, потому здесь я не причем. Так как выяснил это я лишь недавно, когда у меня появилась инфа по Trident9440. Переключатель банков я сделал для него, но результат как у тебя. В старой версии файла он работает, но как уже писал криво.
Нашел баг в текущей версии vesa12.inc. Думаю, что в Kolibri 4.5 он будет исправлен.
У меня S3 Trio c 1 мегабайтом памяти. Какой именно чип не помню. Колибри 5.0.0.0 в 5-м режиме запускается, но вместо нижней части экрана снова появляется верхняя полоска. При движении курсора мыши по экрану бегают горизонтальные полосы. Скриншот здесь:
http://e-al.narod.ru/vesa12.jpg
http://e-al.narod.ru/vesa12.jpg
ealex
У меня оно работало на S3 ViRGE PCI (325), на S3 Trio было так же как у тебя. Карточки по-разному программируются.
Кстати в K0510 есть процедура для Trident 9440, естественно Trident'ы тоже по-разному программируются.
Напиши полное название карточки, возможно смогу переделать функцию переключения банков. У меня некоторые доки есть.
У меня оно работало на S3 ViRGE PCI (325), на S3 Trio было так же как у тебя. Карточки по-разному программируются.
Кстати в K0510 есть процедура для Trident 9440, естественно Trident'ы тоже по-разному программируются.
Напиши полное название карточки, возможно смогу переделать функцию переключения банков. У меня некоторые доки есть.
S3 Trio64 (764)
Кстати, какой бы видеорежим я не выбирал, у меня во врема загрузки пишется Глубина цвета: 32. Как это понимать?
Кстати, какой бы видеорежим я не выбирал, у меня во врема загрузки пишется Глубина цвета: 32. Как это понимать?
ealex
Так и понимай! У меня тоже было только 32 бита.
Только на Vesa 2 у меня было 24 бита.
Так и понимай! У меня тоже было только 32 бита.
Только на Vesa 2 у меня было 24 бита.
Я имел ввиду, что 32 появляется даже если выбран режим 9 или 0, где должно быть 256 и 16 цветов соответственно.
А это уже особенности реализации режимов 0 и 9. Для них, в принципе, 32 - это правильно, потому что при, например, вызове функции 1 (put pixel) аппроксимированного цвета пиксел рисуется на экран (смещение 0xA0000), а также (!!!) реальный цвет пиксела записывается в 32-битный буфер, под который отводится память. сделано это для того, чтобы например, получать из буфера реальный цвет пиксела при вызове функции получения цвета пиксела на экране (попробуй например, загрузиться в режиме 0 или 9 и программой VSCREEN сделать снимок экрана - получишь полноцветный битмап).
Who is online
Users browsing this forum: No registered users and 3 guests