@@ -44,9 +44,15 @@ enum class PsyqOpcode : uint8_t {
4444 FILENAME = 28 ,
4545 PROGRAMTYPE = 46 ,
4646 UNINITIALIZED = 48 ,
47- SLD_END = 60 ,
47+ INC_SLD_LINENUM = 50 ,
48+ INC_SLD_LINENUM_BY_BYTE = 52 ,
49+ SET_SLD_LINENUM = 56 ,
50+ SET_SLD_LINENUM_FILE = 58 ,
51+ END_SLD = 60 ,
4852 FUNCTION = 74 ,
4953 FUNCTION_END = 76 ,
54+ SECTION_DEF = 82 ,
55+ SECTION_DEF2 = 84 ,
5056};
5157
5258enum class PsyqRelocType : uint8_t {
@@ -412,11 +418,37 @@ std::unique_ptr<PsyqLnkFile> PsyqLnkFile::parse(PCSX::File* file, bool verbose)
412418 ret->symbols .insert (symbolIndex, symbol);
413419 break ;
414420 }
415- case (uint8_t )PsyqOpcode::SLD_END : {
421+ case (uint8_t )PsyqOpcode::INC_SLD_LINENUM : {
422+ uint16_t offset = file->read <uint16_t >();
423+ vprint (" INC_SLD_LINENUM offset {}\n " , offset);
424+
425+ break ;
426+ }
427+ case (uint8_t )PsyqOpcode::INC_SLD_LINENUM_BY_BYTE : {
428+ uint16_t offset = file->read <uint16_t >();
429+ uint8_t _byte = file->read <uint8_t >();
430+ vprint (" INC_SLD_LINENUM_BY_BYTE offset {}, _byte {}\n " , offset, _byte);
431+
432+ break ;
433+ }
434+ case (uint8_t )PsyqOpcode::SET_SLD_LINENUM : {
435+ uint16_t offset = file->read <uint16_t >();
436+ uint32_t lineNum = file->read <uint32_t >();
437+ vprint (" SET_SLD_LINENUM lineNum {}, offset {}\n " , lineNum, offset);
438+ break ;
439+ }
440+ case (uint8_t )PsyqOpcode::SET_SLD_LINENUM_FILE : {
441+ uint16_t offset = file->read <uint16_t >();
442+ uint32_t lineNum = file->read <uint32_t >();
443+ uint16_t _file = file->read <uint16_t >();
444+ vprint (" SET_SLD_LINENUM_FILE lineNum {}, offset {}, _file {}\n " , lineNum, offset, _file);
445+ break ;
446+ }
447+ case (uint8_t )PsyqOpcode::END_SLD : {
416448 // 2 bytes of nothing
417449 uint16_t zero = file->read <uint16_t >();
418450 assert (zero == 0 );
419- vprint (" SLD_END \n " );
451+ vprint (" END_SLD \n " );
420452 break ;
421453 }
422454 case (uint8_t )PsyqOpcode::FUNCTION : {
@@ -442,6 +474,36 @@ std::unique_ptr<PsyqLnkFile> PsyqLnkFile::parse(PCSX::File* file, bool verbose)
442474 section, offset, endLine);
443475 break ;
444476 }
477+ case (uint8_t )PsyqOpcode::SECTION_DEF : {
478+ uint16_t section = file->read <uint16_t >();
479+ uint32_t value = file->read <uint32_t >();
480+ uint16_t _class = file->read <uint16_t >();
481+ uint16_t type = file->read <uint16_t >();
482+ uint32_t size = file->read <uint32_t >();
483+ std::string name = readPsyqString (file);
484+ vprint (" SECTION_DEF: section {}, value {}, _class {}, type {}, size {}\n " ,
485+ section, value, _class, type, size);
486+ break ;
487+ }
488+ case (uint8_t )PsyqOpcode::SECTION_DEF2 : {
489+ uint16_t section = file->read <uint16_t >();
490+ uint32_t value = file->read <uint32_t >();
491+ uint16_t _class = file->read <uint16_t >();
492+ uint16_t type = file->read <uint16_t >();
493+ uint32_t size = file->read <uint32_t >();
494+
495+ uint16_t dims = file->read <uint16_t >();
496+ while (dims-- > 0 ) {
497+ // ignore for now
498+ uint16_t dim = file->read <uint16_t >();
499+ }
500+
501+ std::string tag = readPsyqString (file);
502+ std::string name = readPsyqString (file);
503+ vprint (" SECTION_DEF2: section {}, value {}, _class {}, type {}, size {}, dims {}, tag {}, name {}\n " ,
504+ section, value, _class, type, size, dims, tag, name);
505+ break ;
506+ }
445507 default : {
446508 fmt::print (" Unknown opcode {}.\n " , opcode);
447509 return nullptr ;
0 commit comments