byteboozer2 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
[![Gem Version](https://badge.fury.io/rb/byteboozer2.svg)](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
|