Solved

what code cannot?

Posted on 2000-04-05
14
194 Views
Last Modified: 2010-04-10
Hi experts:
    Would you plz tell me what  assembly code cannot run under WindowXX?

    I try this code but I fail .Program crashed:
    mov ax , 13h
    int 10h
Above I want to switch to mode 13h to draw pixel .

Btw: What interrupt is it : 800*600*256 ?
I know 13h is 320x200x256.

Thank you!!
 
0
Comment
Question by:Babyworship
  • 10
  • 3
14 Comments
 

Author Comment

by:Babyworship
ID: 2688808
I feel strange.Does the video card's memory(VRAM) is mapped into the 32bit memory address?
0
 
LVL 4

Accepted Solution

by:
nils pipenbrinck earned 100 total points
ID: 2689226
simple answer:

Under windows the video bios is not available. You can't use int 10h to set a video mode.

I guess you're trying to run a old dos graphics code under windows. Well.. it won't work.

You have two options: either go down to dos and use a dos compiler. In a dos-window int 10h will work quite nice (at least under win98 and win95. I don't know about nt and win2k).

The modern way would be to use some c-code and do a directdraw init. Then you can switch into any videomode supported by your hardware and fool around with the pixels.

Nils
0
 
LVL 3

Expert Comment

by:daitt
ID: 2689329
I think it's fine to run your program as a DOS application (under a DOS session of Windows). But you cannot run a Window application and then call int 10h, because Windows doesn't allow you to access video device that way.
Just want to hear other ideas.
BTW: if you want 800x600*256 you may have to program VESA BIOS (for VESA-compatible video card). For different cards they have different interrupts to control the hardware. It's in DOS only.
In Windows you should have a look at DirectX. Windows doesn't like you to direct access the video memory as well as other devices.
0
 

Author Comment

by:Babyworship
ID: 2690010
Thanks nil and does the video card's memory(VRAM) is mapped into the 32bit memory address in windows?

And can you tell me a general rule ? What code cannot run under window-system window which can under dos?Otherwise,i'm afraind futhur quesiton like this.

Thank you

0
 

Author Comment

by:Babyworship
ID: 2690020
Thanks daitt very much!!
0
 

Author Comment

by:Babyworship
ID: 2690029
Adjusted points from 50 to 60
0
 

Author Comment

by:Babyworship
ID: 2690033
Adjusted points from 60 to 70
0
Do You Know the 4 Main Threat Actor Types?

Do you know the main threat actor types? Most attackers fall into one of four categories, each with their own favored tactics, techniques, and procedures.

 

Author Comment

by:Babyworship
ID: 2690043
>Windows doesn't like you to direct >access the video memory as well as >other devices

Sorry,daitt.sorry for my stupidity.
Would you tell me what "direct access" means in fact? It means what in code?

Thanks a lot!!
0
 

Author Comment

by:Babyworship
ID: 2692672
Are you there?!!!!!!!???
0
 

Author Comment

by:Babyworship
ID: 2721476
nils ,would  you tell me what can not I do under windows?
0
 
LVL 3

Expert Comment

by:daitt
ID: 2721641
I'm sorry my email account didn't work well. Direct access I meant calling the Interrupts to perform an action on the device, or changing mapped memory .. In Windows you should control devices through APIs, not through interrupts.
If you want to program graphics in Windows (real Windows application), you should have a look at DirectX. But if you don't have expereince in Windows programming (APIs, Interfaces...) you should learn it first.
Anyway I think you're still able to call some video interrupts under a DOS session in Windows. I saw many games for DOS can run in Full-Screen mode in Windows and they're using mode 13H. If I have time I will write a small program to test that.
Best regards
0
 

Author Comment

by:Babyworship
ID: 2830733
Adjusted points from 70 to 100
0
 

Author Comment

by:Babyworship
ID: 2830734
Thanks,daitt
So , in windows ,why interupts still there ,who use it ? the VxD?

Thanks!!!!!!!!!!!
0
 
LVL 3

Expert Comment

by:daitt
ID: 2831019
I think the kernel and the drivers can use them - actually interrupts are not the only way to control devices (we write to and read from ports and mapped memory). Interrupts are still there I think because the DOS applications still need them and interrupts are part of the machine's language, so nobody can get rid of them. But some interrupts cannot be used safely in Windows because it will conflict with what the drivers doing. The procedure to make the device do something (for example to change to another screen mode) becomes complex (you must call this interrupt .. then call that .. the write this to the port .. and so on) so if you call an interrupt when the device is calling another, you break the procedure. It's not a problem in DOS, because DOS is single tasking. Another thing is that when you change the screen mode, you must do some actions to inform other components in Windows to get the system use your new screen mode. Otherwise everything will be messed up. So programming applications in Windows is calling functions through the interface - API(a contract between you and the device driver(DD) - the DD gives you this function. You call it with some parameters and the DD will finish the task for you. You don't have to understand how the DD access hardware resources (actually each device has its own method to control and there's no standard interrupt for advanced functions of the devices). How to change to a new screen mode is defined by the manufactures. How to inform Windows about new screen mode is defined by the kernel. You can do all of them manually with your code, but there's no official documents for these things, so your program might not be able to run when the user change their hardware or upgrade the operating system.
I don't know which action is legal in windows .. which is not. I think the files interrupts are ok. I/O interrupts are not. Anyway .. there's no reason to use interrupts in a real Windows application. Everything you want to do (and you're allowed to do) should be implemented already in the APIs.
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

Unlike C#, C++ doesn't have native support for sealing classes (so they cannot be sub-classed). At the cost of a virtual base class pointer it is possible to implement a pseudo sealing mechanism The trick is to virtually inherit from a base class…
Introduction This article is a continuation of the C/C++ Visual Studio Express debugger series. Part 1 provided a quick start guide in using the debugger. Part 2 focused on additional topics in breakpoints. As your assignments become a little more …
The viewer will learn how to pass data into a function in C++. This is one step further in using functions. Instead of only printing text onto the console, the function will be able to perform calculations with argumentents given by the user.
The viewer will learn additional member functions of the vector class. Specifically, the capacity and swap member functions will be introduced.

744 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

9 Experts available now in Live!

Get 1:1 Help Now