CS609 Assignment No. 03 Solution and Discussion


  • Cyberian's Gold

    5d2b418e-1dd4-4b12-93ac-655f3b17699c-image.png
    Semester: Spring 2019
    CS609: System Programming
    Graded
    Assignment No. 03
    Total Marks: 20

    Due Date: July 16, 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:

    • Hard Disk interrupts
    • Hard Disk data reading
    • Hard Disk BioDisk() function

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

    Problem Statement:

    Q: Write a program which reads two physically addressed blocks from disk using biosdisk() function.
    Instructions:
    • Declare arrays to handle head, sector and track numbers to read from hard disk.
    unsigned char headno[10];
    unsigned char secno[10];
    unsigned char trackno[10];
    • Similarly declare a buffer of 1024 char to store data 2 blocks data etc.
    • unsigned char buf[1024];
    • Use printf to print message of entering head no. i.e printf("Head ");
    • Use gets function to get head no. from user i.e gets(headno);
    • Use puts function to put headno in array of headno
    • Use biodisk function to read two blocks i.e
    biosdisk(2,0x80,atoi(headno),atoi(trackno),atoi(secno),2,buf) ;
    • Similarly get and put sector and track numbers.
    • Show error message in case of failure of biodisk() function.

    Note: Your assignment file should be a single Word file (.doc or .docx) containing code only.

    Best of Luck!


  • Cyberian's

    @moaaz
    Another Idea solution

    #include <bios.h>
    
    #include <dos.h>
    
    FILE *fp;
    
    unsigned char buf[1024];
    
    unsigned char st[60];
    
    unsigned char headno[10];
    
    unsigned char secno[10];
    
    unsigned char trackno[10];
    
    void main (void)
    
    {
    
    int i;
    
    for (i=0; i<1024; i++)
    
    buf[i]=0;
    
    gets(st);
    
    fp=fopeon(st,”wb”);
    
    printf(“Head”);
    
    gets(headno);
    
    puts(headno);
    
    printf(“/nsector ”);
    
    gets(secno);
    
    puts(secno);
    
    printf(“/ntrack ”);
    
    gets(trackno);
    
    puts(trackno);
    
    i = biosdisk(2, 0x80, atoi(headno), atoi(trackno), atoi(trackno), 2,buf);
    
    }
    
    if(*(((char *)(&i))+1)= =0)
    
    {
    
    fwrite(buf,2,1024,fp);
    
    fclose(fp);
    
    }
    
    else
    
    {
    
    printf(“Cannot Read Error# = %x” i);
    
    }
    
    


  • Idea Solution

    #include #include FILE *fp; 
    unsigned char buf[1024]; 
    unsigned char st[60];
    unsigned char headno[10]; 
    unsigned char secno[10];
    unsigned char trackno[10]; 
    void main (void) {
    int i ;
    for (i=0;i<1024;i++)
    buf[i]=0;
    gets(st); 
    fp=fopen(st,"wb"); 
    printf("Head "); 
    gets(headno); 
    puts (headno);
    i = biosdisk(2,0x80,atoi(headno), atoi(trackno),atoi(secno),2,buf) ; 
    if (*(((char *)(&i))+1)==0) { 
    fwrite(buf,2,1024,fp); fclose(fp);
    } 
    else printf("Cannot Read Error# = %x",i); 
    }
    

  • Cyberian's

    @Anaya-Ali



    Recent Topics


  • 2
  • 3
  • 2
  • 1
  • 3
  • 5
  • 2
  • 9
|