z80_disassembler 0.3.3 → 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e59d1cbc765de69aad6442c4f0bd64e1748f662a891252bc0eab7258d968381e
4
- data.tar.gz: 193ab3d2c21c123031d93d332fb3a047b8f0fa3207949829f8a06964dbd28d7e
3
+ metadata.gz: 390347df84d8651faf44793baf078879528723e14e7f3be3b72c7f560d539a25
4
+ data.tar.gz: 93339825ed0af95a9119436e1e2f3655639296f7e68b95f081c1d29aa7e083e7
5
5
  SHA512:
6
- metadata.gz: be876acbc2a186a464eac57fe8bc76219efebc82135e45f944d2672e363861a4be54704871761bc6cb892e067ead7a935bafae8fbc61609b05817965d51944b3
7
- data.tar.gz: ca92e84d316959a3a32f4c841f27f77b7f0aa243ced8a5e1605913c5a4ec67cfa9956eebc36f156be4a25427925ed1770a2a16ca820c64f6c996946913efba9f
6
+ metadata.gz: 5c0f3af21beb421b8ae5c7f10397694531190f74024c07b576ade321eb2c0539cad1df4da916bfaf02f71a52246ca77478556969733138c097291370a91ea346
7
+ data.tar.gz: 825e0e83814ac331543db23eb02e7faaa06eb94fcdc6a4df4d4c355785fbb93fa900f1ea7ad902c200fc582692e3a4146f18565720f370862815fb57e801e6cb
@@ -6,7 +6,7 @@ module Z80Disassembler
6
6
  class Error < StandardError; end
7
7
 
8
8
  class Disassembler
9
- attr_reader :org, :file_size
9
+ attr_reader :org, :file_size, :rmda
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
@@ -42,10 +42,22 @@ module Z80Disassembler
42
42
  @code ||= File.open(@file).read.bytes
43
43
  @file_size ||= @file.size
44
44
  @x = 0; @y = 0; @z = 0; @p = 0; @q = 0; @xx = nil
45
- @lambda = nil; @prefix = nil; @prev = nil; @result = []
45
+ @lambda = nil; @prefix = nil; @prev = nil
46
+ @hash_links = {}; @del_links = []
47
+ @rmda = """
48
+ ;--- #{Date.today} --- https://rmda.su
49
+ ; _______ _/| __ ______ ____
50
+ ; / __ // |/ \\\\ _ \\ / \\
51
+ ; / _/ _// \\\\ \\\\ \\\\ \\ \\
52
+ ; \\___\\ \\\\___\\/___//______//__/\\__\\
53
+ ; \\__/
54
+ ;--- size: #{@file_size}b --- filename: #{@file_name}
55
+
56
+ """
46
57
  end
47
58
 
48
59
  def start
60
+ result = []
49
61
  addr = @org
50
62
  bytes = []; ascii = []
51
63
  @code.each do |byte|
@@ -56,59 +68,50 @@ module Z80Disassembler
56
68
  bytes << @prev.rjust(2, '0').upcase
57
69
  next unless str
58
70
 
59
- @result << [addr, "##{addr.to_s(16)}".upcase, str, bytes.join(' '), ascii.join]
71
+ result << [addr, "##{addr.to_s(16)}".upcase, str, bytes.join(' '), ascii.join]
60
72
  addr += bytes.size
61
73
  bytes = []
62
74
  ascii = []
63
75
  end
64
- @result
65
- end
66
76
 
67
- def text
68
- hash_links = {}
69
- del_links = []
70
77
  link_num = 0
71
78
  int_addrs = @org..(@org + @file_size)
72
- @result.select { |z| z[2] =~ /#[0-F]{4}/ && int_addrs.include?(z[2].split('#').last[0..3].hex) }.each do |x|
79
+ result.select { |z| z[2] =~ /#[0-F]{4}/ && int_addrs.include?(z[2].split('#').last[0..3].hex) }.each do |x|
73
80
  z = "##{x[2].split('#').last[0..3]}"
74
- hash_links[z] = "link_#{link_num += 1}" unless hash_links[z]
81
+ @hash_links[z] = "link_#{link_num += 1}" unless @hash_links[z]
75
82
  end
76
- @result.select { |z| z[2] =~ /\$/ }.each do |x|
83
+ result.select { |z| z[2] =~ /\$/ }.each do |x|
77
84
  z = "##{ (x[0] + x[2].split('$').last.to_i).to_s(16).upcase }"
78
- hash_links[z] = "link_#{link_num += 1}" unless hash_links[z]
85
+ @hash_links[z] = "link_#{link_num += 1}" unless @hash_links[z]
79
86
  end
80
- code = @result.map do |addr, addr16, str, bytes, ascii|
81
- del_links << hash_links[addr16] if hash_links[addr16]
82
- link = (hash_links[addr16] ? (hash_links[addr16] + ':') : '').ljust(16, ' ')
87
+ code = result.map do |addr_, addr16, str, bytes_, ascii_|
88
+ @del_links << @hash_links[addr16] if @hash_links[addr16]
89
+ link = (@hash_links[addr16] ? (@hash_links[addr16] + ':') : '').ljust(16, ' ')
83
90
  substr, adr = if str.include?('$')
84
- ["$#{str.split('$').last}", "##{(addr + str.split('$').last.to_i).to_s(16).upcase}"]
91
+ ["$#{str.split('$').last}", "##{(addr_ + str.split('$').last.to_i).to_s(16).upcase}"]
85
92
  else
86
93
  adr = "##{str.split('#').last[0..3]}"
87
94
  [adr, adr]
88
95
  end
89
- string = hash_links.keys.include?(adr) ? str.sub(substr, hash_links[adr]) : str
96
+ string = @hash_links.keys.include?(adr) ? str.sub(substr, @hash_links[adr]) : str
90
97
 
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}"
98
+ defb = bytes_.split(" ").map { |x| "##{x}"}.join(",")
99
+ "#{link} #{string.ljust(16, ' ')}; #{addr16.ljust(5, ' ')} / #{addr_.to_s.ljust(5, ' ')} ; #{ascii_.ljust(4, ' ')} ; #{defb}"
93
100
  end.join("\n")
101
+ [
102
+ *@rmda,
103
+ ' device zxspectrum128',
104
+ ' ORG #' + @org.to_s(16),
105
+ @hash_links.map { |key, val| "#{(val + ':').ljust(16, ' ')} EQU #{key}" unless @del_links.include?(val) }.compact.join("\n"),
106
+ 'begin:',
107
+ code,
108
+ 'end:',
109
+ ''
110
+ ].join("\n")
111
+ end
94
112
 
95
- header = [
96
- ";--- #{Date.today} --- https://rmda.su ",
97
- '; _______ _/| __ ______ ____ ',
98
- '; / __ // |/ \\\\ _ \ / \ ',
99
- '; / _/ _// \\\\ \\\\ \\\\ \ \ ',
100
- '; \___\ \\\\___\/___//______//__/\__\ ',
101
- '; \__/ ',
102
- ";--- size: #{@file_size} --- filename: #{@file_name} "
103
- ]
113
+ def self.compile_text(file_name)
104
114
  [
105
- *header,
106
- ' device zxspectrum48',
107
- ' ORG #' + @org.to_s(16),
108
- hash_links.map { |key, val| "#{val.ljust(16, ' ')} equ #{key}" unless del_links.include?(val) }.compact.join("\n"),
109
- 'begin:',
110
- code,
111
- 'end:',
112
115
  'length equ end - begin',
113
116
  'CODE = #AF',
114
117
  'USR = #C0',
@@ -116,29 +119,28 @@ module Z80Disassembler
116
119
  'CLEAR = #FD',
117
120
  'RANDOMIZE = #F9',
118
121
  ' org #5C00',
119
- 'baszac db 0, 1', # Line number
120
- ' dw linlen', # Line length
121
- 'linzac',
122
- ' db CLEAR, "8", #0E, 0, 0',
122
+ 'baszac db 0,1', # Line number
123
+ ' dw linlen', # Line length
124
+ 'linzac db CLEAR, "8", #0E, 0, 0',
123
125
  ' dw begin - 1',
124
126
  ' db 0, ":"',
125
127
  ' db LOAD, "\""',
126
- 'codnam ds 10, 32',
128
+ 'codnam ds 10, 32',
127
129
  ' org codnam',
128
130
  ' db "disasm"',
129
131
  ' org codnam + 10',
130
132
  ' db "\"", CODE, ":"',
131
133
  ' db RANDOMIZE, USR, "8", #0E, 0, 0',
132
- ' dw begin', # call address
134
+ ' dw begin', # call address
133
135
  ' db 0, #0D',
134
136
  'linlen = $ - linzac',
135
137
  'baslen = $ - baszac',
136
- ' emptytap "disasm.tap"',
137
- ' savetap "disasm.tap", BASIC, "disasm", baszac, baslen, 1',
138
- ' savetap "disasm.tap", CODE, "disasm", begin, length, begin',
139
- ' savesna "disasm.sna", begin',
140
- ' savebin "disasm.C", begin, length',
141
- ' savehob "disasm.$C", "disasm.C", begin, length',
138
+ " emptytap '#{file_name}.tap'",
139
+ " savetap '#{file_name}.tap', BASIC, '#{file_name}', baszac, baslen, 1",
140
+ " savetap '#{file_name}.tap', CODE, '#{file_name}', begin, length, begin",
141
+ " savesna '#{file_name}.sna', begin",
142
+ " savebin '#{file_name}.C', begin, length",
143
+ " savehob '#{file_name}.$C', '#{file_name}.C', begin, length",
142
144
  ''
143
145
  ].join("\n")
144
146
  end
@@ -146,7 +148,7 @@ module Z80Disassembler
146
148
  private
147
149
 
148
150
  def bytes_to_int(array)
149
- array.bytes.reverse.map { |x| x.to_s(16).rjust(2, "0") }.join.hex
151
+ array.bytes.reverse.map { |x| x.to_s(16).rjust(2, '0') }.join.hex
150
152
  end
151
153
 
152
154
  def command_from_byte(byte)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Z80Disassembler
4
- VERSION = '0.3.3'
4
+ VERSION = '0.3.4'
5
5
  end
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.3.3
4
+ version: 0.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - dvitvitskiy
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-07-05 00:00:00.000000000 Z
11
+ date: 2021-07-07 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email: