By now, surely everyone on here has succeeded to compile dosbox with MipsPro (I compiled dosbox 0.65 under Irix 6.5.29 with MipsPro 7.4.4m). However, I still can't mount any directory at all.
While above I was inclined to follow mare's suspicion that the problem has something to do with command line parsing, after some fiddling with printfs, I now believe the issue is in this part of the 'Execute' function from src/shell/shell_misc.cpp [mine is version 1.43]:
Code:
413 else
414 { /* only .bat .exe .com extensions maybe be executed by the shell */
415 if(strcasecmp(extension, ".com") !=0)
416 {
417 if(strcasecmp(extension, ".exe") !=0) return false;
418 }
419 /* Run the .exe or .com file from the shell */
420 /* Allocate some stack space for tables in physical memory */
421 reg_sp-=0x200;
422 //Add Parameter block
423 DOS_ParamBlock block(SegPhys(ss)+reg_sp);
424 block.Clear();
425 //Add a filename
426 RealPt file_name=RealMakeSeg(ss,reg_sp+0x20);
427 MEM_BlockWrite(Real2Phys(file_name),fullname,strlen(fullname)+1);
428 /* Fill the command line */
429 CommandTail cmd;
430 if (strlen(line)>126) line[126]=0;
431 cmd.count=strlen(line);
432 memcpy(cmd.buffer,line,strlen(line));
433 cmd.buffer[strlen(line)]=0xd;
434 /* Copy command line in stack block too */
435 MEM_BlockWrite(SegPhys(ss)+reg_sp+0x100,&cmd,128);
436 /* Parse FCB (first two parameters) and put them into the current DOS_PSP */
437 Bit8u add;
438 FCB_Parsename(dos.psp(),0x5C,0x00,cmd.buffer,&add);
439 FCB_Parsename(dos.psp(),0x6C,0x00,&cmd.buffer[add],&add);
440 block.exec.fcb1=RealMake(dos.psp(),0x5C);
441 block.exec.fcb2=RealMake(dos.psp(),0x6C);
442 /* Set the command line in the block and save it */
443 block.exec.cmdtail=RealMakeSeg(ss,reg_sp+0x100);
444 block.SaveData();
445 #if 0
446 /* Save CS:IP to some point where i can return them from */
447 Bit32u oldeip=reg_eip;
448 Bit16u oldcs=SegValue(cs);
449 RealPt newcsip=CALLBACK_RealPointer(call_shellstop);
450 SegSet16(cs,RealSeg(newcsip));
451 reg_ip=RealOff(newcsip);
452 #endif
453 /* Start up a dos execute interrupt */
454 reg_ax=0x4b00;
455 //Filename pointer
456 SegSet16(ds,SegValue(ss));
457 reg_dx=RealOff(file_name);
458 //Paramblock
459 SegSet16(es,SegValue(ss));
460 reg_bx=reg_sp;
461 SETFLAGBIT(IF,false);
462 CALLBACK_RunRealInt(0x21);
463 /* Restore CS:IP and the stack */
464 reg_sp+=0x200;
465 #if 0
466 reg_eip=oldeip;
467 SegSet16(cs,oldcs);
468 #endif
469 }
470 return true; //Executable started
471 }
472
Since joerg got dosbox to mount when compiled with gcc, I wonder what could be different there when compiled with MipsPro...