Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > Putpixel


Автор: dima_mak 14.7.2004, 11:58
Народ подскажите как его сделать на асм для разрешения 640х480 и ещё так, что бы можно было засунуть его в С и он работал smile.gif

Спасибо зарание

Автор: _Chingachguk_ 15.7.2004, 08:57
Перписать это на СИ:

Цитата

procedure pixel10(color:byte; x,y:integer);
begin
asm
push bp
mov bp,sp
push dx
push bx
push si
push di
mov  ax,0a000h
mov  es,ax
mov  ax,[bp+6]
mov  bx,[bp+8]
mov cl,bl
shl ax,1
shl ax,1
shl ax,1
shl ax,1
mov si,ax
shl ax,1
shl ax,1
add ax,si
shr bx,1
shr bx,1
shr bx,1
add bx,ax
and cl,7
xor cl,7
mov ah,1
shl ah,cl
mov dx,3ceh
mov al,8
out dx,ax
mov ax,205h
out dx,ax
mov ax,1802h
out dx,ax
mov al,es:[bx]
mov al,[bp+10]
mov es:[bx],al
mov ax,0ff08h
out dx,ax
mov ax,05h
out dx,ax
mov ax,03h
out dx,ax
pop  di
pop  si
pop  bx
pop  dx
pop  bp
end;
end;
procedure graph10;
begin
asm
xor ah,ah
mov al,10h
int 10h
end;
end;
procedure close10;
begin
asm
xor ah,ah
mov al,03h
mov bh,ah
int 10h
end;
end;

Автор: cardinal 15.7.2004, 09:03
out dx,ax wink.gif
В Windows такое насколько я знаю не проидет...

Автор: oleg1973 15.7.2004, 09:39
ну дык это 16 цветный режим smile.gif
_Chingachguk_
тыб еще монохромный вспомнил smile.gif

вот тут есть http://realtech-vr.com/vesa/ некая SDK которая поможет в написании на С

Автор: dima_mak 15.7.2004, 10:19
Цитата

procedure pixel10(color:byte; x,y:integer);
begin
asm
push bp
mov bp,sp
push dx
push bx
push si
push di
mov  ax,0a000h
mov  es,ax
mov  ax,[bp+6]
mov  bx,[bp+8]
mov cl,bl
shl ax,1
shl ax,1
shl ax,1
shl ax,1
mov si,ax
shl ax,1
shl ax,1
add ax,si
shr bx,1
shr bx,1
shr bx,1
add bx,ax
and cl,7
xor cl,7
mov ah,1
shl ah,cl
mov dx,3ceh
mov al,8
out dx,ax
mov ax,205h
out dx,ax
mov ax,1802h
out dx,ax
mov al,es:[bx]
mov al,[bp+10]
mov es:[bx],al
mov ax,0ff08h
out dx,ax
mov ax,05h
out dx,ax
mov ax,03h
out dx,ax
pop  di
pop  si
pop  bx
pop  dx
pop  bp
end;
end;
procedure graph10;
begin
asm
xor ah,ah
mov al,10h
int 10h
end;
end;
procedure close10;
begin
asm
xor ah,ah
mov al,03h
mov bh,ah
int 10h
end;
end;

что то я не догоняю. Где ты в первой функцие пользуешься координатами и цветом которые получаешь? Вродебы нигде, но когда я меняю значения при вызове функции, что то меняеться, но непонятно как(меняю х и иногда меняеться цвет, меняю у ничего вродебы не миняеться, короче какаято хренотень)

Автор: dima_mak 15.7.2004, 10:34
Цитата(oleg1973 @ 15.7.2004, 09:39)
ну дык это 16 цветный режим smile.gif
_Chingachguk_
тыб еще монохромный вспомнил smile.gif

вот тут есть http://realtech-vr.com/vesa/ некая SDK которая поможет в написании на С

мне 16 цветов достаточно.
и мне надо это сделать голыми руками(без постороних библиотек)
Добавлено @ 10:38
Цитата(dima_mak @ 15.7.2004, 10:19)
что то я не догоняю. Где ты в первой функцие пользуешься координатами и цветом которые получаешь? Вродебы нигде, но когда я меняю значения при вызове функции, что то меняеться, но непонятно как(меняю х и иногда меняеться цвет, меняю у ничего вродебы не миняеться, короче какаято хренотень)

ито меняеться только если я запускаю это функцию в цикле 200 раз, а если без цикла, то рисуеться точка справа посредине(примерно) синего цвета

Автор: _Chingachguk_ 15.7.2004, 10:55
Держи на СИ.

Код

#include <stdio.h>
#include <conio.h>
#include <io.h>
#include <fcntl.h>
#include <sys\stat.h>
#include <string.h>

void pixel10(unsigned char color, unsigned int x, unsigned int y)
{
asm {
push dx
push bx
push si
push di
mov  ax,0a000h
mov  es,ax
mov  ax,y
mov  bx,x
mov cl,bl
shl ax,1
shl ax,1
shl ax,1
shl ax,1
mov si,ax
shl ax,1
shl ax,1
add ax,si
shr bx,1
shr bx,1
shr bx,1
add bx,ax
and cl,7
xor cl,7
mov ah,1
shl ah,cl
mov dx,0x3ce
mov al,8
out dx,ax
mov ax,0x205
out dx,ax
mov ax,0x1802
out dx,ax
mov al,es:[bx]
mov al,color
mov es:[bx],al
mov ax,0x0ff08
out dx,ax
mov ax,0x05
out dx,ax
mov ax,0x03
out dx,ax
pop  di
pop  si
pop  bx
pop  dx
}
}
void graph10(void)
{
asm {
xor ah,ah
mov al,0x10
int 0x10
}
}
void close10(void)
{
asm {
xor ah,ah
mov al,0x03
mov bh,ah
int 0x10
}
}
void main(void)
{
 int x,y;
 unsigned char color;
 unsigned char TestStr[]= "test string";

 printf("\nStart=%",TestStr);

 graph10();

 color= 1;
 y= 100;
 for (x=10; x<200; x++)
 {
    pixel10(color, x, y);
    if (!(x & 0x0F))
    {
       y+= 10;
       color++;
    }
 }

 getchar();

 close10();
}

Автор: Vasan 9.8.2004, 04:23
dima_mak ! Если будет нужно, скину исходник на асме, как работать с любыми графическими режимами и большими цветами из-под доса (только). Тебе что-нибудь говорит 1024х768х32бит. Если да, то дай знать: vasan444@yahoo.co.uk

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)