中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » [原创]dos,win9x串口调试助手及源码
作者:
标题: [原创]dos,win9x串口调试助手及源码 上一主题 | 下一主题
fgckfl
初级用户




积分 46
发帖 22
注册 2006-11-13
状态 离线
『楼 主』:  [原创]dos,win9x串口调试助手及源码

小程序调着玩的,有什么建议可以联系fgc_kfl@sina.com. 感谢郭恒的winsail,
终于不用在dos下一个一个界面画了!!!!

要求版主适量加分!!!

[ Last edited by fgckfl on 2008-3-1 at 12:09 PM ]

2008-3-1 12:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fgckfl
初级用户




积分 46
发帖 22
注册 2006-11-13
状态 离线
『第 2 楼』:  我上传的东西呢?

哪去了??

2008-3-1 12:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fgckfl
初级用户




积分 46
发帖 22
注册 2006-11-13
状态 离线
『第 3 楼』:  怎么回事?上传的东西怎么不显示?

http://upload.cn-dos.net/upload.php



檔名 用戶 備註 大小 日期 原檔名
D [054.rar] kfckfl dos win9x 串口调试助手源码 12kB 2008/03/01(Sat)11:57 dos串口调试助手源码.rar

2008-3-1 12:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fgckfl
初级用户




积分 46
发帖 22
注册 2006-11-13
状态 离线
『第 4 楼』:  搞不定上传,需要的电邮联系吧

fgc_kfl@sina.com

2008-3-1 12:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
firstsail
高级用户





积分 668
发帖 295
注册 2005-7-26
来自 广东深圳
状态 离线
『第 5 楼』:  

查看了一个代码,有一个地方“指针”有错,

void far OnTime_DemoCUartDialog(CObject* pCurObj)
{
   //...

  
    //这里有错,最终的pDialog是空指针NULL
   CDialog* pDialog = (CDialog *)pCurObj->GetParent();
   
   
    //应改为
  CDialog* pDialog = (CDialog *)pCurObj;

    //...
}

(1)对于窗口的回调函数,形参一般是窗口指针(“this”),所以
  CWindow* pWindow = (CWindow *)pCurObj;或
  CDialog* pDialog = (CDialog*)pCurObj;

(2)对于控件的回调函数,形参一般是控件指针
  CWindow* pWindow = (CWindow *)pCurObj->GetParent();或
  CDialog* pDialog = (CDialog *)pCurObj->GetParent();

(3)在用Visual C++6.0做界面时,对话框请用“9号宋体”,由于WinSail是用
16x16的字体,所以“CLabel”控件后应预留多一点的空地。

高级界面的一般开发流程如下所示

01:启动Visual C++6.0,建立一个新的App工程。
02:在资源中建立一新的对话框,并确入将对话框的属性已经设置为“9号宋体”。
03:在对话框中加入所需要的控件。
04:调整各控件座标位置,必要时可以用菜单的[编排]->[Tab Order]设置控件的顺序。
05:确认存盘

06:启动MakeDlg.Exe程序,如果已经启动则可用“Alt +Tab组合键”切换到该程序。
07:MakeDlg.Exe程序中,设置正确的*.rc和resource.h文件所在的路径
08:MakeDlg.Exe程序中,在ID列表中选择对应的“对话框ID号”
09:MakeDlg.Exe程序中,将“生成文件”设置为Sail3000目录下的abc3.Cpp文件。
10:MakeDlg.Exe程序中,将“生成类型”设置成“脚本形式”,
11:MakeDlg.Exe程序中,点击确定按钮,生成abc3.cpp脚本文件

12:启动DOS下的sail3000工程的a.bat或Sail2000.exe,如果已经启动则可用“Alt +Tab组合键”切换到该程序。
13:在sail2000程序的菜单中,启动[附件]->[对话框脚本]程序
14:将“脚本文件”设置成“abc3.Cpp”,点需“加载运行”按钮
15:观察对话框脚本文件对应的界面是否满意,如果不满意,重复“04-15”步。

16:如果满意,将makedlg.Exe程序中的“生成类型”改成Cpp类型,最终生成源代码。
17:将生成的源代码拷贝到自己的开发工程目录中,并人工去掉“冗余”代码,加入“所需”代码。

[ Last edited by firstsail on 2008-3-3 at 08:09 PM ]

2008-3-3 18:23
查看资料  访问主页  发短消息 网志   编辑帖子  回复  引用回复
fgckfl
初级用户




积分 46
发帖 22
注册 2006-11-13
状态 离线
『第 6 楼』:  谢谢 firstsail

几天没上网,正在做并口和can的调试,做完后再向你请教winsail.经过前段时间
试用感觉winsail非常好用,大大减轻了dos下程序开发的工作量.只是我现在对
扩展内存的使用还不是很明白,呵呵,现在都找不到相关资料了.
什么时候能写篇详细文章介绍下就好了.

2008-3-7 20:58
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
firstsail
高级用户





积分 668
发帖 295
注册 2005-7-26
来自 广东深圳
状态 离线
『第 7 楼』:  

参看《微机内存管理指南》一书,是1998年出版的,我于2004年在广州购书中心购得。
该书的ISBN号是“9787115067203”,即“ISBN 7-115-06720-1”
找该书的途径推荐如下:
(1)书店
(2)网上搜索
(3)大学图书馆
(4)其它


----------------------------------------------------------------------------------------------------
功能号        功能                    功能号        功能
00H        取XMS版本号
01H        请求高内存区HMA         
02H        释放高内存区HMA         
03H        全程使能A20地址线     
04H        全程禁止使能A20地址线
05H        局部使能A20地址线     
06H        局部禁止使能A20地址线
07H        查询A20地址线的状态   
08H        查询自由扩展内存      
09H        分配扩展内存块
0AH        释放扩展内存块
0BH        移动扩展内存块
0CH        锁住扩展内存块
0DH        扩展内存块解锁
0EH        取EMB句柄信息
0FH        重新分配扩展内存块
10H        请求高端内存块UMB
11H        释放高端内存块UMB

(1)        功能号装入AH寄存器,WinSail只封装了红色部份功能号。
(2)        返回值中,AX寄存器值为“1”表示成功执行,为“0”表示失败,BL寄存器的值表示出错代码。
(3)        中断向量链接在中断2FH上,可以通过下面代码获得入口点

void* g_pIntVector = NULL; //全局变量            

void GetIntVector()
{
    union  REGS  mRegs;        
    struct SREGS mRegSegs;       
   
    mRegs.x.ax = 0x4310;            
    int86x(0x2F, &mRegs, &mRegs, &mRegSegs);        
    *(((WORD *)& g_pIntVector) + 0) = mRegs.x.bx;        
    *(((WORD *)& g_pIntVector) + 1) = mRegSegs.es;

    return;
}

[ Last edited by firstsail on 2008-3-10 at 01:29 PM ]

2008-3-10 11:17
查看资料  访问主页  发短消息 网志   编辑帖子  回复  引用回复
firstsail
高级用户





积分 668
发帖 295
注册 2005-7-26
来自 广东深圳
状态 离线
『第 8 楼』:  

//分配内存块,以K字节为单位,返回值为句柄号
WORD MallocXms(WORD wSizeK) //以K为单位
{
    BOOL bResult;
    WORD hBlock = NULL;//句柄号   
   
   void* pVector = g_pIntVector;   

    asm mov ah, 09H
    asm mov dx, wSizeK
    asm call [pVector]
    asm mov bResult, ax
    asm mov hBlock, dx

    return ((bResult) ? hBlock: NULL);
}

//释放内存块
BOOL FreeXms(WORD hBlock)
{
    BOOL bResult;
   
    void* pVector = g_pIntVector;   

    asm mov ah, 0AH
    asm mov dx, hBlock
    asm call [pVector]
    asm mov bResult, ax

    return ((bResult) ? TRUE : FALSE);
}

2008-3-10 13:29
查看资料  访问主页  发短消息 网志   编辑帖子  回复  引用回复
firstsail
高级用户





积分 668
发帖 295
注册 2005-7-26
来自 广东深圳
状态 离线
『第 9 楼』:  

//内存块移动参数表
typedef struct _tagXMSMOVEPARAMETERBLOCK
{
    DWORD   dwCount;//移动的字节数,必须是偶数
   HANDLE  hSource;//源块的名柄号,为0时,源块地址由下面两个给出
   WORD    wSourceOffset;//源块名柄号为0时,源内存块的偏移地址
   WORD    wSourceSeg;//源块名柄号为0时,源内存块的段地址

   HANDLE  hTarget;//目的块名柄号,为0时,目的块地址由下面两个给出
   WORD    wTargetOffset;//目的块名柄号为0时,目的内存块的偏移地址
   WORD    wTargetSeg;//目的块名柄号为0时,目的内存块的段地址
}XMSMOVEPARAMETERBLOCK;

//读XMS内存部份内容,字节数必须为偶数,否则须改动该函数
BOOL ReadXms(WORD hBlock, DWORD  dwIndex,  void* pBuffer, DWROD dwCount)
{
    void* pStr = pBuffer;
    DWORD dwNewCount = dwCount;
    DWORD dwNewIndex = dwIndex;

    void* pVector = g_pIntVector;  

    if ((dwCount % 2) != 0) //对奇字节进行处理
  {
        //这里略去实现部份
     //......
   }

    XMSMOVEPARAMETERBLOCK mXmsMoveParameterBlock;

    mXmsMoveParameterBlock.dwCount = dwNewCount;

    mXmsMoveParameterBlock.hSource = hBlock;
    mXmsMoveParameterBlock.wSourceOffset = LOWORD(dwNewIndex);
    mXmsMoveParameterBlock.wSourceSeg    = HIWORD(dwNewIndex);

    mXmsMoveParameterBlock.hTarget = NULL;
    mXmsMoveParameterBlock.wTargetOffset = FP_OFF(pStr);
    mXmsMoveParameterBlock.wTargetSeg = FP_SEG(pStr);

    WORD wOffset  = FP_OFF(&mXmsMoveParameterBlock);
    WORD wSegment = FP_SEG(&mXmsMoveParameterBlock);

    asm push si
    asm push ds

    asm mov ah, 0BH
    asm mov si, wOffset
    asm mov ds, wSegment
    asm call [pVector]
    asm mov bResult, ax

    asm pop ds
    asm pop si

    return ((bResult) ? TRUE : FALSE);
}

2008-3-10 13:30
查看资料  访问主页  发短消息 网志   编辑帖子  回复  引用回复
firstsail
高级用户





积分 668
发帖 295
注册 2005-7-26
来自 广东深圳
状态 离线
『第 10 楼』:  

//写XMS内存部份内容,字节数必须为偶数,否则须改动该函数
BOOL WriteXms(WORD hBlock, DWORD  dwIndex,  void* pBuffer, DWROD dwCount)
{
    void* pStr = pBuffer;
    DWORD dwNewCount = dwCount;
    DWORD dwNewIndex = dwIndex;

    void* pVector = g_pIntVector;  

    if ((dwCount % 2) != 0) //对奇字节进行处理
    {
        //这里略去实现部份
     //......
    }

    XMSMOVEPARAMETERBLOCK mXmsMoveParameterBlock;

    mXmsMoveParameterBlock.dwCount = dwNewCount;

    mXmsMoveParameterBlock.hSource = NULL;
    mXmsMoveParameterBlock.wSourceOffset = FP_OFF(pStr);
    mXmsMoveParameterBlock.wSourceSeg = FP_SEG(pStr);

    mXmsMoveParameterBlock.hTarget = hBlock;
    mXmsMoveParameterBlock.wTargetOffset = LOWORD(dwNewIndex);
    mXmsMoveParameterBlock.wTargetSeg    = HIWORD(dwNewIndex);

    WORD wOffset  = FP_OFF(&mXmsMoveParameterBlock);
    WORD wSegment = FP_SEG(&mXmsMoveParameterBlock);

    asm push si
    asm push ds

    asm mov ah, 0BH
    asm mov si, wOffset
    asm mov ds, wSegment
    asm call [pVector]
    asm mov bResult, ax

    asm pop ds
    asm pop si

    return ((bResult) ? TRUE : FALSE);
}

2008-3-10 13:31
查看资料  访问主页  发短消息 网志   编辑帖子  回复  引用回复
fgckfl
初级用户




积分 46
发帖 22
注册 2006-11-13
状态 离线
『第 11 楼』:  谢谢,郭兄.

太好了.

2008-3-14 11:17
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: