Skip to content

Commit

Permalink
Merge pull request #6 from suzukiplan/create-asm-tests-4
Browse files Browse the repository at this point in the history
Create asm tests 4
  • Loading branch information
suzukiplan committed Jul 24, 2016
2 parents 166391f + cfec12b commit 432a074
Show file tree
Hide file tree
Showing 9 changed files with 876 additions and 31 deletions.
4 changes: 4 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Changes

## Version 0.3.1
- `vgsdrun` の出力結果にラベル情報を表示するように変更
- `vgsasm` のテストを追加

## Version 0.3.0
- `vgsdrun` コマンドを追加

Expand Down
53 changes: 27 additions & 26 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -297,65 +297,66 @@ $ vgsdrun input-source
$ ./vgsdrun src/test/asm_add_a.asm
assembling: src/test/asm_add_a.asm on memory
starting debug run.
00000000: ----- start -----
00000000: 08 E8 03 : line#00006 > LD A, 1000
00000003: 5D 00 : line#00007 > ADD A, 0
00000005: A6 E8 03 : line#00008 > CMP A, 1000
00000008: F8 02 01 00 00 : line#00009 > JNE $102
0000000d: F5 02 01 00 00 : line#00010 > JZ $102
00000008: F8 02 01 00 00 : line#00009 > JNE $102 (test-failed)
0000000d: F5 02 01 00 00 : line#00010 > JZ $102 (test-failed)
00000012: 5D FF : line#00011 > ADD A, 255
00000014: A6 E7 04 : line#00012 > CMP A, 1255
00000017: F8 02 01 00 00 : line#00013 > JNE $102
0000001c: F5 02 01 00 00 : line#00014 > JZ $102
00000017: F8 02 01 00 00 : line#00013 > JNE $102 (test-failed)
0000001c: F5 02 01 00 00 : line#00014 > JZ $102 (test-failed)
00000021: 5E 00 01 : line#00015 > ADD A, 256
00000024: A6 E7 05 : line#00016 > CMP A, 1511
00000027: F8 02 01 00 00 : line#00017 > JNE $102
0000002c: F5 02 01 00 00 : line#00018 > JZ $102
00000027: F8 02 01 00 00 : line#00017 > JNE $102 (test-failed)
0000002c: F5 02 01 00 00 : line#00018 > JZ $102 (test-failed)
00000031: 5E FF FF : line#00019 > ADD A, 65535
00000034: A7 E6 05 01 00 : line#00020 > CMP A, 67046
00000039: F8 02 01 00 00 : line#00021 > JNE $102
0000003e: F5 02 01 00 00 : line#00022 > JZ $102
00000039: F8 02 01 00 00 : line#00021 > JNE $102 (test-failed)
0000003e: F5 02 01 00 00 : line#00022 > JZ $102 (test-failed)
00000043: 5F 00 00 01 00 : line#00023 > ADD A, 65536
00000048: A7 E6 05 02 00 : line#00024 > CMP A, 132582
0000004d: F8 02 01 00 00 : line#00025 > JNE $102
00000052: F5 02 01 00 00 : line#00026 > JZ $102
0000004d: F8 02 01 00 00 : line#00025 > JNE $102 (test-failed)
00000052: F5 02 01 00 00 : line#00026 > JZ $102 (test-failed)
00000057: 5F 1A FA FD FF : line#00027 > ADD A, -132582
0000005c: F6 02 01 00 00 : line#00028 > JNZ $102
0000005c: F6 02 01 00 00 : line#00028 > JNZ $102 (test-failed)
00000061: 09 78 56 34 12 : line#00031 > LD A, $12345678
00000066: 12 00 00 00 00 : line#00032 > ST A, [0]
0000006b: 07 00 : line#00033 > LD A, 0
0000006d: 63 00 00 00 00 : line#00034 > ADD A, [0]O
00000072: A5 78 : line#00035 > CMP A, $78
00000074: F8 02 01 00 00 : line#00036 > JNE $102
00000079: F5 02 01 00 00 : line#00037 > JZ $102
00000074: F8 02 01 00 00 : line#00036 > JNE $102 (test-failed)
00000079: F5 02 01 00 00 : line#00037 > JZ $102 (test-failed)
0000007e: 5F 88 FF FF FF : line#00038 > ADD A, -120
00000083: F6 02 01 00 00 : line#00039 > JNZ $102
00000083: F6 02 01 00 00 : line#00039 > JNZ $102 (test-failed)
00000088: 64 00 00 00 00 : line#00040 > ADD A, [0]H
0000008d: A6 78 56 : line#00041 > CMP A, $5678
00000090: F8 02 01 00 00 : line#00042 > JNE $102
00000095: F5 02 01 00 00 : line#00043 > JZ $102
00000090: F8 02 01 00 00 : line#00042 > JNE $102 (test-failed)
00000095: F5 02 01 00 00 : line#00043 > JZ $102 (test-failed)
0000009a: 5F 88 A9 FF FF : line#00044 > ADD A, -22136
0000009f: F6 02 01 00 00 : line#00045 > JNZ $102
0000009f: F6 02 01 00 00 : line#00045 > JNZ $102 (test-failed)
000000a4: 65 00 00 00 00 : line#00046 > ADD A, [0]
000000a9: A7 78 56 34 12 : line#00047 > CMP A, $12345678
000000ae: F8 02 01 00 00 : line#00048 > JNE $102
000000b3: F5 02 01 00 00 : line#00049 > JZ $102
000000ae: F8 02 01 00 00 : line#00048 > JNE $102 (test-failed)
000000b3: F5 02 01 00 00 : line#00049 > JZ $102 (test-failed)
000000b8: 5F 88 A9 CB ED : line#00050 > ADD A, -305419896
000000bd: F6 02 01 00 00 : line#00051 > JNZ $102
000000bd: F6 02 01 00 00 : line#00051 > JNZ $102 (test-failed)
000000c2: 1E 00 00 11 11 : line#00054 > LD B, $11110000
000000c7: 32 11 11 : line#00055 > LD C, $00001111
000000ca: 48 11 11 11 11 : line#00056 > LD D, $11111111
000000cf: 60 : line#00057 > ADD A, B
000000d0: A7 00 00 11 11 : line#00058 > CMP A, $11110000
000000d5: F8 02 01 00 00 : line#00059 > JNE $102
000000da: F5 02 01 00 00 : line#00060 > JZ $102
000000d5: F8 02 01 00 00 : line#00059 > JNE $102 (test-failed)
000000da: F5 02 01 00 00 : line#00060 > JZ $102 (test-failed)
000000df: 61 : line#00061 > ADD A, C
000000e0: A7 11 11 11 11 : line#00062 > CMP A, $11111111
000000e5: F8 02 01 00 00 : line#00063 > JNE $102
000000ea: F5 02 01 00 00 : line#00064 > JZ $102
000000e5: F8 02 01 00 00 : line#00063 > JNE $102 (test-failed)
000000ea: F5 02 01 00 00 : line#00064 > JZ $102 (test-failed)
000000ef: 62 : line#00065 > ADD A, D
000000f0: A7 22 22 22 22 : line#00066 > CMP A, $22222222
000000f5: F8 02 01 00 00 : line#00067 > JNE $102
000000fa: F5 02 01 00 00 : line#00068 > JZ $102
000000f5: F8 02 01 00 00 : line#00067 > JNE $102 (test-failed)
000000fa: F5 02 01 00 00 : line#00068 > JZ $102 (test-failed)
000000ff: 46 01 : line#00070 > LD D, 1
00000101: 00 : line#00071 > BRK
Expand Down
4 changes: 4 additions & 0 deletions makefile
Original file line number Diff line number Diff line change
Expand Up @@ -155,3 +155,7 @@ asm-test:
./asmtest src/test/asm_add_c.asm
./asmtest src/test/asm_add_d.asm
./asmtest src/test/asm_shift.asm
./asmtest src/test/asm_sub.asm
./asmtest src/test/asm_mul.asm
./asmtest src/test/asm_div.asm
./asmtest src/test/asm_mod.asm
13 changes: 11 additions & 2 deletions src/asm/vgsdrun.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,21 @@ static struct program_table PT;

static int show_op(unsigned int rp)
{
int i, j, l;
int i, j, l, bl;
unsigned int addr;

for (addr = 0, i = 0; i < PT.line_number; i++) {
if (PT.line[i].oplen) {
if (addr == rp) {
/* print label line if exist */
for (bl = i - 1; 0 <= bl; bl--) {
if (!PT.line[bl].oplen && PT.line[bl].branch_label[0]) {
printf("%08x: ----- %s -----\n", addr, PT.line[bl].branch_label);
} else {
break;
}
}
/* print exec line */
printf("%08x:", addr);
for (j = 0; j < PT.line[i].oplen; j++) {
printf(" %02X", (int)PT.line[i].op[j]);
Expand All @@ -27,7 +36,7 @@ static int show_op(unsigned int rp)
case 1:
if (PT.line[i].branch_label[0]) {
memcpy(&l, &PT.line[i].op[1], 4);
printf(" $%x", l);
printf(" $%x (%s)", l, PT.line[i].branch_label);
} else {
printf(" %s", PT.line[i].token[j]);
}
Expand Down
254 changes: 254 additions & 0 deletions src/test/asm_div.asm
Original file line number Diff line number Diff line change
@@ -0,0 +1,254 @@
/*
DIV の テストプログラム
*/
start-a:
// リテラルのテスト
LD A, 1000
DIV A, 100 // A = A / 100 (1byte)
CMP A, 10
JNE test-failed
JZ test-failed
DIV A, 11 // A = A / 11 (1byte)
JNZ test-failed
LD A, 1024
DIV A, 256 // A = A / 256 (2byte)
JZ test-failed
CMP A, 4
JNE test-failed
LD A, 1048576
DIV A, 65536 // A = A / 65536 (4byte)
CMP A, 16
JNE test-failed
JZ test-failed

// アドレス格納領域のテスト
LD A, $10203040
ST A, [0]
LD A, $80
DIV A, [0]O // A = A / $40 (1byte)
CMP A, 2
JNE test-failed
JZ test-failed
LD A, $90C0
DIV A, [0]H // A = A / $3040 (2byte)
CMP A, 3
JNE test-failed
JZ test-failed
LD A, $20406080
DIV A, [0] // A = A / $10203040 (4byte)
CMP A, 2
JNE test-failed
JZ test-failed

// レジスタ演算テスト
LD A, 67
LD B, 7
DIV A, B // A = A / B
CMP A, 9
JNE test-failed
JZ test-failed

LD A, 48
LD C, 6
DIV A, C // A = A / C
CMP A, 8
JNE test-failed
JZ test-failed

LD A, 33
LD D, 3
DIV A, D // A = A / D
CMP A, 11
JNE test-failed
JZ test-failed

start-b:
// リテラルのテスト
LD B, 1000
DIV B, 100 // B = B / 100 (1byte)
CMP B, 10
JNE test-failed
JZ test-failed
DIV B, 11 // B = B / 11 (1byte)
JNZ test-failed
LD B, 1024
DIV B, 256 // B = B / 256 (2byte)
JZ test-failed
CMP B, 4
JNE test-failed
LD B, 1048576
DIV B, 65536 // B = B / 65536 (4byte)
CMP B, 16
JNE test-failed
JZ test-failed

// アドレス格納領域のテスト
LD B, $10203040
ST B, [0]
LD B, $80
DIV B, [0]O // B = B / $40 (1byte)
CMP B, 2
JNE test-failed
JZ test-failed
LD B, $90C0
DIV B, [0]H // B = B / $3040 (2byte)
CMP B, 3
JNE test-failed
JZ test-failed
LD B, $20406080
DIV B, [0] // B = B / $10203040 (4byte)
CMP B, 2
JNE test-failed
JZ test-failed

// レジスタ演算テスト
LD B, 67
LD A, 7
DIV B, A // B = B / A
CMP B, 9
JNE test-failed
JZ test-failed

LD B, 48
LD C, 6
DIV B, C // B = B / C
CMP B, 8
JNE test-failed
JZ test-failed

LD B, 33
LD D, 3
DIV B, D // B = B / D
CMP B, 11
JNE test-failed
JZ test-failed

start-c:
// リテラルのテスト
LD C, 1000
DIV C, 100 // C = C / 100 (1byte)
CMP C, 10
JNE test-failed
JZ test-failed
DIV C, 11 // C = C / 11 (1byte)
JNZ test-failed
LD C, 1024
DIV C, 256 // C = C / 256 (2byte)
JZ test-failed
CMP C, 4
JNE test-failed
LD C, 1048576
DIV C, 65536 // C = C / 65536 (4byte)
CMP C, 16
JNE test-failed
JZ test-failed

// アドレス格納領域のテスト
LD C, $10203040
ST C, [0]
LD C, $80
DIV C, [0]O // C = C / $40 (1byte)
CMP C, 2
JNE test-failed
JZ test-failed
LD C, $90C0
DIV C, [0]H // C = C / $3040 (2byte)
CMP C, 3
JNE test-failed
JZ test-failed
LD C, $20406080
DIV C, [0] // C = C / $10203040 (4byte)
CMP C, 2
JNE test-failed
JZ test-failed

// レジスタ演算テスト
LD C, 67
LD A, 7
DIV C, A // C = C / A
CMP C, 9
JNE test-failed
JZ test-failed

LD C, 48
LD B, 6
DIV C, B // C = C / B
CMP C, 8
JNE test-failed
JZ test-failed

LD C, 33
LD D, 3
DIV C, D // C = C / D
CMP C, 11
JNE test-failed
JZ test-failed

start-d:
// リテラルのテスト
LD D, 1000
DIV D, 100 // D = D / 100 (1byte)
CMP D, 10
JNE test-failed
JZ test-failed
DIV D, 11 // D = D / 11 (1byte)
JNZ test-failed
LD D, 1024
DIV D, 256 // D = D / 256 (2byte)
JZ test-failed
CMP D, 4
JNE test-failed
LD D, 1048576
DIV D, 65536 // D = D / 65536 (4byte)
CMP D, 16
JNE test-failed
JZ test-failed

// アドレス格納領域のテスト
LD D, $10203040
ST D, [0]
LD D, $80
DIV D, [0]O // D = D / $40 (1byte)
CMP D, 2
JNE test-failed
JZ test-failed
LD D, $90C0
DIV D, [0]H // D = D / $3040 (2byte)
CMP D, 3
JNE test-failed
JZ test-failed
LD D, $20406080
DIV D, [0] // D = D / $10203040 (4byte)
CMP D, 2
JNE test-failed
JZ test-failed

// レジスタ演算テスト
LD D, 67
LD A, 7
DIV D, A // D = D / A
CMP D, 9
JNE test-failed
JZ test-failed

LD D, 48
LD B, 6
DIV D, B // D = D / B
CMP D, 8
JNE test-failed
JZ test-failed

LD D, 33
LD C, 3
DIV D, C // D = D / C
CMP D, 11
JNE test-failed
JZ test-failed

LD D, 1
BRK

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

0 comments on commit 432a074

Please sign in to comment.