diff options
author | jlemon <jlemon@FreeBSD.org> | 1997-09-30 22:04:06 +0000 |
---|---|---|
committer | jlemon <jlemon@FreeBSD.org> | 1997-09-30 22:04:06 +0000 |
commit | d41bb2bc87f29068e4d03f319a4989911f2cd73c (patch) | |
tree | 648a56a6242ed5ba9d08e736053edb3c7c0a6194 /usr.bin/doscmd/redir.S | |
parent | 0f45f2fb69fa51d32a49bcda72f6de056fdf4b0a (diff) | |
download | FreeBSD-src-d41bb2bc87f29068e4d03f319a4989911f2cd73c.zip FreeBSD-src-d41bb2bc87f29068e4d03f319a4989911f2cd73c.tar.gz |
Add support for EMS emulation to doscmd. This requires changing the
interface for callbacks to doscmd from DOS, obsoleting the instbsdi
redirector. (redir.com replaces it)
A temporary hack is in place so the instbsdi program will (hopefully) work
in the short term.
Submitted by: Helmut F. Wirth <hfwirth@ping.at>
Diffstat (limited to 'usr.bin/doscmd/redir.S')
-rw-r--r-- | usr.bin/doscmd/redir.S | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/usr.bin/doscmd/redir.S b/usr.bin/doscmd/redir.S new file mode 100644 index 0000000..4cb4e2e --- /dev/null +++ b/usr.bin/doscmd/redir.S @@ -0,0 +1,122 @@ +! Copyright (c) 1997 Helmut Wirth <hfwirth@ping.at> +! All rights reserved. +! +! Redistribution and use in source and binary forms, with or without +! modification, are permitted provided that the following conditions +! are met: +! 1. Redistributions of source code must retain the above copyright +! notice immediately at the beginning of the file, witout modification, +! this list of conditions, and the following disclaimer. +! 2. Redistributions in binary form must reproduce the above copyright +! notice, this list of conditions and the following disclaimer in the +! documentation and/or other materials provided with the distribution. +! 3. The name of the author may not be used to endorse or promote products +! derived from this software without specific prior written permission. +! +! THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +! IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +! OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +! IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +! INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +! NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +! DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +! THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +! (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +! THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +! +! $Id$ + + +! +! This is the new redirector program, it replaces instbsdi.exe +! The program fetches some pointers from DOS and reports them back to +! the emulator via the emulator interrupt 0xff. It does not stay resident. + +use16 + +.text +.bss +.data +.align 0 + +! Emulator interrupt entry +EmulatorINT = 0xFF +! Emulator redirector function +EmulatorRED = 0x1 + +! DOS interrupt +DOSInt = 0x21 + +! DOS get list of lists call, returns pointer to system vars in ES:BX +DOSGetList = 0x52 + +! DOS get swappable area, returns DOS swappable area in DS:SI +DOSGetSwapD = 0x5D06 + +! DOS terminate program with return code +DOSExit = 0x4C + +! DOS print message +DOSMesg = 0x9 + +cr = 0xd +lf = 0xa +eom = '$' ! DOS end of string + + .org 0x100 + +.globl _main +_main: + + mov ah, #DOSGetList + int DOSInt + jc Fail + mov [_list], bx + mov ax, es + mov [_list+2], ax + push ds + mov ax, #DOSGetSwapD + int DOSInt + mov ax, ds + pop ds + jc Fail + mov [_swap], si + mov [_swap+2], ax + push ax + mov ah, #EmulatorRED + mov dx, [_list] + mov bx, [_list+2] + mov si, [_swap] + mov di, [_swap+2] + int EmulatorINT + xor al, al ! return 0 + jmp Exit +Fail: + mov ah, #DOSMesg + mov dx, #ErrorMessage + int DOSInt + mov al, #1 ! return 1 +Exit: + mov ah, #DOSExit + int DOSInt +! +! Should never get to this point +! + nop + nop + hlt + +! The two pointers are found using the DOS calls +! and passed to the redirector interface via int FF +! The two pointers are passed in BX:DX (list) and DI:SI (swap) + +.align 2 + +_list: .word 0 + .word 0 +_swap: .word 0 + .word 0 + +ErrorMessage: + .ascii "Error installing redirector interface" + .byte cr,lf,eom, 0 |