Change how 16-bit CPU registers are accessed in DOS.

This commit is contained in:
2021-04-06 04:14:29 +01:00
parent 81b0db33ca
commit d7894f526a
2 changed files with 13 additions and 13 deletions

View File

@@ -64,26 +64,26 @@ unsigned int _dos_getdiskfree_ex(unsigned int drive, struct diskfree_ex_t* disks
drivePath[2] = '\\'; drivePath[2] = '\\';
drivePath[3] = 0; drivePath[3] = 0;
regs.w.ax = 0x7303; regs.x.ax = 0x7303;
sregs.ds = FP_SEG(drivePath); sregs.ds = FP_SEG(drivePath);
regs.w.dx = FP_OFF(drivePath); regs.x.dx = FP_OFF(drivePath);
sregs.es = FP_SEG(copy); sregs.es = FP_SEG(copy);
regs.w.di = FP_OFF(copy); regs.x.di = FP_OFF(copy);
regs.w.cx = sizeof(struct diskfree_ex_t); regs.x.cx = sizeof(struct diskfree_ex_t);
int86x(0x21, &regs, &regs, &sregs); int86x(0x21, &regs, &regs, &sregs);
if(regs.h.al == 0 && !regs.w.cflag) if(regs.h.al == 0 && !regs.x.cflag)
{ {
free(copy); free(copy);
errno = ENOSYS; errno = ENOSYS;
return -1; return -1;
} }
else if(regs.w.cflag) else if(regs.x.cflag)
{ {
free(copy); free(copy);
errno = EINVAL; errno = EINVAL;
_doserrno = regs.w.ax; _doserrno = regs.x.ax;
return -1; return -1;
} }
@@ -91,7 +91,7 @@ unsigned int _dos_getdiskfree_ex(unsigned int drive, struct diskfree_ex_t* disks
free(copy); free(copy);
errno = 0; errno = 0;
_doserrno = regs.w.ax; _doserrno = regs.x.ax;
return 0; return 0;
#elif defined(__DJGPP__) #elif defined(__DJGPP__)

View File

@@ -84,12 +84,12 @@ void Timestamps(const char* path)
wRc = _dos_write(handle, message, strlen(message), &actionTaken); wRc = _dos_write(handle, message, strlen(message), &actionTaken);
memset(&regs, 0, sizeof(regs)); memset(&regs, 0, sizeof(regs));
regs.w.bx = handle; regs.x.bx = handle;
regs.w.cx = dos_times[i].time; regs.x.cx = dos_times[i].time;
regs.w.dx = dos_times[i].date; regs.x.dx = dos_times[i].date;
regs.w.ax = dos_times[i].function; regs.x.ax = dos_times[i].function;
int86(0x21, &regs, &regs); int86(0x21, &regs, &regs);
tRc = regs.w.ax; tRc = regs.x.ax;
cRc = _dos_close(handle); cRc = _dos_close(handle);
} }