z80_disassembler 0.3.3 → 0.3.4

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 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: