您的位置:逆风者 汇编技术 正文
原作者:www.upwinder.com 添加时间:2007-09-01 原文发表:2007-08-31 人气:11 来源:未知

本文章共2398字,分2页,当前第1页,快速翻页:
 
;=====================================================
;
;Program:DetectATAPIdeviceexistornot
;Ifexist,changestatus.
;Ifnowexist,donothing.
;NotaffectATAdevice.
;Environment:PureDOS.
逆@风@者
;Author:JimYu(YuLing)
;Data:2004.07.15
;Version:1.0.0
;Mail:Jim.Yu@Mic.Com.Tw
;
.MODELSMALL
.586P
.STACK1024
.DATA
BSYEQU80h
DRQEQU8
START_STOP_UNITEQU1Bh
EJECT_TRAYEQU2
CLOSE_TRAYEQU3
MODE_SENCEEQU5Ah
STATUS_PAGEEQU2Ah
SIZE_OF_CHANNEL_ITEMEQU15h
SHOW_DOOR_OPENDB'DoorOpened.',0dh,0ah,'$'
SHOW_DOOR_CLOSEDB'DoorClosed.',0dh,0ah,'$'
NOT_EXISTDB'NotExist.',0dh,0ah,'$'
SS_CHANNELDB'4.SecondarySlave$'
SM_CHANNELDB'3.SecondaryMaster$'
PS_CHANNELDB'2.PrimanySlave$'
PM_CHANNELDB'1.PrimanyMaster$'
PACKET_COMMANDDB12DUP(0)
.CODE
START:
MOVAX,@code
MOVDS,AX
PUSHDS

;Codestart
pushsegPACKET_COMMAND
popds
movcx,4
next_device:
callshow_channel

calldetect_atapi

jnenot_atapi

calldetect_device

jc@f
callopen_device
callopen_deviceSomeATAPI(e.g.DVD-ROM)
callopen_deviceNeedsendcommand3times.
movdx,offsetSHOW_DOOR_OPEN
jmpshow_and_reset_device
@@:
callclose_device
callclose_deviceSomeATAPI(e.g.DVD-ROM)
callclose_deviceNeedsendcommand3times.
movdx,offsetSHOW_DOOR_CLOSE
show_and_reset_device:
movah,9
int21h
callreset_device
jmpcheck_device_finish
not_atapi:
movdx,offsetNOT_EXIST
movah,9
int21h
check_device_finish:
loopnext_device

;Codeend

POPDS
MOVAX,4C00h
INT21h

;=====================================================
;procedure:show_channel
;in:cx
;out:none
;destroy:none
show_channelproc
pushcx
pushsegSS_CHANNEL
popds
movdl,cl
decdl
movax,SIZE_OF_CHANNEL_ITEM
muldl
movdx,ax
adddx,offsetSS_CHANNEL
movah,9
int21h
popcx
ret
show_channelendp

;=====================================================
;procedure:waid_idle
;in:dx
;out:CY=timeout
;NC=deviceidle
;destroy:none
wait_idleproc
pushcx
pushdx
pushax

ordl,7
movcx,0ffffh
@@:
callin_al_dx
testal,BSY
jz@f
loop@b
@@:
popax
popdx
popcx
ret
wait_idleendp

;=====================================================
;procedure:req_data
;in:dx
;out:CY=timeout
;NC=devicerequestdata
;destroy:none
req_dataproc
pushcx
pushdx
pushax

ordl,7
movcx,0ffffh
@@:
callin_al_dx
testal,DRQ
jnz@f
loop@b
@@:
popax
popdx
popcx
ret
req_dataendp

;=====================================================
;procedure:set_feature
;in:ax
;out:none
;destroy:ax
;Set1X1=0
;Set1X4=AL
;Set1X5=AH
;Send1X70A0h
set_featureproc
pushdx
pushax

incdl
xoral,al
callout_dx_al

popax

adddl,3
callout_dx_al

incdl
xchgah,al
callout_dx_al

adddl,2
moval,0a0h
callout_dx_al

popdx
ret
set_featureendp

;=====================================================
;procedure:send_packet_command
;in:dx,si
;out:none
;destroy:ax,si
send_packet_commandproc
pushcx

movcx,6
@@:
movax,ds:[si]
callout_dx_ax
xorax,ax
movds:[si],ax
addsi,2
loop@b

callwait_idle

popcx
ret
send_packet_commandendp

;=====================================================
;procedure:detect_device
;in:cx
;out:CY=TrayOpen
;NC=TrayClose
;destroy:dx,ax,si
;Detectatapidevicetray
detect_deviceproc

callset_device

movax,090h
callset_feature

callwait_idle

@@:
movsi,offsetPACKET_COMMAND

movax,(STATUS_PAGE*100h) MODE_SENCE
movds:[si],al
movds:[si 2],ah
moval,90h
movds:[si 8],al

callsend_packet_command

callreq_data

callin_al_dx
callin_al_dx
cmpal,70h
jedoor_close
stc
ret
door_close:
clc
ret
detect_deviceendp

;=====================================================
 
本文章更多内容1 - 2 - 下一页>>
相关文章

实模式与保护模式切换实例
通用控件
内存管理和文件输入/输出
控制转移(1)
WIN98SE硬盘主引导记录代码反汇编分析
虚拟8086模式的内存管理
图形显示方式屏幕的保存和恢复
动态库的执行时间
多线程编程
分页管理机制
win32消息框
Win32不需要释放的资源
启动画面
处理键盘输入消息
利用驱动程序读取硬盘序列号
抓取屏幕内容(字符模式)
关于在8086/88内存寻址方式
使用DLL中的资源
内存映射文件
扩展Int 13H调用规范

相关评论


本文章所属分类:首页 汇编技术

  热门关键字:
进制数据输出的通用程序 2007-09-12
汇编源码--showmem 2007-08-31
汇编源码--CLEAN 2007-08-31
汇编源码--hdr 2007-08-31
汇编源码--basload 2007-08-31
汇编源码--CHAR 2007-08-31
汇编源码--fxn 2007-08-31
汇编源码--alarm 2007-08-31
汇编源码--getsect 2007-08-31
汇编源码--DEV 2007-08-31
汇编源码--getspace 2007-08-31
汇编源码--frespace 2007-08-31
CIH文件型病毒检测消除程序 2007-08-31
Mixer Volume Ctrler V1.0 2007-08-31
汇编源码--COMINT 2007-08-31
自己用汇编语言写的一个病毒(源码... 2007-08-31
汇编源码--col 2007-08-31
汇编源码--BURNOUT 2007-08-31