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