Jump to content

  • Log In with Google      Sign In   
  • Create Account

Inline Assembly with turbo c 2.01


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
8 replies to this topic

#1 Deranged   Members   -  Reputation: 606

Like
Likes
Like

Posted 26 November 2003 - 11:26 AM

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]

Sponsor:

#2 Shannon Barber   Moderators   -  Reputation: 1390

Like
Likes
Like

Posted 26 November 2003 - 11:40 AM

Put it inside of a function.

#3 Deranged   Members   -  Reputation: 606

Like
Likes
Like

Posted 26 November 2003 - 11:47 AM

same errors

#4 phantom   Moderators   -  Reputation: 7564

Like
Likes
Like

Posted 26 November 2003 - 11:48 AM

errm.. what errors?

#5 Deranged   Members   -  Reputation: 606

Like
Likes
Like

Posted 26 November 2003 - 11:59 AM


#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

#6 phantom   Moderators   -  Reputation: 7564

Like
Likes
Like

Posted 26 November 2003 - 12:06 PM

you sure you''ve got the opening of the asm block right?
on VS.Net its __asm{.. assmbler here.. }

#7 Deranged   Members   -  Reputation: 606

Like
Likes
Like

Posted 26 November 2003 - 12:07 PM

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

#8 Deranged   Members   -  Reputation: 606

Like
Likes
Like

Posted 26 November 2003 - 12:08 PM

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]

#9 Dredge-Master   Members   -  Reputation: 175

Like
Likes
Like

Posted 26 November 2003 - 02:49 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.




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS