·汇编源码--BRK
·汇编源码--CLOCK
·汇编源码--BURNOUT
·汇编源码--DOSSYM
·汇编源码--circle
·汇编源码--DEV
·汇编源码--getspace
·汇编源码--CLEAR
·汇编源码--col
·汇编源码--gameport
;Absolute Disk Read: GETSEC ( uses BIOS interrupt 0x25 )
;
;Interfaces to Computer Innovations C-86 "c" compiler V1.32 (& later)
;See DOS 2.10 Technical Reference page 5-10, and Technical Reference
;page A-32. This code was written by Mike Sirmans (05-25-84).
;--------------------------------------------------------------------
; THIS ROUTINE IS POWERFUL. (AND AS SUCH, IS DANGEROUS IN THE WRONG
; HANDS). BE CAREFUL HOW YOU USE IT. I ASSUME NO RESPONSIBILITY.
;--------------------------------------------------------------------
;
;Synopsis:int getsec(drive,numsec,begsec,buffer)
;unsigned int drive;/* 0=A, 1=B, etc. */
;unsigned int numsec;/* Number of sectors to read */
;unsigned int begsec;/* Beginning logical sector */
;char *buffer;/* Transfer address */
;
;Function:The number of sectors specified are transferred
;betweenthe given drive and the transfer address.
;LOGICAL SECTOR NUMBERS are obtained by numbering
;each sector sequentially starting from track 0, head 0,
;sector 1 (logical sector 0) and continuing along the
;same head, then to the next head until the last sector
;on the last head of the track is counted. Thus,
;logical sector 1 is track 0, head 0, sector 2,
;logical sector 2 is track 0, head 0, sector 3, & so on.
;
;Returns:NULL if the operation is successful.
;otherwise, error codes are as follows:
;
;hex 80Attachment failed to respond.
;hex 40SEEK operation failed.
;hex 20Controller failure.
;hex 10 Bad CRC on diskette read.
;hex 08DMA overrun on operation.
;hex 04Requested sector not found.
;hex 03Write attempt on write-protected diskette.
;hex 02Address mark not found.
;hex FFUnspecified (error other than those above).
;
codesegmentbyte public;segment registers remain intact
assumecs:code;all other registers will be destroyed
publicgetsec
getsec: pushbp;save old frame pointer
movbp,sp;get new frame pointer
movax,4[bp];put drive number into AL
xorah,ah
movcx,6[bp];number of sectors to fetch
movdx,8[bp];logical record number of 1st sector
mov bx,10[bp];pointer to transfer address
int25h;BIOS call
jcerror;error has occurred if carry flag = 1
moval,00H;NULL to indicate sucessful completion
jmpdone
error:cmpal,00H;detect unspecified error code 00H
jnedone;...change to 0FFh if found to
moval,0FFH;...differentiate it from success code
done:xorah,ah;return AL only
popf;remove flags int 0x25 left on stack
popbp;restore original frame pointer
ret;all done
codeends
end
进入讨论组讨论。