汇编开关atapi设备

光盘开关操作。

;u have some tip to remember in ur heart:
;1 DMA flag=0
;2 Packet command must send 3 times
;3 Slave bit=0e0h,not 0a0h or 0.386
Code segment para use16
assume cs:codestart:
Main Proc near
mov ax,Code
mov ds,ax
mov es,axmov dx,1f6h
mov byte ptr ds:[SlaveFlag],0f0h
call AtaPrimary
cmp word ptr ds:[AtapiPort],0
jnz MainProc
mov dx,1f6h
mov byte ptr ds:[SlaveFlag],0e0h
call AtaPrimary
cmp byte ptr ds:[AtapiPort],0
jnz MainProc
mov dx,176h
mov byte ptr ds:[SlaveFlag],0f0h
call AtaPrimary
cmp word ptr ds:[AtapiPort],0
jnz MainProc
mov dx,176h
mov byte ptr ds:[SlaveFlag],0e0h
call AtaPrimary
cmp word ptr ds:[AtapiPort],0
jnz MainProcmov byte ptr ds:[SlaveFlag],0e0h
call GetSataPort
call CheckSataPort
cmp word ptr ds:[AtapiPort],0
jz NoCdMainProc:
mov ah,9
mov dx,offset msgOpen
int 21h
mov ah,0
int 16h
mov si,offset PacketOpen
mov ds:[CommandEA],si
call SendCommand
mov ah,9
mov dx,offset msgClose
int 21h
mov ah,0
int 16h
mov si,offset PacketClose
mov ds:[CommandEA],si
call SendCommand
ToQuit:
call QUit
NOCd:
mov ah,9
mov dx,offset msgNoDevice
int 21h
jmp Quit
Main endpGetSataPort proc near
pushad
cld
mov di,offset SataPort
mov eax,80000008h
NextFunc:
push eax
mov dx,0cf8h
out dx,eax
mov dx,0cfch
in  eax,dx
shr eax,16
cmp eax,0101h
jnz ToNextFuncpop eax
push eax
add eax,8
mov cx,4
GetPort:
push eax
mov dx,0cf8h
out dx,eax
mov dx,0cfch
in  eax,dx
and al,0feh
stosw
inc word ptr ds:[SataPortNum]
pop eax
add eax,4
loop GetPortToNextFunc:
pop eax
add eax,100h
cmp eax,80010000h
jb NextFunc
popad
ret
GetSataPort endpCheckSataPort proc near
pushad
mov si,offset SataPort
mov cx,ds:[SataPortNum]
cmp cx,0
jz  EndCheck
CheckNext:
lodsw
mov dx,ax
add dx,7
mov al,0a1h
out dx,al
call WaitTime
in al,dx
cmp al,58h
jnz Nextport
sub dx,7
mov ds:[AtapiPort],dx
call ReadBuf
jmp EndCheck
NextPort:
loop CheckNext
EndCheck:
popad
ret
CheckSataPort endpSendCommand proc near
cli
pushad
mov dx,ds:[AtapiPort]
add dx,7
call WaitFree
call WaitRdy
mov al,0a0h
out dx,al
call WaitFree
call WaitRdy
call WaitRqt
mov dx,ds:[AtapiPort]
inc dx
mov al,ds:[DMAflag]
out dx,al
add dx,3
in al,dx
mov cl,al
inc dx
in al,dx
mov ch,al
inc dx
mov al,ds:[SlaveFlag]
out dx,al
shr cx,1
mov cx,6				;cx===6
mov dx,ds:[AtapiPort]
mov si,ds:[CommandEA]
rep outsw
add dx,7
call WaitFree
call WaitRdy
popad
sti
ret
SendCommand endpReadBuf Proc near
pushad
mov dx,ds:[AtapiPort]
add dx,4
in al,dx
mov cl,al
inc dx
in al,dx
mov ch,alResend:
push cx
shr cx,1
mov dx,ds:[AtapiPort]
mov di,offset DataBuf
rep insw
add dx,5
in al,dx
mov ah,al
dec dx
in al,dx
pop cx
cmp ax,cx
jnz Resend
mov dx,ds:[AtapiPort]
add dx,7
call WaitFree
call WaitRdy
popad
ret
ReadBuf endpWaitFree proc near
in al,dx
test al,80h
jnz WaitFree
ret
WaitFree endpWaitRdy proc near
in al,dx
test al,40h
jz WaitRdy
ret
WaitRdy endpWaitRqt proc near
in al,dx
test al,8
jz WaitRqt
ret
WaitRqt endpWaitTime proc near
pushad
sti
mov ax,40h
mov fs,ax
mov eax,dword ptr fs:[6ch]
add eax,1
WaitSec:
mov ebx,dword ptr fs:[6ch]
cmp eax,ebx
jae WaitSec
popad
ret
WaitTime endpAtaPrimary proc near
pushad
mov al,ds:[SlaveFlag]
out dx,al
inc dx
mov al,0a1h
out dx,al
call WaitTime
in al,dx
cmp al,58h
jnz NotAtaPort
sub dx,7
mov ds:[AtapiPort],dx
call ReadBuf
NotAtaPort:
popad
ret
AtaPrimary endpQuit proc near
mov ah,4ch
int 21h
Quit endpCommandEA		dw 0
DmaFlag			db 1
SlaveFlag		db 0
AtapiPort 		dw 0
SataPort 		db 40h dup (0)
SataPortNum 		dw 0
DataBuf			dw 200h dup (0)
PacketOpen 		db 1bh,3 dup (0),2,7 dup (0)
PacketClose 		db 1bh,3 dup (0),3,7 dup (0)
msgOpen			db 'Press any key to Eject the CD_ROM:',24h
msgClose		db 0ah,0dh,'Press any Key to Close the Tray:',24h
msgNoDevice		db 'Not Found CD_ROM!',0ah,0dh,24h
Code ends
end Start

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/777546.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS入门--ArkTS--基本语法

文章目录 ArkTSArkTS声明式开发范式的基本组成基本语法声明式UI创建组件配置属性配置事件配置子组件 自定义组件基本结构成员函数/变量build()函数自定义组件通用样式自定义组件的创建和渲染流程自定义组件重新渲染自定义组件的删除 Builder装饰器全局自定义构建函数组件内部的…

【NLP笔记】大模型prompt推理(提问)技巧

文章目录 prompt概述推理(提问)技巧基础prompt构造技巧进阶优化技巧prompt自动优化 参考链接: Pre-train, Prompt, and Predict: A Systematic Survey of Prompting Methods in Natural Language Processing预训练、提示和预测:NL…

【SpringCloud微服务实战10】DevOps自动化部署微服务项目(Jenkins+Docker+K8s)

一、什么是 DevOps DevOps 是一种重视软件开发人员(Developer)和运维人员(Operations)之间沟通与协作的文化、运动或实践,目标在于快速交付高质量的软件产品和服务。DevOps 强调自动化流程、持续集成与交付(CI/CD)、以及通过工具链、敏捷方法论和跨职能团队协作来增强软…

软件杯 深度学习+python+opencv实现动物识别 - 图像识别

文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络3.1卷积层3.2 池化层3.3 激活函数:3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 inception_v3网络5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 *…

基于单片机产品数量自动计量智能系统设计

**单片机设计介绍,基于单片机产品数量自动计量智能系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机产品数量自动计量智能系统设计是一个融合了单片机技术、传感器技术和自动控制技术的综合性项目。…

@rollup/plugin-html 使用及原理介绍

rollup/plugin-html 使用及原理介绍 一款用于自动创建 html 文件并导入 rollup 打包文件进行展示的插件。 安装 npm install rollup/plugin-html -D使用 import html from rollup/plugin-html;module.exports {input: index.js,output: {file: dist.js,},plugins: [html(…

uniApp使用XR-Frame创建3D场景(8)粒子系统

上篇文章讲述了如何将XR-Frame作为子组件集成到uniApp中使用 本片我们详细讲解一下xr-frame的粒子系统 先看源码 <xr-scene render-system"alpha:true" bind:ready"handleReady"> <xr-node visible"{{sec8}}"><xr-asset-load t…

基于ssm的线上旅行信息管理系统论文

摘 要 随着旅游业的迅速发展&#xff0c;传统的旅行信息查询管理方式&#xff0c;已经无法满足用户需求&#xff0c;因此&#xff0c;结合计算机技术的优势和普及&#xff0c;特开发了本线上旅行信息管理系统。 本论文首先对线上旅行信息管理系统进行需求分析&#xff0c;从系…

android pdf框架-10,相册浏览

MupdfViewer 这是最后apk,源码在前面的文章已经贴过了本站下载地址,只是不是最新的.可能不少是旧的内容. subsampling-scale-image-view这是一个大图片的分块加载的实现.比较不错的.滑动方面我觉得使用flinger的效果比它要流畅,惯性要好. 也有人把这个作成pdf渲染器.但翻页就…

将ENVI的roi转为mask图像

方法1&#xff1a; 直接使用ENVI step1: 将roi文件存储为.roi格式 [1] 链接: link step2: 将.roi转为mask [2] 链接: link [3] 链接: link 方法2&#xff1a; 使用Matlab step1: 将roi文件存储为.xlm 文件 step2&#xff1a;针对把每个roi存储为一个单独文件 [4] 读取xlm文…

Electron+Vue构建项目时出错:Error: Exit code: ENOENT. spawn /usr/bin/python ENOENT

问题&#xff1a;ElectronVue构建项目时出错&#xff1a;Error: Exit code: ENOENT. spawn /usr/bin/python ENOENT URL:https://github.com/nklayman/vue-cli-plugin-electron-builder/issues/1701 一&#xff0c;构建时node版本要低 同时构建命令如下&#xff1a; "el…

配置SSH后 GitHub无法使用了

首先进入这个网页GitHub Status看是否能正常访问 。如果这个网络都不行&#xff0c;那先解决网络问题&#xff0c;国内不让访问Github的。 如果在使用Git克隆仓库时遇到连接问题&#xff0c;先排查 Git配置或网络配置问题。可以使用下面的方法诊断和解决这个问题&#xff1a; …

aidl文件生成Java、C++[android]、C++[ndk]、Rust接口

目录 前言一、Java二、C[android]三、C[ndk]四、Rust接口 前言 在 Android 开发中&#xff0c;AIDL 文件通常会被自动编译&#xff0c;生成对应语言的接口文件。对于应用层 Java 开发者来说&#xff0c;使用 AIDL 和 Binder 封装的接口可以让他们更加专注于应用逻辑&#xff0…

【Kotlin】List、Set、Map简介

1 List Java 的 List、Set、Map 介绍见 → Java容器及其常用方法汇总。 1.1 创建 List 1.1.1 emptyList var list emptyList<String>() // 创建空List 1.1.2 List 构造函数 var list1 List(3) { "abc" } // [abc, abc, abc] var list2 ArrayList<In…

fastadmin学习04-一键crud

FastAdmin 默认内置一个 test 表&#xff0c;可根据表字段名、字段类型和字段注释通过一键 CRUD 自动生成。 create table fa_test (id int unsigned auto_increment comment ID primary key,user_id int(10) default 0 null…

免费软件“蓝莓投屏”:支持多个Airplay同时镜像的投屏软件。

引言&#xff1a; 由于定制盒子(3288)不支持投屏功能&#xff08;有些5.1不支持&#xff0c;安卓4.X本身也不支持&#xff09;&#xff0c;需要借助第三方的投屏软件来实现这一需求。所以&#xff0c;研究半天&#xff0c;蓝莓投屏以其简便易用的特性脱颖而出&#xff0c;只需…

每日一题--最长连续序列

洛阳春-岑参 人到洛阳花似锦&#xff0c;偏我来时不逢春。 谁道三冬无春色&#xff0c;冰山高处万里银 目录 题目描述 思路分析 方法及其时间复杂度 法一 暴力枚举&#xff1a; 法二 哈希表遍历&#xff1a; 法三 并查集&#xff1a; 个人总结 题目描述 128. 最长连续序…

独立服务器和云计算各有什么优势

独立服务器和云计算各有什么优势 一、性能 独立服务器&#xff1a;独立服务器提供了独享的硬件资源&#xff0c;通常具有更高的性能和更稳定的性能表现。对于对性能有较高需求的任务&#xff0c;如大数据处理、游戏服务器等&#xff0c;独立服务器是更好的选择。 云计算&…

Java安全篇-Fastjson漏洞

前言知识&#xff1a; 一、json 概念&#xff1a; json全称是JavaScript object notation。即JavaScript对象标记法&#xff0c;使用键值对进行信息的存储。 格式&#xff1a; {"name":"wenda","age":21,} 作用&#xff1a; JSON 可以作为…

网络工程师实验命令(华为数通HCIA)

VRP系统的基本操作 dis version #查看设备版本信息 sys #进入系统视图 system-name R1 #改设备名字为R1进入接口配置IP地址 int g0/0/0 ip address 192.168.1.1 255.255.255.0 #配置接口地址为192.168.1.1/255.255.255.0 ip address 192.168.1.2 24 sub #此…