uxn

Varvara Ordinator, written in ANSI C(SDL2)
git clone https://git.eamoncaddigan.net/uxn.git
Log | Files | Refs | README | LICENSE

commit 776c16cc205cb146bb3dff0589ef4389b6ae4dac
parent c8a0ffc4fb4bd06b043e24499467ae75d9d21fc4
Author: neauoire <aliceffekt@gmail.com>
Date:   Fri, 29 Jan 2021 12:14:37 -0800

Basic parts

Diffstat:
M.gitignore | 6++++--
MREADME.md | 8++++++--
Mbuild.sh | 13+++++--------
Aprogram.usm | 2++
Muxn.c | 79++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------
Auxnasm.c | 49+++++++++++++++++++++++++++++++++++++++++++++++++
6 files changed, 138 insertions(+), 19 deletions(-)

diff --git a/.gitignore b/.gitignore @@ -3,4 +3,6 @@ *png~ *gif~ *bmp~ -uxn -\ No newline at end of file +uxn +uxnasm +*.rom +\ No newline at end of file diff --git a/README.md b/README.md @@ -48,11 +48,15 @@ VALUE OPCODE EXPLANATION ### PPU +### Assembly + +``` +2 2 + $ef +``` + ### Assembler ### Emulator - SDL Layer - -### Assembly diff --git a/build.sh b/build.sh @@ -1,12 +1,15 @@ #!/bin/bash # format code +clang-format -i uxnasm.c clang-format -i uxn.c # remove old +rm -f ./uxnasm rm -f ./uxn # debug(slow) +cc -std=c89 -DDEBUG -Wall -Wno-unknown-pragmas -Wpedantic -Wshadow -Wextra -Werror=implicit-int -Werror=incompatible-pointer-types -Werror=int-conversion -Wvla -g -Og -fsanitize=address -fsanitize=undefined uxnasm.c -o uxnasm cc -std=c89 -DDEBUG -Wall -Wno-unknown-pragmas -Wpedantic -Wshadow -Wextra -Werror=implicit-int -Werror=incompatible-pointer-types -Werror=int-conversion -Wvla -g -Og -fsanitize=address -fsanitize=undefined uxn.c -o uxn # build(fast) @@ -15,12 +18,6 @@ cc -std=c89 -DDEBUG -Wall -Wno-unknown-pragmas -Wpedantic -Wshadow -Wextra -Werr # Size echo "Size: $(du -sk ./uxn)" -# Install -if [ -d "$HOME/bin" ] && [ -e ./uxn ] -then - cp ./uxn $HOME/bin - echo "Installed: $HOME/bin" -fi - # run -./uxn +./uxnasm program.usm program.rom +# ./uxn program.rom diff --git a/program.usm b/program.usm @@ -0,0 +1 @@ +2 2 + . +\ No newline at end of file diff --git a/uxn.c b/uxn.c @@ -11,28 +11,93 @@ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE. */ -typedef unsigned char Uint8; #define STACK_DEPTH 256 +#define ECHO 1 + +typedef unsigned char Uint8; + +typedef struct { -Uint8 data[STACK_DEPTH]; +} Computer; + +Uint8 sptr; +Uint8 stack[STACK_DEPTH]; Uint8 address[STACK_DEPTH]; +Uint8 memory[STACK_DEPTH]; void -stackprint(Uint8 *stack) +stackprint(Uint8 *s, Uint8 len) { int i; - for(i = 0; i < STACK_DEPTH; ++i) { + for(i = 0; i < len; ++i) { if(i % 16 == 0) printf("\n"); - printf("%02x ", stack[i]); + if(sptr == i) + printf("[%02x]", s[i]); + else + printf(" %02x ", s[i]); } printf("\n"); } +void +op_push(Uint8 *s, Uint8 v) +{ + s[sptr++] = v; +} + +void +op_pop(Uint8 *s) +{ + s[sptr--] = 0x00; +} + +void +reset(Computer *cpu) +{ +} + +int +disk(Computer *cpu, FILE *f) +{ + int i; + unsigned short buffer[256]; + reset(cpu); + if(!fread(buffer, sizeof(buffer), 1, f)) + return 0; + /* + + for(i = 0; i < 128; i++) { + cpu->memory[i * 2] |= (buffer[i] >> 8) & 0xFF; + cpu->memory[i * 2 + 1] |= buffer[i] & 0xFF; + } + */ + return 1; +} + +void +run(Computer *cpu, int debug) +{ +} + int main(int argc, char *argv[]) { - printf("hello\n"); - stackprint(data); + FILE *f; + Computer cpu; + if(argc < 2) + return error("No input."); + if(!(f = fopen(argv[1], "rb"))) + return error("Missing input."); + if(!disk(&cpu, f)) + return error("Unreadable input."); + run(&cpu, ECHO); + /* program */ + op_push(stack, 0xef); + op_pop(stack); + op_push(stack, 0x02); + op_push(stack, 0x03); + /* print result */ + stackprint(stack, 0x40); return 0; } diff --git a/uxnasm.c b/uxnasm.c @@ -0,0 +1,49 @@ +#include <stdio.h> + +/* +Copyright (c) 2021 Devine Lu Linvega + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE. +*/ + +#define BUFLEN 256 + +typedef unsigned char Uint8; +typedef unsigned char Uint16; + +unsigned short program[BUFLEN]; + +void +pass1(FILE *f) +{ + int instrid = 0; + char line[BUFLEN]; + while(fgets(line, BUFLEN, f)) { + printf("%s\n", line); + } +} + +int +error(char *name) +{ + printf("Error: %s\n", name); + return 0; +} + +int +main(int argc, char *argv[]) +{ + FILE *f; + if(argc < 3) + return error("No input."); + if(!(f = fopen(argv[1], "r"))) + return error("Missing input."); + pass1(f); + fwrite(program, sizeof(program), 1, fopen(argv[2], "wb")); + return 0; +}