delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2024/02/23/16:12:08

X-Authentication-Warning: delorie.com: mail set sender to djgpp-bounces using -f
X-Recipient: djgpp AT delorie DOT com
X-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1708722718; x=1709327518; darn=delorie.com;
h=to:subject:message-id:date:from:mime-version:from:to:cc:subject
:date:message-id:reply-to;
bh=N0ePeZxwA2fY6I+kH+nlUhbwag/dUUIAO5nViiFrD6w=;
b=LYkHiOCxg1AnSEUHGQw+OMW7GRczAREqxjKspScJw/BUIr/AOuAbStzVVmJi7AjI5h
+wGlewv3Mt0bqAEiBEhvsXYxXjeEMNEdjqeV9Az8HhSIppTj6+8xIpW9jamzANGb1j7q
rm3o95A+ItK7OsnCKQ2bIILN6FDmZ2oyszZlt9c5BTGygDTu9s2jfYrksSnm194cSWIN
0QiGCb7p5i7IdiZio8aijhp8PROsKYNbu7ozcPeZHT0xJwHx484Ix0BZkLkn+cNkHEkk
xA3KQKRzOOpk/7U/GPCgi++15vtJtZJJOdqhuAkjHWkUIeiF+bmfm2TdMGdgq6aImVD9
8kAg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1708722718; x=1709327518;
h=to:subject:message-id:date:from:mime-version:x-gm-message-state
:from:to:cc:subject:date:message-id:reply-to;
bh=N0ePeZxwA2fY6I+kH+nlUhbwag/dUUIAO5nViiFrD6w=;
b=DzHsaa23nV2KkTLKSExs807ds+yb6moXlhhAigYkpVScFpnIEG51OUeggZmDha2roQ
ig2nULHnbYL9Of9YW8hlnGUVnLuSccPHrv2bf4+dfnnzSrHxr/mLNeSRWXG4GRGdnO2W
KmjPIVjoMz3o+emdP+l543xEd9Ds3lW6Y6f1MHZOVIkpT2Xu4odiyu2FCgDR+nL1b4Sg
hMLfYUtJXX169NhxxGPxpD6juKwZdhd+rlqM2luxOw7XgNzAeGyoahpmoyuFU+w7FKis
gV4qhLSs7rzr7fLFa9UHLAx+GoXSAE3rRksAjJhT3pTDtTPyNkZHXnxHmk8CO0NDWVXv
WJNA==
X-Gm-Message-State: AOJu0YxA6R9dBiTU4t86ej0/Sx/xZmBqi9wmKF1m0Ky7gJslwrQzMxBS
469C4STExitwxzuq+hF7IArYWunK8yNK211zonsdfKkhn0Hf2O13Gh6+/7nMIHt9dHn3KXkw4Q2
552AuhEmWgIgIKtVGE9kjIq+TRPpdPMNMXKE=
X-Google-Smtp-Source: AGHT+IHn43kUtkVdmxw5LY5VwR1irOtEX4uGkhodEuHN7Ye+QInftLOTjXq1zB/tWxKDe4PhtWQZ1DaquczwIipDTec=
X-Received: by 2002:a5d:67c4:0:b0:33d:b7ca:6160 with SMTP id
n4-20020a5d67c4000000b0033db7ca6160mr101076wrw.35.1708722717012; Fri, 23 Feb
2024 13:11:57 -0800 (PST)
MIME-Version: 1.0
From: "Ozkan Sezer (sezeroz AT gmail DOT com) [via djgpp AT delorie DOT com]" <djgpp AT delorie DOT com>
Date: Sat, 24 Feb 2024 00:11:46 +0300
Message-ID: <CAA2C=vB8ZicddhV9vbcu9RELueGs8o5_=OQdy0gejtPzFaYeJw@mail.gmail.com>
Subject: checking int2d amis appstring with djgpp
To: djgpp <djgpp AT delorie DOT com>
Reply-To: djgpp AT delorie DOT com

Hi everyone:

Does the following DJGPP port of SBEMU detection look correct?
It is an adaptation from a WatcomC (32 bit flat) code in here:
https://github.com/wbcbz7/sndlib-watcom/blob/master/sndlib.cpp#L41-L71

(I'm fairly rusty in gcc inline asm and djgpp address mapping, etc,
thanks in advance.)

 int sndlib_sbemu_detect(void)
{
  __dpmi_raddr addr;
  uint32_t r_addr;
  char* appstring;
  int mx;

  /* check for INT2D vector == NULL */
  __dpmi_get_real_mode_interrupt_vector(0x2D, &addr);
  r_addr = ((uint32_t)addr.segment<<4) + (uint32_t)addr.offset16;
  if (!r_addr) return -1;

  /* scan all multiplexes of INT 2D */
  for (mx = 0; mx < 256; mx++)
  {
    __asm__ __volatile__ ("movb %0,%%ah"::"m"(mx));
    __asm__ __volatile__ (
      "xorb %al, %al\n"
      "int  $0x2d\n"
      "cmpb $0xFF, %al\n" /* is this a free multiplex? */
      "jz  _found\n"
      "xorw %dx, %dx\n" /* it is, return NULL pointer */
      "xorw %di, %di\n"
     "_found:\n");
    __asm__ __volatile__ ("movw %%dx,%0":"=m"(addr.segment));
    __asm__ __volatile__ ("movw %%di,%0":"=m"(addr.offset16));

    /* check for SBEMU application string */
    r_addr = ((uint32_t)addr.segment<<4) + (uint32_t)addr.offset16;
    if (!r_addr) continue;
    appstring = (char *)real2ptr(r_addr);
    if (memcmp(appstring + 8,"SBEMU",5) == 0)
      return mx;
  }

  return -1;
}


P.S.: real2ptr() in there actually returns
    (void *) (real += __djgpp_conventional_base)
after a successful __djgpp_nearptr_enable()

--
O.S.

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019