z80_disassembler 0.2.4 → 0.3.1

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: 5fe96f8335ed977825007f7846ed1b5b515ee9bab79fad0c67976504926c827e
4
- data.tar.gz: c9341766fb32cf922aea077fa5968755b05e05ac03b45d277b8cc9de023f5b46
3
+ metadata.gz: 02a2e2d32e438dfeec508dbb3d7c2d9346144a401398a5d1d512352c59750b89
4
+ data.tar.gz: 6b502bcf23a6d7fcb77468b18be19bc8bcd679a8382896d9468afee8a21b3b11
5
5
  SHA512:
6
- metadata.gz: 4fabf9e9a350e8ddedbc85acb8c8f738fd471e347591107f81a169c14c5d3dbca0f779f7706294ec6a3fde06895d6d5a429b6c6c48c8f9e5e84ba2de29097539
7
- data.tar.gz: cc8e487897234f43ddc6962d1ce979704b9295a7f99551d592db7413acb5d985ccf0d394952b26d0e08e84caafb91e31a96b1a1abe94f48a154b2cc3332e9010
6
+ metadata.gz: 07a73a8a7504f85f2c91e952d249a4521e16e567b45387f011d0821d24d941aaa7faa1f1e3eedac1a621e234e139cb6feef413ebd548bf7ca0b9526bae24ee83
7
+ data.tar.gz: 482d90cf0c3e6b5938e9323319c086e93435178bbcd3c4c38be33b0871b932a8b99e016dce7546253be39be99a3a36d216ab8e14635488df046f7c01dc2a2816
@@ -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
@@ -108,8 +108,36 @@ module Z80Disassembler
108
108
  'begin:',
109
109
  code,
110
110
  'end:',
111
+ 'length equ end - begin',
112
+ 'CODE = #AF',
113
+ 'USR = #C0',
114
+ 'LOAD = #EF',
115
+ 'CLEAR = #FD',
116
+ 'RANDOMIZE = #F9',
117
+ ' org #5C00',
118
+ 'baszac db 0, 1', # Line number
119
+ ' dw linlen', # Line length
120
+ 'linzac',
121
+ ' db CLEAR, "8", #0E, 0, 0',
122
+ ' dw begin - 1',
123
+ ' db 0, ":"',
124
+ ' db LOAD, "\""',
125
+ 'codnam ds 10, 32',
126
+ ' org codnam',
127
+ ' db "disasm"',
128
+ ' org codnam + 10',
129
+ ' db "\"", CODE, ":"',
130
+ ' db RANDOMIZE, USR, "8", #0E, 0, 0',
131
+ ' dw begin', # call address
132
+ ' db 0, #0D',
133
+ 'linlen = $ - linzac',
134
+ 'baslen = $ - baszac',
135
+ ' emptytap "disasm.tap"',
136
+ ' savetap "disasm.tap", BASIC, "disasm", baszac, baslen, 1',
137
+ ' savetap "disasm.tap", CODE, "disasm", begin, length, begin',
111
138
  ' savesna "disasm.sna", begin',
112
- ' savebin "disasm.C", begin, end - begin',
139
+ ' savebin "disasm.C", begin, length',
140
+ ' savehob "disasm.$C", "disasm.C", begin, length',
113
141
  ''
114
142
  ].join("\n")
115
143
  end
@@ -131,13 +159,15 @@ module Z80Disassembler
131
159
  when 1
132
160
  resp = @lambda.call(@arg, byte.to_s(16).rjust(2, '0').upcase)
133
161
  @prefix = nil; temp = @temp; @temp = nil
134
- if temp && resp.include?(')')
135
- resp = @xx ? displacement(temp.hex, resp) : resp.sub(')', "#{temp})").sub('(', '(#')
162
+ if temp && resp.include?('(HL)')
163
+ @xx ? resp = displacement(temp.hex, resp) : resp += temp
164
+ elsif temp && resp.include?(')')
165
+ # resp = displacement(temp.hex, resp) if @xx
166
+ resp = resp.sub(')', "#{temp})").sub('(', '(#')
136
167
  elsif temp
137
168
  resp += temp
138
169
  end
139
170
  resp = hl_to_xx(resp, @xx) unless @xx.nil?
140
- @xx = nil
141
171
  if resp.include?('JR') || resp.include?('DJNZ')
142
172
  z = resp.split('#')
143
173
  z[1] = z[1].hex < 127 ? "$+#{z[1].hex + 2}" : "$-#{255 - z[1].hex - 1}"
@@ -149,6 +179,7 @@ module Z80Disassembler
149
179
  end
150
180
 
151
181
  def hl_to_xx(temp, reg)
182
+ @xx = nil
152
183
  if temp.include?('HL')
153
184
  temp.sub('HL', reg)
154
185
  elsif temp.include?(' L')
@@ -167,7 +198,7 @@ module Z80Disassembler
167
198
  def displacement(byte, temp)
168
199
  @prefix = nil
169
200
  byte -= 256 if byte > 127
170
- des = ['', "+#{byte.to_s(16)}", byte.to_s(16)][byte <=> 0]
201
+ des = ['+0', "+#{byte}", byte.to_s][byte <=> 0]
171
202
  temp.sub('HL', @xx + des)
172
203
  end
173
204
 
@@ -213,7 +244,7 @@ module Z80Disassembler
213
244
  case @z
214
245
  when 0 then "RET #{T_CC[@y]}"
215
246
  when 1 then @q ? ['RET','EXX','JP HL','LD SP, HL'][@p] : "POP #{T_RP2[@p]}"
216
- when 2 then calc_bytes(->(a, b){ "JP #{a},#{b}" }, T_CC[@y], 2)
247
+ when 2 then calc_bytes(->(a, b){ "JP #{a},##{b}" }, T_CC[@y], 2)
217
248
  when 3
218
249
  case @y
219
250
  when 0 then calc_bytes(->(a, b){ "JP ##{b}" }, nil, 2)
@@ -252,8 +283,8 @@ module Z80Disassembler
252
283
  if @temp&.include?('(')
253
284
  @prefix = 'xx'; nil
254
285
  elsif ['dd', 'fd'].include?(@prev) && @temp
255
- temp = @temp; @temp = nil; @prefix = nil; xx = @xx; @xx = nil
256
- hl_to_xx(temp, xx)
286
+ temp = @temp; @temp = nil; @prefix = nil
287
+ hl_to_xx(temp, @xx)
257
288
  elsif @lambda && !@arg&.include?('HL')
258
289
  @prefix = 1; @temp
259
290
  else
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Z80Disassembler
4
- VERSION = '0.2.4'
4
+ VERSION = '0.3.1'
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.4
4
+ version: 0.3.1
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 00:00:00.000000000 Z
11
+ date: 2021-06-17 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email: