plat/msdos86: make getpid() use European MS-DOS's getpid syscall

if it exists
This commit is contained in:
tkchia 2022-06-24 17:00:57 +00:00
parent 180e400cf2
commit 571fce1165

View file

@ -3,6 +3,18 @@
! $State$ ! $State$
! $Revision$ ! $Revision$
! Copyright (c) 2021--2022 TK Chia
!
! The authors hereby grant permission to use, copy, modify, distribute,
! and license this software and its documentation for any purpose, provided
! that existing copyright notices are retained in all copies and that this
! notice is included verbatim in any distributions. No written agreement,
! license, or royalty fee is required for any of the authorized uses.
! Modifications to this software may be copyrighted by their authors
! and need not follow the licensing terms described here, provided that
! the new terms are clearly indicated on the first page of each file where
! they apply.
! Declare segments (the order is important). ! Declare segments (the order is important).
.sect .text .sect .text
@ -13,15 +25,21 @@
.sect .text .sect .text
! Get the current process identifier. For MS-DOS, use the Program Segment ! Get the current process identifier. For MS-DOS, use the Program Segment
! Prefix (PSP) segment as the PID. ! Prefix (PSP) segment as the PID, unless the system supports an actual
! `getpid' syscall, e.g. European MS-DOS 4.0.
! !
! (Note that pid_t is a 32-bit type. This is to allow for PSP addresses ! (Note that pid_t is a 32-bit type. This is to allow for PSP segments and
! above 0x7FFF:0.) ! MS-DOS PIDs above 0x7FFF.)
.define _getpid .define _getpid
_getpid: _getpid:
movb ah, 0x87
stc
int 0x21
jnc .eur_dos
movb ah, 0x51 movb ah, 0x51
int 0x21 int 0x21
xchg bx, ax xchg bx, ax
.eur_dos:
xor dx, dx xor dx, dx
ret ret