19f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project;
29f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project; jmemdosa.asm
39f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project;
49f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project; Copyright (C) 1992, Thomas G. Lane.
59f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project; This file is part of the Independent JPEG Group's software.
69f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project; For conditions of distribution and use, see the accompanying README file.
79f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project;
89f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project; This file contains low-level interface routines to support the MS-DOS
99f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project; backing store manager (jmemdos.c).  Routines are provided to access disk
109f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project; files through direct DOS calls, and to access XMS and EMS drivers.
119f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project;
129f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project; This file should assemble with Microsoft's MASM or any compatible
139f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project; assembler (including Borland's Turbo Assembler).  If you haven't got
149f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project; a compatible assembler, better fall back to jmemansi.c or jmemname.c.
159f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project;
169f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project; To minimize dependence on the C compiler's register usage conventions,
179f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project; we save and restore all 8086 registers, even though most compilers only
189f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project; require SI,DI,DS to be preserved.  Also, we use only 16-bit-wide return
199f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project; values, which everybody returns in AX.
209f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project;
219f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project; Based on code contributed by Ge' Weijers.
229f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project;
239f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
249f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectJMEMDOSA_TXT	segment byte public 'CODE'
259f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
269f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		assume	cs:JMEMDOSA_TXT
279f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
289f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		public	_jdos_open
299f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		public	_jdos_close
309f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		public	_jdos_seek
319f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		public	_jdos_read
329f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		public	_jdos_write
339f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		public	_jxms_getdriver
349f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		public	_jxms_calldriver
359f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		public	_jems_available
369f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		public	_jems_calldriver
379f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
389f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project;
399f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project; short far jdos_open (short far * handle, char far * filename)
409f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project;
419f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project; Create and open a temporary file
429f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project;
439f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project_jdos_open	proc	far
449f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	bp			; linkage
459f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov 	bp,sp
469f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	si			; save all registers for safety
479f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	di
489f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	bx
499f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	cx
509f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	dx
519f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	es
529f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	ds
539f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov	cx,0			; normal file attributes
549f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		lds	dx,dword ptr [bp+10]	; get filename pointer
559f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov	ah,3ch			; create file
569f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		int	21h
579f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		jc	open_err		; if failed, return error code
589f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		lds	bx,dword ptr [bp+6]	; get handle pointer
599f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov	word ptr [bx],ax	; save the handle
609f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		xor	ax,ax			; return zero for OK
619f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectopen_err:	pop	ds			; restore registers and exit
629f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	es
639f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	dx
649f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	cx
659f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	bx
669f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	di
679f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	si
689f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop 	bp
699f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		ret
709f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project_jdos_open	endp
719f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
729f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
739f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project;
749f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project; short far jdos_close (short handle)
759f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project;
769f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project; Close the file handle
779f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project;
789f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project_jdos_close	proc	far
799f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	bp			; linkage
809f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov 	bp,sp
819f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	si			; save all registers for safety
829f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	di
839f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	bx
849f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	cx
859f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	dx
869f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	es
879f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	ds
889f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov	bx,word ptr [bp+6]	; file handle
899f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov	ah,3eh			; close file
909f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		int	21h
919f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		jc	close_err		; if failed, return error code
929f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		xor	ax,ax			; return zero for OK
939f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectclose_err:	pop	ds			; restore registers and exit
949f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	es
959f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	dx
969f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	cx
979f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	bx
989f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	di
999f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	si
1009f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop 	bp
1019f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		ret
1029f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project_jdos_close	endp
1039f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1049f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1059f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project;
1069f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project; short far jdos_seek (short handle, long offset)
1079f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project;
1089f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project; Set file position
1099f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project;
1109f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project_jdos_seek	proc	far
1119f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	bp			; linkage
1129f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov 	bp,sp
1139f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	si			; save all registers for safety
1149f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	di
1159f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	bx
1169f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	cx
1179f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	dx
1189f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	es
1199f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	ds
1209f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov	bx,word ptr [bp+6]	; file handle
1219f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov	dx,word ptr [bp+8]	; LS offset
1229f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov	cx,word ptr [bp+10]	; MS offset
1239f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov	ax,4200h		; absolute seek
1249f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		int	21h
1259f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		jc	seek_err		; if failed, return error code
1269f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		xor	ax,ax			; return zero for OK
1279f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectseek_err:	pop	ds			; restore registers and exit
1289f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	es
1299f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	dx
1309f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	cx
1319f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	bx
1329f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	di
1339f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	si
1349f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop 	bp
1359f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		ret
1369f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project_jdos_seek	endp
1379f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1389f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1399f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project;
1409f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project; short far jdos_read (short handle, void far * buffer, unsigned short count)
1419f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project;
1429f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project; Read from file
1439f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project;
1449f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project_jdos_read	proc	far
1459f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	bp			; linkage
1469f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov 	bp,sp
1479f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	si			; save all registers for safety
1489f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	di
1499f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	bx
1509f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	cx
1519f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	dx
1529f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	es
1539f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	ds
1549f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov	bx,word ptr [bp+6]	; file handle
1559f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		lds	dx,dword ptr [bp+8]	; buffer address
1569f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov	cx,word ptr [bp+12]	; number of bytes
1579f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov	ah,3fh			; read file
1589f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		int	21h
1599f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		jc	read_err		; if failed, return error code
1609f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		cmp	ax,word ptr [bp+12]	; make sure all bytes were read
1619f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		je	read_ok
1629f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov	ax,1			; else return 1 for not OK
1639f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		jmp	short read_err
1649f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectread_ok:	xor	ax,ax			; return zero for OK
1659f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectread_err:	pop	ds			; restore registers and exit
1669f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	es
1679f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	dx
1689f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	cx
1699f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	bx
1709f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	di
1719f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	si
1729f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop 	bp
1739f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		ret
1749f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project_jdos_read	endp
1759f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1769f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
1779f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project;
1789f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project; short far jdos_write (short handle, void far * buffer, unsigned short count)
1799f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project;
1809f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project; Write to file
1819f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project;
1829f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project_jdos_write	proc	far
1839f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	bp			; linkage
1849f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov 	bp,sp
1859f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	si			; save all registers for safety
1869f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	di
1879f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	bx
1889f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	cx
1899f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	dx
1909f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	es
1919f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	ds
1929f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov	bx,word ptr [bp+6]	; file handle
1939f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		lds	dx,dword ptr [bp+8]	; buffer address
1949f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov	cx,word ptr [bp+12]	; number of bytes
1959f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov	ah,40h			; write file
1969f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		int	21h
1979f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		jc	write_err		; if failed, return error code
1989f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		cmp	ax,word ptr [bp+12]	; make sure all bytes written
1999f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		je	write_ok
2009f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov	ax,1			; else return 1 for not OK
2019f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		jmp	short write_err
2029f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectwrite_ok:	xor	ax,ax			; return zero for OK
2039f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectwrite_err:	pop	ds			; restore registers and exit
2049f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	es
2059f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	dx
2069f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	cx
2079f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	bx
2089f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	di
2099f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	si
2109f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop 	bp
2119f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		ret
2129f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project_jdos_write	endp
2139f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2149f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2159f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project;
2169f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project; void far jxms_getdriver (XMSDRIVER far *)
2179f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project;
2189f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project; Get the address of the XMS driver, or NULL if not available
2199f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project;
2209f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project_jxms_getdriver	proc	far
2219f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	bp			; linkage
2229f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov 	bp,sp
2239f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	si			; save all registers for safety
2249f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	di
2259f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	bx
2269f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	cx
2279f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	dx
2289f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	es
2299f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	ds
2309f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov 	ax,4300h		; call multiplex interrupt with
2319f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		int	2fh			; a magic cookie, hex 4300
2329f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		cmp 	al,80h			; AL should contain hex 80
2339f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		je	xmsavail
2349f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		xor 	dx,dx			; no XMS driver available
2359f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		xor 	ax,ax			; return a nil pointer
2369f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		jmp	short xmsavail_done
2379f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectxmsavail:	mov 	ax,4310h		; fetch driver address with
2389f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		int	2fh			; another magic cookie
2399f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov 	dx,es			; copy address to dx:ax
2409f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov 	ax,bx
2419f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectxmsavail_done:	les 	bx,dword ptr [bp+6]	; get pointer to return value
2429f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov	word ptr es:[bx],ax
2439f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov	word ptr es:[bx+2],dx
2449f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	ds			; restore registers and exit
2459f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	es
2469f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	dx
2479f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	cx
2489f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	bx
2499f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	di
2509f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	si
2519f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	bp
2529f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		ret
2539f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project_jxms_getdriver	endp
2549f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2559f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2569f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project;
2579f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project; void far jxms_calldriver (XMSDRIVER, XMScontext far *)
2589f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project;
2599f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project; The XMScontext structure contains values for the AX,DX,BX,SI,DS registers.
2609f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project; These are loaded, the XMS call is performed, and the new values of the
2619f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project; AX,DX,BX registers are written back to the context structure.
2629f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project;
2639f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project_jxms_calldriver 	proc	far
2649f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	bp			; linkage
2659f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov 	bp,sp
2669f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	si			; save all registers for safety
2679f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	di
2689f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	bx
2699f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	cx
2709f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	dx
2719f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	es
2729f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	ds
2739f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		les 	bx,dword ptr [bp+10]	; get XMScontext pointer
2749f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov 	ax,word ptr es:[bx]	; load registers
2759f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov 	dx,word ptr es:[bx+2]
2769f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov 	si,word ptr es:[bx+6]
2779f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov 	ds,word ptr es:[bx+8]
2789f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov 	bx,word ptr es:[bx+4]
2799f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		call	dword ptr [bp+6]	; call the driver
2809f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov	cx,bx			; save returned BX for a sec
2819f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		les 	bx,dword ptr [bp+10]	; get XMScontext pointer
2829f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov 	word ptr es:[bx],ax	; put back ax,dx,bx
2839f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov 	word ptr es:[bx+2],dx
2849f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov 	word ptr es:[bx+4],cx
2859f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	ds			; restore registers and exit
2869f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	es
2879f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	dx
2889f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	cx
2899f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	bx
2909f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	di
2919f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	si
2929f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop 	bp
2939f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		ret
2949f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project_jxms_calldriver 	endp
2959f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2969f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
2979f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project;
2989f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project; short far jems_available (void)
2999f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project;
3009f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project; Have we got an EMS driver? (this comes straight from the EMS 4.0 specs)
3019f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project;
3029f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project_jems_available	proc	far
3039f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	si			; save all registers for safety
3049f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	di
3059f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	bx
3069f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	cx
3079f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	dx
3089f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	es
3099f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	ds
3109f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov	ax,3567h		; get interrupt vector 67h
3119f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		int	21h
3129f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	cs
3139f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	ds
3149f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov	di,000ah		; check offs 10 in returned seg
3159f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		lea	si,ASCII_device_name	; against literal string
3169f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov	cx,8
3179f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		cld
3189f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		repe cmpsb
3199f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		jne	no_ems
3209f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov	ax,1			; match, it's there
3219f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		jmp	short avail_done
3229f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectno_ems:		xor	ax,ax			; it's not there
3239f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectavail_done:	pop	ds			; restore registers and exit
3249f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	es
3259f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	dx
3269f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	cx
3279f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	bx
3289f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	di
3299f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	si
3309f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		ret
3319f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
3329f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectASCII_device_name	db	"EMMXXXX0"
3339f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
3349f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project_jems_available	endp
3359f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
3369f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
3379f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project;
3389f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project; void far jems_calldriver (EMScontext far *)
3399f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project;
3409f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project; The EMScontext structure contains values for the AX,DX,BX,SI,DS registers.
3419f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project; These are loaded, the EMS trap is performed, and the new values of the
3429f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project; AX,DX,BX registers are written back to the context structure.
3439f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project;
3449f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project_jems_calldriver	proc far
3459f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	bp			; linkage
3469f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov 	bp,sp
3479f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	si			; save all registers for safety
3489f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	di
3499f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	bx
3509f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	cx
3519f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	dx
3529f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	es
3539f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		push	ds
3549f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		les 	bx,dword ptr [bp+6]	; get EMScontext pointer
3559f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov 	ax,word ptr es:[bx]	; load registers
3569f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov 	dx,word ptr es:[bx+2]
3579f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov 	si,word ptr es:[bx+6]
3589f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov 	ds,word ptr es:[bx+8]
3599f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov 	bx,word ptr es:[bx+4]
3609f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		int	67h			; call the EMS driver
3619f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov	cx,bx			; save returned BX for a sec
3629f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		les 	bx,dword ptr [bp+6]	; get EMScontext pointer
3639f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov 	word ptr es:[bx],ax	; put back ax,dx,bx
3649f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov 	word ptr es:[bx+2],dx
3659f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		mov 	word ptr es:[bx+4],cx
3669f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	ds			; restore registers and exit
3679f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	es
3689f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	dx
3699f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	cx
3709f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	bx
3719f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	di
3729f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop	si
3739f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		pop 	bp
3749f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		ret
3759f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project_jems_calldriver	endp
3769f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
3779f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectJMEMDOSA_TXT	ends
3789f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
3799f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		end
380