Skip to content

Commit fb970a2

Browse files
zero318ExpHP
authored andcommitted
Add scratch registers for IN-StB and fix size arg sign
1 parent 601b15a commit fb970a2

File tree

1 file changed

+32
-11
lines changed

1 file changed

+32
-11
lines changed

src/formats/ecl/ecl_06.rs

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1003,7 +1003,7 @@ impl LanguageHooks for OldeEclHooks {
10031003
Game::Th06 => enum_map::enum_map!{
10041004
ScalarType::Int => vec![
10051005
R(-10001), R(-10002), R(-10003), R(-10004), // I0-I3
1006-
R(-10009), R(-10010), R(-10011), R(-10012), // I4-I7
1006+
R(-10009), R(-10010), R(-10011), R(-10012), // IC0-IC3
10071007
],
10081008
ScalarType::Float => vec![
10091009
R(-10005), R(-10006), R(-10007), R(-10008), // F0-F3
@@ -1013,23 +1013,44 @@ impl LanguageHooks for OldeEclHooks {
10131013
Game::Th07 => enum_map::enum_map!{
10141014
ScalarType::Int => vec![
10151015
R(10000), R(10001), R(10002), R(10003), // I0-I3
1016-
R(10012), R(10013), R(10014), R(10015), // I4-I7
1016+
R(10012), R(10013), R(10014), R(10015), // IC0-IC3
1017+
//R(10029), R(10030), R(10031), R(10032), // PARAM_A-PARAM_D
10171018
],
10181019
ScalarType::Float => vec![
10191020
R(10004), R(10005), R(10006), R(10007), // F0-F3
10201021
R(10008), R(10009), R(10010), R(10011), // F4-F7
10211022
R(10072), R(10074), // F8-F9
1023+
//R(10033), R(10034), R(10035), R(10036), // PARAM_R-PARAM_N
10221024
],
10231025
ScalarType::String => vec![],
10241026
},
1025-
Game::Th08 => enum_map::enum_map!{
1027+
Game::Th08 | Game::Th09 => enum_map::enum_map!{
10261028
ScalarType::Int => vec![
1027-
R(10000), R(10001), R(10002), R(10003),
1028-
R(10012), R(10013), R(10014), R(10015),
1029+
R(10000), R(10001), R(10002), R(10003), // I0-I3
1030+
R(10004), R(10005), R(10006), R(10007), // I4-I7
1031+
R(10036), R(10037), R(10038), R(10039), // IC0-IC3
1032+
//R(10053), R(10054), R(10055), R(10056), // PARAM_A-PARAM_D
10291033
],
10301034
ScalarType::Float => vec![
1031-
R(10004), R(10005), R(10006), R(10007),
1032-
R(10008), R(10009), R(10010), R(10011),
1035+
R(10016), R(10017), R(10018), R(10019), // F0-F3
1036+
R(10020), R(10021), R(10022), R(10023), // F4-F7
1037+
R(10094), R(10095), // F8-F9
1038+
//R(10057), R(10058), R(10059), R(10060), // PARAM_R-PARAM_N
1039+
],
1040+
ScalarType::String => vec![],
1041+
},
1042+
Game::Th095 => enum_map::enum_map!{
1043+
ScalarType::Int => vec![
1044+
R(10000), R(10001), R(10002), R(10003), // I0-I3
1045+
R(10004), R(10005), R(10006), R(10007), // I4-I7
1046+
R(10020), R(10021), R(10022), R(10023), // IC0-IC3
1047+
//R(10036), R(10037), R(10038), R(10039), // PARAM_A-PARAM_D
1048+
],
1049+
ScalarType::Float => vec![
1050+
R(10008), R(10009), R(10010), R(10011), // F0-F3
1051+
R(10012), R(10013), R(10014), R(10015), // F4-F7
1052+
R(10077), R(10078), R(10079), R(10080), // F8-F11
1053+
//R(10040), R(10041), R(10042), R(10043), // PARAM_R-PARAM_N
10331054
],
10341055
ScalarType::String => vec![],
10351056
},
@@ -1076,7 +1097,7 @@ impl InstrFormat for OldeEclHooks {
10761097
fn read_instr(&self, f: &mut BinReader, emitter: &dyn Emitter) -> ReadResult<ReadInstr> {
10771098
let time = f.read_i32()?;
10781099
let opcode = f.read_u16()?;
1079-
let size = f.read_u16()? as usize;
1100+
let size = f.read_i16()? as usize;
10801101
let before_difficulty = f.read_u8()?; // according to zero, not referenced in any game
10811102
let difficulty = f.read_u8()?;
10821103
let param_mask = f.read_u16()?;
@@ -1110,7 +1131,7 @@ impl InstrFormat for OldeEclHooks {
11101131
fn write_instr(&self, f: &mut BinWriter, _: &dyn Emitter, instr: &RawInstr) -> WriteResult {
11111132
f.write_i32(instr.time)?;
11121133
f.write_u16(instr.opcode)?;
1113-
f.write_u16(self.instr_size(instr) as _)?;
1134+
f.write_i16(self.instr_size(instr) as _)?;
11141135

11151136
f.write_u8(0)?;
11161137
f.write_u8(instr.difficulty)?;
@@ -1126,7 +1147,7 @@ impl InstrFormat for OldeEclHooks {
11261147
fn write_terminal_instr(&self, f: &mut BinWriter, _: &dyn Emitter) -> WriteResult {
11271148
f.write_i32(-1)?; // time
11281149
f.write_i16(-1)?; // opcode
1129-
f.write_u16(self.instr_header_size() as _)?; // size
1150+
f.write_i16(self.instr_header_size() as _)?; // size
11301151
f.write_u16(0xff00)?; // difficulty
11311152
f.write_u16(0x00ff)?; // param_mask
11321153
Ok(())
@@ -1162,7 +1183,7 @@ impl InstrFormat for TimelineFormat06 {
11621183
}
11631184

11641185
let opcode = f.read_u16()?;
1165-
let size = f.read_u16()? as usize;
1186+
let size = f.read_i16()? as usize;
11661187

11671188
let args_size = size.checked_sub(self.instr_header_size()).ok_or_else(|| {
11681189
emitter.as_sized().emit(error!("bad instruction size ({} < {})", size, self.instr_header_size()))

0 commit comments

Comments
 (0)