asm {mov ax,0x4f02
mov bx,0x103
int 0x10
cmp al,0x4f
jne NotSupported
cmp ah,0
jne Failed
}
ive tried it in main outside of main using the -b switch and so on it just gives a bunch of errors.
EDIT: this should set vesa 800x600x256
Mercury Software
[edited by - DerAngeD on November 26, 2003 6:29:04 PM]
Inline Assembly with turbo c 2.01
#include <stdio.h>#include <stdlib.h>#include <dos.h>#define VIDEO_INT 0x10 /* the BIOS video interrupt. */#define WRITE_DOT 0x0C /* BIOS func to plot a pixel. */#define MODEONE 0x00 /* BIOS func to set the video mode. */#define VESAMODE 0x4F02 /* BIOS func to set the video mode. */#define VGA_VESA 0x103 /* use to set 256-color mode. */#define THIRTEENH 0x13 /* use to set 256-color mode. */#define TEXT_MODE 0x03 /* use to set 80x25 text mode. */#define SCREEN_WIDTH 800 /* width in pixels of mode 0x13 */#define SCREEN_HEIGHT 600 /* height in pixels of mode 0x13 */#define NUM_COLORS 256 /* number of colors in mode 0x13 */typedef unsigned char byte;typedef unsigned short word;byte *VGA=(byte *)0xA0000000L; /* this points to video memory. */word *my_clock=(word *)0x0000046C; /* this points to the 18.2hz system clock. *//************************************************************************** * set_mode * * Sets the video mode. * **************************************************************************/void set_mode(byte mode, byte tttype){ union REGS regs; regs.h.ah = tttype; regs.h.al = mode; int86(VIDEO_INT, ®s, ®s);} main(){ set_mode(THIRTEENH, MODEONE); /* set the video mode. */ asm { mov ax,0x4f02 mov bx,0x103 int 0x10 cmp al,0x4f jne NotSupported cmp ah,0 jne Failed } /* record the starting time. */ /* calculate how long it took. */ getch(); set_mode(TEXT_MODE, MODEONE); printf("did it work?????"); getch(); return;}
ERRORS
line 54:undefined symbol mov in funtion mainthen lines 71-74 say declaration syntax error
COMPILED W/ TURBO C 2.01
Mercury Software
you sure you''ve got the opening of the asm block right?
on VS.Net its __asm{.. assmbler here.. }
on VS.Net its __asm{.. assmbler here.. }
i just solved it through google.
Turbo C++ lets you write assembly language code right inside your C and C++ programs. This is known as inline assembly and has certain restrictions.
It cannot use assembler macros
It cannot handle 80386 or 80486 instructions
It does not permit Ideal mode syntax
It allows only a limited set of assembler directives
Turbo C++ lets you write assembly language code right inside your C and C++ programs. This is known as inline assembly and has certain restrictions.
It cannot use assembler macros
It cannot handle 80386 or 80486 instructions
It does not permit Ideal mode syntax
It allows only a limited set of assembler directives
quote:Original post by _the_phantom_
you sure you've got the opening of the asm block right?
on VS.Net its __asm{.. assmbler here.. }
yes i did hav it right read the above post
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
EDIT:could someone port that assmembly to c?
[edited by - DerAngeD on November 26, 2003 7:20:10 PM]
if you are using turbo C, just use #include <vesa.h> and the vesa.bgi drivers (you''ll have to download them seperately, they weren''t in the first distribution - atleast not on the ones I had).
and you should try __asm, not asm. Same goes for the other versions of borland C/C++/builder etc.
I haven''t got version 2.0 installed anymore, but it works fine in the 5.5 compiler.
and you should try __asm, not asm. Same goes for the other versions of borland C/C++/builder etc.
I haven''t got version 2.0 installed anymore, but it works fine in the 5.5 compiler.
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement