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]" Date: Sat, 24 Feb 2024 00:11:46 +0300 Message-ID: Subject: checking int2d amis appstring with djgpp To: djgpp Content-Type: text/plain; charset="UTF-8" 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.