home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Supreme Volume 6 #1
/
swsii.zip
/
swsii
/
165
/
WDFMT21.ZIP
/
AT_IO.ASM
next >
Wrap
Assembly Source File
|
1988-12-06
|
2KB
|
88 lines
; this file has some fast asmbly routines in it
; the routines use the C calling method for a small model
;
;
.286c ; 80286 AT code
DOSSEG ; use dos segments
.MODEL LARGE
.CODE
; _WR_BLOCK WILL WRITE ONE 512 BLOCK OF DATA EVERY TIME A DRQ IS THERE
; INPUT : [BP+4] POINTER TO START OF BUFFER
; OUTPUT: NONE
PUBLIC _WR_BLOCK
_WR_BLOCK PROC FAR
ENTER 2,0
PUSHA
PUSH DS
MOV BX,[BP+6] ; POINTER TO BUFFER offset
MOV AX,[BP+8] ;POINTER SEGMENT
MOV DS,AX
MOV DX,1F7H ;COMMAND REG
MOV AL,30H
OUT DX,AL ;SEND WRITE COMMAND
wrb_10: NOP ;DELAY
JMP SHORT $+2
NOP ;DELAY
JMP SHORT $+2
NOP ;DELAY
JMP SHORT $+2
NOP ;DELAY
JMP SHORT $+2
NOP ;DELAY
JMP SHORT $+2
NOP ;DELAY
JMP SHORT $+2
NOP ;DELAY
BUSY_LP:
IN AL,DX ;GET STATUS
JMP SHORT $+2
NOP
AND AL,80H ;MASK ALL BUT BUSY
JNZ BUSY_LP
IN AL,DX ;CHECK FOR DRQ
AND AL,8
JZ ALL_DONE ;SKIP, IF NO DRQ
MOV DX,01F0H ;DATA BUFFER PORT
MOV CX,256 ;1 SECTOR
CLD
MOV SI,BX ;SERVICE CONTROLLER BUFFER
REP OUTSW ;ELSE, WRITE COMMAND
MOV DX,1F7H ;POINT TO STATUS REG
JMP wrb_10
ALL_DONE:
IN AL,DX ;CHECK FOR ERROR
AND AL,05H ; CHECK FOR ERROR OR ECC
JNZ DISK_ERR ;JMP, IF ERROR
CLC
POP DS
POPA
LEAVE
RET
DISK_ERR:
STC
POP DS
POPA
LEAVE
RET
_WR_BLOCK ENDP
END