Programming the Timer 8253

I want to know how to program the 8253 timer on port 40h-43h. So that I can implement this to the joystick reading procedures, use it as a delay... Everywhere where the timing or delays are needed
KasumiAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

alona041797Commented:
You should write an interrupt handler for interrupt 8 as following:

Uses Dos {,...};

var defint8:procedure;
   
procedure myint8; interrupt;
  begin
    {Whatever you need to be run 18.2 times per second}
    inline($9C);
    defint8;
  end;

{...}

begin {Main Program}
  {...}
  getintvec(8,@defint8);
  setintvec(8,@myint8);
  {...Most of your program here...}
  setintvec(8,@defint8);
end. {Main Program}

{Hope this helps...}
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
KasumiAuthor Commented:
Well this isn't that hard for me to figure uot by myslef. But I wanted to know HOW to write the handler for it. I mean I want to replace the interrup by my own function.
I don't want to call the int at all.
So let's say that one of the things the interrupthas to do, is increasing the time counter on 0000h:046ch.
So I want to know how to do this.
My guess:
mov dx,40h
insd eax,dx
xor bx,bx
mov es,bx
mov edi,046ch
mov dword ptr es:[edi],eax
I want mz function to replace the int. It desn't need to have EVERYTHING the timerinterrupt has, but the basic functions should be included.

0
alona041797Commented:
Why should you replace the original handler?
The assembler code you wrote will correctly update the timer, which is the most important thing the hardware interrupt does.
BUT, If you intend to write your own handler you must acknowledge the interrupt by:
  port[$20]:=$20;
0
Cloud Class® Course: Microsoft Office 2010

This course will introduce you to the interfaces and features of Microsoft Office 2010 Word, Excel, PowerPoint, Outlook, and Access. You will learn about the features that are shared between all products in the Office suite, as well as the new features that are product specific.

KasumiAuthor Commented:
Ok. I hate interrupts. They are too slow. And it's a problem in Protected Mode always to warp the int into the 31h.
I want to know, how to use the ports. The ports for the timer
are 40h-43h but I don't know, what info in each port is. Thats what I want to have. A kind of documentation.
So that I know, what I have in each port, how can I set it etc.

Bye


0
KasumiAuthor Commented:
I forgot:
$Why the port[$20]=$20??
0
alona041797Commented:
I have exact docmentation of the ports of the 8253, but to use it you MUST use interrupts! The 8253 channel 0 generates int 8, channel 1 refreshes the DRAM and channel 2 is for the PC speaker... you *can* start it counting and check its value by using channel 2. Please post your e-mail address or send it to me <alon.a@usa.net> for that file.
0
alona041797Commented:
The port[$20]:=$20 tells the hardware interrupt manager that the hardware interrupt has been acknowledged, so it can send more hardware interrupts of the smae kind.
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Pascal

From novice to tech pro — start learning today.