Commit Graph

262 Commits

Author SHA1 Message Date
Lucas Scharenbroich
7f6e5d1b1f Work checkpoint 2022-04-29 12:38:04 -05:00
Lucas Scharenbroich
4d6f11a9ba Initialize the graphics screen via the toolset 2022-04-25 17:11:48 -05:00
Lucas Scharenbroich
1522922abe Complete initialization sequence. 2022-04-25 16:35:47 -05:00
Lucas Scharenbroich
e5da3991cd Start to split the tiles into high-level and low-level code 2022-04-25 16:34:54 -05:00
Lucas Scharenbroich
5745482ef6 Fix bank setting on toolset entry 2022-04-25 11:32:25 -05:00
Lucas Scharenbroich
d107365d79 Break up large source code files to help with dependency ordering 2022-04-25 11:32:06 -05:00
Lucas Scharenbroich
29d70dc567 Break up large source code files to help with dependency ordering 2022-04-25 11:30:24 -05:00
Lucas Scharenbroich
76180b6feb Basic working user tool framework 2022-04-24 14:45:07 -05:00
Lucas Scharenbroich
1f9f2aee0c Thank to Kelvin Sherlock for pointing out that the source files were not setting the register state directive 2022-04-23 15:41:25 -05:00
Lucas Scharenbroich
9692277677 Work on fixing linker / OMF errors 2022-04-23 12:48:13 -05:00
Lucas Scharenbroich
e2710ace85 Refactor to support building a tool and new demo to try and use it [not working] 2022-04-23 00:47:13 -05:00
Lucas Scharenbroich
8bb17895a9 Rough outline of streamlined sprite subsystem
* Split the creation of the sprite stamps from adding the
  sprites themselves.  This allows for 48 stamps that can
  be pre-rendered and quickly reassigned to sprites for
  animations.

* Inlined all calls to PushDirtyTile.  This both removed
  significant overhead from calling the small function and,
  since almost all callers we checking multiple tiles, we
  were able to avoid incrementing the count each time and
  just add a single incrments at the end.

* Switched from recording each tile that a sprite intersects
  with each from to only recording the top-left tile and the
  overlap size.  This reduced overhead for larger sprites
  and removed the needs for an end-of-list marker.

* Much more aggressive caching of Sprite and Tile Store
  values in order to streamline the inner tile dispatch
  routines.

* Moving TileStore and Sprites (and other supporting
  data structures) into a separate data bank.  Needed just
  for size purposes and provide micro-optimizations by
  opening up the use of abs,y addressing modes.

* Revamped multi-sprite rendering code to avoid the need to
  copy any masks and all stacked sprites can be drawn
  via a sequence of and [addrX],y; ora (addrX),y where
  addrX is set once per tile.

* General streamlining to reduct overhead. This work was
  focused on removing as much per-tile overhead as possible.
2022-04-20 07:43:16 -05:00
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