From 04628c9415b35ccf00af604e33270910edf07971 Mon Sep 17 00:00:00 2001 From: codinget Date: Fri, 29 Jun 2018 11:08:29 +0200 Subject: [PATCH] Fixed .gitignore, removed old files --- .gitignore | 15 ++ CASIO_fxlib/asm.g1a | Bin 57252 -> 0 bytes CASIO_fxlib/bin/crt0.o | Bin 2236 -> 0 bytes old/asm.c | 269 ------------------------------- old/asm.h | 49 ------ old/debug.h | 12 -- old/main.c | 153 ------------------ old/opcode.c | 18 --- old/opcode.h | 129 --------------- old/platform.c | 0 old/platform.h | 42 ----- old/stack.c | 27 ---- old/stack.h | 23 --- test/count.asm | 352 ----------------------------------------- test/count.bin | Bin 516 -> 0 bytes test/fib.asm | 322 ------------------------------------- test/fib.bin | Bin 495 -> 0 bytes test/sdl.c | 29 ---- test/sdl.out | Bin 9080 -> 0 bytes test/sdl.sh | 3 - test/test.bin | Bin 495 -> 0 bytes 21 files changed, 15 insertions(+), 1428 deletions(-) create mode 100644 .gitignore delete mode 100644 CASIO_fxlib/asm.g1a delete mode 100644 CASIO_fxlib/bin/crt0.o delete mode 100755 old/asm.c delete mode 100755 old/asm.h delete mode 100644 old/debug.h delete mode 100755 old/main.c delete mode 100755 old/opcode.c delete mode 100755 old/opcode.h delete mode 100644 old/platform.c delete mode 100644 old/platform.h delete mode 100755 old/stack.c delete mode 100755 old/stack.h delete mode 100644 test/count.asm delete mode 100755 test/count.bin delete mode 100644 test/fib.asm delete mode 100755 test/fib.bin delete mode 100644 test/sdl.c delete mode 100755 test/sdl.out delete mode 100755 test/sdl.sh delete mode 100644 test/test.bin diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..77fb79b --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +# object files +*.o +*/*.o +*/*/*.o +CASIO_fxlib/asm.bin +CASIO_fxlib/asm.elf + +# executable files +interpreter/casio_asm_interpreter +assembler/casio_asm_assembler +CASIO_fxlib/asm.g1a + +# copied sources +CASIO_fxlib/*.h +CASIO_fxlib/*.c diff --git a/CASIO_fxlib/asm.g1a b/CASIO_fxlib/asm.g1a deleted file mode 100644 index 6bd86ba669dc0f9b76c8d697db8c1b0d1ff3628c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57252 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 - for(; istatus&ASM_RUNNING) tick(state); - else break; - } - return i; -} - -int tick(asm_t *state) { - opcode_t opcode; - opcode_data_t data; - - //read opcode and increment pc - state->registers[0].i+=readOpcode(state->rom, state->registers[0].i, state->romSize, &opcode); - - //decode opcode - decodeOpcode(state, &opcode, &data); - - //execute instruction - execute(state, &data, &opcode); -} - -void initAsm(asm_t *state) { - state->stack.top=0; - for(int i=0; i<256; i++) { - state->stack.elements[i].i=0; - state->registers[i].i=0; - } - state->status=0; -} - -//BEGIN Internal functions - -//BEGIN opcode reading functions -void readOpcodeData(asm_t *state, opcode_t *opcode, opcode_data_t *data, int args, int type) { - if(!args) return; - - if(opcode->nArgs==0) { - //no arguments in opcode, pop everything from stack - popDouble(&state->stack, &(data->arg0.d)); - if(args==2) popDouble(&state->stack, &(data->arg1.d)); - } else if(opcode->nArgs==1) { - //one argument in opcode, get it from registers - data->arg0=state->registers[opcode->arg0_1]; - if(args==2) popDouble(&state->stack, &(data->arg1.d)); - } else if(opcode->nArgs==2) { - //two arguments in opcode, get them from registers - data->arg0=state->registers[opcode->arg0_2]; - if(args==2) data->arg1=state->registers[opcode->arg1_2]; - } else { //opcode->nArgs==3 - //immediate argument in opcode - if(!type) { - //we requested an int, it is directly readable - data->arg0.i=opcode->immediate; - } else { - //we requested a double, it must be decoded - data->arg0.d=(double) ((opcode->immediate>>4)&0x7ff); - data->arg0.d*=(2>>((opcode->immediate&0xf)-7)); - if((opcode->immediate)>>15) data->arg0.d*=-1; - // smmmmmmm mmmmeeee - // immediate=(-1)^(s+1)*m*2^(e-7) - } - if(args==2) popDouble(&state->stack, &(data->arg1.d)); - } -} -void decodeOpcode(asm_t *state, opcode_t *opcode, opcode_data_t *data) { - data->op=opcode->op; - data->nArgs=opcode->nArgs; - //read arguments for opcode - //TODO use a switch instead to handle this - if((data->op>=OP_add_i && data->opop>=OP_pow_i && data->opop>=OP_or_l && data->opop>=OP_jnz_i && data->op<=OP_jind)) { - //op takes two int arguments - readOpcodeData(state, opcode, data, 2, 0); - } else if((data->op>=OP_add_d && data->opop==OP_pow_d || data->op==OP_rt_d) - || (data->op==OP_atan2)) { - //op takes two double arguments - readOpcodeData(state, opcode, data, 2, 1); - } else if((data->op==OP_neg_i) - || (data->op==OP_not) - || (data->op==OP_not_l) - || (data->op==OP_high) - || (data->op==OP_push) - || (data->op==OP_const) - || (data->op==OP_jmp) - || (data->op==OP_call) - || (data->op==OP_ext) - || (data->op==OP_int)) { - //op takes one int argument - readOpcodeData(state, opcode, data, 1, 0); - } else if((data->op==OP_neg_d) - || (data->op>=OP_sin && data->opop==OP_dup)) { - //op takes one double argument - readOpcodeData(state, opcode, data, 1, 1); - } else if((data->op>=OP_store && data->opop==OP_rea_i || data->op==OP_rea_d)) { - //read instructions - readOpcodeData(state, opcode, data, 1, 0); - } else if((data->op==OP_i2d)) { - //i2d - readOpcodeData(state, opcode, data, 1, 0); - } else if((data->op==OP_d2i)) { - //d2i - readOpcodeData(state, opcode, data, 1, 1); - } -} -//END opcode reading functions - -//BEGIN memory access functions -void readMemoryInt(asm_t *state, int address, int *value) { - int val; - if(address<0) return; - if(address<=0xffff) { - if(address+4romSize) { - val=state->rom[address]<<24; - val|=state->rom[address+1]<<16; - val|=state->rom[address+2]<<8; - val|=state->rom[address+3]; - *value=val; - } - } else { - address-=0x10000; - if(address+4ramSize) { - val=state->ram[address]<<24; - val|=state->ram[address+1]<<16; - val|=state->ram[address+2]<<8; - val|=state->ram[address+3]; - *value=val; - } - } -} -void writeMemoryInt(asm_t *state, int address, int value) { - if(address<=0xffff) return; - address-=0x10000; - if(address+4ramSize) { - state->ram[address]=(char) value>>24; - state->ram[address+1]=(char) value>>16; - state->ram[address+2]=(char) value>>8; - state->ram[address+3]=(char) value; - } -} -//END memory access functions - -//BEGIN execution functions -void execute(asm_t *state, opcode_data_t *instruction, opcode_t *raw) { - stack_element_t temp0, temp1; - debug("Opcode: 0x%x, nArgs: %d, PC: 0x%x, stack: %d\n", instruction->op, instruction->nArgs, state->registers[0].i, state->stack.top); - switch(instruction->op) { - case OP_nop: - break; - case OP_halt: - state->status=0; - break; - - //BEGIN arithmetic operations - case OP_add_i: - pushInt(&state->stack, instruction->arg0.i+instruction->arg1.i); - break; - case OP_sub_i: - pushInt(&state->stack, instruction->arg0.i-instruction->arg1.i); - break; - case OP_mod_i: - pushInt(&state->stack, instruction->arg0.i%instruction->arg1.i); - break; - case OP_mul_i: - pushInt(&state->stack, instruction->arg0.i*instruction->arg1.i); - break; - case OP_div_i: - pushInt(&state->stack, instruction->arg0.i/instruction->arg1.i); - break; - case OP_neg_i: - pushInt(&state->stack, -instruction->arg0.i); - break; - /*case OP_pow_i: - pushInt(&state->stack, (int) pow((double) instruction->arg0.i, (double) instruction->arg1.i)); - break;*/ - case OP_add_d: - pushDouble(&state->stack, instruction->arg0.d+instruction->arg1.d); - break; - case OP_sub_d: - pushDouble(&state->stack, instruction->arg0.d-instruction->arg1.d); - break; - case OP_mul_d: - pushDouble(&state->stack, instruction->arg0.d*instruction->arg1.d); - break; - case OP_div_d: - pushDouble(&state->stack, instruction->arg0.d/instruction->arg1.d); - break; - case OP_neg_d: - pushDouble(&state->stack, -instruction->arg0.d); - break; - //END arithmetic operations - - //BEGIN bitwise operations - case OP_shlt: - pushInt(&state->stack, instruction->arg0.i<arg1.i); - break; - case OP_shrt: - pushInt(&state->stack, instruction->arg0.i>>instruction->arg1.i); - break; - //END bitwise operations - - //BEGIN data manipulation operations - case OP_store: - state->registers[raw->arg0_1]=instruction->arg1; - break; - case OP_push: - if(instruction->nArgs==3) { - pushInt(&state->stack, raw->immediate); - } else { - readOpcodeData(state, raw, instruction, 1, 1); - pushDouble(&state->stack, instruction->arg0.d); - } - break; - case OP_high: - pushInt(&state->stack, instruction->arg0.i<<16); - break; - case OP_swap: - popDouble(&state->stack, &temp0.d); - popDouble(&state->stack, &temp1.d); - pushDouble(&state->stack, temp0.d); - pushDouble(&state->stack, temp1.d); - break; - case OP_dup: - pushDouble(&state->stack, instruction->arg0.d); - pushDouble(&state->stack, instruction->arg0.d); - break; - case OP_i2d: - pushDouble(&state->stack, (double) instruction->arg0.i); - break; - case OP_d2i: - pushInt(&state->stack, (int) instruction->arg0.d); - break; - //END data manipulation operations - - //BEGIN flow control operations - case OP_jmp: - state->registers[0].i=instruction->arg0.i%65536; - break; - case OP_jle_i: - popInt(&state->stack, &temp0.i); - if(instruction->arg1.i<=temp0.i) state->registers[0].i=instruction->arg0.i%65536; - break; - case OP_jlt_i: - popInt(&state->stack, &temp0.i); - if(instruction->arg1.iregisters[0].i=instruction->arg0.i%65536; - break; - //END flow control operations - } -} -//END execution functions - -//END Internal functions diff --git a/old/asm.h b/old/asm.h deleted file mode 100755 index 5bd9e83..0000000 --- a/old/asm.h +++ /dev/null @@ -1,49 +0,0 @@ -#ifndef asm_defined -#define asm_defined - -//#include - -#include "opcode.h" -#include "stack.h" -#include "debug.h" - -typedef struct asm_t { - - //the stack for this processor - stack_t stack; - - //the registers for this processor - stack_element_t registers[256]; - - //this processor's rom, can't be written - char* rom; - int romSize; - - //this processor's ram, can be written but not executed - char* ram; - int ramSize; - - //this status - int status; - -} asm_t; - -typedef struct opcode_data_t { - - unsigned nArgs:2; - unsigned op:6; - - stack_element_t arg0; - stack_element_t arg1; - -} opcode_data_t; - -int tick(asm_t *state); -int run(asm_t *state, int cycles); -void initAsm(asm_t *state); - -//BEGIN status defines -#define ASM_RUNNING 0x01 -//END status defines - -#endif diff --git a/old/debug.h b/old/debug.h deleted file mode 100644 index 10ccd6f..0000000 --- a/old/debug.h +++ /dev/null @@ -1,12 +0,0 @@ -//#define DO_DEBUG - -#ifdef DO_DEBUG - -#include -#define debug(...) printf(__VA_ARGS__) - -#else - -#define debug(...) do {} while(0) - -#endif diff --git a/old/main.c b/old/main.c deleted file mode 100755 index 59260a9..0000000 --- a/old/main.c +++ /dev/null @@ -1,153 +0,0 @@ -#include -#include - -#include "stack.h" -#include "asm.h" -#include "debug.h" - -void printState(asm_t *state); -void pushOperation(char* rom, int *pos, opcode_t *opcode); -void writeProgram(asm_t *state); - -int main(int argc, char** argv) { - asm_t state; - char ram[65536]; - char rom[65536]; - state.ramSize=65536; - state.romSize=65536; - state.ram=ram; - state.rom=rom; - initAsm(&state); - - writeProgram(&state); - run(&state, 1000); - printState(&state); -} - -void printState(asm_t *state) { - printf("--asm state--\n"); - printf("PC: 0x%x; romSize: %d\n", state->registers[0].i, state->romSize); - printf("IntHandler: 0x%x\n", state->registers[1].i); - printf("Stack size: %d\n", state->stack.top); - for(int i=0; istack.top; i++) { - printf("\tStack element %d: %d or %lf\n", i, state->stack.elements[i].i, state->stack.elements[i].d); - } - printf("Registers:\n"); - for(int i=2; i<256; i++) { - if(state->registers[i].i==0) continue; - printf("\tRegister %d: %d or %lf\n", i, state->registers[i].i, state->registers[i].d); - } - printf("--end of asm state--\n"); -} - -void pushOperation(char* rom, int *pos, opcode_t *opcode) { - debug("Adding opcode %d with %d arguments at offset 0x%x\n", opcode->op, opcode->nArgs, *pos); - rom[*pos]=opcode->byte0; - (*pos)++; - if(opcode->nArgs>0) { - rom[*pos]=opcode->byte1; - (*pos)++; - if(opcode->nArgs>1) { - rom[*pos]=opcode->byte2; - (*pos)++; - } - } -} - -void writeProgram(asm_t *state) { - int pos=0; - opcode_t opcode; - - //push 0i - opcode.nArgs=3; - opcode.op=OP_push; - opcode.immediate=0; - pushOperation(state->rom, &pos, &opcode); - - //store #2 - opcode.nArgs=1; - opcode.op=OP_store; - opcode.arg0_1=2; - pushOperation(state->rom, &pos, &opcode); - - //push 1i - opcode.nArgs=3; - opcode.op=OP_push; - opcode.immediate=1; - pushOperation(state->rom, &pos, &opcode); - - //store #3 - opcode.nArgs=1; - opcode.op=OP_store; - opcode.arg0_1=3; - pushOperation(state->rom, &pos, &opcode); - - //.loop: - int loop=pos; - - //add_i #2 #3 - opcode.nArgs=2; - opcode.op=OP_add_i; - opcode.arg0_2=2; - opcode.arg1_2=3; - pushOperation(state->rom, &pos, &opcode); - - //store #2 - opcode.nArgs=1; - opcode.op=OP_store; - opcode.arg0_1=2; - pushOperation(state->rom, &pos, &opcode); - - //add_i #2 #3 - opcode.nArgs=2; - opcode.op=OP_add_i; - opcode.arg0_2=2; - opcode.arg1_2=3; - pushOperation(state->rom, &pos, &opcode); - - //store #3 - opcode.nArgs=1; - opcode.op=OP_store; - opcode.arg0_1=3; - pushOperation(state->rom, &pos, &opcode); - - //high 0x1000i - opcode.nArgs=3; - opcode.op=OP_high; - opcode.immediate=0x1000; - pushOperation(state->rom, &pos, &opcode); - - //push #3 - opcode.nArgs=1; - opcode.op=OP_push; - opcode.arg0_1=3; - pushOperation(state->rom, &pos, &opcode); - - //jle_i loop - opcode.nArgs=3; - opcode.op=OP_jle_i; - opcode.immediate=loop; - pushOperation(state->rom, &pos, &opcode); - - //i2d #2 - opcode.nArgs=1; - opcode.op=OP_i2d; - opcode.arg0_1=2; - pushOperation(state->rom, &pos, &opcode); - - //i2d #3 - opcode.nArgs=1; - opcode.op=OP_i2d; - opcode.arg0_1=3; - pushOperation(state->rom, &pos, &opcode); - - //div_d - opcode.nArgs=0; - opcode.op=OP_div_d; - pushOperation(state->rom, &pos, &opcode); - - //halt - opcode.nArgs=0; - opcode.op=OP_halt; - pushOperation(state->rom, &pos, &opcode); -} diff --git a/old/opcode.c b/old/opcode.c deleted file mode 100755 index a82823d..0000000 --- a/old/opcode.c +++ /dev/null @@ -1,18 +0,0 @@ -#include "opcode.h" - -//reads an opcode -int readOpcode(char* data, int pos, int max, opcode_t *opcode) { - if(pos>=max||pos<0) return -1; - opcode->byte0=data[pos]; - if(opcode->nArgs) { //if we have arguments, read them - if(pos+1>=max) return -1; - opcode->byte1=data[pos+1]; - if(opcode->nArgs-1) { //we either have 2 args or an immediate value - if(pos+2>=max) return -1; - opcode->byte2=data[pos+2]; - return 3; - } - return 2; - } - return 1; -} diff --git a/old/opcode.h b/old/opcode.h deleted file mode 100755 index fa10a3b..0000000 --- a/old/opcode.h +++ /dev/null @@ -1,129 +0,0 @@ -#ifndef opcode_defined -#define opcode_defined - -typedef union opcode_t { - - //raw 24bit data - unsigned data:24; - - //common data - struct { - unsigned nArgs:2; - unsigned op:6; - }; - - //single-arg, 16bit argument - struct { - unsigned:8; - unsigned arg0_1:8; - }; - - //bi-arg, 8bit arguments - struct { - unsigned:8; - unsigned arg0_2:8; - unsigned arg1_2:8; - }; - - //immediate value - struct { - unsigned:8; - signed int immediate:16; - }; - - //byte by byte data - struct { - char byte0:8; - char byte1:8; - char byte2:8; - }; - -} opcode_t; - -int readOpcode(char* data, int pos, int max, opcode_t *opcode); - -//BEGIN opcode constants -#define OP_nop 0b000000 - -//BEGIN int arithmetic -#define OP_add_i 0b000001 -#define OP_sub_i 0b000010 -#define OP_mod_i 0b000011 -#define OP_mul_i 0b000100 -#define OP_div_i 0b000101 -#define OP_neg_i 0b000110 -#define OP_pow_i 0b000111 -//END int arithmetic - -//BEGIN bit manipulation -#define OP_shlt 0b001000 -#define OP_shrt 0b001001 -#define OP_or 0b001010 -#define OP_and 0b001011 -#define OP_xor 0b001100 -#define OP_not 0b001101 -//END bit manipulation - -//BEGIN logic manipulation -#define OP_or_l 0b001110 -#define OP_and_l 0b001111 -#define OP_xor_l 0b010000 -#define OP_not_l 0b010001 -//END logic manipulation - -//BEGIN double arithmetic -#define OP_add_d 0b010010 -#define OP_sub_d 0b010011 -#define OP_mul_d 0b010100 -#define OP_div_d 0b010101 -#define OP_neg_d 0b010110 -#define OP_pow_d 0b010111 -#define OP_rt_d 0b011000 -//END double arithmetic - -//BEGIN trig functions -#define OP_sin 0b011001 -#define OP_cos 0b011010 -#define OP_atan 0b011011 -#define OP_atan2 0b011100 -//END trig functions - -//BEGIN stack manipulation -#define OP_dup 0b011101 -#define OP_swap 0b011110 -#define OP_pop 0b011111 -#define OP_high 0b100000 -#define OP_push 0b100001 -#define OP_const 0b100010 -//END stack manipulation - -//BEGIN flow control -#define OP_jmp 0b100011 -#define OP_call 0b100100 -#define OP_jnz_i 0b100101 -#define OP_jnz_d 0b100110 -#define OP_jz_i 0b100111 -#define OP_jz_d 0b101000 -#define OP_jlt_i 0b101001 -#define OP_jlt_d 0b101010 -#define OP_jle_i 0b101011 -#define OP_jle_d 0b101100 -#define OP_jind 0b101101 -//END flow control - -//BEGIN data manipulation -#define OP_store 0b101110 -#define OP_wri_i 0b101111 -#define OP_wri_d 0b110000 -#define OP_rea_i 0b110001 -#define OP_rea_d 0b110010 -#define OP_i2d 0b110011 -#define OP_d2i 0b110100 -//END data manipulation - -#define OP_halt 0b110101 -#define OP_int 0b110110 -#define OP_ext 0b110111 - -//END opcode constants -#endif diff --git a/old/platform.c b/old/platform.c deleted file mode 100644 index e69de29..0000000 diff --git a/old/platform.h b/old/platform.h deleted file mode 100644 index b9690b9..0000000 --- a/old/platform.h +++ /dev/null @@ -1,42 +0,0 @@ -//the platform we're on -#define WINDOWS -#define LINUX -#define CASIO - -//figure out whether or not we're on PC -#ifdef WINDOWS -#define PC -#endif -#ifdef LINUX -#define PC -#endif - -//set 4byte types according to platform -#ifdef PC -typedef float decimal; -typedef signed int integral; -#else -typedef float decimal; -typedef signed int integral; -#endif - -//functions to manage files -int openFile(char* filename, int mode); -int readFile(int handle, char* buffer, int length, int pos); -int writeFile(int handle, char* buffer, int length, int pos); -int lengthFile(int handle); - -#ifdef CASIO -//a way to remember open files on casio -typedef struct file_info_t { - int handle; - int mode; - char name[256]; -} file_info_t; -#endif - -//file open flags -#define FILE_read -#define FILE_write -#define FILE_create -#define FILE_truncate diff --git a/old/stack.c b/old/stack.c deleted file mode 100755 index 38dbdad..0000000 --- a/old/stack.c +++ /dev/null @@ -1,27 +0,0 @@ -#include "stack.h" - -//pushes an int onto the stack -int pushInt(stack_t *stack, int value) { - if(!ensure(stack)) return -1; - stack->elements[stack->top].i=value; - return (stack->top)++; -} -//pushes a double onto the stack -int pushDouble(stack_t *stack, double value) { - if(!ensure(stack)) return -1; - stack->elements[stack->top].d=value; - return (stack->top)++; -} - -//pops an int from the stack -int popInt(stack_t *stack, int *value) { - if(empty(stack)) return -1; - *value=stack->elements[stack->top-1].i; - return --stack->top; -} -//pops a double from the stack -int popDouble(stack_t *stack, double *value) { - if(empty(stack)) return -1; - *value=stack->elements[stack->top-1].d; - return --stack->top; -} diff --git a/old/stack.h b/old/stack.h deleted file mode 100755 index ed31cec..0000000 --- a/old/stack.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef stack_defined -#define stack_defined - -typedef union stack_element_t { - int i; - double d; -} stack_element_t; - -typedef struct stack_t { - int top; - stack_element_t elements[256]; -} stack_t; - -int pushInt(stack_t *stack, int value); -int pushDouble(stack_t *stack, double value); - -int popInt(stack_t *stack, int *value); -int popDouble(stack_t *stack, double *value); - -#define ensure(stack) (stack->top<255) -#define empty(stack) (!stack->top) - -#endif diff --git a/test/count.asm b/test/count.asm deleted file mode 100644 index a5ad2c0..0000000 --- a/test/count.asm +++ /dev/null @@ -1,352 +0,0 @@ - ' this program counts how many times - ' the user pressed EXE key and moves - ' the display with the arrow keys - - - ' first, clean the variables we will use - ' y coordinate - push,30 - store,#17 - ' x coordinate - push,60 - store,#16 - ' number - push,0 - store,#15 - - ' second, setup the interrupt handler and - ' subscribe to the keyboard events - inth,.inth - sub,b1 - ' fall through - - ' now, wait, everything is in the event handler -.wait - halt - jmp,.wait - - ' function to draw what we want -.draw - ' set the values - push,#17 - push,#16 - push,#15 - store,#5 - store,#6 - store,#7 - ' clear screen - ext,x0c - ' draw counter - call,.decdraw - ' print vram - ext,x01 - ' return - jmp - - ' interrupt handler -.inth - ' protect the interrupt handler - unsub,b1 - ' check event type - store,#10 - ' check if hardware - high,x4000 - and,#10 - jnt,.abort - ' check if it's a keydown - high,x4000 - xor,#10 - eq_i,x1 - jif,.keydown - ' if it's not, then pop the data and exit - pop - jmp,.inthl - - ' keydown event handler -.keydown - store,#11 - ' check if it's EXE - push,31 - eq_i,#11 - jnt,.keydown2 - ' yes, increment, exit the inth and print - push,1 - add_i,#15 - store,#15 - jmp,.inthl - ' no, check for the arrow keys -.keydown2 - ' increment #16 if right - push,27 - eq_i,#11 - add_i,#16 - store,#16 - ' decrement #16 if left - push,38 - eq_i,#11 - sub_i,#16 - store,#16 - ' increment #17 if down - push,37 - eq_i,#11 - add_i,#17 - store,#17 - ' decrement #17 if up - push,28 - eq_i,#11 - sub_i,#17 - store,#17 - ' exit the handler - ' fall through - - ' leaves the interrupt handler and redraws -.inthl - push,.draw - push,b0 - sub,b1 - stat_s,x2 - ' if that doesn't work, abort - ' fall through - - ' kills the program -.abort - ' set the abort flag - push,b1 - stat_s,x3 - ' remove interrupt handler and halt - ' the program won't probably go here - inth,-1 - halt - - ' subroutine to draw dec number on screen - ' #5 input number - ' #6 x coordinate - ' #7 y coordinate - ' #8 temp -.decdraw - push,#5 - store,#8 -.decdraw2 - ' divide temp by 8 - push,10 - div_i,#8 - dup - store,#8 - ' if it is null, stop - jnt,.decdraw3 - ' else, add 4 to the x coordinate - push,4 - add_i,#6 - store,#6 - ' continue the loop - jmp,.decdraw2 -.decdraw3 - ' get digit - push,10 - mod_i,#5 - 'draw digit to screen - store,#8 - call,.decdigit - ' add 4 to the y coordinate - push,4 - sub_i,#6 - store,#6 - ' get next digit - push,10 - div_i,#5 - ' draw next digit - dup - store,#5 - jif,.decdraw3 - 'return - jmp - - ' subroutine to draw a dec digit on screen - ' #8 input digit - ' #6 x coordinate - ' #7 y coordinate -.decdigit - ' draw C if the number isn't 2 - push,2 - neq_i,#8 - cif,.dispC - ' draw A if the number isn't 1 or 4 - push,1 - neq_i,#8 - push,4 - neq_i,#8 - and_l - cif,.dispA - ' draw B if the number isn't 5 or 6 - push,5 - neq_i,#8 - push,6 - neq_i,#8 - and_l - cif,.dispB - ' draw D if the number isn't 1, 4 or 7 - push,1 - neq_i,#8 - push,4 - neq_i,#8 - push,7 - neq_i,#8 - and_l - and_l - cif,.dispD - ' draw G if the number isn't 0, 1 or 7 - push,0 - neq_i,#8 - push,1 - neq_i,#8 - push,7 - neq_i,#8 - and_l - and_l - cif,.dispG - ' draw F if the number isn't 1, 2, 3 or 7 - push,1 - neq_i,#8 - push,2 - neq_i,#8 - push,3 - neq_i,#8 - push,7 - neq_i,#8 - and_l - and_l - and_l - cif,.dispF - ' draw E if the number is 0, 2, 6 or 8 - push,0 - eq_i,#8 - push,2 - eq_i,#8 - push,6 - eq_i,#8 - push,8 - eq_i,#8 - or_l - or_l - or_l - cif,.dispE - 'return - jmp - - ' subroutine to draw the A part of a segment -.dispA - ' color COLOR_BLACK - push,1 - ' x2=x+2 - push,2 - add_i,#6 - ' x1=x - push,#6 - ' y=y - push,#7 - ' lineH - ext,x07 - ' return - jmp - - ' subroutine to draw the B part of a segment -.dispB - ' color COLOR_BLACK - push,1 - ' y2=y+2 - push,2 - add_i,#7 - ' y1=y - push,#7 - ' x=x+2 - push,2 - add_i,#6 - ' lineV - ext,x08 - ' return - jmp - - ' subroutine to draw the C part of a segment -.dispC - ' color COLOR_BLACK - push,1 - ' y2=y+4 - push,4 - add_i,#7 - ' y1=y+2 - push,2 - add_i,#7 - ' x=x+2 - push,2 - add_i,#6 - ' lineV - ext,x08 - ' return - jmp - - ' subroutine to draw the D part of a segment -.dispD - ' color COLOR_BLACK - push,1 - ' x2=x+2 - push,2 - add_i,#6 - ' x1=x - push,#6 - ' y=y+4 - push,4 - add_i,#7 - ' lineH - ext,x07 - ' return - jmp - - ' subroutine to draw the E part of a segment -.dispE - ' color COLOR_BLACK - push,1 - ' y2=y+4 - push,4 - add_i,#7 - ' y1=y+2 - push,2 - add_i,#7 - ' x=x - push,#6 - ' lineV - ext,x08 - ' return - jmp - - ' subroutine to draw the F part of a segment -.dispF - ' color COLOR_BLACK - push,1 - ' y2=y+2 - push,2 - add_i,#7 - ' y1=y - push,#7 - ' x=x - push,#6 - ' lineV - ext,x08 - ' return - jmp - - ' subroutine to draw the G part of a segment -.dispG - ' color COLOR_BLACK - push,1 - ' x2=x+2 - push,2 - add_i,#6 - ' x1=x - push,#6 - ' y=y+2 - push,2 - add_i,#7 - ' lineH - ext,x07 - ' return - jmp diff --git a/test/count.bin b/test/count.bin deleted file mode 100755 index 1234a083f1ad482e5a5327602804e527fba49ff0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 516 zcmZ8du}%U(6r4To_BKWdXL4LH=Cr1omc{A_r?)G7M1wcGMzU?!+Q&}YOjtIilA%sK#%y|N7k(Pb!3#qMq4$E8lqHw z@TMjAvV+u{|Db?oUG)Pf2NPyA!O X(LHtTT?w`P^#%pU{lQ%4#(UQfSyYD< diff --git a/test/fib.asm b/test/fib.asm deleted file mode 100644 index 680aca1..0000000 --- a/test/fib.asm +++ /dev/null @@ -1,322 +0,0 @@ - ' store 1 in registers 2 and 3 - dup,1 - store,#2 - store,#3 - ' store the max value in register 4 - high,x100 - store,#4 -.loop - ' add registers 2 and 3 twice - add_i,#2,#3 - store,#2 - add_i,#2,#3 - store,#3 - ' print #2 and #3 to screen - call,.print - ' loop if we're not at the max - lt_i,#3,#4 - jif,.loop - ' wait until we EXIT - inth,.inth - sub,x1 -.wait - halt - jmp,.wait - - ' interrupt handler -.inth - ' disable all interrupts temporarily - unsub,x1 - ' get interrupt number - store,#10 - ' check if it is hardware - high,x4000 - and,#10 - ' if it isn't, abort (it is an error) - jnt,.abort - ' check if the interrupt is a keydown - push,x1 - and,#10 - jif,.keydown - ' pop the key code and continue execution - pop - jmp,.cont -.keydown - ' check the key code - eq_i,47 - ' if it is 47 (EXIT), abort the program - jif,.abort - ' if it isn't, continue execution -.cont - ' remove interrupt flag and subscribe to interrupt again - push,b0 - sub,x1 - stat_s,x2 - ' if it didn't work, abort - jmp,.abort - - ' kills the program -.abort - ' set the abort flag - push,b1 - stat_s,x3 - ' remove interrupt handler and halt - inth,-1 - halt - - ' prints #2 and #3 to screen -.print - ' clear VRAM - ext,x0c - ' draw #2 at 0,0 - dup,0 - store,#6 - store,#7 - push,#2 - store,#5 - call,.decdraw - ' draw #3 at 0,6 - push,0 - store,#6 - push,6 - store,#7 - push,#3 - store,#5 - call,.decdraw - ' print the VRAM - ext,x01 - ' return - jmp - - ' subroutine to draw dec number on screen - ' #5 input number - ' #6 x coordinate - ' #7 y coordinate - ' #8 temp -.decdraw - push,#5 - store,#8 -.decdraw2 - ' divide temp by 8 - push,10 - div_i,#8 - dup - store,#8 - ' if it is null, stop - jnt,.decdraw3 - ' else, add 4 to the x coordinate - push,4 - add_i,#6 - store,#6 - ' continue the loop - jmp,.decdraw2 -.decdraw3 - ' get digit - push,10 - mod_i,#5 - 'draw digit to screen - store,#8 - call,.decdigit - ' add 4 to the y coordinate - push,4 - sub_i,#6 - store,#6 - ' get next digit - push,10 - div_i,#5 - ' draw next digit - dup - store,#5 - jif,.decdraw3 - 'return - jmp - - ' subroutine to draw a dec digit on screen - ' #8 input digit - ' #6 x coordinate - ' #7 y coordinate -.decdigit - ' draw C if the number isn't 2 - push,2 - neq_i,#8 - cif,.dispC - ' draw A if the number isn't 1 or 4 - push,1 - neq_i,#8 - push,4 - neq_i,#8 - and_l - cif,.dispA - ' draw B if the number isn't 5 or 6 - push,5 - neq_i,#8 - push,6 - neq_i,#8 - and_l - cif,.dispB - ' draw D if the number isn't 1, 4 or 7 - push,1 - neq_i,#8 - push,4 - neq_i,#8 - push,7 - neq_i,#8 - and_l - and_l - cif,.dispD - ' draw G if the number isn't 0, 1 or 7 - push,0 - neq_i,#8 - push,1 - neq_i,#8 - push,7 - neq_i,#8 - and_l - and_l - cif,.dispG - ' draw F if the number isn't 1, 2, 3 or 7 - push,1 - neq_i,#8 - push,2 - neq_i,#8 - push,3 - neq_i,#8 - push,7 - neq_i,#8 - and_l - and_l - and_l - cif,.dispF - ' draw E if the number is 0, 2, 6 or 8 - push,0 - eq_i,#8 - push,2 - eq_i,#8 - push,6 - eq_i,#8 - push,8 - eq_i,#8 - or_l - or_l - or_l - cif,.dispE - 'return - jmp - - ' subroutine to draw the A part of a segment -.dispA - ' color COLOR_BLACK - push,1 - ' x2=x+2 - push,2 - add_i,#6 - ' x1=x - push,#6 - ' y=y - push,#7 - ' lineH - ext,x07 - ' return - jmp - - ' subroutine to draw the B part of a segment -.dispB - ' color COLOR_BLACK - push,1 - ' y2=y+2 - push,2 - add_i,#7 - ' y1=y - push,#7 - ' x=x+2 - push,2 - add_i,#6 - ' lineV - ext,x08 - ' return - jmp - - ' subroutine to draw the C part of a segment -.dispC - ' color COLOR_BLACK - push,1 - ' y2=y+4 - push,4 - add_i,#7 - ' y1=y+2 - push,2 - add_i,#7 - ' x=x+2 - push,2 - add_i,#6 - ' lineV - ext,x08 - ' return - jmp - - ' subroutine to draw the D part of a segment -.dispD - ' color COLOR_BLACK - push,1 - ' x2=x+2 - push,2 - add_i,#6 - ' x1=x - push,#6 - ' y=y+4 - push,4 - add_i,#7 - ' lineH - ext,x07 - ' return - jmp - - ' subroutine to draw the E part of a segment -.dispE - ' color COLOR_BLACK - push,1 - ' y2=y+4 - push,4 - add_i,#7 - ' y1=y+2 - push,2 - add_i,#7 - ' x=x - push,#6 - ' lineV - ext,x08 - ' return - jmp - - ' subroutine to draw the F part of a segment -.dispF - ' color COLOR_BLACK - push,1 - ' y2=y+2 - push,2 - add_i,#7 - ' y1=y - push,#7 - ' x=x - push,#6 - ' lineV - ext,x08 - ' return - jmp - - ' subroutine to draw the G part of a segment -.dispG - ' color COLOR_BLACK - push,1 - ' x2=x+2 - push,2 - add_i,#6 - ' x1=x - push,#6 - ' y=y+2 - push,2 - add_i,#7 - ' lineH - ext,x07 - ' return - jmp diff --git a/test/fib.bin b/test/fib.bin deleted file mode 100755 index 90012917205e9376b0ff0289e38332399c8873ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 495 zcmZ9Hu}T9$5QhKRz1v$PhF}+qbQY$uv9s}lg27fUSEbv^*1}d0w6+xT0zQJ^1NZ{6 zfp8Ztb(C<8U7Xn@2Hj$I|8M?(Zf@^5y9Gek-_<+ca`ft=H^d-$M<4?QEcqxi207*Q zgy5n(rJa(ZD-54>RH8A*;U}nD;NXjmt;s3+ttqZNsNX8l+b?kOfum9g*tmcyLU#c@ zUoN{f8e_m2m*mRD74F&QjE4XnKn?2Tv9lgKXSVI^6eEu)HO>@xWO&ZK3a`w1%)}M9 zU0h<+@lXRhqap7y;CM8!yE8iRh((#8F1J08gb_P#cm;8U(3-uhB@gt_QbL2>&+N`v zD=9{b&1|#ToY4a>K-@@8Zt|o?ve8MN1YENdME=H@r6QXcn5^XFuI GNc{jD4}iJ= diff --git a/test/sdl.c b/test/sdl.c deleted file mode 100644 index 27873cb..0000000 --- a/test/sdl.c +++ /dev/null @@ -1,29 +0,0 @@ -#include - -#include - -#define WINDOW_WIDTH 600 - -int main(void) { - SDL_Event event; - SDL_Renderer *renderer; - SDL_Window *window; - int i; - - SDL_Init(SDL_INIT_VIDEO); - SDL_CreateWindowAndRenderer(WINDOW_WIDTH, WINDOW_WIDTH, 0, &window, &renderer); - SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0); - SDL_RenderClear(renderer); - SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255); - for (i = 0; i < WINDOW_WIDTH; ++i) - SDL_RenderDrawPoint(renderer, i, i); - SDL_RenderPresent(renderer); - while (1) { - if (SDL_PollEvent(&event) && event.type == SDL_QUIT) - break; - } - SDL_DestroyRenderer(renderer); - SDL_DestroyWindow(window); - SDL_Quit(); - return EXIT_SUCCESS; -} diff --git a/test/sdl.out b/test/sdl.out deleted file mode 100755 index 93d7766a52edbdd894d48b0a9f11cec17dc3d303..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9080 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 Wxt#O3th=y?{d1}y>Yo2@`+ovb7@`gU diff --git a/test/sdl.sh b/test/sdl.sh deleted file mode 100755 index 928d666..0000000 --- a/test/sdl.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -gcc -o 'sdl.out' 'sdl.c' -lSDL2 -./sdl.out diff --git a/test/test.bin b/test/test.bin deleted file mode 100644 index 90012917205e9376b0ff0289e38332399c8873ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 495 zcmZ9Hu}T9$5QhKRz1v$PhF}+qbQY$uv9s}lg27fUSEbv^*1}d0w6+xT0zQJ^1NZ{6 zfp8Ztb(C<8U7Xn@2Hj$I|8M?(Zf@^5y9Gek-_<+ca`ft=H^d-$M<4?QEcqxi207*Q zgy5n(rJa(ZD-54>RH8A*;U}nD;NXjmt;s3+ttqZNsNX8l+b?kOfum9g*tmcyLU#c@ zUoN{f8e_m2m*mRD74F&QjE4XnKn?2Tv9lgKXSVI^6eEu)HO>@xWO&ZK3a`w1%)}M9 zU0h<+@lXRhqap7y;CM8!yE8iRh((#8F1J08gb_P#cm;8U(3-uhB@gt_QbL2>&+N`v zD=9{b&1|#ToY4a>K-@@8Zt|o?ve8MN1YENdME=H@r6QXcn5^XFuI GNc{jD4}iJ=