Привет всем.
Скажите, как можно сделать указатель на начало видеобуфера, чтобы самому писать на экран в текстовом режиме в консольном приложении на C#?
пишу следующее:
unsafe ...
{
...
char *p;
p = (char*)0xB8000000;
*p='a'; // Допустим в левый верхний угол запишем символ 'a'.
...
}
Так вот — в последней строке возникает исключение "В экземпляре объекта не задана ссылка на объект" и программа останавливается.
05.08.04 18:28: Перенесено модератором из '.NET' — TK
ZAV>Скажите, как можно сделать указатель на начало видеобуфера, чтобы самому писать на экран в текстовом режиме в консольном приложении на C#?
Ладно вам над человеком издеваться-то! Хотя такие вещи лучше все-таки под анонимом писать.
Дорогой ZaharowAV, виндовс не позволит Вам вот так просто писать напрямую в видеопамять, на каком бы языке программирования Вы не писали. Если только вы не пишете видеодрайвер, конечно. Но это уже совсем другая история...
Belegel.
Re[2]: 0xB8000000 (Конец видеобуфера)
От:
Аноним
Дата:
04.08.04 07:52
Оценка:
Здравствуйте, Belegel, Вы писали:
B>Ладно вам над человеком издеваться-то! Хотя такие вещи лучше все-таки под анонимом писать. B>Дорогой ZaharowAV, виндовс не позволит Вам вот так просто писать напрямую в видеопамять, на каком бы языке программирования Вы не писали. Если только вы не пишете видеодрайвер, конечно. Но это уже совсем другая история... B>Belegel.
Ладно вам над человеком издеваться-то! Хотя такие ответы тоже лучше всё-таки под анонимом писать.
P.S.
"реклама по радио: Продаётся компьютер — один Вэ Эм Эр Эс Ха Те".
Здравствуйте, Andrbig, Вы писали:
A>Здравствуйте, ZaharowAV, Вы писали:
ZAV>>unsafe ... ZAV>>{ ZAV>>... ZAV>>char *p; ZAV>>p = (char*)0xB8000000; ZAV>>*p='a'; // Допустим в левый верхний угол запишем символ 'a'. ZAV>>... ZAV>>}
A>Это провокация?
В каком смысле?
Да никакая это не провокация.
Просто у меня был очень приличный опыт написания программок под досом, а теперь просто проверяю, что из того, что я умел осталось действительно, а что надо подтягивать. Каким бы RAD не был навороченным — сам он алгоритмы не придумает и не напишет. Вот и перевожу свой старый опыт на новые рельсы.
Короче — мне нужен ответ. Либо можно в консольном приложении писать в видеобуфер, либо нет. Мне полемика о моих способностях не нужна. Если кого-то это задело, то извините.
Здравствуйте, 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 >>
Здравствуйте, DEMON HOOD, Вы писали:
DH>странно, но вот это пишет в видеопамять и виндовс позволяет....
Щаззз. Дайте ей только разбежаться побыстрее.
Читайте про виртуальный 8086-режим из-под 80386-защищенного.
Ничуть это не видеопамять. Более того, Ваш код замечательно
заботает на сервере вообще без видеоадаптеров, из терминальной
сессии. Там даже понятия такого нету, как видеопамять.
Здравствуйте, DEMON HOOD, Вы писали:
B>>виндовс не позволит Вам вот так просто писать напрямую в видеопамять, DH>странно, но вот это пишет в видеопамять и виндовс позволяет....
Как человек далекий от видео памяти. Можно ли символы писать в видео память? Разве там не оперируется пикселями?
Здравствуйте, 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> Интересно, а разве в видеобуфере символы хранятся в уникоде???
Да, ведь один символ занимает два байта!
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 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, Sergey, Вы писали:
S>Hello, ! S>You wrote on Thu, 05 Aug 2004 15:47:04 GMT:
S>>> Интересно, а разве в видеобуфере символы хранятся в уникоде??? >> Да, ведь один символ занимает два байта!
S>А где смайлик? Там байт под символ и байт под атрибуты.
S>With best regards, Sergey.
Да уж как давно то это было.
Все никак вспомнить не могу. Байт под символ,а второй делился под цветом бэкграунда и соответственно под цвет символа, причем последний бит под мерцание.
Интересно как будет выглядеть уникодная русская 'Ё'
и солнце б утром не вставало, когда бы не было меня
DH>>странно, но вот это пишет в видеопамять и виндовс позволяет.... БП>Щаззз. Дайте ей только разбежаться побыстрее.
Дорогой ZaharowAV, виндовс не позволит Вам вот так просто писать напрямую в видеопамять, на каком бы языке программирования
я понял эту фразу, как вроде должен выскакивать аксес виолейшн.....
БП>Читайте про виртуальный 8086-режим из-под 80386-защищенного. БП>Ничуть это не видеопамять. Более того, Ваш код замечательно
хотя,
мне по большому счёту всё равно куда будут записыватся мои байты, в видяху или нет, главное что программа работает так как было задумано.
... <<Rammstein — You hate Rsdn@Home 1.1.4 beta 1 Windows XP 5.1.2600.0 >>
Здравствуйте, 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.
С уважением, Сергей.
Здравствуйте, Serginio1, Вы писали:
S> Все никак вспомнить не могу. Байт под символ,а второй делился под цветом бэкграунда и соответственно под цвет символа, причем последний бит под мерцание.
Не всегда, можно установить так, чтобы последний бит отвечал за яркость фонового цвета, а не за мигание
S>Интересно как будет выглядеть уникодная русская 'Ё'
Как темнокрасная рожа на черном фоне.
Не, прямое управление адаптером EGA — это вещь, не то что сейчас — хлебом не корми, дай блитнуть трукалором...