中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » 各位兄弟姐妹们,谁有int13的源代码?
作者:
标题: 各位兄弟姐妹们,谁有int13的源代码? 上一主题 | 下一主题
zhgwbzhd
高级用户





积分 506
发帖 187
注册 2005-12-4
状态 离线
『楼 主』:  各位兄弟姐妹们,谁有int13的源代码?

也就是说int13如果要用汇编实现的话,是怎样实现的?

2006-11-13 20:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
spoton
初级用户





积分 54
发帖 25
注册 2006-10-31
来自 疯人院
状态 离线
『第 2 楼』:  庵也不太清楚!

search一会,不过一般会经过一些DOS的hooking,再走到BIOS上的code。至於跟hardware沟通,跟大一点的OS相同。一般用io port(usually for legacy devices) OR memory i/o 并根据一些spec 与  hardware communicate ,这也许早期 MS-DOS/Win9X 需要BIOS较多support的原因,anyway,他的台平依存性大。

如果,老大只想看看bios做的部分,网上代码很多,open firmware应该也行。

直於跟 hardware communication 方法应该与一般的 device driver相同。

2006-11-15 01:26
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zhgwbzhd
高级用户





积分 506
发帖 187
注册 2005-12-4
状态 离线
『第 3 楼』:  

恩,我就是需要bios中的代码。关键就是不知道int13的内部底层协议是根据bios写的还是dos中实现的。

2006-11-15 05:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zyl910
中级用户





积分 282
发帖 126
注册 2006-5-17
状态 离线
『第 4 楼』:  

是BIOS实现int 13h的

实现原理:直接访问FDC/HDC端口进行编程控制


03F0-03F7 ---- FDC 1  (1st Floppy Disk Controller) second FDC at 0370

PORT 01F0-01F7 - HDC 1(1st Fixed Disk Controller) (ISA, EISA)



I/O端口功能表
---------------------------
I/O地址 功能、用途
---------------------------
0    DMA通道0,内存地址寄存器(DMA控制器1(8237))
1    DMA通道0, 传输计数寄存器
2    DMA通道1,内存地址寄存器
3    DMA通道1, 传输计数寄存器
4    DMA通道2,内存地址寄存器
5    DMA通道2, 传输计数寄存器
6    DMA通道3,内存地址寄存器
7    DMA通道3, 传输计数寄存器
8    DMA通道0-3的状态寄存器
AH    DMA通道0-3的屏蔽寄存器
BH    DMA通道0-3的方式寄存器
CH    DMA清除字节指针
DH    DMA主清除字节
EH    DMA通道0-3的清屏蔽寄存器
FH    DMA通道0-3的写屏蔽寄存器
19H   DMA起始寄存器
20H-3FH 可编程中断控制器1(8259)使用
40H   可编程中断计时器(8253)使用,读/写计数器0
41H   可编程中断计时器寄存器
42H   可编程中断计时器杂项寄存器
43H   可编程中断计时器,控制字寄存器
44H   可编程中断计时器,杂项寄存器(AT)
47H   可编程中断计时器,计数器0的控制字寄存器
48H-5FH 可编程中断计时器使用
60H-61H 键盘输入数据缓冲区
61H   AT:8042键盘控制寄存器/XT:8255输出寄存器
62H   8255输入寄存器
63H   8255命令方式寄存器
64H   8042键盘输入缓冲区/8042状态
65H-6FH 8255/8042专用
70H   CMOS RAM地址寄存器
71H   CMOS RAM数据寄存器
80H   生产测试端口
81H   DMA通道2,页表地址寄存器
82H   DMA通道3,页表地址寄存器
83H   DMA通道1,页表地址寄存器
87H   DMA通道0,页表地址寄存器
89H   DMA通道6,页表地址寄存器
8AH   DMA通道7,页表地址寄存器
8BH   DMA通道5,页表地址寄存器
8FH   DMA通道4,页表地址寄存器
93H-9FH DMA控制器专用
A0H   NM1屏蔽寄存器/可编程中断控制器2
A1H   可编程中断控制器2屏蔽
C0H   DMA通道0,内存地址寄存器(DMA控制器2(8237))
C2H   DMA通道0, 传输计数寄存器
C4H   DMA通道1,内存地址寄存器
C6H   DMA通道1, 传输计数寄存器
C8H   DMA通道2,内存地址寄存器
CAH   DMA通道2, 传输计数寄存器
CCH   DMA通道3,内存地址寄存器
CEH   DMA通道3, 传输计数寄存器
D0H   DMA状态寄存器
D2H   DMA写请求寄存器
D4H   DMA屏蔽寄存器
D6H   DMA方式寄存器
D8H   DMA清除字节指针
DAH   DMA主清
DCH   DMA清屏蔽寄存器
DEH   DMA写屏蔽寄存器
DFH-EFH 保留
F0H-FFH 协处理器使用
100H-16FH保留
170H   1号硬盘数据寄存器
171H   1号硬盘错误寄存器
172H   1号硬盘数据扇区计数
173H   1号硬盘扇区数
174H   1号硬盘柱面(低字节)
175H   1号硬盘柱面(高字节)
176H   1号硬盘驱动器/磁头寄存器
177H   1号硬盘状态寄存器
1F0H   0号硬盘数据寄存器
1F1H   0号硬盘错误寄存器
1F2H   0号硬盘数据扇区计数
1F3H   0号硬盘扇区数
1F4H   0号硬盘柱面(低字节)
1F5H   0号硬盘柱面(高字节)
1F6H   0号硬盘驱动器/磁头寄存器
1F7H   0号硬盘状态寄存器
1F9H-1FFH保留
200H-20FH游戏控制端口
210H-21FH扩展单元
278H   3号并行口,数据端口
279H   3号并行口,状态端口
27AH   3号并行口,控制端口
2B0H-2DFH保留
2E0H   EGA/VGA使用
2E1H   GPIP(0号适配器)
2E2H   数据获取(0号适配器)
2E3H   数据获取(1号适配器)
2E4H-2F7H保留
2F8H   2号串行口,发送/保持寄存器(RS232接口卡2)
2F9H   2号串行口,中断有效寄存器
2FAH   2号串行口,中断ID寄存器
2FBH   2号串行口,线控制寄存器
2FCH   2号串行口,调制解调控制寄存器
2FDH   2号串行口,线状态寄存器
2FEH   2号串行口,调制解调状态寄存器
2FFH   保留
300H-31FH原形卡
320H   硬盘适配器寄存器
322H   硬盘适配器控制/状态寄存器
324H   硬盘适配器提示/中断状态寄存器
325H-347H保留
348H-357H DCA3278
366H-36FH PC网络
372H    软盘适配器数据输出/状态寄存器
375H-376H 软盘适配器数据寄存器
377H    软盘适配器数据输入寄存器
378H    2号并行口,数据端口
379H    2号并行口,状态端口
37AH    2号并行口,控制端口
380H-38FH SDLC及BSC通讯
390H-393H Cluster适配器0
3A0H-3AFH BSC通讯
3B0H-3B H MDA视频寄存器
3BCH    1号并行口,数据端口
3BDH    1号并行口,状态端口
3BEH    1号并行口,控制端口
3C0H-3CFH EGA/VGA视频寄存器
3D0H-3D7H CGA视频寄存器
3F0H-3F7H 软盘控制器寄存器
3F8H    1号串行口,发送/保持寄存器(RS232接口卡1)
3F9H    1号串行口,中断有效寄存器
3FAH    1号串行口,中断ID寄存器
3FBH    1号串行口,线控制寄存器
3FCH    1号串行口,调制解调控制寄存器
3FDH    1号串行口,线状态寄存器
3FEH    1号串行口,调制解调状态寄存器
3FFH    保留

[ Last edited by zyl910 on 2006-11-15 at 06:49 AM ]



人类存在的目的就是试图理解人类为何存在
2006-11-15 06:48
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
spoton
初级用户





积分 54
发帖 25
注册 2006-10-31
来自 疯人院
状态 离线
『第 5 楼』:  

一份 sennaspy.tsx.org  award http://www.mytempdir.com/1059008

[ Last edited by spoton on 2006-11-16 at 04:05 AM ]

2006-11-15 07:12
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zhgwbzhd
高级用户





积分 506
发帖 187
注册 2005-12-4
状态 离线
『第 6 楼』:  

问一下4楼老兄,0号盘就是primary master盘吧,那1号盘就是secand master吧。
目前的sata硬盘还有2号盘和3号盘,该如何控制呢?谢谢
170H   1号硬盘数据寄存器
171H   1号硬盘错误寄存器
172H   1号硬盘数据扇区计数
173H   1号硬盘扇区数
174H   1号硬盘柱面(低字节)
175H   1号硬盘柱面(高字节)
176H   1号硬盘驱动器/磁头寄存器
177H   1号硬盘状态寄存器
1F0H   0号硬盘数据寄存器
1F1H   0号硬盘错误寄存器
1F2H   0号硬盘数据扇区计数
1F3H   0号硬盘扇区数
1F4H   0号硬盘柱面(低字节)
1F5H   0号硬盘柱面(高字节)
1F6H   0号硬盘驱动器/磁头寄存器
1F7H   0号硬盘状态寄存器

2006-11-15 19:50
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zhgwbzhd
高级用户





积分 506
发帖 187
注册 2005-12-4
状态 离线
『第 7 楼』:  

还有以为高人给俺指导了一下,说用int13的48号功能,可以获得硬盘的参数,可是俺就是获取不到。看来俺是比较笨的。

2006-11-15 19:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zyl910
中级用户





积分 282
发帖 126
注册 2006-5-17
状态 离线
『第 8 楼』:  

HDC 1: IDE 1控制器
HDC 2: IDE 2控制器


1F6H   0号硬盘驱动器/磁头寄存器
176H   1号硬盘驱动器/磁头寄存器

该寄存器的D4位用于选择 主/从 驱动器



人类存在的目的就是试图理解人类为何存在
2006-11-15 21:31
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
zyl910
中级用户





积分 282
发帖 126
注册 2006-5-17
状态 离线
『第 9 楼』:  

http://www.cn-dos.net/forum/view ... ghlight=&page=2
qb45
高级用户





积分 671
发帖 205
注册 2003-9-13
状态 离线  『第 24 楼』:  

获得硬盘序列号(原程序)
这是一个用端口对硬盘编程例子
本程序在必须在DOS下运行,我在qb4.5版本下运行通过

主板上共有两个IDE接口,每个接口上又分主、从,所以可以接4个IDE设备,这4个端口号各不同,本程序用端口1F0-1F7是主板上的第一个IDE接口上的主接口,最常用的就是这个了。别的只是端口号不一样,编程方法原理一样。
CODE:  [Copy to clipboard]
--------------------------------------------------------------------------------

'获得硬盘序列号的程序(非逻辑盘卷标,有的把C盘的卷标说成是硬盘序列号)
'代码:QBASIC,运行环境:DOS

OUT &H1F6, &HA0
OUT &h1F2,1
OUT &H1F3, 1
OUT &h1F4,1
OUT &h1F5,1
OUT &H1F7, &HEC '获得硬盘信息的命令
DO WHILE flag <> &H58
  f lag = INP(&H1F7)
  if inkey$=chr$(27) then '如果按ESC键,终止程序
     print "无法获得硬盘序列号"
     end
  end if
LOOP
re$ = SPACE$(18)
FOR i% = 1 TO 18
  READ a$
  H$ = CHR$(VAL("&H" + a$))
  MID$(re$, i%, 1) = H$
NEXT i%
duan% = varSEG(re$):offe% = SADD(re$)
DEF SEG = duan%
print "本硬盘的序列号为 ";
FOR i = 1 TO 16
  CALL Absolute(r%, offe%) '调用在qb中的内嵌汇编机器码
  r1% = r% AND &HFF
  r2% = (r% AND &HFF00) / &H100
  IF i > 9 AND i < 15THEN PRINT CHR$(r1%); CHR$(r2%);
NEXT i
DEF SEG
END
'此DATA中的数据为机器码,用于读端口字数据(qb中的端口语句只能按字节读写端口,不能按字读写)
DATA 55,89,e5,ba,f0,01,ed,86,e0,8b,5e,06,89,07,5d,ca,02 ,00
'55     push        bp
'89E5   mov        bp, sp
'BAF001 mov        DX, 01F0h
'ED     in        ax, dx
'86E0   xchg        ah, al
'8B5E06 mov        bx, [bp+06]
'8907   mov        [BX], AX
'5D     pop        BP
'CA0200 ret        2



人类存在的目的就是试图理解人类为何存在
2006-11-15 21:35
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
DOS95
初级用户





积分 112
发帖 49
注册 2006-9-23
状态 离线
『第 10 楼』:  

……无语。
INT13 我只要懂得用就 OK,至于需要内部代码,用 TR/DEBUG 跟进去就看得到,不过会认人看晕头DI!

2006-11-16 00:07
查看资料  发短消息 网志   编辑帖子  回复  引用回复
DOS95
初级用户





积分 112
发帖 49
注册 2006-9-23
状态 离线
『第 11 楼』:  

还有,48号功能是支持 INT13 扩展时用的取磁盘参数功能,不支持 INT13 时用 8 号功能,至于判断是不是支持 INT13 扩展,用 41 号功能。

2006-11-16 00:09
查看资料  发短消息 网志   编辑帖子  回复  引用回复
spoton
初级用户





积分 54
发帖 25
注册 2006-10-31
来自 疯人院
状态 离线
『第 12 楼』:  

学习!顶一下! google 了一些文件

---对不住!离题了!

  Quote:
0号硬盘和1号硬盘目前都可以找到他的控制端口。关键就是不知道串口硬盘的2号和3号硬盘的端口

不过 1f0-1f7   170-177 指的不是 primary and secondary channel码? channel怎麽变成disk了

偶又错了!早期似乎一条cable只有一个device。 master slave 选择看ATAPI规范,里头有device register, DEV bit


楼主貌似想作个DOS,google一下

booting
        http://www.geocities.com/thestarman3/asm
        http://home.att.net/~rayknights/
dos
        http://www.singlix.org/trdos/specs.html

[ Last edited by spoton on 2006-11-16 at 02:11 PM ]

2006-11-16 01:33
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zhgwbzhd
高级用户





积分 506
发帖 187
注册 2005-12-4
状态 离线
『第 13 楼』:  

0号硬盘和1号硬盘目前都可以找到他的控制端口。关键就是不知道串口硬盘的2号和3号硬盘的端口。

2006-11-16 01:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: