Форум программистов, компьютерный форум, киберфорум
ОС на Assembler
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/19: Рейтинг темы: голосов - 19, средняя оценка - 5.00
 Аватар для Naydli
217 / 53 / 4
Регистрация: 03.08.2013
Сообщений: 278

Включение LFB в VESA

27.12.2013, 11:28. Показов 3840. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Накипела проблема с переключением банков памяти при высоких разрешениях. Как включить LFB - рабочих примеров найти не удалось.

Прилагаю свой набросок, на котором тестирую

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
Use16
 
     
     STACK_BASE_ADDRESS      equ 200000h
     USER_PM_CODE_BASE_ADDRESS   equ 400000h
     USER_PM_CODE_SIZE equ USER_PM_CODE_END - USER_PM_CODE_BASE_ADDRESS
 
     CODE_SELEKTOR  equ 8h
     DATA_SELEKTOR  equ 10h
     VIDEO_SELEKTOR equ 18h
 
start:      jmp 7C0h:@f
 
 
 
@@:
 
 
 
 
    mov   ax,4f02h
    mov   bx,0x4101
 
    int   10h
 
 
 
 
        In      al,92h
        Or      al,2
        Out     92h,al
 
        lgdt        fword [cs:GDTR]
 
        Cli
        In      al,70h
        Or      al,80h
        Out     70h,al
 
        Mov     eax,cr0
        Or      al,1
        Mov     cr0,eax 
 
        db      66h
        db      0EAh
ENTRY_OFF   dd      PROTECTED_MODE_ENTRY_POINT+7C00h
        dw      CODE_SELEKTOR
 
 
 
align 8
GDT:
 
  ;Таблица дескрипторов
 
    NULL_descr  db      8 dup(0)
    CODE_descr  db      0FFh,0FFh,00h,00h,00h,10011010b,11001111b,00h
    DATA_descr  db      0FFh,0FFh,00h,00h,00h,10010010b,11001111b,00h
    VIDEO_descr db      0FFh,0FFh,00h,80h,0Bh,10010010b,01000000b,00h
    GDT_size    equ     $-GDT
 
label GDTR fword
        dw      GDT_size-1      
        dd      GDT+7C00h
 
 
Use32
 
PROTECTED_MODE_ENTRY_POINT:
        Mov        ax, DATA_SELEKTOR
        Mov        ds, ax
        Mov        es, ax
        Mov        ss, ax
        Mov        esp, STACK_BASE_ADDRESS
 
        call delta
     delta:
        Pop ebx
        Add ebx, USER_PM_CODE_START-delta
 
        Mov        esi, ebx
        Mov        edi, USER_PM_CODE_BASE_ADDRESS
        Mov        ecx, USER_PM_CODE_SIZE
        Rep        movsb
 
 
        Mov        eax,USER_PM_CODE_BASE_ADDRESS
        Jmp        eax
 
 
USER_PM_CODE_START:
ORG USER_PM_CODE_BASE_ADDRESS
        ; PM
 
Mov edi,0xE0000000
Mov ax, 0
Mov ecx,1400000
 
 
 
looop:
 
Mov byte [esi],2
Mov byte [esi],3
Inc esi
inc esi
Mov byte [esi],1
Inc esi
 
 
loop looop
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.12.2013, 11:28
Ответы с готовыми решениями:

VESA
Нужно написать программу, которая проверяет поддержку VESA и устанавливает режим 109h и вывести любой символ. Написал для проверки, но она...

Ошибка с VESA
Пользуюсь виртуальной машиной Qemu. При переходе в режим VESA 103h меняется расширение экрана но ни текста ни графики не видно(((Пустой...

VESA BIOS
Добрый день. Пытаюсь разобраться с Vesa BIOS,но на данный момент даже самые простые действия не получаются,а погуглив ничего толкового не...

11
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,049
27.12.2013, 14:24
http://nepanda.net/wasm/articl... lfbdos.htm

Эта статья познакомила с LFB и научила его юзать. Автору честь и хвала. А если не удалось найти рабочий пример, то пример плохо искался, по-моему.
0
 Аватар для Naydli
217 / 53 / 4
Регистрация: 03.08.2013
Сообщений: 278
28.12.2013, 12:00  [ТС]
Мне конкретно не ясно, как это работает. Так понимаю, необходимо получить информацию о видеоадаптере, затем считать физический адрес LFB и далее можно работать также, как и с обычной памятью 0xA0000?

Добавлено через 16 часов 20 минут
Получилось. Данный код включает 118 режим и выводит градиенты.


Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
Use16
 
 
     ;--------------------------------------
     ;Загрузка и переход в защищенный режим
     
     STACK_BASE_ADDRESS      equ 200000h
     USER_PM_CODE_BASE_ADDRESS   equ 400000h
     USER_PM_CODE_SIZE equ USER_PM_CODE_END - USER_PM_CODE_BASE_ADDRESS
 
     CODE_SELEKTOR  equ 8h
     DATA_SELEKTOR  equ 10h
     VIDEO_SELEKTOR equ 18h
 
start:      jmp 7C0h:@f
 
 
 
@@:
 
 
                  ; Получаем информацию о режиме
       mov  ax,4F01h
    mov cx,4118h
    mov edi,Info_Buffer
    int 10h
; Записываем физический адрес начала LFB в ESI
    mov esi,dword [Info_Buffer+028h]
; Устанавливаем режим
    mov ax,4F02h
    mov bx,4118h
    int 10h
 
 
        In      al,92h
        Or      al,2
        Out     92h,al
 
        lgdt        fword [cs:GDTR]
 
        Cli
        In      al,70h
        Or      al,80h
        Out     70h,al
 
        Mov     eax,cr0
        Or      al,1
        Mov     cr0,eax 
 
        db      66h
        db      0EAh
ENTRY_OFF   dd      PROTECTED_MODE_ENTRY_POINT+7C00h
        dw      CODE_SELEKTOR
 
 
 
align 8
GDT:
 
  ;Таблица дескрипторов
 
    NULL_descr  db      8 dup(0)
    CODE_descr  db      0FFh,0FFh,00h,00h,00h,10011010b,11001111b,00h
    DATA_descr  db      0FFh,0FFh,00h,00h,00h,10010010b,11001111b,00h
    VIDEO_descr db      0FFh,0FFh,00h,80h,0Bh,10010010b,01000000b,00h
    GDT_size    equ     $-GDT
 
label GDTR fword
        dw      GDT_size-1      
        dd      GDT+7C00h
 
 
Info_Buffer     db  256 dup(0)  ; Буфер для информации о режиме
 
 
 
 
Use32
 
PROTECTED_MODE_ENTRY_POINT:
        Mov        ax, DATA_SELEKTOR
        Mov        ds, ax
        Mov        es, ax
        Mov        ss, ax
        Mov        esp, STACK_BASE_ADDRESS
 
        call delta
     delta:
        Pop ebx
        Add ebx, USER_PM_CODE_START-delta
 
        Mov        esi, ebx
        Mov        edi, USER_PM_CODE_BASE_ADDRESS
        Mov        ecx, USER_PM_CODE_SIZE
        Rep        movsb
 
 
        Mov        eax,USER_PM_CODE_BASE_ADDRESS
        Jmp        eax
 
 
USER_PM_CODE_START:
ORG USER_PM_CODE_BASE_ADDRESS
        ; PM
 
mov edi,dword [Info_Buffer+028h]
loip:
inc edi
inc eax
 
 
mov [edi],byte ah
inc edi
mov [edi],byte al
inc edi
mov [edi],byte al
 
jmp loip
 
 
 
USER_PM_CODE_END:
0
2 / 1 / 0
Регистрация: 22.04.2013
Сообщений: 18
02.01.2014, 00:39
подарок на новый год
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
struc ModeInfoBlock
{
; Mandatory information for all VBE revisions
.ModeAttributes         dw ? ; mode attributes
.WinAAttributes         db ? ; window A attributes
.WinBAttributes         db ? ; window B attributes
.WinGranularity         dw ? ; window granularity
.WinSize                dw ? ; window size
.WinASegment            dw ? ; window A start segment
.WinBSegment            dw ? ; window B start segment
.WinFuncPtr             dd ? ; pointer to window function
.BytesPerScanLine       dw ? ; bytes per scan line
; Mandatory information for VBE 1.2 and above
.XResolution            dw ? ; horizontal resolution in pixels or characters3
.YResolution            dw ? ; vertical resolution in pixels or characters
.XCharSize              db ? ; character cell width in pixels
.YCharSize              db ? ; character cell height in pixels
.NumberOfPlanes         db ? ; number of memory planes
.BitsPerPixel           db ? ; bits per pixel
.NumberOfBanks          db ? ; number of banks
.MemoryModel            db ? ; memory model type
.BankSize               db ? ; bank size in KB
.NumberOfImagePages     db ? ; number of images
.Reserved1              db 1 ; reserved for page function
; Direct Color fields (required for direct/6 and YUV/7 memory models)
.RedMaskSize            db ? ; size of direct color red mask in bits
.RedFieldPosition       db ? ; bit position of lsb of red mask
.GreenMaskSize          db ? ; size of direct color green mask in bits
.GreenFieldPosition     db ? ; bit position of lsb of green mask
.BlueMaskSize           db ? ; size of direct color blue mask in bits
.BlueFieldPosition      db ? ; bit position of lsb of blue mask
.RsvdMaskSize           db ? ; size of direct color reserved mask in bits
.RsvdFieldPosition      db ? ; bit position of lsb of reserved mask
.DirectColorModeInfo    db ? ; direct color mode attributes
; Mandatory information for VBE 2.0 and above
.PhysBasePtr            dd ? ; physical address for flat memory frame buffer
.OffScreenMemOffset     dd ? ; pointer to start of off screen memory
.OffScreenMemSize       dw ? ; amount of off screen memory in 1k units
.Reserved2              db 206 dup (?) ; remainder of ModeInfoBlock
}
format binary as 'img'
org 07C00h
boot:     jmp     near start
      nop
gnOEM       db "OXYGEN  "       ; OEM строка
gnSectSize  dw 512          ; Байт на сектор
gnClustSize db 1            ; Секторов на кластер
gnRessect   dw 1            ; Количество резервных секторов
gnFatCnt    db 2            ; Количество копий FAT
gnRootSize  dw 224          ; Размер корневого каталога
gnTotalSect dw 2880         ; Всего секторов устройства
gnMedia     db 0F0h         ; Медиа дескриптор
gnFatSize   dw 9            ; Количество секторов под FAT
gnTrackSect dw 18           ; Секторов на дорожку
gnHeadCnt   dw 2            ; Количество головок устройства
gnHidenSect dd 0            ; Количество скрытых секторов
gnHugeSect  dd 0            ; Если gnTotalSect равен 0 это значение
                            ; равно числу секторов
gnBootDrv   db 0            ; Номер устройства
gnReserv    db 0            ; Не используется
gnBootSign  db 29h          ; Сигнатура расширения
gnVolID     dd 0                    ; Серийный номер тома
gnVoLabel       db "OXYGEN_OS  "    ; Метка тома
gnFSType        db "FAT12   "       ; Тип файловой системы
;heloww db 'hellow start'
start:
mov ax , 4F02h
;mov bx , 410Ah
mov bx , 4112h
int 10h
mov ax , 4F01h
;mov cx , 410Ah
mov cx , 4112h
mov di , vbe_mode
int 10h
cli
lgdt [GDTR]
mov eax, cr0 
or al, 1 
mov cr0, eax
jmp 00001000b: _protected
use32
_protected:
mov ax, 0x10
mov cs, ax
mov ds, ax
mov es, ax
mov ss, ax
mov al, 99h
mov edi, [vbe_mode.PhysBasePtr]
mov ecx, 0ff00h
rep stosb
hlt
ret
GDTR:
 dw (GDT_E-GDT_S)
 dd GDT_S
GDT_S:
    .null:                     ; 0x00 - null segment descriptor
        dd 0x00000000              ; must be left zero'd
        dd 0x00000000              ; must be left zero'd
             
    .code32:                   ; 0x01 - 32bit code segment descriptor 0xFFFFFFFF
        dw 0xFFFF              ; limit  0:15
        dw 0x0000              ; base   0:15
        db 0x00                ; base  16:23
        db 0x9A                ; present, iopl/0, code, execute/read
        db 0xCF                ; 4Kbyte granularity, 32bit selector; limit 16:19
        db 0x00                ; base  24:31
             
    .data32:                   ; 0x02 - 32bit data segment descriptor 0xFFFFFFFF
        dw 0xFFFF              ; limit  0:15
        dw 0x0000              ; base   0:15
        db 0x00                ; base  16:23
        db 0x92                ; present, iopl/0, data, read/write
        db 0xCF                ; 4Kbyte granularity, 32bit selector; limit 16:19
        db 0x00                ; base  24:31
             
    .code16:                   ; 0x03 - 16bit code segment descriptor 0x000FFFFF
        dw 0xFFFF              ; limit  0:15
        dw 0x0000              ; base   0:15
        db 0x00                ; base  16:23
        db 0x9A                ; present, iopl/0, code, execute/read
        db 0x0F                ; 1Byte granularity, 16bit selector; limit 16:19
        db 0x00                ; base  24:31
             
    .data16:                   ; 0x04 - 16bit data segment descriptor 0x000FFFFF
        dw 0xFFFF              ; limit  0:15
        dw 0x0000              ; base   0:15
        db 0x00                ; base  16:23
        db 0x92                ; present, iopl/0, data, read/write
        db 0x0F                ; 1Byte granularity, 16bit selector; limit 16:19
        db 0x00                ; base  24:31
GDT_E:
times 510-$+$$ db 0
db  055h,0AAh
data_gram:
vbe_mode ModeInfoBlock
data_gram_off:
times 512-data_gram_off+data_gram db 0
0
 Аватар для Naydli
217 / 53 / 4
Регистрация: 03.08.2013
Сообщений: 278
03.01.2014, 11:58  [ТС]
scuter, ваш код, к сожалению, не работает даже с учетом многочисленных поправок. К тому же, где А20?
0
2 / 1 / 0
Регистрация: 22.04.2013
Сообщений: 18
03.01.2014, 13:55
у меня всё работает.
0
 Аватар для Naydli
217 / 53 / 4
Регистрация: 03.08.2013
Сообщений: 278
03.01.2014, 14:09  [ТС]
scuter, на реальном железе?
0
2 / 1 / 0
Регистрация: 22.04.2013
Сообщений: 18
03.01.2014, 20:45
mashuly, а ты всё на реальной машине делаешь????
0
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,049
03.01.2014, 21:07
scuter, вообще mashuly я тут поддержу, ибо низкоуровневый код надо тестить на реальном железе иногда, т.к. иногда бывают случаи, когда на виртуалке всё идеально, а на реальных тачках получаются такие траблы, что потом весь код приходится с нуля переписывать
0
 Аватар для Naydli
217 / 53 / 4
Регистрация: 03.08.2013
Сообщений: 278
03.01.2014, 21:35  [ТС]
Цитата Сообщение от scuter Посмотреть сообщение
mashuly, а ты всё на реальной машине делаешь????
Разумеется. И исходя из тестов, в коде присутствуют ошибки еще при переходе в PM. На борще все это работает. Мой код (тот что выше, но со значительными переработками) и то на реальном железе без значительных глюков работает только на банках, LFB не работает попросту.
0
2 / 1 / 0
Регистрация: 22.04.2013
Сообщений: 18
03.01.2014, 23:24
mashuly, тогда проверь какие режимы у тебя там существуют и есть ли в них LFB,
его может там и не существовать.
0
 Аватар для Naydli
217 / 53 / 4
Регистрация: 03.08.2013
Сообщений: 278
04.01.2014, 00:51  [ТС]
A20 в некоторых случаях нужно включать через порт клавиатуры. Следует отметить, что LFB не всегда определяется через BIOS. Мне адрес приходилось определять вручную, что привело к успеху. Хотя то, что у меня LFB=0xE0000000, остается проблемой совместимости.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.01.2014, 00:51
Помогаю со студенческими работами здесь

Некорректный вывод BMP - VESA
Здравствуйте! Есть проблема. Пытаюсь вывести BMP картинку(24bpp) в режиме VESA(1024x768x24). Написал процедуру, все вроде как...

Прямой доступ к видеопамяти в режиме VESA
Если у кого-то есть код программы вывода на экран точки, графика, линии и т. д. в режиме VESA на ассемблере, то напишите пожалуйста. Буду...

VESA 4f00h - как считать информацию из буфера?
Всем привет, документация по VESA говорит что при вызове функции 4f00h и передаче в di адреса буфера размером 512 байт по смещению...

TASM + VESA чтение и запись видеопамяти напрямую
Столкнулся с проблемой: есть некоторое изображение представленное битами (14х20), его нужно вывести по заданным координатам. Режим 103h...

Создание замены для VESA методом модификации видеорежима 13h, 320x200 при 256 цветах
Появилась необходимость в создании замены для VESA методом модификации видеорежима 13h, 320x200 при 256 цветах. Иными словами, я пытаюсь...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru