From 9737391b9f3d1bd1a0106ef691c1699b11278623 Mon Sep 17 00:00:00 2001 From: neauoire Date: Fri, 4 Aug 2023 11:40:24 -0700 Subject: [PATCH] Implemented total sprite flipping in bliting --- build.sh | 5 +- etc/pict.tal | 473 +++++++++++++++++++++++++++++++++++++++++++ src/devices/screen.c | 22 +- src/uxn11.c | 4 +- 4 files changed, 489 insertions(+), 15 deletions(-) create mode 100644 etc/pict.tal diff --git a/build.sh b/build.sh index 3763679..0757d62 100755 --- a/build.sh +++ b/build.sh @@ -46,6 +46,7 @@ fi if [ "${1}" = '--norun' ]; then exit; fi -bin/uxnasm etc/mouse.tal bin/mouse.rom -bin/uxn11 bin/mouse.rom +# bin/uxnasm etc/mouse.tal bin/res.rom +bin/uxnasm etc/pict.tal bin/res.rom +bin/uxn11 bin/res.rom diff --git a/etc/pict.tal b/etc/pict.tal new file mode 100644 index 0000000..4a26315 --- /dev/null +++ b/etc/pict.tal @@ -0,0 +1,473 @@ +( GUI Picture ) + +|00 @System &vector $2 &wst $1 &rst $1 &eaddr $2 &ecode $1 &pad $1 &r $2 &g $2 &b $2 &debug $1 &halt $1 +|20 @Screen &vector $2 &width $2 &height $2 &auto $1 &pad $1 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1 + +|0100 + + ( theme ) + #f0f5 .System/r DEO2 + #f00c .System/g DEO2 + #f00a .System/b DEO2 + + ( #0010 + DUP2 .Screen/x DEO2 + .Screen/y DEO2 + ;akane20x10 #20 #10 #01 draw-icn ) + + .Screen/width DEI2 #01 SFT2 .Screen/x DEO2 + .Screen/height DEI2 #01 SFT2 .Screen/y DEO2 + #1010 ;dafu10x10 #05 draw-fast + + .Screen/width DEI2 #01 SFT2 .Screen/x DEO2 + .Screen/height DEI2 #01 SFT2 .Screen/y DEO2 + #1010 ;dafu10x10 #1a draw-fast + + .Screen/width DEI2 #01 SFT2 .Screen/x DEO2 + .Screen/height DEI2 #01 SFT2 .Screen/y DEO2 + #1010 ;dafu10x10 #2f draw-fast + + .Screen/width DEI2 #01 SFT2 .Screen/x DEO2 + .Screen/height DEI2 #01 SFT2 .Screen/y DEO2 + #1010 ;dafu10x10 #3b draw-fast + + + + ( .Screen/width DEI2 #01 SFT2 .Screen/x DEO2 + .Screen/height DEI2 #01 SFT2 .Screen/y DEO2 + #1010 ;dafu10x10 #3f draw-fast + + .Screen/width DEI2 #01 SFT2 .Screen/x DEO2 + .Screen/height DEI2 #01 SFT2 .Screen/y DEO2 + #1010 ;dafu10x10 #3f draw-fast ) + + + +BRK + +@draw-icn ( addr* width height color -- ) + + #05 .Screen/auto DEO + ,&color STR + ,&height STR + ,&width STR + .Screen/addr DEO2 + .Screen/x DEI2 + ,&x STR2 + [ LIT2 00 &height $1 ] SUB + &ver + [ LIT2 &x $2 ] .Screen/x DEO2 + [ LIT2 00 &width $1 ] SUB + &hor + [ LIT &color $1 ] .Screen/sprite DEO + INC DUP ?&hor + POP + .Screen/y DEI2k #0008 ADD2 ROT DEO2 + INC DUP ?&ver + POP + #00 .Screen/auto DEO + +JMP2r + +( makes use of the auto byte ) + +@draw-fast ( w h addr* color -- ) + + ,&color STR + .Screen/addr DEO2 + SWP #01 SUB #40 SFT #06 ORA .Screen/auto DEO + #00 SWP SUB + &loop + [ LIT2 &color $1 -Screen/sprite ] DEO + INC DUP ?&loop + POP + +JMP2r + +@akane20x10 + 0000 0000 0000 0000 2b41 2341 2b41 2341 + 8881 8081 8880 8080 0a00 2000 8800 2000 + 8004 2004 8804 2a04 0000 0000 8000 0000 + 0307 0f0f 0f1f 1f5f ffff ffff ffff ffff + ffff ffff ffff ffff ffff ffff ffff ffff + ffff ffff ffff ffff ffff ffff ffff ffff + ffff ffff ffff ffff ffff ffff ffff ffff + ffff ffff ffff ffff ffff fff7 ffff efdf + fbf7 efd7 efdf af5f fffd fbfd fbf5 ebd7 + eaf5 ead5 ead5 aa55 ab55 ab55 ab57 ab57 + fbf7 ebd7 ebd7 ab57 ffff ffff ffff fbf7 + ffff ffff ffff ffff ffff ffff ffff ffff + ffff ffff ffff ffff ffff ffff ffff fefc + 80c0 8000 0000 0000 0000 0000 0000 0000 + 0000 0000 0000 0000 2a54 2a54 2a54 2a54 + 8800 2200 8800 2200 8800 2200 8800 2200 + 0000 0000 0000 0000 2b41 2341 2b41 2341 + 8880 8080 8880 a080 8800 2000 8800 2000 + 8a05 2a05 8f0f 2a15 aa55 aafd ffff aa45 + bf7f ff7f ffff ffff ffff ffff ffff ffff + ffff ffff ffff ffff ffff ffff ffff ffff + ffff ffff ffff ffff ffff ffff ffff ffff + ffff ffff ffff fefd ffff ffff ffff be7c + ffff ffff 8a00 0200 befd fafd fe1f 2307 + bf5f bf7d bad5 eaf5 ead5 aa55 aa55 aa55 + aa55 aa55 aa55 aa55 aa55 aa55 aa55 ab57 + af57 af7f ffc5 a307 fbf7 ff9f 1f1f 8f9f + ffff ffff ffff ffff ffff ffff ffff ffff + ffff ffff ffff ffff fefd faf5 eaff ff5f + 0055 aa55 aaff ffff 0055 aa55 aaff ffff + 0055 aadf aaff ffff aa55 aad5 aaff ffff + 8840 aa77 aaff ffff 8800 aaff aaff ffff + 0000 0000 0000 0000 2b41 2341 2b41 2241 + 8800 a000 8800 a004 8804 2004 8000 2240 + 8810 0810 a010 2010 0200 0000 0000 0000 + bf3f 3f1f 0f07 0303 ffff ffff ffff ffff + ffff ffff ffff ffff ffff ffff ffff ffff + ffff ffff ffff ffff ffff ffff ffd7 ab55 + faf5 faf5 eaf5 eaf5 f870 e240 8840 8240 + 8800 2200 8841 233f 8f1f 3f7f ffff ffff + fadd eac1 e2c1 c2c1 aa55 aa55 aa55 aa55 + aa55 aa55 aa54 a040 ae54 a854 a855 2f07 + 8f1f 1f3f bfff ffff 8f87 8f85 8205 2a05 + ffdf af5f bf7f bf77 ffff ffff ffff ffff + fefd f8c0 80c0 80c0 aa55 2a15 0a15 0a15 + ab55 8000 8000 8000 fe55 0200 0800 2200 + aa55 2200 8800 2200 eb77 2a54 2a54 2a54 + ff55 2000 8800 2000 ff55 0000 0000 2000 + 0000 0000 0000 0000 2a41 2241 2b41 2341 + 8804 a004 8004 a004 0840 aa40 8850 8210 + a010 2040 a040 2040 0000 0000 0000 0000 + 0301 0000 0000 0000 ffff ff7f 7f3f 3b07 + ffff ffff ffff ffff ffff ffff ffff ffff + feff fefd fefd fefd aa55 aa55 aa55 aa55 + eaf5 fafd fafd fefd 8840 a250 a854 aa54 + bf1f 2f07 8800 8055 ffff fefc e800 0a54 + 8201 2000 8000 8010 aa54 2800 0000 0000 + 0000 0000 0000 0000 0301 0000 0000 0200 + fefc fa70 8801 aa50 8a05 0a05 0201 0303 + ef57 af5f af5f bf7f ffff ffff ffff ffff + c0c0 a2c0 8880 a280 0a15 0a15 8a15 0a15 + 0000 0000 8000 2000 0800 0200 0800 2000 + 0800 2200 8800 0000 2a54 2a55 2a55 2a57 + 8800 2000 a0ff ffff 8000 2000 a8ff ffff + 0000 0000 0000 0001 ab41 a341 ab5f ffff + 8004 a804 8eff ffff 8010 a200 a0c0 e2c1 + 8040 80c0 80c0 8000 0000 0000 0000 0000 + 0000 0000 0000 0000 0301 0101 0000 0000 + ffff ffff ff7f 1f0f ffff ffff ffff ffff + fefd feff feff ffff aa55 aa55 aa55 aad5 + feff feff fe7f fe7f aa54 aa55 aa55 aa54 + 0000 0000 0000 0000 0000 0000 0000 0000 + 0800 0000 0000 0000 0000 0000 0000 0000 + 0000 0001 0205 0a05 8040 2040 e070 e040 + 0000 0000 0000 0000 0307 0307 0707 0f07 + ffff ffff ffff ffff ffff fefc fefc fcfc + 8207 3f7f 7f7f 7f7f 8aff ffff ffff ffff + 08c0 faf8 fcfc feff 8800 2000 8800 2000 + 0000 2000 0000 0000 2b57 2f57 2b55 2a54 + ffff ffff ffff ffff ffff ffff ffff ffff + 0b03 0307 0707 0f1f ffff ffff ffff ffff + ffff ffff ffff ffff e0f1 f9f1 faf3 faf7 + 8000 0000 0000 0000 0000 0000 0000 0000 + 0000 0000 0000 0000 0000 0000 0000 0000 + 0707 0301 0000 0000 ffff ffff ff7f 3f1f + ffff ffff ffff ffff eaf5 fafd feff ffff + fe7d be7f be7d ffff aa54 aa54 aa54 aad5 + 0000 0000 0000 0000 0000 0000 0000 0000 + 0000 0000 0000 0000 0000 0000 0000 0000 + 0201 0000 0000 0001 e040 0000 0000 0040 + 0000 0000 0000 0000 0f07 0f07 0f0f 0f1f + ffff ffff fffe fcfc f8f0 c280 0800 2200 + be7f 3e15 8a01 2205 ff5f af55 ab55 ab55 + feff ffff ffff bf7f 8000 2000 8800 a201 + 8800 2000 0000 00f7 2854 2854 2854 28f4 + ff7f bf57 af5f 2f57 ffff ffff ffff ffff + 0f1f 0f07 0707 0707 ffff ffff ffff ffff + ffff ffff fefd faf5 e2c4 8604 8844 a854 + 0000 0000 0000 0000 0000 0000 0000 0000 + 0000 0000 0000 0000 0000 0000 0000 0000 + 0000 0000 0000 0000 0f03 0100 0000 0000 + ffff ff7f 0f07 0a05 ffff ffff ffff ff7f + ffff ffff ffff ffff eaf5 fafd feff ffff + 8000 8040 a0d0 e8d4 0000 0000 0000 0000 + 0000 0000 0000 0000 0000 0000 0000 0000 + 0200 0000 0000 0000 8000 0000 0000 0000 + 0000 0000 0001 0305 0f1f 3f7c f8f0 8201 + e8c4 2a11 a840 a200 8800 2200 2005 2000 + 8215 2e57 2a55 aa55 aa55 aa55 aa55 3a15 + fe7c f8f0 e840 a250 0307 2f1f 8f1f 2f0f + ffff ffff ffff ffff f8fc fefc feff fef0 + ab57 2b15 0a55 0a01 ffff feff ea55 8040 + 0301 0005 aa10 0805 ffff ff5f aa05 2000 + eaf5 ead5 aa55 aa41 8810 b810 2070 2040 + 0000 0000 0000 0000 0000 0000 0000 0000 + 0000 0000 0000 0000 0000 0000 0204 0a10 + 0000 0000 a805 2200 0000 0000 0040 2805 + 0a05 0a10 2a41 a200 af57 a840 8844 0a10 + ffff ff7f 8f01 2004 ffff ffff ffff ff7f + aed5 aad5 aad5 aad5 80c0 a85d ab55 aa55 + 0000 0000 a054 aa55 0000 0000 0000 a055 + 0000 0000 0000 0045 0000 0071 fa7c faf0 + 0810 a240 0800 2001 0a04 0254 a850 8200 + 0800 2200 8800 2200 8800 2200 8804 2a00 + 8a05 2201 8a01 2001 a8d0 a0c4 8a54 a040 + 2801 2000 8800 0250 8f01 8240 a011 2211 + af55 a040 8051 a815 e0c0 c240 8800 a200 + 0840 2200 aa10 2214 2a05 2000 8800 2200 + 8a00 2000 8000 2200 2a00 2200 8800 2200 + a214 2301 8000 2210 e040 80c0 6070 2010 + 0000 0000 0000 0000 0000 0000 0000 0000 + 0000 0001 0204 0814 2840 a200 8800 2200 + 8800 2200 8800 2200 8b10 2240 0800 a200 + a855 2200 8800 2200 2040 a240 a810 2a04 + 8810 2200 0845 a800 bf7f 3a11 3805 2301 + aa55 aa55 aa55 aa55 aa55 aa55 aa55 aa55 + aa55 aa55 aa55 aa55 aa55 aa55 aa75 fa7f + ef75 bb5d bb5f bb5f f8f8 fafc f8fc fcfc + 8800 2201 8801 2201 0800 2200 0801 2204 + 8800 2200 0850 2800 8010 0240 a810 2210 + 8a01 2000 8800 2200 0800 a200 8800 2240 + a840 2200 a800 2200 8801 2a04 8805 2204 + 8add aa45 8a14 2015 8800 a200 8800 a280 + 8804 2804 8004 2204 8800 2200 8800 2200 + 8800 0200 8840 0240 8800 2200 8800 2001 + 8800 0240 8800 2200 b010 1810 b810 1810 + 0000 0000 0000 0000 0000 0000 0000 0001 + 0810 2240 8800 a200 8800 2200 8800 2201 + 8801 2241 8a00 a204 8800 2200 8800 2200 + 8800 2200 8800 2200 8a00 2201 8800 2200 + 8a01 2200 0800 a200 0a05 aa75 aa05 2201 + aa55 aa55 aa55 aa55 aa55 aa55 aa55 aa55 + aa55 aa55 aa55 aa55 bf7f bf5f af47 8301 + bbd7 fbf1 f8fd feff fefc fefc fefe fefe + 8801 2241 2a05 2200 0040 8200 8800 0200 + 0000 a204 a840 2200 0a50 8200 8800 2200 + a010 2200 8801 2200 8800 2200 2800 a240 + a800 2205 8205 2205 8a04 2254 a855 ab55 + 3e15 2a75 ead5 aa55 82d5 ea75 aa75 aa75 + a85c aa50 a850 aa50 8800 2200 8800 2200 + 0800 a200 8800 a200 8a01 2000 8801 2001 + 0800 2200 8800 2200 8810 2810 8814 2804 + 0000 0000 0000 0000 0204 0004 0810 0210 + 8800 2200 8800 2200 8801 2001 8801 2200 + 0804 2a00 0810 a200 8800 2200 8800 2200 + 8800 2200 8800 2200 8800 2200 8801 2200 + 0840 0240 a800 a210 8800 2200 8800 2200 + 2a14 2200 8800 2200 aa00 8040 a804 2200 + a800 0000 0000 8050 0000 0000 0000 0001 + ff7f 3f1f 3f71 8200 feff feff ffff ff7f + 8800 2200 88f0 fafc a804 2200 aa11 0210 + 8800 2200 0800 a200 8800 2200 8800 2200 + 8800 2200 8800 2200 0840 2240 a800 221f + 8a01 2205 8205 befd a850 a854 a855 a955 + ff7f ffdd badd ba5d eaf5 ea75 ea75 ead5 + a850 aa50 a850 a250 8800 2a04 8a00 2200 + 0800 0250 0800 0254 8011 2200 8800 2201 + 0800 2055 aa55 aad5 8810 2040 a040 a040 + 0000 0000 0000 0200 2800 2240 0840 0240 + 8800 2200 8800 2200 8800 2200 8800 2200 + 8800 2200 8800 2200 8800 2200 8800 2200 + 8800 2200 8800 2200 8800 2200 8800 2200 + 0850 2210 881c 2804 8800 2200 8800 2200 + 8800 2200 8800 2200 8800 2200 8800 2200 + 8a05 2200 8004 0f1f 0244 a818 9810 b2f0 + 8800 2200 8800 2200 bf1f 2f1f 8f0f 2f07 + feff ffff ffff ffff 0090 e2f0 e0f0 f8fc + 8840 2200 a800 2210 8800 2200 8800 2200 + 8800 2200 8800 2200 9f1f 2f0f 8f07 2305 + fefd fefd fefd fefd ab51 aa57 aa57 ae55 + ba5d ba55 aa55 aa55 ead5 ead5 aad5 aad5 + a857 bf7f ff7f ffff afff ffff ffff ffff + 80f5 ffff ffff ffff 8855 faf0 f8f8 f8fd + aad5 aa55 2a55 2a55 a075 aa40 a040 a055 + 0850 aa01 0201 0055 0840 8240 2800 2270 + 8800 2200 8800 2200 8800 2200 8800 2200 + 8800 2200 8800 2200 8800 2200 8800 2200 + 8800 2200 8800 2200 8800 2200 8800 2200 + 8a01 2001 8800 2200 8800 a2c0 a850 2834 + 8800 2200 8800 2200 8800 2200 8800 2200 + bf7f ff7f ff7f 7f7f e8f0 e2f0 f0f0 fafc + 8800 2200 8800 2200 8f0f 2f1f 9f1f 3f7f + ffff ffff fffd fefd fcfd fef5 aa55 ab57 + 0050 e0f1 fafd eed5 0874 ae57 af5f be5d + 8800 22c0 b85c aa5c 8a04 2200 8800 2200 + fe7d 3e3d be1d 2e05 ae55 ae55 ae7d ee5d + ab55 ab55 ab57 aa57 aa55 ab55 ab57 ab57 + ffff ffff ffff ffff ffff ffff ffff ffff + ffff ffff ffff ffff ffff ffff ffff fefc + ead5 eaf5 eaf5 aa15 bf5f bf5f bf5d aa51 + feff ffff ff75 aa40 e8f0 eae4 e064 a210 + 8800 2200 8800 2200 8800 2200 8800 2200 + 8800 2200 8800 2200 8800 2200 8800 2201 + 8800 2005 8810 2200 8800 8200 8800 2200 + 8800 2200 8800 2200 ba14 2a05 8607 2301 + 0800 2210 0804 a200 8800 2201 8a04 2850 + 7f7f ff7f 3f1f 3f1f fcfe ffff ffff f8fc + 8801 8fff ffff fe7d ffff ffff ebd7 af57 + feff ead7 abd5 aa55 ab55 aa55 ab75 faf5 + aed7 aa57 fa50 a0c1 be5f fa50 0000 0255 + b878 f87c 2f17 aa40 8800 2200 8840 2010 + 8a05 2a05 0a1d 0a1d ae5d ae5d ae5d ee5d + aa55 ae55 aa5d ba55 af5f ab5f bb77 ab77 + ffff ffff ffff ffff ffff ffff ffff ffff + ffff ffff ffff ffff fefc fefc fefc feff + 0a15 0a05 0a05 0255 a850 a850 a850 a854 + 8040 0000 0800 0814 2211 2010 2010 2210 + 8800 2200 0800 2200 8800 2200 8800 2200 + 8800 2200 8800 2200 8a04 2a10 a840 0200 + 0800 2200 8800 2015 8800 2200 8800 a800 + 8800 2200 8800 2240 8801 2201 8801 2001 + 88c0 aad5 aad5 aa55 2000 ba55 aa55 aa57 + 8f1f af5f afff bf7f fafd fcfc faf5 faff + 3a55 0e07 0301 80c0 aa55 eaf5 fbff ff7f + aa55 ab7f ffff ffff fb75 f8f0 e0c0 80c0 + 8a14 0800 0000 0000 aa00 0000 0000 0000 + 0004 0201 0001 0001 2010 2040 8880 a001 + 3e15 2040 e0f4 feff ef55 0000 0000 80d0 + fa55 0a15 0a15 0a15 bf77 a347 a347 83c7 + ffff ffff ffff ffff ffff ffff ffff ffff + ffff ffff ffff ffff ffff ffff ffff ffff + feff feff ffff aad5 af57 af57 ab57 ab55 + ffff ffff ffff aa55 e8f0 e2e0 e8e0 a240 + 8800 2200 8800 2200 8800 2200 8800 2200 + 8801 2204 8000 2810 0800 2204 8810 2240 + 2040 2200 8800 2200 8800 2200 8800 2200 + 8000 2a04 8a00 2211 8a07 2e0d 8a1d 3a7d + aa55 aa55 aa55 aa55 ae55 af57 ab55 abff + ffff ffff ffff ffff ffff ffff ffff ffff + e0c0 e0f0 f8f0 f8f0 3f1f 0f07 0301 0001 + ffff ffff fefe fefc 8000 8000 0000 0000 + 0000 0000 0000 0000 0000 0000 0000 0000 + 0001 0001 0000 0000 8303 8343 8343 8343 + ffff ffff ffff ffff faff ffff ffff fbf7 + bafd ffff bfdf ff5f ef7f ffff af5f af5f + ffff ffff ffff ffff ffff ffff ffff ffff + +@dafu10x10 + 0000 0000 0000 0000 0000 0000 0000 0000 + 0000 0000 0000 0000 0000 0000 0000 0000 + 0000 0000 0000 0001 0000 0000 010f 7fff + 0000 002f ffff ffff 0000 00fd ffff ffff + 0000 0000 e0fc ffff 0000 0000 0000 00e0 + 0000 0000 0000 0000 0000 0000 0000 0000 + 0000 0000 0000 0000 0000 0000 0000 0000 + 0000 0000 0000 0000 0000 0000 0000 0000 + 0000 0000 0000 0000 0000 0000 0000 0000 + 0000 0000 0000 0000 0000 0000 0107 071f + 071f 3fff fffc f3cf ffff f8c7 3fff ffff + e82f fbfb fbfb fbfb 02ff ffff ffff ffff + bf41 feff ffff ffff fcff 1fe3 fcff ffff + 00d0 fcff 7fd2 ffff 0000 00c0 f0f8 5efe + 0000 0000 0000 0000 0000 0000 0000 0000 + 0000 0000 0000 0000 0000 0000 0000 0000 + 0000 0000 0000 0000 0000 0000 0000 0000 + 0000 0103 0f1f 3f7e 5f7e f9f3 cf9f 7fff + 3f7f ffff ffff ffff ffff ffff ffff ffff + f9fb fbf9 fdf9 fdfd ffff ffff ffff ffff + ffff ffff ffff ffff ffff ffff ffff ffff + ffff ffff ffff ffff ffff ffff feff fefe + 0000 0000 0000 0000 0000 0000 0000 0000 + 0000 0000 0000 0000 0000 0000 0000 0000 + 0000 0000 0000 0000 0001 002f 1f1f 1f1f + e907 ffff ffff ffff ffff ffff ffff ffff + ffff ffff ffff ffff ffff ffff ffff ffff + fdfd fdfd fcff fd45 ffff ffff ffff ed37 + ffff ffff ffff b76c ffff ffff ffff ff0b + ffff ffff ffff ffff fefc fcfc f8fc f8f8 + 0000 0000 0000 0000 0000 0000 0000 0000 + 0000 0000 0000 0000 0000 0000 0000 0000 + 0000 0000 0000 0000 1f1f 1f0f 0f07 0703 + ffff ffff ffff ffff ffff ffff fffe fdf5 + ffff fceb 8fbf 7fff f48b 7fff ffff ffff + bffe fefa f8fc fdff ffff 7f3f 3f7f bfff + ffff ffff ffff ffff f8ff ffff ffff ffff + 7fd7 ffff ffff ffff f0f0 f0e0 e0e0 e0e0 + 0000 0000 0000 0000 0000 0000 0000 0000 + 0000 0000 0000 0000 0000 0000 0000 0000 + 0000 0000 0000 0000 0301 0100 0000 0000 + ffff fffc 7d33 3f1f ef9f 7fff ffff ffff + ffff ffff ffff f4cb ffff ffff e807 ffff + ffff ffa0 00c0 0197 ffff 5007 1f03 5eff + ffff a5ff ff6d bfff ffff 4de8 ff7f 6fff + ffff ffbf a7fe fefe f0e0 f0e0 f0e0 b0d0 + 0000 0000 0000 0000 0000 0000 0000 0000 + 0000 0000 0000 0000 0000 0000 0000 0000 + 0000 0000 0000 0000 0000 0000 0000 0000 + 1f0f 0f0f 0f0e 0e12 fefa f5cf bfff ffff + 3fff ffff ffff ffff ffff ffff ffff ffff + f8e0 e0c0 e040 c040 7f7f 5f2f 7b1b 0f0f + ffff ffff ffff ffff ffff ffff ffff ffff + ffff fcfd fbf5 f9d4 50f0 f0e0 f0f0 e060 + 0000 0000 0000 0000 0000 0000 0000 0000 + 0000 0000 0000 0000 0000 0000 0000 0000 + 0000 0000 0000 0000 0000 0000 0000 0000 + 1a1a 150f 0d07 1100 7fff ffff fdff ffe1 + ffff ffff baff ff55 ffff ffaa fdff fe00 + c040 d708 f0eb a800 0fa6 7f2f 3fd0 021a + d7bf fff7 086a b8b0 feff e914 a000 0000 + ab20 e078 0000 0000 e0c0 d6e1 4084 0204 + 0000 0000 0000 0000 0000 0000 0000 0000 + 0000 0000 0000 0000 0000 0000 0000 0000 + 0000 0000 0000 0000 0000 0000 0000 0000 + 0402 010a 0200 0000 7876 39b0 5078 9018 + 0892 71a9 2112 1210 aa00 ff01 7692 0000 + a01e 3628 8488 4484 a5a0 0000 0080 8000 + 2003 070d 3815 0260 feff 7b69 9e60 0000 + 90e0 8080 0000 0000 c004 8020 8890 8888 + 0000 0000 0000 0000 0000 0000 0000 0000 + 0000 0000 0000 0000 0000 0000 0000 0000 + 0000 0000 0000 0000 0000 0000 0000 0000 + 0300 0000 0000 0000 2848 8008 4428 0c04 + 1211 1201 1d14 2a29 1200 0016 dd55 22a9 + 4084 44ca 8a0d 5800 0000 0800 a02e d105 + 1000 0000 0080 6a11 0000 0000 0000 8865 + 0100 0100 0101 005e 2080 2040 4000 0000 + 0000 0000 0000 0000 0000 0000 0000 0000 + 0000 0000 0000 0000 0000 0000 0000 0000 + 0000 0000 0000 0000 0000 0000 0000 0000 + 0000 0000 0000 0000 0600 0a05 0303 0300 + 50a0 8040 8000 8000 0000 0000 0000 0000 + 0000 0000 0000 0000 0000 0000 0000 0000 + ad00 0000 0000 0000 510a 0000 0000 0000 + 2214 0002 0200 0406 0000 0000 0000 0080 + 0000 0000 0000 0000 0000 0000 0000 0000 + 0000 0000 0000 0000 0000 0000 0000 0000 + 0000 0000 0000 0000 0000 0000 0000 0000 + 0000 0000 0021 010f 0407 0812 2e5c de3e + 4000 c060 f0f0 f878 0000 0000 0000 0000 + 0000 0000 0000 0000 0000 502d 0200 157f + 0040 a000 0000 e0f8 0000 0000 0000 0000 + 060f 0f1f 1737 336b a01c e3f0 feff ffff + 0000 407a 05c0 f0fc 0000 0000 807c 0300 + 0000 0000 0000 a05a 0000 0000 0000 0004 + 0000 0000 0000 030c 0001 0514 53a7 0f3f + 265c 5df9 f3e7 c7cf fbfd fbfb fbfb fbfb + 7c7e 7fbf bfff bfff 0000 0090 c0e0 f0f8 + 0101 0101 0001 0020 7fc8 ff1b c6f0 7f78 + fc5c ec08 b858 30e0 0108 0001 0103 0707 + 6b5b dbdf bbbf bb7f ffff ffff ffff ffff + fefe fcfc f9f3 f3f7 6079 fffe fcfc f9f3 + 0540 823f 7fff ffff d02c 03f8 feff ffff + 3040 800e 3f7f ffff 7f7f 7fff 7f7f 7f7f + 9fdf 9f9f df9f 9fdf fbfb fbf3 fbfb fbfb + efff fff7 fffd ffff fefe ffff ffff ff7f + 0000 80e0 f0fc ffff 1f02 0000 0001 01e1 + c000 00a8 b050 590b 0f1f 1e7d 7dff ffff + 7f7f ffff ffff ffff ffff ffff ffff ffff + e7ef cfdf 9f3f 7f3f f3e7 efcf dfbf bf3f + ffff ffff ffff ffff fffe fcf8 f0f0 e0c0 + ffff ffff ffff ffff bfbf bfbf dfdf dfcf + 9fcf 9fcf dfcf dfcf f7fb fbf7 fbfb fbfb + ffff ffff ffff ffff ffd7 f7fd feff ffff + ffff ffff 7f9e e8e0 ffff fff5 8000 0001 + 4f47 66a4 7056 4b43 fffe 8001 015f ffff + ffbf 1f7f ffff ffff fefe fcfe fdf9 fbfb + 7fff feff fefe fcfe 7f7f 7f7f ffff ffff + ffff fffe fefc f8f8 8183 070f 1f3f 3f7f + ffff ffff 7f3f 9f8f efef eff7 f7f7 f7f7 + dfcf efdf cfff cfef fbfb fbf9 fdfd fbfc + ffff fffe f4c0 8000 fffc e080 0000 0000 + 8000 0000 0000 0000 0506 0802 0300 0000 + 4925 2365 a2b2 1191 ffff ffff ff05 0000 + ffff ffff ff7f 0307 fbfb ffff ffff ffff + fcfd fcfe fdfd fdfd ffff ffff ffff ffff + f0e0 e1c3 8387 0f1f ffff ffff ffff fffe diff --git a/src/devices/screen.c b/src/devices/screen.c index 40253c1..9369a33 100644 --- a/src/devices/screen.c +++ b/src/devices/screen.c @@ -184,20 +184,20 @@ screen_deo(Uint8 *ram, Uint8 *d, Uint8 port) Uint8 move = d[0x6]; Uint8 length = move >> 4; Uint8 twobpp = !!(ctrl & 0x80); - Uint16 x = PEEK2(d + 0x8); - Uint16 y = PEEK2(d + 0xa); - Uint16 addr = PEEK2(d + 0xc); - Uint16 dx = (move & 0x1) << 3; - Uint16 dy = (move & 0x2) << 2; Uint8 *layer = (ctrl & 0x40) ? uxn_screen.fg : uxn_screen.bg; + Uint16 x = PEEK2(d + 0x8), dx = (move & 0x1) << 3; + Uint16 y = PEEK2(d + 0xa), dy = (move & 0x2) << 2; + Uint16 addr = PEEK2(d + 0xc); + int flipx = (ctrl & 0x10), fx = flipx ? -1 : 1; + int flipy = (ctrl & 0x20), fy = flipy ? -1 : 1; for(i = 0; i <= length; i++) { - screen_blit(layer, ram, addr, x + dy * i, y + dx * i, ctrl & 0xf, ctrl & 0x10, ctrl & 0x20, twobpp); - addr += (move & 0x04) << (1 + twobpp); + screen_blit(layer, ram, addr, x + dy * i * fx, y + dx * i * fy, ctrl & 0xf, flipx, flipy, twobpp); + addr += (move & 0x4) << (1 + twobpp); } - screen_change(x, y, x + dy * length + 8, y + dx * length + 8); - if(move & 0x1) POKE2(d + 0x8, x + dx); /* auto x+8 */ - if(move & 0x2) POKE2(d + 0xa, y + dy); /* auto y+8 */ - if(move & 0x4) POKE2(d + 0xc, addr); /* auto addr+length */ + screen_change(x, y, x + dy * length * fx + 8, y + dx * length * fy + 8); + if(move & 0x1) POKE2(d + 0x8, x + dx * fx); /* auto x+8 */ + if(move & 0x2) POKE2(d + 0xa, y + dy * fy); /* auto y+8 */ + if(move & 0x4) POKE2(d + 0xc, addr); /* auto addr+length */ break; } } diff --git a/src/uxn11.c b/src/uxn11.c index 2f62325..ac8e618 100644 --- a/src/uxn11.c +++ b/src/uxn11.c @@ -76,8 +76,8 @@ emu_deo(Uxn *u, Uint8 addr) } int -emu_resize(int width, int height) { - +emu_resize(int width, int height) +{ } static int