WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Вывод прямо на экран

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Вывод прямо на экран
Feofan опубликован 16-01-2002 23:50 MSK   Click Here to See the Profile for Feofan   Click Here to Email Feofan  
Как в дос выводить прямо на экран напрямую?
Kosha опубликован 17-01-2002 12:16 MSK     Click Here to See the Profile for Kosha  Click Here to Email Kosha     
Если про графику - то в режимах до 13h включительно - память по адресу A000h и далее.
Видеобуфер называется. 64К.
Если же ставишь SVGA-режим, тут начинается гемор.
Придется через BIOS передвигать фрейм проецирования в память...
rivitna опубликован 17-01-2002 12:16 MSK     Click Here to See the Profile for rivitna  Click Here to Email rivitna     
В зависимости от графического режима!
В каком режиме?
rivitna опубликован 17-01-2002 12:37 MSK     Click Here to See the Profile for rivitna  Click Here to Email rivitna     
> Если про графику - то в режимах до 13h
> включительно - память по адресу A000h и
> далее.

Не так все просто, увы. В режимах 0Dh, 0Eh, 10h, 12h видеоданные хранятся битовыми слоями, то бишь вначале нулевые биты пикселов, затем первые и т.д. То есть нужно еще уметь программировать видеоконтроллер напрямую, через регистры.
В режиме память имеет линейную структуру, каждому пикселу соответствует свой байт.

> Видеобуфер называется. 64К.

Не очень правильно. Если говорить про VGA, то видеопамять имеет размер 256кб. Для графических режимов начальный сегмент 0A000h, для текстовых - 0B800h

> Если же ставишь SVGA-режим, тут начинается
> гемор.
> Придется через BIOS передвигать фрейм
> проецирования в память...

Да, придется немного потрахаться! Вывод через окно, максимальный размер которого 64к (сегмент 0A000h). И так через это окошко по всему экрану (а-ля принцип работы с памятью EMS)

Хотелось бы знать про каким режимом собственно ты интересуешься?
А еще лучше найди готовые библиотеки или книжки? Самому писать напряжно. Я писал где-то примерно месяц на АСМе для режимов 10h и 12h. Можешь взять их за основу, только адаптируй для вызова через С.

rivitna опубликован 17-01-2002 12:39 MSK     Click Here to See the Profile for rivitna  Click Here to Email rivitna     
> В режиме память имеет линейную структуру,
> каждому пикселу соответствует свой байт.

пропустил номер режима :(
Я имел в виду режим 13h

rivitna опубликован 17-01-2002 12:51 MSK     Click Here to See the Profile for rivitna  Click Here to Email rivitna     
Блин, тороможу, наверное пора спать :((((

Некорректно сформулировал:
> вначале нулевые биты пикселов, затем
> первые и т.д.
Битовые слои располагаются в одном адресном пространстве - по адресу одного байта располагаются байты всех цветовых слоев. Выбор слоя определяется значениями регистров адаптера.

Feofan опубликован 17-01-2002 22:54 MSK     Click Here to See the Profile for Feofan  Click Here to Email Feofan     
VGA режим... 80х25
Нужно просто слова выводить ну цвета фона менять. Что за библиотеки? и где их взять?

Еще в догонку вопрос: подключаю graphics.h но функции от туда не юзятся? линковщик говорит "Андефинед символ ...и названия функций" че за байда?

clay_pigeon опубликован 17-01-2002 23:04 MSK     Click Here to See the Profile for clay_pigeon  Click Here to Email clay_pigeon     
Feofan, а graphics.lib подключил?
Feofan опубликован 17-01-2002 23:17 MSK     Click Here to See the Profile for Feofan  Click Here to Email Feofan     
Не %) глупый вопрос конечно, а как её подключать?
Heromantor опубликован 17-01-2002 23:58 MSK     Click Here to See the Profile for Heromantor  Click Here to Email Heromantor     
Для 80x25, сегмент 0xB800, там сначала храниться атрибуты символа(вроде 4-бита цвет фона, 4-бита цает символа, если не включен blink, иначе на какой-то цвет приходиться 3 бита) потом сам символ, в ощем есть такая вещь TechHelp6.0 наз-ся посмотри там, да это везде есть...
rivitna опубликован 18-01-2002 07:25 MSK     Click Here to See the Profile for rivitna  Click Here to Email rivitna     
Чтобы не таскать graphics.lib из-за пустяка, напиши сам процедурки на встроенном ассемблере в таком духе:

/* функция вывода строки с атрибутами
(работает во всех текстовых режимов) */
void outtextxy(int x, int y, char *string, int color)
{
asm
{
push es
push si
push di

mov ax,40h
mov es,ax
mov al,es:[4Ah]
mul BYTE PTR [y]
add ax,[x]
shl ax,1
mov di,ax
mov ax,0B800h
mov es,ax

mov si,[string]

mov ah,BYTE PTR [color]

CharLoop:
lodsb
or al,al
jz Exit
stosw
jmp CharLoop

Exit:
pop di
pop si
pop es
}
}

Feofan опубликован 19-01-2002 13:57 MSK     Click Here to See the Profile for Feofan  Click Here to Email Feofan     
Спасибо rivitna :) но она вывыдит что угодно только не мою строку:) почему в Борланд С 3.0 не хочет компилироваться (не хочет метки как таковые признавать)? хотя в 5.0 все ок!
И еще вопрос, все таки как .lib-ы подключать?
rivitna опубликован 19-01-2002 15:19 MSK     Click Here to See the Profile for rivitna  Click Here to Email rivitna     
> ...она вывыдит что угодно только не мою
> строку:)

Ты компилишь в дальней модели (Compact, Large или Huge), то бишь с дальними указателями.

Я не думаю, что у тебя есть крайняя необходимость в такой модели памяти. Ставь "Small", не прогадаешь, да и программка побыстрее будет работать и поменьше в размерах.

> почему в Борланд С 3.0 не хочет
> компилироваться (не хочет метки как
> таковые признавать)? хотя в 5.0 все ок!

Во встроенном асме BC 3.0 метки не должны быть в блоках asm в отличие от BC 5.0.


> И еще вопрос, все таки как .lib-ы
> подключать?

graphics подключается элементарно!
Для BC 3.0 выбрать Options\Linker\Libraries...
поставить галочку Graphics library и укажи заголовочный файл:
#include <graphics>

чтобы прилинковать допустим mylib.lib надо откомпилить в BC, получить файл *.obj а затем из командной строки запустить типа такого
bcc sample.obj mylib.lib

Если у тебя немного работы с графикой не стоит связываться с graphics.lib, лучше самому написать эти функции. В этом случае в твоей проге меньше будет лишнего кода и опять же работать будет побыстрее.

Я подправил текст процедурки, так чтобы она компилилась в BC 3.0 и во всех моделях памяти.
void outtextxy(int x, int y, char *string, int color)
{
#if !(defined(__TINY__)

rivitna опубликован 19-01-2002 15:21 MSK     Click Here to See the Profile for rivitna  Click Here to Email rivitna     
Не влезло :(

void outtextxy(int x, int y, char *string, int color)
{
#if !(defined(__TINY__)

rivitna опубликован 19-01-2002 15:28 MSK     Click Here to See the Profile for rivitna  Click Here to Email rivitna     
Символ "вертикальная черта не передается" :(((
замени все "?" на этот символ

void outtextxy(int x, int y, char *string, int color)
{
#if !(defined(__TINY__) ?? defined(__SMALL__) ?? defined(__MEDIUM__))
asm push ds
#endif

asm mov ax,40h
asm mov es,ax
asm mov al,es:[4Ah]
asm mul BYTE PTR [y]
asm add ax,[x]
asm shl ax,1
asm mov di,ax
asm mov ax,0B800h
asm mov es,ax

#if defined(__TINY__) ?? defined(__SMALL__) ?? defined(__MEDIUM__)
asm mov si,[string]
#else
asm lds si,[string]
#endif

asm mov ah,BYTE PTR [color]

_CharLoop:
asm lodsb
asm or al,al
asm jz _Exit
asm stosw
asm jmp _CharLoop

_Exit:
#if !(defined(__TINY__) ?? defined(__SMALL__) ?? defined(__MEDIUM__))
asm pop ds
#endif
}

Feofan опубликован 19-01-2002 19:07 MSK     Click Here to See the Profile for Feofan  Click Here to Email Feofan     
Большое СПАСИБО!!!
lamo опубликован 19-01-2002 19:57 MSK     Click Here to See the Profile for lamo  Click Here to Email lamo     
не могу не написать.

rivitna, красиво ).
этак ностальгией дунуло ...


зы.
дополнение.
если вдрук CGA - там есть такое понятие "снег".
вобщем там когда луч возвращается - тебе нужно его отслеживать.
когда в текст. режиме напрямую в видеопамять
пишеш на цга наблюдается "аффехт снега" такскать.

ззы.
если не секрет, где это тебе понадобилось ?
или ты студент )?

Feofan опубликован 19-01-2002 20:59 MSK     Click Here to See the Profile for Feofan  Click Here to Email Feofan     
Студент:) он самый:)

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.