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=1708733351; x=1709338151; darn=delorie.com; h=content-transfer-encoding:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=0hviL7GQaYVV0xDA1p4jvpMN1VncbVTFht6bap3E4ng=; b=JrkW2VmGes9bcVcP8DpbOGf3cvIRcZ55VsX82b/pvwN+An/xsYBA7zH/Si2nHyRsOu EioWfVBv1rpIG94tthgHgwiJDNxc4hX1L8xaHVHZGcEwJYi9GRHtzY3uUhJ9Q8RNF+0b 7P0d+x6TvIuOZ7sW0ukF4LH4dVEWVneea6kS1ffxYJHy6mXJWSfZTqmMwpvEdfdyb8FO 5JR2j3XvYD5+DKteuSzVnN9KXPyrX/O12R5Gs0GYjinwyUjzRvm2uYQQchxCqkvMMqct rh1XV64XZqwVf6/AJwT1eDe9JR9J2q2r5Y97pkncM/64f8+2Gg4h351iHKwp+sj+ssim a01A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1708733351; x=1709338151; h=content-transfer-encoding:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=0hviL7GQaYVV0xDA1p4jvpMN1VncbVTFht6bap3E4ng=; b=hfvJlP3xWpdh/hMS3zM9Lja1lbRSmxqinOBL7B1xxiivJJJA0HqvezrcoThk/vVqwW sHTv1EUDKjvXfCCpyHvNznsifsg6X9HBkc/dX7Bgqih01lQkGotdH2WgVirKcFRjU6Nr 49i9gMW7AJouQAYwXAWsfRaWhZk27wo4RqlU6v9puDZIk5WPvbvAhwE6EJTc2SjCKE8D EKrn/Z01pJMlNcChp8v/iy3qxdk/5uqfpJcZZxkI11wIQbiO0vjoDC+U0YzhUvE8DPWi QMEoQs1DnBTX6KtsbP6/JTHS65tJ/T1LN3aLhlDpMcrSr1+9SppaAMUxgq1EWOXzALTU unkw== X-Gm-Message-State: AOJu0Yy6jYODQbXdlBaq1K0eIWQ1v60R5CphHrbKMdFau68Y91vXD1lw J6uOAzcE+atVimAsZ8kWlNHonP3fKLbG436D0lYzcdHVv9WMWTds1Jc2JOMgtJ5cYSm48Iwue0q De73ypUPY4fPxdrn3RA1qrbOg8dsYFcGugl8= X-Google-Smtp-Source: AGHT+IHuNds5YNoDjf+h6WepcviCWHVRBL4b9UEgROTHTQMDnGNxx1uxvwTk5UQVWU9lc8r8yIWMMwZbt0VzCmEkDzk= X-Received: by 2002:a05:600c:5592:b0:412:6de0:69a9 with SMTP id jp18-20020a05600c559200b004126de069a9mr769305wmb.39.1708733350954; Fri, 23 Feb 2024 16:09:10 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: "Ozkan Sezer (sezeroz AT gmail DOT com) [via djgpp AT delorie DOT com]" Date: Sat, 24 Feb 2024 03:08:59 +0300 Message-ID: Subject: Re: checking int2d amis appstring with djgpp To: djgpp AT delorie DOT com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by delorie.com id 41O09C1R003514 Reply-To: djgpp AT delorie DOT com On Sat, Feb 24, 2024 at 12:49 AM J.W. Jagersma (jwjagersma AT gmail DOT com) [via djgpp AT delorie DOT com] wrote: [...] > > __asm__ __volatile__ ("movw %%dx,%0":"=m"(addr.segment)); > > __asm__ __volatile__ ("movw %%di,%0":"=m"(addr.offset16)); > > This doesn't look right - you can't assume gcc preserves registers > between asm blocks. OK, should have been like this then, yes? __asm__ __volatile__ ( "movb %2, %%ah\n" "xorb %%al, %%al\n" "int $0x2D\n" "cmpb $0xFF,%%al\n" /* is this a free multiplex? */ "jz 1f\n" "xorw %%dx, %%dx\n" /* it is, return NULL pointer */ "xorw %%di, %%di\n" "1:\n" "movw %%dx, %0\n" "movw %%di, %1\n" : "=m"(addr.segment), "=m"(addr.offset16) : "m"(mx) ); > But this is a real-mode interrupt, no? So you would have to do it via > __dpmi_int() here anyway, no asm involved. Is the following correct ?? int sndlib_sbemu_detect(void) { __dpmi_raddr addr; uint32_t r_addr; __dpmi_regs regs; 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++) { memset(®s, 0, sizeof(regs)); regs.h.ah = mx; __dpmi_int(0x2D, ®s); if (regs.h.al != 0xFF) continue; /* check for SBEMU application string */ r_addr = ((uint32_t)regs.x.dx<<4) + (uint32_t)regs.x.di; if (!r_addr) continue; appstring = (char *)real2ptr(r_addr); if (memcmp(appstring + 8,"SBEMU",5) == 0) return mx; } return -1; } -- O.S.