@@ -44,9 +44,15 @@ enum class PsyqOpcode : uint8_t {
44
44
FILENAME = 28 ,
45
45
PROGRAMTYPE = 46 ,
46
46
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 ,
48
52
FUNCTION = 74 ,
49
53
FUNCTION_END = 76 ,
54
+ SECTION_DEF = 82 ,
55
+ SECTION_DEF2 = 84 ,
50
56
};
51
57
52
58
enum class PsyqRelocType : uint8_t {
@@ -412,11 +418,37 @@ std::unique_ptr<PsyqLnkFile> PsyqLnkFile::parse(PCSX::File* file, bool verbose)
412
418
ret->symbols .insert (symbolIndex, symbol);
413
419
break ;
414
420
}
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: {
416
448
// 2 bytes of nothing
417
449
uint16_t zero = file->read <uint16_t >();
418
450
assert (zero == 0 );
419
- vprint (" SLD_END \n " );
451
+ vprint (" END_SLD \n " );
420
452
break ;
421
453
}
422
454
case (uint8_t )PsyqOpcode::FUNCTION: {
@@ -442,6 +474,36 @@ std::unique_ptr<PsyqLnkFile> PsyqLnkFile::parse(PCSX::File* file, bool verbose)
442
474
section, offset, endLine);
443
475
break ;
444
476
}
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
+ }
445
507
default : {
446
508
fmt::print (" Unknown opcode {}.\n " , opcode);
447
509
return nullptr ;
0 commit comments