阅读:4413回复:7
8139系列网卡dos下的两个简单驱动及接收、发送程序及源码
好像有人需要这个样,我最近实验了好久才把它实验成功,原和大家
一同分享。希望大家在网上传播时保留原文作者及程序内容不动。 作者:成松林 QQ:179641795 email:cheng_5103@126.com cheng_5103@163.com 本程序为dos下实验,了解网卡的工作原理及驱动的编写。 pack.com xxx:100无条件跳转到卡的安装程序。 xxx:110处为网卡初始化子程序。(注:简单初始化tx配置、rx配置、rx缓冲区: 为32位物理地址,打开tx、rx允许位,打开卡的中断允许位,tx缓冲区在发送时 设置即可注也是32位物理地址。其他寄存器为重置卡后的默认值。) xxx:170处为网卡rok中断程序,并显示指定包内容(注:显示由send.com发的内容, 因卡收包过程在缓冲区是一个\'环式的工作方式\',故为了方便此中断程序每次重置 卡的rx缓冲区,不正确处是在重置卡的rx缓冲区前将rx配置值保存,后再恢复。) xxx:1b0处为网卡tok中断程序,简单显示发送成功子程序。(注:不完善应该 加上处理发送成功后,计算下一个可用或叫空闲的发送缓冲区号,放到指定位置 以便发送程序知道下一个空闲的发送缓冲区号)。 xxx:1c0处为显示子程序,入口:cx=显示字符数;bx=显示缓冲首地址(注:用的 ah=0eh int 10h来显示的)。 xxx:1f0处为网卡除rok、tok两个中断以外的所有中断程序(注:简单显示出错) xxx:200处为网卡的irq中断主程序,本服务只检测tok、rok中断,并调用相应的 卡中断程序,其他的的卡中断全部显示卡出错信息并重新初始化网卡。(注:该服务 程序用的自己的堆栈。因irq号有可能共用,故程序起初就判断是否为卡的中断, 是卡的中断继续,否则调用旧的irq号中断服务程序。) xxx:300 xxx:2fff这段内存为卡的rx缓冲区以及卡的irq中断所用的堆栈内存区。 xxx:3000处为卡的安装程序。(注:先查找卡:只找第一块卡,获得卡的io基地址、 irq号保存,计算irq向量安装中断服务程序,打开irq允许位,最后调用卡的初始 化程序,完成卡的全部完装中断驻留退出。) send.com 通过ah=a;int21h接收用户输入内容数据,设置好特定各式的包内容,获得卡的空 闲发送缓冲区号,设置好卡的发送地址,最后置卡发送。 rx缓冲区环式的工作方式:原理网卡自动根据用户配置的rx缓冲区大小,将第一 个收到的包放到用户指定的rx缓冲区地址开始处,网卡自动将后面的包依次放到 第一包后面,开成一个链式的包结构,并每次收包后自动设置cbr寄存器即收到 包的总字节数,直到卡rx缓冲区满为止。这时就要重置卡的rx缓冲区了,方法: 保存rx配置,关闭网卡收包即向网卡命令寄存器写不允许收包,当然这时可以 重新设置网收包缓冲区地址一般这里不做改变取原来的,接着打开收包,最后 恢复rx配置即可。这样开成了一个循环链式缓冲区结构。 |
|
最新喜欢:iihack...
|
沙发#
发布于:2004-06-01 22:24
收藏了,谢谢!
|
|
|
板凳#
发布于:2004-06-08 16:01
好人,顶! 收藏了。
|
|
地板#
发布于:2004-06-23 14:04
谢谢!!!!!!!!!
|
|
地下室#
发布于:2007-11-07 14:46
谢谢了
|
|
5楼#
发布于:2007-11-15 10:25
谢了
|
|
6楼#
发布于:2007-11-19 11:38
到www.aogosoft.com/bbs去看..发了个更完整..解释更好的源代码....
|
|
|
7楼#
发布于:2010-12-28 19:53
正在找这个程序,谢谢!
|
|