Commit Graph

64 Commits

Author SHA1 Message Date
Lucas Scharenbroich 4ee67fb8be Add hook for VBL callback 2023-05-09 10:16:58 -05:00
Lucas Scharenbroich b449d983ee Checkpoint for WIP scanline render fix for overlays+sprites and user-defined tiles 2023-04-26 00:41:17 -05:00
Lucas Scharenbroich 02bc6fe493 Comment cleanup; rename FRINGE tile control bit 2023-03-14 09:11:53 -05:00
Lucas Scharenbroich b154bcf361 Sync up header files and add back CopyToBG1 behavior as a selectable feature 2023-03-12 15:39:41 -05:00
Lucas Scharenbroich d31bd30649 Implement full per-scanline offset support for BG1 2023-03-11 03:41:12 -06:00
Lucas Scharenbroich e3409f92fa Add per-scanline offset rendering. 2023-03-09 15:29:58 -06:00
Lucas Scharenbroich 39163ea786 Expose the ability to select which rendering order to use for sprites 2023-03-09 00:23:12 -06:00
Lucas Scharenbroich 536959619f Refine the horizontal dispatch
Find small optimizations to improve the average performance of the
blitter, especially in the odd-aligned case.

 - Odd-aligned PEA exit is 2 cycles faster per line
 - Odd-aligned JMP exit is 2 cycles faster per line
 - Odd-aligned LDA exit is 6 cycles faster (eliminated long store)
 - Merged setting the entry opcode and offset to convert 2 8-bit
   store into a single 16-bit store (save 6 cycles per line)
 - Load and save the full word for the high bytes. Cost 2 cycles
   but enabled the 6 cycles saved for the LDA case.
2023-03-07 17:32:46 -06:00
Lucas Scharenbroich 5697737a93 Add workable overlay support to the scanline renderer 2023-03-06 14:39:23 -06:00
Lucas Scharenbroich 6832c7f405 Update dynamic tile rendered to use fixed snippets. Add DAMAGES flag for the one render that doesn't fit the mold 2023-03-03 21:44:39 -06:00
Lucas Scharenbroich c14f3c7283 Functional compiled sprites in demo-5 2023-03-01 13:18:37 -06:00
Lucas Scharenbroich e2e30dfcf4 Checkpoint for initial framing for compiled sprite support 2023-02-28 11:17:43 -06:00
Lucas Scharenbroich 981182592e Shadow based rendering working in demo-5 2023-02-27 15:30:56 -06:00
Lucas Scharenbroich 4b50fa8318 checkpoint 2023-01-02 11:04:26 -06:00
Lucas Scharenbroich b8a7641307 Add in all linked list operations 2022-09-08 21:51:00 -05:00
Lucas Scharenbroich 3fce46872d Checkpoint; blitter failing 2022-08-14 07:45:58 -05:00
Lucas Scharenbroich e378dc6e26 Checkpoint with TF4 demo framework 2022-08-11 14:14:25 -05:00
Lucas Scharenbroich 97fa45589b Allow GTEStartUp caller to specify whether tool is loaded as a system or user tool 2022-08-01 22:00:54 -05:00
Lucas Scharenbroich 5a0e0e447e Change GTESetScreenMode to use bytes for the width 2022-07-26 00:21:22 -05:00
Lucas Scharenbroich 18da2546bd Add horizontal scaling to the background rotation 2022-07-22 02:01:34 -05:00
Lucas Scharenbroich 3063ab88f9 Fix sprite stamp rendering for 8x16 and 16x8 sprites 2022-07-21 22:51:25 -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 e9a2b8569b Fix drift between public macro file and internal definitions 2022-07-07 17:57:05 -05:00
Lucas Scharenbroich 48fa068dfd Add routines for dirty tile rendering 2022-07-04 23:55:32 -05:00
Lucas Scharenbroich a7dad98d50 Additional tweaks to get old sprite demo working 2022-06-27 11:24:04 -05:00
Lucas Scharenbroich 8aafd5812b Work to expose times via Toolset 2022-06-26 22:08:42 -05:00
Lucas Scharenbroich bcdc543241 Add in all the two-layer tile renderers; update complete. Just need to test 2022-06-23 11:31:42 -05:00
Lucas Scharenbroich 76a9710114 Add dynamic rendering functions 2022-06-21 15:28:58 -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 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 b6202ca44c Implement framework for adjusting VBuff tables to handle boundary transitions 2022-06-06 11:23:00 -05:00
Lucas Scharenbroich e6251f05a3 Clean up constants and fix bad addressing mode 2022-06-02 13:06:26 -05:00
Lucas Scharenbroich 4f557230c6 Remove some dead code and streamline some addressing. Fix bug in dispatch macro 2022-06-02 12:28:49 -05:00
Lucas Scharenbroich cde517bcc9 Fix single-step vertical displacement issue 2022-06-01 07:50:19 -05:00
Lucas Scharenbroich 78d7dafe14 Another checkpoint; converging on the working implementation 2022-05-31 08:43:26 -05:00
Lucas Scharenbroich 7909113a97 Checkpoint 2022-05-26 19:36:40 -05:00
Lucas Scharenbroich 5577105be8 Complete unrolled loop for clearing sprites from the tile store 2022-05-23 15:18:34 -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 755ac3fbfd Move most data storage to separate bank; fix many banking bugs 2022-05-18 21:00:06 -05:00
Lucas Scharenbroich 7f6e5d1b1f Work checkpoint 2022-04-29 12:38:04 -05:00
Lucas Scharenbroich 1522922abe Complete initialization sequence. 2022-04-25 16:35:47 -05:00
Lucas Scharenbroich 76180b6feb Basic working user tool framework 2022-04-24 14:45:07 -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 ef620e48a3 Remove cached value; too slow to maintain on sprite remove 2022-02-25 17:03:36 -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 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 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