深圳市航顺芯片技术研发有限公司
直播中

卓侨汉

7年用户 1058经验值
擅长:MEMS/传感技术
私信 关注
[问答]

有关8237A芯片的基础知识汇总

8237A芯片的两种工作状态分别是什么?
8237A芯片是由哪些部分组成的?
8237A芯片的引脚有哪些?其功能分别是什么?

8237A芯片是如何进行工作的?

回帖(1)

李长宝

2021-8-17 16:57:11
  9.1 8237A 的组成与工作原理
  9.1.1 DMA传送
  用 DMA 方式传送数据时,传送过程完全由 DMA 控制器(DMAC)控制。其基本功能:
  DMAC 能向CPU的 HOLD 脚发出 DMA 请求信号。
  CPU响应 DMA 请求后,DMAC 获得总线控制权,由它控制数据的传送,CPU则暂停工作。
  能提供读/写存储器或I/O设备的各种控制命令。
  确定数据传输的始址和数据长度(CPU配置的),每传送1个数据便自动修改地址(+1或-1),数据长度 -1 。
  传送完毕,能发出结束 DMA 传送的信号。
  CPU在每个非锁定时钟周期结束后,都会检测 HOLD 脚上有无 DMA 请求?若有,便转入 DMA 传送周期。
  8237A 是高性能可编程 DMA 控制器,主要特点:
  含 4 个通道,每通道有 64K 地址(16位)和字节计数能力(16位)。
  有 4 种传送方式:单字节传送、数据块传送、请求传送、级联传送。
  每个通道的 DMA 请求可被允许或禁止。4 个通道的 DMA 请求有不同优先级,优先级可以是固定的,也可以是循环的。
  任一通道完成数据传送后,会自动产生过程结束信号 EOP(End of Process,不常用),结束 DMA 传送;还可从外界输入 EOP 信号,中止正执行的DMA 传送。
  8237A 的两种工作状态
  1)从态方式
  开始 DMA 传送前,8237A 是系统总线的从属设备,由CPU对它进行编程,如指定通道、传送方式和类型、内存单元起始地址、地址是递增还是递减以及要传送的总字节数等等;CPU也可读取 DMAC 的状态。
  2)主态方式
  当 8237A 取得总线控制权后,它就完全控制了系统,使I/O设备和存储器之间或者存储器与存储器之间进行直接的数据传送。
  8237A 芯片的内部结构和外部连接与这两种工作状态密切相关。
  9.1.2 8237A的内部结构
  
  时序与控制逻辑
  从态时,接收系统时钟、复位、片选和读/写等信号,完成相应控制操作;主态时, 向系统发控制信号。
  其中与设备相连的是 IOR ‾ , IOW ‾ overline {text{IOR}},overline {text{IOW}} IOR,IOW ,其他的要么和CPU相连,要么和系统总线相连。
  MEMR ‾ , MEMW ‾ overline {text {MEMR}},overline {text{MEMW}} MEMR,MEMW 是主态时进行内存读写的命令。
  优先级编码电路
  对同时提出 DMA 请求 HRQ(Hold Request) 的多个通道进行排队判优,决定哪个通道优先级最高,然后进行响应 HLDA(Hold Acknowledge)。
  可选固定或循环优先级。某个优先级高的设备服务时,禁止其它通道请求。
  数据和地址缓冲器组
  8237A的 A7~A4(单向输出)、A3~A0(双向:从态时 A3-A0 输入有4根线,说明占了 16 个端口地址;主态时:A3-A0、A7-A4、DB7-DB0 共16根地址线往内存输出,读或写数据) 为地址线;
  DB7~DB0 在从态时传输(CPU配置或读取DMA的)数据,主态时传送地址。它们都与三态缓冲器相连,便于接管或释放。
  命令控制逻辑
  从态时接收CPU送来的寄存器选择信号(A3~A0),选择寄存器;主态时译码方式字的 D1D0 ,以确定操作类型。A3~A0 与 IOR text{IOR} IOR 、 IOW text{IOW} IOW 配合组成各种操作命令。
  内部寄存器组
  每通道有 16 位基址寄存器、基字计数器、当前地址寄存器、当前字计数器以及 6 位工作方式寄存器。
  片内还有命令寄存器、屏蔽寄存器、请求寄存器、状态寄存器和暂存寄存器。
  不可编程的字数暂存器和地址暂存器。
  9.1.3 8237A的引脚功能
  8237A 为 40 引脚 DIP 封装, 引脚排列:
  
  CLK 时钟信号,输入
  8237A 时钟频率 3MHz ,8237A-5 为 5MHz 。
  CS ‾ overline text{CS} CS 片选信号,输入,低电平有效。
  从态方式下选中 8237A ,接受CPU对它的编程等。
  READY 准备好,输入,高电平有效
  慢速 I/O 设备或存储器参与 DMA 传送时,可使 READY 变低,让 8237A 在 DMA 周期中插入等待周期 TW ;当它们准备就绪时 READY 变高。
  A3~A0 低 4 位地址线
  从态为输入,寻址 8237A 内部寄存器,实现编程;主态时输出要访问内存的低 4 位地址。
  A7-A4 高 4 位地址线
  始终是输出或浮空,主态时输出 4 位地址信息 A7-A4 。
  DB7-DB0 8 位数据线,与系统数据总线相连。
  从态时,CPU经过数据线读取各有关寄存器内容,并对各寄存器编程。
  主态时,由它们输出高 8 位地址 A15-A8 ,并由 ADSTB 信号将它们锁存到外部的高 8 位地址寄存器中,与 A7-A0 输出的低 8 位地址构成 16 位地址。
  存储器-存储器传送方式下,源存储器读出的数据,经它们送暂存寄存器,暂存器中数据再经它们写到目的存储单元中。
  AEN 地址允许信号,输出,高电平有效
  送出锁存的高 8 位地址,与芯片输出的低 8 位地址一起构成 16 位内存偏址。同时使连到CPU的地址锁存器无效,保证地址线上的信号来自 DMAC 。
  ADSTB 地址选通信号,输出,高电平有效
  选通外部地址锁存器,将 DB7~DB0 上的高 8 位地址送到外部的地址锁存器。
  IOR ‾ overline {text{IOR}} IOR I/O 读信号,双向。
  从态时,控制CPU读取 8237A 内部寄存器。
  主态时,与 MEMW ‾ overline {text{MEMW}} MEMW 配合,控制数据由外设传到存储器中。
  DREQ3~DREQ0 通道 3~0 的 DMA 请求信号,输入
  外设请求 DMA 服务时,向这些引脚发请求信号,有效极性由编程确定。固定优先级时,DREQ0 的优先级最高,编程可改变优先级。
  HRQ 保持请求信号,输出,高电平有效
  向CPU的 HOLD 端发出的 DMA 请求信号,可从 8237A 任一个未被屏蔽的通道发出。
  HLDA 保持响应信号,输入,高电平有效
  与CPU的 HLDA 相连,CPU收到 HRQ 信号后,至少经过1个时钟周期后,使 HLDA 变高,表示已让出总线控制权,8237A 收到 HLDA 信号后,便开始 DMA 传送。
  DACK3~DACK0 通道 3~0 的 DMA 响应信号,输出
  其有效电平极性由编程确定。相应通道开始 DMA 传送后,DACKi 有效,通知外部电路现已进入 DMA 周期。
  EOP ‾ overline {text{EOP}} EOP 传输过程结束信号,双向,低电平有效
  DMA 传送中,任一通道的字计数器减为 0 ,再由 0 减为FFFFH 而终止计数时,会在 EOP ‾ overline {text{EOP}} EOP 引脚上输出低电平信号,表示 DMA 传输结束。
  也可在 EOP ‾ overline {text{EOP}} EOP 脚上输入低电平信号来终止 DMA 传送。
  若通道设置成自动预置状态,该通道完成一次 DMA 传送,出现 EOP ‾ overline {text{EOP}} EOP 信号后,又能自动恢复有关寄存器的初值,继续执行另一次 DMA 传送。
  9.1.4 8237A的内部寄存器
  8237A的内部可编程寄存器主要有 10 种:
  
  当前地址寄存器
  16 位,每通道 1 个,存放 DMA 传送的存储器地址值。每传送 1 个数据,地址值自动 +1 或 -1 ,指向下个单元。
  编程时可写入初值,也可被读出,但每次只能读/写 8 位,所以读/写要两次完成。
  自动预置操作方式,在 EOP text{EOP} EOP 有效时,会重装入基地址值。
  当前字计数寄存器
  16 位,每通道 1 个,编程时置其初值为实际传送字节数少1。每传送 1 字节,自动 -1 。由 0~FFFFH 时,将产生终止计数信号TC 。
  自动预置操作方式,在 EOP text{EOP} EOP 有效时,会重装入基字计数寄存器的内容。
  基地址寄存器
  16 位,每通道 1 个,存放通道当前地址寄存器初值,与当前地址寄存器地址一样,编程时写入相同值。
  其内容不能读出和修改。用在自动预置操作时,使当前地址寄存器恢复到初值。
  基字计数寄存器
  16 位,每通道 1 个,存放通道当前字计数器初值,该值也是编程时与当前字计数器一起写入的。
  其内容不能读出和修改,用于自动预置操作时,使当前字计数器恢复到初值。
  命令寄存器
  全局,8 位,控制 8237A 的操作。由CPU编程来设置 8327A 操作方式, 复位时清除。
  
  D0 位:能否进行存储器到存储器传送,D0=1 允许。并规定先用通道 0 从源单元读入 1 字节放入暂存器,然后由通道 1 把该字节写到目的单元,接着两通道的地址分别 +1 或 -1 ,通道 1 的字计数器 -1,它减为 0 时产生终止计数信号 TC,并输出 EOP text{EOP} EOP 信号,终止DMA 服务。
  D1 位:存储器到存储器传送时,通道 0 地址能否保持不变。D1=1 ,通道 0 在传送中保持同一地址,从而可把该单元中的数写入一组存储单元。D1=0 禁止。当 D0=0 时这种方法无效。
  D2 位:允许或禁止 8237A 工作,D2=0 允许,D2=1 则禁止。
  D4位 优先权控制。D4=0 为固定优先权,通道 0 优先级最高;D4=1 为循环优先权,刚服务过的通道 i 优先权最低,而通道 i+1 优先权最高。随着 DMA 操作不断进行优先权不断循环,防止某通道长时间占用总线。
  D6 位:决定 DREQ 的有效电平,0 高电平有效,1 则低电平有效。
  D7 位:决定 DAC K的有效电平,1 高电平有效,0 则低电平有效。
  D3 位和 D5 位:有关时序的操作,见后面时序讨论。
  工作方式寄存器
  6 位,每通道 1 个,选择 DMA 的传送方式和类型等,格式:
  
  D1D0 位:选择通道,并进一步由 D2-D7 指定选定通道的工作方式。这样 4 个通道可合用 1 个方式寄存器。
  D3D2 位:决定所选通道的 DMA 操作类型。从 3 种 DMA 传送类型中选定一种:
  10:读传送,存储器-》I/O设备, 发 MEMR ‾ , IOW ‾ overline {text{MEMR}},overline {text{IOW}} MEMR,IOW ,
  01:写传送,存储器《-I/O设备, 发 MEMW ‾ , IOR ‾ overline {text{MEMW}},overline {text{IOR}} MEMW,IOR ,
  00:校验传送,伪传送,8237A 会产生地址信息和
  EOP text{EOP} EOP 信号,不会发出读写控制信号,用于测试。
  D4 位:所选通道是否进行自动预置操作。如果 D4=1 ,则选择自动预置。
  D5 位:方向控制位。D5=0 数据传送由低址向高址方向进行,每传送 1 字节,地址 +1 。D5=1 时传送方向相反。
  D7D6 位:定义所选通道操作方式。有 4 种传送方式:
  1) 单字节传送方式(常用于软盘)
  每次DMA操作只传送 1 字节。之后字计数器 -1 ,地址寄存器 +1 或 -1,HRQ 无效,释放系统总线。当字计数器由 0 减为 FFFFH 时,产生终止信号 TC 。
  此后即使 DREQ 继续有效,8237A 的 HRQ 输出仍进入无效状态并让出总线,由CPU控制至少一个总线周期。
  2) 数据块传输方式
  进入 DMA 服务后,可连续传输一批数据,直到字计数器由 0 减为 FFFFH 产生 TC 信号,或从外部送来 EOP text{EOP} EOP 信号时,才释放总线,结束 DMA 传输。
  3)请求传送方式
  也连续传送数据,直到字计数器由 0 减为 FFFFH 产生 TC ,或外界送来 EOP text{EOP} EOP 信号。但每传送 1 字节后,都要测试 DREQ 端,一旦发现此信号无效,马上停止。
  地址和字计数器的中间值会被保存在通道的现行地址和字计数器中,外设准备好新数据时,可使 DREQ 再变为有效,又从断点处继续进行传输。
  4)级联传送方式
  连接多个 8237A 以扩充 DMA 通道,连线见图11.5。
  主片 DREQ —从片 HRQ ,主片 DACK—从片 HLDA ,主片 HRQ 和 HLDA 与CPU的 HOLD 和 HLDA 相连。1 块主片可连 4 块从片。主片置为级联传送,从片设成其它三种方式。主片不输出地址和读写信号。
  
  请求寄存器
  相应请求位置 1 时,对应通道可产生 DMA 请求。相应位可由DREQ 信号置1,也可写入通道请求字来置 1 或清 0 。
  D1D0 位选通道号,D2 位为请求位。请求位不能屏蔽,其优先权受优先权逻辑控制,TC 或外部的 EOP text{EOP} EOP 信号能将相应的请求位清 0 ,RESET 信号则使整个请求寄存器清 0 。
  
  屏蔽寄存器
  4 位,1 个/通道。禁止/允许对应通道的 DREQ 请求进入请求寄存器。有两种屏蔽字,端口地址不同。
  1)通道屏蔽字
  可对该寄存器写入通道屏蔽字来对单个屏蔽位置 1 /复位。通道屏蔽字格式与通道请求字格式类似:
  
  2)主屏蔽字
  还允许用主屏蔽命令设置通道的屏蔽触发器。D3~D0 位对应通道 3~0 的屏蔽位,1 屏蔽,0 清除屏蔽。可写入主屏蔽字,一次完成 4 个通道的屏蔽位设置。可用软件同时清除 4 个通道的屏蔽位。
  
  状态寄存器
  8 位状态寄存器存放状态信息,供CPU读出。如 D3~D0 中置 1 的通道,已达计数终点 TC 或外部送来了 EOP text{EOP} EOP 信号。D7-D4 中置 1 的通道,DMA 请求还未处理。复位或被读出后,相应状态位被清除。状态字格式:
  
  暂存寄存器
  在存储器-》存储器传送时,保存所传送的数据。其中始终保存着最后 1 个传送的字节,RESET 信号会将其清除。编程状态下,可由CPU读出这个字节。
  软件命令
  编程状态下,8237A 可执行 3 个附加的特殊软件命令,只要对特定端口进行一次写操作,命令就会生效。
  1)清除先/后触发器
  8237A 仅 8 根数据线,而地址寄存器和字计数器均为 16 位,CPU要分两次读写。先/后触发器控制高低字节读写次序。清 0 读写低 8 位,随后自动置 1 ,读写高 8 位。接着又清 0 ,… 。对该触发器所在的寄存器执行一次写操作便清 0 ,复位和 EOP text{EOP} EOP 信号有效也将它清为 0 。
  2)主清命令
  主清命令也称为复位命令,功能与 RESET 信号同,它可使命令寄存器、状态寄存器、请求寄存器、暂存寄存器和内部先/后触发器均清 0 ,而把屏蔽寄存器置 1 。复位后,8237A 进入空闲状态。
  3)清除屏蔽寄存器
  该命令能清除 4 个通道的全部屏蔽位,允许各通道接受 DMA 请求。
  各寄存器的端口地址
  对 8237A 内部寄存器读写时, CS ‾ overline {text{CS}} CS 端必须为低电平,该信号由高位地址经I/O译码后产生。
  A3~A0 线选择不同寄存器,共占 16 个I/O端口地址。常将它们与地址总线低 4 位 A3~A0 相连,选择各寄存器。
  例如,PC/XT 机中,地址 A9~A4=000000 时,经I/O译码电路选中 8237A,使其有效。 地址 A3~A0 与 8237A 的 A3~A 0脚连接实现片内寻址。因此基地址 =00H,记为 DMA=00H 。由此可得其他寄存器的地址,如DMA+00H 为通道 0 基地址与当前地址寄存器地址,DMA+08H 为状态寄存器地址等:
  
  9.2 8237A的时序
  空闲周期 SI :未发生 DMA 请求时
  检测 CS :CPU是否对其操作
  检测 DREQ :外设是否有请求
  过渡状态 S0 :DMAC 发出 HRQ 之后,收到 HLDA 之前。
  有效周期:DMAC 收到 HLDA 之后,接管总线:
  包括 4 个状态周期(S1、S2、S3、S4),慢速I/O或M还可通过令 READY=0 申请插入 SW ,8237A-5 在 S3 中检测 READY ,SW 中的操作同 S3 :
  
  S1 :更新高8位地址,AEN 、ADSTB 有效,DMAC 将 M 的 A8~15 放到 DB0~7 上;只有当 A8~15 有变化时才出现
  S2 :选中两个介质,输出 16 位地址选中 M :低 8 位由 A0~7 直接输出;高 8 位由 DB0~7 经外部锁存器(由 ADSTB 下降沿锁存)输出;发出有效的 DACK 选中I/O
  S3 :读周期。发出 IOR(DMA写)或 MEMR(DMA读),从源读数据到 DB0~7,等待写周期。
  S4 :写周期。发出 MEMW(DMA写)或 IOW(DMA读),将 DB0~7 上的数据写到目标中。
  
  扩展写:写提前到与读同时开始(S3),与读一样扩展到 2 个时钟周期。
  压缩时序:去掉 S3 ,读与写同为 1 个时钟周期。
  SW :慢速I/O或M传送时,在 S3 和 S4 间插入 SW 。
  9.3 8237A的编程和应用举例
  9.3.1 DMA系统组成
  PC机的DMA系统:
  8237A-5
  页面地址寄存器
  总线裁决逻辑
  9.3.2 DMA系统有效地址的生成
  
  第一代PC机中的地址是 20 位的,而 8237A 是 16 位的。为此需要一个 74LS670 扩展地址。
  1. 74LS670工作原理
  74LS670 的 RA,RB 和 DACK2,DACK3 连接,内有 4 个 4 位寄存器。读写分开控制:
  写: GW ‾ = 0 overline {text{GW}}=0 GW=0;WA、WB:写入寄存器选择;D1~4:数据输入
  读: GR ‾ = 0 overline {text{GR}}=0 GR=0;RA、RB:读出寄存器选择;Q1~4:数据输出
  2. DMA系统有效地址的生成
  如何提供存储器的地址:
  A16~19 :由 74LS670 提供;
  A8~15 :由 8237A-5 的 DB0~7 经 74LS373 提供;
  A0~7 :由 8237A-5 的 A0~7 直接提供;
  如何对I/O设备寻址,用 DACK 信号取代芯片选择和片内端口选择:
  
  3. IBM-PC微机的DMA系统
  单片 DMAC 的 DMA 系统:4 个通道;8 位传送;1MB 寻址;64KB 计数
  双片DMAC的DMA系统:
  7 个通道;16MB 寻址;64KB 计数
  片(0):8 位传送
  片(1):使用偶地址;16 位传送
  
  如果我们打开设备管理器,可以在直接内存访问控制器中看到上图双片DMAC结构中,出现的端口地址。
  4. DMA系统的初始化
  注意事项:
  初始化前要对芯片检测
  初始化前禁止工作或屏蔽通道
  所有通道的方式寄存器均加载
  要初始化页面地址寄存器
  初始化编程:
  ① PC机检测芯片(8 个 16 位寄存器全 1 、全 0 的读写)及加载校验方式:
  MOV AL, 04H ;0000_0100:前4位默认配置,正常时序,禁止工作,CR0地址不保持,禁止内存到内存
  OUT DMA+08H, AL ;写入命令寄存器
  OUT DMA+OCH, AL ;清先后触发器
  MOV AL, 0FFH ;1111_1111:全1的读写测试
  C16: MOV BL, AL ;全1或全0
  MOV BH, AL ;全1或全0
  。。.
  。。.
  MOV CX, 8 ;对8个寄存器做读写测试
  MOV DX, DMA ;从DMA开始测试
  C17: OUT DX, AL ;全1或全0写入DX
  OUT DX, AL ;再写一次,16位写两次,先写低八位,再写高八位
  IN AL, DX ;读出低八位
  MOV AH, AL ;
  IN AL, DX ;读出高八位,放入AX中
  CMP BX, AX ;和之前保存的AL对比
  JE C18 ;如果相同,证明该寄存器没有出错
  HLT ;不相同则停机
  C18: INC DX ;DX端口号+1
  LOOP C17 ;再重复循环
  。。.
  INC AL ;AL+1=全0
  JE C16 ;为0,跳转回C16,做全0测试
  。。.
  。。.
  。。.
  。。.
  。。.
  。。.
  SUB AL, AL ;AL清0
  OUT DMA+08H, AL ;写入命令寄存器,高4位按照默认配置,低4位正常时序,允许工作,其他位默认;启用芯片
  ;下面将40H,41H,42H,43H先后写入工作方式寄存器,,即对全部的通道写入同样的工作方式
  MOV AL, 40H ;0100_0000针对0号通道
  OUT DMA+0BH, AL ;单字节方式,地址递增,禁止地址预置,校验方式
  MOV AL, 41H ;0100_0001针对1号通道
  OUT DMA+0BH, AL ;单字节方式,地址递增,禁止地址预置,校验方式
  MOV AL, 42H ;0100_0010针对2号通道
  OUT DMA+0BH, AL ;单字节方式,地址递增,禁止地址预置,校验方式
  MOV AL, 43H ;0100_0011针对3号通道
  OUT DMA+0BH, AL ;单字节方式,地址递增,禁止地址预置,校验方式
  5. DMA传送的应用
  例:利用级联的 IBM PC/AT 的 8237 主片通道 5 ,将内存其始地址为 80000H 的280H 字节的内容直接输出到外部设备。
  MOV AL, 04H ;命令字, 禁止82C37工作
  OUT 0D0H, AL ;写命令寄存器
  MOV AL, 0
  OUT 0D8H, AL ;清除先/后触发器
  OUT 0C4H, AL ;写低位地址
  OUT 0C4H, AL ;写高位地址
  MOV AL,04H ;页面地址为8
  OUT 08BH, AL ;写页面寄存器
  MOV AX, 280H ;传输字节数
  DEC AX
  OUT 0C6H, AL ;写字节数低位
  MOV AL, AH
  OUT 0C6H, AL ;写字节数高位
  MOV AL, 89H ;方式字: 单字节读, 地址加1
  OUT 0D6H, AL
  MOV AL, 05H ;写请求寄存器
  OUT 0D2H, AL
  DMA控制器与I/O设备的连接:DMAEN 是 DMA 申请允许信号;软盘接口中的数据输出寄存器(3F2H)的 D3 位控制,高有效
  
  ROM-BIOS 中软盘 DMA_SETUP:
  AL——方式字(CH2,单一传送,非自动预置,地址增量)
  42H:DMA校验(软盘校验)
  46H:DMA写(读软盘)
  4AH:DMA读(写软盘)
  ES:BX——内存首址
  DH——要传送的扇段数
  字节数/扇段在磁盘基址区 DISK_BASE 的 3 号单元
  0:128 字节/扇段
  1:256 字节/扇段
  2:512 字节/扇段
  3:1024 字节/扇段
  DMA_SETUP PROC
  PUSH CX ;保护现场
  CLI
  OUT DMA+12, AL ;清先/后触发器
  OUT DMA+11, AL ;设置方式
  ;形成物理地址
  MOV AX, ES
  MOV CL, 4
  ROL AX, CL
  MOV CH, AL
  AND AL, 0F0H
  ADD AX, BX
  JNC J33
  INC CH
  J33: PUSH AX ;低16位地址入栈
  。。.
  ;设置地址寄存器及页面地址
  OUT DMA+4, AL ;写低16位地址
  MOV AL, AH
  OUT DMA+4, AL
  MOV AL, CH
  AND AL, 0FH ;写高4位地址
  OUT 81H, AL
  ;设置字节计数器
  MOV BX, 6
  CALL GET_PAM ;取DISK_BASE的3号单元作为移位次数
  MOV CL, AH
  MOV AH, DH
  SUB AL, AL
  SHR AX, 1
  SHL AX, CL
  DEC AX
  PUSH AX ;N-1入栈保护
  。。.
  OUT DMA+5, AL
  MOV AL, AH
  OUT DMA+5, AL
  STI
  ;判DMA是否超界
  POP CX ;用低16位地址与N-1相加设置CF
  POP AX
  ADD AX, CX
  POP CX ;恢复现场
  MOV AL, 02H
  OUT DMA+10, AL
  RET
  DMA_SETUP ENDP
举报

更多回帖

发帖
×
20
完善资料,
赚取积分