Вызов программы с использованием MSDOS EXEC API (int21h с AX=4Bh)
Я пытаюсь использовать DOS API "EXEC" (int 21h с AH=4Bh) для загрузки программы. Я попробовал несколько вещей, но это не работает. Я получаю код результата AX=2, что означает "Файл не найден". Я думаю, что с блоком param что-то не так, но я не уверен, что именно. Есть ли у вас какие-либо предложения, как заставить код работать?
Вот что я пробовал до сих пор:
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)
' 3 = drive C:
emptyfcb$ = CHR$(3) + "???????????" + 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 ' TODO?
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$ = "\QB71\AYDOS1.EXE" + CH$(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
Примечание: я не использую SHELL
команда, потому что с помощью API EXEC я хочу вызвать файлы не-EXE на дальнейших шагах
Примечание 2: среда - DOSBox, и я использую QuickBasic 7.1 (с опцией /L)