Sign in to follow this  
Sephirox

OpenGL Old-School Graphics in Windows

Recommended Posts

Sephirox    128
hi, ive been wondering how to get into either mode13h or modeX in windows...what i mean is, how can i get into one of these modes, without using directx/opengl, if im running windows. i know it is possible, as ive seen/run programs that do it - my problem is that i get exceptions when i try the standard code for these modes (ie. those 2 lines of assembly for mode 13h). ive tried the code in windows, as well as MS-DOS, but in both cases i get errors or whacky stuff. can anyone help me out? i could really use some detailed help here, not just mov al, 13h int 10, thx

Share this post


Link to post
Share on other sites
Arild Fines    968
No modern version of Windows will let you do that; in fact, the BIOS interrupts for changing video mode just plain don't work in protected mode at all. There are a couple of ways to change video modes from protected mode, but all of them require privileges that user mode code on Windows (NT) doesn't have.

DirectDraw supports modes that are similar to mode13/modeX.

Share this post


Link to post
Share on other sites
Haan    122
Hi,

I've been struggling with the same question you have now. A few weeks ago, I just wanted to get into graphics programming (the polygon/rotation stuff). But I found it very difficult to do in Windows (with all the Windows specific code needed for even the simplest application).

Some guys on another forum explained to me that it couldn't be done the 'old fashioned' way (the mode 13h stuff), at least not that easy -- like Arild explains quite well.

Anyway, if you just want to do some graphics programming, without too much Windows handling etc., try SDL (Simple DirectMedia Layer). I'm using it right now (for only two weeks, what do I know?), but I'm really happy with what it does. Using Dev-C++ I'm up and running and doing simple graphics coding in no time, without the Windows hassle.

Hope this helps!

Jeroen

Share this post


Link to post
Share on other sites
Guest Anonymous Poster   
Guest Anonymous Poster
Use the free Borland C++ compiler (its a really old version but handles inline assembly). You can then run mode13h programs in the software DosBox under WindowsXP etc. Do a search on google for free borland tools and dosbox and that might help?

Paul

Share this post


Link to post
Share on other sites
Guest Anonymous Poster   
Guest Anonymous Poster
Use Allegro or SDL. I've used them both and they're very easy to set up to 320x200x8 or similar modes, in either fullscreen or windowed.

Share this post


Link to post
Share on other sites
izzo    437
Quote:
Original post by Arild Fines
No modern version of Windows will let you do that; in fact, the BIOS interrupts for changing video mode just plain don't work in protected mode at all.


That's not exactly true, depending on what, precisely, you mean. ;-) You can do a lot of things under NT-based Windows, *if* you run in virtual 86 mode, which is what you're in if you run an MS-DOS program. You can use the BIOS interrupts in v86 mode, so if you run a real mode program that switches video modes using the BIOS interrupts, it will work. V86 mode even virtualises ports so you can do all the usual graphics stuff like setting palettes, waiting for retrace, etc.

Here is an interesting document on v86 mode.

Anyway sephirox, to answer your question, if you want to write an MS-DOS program then you can get into mode 13 or mode x under windows very easily. However, these modes aren't really available if you're writing a Windows program. Windows hides a lot of that stuff; you can't just set the video card into 320x200x256 and access the video memory at good ol' 0xa000.

cheers
sam

Share this post


Link to post
Share on other sites
Guest Anonymous Poster   
Guest Anonymous Poster
bahh, forgot my password..

anyways, you can easily program for good 'ol mode 13h and friends; find a version of MSVC 1.0 or a compiler from that same erra and you won't have any compiling problems. I remember doing this for the longest time before I learned OpenGL. Just don't expect your BIOS timing interupts to work.

-Linolium

PS. MSVC 1.0 is 16 bit, not 32 bit like 6.0 and .Net

Share this post


Link to post
Share on other sites
Arild Fines    968
Quote:
Original post by izzo
That's not exactly true, depending on what, precisely, you mean. ;-) You can do a lot of things under NT-based Windows, *if* you run in virtual 86 mode, which is what you're in if you run an MS-DOS program. You can use the BIOS interrupts in v86 mode, so if you run a real mode program that switches video modes using the BIOS interrupts, it will work. V86 mode even virtualises ports so you can do all the usual graphics stuff like setting palettes, waiting for retrace, etc.

Yeah, I understand what you mean, but to me, it is more or less the same as saying "You can access hardware directly and do whatever you want under Win32, as long as you are running Bochs/Virtual PC/VMWare".

Share this post


Link to post
Share on other sites
Extrarius    1412
Arild Fines: The difference is that you don't need to run any 3rd party program, because windows includes the functionality. Just run a regular dos program in windows and it'll work (barring a few minor bugs in the system, for ex hooking the keyboard interrupt to detect key presses simmilarly to windows events doesn't work IME).

The reason most old games don't work is more often due to bad timing systems (for ex looping 10000 times then seeing how many milliseconds it took which results in divide by 0 on modern machines) than bugs in the virtual mode.

So, to do old-school graphics in windows, all you need is a good old 16 bit compiler =-)

Share this post


Link to post
Share on other sites
Guest Anonymous Poster   
Guest Anonymous Poster
I have recently wanted to try some old-school graphics programming, and I had remembered seeing a small graphics library to do just that. After some searching I found it, its called TinyPTC and it can be found here [link]www.gaffer.org/tinyptc[/link].

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

  • Similar Content

    • By cebugdev
      hi all,

      i am trying to build an OpenGL 2D GUI system, (yeah yeah, i know i should not be re inventing the wheel, but this is for educational and some other purpose only),
      i have built GUI system before using 2D systems such as that of HTML/JS canvas, but in 2D system, i can directly match a mouse coordinates to the actual graphic coordinates with additional computation for screen size/ratio/scale ofcourse.
      now i want to port it to OpenGL, i know that to render a 2D object in OpenGL we specify coordiantes in Clip space or use the orthographic projection, now heres what i need help about.
      1. what is the right way of rendering the GUI? is it thru drawing in clip space or switching to ortho projection?
      2. from screen coordinates (top left is 0,0 nd bottom right is width height), how can i map the mouse coordinates to OpenGL 2D so that mouse events such as button click works? In consideration ofcourse to the current screen/size dimension.
      3. when let say if the screen size/dimension is different, how to handle this? in my previous javascript 2D engine using canvas, i just have my working coordinates and then just perform the bitblk or copying my working canvas to screen canvas and scale the mouse coordinates from there, in OpenGL how to work on a multiple screen sizes (more like an OpenGL ES question).
      lastly, if you guys know any books, resources, links or tutorials that handle or discuss this, i found one with marekknows opengl game engine website but its not free,
      Just let me know. Did not have any luck finding resource in google for writing our own OpenGL GUI framework.
      IF there are no any available online, just let me know, what things do i need to look into for OpenGL and i will study them one by one to make it work.
      thank you, and looking forward to positive replies.
    • By fllwr0491
      I have a few beginner questions about tesselation that I really have no clue.
      The opengl wiki doesn't seem to talk anything about the details.
       
      What is the relationship between TCS layout out and TES layout in?
      How does the tesselator know how control points are organized?
          e.g. If TES input requests triangles, but TCS can output N vertices.
             What happens in this case?
      In this article,
      http://www.informit.com/articles/article.aspx?p=2120983
      the isoline example TCS out=4, but TES in=isoline.
      And gl_TessCoord is only a single one.
      So which ones are the control points?
      How are tesselator building primitives?
    • By Orella
      I've been developing a 2D Engine using SFML + ImGui.
      Here you can see an image
      The editor is rendered using ImGui and the scene window is a sf::RenderTexture where I draw the GameObjects and then is converted to ImGui::Image to render it in the editor.
      Now I need to create a 3D Engine during this year in my Bachelor Degree but using SDL2 + ImGui and I want to recreate what I did with the 2D Engine. 
      I've managed to render the editor like I did in the 2D Engine using this example that comes with ImGui. 
      3D Editor preview
      But I don't know how to create an equivalent of sf::RenderTexture in SDL2, so I can draw the 3D scene there and convert it to ImGui::Image to show it in the editor.
      If you can provide code will be better. And if you want me to provide any specific code tell me.
      Thanks!
    • By Picpenguin
      Hi
      I'm new to learning OpenGL and still learning C. I'm using SDL2, glew, OpenGL 3.3, linmath and stb_image.
      I started following through learnopengl.com and got through it until I had to load models. The problem is, it uses Assimp for loading models. Assimp is C++ and uses things I don't want in my program (boost for example) and C support doesn't seem that good.
      Things like glVertexAttribPointer and shaders are still confusing to me, but I have to start somewhere right?
      I can't seem to find any good loading/rendering tutorials or source code that is simple to use and easy to understand.
      I have tried this for over a week by myself, searching for solutions but so far no luck. With tinyobjloader-c and project that uses it, FantasyGolfSimulator, I was able to actually load the model with plain color (always the same color no matter what I do) on screen and move it around, but cannot figure out how to use textures or use its multiple textures with it.
      I don't ask much: I just want to load models with textures in them, maybe have lights affect them (directional spotlight etc). Also, some models have multiple parts and multiple textures in them, how can I handle those?
      Are there solutions anywhere?
      Thank you for your time. Sorry if this is a bit confusing, English isn't my native language
    • By dpadam450
      FINALLY, upgrading my engine to openGL 4. I was having some trouble so I started with a stripped down application and was wondering if VAO's are required, because I have a sample working, but if I remove the VAO then it doesn't seem to like drawing my triangle.
  • Popular Now