mirror of
https://github.com/RaySollium99/picodrive.git
synced 2025-09-05 23:37:46 -04:00
updated s/h arm asm code. Untested.
git-svn-id: file:///home/notaz/opt/svn/PicoDrive@635 be3aeb3a-fb24-0410-a615-afba39da0efa
This commit is contained in:
parent
299acadc74
commit
bfa124288c
2 changed files with 53 additions and 45 deletions
16
pico/draw.c
16
pico/draw.c
|
@ -17,6 +17,13 @@
|
||||||
* "sonic mode" is autodetected, shadow/hilight is enabled by emulated game.
|
* "sonic mode" is autodetected, shadow/hilight is enabled by emulated game.
|
||||||
* AS is enabled by user and takes priority over "sonic mode".
|
* AS is enabled by user and takes priority over "sonic mode".
|
||||||
*
|
*
|
||||||
|
* since renderer always draws line in 8bit mode, there are 2 spare bits:
|
||||||
|
* b \ mode: s/h as sonic
|
||||||
|
* 00 normal - -
|
||||||
|
* 01 shadow - pal index
|
||||||
|
* 10 hilight+op spr spr pal index
|
||||||
|
* 11 shadow +op spr - pal index
|
||||||
|
*
|
||||||
* not handled properly:
|
* not handled properly:
|
||||||
* - hilight op on shadow tile
|
* - hilight op on shadow tile
|
||||||
* - AS + s/h (s/h sprite flag interferes with and cleared by AS code)
|
* - AS + s/h (s/h sprite flag interferes with and cleared by AS code)
|
||||||
|
@ -505,8 +512,8 @@ static void DrawWindow(int tstart, int tend, int prio, int sh) // int *hcache
|
||||||
|
|
||||||
if (prio) {
|
if (prio) {
|
||||||
int *zb = (int *)(HighCol+8+(tilex<<3));
|
int *zb = (int *)(HighCol+8+(tilex<<3));
|
||||||
*zb++ &= 0x3f3f3f3f;
|
*zb++ &= 0xbfbfbfbf;
|
||||||
*zb &= 0x3f3f3f3f;
|
*zb &= 0xbfbfbfbf;
|
||||||
} else {
|
} else {
|
||||||
pal |= 0x40;
|
pal |= 0x40;
|
||||||
}
|
}
|
||||||
|
@ -925,10 +932,11 @@ static void DrawSpritesHiAS(unsigned char *sprited, int sh)
|
||||||
|
|
||||||
/* nasty 1: remove 'sprite' flags */
|
/* nasty 1: remove 'sprite' flags */
|
||||||
{
|
{
|
||||||
int c = 320/4, *zb = (int *)(HighCol+8);
|
int c = 320/4/4, *zb = (int *)(HighCol+8);
|
||||||
while (c--)
|
while (c--)
|
||||||
{
|
{
|
||||||
*zb++ &= 0x7f7f7f7f;
|
*zb++ &= 0x7f7f7f7f; *zb++ &= 0x7f7f7f7f;
|
||||||
|
*zb++ &= 0x7f7f7f7f; *zb++ &= 0x7f7f7f7f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -72,7 +72,7 @@
|
||||||
.endif
|
.endif
|
||||||
ldreqb r4, [r1,#\offs]
|
ldreqb r4, [r1,#\offs]
|
||||||
orrne r4, r3, r4
|
orrne r4, r3, r4
|
||||||
andeq r4, r4, #0x3f
|
andeq r4, r4, #0xbf
|
||||||
strb r4, [r1,#\offs]
|
strb r4, [r1,#\offs]
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
@ -163,14 +163,12 @@
|
||||||
.endif
|
.endif
|
||||||
beq 0f
|
beq 0f
|
||||||
cmp r4, #0xe
|
cmp r4, #0xe
|
||||||
ldrgeb r4, [r1,#\ofs]
|
ldrgeb r7, [r1,#\ofs]
|
||||||
orrlt r4, r3, r4 @ normal
|
orrlt r7, r3, r4 @ normal
|
||||||
|
|
||||||
biceq r4, r4, #0xc0 @ hilight
|
bicge r7, r7, #0xc0
|
||||||
orreq r4, r4, #0x80
|
orrge r7, r7, r4, lsl #6
|
||||||
orrgt r4, r4, #0xc0 @ shadow
|
strb r7, [r1,#\ofs]
|
||||||
|
|
||||||
strb r4, [r1,#\ofs]
|
|
||||||
0:
|
0:
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
@ -198,38 +196,41 @@
|
||||||
TileDoShGenPixel 16, 7 @ #0x000f0000
|
TileDoShGenPixel 16, 7 @ #0x000f0000
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
.macro TileDoShGenPixel_noop shift ofs
|
.macro TileDoShGenPixel_markop shift ofs
|
||||||
.if \shift
|
.if \shift
|
||||||
and r4, r12, r2, lsr #\shift
|
ands r4, r12, r2, lsr #\shift
|
||||||
.else
|
.else
|
||||||
and r4, r12, r2
|
ands r4, r12, r2
|
||||||
.endif
|
.endif
|
||||||
sub r7, r4, #1
|
beq 0f
|
||||||
cmp r7, #0xd
|
cmp r4, #0xe
|
||||||
orrcc r4, r3, r4 @ 0-0xc (was 1-0xd)
|
ldrgeb r4, [r1,#\ofs]
|
||||||
strccb r4, [r1,#\ofs]
|
orrlt r4, r3, r4
|
||||||
|
orrge r4, r3, 0x80
|
||||||
|
strb r4, [r1,#\ofs]
|
||||||
|
0:
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
.macro TileFlipSh_noop
|
.macro TileFlipSh_noop
|
||||||
TileDoShGenPixel_noop 16, 0 @ #0x000f0000
|
TileDoShGenPixel_markop 16, 0 @ #0x000f0000
|
||||||
TileDoShGenPixel_noop 20, 1 @ #0x00f00000
|
TileDoShGenPixel_markop 20, 1 @ #0x00f00000
|
||||||
TileDoShGenPixel_noop 24, 2 @ #0x0f000000
|
TileDoShGenPixel_markop 24, 2 @ #0x0f000000
|
||||||
TileDoShGenPixel_noop 28, 3 @ #0xf0000000
|
TileDoShGenPixel_markop 28, 3 @ #0xf0000000
|
||||||
TileDoShGenPixel_noop 0, 4 @ #0x0000000f
|
TileDoShGenPixel_markop 0, 4 @ #0x0000000f
|
||||||
TileDoShGenPixel_noop 4, 5 @ #0x000000f0
|
TileDoShGenPixel_markop 4, 5 @ #0x000000f0
|
||||||
TileDoShGenPixel_noop 8, 6 @ #0x00000f00
|
TileDoShGenPixel_markop 8, 6 @ #0x00000f00
|
||||||
TileDoShGenPixel_noop 12, 7 @ #0x0000f000
|
TileDoShGenPixel_markop 12, 7 @ #0x0000f000
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
.macro TileNormSh_noop
|
.macro TileNormSh_noop
|
||||||
TileDoShGenPixel_noop 12, 0 @ #0x0000f000
|
TileDoShGenPixel_markop 12, 0 @ #0x0000f000
|
||||||
TileDoShGenPixel_noop 8, 1 @ #0x00000f00
|
TileDoShGenPixel_markop 8, 1 @ #0x00000f00
|
||||||
TileDoShGenPixel_noop 4, 2 @ #0x000000f0
|
TileDoShGenPixel_markop 4, 2 @ #0x000000f0
|
||||||
TileDoShGenPixel_noop 0, 3 @ #0x0000000f
|
TileDoShGenPixel_markop 0, 3 @ #0x0000000f
|
||||||
TileDoShGenPixel_noop 28, 4 @ #0xf0000000
|
TileDoShGenPixel_markop 28, 4 @ #0xf0000000
|
||||||
TileDoShGenPixel_noop 24, 5 @ #0x0f000000
|
TileDoShGenPixel_markop 24, 5 @ #0x0f000000
|
||||||
TileDoShGenPixel_noop 20, 6 @ #0x00f00000
|
TileDoShGenPixel_markop 20, 6 @ #0x00f00000
|
||||||
TileDoShGenPixel_noop 16, 7 @ #0x000f0000
|
TileDoShGenPixel_markop 16, 7 @ #0x000f0000
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
.macro TileDoShGenPixel_onlyop_lp shift ofs
|
.macro TileDoShGenPixel_onlyop_lp shift ofs
|
||||||
|
@ -239,14 +240,13 @@
|
||||||
ands r7, r12, r2
|
ands r7, r12, r2
|
||||||
.endif
|
.endif
|
||||||
ldrneb r4, [r1,#\ofs]
|
ldrneb r4, [r1,#\ofs]
|
||||||
tstne r4, #0x40
|
|
||||||
beq 0f
|
|
||||||
|
|
||||||
cmp r7, #0xe
|
cmp r7, #0xe
|
||||||
biceq r4, r4, #0xc0 @ hilight
|
blt 0f
|
||||||
orreq r4, r4, #0x80
|
|
||||||
orrgt r4, r4, #0xc0 @ shadow
|
tst r4, #0xc0
|
||||||
strgeb r4, [r1,#\ofs]
|
bicne r4, r4, #0xc0
|
||||||
|
orrne r4, r4, r7, lsl #6
|
||||||
|
strneb r4, [r1,#\ofs]
|
||||||
0:
|
0:
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
@ -873,8 +873,8 @@ DrawTilesFromCache:
|
||||||
.dtfc_shadow_blank:
|
.dtfc_shadow_blank:
|
||||||
tst r1, #1
|
tst r1, #1
|
||||||
ldrneb r4, [r1]
|
ldrneb r4, [r1]
|
||||||
mov r6, #0x3f
|
mov r6, #0xbf
|
||||||
and r4, r4, #0x3f
|
and r4, r4, #0xbf
|
||||||
strneb r4, [r1], #1
|
strneb r4, [r1], #1
|
||||||
ldrh r4, [r1]
|
ldrh r4, [r1]
|
||||||
orr r6, r6, r6, lsl #8
|
orr r6, r6, r6, lsl #8
|
||||||
|
@ -925,7 +925,7 @@ DrawTilesFromCache:
|
||||||
|
|
||||||
add r1, r11,#8
|
add r1, r11,#8
|
||||||
mov r3, #320/4/4
|
mov r3, #320/4/4
|
||||||
mov r6, #0x3f
|
mov r6, #0xbf
|
||||||
orr r6, r6, r6, lsl #8
|
orr r6, r6, r6, lsl #8
|
||||||
orr r6, r6, r6, lsl #16
|
orr r6, r6, r6, lsl #16
|
||||||
.dtfc_loop_shprep:
|
.dtfc_loop_shprep:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue