0xB8000000 (Начало видеобуфера)
От: ZaharowAV Россия  
Дата: 03.08.04 06:57
Оценка: +1 :))) :))) :))) :))) :))) :))) :))) :)))
Привет всем.
Скажите, как можно сделать указатель на начало видеобуфера, чтобы самому писать на экран в текстовом режиме в консольном приложении на C#?

пишу следующее:

unsafe ...
{
...
char *p;
p = (char*)0xB8000000;
*p='a'; // Допустим в левый верхний угол запишем символ 'a'.
...
}

Так вот — в последней строке возникает исключение "В экземпляре объекта не задана ссылка на объект" и программа останавливается.

05.08.04 18:28: Перенесено модератором из '.NET' — TK
Re: 0xB8000000 (Начало видеобуфера)
От: Belegel  
Дата: 03.08.04 20:47
Оценка: -2 :)
ZAV>Скажите, как можно сделать указатель на начало видеобуфера, чтобы самому писать на экран в текстовом режиме в консольном приложении на C#?

Ладно вам над человеком издеваться-то! Хотя такие вещи лучше все-таки под анонимом писать.

Дорогой ZaharowAV, виндовс не позволит Вам вот так просто писать напрямую в видеопамять, на каком бы языке программирования Вы не писали. Если только вы не пишете видеодрайвер, конечно. Но это уже совсем другая история...

Belegel.
Re[2]: 0xB8000000 (Конец видеобуфера)
От: Аноним  
Дата: 04.08.04 07:52
Оценка:
Здравствуйте, Belegel, Вы писали:

B>Ладно вам над человеком издеваться-то! Хотя такие вещи лучше все-таки под анонимом писать.

B>Дорогой ZaharowAV, виндовс не позволит Вам вот так просто писать напрямую в видеопамять, на каком бы языке программирования Вы не писали. Если только вы не пишете видеодрайвер, конечно. Но это уже совсем другая история...
B>Belegel.

Ладно вам над человеком издеваться-то! Хотя такие ответы тоже лучше всё-таки под анонимом писать.

P.S.
"реклама по радио: Продаётся компьютер — один Вэ Эм Эр Эс Ха Те".
Re: 0xB8000000 (Начало видеобуфера)
От: Andrbig  
Дата: 04.08.04 10:26
Оценка:
Здравствуйте, ZaharowAV, Вы писали:

ZAV>unsafe ...

ZAV>{
ZAV>...
ZAV>char *p;
ZAV>p = (char*)0xB8000000;
ZAV>*p='a'; // Допустим в левый верхний угол запишем символ 'a'.
ZAV>...
ZAV>}

Это провокация?
Re[2]: 0xB8000000 (Начало видеобуфера)
От: ZaharowAV Россия  
Дата: 04.08.04 11:21
Оценка:
Здравствуйте, Andrbig, Вы писали:

A>Здравствуйте, ZaharowAV, Вы писали:


ZAV>>unsafe ...

ZAV>>{
ZAV>>...
ZAV>>char *p;
ZAV>>p = (char*)0xB8000000;
ZAV>>*p='a'; // Допустим в левый верхний угол запишем символ 'a'.
ZAV>>...
ZAV>>}

A>Это провокация?


В каком смысле?
Да никакая это не провокация.
Просто у меня был очень приличный опыт написания программок под досом, а теперь просто проверяю, что из того, что я умел осталось действительно, а что надо подтягивать. Каким бы RAD не был навороченным — сам он алгоритмы не придумает и не напишет. Вот и перевожу свой старый опыт на новые рельсы.

Короче — мне нужен ответ. Либо можно в консольном приложении писать в видеобуфер, либо нет. Мне полемика о моих способностях не нужна. Если кого-то это задело, то извините.
Re[3]: 0xB8000000 (Начало видеобуфера)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 04.08.04 13:02
Оценка:
Здравствуйте, ZaharowAV, Вы писали:

ZAV>Короче — мне нужен ответ. Либо можно в консольном приложении писать в видеобуфер, либо нет.


Либо нет.
... << RSDN@Home 1.1.4 beta 2 >>
AVK Blog
Re: 0xB8000000 (Начало видеобуфера)
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 04.08.04 13:07
Оценка: :))
Здравствуйте, ZaharowAV, Вы писали:

Интересно, а разве в видеобуфере символы хранятся в уникоде???
... << RSDN@Home 1.1.3 stable >>
и солнце б утром не вставало, когда бы не было меня
Re[3]: 0xB8000000 (Начало видеобуфера)
От: Andrbig  
Дата: 04.08.04 14:06
Оценка:
Здравствуйте, ZaharowAV, Вы писали:

ZAV>Короче — мне нужен ответ. Либо можно в консольном приложении писать в видеобуфер, либо нет.


Не было, нет и не будет.

ZAV>Мне полемика о моих способностях не нужна. Если кого-то это задело, то извините.


Когда немного попривыкнешь к НЕТу, ответь сам на свой вопрос. Многое в реакции других станет понятней.
Re[2]: 0xB8000000 (Начало видеобуфера)
От: DEMON HOOD  
Дата: 04.08.04 18:30
Оценка:
Здравствуйте, Belegel, Вы писали:

B>виндовс не позволит Вам вот так просто писать напрямую в видеопамять,

странно, но вот это пишет в видеопамять и виндовс позволяет....

.model small
.stack 100h
.code
.186
start:
push FAR_BSS
pop ds
xor ax,ax
int 1ah
mov di,320*200+1
fill_buffer:
imul dx,4e35h
inc dx
mov ax,dx
shr ax,15
mov byte ptr [di],al
dec di
jnz fill_buffer
mov ax,0013h
int 10h
new_cycle:
mov di,320*200+1
step_1:
mov al,byte ptr [di+1]
add al,byte ptr [di-1]
add al,byte ptr [di+319]
add al,byte ptr [di-319]
add al,byte ptr [di+320]
add al,byte ptr [di-320]
add al,byte ptr [di+321]
add al,byte ptr [di-321]
shl al,4
or byte ptr [di],al
dec di
jnz step_1
mov di,320*200+1
flip_cycle:
mov al,byte ptr [di]
shr al,4
cmp al,3
je birth
cmp al,2
je f_c_continue
mov byte ptr [di],0
jmp short f_c_continue
birth:
mov byte ptr [di],1
f_c_continue:
and byte ptr [di],0fh
dec di
jnz flip_cycle
push 0a000h
pop es
mov cx,320*200
mov di,cx
mov si,cx
inc si
rep movsb
mov ah,1
int 16h
jz new_cycle
mov ax,0003h
int 10h
mov ax,4c00h
int 21h
.fardata?
db 320*200+1 dup(?)
end start
... <<silent Rsdn@Home 1.1.4 beta 1 Windows XP 5.1.2600.0 >>
Re[3]: 0xB8000000 (Начало видеобуфера)
От: Блудов Павел Россия  
Дата: 04.08.04 19:08
Оценка:
Здравствуйте, DEMON HOOD, Вы писали:

DH>странно, но вот это пишет в видеопамять и виндовс позволяет....

Щаззз. Дайте ей только разбежаться побыстрее.

Читайте про виртуальный 8086-режим из-под 80386-защищенного.
Ничуть это не видеопамять. Более того, Ваш код замечательно
заботает на сервере вообще без видеоадаптеров, из терминальной
сессии. Там даже понятия такого нету, как видеопамять.

Павел.
... << Rsdn@Home 1.1.4 beta 1 >>
Re[3]: 0xB8000000 (Начало видеобуфера)
От: mikа Stock#
Дата: 04.08.04 19:18
Оценка:
Здравствуйте, DEMON HOOD, Вы писали:

B>>виндовс не позволит Вам вот так просто писать напрямую в видеопамять,

DH>странно, но вот это пишет в видеопамять и виндовс позволяет....

Как человек далекий от видео памяти. Можно ли символы писать в видео память? Разве там не оперируется пикселями?
Re[4]: 0xB8000000 (Начало видеобуфера)
От: rockandroll Казахстан  
Дата: 05.08.04 02:14
Оценка: +1
Здравствуйте, mikа, Вы писали:

M>Как человек далекий от видео памяти. Можно ли символы писать в видео память? Разве там не оперируется пикселями?


В текстовом режиме оперируется символами.
... << RSDN@Home 1.1.2 stable >>
Re: 0xB8000000 (Начало видеобуфера)
От: Burd Украина http://proxysearcher.sourceforge.net
Дата: 05.08.04 14:35
Оценка:
Здравствуйте, ZaharowAV, Вы писали:

ZAV>Привет всем.

ZAV>Скажите, как можно сделать указатель на начало видеобуфера, чтобы самому писать на экран в текстовом режиме в консольном приложении на C#?

ZAV>пишу следующее:


ZAV>unsafe ...

ZAV>{
ZAV>...
ZAV>char *p;
ZAV>p = (char*)0xB8000000;
ZAV>*p='a'; // Допустим в левый верхний угол запишем символ 'a'.
ZAV>...
ZAV>}

ZAV>Так вот — в последней строке возникает исключение "В экземпляре объекта не задана ссылка на объект" и программа останавливается.


Может, указатель нужно создавать с помощью макроса MK_FP?
Любая задача имеет решение, даже когда решения не существует
Re[2]: 0xB8000000 (Начало видеобуфера)
От: Аноним  
Дата: 05.08.04 15:47
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> Интересно, а разве в видеобуфере символы хранятся в уникоде???

Да, ведь один символ занимает два байта!
Re[3]: 0xB8000000 (Начало видеобуфера)
От: Sergey Россия  
Дата: 05.08.04 15:51
Оценка:
Hello, !
You wrote on Thu, 05 Aug 2004 15:47:04 GMT:

S>> Интересно, а разве в видеобуфере символы хранятся в уникоде???

> Да, ведь один символ занимает два байта!

А где смайлик? Там байт под символ и байт под атрибуты.

With best regards, Sergey.
Posted via RSDN NNTP Server 1.9 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[4]: 0xB8000000 (Начало видеобуфера)
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 05.08.04 16:20
Оценка:
Здравствуйте, Sergey, Вы писали:

S>Hello, !

S>You wrote on Thu, 05 Aug 2004 15:47:04 GMT:

S>>> Интересно, а разве в видеобуфере символы хранятся в уникоде???

>> Да, ведь один символ занимает два байта!

S>А где смайлик? Там байт под символ и байт под атрибуты.


S>With best regards, Sergey.

Да уж как давно то это было.
Все никак вспомнить не могу. Байт под символ,а второй делился под цветом бэкграунда и соответственно под цвет символа, причем последний бит под мерцание.
Интересно как будет выглядеть уникодная русская 'Ё'
и солнце б утром не вставало, когда бы не было меня
Re[4]: 0xB8000000 (Начало видеобуфера)
От: DEMON HOOD  
Дата: 05.08.04 19:33
Оценка:
Здравствуйте, Блудов Павел, Вы писали:


DH>>странно, но вот это пишет в видеопамять и виндовс позволяет....

БП>Щаззз. Дайте ей только разбежаться побыстрее.

Дорогой ZaharowAV, виндовс не позволит Вам вот так просто писать напрямую в видеопамять, на каком бы языке программирования


я понял эту фразу, как вроде должен выскакивать аксес виолейшн.....

БП>Читайте про виртуальный 8086-режим из-под 80386-защищенного.

БП>Ничуть это не видеопамять. Более того, Ваш код замечательно


хотя,
мне по большому счёту всё равно куда будут записыватся мои байты, в видяху или нет, главное что программа работает так как было задумано.
... <<Rammstein — You hate Rsdn@Home 1.1.4 beta 1 Windows XP 5.1.2600.0 >>
Re[5]: 0xB8000000 (Начало видеобуфера)
От: der Igel Россия  
Дата: 05.08.04 19:53
Оценка: :))) :))
Здравствуйте, DEMON HOOD, Вы писали:

... <<Rammstein — You hate Rsdn@Home 1.1.4 beta 1 Windows XP 5.1.2600.0 >>

Re: 0xB8000000 (Начало видеобуфера)
От: null_pointer  
Дата: 05.08.04 22:16
Оценка: 36 (1)
Здравствуйте, ZaharowAV, Вы писали:

ZAV>Привет всем.

ZAV>Скажите, как можно сделать указатель на начало видеобуфера, чтобы самому писать на экран в текстовом режиме в консольном приложении на C#?

ZAV>пишу следующее:


ZAV>unsafe ...

ZAV>{
ZAV>...
ZAV>char *p;
ZAV>p = (char*)0xB8000000;
ZAV>*p='a'; // Допустим в левый верхний угол запишем символ 'a'.
ZAV>...
ZAV>}

ZAV>Так вот — в последней строке возникает исключение "В экземпляре объекта не задана ссылка на объект" и программа останавливается.


Если вы хотите записать произвольный символ(ы) в произвольное место консольного окна, то вам нужны функции
WriteConsoleOutputCharacter
WriteConsoleOutput
WriteConsoleOutputAttribute
Подробности — в MSDN.
С уважением, Сергей.
Re[5]: 0xB8000000 (Начало видеобуфера)
От: Frostbitten Россия  
Дата: 06.08.04 05:04
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> Все никак вспомнить не могу. Байт под символ,а второй делился под цветом бэкграунда и соответственно под цвет символа, причем последний бит под мерцание.

Не всегда, можно установить так, чтобы последний бит отвечал за яркость фонового цвета, а не за мигание

S>Интересно как будет выглядеть уникодная русская 'Ё'

Как темнокрасная рожа на черном фоне.

Не, прямое управление адаптером EGA — это вещь, не то что сейчас — хлебом не корми, дай блитнуть трукалором...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.