c8dasm 0.99.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +16 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +3 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE.txt +15 -0
  7. data/README.md +109 -0
  8. data/Rakefile +7 -0
  9. data/bin/c8dasm +13 -0
  10. data/c8dasm.gemspec +24 -0
  11. data/lib/c8dasm.rb +11 -0
  12. data/lib/c8dasm/assemblies.rb +18 -0
  13. data/lib/c8dasm/assemblies/asm0.rb +15 -0
  14. data/lib/c8dasm/assemblies/asm1.rb +10 -0
  15. data/lib/c8dasm/assemblies/asm2.rb +10 -0
  16. data/lib/c8dasm/assemblies/asm3.rb +10 -0
  17. data/lib/c8dasm/assemblies/asm4.rb +9 -0
  18. data/lib/c8dasm/assemblies/asm5.rb +12 -0
  19. data/lib/c8dasm/assemblies/asm6.rb +9 -0
  20. data/lib/c8dasm/assemblies/asm7.rb +9 -0
  21. data/lib/c8dasm/assemblies/asm8.rb +23 -0
  22. data/lib/c8dasm/assemblies/asm9.rb +11 -0
  23. data/lib/c8dasm/assemblies/asm_base.rb +26 -0
  24. data/lib/c8dasm/assemblies/asma.rb +11 -0
  25. data/lib/c8dasm/assemblies/asmb.rb +12 -0
  26. data/lib/c8dasm/assemblies/asmc.rb +11 -0
  27. data/lib/c8dasm/assemblies/asmd.rb +11 -0
  28. data/lib/c8dasm/assemblies/asme.rb +16 -0
  29. data/lib/c8dasm/assemblies/asmf.rb +20 -0
  30. data/lib/c8dasm/assembly.rb +22 -0
  31. data/lib/c8dasm/chip8_reader.rb +38 -0
  32. data/lib/c8dasm/comment.rb +23 -0
  33. data/lib/c8dasm/comments.rb +17 -0
  34. data/lib/c8dasm/comments/comment0.rb +14 -0
  35. data/lib/c8dasm/comments/comment1.rb +10 -0
  36. data/lib/c8dasm/comments/comment2.rb +11 -0
  37. data/lib/c8dasm/comments/comment3.rb +11 -0
  38. data/lib/c8dasm/comments/comment4.rb +11 -0
  39. data/lib/c8dasm/comments/comment5.rb +12 -0
  40. data/lib/c8dasm/comments/comment6.rb +11 -0
  41. data/lib/c8dasm/comments/comment7.rb +11 -0
  42. data/lib/c8dasm/comments/comment8.rb +25 -0
  43. data/lib/c8dasm/comments/comment9.rb +11 -0
  44. data/lib/c8dasm/comments/comment_base.rb +26 -0
  45. data/lib/c8dasm/comments/commenta.rb +11 -0
  46. data/lib/c8dasm/comments/commentb.rb +12 -0
  47. data/lib/c8dasm/comments/commentc.rb +11 -0
  48. data/lib/c8dasm/comments/commentd.rb +11 -0
  49. data/lib/c8dasm/comments/commente.rb +15 -0
  50. data/lib/c8dasm/comments/commentf.rb +30 -0
  51. data/lib/c8dasm/opcode.rb +34 -0
  52. data/lib/c8dasm/version.rb +3 -0
  53. data/spec/15-puzzle.ch8 +0 -0
  54. data/spec/MAZE +0 -0
  55. data/spec/c8dasm_spec.rb +7 -0
  56. data/spec/chip8_reader_spec.rb +27 -0
  57. data/spec/opcode_0_spec.rb +39 -0
  58. data/spec/opcode_1_spec.rb +23 -0
  59. data/spec/opcode_2_spec.rb +23 -0
  60. data/spec/opcode_3_spec.rb +23 -0
  61. data/spec/opcode_4_spec.rb +23 -0
  62. data/spec/opcode_5_spec.rb +25 -0
  63. data/spec/opcode_6_spec.rb +23 -0
  64. data/spec/opcode_7_spec.rb +23 -0
  65. data/spec/opcode_8_spec.rb +119 -0
  66. data/spec/opcode_9_spec.rb +24 -0
  67. data/spec/opcode_a_spec.rb +23 -0
  68. data/spec/opcode_b_spec.rb +24 -0
  69. data/spec/opcode_c_spec.rb +23 -0
  70. data/spec/opcode_d_spec.rb +23 -0
  71. data/spec/opcode_e_spec.rb +39 -0
  72. data/spec/opcode_f_spec.rb +151 -0
  73. data/spec/opcode_spec.rb +45 -0
  74. data/spec/spec_helper.rb +2 -0
  75. metadata +183 -0
@@ -0,0 +1,3 @@
1
+ module C8dasm
2
+ VERSION = "0.99.0"
3
+ end
Binary file
Binary file
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe C8dasm do
4
+ it 'has a version number' do
5
+ expect(C8dasm::VERSION).not_to be nil
6
+ end
7
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ include C8dasm
4
+
5
+ describe Chip8Reader do
6
+
7
+ before do
8
+ reader = Chip8Reader.new('./spec/MAZE')
9
+ @opcodes = reader.opcodes
10
+ end
11
+
12
+ it 'returns the right amount of opcodes' do
13
+ expect(@opcodes.size).to eq 17
14
+ end
15
+
16
+ specify 'an opcode is a string' do
17
+ expect(@opcodes.first).to be_a String
18
+ end
19
+
20
+ describe "MAZE's opcodes" do
21
+ specify { expect(@opcodes[0]).to eq 'a21e' }
22
+ specify { expect(@opcodes[2]).to eq '3201' }
23
+ specify { expect(@opcodes[8]).to eq '6000' }
24
+ specify { expect(@opcodes[16]).to eq '8010' }
25
+ end
26
+
27
+ end
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ include C8dasm
4
+
5
+ describe Opcode do
6
+
7
+ describe '00e0' do
8
+ before { @opcode = Opcode.new('00e0') }
9
+
10
+ it 'returns the opcode' do
11
+ expect(@opcode.opcode).to eq '00e0'
12
+ end
13
+
14
+ it 'returns the assembly' do
15
+ expect(@opcode.assembly).to eq 'CLS'
16
+ end
17
+
18
+ it 'returns a comment' do
19
+ expect(@opcode.comment).to eq 'Clear the display.'
20
+ end
21
+ end
22
+
23
+ describe '00ee' do
24
+ before { @opcode = Opcode.new('00ee') }
25
+
26
+ it 'returns the opcode' do
27
+ expect(@opcode.opcode).to eq '00ee'
28
+ end
29
+
30
+ it 'returns the assembly' do
31
+ expect(@opcode.assembly).to eq 'RET'
32
+ end
33
+
34
+ it 'returns a comment' do
35
+ expect(@opcode.comment).to eq 'Returns from this subroutine.'
36
+ end
37
+ end
38
+
39
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ include C8dasm
4
+
5
+ describe Opcode do
6
+
7
+ describe '1200' do
8
+ before { @opcode = Opcode.new('1200') }
9
+
10
+ it 'returns the opcode' do
11
+ expect(@opcode.opcode).to eq '1200'
12
+ end
13
+
14
+ it 'returns the assembly' do
15
+ expect(@opcode.assembly).to eq 'JP 200'
16
+ end
17
+
18
+ it 'returns a comment' do
19
+ expect(@opcode.comment).to eq 'Jump to location 200.'
20
+ end
21
+ end
22
+
23
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ include C8dasm
4
+
5
+ describe Opcode do
6
+
7
+ describe '22a2' do
8
+ before { @opcode = Opcode.new('22a2') }
9
+
10
+ it 'returns the opcode' do
11
+ expect(@opcode.opcode).to eq '22a2'
12
+ end
13
+
14
+ it 'returns the assembly' do
15
+ expect(@opcode.assembly).to eq 'CALL 2a2'
16
+ end
17
+
18
+ it 'returns a comment' do
19
+ expect(@opcode.comment).to eq 'Call subroutine at 2a2.'
20
+ end
21
+ end
22
+
23
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ include C8dasm
4
+
5
+ describe Opcode do
6
+
7
+ describe '3201' do
8
+ before { @opcode = Opcode.new('3201') }
9
+
10
+ it 'returns the opcode' do
11
+ expect(@opcode.opcode).to eq '3201'
12
+ end
13
+
14
+ it 'returns the assembly' do
15
+ expect(@opcode.assembly).to eq 'SE V2, 01'
16
+ end
17
+
18
+ it 'returns a comment' do
19
+ expect(@opcode.comment).to eq 'Skip next instruction if V2 = 01.'
20
+ end
21
+ end
22
+
23
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ include C8dasm
4
+
5
+ describe Opcode do
6
+
7
+ describe '4800' do
8
+ before { @opcode = Opcode.new('4800') }
9
+
10
+ it 'returns the opcode' do
11
+ expect(@opcode.opcode).to eq '4800'
12
+ end
13
+
14
+ it 'returns the assembly' do
15
+ expect(@opcode.assembly).to eq 'SNE V8, 00'
16
+ end
17
+
18
+ it 'returns a comment' do
19
+ expect(@opcode.comment).to eq 'Skip next instruction if V8 != 00.'
20
+ end
21
+ end
22
+
23
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ include C8dasm
4
+
5
+ describe Opcode do
6
+
7
+ describe '5210' do
8
+ before { @opcode = Opcode.new('5210') }
9
+
10
+ it 'returns the opcode' do
11
+ expect(@opcode.opcode).to eq '5210'
12
+ end
13
+
14
+ it 'returns the assembly' do
15
+ expect(@opcode.assembly).to eq 'SE V2, V1'
16
+ end
17
+
18
+ it 'returns a comment' do
19
+ expect(@opcode.comment).to eq 'Skip next instruction if V2 = V1.'
20
+ end
21
+ end
22
+
23
+ end
24
+
25
+
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ include C8dasm
4
+
5
+ describe Opcode do
6
+
7
+ describe '6012' do
8
+ before { @opcode = Opcode.new('6012') }
9
+
10
+ it 'returns the opcode' do
11
+ expect(@opcode.opcode).to eq '6012'
12
+ end
13
+
14
+ it 'returns the assembly' do
15
+ expect(@opcode.assembly).to eq 'LD V0, 12'
16
+ end
17
+
18
+ it 'returns a comment' do
19
+ expect(@opcode.comment).to eq 'Puts the value 12 into register V0.'
20
+ end
21
+ end
22
+
23
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ include C8dasm
4
+
5
+ describe Opcode do
6
+
7
+ describe '7004' do
8
+ before { @opcode = Opcode.new('7004') }
9
+
10
+ it 'returns the opcode' do
11
+ expect(@opcode.opcode).to eq '7004'
12
+ end
13
+
14
+ it 'returns the assembly' do
15
+ expect(@opcode.assembly).to eq 'ADD V0, 04'
16
+ end
17
+
18
+ it 'returns a comment' do
19
+ expect(@opcode.comment).to eq 'V0 = V0 + 04.'
20
+ end
21
+ end
22
+
23
+ end
@@ -0,0 +1,119 @@
1
+ require 'spec_helper'
2
+
3
+ include C8dasm
4
+
5
+ describe Opcode do
6
+
7
+ describe '8a10' do
8
+ before { @opcode = Opcode.new('8a10') }
9
+
10
+ it 'returns the opcode' do
11
+ expect(@opcode.opcode).to eq '8a10'
12
+ end
13
+
14
+ it 'returns the assembly' do
15
+ expect(@opcode.assembly).to eq 'LD Va, V1'
16
+ end
17
+
18
+ it 'returns a comment' do
19
+ expect(@opcode.comment).to eq 'Set Va = V1.'
20
+ end
21
+ end
22
+
23
+ describe '8d52' do
24
+ before { @opcode = Opcode.new('8d52') }
25
+
26
+ it 'returns the opcode' do
27
+ expect(@opcode.opcode).to eq '8d52'
28
+ end
29
+
30
+ it 'returns the assembly' do
31
+ expect(@opcode.assembly).to eq 'AND Vd, V5'
32
+ end
33
+
34
+ it 'returns a comment' do
35
+ expect(@opcode.comment).to eq 'Set Vd = Vd AND V5.'
36
+ end
37
+ end
38
+
39
+ describe '8903' do
40
+ before { @opcode = Opcode.new('8903') }
41
+
42
+ it 'returns the opcode' do
43
+ expect(@opcode.opcode).to eq '8903'
44
+ end
45
+
46
+ it 'returns the assembly' do
47
+ expect(@opcode.assembly).to eq 'XOR V9, V0'
48
+ end
49
+
50
+ it 'returns a comment' do
51
+ expect(@opcode.comment).to eq 'Set V9 = V9 XOR V0.'
52
+ end
53
+ end
54
+
55
+ describe '8bd4' do
56
+ before { @opcode = Opcode.new('8bd4') }
57
+
58
+ it 'returns the opcode' do
59
+ expect(@opcode.opcode).to eq '8bd4'
60
+ end
61
+
62
+ it 'returns the assembly' do
63
+ expect(@opcode.assembly).to eq 'ADD Vb, Vd'
64
+ end
65
+
66
+ it 'returns a comment' do
67
+ expect(@opcode.comment).to eq 'Set Vb = Vb + Vd, set VF = carry.'
68
+ end
69
+ end
70
+
71
+ describe '8b25' do
72
+ before { @opcode = Opcode.new('8b25') }
73
+
74
+ it 'returns the opcode' do
75
+ expect(@opcode.opcode).to eq '8b25'
76
+ end
77
+
78
+ it 'returns the assembly' do
79
+ expect(@opcode.assembly).to eq 'SUB Vb, V2'
80
+ end
81
+
82
+ it 'returns a comment' do
83
+ expect(@opcode.comment).to eq 'Set Vb = Vb - V2, set VF = NOT borrow.'
84
+ end
85
+ end
86
+
87
+ describe '87a6' do
88
+ before { @opcode = Opcode.new('87a6') }
89
+
90
+ it 'returns the opcode' do
91
+ expect(@opcode.opcode).to eq '87a6'
92
+ end
93
+
94
+ it 'returns the assembly' do
95
+ expect(@opcode.assembly).to eq 'SHR V7, Va'
96
+ end
97
+
98
+ it 'returns a comment' do
99
+ expect(@opcode.comment).to eq 'Set V7 = Va SHR 1.'
100
+ end
101
+ end
102
+
103
+ describe '87ae' do
104
+ before { @opcode = Opcode.new('87ae') }
105
+
106
+ it 'returns the opcode' do
107
+ expect(@opcode.opcode).to eq '87ae'
108
+ end
109
+
110
+ it 'returns the assembly' do
111
+ expect(@opcode.assembly).to eq 'SHL V7, Va'
112
+ end
113
+
114
+ it 'returns a comment' do
115
+ expect(@opcode.comment).to eq 'Set V7 = Va SHL 1.'
116
+ end
117
+ end
118
+
119
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ include C8dasm
4
+
5
+ describe Opcode do
6
+
7
+ describe '9210' do
8
+ before { @opcode = Opcode.new('9210') }
9
+
10
+ it 'returns the opcode' do
11
+ expect(@opcode.opcode).to eq '9210'
12
+ end
13
+
14
+ it 'returns the assembly' do
15
+ expect(@opcode.assembly).to eq 'SNE V2, V1'
16
+ end
17
+
18
+ it 'returns a comment' do
19
+ expect(@opcode.comment).to eq 'Skip next instruction if V2 != V1.'
20
+ end
21
+ end
22
+
23
+ end
24
+
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ include C8dasm
4
+
5
+ describe Opcode do
6
+
7
+ describe 'a21e' do
8
+ before { @opcode = Opcode.new('a21e') }
9
+
10
+ it 'returns the opcode' do
11
+ expect(@opcode.opcode).to eq 'a21e'
12
+ end
13
+
14
+ it 'returns the assembly' do
15
+ expect(@opcode.assembly).to eq 'LD I, 21e'
16
+ end
17
+
18
+ it 'returns a comment' do
19
+ expect(@opcode.comment).to eq 'Puts 21e into register I.'
20
+ end
21
+ end
22
+
23
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ include C8dasm
4
+
5
+ describe Opcode do
6
+
7
+ describe 'b123' do
8
+ before { @opcode = Opcode.new('b123') }
9
+
10
+ it 'returns the opcode' do
11
+ expect(@opcode.opcode).to eq 'b123'
12
+ end
13
+
14
+ it 'returns the assembly' do
15
+ expect(@opcode.assembly).to eq 'JP V0, 123'
16
+ end
17
+
18
+ it 'returns a comment' do
19
+ expect(@opcode.comment).to eq 'Jump to location 123 + V0.'
20
+ end
21
+ end
22
+
23
+ end
24
+