显示硬盘个数

    此章堪称整本书中最难的一章了。。所以就以一个简单的任务开头:显示系统硬盘个数。

    就在刚刚刷的代码基础上添加。。细节书上都有。。流水账之。。

    步骤如下:
    1,添加hd.c文件,在hd.c文件中添加Init_Hard_Disk函数,在此函数中把硬盘个数打印出来,使能级联中断和硬盘中断,硬盘中断处理函数使用 默认的处理函数。

    kernel/hd.c

Code:
  1. /*  
  2.     By Marcus Xing  
  3.     kernel/hd.c  
  4.     与硬盘驱动相关的代码  
  5. */  
  6.   
  7. #include "type.h"   
  8. #include "const.h"   
  9. #include "console.h"   
  10. #include "tty.h"   
  11. #include "protect.h"   
  12. #include "proc.h"   
  13. #include "ipc.h"   
  14. #include "proto.h"   
  15.   
  16. /*----------------------------------------------------------------Init_Hard_Disk  
  17.     初始化硬盘驱动  
  18.     显示硬盘个数,打开硬盘中断  
  19. */  
  20. void Init_Hard_Disk()   
  21. {   
  22.     u8 *hd_num = (u8*)0x475;    /* BIOS会在0x475地址处写入硬盘数 */  
  23.     /* 显示之 */  
  24.     Disp_Color_Str("Driver Num is ",Make_Color(RED,BLACK));   
  25.     Disp_Int(*hd_num);   
  26.     Disp_Str("/n");   
  27.     /* 由于硬盘中断在从片,所以必须先打开级联中断 */  
  28.     Enable_IRQ(CASCADE_IRQ);   
  29.     Enable_IRQ(AT_WINI_IRQ);   
  30. }   


    2,在kernel.asm中调度进程前调用Init_Hard_Disk。

    kernel/kernel/asm

Code:
  1. extern  Init_Hard_Disk   
  2. ...   
  3.     call    Init_Hard_Disk              ;初始化硬盘驱动,注意须在Init_All_TTY前调用  
  4.     call    Init_All_TTY                ;初始化所有的TTY  


    3,在protect.h中添加外中断的各中断向量的宏,使代码亲切可读。

    include/protect.h

Code:
  1. /* 各外中断的IRQ号 */  
  2. #define CLOCK_IRQ       0   
  3. #define KEYBOARD_IRQ    1   
  4. #define CASCADE_IRQ     2       /* cascade enable for 2nd AT controller */   
  5. #define ETHER_IRQ       3       /* default ethernet interrupt vector */   
  6. #define SECONDARY_IRQ   3       /* RS232 interrupt vector for port 2 */   
  7. #define RS232_IRQ       4       /* RS232 interrupt vector for port 1 */   
  8. #define XT_WINI_IRQ     5       /* xt winchester */   
  9. #define FLOPPY_IRQ      6       /* floppy disk */   
  10. #define PRINTER_IRQ     7   
  11. #define AT_WINI_IRQ     14      /* at winchester */  

     还要在Init_Clock和Init_Keyboard.c中使用相应的宏,过程略。

     修改makefile的过程略去。

     OK,make,运行bochs,结果如图:

    由于目前还没设置硬盘。。所以硬盘数为0。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值