Skip to content

Commit a75348b

Browse files
committed
LZ77 code in ITCM now works
1 parent eb41b69 commit a75348b

3 files changed

Lines changed: 13 additions & 21 deletions

File tree

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,23 @@
11
#include <nds.h>
2+
#include "tonccpy.h"
23

34
#define __itcm __attribute__((section(".itcm")))
45

56
void __itcm
6-
lzssDecompress(byte source[], byte destination[]) {
7-
uint32 leng = (uint)(source[1] | (source[2] << 8) | (source[3] << 16));
7+
lzssDecompress(u8* source, u8* destination) {
8+
u32 leng = (source[1] | (source[2] << 8) | (source[3] << 16));
89
int Offs = 4;
910
int dstoffs = 0;
1011
while (true)
1112
{
12-
byte header = source[Offs++];
13+
u8 header = source[Offs++];
1314
for (int i = 0; i < 8; i++)
1415
{
1516
if ((header & 0x80) == 0) destination[dstoffs++] = source[Offs++];
1617
else
1718
{
18-
byte a = source[Offs++];
19-
byte b = source[Offs++];
19+
u8 a = source[Offs++];
20+
u8 b = source[Offs++];
2021
int offs = (((a & 0xF) << 8) | b) + 1;
2122
int length = (a >> 4) + 3;
2223
for (int j = 0; j < length; j++)
@@ -25,7 +26,7 @@ lzssDecompress(byte source[], byte destination[]) {
2526
dstoffs++;
2627
}
2728
}
28-
if (dstoffs >= leng) break;
29+
if (dstoffs >= (int)leng) return;
2930
header <<= 1;
3031
}
3132
}

arm9/source/lz77.h

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,6 @@
11
#ifndef LZSS_H
22
#define LZSS_H
33

4-
#ifdef __cplusplus
5-
extern "C"
6-
{
7-
#endif
8-
9-
void lzssDecompress(byte source[], byte destination[]);
10-
11-
#ifdef __cplusplus
12-
}
13-
#endif
4+
void lzssDecompress(u8* source, u8* destination);
145

156
#endif

arm9/source/main.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,7 @@ int playRvid(const char* filename) {
370370
fread(compressedFrameSizes, sizeof(u32), 128, rvidFrameSizeTable);
371371
for (int i = 0; i < 14; i++) {
372372
fread(compressedFrameBuffer, 1, compressedFrameSizes[i], rvid);
373-
swiDecompressLZSSWram(compressedFrameBuffer, frameBuffer+(i*(0x200*rvidVRes)));
373+
lzssDecompress(compressedFrameBuffer, frameBuffer+(i*(0x200*rvidVRes)));
374374
loadedFrames++;
375375
}
376376
} else {
@@ -419,7 +419,7 @@ int playRvid(const char* filename) {
419419
if (compressedFrameSizes[currentFrame+14 % 128] > 0
420420
|| compressedFrameSizes[currentFrame+14 % 128] <= sizeof(compressedFrameBuffer)) {
421421
fread(compressedFrameBuffer, 1, compressedFrameSizes[currentFrame+14 % 128], rvid);
422-
swiDecompressLZSSWram(compressedFrameBuffer, frameBuffer+(i*(0x200*rvidVRes)));
422+
lzssDecompress(compressedFrameBuffer, frameBuffer+(i*(0x200*rvidVRes)));
423423
}
424424
} else {
425425
fread(frameBuffer+(i*(0x200*rvidVRes)), 1, 0x200*rvidVRes, rvid);
@@ -463,7 +463,7 @@ int playRvid(const char* filename) {
463463
if (compressedFrameSizes[currentFrame+14 % 128] > 0
464464
|| compressedFrameSizes[currentFrame+14 % 128] <= sizeof(compressedFrameBuffer)) {
465465
fread(compressedFrameBuffer, 1, compressedFrameSizes[currentFrame+14 % 128], rvid);
466-
swiDecompressLZSSWram(compressedFrameBuffer, frameBuffer+(i*(0x200*rvidVRes)));
466+
lzssDecompress(compressedFrameBuffer, frameBuffer+(i*(0x200*rvidVRes)));
467467
}
468468
} else {
469469
fread(frameBuffer+(i*(0x200*rvidVRes)), 1, 0x200*rvidVRes, rvid);
@@ -542,7 +542,7 @@ int playRvid(const char* filename) {
542542
fread(compressedFrameSizes, sizeof(u32), 128, rvidFrameSizeTable);
543543
for (int i = 0; i < 14; i++) {
544544
fread(compressedFrameBuffer, 1, compressedFrameSizes[i], rvid);
545-
swiDecompressLZSSWram(compressedFrameBuffer, frameBuffer+(i*(0x200*rvidVRes)));
545+
lzssDecompress(compressedFrameBuffer, frameBuffer+(i*(0x200*rvidVRes)));
546546
loadedFrames++;
547547
}
548548
} else {
@@ -757,7 +757,7 @@ int main(int argc, char **argv) {
757757
if (file) {
758758
// Start loading
759759
fread(compressedFrameBuffer, 1, sizeof(compressedFrameBuffer), file);
760-
swiDecompressLZSSWram(compressedFrameBuffer, frameBuffer);
760+
lzssDecompress(compressedFrameBuffer, frameBuffer);
761761
dmaCopyAsynch(frameBuffer, BG_GFX_SUB, 0x18000);
762762
} else {
763763
dmaFillHalfWords(0, BG_GFX_SUB, 0x18000); // Clear top screen

0 commit comments

Comments
 (0)