From 315dfa9509308695ee2117fd01f35535fb576fc3 Mon Sep 17 00:00:00 2001 From: Zack Buhman Date: Thu, 15 Jun 2023 16:46:40 +0000 Subject: [PATCH] initial --- .gitignore | 6 +++++ DSC09311_256.data | 5 ++++ DSC09311_256.data.pal | Bin 0 -> 768 bytes DSC09311_256.png | Bin 0 -> 27433 bytes Makefile | 37 ++++++++++++++++++++++++++ gba-lib | 1 + main.c | 59 ++++++++++++++++++++++++++++++++++++++++++ palette.py | 7 +++++ 8 files changed, 115 insertions(+) create mode 100644 .gitignore create mode 100644 DSC09311_256.data create mode 100644 DSC09311_256.data.pal create mode 100644 DSC09311_256.png create mode 100644 Makefile create mode 120000 gba-lib create mode 100644 main.c create mode 100644 palette.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..522c166 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +*.sav +*.map +*.o + +*.elf +*.gba diff --git a/DSC09311_256.data b/DSC09311_256.data new file mode 100644 index 0000000..7b526bc --- /dev/null +++ b/DSC09311_256.data @@ -0,0 +1,5 @@ +У}j}и۔j}УRI}jIIIIgg}̊R}}gwwР}}}}}}ʤն}}}}}־ն}[}}÷ϣЁI3j÷ϣ[III÷϶IIIj÷ʶj\PIw÷j33I÷I3IR÷̐I3RwõIIR÷⣣jIR÷ՐjI}÷õ̐jjøwww̐jj}ø~\PP\\g~̐jwï|||lqq~~~~wjʵ|y~~~~~|qqjá|l~||||ʷiii|||ll|ʭiL:&ZkOiii||գʷ|iiF8O.iOODD⣐÷|iilliilâ.L&M␐÷|ylli|Âiin됐÷yli||Ñ|yÔ÷|||ʷ|yʏ÷ʭv÷޷÷yy~۰ô÷~~flyyyʷ޴yʷyvK,KfyO۰Ǧâ÷yvvfKfKfyKKv༦ūð÷yfKff]fyfKyyyƦzzxzzzxzʷʿyfyfyfyy׺zzrccrrrurrrxx޿ʷʿyyyyyfyyyদuu_d_uudddddrrxzÿʿyyyylyyť__UUXXXccxx{ttttttʿϿyyyyffyyثmTTUUUXccxttttaaaa{ʧyyvyffy߳÷mTGUddXXstttaaaaaat{||yf]]]]]]yɹ÷nWEGUurcxtteaaaaaa{{t{||iKKK,,,KK]yܹ÷mm_Uuzz؃tteaaaaaa{{ttaatiDDDff]]fffyfKly÷Wmttutteeeaaaaa{taaaaaSaiifff]]]]]fyy~~÷STa{u؃tteeaaSSSataaaaaSSaaSt||||fffff]vy~~õmaSudtteeeSSSSSaaaaaSSaaaSamk||||illffff~ʰnWS_uudreeeSSSSSSaaaaaSSaaSSSVmnnnnk||iiiiiffly䆺۷nMGT_teeeSSSSSaaaaSSaaSaaSSVWWnnn|||iliffyyWϷnmTGTurdz𙃃teeVSSSSSaaaaSS_a_aaaSSVWZZnn||lllyyy|--;{E;ṹGh""    C4Γ+dHxNhSVE=:VeoeeeeeVVVVVVEECEEEC6"""""+++"""   #@   66%@T5 _ C=ڽkQJJJJJJ3.#ZbY3N%% &8//NheSEVVVeeVVVVEVVEEEEEEEEEEEEE=*"++!!"    .'    6=*@.5T <+ )a`Q9OOJ9998EmSpY0&%%%::%%%&NNNkVEEVeeVVVVVVVVEVVEEEEEEEEEEEEEE6!++!!!"" * @    *=*{_ T 4ɛhQ9OO983l$pbb%&%)VotaSE::78NNNeeooeVVVVVVVVEEEEEEEEEEEEEEEEEEGE=!++!!!!!!!   * '    45)_ G +"\N9N9R}nG_Tpbb7E:=o{aeNk{tteVVVVVVSVSVSSSEEEEEEEEEEEEESSSSSE=+++4+!!!+!! * ''    u< +%ݱpRNNL[Yp[FVVVttߗoeeVSVEVEEEEEEEESSEEEEEEEEEEEESSSTTTTE*+++4!!!!++!    @    *83Q-m6YppP.P\wqetu_tإ::ooStzuu_TTT_rzzuTG**hQ9:VėdrTȳĻĻij_!$hQQ9&V66ŋHua==_{rŻm$rrrddddrssssssscssssscUUUXXXH<++<<    Kgww\ /hQQ9&e*6ŃauCS{{ŻtdrrrrddddssssssssssssscUUXXXXUH++<4   Jww\. &hQ9/&t*ťe{taCEƻmټssrrrrsrssssssssssssscXUHUUXU<+4<+4 3qqJ h99&%tŻtauCaƻaUsssssssssssssxxsscccccXHHUUUH<+44-.q~\9N9&7t ƺtatVtƻWdcssssssssxxxxxssccccccXHHHUUH<+44 #\w~qJN/ +:{ tƗƺaatSaƺƻĻׄcsssssssxxxxxssscXXXccXHHHUUH<++4 ,,,3. +J~~~l.>/e:a{ƫaeƺƻĻĻӓccsssssxxxxxxssccUXXXXXXHHUUH<++4,?(?KJJ3.\~J8/4EatƻmĻĻĻӓccssxxxxxxxxxsscXXXXXXXXHHUUH<44]B?^^^^PJ. +#J~q#//+FfT1ID=sxtBPBB|F-RyRJ1!tbE*(=W z3OO-0P%R!YG(9mjH#RgkJ~J>yGcZUqC^*g2NJ&gb zNl`;eR!d1oQb$NZOI&wB6HrP-ZABn(MK**!MS4RxO;A{8OgB$aRDVbiNK#}PFZSKSXfn9V3ABo zgi<|JUvY<2O;})TUSDE=S51mmF^E=2f>}p!U0Z@$L3>+KV`5)kV{36>RBd5kj9NsX zS`2q%N|{|FXJ=}jViu@j0G47*m19?zW19f}fI&wT^zDla!j4m6?{Bpq-+poSdhfm%EsWqo19`n{ck7 zkeQ{iwx5#3pMb2Tq_U-;si&*Sr$D`>h{vayu&%PSuB@!Hzq_)c$FHNjx3tf_Y|^{3 z#J|42!M@1Axz)m|&BngR$;Zve#?s5f+|9_%(bd+_$kEf#;nc$A*3sA6-r3vO;MvyS y;@{}t*68En*w$4==18}?C$IO@ZhbmX_4f1n`tbPt|N8v-|NsAF5<#B; literal 0 HcmV?d00001 diff --git a/DSC09311_256.png b/DSC09311_256.png new file mode 100644 index 0000000000000000000000000000000000000000..01ada7d92c5fd15c39a50d5d92bd379747402d64 GIT binary patch literal 27433 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 $@ + +%.glyph.o: %.glyph + $(BUILD_BINARY_O) + +%.data.o: %.data + $(BUILD_BINARY_IMAGE_O) + +%.data.pal.o: %.data.pal + $(BUILD_BINARY_IMAGE_O) diff --git a/gba-lib b/gba-lib new file mode 120000 index 0000000..2d8868e --- /dev/null +++ b/gba-lib @@ -0,0 +1 @@ +../gba-lib \ No newline at end of file diff --git a/main.c b/main.c new file mode 100644 index 0000000..ad5e46e --- /dev/null +++ b/main.c @@ -0,0 +1,59 @@ +extern unsigned int _binary_DSC09311_256_data_pal_start; +extern unsigned int _binary_DSC09311_256_data_pal_end; +extern unsigned int _binary_DSC09311_256_data_pal_size; + +extern unsigned int _binary_DSC09311_256_data_start; +extern unsigned int _binary_DSC09311_256_data_end; +extern unsigned int _binary_DSC09311_256_data_size; + +#include "io_reg.h" +#include "vram.h" +#include "register_values.h" +#include "copy.h" +#include "nib.h" +#include "type.h" +#include "oam.h" + +void _start(void) +{ + int height = 240; + int width = 160; + + u8 * pal = (u8*)&_binary_DSC09311_256_data_pal_start; + u16 * _pram = (u16 *)&pram.bg[0][0]; + for (int color = 0; color < 256; color++) { + int r = pal[color * 3 + 0] >> 3; + int g = pal[color * 3 + 1] >> 3; + int b = pal[color * 3 + 2] >> 3; + _pram[color] = PRAM_RGB15(r, g, b); + } + + u32 _vram; + + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) { + u8 index = ((u8 *)(&_binary_DSC09311_256_data_start))[y * width + x]; + + switch (x & 0x3) { + case 0: _vram = index; break; + case 1: _vram |= index << 8; break; + case 2: _vram |= index << 16; break; + case 3: _vram |= index << 24; + *((u32 *)(0x6000000 + (y * width + x))) = _vram; + break; + } + } + } + + while ((io_reg.VCOUNT & 0xff) < 161); + + io_reg.DISPCNT = + ( DISPCNT__BG2 + | DISPCNT__BG_MODE_4 + | DISPCNT__FRAMEBUFFER(0) + ); + + while (1) { + io_reg.HALTCNT = 0; + }; +} diff --git a/palette.py b/palette.py new file mode 100644 index 0000000..6727deb --- /dev/null +++ b/palette.py @@ -0,0 +1,7 @@ +f = open("DSC09311-256.data.pal", 'rb') +b = f.read() + + +def grouper(iterable, n): + args = [iter(iterable)] * n + return zip(*args, strict=True)