z80_disassembler 0.2.4 → 0.3.1

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