diff --git a/nwtests.c b/nwtests.c index 5175474..e8bbd40 100644 --- a/nwtests.c +++ b/nwtests.c @@ -426,6 +426,59 @@ static int tests_nwreq87(int argc, char *argv[]) } +static int tests_reqtype(void) +{ + union REGS r; + struct SREGS s; + + memset(&r, 0, sizeof(r)); + memset(&s, 0, sizeof(s)); + + fprintf(stdout, "TEST requester type probes\n\n"); + + /* + * DeveloperNet 1997 dvlmreq.c: + * AX=7A20h, BX=0, INT 2Fh + * if AX==0 then ES:BX is VLM entry and client type is VLM. + */ + r.x.ax = 0x7A20; + r.x.bx = 0; + int86x(0x2F, &r, &r, &s); + + fprintf(stdout, "INT 2F AX=7A20 -> AX=%04X BX=%04X ES=%04X\n", + r.x.ax, r.x.bx, s.es); + if (r.x.ax == 0) + fprintf(stdout, "VLM entry likely present at %04X:%04X\n", s.es, r.x.bx); + else + fprintf(stdout, "VLM entry not reported by INT 2F/7A20\n"); + + /* + * DeveloperNet 1997 dvlmreq.c: + * AH=DCh, CX=0, INT 21h + * if CX != 0 then NETX/Shell API is present. + */ + memset(&r, 0, sizeof(r)); + memset(&s, 0, sizeof(s)); + r.h.ah = 0xDC; + r.x.cx = 0; + int86x(0x21, &r, &r, &s); + + fprintf(stdout, "INT 21 AH=DC CX=0 -> AX=%04X BX=%04X CX=%04X DX=%04X ES=%04X\n", + r.x.ax, r.x.bx, r.x.cx, r.x.dx, s.es); + if (r.x.cx != 0) + fprintf(stdout, "NETX/Shell API likely present\n"); + else + fprintf(stdout, "NETX/Shell API not reported by AH=DC\n"); + + fprintf(stdout, "\nInterpretation like DeveloperNet dvlmreq.c:\n"); + if (r.x.cx != 0) + fprintf(stdout, " Shell bit present\n"); + fprintf(stdout, " If INT2F AX=7A20 returned AX=0000, VLM path should be used for NWCREQUEST.\n"); + + return(0); +} + + int func_tests(int argc, char *argv[], int mode) { if (argc >= 2) { @@ -435,6 +488,9 @@ int func_tests(int argc, char *argv[], int mode) if (tests_same_arg(argv[1], "E300") || tests_same_arg(argv[1], "NETCALLE300")) return tests_netcall_e300(); + if (tests_same_arg(argv[1], "REQTYPE")) + return tests_reqtype(); + if (tests_same_arg(argv[1], "NWREQ87")) return tests_nwreq87(argc, argv);