commit 9c1d441ae0ba390b790332229e37df211ab5b20b
parent 78b6c121ea9a9e9106c677168677d4d1388adb03
Author: bsandro <brian.drosan@gmail.com>
Date:   Tue, 11 Jan 2022 09:36:18 +0200
ntohl/htonl conditional wrappers
Diffstat:
| M | main.c | | | 28 | +++++++++++++--------------- | 
1 file changed, 13 insertions(+), 15 deletions(-)
diff --git a/main.c b/main.c
@@ -8,7 +8,15 @@
 #include <unistd.h>
 #include <sys/stat.h>
 
-#define FILENAME "codex.umz"
+#ifndef __MWERKS__
+#define _NTOHL ntohl
+#define _HTONL htonl
+#else
+#define _NTOHL
+#define _HTONL
+#endif
+
+#define FILENAME "SANDMARK.UMZ"
 #define PLATTER_SIZE 4
 
 struct array_t {
@@ -49,7 +57,7 @@ struct instruction_t {
 	uint8_t reg_a, reg_b, reg_c;
 	uint32_t value;
 };
-uint32_t ntohl(const uint32_t num);
+
 char * int2bin(uint32_t num);
 void print_instruction(struct instruction_t instruction);
 void exec_instruction(struct state_t *state, struct instruction_t in);
@@ -78,7 +86,7 @@ int main(void)
 
 	while (1) {
 		struct instruction_t instruction = {0};
-		uint32_t platter = state->arena.arrays[0].data[state->finger];
+		uint32_t platter = _NTOHL(state->arena.arrays[0].data[state->finger]);
 		//printf("[%s]", int2bin(platter));
 		instruction.opcode = platter >> 28;
 		if (instruction.opcode == ORTH) {
@@ -122,10 +130,10 @@ void exec_instruction(struct state_t *state, struct instruction_t in) {
 		if (state->registers[in.reg_c] != 0) state->registers[in.reg_a] = state->registers[in.reg_b];
 		break;
 	case ARRI:
-		state->registers[in.reg_a] = state->arena.arrays[state->registers[in.reg_b]].data[state->registers[in.reg_c]];
+		state->registers[in.reg_a] = _NTOHL(state->arena.arrays[state->registers[in.reg_b]].data[state->registers[in.reg_c]]);
 		break;
 	case ARRA:
-		state->arena.arrays[state->registers[in.reg_a]].data[state->registers[in.reg_b]] = state->registers[in.reg_c];
+		state->arena.arrays[state->registers[in.reg_a]].data[state->registers[in.reg_b]] = _HTONL(state->registers[in.reg_c]);
 		break;
 	case ADD:
 		state->registers[in.reg_a] = state->registers[in.reg_b] + state->registers[in.reg_c]; //@todo: modulo 2^32 ?
@@ -200,12 +208,3 @@ void array_dup(struct arena_t *arena, uint32_t index) {
 	arena->arrays[0].size = arena->arrays[index].size;
 	//printf("memcpy ok\n");
 }
-
-uint32_t ntohl(const uint32_t num) {
-	uint8_t data[4] = {0};
-	memcpy(&data, &num, sizeof(data));
-	return ((uint32_t)data[3] << 0)
-			| ((uint32_t)data[2] << 8)
-			| ((uint32_t)data[3] << 16)
-			| ((uint32_t)data[4] << 24);
-}
-\ No newline at end of file