Page 1 of 2

S3

Posted: Sat Aug 20, 2005 1:54 am
by kmeaw
Я решил запустить 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.

Posted: Sat Aug 20, 2005 7:20 am
by halyavin
Нужно либо использовать версию фасма (cтрого) до 1.61 либо заменить файл kglobals.inc на следующий:

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'a после 1.61 не являются обратно совместимыми с 1.60.

Posted: Sat Aug 20, 2005 10:54 am
by kmeaw
Спасибо за информацию про fasm. Собрал - теперь вообще ничего не показывает, хотя аналогичное изменение (vesa12) на официальном ядре (menuetos.org) исправило все мои проблемы :(

Posted: Sat Aug 20, 2005 11:21 am
by kmeaw
Попробовал fasm160 - все равно не работает... Вижу лог загрузки, панель задач и черный квадрат (предположительно иконка). Но когда я беру официальное ядро, то Kolibri запускается, но очень криво (видимо несоответствие чего-то).

Posted: Sat Aug 20, 2005 3:18 pm
by halyavin
Плохо дело. Могу лишь предложить следующее - оставить в автозагрузке только @panel. После загрузки (знаю, что все будет выглядеть ужасно) запусти mfar или run (через меню) и запускай по очереди программы из автозагрузки в поисках проблемы.

PS Если видна панель задач (снизу) - значит твой код работает. Если банки не переключаются, то все изображение сконцентрировано на небольшой верхней полоске. (Для справки: если мигают часы, значит система не зависла; если двигается мышь, значит не зависла основная задача ОС.)

Какова частота процессора, сколько оперативной памяти и как разбит винт? (возможно ОС повисла при определении разделов винта - этого кода нет в официальном ядре; если дело в этом, то нужно будет убрать из автозагрузки setup)

PSPS Откуда инфа по переключению банков?

Posted: Sun Aug 21, 2005 2:48 pm
by mike.dld

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

Posted: Wed Aug 24, 2005 1:04 am
by kmeaw
halyavin wrote:Какова частота процессора, сколько оперативной памяти и как разбит винт? (возможно ОС повисла при определении разделов винта - этого кода нет в официальном ядре; если дело в этом, то нужно будет убрать из автозагрузки setup)

PSPS Откуда инфа по переключению банков?
233MMX, 32Mb RAM, винта нет вообще

Инфа о переключении банков из XFree.

Posted: Thu Sep 01, 2005 3:15 pm
by Mario79
kmeaw
В общем, на сегодня текущая версия файла Vesa12.inc является не рабочей. В следующий выпуск я включу файл, который был в Колибри2. Он хоть как-то работает, правда криво. Я сам не занимался видеодрайвером, потому здесь я не причем. Так как выяснил это я лишь недавно, когда у меня появилась инфа по Trident9440. Переключатель банков я сделал для него, но результат как у тебя. В старой версии файла он работает, но как уже писал криво.

Posted: Fri Sep 23, 2005 12:33 pm
by halyavin
Нашел баг в текущей версии vesa12.inc. Думаю, что в Kolibri 4.5 он будет исправлен.

Posted: Mon Oct 24, 2005 6:39 pm
by ealex
У меня S3 Trio c 1 мегабайтом памяти. Какой именно чип не помню. Колибри 5.0.0.0 в 5-м режиме запускается, но вместо нижней части экрана снова появляется верхняя полоска. При движении курсора мыши по экрану бегают горизонтальные полосы. Скриншот здесь:
http://e-al.narod.ru/vesa12.jpg

Posted: Mon Oct 24, 2005 9:54 pm
by Mario79
ealex
У меня оно работало на S3 ViRGE PCI (325), на S3 Trio было так же как у тебя. Карточки по-разному программируются.
Кстати в K0510 есть процедура для Trident 9440, естественно Trident'ы тоже по-разному программируются.
Напиши полное название карточки, возможно смогу переделать функцию переключения банков. У меня некоторые доки есть.

Posted: Mon Oct 24, 2005 10:38 pm
by ealex
S3 Trio64 (764)

Кстати, какой бы видеорежим я не выбирал, у меня во врема загрузки пишется Глубина цвета: 32. Как это понимать?

Posted: Tue Oct 25, 2005 5:52 pm
by Mario79
ealex
Так и понимай! У меня тоже было только 32 бита.
Только на Vesa 2 у меня было 24 бита.

Posted: Wed Oct 26, 2005 11:59 am
by ealex
Я имел ввиду, что 32 появляется даже если выбран режим 9 или 0, где должно быть 256 и 16 цветов соответственно.

Posted: Wed Oct 26, 2005 12:44 pm
by mike.dld
А это уже особенности реализации режимов 0 и 9. Для них, в принципе, 32 - это правильно, потому что при, например, вызове функции 1 (put pixel) аппроксимированного цвета пиксел рисуется на экран (смещение 0xA0000), а также (!!!) реальный цвет пиксела записывается в 32-битный буфер, под который отводится память. сделано это для того, чтобы например, получать из буфера реальный цвет пиксела при вызове функции получения цвета пиксела на экране (попробуй например, загрузиться в режиме 0 или 9 и программой VSCREEN сделать снимок экрана - получишь полноцветный битмап).