mirror of
https://github.com/kichikuou/system3-sdl2.git
synced 2026-09-22 22:58:12 +03:00
Add Scenario::unknown_command() for error reporting
This commit is contained in:
+2
-4
@@ -163,7 +163,7 @@ void NACT::execute()
|
||||
sco.skip_syseng_rev_marker();
|
||||
|
||||
// 1コマンド実行
|
||||
prev_addr = sco.addr();
|
||||
sco.mark_cmd_start();
|
||||
uint8 cmd = sco.getd();
|
||||
|
||||
if(set_palette && cmd != 'P') {
|
||||
@@ -293,10 +293,8 @@ void NACT::execute()
|
||||
if (is_message(cmd)) {
|
||||
sco.ungetd();
|
||||
message(0);
|
||||
} else if (cmd >= 0x20 && cmd < 0x7f) {
|
||||
sys_error("Unknown Command: '%c' at page = %d, addr = %d", cmd, sco.page(), prev_addr);
|
||||
} else {
|
||||
sys_error("Unknown Command: %02x at page = %d, addr = %d", cmd, sco.page(), prev_addr);
|
||||
sco.unknown_command(cmd);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -111,12 +111,8 @@ protected:
|
||||
// コマンドパーサ
|
||||
void execute();
|
||||
|
||||
// シナリオデータ
|
||||
Scenario sco;
|
||||
|
||||
// アドレス、ページ管理
|
||||
int prev_addr;
|
||||
|
||||
// 変数
|
||||
uint16 var[512];
|
||||
uint16 var_stack[30][20];
|
||||
|
||||
+28
-30
@@ -145,7 +145,7 @@ void NACT_Sys1::cmd_branch()
|
||||
if(!condition) {
|
||||
// 次の'}'命令までスキップする(ネストも考慮する)
|
||||
for(;;) {
|
||||
prev_addr = sco.addr();
|
||||
sco.mark_cmd_start();
|
||||
uint8 cmd = sco.getd();
|
||||
|
||||
if(cmd == '!') {
|
||||
@@ -221,10 +221,8 @@ void NACT_Sys1::cmd_branch()
|
||||
} else if (is_message(cmd)) {
|
||||
sco.ungetd();
|
||||
sco.skip(encoding->mblen(sco.ptr()));
|
||||
} else if (cmd >= 0x20 && cmd < 0x7f) {
|
||||
sys_error("Unknown Command: '%c' at page = %d, addr = %d", cmd, sco.page(), prev_addr);
|
||||
} else {
|
||||
sys_error("Unknown Command: %02x at page = %d, addr = %d", cmd, sco.page(), prev_addr);
|
||||
sco.unknown_command(cmd);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -547,20 +545,20 @@ void NACT_Sys1::cmd_a()
|
||||
|
||||
void NACT_Sys1::cmd_b()
|
||||
{
|
||||
// 未使用
|
||||
sys_error("Unknown Command: 'B' at page = %d, addr = %d", sco.page(), prev_addr);
|
||||
// Unused
|
||||
sco.unknown_command('B');
|
||||
}
|
||||
|
||||
void NACT_Sys1::cmd_d()
|
||||
{
|
||||
// 未使用
|
||||
sys_error("Unknown Command: 'D' at page = %d, addr = %d", sco.page(), prev_addr);
|
||||
// Unused
|
||||
sco.unknown_command('D');
|
||||
}
|
||||
|
||||
void NACT_Sys1::cmd_e()
|
||||
{
|
||||
// 未使用
|
||||
sys_error("Unknown Command: 'E' at page = %d, addr = %d", sco.page(), prev_addr);
|
||||
// Unused
|
||||
sco.unknown_command('E');
|
||||
}
|
||||
|
||||
void NACT_Sys1::cmd_f()
|
||||
@@ -597,26 +595,26 @@ void NACT_Sys1::cmd_g()
|
||||
|
||||
void NACT_Sys1::cmd_h()
|
||||
{
|
||||
// 未使用
|
||||
sys_error("Unknown Command: 'H' at page = %d, addr = %d", sco.page(), prev_addr);
|
||||
// Unused
|
||||
sco.unknown_command('H');
|
||||
}
|
||||
|
||||
void NACT_Sys1::cmd_i()
|
||||
{
|
||||
// 未使用
|
||||
sys_error("Unknown Command: 'I' at page = %d, addr = %d", sco.page(), prev_addr);
|
||||
// Unused
|
||||
sco.unknown_command('I');
|
||||
}
|
||||
|
||||
void NACT_Sys1::cmd_j()
|
||||
{
|
||||
// 未使用
|
||||
sys_error("Unknown Command: 'J' at page = %d, addr = %d", sco.page(), prev_addr);
|
||||
// Unused
|
||||
sco.unknown_command('J');
|
||||
}
|
||||
|
||||
void NACT_Sys1::cmd_k()
|
||||
{
|
||||
// 未使用
|
||||
sys_error("Unknown Command: 'K' at page = %d, addr = %d", sco.page(), prev_addr);
|
||||
// Unused
|
||||
sco.unknown_command('K');
|
||||
}
|
||||
|
||||
void NACT_Sys1::cmd_l()
|
||||
@@ -719,20 +717,20 @@ void NACT_Sys1::cmd_l()
|
||||
|
||||
void NACT_Sys1::cmd_m()
|
||||
{
|
||||
// 未使用
|
||||
sys_error("Unknown Command: 'M' at page = %d, addr = %d", sco.page(), prev_addr);
|
||||
// Unused
|
||||
sco.unknown_command('M');
|
||||
}
|
||||
|
||||
void NACT_Sys1::cmd_n()
|
||||
{
|
||||
// 未使用
|
||||
sys_error("Unknown Command: 'N' at page = %d, addr = %d", sco.page(), prev_addr);
|
||||
// Unused
|
||||
sco.unknown_command('N');
|
||||
}
|
||||
|
||||
void NACT_Sys1::cmd_o()
|
||||
{
|
||||
// 未使用
|
||||
sys_error("Unknown Command: 'O' at page = %d, addr = %d", sco.page(), prev_addr);
|
||||
// Unused
|
||||
sco.unknown_command('O');
|
||||
}
|
||||
|
||||
void NACT_Sys1::cmd_p()
|
||||
@@ -867,8 +865,8 @@ void NACT_Sys1::cmd_s()
|
||||
|
||||
void NACT_Sys1::cmd_t()
|
||||
{
|
||||
// 未使用
|
||||
sys_error("Unknown Command: 'T' at page = %d, addr = %d", sco.page(), prev_addr);
|
||||
// Unused
|
||||
sco.unknown_command('T');
|
||||
}
|
||||
|
||||
void NACT_Sys1::cmd_u()
|
||||
@@ -891,14 +889,14 @@ void NACT_Sys1::cmd_u()
|
||||
|
||||
void NACT_Sys1::cmd_v()
|
||||
{
|
||||
// 未使用
|
||||
sys_error("Unknown Command: 'V' at page = %d, addr = %d", sco.page(), prev_addr);
|
||||
// Unused
|
||||
sco.unknown_command('V');
|
||||
}
|
||||
|
||||
void NACT_Sys1::cmd_w()
|
||||
{
|
||||
// 未使用
|
||||
sys_error("Unknown Command: 'W' at page = %d, addr = %d", sco.page(), prev_addr);
|
||||
// Unused
|
||||
sco.unknown_command('W');
|
||||
}
|
||||
|
||||
void NACT_Sys1::cmd_x()
|
||||
|
||||
@@ -85,7 +85,7 @@ void NACT_Sys2::cmd_branch()
|
||||
if(!condition) {
|
||||
// 次の'}'命令までスキップする(ネストも考慮する)
|
||||
for(;;) {
|
||||
prev_addr = sco.addr();
|
||||
sco.mark_cmd_start();
|
||||
uint8 cmd = sco.getd();
|
||||
|
||||
if(cmd == '!') {
|
||||
@@ -259,10 +259,8 @@ void NACT_Sys2::cmd_branch()
|
||||
} else if (is_message(cmd)) {
|
||||
sco.ungetd();
|
||||
sco.skip(encoding->mblen(sco.ptr()));
|
||||
} else if (cmd >= 0x20 && cmd < 0x7f) {
|
||||
sys_error("Unknown Command: '%c' at page = %d, addr = %d", cmd, sco.page(), prev_addr);
|
||||
} else {
|
||||
sys_error("Unknown Command: %02x at page = %d, addr = %d", cmd, sco.page(), prev_addr);
|
||||
sco.unknown_command(cmd);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -328,8 +328,8 @@ void NACT_Sys3::cmd_b()
|
||||
|
||||
void NACT_Sys3::cmd_d()
|
||||
{
|
||||
// 未使用
|
||||
sys_error("Unknown Command: 'D' at page = %d, addr = %d", sco.page(), prev_addr);
|
||||
// Unused
|
||||
sco.unknown_command('D');
|
||||
}
|
||||
|
||||
void NACT_Sys3::cmd_e()
|
||||
|
||||
+12
-4
@@ -14,7 +14,7 @@ void Scenario::skip_string(Encoding *enc, uint8_t terminator)
|
||||
|
||||
void Scenario::get_syseng_string(char* buf, int size, Encoding *enc, uint8_t terminator)
|
||||
{
|
||||
int start_addr = addr();
|
||||
int start_addr = addr_;
|
||||
|
||||
int i = 0;
|
||||
for (uint8_t c = getd(); c != terminator; c = getd()) {
|
||||
@@ -22,7 +22,7 @@ void Scenario::get_syseng_string(char* buf, int size, Encoding *enc, uint8_t ter
|
||||
ungetd();
|
||||
int len = enc->mblen(ptr());
|
||||
if (i + len >= size)
|
||||
sys_error("String buffer overrun at %d:0x%x", page(), start_addr);
|
||||
sys_error("String buffer overrun at %d:0x%x", page_, start_addr);
|
||||
memcpy(&buf[i], ptr(), len);
|
||||
i += len;
|
||||
skip(len);
|
||||
@@ -40,7 +40,7 @@ void Scenario::label_call(int label)
|
||||
jump_to(label_stack.back());
|
||||
label_stack.pop_back();
|
||||
} else {
|
||||
label_stack.push_back(addr());
|
||||
label_stack.push_back(addr_);
|
||||
jump_to(label);
|
||||
}
|
||||
}
|
||||
@@ -56,7 +56,15 @@ void Scenario::page_call(int target_page)
|
||||
page_jump(pair.first, pair.second);
|
||||
page_stack.pop_back();
|
||||
} else {
|
||||
page_stack.emplace_back(page(), addr());
|
||||
page_stack.emplace_back(page_, addr_);
|
||||
page_jump(target_page, 2);
|
||||
}
|
||||
}
|
||||
|
||||
[[noreturn]] void Scenario::unknown_command(uint8_t cmd) {
|
||||
if (cmd >= 0x20 && cmd < 0x7f) {
|
||||
sys_error("Unknown Command: '%c' at %d:0x%d", cmd, page_, cmd_start_addr);
|
||||
} else {
|
||||
sys_error("Unknown Command: %02x at %d:0x%d", cmd, page_, cmd_start_addr);
|
||||
}
|
||||
}
|
||||
@@ -54,11 +54,15 @@ public:
|
||||
void page_stack_pop() { page_stack.pop_back(); }
|
||||
void page_stack_clear() { page_stack.clear(); }
|
||||
|
||||
void mark_cmd_start() { cmd_start_addr = addr_; }
|
||||
[[noreturn]] void unknown_command(uint8_t cmd);
|
||||
|
||||
private:
|
||||
Dri adisk;
|
||||
std::vector<uint8_t> data_;
|
||||
int page_;
|
||||
int addr_;
|
||||
int cmd_start_addr;
|
||||
std::vector<int> label_stack;
|
||||
std::vector<std::pair<int, int>> page_stack;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user