Revising Makefiles and expanding README.

This commit is contained in:
Russell-S-Harper 2018-08-07 06:38:40 -04:00
parent 954c695e0a
commit 421a7a192e
6 changed files with 64 additions and 11 deletions

12
Makefile Normal file
View File

@ -0,0 +1,12 @@
all:
cd common-post-process ; make ; cd ..
cd common ; make ; cd ..
cd emulator ; make ; cd ..
run:
./emulator/emulator < common/system.obj
clean:
cd common-post-process ; make clean ; cd ..
cd common ; make clean ; cd ..
cd emulator ; make clean ; cd ..

View File

@ -1,10 +1,45 @@
# COMMON
Advances some ideas using Steve Wozniak's SWEET16 interpreted byte-code language as inspiration. While the goal of SWEET16 was brevity, the goal of COMMON is functionality.
Advances some ideas using Steve Wozniak's SWEET16 interpreted byte-code language as inspiration. While the goal of SWEET16 was brevity, the goal of COMMON is functionality. The intent is to make a platform suitable for many commercial, scientific, and engineering applications.
To build and run:
For example:
cd common-post-process ; make ; cp common-post-process ../common ; cd ..
cd common ; make ; cd ..
cd emulator ; make ; ./emulator < ../common/system.obj
* native type is equivalent to fixed decimal ######.###
* easier support for banked memory
* easier support for higher language compilers
* arithmetic operations add, subtract, multiply, divide, and modulus
* inherent overflow/underflow detection
* all control branching is relative and 16 bits, for easier relocatable code
* support for custom functions, akin to INT in x86
The makefiles use `re2c`, `flex`, `bison`, `gcc`, `cpp`, and `xa`.
Why 6502 and not, for example, x86?
* 6502 assembler is very easy and has a large archive of existing functions
* existing 6502 SWEET16 does the "hard work"
* interesting to see it run in newer versions of 6502 processors
* how do you think Bender does what he does? (or the Terminator!)
In progress:
* add all the instructions (see `common/common.h` for the list)
* a simple unit test suite to ensure each instruction is correct
The meat of the project:
* `common/common.h`: details of instructions
* `common/common.asm`: defines the core instructions
* `common/macros.h`: macros used to define the byte-code
* `common/page6.src`: sample source file using the macros
Auxiliary:
* `emulator/*`: 6502 emulator (borrowed Mike Chambers' Fake6502 CPU emulator v1.1 ©2011)
* `common-post-process/*`: this utility converts 32-bit fixed decimal quantities so that `xa` can use them
Right now, for testing purposes, the code builds everything into one file `system.obj` and runs the code in the last block loaded, in this case, the code corresponding to `page6.src`. Eventually will support decoupling of system and application files.
*To build and run:*
make
make run
The makefiles use `re2c`, `flex`, `bison`, `gcc`, `cpp`, and `xa`. Will eventually support a `make install` which will install all of this.

View File

@ -7,4 +7,4 @@ $(TGT): main.c $(TGT).h $(TGT).re $(TGT).l $(TGT).y
gcc main.c $(TGT).c $(TGT).tab.c $(TGT).yy.c -lfl -lm -o $(TGT)
clean:
rm -f $(TGT).c $(TGT).yy.h $(TGT).yy.c $(TGT).tab.h $(TGT).tab.c
rm -f $(TGT).c $(TGT).yy.h $(TGT).yy.c $(TGT).tab.h $(TGT).tab.c $(TGT)

View File

@ -1,3 +1,5 @@
POPR=../common-post-process/common-post-process
system.obj: common.obj page6.obj
cat common.obj page6.obj > system.obj
@ -5,8 +7,8 @@ common.obj: rom.h common.h common.asm
xa -M common.asm -l common.lbl -o common.obj
page6.obj: rom.h macros.h page6.src
cpp -P page6.src | ./common-post-process > page6.asm
cpp -P page6.src | $(POPR) > page6.asm
xa -M page6.asm -l page6.lbl -o page6.obj
clean:
rm -f page6.asm common.obj page6.obj common.lbl page6.lbl
rm -f page6.asm common.obj page6.obj common.lbl page6.lbl system.obj

View File

@ -3,7 +3,8 @@
; Using four byte quantities aabbccdd with sign bit, overflow/underflow bit, 20 bits significand, 10 bits
; fraction. The quantity is valid if the overflow/underflow bit agrees with the sign bit. The intent is
; to be able to recognize an overflow/underflow situation, rescale the arguments, and repeat.
; to be able to recognize an overflow/underflow situation, rescale the arguments, and repeat the
; calculation.
; Largest value: $3fffffff or 1048575.999(9)
; Smallest value: $c0000001 or -1048575.999(0)
@ -136,6 +137,6 @@ _MNS_1 = %11111100 ; i.e. the $FC part of $FFFFFC00
; masks for overflow and underflow
_MSK_O = %11000000 ; mask for overflow
_MSK_U = %11000000 ; mask for underflow
_MSK_U = %11000000 ; mask for underflow - yes, the same!
#endif /* __COMMON_H */

View File

@ -1,3 +1,6 @@
emulator: emulator.h emulator.c main.c
gcc -o emulator emulator.c main.c
clean:
rm -f emulator