CS609 Assignment 2 Solution and Discussion


  • Cyberian's Gold

    Semester: Fall 2019
    CS609: System Programming
    Graded
    Assignment No. 02 Total Marks: 20

    Due Date: Dec 02, 2019

    Instructions:

    Please read the following instructions carefully before submitting assignment. It should be clear that your assignment will not get any credit if:

     The assignment is submitted after due date.
     The submitted assignment does not open or file is corrupt.
     You have not followed steps described in Detailed Instructions of the problem statement.
     Assignment is copied (partial or full) from any source (websites, forums, students, etc.) Strict action will be taken in this regard.

    Note: You have to upload only .doc or .docx file. Assignment in any other format (extension) will not be accepted and will be awarded with zero marks.

    Objectives:

    The objective of this assignment is to provide hands-on experience of System Programming concepts including:

    • How can interrupts be generated
    • What are Interrupts
    • Interrupt functions writing
    • TSR program
    • Calling interrupt functions

    For any assignment related query, contact at
    [email protected]

    Problem Statement:
    You are required to write C program which will display one ‘*’ character on the screen on each CPU timer interrupt 8 in a way that each * character is displayed after the previous *. i.e


    On elapse of 7 seconds then the screen characters should be removed and again the * character should be started printing on the screen in similar way i.e *********
    This process should be continued again and again until you press any key from the keyboard.
    Instructions:

    1. You should include all related header files first of all then declare interrupt pointer to hold Timer i.e void interrupt (*oldTimer)(void);
    2. Similarly, give prototype for new functions of newtimer() i.e void interrupt newTimer();
    3. Declare a far pointer i.e *scr to hold far address =0xB8000000;
    4. Store current vector values of INT 8 through getvect in oldTimer.
    5. Set newTimer fuctions through setvect.
    6. In newTimer() function, give logic to print ‘*’ on the screen i.e *(scr+i)=0x2A;
    7. Write code to wait for 7 seconds i.e t>=126 and through loop write blank spaces on the screen by setting keyboard status with black background i.e no character on screen i.e
      *(scr+i)=ox20;
      *(scr+i+1)=ox07;
    8. When any key is pressed from the keyboard, the program should stop.
      Note: Your assignment should Word file (.doc or .docx) containing your code.

    Best of Luck!


  • Cyberian's Gold

    #include <dos.h>
    void interrupt (*oldTimer)( ); //corrected
    void interrupt (*oldKey)( ); //corrected
    void interrupt newTimer ( );
    void interrupt newKey ( );
    char far *scr = (char far* ) 0xB8000000;
    int i, t = 0, m = 0;
    char charscr [4000];
    void main( )
    {
    oldTimer = getvect(8);
    oldKey = getvect (9);
    setvect (8,newTimer);
    setvect (9,newKey);
    getch();
    getch();
    getch();
    getch();
    }
    void interrupt newTimer ( )
    {
    t++;
    if ((t >= 182) && (m == 0))
    {
    for (i =0; i < 4000; i ++)
    charscr [i] = *(scr + i);
    for (i =0; i <=4000; i +=2)
    {
    *(scr + i) = 0x20;
    *(scr + i + 1) = 0x07;
    }
    t = 0; m = 1;
    }
    (*oldTimer) ( );
    }
    void interrupt newKey ( )
    {
    int w;
    if (m == 1)
    {
    for (w =0; w < 4000; w ++)
    *(scr + w) = charscr [w];
    m = 0;
    }
    (*oldKey) ( );
    }
    


    Recent Topics


|