Inline Assembly with turbo c 2.01

Started by
7 comments, last by Deranged 20 years, 4 months ago

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]
Advertisement
Put it inside of a function.
- The trade-off between price and quality does not exist in Japan. Rather, the idea that high quality brings on cost reduction is widely accepted.-- Tajima & Matsubara
same errors
errm.. what errors?
#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, &regs, &regs);} 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.. }
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
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.
Beer - the love catalystgood ol' homepage

This topic is closed to new replies.

Advertisement