Sponsored Links


Results 1 to 1 of 1

Thread: CS401 Interrupt chaining Assignment 4 June 2010

  1. #1
    Senior Member viki's Avatar
    Join Date
    May 2010
    Posts
    2,132

    99 CS401 Interrupt chaining Assignment 4 June 2010

    Sponsored Links


    A. What are Interrupts? (in real mode)

    Interrupts are signals generated by the computer, by either software or hardware, every time a certain event occurs. For example, anytime a key is pressed at any point during program execution, the 0x09 interrupt is generated, causing the 0x09 interrupt handler to be called, which does its job then returns control back to the program were it left off. The interrupts are numbered from 0x00 to 0xFF and each have a special function (most are unused). In real mode, the first 1,024 bytes of memory of the computer are used as the interrupt handler table. This table has a 4 byte far address to the interrupt handler (Interrupt Service Routine - ISR) for each of the 256 interrupts. Interrupts may also be simulated by calling them with the INT command in real mode, or the __dpmi_int command in protected mode

    B. Protected Mode

    C. Adding your own ISRs

    Many times it is useful to have your own functions be automatically called every time a specific event occurs, without having to continuously check for it. This can be done by changing the proper entry in the interrupt handler table to point to your new ISR. But many times you must have your ISR first call the original ISR to make sure the event is handled properly. To do this the address of the original ISR must be taken, and the old ISR must be called from within the new ISR. This is called chaining. The whole process is implemented in the next section

    II. Implementation in DJGPP (protected mode)

    A. Using _go32_dpmi functions

    There are three steps to using custom interrupt handler functions

    Get the address the current ISR and save it
    Chain your new ISR onto the old on
    Replace the old ISR once the program is done
    the whole process is shown in the example code below.
    //Simple Example of chaining interrupt handlers
    //Adopted from Matthew Mastracci's code

    Sponsored Links


    #include <stdio.h>
    #include <pc.h>
    #include <dpmi.h>
    #include <go32.h>

    //macros by Shawn Hargreaves from the Allegro library for locking
    //functions and variables.
    #define LOCK_VARIABLE(x) _go32_dpmi_lock_data((void *)&x,
    (long)sizeof(x));
    #define LOCK_FUNCTION(x) _go32_dpmi_lock_code(x,(long)sizeof(x));

    //timer interrupt 8 is generated every 18.2 ms
    #define TIMER 8

    //global counter
    int counter = 0;

    //the new ISR, will be called automatically every 18.2 ms once
    installed

    void TickHandler(void)
    {
    counter++;
    }


    int main(void)
    {
    //structures to hold selector: offset info for the ISRs
    _go32_dpmi_seginfo OldISR, NewISR;

    printf("About to chain the new ISR onto the old timer ISR..\n");
    getkey();

    //lock the functions and variables
    LOCK_FUNCTION(TickHandler);
    LOCK_VARIABLE(counter);

    //load the address of the old timer ISR into the OldISR structure
    _go32_dpmi_get_protected_mode_interrupt_vector(TIM ER, &OldISR);

    //point NewISR to the proper selector: offset for handler function
    NewISR.pm_offset = (int)TickHandler;
    NewISR.pm_selector = _go32_my_cs();

    //chain the new ISR onto the old one so that first the old timer ISR
    //will be called, then the new timer ISR
    _go32_dpmi_chain_protected_mode_interrupt_vector(T IMER,&NewISR);

    //notice no changes to counter in this loop- the interrupt
    //changes it
    while (!kbhit())
    printf("%d\n",counter);

    printf("Removing new ISR from the timer ISR chain\n");

    //load the old timer ISR back without the new ISR chained on
    _go32_dpmi_set_protected_mode_interrupt_vector(TIM ER, &OldISR);

    return 0;
    }
    B. Using other DPMI functions

    there's a bunch of them that are for doing stuff with interrupts

    C. Calling (simulating) Interrupts

    The __dpmi_regs structure holds the register values __dpmi_int calls the interrupt. This example sets to video mode 0x13 by calling the video I/O interrupt 0x10.


    __dpmi_regs r;
    r.x.ax = 0x13;
    __dpmi_int(0x10,&r);
    Last edited by viki; 07-01-2010 at 05:27 AM.
    :o:o--------------------------------------------------------------------------------------:o:o
    [B]The more knowledge you have, the greater will be your fear of Allah.[/B]

    Please Join My [B]Group Vuhelp[/B][B], Birthday Wishing, Daily Hadees[/B] [CODE][B]http://vuhelp.net/groups/vuhelp.html[/B]
    [B]http://vuhelp.net/groups/birthday-wishing.html[/B]
    [B]http://vuhelp.net/groups/daily-hadees.html[/B][/CODE]
    [CENTER][B][COLOR="Red"][SIZE="4"]Email: [email]viki@vuhelp.net[/email][/SIZE][/COLOR][/B][/CENTER]

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. Replies: 2
    Last Post: 06-13-2012, 12:37 AM
  2. CS401 assignment #1 fall 2010 solution required due date 08 Nov2010
    By falcon in forum Get Solution In 24 Hour
    Replies: 1
    Last Post: 11-28-2010, 03:24 AM
  3. Replies: 0
    Last Post: 11-15-2010, 09:55 PM
  4. CS401- fall 2010 fist assignment
    By Xpert in forum Assignments & Solutions
    Replies: 0
    Last Post: 10-29-2010, 07:47 PM
  5. CS401 Assignment 5 Solution July 2010
    By viki in forum Assignments & Solutions
    Replies: 0
    Last Post: 07-13-2010, 10:44 AM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
-: Vuhelp Disclaimer :-
None of the files shown here are hosted or transmitted by this server. The links are provided solely by this site's users. The administrator's or staff of Vuhelp.net cannot be held responsible for what its users post, or any other actions of its users. You may not use this site to distribute or download any material when you do not have the legal rights to do so. It is your own responsibility to adhere to these terms. If you have any doubts about legality of content or you have any suspicions, feel free to contact us.
Online Education | JhelumSoft