Calling a program using the MSDOS EXEC API (int21h with AX=4Bh)

156 Views Asked by At

I am trying to use the DOS API "EXEC" (int 21h with AH=4Bh) to load a program. I tried several things, but it doesn't work. I am getting the result code AX=2 which means "File not found". I think there is something not correct with the param block, but I am not sure what. Do you have any suggestions how to make the code work?

Here is what I have tried so far:

CLS

DIM Array(0 TO 127)  AS INTEGER
DEF SEG = VARSEG(Array(0))

TYPE paramblk
        segenv AS INTEGER
        cmdline AS INTEGER
        cseg AS INTEGER
        fcb1 AS INTEGER
        f1seg AS INTEGER
        fcb2 AS INTEGER
        f2seg AS INTEGER
END TYPE

TYPE RegTypeX
        ax AS INTEGER
        bx AS INTEGER
        cx AS INTEGER
        dx AS INTEGER
        bp AS INTEGER
        si AS INTEGER
        di AS INTEGER
        flags AS INTEGER
        ds AS INTEGER
        es AS INTEGER
END TYPE

DIM regs AS RegTypeX
DIM p AS paramblk

cmdline$ = CHR$(0) + "" + CHR$(&HD)
emptyfcb$ = CHR$(0) + "???????????" + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) +  _
CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0)

p.segenv = 0 ' 0 = copy environment of parent
p.cmdline = SADD(cmdline$)
p.cseg = SSEG(cmdline$)
p.fcb1 = SADD(emptyfcb$)
p.f1seg = SSEG(emptyfcb$)
p.fcb2 = SADD(emptyfcb$)
p.f2seg = SSEG(emptyfcb$)

REM I tried both of these
CHNAME$ = "AYDOS1.EXE" + CHR$(0)
REM chname$ = "C:\QB71\AYDOS1.EXE" + CHR$(0)

regs.ax = &H4B00
regs.ds = SSEG(CHNAME$)
regs.dx = SADD(CHNAME$)
regs.es = VARSEG(p)
regs.bx = VARPTR(p)
CALL interrupt(&H21, regs, regs)

PRINT "AX = ", regs.ax  ' I am receiving AX=2 (File not found) as result

Note: I am not using the SHELL command, because using the EXEC API, I want to call non-EXE files in the further steps

Note 2: The environment is DOSBox and I am using QuickBasic 7.1 (with option /L)

0

There are 0 best solutions below