z80_disassembler 0.2.5 → 0.3.2
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 +4 -4
- data/lib/z80_disassembler.rb +37 -8
- data/lib/z80_disassembler/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 32244bf0d6dba7c4803d9e2eb5877108f38f54b8beee841ca975afe10cdefdcd
|
4
|
+
data.tar.gz: 655e5e7d776633635dd35045ea7f93523712ca07b0e8a361c67e862f06f2262b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 57a38e4cd87ede79eb82cda138ac0337149575796cc1a1e2ff033de2beccd8b583fd59d5eddc2ab535f46907cadf8c69d2b3e9ad952950daf946291dc06261a2
|
7
|
+
data.tar.gz: 7e78cf72592390ecae2fd6d72173b10d87badad9586d6ea224d46fc92b970e27cbc4d1197d8ae3d14351ebcdedada8579d66f8578c8ff697cd3bef45168fb1b5
|
data/lib/z80_disassembler.rb
CHANGED
@@ -6,7 +6,7 @@ module Z80Disassembler
|
|
6
6
|
class Error < StandardError; end
|
7
7
|
|
8
8
|
class Disassembler
|
9
|
-
attr_reader :org
|
9
|
+
attr_reader :org, :file_size
|
10
10
|
|
11
11
|
# 0 1 2 3 4 5 6 7
|
12
12
|
T_R = [ 'B', 'C', 'D', 'E', 'H', 'L', '(HL)', 'A'].freeze
|
@@ -26,7 +26,7 @@ module Z80Disassembler
|
|
26
26
|
].freeze
|
27
27
|
|
28
28
|
def initialize(file, org = 32_768)
|
29
|
-
@file = file; @org =
|
29
|
+
@file = file; @org = org.to_i
|
30
30
|
if file.original_filename[-3..-1] == '.$C'
|
31
31
|
File.open(@file) do |f|
|
32
32
|
z = f.read(17)
|
@@ -88,7 +88,8 @@ module Z80Disassembler
|
|
88
88
|
end
|
89
89
|
string = hash_links.keys.include?(adr) ? str.sub(substr, hash_links[adr]) : str
|
90
90
|
|
91
|
-
|
91
|
+
defb = bytes.split(" ").map { |x| "##{x}"}.join(",")
|
92
|
+
"#{link} #{string.ljust(16, ' ')}; #{addr16.ljust(5, ' ')} / #{addr.to_s.ljust(5, ' ')} ; #{ascii.ljust(4, ' ')} ; #{defb}"
|
92
93
|
end.join("\n")
|
93
94
|
|
94
95
|
header = [
|
@@ -108,8 +109,36 @@ module Z80Disassembler
|
|
108
109
|
'begin:',
|
109
110
|
code,
|
110
111
|
'end:',
|
112
|
+
'length equ end - begin',
|
113
|
+
'CODE = #AF',
|
114
|
+
'USR = #C0',
|
115
|
+
'LOAD = #EF',
|
116
|
+
'CLEAR = #FD',
|
117
|
+
'RANDOMIZE = #F9',
|
118
|
+
' org #5C00',
|
119
|
+
'baszac db 0, 1', # Line number
|
120
|
+
' dw linlen', # Line length
|
121
|
+
'linzac',
|
122
|
+
' db CLEAR, "8", #0E, 0, 0',
|
123
|
+
' dw begin - 1',
|
124
|
+
' db 0, ":"',
|
125
|
+
' db LOAD, "\""',
|
126
|
+
'codnam ds 10, 32',
|
127
|
+
' org codnam',
|
128
|
+
' db "disasm"',
|
129
|
+
' org codnam + 10',
|
130
|
+
' db "\"", CODE, ":"',
|
131
|
+
' db RANDOMIZE, USR, "8", #0E, 0, 0',
|
132
|
+
' dw begin', # call address
|
133
|
+
' db 0, #0D',
|
134
|
+
'linlen = $ - linzac',
|
135
|
+
'baslen = $ - baszac',
|
136
|
+
' emptytap "disasm.tap"',
|
137
|
+
' savetap "disasm.tap", BASIC, "disasm", baszac, baslen, 1',
|
138
|
+
' savetap "disasm.tap", CODE, "disasm", begin, length, begin',
|
111
139
|
' savesna "disasm.sna", begin',
|
112
|
-
' savebin "disasm.C",
|
140
|
+
' savebin "disasm.C", begin, length',
|
141
|
+
' savehob "disasm.$C", "disasm.C", begin, length',
|
113
142
|
''
|
114
143
|
].join("\n")
|
115
144
|
end
|
@@ -132,9 +161,9 @@ module Z80Disassembler
|
|
132
161
|
resp = @lambda.call(@arg, byte.to_s(16).rjust(2, '0').upcase)
|
133
162
|
@prefix = nil; temp = @temp; @temp = nil
|
134
163
|
if temp && resp.include?('(HL)')
|
135
|
-
resp += temp
|
164
|
+
@xx ? resp = displacement(temp.hex, resp) : resp += temp
|
136
165
|
elsif temp && resp.include?(')')
|
137
|
-
# resp =
|
166
|
+
# resp = displacement(temp.hex, resp) if @xx
|
138
167
|
resp = resp.sub(')', "#{temp})").sub('(', '(#')
|
139
168
|
elsif temp
|
140
169
|
resp += temp
|
@@ -170,7 +199,7 @@ module Z80Disassembler
|
|
170
199
|
def displacement(byte, temp)
|
171
200
|
@prefix = nil
|
172
201
|
byte -= 256 if byte > 127
|
173
|
-
des = ['', "+#{byte
|
202
|
+
des = ['+0', "+#{byte}", byte.to_s][byte <=> 0]
|
174
203
|
temp.sub('HL', @xx + des)
|
175
204
|
end
|
176
205
|
|
@@ -216,7 +245,7 @@ module Z80Disassembler
|
|
216
245
|
case @z
|
217
246
|
when 0 then "RET #{T_CC[@y]}"
|
218
247
|
when 1 then @q ? ['RET','EXX','JP HL','LD SP, HL'][@p] : "POP #{T_RP2[@p]}"
|
219
|
-
when 2 then calc_bytes(->(a, b){ "JP #{a}
|
248
|
+
when 2 then calc_bytes(->(a, b){ "JP #{a},##{b}" }, T_CC[@y], 2)
|
220
249
|
when 3
|
221
250
|
case @y
|
222
251
|
when 0 then calc_bytes(->(a, b){ "JP ##{b}" }, nil, 2)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: z80_disassembler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- dvitvitskiy
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-06-
|
11
|
+
date: 2021-06-18 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email:
|