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.
- checksums.yaml +7 -0
- data/.gitignore +16 -0
- data/.rspec +2 -0
- data/.travis.yml +3 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +15 -0
- data/README.md +109 -0
- data/Rakefile +7 -0
- data/bin/c8dasm +13 -0
- data/c8dasm.gemspec +24 -0
- data/lib/c8dasm.rb +11 -0
- data/lib/c8dasm/assemblies.rb +18 -0
- data/lib/c8dasm/assemblies/asm0.rb +15 -0
- data/lib/c8dasm/assemblies/asm1.rb +10 -0
- data/lib/c8dasm/assemblies/asm2.rb +10 -0
- data/lib/c8dasm/assemblies/asm3.rb +10 -0
- data/lib/c8dasm/assemblies/asm4.rb +9 -0
- data/lib/c8dasm/assemblies/asm5.rb +12 -0
- data/lib/c8dasm/assemblies/asm6.rb +9 -0
- data/lib/c8dasm/assemblies/asm7.rb +9 -0
- data/lib/c8dasm/assemblies/asm8.rb +23 -0
- data/lib/c8dasm/assemblies/asm9.rb +11 -0
- data/lib/c8dasm/assemblies/asm_base.rb +26 -0
- data/lib/c8dasm/assemblies/asma.rb +11 -0
- data/lib/c8dasm/assemblies/asmb.rb +12 -0
- data/lib/c8dasm/assemblies/asmc.rb +11 -0
- data/lib/c8dasm/assemblies/asmd.rb +11 -0
- data/lib/c8dasm/assemblies/asme.rb +16 -0
- data/lib/c8dasm/assemblies/asmf.rb +20 -0
- data/lib/c8dasm/assembly.rb +22 -0
- data/lib/c8dasm/chip8_reader.rb +38 -0
- data/lib/c8dasm/comment.rb +23 -0
- data/lib/c8dasm/comments.rb +17 -0
- data/lib/c8dasm/comments/comment0.rb +14 -0
- data/lib/c8dasm/comments/comment1.rb +10 -0
- data/lib/c8dasm/comments/comment2.rb +11 -0
- data/lib/c8dasm/comments/comment3.rb +11 -0
- data/lib/c8dasm/comments/comment4.rb +11 -0
- data/lib/c8dasm/comments/comment5.rb +12 -0
- data/lib/c8dasm/comments/comment6.rb +11 -0
- data/lib/c8dasm/comments/comment7.rb +11 -0
- data/lib/c8dasm/comments/comment8.rb +25 -0
- data/lib/c8dasm/comments/comment9.rb +11 -0
- data/lib/c8dasm/comments/comment_base.rb +26 -0
- data/lib/c8dasm/comments/commenta.rb +11 -0
- data/lib/c8dasm/comments/commentb.rb +12 -0
- data/lib/c8dasm/comments/commentc.rb +11 -0
- data/lib/c8dasm/comments/commentd.rb +11 -0
- data/lib/c8dasm/comments/commente.rb +15 -0
- data/lib/c8dasm/comments/commentf.rb +30 -0
- data/lib/c8dasm/opcode.rb +34 -0
- data/lib/c8dasm/version.rb +3 -0
- data/spec/15-puzzle.ch8 +0 -0
- data/spec/MAZE +0 -0
- data/spec/c8dasm_spec.rb +7 -0
- data/spec/chip8_reader_spec.rb +27 -0
- data/spec/opcode_0_spec.rb +39 -0
- data/spec/opcode_1_spec.rb +23 -0
- data/spec/opcode_2_spec.rb +23 -0
- data/spec/opcode_3_spec.rb +23 -0
- data/spec/opcode_4_spec.rb +23 -0
- data/spec/opcode_5_spec.rb +25 -0
- data/spec/opcode_6_spec.rb +23 -0
- data/spec/opcode_7_spec.rb +23 -0
- data/spec/opcode_8_spec.rb +119 -0
- data/spec/opcode_9_spec.rb +24 -0
- data/spec/opcode_a_spec.rb +23 -0
- data/spec/opcode_b_spec.rb +24 -0
- data/spec/opcode_c_spec.rb +23 -0
- data/spec/opcode_d_spec.rb +23 -0
- data/spec/opcode_e_spec.rb +39 -0
- data/spec/opcode_f_spec.rb +151 -0
- data/spec/opcode_spec.rb +45 -0
- data/spec/spec_helper.rb +2 -0
- metadata +183 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 960ec7c6a8d76ad08c1b481f63e40788d3b2547c
|
4
|
+
data.tar.gz: f1a9a569beebd417784cc90c04513762d691d769
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d1f105e12fe48146e976436b1c68208698d9f8d536af64e2841a5fc70c78144d280e80951fdcf1eff4586454e15817cfe50bcef36f17a5797169df04150a2fb6
|
7
|
+
data.tar.gz: acd3e8a7b88ab659522d057494aa704905018d8238a3f80840896da7c78db34e871747055c0dd5a03189eee28ec7c161bea1c36055101c62a5aafe84f1d05c7d
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
c8dasm - a disassembler for chip8
|
2
|
+
Copyright (C) 2015 Xavier Nayrac
|
3
|
+
|
4
|
+
This program is free software: you can redistribute it and/or modify
|
5
|
+
it under the terms of the GNU General Public License as published by
|
6
|
+
the Free Software Foundation, either version 3 of the License, or
|
7
|
+
(at your option) any later version.
|
8
|
+
|
9
|
+
This program is distributed in the hope that it will be useful,
|
10
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
GNU General Public License for more details.
|
13
|
+
|
14
|
+
You should have received a copy of the GNU General Public License
|
15
|
+
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
data/README.md
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
# C8dasm
|
2
|
+
|
3
|
+
`c8dasm` is a utility to disassemble a Chip8 binary file.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Install it as:
|
8
|
+
|
9
|
+
$ gem install c8dasm
|
10
|
+
|
11
|
+
## Usage
|
12
|
+
|
13
|
+
$ c8dasm chip8file
|
14
|
+
|
15
|
+
### Example
|
16
|
+
|
17
|
+
$ c8dasm MAZE
|
18
|
+
200:a21e LD I, 21e ;Puts 21e into register I.
|
19
|
+
202:c201 RND V2, 01 ;Puts random byte AND 01 into register V2.
|
20
|
+
204:3201 SE V2, 01 ;Skip next instruction if V2 = 01.
|
21
|
+
206:a21a LD I, 21a ;Puts 21a into register I.
|
22
|
+
208:d014 DRW V0, V1, 4 ;Draws 4-byte sprite from I at (V0, V1)
|
23
|
+
20a:7004 ADD V0, 04 ;V0 = V0 + 04.
|
24
|
+
20c:3040 SE V0, 40 ;Skip next instruction if V0 = 40.
|
25
|
+
20e:1200 JP 200 ;Jump to location 200.
|
26
|
+
210:6000 LD V0, 00 ;Puts the value 00 into register V0.
|
27
|
+
212:7104 ADD V1, 04 ;V1 = V1 + 04.
|
28
|
+
...
|
29
|
+
|
30
|
+
## License
|
31
|
+
|
32
|
+
GPLv3
|
33
|
+
|
34
|
+
## Standard Chip-8 Instructions (What's remain to do)
|
35
|
+
|
36
|
+
- [x] 00E0 - CLS
|
37
|
+
- [x] 00EE - RET
|
38
|
+
- [ ] 0nnn - SYS addr
|
39
|
+
- [x] 1nnn - JP addr
|
40
|
+
- [x] 2nnn - CALL addr
|
41
|
+
- [x] 3xkk - SE Vx, byte
|
42
|
+
- [x] 4xkk - SNE Vx, byte
|
43
|
+
- [x] 5xy0 - SE Vx, Vy
|
44
|
+
- [x] 6xkk - LD Vx, byte
|
45
|
+
- [x] 7xkk - ADD Vx, byte
|
46
|
+
- [x] 8xy0 - LD Vx, Vy
|
47
|
+
- [ ] 8xy1 - OR Vx, Vy
|
48
|
+
- [x] 8xy2 - AND Vx, Vy
|
49
|
+
- [x] 8xy3 - XOR Vx, Vy
|
50
|
+
- [x] 8xy4 - ADD Vx, Vy
|
51
|
+
- [x] 8xy5 - SUB Vx, Vy
|
52
|
+
- [x] 8xy6 - SHR Vx {, Vy}
|
53
|
+
- [ ] 8xy7 - SUBN Vx, Vy
|
54
|
+
- [x] 8xyE - SHL Vx {, Vy}
|
55
|
+
- [x] 9xy0 - SNE Vx, Vy
|
56
|
+
- [x] Annn - LD I, addr
|
57
|
+
- [x] Bnnn - JP V0, addr
|
58
|
+
- [x] Cxkk - RND Vx, byte
|
59
|
+
- [x] Dxyn - DRW Vx, Vy, nibble
|
60
|
+
- [x] Ex9E - SKP Vx
|
61
|
+
- [x] ExA1 - SKNP Vx
|
62
|
+
- [x] Fx07 - LD Vx, DT
|
63
|
+
- [x] Fx0A - LD Vx, KEY
|
64
|
+
- [x] Fx15 - LD DT, Vx
|
65
|
+
- [x] Fx18 - LD ST, Vx
|
66
|
+
- [x] Fx1E - ADD I, Vx
|
67
|
+
- [x] Fx29 - LD F, Vx
|
68
|
+
- [x] Fx33 - LD B, Vx
|
69
|
+
- [x] Fx55 - LD [I], Vx
|
70
|
+
- [x] Fx65 - LD Vx, [I]
|
71
|
+
|
72
|
+
## TODO
|
73
|
+
|
74
|
+
Check input file.
|
75
|
+
|
76
|
+
Option --help and --version.
|
77
|
+
|
78
|
+
Data range display option, for instance:
|
79
|
+
|
80
|
+
$ c8dasm --data=21a,221 MAZE
|
81
|
+
200:a21e LD I, 21e ;Puts 21e into register I.
|
82
|
+
202:c201 RND V2, 01 ;Puts random byte AND 01 into register V2.
|
83
|
+
204:3201 SE V2, 01 ;Skip next instruction if V2 = 01.
|
84
|
+
206:a21a LD I, 21a ;Puts 21a into register I.
|
85
|
+
208:d014 DRW V0, V1, 4 ;Draws 4-byte sprite from I at (V0, V1)
|
86
|
+
20a:7004 ADD V0, 04 ;V0 = V0 + 04.
|
87
|
+
20c:3040 SE V0, 40 ;Skip next instruction if V0 = 40.
|
88
|
+
20e:1200 JP 200 ;Jump to location 200.
|
89
|
+
210:6000 LD V0, 00 ;Puts the value 00 into register V0.
|
90
|
+
212:7104 ADD V1, 04 ;V1 = V1 + 04.
|
91
|
+
214:3120 SE V1, 20 ;Skip next instruction if V1 = 20.
|
92
|
+
216:1200 JP 200 ;Jump to location 200.
|
93
|
+
218:1218 JP 218 ;Jump to location 218.
|
94
|
+
21a:80 @.......
|
95
|
+
21b:40 .@......
|
96
|
+
21c:20 ..@.....
|
97
|
+
21d:10 ...@....
|
98
|
+
21e:20 ..@.....
|
99
|
+
21f:40 .@......
|
100
|
+
220:80 @.......
|
101
|
+
221:10 ...@....
|
102
|
+
|
103
|
+
## Contributing
|
104
|
+
|
105
|
+
1. Fork it ( https://github.com/[my-github-username]/c8dasm/fork )
|
106
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
107
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
108
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
109
|
+
5. Create a new Pull Request
|
data/Rakefile
ADDED
data/bin/c8dasm
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'c8dasm'
|
4
|
+
|
5
|
+
reader = C8dasm::Chip8Reader.new(ARGV[0])
|
6
|
+
|
7
|
+
counter_base = 0x200
|
8
|
+
|
9
|
+
opcodes = reader.opcodes.map.with_index do |item, index|
|
10
|
+
C8dasm::Opcode.new(item, address: counter_base + 2 * index)
|
11
|
+
end
|
12
|
+
|
13
|
+
opcodes.each {|opcode| puts opcode.line }
|
data/c8dasm.gemspec
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'c8dasm/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "c8dasm"
|
8
|
+
spec.version = C8dasm::VERSION
|
9
|
+
spec.authors = ["lkdjiin"]
|
10
|
+
spec.email = ["xavier.nayrac@gmail.com"]
|
11
|
+
spec.summary = %q{Disassembler for Chip8 binaries.}
|
12
|
+
spec.description = %q{c8dasm is a utility to disassemble a Chip8 binary file.}
|
13
|
+
spec.homepage = ""
|
14
|
+
spec.license = "GPLv3"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.7"
|
22
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
23
|
+
spec.add_development_dependency "rspec"
|
24
|
+
end
|
data/lib/c8dasm.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
require "c8dasm/version"
|
2
|
+
require "c8dasm/chip8_reader"
|
3
|
+
require "c8dasm/opcode"
|
4
|
+
require "c8dasm/assembly"
|
5
|
+
require "c8dasm/assemblies"
|
6
|
+
require "c8dasm/comment"
|
7
|
+
require "c8dasm/comments"
|
8
|
+
|
9
|
+
# A desassembly utility for Chip-8.
|
10
|
+
module C8dasm
|
11
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require "c8dasm/assemblies/asm_base"
|
2
|
+
require "c8dasm/assemblies/asm0"
|
3
|
+
require "c8dasm/assemblies/asm1"
|
4
|
+
require "c8dasm/assemblies/asm2"
|
5
|
+
require "c8dasm/assemblies/asm3"
|
6
|
+
require "c8dasm/assemblies/asm4"
|
7
|
+
require "c8dasm/assemblies/asm5"
|
8
|
+
require "c8dasm/assemblies/asm6"
|
9
|
+
require "c8dasm/assemblies/asm7"
|
10
|
+
require "c8dasm/assemblies/asm8"
|
11
|
+
require "c8dasm/assemblies/asm9"
|
12
|
+
require "c8dasm/assemblies/asma"
|
13
|
+
require "c8dasm/assemblies/asmb"
|
14
|
+
require "c8dasm/assemblies/asmc"
|
15
|
+
require "c8dasm/assemblies/asmd"
|
16
|
+
require "c8dasm/assemblies/asme"
|
17
|
+
require "c8dasm/assemblies/asmf"
|
18
|
+
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module C8dasm
|
2
|
+
|
3
|
+
class Asm8 < AsmBase
|
4
|
+
|
5
|
+
def to_s
|
6
|
+
case last_opcode
|
7
|
+
when '0' then "LD V#{x}, V#{y}"
|
8
|
+
when '2' then "AND V#{x}, V#{y}"
|
9
|
+
when '3' then "XOR V#{x}, V#{y}"
|
10
|
+
when '4' then "ADD V#{x}, V#{y}"
|
11
|
+
when '5' then "SUB V#{x}, V#{y}"
|
12
|
+
when '6' then "SHR V#{x}, V#{y}"
|
13
|
+
when 'e' then "SHL V#{x}, V#{y}"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def last_opcode
|
18
|
+
@opcode[3]
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module C8dasm
|
2
|
+
|
3
|
+
class AsmBase
|
4
|
+
|
5
|
+
def initialize(opcode)
|
6
|
+
@opcode = opcode
|
7
|
+
end
|
8
|
+
|
9
|
+
def nnn
|
10
|
+
@opcode[1, 3]
|
11
|
+
end
|
12
|
+
|
13
|
+
def kk
|
14
|
+
@opcode[2, 2]
|
15
|
+
end
|
16
|
+
|
17
|
+
def x
|
18
|
+
@opcode[1]
|
19
|
+
end
|
20
|
+
|
21
|
+
def y
|
22
|
+
@opcode[2]
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|