Removed the PREG, PSTK, IS_NULL_REG and REG_EQ defines
svn-id: r40767
This commit is contained in:
parent
60b007cfd0
commit
4799cbf1c3
16 changed files with 233 additions and 237 deletions
|
@ -574,13 +574,13 @@ int game_init(EngineState *s) {
|
||||||
const char *tmp = obj_get_name(s, game_obj);
|
const char *tmp = obj_get_name(s, game_obj);
|
||||||
|
|
||||||
if (!tmp) {
|
if (!tmp) {
|
||||||
sciprintf("Error: script.000, export 0 ("PREG") does not\n"
|
sciprintf("Error: script.000, export 0 (%04x:%04x) does not\n"
|
||||||
" yield an object with a name -> sanity check failed\n", PRINT_REG(game_obj));
|
" yield an object with a name -> sanity check failed\n", PRINT_REG(game_obj));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
s->_gameName = tmp;
|
s->_gameName = tmp;
|
||||||
|
|
||||||
sciprintf(" \"%s\" at "PREG"\n", s->_gameName.c_str(), PRINT_REG(game_obj));
|
sciprintf(" \"%s\" at %04x:%04x\n", s->_gameName.c_str(), PRINT_REG(game_obj));
|
||||||
|
|
||||||
s->game_obj = game_obj;
|
s->game_obj = game_obj;
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@ struct WorklistManager {
|
||||||
return;
|
return;
|
||||||
|
|
||||||
#ifdef DEBUG_GC_VERBOSE
|
#ifdef DEBUG_GC_VERBOSE
|
||||||
sciprintf("[GC] Adding "PREG"\n", PRINT_REG(reg));
|
sciprintf("[GC] Adding %04x:%04x\n", PRINT_REG(reg));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (_map.contains(reg))
|
if (_map.contains(reg))
|
||||||
|
@ -137,7 +137,7 @@ reg_t_hash_map *find_all_used_references(EngineState *s) {
|
||||||
wm._worklist.pop_back();
|
wm._worklist.pop_back();
|
||||||
if (reg.segment != s->stack_segment) { // No need to repeat this one
|
if (reg.segment != s->stack_segment) { // No need to repeat this one
|
||||||
#ifdef DEBUG_GC_VERBOSE
|
#ifdef DEBUG_GC_VERBOSE
|
||||||
sciprintf("[GC] Checking "PREG"\n", PRINT_REG(reg));
|
sciprintf("[GC] Checking %04x:%04x\n", PRINT_REG(reg));
|
||||||
#endif
|
#endif
|
||||||
if (reg.segment < sm->_heap.size() && sm->_heap[reg.segment])
|
if (reg.segment < sm->_heap.size() && sm->_heap[reg.segment])
|
||||||
sm->_heap[reg.segment]->listAllOutgoingReferences(s, reg, &wm, add_outgoing_refs);
|
sm->_heap[reg.segment]->listAllOutgoingReferences(s, reg, &wm, add_outgoing_refs);
|
||||||
|
@ -168,7 +168,7 @@ void free_unless_used(void *refcon, reg_t addr) {
|
||||||
// Not found -> we can free it
|
// Not found -> we can free it
|
||||||
deallocator->mobj->freeAtAddress(deallocator->segmgr, addr);
|
deallocator->mobj->freeAtAddress(deallocator->segmgr, addr);
|
||||||
#ifdef DEBUG_GC
|
#ifdef DEBUG_GC
|
||||||
sciprintf("[GC] Deallocating "PREG"\n", PRINT_REG(addr));
|
sciprintf("[GC] Deallocating %04x:%04x\n", PRINT_REG(addr));
|
||||||
deallocator->segcount[deallocator->mobj->getType()]++;
|
deallocator->segcount[deallocator->mobj->getType()]++;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -494,7 +494,7 @@ reg_t kalloc(EngineState *s, const char *type, int space) {
|
||||||
reg_t reg;
|
reg_t reg;
|
||||||
|
|
||||||
s->seg_manager->alloc_hunk_entry(type, space, ®);
|
s->seg_manager->alloc_hunk_entry(type, space, ®);
|
||||||
SCIkdebug(SCIkMEM, "Allocated %d at hunk "PREG" (%s)\n", space, PRINT_REG(reg), type);
|
SCIkdebug(SCIkMEM, "Allocated %d at hunk %04x:%04x (%s)\n", space, PRINT_REG(reg), type);
|
||||||
|
|
||||||
return reg;
|
return reg;
|
||||||
}
|
}
|
||||||
|
@ -889,12 +889,12 @@ int kernel_matches_signature(EngineState *s, const char *sig, int argc, reg_t *a
|
||||||
int type = determine_reg_type(s, *argv, *sig & KSIG_ALLOW_INV);
|
int type = determine_reg_type(s, *argv, *sig & KSIG_ALLOW_INV);
|
||||||
|
|
||||||
if (!type) {
|
if (!type) {
|
||||||
sciprintf("[KERN] Could not determine type of ref "PREG"; failing signature check\n", PRINT_REG(*argv));
|
sciprintf("[KERN] Could not determine type of ref %04x:%04x; failing signature check\n", PRINT_REG(*argv));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type & KSIG_INVALID) {
|
if (type & KSIG_INVALID) {
|
||||||
sciprintf("[KERN] ref "PREG" was determined to be a %s, but the reference itself is invalid\n",
|
sciprintf("[KERN] ref %04x:%04x was determined to be a %s, but the reference itself is invalid\n",
|
||||||
PRINT_REG(*argv), kernel_argtype_description(type));
|
PRINT_REG(*argv), kernel_argtype_description(type));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -920,12 +920,12 @@ static void *_kernel_dereference_pointer(EngineState *s, reg_t pointer, int entr
|
||||||
void *retval = s->seg_manager->dereference(pointer, &maxsize);
|
void *retval = s->seg_manager->dereference(pointer, &maxsize);
|
||||||
|
|
||||||
if (pointer.offset & (align - 1)) {
|
if (pointer.offset & (align - 1)) {
|
||||||
warning("Unaligned pointer read: "PREG" expected with %d alignment", PRINT_REG(pointer), align);
|
warning("Unaligned pointer read: %04x:%04x expected with %d alignment", PRINT_REG(pointer), align);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entries > maxsize) {
|
if (entries > maxsize) {
|
||||||
warning("Trying to dereference pointer "PREG" beyond end of segment", PRINT_REG(pointer));
|
warning("Trying to dereference pointer %04x:%04x beyond end of segment", PRINT_REG(pointer));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
return retval;
|
return retval;
|
||||||
|
|
|
@ -224,7 +224,7 @@ void graph_restore_box(EngineState *s, reg_t handle) {
|
||||||
ptr = (gfxw_snapshot_t **)kmem(s, handle);
|
ptr = (gfxw_snapshot_t **)kmem(s, handle);
|
||||||
|
|
||||||
if (!ptr) {
|
if (!ptr) {
|
||||||
warning("Attempt to restore invalid handle "PREG, PRINT_REG(handle));
|
warning("Attempt to restore invalid handle %04x:%04x", PRINT_REG(handle));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -254,7 +254,7 @@ void graph_restore_box(EngineState *s, reg_t handle) {
|
||||||
|
|
||||||
|
|
||||||
if (!ptr) {
|
if (!ptr) {
|
||||||
error("Attempt to restore invalid snaphot with handle "PREG, PRINT_REG(handle));
|
error("Attempt to restore invalid snaphot with handle %04x:%04x", PRINT_REG(handle));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -744,7 +744,7 @@ static int collides_with(EngineState *s, Common::Rect area, reg_t other_obj, int
|
||||||
if (other_area.left >= 320 || other_area.top >= 190 || area.right >= 320 || area.bottom >= 190)
|
if (other_area.left >= 320 || other_area.top >= 190 || area.right >= 320 || area.bottom >= 190)
|
||||||
return 0; // Out of scope
|
return 0; // Out of scope
|
||||||
|
|
||||||
SCIkdebug(SCIkBRESEN, "OtherSignal=%04x, z=%04x obj="PREG"\n", other_signal, (other_signal & view_mask), PRINT_REG(other_obj));
|
SCIkdebug(SCIkBRESEN, "OtherSignal=%04x, z=%04x obj=%04x:%04x\n", other_signal, (other_signal & view_mask), PRINT_REG(other_obj));
|
||||||
|
|
||||||
if ((other_signal & (view_mask)) == 0) {
|
if ((other_signal & (view_mask)) == 0) {
|
||||||
// check whether the other object ignores actors
|
// check whether the other object ignores actors
|
||||||
|
@ -782,7 +782,7 @@ reg_t kCanBeHere(EngineState *s, int funct_nr, int argc, reg_t * argv) {
|
||||||
zone = gfx_rect(abs_zone.left + port->zone.x, abs_zone.top + port->zone.y, abs_zone.width(), abs_zone.height());
|
zone = gfx_rect(abs_zone.left + port->zone.x, abs_zone.top + port->zone.y, abs_zone.width(), abs_zone.height());
|
||||||
|
|
||||||
signal = GET_SEL32V(obj, signal);
|
signal = GET_SEL32V(obj, signal);
|
||||||
SCIkdebug(SCIkBRESEN, "Checking collision: (%d,%d) to (%d,%d) ([%d..%d]x[%d..%d]), obj="PREG", sig=%04x, cliplist="PREG"\n",
|
SCIkdebug(SCIkBRESEN, "Checking collision: (%d,%d) to (%d,%d) ([%d..%d]x[%d..%d]), obj=%04x:%04x, sig=%04x, cliplist=%04x:%04x\n",
|
||||||
GFX_PRINT_RECT(zone), abs_zone.left, abs_zone.right, abs_zone.top, abs_zone.bottom,
|
GFX_PRINT_RECT(zone), abs_zone.left, abs_zone.right, abs_zone.top, abs_zone.bottom,
|
||||||
PRINT_REG(obj), signal, PRINT_REG(cliplist_ref));
|
PRINT_REG(obj), signal, PRINT_REG(cliplist_ref));
|
||||||
|
|
||||||
|
@ -831,11 +831,11 @@ reg_t kCanBeHere(EngineState *s, int funct_nr, int argc, reg_t * argv) {
|
||||||
|
|
||||||
while (node) { // Check each object in the list against our bounding rectangle
|
while (node) { // Check each object in the list against our bounding rectangle
|
||||||
reg_t other_obj = node->value;
|
reg_t other_obj = node->value;
|
||||||
SCIkdebug(SCIkBRESEN, " comparing against "PREG"\n", PRINT_REG(other_obj));
|
SCIkdebug(SCIkBRESEN, " comparing against %04x:%04x\n", PRINT_REG(other_obj));
|
||||||
|
|
||||||
if (!is_object(s, other_obj)) {
|
if (!is_object(s, other_obj)) {
|
||||||
warning("CanBeHere() cliplist contains non-object "PREG, PRINT_REG(other_obj));
|
warning("CanBeHere() cliplist contains non-object %04x:%04x", PRINT_REG(other_obj));
|
||||||
} else if (!REG_EQ(other_obj, obj)) { // Clipping against yourself is not recommended
|
} else if (other_obj != obj) { // Clipping against yourself is not recommended
|
||||||
|
|
||||||
if (collides_with(s, abs_zone, other_obj, 0, GASEOUS_VIEW_MASK_PASSIVE, funct_nr, argc, argv)) {
|
if (collides_with(s, abs_zone, other_obj, 0, GASEOUS_VIEW_MASK_PASSIVE, funct_nr, argc, argv)) {
|
||||||
SCIkdebug(SCIkBRESEN, " -> %04x\n", retval);
|
SCIkdebug(SCIkBRESEN, " -> %04x\n", retval);
|
||||||
|
@ -1102,7 +1102,7 @@ Common::Rect set_base(EngineState *s, reg_t object) {
|
||||||
if (loop != oldloop) {
|
if (loop != oldloop) {
|
||||||
loop = 0;
|
loop = 0;
|
||||||
PUT_SEL32V(object, loop, 0);
|
PUT_SEL32V(object, loop, 0);
|
||||||
SCIkdebug(SCIkGRAPHICS, "Resetting loop for "PREG"!\n", PRINT_REG(object));
|
SCIkdebug(SCIkGRAPHICS, "Resetting loop for %04x:%04x!\n", PRINT_REG(object));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cel != oldcel) {
|
if (cel != oldcel) {
|
||||||
|
@ -1330,7 +1330,7 @@ static void _k_draw_control(EngineState *s, reg_t obj, int inverse);
|
||||||
|
|
||||||
static void _k_disable_delete_for_now(EngineState *s, reg_t obj) {
|
static void _k_disable_delete_for_now(EngineState *s, reg_t obj) {
|
||||||
reg_t text_pos = GET_SEL32(obj, text);
|
reg_t text_pos = GET_SEL32(obj, text);
|
||||||
char *text = IS_NULL_REG(text_pos) ? NULL : (char *)s->seg_manager->dereference(text_pos, NULL);
|
char *text = text_pos.isNull() ? NULL : (char *)s->seg_manager->dereference(text_pos, NULL);
|
||||||
int type = GET_SEL32V(obj, type);
|
int type = GET_SEL32V(obj, type);
|
||||||
int state = GET_SEL32V(obj, state);
|
int state = GET_SEL32V(obj, state);
|
||||||
|
|
||||||
|
@ -1423,11 +1423,11 @@ reg_t kEditControl(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
int textlen;
|
int textlen;
|
||||||
|
|
||||||
if (!text) {
|
if (!text) {
|
||||||
warning("Could not draw control: "PREG" does not reference text", PRINT_REG(text_pos));
|
warning("Could not draw control: %04x:%04x does not reference text", PRINT_REG(text_pos));
|
||||||
return s->r_acc;
|
return s->r_acc;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (REG_EQ(text_pos, s->save_dir_copy)) {
|
if (text_pos == s->save_dir_copy) {
|
||||||
max = MAX_SAVE_DIR_SIZE - 1;
|
max = MAX_SAVE_DIR_SIZE - 1;
|
||||||
display_offset = s->save_dir_edit_offset;
|
display_offset = s->save_dir_edit_offset;
|
||||||
}
|
}
|
||||||
|
@ -1544,7 +1544,7 @@ reg_t kEditControl(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
if (max_displayed < max)
|
if (max_displayed < max)
|
||||||
update_cursor_limits(&display_offset, &cursor, max_displayed);
|
update_cursor_limits(&display_offset, &cursor, max_displayed);
|
||||||
|
|
||||||
if (REG_EQ(text_pos, s->save_dir_copy))
|
if (text_pos == s->save_dir_copy)
|
||||||
s->save_dir_edit_offset = display_offset;
|
s->save_dir_edit_offset = display_offset;
|
||||||
|
|
||||||
cursor -= display_offset;
|
cursor -= display_offset;
|
||||||
|
@ -1588,7 +1588,7 @@ static void _k_draw_control(EngineState *s, reg_t obj, int inverse) {
|
||||||
|
|
||||||
int font_nr = GET_SEL32V(obj, font);
|
int font_nr = GET_SEL32V(obj, font);
|
||||||
reg_t text_pos = GET_SEL32(obj, text);
|
reg_t text_pos = GET_SEL32(obj, text);
|
||||||
char *text = IS_NULL_REG(text_pos) ? NULL : (char *)s->seg_manager->dereference(text_pos, NULL);
|
char *text = text_pos.isNull() ? NULL : (char *)s->seg_manager->dereference(text_pos, NULL);
|
||||||
int view = GET_SEL32V(obj, view);
|
int view = GET_SEL32V(obj, view);
|
||||||
int cel = sign_extend_byte(GET_SEL32V(obj, cel));
|
int cel = sign_extend_byte(GET_SEL32V(obj, cel));
|
||||||
int loop = sign_extend_byte(GET_SEL32V(obj, loop));
|
int loop = sign_extend_byte(GET_SEL32V(obj, loop));
|
||||||
|
@ -1599,13 +1599,13 @@ static void _k_draw_control(EngineState *s, reg_t obj, int inverse) {
|
||||||
int cursor;
|
int cursor;
|
||||||
int max;
|
int max;
|
||||||
|
|
||||||
if (REG_EQ(text_pos, s->save_dir_copy)) {
|
if (text_pos == s->save_dir_copy) {
|
||||||
SCIkdebug(SCIkGRAPHICS, "Displaying the save_dir copy\n");
|
SCIkdebug(SCIkGRAPHICS, "Displaying the save_dir copy\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case K_CONTROL_BUTTON:
|
case K_CONTROL_BUTTON:
|
||||||
SCIkdebug(SCIkGRAPHICS, "drawing button "PREG" to %d,%d\n", PRINT_REG(obj), x, y);
|
SCIkdebug(SCIkGRAPHICS, "drawing button %04x:%04x to %d,%d\n", PRINT_REG(obj), x, y);
|
||||||
ADD_TO_CURRENT_PICTURE_PORT(sciw_new_button_control(s->port, obj, area, text, font_nr,
|
ADD_TO_CURRENT_PICTURE_PORT(sciw_new_button_control(s->port, obj, area, text, font_nr,
|
||||||
(int8)(state & kControlStateFramed), (int8)inverse, (int8)(state & kControlStateDisabled)));
|
(int8)(state & kControlStateFramed), (int8)inverse, (int8)(state & kControlStateDisabled)));
|
||||||
break;
|
break;
|
||||||
|
@ -1613,14 +1613,14 @@ static void _k_draw_control(EngineState *s, reg_t obj, int inverse) {
|
||||||
case K_CONTROL_TEXT:
|
case K_CONTROL_TEXT:
|
||||||
mode = (gfx_alignment_t) GET_SEL32V(obj, mode);
|
mode = (gfx_alignment_t) GET_SEL32V(obj, mode);
|
||||||
|
|
||||||
SCIkdebug(SCIkGRAPHICS, "drawing text "PREG" to %d,%d, mode=%d\n", PRINT_REG(obj), x, y, mode);
|
SCIkdebug(SCIkGRAPHICS, "drawing text %04x:%04x to %d,%d, mode=%d\n", PRINT_REG(obj), x, y, mode);
|
||||||
|
|
||||||
ADD_TO_CURRENT_PICTURE_PORT(sciw_new_text_control(s->port, obj, area, text, font_nr, mode,
|
ADD_TO_CURRENT_PICTURE_PORT(sciw_new_text_control(s->port, obj, area, text, font_nr, mode,
|
||||||
(int8)(!!(state & kControlStateDitherFramed)), (int8)inverse));
|
(int8)(!!(state & kControlStateDitherFramed)), (int8)inverse));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case K_CONTROL_EDIT:
|
case K_CONTROL_EDIT:
|
||||||
SCIkdebug(SCIkGRAPHICS, "drawing edit control "PREG" to %d,%d\n", PRINT_REG(obj), x, y);
|
SCIkdebug(SCIkGRAPHICS, "drawing edit control %04x:%04x to %d,%d\n", PRINT_REG(obj), x, y);
|
||||||
|
|
||||||
max = GET_SEL32V(obj, max);
|
max = GET_SEL32V(obj, max);
|
||||||
cursor = GET_SEL32V(obj, cursor);
|
cursor = GET_SEL32V(obj, cursor);
|
||||||
|
@ -1628,7 +1628,7 @@ static void _k_draw_control(EngineState *s, reg_t obj, int inverse) {
|
||||||
if (cursor > (signed)strlen(text))
|
if (cursor > (signed)strlen(text))
|
||||||
cursor = strlen(text);
|
cursor = strlen(text);
|
||||||
|
|
||||||
if (REG_EQ(text_pos, s->save_dir_copy))
|
if (text_pos == s->save_dir_copy)
|
||||||
update_cursor_limits(&s->save_dir_edit_offset, &cursor, max);
|
update_cursor_limits(&s->save_dir_edit_offset, &cursor, max);
|
||||||
|
|
||||||
update_cursor_limits(&s->save_dir_edit_offset, &cursor, max);
|
update_cursor_limits(&s->save_dir_edit_offset, &cursor, max);
|
||||||
|
@ -1637,7 +1637,7 @@ static void _k_draw_control(EngineState *s, reg_t obj, int inverse) {
|
||||||
|
|
||||||
case K_CONTROL_ICON:
|
case K_CONTROL_ICON:
|
||||||
|
|
||||||
SCIkdebug(SCIkGRAPHICS, "drawing icon control "PREG" to %d,%d\n", PRINT_REG(obj), x, y - 1);
|
SCIkdebug(SCIkGRAPHICS, "drawing icon control %04x:%04x to %d,%d\n", PRINT_REG(obj), x, y - 1);
|
||||||
|
|
||||||
ADD_TO_CURRENT_PICTURE_PORT(sciw_new_icon_control(s->port, obj, area, view, loop, cel,
|
ADD_TO_CURRENT_PICTURE_PORT(sciw_new_icon_control(s->port, obj, area, view, loop, cel,
|
||||||
(int8)(state & kControlStateFramed), (int8)inverse));
|
(int8)(state & kControlStateFramed), (int8)inverse));
|
||||||
|
@ -1688,7 +1688,7 @@ static void _k_draw_control(EngineState *s, reg_t obj, int inverse) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
warning("Unknown control type: %d at "PREG", at (%d, %d) size %d x %d",
|
warning("Unknown control type: %d at %04x:%04x, at (%d, %d) size %d x %d",
|
||||||
type, PRINT_REG(obj), x, y, xl, yl);
|
type, PRINT_REG(obj), x, y, xl, yl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1718,7 +1718,7 @@ static void draw_obj_to_control_map(EngineState *s, GfxDynView *view) {
|
||||||
reg_t obj = make_reg(view->_ID, view->_subID);
|
reg_t obj = make_reg(view->_ID, view->_subID);
|
||||||
|
|
||||||
if (!is_object(s, obj))
|
if (!is_object(s, obj))
|
||||||
warning("View %d does not contain valid object reference "PREG"", view->_ID, PRINT_REG(obj));
|
warning("View %d does not contain valid object reference %04x:%04x", view->_ID, PRINT_REG(obj));
|
||||||
|
|
||||||
if (!(view->signalp && (((reg_t *)view->signalp)->offset & _K_VIEW_SIG_FLAG_IGNORE_ACTOR))) {
|
if (!(view->signalp && (((reg_t *)view->signalp)->offset & _K_VIEW_SIG_FLAG_IGNORE_ACTOR))) {
|
||||||
Common::Rect abs_zone = get_nsrect(s, make_reg(view->_ID, view->_subID), 1);
|
Common::Rect abs_zone = get_nsrect(s, make_reg(view->_ID, view->_subID), 1);
|
||||||
|
@ -1756,19 +1756,19 @@ static void _k_view_list_do_postdraw(EngineState *s, GfxList *list) {
|
||||||
temp = GET_SEL32V(obj, nsBottom);
|
temp = GET_SEL32V(obj, nsBottom);
|
||||||
PUT_SEL32V(obj, lsBottom, temp);
|
PUT_SEL32V(obj, lsBottom, temp);
|
||||||
#ifdef DEBUG_LSRECT
|
#ifdef DEBUG_LSRECT
|
||||||
fprintf(stderr, "lsRected "PREG"\n", PRINT_REG(obj));
|
fprintf(stderr, "lsRected %04x:%04x\n", PRINT_REG(obj));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#ifdef DEBUG_LSRECT
|
#ifdef DEBUG_LSRECT
|
||||||
else
|
else
|
||||||
fprintf(stderr, "Not lsRecting "PREG" because %d\n", PRINT_REG(obj), lookup_selector(s, obj, s->selector_map.nsBottom, NULL, NULL));
|
fprintf(stderr, "Not lsRecting %04x:%04x because %d\n", PRINT_REG(obj), lookup_selector(s, obj, s->selector_map.nsBottom, NULL, NULL));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (widget->signal & _K_VIEW_SIG_FLAG_HIDDEN)
|
if (widget->signal & _K_VIEW_SIG_FLAG_HIDDEN)
|
||||||
widget->signal |= _K_VIEW_SIG_FLAG_REMOVE;
|
widget->signal |= _K_VIEW_SIG_FLAG_REMOVE;
|
||||||
}
|
}
|
||||||
#ifdef DEBUG_LSRECT
|
#ifdef DEBUG_LSRECT
|
||||||
fprintf(stderr, "obj "PREG" has pflags %x\n", PRINT_REG(obj), (widget->signal & (_K_VIEW_SIG_FLAG_REMOVE | _K_VIEW_SIG_FLAG_NO_UPDATE)));
|
fprintf(stderr, "obj %04x:%04x has pflags %x\n", PRINT_REG(obj), (widget->signal & (_K_VIEW_SIG_FLAG_REMOVE | _K_VIEW_SIG_FLAG_NO_UPDATE)));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (widget->signalp) {
|
if (widget->signalp) {
|
||||||
|
@ -1820,7 +1820,7 @@ int _k_view_list_dispose_loop(EngineState *s, List *list, GfxDynView *widget, in
|
||||||
reg_t under_bits = NULL_REG;
|
reg_t under_bits = NULL_REG;
|
||||||
|
|
||||||
if (!is_object(s, obj)) {
|
if (!is_object(s, obj)) {
|
||||||
error("Non-object "PREG" present in view list during delete time\n", PRINT_REG(obj));
|
error("Non-object %04x:%04x present in view list during delete time\n", PRINT_REG(obj));
|
||||||
obj = NULL_REG;
|
obj = NULL_REG;
|
||||||
} else
|
} else
|
||||||
if (widget->under_bitsp) { // Is there a bg picture left to clean?
|
if (widget->under_bitsp) { // Is there a bg picture left to clean?
|
||||||
|
@ -1830,7 +1830,7 @@ int _k_view_list_dispose_loop(EngineState *s, List *list, GfxDynView *widget, in
|
||||||
if (!kfree(s, mem_handle)) {
|
if (!kfree(s, mem_handle)) {
|
||||||
*((reg_t*)(widget->under_bitsp)) = make_reg(0, widget->under_bits = 0);
|
*((reg_t*)(widget->under_bitsp)) = make_reg(0, widget->under_bits = 0);
|
||||||
} else {
|
} else {
|
||||||
warning("Treating viewobj "PREG" as no longer present", PRINT_REG(obj));
|
warning("Treating viewobj %04x:%04x as no longer present", PRINT_REG(obj));
|
||||||
obj = NULL_REG;
|
obj = NULL_REG;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1838,9 +1838,9 @@ int _k_view_list_dispose_loop(EngineState *s, List *list, GfxDynView *widget, in
|
||||||
|
|
||||||
if (is_object(s, obj)) {
|
if (is_object(s, obj)) {
|
||||||
if (invoke_selector(INV_SEL(obj, delete_, 1), 0))
|
if (invoke_selector(INV_SEL(obj, delete_, 1), 0))
|
||||||
warning("Object at "PREG" requested deletion, but does not have a delete funcselector", PRINT_REG(obj));
|
warning("Object at %04x:%04x requested deletion, but does not have a delete funcselector", PRINT_REG(obj));
|
||||||
if (_k_animate_ran) {
|
if (_k_animate_ran) {
|
||||||
warning("Object at "PREG" invoked kAnimate() during deletion", PRINT_REG(obj));
|
warning("Object at %04x:%04x invoked kAnimate() during deletion", PRINT_REG(obj));
|
||||||
return dropped;
|
return dropped;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1852,10 +1852,10 @@ int _k_view_list_dispose_loop(EngineState *s, List *list, GfxDynView *widget, in
|
||||||
graph_restore_box(s, under_bits);
|
graph_restore_box(s, under_bits);
|
||||||
}
|
}
|
||||||
|
|
||||||
SCIkdebug(SCIkGRAPHICS, "Freeing "PREG" with signal=%04x\n", PRINT_REG(obj), signal);
|
SCIkdebug(SCIkGRAPHICS, "Freeing %04x:%04x with signal=%04x\n", PRINT_REG(obj), signal);
|
||||||
|
|
||||||
if (!(signal & _K_VIEW_SIG_FLAG_HIDDEN)) {
|
if (!(signal & _K_VIEW_SIG_FLAG_HIDDEN)) {
|
||||||
SCIkdebug(SCIkGRAPHICS, "Adding view at "PREG" to background\n", PRINT_REG(obj));
|
SCIkdebug(SCIkGRAPHICS, "Adding view at %04x:%04x to background\n", PRINT_REG(obj));
|
||||||
if (!(gfxw_remove_id(widget->_parent, widget->_ID, widget->_subID) == widget)) {
|
if (!(gfxw_remove_id(widget->_parent, widget->_ID, widget->_subID) == widget)) {
|
||||||
error("Attempt to remove view with ID %x:%x from list failed!\n", widget->_ID, widget->_subID);
|
error("Attempt to remove view with ID %x:%x from list failed!\n", widget->_ID, widget->_subID);
|
||||||
BREAKPOINT();
|
BREAKPOINT();
|
||||||
|
@ -1868,7 +1868,7 @@ int _k_view_list_dispose_loop(EngineState *s, List *list, GfxDynView *widget, in
|
||||||
widget->draw_bounds.x += s->dyn_views->_bounds.x - widget->_parent->_bounds.x;
|
widget->draw_bounds.x += s->dyn_views->_bounds.x - widget->_parent->_bounds.x;
|
||||||
dropped = 1;
|
dropped = 1;
|
||||||
} else {
|
} else {
|
||||||
SCIkdebug(SCIkGRAPHICS, "Deleting view at "PREG"\n", PRINT_REG(obj));
|
SCIkdebug(SCIkGRAPHICS, "Deleting view at %04x:%04x\n", PRINT_REG(obj));
|
||||||
widget->_flags |= GFXW_FLAG_VISIBLE;
|
widget->_flags |= GFXW_FLAG_VISIBLE;
|
||||||
gfxw_annihilate(widget);
|
gfxw_annihilate(widget);
|
||||||
return -1; // restart: Done in Animate()
|
return -1; // restart: Done in Animate()
|
||||||
|
@ -1898,7 +1898,7 @@ static GfxDynView *_k_make_dynview_obj(EngineState *s, reg_t obj, int options, i
|
||||||
int z;
|
int z;
|
||||||
GfxDynView *widget;
|
GfxDynView *widget;
|
||||||
|
|
||||||
SCIkdebug(SCIkGRAPHICS, " - Adding "PREG"\n", PRINT_REG(obj));
|
SCIkdebug(SCIkGRAPHICS, " - Adding %04x:%04x\n", PRINT_REG(obj));
|
||||||
|
|
||||||
obj = obj;
|
obj = obj;
|
||||||
|
|
||||||
|
@ -1938,14 +1938,14 @@ static GfxDynView *_k_make_dynview_obj(EngineState *s, reg_t obj, int options, i
|
||||||
if (lookup_selector(s, obj, s->selector_map.underBits, &(under_bitsp), NULL) != kSelectorVariable) {
|
if (lookup_selector(s, obj, s->selector_map.underBits, &(under_bitsp), NULL) != kSelectorVariable) {
|
||||||
under_bitsp = NULL;
|
under_bitsp = NULL;
|
||||||
under_bits = NULL_REG;
|
under_bits = NULL_REG;
|
||||||
SCIkdebug(SCIkGRAPHICS, "Object at "PREG" has no underBits\n", PRINT_REG(obj));
|
SCIkdebug(SCIkGRAPHICS, "Object at %04x:%04x has no underBits\n", PRINT_REG(obj));
|
||||||
} else
|
} else
|
||||||
under_bits = *((reg_t *)under_bitsp);
|
under_bits = *((reg_t *)under_bitsp);
|
||||||
|
|
||||||
if (lookup_selector(s, obj, s->selector_map.signal, &(signalp), NULL) != kSelectorVariable) {
|
if (lookup_selector(s, obj, s->selector_map.signal, &(signalp), NULL) != kSelectorVariable) {
|
||||||
signalp = NULL;
|
signalp = NULL;
|
||||||
signal = 0;
|
signal = 0;
|
||||||
SCIkdebug(SCIkGRAPHICS, "Object at "PREG" has no signal selector\n", PRINT_REG(obj));
|
SCIkdebug(SCIkGRAPHICS, "Object at %04x:%04x has no signal selector\n", PRINT_REG(obj));
|
||||||
} else {
|
} else {
|
||||||
signal = signalp->offset;
|
signal = signalp->offset;
|
||||||
SCIkdebug(SCIkGRAPHICS, " with signal = %04x\n", signal);
|
SCIkdebug(SCIkGRAPHICS, " with signal = %04x\n", signal);
|
||||||
|
@ -1999,7 +1999,7 @@ static void _k_make_view_list(EngineState *s, GfxList **widget_list, List *list,
|
||||||
|
|
||||||
if (!(signal & _K_VIEW_SIG_FLAG_FROZEN)) {
|
if (!(signal & _K_VIEW_SIG_FLAG_FROZEN)) {
|
||||||
|
|
||||||
SCIkdebug(SCIkGRAPHICS, " invoking "PREG"::doit()\n", PRINT_REG(obj));
|
SCIkdebug(SCIkGRAPHICS, " invoking %04x:%04x::doit()\n", PRINT_REG(obj));
|
||||||
invoke_selector(INV_SEL(obj, doit, 1), 0); // Call obj::doit() if neccessary
|
invoke_selector(INV_SEL(obj, doit, 1), 0); // Call obj::doit() if neccessary
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2064,7 +2064,7 @@ static void _k_prepare_view_list(EngineState *s, GfxList *list, int options) {
|
||||||
// their clipped nsRect drawn to the control map
|
// their clipped nsRect drawn to the control map
|
||||||
if (view->signal & _K_VIEW_SIG_FLAG_STOP_UPDATE) {
|
if (view->signal & _K_VIEW_SIG_FLAG_STOP_UPDATE) {
|
||||||
view->signal |= _K_VIEW_SIG_FLAG_STOPUPD;
|
view->signal |= _K_VIEW_SIG_FLAG_STOPUPD;
|
||||||
SCIkdebug(SCIkGRAPHICS, "Setting magic STOP_UPD for "PREG"\n", PRINT_REG(obj));
|
SCIkdebug(SCIkGRAPHICS, "Setting magic STOP_UPD for %04x:%04x\n", PRINT_REG(obj));
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((options & _K_MAKE_VIEW_LIST_DRAW_TO_CONTROL_MAP))
|
if ((options & _K_MAKE_VIEW_LIST_DRAW_TO_CONTROL_MAP))
|
||||||
|
@ -2098,12 +2098,12 @@ static void _k_prepare_view_list(EngineState *s, GfxList *list, int options) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SCIkdebug(SCIkGRAPHICS, " dv["PREG"]: signal %04x -> %04x\n", PRINT_REG(obj), oldsignal, view->signal);
|
SCIkdebug(SCIkGRAPHICS, " dv[%04x:%04x]: signal %04x -> %04x\n", PRINT_REG(obj), oldsignal, view->signal);
|
||||||
|
|
||||||
// Never happens
|
// Never happens
|
||||||
/* if (view->signal & 0) {
|
/* if (view->signal & 0) {
|
||||||
view->signal &= ~_K_VIEW_SIG_FLAG_STOPUPD;
|
view->signal &= ~_K_VIEW_SIG_FLAG_STOPUPD;
|
||||||
fprintf(stderr, "Unsetting magic StopUpd for view "PREG"\n", PRINT_REG(obj));
|
fprintf(stderr, "Unsetting magic StopUpd for view %04x:%04x\n", PRINT_REG(obj));
|
||||||
} */
|
} */
|
||||||
|
|
||||||
view = (GfxDynView *)view->_next;
|
view = (GfxDynView *)view->_next;
|
||||||
|
@ -2162,7 +2162,7 @@ static void _k_raise_topmost_in_view_list(EngineState *s, GfxList *list, GfxDynV
|
||||||
|
|
||||||
// step 11
|
// step 11
|
||||||
if ((view->signal & (_K_VIEW_SIG_FLAG_NO_UPDATE | _K_VIEW_SIG_FLAG_HIDDEN | _K_VIEW_SIG_FLAG_ALWAYS_UPDATE)) == 0) {
|
if ((view->signal & (_K_VIEW_SIG_FLAG_NO_UPDATE | _K_VIEW_SIG_FLAG_HIDDEN | _K_VIEW_SIG_FLAG_ALWAYS_UPDATE)) == 0) {
|
||||||
SCIkdebug(SCIkGRAPHICS, "Forcing precedence 2 at ["PREG"] with %04x\n", PRINT_REG(make_reg(view->_ID, view->_subID)), view->signal);
|
SCIkdebug(SCIkGRAPHICS, "Forcing precedence 2 at [%04x:%04x] with %04x\n", PRINT_REG(make_reg(view->_ID, view->_subID)), view->signal);
|
||||||
view->force_precedence = 2;
|
view->force_precedence = 2;
|
||||||
|
|
||||||
if ((view->signal & (_K_VIEW_SIG_FLAG_REMOVE | _K_VIEW_SIG_FLAG_HIDDEN)) == _K_VIEW_SIG_FLAG_REMOVE) {
|
if ((view->signal & (_K_VIEW_SIG_FLAG_REMOVE | _K_VIEW_SIG_FLAG_HIDDEN)) == _K_VIEW_SIG_FLAG_REMOVE) {
|
||||||
|
@ -2187,7 +2187,7 @@ static void _k_redraw_view_list(EngineState *s, GfxList *list) {
|
||||||
GfxDynView *view = (GfxDynView *) list->_contents;
|
GfxDynView *view = (GfxDynView *) list->_contents;
|
||||||
while (view) {
|
while (view) {
|
||||||
|
|
||||||
SCIkdebug(SCIkGRAPHICS, " dv["PREG"]: signal %04x\n", make_reg(view->_ID, view->_subID), view->signal);
|
SCIkdebug(SCIkGRAPHICS, " dv[%04x:%04x]: signal %04x\n", make_reg(view->_ID, view->_subID), view->signal);
|
||||||
|
|
||||||
// step 1 of subalgorithm
|
// step 1 of subalgorithm
|
||||||
if (view->signal & _K_VIEW_SIG_FLAG_NO_UPDATE) {
|
if (view->signal & _K_VIEW_SIG_FLAG_NO_UPDATE) {
|
||||||
|
@ -2313,7 +2313,7 @@ reg_t kAddToPic(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
List *list;
|
List *list;
|
||||||
|
|
||||||
if (!list_ref.segment) {
|
if (!list_ref.segment) {
|
||||||
warning("Attempt to AddToPic single non-list: "PREG"", PRINT_REG(list_ref));
|
warning("Attempt to AddToPic single non-list: %04x:%04x", PRINT_REG(list_ref));
|
||||||
return s->r_acc;
|
return s->r_acc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3174,7 +3174,7 @@ reg_t kDisplay(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!text) {
|
if (!text) {
|
||||||
error("Display with invalid reference "PREG"!\n", PRINT_REG(textp));
|
error("Display with invalid reference %04x:%04x!\n", PRINT_REG(textp));
|
||||||
return NULL_REG;
|
return NULL_REG;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3310,7 +3310,7 @@ reg_t kDisplay(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
s->r_acc = graph_save_box(s, save_area);
|
s->r_acc = graph_save_box(s, save_area);
|
||||||
text_handle->_serial++; // This is evil!
|
text_handle->_serial++; // This is evil!
|
||||||
|
|
||||||
SCIkdebug(SCIkGRAPHICS, "Saving (%d, %d) size (%d, %d) as "PREG"\n", save_area.x, save_area.y, save_area.width, save_area.height, s->r_acc);
|
SCIkdebug(SCIkGRAPHICS, "Saving (%d, %d) size (%d, %d) as %04x:%04x\n", save_area.x, save_area.y, save_area.width, save_area.height, s->r_acc);
|
||||||
}
|
}
|
||||||
|
|
||||||
SCIkdebug(SCIkGRAPHICS, "Display: Commiting text '%s'\n", text);
|
SCIkdebug(SCIkGRAPHICS, "Display: Commiting text '%s'\n", text);
|
||||||
|
|
|
@ -36,16 +36,16 @@ Node *lookup_node(EngineState *s, reg_t addr) {
|
||||||
if (!mobj) {
|
if (!mobj) {
|
||||||
// FIXME: This occurs right at the beginning of SQ4, when walking north from the first screen. It doesn't
|
// FIXME: This occurs right at the beginning of SQ4, when walking north from the first screen. It doesn't
|
||||||
// seem to have any apparent ill-effects, though, so it's been changed to non-fatal, for now
|
// seem to have any apparent ill-effects, though, so it's been changed to non-fatal, for now
|
||||||
//sciprintf("%s, L%d: Attempt to use non-node "PREG" as list node\n", __FILE__, __LINE__, PRINT_REG(addr));
|
//sciprintf("%s, L%d: Attempt to use non-node %04x:%04x as list node\n", __FILE__, __LINE__, PRINT_REG(addr));
|
||||||
//script_debug_flag = script_error_flag = 1;
|
//script_debug_flag = script_error_flag = 1;
|
||||||
warning("Attempt to use non-node "PREG" as list node", PRINT_REG(addr));
|
warning("Attempt to use non-node %04x:%04x as list node", PRINT_REG(addr));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
NodeTable *nt = (NodeTable *)mobj;
|
NodeTable *nt = (NodeTable *)mobj;
|
||||||
|
|
||||||
if (!nt->isValidEntry(addr.offset)) {
|
if (!nt->isValidEntry(addr.offset)) {
|
||||||
sciprintf("Attempt to use non-node "PREG" as list node\n", PRINT_REG(addr));
|
sciprintf("Attempt to use non-node %04x:%04x as list node\n", PRINT_REG(addr));
|
||||||
script_debug_flag = script_error_flag = 1;
|
script_debug_flag = script_error_flag = 1;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -57,7 +57,7 @@ List *lookup_list(EngineState *s, reg_t addr) {
|
||||||
MemObject *mobj = GET_SEGMENT(*s->seg_manager, addr.segment, MEM_OBJ_LISTS);
|
MemObject *mobj = GET_SEGMENT(*s->seg_manager, addr.segment, MEM_OBJ_LISTS);
|
||||||
|
|
||||||
if (!mobj) {
|
if (!mobj) {
|
||||||
sciprintf("Attempt to use non-list "PREG" as list\n", PRINT_REG(addr));
|
sciprintf("Attempt to use non-list %04x:%04x as list\n", PRINT_REG(addr));
|
||||||
script_debug_flag = script_error_flag = 1;
|
script_debug_flag = script_error_flag = 1;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -65,7 +65,7 @@ List *lookup_list(EngineState *s, reg_t addr) {
|
||||||
ListTable *lt = (ListTable *)mobj;
|
ListTable *lt = (ListTable *)mobj;
|
||||||
|
|
||||||
if (!lt->isValidEntry(addr.offset)) {
|
if (!lt->isValidEntry(addr.offset)) {
|
||||||
sciprintf("Attempt to use non-list "PREG" as list\n", PRINT_REG(addr));
|
sciprintf("Attempt to use non-list %04x:%04x as list\n", PRINT_REG(addr));
|
||||||
script_debug_flag = script_error_flag = 1;
|
script_debug_flag = script_error_flag = 1;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -90,13 +90,13 @@ static int sane_nodep(EngineState *s, reg_t addr) {
|
||||||
if (!node)
|
if (!node)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if ((have_prev) && !REG_EQ(node->pred, prev))
|
if ((have_prev) && node->pred != prev)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
prev = addr;
|
prev = addr;
|
||||||
addr = node->succ;
|
addr = node->succ;
|
||||||
have_prev = 1;
|
have_prev = 1;
|
||||||
} while (!IS_NULL_REG(addr));
|
} while (!addr.isNull());
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -105,9 +105,9 @@ int sane_listp(EngineState *s, reg_t addr) {
|
||||||
List *l = lookup_list(s, addr);
|
List *l = lookup_list(s, addr);
|
||||||
int empties = 0;
|
int empties = 0;
|
||||||
|
|
||||||
if (IS_NULL_REG(l->first))
|
if (l->first.isNull())
|
||||||
++empties;
|
++empties;
|
||||||
if (IS_NULL_REG(l->last))
|
if (l->last.isNull())
|
||||||
++empties;
|
++empties;
|
||||||
|
|
||||||
// Either none or both must be set
|
// Either none or both must be set
|
||||||
|
@ -123,10 +123,10 @@ int sane_listp(EngineState *s, reg_t addr) {
|
||||||
if (!node_a || !node_z)
|
if (!node_a || !node_z)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (!IS_NULL_REG(node_a->pred))
|
if (!node_a->pred.isNull())
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (!IS_NULL_REG(node_z->succ))
|
if (!node_z->succ.isNull())
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return sane_nodep(s, l->first);
|
return sane_nodep(s, l->first);
|
||||||
|
@ -141,7 +141,7 @@ reg_t kNewList(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
List *l;
|
List *l;
|
||||||
l = s->seg_manager->alloc_List(&listbase);
|
l = s->seg_manager->alloc_List(&listbase);
|
||||||
l->first = l->last = NULL_REG;
|
l->first = l->last = NULL_REG;
|
||||||
SCIkdebug(SCIkNODES, "New listbase at "PREG"\n", PRINT_REG(listbase));
|
SCIkdebug(SCIkNODES, "New listbase at %04x:%04x\n", PRINT_REG(listbase));
|
||||||
|
|
||||||
return listbase; // Return list base address
|
return listbase; // Return list base address
|
||||||
}
|
}
|
||||||
|
@ -151,17 +151,17 @@ reg_t kDisposeList(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
|
|
||||||
if (!l) {
|
if (!l) {
|
||||||
// FIXME: This should be an error, but it's turned to a warning for now
|
// FIXME: This should be an error, but it's turned to a warning for now
|
||||||
warning("Attempt to dispose non-list at "PREG"!\n", PRINT_REG(argv[0]));
|
warning("Attempt to dispose non-list at %04x:%04x!\n", PRINT_REG(argv[0]));
|
||||||
return NULL_REG;
|
return NULL_REG;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!sane_listp(s, argv[0]))
|
if (!sane_listp(s, argv[0]))
|
||||||
error("List at "PREG" is not sane anymore!\n", PRINT_REG(argv[0]));
|
error("List at %04x:%04x is not sane anymore!\n", PRINT_REG(argv[0]));
|
||||||
|
|
||||||
/* if (!IS_NULL_REG(l->first)) {
|
/* if (!l->first.isNull()) {
|
||||||
reg_t n_addr = l->first;
|
reg_t n_addr = l->first;
|
||||||
|
|
||||||
while (!IS_NULL_REG(n_addr)) { // Free all nodes
|
while (!n_addr.isNull()) { // Free all nodes
|
||||||
Node *n = lookup_node(s, n_addr);
|
Node *n = lookup_node(s, n_addr);
|
||||||
s->seg_manager->free_Node(n_addr);
|
s->seg_manager->free_Node(n_addr);
|
||||||
n_addr = n->succ;
|
n_addr = n->succ;
|
||||||
|
@ -192,18 +192,18 @@ reg_t _k_new_node(EngineState *s, reg_t value, reg_t key) {
|
||||||
reg_t kNewNode(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
reg_t kNewNode(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
s->r_acc = _k_new_node(s, argv[0], argv[1]);
|
s->r_acc = _k_new_node(s, argv[0], argv[1]);
|
||||||
|
|
||||||
SCIkdebug(SCIkNODES, "New nodebase at "PREG"\n", PRINT_REG(s->r_acc));
|
SCIkdebug(SCIkNODES, "New nodebase at %04x:%04x\n", PRINT_REG(s->r_acc));
|
||||||
|
|
||||||
return s->r_acc;
|
return s->r_acc;
|
||||||
}
|
}
|
||||||
|
|
||||||
reg_t kFirstNode(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
reg_t kFirstNode(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
if (IS_NULL_REG(argv[0]))
|
if (argv[0].isNull())
|
||||||
return NULL_REG;
|
return NULL_REG;
|
||||||
List *l = lookup_list(s, argv[0]);
|
List *l = lookup_list(s, argv[0]);
|
||||||
|
|
||||||
if (l && !sane_listp(s, argv[0]))
|
if (l && !sane_listp(s, argv[0]))
|
||||||
error("List at "PREG" is not sane anymore!\n", PRINT_REG(argv[0]));
|
error("List at %04x:%04x is not sane anymore!\n", PRINT_REG(argv[0]));
|
||||||
|
|
||||||
if (l)
|
if (l)
|
||||||
return l->first;
|
return l->first;
|
||||||
|
@ -215,7 +215,7 @@ reg_t kLastNode(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
List *l = lookup_list(s, argv[0]);
|
List *l = lookup_list(s, argv[0]);
|
||||||
|
|
||||||
if (l && !sane_listp(s, argv[0]))
|
if (l && !sane_listp(s, argv[0]))
|
||||||
error("List at "PREG" is not sane anymore!\n", PRINT_REG(argv[0]));
|
error("List at %04x:%04x is not sane anymore!\n", PRINT_REG(argv[0]));
|
||||||
|
|
||||||
if (l)
|
if (l)
|
||||||
return l->last;
|
return l->last;
|
||||||
|
@ -227,27 +227,27 @@ reg_t kEmptyList(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
List *l = lookup_list(s, argv[0]);
|
List *l = lookup_list(s, argv[0]);
|
||||||
|
|
||||||
if (!l || !sane_listp(s, argv[0]))
|
if (!l || !sane_listp(s, argv[0]))
|
||||||
error("List at "PREG" is invalid or not sane anymore!\n", PRINT_REG(argv[0]));
|
error("List at %04x:%04x is invalid or not sane anymore!\n", PRINT_REG(argv[0]));
|
||||||
|
|
||||||
return make_reg(0, ((l) ? IS_NULL_REG(l->first) : 0));
|
return make_reg(0, ((l) ? l->first.isNull() : 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
void _k_add_to_front(EngineState *s, reg_t listbase, reg_t nodebase) {
|
void _k_add_to_front(EngineState *s, reg_t listbase, reg_t nodebase) {
|
||||||
List *l = lookup_list(s, listbase);
|
List *l = lookup_list(s, listbase);
|
||||||
Node *new_n = lookup_node(s, nodebase);
|
Node *new_n = lookup_node(s, nodebase);
|
||||||
|
|
||||||
SCIkdebug(SCIkNODES, "Adding node "PREG" to end of list "PREG"\n", PRINT_REG(nodebase), PRINT_REG(listbase));
|
SCIkdebug(SCIkNODES, "Adding node %04x:%04x to end of list %04x:%04x\n", PRINT_REG(nodebase), PRINT_REG(listbase));
|
||||||
|
|
||||||
// FIXME: This should be an error, but it's turned to a warning for now
|
// FIXME: This should be an error, but it's turned to a warning for now
|
||||||
if (!new_n)
|
if (!new_n)
|
||||||
warning("Attempt to add non-node ("PREG") to list at "PREG"\n", PRINT_REG(nodebase), PRINT_REG(listbase));
|
warning("Attempt to add non-node (%04x:%04x) to list at %04x:%04x\n", PRINT_REG(nodebase), PRINT_REG(listbase));
|
||||||
if (!l || !sane_listp(s, listbase))
|
if (!l || !sane_listp(s, listbase))
|
||||||
error("List at "PREG" is not sane anymore!\n", PRINT_REG(listbase));
|
error("List at %04x:%04x is not sane anymore!\n", PRINT_REG(listbase));
|
||||||
|
|
||||||
new_n->succ = l->first;
|
new_n->succ = l->first;
|
||||||
new_n->pred = NULL_REG;
|
new_n->pred = NULL_REG;
|
||||||
// Set node to be the first and last node if it's the only node of the list
|
// Set node to be the first and last node if it's the only node of the list
|
||||||
if (IS_NULL_REG(l->first))
|
if (l->first.isNull())
|
||||||
l->last = nodebase;
|
l->last = nodebase;
|
||||||
else {
|
else {
|
||||||
Node *old_n = lookup_node(s, l->first);
|
Node *old_n = lookup_node(s, l->first);
|
||||||
|
@ -260,18 +260,18 @@ void _k_add_to_end(EngineState *s, reg_t listbase, reg_t nodebase) {
|
||||||
List *l = lookup_list(s, listbase);
|
List *l = lookup_list(s, listbase);
|
||||||
Node *new_n = lookup_node(s, nodebase);
|
Node *new_n = lookup_node(s, nodebase);
|
||||||
|
|
||||||
SCIkdebug(SCIkNODES, "Adding node "PREG" to end of list "PREG"\n", PRINT_REG(nodebase), PRINT_REG(listbase));
|
SCIkdebug(SCIkNODES, "Adding node %04x:%04x to end of list %04x:%04x\n", PRINT_REG(nodebase), PRINT_REG(listbase));
|
||||||
|
|
||||||
// FIXME: This should be an error, but it's turned to a warning for now
|
// FIXME: This should be an error, but it's turned to a warning for now
|
||||||
if (!new_n)
|
if (!new_n)
|
||||||
warning("Attempt to add non-node ("PREG") to list at "PREG"\n", PRINT_REG(nodebase), PRINT_REG(listbase));
|
warning("Attempt to add non-node (%04x:%04x) to list at %04x:%04x\n", PRINT_REG(nodebase), PRINT_REG(listbase));
|
||||||
if (!l || !sane_listp(s, listbase))
|
if (!l || !sane_listp(s, listbase))
|
||||||
error("List at "PREG" is not sane anymore!\n", PRINT_REG(listbase));
|
error("List at %04x:%04x is not sane anymore!\n", PRINT_REG(listbase));
|
||||||
|
|
||||||
new_n->succ = NULL_REG;
|
new_n->succ = NULL_REG;
|
||||||
new_n->pred = l->last;
|
new_n->pred = l->last;
|
||||||
// Set node to be the first and last node if it's the only node of the list
|
// Set node to be the first and last node if it's the only node of the list
|
||||||
if (IS_NULL_REG(l->last))
|
if (l->last.isNull())
|
||||||
l->first = nodebase;
|
l->first = nodebase;
|
||||||
else {
|
else {
|
||||||
Node *old_n = lookup_node(s, l->last);
|
Node *old_n = lookup_node(s, l->last);
|
||||||
|
@ -283,7 +283,7 @@ void _k_add_to_end(EngineState *s, reg_t listbase, reg_t nodebase) {
|
||||||
reg_t kNextNode(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
reg_t kNextNode(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
Node *n = lookup_node(s, argv[0]);
|
Node *n = lookup_node(s, argv[0]);
|
||||||
if (!sane_nodep(s, argv[0])) {
|
if (!sane_nodep(s, argv[0])) {
|
||||||
error("List node at "PREG" is not sane anymore!\n", PRINT_REG(argv[0]));
|
error("List node at %04x:%04x is not sane anymore!\n", PRINT_REG(argv[0]));
|
||||||
script_error_flag = script_debug_flag = 0;
|
script_error_flag = script_debug_flag = 0;
|
||||||
return NULL_REG;
|
return NULL_REG;
|
||||||
}
|
}
|
||||||
|
@ -294,7 +294,7 @@ reg_t kNextNode(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
reg_t kPrevNode(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
reg_t kPrevNode(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
Node *n = lookup_node(s, argv[0]);
|
Node *n = lookup_node(s, argv[0]);
|
||||||
if (!sane_nodep(s, argv[0]))
|
if (!sane_nodep(s, argv[0]))
|
||||||
error("List node at "PREG" is not sane anymore!\n", PRINT_REG(argv[0]));
|
error("List node at %04x:%04x is not sane anymore!\n", PRINT_REG(argv[0]));
|
||||||
|
|
||||||
return n->pred;
|
return n->pred;
|
||||||
}
|
}
|
||||||
|
@ -302,7 +302,7 @@ reg_t kPrevNode(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
reg_t kNodeValue(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
reg_t kNodeValue(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
Node *n = lookup_node(s, argv[0]);
|
Node *n = lookup_node(s, argv[0]);
|
||||||
if (!sane_nodep(s, argv[0])) {
|
if (!sane_nodep(s, argv[0])) {
|
||||||
error("List node at "PREG" is not sane", PRINT_REG(argv[0]));
|
error("List node at %04x:%04x is not sane", PRINT_REG(argv[0]));
|
||||||
script_debug_flag = script_error_flag = 0;
|
script_debug_flag = script_error_flag = 0;
|
||||||
return NULL_REG;
|
return NULL_REG;
|
||||||
}
|
}
|
||||||
|
@ -317,15 +317,15 @@ reg_t kAddToFront(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
|
|
||||||
reg_t kAddAfter(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
reg_t kAddAfter(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
List *l =lookup_list(s, argv[0]);
|
List *l =lookup_list(s, argv[0]);
|
||||||
Node *firstnode = IS_NULL_REG(argv[1]) ? NULL : lookup_node(s, argv[1]);
|
Node *firstnode = argv[1].isNull() ? NULL : lookup_node(s, argv[1]);
|
||||||
Node *newnode = lookup_node(s, argv[2]);
|
Node *newnode = lookup_node(s, argv[2]);
|
||||||
|
|
||||||
if (!l || !sane_listp(s, argv[0]))
|
if (!l || !sane_listp(s, argv[0]))
|
||||||
error("List at "PREG" is not sane anymore", PRINT_REG(argv[0]));
|
error("List at %04x:%04x is not sane anymore", PRINT_REG(argv[0]));
|
||||||
|
|
||||||
// FIXME: This should be an error, but it's turned to a warning for now
|
// FIXME: This should be an error, but it's turned to a warning for now
|
||||||
if (!newnode) {
|
if (!newnode) {
|
||||||
warning("New 'node' "PREG" is not a node", PRINT_REG(argv[2]));
|
warning("New 'node' %04x:%04x is not a node", PRINT_REG(argv[2]));
|
||||||
return NULL_REG;
|
return NULL_REG;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -341,7 +341,7 @@ reg_t kAddAfter(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
firstnode->succ = argv[2];
|
firstnode->succ = argv[2];
|
||||||
newnode->succ = oldnext;
|
newnode->succ = oldnext;
|
||||||
|
|
||||||
if (IS_NULL_REG(oldnext)) // Appended after last node?
|
if (oldnext.isNull()) // Appended after last node?
|
||||||
// Set new node as last list node
|
// Set new node as last list node
|
||||||
l->last = argv[2];
|
l->last = argv[2];
|
||||||
else
|
else
|
||||||
|
@ -365,24 +365,24 @@ reg_t kFindKey(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
reg_t key = argv[1];
|
reg_t key = argv[1];
|
||||||
reg_t list_pos = argv[0];
|
reg_t list_pos = argv[0];
|
||||||
|
|
||||||
SCIkdebug(SCIkNODES, "Looking for key "PREG" in list "PREG"\n", PRINT_REG(key), PRINT_REG(list_pos));
|
SCIkdebug(SCIkNODES, "Looking for key %04x:%04x in list %04x:%04x\n", PRINT_REG(key), PRINT_REG(list_pos));
|
||||||
|
|
||||||
if (!sane_listp(s, list_pos))
|
if (!sane_listp(s, list_pos))
|
||||||
error("List at "PREG" is not sane anymore", PRINT_REG(list_pos));
|
error("List at %04x:%04x is not sane anymore", PRINT_REG(list_pos));
|
||||||
|
|
||||||
node_pos = lookup_list(s, list_pos)->first;
|
node_pos = lookup_list(s, list_pos)->first;
|
||||||
|
|
||||||
SCIkdebug(SCIkNODES, "First node at "PREG"\n", PRINT_REG(node_pos));
|
SCIkdebug(SCIkNODES, "First node at %04x:%04x\n", PRINT_REG(node_pos));
|
||||||
|
|
||||||
while (!IS_NULL_REG(node_pos)) {
|
while (!node_pos.isNull()) {
|
||||||
Node *n = lookup_node(s, node_pos);
|
Node *n = lookup_node(s, node_pos);
|
||||||
if (REG_EQ(n->key, key)) {
|
if (n->key == key) {
|
||||||
SCIkdebug(SCIkNODES, " Found key at "PREG"\n", PRINT_REG(node_pos));
|
SCIkdebug(SCIkNODES, " Found key at %04x:%04x\n", PRINT_REG(node_pos));
|
||||||
return node_pos;
|
return node_pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
node_pos = n->succ;
|
node_pos = n->succ;
|
||||||
SCIkdebug(SCIkNODES, "NextNode at "PREG"\n", PRINT_REG(node_pos));
|
SCIkdebug(SCIkNODES, "NextNode at %04x:%04x\n", PRINT_REG(node_pos));
|
||||||
}
|
}
|
||||||
|
|
||||||
SCIkdebug(SCIkNODES, "Looking for key without success\n");
|
SCIkdebug(SCIkNODES, "Looking for key without success\n");
|
||||||
|
@ -394,18 +394,18 @@ reg_t kDeleteKey(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
Node *n;
|
Node *n;
|
||||||
List *l = lookup_list(s, argv[0]);
|
List *l = lookup_list(s, argv[0]);
|
||||||
|
|
||||||
if (IS_NULL_REG(node_pos))
|
if (node_pos.isNull())
|
||||||
return NULL_REG; // Signal falure
|
return NULL_REG; // Signal falure
|
||||||
|
|
||||||
n = lookup_node(s, node_pos);
|
n = lookup_node(s, node_pos);
|
||||||
if (REG_EQ(l->first, node_pos))
|
if (l->first == node_pos)
|
||||||
l->first = n->succ;
|
l->first = n->succ;
|
||||||
if (REG_EQ(l->last, node_pos))
|
if (l->last == node_pos)
|
||||||
l->last = n->pred;
|
l->last = n->pred;
|
||||||
|
|
||||||
if (!IS_NULL_REG(n->pred))
|
if (!n->pred.isNull())
|
||||||
lookup_node(s, n->pred)->succ = n->succ;
|
lookup_node(s, n->pred)->succ = n->succ;
|
||||||
if (!IS_NULL_REG(n->succ))
|
if (!n->succ.isNull())
|
||||||
lookup_node(s, n->succ)->pred = n->pred;
|
lookup_node(s, n->succ)->pred = n->pred;
|
||||||
|
|
||||||
//s->seg_manager->free_Node(node_pos);
|
//s->seg_manager->free_Node(node_pos);
|
||||||
|
@ -450,7 +450,7 @@ reg_t kSort(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
if (!input_size)
|
if (!input_size)
|
||||||
return s->r_acc;
|
return s->r_acc;
|
||||||
|
|
||||||
if (IS_NULL_REG(output_data)) {
|
if (output_data.isNull()) {
|
||||||
list = s->seg_manager->alloc_List(&output_data);
|
list = s->seg_manager->alloc_List(&output_data);
|
||||||
list->first = list->last = NULL_REG;
|
list->first = list->last = NULL_REG;
|
||||||
PUT_SEL32(dest, elements, output_data);
|
PUT_SEL32(dest, elements, output_data);
|
||||||
|
|
|
@ -188,7 +188,7 @@ reg_t kMemory(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
break;
|
break;
|
||||||
case K_MEMORY_FREE :
|
case K_MEMORY_FREE :
|
||||||
if (s->seg_manager->freeDynmem(argv[1])) {
|
if (s->seg_manager->freeDynmem(argv[1])) {
|
||||||
error("Attempt to kMemory::free() non-dynmem pointer "PREG"!\n", PRINT_REG(argv[1]));
|
error("Attempt to kMemory::free() non-dynmem pointer %04x:%04x!\n", PRINT_REG(argv[1]));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case K_MEMORY_MEMCPY : {
|
case K_MEMORY_MEMCPY : {
|
||||||
|
@ -201,10 +201,10 @@ reg_t kMemory(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
else {
|
else {
|
||||||
warning("Could not execute kMemory:memcpy of %d bytes:", size);
|
warning("Could not execute kMemory:memcpy of %d bytes:", size);
|
||||||
if (!dest) {
|
if (!dest) {
|
||||||
warning(" dest ptr ("PREG") invalid/memory region too small", PRINT_REG(argv[1]));
|
warning(" dest ptr (%04x:%04x) invalid/memory region too small", PRINT_REG(argv[1]));
|
||||||
}
|
}
|
||||||
if (!src) {
|
if (!src) {
|
||||||
warning(" src ptr ("PREG") invalid/memory region too small", PRINT_REG(argv[2]));
|
warning(" src ptr (%04x:%04x) invalid/memory region too small", PRINT_REG(argv[2]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -213,7 +213,7 @@ reg_t kMemory(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
byte *ref = kernel_dereference_bulk_pointer(s, argv[1], 2);
|
byte *ref = kernel_dereference_bulk_pointer(s, argv[1], 2);
|
||||||
|
|
||||||
if (!ref) {
|
if (!ref) {
|
||||||
error("Attempt to poke invalid memory at "PREG"!\n", PRINT_REG(argv[1]));
|
error("Attempt to poke invalid memory at %04x:%04x!\n", PRINT_REG(argv[1]));
|
||||||
return s->r_acc;
|
return s->r_acc;
|
||||||
}
|
}
|
||||||
if (s->seg_manager->_heap[argv[1].segment]->getType() == MEM_OBJ_LOCALS)
|
if (s->seg_manager->_heap[argv[1].segment]->getType() == MEM_OBJ_LOCALS)
|
||||||
|
@ -226,7 +226,7 @@ reg_t kMemory(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
byte *ref = kernel_dereference_bulk_pointer(s, argv[1], 2);
|
byte *ref = kernel_dereference_bulk_pointer(s, argv[1], 2);
|
||||||
|
|
||||||
if (!ref) {
|
if (!ref) {
|
||||||
error("Attempt to poke invalid memory at "PREG"!\n", PRINT_REG(argv[1]));
|
error("Attempt to poke invalid memory at %04x:%04x!\n", PRINT_REG(argv[1]));
|
||||||
return s->r_acc;
|
return s->r_acc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -234,7 +234,7 @@ reg_t kMemory(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
*((reg_t *) ref) = argv[2];
|
*((reg_t *) ref) = argv[2];
|
||||||
else {
|
else {
|
||||||
if (argv[2].segment) {
|
if (argv[2].segment) {
|
||||||
error("Attempt to poke memory reference "PREG" to "PREG"!\n", PRINT_REG(argv[2]), PRINT_REG(argv[1]));
|
error("Attempt to poke memory reference %04x:%04x to %04x:%04x!\n", PRINT_REG(argv[2]), PRINT_REG(argv[1]));
|
||||||
return s->r_acc;
|
return s->r_acc;
|
||||||
WRITE_LE_UINT16(ref, argv[2].offset); // ?
|
WRITE_LE_UINT16(ref, argv[2].offset); // ?
|
||||||
}
|
}
|
||||||
|
@ -251,7 +251,7 @@ reg_t kstub(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
sciprintf("Unimplemented syscall: %s[%x](", s->_kernelNames[funct_nr].c_str(), funct_nr);
|
sciprintf("Unimplemented syscall: %s[%x](", s->_kernelNames[funct_nr].c_str(), funct_nr);
|
||||||
|
|
||||||
for (int i = 0; i < argc; i++) {
|
for (int i = 0; i < argc; i++) {
|
||||||
sciprintf(PREG, PRINT_REG(argv[i]));
|
sciprintf("%04x:%04x", PRINT_REG(argv[i]));
|
||||||
if (i + 1 < argc) sciprintf(", ");
|
if (i + 1 < argc) sciprintf(", ");
|
||||||
}
|
}
|
||||||
sciprintf(")\n");
|
sciprintf(")\n");
|
||||||
|
|
|
@ -151,7 +151,7 @@ reg_t kSetJump(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
// Always force vy to be upwards
|
// Always force vy to be upwards
|
||||||
vy = -abs(vy);
|
vy = -abs(vy);
|
||||||
|
|
||||||
SCIkdebug(SCIkBRESEN, "SetJump for object at "PREG"\n", PRINT_REG(object));
|
SCIkdebug(SCIkBRESEN, "SetJump for object at %04x:%04x\n", PRINT_REG(object));
|
||||||
SCIkdebug(SCIkBRESEN, "xStep: %d, yStep: %d\n", vx, vy);
|
SCIkdebug(SCIkBRESEN, "xStep: %d, yStep: %d\n", vx, vy);
|
||||||
|
|
||||||
PUT_SEL32V(object, xStep, vx);
|
PUT_SEL32V(object, xStep, vx);
|
||||||
|
@ -206,7 +206,7 @@ static void initialize_bresen(EngineState *s, int argc, reg_t *argv, reg_t mover
|
||||||
PUT_SEL32V(mover, dx, deltax_step);
|
PUT_SEL32V(mover, dx, deltax_step);
|
||||||
PUT_SEL32V(mover, dy, deltay_step);
|
PUT_SEL32V(mover, dy, deltay_step);
|
||||||
|
|
||||||
SCIkdebug(SCIkBRESEN, "Init bresen for mover "PREG": d=(%d,%d)\n", PRINT_REG(mover), deltax, deltay);
|
SCIkdebug(SCIkBRESEN, "Init bresen for mover %04x:%04x: d=(%d,%d)\n", PRINT_REG(mover), deltax, deltay);
|
||||||
SCIkdebug(SCIkBRESEN, " steps=%d, mv=(%d, %d), i1= %d, i2=%d\n",
|
SCIkdebug(SCIkBRESEN, " steps=%d, mv=(%d, %d), i1= %d, i2=%d\n",
|
||||||
numsteps, deltax_step, deltay_step, i1, bdi*2);
|
numsteps, deltax_step, deltay_step, i1, bdi*2);
|
||||||
|
|
||||||
|
@ -352,7 +352,7 @@ reg_t kDoBresen(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
y = desty;
|
y = desty;
|
||||||
completed = 1;
|
completed = 1;
|
||||||
|
|
||||||
SCIkdebug(SCIkBRESEN, "Finished mover "PREG"\n", PRINT_REG(mover));
|
SCIkdebug(SCIkBRESEN, "Finished mover %04x:%04x\n", PRINT_REG(mover));
|
||||||
}
|
}
|
||||||
|
|
||||||
PUT_SEL32V(client, x, x);
|
PUT_SEL32V(client, x, x);
|
||||||
|
@ -374,7 +374,7 @@ reg_t kDoBresen(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
PUT_SEL32V(client, y, oldy);
|
PUT_SEL32V(client, y, oldy);
|
||||||
PUT_SEL32V(client, signal, (signal | _K_VIEW_SIG_FLAG_HIT_OBSTACLE));
|
PUT_SEL32V(client, signal, (signal | _K_VIEW_SIG_FLAG_HIT_OBSTACLE));
|
||||||
|
|
||||||
SCIkdebug(SCIkBRESEN, "Finished mover "PREG" by collision\n", PRINT_REG(mover));
|
SCIkdebug(SCIkBRESEN, "Finished mover %04x:%04x by collision\n", PRINT_REG(mover));
|
||||||
completed = 1;
|
completed = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -399,14 +399,14 @@ reg_t kDoAvoider(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
s->r_acc = make_reg(0, -1);
|
s->r_acc = make_reg(0, -1);
|
||||||
|
|
||||||
if (!is_heap_object(s, avoider)) {
|
if (!is_heap_object(s, avoider)) {
|
||||||
warning("DoAvoider() where avoider "PREG" is not an object", PRINT_REG(avoider));
|
warning("DoAvoider() where avoider %04x:%04x is not an object", PRINT_REG(avoider));
|
||||||
return NULL_REG;
|
return NULL_REG;
|
||||||
}
|
}
|
||||||
|
|
||||||
client = GET_SEL32(avoider, client);
|
client = GET_SEL32(avoider, client);
|
||||||
|
|
||||||
if (!is_heap_object(s, client)) {
|
if (!is_heap_object(s, client)) {
|
||||||
warning("DoAvoider() where client "PREG" is not an object", PRINT_REG(client));
|
warning("DoAvoider() where client %04x:%04x is not an object", PRINT_REG(client));
|
||||||
return NULL_REG;
|
return NULL_REG;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -415,7 +415,7 @@ reg_t kDoAvoider(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
|
|
||||||
if (!is_heap_object(s, mover)) {
|
if (!is_heap_object(s, mover)) {
|
||||||
if (mover.segment) {
|
if (mover.segment) {
|
||||||
warning("DoAvoider() where mover "PREG" is not an object", PRINT_REG(mover));
|
warning("DoAvoider() where mover %04x:%04x is not an object", PRINT_REG(mover));
|
||||||
}
|
}
|
||||||
return s->r_acc;
|
return s->r_acc;
|
||||||
}
|
}
|
||||||
|
@ -426,7 +426,7 @@ reg_t kDoAvoider(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
SCIkdebug(SCIkBRESEN, "Doing avoider %04x (dest=%d,%d)\n", avoider, destx, desty);
|
SCIkdebug(SCIkBRESEN, "Doing avoider %04x (dest=%d,%d)\n", avoider, destx, desty);
|
||||||
|
|
||||||
if (invoke_selector(INV_SEL(mover, doit, 1) , 0)) {
|
if (invoke_selector(INV_SEL(mover, doit, 1) , 0)) {
|
||||||
error("Mover "PREG" of avoider "PREG" doesn't have a doit() funcselector\n", PRINT_REG(mover), PRINT_REG(avoider));
|
error("Mover %04x:%04x of avoider %04x:%04x doesn't have a doit() funcselector\n", PRINT_REG(mover), PRINT_REG(avoider));
|
||||||
return NULL_REG;
|
return NULL_REG;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -435,7 +435,7 @@ reg_t kDoAvoider(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
return s->r_acc; // Return gracefully.
|
return s->r_acc; // Return gracefully.
|
||||||
|
|
||||||
if (invoke_selector(INV_SEL(client, isBlocked, 1) , 0)) {
|
if (invoke_selector(INV_SEL(client, isBlocked, 1) , 0)) {
|
||||||
error("Client "PREG" of avoider "PREG" doesn't"
|
error("Client %04x:%04x of avoider %04x:%04x doesn't"
|
||||||
" have an isBlocked() funcselector", PRINT_REG(client), PRINT_REG(avoider));
|
" have an isBlocked() funcselector", PRINT_REG(client), PRINT_REG(avoider));
|
||||||
return NULL_REG;
|
return NULL_REG;
|
||||||
}
|
}
|
||||||
|
@ -454,7 +454,7 @@ reg_t kDoAvoider(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
int ystep = GET_SEL32V(client, yStep);
|
int ystep = GET_SEL32V(client, yStep);
|
||||||
int moves;
|
int moves;
|
||||||
|
|
||||||
SCIkdebug(SCIkBRESEN, " avoider "PREG"\n", PRINT_REG(avoider));
|
SCIkdebug(SCIkBRESEN, " avoider %04x:%04x\n", PRINT_REG(avoider));
|
||||||
|
|
||||||
for (moves = 0; moves < 8; moves++) {
|
for (moves = 0; moves < 8; moves++) {
|
||||||
int move_x = (int)(sin(angle * PI / 180.0) * (xstep));
|
int move_x = (int)(sin(angle * PI / 180.0) * (xstep));
|
||||||
|
@ -466,7 +466,7 @@ reg_t kDoAvoider(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
SCIkdebug(SCIkBRESEN, "Pos (%d,%d): Trying angle %d; delta=(%d,%d)\n", oldx, oldy, angle, move_x, move_y);
|
SCIkdebug(SCIkBRESEN, "Pos (%d,%d): Trying angle %d; delta=(%d,%d)\n", oldx, oldy, angle, move_x, move_y);
|
||||||
|
|
||||||
if (invoke_selector(INV_SEL(client, canBeHere, 1) , 0)) {
|
if (invoke_selector(INV_SEL(client, canBeHere, 1) , 0)) {
|
||||||
error("Client "PREG" of avoider "PREG" doesn't"
|
error("Client %04x:%04x of avoider %04x:%04x doesn't"
|
||||||
" have a canBeHere() funcselector", PRINT_REG(client), PRINT_REG(avoider));
|
" have a canBeHere() funcselector", PRINT_REG(client), PRINT_REG(avoider));
|
||||||
return NULL_REG;
|
return NULL_REG;
|
||||||
}
|
}
|
||||||
|
@ -487,7 +487,7 @@ reg_t kDoAvoider(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
angle -= 360;
|
angle -= 360;
|
||||||
}
|
}
|
||||||
|
|
||||||
warning("DoAvoider failed for avoider "PREG"", PRINT_REG(avoider));
|
warning("DoAvoider failed for avoider %04x:%04x", PRINT_REG(avoider));
|
||||||
} else {
|
} else {
|
||||||
int heading = GET_SEL32V(client, heading);
|
int heading = GET_SEL32V(client, heading);
|
||||||
|
|
||||||
|
@ -500,7 +500,7 @@ reg_t kDoAvoider(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
|
|
||||||
if (looper.segment) {
|
if (looper.segment) {
|
||||||
if (invoke_selector(INV_SEL(looper, doit, 1), 2, angle, client)) {
|
if (invoke_selector(INV_SEL(looper, doit, 1), 2, angle, client)) {
|
||||||
error("Looper "PREG" of avoider "PREG" doesn't"
|
error("Looper %04x:%04x of avoider %04x:%04x doesn't"
|
||||||
" have a doit() funcselector", PRINT_REG(looper), PRINT_REG(avoider));
|
" have a doit() funcselector", PRINT_REG(looper), PRINT_REG(avoider));
|
||||||
} else
|
} else
|
||||||
return s->r_acc;
|
return s->r_acc;
|
||||||
|
|
|
@ -45,12 +45,12 @@ void write_selector(EngineState *s, reg_t object, Selector selector_id, reg_t va
|
||||||
|
|
||||||
if ((selector_id < 0) || (selector_id > (int)s->_selectorNames.size())) {
|
if ((selector_id < 0) || (selector_id > (int)s->_selectorNames.size())) {
|
||||||
warning("Attempt to write to invalid selector %d of"
|
warning("Attempt to write to invalid selector %d of"
|
||||||
" object at "PREG" (%s L%d).", selector_id, PRINT_REG(object), fname, line);
|
" object at %04x:%04x (%s L%d).", selector_id, PRINT_REG(object), fname, line);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lookup_selector(s, object, selector_id, &address, NULL) != kSelectorVariable)
|
if (lookup_selector(s, object, selector_id, &address, NULL) != kSelectorVariable)
|
||||||
warning("Selector '%s' of object at "PREG" could not be"
|
warning("Selector '%s' of object at %04x:%04x could not be"
|
||||||
" written to (%s L%d)", s->_selectorNames[selector_id].c_str(), PRINT_REG(object), fname, line);
|
" written to (%s L%d)", s->_selectorNames[selector_id].c_str(), PRINT_REG(object), fname, line);
|
||||||
else
|
else
|
||||||
*address = value;
|
*address = value;
|
||||||
|
@ -71,7 +71,7 @@ int invoke_selector(EngineState *s, reg_t object, int selector_id, int noinvalid
|
||||||
slc_type = lookup_selector(s, object, selector_id, NULL, &address);
|
slc_type = lookup_selector(s, object, selector_id, NULL, &address);
|
||||||
|
|
||||||
if (slc_type == kSelectorNone) {
|
if (slc_type == kSelectorNone) {
|
||||||
error("Selector '%s' of object at "PREG" could not be invoked (%s L%d)\n",
|
error("Selector '%s' of object at %04x:%04x could not be invoked (%s L%d)\n",
|
||||||
s->_selectorNames[selector_id].c_str(), PRINT_REG(object), fname, line);
|
s->_selectorNames[selector_id].c_str(), PRINT_REG(object), fname, line);
|
||||||
if (noinvalid == 0)
|
if (noinvalid == 0)
|
||||||
KERNEL_OOPS("Not recoverable: VM was halted\n");
|
KERNEL_OOPS("Not recoverable: VM was halted\n");
|
||||||
|
@ -184,16 +184,16 @@ reg_t kClone(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
Clone *clone_obj; // same as Object*
|
Clone *clone_obj; // same as Object*
|
||||||
|
|
||||||
if (!parent_obj) {
|
if (!parent_obj) {
|
||||||
error("Attempt to clone non-object/class at "PREG" failed", PRINT_REG(parent_addr));
|
error("Attempt to clone non-object/class at %04x:%04x failed", PRINT_REG(parent_addr));
|
||||||
return NULL_REG;
|
return NULL_REG;
|
||||||
}
|
}
|
||||||
|
|
||||||
SCIkdebug(SCIkMEM, "Attempting to clone from "PREG"\n", PRINT_REG(parent_addr));
|
SCIkdebug(SCIkMEM, "Attempting to clone from %04x:%04x\n", PRINT_REG(parent_addr));
|
||||||
|
|
||||||
clone_obj = s->seg_manager->alloc_Clone(&clone_addr);
|
clone_obj = s->seg_manager->alloc_Clone(&clone_addr);
|
||||||
|
|
||||||
if (!clone_obj) {
|
if (!clone_obj) {
|
||||||
error("Cloning "PREG" failed-- internal error!\n", PRINT_REG(parent_addr));
|
error("Cloning %04x:%04x failed-- internal error!\n", PRINT_REG(parent_addr));
|
||||||
return NULL_REG;
|
return NULL_REG;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -219,7 +219,7 @@ reg_t kDisposeClone(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
uint16 underBits;
|
uint16 underBits;
|
||||||
|
|
||||||
if (!victim_obj) {
|
if (!victim_obj) {
|
||||||
error("Attempt to dispose non-class/object at "PREG"\n",
|
error("Attempt to dispose non-class/object at %04x:%04x\n",
|
||||||
PRINT_REG(victim_addr));
|
PRINT_REG(victim_addr));
|
||||||
return s->r_acc;
|
return s->r_acc;
|
||||||
}
|
}
|
||||||
|
@ -232,7 +232,7 @@ reg_t kDisposeClone(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
|
|
||||||
underBits = GET_SEL32V(victim_addr, underBits);
|
underBits = GET_SEL32V(victim_addr, underBits);
|
||||||
if (underBits) {
|
if (underBits) {
|
||||||
warning("Clone "PREG" was cleared with underBits set", PRINT_REG(victim_addr));
|
warning("Clone %04x:%04x was cleared with underBits set", PRINT_REG(victim_addr));
|
||||||
}
|
}
|
||||||
#if 0
|
#if 0
|
||||||
if (s->dyn_views) { // Free any widget associated with the clone
|
if (s->dyn_views) { // Free any widget associated with the clone
|
||||||
|
|
|
@ -144,33 +144,33 @@ void process_sound_events(EngineState *s) { /* Get all sound events, apply their
|
||||||
while ((result = sfx_poll(&s->sound, &handle, &cue))) {
|
while ((result = sfx_poll(&s->sound, &handle, &cue))) {
|
||||||
reg_t obj = DEFROBNICATE_HANDLE(handle);
|
reg_t obj = DEFROBNICATE_HANDLE(handle);
|
||||||
if (!is_object(s, obj)) {
|
if (!is_object(s, obj)) {
|
||||||
warning("Non-object "PREG" received sound signal (%d/%d)", PRINT_REG(obj), result, cue);
|
warning("Non-object %04x:%04x received sound signal (%d/%d)", PRINT_REG(obj), result, cue);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (result) {
|
switch (result) {
|
||||||
|
|
||||||
case SI_LOOP:
|
case SI_LOOP:
|
||||||
SCIkdebug(SCIkSOUND, "[process-sound] Song "PREG" looped (to %d)\n",
|
SCIkdebug(SCIkSOUND, "[process-sound] Song %04x:%04x looped (to %d)\n",
|
||||||
PRINT_REG(obj), cue);
|
PRINT_REG(obj), cue);
|
||||||
/* PUT_SEL32V(obj, loops, GET_SEL32V(obj, loop) - 1);*/
|
/* PUT_SEL32V(obj, loops, GET_SEL32V(obj, loop) - 1);*/
|
||||||
PUT_SEL32V(obj, signal, -1);
|
PUT_SEL32V(obj, signal, -1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SI_RELATIVE_CUE:
|
case SI_RELATIVE_CUE:
|
||||||
SCIkdebug(SCIkSOUND, "[process-sound] Song "PREG" received relative cue %d\n",
|
SCIkdebug(SCIkSOUND, "[process-sound] Song %04x:%04x received relative cue %d\n",
|
||||||
PRINT_REG(obj), cue);
|
PRINT_REG(obj), cue);
|
||||||
PUT_SEL32V(obj, signal, cue + 0x7f);
|
PUT_SEL32V(obj, signal, cue + 0x7f);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SI_ABSOLUTE_CUE:
|
case SI_ABSOLUTE_CUE:
|
||||||
SCIkdebug(SCIkSOUND, "[process-sound] Song "PREG" received absolute cue %d\n",
|
SCIkdebug(SCIkSOUND, "[process-sound] Song %04x:%04x received absolute cue %d\n",
|
||||||
PRINT_REG(obj), cue);
|
PRINT_REG(obj), cue);
|
||||||
PUT_SEL32V(obj, signal, cue);
|
PUT_SEL32V(obj, signal, cue);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SI_FINISHED:
|
case SI_FINISHED:
|
||||||
SCIkdebug(SCIkSOUND, "[process-sound] Song "PREG" finished\n",
|
SCIkdebug(SCIkSOUND, "[process-sound] Song %04x:%04x finished\n",
|
||||||
PRINT_REG(obj));
|
PRINT_REG(obj));
|
||||||
PUT_SEL32V(obj, signal, -1);
|
PUT_SEL32V(obj, signal, -1);
|
||||||
PUT_SEL32V(obj, state, _K_SOUND_STATUS_STOPPED);
|
PUT_SEL32V(obj, state, _K_SOUND_STATUS_STOPPED);
|
||||||
|
@ -243,7 +243,7 @@ reg_t kDoSound_SCI0(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
|
|
||||||
sciprintf("(");
|
sciprintf("(");
|
||||||
for (i = 1; i < argc; i++) {
|
for (i = 1; i < argc; i++) {
|
||||||
sciprintf(PREG, PRINT_REG(argv[i]));
|
sciprintf("%04x:%04x", PRINT_REG(argv[i]));
|
||||||
if (i + 1 < argc)
|
if (i + 1 < argc)
|
||||||
sciprintf(", ");
|
sciprintf(", ");
|
||||||
}
|
}
|
||||||
|
@ -438,7 +438,7 @@ reg_t kDoSound_SCI01(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
|
|
||||||
sciprintf("(");
|
sciprintf("(");
|
||||||
for (i = 1; i < argc; i++) {
|
for (i = 1; i < argc; i++) {
|
||||||
sciprintf(PREG, PRINT_REG(argv[i]));
|
sciprintf("%04x:%04x", PRINT_REG(argv[i]));
|
||||||
if (i + 1 < argc)
|
if (i + 1 < argc)
|
||||||
sciprintf(", ");
|
sciprintf(", ");
|
||||||
}
|
}
|
||||||
|
@ -533,7 +533,7 @@ reg_t kDoSound_SCI01(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
handle, looping);
|
handle, looping);
|
||||||
sfx_song_renice(&s->sound, handle, pri);
|
sfx_song_renice(&s->sound, handle, pri);
|
||||||
|
|
||||||
SCIkdebug(SCIkSOUND, "[sound01-update-handle] -- CUE "PREG);
|
SCIkdebug(SCIkSOUND, "[sound01-update-handle] -- CUE %04x:%04x");
|
||||||
|
|
||||||
PUT_SEL32V(obj, signal, signal);
|
PUT_SEL32V(obj, signal, signal);
|
||||||
PUT_SEL32V(obj, min, min);
|
PUT_SEL32V(obj, min, min);
|
||||||
|
@ -588,7 +588,7 @@ reg_t kDoSound_SCI01(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
|
|
||||||
case SI_ABSOLUTE_CUE:
|
case SI_ABSOLUTE_CUE:
|
||||||
signal = cue;
|
signal = cue;
|
||||||
SCIkdebug(SCIkSOUND, "--- [CUE] "PREG" Absolute Cue: %d\n",
|
SCIkdebug(SCIkSOUND, "--- [CUE] %04x:%04x Absolute Cue: %d\n",
|
||||||
PRINT_REG(obj), signal);
|
PRINT_REG(obj), signal);
|
||||||
|
|
||||||
PUT_SEL32V(obj, signal, signal);
|
PUT_SEL32V(obj, signal, signal);
|
||||||
|
@ -596,7 +596,7 @@ reg_t kDoSound_SCI01(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
|
|
||||||
case SI_RELATIVE_CUE:
|
case SI_RELATIVE_CUE:
|
||||||
signal = cue;
|
signal = cue;
|
||||||
SCIkdebug(SCIkSOUND, "--- [CUE] "PREG" Relative Cue: %d\n",
|
SCIkdebug(SCIkSOUND, "--- [CUE] %04x:%04x Relative Cue: %d\n",
|
||||||
PRINT_REG(obj), cue);
|
PRINT_REG(obj), cue);
|
||||||
|
|
||||||
/* FIXME to match commented-out semantics
|
/* FIXME to match commented-out semantics
|
||||||
|
@ -607,7 +607,7 @@ reg_t kDoSound_SCI01(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SI_FINISHED:
|
case SI_FINISHED:
|
||||||
SCIkdebug(SCIkSOUND, "--- [FINISHED] "PREG"\n", PRINT_REG(obj));
|
SCIkdebug(SCIkSOUND, "--- [FINISHED] %04x:%04x\n", PRINT_REG(obj));
|
||||||
PUT_SEL32V(obj, signal, 0xffff);
|
PUT_SEL32V(obj, signal, 0xffff);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -758,7 +758,7 @@ reg_t kDoSound_SCI1(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
|
|
||||||
sciprintf("(");
|
sciprintf("(");
|
||||||
for (i = 1; i < argc; i++) {
|
for (i = 1; i < argc; i++) {
|
||||||
sciprintf(PREG, PRINT_REG(argv[i]));
|
sciprintf("%04x:%04x", PRINT_REG(argv[i]));
|
||||||
if (i + 1 < argc)
|
if (i + 1 < argc)
|
||||||
sciprintf(", ");
|
sciprintf(", ");
|
||||||
}
|
}
|
||||||
|
@ -944,14 +944,14 @@ reg_t kDoSound_SCI1(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
|
|
||||||
case SI_ABSOLUTE_CUE:
|
case SI_ABSOLUTE_CUE:
|
||||||
signal = cue;
|
signal = cue;
|
||||||
fprintf(stderr, "[CUE] "PREG" Absolute Cue: %d\n",
|
fprintf(stderr, "[CUE] %04x:%04x Absolute Cue: %d\n",
|
||||||
PRINT_REG(obj), signal);
|
PRINT_REG(obj), signal);
|
||||||
|
|
||||||
PUT_SEL32V(obj, signal, signal);
|
PUT_SEL32V(obj, signal, signal);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SI_RELATIVE_CUE:
|
case SI_RELATIVE_CUE:
|
||||||
fprintf(stderr, "[CUE] "PREG" Relative Cue: %d\n",
|
fprintf(stderr, "[CUE] %04x:%04x Relative Cue: %d\n",
|
||||||
PRINT_REG(obj), cue);
|
PRINT_REG(obj), cue);
|
||||||
|
|
||||||
PUT_SEL32V(obj, dataInc, cue);
|
PUT_SEL32V(obj, dataInc, cue);
|
||||||
|
|
|
@ -89,7 +89,7 @@ reg_t kSaid(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
said_block = (byte *) kernel_dereference_bulk_pointer(s, heap_said_block, 0);
|
said_block = (byte *) kernel_dereference_bulk_pointer(s, heap_said_block, 0);
|
||||||
|
|
||||||
if (!said_block) {
|
if (!said_block) {
|
||||||
warning("Said on non-string, pointer "PREG"", PRINT_REG(heap_said_block));
|
warning("Said on non-string, pointer %04x:%04x", PRINT_REG(heap_said_block));
|
||||||
return NULL_REG;
|
return NULL_REG;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -98,7 +98,7 @@ reg_t kSaid(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
vocab_decypher_said_block(s, said_block);
|
vocab_decypher_said_block(s, said_block);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IS_NULL_REG(s->parser_event) || (GET_SEL32V(s->parser_event, claimed))) {
|
if (s->parser_event.isNull() || (GET_SEL32V(s->parser_event, claimed))) {
|
||||||
return NULL_REG;
|
return NULL_REG;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -289,12 +289,12 @@ reg_t kStrCpy(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
char *src = (char *) kernel_dereference_bulk_pointer(s, argv[1], 0);
|
char *src = (char *) kernel_dereference_bulk_pointer(s, argv[1], 0);
|
||||||
|
|
||||||
if (!dest) {
|
if (!dest) {
|
||||||
warning("Attempt to strcpy TO invalid pointer "PREG"",
|
warning("Attempt to strcpy TO invalid pointer %04x:%04x",
|
||||||
PRINT_REG(argv[0]));
|
PRINT_REG(argv[0]));
|
||||||
return NULL_REG;
|
return NULL_REG;
|
||||||
}
|
}
|
||||||
if (!src) {
|
if (!src) {
|
||||||
warning("Attempt to strcpy FROM invalid pointer "PREG"",
|
warning("Attempt to strcpy FROM invalid pointer %04x:%04x",
|
||||||
PRINT_REG(argv[1]));
|
PRINT_REG(argv[1]));
|
||||||
return NULL_REG;
|
return NULL_REG;
|
||||||
}
|
}
|
||||||
|
@ -353,7 +353,7 @@ reg_t kStrAt(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
reg_t *dest2;
|
reg_t *dest2;
|
||||||
|
|
||||||
if (!dest) {
|
if (!dest) {
|
||||||
warning("Attempt to StrAt at invalid pointer "PREG"", PRINT_REG(argv[0]));
|
warning("Attempt to StrAt at invalid pointer %04x:%04x", PRINT_REG(argv[0]));
|
||||||
return NULL_REG;
|
return NULL_REG;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -739,7 +739,7 @@ reg_t kMessage(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
if (buffer) {
|
if (buffer) {
|
||||||
strcpy(buffer, str);
|
strcpy(buffer, str);
|
||||||
} else {
|
} else {
|
||||||
warning("Message: buffer "PREG" invalid or too small to hold the following text of %i bytes: '%s'", PRINT_REG(bufferReg), len, str);
|
warning("Message: buffer %04x:%04x invalid or too small to hold the following text of %i bytes: '%s'", PRINT_REG(bufferReg), len, str);
|
||||||
|
|
||||||
// Set buffer to empty string if possible
|
// Set buffer to empty string if possible
|
||||||
buffer = kernel_dereference_char_pointer(s, bufferReg, 1);
|
buffer = kernel_dereference_char_pointer(s, bufferReg, 1);
|
||||||
|
@ -791,7 +791,7 @@ reg_t kMessage(EngineState *s, int funct_nr, int argc, reg_t *argv) {
|
||||||
WRITE_LE_UINT16(buffer + 6, msg.cond);
|
WRITE_LE_UINT16(buffer + 6, msg.cond);
|
||||||
WRITE_LE_UINT16(buffer + 8, msg.seq);
|
WRITE_LE_UINT16(buffer + 8, msg.seq);
|
||||||
} else {
|
} else {
|
||||||
warning("Message: buffer "PREG" invalid or too small to hold the tuple", PRINT_REG(argv[1]));
|
warning("Message: buffer %04x:%04x invalid or too small to hold the tuple", PRINT_REG(argv[1]));
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL_REG;
|
return NULL_REG;
|
||||||
|
|
|
@ -616,7 +616,7 @@ static void reconstruct_scripts(EngineState *s, SegManager *self) {
|
||||||
base_obj = obj_get(s, scr->_objects[j]._variables[SCRIPT_SPECIES_SELECTOR]);
|
base_obj = obj_get(s, scr->_objects[j]._variables[SCRIPT_SPECIES_SELECTOR]);
|
||||||
|
|
||||||
if (!base_obj) {
|
if (!base_obj) {
|
||||||
sciprintf("Object without a base class: Script %d, index %d (reg address "PREG"\n",
|
sciprintf("Object without a base class: Script %d, index %d (reg address %04x:%04x\n",
|
||||||
scr->nr, j, PRINT_REG(scr->_objects[j]._variables[SCRIPT_SPECIES_SELECTOR]));
|
scr->nr, j, PRINT_REG(scr->_objects[j]._variables[SCRIPT_SPECIES_SELECTOR]));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
|
@ -335,9 +335,9 @@ int parse_reg_t(EngineState *s, const char *str, reg_t *dest) { // Returns 0 on
|
||||||
if (times_found == 1) {
|
if (times_found == 1) {
|
||||||
// First time we realized the ambiguity
|
// First time we realized the ambiguity
|
||||||
sciprintf("Ambiguous:\n");
|
sciprintf("Ambiguous:\n");
|
||||||
sciprintf(" %3x: ["PREG"] %s\n", 0, PRINT_REG(*dest), str_objname);
|
sciprintf(" %3x: [%04x:%04x] %s\n", 0, PRINT_REG(*dest), str_objname);
|
||||||
}
|
}
|
||||||
sciprintf(" %3x: ["PREG"] %s\n", times_found, PRINT_REG(objpos), str_objname);
|
sciprintf(" %3x: [%04x:%04x] %s\n", times_found, PRINT_REG(objpos), str_objname);
|
||||||
}
|
}
|
||||||
if (index < 0 || times_found == index)
|
if (index < 0 || times_found == index)
|
||||||
*dest = objpos;
|
*dest = objpos;
|
||||||
|
|
|
@ -346,7 +346,7 @@ static void print_obj_head(EngineState *s, reg_t pos) {
|
||||||
if (!obj)
|
if (!obj)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
sciprintf("["PREG"] %s : %3d vars, %3d methods\n", PRINT_REG(pos), obj_get_name(s, pos),
|
sciprintf("[%04x:%04x] %s : %3d vars, %3d methods\n", PRINT_REG(pos), obj_get_name(s, pos),
|
||||||
obj->_variables.size(), obj->methods_nr);
|
obj->_variables.size(), obj->methods_nr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -356,30 +356,30 @@ static void print_list(EngineState *s, List *l) {
|
||||||
|
|
||||||
sciprintf("\t<\n");
|
sciprintf("\t<\n");
|
||||||
|
|
||||||
while (!IS_NULL_REG(pos)) {
|
while (!pos.isNull()) {
|
||||||
Node *node;
|
Node *node;
|
||||||
NodeTable *nt = (NodeTable *)GET_SEGMENT(*s->seg_manager, pos.segment, MEM_OBJ_NODES);
|
NodeTable *nt = (NodeTable *)GET_SEGMENT(*s->seg_manager, pos.segment, MEM_OBJ_NODES);
|
||||||
|
|
||||||
if (!nt || !nt->isValidEntry(pos.offset)) {
|
if (!nt || !nt->isValidEntry(pos.offset)) {
|
||||||
sciprintf(" WARNING: "PREG": Doesn't contain list node!\n",
|
sciprintf(" WARNING: %04x:%04x: Doesn't contain list node!\n",
|
||||||
PRINT_REG(pos));
|
PRINT_REG(pos));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
node = &(nt->_table[pos.offset]);
|
node = &(nt->_table[pos.offset]);
|
||||||
|
|
||||||
sciprintf("\t"PREG" : "PREG" -> "PREG"\n", PRINT_REG(pos), PRINT_REG(node->key), PRINT_REG(node->value));
|
sciprintf("\t%04x:%04x : %04x:%04x -> %04x:%04x\n", PRINT_REG(pos), PRINT_REG(node->key), PRINT_REG(node->value));
|
||||||
|
|
||||||
if (!REG_EQ(my_prev, node->pred))
|
if (my_prev != node->pred)
|
||||||
sciprintf(" WARNING: current node gives "PREG" as predecessor!\n",
|
sciprintf(" WARNING: current node gives %04x:%04x as predecessor!\n",
|
||||||
PRINT_REG(node->pred));
|
PRINT_REG(node->pred));
|
||||||
|
|
||||||
my_prev = pos;
|
my_prev = pos;
|
||||||
pos = node->succ;
|
pos = node->succ;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!REG_EQ(my_prev, l->last))
|
if (my_prev != l->last)
|
||||||
sciprintf(" WARNING: Last node was expected to be "PREG", was "PREG"!\n",
|
sciprintf(" WARNING: Last node was expected to be %04x:%04x, was %04x:%04x!\n",
|
||||||
PRINT_REG(l->last), PRINT_REG(my_prev));
|
PRINT_REG(l->last), PRINT_REG(my_prev));
|
||||||
sciprintf("\t>\n");
|
sciprintf("\t>\n");
|
||||||
}
|
}
|
||||||
|
@ -523,7 +523,7 @@ static int show_node(EngineState *s, reg_t addr) {
|
||||||
|
|
||||||
list = &(lt->_table[addr.offset]);
|
list = &(lt->_table[addr.offset]);
|
||||||
|
|
||||||
sciprintf(PREG" : first x last = ("PREG", "PREG")\n", PRINT_REG(addr), PRINT_REG(list->first), PRINT_REG(list->last));
|
sciprintf("%04x:%04x : first x last = (%04x:%04x, %04x:%04x)\n", PRINT_REG(addr), PRINT_REG(list->first), PRINT_REG(list->last));
|
||||||
} else {
|
} else {
|
||||||
NodeTable *nt;
|
NodeTable *nt;
|
||||||
Node *node;
|
Node *node;
|
||||||
|
@ -542,7 +542,7 @@ static int show_node(EngineState *s, reg_t addr) {
|
||||||
}
|
}
|
||||||
node = &(nt->_table[addr.offset]);
|
node = &(nt->_table[addr.offset]);
|
||||||
|
|
||||||
sciprintf(PREG" : prev x next = ("PREG", "PREG"); maps "PREG" -> "PREG"\n",
|
sciprintf("%04x:%04x : prev x next = (%04x:%04x, %04x:%04x); maps %04x:%04x -> %04x:%04x\n",
|
||||||
PRINT_REG(addr), PRINT_REG(node->pred), PRINT_REG(node->succ), PRINT_REG(node->key), PRINT_REG(node->value));
|
PRINT_REG(addr), PRINT_REG(node->pred), PRINT_REG(node->succ), PRINT_REG(node->key), PRINT_REG(node->value));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -566,7 +566,7 @@ static int c_vr(EngineState *s, const Common::Array<cmd_param_t> &cmdParams) {
|
||||||
int filter;
|
int filter;
|
||||||
int found = 0;
|
int found = 0;
|
||||||
|
|
||||||
sciprintf(PREG" is of type 0x%x%s: ", PRINT_REG(reg), type_mask & ~KSIG_INVALID, type_mask & KSIG_INVALID ? " (invalid)" : "");
|
sciprintf("%04x:%04x is of type 0x%x%s: ", PRINT_REG(reg), type_mask & ~KSIG_INVALID, type_mask & KSIG_INVALID ? " (invalid)" : "");
|
||||||
|
|
||||||
type_mask &= ~KSIG_INVALID;
|
type_mask &= ~KSIG_INVALID;
|
||||||
|
|
||||||
|
@ -700,10 +700,10 @@ int c_debuginfo(EngineState *s) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
sciprintf("acc="PREG" prev="PREG" &rest=%x\n", PRINT_REG(s->r_acc), PRINT_REG(s->r_prev), *p_restadjust);
|
sciprintf("acc=%04x:%04x prev=%04x:%04x &rest=%x\n", PRINT_REG(s->r_acc), PRINT_REG(s->r_prev), *p_restadjust);
|
||||||
|
|
||||||
if (!s->_executionStack.empty()) {
|
if (!s->_executionStack.empty()) {
|
||||||
sciprintf("pc="PREG" obj="PREG" fp="PSTK" sp="PSTK"\n", PRINT_REG(*p_pc), PRINT_REG(*p_objp), PRINT_STK(*p_pp), PRINT_STK(*p_sp));
|
sciprintf("pc=%04x:%04x obj=%04x:%04x fp=ST:%04x sp=ST:%04x\n", PRINT_REG(*p_pc), PRINT_REG(*p_objp), PRINT_STK(*p_pp), PRINT_STK(*p_sp));
|
||||||
} else
|
} else
|
||||||
sciprintf("<no execution stack: pc,obj,fp omitted>\n");
|
sciprintf("<no execution stack: pc,obj,fp omitted>\n");
|
||||||
|
|
||||||
|
@ -839,7 +839,7 @@ int c_classtable(EngineState *s, const Common::Array<cmd_param_t> &cmdParams) {
|
||||||
sciprintf("Available classes:\n");
|
sciprintf("Available classes:\n");
|
||||||
for (uint i = 0; i < s->_classtable.size(); i++)
|
for (uint i = 0; i < s->_classtable.size(); i++)
|
||||||
if (s->_classtable[i].reg.segment)
|
if (s->_classtable[i].reg.segment)
|
||||||
sciprintf(" Class 0x%x at "PREG" (script 0x%x)\n", i, PRINT_REG(s->_classtable[i].reg), s->_classtable[i].script);
|
sciprintf(" Class 0x%x at %04x:%04x (script 0x%x)\n", i, PRINT_REG(s->_classtable[i].reg), s->_classtable[i].script);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1172,7 +1172,7 @@ int c_stack(EngineState *s, const Common::Array<cmd_param_t> &cmdParams) {
|
||||||
if ((xs.sp - xs.fp - i) == 0)
|
if ((xs.sp - xs.fp - i) == 0)
|
||||||
sciprintf("-- temp variables --\n");
|
sciprintf("-- temp variables --\n");
|
||||||
if (xs.sp - i >= s->stack_base)
|
if (xs.sp - i >= s->stack_base)
|
||||||
sciprintf(PSTK" = "PREG"\n", PRINT_STK(xs.sp - i), PRINT_REG(xs.sp[-i]));
|
sciprintf("ST:%04x = %04x:%04x\n", PRINT_STK(xs.sp - i), PRINT_REG(xs.sp[-i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1191,7 +1191,7 @@ int prop_ofs_to_id(EngineState *s, int prop_ofs, reg_t objp) {
|
||||||
int selectors;
|
int selectors;
|
||||||
|
|
||||||
if (!obj) {
|
if (!obj) {
|
||||||
sciprintf("Applied prop_ofs_to_id on non-object at "PREG"\n", PRINT_REG(objp));
|
sciprintf("Applied prop_ofs_to_id on non-object at %04x:%04x\n", PRINT_REG(objp));
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1208,7 +1208,7 @@ int prop_ofs_to_id(EngineState *s, int prop_ofs, reg_t objp) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (prop_ofs < 0 || (prop_ofs >> 1) >= selectors) {
|
if (prop_ofs < 0 || (prop_ofs >> 1) >= selectors) {
|
||||||
sciprintf("Applied prop_ofs_to_id to invalid property offset %x (property #%d not in [0..%d]) on object at "PREG"\n",
|
sciprintf("Applied prop_ofs_to_id to invalid property offset %x (property #%d not in [0..%d]) on object at %04x:%04x\n",
|
||||||
prop_ofs, prop_ofs >> 1, selectors - 1, PRINT_REG(objp));
|
prop_ofs, prop_ofs >> 1, selectors - 1, PRINT_REG(objp));
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -1253,7 +1253,7 @@ reg_t disassemble(EngineState *s, reg_t pos, int print_bw_tag, int print_bytecod
|
||||||
|
|
||||||
opsize &= 1; // byte if true, word if false
|
opsize &= 1; // byte if true, word if false
|
||||||
|
|
||||||
sciprintf(PREG": ", PRINT_REG(pos));
|
sciprintf("%04x:%04x: ", PRINT_REG(pos));
|
||||||
|
|
||||||
if (print_bytecode) {
|
if (print_bytecode) {
|
||||||
while (g_opcode_formats[opcode][i]) {
|
while (g_opcode_formats[opcode][i]) {
|
||||||
|
@ -1375,7 +1375,7 @@ reg_t disassemble(EngineState *s, reg_t pos, int print_bw_tag, int print_bytecod
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (REG_EQ(pos, *p_pc)) { // Extra information if debugging the current opcode
|
if (pos == *p_pc) { // Extra information if debugging the current opcode
|
||||||
if ((opcode == op_pTos) || (opcode == op_sTop) || (opcode == op_pToa) || (opcode == op_aTop) ||
|
if ((opcode == op_pTos) || (opcode == op_sTop) || (opcode == op_pToa) || (opcode == op_aTop) ||
|
||||||
(opcode == op_dpToa) || (opcode == op_ipToa) || (opcode == op_dpTos) || (opcode == op_ipTos)) {
|
(opcode == op_dpToa) || (opcode == op_ipToa) || (opcode == op_dpTos) || (opcode == op_ipTos)) {
|
||||||
int prop_ofs = scr[pos.offset + 1];
|
int prop_ofs = scr[pos.offset + 1];
|
||||||
|
@ -1387,7 +1387,7 @@ reg_t disassemble(EngineState *s, reg_t pos, int print_bw_tag, int print_bytecod
|
||||||
|
|
||||||
sciprintf("\n");
|
sciprintf("\n");
|
||||||
|
|
||||||
if (REG_EQ(pos, *p_pc)) { // Extra information if debugging the current opcode
|
if (pos == *p_pc) { // Extra information if debugging the current opcode
|
||||||
if (opcode == op_callk) {
|
if (opcode == op_callk) {
|
||||||
int stackframe = (scr[pos.offset + 2] >> 1) + (*p_restadjust);
|
int stackframe = (scr[pos.offset + 2] >> 1) + (*p_restadjust);
|
||||||
int argc = ((*p_sp)[- stackframe - 1]).offset;
|
int argc = ((*p_sp)[- stackframe - 1]).offset;
|
||||||
|
@ -1398,7 +1398,7 @@ reg_t disassemble(EngineState *s, reg_t pos, int print_bw_tag, int print_bytecod
|
||||||
sciprintf(" Kernel params: (");
|
sciprintf(" Kernel params: (");
|
||||||
|
|
||||||
for (int j = 0; j < argc; j++) {
|
for (int j = 0; j < argc; j++) {
|
||||||
sciprintf(PREG, PRINT_REG((*p_sp)[j - stackframe]));
|
sciprintf("%04x:%04x", PRINT_REG((*p_sp)[j - stackframe]));
|
||||||
if (j + 1 < argc)
|
if (j + 1 < argc)
|
||||||
sciprintf(", ");
|
sciprintf(", ");
|
||||||
}
|
}
|
||||||
|
@ -1447,7 +1447,7 @@ reg_t disassemble(EngineState *s, reg_t pos, int print_bw_tag, int print_bytecod
|
||||||
sciprintf("](");
|
sciprintf("](");
|
||||||
|
|
||||||
while (argc--) {
|
while (argc--) {
|
||||||
sciprintf(PREG, PRINT_REG(sb[- stackframe + 2]));
|
sciprintf("%04x:%04x", PRINT_REG(sb[- stackframe + 2]));
|
||||||
if (argc)
|
if (argc)
|
||||||
sciprintf(", ");
|
sciprintf(", ");
|
||||||
stackframe--;
|
stackframe--;
|
||||||
|
@ -1490,7 +1490,7 @@ int c_vmvarlist(EngineState *s, const Common::Array<cmd_param_t> &cmdParams) {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0;i < 4;i++) {
|
for (i = 0;i < 4;i++) {
|
||||||
sciprintf("%s vars at "PREG" ", varnames[i], PRINT_REG(make_reg(p_var_segs[i], p_vars[i] - p_var_base[i])));
|
sciprintf("%s vars at %04x:%04x ", varnames[i], PRINT_REG(make_reg(p_var_segs[i], p_vars[i] - p_var_base[i])));
|
||||||
if (p_var_max)
|
if (p_var_max)
|
||||||
sciprintf(" total %d", p_var_max[i]);
|
sciprintf(" total %d", p_var_max[i]);
|
||||||
sciprintf("\n");
|
sciprintf("\n");
|
||||||
|
@ -1521,7 +1521,7 @@ int c_vmvars(EngineState *s, const Common::Array<cmd_param_t> &cmdParams) {
|
||||||
|
|
||||||
switch (cmdParams.size()) {
|
switch (cmdParams.size()) {
|
||||||
case 2:
|
case 2:
|
||||||
sciprintf("%s var %d == "PREG"\n", varnames[vartype], idx, PRINT_REG(p_vars[vartype][idx]));
|
sciprintf("%s var %d == %04x:%04x\n", varnames[vartype], idx, PRINT_REG(p_vars[vartype][idx]));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
|
@ -1571,7 +1571,7 @@ static int c_backtrace(EngineState *s, const Common::Array<cmd_param_t> &cmdPara
|
||||||
totalparamc = 16;
|
totalparamc = 16;
|
||||||
|
|
||||||
for (paramc = 1; paramc <= totalparamc; paramc++) {
|
for (paramc = 1; paramc <= totalparamc; paramc++) {
|
||||||
sciprintf(PREG, PRINT_REG(call.variables_argp[paramc]));
|
sciprintf("%04x:%04x", PRINT_REG(call.variables_argp[paramc]));
|
||||||
|
|
||||||
if (paramc < call.argc)
|
if (paramc < call.argc)
|
||||||
sciprintf(", ");
|
sciprintf(", ");
|
||||||
|
@ -1580,19 +1580,19 @@ static int c_backtrace(EngineState *s, const Common::Array<cmd_param_t> &cmdPara
|
||||||
if (call.argc > 16)
|
if (call.argc > 16)
|
||||||
sciprintf("...");
|
sciprintf("...");
|
||||||
|
|
||||||
sciprintf(")\n obj@"PREG, PRINT_REG(call.objp));
|
sciprintf(")\n obj@%04x:%04x", PRINT_REG(call.objp));
|
||||||
if (call.type == EXEC_STACK_TYPE_CALL) {
|
if (call.type == EXEC_STACK_TYPE_CALL) {
|
||||||
sciprintf(" pc="PREG, PRINT_REG(call.addr.pc));
|
sciprintf(" pc=%04x:%04x", PRINT_REG(call.addr.pc));
|
||||||
if (call.sp == CALL_SP_CARRY)
|
if (call.sp == CALL_SP_CARRY)
|
||||||
sciprintf(" sp,fp:carry");
|
sciprintf(" sp,fp:carry");
|
||||||
else {
|
else {
|
||||||
sciprintf(" sp="PSTK, PRINT_STK(call.sp));
|
sciprintf(" sp=ST:%04x", PRINT_STK(call.sp));
|
||||||
sciprintf(" fp="PSTK, PRINT_STK(call.fp));
|
sciprintf(" fp=ST:%04x", PRINT_STK(call.fp));
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
sciprintf(" pc:none");
|
sciprintf(" pc:none");
|
||||||
|
|
||||||
sciprintf(" argp:"PSTK, PRINT_STK(call.variables_argp));
|
sciprintf(" argp:ST:%04x", PRINT_STK(call.variables_argp));
|
||||||
if (call.type == EXEC_STACK_TYPE_CALL)
|
if (call.type == EXEC_STACK_TYPE_CALL)
|
||||||
sciprintf(" script: %d", (*(Script *)s->seg_manager->_heap[call.addr.pc.segment]).nr);
|
sciprintf(" script: %d", (*(Script *)s->seg_manager->_heap[call.addr.pc.segment]).nr);
|
||||||
sciprintf("\n");
|
sciprintf("\n");
|
||||||
|
@ -2166,7 +2166,7 @@ static int c_send(EngineState *s, const Common::Array<cmd_param_t> &cmdParams) {
|
||||||
|
|
||||||
o = obj_get(s, object);
|
o = obj_get(s, object);
|
||||||
if (o == NULL) {
|
if (o == NULL) {
|
||||||
sciprintf("Address \""PREG"\" is not an object\n", PRINT_REG(object));
|
sciprintf("Address \"%04x:%04x\" is not an object\n", PRINT_REG(object));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2537,7 +2537,7 @@ int objinfo(EngineState *s, reg_t pos) {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (!obj) {
|
if (!obj) {
|
||||||
sciprintf("["PREG"]: Not an object.", PRINT_REG(pos));
|
sciprintf("[%04x:%04x]: Not an object.", PRINT_REG(pos));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2554,7 +2554,7 @@ int objinfo(EngineState *s, reg_t pos) {
|
||||||
sciprintf("p#%x = ", i);
|
sciprintf("p#%x = ", i);
|
||||||
|
|
||||||
reg_t val = obj->_variables[i];
|
reg_t val = obj->_variables[i];
|
||||||
sciprintf(PREG, PRINT_REG(val));
|
sciprintf("%04x:%04x", PRINT_REG(val));
|
||||||
|
|
||||||
Object *ref = obj_get(s, val);
|
Object *ref = obj_get(s, val);
|
||||||
if (ref)
|
if (ref)
|
||||||
|
@ -2565,7 +2565,7 @@ int objinfo(EngineState *s, reg_t pos) {
|
||||||
sciprintf(" -- methods:\n");
|
sciprintf(" -- methods:\n");
|
||||||
for (i = 0; i < obj->methods_nr; i++) {
|
for (i = 0; i < obj->methods_nr; i++) {
|
||||||
reg_t fptr = VM_OBJECT_READ_FUNCTION(obj, i);
|
reg_t fptr = VM_OBJECT_READ_FUNCTION(obj, i);
|
||||||
sciprintf(" [%03x] %s = "PREG"\n", VM_OBJECT_GET_FUNCSELECTOR(obj, i), selector_name(s, VM_OBJECT_GET_FUNCSELECTOR(obj, i)), PRINT_REG(fptr));
|
sciprintf(" [%03x] %s = %04x:%04x\n", VM_OBJECT_GET_FUNCSELECTOR(obj, i), selector_name(s, VM_OBJECT_GET_FUNCSELECTOR(obj, i)), PRINT_REG(fptr));
|
||||||
}
|
}
|
||||||
if (s->seg_manager->_heap[pos.segment]->getType() == MEM_OBJ_SCRIPT)
|
if (s->seg_manager->_heap[pos.segment]->getType() == MEM_OBJ_SCRIPT)
|
||||||
sciprintf("\nOwner script:\t%d\n", s->seg_manager->getScript(pos.segment)->nr);
|
sciprintf("\nOwner script:\t%d\n", s->seg_manager->getScript(pos.segment)->nr);
|
||||||
|
@ -2798,7 +2798,7 @@ int c_sci_version(EngineState *s, const Common::Array<cmd_param_t> &cmdParams) {
|
||||||
|
|
||||||
static void _print_address(void * _, reg_t addr) {
|
static void _print_address(void * _, reg_t addr) {
|
||||||
if (addr.segment)
|
if (addr.segment)
|
||||||
sciprintf(" "PREG"\n", PRINT_REG(addr));
|
sciprintf(" %04x:%04x\n", PRINT_REG(addr));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int c_gc_show_reachable(EngineState *s, const Common::Array<cmd_param_t> &cmdParams) {
|
static int c_gc_show_reachable(EngineState *s, const Common::Array<cmd_param_t> &cmdParams) {
|
||||||
|
@ -2810,7 +2810,7 @@ static int c_gc_show_reachable(EngineState *s, const Common::Array<cmd_param_t>
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
sciprintf("Reachable from "PREG":\n", PRINT_REG(addr));
|
sciprintf("Reachable from %04x:%04x:\n", PRINT_REG(addr));
|
||||||
mobj->listAllOutgoingReferences(s, addr, NULL, _print_address);
|
mobj->listAllOutgoingReferences(s, addr, NULL, _print_address);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -2841,7 +2841,7 @@ static int c_gc_normalise(EngineState *s, const Common::Array<cmd_param_t> &cmdP
|
||||||
}
|
}
|
||||||
|
|
||||||
addr = mobj->findCanonicAddress(s->seg_manager, addr);
|
addr = mobj->findCanonicAddress(s->seg_manager, addr);
|
||||||
sciprintf(" "PREG"\n", PRINT_REG(addr));
|
sciprintf(" %04x:%04x\n", PRINT_REG(addr));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -2857,7 +2857,7 @@ static int c_gc_list_reachable(EngineState *s, const Common::Array<cmd_param_t>
|
||||||
|
|
||||||
sciprintf("Reachable references (normalised):\n");
|
sciprintf("Reachable references (normalised):\n");
|
||||||
for (reg_t_hash_map::iterator i = use_map->begin(); i != use_map->end(); ++i) {
|
for (reg_t_hash_map::iterator i = use_map->begin(); i != use_map->end(); ++i) {
|
||||||
sciprintf(" - "PREG"\n", PRINT_REG(i->_key));
|
sciprintf(" - %04x:%04x\n", PRINT_REG(i->_key));
|
||||||
}
|
}
|
||||||
|
|
||||||
delete use_map;
|
delete use_map;
|
||||||
|
@ -2881,11 +2881,11 @@ void script_debug(EngineState *s, reg_t *pc, StackPtr *sp, StackPtr *pp, reg_t *
|
||||||
p_pp = pp;
|
p_pp = pp;
|
||||||
p_objp = objp;
|
p_objp = objp;
|
||||||
p_restadjust = restadjust;
|
p_restadjust = restadjust;
|
||||||
sciprintf("%d: acc="PREG" ", script_step_counter, PRINT_REG(s->r_acc));
|
sciprintf("%d: acc=%04x:%04x ", script_step_counter, PRINT_REG(s->r_acc));
|
||||||
_debugstate_valid = 1;
|
_debugstate_valid = 1;
|
||||||
disassemble(s, *pc, 0, 1);
|
disassemble(s, *pc, 0, 1);
|
||||||
if (_debug_seeking == _DEBUG_SEEK_GLOBAL)
|
if (_debug_seeking == _DEBUG_SEEK_GLOBAL)
|
||||||
sciprintf("Global %d (0x%x) = "PREG"\n", _debug_seek_special,
|
sciprintf("Global %d (0x%x) = %04x:%04x\n", _debug_seek_special,
|
||||||
_debug_seek_special, PRINT_REG(s->script_000->locals_block->_locals[_debug_seek_special]));
|
_debug_seek_special, PRINT_REG(s->script_000->locals_block->_locals[_debug_seek_special]));
|
||||||
|
|
||||||
_debugstate_valid = old_debugstate;
|
_debugstate_valid = old_debugstate;
|
||||||
|
@ -2924,7 +2924,7 @@ void script_debug(EngineState *s, reg_t *pc, StackPtr *sp, StackPtr *pp, reg_t *
|
||||||
}
|
}
|
||||||
|
|
||||||
case _DEBUG_SEEK_SO:
|
case _DEBUG_SEEK_SO:
|
||||||
if (!REG_EQ(*pc, _debug_seek_reg) || (int)s->_executionStack.size()-1 != _debug_seek_level)
|
if ((*pc != _debug_seek_reg) || (int)s->_executionStack.size()-1 != _debug_seek_level)
|
||||||
return;
|
return;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -485,7 +485,7 @@ void SegManager::scriptRelocate(reg_t block) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!done) {
|
if (!done) {
|
||||||
sciprintf("While processing relocation block "PREG":\n", PRINT_REG(block));
|
sciprintf("While processing relocation block %04x:%04x:\n", PRINT_REG(block));
|
||||||
sciprintf("Relocation failed for index %04x (%d/%d)\n", pos, i + 1, count);
|
sciprintf("Relocation failed for index %04x (%d/%d)\n", pos, i + 1, count);
|
||||||
if (scr->locals_block)
|
if (scr->locals_block)
|
||||||
sciprintf("- locals: %d at %04x\n", scr->locals_block->_locals.size(), scr->locals_offset);
|
sciprintf("- locals: %d at %04x\n", scr->locals_block->_locals.size(), scr->locals_offset);
|
||||||
|
@ -526,7 +526,7 @@ void SegManager::heapRelocate(reg_t block) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!done) {
|
if (!done) {
|
||||||
sciprintf("While processing relocation block "PREG":\n", PRINT_REG(block));
|
sciprintf("While processing relocation block %04x:%04x:\n", PRINT_REG(block));
|
||||||
sciprintf("Relocation failed for index %04x (%d/%d)\n", pos, i + 1, count);
|
sciprintf("Relocation failed for index %04x (%d/%d)\n", pos, i + 1, count);
|
||||||
if (scr->locals_block)
|
if (scr->locals_block)
|
||||||
sciprintf("- locals: %d at %04x\n", scr->locals_block->_locals.size(), scr->locals_offset);
|
sciprintf("- locals: %d at %04x\n", scr->locals_block->_locals.size(), scr->locals_offset);
|
||||||
|
@ -849,7 +849,7 @@ void SegManager::free_hunk_entry(reg_t addr) {
|
||||||
HunkTable *ht = (HunkTable *)GET_SEGMENT(*this, addr.segment, MEM_OBJ_HUNK);
|
HunkTable *ht = (HunkTable *)GET_SEGMENT(*this, addr.segment, MEM_OBJ_HUNK);
|
||||||
|
|
||||||
if (!ht) {
|
if (!ht) {
|
||||||
sciprintf("Attempt to free Hunk from address "PREG": Invalid segment type\n", PRINT_REG(addr));
|
sciprintf("Attempt to free Hunk from address %04x:%04x: Invalid segment type\n", PRINT_REG(addr));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -927,14 +927,14 @@ Hunk *SegManager::alloc_Hunk(reg_t *addr) {
|
||||||
}
|
}
|
||||||
|
|
||||||
byte *MemObject::dereference(reg_t pointer, int *size) {
|
byte *MemObject::dereference(reg_t pointer, int *size) {
|
||||||
error("Error: Trying to dereference pointer "PREG" to inappropriate segment",
|
error("Error: Trying to dereference pointer %04x:%04x to inappropriate segment",
|
||||||
PRINT_REG(pointer));
|
PRINT_REG(pointer));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
byte *Script::dereference(reg_t pointer, int *size) {
|
byte *Script::dereference(reg_t pointer, int *size) {
|
||||||
if (pointer.offset > buf_size) {
|
if (pointer.offset > buf_size) {
|
||||||
sciprintf("Error: Attempt to dereference invalid pointer "PREG" into script segment (script size=%d)\n",
|
sciprintf("Error: Attempt to dereference invalid pointer %04x:%04x into script segment (script size=%d)\n",
|
||||||
PRINT_REG(pointer), (uint)buf_size);
|
PRINT_REG(pointer), (uint)buf_size);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -982,13 +982,13 @@ byte *SystemStrings::dereference(reg_t pointer, int *size) {
|
||||||
if (pointer.offset < SYS_STRINGS_MAX && strings[pointer.offset].name)
|
if (pointer.offset < SYS_STRINGS_MAX && strings[pointer.offset].name)
|
||||||
return (byte *)(strings[pointer.offset].value);
|
return (byte *)(strings[pointer.offset].value);
|
||||||
|
|
||||||
error("Attempt to dereference invalid pointer "PREG"", PRINT_REG(pointer));
|
error("Attempt to dereference invalid pointer %04x:%04x", PRINT_REG(pointer));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
byte *SegManager::dereference(reg_t pointer, int *size) {
|
byte *SegManager::dereference(reg_t pointer, int *size) {
|
||||||
if (!pointer.segment || (pointer.segment >= _heap.size()) || !_heap[pointer.segment]) {
|
if (!pointer.segment || (pointer.segment >= _heap.size()) || !_heap[pointer.segment]) {
|
||||||
error("Attempt to dereference invalid pointer "PREG"", PRINT_REG(pointer));
|
error("Attempt to dereference invalid pointer %04x:%04x", PRINT_REG(pointer));
|
||||||
return NULL; /* Invalid */
|
return NULL; /* Invalid */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1055,7 +1055,7 @@ reg_t Script::findCanonicAddress(SegManager *segmgr, reg_t addr) {
|
||||||
|
|
||||||
void Script::freeAtAddress(SegManager *segmgr, reg_t addr) {
|
void Script::freeAtAddress(SegManager *segmgr, reg_t addr) {
|
||||||
/*
|
/*
|
||||||
sciprintf("[GC] Freeing script "PREG"\n", PRINT_REG(addr));
|
sciprintf("[GC] Freeing script %04x:%04x\n", PRINT_REG(addr));
|
||||||
if (locals_segment)
|
if (locals_segment)
|
||||||
sciprintf("[GC] Freeing locals %04x:0000\n", locals_segment);
|
sciprintf("[GC] Freeing locals %04x:0000\n", locals_segment);
|
||||||
*/
|
*/
|
||||||
|
@ -1082,10 +1082,10 @@ void Script::listAllOutgoingReferences(EngineState *s, reg_t addr, void *param,
|
||||||
for (uint i = 0; i < obj._variables.size(); i++)
|
for (uint i = 0; i < obj._variables.size(); i++)
|
||||||
(*note)(param, obj._variables[i]);
|
(*note)(param, obj._variables[i]);
|
||||||
} else {
|
} else {
|
||||||
warning("Request for outgoing script-object reference at "PREG" yielded invalid index %d", PRINT_REG(addr), idx);
|
warning("Request for outgoing script-object reference at %04x:%04x yielded invalid index %d", PRINT_REG(addr), idx);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* fprintf(stderr, "Unexpected request for outgoing script-object references at "PREG"\n", PRINT_REG(addr));*/
|
/* fprintf(stderr, "Unexpected request for outgoing script-object references at %04x:%04x\n", PRINT_REG(addr));*/
|
||||||
/* Happens e.g. when we're looking into strings */
|
/* Happens e.g. when we're looking into strings */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1107,7 +1107,7 @@ void CloneTable::listAllOutgoingReferences(EngineState *s, reg_t addr, void *par
|
||||||
// assert(addr.segment == _segId);
|
// assert(addr.segment == _segId);
|
||||||
|
|
||||||
if (!clone_table->isValidEntry(addr.offset)) {
|
if (!clone_table->isValidEntry(addr.offset)) {
|
||||||
fprintf(stderr, "Unexpected request for outgoing references from clone at "PREG"\n", PRINT_REG(addr));
|
fprintf(stderr, "Unexpected request for outgoing references from clone at %04x:%04x\n", PRINT_REG(addr));
|
||||||
// BREAKPOINT();
|
// BREAKPOINT();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1120,7 +1120,7 @@ void CloneTable::listAllOutgoingReferences(EngineState *s, reg_t addr, void *par
|
||||||
|
|
||||||
// Note that this also includes the 'base' object, which is part of the script and therefore also emits the locals.
|
// Note that this also includes the 'base' object, which is part of the script and therefore also emits the locals.
|
||||||
(*note)(param, clone->pos);
|
(*note)(param, clone->pos);
|
||||||
//sciprintf("[GC] Reporting clone-pos "PREG"\n", PRINT_REG(clone->pos));
|
//sciprintf("[GC] Reporting clone-pos %04x:%04x\n", PRINT_REG(clone->pos));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CloneTable::freeAtAddress(SegManager *segmgr, reg_t addr) {
|
void CloneTable::freeAtAddress(SegManager *segmgr, reg_t addr) {
|
||||||
|
@ -1133,15 +1133,15 @@ void CloneTable::freeAtAddress(SegManager *segmgr, reg_t addr) {
|
||||||
|
|
||||||
#ifdef GC_DEBUG
|
#ifdef GC_DEBUG
|
||||||
if (!(victim_obj->flags & OBJECT_FLAG_FREED))
|
if (!(victim_obj->flags & OBJECT_FLAG_FREED))
|
||||||
sciprintf("[GC] Warning: Clone "PREG" not reachable and not freed (freeing now)\n", PRINT_REG(addr));
|
sciprintf("[GC] Warning: Clone %04x:%04x not reachable and not freed (freeing now)\n", PRINT_REG(addr));
|
||||||
#ifdef GC_DEBUG_VERBOSE
|
#ifdef GC_DEBUG_VERBOSE
|
||||||
else
|
else
|
||||||
sciprintf("[GC-DEBUG] Clone "PREG": Freeing\n", PRINT_REG(addr));
|
sciprintf("[GC-DEBUG] Clone %04x:%04x: Freeing\n", PRINT_REG(addr));
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
/*
|
/*
|
||||||
sciprintf("[GC] Clone "PREG": Freeing\n", PRINT_REG(addr));
|
sciprintf("[GC] Clone %04x:%04x: Freeing\n", PRINT_REG(addr));
|
||||||
sciprintf("[GC] Clone had pos "PREG"\n", PRINT_REG(victim_obj->pos));
|
sciprintf("[GC] Clone had pos %04x:%04x\n", PRINT_REG(victim_obj->pos));
|
||||||
*/
|
*/
|
||||||
clone_table->freeEntry(addr.offset);
|
clone_table->freeEntry(addr.offset);
|
||||||
}
|
}
|
||||||
|
@ -1186,7 +1186,7 @@ void ListTable::freeAtAddress(SegManager *segmgr, reg_t sub_addr) {
|
||||||
|
|
||||||
void ListTable::listAllOutgoingReferences(EngineState *s, reg_t addr, void *param, NoteCallback note) {
|
void ListTable::listAllOutgoingReferences(EngineState *s, reg_t addr, void *param, NoteCallback note) {
|
||||||
if (!isValidEntry(addr.offset)) {
|
if (!isValidEntry(addr.offset)) {
|
||||||
warning("Invalid list referenced for outgoing references: "PREG"", PRINT_REG(addr));
|
warning("Invalid list referenced for outgoing references: %04x:%04x", PRINT_REG(addr));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1206,7 +1206,7 @@ void NodeTable::freeAtAddress(SegManager *segmgr, reg_t sub_addr) {
|
||||||
|
|
||||||
void NodeTable::listAllOutgoingReferences(EngineState *s, reg_t addr, void *param, NoteCallback note) {
|
void NodeTable::listAllOutgoingReferences(EngineState *s, reg_t addr, void *param, NoteCallback note) {
|
||||||
if (!isValidEntry(addr.offset)) {
|
if (!isValidEntry(addr.offset)) {
|
||||||
warning("Invalid node referenced for outgoing references: "PREG"", PRINT_REG(addr));
|
warning("Invalid node referenced for outgoing references: %04x:%04x", PRINT_REG(addr));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Node *node = &(_table[addr.offset]);
|
Node *node = &(_table[addr.offset]);
|
||||||
|
|
|
@ -337,7 +337,7 @@ ExecStack *send_selector(EngineState *s, reg_t send_obj, reg_t work_obj, StackPt
|
||||||
cmplen = 256;
|
cmplen = 256;
|
||||||
|
|
||||||
if (bp->type == BREAK_SELECTOR && !strncmp(bp->data.name, method_name, cmplen)) {
|
if (bp->type == BREAK_SELECTOR && !strncmp(bp->data.name, method_name, cmplen)) {
|
||||||
sciprintf("Break on %s (in ["PREG"])\n", method_name, PRINT_REG(send_obj));
|
sciprintf("Break on %s (in [%04x:%04x])\n", method_name, PRINT_REG(send_obj));
|
||||||
script_debug_flag = print_send_action = 1;
|
script_debug_flag = print_send_action = 1;
|
||||||
breakpointFlag = true;
|
breakpointFlag = true;
|
||||||
break;
|
break;
|
||||||
|
@ -347,12 +347,12 @@ ExecStack *send_selector(EngineState *s, reg_t send_obj, reg_t work_obj, StackPt
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef VM_DEBUG_SEND
|
#ifdef VM_DEBUG_SEND
|
||||||
sciprintf("Send to "PREG", selector %04x (%s):", PRINT_REG(send_obj), selector, s->_selectorNames[selector].c_str());
|
sciprintf("Send to %04x:%04x, selector %04x (%s):", PRINT_REG(send_obj), selector, s->_selectorNames[selector].c_str());
|
||||||
#endif // VM_DEBUG_SEND
|
#endif // VM_DEBUG_SEND
|
||||||
|
|
||||||
switch (lookup_selector(s, send_obj, selector, &varp, &funcp)) {
|
switch (lookup_selector(s, send_obj, selector, &varp, &funcp)) {
|
||||||
case kSelectorNone:
|
case kSelectorNone:
|
||||||
sciprintf("Send to invalid selector 0x%x of object at "PREG"\n", 0xffff & selector, PRINT_REG(send_obj));
|
sciprintf("Send to invalid selector 0x%x of object at %04x:%04x\n", 0xffff & selector, PRINT_REG(send_obj));
|
||||||
|
|
||||||
// WORKAROUND: LSL6 tries to access the invalid 'keep' selector of the game object.
|
// WORKAROUND: LSL6 tries to access the invalid 'keep' selector of the game object.
|
||||||
// FIXME: Find out if this is a game bug.
|
// FIXME: Find out if this is a game bug.
|
||||||
|
@ -370,7 +370,7 @@ ExecStack *send_selector(EngineState *s, reg_t send_obj, reg_t work_obj, StackPt
|
||||||
#ifdef VM_DEBUG_SEND
|
#ifdef VM_DEBUG_SEND
|
||||||
sciprintf("Varselector: ");
|
sciprintf("Varselector: ");
|
||||||
if (argc)
|
if (argc)
|
||||||
sciprintf("Write "PREG"\n", PRINT_REG(argp[1]));
|
sciprintf("Write %04x:%04x\n", PRINT_REG(argp[1]));
|
||||||
else
|
else
|
||||||
sciprintf("Read\n");
|
sciprintf("Read\n");
|
||||||
#endif // VM_DEBUG_SEND
|
#endif // VM_DEBUG_SEND
|
||||||
|
@ -391,7 +391,7 @@ ExecStack *send_selector(EngineState *s, reg_t send_obj, reg_t work_obj, StackPt
|
||||||
reg_t oldReg = *varp;
|
reg_t oldReg = *varp;
|
||||||
reg_t newReg = argp[1];
|
reg_t newReg = argp[1];
|
||||||
|
|
||||||
sciprintf("[write to selector: change "PREG" to "PREG"]\n", PRINT_REG(oldReg), PRINT_REG(newReg));
|
sciprintf("[write to selector: change %04x:%04x to %04x:%04x]\n", PRINT_REG(oldReg), PRINT_REG(newReg));
|
||||||
print_send_action = 0;
|
print_send_action = 0;
|
||||||
}
|
}
|
||||||
CallsStruct call;
|
CallsStruct call;
|
||||||
|
@ -405,7 +405,7 @@ ExecStack *send_selector(EngineState *s, reg_t send_obj, reg_t work_obj, StackPt
|
||||||
break;
|
break;
|
||||||
#ifdef STRICT_SEND
|
#ifdef STRICT_SEND
|
||||||
default:
|
default:
|
||||||
sciprintf("Send error: Variable selector %04x in "PREG" called with %04x params\n", selector, PRINT_REG(send_obj), argc);
|
sciprintf("Send error: Variable selector %04x in %04x:%04x called with %04x params\n", selector, PRINT_REG(send_obj), argc);
|
||||||
script_debug_flag = 1; // Enter debug mode
|
script_debug_flag = 1; // Enter debug mode
|
||||||
_debug_seeking = _debug_step_running = 0;
|
_debug_seeking = _debug_step_running = 0;
|
||||||
#endif
|
#endif
|
||||||
|
@ -421,7 +421,7 @@ ExecStack *send_selector(EngineState *s, reg_t send_obj, reg_t work_obj, StackPt
|
||||||
if (i + 1 < argc)
|
if (i + 1 < argc)
|
||||||
sciprintf(", ");
|
sciprintf(", ");
|
||||||
}
|
}
|
||||||
sciprintf(") at "PREG"\n", PRINT_REG(funcp));
|
sciprintf(") at %04x:%04x\n", PRINT_REG(funcp));
|
||||||
#endif // VM_DEBUG_SEND
|
#endif // VM_DEBUG_SEND
|
||||||
if (print_send_action) {
|
if (print_send_action) {
|
||||||
sciprintf("[invoke selector]\n");
|
sciprintf("[invoke selector]\n");
|
||||||
|
@ -531,7 +531,7 @@ static reg_t pointer_add(EngineState *s, reg_t base, int offset) {
|
||||||
|
|
||||||
if (!mobj) {
|
if (!mobj) {
|
||||||
script_debug_flag = script_error_flag = 1;
|
script_debug_flag = script_error_flag = 1;
|
||||||
sciprintf("[VM] Error: Attempt to add %d to invalid pointer "PREG"!", offset, PRINT_REG(base));
|
sciprintf("[VM] Error: Attempt to add %d to invalid pointer %04x:%04x!", offset, PRINT_REG(base));
|
||||||
return NULL_REG;
|
return NULL_REG;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -549,7 +549,7 @@ static reg_t pointer_add(EngineState *s, reg_t base, int offset) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
sciprintf("[VM] Error: Attempt to add %d to pointer "PREG": Pointer arithmetics of this type unsupported!", offset, PRINT_REG(base));
|
sciprintf("[VM] Error: Attempt to add %d to pointer %04x:%04x: Pointer arithmetics of this type unsupported!", offset, PRINT_REG(base));
|
||||||
return NULL_REG;
|
return NULL_REG;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -656,7 +656,7 @@ void run_vm(EngineState *s, int restoring) {
|
||||||
code_buf_size = scr->buf_size;
|
code_buf_size = scr->buf_size;
|
||||||
#endif
|
#endif
|
||||||
/*if (!obj) {
|
/*if (!obj) {
|
||||||
SCIkdebug(SCIkWARNING, "Running with non-existant self= "PREG"\n", PRINT_REG(xs->objp));
|
SCIkdebug(SCIkWARNING, "Running with non-existant self= %04x:%04x\n", PRINT_REG(xs->objp));
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
local_script = script_locate_by_segment(s, xs->local_segment);
|
local_script = script_locate_by_segment(s, xs->local_segment);
|
||||||
|
@ -782,7 +782,7 @@ void run_vm(EngineState *s, int restoring) {
|
||||||
// Pointer arithmetics!
|
// Pointer arithmetics!
|
||||||
if (s->r_acc.segment) {
|
if (s->r_acc.segment) {
|
||||||
if (r_temp.segment) {
|
if (r_temp.segment) {
|
||||||
sciprintf("Error: Attempt to add two pointers, stack="PREG" and acc="PREG"!\n",
|
sciprintf("Error: Attempt to add two pointers, stack=%04x:%04x and acc=%04x:%04x!\n",
|
||||||
PRINT_REG(r_temp), PRINT_REG(s->r_acc));
|
PRINT_REG(r_temp), PRINT_REG(s->r_acc));
|
||||||
script_debug_flag = script_error_flag = 1;
|
script_debug_flag = script_error_flag = 1;
|
||||||
offset = 0;
|
offset = 0;
|
||||||
|
@ -809,7 +809,7 @@ void run_vm(EngineState *s, int restoring) {
|
||||||
// Pointer arithmetics!
|
// Pointer arithmetics!
|
||||||
if (s->r_acc.segment) {
|
if (s->r_acc.segment) {
|
||||||
if (r_temp.segment) {
|
if (r_temp.segment) {
|
||||||
sciprintf("Error: Attempt to subtract two pointers, stack="PREG" and acc="PREG"!\n",
|
sciprintf("Error: Attempt to subtract two pointers, stack=%04x:%04x and acc=%04x:%04x!\n",
|
||||||
PRINT_REG(r_temp), PRINT_REG(s->r_acc));
|
PRINT_REG(r_temp), PRINT_REG(s->r_acc));
|
||||||
script_debug_flag = script_error_flag = 1;
|
script_debug_flag = script_error_flag = 1;
|
||||||
offset = 0;
|
offset = 0;
|
||||||
|
@ -876,14 +876,14 @@ void run_vm(EngineState *s, int restoring) {
|
||||||
case 0x0d: // eq?
|
case 0x0d: // eq?
|
||||||
s->r_prev = s->r_acc;
|
s->r_prev = s->r_acc;
|
||||||
r_temp = POP32();
|
r_temp = POP32();
|
||||||
s->r_acc = make_reg(0, REG_EQ(r_temp, s->r_acc));
|
s->r_acc = make_reg(0, r_temp == s->r_acc);
|
||||||
// Explicitly allow pointers to be compared
|
// Explicitly allow pointers to be compared
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x0e: // ne?
|
case 0x0e: // ne?
|
||||||
s->r_prev = s->r_acc;
|
s->r_prev = s->r_acc;
|
||||||
r_temp = POP32();
|
r_temp = POP32();
|
||||||
s->r_acc = make_reg(0, !REG_EQ(r_temp, s->r_acc));
|
s->r_acc = make_reg(0, r_temp != s->r_acc);
|
||||||
// Explicitly allow pointers to be compared
|
// Explicitly allow pointers to be compared
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1238,7 +1238,7 @@ void run_vm(EngineState *s, int restoring) {
|
||||||
|
|
||||||
#ifndef DISABLE_VALIDATIONS
|
#ifndef DISABLE_VALIDATIONS
|
||||||
if (s->r_acc.offset >= code_buf_size) {
|
if (s->r_acc.offset >= code_buf_size) {
|
||||||
sciprintf("VM: lofsa operation overflowed: "PREG" beyond end"
|
sciprintf("VM: lofsa operation overflowed: %04x:%04x beyond end"
|
||||||
" of script (at %04x)\n", PRINT_REG(s->r_acc), code_buf_size);
|
" of script (at %04x)\n", PRINT_REG(s->r_acc), code_buf_size);
|
||||||
script_error_flag = script_debug_flag = 1;
|
script_error_flag = script_debug_flag = 1;
|
||||||
}
|
}
|
||||||
|
@ -1254,7 +1254,7 @@ void run_vm(EngineState *s, int restoring) {
|
||||||
r_temp.offset = xs->addr.pc.offset + opparams[0];
|
r_temp.offset = xs->addr.pc.offset + opparams[0];
|
||||||
#ifndef DISABLE_VALIDATIONS
|
#ifndef DISABLE_VALIDATIONS
|
||||||
if (r_temp.offset >= code_buf_size) {
|
if (r_temp.offset >= code_buf_size) {
|
||||||
sciprintf("VM: lofss operation overflowed: "PREG" beyond end"
|
sciprintf("VM: lofss operation overflowed: %04x:%04x beyond end"
|
||||||
" of script (at %04x)\n", PRINT_REG(r_temp), code_buf_size);
|
" of script (at %04x)\n", PRINT_REG(r_temp), code_buf_size);
|
||||||
script_error_flag = script_debug_flag = 1;
|
script_error_flag = script_debug_flag = 1;
|
||||||
}
|
}
|
||||||
|
@ -1545,7 +1545,7 @@ SelectorType lookup_selector(EngineState *s, reg_t obj_location, Selector select
|
||||||
|
|
||||||
if (!obj) {
|
if (!obj) {
|
||||||
CORE_ERROR("SLC-LU", "Attempt to send to non-object or invalid script");
|
CORE_ERROR("SLC-LU", "Attempt to send to non-object or invalid script");
|
||||||
sciprintf("Address was "PREG"\n", PRINT_REG(obj_location));
|
sciprintf("Address was %04x:%04x\n", PRINT_REG(obj_location));
|
||||||
return kSelectorNone;
|
return kSelectorNone;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1557,8 +1557,8 @@ SelectorType lookup_selector(EngineState *s, reg_t obj_location, Selector select
|
||||||
|
|
||||||
if (!obj) {
|
if (!obj) {
|
||||||
CORE_ERROR("SLC-LU", "Error while looking up Species class");
|
CORE_ERROR("SLC-LU", "Error while looking up Species class");
|
||||||
sciprintf("Original address was "PREG"\n", PRINT_REG(obj_location));
|
sciprintf("Original address was %04x:%04x\n", PRINT_REG(obj_location));
|
||||||
sciprintf("Species address was "PREG"\n", PRINT_REG(obj->_variables[SCRIPT_SPECIES_SELECTOR]));
|
sciprintf("Species address was %04x:%04x\n", PRINT_REG(obj->_variables[SCRIPT_SPECIES_SELECTOR]));
|
||||||
return kSelectorNone;
|
return kSelectorNone;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,6 @@ struct reg_t {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#define PREG "%04x:%04x"
|
|
||||||
#define PRINT_REG(r) (0xffff) & (unsigned) (r).segment, (unsigned) (r).offset
|
#define PRINT_REG(r) (0xffff) & (unsigned) (r).segment, (unsigned) (r).offset
|
||||||
|
|
||||||
// Stack pointer type
|
// Stack pointer type
|
||||||
|
@ -60,7 +59,6 @@ typedef reg_t *StackPtr;
|
||||||
typedef int Selector;
|
typedef int Selector;
|
||||||
#define NULL_SELECTOR -1
|
#define NULL_SELECTOR -1
|
||||||
|
|
||||||
#define PSTK "ST:%04x"
|
|
||||||
#define PRINT_STK(v) (unsigned) (v - s->stack_base)
|
#define PRINT_STK(v) (unsigned) (v - s->stack_base)
|
||||||
|
|
||||||
static inline reg_t make_reg(int segment, int offset) {
|
static inline reg_t make_reg(int segment, int offset) {
|
||||||
|
@ -70,8 +68,6 @@ static inline reg_t make_reg(int segment, int offset) {
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define IS_NULL_REG(r) ((r).isNull())
|
|
||||||
#define REG_EQ(a, b) ((a) == (b))
|
|
||||||
extern reg_t NULL_REG;
|
extern reg_t NULL_REG;
|
||||||
|
|
||||||
} // End of namespace Sci
|
} // End of namespace Sci
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue