Basic parts
This commit is contained in:
parent
c8a0ffc4fb
commit
776c16cc20
|
@ -3,4 +3,6 @@
|
||||||
*png~
|
*png~
|
||||||
*gif~
|
*gif~
|
||||||
*bmp~
|
*bmp~
|
||||||
uxn
|
uxn
|
||||||
|
uxnasm
|
||||||
|
*.rom
|
|
@ -48,11 +48,15 @@ VALUE OPCODE EXPLANATION
|
||||||
|
|
||||||
### PPU
|
### PPU
|
||||||
|
|
||||||
|
### Assembly
|
||||||
|
|
||||||
|
```
|
||||||
|
2 2 + $ef
|
||||||
|
```
|
||||||
|
|
||||||
### Assembler
|
### Assembler
|
||||||
|
|
||||||
|
|
||||||
### Emulator
|
### Emulator
|
||||||
|
|
||||||
- SDL Layer
|
- SDL Layer
|
||||||
|
|
||||||
### Assembly
|
|
||||||
|
|
13
build.sh
13
build.sh
|
@ -1,12 +1,15 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# format code
|
# format code
|
||||||
|
clang-format -i uxnasm.c
|
||||||
clang-format -i uxn.c
|
clang-format -i uxn.c
|
||||||
|
|
||||||
# remove old
|
# remove old
|
||||||
|
rm -f ./uxnasm
|
||||||
rm -f ./uxn
|
rm -f ./uxn
|
||||||
|
|
||||||
# debug(slow)
|
# 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
|
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)
|
# build(fast)
|
||||||
|
@ -15,12 +18,6 @@ cc -std=c89 -DDEBUG -Wall -Wno-unknown-pragmas -Wpedantic -Wshadow -Wextra -Werr
|
||||||
# Size
|
# Size
|
||||||
echo "Size: $(du -sk ./uxn)"
|
echo "Size: $(du -sk ./uxn)"
|
||||||
|
|
||||||
# Install
|
|
||||||
if [ -d "$HOME/bin" ] && [ -e ./uxn ]
|
|
||||||
then
|
|
||||||
cp ./uxn $HOME/bin
|
|
||||||
echo "Installed: $HOME/bin"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# run
|
# run
|
||||||
./uxn
|
./uxnasm program.usm program.rom
|
||||||
|
# ./uxn program.rom
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
2 2 + .
|
79
uxn.c
79
uxn.c
|
@ -11,28 +11,93 @@ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
WITH REGARD TO THIS SOFTWARE.
|
WITH REGARD TO THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
typedef unsigned char Uint8;
|
|
||||||
#define STACK_DEPTH 256
|
#define STACK_DEPTH 256
|
||||||
|
#define ECHO 1
|
||||||
|
|
||||||
Uint8 data[STACK_DEPTH];
|
typedef unsigned char Uint8;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
|
||||||
|
} Computer;
|
||||||
|
|
||||||
|
Uint8 sptr;
|
||||||
|
Uint8 stack[STACK_DEPTH];
|
||||||
Uint8 address[STACK_DEPTH];
|
Uint8 address[STACK_DEPTH];
|
||||||
|
Uint8 memory[STACK_DEPTH];
|
||||||
|
|
||||||
void
|
void
|
||||||
stackprint(Uint8 *stack)
|
stackprint(Uint8 *s, Uint8 len)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
for(i = 0; i < STACK_DEPTH; ++i) {
|
for(i = 0; i < len; ++i) {
|
||||||
if(i % 16 == 0)
|
if(i % 16 == 0)
|
||||||
printf("\n");
|
printf("\n");
|
||||||
printf("%02x ", stack[i]);
|
if(sptr == i)
|
||||||
|
printf("[%02x]", s[i]);
|
||||||
|
else
|
||||||
|
printf(" %02x ", s[i]);
|
||||||
}
|
}
|
||||||
printf("\n");
|
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
|
int
|
||||||
main(int argc, char *argv[])
|
main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
printf("hello\n");
|
FILE *f;
|
||||||
stackprint(data);
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
Loading…
Reference in New Issue