Lucas Scharenbroich
df0d0ccada
Commit to a huge unrolled loop to do bitfield -> render function
2022-02-25 17:05:32 -06:00
Lucas Scharenbroich
ef620e48a3
Remove cached value; too slow to maintain on sprite remove
2022-02-25 17:03:36 -06:00
Lucas Scharenbroich
e49e069461
Start adding some basic documentation on building from source
2022-02-24 21:54:11 -06:00
Lucas Scharenbroich
7bde48e36c
Enable all dirty bits to minimize per-frame, per-sprite work
2022-02-23 08:41:02 -06:00
Lucas Scharenbroich
88fba6cd15
Add plb to prevent crash in unimplemented multisprite handler
2022-02-22 21:37:03 -06:00
Lucas Scharenbroich
19ae2b0866
Remove stray pla that prevented more than one sprite from rendering
2022-02-22 21:27:47 -06:00
Lucas Scharenbroich
2507724a49
More sprite streamlining
...
* Added a TS_LAST_VBUFF cached value in the tile store
* Added a fast path for single sprite w/fast test
* Improved raster timing granularity for visual profiling
All of the code paths are generally good. Both the _RenderSprites
and _ApplyDirtyTiles functions take a fair bit of raster time. Will
continue to try and streamline the data structures and code to
reduce overhead.`
2022-02-22 02:35:21 -06:00
Lucas Scharenbroich
93ed3b3f16
Merge pull request #7 from lscharen/sprite-rewrite
...
Sprite rewrite
2022-02-21 15:59:28 -06:00
Lucas Scharenbroich
56bfdc4236
Fix sprite VBUFF offset calculation
2022-02-21 15:58:16 -06:00
Lucas Scharenbroich
e0912c8956
More tweaks and fixes
...
* Adjusted tile calculation when drawing sprites
* Fixed incorred draw order in 16x16 sprite
* Added more early-out checks to save work
2022-02-21 15:45:11 -06:00
Lucas Scharenbroich
b4025f11fc
Fix stray push instruction
2022-02-21 14:31:05 -06:00
Lucas Scharenbroich
9d401a5861
Fix masking bug in sprite pre-calc
2022-02-21 14:25:55 -06:00
Lucas Scharenbroich
54474bbe5f
Add more pre-computed values to the sprite structure
2022-02-21 13:33:39 -06:00
Lucas Scharenbroich
8b9415a7a5
Working through integration bugs
...
* Gave active list dedicated direct page space
* Change active list bit test from ror to asl to avoid barrel shift
* Various address fixes
2022-02-21 10:31:35 -06:00
Lucas Scharenbroich
7f9f4de228
Add sprite back into initialization
2022-02-21 10:29:57 -06:00
Lucas Scharenbroich
bb83e7f7c5
Background rendering again
2022-02-18 20:43:55 -06:00
Lucas Scharenbroich
95572fbf49
Fix the mask values when enumerating through the sprite sheet
2022-02-18 16:20:07 -06:00
Lucas Scharenbroich
260b2097c2
Continue fixing code issues; strange relocation error happening
2022-02-18 13:42:37 -06:00
Lucas Scharenbroich
95058fb969
Checkpoint for sprite rewrite
...
All of the sprite rendering has been deferred down to the level of
the tile drawing. Sprites are no longer drawn/erased, but instead
a sprite sheet is generated in AddSprite and referenced by the
renderer.
Because there is no longer a single off-screen buffer that holds
a copy of all the rendered sprites, the TileStore size must be
expanded to hold a reference to the sprite data address fo each
tile. This increase in data structure size require the TileStore
to be put into its own bank and appropriate code restructuring.
The benefits to the rewrite are significant:
1. Sprites are never drawn/erased off-screen. They are only
ever drawn directly to the screen or play field.
2. The concept of "damaged" sprites is gone. Every dirty tile
automatically renders just to portion of a sprite that it
intersects.
These two properties result in a substantial increase in throughput.
2022-02-18 12:12:32 -06:00
Lucas Scharenbroich
d96928e562
Add separte TileStore bank
2022-02-18 12:11:22 -06:00
Lucas Scharenbroich
d6aee84edf
Add a small animation of parallax scrolling
2022-02-11 16:14:10 -06:00
Lucas Scharenbroich
397df074ac
Sprite state rework; have run out of bank space
2022-02-07 01:19:31 -06:00
Lucas Scharenbroich
89ea425043
Start work on sprite attribute caching
2022-02-04 12:37:05 -06:00
Lucas Scharenbroich
4d7ff46250
Add zelda demo that utilized dirty rectangle updates
2022-02-03 23:46:32 -06:00
Lucas Scharenbroich
8b852485ac
Fix dirty sprite renderer when StartX and StartY are not zero
2022-02-03 23:44:46 -06:00
Lucas Scharenbroich
525f6d9c67
Add specialized erase routines for different sprite sizes
2022-02-03 08:59:10 -06:00
Lucas Scharenbroich
d3b61f8de6
Merge branch 'toolbox-conversion'
2022-02-03 08:51:49 -06:00
Lucas Scharenbroich
1b9425b620
Streamline sprite functions; untested conceptual changes
2022-02-03 08:50:11 -06:00
Lucas Scharenbroich
16a3a385a9
Update some comments
2022-02-02 17:24:27 -06:00
Lucas Scharenbroich
5f492fd557
Save 1 cycle per line in the PEA fast-path for odd-aligned blits
2022-02-02 14:30:48 -06:00
Lucas Scharenbroich
108335e90a
Add link to John Brooks' technical post on fast GS graphics
2022-02-02 10:23:39 -06:00
Lucas Scharenbroich
1fe02e035c
Checkpoint
2022-02-02 10:21:31 -06:00
Lucas Scharenbroich
027f9746ec
Checkpoint of work
2022-01-19 20:58:57 -06:00
Lucas Scharenbroich
3848c98a21
More documentation
2021-11-23 10:26:34 -06:00
Lucas Scharenbroich
9652a20a3b
Add pre-configured play field size table to docs
2021-11-23 09:25:03 -06:00
Lucas Scharenbroich
af1c728303
Fix table entries
2021-11-23 00:17:02 -06:00
Lucas Scharenbroich
e5aacae8c7
Begin work on updating README
2021-11-22 23:53:13 -06:00
Lucas Scharenbroich
b24e5933e0
Add cheezy logo
2021-11-22 21:47:41 -06:00
Lucas Scharenbroich
69ed76a65d
Optimize the simple mixed BG0/BG1 handler
...
There is enough room in the 32-byte exception handler to inline the
9-byte epilogue when generating the code sequence for mixed BG1/BG0
rendering.
This code sequence is generated once and run for as many frames as the
word appear on screen, so saving an uncondition branch (3 cycles) at the
cost of 60 cycles is probably worth it.
2021-11-22 16:56:53 -06:00
Lucas Scharenbroich
7d76089215
Remove some dead code
2021-11-22 16:53:47 -06:00
Lucas Scharenbroich
140126afd8
Optimize odd-aligned case in the blitter
...
The SEP/REP pairs that are used to move in and out
of 8-bit mode to do the single-byte pushed on the left
and right edges of the screen can also be used to clear
the necessary carry and overflow flags.
2021-11-22 16:13:29 -06:00
Lucas Scharenbroich
4075ed911c
Use the 'f' key to have the SPRITE_HIDE flag set every other frame for a flashing effect
2021-11-22 13:27:27 -06:00
Lucas Scharenbroich
5bc9cc7ff2
Add a SPRITE_HIDE flag to toggle whether a sprite is drawn or not
2021-11-22 13:26:25 -06:00
Lucas Scharenbroich
2683a91e93
Fix sprite rendering with overlapping sprites. Must erase all sprites first, then re-render
2021-11-20 21:58:09 -06:00
Lucas Scharenbroich
90267e4646
Test updating tile ID in UpdateSprite for a run sequence.
2021-11-20 20:33:27 -06:00
Lucas Scharenbroich
9b5d3da0e4
Let character remain facing the direction they were moving after stopping
2021-11-20 14:03:00 -06:00
Lucas Scharenbroich
76801c0e5e
Simplify all of the remaining tile blitters
2021-11-20 13:58:24 -06:00
Lucas Scharenbroich
cd5de05d74
Most of the horizontal flip routines are not needed since the _GetTileAddr function returns the correct tile address. Need to finish auditing other Tile blitters
2021-11-20 13:54:19 -06:00
Lucas Scharenbroich
65ce5cbbc0
Add 16x16 vertical flip routine
2021-11-20 13:26:00 -06:00
Lucas Scharenbroich
b607275089
Separate updating a sprite's position with updating it's flags
2021-11-20 12:16:03 -06:00