X-Git-Url: http://git.squeep.com/?p=dcpu16;a=blobdiff_plain;f=dcpu16.c;h=165b58984e298d76a2cdce30334a2dc141826344;hp=b88cf0583a73148840a0b645e843578ded23fa03;hb=bca632cc1c329a45dde32f476b0ef9f6ef5db05a;hpb=9cf5993655d58da3c9f508ede3ac43a29e6cc6b5 diff --git a/dcpu16.c b/dcpu16.c index b88cf05..165b589 100644 --- a/dcpu16.c +++ b/dcpu16.c @@ -87,7 +87,7 @@ void dcpu16_trace_cb_set(void (*fn)(char *fmt, ...)) { * invokes callbacks for specified event */ static inline -void acct_event_(struct dcpu16 *vm, dcpu16_acct_event_ ev, DCPU16_WORD addr) { +void acct_event_(struct dcpu16 *vm, dcpu16_acct_event ev, DCPU16_WORD addr) { struct dcpu16_acct_cb *cb = vm->cb_table_; size_t i; @@ -763,7 +763,7 @@ void dcpu16_dump_ram(struct dcpu16 *d, DCPU16_WORD start, DCPU16_WORD end) { * Register callback fn to be triggered whenever event matching any events * in bitwise mask occur. */ -int dcpu16_acct_add(struct dcpu16 *vm, dcpu16_acct_event_ mask, void (*fn)(struct dcpu16 *, dcpu16_acct_event_, DCPU16_WORD, void *), void *data) { +int dcpu16_acct_add(struct dcpu16 *vm, dcpu16_acct_event mask, void (*fn)(struct dcpu16 *, dcpu16_acct_event, DCPU16_WORD, void *), void *data) { struct dcpu16_acct_cb cb; cb.mask = mask; @@ -788,12 +788,20 @@ int dcpu16_acct_add(struct dcpu16 *vm, dcpu16_acct_event_ mask, void (*fn)(struc } /* dcpu16_reset - * resets a dcpu16 instance to initial state + * signals cpu to reset, clearing runstate and ram, then reload any init callbacks */ void dcpu16_reset(struct dcpu16 *d) { if (!d) return; - memset(d, 0, sizeof *d); + d->cycle = 0; + memset(d->reg, 0, sizeof d->reg); + d->pc = 0; + d->sp = 0; + d->o = 0; + d->skip_ = 0; + memset(d->ram, 0, sizeof d->ram); + + acct_event_(d, DCPU16_ACCT_EV_RESET, 0); } /* dcpu16_new