33#include " ../../common/utils.hpp"
44#include " ../../OS9/SystemCalls.hpp"
55
6- // TODO: use std::format.
6+ #include < format>
7+
78// TODO: make special formatters for fun and learning?
89
910std::string SCC68070::exceptionVectorToString (ExceptionVector vector)
@@ -63,7 +64,7 @@ std::string SCC68070::exceptionVectorToString(ExceptionVector vector)
6364
6465std::string SCC68070::DisassembleUnknownInstruction (const uint32_t ) const
6566{
66- return " Unknown instruction 0x" + toHex ( currentOpcode);
67+ return std::format ( " Unknown instruction 0x{:X} " , currentOpcode);
6768}
6869
6970std::string SCC68070::DisassembleABCD (const uint32_t ) const
@@ -219,13 +220,13 @@ std::string SCC68070::DisassembleANDI(const uint32_t pc) const
219220std::string SCC68070::DisassembleANDICCR (const uint32_t pc) const
220221{
221222 const uint8_t data = m_cdi.PeekWord (pc+2 ) & 0x1F ;
222- return " ANDI #0x" + toHex (data) + " , CCR" ;
223+ return std::format ( " ANDI #0x{:04X} , CCR" , data) ;
223224}
224225
225226std::string SCC68070::DisassembleANDISR (const uint32_t pc) const
226227{
227228 const uint16_t data = m_cdi.PeekWord (pc+2 );
228- return " ANDI #0x" + toHex (data) + " , SR" ;
229+ return std::format ( " ANDI #0x{:04X} , SR" , data) ;
229230}
230231
231232std::string SCC68070::DisassembleASm (const uint32_t pc) const
@@ -317,7 +318,7 @@ std::string SCC68070::DisassembleBRA(const uint32_t pc) const
317318 if (disp == 0 )
318319 disp = m_cdi.PeekWord (pc+2 );
319320
320- return " BRA " + toHex ( pc + 2 + disp);
321+ return std::format ( " BRA {:X} " , pc + 2 + disp);
321322}
322323
323324std::string SCC68070::DisassembleBSET (const uint32_t pc) const
@@ -347,7 +348,7 @@ std::string SCC68070::DisassembleBSR(const uint32_t pc) const
347348 if (disp == 0 )
348349 disp = m_cdi.PeekWord (pc+2 );
349350
350- return " BSR " + toHex ( pc + 2 + disp);
351+ return std::format ( " BSR {:X} " , pc + 2 + disp);
351352}
352353
353354std::string SCC68070::DisassembleBTST (const uint32_t pc) const
@@ -538,13 +539,13 @@ std::string SCC68070::DisassembleEORI(const uint32_t pc) const
538539std::string SCC68070::DisassembleEORICCR (const uint32_t pc) const
539540{
540541 const uint8_t data = m_cdi.PeekWord (pc+2 ) & 0x1F ;
541- return " EORI #0x" + toHex (data) + " , CCR" ;
542+ return std::format ( " EORI #0x{:04X} , CCR" , data) ;
542543}
543544
544545std::string SCC68070::DisassembleEORISR (const uint32_t pc) const
545546{
546547 const uint8_t data = m_cdi.PeekWord (pc+2 );
547- return " EORI #0x" + toHex (data) + " , SR" ;
548+ return std::format ( " EORI #0x{:04X} , SR" , data) ;
548549}
549550
550551std::string SCC68070::DisassembleEXG (const uint32_t ) const
@@ -553,31 +554,28 @@ std::string SCC68070::DisassembleEXG(const uint32_t) const
553554 const uint8_t mode = (currentOpcode & 0x00F8 ) >> 3 ;
554555 const uint8_t Ry = (currentOpcode & 0x0007 );
555556
556- std::string left, right;
557557 if (mode == 0x08 )
558558 {
559- left = " D" + std::to_string (Rx);
560- right = " , D" + std::to_string (Ry);
559+ return std::format (" EXG D{}, D{}" , Rx, Ry);
561560 }
562561 else if (mode == 0x09 )
563562 {
564- left = " A" + std::to_string (Rx);
565- right = " , A" + std::to_string (Ry);
563+ return std::format (" EXG A{}, A{}" , Rx, Ry);
566564 }
567565 else
568566 {
569- left = " D" + std::to_string (Rx);
570- right = " , A" + std::to_string (Ry);
567+ return std::format (" EXG D{}, A{}" , Rx, Ry);
571568 }
572-
573- return " EXG " + left + right;
574569}
575570
576571std::string SCC68070::DisassembleEXT (const uint32_t ) const
577572{
578573 const uint8_t opmode = (currentOpcode & 0x01C0 ) >> 6 ;
579574 const uint8_t reg = (currentOpcode & 0x0007 );
580- return std::string (" EXT." ) + (opmode == 2 ? " W D" : " L D" ) + std::to_string (reg);
575+ if (opmode == 2 )
576+ return std::format (" EXT.W D{}" , reg);
577+ else
578+ return std::format (" EXT.L D{}" , reg);
581579}
582580
583581std::string SCC68070::DisassembleILLEGAL (const uint32_t ) const
@@ -611,7 +609,7 @@ std::string SCC68070::DisassembleLINK(const uint32_t pc) const
611609{
612610 const uint8_t reg = (currentOpcode & 0x0007 );
613611 const int16_t disp = m_cdi.PeekWord (pc+2 );
614- return " LINK A " + std::to_string (reg) + " , #" + std::to_string ( disp);
612+ return std::format ( " LINK A{} , #{} " , reg, disp);
615613}
616614
617615std::string SCC68070::DisassembleLSm (const uint32_t pc) const
@@ -708,7 +706,10 @@ std::string SCC68070::DisassembleMOVEUSP(const uint32_t) const
708706{
709707 const uint8_t dr = (currentOpcode & 0x0008 ) >> 3 ;
710708 const uint8_t reg = (currentOpcode & 0x0007 );
711- return std::string (" MOVE " ) + (dr ? " USP, A" + std::to_string (reg) : " A" + std::to_string (reg) + " , USP" );
709+ if (dr)
710+ return std::format (" MOVE USP, A{}" , reg);
711+ else
712+ return std::format (" MOVE A{}, USP" , reg);
712713}
713714
714715std::string SCC68070::DisassembleMOVEM (const uint32_t pc) const
@@ -732,32 +733,29 @@ std::string SCC68070::DisassembleMOVEP(const uint32_t pc) const
732733 const uint8_t addrreg = (currentOpcode & 0x0007 );
733734 const int16_t disp = m_cdi.PeekWord (pc+2 );
734735
735- std::string operands;
736736 if (opmode == 4 )
737737 {
738- operands = " .W ( " + std::to_string (disp) + " , A" + std::to_string (addrreg) + " ) , D" + std::to_string ( datareg);
738+ return std::format ( " MOVEP.W ({} , A{}) , D{} " , disp, addrreg, datareg);
739739 }
740740 else if (opmode == 5 )
741741 {
742- operands = " .L ( " + std::to_string (disp) + " , A" + std::to_string (addrreg) + " ) , D" + std::to_string ( datareg);
742+ return std::format ( " MOVEP.L ({} , A{}) , D{} " , disp, addrreg, datareg);
743743 }
744744 else if (opmode == 6 )
745745 {
746- operands = " .W D" + std::to_string (datareg) + " , ( " + std::to_string ( disp) + " , A " + std::to_string ( addrreg) + " ) " ;
746+ return std::format ( " MOVEP .W D{}, ({}, A{}) " , datareg, disp, addrreg);
747747 }
748748 else
749749 {
750- operands = " .L D" + std::to_string (datareg) + " , ( " + std::to_string ( disp) + " , A " + std::to_string ( addrreg) + " ) " ;
750+ return std::format ( " MOVEP .L D{}, ({}, A{}) " , datareg, disp, addrreg);
751751 }
752-
753- return " MOVEP" + operands;
754752}
755753
756754std::string SCC68070::DisassembleMOVEQ (const uint32_t ) const
757755{
758756 const uint8_t reg = (currentOpcode & 0x0E00 ) >> 9 ;
759757 const int8_t data = (currentOpcode & 0x00FF );
760- return " MOVEQ # " + std::to_string (data) + " , D" + std::to_string ( reg);
758+ return std::format ( " MOVEQ #{} , D{} " , data, reg);
761759}
762760
763761std::string SCC68070::DisassembleMULS (const uint32_t pc) const
@@ -884,13 +882,13 @@ std::string SCC68070::DisassembleORI(const uint32_t pc) const
884882std::string SCC68070::DisassembleORICCR (const uint32_t pc) const
885883{
886884 const uint8_t data = m_cdi.PeekWord (pc+2 ) & 0x1F ;
887- return " ORI #0x" + toHex (data) + " , CCR" ;
885+ return std::format ( " ORI #0x{:04X} , CCR" , data) ;
888886}
889887
890888std::string SCC68070::DisassembleORISR (const uint32_t pc) const
891889{
892890 const uint16_t data = m_cdi.PeekWord (pc+2 );
893- return " ORI #0x" + toHex (data) + " , SR" ;
891+ return std::format ( " ORI #0x{:04X} , SR" , data) ;
894892}
895893
896894std::string SCC68070::DisassemblePEA (const uint32_t pc) const
@@ -927,9 +925,9 @@ std::string SCC68070::DisassembleROr(const uint32_t) const
927925
928926 std::string leftOperand;
929927 if (ir)
930- leftOperand = " D " + std::to_string ( count);
928+ leftOperand = std::format ( " D{} " , count);
931929 else
932- leftOperand = " # " + std::to_string ( count);
930+ leftOperand = std::format ( " #{} " , count);
933931
934932 if (dr)
935933 return std::string (" ROL" ) + (size == 0 ? " .B " : size == 1 ? " .W " : " .L " ) + leftOperand + " , D" + std::to_string (reg);
@@ -959,9 +957,9 @@ std::string SCC68070::DisassembleROXr(const uint32_t) const
959957
960958 std::string leftOperand;
961959 if (ir)
962- leftOperand = " D " + std::to_string ( count);
960+ leftOperand = std::format ( " D{} " , count);
963961 else
964- leftOperand = " # " + std::to_string ( count);
962+ leftOperand = std::format ( " #{} " , count);
965963
966964 if (dr)
967965 return std::string (" ROXL" ) + (size == 0 ? " .B " : size == 1 ? " .W " : " .L " ) + leftOperand + " , D" + std::to_string (reg);
@@ -1004,7 +1002,7 @@ std::string SCC68070::DisassembleScc(const uint32_t pc) const
10041002std::string SCC68070::DisassembleSTOP (const uint32_t pc) const
10051003{
10061004 const uint16_t data = m_cdi.PeekWord (pc+2 );
1007- return " STOP #0x" + toHex ( data);
1005+ return std::format ( " STOP #0x{:04X} " , data);
10081006}
10091007
10101008std::string SCC68070::DisassembleSUB (const uint32_t pc) const
@@ -1105,7 +1103,7 @@ std::string SCC68070::DisassembleSUBX(const uint32_t) const
11051103
11061104std::string SCC68070::DisassembleSWAP (const uint32_t ) const
11071105{
1108- return " SWAP D" + std::to_string ( currentOpcode & 0x0007 );
1106+ return std::format ( " SWAP D{} " , currentOpcode & 0x0007 );
11091107}
11101108
11111109std::string SCC68070::DisassembleTAS (const uint32_t pc) const
@@ -1117,7 +1115,7 @@ std::string SCC68070::DisassembleTAS(const uint32_t pc) const
11171115
11181116std::string SCC68070::DisassembleTRAP (const uint32_t ) const
11191117{
1120- return " TRAP #" + std::to_string ( currentOpcode & 0x000F );
1118+ return std::format ( " TRAP #{} " , currentOpcode & 0x000F );
11211119}
11221120
11231121std::string SCC68070::DisassembleTRAPV (const uint32_t ) const
@@ -1143,5 +1141,5 @@ std::string SCC68070::DisassembleTST(const uint32_t pc) const
11431141
11441142std::string SCC68070::DisassembleUNLK (const uint32_t ) const
11451143{
1146- return " UNLK A" + std::to_string ( currentOpcode & 0x0007 );
1144+ return std::format ( " UNLK A{} " , currentOpcode & 0x0007 );
11471145}
0 commit comments