home *** CD-ROM | disk | FTP | other *** search
- /* This is file READ.S */
- /*
- ** Copyright (C) 1993 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
- **
- ** This file is distributed under the terms listed in the document
- ** "copying.dj", available from DJ Delorie at the address above.
- ** A copy of "copying.dj" should accompany this file; if not, a copy
- ** should be available from where this file was obtained. This file
- ** may not be distributed without a verbatim copy of "copying.dj".
- **
- ** This file is distributed WITHOUT ANY WARRANTY; without even the implied
- ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- */
-
- .text
- .globl _read
- _read:
- pushl %ebx
- pushl %esi
- pushl %edi
- movl 16(%esp),%ebx
- movl 20(%esp),%edx
- movl 24(%esp),%ecx
- cmpl $4096,%ecx
- jae old_way
-
- movl __go32_info_block+12,%esi
- cmpl $0,%esi
- je old_way
-
- movl %esi,%edx
- movb $0x3f,%ah
- int $0x21
- jb error
-
- movl 20(%esp),%edi
-
- pushw %ds
- pushl %eax
- movl __go32_info_block+12,%eax
- call dosmemsetup
- movl %eax,%esi
- movw %gs,%ax
- movw %ax,%ds
- popl %eax
-
- pushl %eax
- movl %eax,%ecx
- pushl %ecx
- shrl $2,%ecx
- rep
- movsl
- popl %ecx
- andl $3,%ecx
- rep
- movsb
- popl %eax
- popw %ds
-
- popl %edi
- popl %esi
- popl %ebx
- ret
-
-
- old_way:
- movb $0x3f,%ah
- int $0x21
- error:
- popl %edi
- popl %esi
- popl %ebx
- jb syscall_error
- ret
-