Skip to content

Commit

Permalink
Merge pull request #5 from suzukiplan/create-asm-tests-3
Browse files Browse the repository at this point in the history
Create asm tests 3
  • Loading branch information
suzukiplan committed Jul 18, 2016
2 parents 4caa3b1 + 70ba464 commit 5554c75
Show file tree
Hide file tree
Showing 18 changed files with 776 additions and 4 deletions.
5 changes: 5 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
# Changes

## version 0.1.2
- license の修正(不要文言削除のみ)
- `vgsasm` のテストを追加
- bugfix: SHL, SHR の結果が ゼロフラグ に反映されない

## Version 0.1.1
- `vgsasm` のテストを追加: LD, ST
- bugfix: 引数またはレジスタが指定できる第2オペランドにレジスタBを指定する2進数の0が指定されてしまう
Expand Down
4 changes: 0 additions & 4 deletions LICENSE.txt
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,3 @@ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

The views and conclusions contained in the software and documentation are those
of the authors and should not be interpreted as representing official policies,
either expressed or implied, of the FreeBSD Project.
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
- VGS-CPU is a 32bit cpu that spacialized for creating games of VGS.
- This repository also provides assember for VGS-CPU.

## License
[2-clause BSD](https://github.com/suzukiplan/vgs-cpu/blob/master/LICENSE.txt)

## How to use
- UNIX系OS全般(mac/Linuxを含む) の ターミナル で `make` を実行すれば, できることが書いてあります
- `make build` を実行すればアセンブラ (vgsasmコマンド) をビルドできます
Expand Down
8 changes: 8 additions & 0 deletions makefile
Original file line number Diff line number Diff line change
Expand Up @@ -139,5 +139,13 @@ asm-test:
./asmtest src/test/asm_push_pop_c.asm
./asmtest src/test/asm_push_pop_d.asm
./asmtest src/test/asm_ld_st_a.asm
./asmtest src/test/asm_ld_st_b.asm
./asmtest src/test/asm_ld_st_c.asm
./asmtest src/test/asm_ld_st_d.asm
./asmtest src/test/asm_add_a.asm
./asmtest src/test/asm_add_b.asm
./asmtest src/test/asm_add_c.asm
./asmtest src/test/asm_add_d.asm
./asmtest src/test/asm_shift.asm
@rm asmtest
@rm tp.bin
8 changes: 8 additions & 0 deletions src/cpu/vgscpu.c
Original file line number Diff line number Diff line change
Expand Up @@ -754,48 +754,56 @@ int vgscpu_run(void *ctx)
c->r.p++;
b = c->p[c->r.p++];
c->r.a <<= b;
c->f.z = (0 == c->r.a) ? 1 : 0;
break;
case VGSCPU_OP_SHL_B:
ASSERT_IF_OUT_OF_PROGRAM_MEMORY(2);
c->r.p++;
b = c->p[c->r.p++];
c->r.b <<= b;
c->f.z = (0 == c->r.b) ? 1 : 0;
break;
case VGSCPU_OP_SHL_C:
ASSERT_IF_OUT_OF_PROGRAM_MEMORY(2);
c->r.p++;
b = c->p[c->r.p++];
c->r.c <<= b;
c->f.z = (0 == c->r.c) ? 1 : 0;
break;
case VGSCPU_OP_SHL_D:
ASSERT_IF_OUT_OF_PROGRAM_MEMORY(2);
c->r.p++;
b = c->p[c->r.p++];
c->r.d <<= b;
c->f.z = (0 == c->r.d) ? 1 : 0;
break;
case VGSCPU_OP_SHR_A:
ASSERT_IF_OUT_OF_PROGRAM_MEMORY(2);
c->r.p++;
b = c->p[c->r.p++];
c->r.a >>= b;
c->f.z = (0 == c->r.a) ? 1 : 0;
break;
case VGSCPU_OP_SHR_B:
ASSERT_IF_OUT_OF_PROGRAM_MEMORY(2);
c->r.p++;
b = c->p[c->r.p++];
c->r.b >>= b;
c->f.z = (0 == c->r.b) ? 1 : 0;
break;
case VGSCPU_OP_SHR_C:
ASSERT_IF_OUT_OF_PROGRAM_MEMORY(2);
c->r.p++;
b = c->p[c->r.p++];
c->r.c >>= b;
c->f.z = (0 == c->r.c) ? 1 : 0;
break;
case VGSCPU_OP_SHR_D:
ASSERT_IF_OUT_OF_PROGRAM_MEMORY(2);
c->r.p++;
b = c->p[c->r.p++];
c->r.d >>= b;
c->f.z = (0 == c->r.d) ? 1 : 0;
break;
/*
*----------------------------------------------------------------
Expand Down
76 changes: 76 additions & 0 deletions src/test/asm_add_a.asm
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
/*
ADD A の テストプログラム
*/
start:
// リテラルの加算テスト
LD A, 1000
ADD A, 0 // A = A + 0 (1byte)
CMP A, 1000
JNE test-failed
JZ test-failed
ADD A, 255 // A = A + 255 (1byte)
CMP A, 1255
JNE test-failed
JZ test-failed
ADD A, 256 // A = A + 256 (2byte)
CMP A, 1511
JNE test-failed
JZ test-failed
ADD A, 65535 // A = A + 65535 (2byte)
CMP A, 67046
JNE test-failed
JZ test-failed
ADD A, 65536 // A = A + 65536 (4byte)
CMP A, 132582
JNE test-failed
JZ test-failed
ADD A, -132582 // A = A - 132582 (4byte)
JNZ test-failed

// アドレス格納領域の加算テスト
LD A, $12345678
ST A, [0]
LD A, 0
ADD A, [0]O // A = A + $78(120) (1byte)
CMP A, $78
JNE test-failed
JZ test-failed
ADD A, -120 // A = A - 120 (4byte)
JNZ test-failed
ADD A, [0]H // A = A + $5678(22136) (2byte)
CMP A, $5678
JNE test-failed
JZ test-failed
ADD A, -22136 // A = A - 22136 (4byte)
JNZ test-failed
ADD A, [0] // A = A + $12345678(305419896) (4byte)
CMP A, $12345678
JNE test-failed
JZ test-failed
ADD A, -305419896 // A = A - 305419896 (4byte)
JNZ test-failed

// レジスタ加算テスト
LD B, $11110000
LD C, $00001111
LD D, $11111111
ADD A, B // A = A + B
CMP A, $11110000
JNE test-failed
JZ test-failed
ADD A, C // A = A + C
CMP A, $11111111
JNE test-failed
JZ test-failed
ADD A, D // A = A + D
CMP A, $22222222
JNE test-failed
JZ test-failed

LD D, 1
BRK

test-failed:
INT $00
LD D, -1
BRK
76 changes: 76 additions & 0 deletions src/test/asm_add_b.asm
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
/*
ADD B の テストプログラム
*/
start:
// リテラルの加算テスト
LD B, 1000
ADD B, 0 // B = B + 0 (1byte)
CMP B, 1000
JNE test-failed
JZ test-failed
ADD B, 255 // B = B + 255 (1byte)
CMP B, 1255
JNE test-failed
JZ test-failed
ADD B, 256 // B = B + 256 (2byte)
CMP B, 1511
JNE test-failed
JZ test-failed
ADD B, 65535 // B = B + 65535 (2byte)
CMP B, 67046
JNE test-failed
JZ test-failed
ADD B, 65536 // B = B + 65536 (4byte)
CMP B, 132582
JNE test-failed
JZ test-failed
ADD B, -132582 // B = B - 132582 (4byte)
JNZ test-failed

// アドレス格納領域の加算テスト
LD B, $12345678
ST B, [0]
LD B, 0
ADD B, [0]O // B = B + $78(120) (1byte)
CMP B, $78
JNE test-failed
JZ test-failed
ADD B, -120 // B = B - 120 (4byte)
JNZ test-failed
ADD B, [0]H // B = B + $5678(22136) (2byte)
CMP B, $5678
JNE test-failed
JZ test-failed
ADD B, -22136 // B = B - 22136 (4byte)
JNZ test-failed
ADD B, [0] // B = B + $12345678(305419896) (4byte)
CMP B, $12345678
JNE test-failed
JZ test-failed
ADD B, -305419896 // B = B - 305419896 (4byte)
JNZ test-failed

// レジスタ加算テスト
LD A, $11110000
LD C, $00001111
LD D, $11111111
ADD B, A // B = B + A
CMP B, $11110000
JNE test-failed
JZ test-failed
ADD B, C // B = B + C
CMP B, $11111111
JNE test-failed
JZ test-failed
ADD B, D // B = B + D
CMP B, $22222222
JNE test-failed
JZ test-failed

LD D, 1
BRK

test-failed:
INT $00
LD D, -1
BRK
76 changes: 76 additions & 0 deletions src/test/asm_add_c.asm
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
/*
ADD C の テストプログラム
*/
start:
// リテラルの加算テスト
LD C, 1000
ADD C, 0 // C = C + 0 (1byte)
CMP C, 1000
JNE test-failed
JZ test-failed
ADD C, 255 // C = C + 255 (1byte)
CMP C, 1255
JNE test-failed
JZ test-failed
ADD C, 256 // C = C + 256 (2byte)
CMP C, 1511
JNE test-failed
JZ test-failed
ADD C, 65535 // C = C + 65535 (2byte)
CMP C, 67046
JNE test-failed
JZ test-failed
ADD C, 65536 // C = C + 65536 (4byte)
CMP C, 132582
JNE test-failed
JZ test-failed
ADD C, -132582 // C = C - 132582 (4byte)
JNZ test-failed

// アドレス格納領域の加算テスト
LD C, $12345678
ST C, [0]
LD C, 0
ADD C, [0]O // C = C + $78(120) (1byte)
CMP C, $78
JNE test-failed
JZ test-failed
ADD C, -120 // C = C - 120 (4byte)
JNZ test-failed
ADD C, [0]H // C = C + $5678(22136) (2byte)
CMP C, $5678
JNE test-failed
JZ test-failed
ADD C, -22136 // C = C - 22136 (4byte)
JNZ test-failed
ADD C, [0] // C = C + $12345678(305419896) (4byte)
CMP C, $12345678
JNE test-failed
JZ test-failed
ADD C, -305419896 // C = C - 305419896 (4byte)
JNZ test-failed

// レジスタ加算テスト
LD A, $11110000
LD B, $00001111
LD D, $11111111
ADD C, A // C = C + A
CMP C, $11110000
JNE test-failed
JZ test-failed
ADD C, B // C = C + B
CMP C, $11111111
JNE test-failed
JZ test-failed
ADD C, D // C = C + D
CMP C, $22222222
JNE test-failed
JZ test-failed

LD D, 1
BRK

test-failed:
INT $00
LD D, -1
BRK
Loading

0 comments on commit 5554c75

Please sign in to comment.