From 88b6fa9aae12bb7276861824250a3aa5c435e348 Mon Sep 17 00:00:00 2001 From: Zack Buhman Date: Sun, 17 Dec 2023 23:04:19 +0800 Subject: [PATCH] memorymap: add texture_memory64 --- addresses.lds | 4 +++- example/font.cpp | 6 +++--- example/macaw.cpp | 4 ++-- example/macaw_cube.cpp | 4 ++-- example/macaw_multipass.cpp | 4 ++-- example/macaw_twiddle.cpp | 4 ++-- example/sprite.cpp | 2 +- example/translucency.cpp | 4 ++-- memorymap.hpp | 3 ++- regs/memorymap.csv | 4 ++-- regs/memorymap.ods | Bin 17218 -> 17279 bytes twiddle.hpp | 2 +- vga.cpp | 2 +- 13 files changed, 23 insertions(+), 20 deletions(-) diff --git a/addresses.lds b/addresses.lds index a49809a..c5115e7 100644 --- a/addresses.lds +++ b/addresses.lds @@ -11,8 +11,10 @@ modem = 0xa0600000; aica = 0xa0700000; aica_rtc = 0xa0710000; +system_boot_rom = 0xa0000000; aica_wave_memory = 0xa0800000; -texture_memory = 0xa5000000; +texture_memory64 = 0xa4000000; +texture_memory32 = 0xa5000000; system_memory = 0xac000000; ta_fifo_polygon_converter = 0x10000000; ta_fifo_yuv_converter = 0x10800000; diff --git a/example/font.cpp b/example/font.cpp index 316dc3a..4491b75 100644 --- a/example/font.cpp +++ b/example/font.cpp @@ -142,7 +142,7 @@ uint32_t transform(uint32_t * ta_parameter_buf, const char * s, const uint32_t l void init_texture_memory(const struct opb_size& opb_size) { - volatile texture_memory_alloc * mem = reinterpret_cast(texture_memory); + auto mem = reinterpret_cast(texture_memory32); background_parameter(mem->background); @@ -172,8 +172,8 @@ inline void inflate_character(const uint8_t * src, const uint8_t c) //serial::character('\n'); } - auto mem = reinterpret_cast(0xa400'0000); - auto texture = reinterpret_cast(mem->texture); + auto mem = reinterpret_cast(texture_memory64); + auto texture = reinterpret_cast(mem->texture); uint32_t offset = 8 * 8 * character_index; union { diff --git a/example/macaw.cpp b/example/macaw.cpp index 95719a3..d80de67 100644 --- a/example/macaw.cpp +++ b/example/macaw.cpp @@ -77,7 +77,7 @@ uint32_t transform(uint32_t * ta_parameter_buf, void init_texture_memory(const struct opb_size& opb_size) { - volatile texture_memory_alloc * mem = reinterpret_cast(texture_memory); + auto mem = reinterpret_cast(texture_memory32); background_parameter(mem->background); @@ -93,7 +93,7 @@ void copy_macaw_texture() { auto src = reinterpret_cast(&_binary_macaw_data_start); auto size = reinterpret_cast(&_binary_macaw_data_size); - auto mem = reinterpret_cast(0xa400'0000); + auto mem = reinterpret_cast(texture_memory64); for (uint32_t px = 0; px < size / 3; px++) { uint8_t r = src[px * 3 + 0]; uint8_t g = src[px * 3 + 1]; diff --git a/example/macaw_cube.cpp b/example/macaw_cube.cpp index c68f765..7781a5d 100644 --- a/example/macaw_cube.cpp +++ b/example/macaw_cube.cpp @@ -109,7 +109,7 @@ void transform(ta_parameter_writer& parameter, void init_texture_memory(const struct opb_size& opb_size) { - volatile texture_memory_alloc * mem = reinterpret_cast(texture_memory); + auto mem = reinterpret_cast(texture_memory32); background_parameter(mem->background); @@ -125,7 +125,7 @@ void copy_macaw_texture() { auto src = reinterpret_cast(&_binary_macaw_data_start); auto size = reinterpret_cast(&_binary_macaw_data_size); - auto mem = reinterpret_cast(0xa400'0000); + auto mem = reinterpret_cast(texture_memory64); for (uint32_t px = 0; px < size / 3; px++) { uint8_t r = src[px * 3 + 0]; uint8_t g = src[px * 3 + 1]; diff --git a/example/macaw_multipass.cpp b/example/macaw_multipass.cpp index 2cb1c52..df2fcd8 100644 --- a/example/macaw_multipass.cpp +++ b/example/macaw_multipass.cpp @@ -84,7 +84,7 @@ uint32_t transform(uint32_t * ta_parameter_buf, void init_texture_memory(uint32_t render_passes) { - volatile texture_memory_alloc * mem = reinterpret_cast(texture_memory); + auto mem = reinterpret_cast(texture_memory32); background_parameter(mem->background); @@ -104,7 +104,7 @@ void main() auto src = reinterpret_cast(&_binary_macaw_data_start); auto size = reinterpret_cast(&_binary_macaw_data_size); - auto mem = reinterpret_cast(0xa400'0000); + auto mem = reinterpret_cast(texture_memory64); for (uint32_t px = 0; px < size / 3; px++) { uint8_t r = src[px * 3 + 0]; uint8_t g = src[px * 3 + 1]; diff --git a/example/macaw_twiddle.cpp b/example/macaw_twiddle.cpp index c5d46cb..88aff2c 100644 --- a/example/macaw_twiddle.cpp +++ b/example/macaw_twiddle.cpp @@ -82,7 +82,7 @@ uint32_t transform(uint32_t * ta_parameter_buf, void init_texture_memory(const struct opb_size& opb_size) { - volatile texture_memory_alloc * mem = reinterpret_cast(texture_memory); + auto mem = reinterpret_cast(texture_memory32); background_parameter(mem->background); @@ -102,7 +102,7 @@ void main() auto src = reinterpret_cast(&_binary_macaw_data_start); auto size = reinterpret_cast(&_binary_macaw_data_size); - auto mem = reinterpret_cast(0xa400'0000); + auto mem = reinterpret_cast(texture_memory64); uint16_t temp[size / 3]; for (uint32_t px = 0; px < size / 3; px++) { diff --git a/example/sprite.cpp b/example/sprite.cpp index 1f45781..7a1f70d 100644 --- a/example/sprite.cpp +++ b/example/sprite.cpp @@ -55,7 +55,7 @@ uint32_t transform(uint32_t * ta_parameter_buf) void init_texture_memory(const struct opb_size& opb_size) { - volatile texture_memory_alloc * mem = reinterpret_cast(texture_memory); + auto mem = reinterpret_cast(texture_memory32); background_parameter(mem->background); diff --git a/example/translucency.cpp b/example/translucency.cpp index 2c67004..02a1961 100644 --- a/example/translucency.cpp +++ b/example/translucency.cpp @@ -95,7 +95,7 @@ uint32_t transform(uint32_t * ta_parameter_buf, void init_texture_memory(const struct opb_size& opb_size) { - volatile texture_memory_alloc * mem = reinterpret_cast(texture_memory); + auto mem = reinterpret_cast(texture_memory32); background_parameter(mem->background); @@ -115,7 +115,7 @@ void main() auto src = reinterpret_cast(&_binary_macaw_data_start); auto size = reinterpret_cast(&_binary_macaw_data_size); - auto mem = reinterpret_cast(0xa400'0000); + auto mem = reinterpret_cast(texture_memory64); for (uint32_t px = 0; px < size / 3; px++) { uint8_t r = src[px * 3 + 0]; uint8_t g = src[px * 3 + 1]; diff --git a/memorymap.hpp b/memorymap.hpp index 80ce5eb..1d550ed 100644 --- a/memorymap.hpp +++ b/memorymap.hpp @@ -2,7 +2,8 @@ extern volatile uint32_t system_boot_rom[0x200000] __asm("system_boot_rom"); extern volatile uint32_t aica_wave_memory[0x200000] __asm("aica_wave_memory"); -extern volatile uint32_t texture_memory[0x800000] __asm("texture_memory"); +extern volatile uint32_t texture_memory64[0x800000] __asm("texture_memory64"); +extern volatile uint32_t texture_memory32[0x800000] __asm("texture_memory32"); extern volatile uint32_t system_memory[0x1000000] __asm("system_memory"); extern volatile uint32_t ta_fifo_polygon_converter[0x800000] __asm("ta_fifo_polygon_converter"); extern volatile uint32_t ta_fifo_yuv_converter[0x800000] __asm("ta_fifo_yuv_converter"); diff --git a/regs/memorymap.csv b/regs/memorymap.csv index 89fb7e7..22aed79 100644 --- a/regs/memorymap.csv +++ b/regs/memorymap.csv @@ -17,8 +17,8 @@ "0","0x01000000","0x01FFFFFF","External Device","16MB",, "0","0x02000000","0x03FFFFFF","Mirror of 0x00000000 - 0x1FFFFFFF","32MB",, ,,,,,, -"1","0x04000000","0x04FFFFFF","Texture memory 64bit access","8MB",, -"1","0x05000000","0x05FFFFFF","Texture memory 32bit access","8MB",,"texture_memory" +"1","0x04000000","0x04FFFFFF","Texture memory 64bit access","8MB",,"texture_memory64" +"1","0x05000000","0x05FFFFFF","Texture memory 32bit access","8MB",,"texture_memory32" "1","0x06000000","0x06FFFFFF","Mirror of 0x04000000 - 0x06FFFFFF","32MB",, ,,,,,, "2","0x08000000","0x0bffffff","Unassigned","-",, diff --git a/regs/memorymap.ods b/regs/memorymap.ods index dd874acba17efbdb4f7db05e67413df620997979..9b1f000ed010138e43bd2104d3a25bd6ec597dab 100644 GIT binary patch delta 7146 zcmZ8m1ymeM+MU7OEx5Z&aEAaPxLa@tFu3dB9&8|32ol`g9YSyk&fpR}NFXripS<0F z_r0xi>eSb_ZhhTdU8ir=x&4vA=SU!?x-vWh0RVsk07!c!Cu3^B|85{BK)!#sG>~&C zH1xky%xNIGK!X2t+X3M3}w)ttmpe;`!xb4&Cc@KVa1uCTi0VE+f-9xQEHUcd|1`rJp)lQAKW#^?^1Y+#&sQsJ2tSYJOb%Jt(6( zVVe7Erf|qx`X#pX_szuy=Q>Aoh5~4)s#1Nmb2vv@^)6Gdk0cjA&WKHo+vND7`?_=Z9%ps3CAr47JDejei)3` zlq?DCf-x2$g4^nOax}w`jD#)66ntyX9aCw@BrmiiI|EbO#m~UjhZ66*(EFdPCY(1D z==)9s+0uHqDlh!r(g=0b5?Qn_M|3p>BPQn#8l=pMtrJ+~s{~0YE}F8l8;bgI^vp(? zJTNHr48al&b}05wS)a!U`59E6KTqAty{)m^x#J^cl4}#(t`=eLU2R;sp8t%xn>QD0 zy&Ru4pxzgX9G!~j`!jR6$+X}BSzQ?!r8S=2vls{fsKfuRe=VVZe^H1xA~Sd@Q#7_Zl&-q4hRPO2eh>Cc)9t5wdVinGL6>UMCI1OefKSk7{ z8VC-8qvyr5aE_HSL)OA>YXc8`)*PW_FP$;|HfZ9o=uq`-9>}oOww2o^WK!M2mYFQWjp6KK#_0IPzOT zNU)%Z^;#^E$`O?>InH^zxWtH4Vsg5)ZaUv_-!G4aD>d%?&{ttvY^D^OEx&w!j}^U!_7ug zlsPMb6sWdMBU)nqX-a*3^+&StM~7uikHw*%Wo>FC#n@Y=wfYWiKVRrevbUPM_ZgLZ6mMjgqF{Xqn4C6rGqwjJL?{p(><`vO$611wV0NE`l>eZds#t(M^Pk zXcP)2mJ6Uw2j)za%%f$@yO3OtMEH2JD8!VnX8gav)jN|}bYI6YS30HgeTmM?;|#tX z^{TL|=StVcN>8aKnW_k_e+o|Y9CvRmEP=mw zHmtl3pmo0PRv-?gcDx-%Ho2BMS)$yf=(Q5lr;)Y=$fXM>j~qM;w<(6R^PmwcM~K~( zRq@w@2m5q!nCahSXCbNf3f$f{A}~UGmt$G>66uLy||WZFS&^HC<5nzE*=SIDPmFS|L(27lArE|%`+kh>us;i z%7=h7f;gncvp^IS{=@bg#7?ZlCMDt~2Bc+~j?L^9wx8n*-XoDbE;1xjq`mZ`^v$df)UYH^&M}ei&b#4I!(JPYc3n=lfk=JNuD+Ayt_F0ea6RENke)_9k`qnD zIGq*z#JJ{=k!yeCb(m|B@b^#Z**3n#pgG_97$scw1pmq@4kUuYRshf?j+JN!F9-!X zk>juzz3{*d0?pMGs|AV1i{HCzHVycomLtiS2l()j3dUbJQ|6)1M<8RrQBw1$@HlWn zQp3-m4qSf?M{h!xXtt}^;$q$aS%SxZzz-v__Y=$zM5uMh-waygUbXG@&Lc2+h^tm< zit`T?I&#^-_%&riAeS?s-hwxL))mqQ~hk` z*Ae(@Z|y#kxSXOf8xA7Ha$gD?L!!F+fpAzNd#zsz^dBEOw$XU}zH?0mmT$MLd20EX zeAAKKNt0?PWBy6r-R!F*`giBE8lzVM-cBnRgN!nmmx2=|oaE;{VT7Qa=5&A{Lx^K= zlt9&USVzwjMObXce0aNEWm9k74Vj3jPjB*iA7Rt%2|tfWlGK`*D?znKzWTZ|aF377 zGQ5m1MiMn(Q|SSmiMFl<#u4iZqGr)_#@FJF`EY0=(CLGdO=suR9AKQXCIxQ zX+%wQ=#;rIv{oOk2@bknpE=|)_S6=^>y$C!on2|Q`k>ANcDprfOO@n58TP;lh-e=x zKIAC$Q$z3KJcOoSiMMK4dXkG`%**Tr1=0vDSciOJuiaVD0KX%$f3m;f^hzhvEs2<@ zuYfL${~A`u@j~--G$Lz(d8I5rK$SjAdlOvjxOmZ{D2KOi7I!&@G^`=EBvf>C*t4UE zR!3|fsh}Ho-QP&v9ei;=*)qNP#i!+!+u`a!H#nm1&o$=@yMIZP?;ZX)(f=IIO(0el z5aXXy`2+hIs&8~-*_UIBl{WV6)iEaHK=-=DR)R-*Uh57n;2%cT@r*Lbnb*>EZIQbqWr1JExciQTu&SQz0v}W$Q5FLm|#E9 zW`@0>bW?V1@t}MMHGf&%DW>YuCYVb!AnT4ev^2;V+}YqmF_FLW=7jAIg{DYkBoEii zD_Y!ulQ?t?pmmQ1qPTIR7<;i-Zf)ri6W3YPvuO4Fl(Y`)d4K51+h>u1)vN1 znH7H22`3{Cs}rn(6pn{G>aK2Ofz zz%r9-S~^kZ*GbFV{!sO|NIQ%aAqIu_AeuL21Mg z_!MZR1R<(UGK{q&(!=Fs(5p6W3pI4h4I$P8BrUPWYD-?#fKUH zlI}Yo*~>KM4hpU>_&4VApje{H%}^IONyn*s0dMH_xy+kkqmUnwh*ri z2%SQ;iWMrrAD4EE(*N?_yi%@#RN z*K$4ghSEius{Kb^7c%OvV%E%h=EFDBe-Trl@*wrvEx60!#FaIUAmC@Y^2Ky|EUUgA^htXlp%uQ=MUyKljyvGrMh?MBeMvLs|a82(<5 z&oQbnS~%t;nHKqWb*7Uv7yH=cZ0jdw;Ov%!nqS~2v8JiII}Gn#wE8F6t4FrFrZxY; zWZDEZ=i!F%oJG!^YKL?Z@GC{~Me*c9 zT&r!5GhHsLyE1>%MS{y%C2e?vi!5Jad7^fXyi+zYSfo1W>{I8wxI54F?R9ZV`nD8Q z+inQYwE(y0$d@@#KZ^k6)z0z-!l80E#+3&ayh1&f(mX7=D*Hx%}hgmngBG>@a{$K9x&gJTG<58`GpJ>H~vXc8`!w%?A3< zYz~^agD)@`tZajvpHAKqk8~zIq_Tz9f(;>~uPQ|u$GRiWk5pL}yrJAO5q70s1B;u^ z(tQD~Ux+RLVjJ9qwCr5fLzrU%?BL~s`ELuX$EF7raLdc3k9X6|!9Q&?JrXOB>*e3U z_N&?|>?$$K@ErAV;hh3?o>g>C7vwBAQ>o98Hq!#|apRfZ3jONG_r^u&zQcmEj6mQF za;@xJcACM{j-{LeC))fxw<1t2Y1la&@nF>%pZ7lWFmhXbyyxUyM_R1mEp4%jTdo|< z``R5CaeK;^v+-0D76%6Y5!QhqO$s(-0Kkv=e}q*J@VA2TJ9fAB@UU~Tb?5YP1f3ch zco!%V1m&70?;L*wH!6Ox6N?F)Znfqawdpqk7JVbqd832d2!15U%N&esRG}}S+Kyvy z>GnT%^KQLuMw_0&FC1sOtzWpMoll_lirL?RSx@l$eKmF1Fa(<{lJK-ZXR% zap$2VwHlX5cJW>jV<*3bj&VmjL#ir`L~f^rUPa1#mp^!VxCSAxOU_hkn9N__jHw`g zn#Wv%80$Q#@SL2M`V!a#i1pHFFr&#$n*(MH47P2^Npi8& zcT>CO-gUSR&>%<$J8-Dd>3y-SNNVTV`uJovmKOdr7|<=-%#RI`FrTA5rP)#>J?0>Nf7m(0DSF~~SR1x-R?5XyY%a4E9sRaW1f z3WkC4q%{R&4@-4ZWGv}7Q4t}{4_J}x0=FSalnkOceRXk=R)cpcXXkY^%Dj=%{Jlb} zO=Ys&!@*xZ)&DBu#Ui!pZ$?wTj(kuXF>683HLB?$ew#=>1->-MzeR?dBJQp{v;vJG#r5({9om0Q5~yhKpt1LAPoR#O z?SsuhOn|FGXQ<*^H#t}3;1X14I$9TPYTv918j2W5D2pnUg<{~%J6Ra#ORy!5%*tna z93;Y1ELZH-9Alr}O_&|@YjCv#hcEAK2dD2aYNbHN`ou(^=Ybh!oBMU*LuSe%pSn>? zkcx=Tyr`#uuLM=OIF#U7S;2S~{>$Q>_@RcL9>pq=za-=&D!*Vv*GkejD)IQ&Ag226 zb(JTR`e2|k`3*g{PC?y#5ZJA*Ip`y88GihyRSB6N*mh~;qL1_a$JwzIR~c;Cf|HFc z&DI3ss!iaosN`LGAwA6i|DyU1RdQR0)TXr-iyBG2AKhwBt9{YS*e~4>a*`bFkV!A$ zuGU^Qi)s43c%$$RR4Qmwvz9abn)bMCaUS9M$NS|ob0}#9H}};0ZU!*Jy?Te?z-bLm zC)ybW3338g?w1)nDJfz^!qZlR@3@*Q&T`OS!vgd6yFphW0rByuhm@f8)X*?F=-3aihwjf!RPoB{psPWR^hSa_G+bn%mpFz+>-Ay`tOjG?u;qzbOfaSPK zxrhh=tkD0zIQ-ic(n|rfZQ)P@0Dme;12csH^&iWo!A#u!U*64v#J}vKJ}EK?lOzEI z6Ald`C5`r%uk#xN#wI%xL$0K7{sJ&0$$-6(cpw!f5RL%wAL|M7n+SIcfT&9`{yz518yi$@-6U{}42)zlj?Fumps-N^<-)_;)VIJ8Aa6 z;&f?2%-?UN_aA2i0+nXL`h)!UI10g&VWav3{ar|ZA5{NV79hqlFAV;0{yv|7B=x^V znE0OptFHXdXaC21|99B$=rv?ghKc%5_FJQ18lK+<3_AhAHozl|XNH@~mjdV8%pL*Z8_x;wN zxt=lCoNMmA_Os_2&v*)g=?H>BSCNN<#{+?oKp=H9zZi5?xL*cZ0>ksiZovrtv5qi& zzirGA6;vMv@6QxM1yvA7fpWkg{pI-+5c3Od5ko=!drAn`zfw>^8zeCPxR8*Le(zSL z4=W7w$C(003dl!Ia1b@0GiQ}+^+pNLYrof&M6%b0$9c7`nR`{&zB(VbVLi}Fe|%Ue za=^M`+H*eC#dyR{PbTbZ70c5UEklFWhQu6K;JOy|lfD}Lc+fS_%Tpb;zB)_9_jCuo z1;xGKz1v~VWYbB)wMC@;jI%1?>*=XPY@7{}!2zuuIY8oCG!@_9jj(puPLHQ>El*IQ z^V{kbnt8?Qh`wkk&k(p+^T+h=m@En!$um{|_tK{w-`<%$F3yKIAh@;nzkK(&CcbD4=GB` z;W|@8mzvi@I73Uey-d?2q+H~MFhqDbJG>%x6Il+mc{I;UoN2{~g+`C>NY^`?;=2C_ z_dO1f!D^^#$kc6=naTM6j>4;l{>)vTbR}cVjaJ$Z`+7!%v zX(DgP+I7z*PtL-%%)u0k*8)`WxjgOml9{T_*o1TenE|~)*6PAr&OKeLOuS1=tjtqc zM_fT4Prs<=)oTr7W2yyo^O?QtU?H2FN6+&*=1u-mgkIiCYKmv-RVw0httb;1ef(X~ z<;p%iGStt*u_@Vz5!-?RQ-u;v6iD=5WSw(Qg^~Rdb&h=5ltAv9_DsUyR(GX`?}-9% zlXuP=(Sbjuwo6=VQ>HL~;M91hPzQrB-w`;N0gjkTy~`!(+1kn_uQSi;T7t}vK5^Z8 z+74x6a`RE*!4v3P%>~!IgdjpP4x;&-$5K%i`c~d2$-T2{f5r_!=?Gk;be#nQoV=;) z_Y3FsdCT_U1XnnFUU+qoY#2dD3YvYiG;EQH93QbHlY~ksX~xHPch}DwEi^<*Lh=Pd zGM6xkRq~hfCbkUAsoeJKpU(?%%Ri=R1EycF5sU8H>Tl*Im{YAnv z6?TRxr5gfY75Ic-M2kkCCTVw;wg}#~%!ITOQR@lK%d(ttP zz+2y3Q6Xr=HCP+YNYR(m5}&6AHuqDWZ~WAW`Oo2Q1b4#%a0w z4DtzZPjju#lM5UB}Zf8*rA5#jKT=#1y7IrI~iS9oZ9%U>Bb$4CWDB z!q8wjw$ClJL44@mahl9hsXX5fs&%?Xq1%JVASKz2S$!bAfd$%XG6XAJN!lKvv-zsmMZL@MFZ%Nx<+HqMzln0>rR z-)Ae(cngW5wqeL~YR%09Ms%v;E5}3<-H}o8+)jY{Qu0q9nTQ=2hs~oRUqbz>4+v18W|_0;AM;@L56#()1B8)x4{A zNIuTp+H<7Q?R9k4wU_I?vQX8*%k(!go<-+T+cpp|6Jy=c3Rpg?tEsob| z+zK&2t6K{2Dp`FMx3R`km{qOLg$7~>n?{jxn!A(+Piho<(XEHz)OKRRktKtUX*g0j zQMLVf@o{a{@~XI^fPOZTiF=liA^Zer*1 zJOEa~3<>^OEgFPh)%et!UWx_qw2z^}FxFwQAH+hgtLBUBpp`l2ax=my+@KNuhX?c@{oxDhN;I(s3{-9z>yz?RIlwA?$wb#aZPy0tJPSJE=nf1mweQyMse z<>!`q&TqB^boJRrE53%jB4|qnkM(j}=8vQy_UR{yQ>^9dl96uj%xnO&j`eg?df^FQ z3hD8C?p^&MLqt#Hpjy>5gp&C#7FgIt*L7j3PA?%@N-)z?j2P8$l$?QO3RS&#N5=2Z%*&1VaUuUkDwEmxLn zS4+{AL<-uLibxk_QpSK4%AH)M#o+8l3ESE)fd7|-LQjfmgO;bO-a3LyTg=NB1)E6S-u7Xrnlx&?Y8G0)xMRYGQUTooC^cVFX$h2IGzsIY9U>9 zBZ~XJv$BOWfEKVz4SKRI_fbr}`n;M$W5;?@Z~7Csz`SlX8>KTxFHj;OMd#Sr2ra>Y zIf=!zYd@H5Qb3EOQE5_24PaJdighIwzwPQKf|$R;){;enef7XT(~kJe?{Xh8G|x#B znRen`!?NN~3L?-T0ItnD^ihgyi#$|3-Xb=-lZ;T^4J47m8Mw@O1N!z1rw#6&zC#6D z5#~+v^Eu{58mxVJgd6X3pX1~*_!IW>*I92F3}-Op2BssbC#L#D{Jk!hC*r+@jWKvamG(EhXIQ_qbD>0* z&k)0oq_LUbza)#L4dyT90?T3**+bdW6vgKHLOqFqL00*0m~XdYzi*HU$!8ZtC?F7h%>UdV zwLpIxzZQTTojzKdIkLIgSTE`7*)H(nd9RdVsT_`~Ytk+o zs}PHW0DO*wKHi-&?SGhSa7x3a!5+EX5C|5|ad5Fufczi;2g!OL1wq@Kjmcw(wssrt z*M5>7Pkz((a+LWD|H_US`VQKj>Jh$T()XMywaQF_3fJFJ&QCJBsb$JX%kG*8W}j zCz0Li5_P>7g!X7!cs~}2Ff6d_YdjB~PSoBg;dAn4d{E++Irb|A3RELUEnoTobCX;eB2nL2;XIy`&XL2;8G?pQkvy*rdK(laCz ze)z!-Cw`Y@OWHkUH|xEQE%MxEMJc`ra8l}nCx_Ga##(1WC5=y`F#8<*QY-g%IOAJK zGbD*-LrtMiQ9eaHz?;99pyh3$j9oEnKftV6SD4M2*1gefVXqNS;Mq3PpbU{$-c(FJaIXZF+K zm$)@#zgd~qaHD+s05{@u6*f&`FbngzZdy#Sbsm?ind@*shyfQ2_QhKwNUh+6HxSzy z=^bxAvQ#JQ1Lj)S|D0MM*@rNgOyvn2d849qcw3+BO3V}##6K9KIQmKzOA~*h8nR+R zSdW<%!Er(~nV~qG<>{Lv>ZMsh>YXLvoZgyY{URH82PqAV+FcOY;P41>)C#~g8~XV3 zhtcrmzTuDL@Tl#ym4sk(eLg3GR{$Drd3)YaRdPhOrQ8X1NQKoLs<^}(iHa)}RpMv| z8h0s0oJC1g#%3Z;42L;qc&NaDD;J$>L~ZI>75y$wRzI2-!6pYoJxM2}G9M+r6o(dE zjJ7sEJ{wT)l42=Rq3zSmW#bY)?qfD-&ON4ESv_JU&q>F+cB!#Yu0O%q43L^MnjUf+ zf@i+IZ=v~VpX;}RJvEhNC^Uqli&`T$-)6%hu+1pdp!-aXiZC0`o=#sqNYH7XzYhH& z>!5!tvcy;}1Dh<$EQU*VMks}g?a~L#?68;bw-+zEHdDzb$TZm+9ei9n z^+LvLW{*E0MS4uUu`0xg%K(BbH8gj0i_CVW4T4%?p=O{|(E zjbxpnq8)uB3C1PI7a+a#?bApInxK2IlyJpyrKRuhT}{W>NEbys+Qm9jTF1D)z*;;G zq`+iq_eCM}pb~yl=TMkh0M6nx;-kEa1+9uxARR4Q3@F z-26;egF`YH#GTlTQ}ctvPxYXgAAM8nDP2p)&U}wc6xJ4L?RMk4daGK`({^aEv|f1D z<5p3Ep?S(0k&(r9hme;GAX)FwAG{ULBojk7z)?M`Vd|k>%Mefa(zsI&^L6L=yN8+Q zC+Hr9q4yEdHw;TXB_@C+Td4X_1Y-oH+wDuF9_4BLMLXTO<#gm2omV}Sx-1w{7hG;v zH?k}*#-wBR;$*UK5l0_p2}(choHpOZfh99qQHr4+r!;$9Swo8xjH1P3_l%+N5BYm7 zt^DP_&osH7&$TAM7ovOhU2f9{PXN|Y`P`C&Vx~zHbPnS+aheEN_$OM7LF6$ zgcbDKy2LdTAkOCja$NBtxDhuRBT}CrHekv`1;TUU@dQueF9ly9iL!6JqDda_cF@=K zTjtT}+Sf0njb7dTG$eLy3CK^yOZzZwaHdy5gx$IO#1b@B<;tIQ9Jw5a+6>!u_e2t) ze!^4@CR@^`Y#ksjvlq`asMYvFtqGzf5vFp&OJ0 zN75=cwF;`SH=&-Vlu%7B7KMd{akUD(lL_si;m%@*)3JTkrHRDhU-DTV%j{nJk~==~ zkrk4H_(`SgwrI3bli2E`mB!RMSBGAwz(L7M=x~eAH?Fct#C0BWNLGiD!(6pBCzhdLq;E2`P_@J=NV; z{5gEf9R}=1psD`PRqf!apM|s&N|$Fe`olk<32PS`M8nEI#=F2?316B%H$@&7^|_Ji zw=#WM&MP4ZEA%11Kf_;lEpzg|7TYU%MEKoTJ(hF`MsW~9pdI@EX{=BgLJC07HA@iB zTdXx}aHdKS>>=P^Ke>QON;6ki8YC6?-t^V@m2!xi_?MHD29E&ceF{d2UZhlPa^ zE?a8}tW$MB>@B>}lv0aq&5IC&^;>UT{WAHNX?JYa?p+bEA-A0VsbN$H zvI@P$yEwv^-2ox%bTHp76wv_KzT`!l&sgh+)!Tz(L$TV^Rg$8H`cvDf!9(sMksIu% zyM&S!m$*9d`@0K=Dw2KYZSX=HEM$w(IaTh{-sEYu%Y(D#af~J@KM1n~N@{8yX4zVu z8+7EaTn`+HXetHfo#?wtE&aB($AeF+CM`dn8;(?XZVMqX;lcU`)EolxEg0SM6z96~ zjm1xBXL@a}b^}Ec={MvVKP32uNq*#ebY5qQrTnP$rp`!vI5&LQ00s1lUag|IH&q*_ zw#x55&*XIaNgfFiK5>~fO+~@~T7whFf6JiW)@J}Z0_ z8zM^h>?D!?Fw8;dmgE*-bfp*>kYHxJPEf&&8R7A>Fq)5-1bUHXaprrYDVMc@HIfh3%9TUiKgXJ*dWwTjVI z_4`TDt$UYL_fzNNLf**;MH?mXG^aF;tr|Vsd;I*2LH1x%))aUM;wSSl2w@sc=a9Cd zg1Dpee+7xI=fFiX`(dy<*>0@~Ig0x-e=nBuia$#ajOJ9ZQ3Ep>ipow6! zAAQnV?Uy&iS;Ss_-!UIz_Z;6Yy~k2EI7`(oWWpaH0pQVg5wtR35aLboTmDpd%qkd4*f=vfJKUNrjIV}MGZ4tW3n=H49XLax*JhqwEznk>2vZRu73ij~HnR8`cOw*7iPz0 zd->W-Lu7&+tO^g0>Z$0P(?1$0jvg;tdNI2I()SSi7AIIWP7kKq5(pC9dB=_pxRQ+u z)nFInbM8%|M%I)NBai%o`7Dwo(77nv2)F%{GbK zvb)>6m}=aY+daC%QTxn$fQh%AG$tA4ULy=4k%?I;JlwU!|LgA|FA!u0<_s2E{j@j(9(kp7wHZ&VHhf`ej9;Qo@2(4gt!e`Spl zBZU$AgDQyQQT)Fu{t<2edtJ;C8Wihq!3DoSLfp3y2X+Ay?( zmlUG)_X9!uZ_uw90(4CBueW$CNeY7wMU|re^Yk}*K2)5)WEB>85D5Pt5o%CXDTZgg IqQAla0~5wODF6Tf diff --git a/twiddle.hpp b/twiddle.hpp index 0c0075d..8576826 100644 --- a/twiddle.hpp +++ b/twiddle.hpp @@ -58,7 +58,7 @@ static_assert(from_xy(0b000, 0b110) == 20); static_assert(from_xy(0b000, 0b111) == 21); template -void texture(T * dst, const T * src, const uint32_t width, const uint32_t height) +void texture(volatile T * dst, const T * src, const uint32_t width, const uint32_t height) { for (uint32_t y = 0; y < height; y++) { for (uint32_t x = 0; x < width; x++) { diff --git a/vga.cpp b/vga.cpp index efb8254..0e1d8ae 100644 --- a/vga.cpp +++ b/vga.cpp @@ -146,7 +146,7 @@ void vga() void vga_fill_framebuffer() { - volatile uint16_t * vram = reinterpret_cast(texture_memory); + volatile uint16_t * vram = reinterpret_cast(texture_memory32); for (int y = 0; y < 480; y++) { for (int x = 0; x < 640; x++) { struct hsv hsv = {(y * 255) / 480, 255, 255};