Commit Graph

146 Commits

Author SHA1 Message Date
Lucas Scharenbroich
e378dc6e26 Checkpoint with TF4 demo framework 2022-08-11 14:14:25 -05:00
Lucas Scharenbroich
5883de1f71 Checkpoint 2022-08-01 21:46:00 -05:00
Lucas Scharenbroich
7a6c4e5ff4 Break up Ypos loop into pre/loop/post segment to optimize. Saved ~5,000 cycles/sec. When applied to the other routines will save a few thousand more cycles 2022-07-31 11:51:42 -05:00
Lucas Scharenbroich
794bc1fc09 Start adding scanline variants 2022-07-30 11:04:13 -05:00
Lucas Scharenbroich
456744027d Inline all functions that are only called once
Eliminates the JSR/RTS overhead for the copy functions.  Combined
with the other streamlining, we save around 60 - 70 cycles per
bank, or a total savings of around 10,000 cycles per seconds when
running at full screen.

This doesn't really change the FPS, but just gives some cycles
back to the main application logic.
2022-07-28 13:15:46 -05:00
Lucas Scharenbroich
fa731f4b2d Streamline restore BG0; experiment with more aggressive inlining 2022-07-28 12:15:00 -05:00
Lucas Scharenbroich
0f920acd03 Eliminate redundent register loads 2022-07-28 11:57:14 -05:00
Lucas Scharenbroich
acf0276ff5 Get vertical rotation scaling going 2022-07-22 16:00:41 -05:00
Lucas Scharenbroich
18da2546bd Add horizontal scaling to the background rotation 2022-07-22 02:01:34 -05:00
Lucas Scharenbroich
6c531619f9 Merge branch 'fixup-rotations' into kfest-2022 2022-07-21 23:35:53 -05:00
Lucas Scharenbroich
23f3626293 Fix issues preventing BG1 per-line offsets from working 2022-07-16 16:42:41 -05:00
Lucas Scharenbroich
0ab7fa9d81 Two layer demos 2022-07-16 15:22:23 -05:00
Lucas Scharenbroich
4506f808c9 Restore BG1 rotation code 2022-07-12 21:03:30 -05:00
Lucas Scharenbroich
182ebfd566 Set dirty render to the correct direct page and several small cleanups 2022-07-06 14:55:27 -05:00
Lucas Scharenbroich
a51c973865 Fix addressing bug in SCB binding 2022-06-27 00:41:02 -05:00
Lucas Scharenbroich
78ee683ba8 Stub in a lot of the remaining functions 2022-06-25 11:17:50 -05:00
Lucas Scharenbroich
4c1dba0f68 Complete Dynamic Tile renderer 2022-06-21 23:13:28 -05:00
Lucas Scharenbroich
76a9710114 Add dynamic rendering functions 2022-06-21 15:28:58 -05:00
Lucas Scharenbroich
a91f39aab8 Remove dead code and implement Slow tile renderers in terms of the Fast once to avoid code bloat 2022-06-21 13:33:17 -05:00
Lucas Scharenbroich
553fd3c02a Tweaking updated sprite dispatch flow 2022-06-21 07:29:18 -05:00
Lucas Scharenbroich
4ea3033b5e Get minimal tiles and sprites rendering without a crash 2022-06-20 17:57:19 -05:00
Lucas Scharenbroich
1f9c9b3f5b Checkpoint of final tile proc reorg for generalize new infrastructure for different engine modes 2022-06-20 15:55:09 -05:00
Lucas Scharenbroich
12b05139c2 Move to tables of dispatch tuples to set tile rendering information 2022-06-14 14:21:51 -05:00
Lucas Scharenbroich
d3da96a834 Add in the special Tile 0 render routines 2022-06-14 08:12:33 -05:00
Lucas Scharenbroich
7af4a216a0 Add modular dispatch for copy routines; add initial support for tile priority bit 2022-06-12 05:28:12 -05:00
Lucas Scharenbroich
e5938cb3c7 Change the entry points based on the engine mode 2022-06-08 23:34:15 -05:00
Lucas Scharenbroich
dec50bc6fc Fix several bugs; biggest one in the SpriteStamp routine 2022-05-31 22:53:33 -05:00
Lucas Scharenbroich
78d7dafe14 Another checkpoint; converging on the working implementation 2022-05-31 08:43:26 -05:00
Lucas Scharenbroich
9da3616c1d Start working to bring sprites rendering back into the pipeline 2022-05-22 23:54:47 -05:00
Lucas Scharenbroich
8582ecb320 Fix weird search/replace bug 2022-05-22 21:57:52 -05:00
Lucas Scharenbroich
9ac9ea623e More banking fixes 2022-05-19 23:40:45 -05:00
Lucas Scharenbroich
fd07ead8ed Get tile data to display from code field 2022-05-18 21:39:39 -05:00
Lucas Scharenbroich
755ac3fbfd Move most data storage to separate bank; fix many banking bugs 2022-05-18 21:00:06 -05:00
Lucas Scharenbroich
01e92a7b62 Update; tool is compiling while referencing new rederer pipeline 2022-05-18 00:34:25 -05:00
Lucas Scharenbroich
7f6e5d1b1f Work checkpoint 2022-04-29 12:38:04 -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
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
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
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
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
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
bb83e7f7c5 Background rendering again 2022-02-18 20:43:55 -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
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
8b852485ac Fix dirty sprite renderer when StartX and StartY are not zero 2022-02-03 23:44:46 -06:00