mirror of
https://github.com/ksherlock/mpw.git
synced 2024-11-22 00:32:44 +00:00
SANE - add FTINTX, FCSTR2DEC
This commit is contained in:
parent
2766493398
commit
f2dc249614
@ -885,6 +885,29 @@ using std::to_string;
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint16_t ftintx()
|
||||||
|
{
|
||||||
|
// truncate (round towards 0 regardless of rounding settings)
|
||||||
|
|
||||||
|
uint32_t address;
|
||||||
|
uint16_t op;
|
||||||
|
|
||||||
|
StackFrame<6>(address, op);
|
||||||
|
|
||||||
|
Log(" FTINTX(%08x)\n", address);
|
||||||
|
|
||||||
|
extended s = readnum<extended>(address);
|
||||||
|
|
||||||
|
if (ToolBox::Trace)
|
||||||
|
{
|
||||||
|
std::string tmp1 = to_string(s);
|
||||||
|
Log(" %s\n", tmp1.c_str());
|
||||||
|
}
|
||||||
|
s = std::trunc(s);
|
||||||
|
writenum<extended>(s, address);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
extern "C" void cpuSetFlagsAbs(UWO f);
|
extern "C" void cpuSetFlagsAbs(UWO f);
|
||||||
uint16_t fp68k(uint16_t trap)
|
uint16_t fp68k(uint16_t trap)
|
||||||
{
|
{
|
||||||
@ -977,7 +1000,7 @@ using std::to_string;
|
|||||||
return fdecimal<extended>("FDEC2X");
|
return fdecimal<extended>("FDEC2X");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 0x0016: return ftintx();
|
||||||
case 0x0017: return fprocentry();
|
case 0x0017: return fprocentry();
|
||||||
case 0x0019: return fprocexit();
|
case 0x0019: return fprocexit();
|
||||||
case 0x0003: return fgetenv();
|
case 0x0003: return fgetenv();
|
||||||
@ -1065,7 +1088,7 @@ using std::to_string;
|
|||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t fpstr2dec()
|
uint32_t fstr2dec(char type)
|
||||||
{
|
{
|
||||||
// void str2dec(const char *s,short *ix,decimal *d,short *vp);
|
// void str2dec(const char *s,short *ix,decimal *d,short *vp);
|
||||||
|
|
||||||
@ -1098,13 +1121,16 @@ struct decimal {
|
|||||||
|
|
||||||
index = memoryReadWord(indexPtr);
|
index = memoryReadWord(indexPtr);
|
||||||
|
|
||||||
std::string str = ToolBox::ReadPString(stringPtr, false);
|
std::string str;
|
||||||
Log(" FPSTR2DEC(%s, %04x, %08x, %08x)\n",
|
if (type == 'P') str = ToolBox::ReadPString(stringPtr, false);
|
||||||
str.c_str(), index, decimalPtr, validPtr);
|
if (type == 'C') str = ToolBox::ReadCString(stringPtr, false);
|
||||||
|
|
||||||
index--;
|
Log(" F%cSTR2DEC(%s, %04x, %08x, %08x)\n",
|
||||||
|
type, str.c_str(), index, decimalPtr, validPtr);
|
||||||
|
|
||||||
|
if (type == 'P') index--;
|
||||||
str2dec(str, index, d, valid);
|
str2dec(str, index, d, valid);
|
||||||
index++;
|
if (type == 'P') index++;
|
||||||
|
|
||||||
memoryWriteWord(index, indexPtr);
|
memoryWriteWord(index, indexPtr);
|
||||||
memoryWriteWord(valid, validPtr);
|
memoryWriteWord(valid, validPtr);
|
||||||
@ -1149,9 +1175,16 @@ struct decimal {
|
|||||||
|
|
||||||
case 0x02:
|
case 0x02:
|
||||||
// fpstr2dec
|
// fpstr2dec
|
||||||
return fpstr2dec();
|
return fstr2dec('P');
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
case 0x04:
|
||||||
|
// fcstr2dec
|
||||||
|
return fstr2dec('C');
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
fprintf(stderr, "decstr68k -- op %04x is not yet supported\n", op);
|
fprintf(stderr, "decstr68k -- op %04x is not yet supported\n", op);
|
||||||
exit(1);
|
exit(1);
|
||||||
|
Loading…
Reference in New Issue
Block a user