umx

UMX VM implementation (ifcfc '06)
git clone git://bsandro.tech/umx
Log | Files | Refs

commit e3c58656dcb744bd6bf43e848028f4e2031ac11d
parent 1ca2c2fcdc0645612f90f8a0e6a152ab9ac110dc
Author: bsandro <[email protected]>
Date:   Mon, 10 Jan 2022 02:58:23 +0200

trying to debug ORTH (bugs out for now)

Diffstat:
Mmain.c | 19++++++++++---------
Mumx | 0
2 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/main.c b/main.c @@ -12,7 +12,7 @@ struct array_t { uint32_t *data; - size_t size; + uint32_t size; }; struct arena_t { @@ -21,9 +21,9 @@ struct arena_t { }; struct state_t { - struct arena_t arena; uint32_t registers[8]; uint32_t finger; + struct arena_t arena; }; enum opcode_t { @@ -77,24 +77,21 @@ int main(void) printf("read ok, %lu platters (%lu bytes)\n", read_platters, state.arena.arrays[0].size); while (1) { - uint32_t platter; struct instruction_t instruction = {0}; - platter = state.arena.arrays[0].data[state.finger]; + uint32_t platter = state.arena.arrays[0].data[state.finger]; instruction.opcode = platter >> 28; if (instruction.opcode == ORTH) { - instruction.reg_a = ((platter >> 25) & 7); + instruction.reg_a = (platter >> 25) & 7; instruction.value = platter & 0x1FFFFFF; } else { instruction.reg_a = (platter & 448) >> 6; // mask 111 000 000 = 448 instruction.reg_b = (platter & 56) >> 3; // mask 000 111 000 = 56 instruction.reg_c = platter & 7; // mask 000 000 111 = 7 } - //print_instruction(instruction); + printf("[%2d][%s][%x]", state.finger, int2bin(platter), platter); + print_instruction(instruction); state.finger++; exec_instruction(&state, instruction); - if (state.finger >= state.arena.arrays[0].size / PLATTER_SIZE) { - break; - } } fclose(f); @@ -190,12 +187,16 @@ void array_free(struct arena_t *arena, uint32_t index) { assert(index < arena->size); free(arena->arrays[index].data); arena->arrays[index].size = 0; + //printf("freed array %lu\n", index); } void array_dup(struct arena_t *arena, uint32_t index) { assert(index < arena->size); array_free(arena, 0); + //printf("attempting malloc...\n"); arena->arrays[0].data = (uint32_t *)malloc(arena->arrays[index].size * PLATTER_SIZE); + //printf("attempting memcpy...\n"); memcpy(arena->arrays[0].data, arena->arrays[index].data, arena->arrays[index].size * PLATTER_SIZE); arena->arrays[0].size = arena->arrays[index].size; + //printf("memcpy ok\n"); } \ No newline at end of file diff --git a/umx b/umx Binary files differ.