c8dasm 0.99.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+