Archived

This topic is now archived and is closed to further replies.

Inline Assembly with turbo c 2.01

This topic is 5136 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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]

Share this post


Link to post
Share on other sites

#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 main
then lines 71-74 say declaration syntax error


COMPILED W/ TURBO C 2.01


Mercury Software

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
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]

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites