Skip to content

Commit

Permalink
add large prgm to appvar split
Browse files Browse the repository at this point in the history
  • Loading branch information
mateoconlechuga committed Aug 12, 2020
1 parent dad3262 commit 961c2e3
Show file tree
Hide file tree
Showing 12 changed files with 495 additions and 36 deletions.
4 changes: 3 additions & 1 deletion Makefile
Expand Up @@ -18,7 +18,7 @@ else
endif

CC := gcc
CFLAGS := -Wall -Wextra -O3 -DNDEBUG -DLOG_BUILD_LEVEL=3 -std=c89 -flto
CFLAGS := -Wall -Wextra -O3 -std=c89 -DNDEBUG -DLOG_BUILD_LEVEL=3 -flto
LDFLAGS := -flto

BINDIR := ./bin
Expand All @@ -30,10 +30,12 @@ SOURCES := $(SRCDIR)/main.c \
$(SRCDIR)/input.c \
$(SRCDIR)/output.c \
$(SRCDIR)/compress.c \
$(SRCDIR)/extract.c \
$(SRCDIR)/options.c \
$(SRCDIR)/ti8x.c \
$(SRCDIR)/log.c \
$(SRCDIR)/asm/decompress.c \
$(SRCDIR)/asm/extractor.c \
$(DEPDIR)/zx7/compress.c \
$(DEPDIR)/zx7/optimize.c

Expand Down
8 changes: 7 additions & 1 deletion src/asm/Makefile
@@ -1,8 +1,14 @@
all: decompress.c
all: decompress.c extractor.c

decompress.c: decompress.asm
fasmg $< decompress
xxd -i decompress > $@
rm -f decompress

extractor.c: extractor.asm
fasmg $< extractor
xxd -i extractor > $@
rm -f extractor

.PHONY: all clean

92 changes: 92 additions & 0 deletions src/asm/extractor.asm
@@ -0,0 +1,92 @@
include '../deps/fasmg-ez80/ez80.inc'
include './ti84pceg.inc'

macro print msg, offset
display msg
repeat 1,x:offset
display `x, 10
end repeat
end macro

relocaddr := ti.plotSScreen

extractableprgm:
ld hl,0
extractentrylabel := $% - 3
ld de,relocaddr
ld bc,0
extractsizelabel := $% - 3
ldir
jp relocaddr
.relocate:
org relocaddr
extractprgm:
ld hl,0
extracttotalsizelabel := $% - 3
call ti.ErrNotEnoughMem
ld hl,ti.userMem
ld de,(ti.asm_prgm_size)
call ti.DelMem ; remove ourseleves
xor a,a
sbc hl,hl
ld (ti.asm_prgm_size),hl
ld hl,extractdata
.loop:
ld a,(hl)
or a,a
jp z,ti.userMem
push hl
call ti.Mov9ToOP1
.find:
call ti.ChkFindSym
jp c,.notfound
call ti.ChkInRam
jr nz,.inarc
call ti.PushOP1
call ti.Arc_Unarc
call ti.PopOP1
jr .find
.inarc:
ex de,hl
ld de,9
add hl,de
ld e,(hl)
add hl,de
inc hl
call ti.LoadDEInd_s
push hl
push de
ld de,ti.userMem
ld hl,(ti.asm_prgm_size)
add hl,de
ex de,hl
pop hl
push de
push hl
call ti.InsertMem
pop hl
push hl
ld de,(ti.asm_prgm_size)
add hl,de
ld (ti.asm_prgm_size),hl
pop bc
pop de
pop hl
ldir
pop hl
ld bc,9
add hl,bc
jr .loop
.notfound:
pop hl
ld a,0
jp ti.JError
extractdata:

display 10
print "#define EXTRACTOR_ENTRY_OFFSET ", extractentrylabel
print "#define EXTRACTOR_PRGM_SIZE_OFFSET ", extractsizelabel
print "#define EXTRACTOR_EXTRACT_SIZE_OFFSET ", extracttotalsizelabel
print "#define EXTRACTOR_APPVARS_OFFSET ", $%
display 10
print "size: ", $%
16 changes: 16 additions & 0 deletions src/asm/extractor.c
@@ -0,0 +1,16 @@
unsigned char extractor[] = {
0x21, 0x00, 0x00, 0x00, 0x11, 0x66, 0x94, 0xd0, 0x01, 0x00, 0x00, 0x00,
0xed, 0xb0, 0xc3, 0x66, 0x94, 0xd0, 0x21, 0x00, 0x00, 0x00, 0xcd, 0x2c,
0x07, 0x02, 0x21, 0x81, 0xa8, 0xd1, 0xed, 0x5b, 0x8c, 0x11, 0xd0, 0xcd,
0x90, 0x05, 0x02, 0xaf, 0xed, 0x62, 0x22, 0x8c, 0x11, 0xd0, 0x21, 0xed,
0x94, 0xd0, 0x7e, 0xb7, 0xca, 0x81, 0xa8, 0xd1, 0xe5, 0xcd, 0x20, 0x03,
0x02, 0xcd, 0x0c, 0x05, 0x02, 0xda, 0xe6, 0x94, 0xd0, 0xcd, 0x98, 0x1f,
0x02, 0x20, 0x0e, 0xcd, 0x28, 0x06, 0x02, 0xcd, 0x48, 0x14, 0x02, 0xcd,
0xc4, 0x05, 0x02, 0x18, 0xe4, 0xeb, 0x11, 0x09, 0x00, 0x00, 0x19, 0x5e,
0x19, 0x23, 0xcd, 0x9c, 0x1d, 0x02, 0xe5, 0xd5, 0x11, 0x81, 0xa8, 0xd1,
0x2a, 0x8c, 0x11, 0xd0, 0x19, 0xeb, 0xe1, 0xd5, 0xe5, 0xcd, 0x14, 0x05,
0x02, 0xe1, 0xe5, 0xed, 0x5b, 0x8c, 0x11, 0xd0, 0x19, 0x22, 0x8c, 0x11,
0xd0, 0xc1, 0xd1, 0xe1, 0xed, 0xb0, 0xe1, 0x01, 0x09, 0x00, 0x00, 0x09,
0x18, 0xa0, 0xe1, 0x3e, 0x00, 0xc3, 0x90, 0x07, 0x02
};
unsigned int extractor_len = 153;
4 changes: 2 additions & 2 deletions src/compress.c
Expand Up @@ -71,7 +71,7 @@ int compress_array(unsigned char **arr, size_t *size, compression_t mode)
}

/*
* Compress and create an auto-decompressing 8xp.
* Write 24-bit value into array.
*/
void compress_write_word(unsigned char *addr, unsigned int value)
{
Expand All @@ -98,7 +98,7 @@ int compress_auto_8xp(unsigned char **arr, size_t *size)
extern unsigned char decompress[];
extern unsigned int decompress_len;
unsigned char *compressedarr = malloc(INPUT_MAX_SIZE);
unsigned char *newarr = malloc(TI8X_MAXDATA_SIZE);
unsigned char *newarr = malloc(INPUT_MAX_SIZE);
unsigned char *inarr = *arr;
unsigned int offset;
size_t compressedsize;
Expand Down

0 comments on commit 961c2e3

Please sign in to comment.