中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » 请教,如何编写一个能在CONFIG.SYS运行的SYS格式的文件。
作者:
标题: 请教,如何编写一个能在CONFIG.SYS运行的SYS格式的文件。 上一主题 | 下一主题
Chearv
初级用户





积分 36
发帖 15
注册 2006-2-18
状态 离线
『楼 主』:  请教,如何编写一个能在CONFIG.SYS运行的SYS格式的文件。

不管是用C还是汇编最终编译得到的不是COM文件就是EXE文件,请问要用什么方法才能得到SYS格式的文件呢?我想编写一个能在CONFIG中加载的程序。我在网上找了好久都没能找到这方面的资料。我只知道有什么Device Driver header    Device Driver codes的构架  ,但具体的我就没找到了。 有人能提供我一些SYS文件的格式吗?最好附上一段源代码。

先谢谢各位了。

2006-2-19 11:22
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
本是
银牌会员





积分 2201
发帖 789
注册 2005-1-27
状态 离线
『第 2 楼』:  

但此处的COM/EXE与普通的同类文件结构和入口上有天壤之别。给你几个源文件,你对照着研究,应该能较快入门。只是详细注释是英文的。你搞懂了SYS的结构后,再跟你讲SYS/EXE合一的"EXE"文件--像我的VTmagic.com能生成的EXE。

抱歉:附件我发不上来,邮到你的信箱!

[ Last edited by 本是 on 2006-2-19 at 14:51 ]



my major is english----my love is dos----my teacher is the buddha----my friends--how about U
2006-2-19 14:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Chearv
初级用户





积分 36
发帖 15
注册 2006-2-18
状态 离线
『第 3 楼』:  

我先去看看,多谢本是。

2006-2-19 15:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Chearv
初级用户





积分 36
发帖 15
注册 2006-2-18
状态 离线
『第 4 楼』:  

本是,你好,你发的信件我已经收到了。但我的英文水平太低了,基本看不懂。想问你一下,
; Device header for ROT13
                dd      -1      ; Link to next driver, set by dos
                                ; always set to FFFFFFFF by default, let
                                ; dos take care of it later
链接下一驱动是什么意思?我看了很多SYS文件前四个字节都是FF。
dw      0A800h
                                ; Device attributes   这个设备属性又是什么意思?

我基本不懂汇编,能否用C写这类程序呢?如果不行,你能不能用汇编写一个简单的类似于Hello,world这样的程序让我参考一下?

2006-2-19 17:49
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Chearv
初级用户





积分 36
发帖 15
注册 2006-2-18
状态 离线
『第 5 楼』:  

再仔细看了一下。好像接下来就是两个段了,
                dw      offset Strategy
                                ; Strategy, called prior to calling the
                                ; interrupt
                dw      offset Interrupt
                                ; The interrupt does the gruntwork
                                ; the term interrupt in this case
                                ; is used rather liberally
我理解是,运行的程序代码是在Interrupt中。是不是这样的,如果是,那么那个Strategy是干什么用的?是不是还应该有个BPB (BIOS参数块)?

2006-2-19 18:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kongying75
初级用户




积分 150
发帖 7
注册 2005-5-31
状态 离线
『第 6 楼』:  

楼上的兄弟,可否给俺一份,俺也要做dos下的device driver,俺的邮箱是kongyuchu@163.com,谢谢!请问本是朋友,你可否有c语言版的dos device driver?俺急需这方面的资料,谢谢!

2006-2-20 09:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Chearv
初级用户





积分 36
发帖 15
注册 2006-2-18
状态 离线
『第 7 楼』:  

这方面的资料国内比较少。我把本是发给我的转发给你吧,希望对你有用。

2006-2-20 17:05
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
本是
银牌会员





积分 2201
发帖 789
注册 2005-1-27
状态 离线
『第 8 楼』:  

《MS-DOS高级开发指南》(希望公司91年版)一书中有两章专门讨论SYS文件结构。找一找。搜一搜。

另外有网上以“设备驱动程序”、“SYS程序”等关键词再搜搜。



my major is english----my love is dos----my teacher is the buddha----my friends--how about U
2006-2-20 17:22
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
本是
银牌会员





积分 2201
发帖 789
注册 2005-1-27
状态 离线
『第 9 楼』:  

过几天,等我闲一点给一份我注释的简单SYS的源码。



my major is english----my love is dos----my teacher is the buddha----my friends--how about U
2006-2-20 17:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
本是
银牌会员





积分 2201
发帖 789
注册 2005-1-27
状态 离线
『第 10 楼』:  

下面是一个完整的.SYS的源程序,用中文详细注释,用途在其中有清楚说明。

title ECHO - 通过设备驱动程序完成简单任务

; (c)2005 版权所有
; 罗明安(本是)
; lmayylxt@pub.sz.jsinfo.net

; 本MS-DOS设备驱动程序用于 CONFIG.SYS:
;    device=echo.sys 参数

; MS-DOS 5以上的版本在用户设备驱动程序收到参数之前已经将其大写
; 所以本程序的任务就是:
; 1.将" "内的参数小写
; 2.临时需要的单个大写字母用^引导,如:
;    device=echo.sys H"I. ^T"HIS IS A SAMPLE STRING FOR" MS-DOS CONFIG.SYS.
; 上一行将显示为:
;                    Hi. This is a sample string for MS-DOS CONFIG.SYS.

CR equ 13  ; 回车
LF equ 10  ; 换行

; MS-DOS 请求定义
Request struc
  Rlength db ?        ;+0  长度
  Unit    db ?        ; 1  单元
  Command db ?        ; 2  命令
  Status  dw ?        ; 3  状态
  Reserve db 8 dup(?) ; 5  保留
  Media   db ?        ; 0D 介质
  Addroff dw ?        ; 0E 偏移地址
  Addrseg dw ?        ; 10 段地址
  Nameoff dw ? ; 12 名称偏移地址/计数器
  Nameseg dw ? ; 14 名称段地址/扇区
Request ends

DevD segment word

header label word
  dw -1,-1
  dw 0000h ;空设备;/字符/块设备
  dw offset init ;/策略=初始化而不安装任何东西
  dw offset interrupt ;/命令
  db 1,7 dup(0) ; /'设备名称'

; 总是最先执行
interrupt proc far
  xor ax,ax
  ret
interrupt endp

init_msg:
  db CR, LF, 'ECHO v1.0', CR, LF
  db '  (C)2005 版权所有 罗明安(本是)'
  db ' e-mail: lmayylxt@pub.sz.jsinfo.net', CR, LF, '$'

; 执行部分从此开始
; es:bx 指向请求头
init proc far
  assume cs: DevD, ds: DevD

  mov dx, offset init_msg
  mov ah, 9
  int 21h


  mov di, bx
  push di
  push es

  mov si, es:[di+12h] ; config.sys中设备名称偏移址
  mov ds, es:[di+14h] ; config.sys中设备名称段地址

; 跳过设备名称前的空格
trim_beginning:
  lodsb
  cmp al, ' '
  jbe trim_beginning
; 跳过设备名(转成大写)
find_driver:
  lodsb
  cmp al, ' '
  ja find_driver
; 跳过尾随的空格
trim_end:
  lodsb
  cmp al, ' '
  jbe trim_end
  dec si  ; si 已经越过第一个字符
; ds:si 现在指向命令行参数或回车符如果无参数

;;用户任务在此!
echo_: ;大小写=UPPER"lo^Wer"UPPER
  xor bx,bx   ;清引号标志
lodsb
  cmp al,' '
  jnz cmpOthers

  jmp short echo_1

echo_1:
  lodsb    ;如为回车, 退出
cmpOthers:
  cmp al,0Dh
  jbe echo_4

  cmp al,'"'   ;测双引号
  jne echo_2
  not bl   ;开引号标志
  cmp byte ptr ds:[si],'"'
  jne echo_1
  inc si   ;跳过多余引号
  not bl   ;关引号标志
  jmp echo_3
echo_2:
  or bl,bl   ;看是否在引号内
  je echo_3
cmp al,"^"  ;是暂时的单个大写吗?
jnz ifUpper
lodsb
cmp al,0Dh
jbe echo_4
and al,0DFh ;转大写
jmp short echo_3
ifUpper:
  cmp al,'A'  ;比'A'?
  jb echo_3   ;小,直接显示
  cmp al,'Z'  ;比'Z'?
  ja echo_3   ;大,直接显示
  or al,20h  ;转小写
echo_3:
  mov ah,2   ;字符显示
  mov dl,al
  int 21h
  jmp short echo_1
echo_4:
  mov ah,2   ;字符显示
  mov dl,0dh ;换行回车
  int 21h
  mov dl,0ah
  int 21h
echo_exit:

  mov ax,0100h ;完成
  jmp short done
quit:
  mov ax,8103h ;出错
done:
  pop es
  pop di
  mov byte ptr es:[di+01h], 0 ; 安装0个单元
  mov word ptr es:[di+0Eh], 0 ; 空闲内存偏移址 = 0
  mov es:[di+10h], cs         ; 空闲内存段地址
  mov word ptr es:[di+3], ax  ; 返回代码 = 8000h : 设置出错码
  ret                         ;           + 100h : 完成
                              ;           +   3h : 未知错

init endp
DevD ends
end



my major is english----my love is dos----my teacher is the buddha----my friends--how about U
2006-2-24 21:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Chearv
初级用户





积分 36
发帖 15
注册 2006-2-18
状态 离线
『第 11 楼』:  

本是这么一写,我对SYS文件的结构也略知一二了。 多谢。

不知道,你能不能再介绍一下SYS和EXE合一的文件结构。

2006-5-4 15:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: