Make the stuff compile
git-svn-id: svn://svn.cc65.org/cc65/trunk@2445 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
1
libsrc/zlib/.cvsignore
Normal file
1
libsrc/zlib/.cvsignore
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uncompress.s
|
||||||
42
libsrc/zlib/Makefile
Normal file
42
libsrc/zlib/Makefile
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
#
|
||||||
|
# Makefile for the zlib subdirectory of the cc65 runtime library
|
||||||
|
#
|
||||||
|
|
||||||
|
.SUFFIXES: .o .s .c
|
||||||
|
|
||||||
|
#--------------------------------------------------------------------------
|
||||||
|
# Rules
|
||||||
|
|
||||||
|
%.o: %.c
|
||||||
|
@$(CC) $(CFLAGS) $<
|
||||||
|
@$(AS) -g -o $@ $(AFLAGS) $(*).s
|
||||||
|
|
||||||
|
%.o: %.s
|
||||||
|
@$(AS) -g -o $@ $(AFLAGS) $<
|
||||||
|
|
||||||
|
#--------------------------------------------------------------------------
|
||||||
|
# Object files
|
||||||
|
|
||||||
|
C_OBJS = uncompress.o
|
||||||
|
|
||||||
|
|
||||||
|
S_OBJS = adler32.o \
|
||||||
|
crc32.o \
|
||||||
|
inflatemem.o
|
||||||
|
|
||||||
|
|
||||||
|
#--------------------------------------------------------------------------
|
||||||
|
# Targets
|
||||||
|
|
||||||
|
.PHONY: all clean zap
|
||||||
|
|
||||||
|
all: $(C_OBJS) $(S_OBJS)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@rm -f *~
|
||||||
|
@rm -f $(C_OBJS:.o=.s)
|
||||||
|
@rm -f $(C_OBJS)
|
||||||
|
@rm -f $(S_OBJS)
|
||||||
|
|
||||||
|
zap: clean
|
||||||
|
|
||||||
@@ -1,85 +1,85 @@
|
|||||||
;
|
;
|
||||||
; Piotr Fusik, 18.11.2001
|
; Piotr Fusik, 18.11.2001
|
||||||
;
|
;
|
||||||
; unsigned long __fastcall__ adler32 (unsigned long adler, unsigned char* buf,
|
; unsigned long __fastcall__ adler32 (unsigned long adler, unsigned char* buf,
|
||||||
; unsigned len);
|
; unsigned len);
|
||||||
;
|
;
|
||||||
|
|
||||||
.export _adler32
|
.export _adler32
|
||||||
|
|
||||||
.import incsp2, incsp4, popax, popeax
|
.import incsp2, incsp4, popax, popeax
|
||||||
.importzp sreg, ptr1, ptr2, tmp1
|
.importzp sreg, ptr1, ptr2, tmp1
|
||||||
|
|
||||||
BASE = 65521 ; largest prime smaller than 65536
|
BASE = 65521 ; largest prime smaller than 65536
|
||||||
|
|
||||||
_adler32:
|
_adler32:
|
||||||
; ptr2 = (len & 0xff) == 0 ? len : len + 0x100;
|
; ptr2 = (len & 0xff) == 0 ? len : len + 0x100;
|
||||||
tay
|
tay
|
||||||
beq @L1
|
beq @L1
|
||||||
inx
|
inx
|
||||||
@L1: sta ptr2
|
@L1: sta ptr2
|
||||||
stx ptr2+1
|
stx ptr2+1
|
||||||
; ptr1 = buf
|
; ptr1 = buf
|
||||||
jsr popax
|
jsr popax
|
||||||
sta ptr1
|
sta ptr1
|
||||||
stx ptr1+1
|
stx ptr1+1
|
||||||
; if (buf == NULL) return 1L;
|
; if (buf == NULL) return 1L;
|
||||||
ora ptr1+1
|
ora ptr1+1
|
||||||
beq @L0
|
beq @L0
|
||||||
; s1 = adler & 0xFFFF; s2 = adler >> 16;
|
; s1 = adler & 0xFFFF; s2 = adler >> 16;
|
||||||
jsr popeax
|
jsr popeax
|
||||||
; if (len == 0) return adler;
|
; if (len == 0) return adler;
|
||||||
ldy ptr2
|
ldy ptr2
|
||||||
bne @L2
|
bne @L2
|
||||||
ldy ptr2+1
|
ldy ptr2+1
|
||||||
beq @RET
|
beq @RET
|
||||||
@L2: ldy #0
|
@L2: ldy #0
|
||||||
; s1 += *ptr++; if (s1 >= BASE) s1 -= BASE;
|
; s1 += *ptr++; if (s1 >= BASE) s1 -= BASE;
|
||||||
@L3: clc
|
@L3: clc
|
||||||
adc (ptr1),y
|
adc (ptr1),y
|
||||||
bcc @L4
|
bcc @L4
|
||||||
inx
|
inx
|
||||||
beq @L5 ; C flag is set
|
beq @L5 ; C flag is set
|
||||||
@L4: cpx #>BASE
|
@L4: cpx #>BASE
|
||||||
bcc @L6
|
bcc @L6
|
||||||
cmp #<BASE
|
cmp #<BASE
|
||||||
bcc @L6
|
bcc @L6
|
||||||
inx ; ldx #0
|
inx ; ldx #0
|
||||||
@L5: sbc #<BASE ; C flag is set
|
@L5: sbc #<BASE ; C flag is set
|
||||||
clc
|
clc
|
||||||
@L6: sta tmp1
|
@L6: sta tmp1
|
||||||
; s2 += s1; if (s2 >= BASE) s2 -= BASE;
|
; s2 += s1; if (s2 >= BASE) s2 -= BASE;
|
||||||
adc sreg ; C flag is clear
|
adc sreg ; C flag is clear
|
||||||
sta sreg
|
sta sreg
|
||||||
txa
|
txa
|
||||||
adc sreg+1
|
adc sreg+1
|
||||||
sta sreg+1
|
sta sreg+1
|
||||||
bcs @L7
|
bcs @L7
|
||||||
cmp #>BASE
|
cmp #>BASE
|
||||||
bcc @L8
|
bcc @L8
|
||||||
lda sreg
|
lda sreg
|
||||||
cmp #<BASE
|
cmp #<BASE
|
||||||
bcc @L8
|
bcc @L8
|
||||||
@L7: lda sreg
|
@L7: lda sreg
|
||||||
sbc #<BASE ; C flag is set
|
sbc #<BASE ; C flag is set
|
||||||
sta sreg
|
sta sreg
|
||||||
lda sreg+1
|
lda sreg+1
|
||||||
sbc #>BASE
|
sbc #>BASE
|
||||||
sta sreg+1
|
sta sreg+1
|
||||||
@L8: lda tmp1
|
@L8: lda tmp1
|
||||||
iny
|
iny
|
||||||
bne @L9
|
bne @L9
|
||||||
inc ptr1+1
|
inc ptr1+1
|
||||||
@L9: dec ptr2
|
@L9: dec ptr2
|
||||||
bne @L3
|
bne @L3
|
||||||
dec ptr2+1
|
dec ptr2+1
|
||||||
bne @L3
|
bne @L3
|
||||||
; return (s2 << 16) | s1;
|
; return (s2 << 16) | s1;
|
||||||
@RET: rts
|
@RET: rts
|
||||||
|
|
||||||
; return 1L
|
; return 1L
|
||||||
@L0: sta sreg
|
@L0: sta sreg
|
||||||
sta sreg+1
|
sta sreg+1
|
||||||
lda #1
|
lda #1
|
||||||
; ignore adler
|
; ignore adler
|
||||||
jmp incsp4
|
jmp incsp4
|
||||||
|
|||||||
@@ -1,134 +1,134 @@
|
|||||||
;
|
;
|
||||||
; Piotr Fusik, 14.11.2001
|
; Piotr Fusik, 14.11.2001
|
||||||
;
|
;
|
||||||
; unsigned long __fastcall__ crc32 (unsigned long crc, unsigned char* buf,
|
; unsigned long __fastcall__ crc32 (unsigned long crc, unsigned char* buf,
|
||||||
; unsigned len);
|
; unsigned len);
|
||||||
;
|
;
|
||||||
|
|
||||||
.export _crc32
|
.export _crc32
|
||||||
|
|
||||||
.import compleax, incsp2, incsp4, popax, popeax
|
.import compleax, incsp2, incsp4, popax, popeax
|
||||||
.importzp sreg, ptr1, ptr2, tmp1, tmp2
|
.importzp sreg, ptr1, ptr2, tmp1, tmp2
|
||||||
|
|
||||||
POLYNOMIAL = $EDB88320
|
POLYNOMIAL = $EDB88320
|
||||||
|
|
||||||
make_table:
|
make_table:
|
||||||
ldx #0
|
ldx #0
|
||||||
@L1: lda #0
|
@L1: lda #0
|
||||||
sta tmp2
|
sta tmp2
|
||||||
sta sreg
|
sta sreg
|
||||||
sta sreg+1
|
sta sreg+1
|
||||||
ldy #8
|
ldy #8
|
||||||
txa
|
txa
|
||||||
@L2: sta tmp1
|
@L2: sta tmp1
|
||||||
lsr a
|
lsr a
|
||||||
bcc @L3
|
bcc @L3
|
||||||
lda sreg+1
|
lda sreg+1
|
||||||
lsr a
|
lsr a
|
||||||
eor #(POLYNOMIAL>>24)&$FF
|
eor #(POLYNOMIAL>>24)&$FF
|
||||||
sta sreg+1
|
sta sreg+1
|
||||||
lda sreg
|
lda sreg
|
||||||
ror a
|
ror a
|
||||||
eor #(POLYNOMIAL>>16)&$FF
|
eor #(POLYNOMIAL>>16)&$FF
|
||||||
sta sreg
|
sta sreg
|
||||||
lda tmp2
|
lda tmp2
|
||||||
ror a
|
ror a
|
||||||
eor #(POLYNOMIAL>>8)&$FF
|
eor #(POLYNOMIAL>>8)&$FF
|
||||||
sta tmp2
|
sta tmp2
|
||||||
lda tmp1
|
lda tmp1
|
||||||
ror a
|
ror a
|
||||||
eor #POLYNOMIAL&$FF
|
eor #POLYNOMIAL&$FF
|
||||||
bcs @L4 ; branch always
|
bcs @L4 ; branch always
|
||||||
@L3: rol a
|
@L3: rol a
|
||||||
lsr sreg+1
|
lsr sreg+1
|
||||||
ror sreg
|
ror sreg
|
||||||
ror tmp2
|
ror tmp2
|
||||||
ror a
|
ror a
|
||||||
@L4: dey
|
@L4: dey
|
||||||
bne @L2
|
bne @L2
|
||||||
sta table_0,x
|
sta table_0,x
|
||||||
lda tmp2
|
lda tmp2
|
||||||
sta table_1,x
|
sta table_1,x
|
||||||
lda sreg
|
lda sreg
|
||||||
sta table_2,x
|
sta table_2,x
|
||||||
lda sreg+1
|
lda sreg+1
|
||||||
sta table_3,x
|
sta table_3,x
|
||||||
inx
|
inx
|
||||||
bne @L1
|
bne @L1
|
||||||
inc table_initialised
|
inc table_initialised
|
||||||
RET:
|
RET:
|
||||||
rts
|
rts
|
||||||
|
|
||||||
_crc32:
|
_crc32:
|
||||||
; ptr2 = (len & 0xff) == 0 ? len : len + 0x100;
|
; ptr2 = (len & 0xff) == 0 ? len : len + 0x100;
|
||||||
tay
|
tay
|
||||||
beq @L1
|
beq @L1
|
||||||
inx
|
inx
|
||||||
@L1: sta ptr2
|
@L1: sta ptr2
|
||||||
stx ptr2+1
|
stx ptr2+1
|
||||||
; ptr1 = buf
|
; ptr1 = buf
|
||||||
jsr popax
|
jsr popax
|
||||||
sta ptr1
|
sta ptr1
|
||||||
stx ptr1+1
|
stx ptr1+1
|
||||||
; if (buf == NULL) return 0;
|
; if (buf == NULL) return 0;
|
||||||
ora ptr1+1
|
ora ptr1+1
|
||||||
beq @L0
|
beq @L0
|
||||||
; if (!tables_initialised) make_tables();
|
; if (!tables_initialised) make_tables();
|
||||||
lda table_initialised
|
lda table_initialised
|
||||||
bne @dont_make
|
bne @dont_make
|
||||||
jsr make_table
|
jsr make_table
|
||||||
@dont_make:
|
@dont_make:
|
||||||
; eax = crc
|
; eax = crc
|
||||||
jsr popeax
|
jsr popeax
|
||||||
; if (len == 0) return crc;
|
; if (len == 0) return crc;
|
||||||
ldy ptr2
|
ldy ptr2
|
||||||
bne @L2
|
bne @L2
|
||||||
ldy ptr2+1
|
ldy ptr2+1
|
||||||
beq RET
|
beq RET
|
||||||
@L2:
|
@L2:
|
||||||
; eax = ~crc
|
; eax = ~crc
|
||||||
jsr compleax
|
jsr compleax
|
||||||
stx tmp2
|
stx tmp2
|
||||||
ldy #0
|
ldy #0
|
||||||
; crc = (crc >> 8) ^ table[(crc & 0xff) ^ *p++];
|
; crc = (crc >> 8) ^ table[(crc & 0xff) ^ *p++];
|
||||||
@L3: eor (ptr1),y
|
@L3: eor (ptr1),y
|
||||||
tax
|
tax
|
||||||
lda table_0,x
|
lda table_0,x
|
||||||
eor tmp2
|
eor tmp2
|
||||||
sta tmp1
|
sta tmp1
|
||||||
lda table_1,x
|
lda table_1,x
|
||||||
eor sreg
|
eor sreg
|
||||||
sta tmp2
|
sta tmp2
|
||||||
lda table_2,x
|
lda table_2,x
|
||||||
eor sreg+1
|
eor sreg+1
|
||||||
sta sreg
|
sta sreg
|
||||||
lda table_3,x
|
lda table_3,x
|
||||||
sta sreg+1
|
sta sreg+1
|
||||||
lda tmp1
|
lda tmp1
|
||||||
iny
|
iny
|
||||||
bne @L4
|
bne @L4
|
||||||
inc ptr1+1
|
inc ptr1+1
|
||||||
@L4: dec ptr2
|
@L4: dec ptr2
|
||||||
bne @L3
|
bne @L3
|
||||||
dec ptr2+1
|
dec ptr2+1
|
||||||
bne @L3
|
bne @L3
|
||||||
ldx tmp2
|
ldx tmp2
|
||||||
jmp compleax
|
jmp compleax
|
||||||
|
|
||||||
; return 0L
|
; return 0L
|
||||||
@L0: sta sreg
|
@L0: sta sreg
|
||||||
sta sreg+1
|
sta sreg+1
|
||||||
; ignore crc
|
; ignore crc
|
||||||
jmp incsp4
|
jmp incsp4
|
||||||
|
|
||||||
.data
|
.data
|
||||||
table_initialised:
|
table_initialised:
|
||||||
.byte 0
|
.byte 0
|
||||||
|
|
||||||
.bss
|
.bss
|
||||||
table_0: .res 256
|
table_0: .res 256
|
||||||
table_1: .res 256
|
table_1: .res 256
|
||||||
table_2: .res 256
|
table_2: .res 256
|
||||||
table_3: .res 256
|
table_3: .res 256
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,36 +1,36 @@
|
|||||||
/*
|
/*
|
||||||
* uncompress.c
|
* uncompress.c
|
||||||
*
|
*
|
||||||
* Piotr Fusik, 18.11.2001
|
* Piotr Fusik, 18.11.2001
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <zlib.h>
|
#include <zlib.h>
|
||||||
|
|
||||||
int uncompress (char* dest, unsigned* destLen,
|
int uncompress (char* dest, unsigned* destLen,
|
||||||
const char* source, unsigned sourceLen)
|
const char* source, unsigned sourceLen)
|
||||||
{
|
{
|
||||||
unsigned len;
|
unsigned len;
|
||||||
unsigned char* ptr;
|
unsigned char* ptr;
|
||||||
unsigned long csum;
|
unsigned long csum;
|
||||||
/* source[0]: Compression method and flags
|
/* source[0]: Compression method and flags
|
||||||
bits 0 to 3: Compression method (must be Z_DEFLATED)
|
bits 0 to 3: Compression method (must be Z_DEFLATED)
|
||||||
bits 4 to 7: Compression info (must be <= 7)
|
bits 4 to 7: Compression info (must be <= 7)
|
||||||
source[1]: Flags
|
source[1]: Flags
|
||||||
bits 0 to 4: Check bits
|
bits 0 to 4: Check bits
|
||||||
bit 5: Preset dictionary (not supported, sorry)
|
bit 5: Preset dictionary (not supported, sorry)
|
||||||
bits 6 to 7: Compression level
|
bits 6 to 7: Compression level
|
||||||
*/
|
*/
|
||||||
if ((source[0] & 0x8f) != Z_DEFLATED || source[1] & 0x20)
|
if ((source[0] & 0x8f) != Z_DEFLATED || source[1] & 0x20)
|
||||||
return Z_DATA_ERROR;
|
return Z_DATA_ERROR;
|
||||||
if ((((unsigned) source[0] << 8) | (unsigned char) source[1]) % 31)
|
if ((((unsigned) source[0] << 8) | (unsigned char) source[1]) % 31)
|
||||||
return Z_DATA_ERROR;
|
return Z_DATA_ERROR;
|
||||||
*destLen = len = inflatemem(dest, source + 2);
|
*destLen = len = inflatemem(dest, source + 2);
|
||||||
ptr = (unsigned char*) source + sourceLen - 4;
|
ptr = (unsigned char*) source + sourceLen - 4;
|
||||||
csum = adler32(adler32(0L, Z_NULL, 0), dest, len);
|
csum = adler32(adler32(0L, Z_NULL, 0), dest, len);
|
||||||
if ((unsigned char) csum != ptr[3]
|
if ((unsigned char) csum != ptr[3]
|
||||||
|| (unsigned char) (csum >> 8) != ptr[2]
|
|| (unsigned char) (csum >> 8) != ptr[2]
|
||||||
|| (unsigned char) (csum >> 16) != ptr[1]
|
|| (unsigned char) (csum >> 16) != ptr[1]
|
||||||
|| (unsigned char) (csum >> 24) != ptr[0])
|
|| (unsigned char) (csum >> 24) != ptr[0])
|
||||||
return Z_DATA_ERROR;
|
return Z_DATA_ERROR;
|
||||||
return Z_OK;
|
return Z_OK;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user