aboutsummaryrefslogtreecommitdiff
path: root/engines/agi/opcodes.h
diff options
context:
space:
mode:
authorJussi Pitkanen2011-06-13 22:15:13 +0300
committerEugene Sandulenko2011-08-13 23:26:51 +0100
commita4e0cd53f01afeac9f6cf0467a6b4174bf64215e (patch)
tree147a8c9b9fac4bb7a32877f46be32add92fd859f /engines/agi/opcodes.h
parente1153cf11fd0ddddfdc326d0ff677799fd0bb4db (diff)
downloadscummvm-rg350-a4e0cd53f01afeac9f6cf0467a6b4174bf64215e.tar.gz
scummvm-rg350-a4e0cd53f01afeac9f6cf0467a6b4174bf64215e.tar.bz2
scummvm-rg350-a4e0cd53f01afeac9f6cf0467a6b4174bf64215e.zip
AGI: Refactor interpreter core (somewhat akin to SCI)
* Instruction tables are now defined in opcodes.{cpp,h}. * Move opcode handlers from Agi::AgiEngine to Agi * Opcode handlers take as parameter a pointer to AGI state (AgiGame)
Diffstat (limited to 'engines/agi/opcodes.h')
-rw-r--r--engines/agi/opcodes.h222
1 files changed, 216 insertions, 6 deletions
diff --git a/engines/agi/opcodes.h b/engines/agi/opcodes.h
index b0d2051f0b..6007aa17df 100644
--- a/engines/agi/opcodes.h
+++ b/engines/agi/opcodes.h
@@ -23,17 +23,227 @@
#ifndef AGI_OPCODES_H
#define AGI_OPCODES_H
+#include <string.h>
+
namespace Agi {
-struct AgiLogicnames {
+struct AgiInstruction {
const char *name;
- uint16 numArgs;
- uint16 argMask;
+ const char *args;
+ AgiCommand func;
+
+ int argumentsLength() { return strlen(args); }
};
-extern AgiLogicnames logicNamesTest[];
-extern AgiLogicnames logicNamesCmd[];
-extern AgiLogicnames logicNamesIf[];
+extern AgiInstruction logicNamesTest[];
+extern AgiInstruction logicNamesCmd[];
+
+void cmd_increment(AgiGame *state, uint8 *p);
+void cmd_decrement(AgiGame *state, uint8 *p);
+void cmd_assignn(AgiGame *state, uint8 *p);
+void cmd_assignv(AgiGame *state, uint8 *p);
+void cmd_addn(AgiGame *state, uint8 *p);
+void cmd_addv(AgiGame *state, uint8 *p);
+void cmd_subn(AgiGame *state, uint8 *p);
+void cmd_subv(AgiGame *state, uint8 *p); // 0x08
+void cmd_lindirectv(AgiGame *state, uint8 *p);
+void cmd_rindirect(AgiGame *state, uint8 *p);
+void cmd_lindirectn(AgiGame *state, uint8 *p);
+void cmd_set(AgiGame *state, uint8 *p);
+void cmd_reset(AgiGame *state, uint8 *p);
+void cmd_toggle(AgiGame *state, uint8 *p);
+void cmd_set_v(AgiGame *state, uint8 *p);
+void cmd_reset_v(AgiGame *state, uint8 *p); // 0x10
+void cmd_toggle_v(AgiGame *state, uint8 *p);
+void cmd_new_room(AgiGame *state, uint8 *p);
+void cmd_new_room_f(AgiGame *state, uint8 *p);
+void cmd_load_logic(AgiGame *state, uint8 *p);
+void cmd_load_logic_f(AgiGame *state, uint8 *p);
+void cmd_call(AgiGame *state, uint8 *p);
+void cmd_call_f(AgiGame *state, uint8 *p);
+void cmd_load_pic(AgiGame *state, uint8 *p); // 0x18
+void cmd_draw_pic(AgiGame *state, uint8 *p);
+void cmd_show_pic(AgiGame *state, uint8 *p);
+void cmd_discard_pic(AgiGame *state, uint8 *p);
+void cmd_overlay_pic(AgiGame *state, uint8 *p);
+void cmd_show_pri_screen(AgiGame *state, uint8 *p);
+void cmd_load_view(AgiGame *state, uint8 *p);
+void cmd_load_view_f(AgiGame *state, uint8 *p);
+void cmd_discard_view(AgiGame *state, uint8 *p); // 0x20
+void cmd_animate_obj(AgiGame *state, uint8 *p);
+void cmd_unanimate_all(AgiGame *state, uint8 *p);
+void cmd_draw(AgiGame *state, uint8 *p);
+void cmd_erase(AgiGame *state, uint8 *p);
+void cmd_position(AgiGame *state, uint8 *p);
+void cmd_position_f(AgiGame *state, uint8 *p);
+void cmd_get_posn(AgiGame *state, uint8 *p);
+void cmd_reposition(AgiGame *state, uint8 *p); // 0x28
+void cmd_set_view(AgiGame *state, uint8 *p);
+void cmd_set_view_f(AgiGame *state, uint8 *p);
+void cmd_set_loop(AgiGame *state, uint8 *p);
+void cmd_set_loop_f(AgiGame *state, uint8 *p);
+void cmd_fix_loop(AgiGame *state, uint8 *p);
+void cmd_release_loop(AgiGame *state, uint8 *p);
+void cmd_set_cel(AgiGame *state, uint8 *p);
+void cmd_set_cel_f(AgiGame *state, uint8 *p); // 0x30
+void cmd_last_cel(AgiGame *state, uint8 *p);
+void cmd_current_cel(AgiGame *state, uint8 *p);
+void cmd_current_loop(AgiGame *state, uint8 *p);
+void cmd_current_view(AgiGame *state, uint8 *p);
+void cmd_number_of_loops(AgiGame *state, uint8 *p);
+void cmd_set_priority(AgiGame *state, uint8 *p);
+void cmd_set_priority_f(AgiGame *state, uint8 *p);
+void cmd_release_priority(AgiGame *state, uint8 *p); // 0x38
+void cmd_get_priority(AgiGame *state, uint8 *p);
+void cmd_stop_update(AgiGame *state, uint8 *p);
+void cmd_start_update(AgiGame *state, uint8 *p);
+void cmd_force_update(AgiGame *state, uint8 *p);
+void cmd_ignore_horizon(AgiGame *state, uint8 *p);
+void cmd_observe_horizon(AgiGame *state, uint8 *p);
+void cmd_set_horizon(AgiGame *state, uint8 *p);
+void cmd_object_on_water(AgiGame *state, uint8 *p); // 0x40
+void cmd_object_on_land(AgiGame *state, uint8 *p);
+void cmd_object_on_anything(AgiGame *state, uint8 *p);
+void cmd_ignore_objs(AgiGame *state, uint8 *p);
+void cmd_observe_objs(AgiGame *state, uint8 *p);
+void cmd_distance(AgiGame *state, uint8 *p);
+void cmd_stop_cycling(AgiGame *state, uint8 *p);
+void cmd_start_cycling(AgiGame *state, uint8 *p);
+void cmd_normal_cycle(AgiGame *state, uint8 *p); // 0x48
+void cmd_end_of_loop(AgiGame *state, uint8 *p);
+void cmd_reverse_cycle(AgiGame *state, uint8 *p);
+void cmd_reverse_loop(AgiGame *state, uint8 *p);
+void cmd_cycle_time(AgiGame *state, uint8 *p);
+void cmd_stop_motion(AgiGame *state, uint8 *p);
+void cmd_start_motion(AgiGame *state, uint8 *p);
+void cmd_step_size(AgiGame *state, uint8 *p);
+void cmd_step_time(AgiGame *state, uint8 *p); // 0x50
+void cmd_move_obj(AgiGame *state, uint8 *p);
+void cmd_move_obj_f(AgiGame *state, uint8 *p);
+void cmd_follow_ego(AgiGame *state, uint8 *p);
+void cmd_wander(AgiGame *state, uint8 *p);
+void cmd_normal_motion(AgiGame *state, uint8 *p);
+void cmd_set_dir(AgiGame *state, uint8 *p);
+void cmd_get_dir(AgiGame *state, uint8 *p);
+void cmd_ignore_blocks(AgiGame *state, uint8 *p); // 0x58
+void cmd_observe_blocks(AgiGame *state, uint8 *p);
+void cmd_block(AgiGame *state, uint8 *p);
+void cmd_unblock(AgiGame *state, uint8 *p);
+void cmd_get(AgiGame *state, uint8 *p);
+void cmd_get_f(AgiGame *state, uint8 *p);
+void cmd_drop(AgiGame *state, uint8 *p);
+void cmd_put(AgiGame *state, uint8 *p);
+void cmd_put_f(AgiGame *state, uint8 *p); // 0x60
+void cmd_get_room_f(AgiGame *state, uint8 *p);
+void cmd_load_sound(AgiGame *state, uint8 *p);
+void cmd_sound(AgiGame *state, uint8 *p);
+void cmd_stop_sound(AgiGame *state, uint8 *p);
+void cmd_print(AgiGame *state, uint8 *p);
+void cmd_print_f(AgiGame *state, uint8 *p);
+void cmd_display(AgiGame *state, uint8 *p);
+void cmd_display_f(AgiGame *state, uint8 *p); // 0x68
+void cmd_clear_lines(AgiGame *state, uint8 *p);
+void cmd_text_screen(AgiGame *state, uint8 *p);
+void cmd_graphics(AgiGame *state, uint8 *p);
+void cmd_set_cursor_char(AgiGame *state, uint8 *p);
+void cmd_set_text_attribute(AgiGame *state, uint8 *p);
+void cmd_shake_screen(AgiGame *state, uint8 *p);
+void cmd_configure_screen(AgiGame *state, uint8 *p);
+void cmd_status_line_on(AgiGame *state, uint8 *p); // 0x70
+void cmd_status_line_off(AgiGame *state, uint8 *p);
+void cmd_set_string(AgiGame *state, uint8 *p);
+void cmd_get_string(AgiGame *state, uint8 *p);
+void cmd_word_to_string(AgiGame *state, uint8 *p);
+void cmd_parse(AgiGame *state, uint8 *p);
+void cmd_get_num(AgiGame *state, uint8 *p);
+void cmd_prevent_input(AgiGame *state, uint8 *p);
+void cmd_accept_input(AgiGame *state, uint8 *p); // 0x78
+void cmd_set_key(AgiGame *state, uint8 *p);
+void cmd_add_to_pic(AgiGame *state, uint8 *p);
+void cmd_add_to_pic_f(AgiGame *state, uint8 *p);
+void cmd_status(AgiGame *state, uint8 *p);
+void cmd_save_game(AgiGame *state, uint8 *p);
+void cmd_load_game(AgiGame *state, uint8 *p);
+void cmd_init_disk(AgiGame *state, uint8 *p);
+void cmd_restart_game(AgiGame *state, uint8 *p); // 0x80
+void cmd_show_obj(AgiGame *state, uint8 *p);
+void cmd_random(AgiGame *state, uint8 *p);
+void cmd_program_control(AgiGame *state, uint8 *p);
+void cmd_player_control(AgiGame *state, uint8 *p);
+void cmd_obj_status_f(AgiGame *state, uint8 *p);
+void cmd_quit(AgiGame *state, uint8 *p);
+void cmd_show_mem(AgiGame *state, uint8 *p);
+void cmd_pause(AgiGame *state, uint8 *p); // 0x88
+void cmd_echo_line(AgiGame *state, uint8 *p);
+void cmd_cancel_line(AgiGame *state, uint8 *p);
+void cmd_init_joy(AgiGame *state, uint8 *p);
+void cmd_toggle_monitor(AgiGame *state, uint8 *p);
+void cmd_version(AgiGame *state, uint8 *p);
+void cmd_script_size(AgiGame *state, uint8 *p);
+void cmd_set_game_id(AgiGame *state, uint8 *p);
+void cmd_log(AgiGame *state, uint8 *p); // 0x90
+void cmd_set_scan_start(AgiGame *state, uint8 *p);
+void cmd_reset_scan_start(AgiGame *state, uint8 *p);
+void cmd_reposition_to(AgiGame *state, uint8 *p);
+void cmd_reposition_to_f(AgiGame *state, uint8 *p);
+void cmd_trace_on(AgiGame *state, uint8 *p);
+void cmd_trace_info(AgiGame *state, uint8 *p);
+void cmd_print_at(AgiGame *state, uint8 *p);
+void cmd_print_at_v(AgiGame *state, uint8 *p); // 0x98
+//void cmd_discard_view(AgiGame *state, uint8 *p); // Opcode repeated from 0x20 ?
+void cmd_clear_text_rect(AgiGame *state, uint8 *p);
+void cmd_set_upper_left(AgiGame *state, uint8 *p);
+void cmd_set_menu(AgiGame *state, uint8 *p);
+void cmd_set_menu_item(AgiGame *state, uint8 *p);
+void cmd_submit_menu(AgiGame *state, uint8 *p);
+void cmd_enable_item(AgiGame *state, uint8 *p);
+void cmd_disable_item(AgiGame *state, uint8 *p); // 0xa0
+void cmd_menu_input(AgiGame *state, uint8 *p);
+void cmd_show_obj_v(AgiGame *state, uint8 *p);
+void cmd_open_dialogue(AgiGame *state, uint8 *p);
+void cmd_close_dialogue(AgiGame *state, uint8 *p);
+void cmd_mul_n(AgiGame *state, uint8 *p);
+void cmd_mul_v(AgiGame *state, uint8 *p);
+void cmd_div_n(AgiGame *state, uint8 *p);
+void cmd_div_v(AgiGame *state, uint8 *p); // 0xa8
+void cmd_close_window(AgiGame *state, uint8 *p);
+void cmd_set_simple(AgiGame *state, uint8 *p);
+void cmd_push_script(AgiGame *state, uint8 *p);
+void cmd_pop_script(AgiGame *state, uint8 *p);
+void cmd_hold_key(AgiGame *state, uint8 *p);
+void cmd_set_pri_base(AgiGame *state, uint8 *p);
+void cmd_discard_sound(AgiGame *state, uint8 *p);
+void cmd_hide_mouse(AgiGame *state, uint8 *p); // 0xb0
+void cmd_allow_menu(AgiGame *state, uint8 *p);
+void cmd_show_mouse(AgiGame *state, uint8 *p);
+void cmd_fence_mouse(AgiGame *state, uint8 *p);
+void cmd_mouse_posn(AgiGame *state, uint8 *p);
+void cmd_release_key(AgiGame *state, uint8 *p);
+void cmd_adj_ego_move_to_x_y(AgiGame *state, uint8 *p);
+
+void cond_end(AgiGame *state, uint8 *p);
+void cond_equal(AgiGame *state, uint8 *p);
+void cond_equalv(AgiGame *state, uint8 *p);
+void cond_less(AgiGame *state, uint8 *p);
+void cond_lessv(AgiGame *state, uint8 *p);
+void cond_greater(AgiGame *state, uint8 *p);
+void cond_greaterv(AgiGame *state, uint8 *p);
+void cond_isset(AgiGame *state, uint8 *p);
+void cond_issetv(AgiGame *state, uint8 *p);
+void cond_has(AgiGame *state, uint8 *p);
+void cond_obj_in_room(AgiGame *state, uint8 *p);
+void cond_posn(AgiGame *state, uint8 *p);
+void cond_controller(AgiGame *state, uint8 *p);
+void cond_have_key(AgiGame *state, uint8 *p);
+void cond_said(AgiGame *state, uint8 *p);
+void cond_compare_strings(AgiGame *state, uint8 *p);
+void cond_obj_in_box(AgiGame *state, uint8 *p);
+void cond_center_posn(AgiGame *state, uint8 *p);
+void cond_right_posn(AgiGame *state, uint8 *p);
+void cond_unknown_13(AgiGame *state, uint8 *p);
+void cond_unknown(AgiGame *state, uint8 *p);
+void cond_not(AgiGame *state, uint8 *p);
+void cond_or(AgiGame *state, uint8 *p);
} // End of namespace Agi