z80_disassembler 0.2.5 → 0.3.2

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