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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9970749ade07cf2808e1e6792d3c45f26d8325e6fc2fd492d6b3f88c4d843c40
4
- data.tar.gz: ebbfd99ccff00c4e86e5a8e09e31774359c7798d13ed847c65d1b0e95ccf04e5
3
+ metadata.gz: 32244bf0d6dba7c4803d9e2eb5877108f38f54b8beee841ca975afe10cdefdcd
4
+ data.tar.gz: 655e5e7d776633635dd35045ea7f93523712ca07b0e8a361c67e862f06f2262b
5
5
  SHA512:
6
- metadata.gz: 8455ef820171b02eb4e886a7a37ef4dc43679c0c8bf4b777d9dc73e93732c4ec8899da13b4ea73d38f4704d5b8487ba42ab722cda462b11a7a33f7b46f68eefc
7
- data.tar.gz: cecc4ee2168d08c0e1a373209f472cc78936f69e8f6ad067b04e9632e44c9d7291b3027215c5a6329d2226dfeb8a208b1aa28adb9c2ba6b56e400785f74e51c2
6
+ metadata.gz: 57a38e4cd87ede79eb82cda138ac0337149575796cc1a1e2ff033de2beccd8b583fd59d5eddc2ab535f46907cadf8c69d2b3e9ad952950daf946291dc06261a2
7
+ data.tar.gz: 7e78cf72592390ecae2fd6d72173b10d87badad9586d6ea224d46fc92b970e27cbc4d1197d8ae3d14351ebcdedada8579d66f8578c8ff697cd3bef45168fb1b5
@@ -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 = 25108 # org.to_i
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
- "#{link} #{string.ljust(16, ' ')}; #{addr16.ljust(5, ' ')} / #{addr.to_s.ljust(5, ' ')} ; #{bytes.ljust(14, ' ')} ; #{ascii.ljust(4, ' ')} ;"
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", begin, end - begin',
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 = @xx ? displacement(temp.hex, 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.to_s}", byte.to_s][byte <=> 0]
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},#{b}" }, T_CC[@y], 2)
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)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Z80Disassembler
4
- VERSION = '0.2.5'
4
+ VERSION = '0.3.2'
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.2.5
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-12 00:00:00.000000000 Z
11
+ date: 2021-06-18 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email: