byteboozer2 0.0.1 → 0.0.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 +4 -4
- data/.rubocop.yml +2 -0
- data/Gemfile.lock +33 -32
- data/LICENSE.txt +1 -1
- data/README.md +4 -2
- data/Rakefile +1 -1
- data/byteboozer2.gemspec +7 -8
- data/lib/byteboozer2.rb +1 -1
- data/lib/byteboozer2/cruncher.rb +24 -29
- data/lib/byteboozer2/version.rb +1 -1
- data/src/decruncher.inc +160 -160
- metadata +16 -16
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9c51052da3e26265fd79fd43f0105eb84e9c05da
|
|
4
|
+
data.tar.gz: ec7cd1ecba923b64e64b20be49d4836ad1b12edb
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: bc2f4a3f06fa0a7885066c4a88a9f934904c35d5f29699d31cd1bc8f69520d3d4b3474285fbb47978611dbbe4cd82d60ac2ec1e1bd0daeccce374d1908b2b483
|
|
7
|
+
data.tar.gz: c72fbf4aab4a1866dd39eec54e89c23fce574a02cf69ca0c5f44a9c60fafc34ebf7eba00ce258d0a3a3f7664bc79ed0d95572cf105a1cc7a271e8a521b5641f3
|
data/.rubocop.yml
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,55 +1,56 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
byteboozer2 (0.0.
|
|
5
|
-
activemodel (~>
|
|
4
|
+
byteboozer2 (0.0.2)
|
|
5
|
+
activemodel (~> 5.1.4)
|
|
6
6
|
|
|
7
7
|
GEM
|
|
8
8
|
remote: https://rubygems.org/
|
|
9
9
|
specs:
|
|
10
|
-
activemodel (
|
|
11
|
-
activesupport (=
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
activemodel (5.1.4)
|
|
11
|
+
activesupport (= 5.1.4)
|
|
12
|
+
activesupport (5.1.4)
|
|
13
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
14
14
|
i18n (~> 0.7)
|
|
15
|
-
json (~> 1.7, >= 1.7.7)
|
|
16
15
|
minitest (~> 5.1)
|
|
17
|
-
thread_safe (~> 0.3, >= 0.3.4)
|
|
18
16
|
tzinfo (~> 1.1)
|
|
19
|
-
ast (2.
|
|
20
|
-
awesome_print (1.
|
|
21
|
-
|
|
22
|
-
i18n (0.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
17
|
+
ast (2.3.0)
|
|
18
|
+
awesome_print (1.8.0)
|
|
19
|
+
concurrent-ruby (1.0.5)
|
|
20
|
+
i18n (0.9.1)
|
|
21
|
+
concurrent-ruby (~> 1.0)
|
|
22
|
+
json (2.1.0)
|
|
23
|
+
minitest (5.10.3)
|
|
24
|
+
parallel (1.12.0)
|
|
25
|
+
parser (2.4.0.2)
|
|
26
|
+
ast (~> 2.3)
|
|
27
27
|
powerpack (0.1.1)
|
|
28
|
-
rainbow (
|
|
29
|
-
rake (
|
|
30
|
-
rubocop (0.
|
|
31
|
-
|
|
28
|
+
rainbow (3.0.0)
|
|
29
|
+
rake (12.3.0)
|
|
30
|
+
rubocop (0.52.0)
|
|
31
|
+
parallel (~> 1.10)
|
|
32
|
+
parser (>= 2.4.0.2, < 3.0)
|
|
32
33
|
powerpack (~> 0.1)
|
|
33
|
-
rainbow (>=
|
|
34
|
+
rainbow (>= 2.2.2, < 4.0)
|
|
34
35
|
ruby-progressbar (~> 1.7)
|
|
35
36
|
unicode-display_width (~> 1.0, >= 1.0.1)
|
|
36
|
-
ruby-progressbar (1.
|
|
37
|
-
thread_safe (0.3.
|
|
38
|
-
tzinfo (1.2.
|
|
37
|
+
ruby-progressbar (1.9.0)
|
|
38
|
+
thread_safe (0.3.6)
|
|
39
|
+
tzinfo (1.2.4)
|
|
39
40
|
thread_safe (~> 0.1)
|
|
40
|
-
unicode-display_width (1.0
|
|
41
|
+
unicode-display_width (1.3.0)
|
|
41
42
|
|
|
42
43
|
PLATFORMS
|
|
43
44
|
ruby
|
|
44
45
|
|
|
45
46
|
DEPENDENCIES
|
|
46
|
-
awesome_print (~> 1.
|
|
47
|
-
bundler (~> 1.
|
|
47
|
+
awesome_print (~> 1.8.0)
|
|
48
|
+
bundler (~> 1.16.0)
|
|
48
49
|
byteboozer2!
|
|
49
|
-
json (~> 1.
|
|
50
|
-
minitest (~> 5.
|
|
51
|
-
rake (~>
|
|
52
|
-
rubocop (~> 0.
|
|
50
|
+
json (~> 2.1.0)
|
|
51
|
+
minitest (~> 5.10.3)
|
|
52
|
+
rake (~> 12.3.0)
|
|
53
|
+
rubocop (~> 0.52.0)
|
|
53
54
|
|
|
54
55
|
BUNDLED WITH
|
|
55
|
-
1.
|
|
56
|
+
1.16.0
|
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
# ByteBoozer2
|
|
2
2
|
|
|
3
|
+
[](https://rubygems.org/gems/byteboozer2)
|
|
4
|
+
|
|
3
5
|
`ByteBoozer2` package provides a native Ruby port of David Malmborg's [ByteBoozer 2.0](http://csdb.dk/release/?id=145031), a data cruncher for Commodore files written in C.
|
|
4
6
|
|
|
5
7
|
## Version
|
|
6
8
|
|
|
7
|
-
Version 0.
|
|
9
|
+
Version 0.0.2 (2017-12-13)
|
|
8
10
|
|
|
9
11
|
## Description
|
|
10
12
|
|
|
@@ -17,7 +19,7 @@ Compressed data is by default written into a file named with `.b2` suffix. Targe
|
|
|
17
19
|
Add this line to your application's Gemfile:
|
|
18
20
|
|
|
19
21
|
```ruby
|
|
20
|
-
gem 'byteboozer2', '~> 0.0.
|
|
22
|
+
gem 'byteboozer2', '~> 0.0.2'
|
|
21
23
|
```
|
|
22
24
|
|
|
23
25
|
And then execute:
|
data/Rakefile
CHANGED
data/byteboozer2.gemspec
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
# coding: utf-8
|
|
2
1
|
lib = File.expand_path('../lib', __FILE__)
|
|
3
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
3
|
require 'byteboozer2/version'
|
|
@@ -19,12 +18,12 @@ Gem::Specification.new do |spec|
|
|
|
19
18
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
20
19
|
spec.require_paths = ['lib']
|
|
21
20
|
|
|
22
|
-
spec.add_development_dependency 'awesome_print', '~> 1.
|
|
23
|
-
spec.add_development_dependency 'bundler', '~> 1.
|
|
24
|
-
spec.add_development_dependency 'json', '~> 1.
|
|
25
|
-
spec.add_development_dependency 'minitest', '~> 5.
|
|
26
|
-
spec.add_development_dependency 'rake', '~>
|
|
27
|
-
spec.add_development_dependency 'rubocop', '~> 0.
|
|
21
|
+
spec.add_development_dependency 'awesome_print', '~> 1.8.0'
|
|
22
|
+
spec.add_development_dependency 'bundler', '~> 1.16.0'
|
|
23
|
+
spec.add_development_dependency 'json', '~> 2.1.0'
|
|
24
|
+
spec.add_development_dependency 'minitest', '~> 5.10.3'
|
|
25
|
+
spec.add_development_dependency 'rake', '~> 12.3.0'
|
|
26
|
+
spec.add_development_dependency 'rubocop', '~> 0.52.0'
|
|
28
27
|
|
|
29
|
-
spec.add_runtime_dependency 'activemodel', '~>
|
|
28
|
+
spec.add_runtime_dependency 'activemodel', '~> 5.1.4'
|
|
30
29
|
end
|
data/lib/byteboozer2.rb
CHANGED
data/lib/byteboozer2/cruncher.rb
CHANGED
|
@@ -155,7 +155,7 @@ module ByteBoozer2
|
|
|
155
155
|
elsif len >= 128 && len <= 255
|
|
156
156
|
14
|
|
157
157
|
else
|
|
158
|
-
ByteBoozer2.logger.warn
|
|
158
|
+
ByteBoozer2.logger.warn "cost_of_length got wrong value: #{len}"
|
|
159
159
|
10_000
|
|
160
160
|
end
|
|
161
161
|
end
|
|
@@ -204,7 +204,7 @@ module ByteBoozer2
|
|
|
204
204
|
return NUM_BITS_LONG_3 if cond_long_3(offset)
|
|
205
205
|
end
|
|
206
206
|
|
|
207
|
-
ByteBoozer2.logger.warn
|
|
207
|
+
ByteBoozer2.logger.warn "cost_of_offset got wrong offset: #{offset}"
|
|
208
208
|
10_000
|
|
209
209
|
end
|
|
210
210
|
|
|
@@ -266,14 +266,12 @@ module ByteBoozer2
|
|
|
266
266
|
|
|
267
267
|
longest_match = 0
|
|
268
268
|
|
|
269
|
-
if @rle_info[get].length
|
|
269
|
+
if @rle_info[get].length.zero? # No RLE-match here...
|
|
270
270
|
# Scan until start of file, or max offset
|
|
271
271
|
while get - scn <= MAX_OFFSET && scn > 0 && longest_match < 255
|
|
272
272
|
# OK, we have a match of length 2 or longer, but max 255 or file start
|
|
273
273
|
len = 2
|
|
274
|
-
while len < 255 && scn >= len && @ibuf[scn - len] == @ibuf[get - len]
|
|
275
|
-
len += 1
|
|
276
|
-
end
|
|
274
|
+
len += 1 while len < 255 && scn >= len && @ibuf[scn - len] == @ibuf[get - len]
|
|
277
275
|
|
|
278
276
|
# Calc offset
|
|
279
277
|
offset = get - scn
|
|
@@ -283,7 +281,7 @@ module ByteBoozer2
|
|
|
283
281
|
longest_match = len
|
|
284
282
|
|
|
285
283
|
# Store the match only if first (= best) of this length
|
|
286
|
-
while len >= 2 && matches[len].length
|
|
284
|
+
while len >= 2 && matches[len].length.zero?
|
|
287
285
|
# If len == 2, check against short offset!
|
|
288
286
|
if len > 2 || (len == 2 && offset <= MAX_OFFSET_SHORT)
|
|
289
287
|
matches[len].length = len
|
|
@@ -345,15 +343,13 @@ module ByteBoozer2
|
|
|
345
343
|
offset = get - scn + @rle_info[scn].length - rle_len
|
|
346
344
|
|
|
347
345
|
if offset <= MAX_OFFSET
|
|
348
|
-
while len < 255 && get >= offset + len && @ibuf[get - offset - len] == @ibuf[get - len]
|
|
349
|
-
len += 1
|
|
350
|
-
end
|
|
346
|
+
len += 1 while len < 255 && get >= offset + len && @ibuf[get - offset - len] == @ibuf[get - len]
|
|
351
347
|
|
|
352
348
|
if len > longest_match
|
|
353
349
|
longest_match = len
|
|
354
350
|
|
|
355
351
|
# Store the match only if first (= best) of this length
|
|
356
|
-
while len >= 2 && matches[len].length
|
|
352
|
+
while len >= 2 && matches[len].length.zero?
|
|
357
353
|
# If len == 2, check against short offset!
|
|
358
354
|
if len > 2 || (len == 2 && offset <= MAX_OFFSET_SHORT)
|
|
359
355
|
matches[len].length = len
|
|
@@ -386,7 +382,7 @@ module ByteBoozer2
|
|
|
386
382
|
len = matches[i].length
|
|
387
383
|
offset = matches[i].offset
|
|
388
384
|
|
|
389
|
-
next if len
|
|
385
|
+
next if len.zero?
|
|
390
386
|
target_i = get - len + 1
|
|
391
387
|
target = @context[target_i]
|
|
392
388
|
|
|
@@ -408,7 +404,7 @@ module ByteBoozer2
|
|
|
408
404
|
|
|
409
405
|
# If literal run is first or cheapest way to get here, then update node
|
|
410
406
|
this = @context[get]
|
|
411
|
-
if this.cost
|
|
407
|
+
if this.cost.zero? || this.cost >= lit_cost
|
|
412
408
|
this.cost = lit_cost
|
|
413
409
|
this.next = get + 1
|
|
414
410
|
this.lit_len = lit_len
|
|
@@ -457,19 +453,19 @@ module ByteBoozer2
|
|
|
457
453
|
while get > 0
|
|
458
454
|
cur = ((cur << 8) | @ibuf[get - 1]) & 0xffff
|
|
459
455
|
|
|
460
|
-
if @first[cur]
|
|
456
|
+
if @first[cur].zero?
|
|
461
457
|
@first[cur] = @last[cur] = get
|
|
462
458
|
else
|
|
463
459
|
@link[@last[cur]] = get
|
|
464
460
|
@last[cur] = get
|
|
465
461
|
end
|
|
466
462
|
|
|
467
|
-
get -= @rle_info[get].length
|
|
463
|
+
get -= @rle_info[get].length.zero? ? 1 : @rle_info[get].length - 1 # if RLE-match...
|
|
468
464
|
end
|
|
469
465
|
end
|
|
470
466
|
|
|
471
467
|
def wbit(bit)
|
|
472
|
-
if @cur_cnt
|
|
468
|
+
if @cur_cnt.zero?
|
|
473
469
|
@obuf[@cur_index] = @cur_byte
|
|
474
470
|
@cur_index = @put
|
|
475
471
|
@cur_cnt = 8
|
|
@@ -503,15 +499,15 @@ module ByteBoozer2
|
|
|
503
499
|
end
|
|
504
500
|
|
|
505
501
|
def wlength(len)
|
|
506
|
-
# return if len
|
|
502
|
+
# return if len.zero? # Should never happen
|
|
507
503
|
|
|
508
504
|
bit = 0x80
|
|
509
|
-
bit >>= 1 while len & bit
|
|
505
|
+
bit >>= 1 while (len & bit).zero?
|
|
510
506
|
|
|
511
507
|
while bit > 1
|
|
512
508
|
wbit(1)
|
|
513
509
|
bit >>= 1
|
|
514
|
-
wbit(len & bit
|
|
510
|
+
wbit((len & bit).zero? ? 0 : 1)
|
|
515
511
|
end
|
|
516
512
|
|
|
517
513
|
wbit(0) if len < 0x80
|
|
@@ -558,29 +554,28 @@ module ByteBoozer2
|
|
|
558
554
|
end
|
|
559
555
|
|
|
560
556
|
# First write number of bits
|
|
561
|
-
wbit(i & 2
|
|
562
|
-
wbit(i & 1
|
|
557
|
+
wbit((i & 2).zero? ? 0 : 1)
|
|
558
|
+
wbit((i & 1).zero? ? 0 : 1)
|
|
563
559
|
|
|
560
|
+
b = 1 << n
|
|
564
561
|
if n >= 8 # Offset is 2 bytes
|
|
565
562
|
|
|
566
563
|
# Then write the bits less than 8
|
|
567
|
-
b = 1 << n
|
|
568
564
|
while b > 0x100
|
|
569
565
|
b >>= 1
|
|
570
|
-
wbit(b & offset
|
|
566
|
+
wbit((b & offset).zero? ? 0 : 1)
|
|
571
567
|
end
|
|
572
568
|
|
|
573
569
|
# Finally write a whole byte, if necessary
|
|
574
570
|
wbyte(offset & 255 ^ 255) # Inverted (!)
|
|
575
|
-
offset >>= 8
|
|
571
|
+
# offset >>= 8
|
|
576
572
|
|
|
577
573
|
else # Offset is 1 byte
|
|
578
574
|
|
|
579
575
|
# Then write the bits less than 8
|
|
580
|
-
b = 1 << n
|
|
581
576
|
while b > 1
|
|
582
577
|
b >>= 1
|
|
583
|
-
wbit(b & offset
|
|
578
|
+
wbit((b & offset).zero? ? 1 : 0) # Inverted (!)
|
|
584
579
|
end
|
|
585
580
|
end
|
|
586
581
|
end
|
|
@@ -604,11 +599,11 @@ module ByteBoozer2
|
|
|
604
599
|
lit_len = @context[i].lit_len
|
|
605
600
|
offset = @context[i].offset
|
|
606
601
|
|
|
607
|
-
if lit_len
|
|
602
|
+
if lit_len.zero?
|
|
608
603
|
# Put match
|
|
609
604
|
len = link - i
|
|
610
605
|
|
|
611
|
-
ByteBoozer2.logger.debug format('
|
|
606
|
+
ByteBoozer2.logger.debug format('$%<i>04x: Mat(%<len>i, %<offset>i)', i: i, len: len, offset: offset)
|
|
612
607
|
|
|
613
608
|
wbit(1) if need_copy_bit
|
|
614
609
|
wlength(len - 1)
|
|
@@ -624,7 +619,7 @@ module ByteBoozer2
|
|
|
624
619
|
while lit_len > 0
|
|
625
620
|
len = lit_len < 255 ? lit_len : 255
|
|
626
621
|
|
|
627
|
-
ByteBoozer2.logger.debug format('
|
|
622
|
+
ByteBoozer2.logger.debug format('$%<i>04x: Lit(%<len>i)', i: i, len: len)
|
|
628
623
|
|
|
629
624
|
wbit(0)
|
|
630
625
|
wlength(len)
|
data/lib/byteboozer2/version.rb
CHANGED
data/src/decruncher.inc
CHANGED
|
@@ -1,160 +1,160 @@
|
|
|
1
|
-
; ByteBoozer 2.0 Decruncher (C) 2014 David Malmborg
|
|
2
|
-
|
|
3
|
-
; call: Y = AddrLo
|
|
4
|
-
; X = AddrHi
|
|
5
|
-
|
|
6
|
-
;Variables.. #Bytes
|
|
7
|
-
zp_base = $02 ; -
|
|
8
|
-
bits = zp_base ;1
|
|
9
|
-
put = zp_base+2 ;2
|
|
10
|
-
|
|
11
|
-
#macro GetNextBit() {.(
|
|
12
|
-
asl bits
|
|
13
|
-
bne DgEnd
|
|
14
|
-
jsr GetNewBits
|
|
15
|
-
DgEnd
|
|
16
|
-
.)}
|
|
17
|
-
|
|
18
|
-
#macro GetLen() {.(
|
|
19
|
-
lda #1
|
|
20
|
-
GlLoop
|
|
21
|
-
.GetNextBit()
|
|
22
|
-
bcc GlEnd
|
|
23
|
-
.GetNextBit()
|
|
24
|
-
rol
|
|
25
|
-
bpl GlLoop
|
|
26
|
-
GlEnd
|
|
27
|
-
.)}
|
|
28
|
-
|
|
29
|
-
Decrunch
|
|
30
|
-
sty Get1+1
|
|
31
|
-
sty Get2+1
|
|
32
|
-
sty Get3+1
|
|
33
|
-
stx Get1+2
|
|
34
|
-
stx Get2+2
|
|
35
|
-
stx Get3+2
|
|
36
|
-
|
|
37
|
-
ldx #0
|
|
38
|
-
jsr GetNewBits
|
|
39
|
-
sty put-1,x
|
|
40
|
-
cpx #2
|
|
41
|
-
bcc *-7
|
|
42
|
-
lda #$80
|
|
43
|
-
sta bits
|
|
44
|
-
DLoop
|
|
45
|
-
.GetNextBit()
|
|
46
|
-
bcs Match
|
|
47
|
-
Literal
|
|
48
|
-
; Literal run.. get length.
|
|
49
|
-
.GetLen()
|
|
50
|
-
sta LLen+1
|
|
51
|
-
|
|
52
|
-
ldy #0
|
|
53
|
-
LLoop
|
|
54
|
-
Get3 lda $feed,x
|
|
55
|
-
inx
|
|
56
|
-
bne *+5
|
|
57
|
-
jsr GnbInc
|
|
58
|
-
L1 sta (put),y
|
|
59
|
-
iny
|
|
60
|
-
LLen cpy #0
|
|
61
|
-
bne LLoop
|
|
62
|
-
|
|
63
|
-
clc
|
|
64
|
-
tya
|
|
65
|
-
adc put
|
|
66
|
-
sta put
|
|
67
|
-
bcc *+4
|
|
68
|
-
inc put+1
|
|
69
|
-
|
|
70
|
-
iny
|
|
71
|
-
beq DLoop
|
|
72
|
-
|
|
73
|
-
; Has to continue with a match..
|
|
74
|
-
|
|
75
|
-
Match
|
|
76
|
-
; Match.. get length.
|
|
77
|
-
.GetLen()
|
|
78
|
-
sta MLen+1
|
|
79
|
-
|
|
80
|
-
; Length 255 -> EOF
|
|
81
|
-
cmp #$ff
|
|
82
|
-
beq End
|
|
83
|
-
|
|
84
|
-
; Get num bits
|
|
85
|
-
cmp #2
|
|
86
|
-
lda #0
|
|
87
|
-
rol
|
|
88
|
-
.GetNextBit()
|
|
89
|
-
rol
|
|
90
|
-
.GetNextBit()
|
|
91
|
-
rol
|
|
92
|
-
tay
|
|
93
|
-
lda Tab,y
|
|
94
|
-
beq M8
|
|
95
|
-
|
|
96
|
-
; Get bits < 8
|
|
97
|
-
M_1 .GetNextBit()
|
|
98
|
-
rol
|
|
99
|
-
bcs M_1
|
|
100
|
-
bmi MShort
|
|
101
|
-
M8
|
|
102
|
-
; Get byte
|
|
103
|
-
eor #$ff
|
|
104
|
-
tay
|
|
105
|
-
Get2 lda $feed,x
|
|
106
|
-
inx
|
|
107
|
-
bne *+5
|
|
108
|
-
jsr GnbInc
|
|
109
|
-
jmp Mdone
|
|
110
|
-
MShort
|
|
111
|
-
ldy #$ff
|
|
112
|
-
Mdone
|
|
113
|
-
;clc
|
|
114
|
-
adc put
|
|
115
|
-
sta MLda+1
|
|
116
|
-
tya
|
|
117
|
-
adc put+1
|
|
118
|
-
sta MLda+2
|
|
119
|
-
|
|
120
|
-
ldy #$ff
|
|
121
|
-
MLoop iny
|
|
122
|
-
MLda lda $beef,y
|
|
123
|
-
sta (put),y
|
|
124
|
-
MLen cpy #0
|
|
125
|
-
bne MLoop
|
|
126
|
-
|
|
127
|
-
;sec
|
|
128
|
-
tya
|
|
129
|
-
adc put
|
|
130
|
-
sta put
|
|
131
|
-
bcc *+4
|
|
132
|
-
inc put+1
|
|
133
|
-
|
|
134
|
-
jmp DLoop
|
|
135
|
-
|
|
136
|
-
End rts
|
|
137
|
-
|
|
138
|
-
GetNewBits
|
|
139
|
-
Get1 ldy $feed,x
|
|
140
|
-
sty bits
|
|
141
|
-
rol bits
|
|
142
|
-
inx
|
|
143
|
-
bne GnbEnd
|
|
144
|
-
GnbInc inc Get1+2
|
|
145
|
-
inc Get2+2
|
|
146
|
-
inc Get3+2
|
|
147
|
-
GnbEnd
|
|
148
|
-
rts
|
|
149
|
-
|
|
150
|
-
Tab
|
|
151
|
-
; Short offsets
|
|
152
|
-
.byte %11011111 ; 3
|
|
153
|
-
.byte %11111011 ; 6
|
|
154
|
-
.byte %00000000 ; 8
|
|
155
|
-
.byte %10000000 ; 10
|
|
156
|
-
; Long offsets
|
|
157
|
-
.byte %11101111 ; 4
|
|
158
|
-
.byte %11111101 ; 7
|
|
159
|
-
.byte %10000000 ; 10
|
|
160
|
-
.byte %11110000 ; 13
|
|
1
|
+
; ByteBoozer 2.0 Decruncher (C) 2014 David Malmborg
|
|
2
|
+
|
|
3
|
+
; call: Y = AddrLo
|
|
4
|
+
; X = AddrHi
|
|
5
|
+
|
|
6
|
+
;Variables.. #Bytes
|
|
7
|
+
zp_base = $02 ; -
|
|
8
|
+
bits = zp_base ;1
|
|
9
|
+
put = zp_base+2 ;2
|
|
10
|
+
|
|
11
|
+
#macro GetNextBit() {.(
|
|
12
|
+
asl bits
|
|
13
|
+
bne DgEnd
|
|
14
|
+
jsr GetNewBits
|
|
15
|
+
DgEnd
|
|
16
|
+
.)}
|
|
17
|
+
|
|
18
|
+
#macro GetLen() {.(
|
|
19
|
+
lda #1
|
|
20
|
+
GlLoop
|
|
21
|
+
.GetNextBit()
|
|
22
|
+
bcc GlEnd
|
|
23
|
+
.GetNextBit()
|
|
24
|
+
rol
|
|
25
|
+
bpl GlLoop
|
|
26
|
+
GlEnd
|
|
27
|
+
.)}
|
|
28
|
+
|
|
29
|
+
Decrunch
|
|
30
|
+
sty Get1+1
|
|
31
|
+
sty Get2+1
|
|
32
|
+
sty Get3+1
|
|
33
|
+
stx Get1+2
|
|
34
|
+
stx Get2+2
|
|
35
|
+
stx Get3+2
|
|
36
|
+
|
|
37
|
+
ldx #0
|
|
38
|
+
jsr GetNewBits
|
|
39
|
+
sty put-1,x
|
|
40
|
+
cpx #2
|
|
41
|
+
bcc *-7
|
|
42
|
+
lda #$80
|
|
43
|
+
sta bits
|
|
44
|
+
DLoop
|
|
45
|
+
.GetNextBit()
|
|
46
|
+
bcs Match
|
|
47
|
+
Literal
|
|
48
|
+
; Literal run.. get length.
|
|
49
|
+
.GetLen()
|
|
50
|
+
sta LLen+1
|
|
51
|
+
|
|
52
|
+
ldy #0
|
|
53
|
+
LLoop
|
|
54
|
+
Get3 lda $feed,x
|
|
55
|
+
inx
|
|
56
|
+
bne *+5
|
|
57
|
+
jsr GnbInc
|
|
58
|
+
L1 sta (put),y
|
|
59
|
+
iny
|
|
60
|
+
LLen cpy #0
|
|
61
|
+
bne LLoop
|
|
62
|
+
|
|
63
|
+
clc
|
|
64
|
+
tya
|
|
65
|
+
adc put
|
|
66
|
+
sta put
|
|
67
|
+
bcc *+4
|
|
68
|
+
inc put+1
|
|
69
|
+
|
|
70
|
+
iny
|
|
71
|
+
beq DLoop
|
|
72
|
+
|
|
73
|
+
; Has to continue with a match..
|
|
74
|
+
|
|
75
|
+
Match
|
|
76
|
+
; Match.. get length.
|
|
77
|
+
.GetLen()
|
|
78
|
+
sta MLen+1
|
|
79
|
+
|
|
80
|
+
; Length 255 -> EOF
|
|
81
|
+
cmp #$ff
|
|
82
|
+
beq End
|
|
83
|
+
|
|
84
|
+
; Get num bits
|
|
85
|
+
cmp #2
|
|
86
|
+
lda #0
|
|
87
|
+
rol
|
|
88
|
+
.GetNextBit()
|
|
89
|
+
rol
|
|
90
|
+
.GetNextBit()
|
|
91
|
+
rol
|
|
92
|
+
tay
|
|
93
|
+
lda Tab,y
|
|
94
|
+
beq M8
|
|
95
|
+
|
|
96
|
+
; Get bits < 8
|
|
97
|
+
M_1 .GetNextBit()
|
|
98
|
+
rol
|
|
99
|
+
bcs M_1
|
|
100
|
+
bmi MShort
|
|
101
|
+
M8
|
|
102
|
+
; Get byte
|
|
103
|
+
eor #$ff
|
|
104
|
+
tay
|
|
105
|
+
Get2 lda $feed,x
|
|
106
|
+
inx
|
|
107
|
+
bne *+5
|
|
108
|
+
jsr GnbInc
|
|
109
|
+
jmp Mdone
|
|
110
|
+
MShort
|
|
111
|
+
ldy #$ff
|
|
112
|
+
Mdone
|
|
113
|
+
;clc
|
|
114
|
+
adc put
|
|
115
|
+
sta MLda+1
|
|
116
|
+
tya
|
|
117
|
+
adc put+1
|
|
118
|
+
sta MLda+2
|
|
119
|
+
|
|
120
|
+
ldy #$ff
|
|
121
|
+
MLoop iny
|
|
122
|
+
MLda lda $beef,y
|
|
123
|
+
sta (put),y
|
|
124
|
+
MLen cpy #0
|
|
125
|
+
bne MLoop
|
|
126
|
+
|
|
127
|
+
;sec
|
|
128
|
+
tya
|
|
129
|
+
adc put
|
|
130
|
+
sta put
|
|
131
|
+
bcc *+4
|
|
132
|
+
inc put+1
|
|
133
|
+
|
|
134
|
+
jmp DLoop
|
|
135
|
+
|
|
136
|
+
End rts
|
|
137
|
+
|
|
138
|
+
GetNewBits
|
|
139
|
+
Get1 ldy $feed,x
|
|
140
|
+
sty bits
|
|
141
|
+
rol bits
|
|
142
|
+
inx
|
|
143
|
+
bne GnbEnd
|
|
144
|
+
GnbInc inc Get1+2
|
|
145
|
+
inc Get2+2
|
|
146
|
+
inc Get3+2
|
|
147
|
+
GnbEnd
|
|
148
|
+
rts
|
|
149
|
+
|
|
150
|
+
Tab
|
|
151
|
+
; Short offsets
|
|
152
|
+
.byte %11011111 ; 3
|
|
153
|
+
.byte %11111011 ; 6
|
|
154
|
+
.byte %00000000 ; 8
|
|
155
|
+
.byte %10000000 ; 10
|
|
156
|
+
; Long offsets
|
|
157
|
+
.byte %11101111 ; 4
|
|
158
|
+
.byte %11111101 ; 7
|
|
159
|
+
.byte %10000000 ; 10
|
|
160
|
+
.byte %11110000 ; 13
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: byteboozer2
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Pawel Krol
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2017-12-13 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: awesome_print
|
|
@@ -16,98 +16,98 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: 1.
|
|
19
|
+
version: 1.8.0
|
|
20
20
|
type: :development
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: 1.
|
|
26
|
+
version: 1.8.0
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: bundler
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
31
|
- - "~>"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: 1.
|
|
33
|
+
version: 1.16.0
|
|
34
34
|
type: :development
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
38
|
- - "~>"
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: 1.
|
|
40
|
+
version: 1.16.0
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: json
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
45
|
- - "~>"
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: 1.
|
|
47
|
+
version: 2.1.0
|
|
48
48
|
type: :development
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
52
|
- - "~>"
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: 1.
|
|
54
|
+
version: 2.1.0
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
56
|
name: minitest
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
59
|
- - "~>"
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: 5.
|
|
61
|
+
version: 5.10.3
|
|
62
62
|
type: :development
|
|
63
63
|
prerelease: false
|
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
65
|
requirements:
|
|
66
66
|
- - "~>"
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: 5.
|
|
68
|
+
version: 5.10.3
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
70
|
name: rake
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
|
72
72
|
requirements:
|
|
73
73
|
- - "~>"
|
|
74
74
|
- !ruby/object:Gem::Version
|
|
75
|
-
version:
|
|
75
|
+
version: 12.3.0
|
|
76
76
|
type: :development
|
|
77
77
|
prerelease: false
|
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
79
|
requirements:
|
|
80
80
|
- - "~>"
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
|
-
version:
|
|
82
|
+
version: 12.3.0
|
|
83
83
|
- !ruby/object:Gem::Dependency
|
|
84
84
|
name: rubocop
|
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
|
86
86
|
requirements:
|
|
87
87
|
- - "~>"
|
|
88
88
|
- !ruby/object:Gem::Version
|
|
89
|
-
version: 0.
|
|
89
|
+
version: 0.52.0
|
|
90
90
|
type: :development
|
|
91
91
|
prerelease: false
|
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
93
|
requirements:
|
|
94
94
|
- - "~>"
|
|
95
95
|
- !ruby/object:Gem::Version
|
|
96
|
-
version: 0.
|
|
96
|
+
version: 0.52.0
|
|
97
97
|
- !ruby/object:Gem::Dependency
|
|
98
98
|
name: activemodel
|
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
|
100
100
|
requirements:
|
|
101
101
|
- - "~>"
|
|
102
102
|
- !ruby/object:Gem::Version
|
|
103
|
-
version:
|
|
103
|
+
version: 5.1.4
|
|
104
104
|
type: :runtime
|
|
105
105
|
prerelease: false
|
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
107
107
|
requirements:
|
|
108
108
|
- - "~>"
|
|
109
109
|
- !ruby/object:Gem::Version
|
|
110
|
-
version:
|
|
110
|
+
version: 5.1.4
|
|
111
111
|
description: This is a native Ruby port of David Malmborg's ByteBoozer 2.0.
|
|
112
112
|
email:
|
|
113
113
|
- djgruby@gmail.com
|