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
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
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
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
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
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
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
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
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
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
Lucas Scharenbroich
0cc28f9e6e
Generalize _DrawSprite to handle all sizes and flip bits.
2021-11-20 12:00:21 -06:00
Lucas Scharenbroich
a7ba1e4b6b
Add final tile blitter
2021-11-19 16:48:39 -06:00
Lucas Scharenbroich
fd6c686a95
Fix ordering bug that caused /usr/bin/bash0 values to overwrite the sprite
2021-11-19 16:40:21 -06:00
Lucas Scharenbroich
39303041f9
Add priority dynamic tiles + sprite blitter
2021-11-19 16:30:22 -06:00
Lucas Scharenbroich
44cbba3f23
Add in new variants for sprite and priority tiles
2021-11-19 15:07:43 -06:00
Lucas Scharenbroich
5fdb4bcf06
Fix transposed argument in macro definition; dynamic tile + sprite now working
2021-11-19 13:26:19 -06:00
Lucas Scharenbroich
b4871efe8f
Streamlining tile blitter macros
2021-11-19 13:00:59 -06:00
Lucas Scharenbroich
4c31a0d056
Reorg of exception handling code in the core blitter
...
* Moved V-flag handling outside of the 32-byte exception handler
* Switched relative branches to JMP to save a cycle per word
* Updated macros to create a full code snippet instead of assuming
certain values exist in the exception handler buffer
2021-11-19 10:24:09 -06:00
Lucas Scharenbroich
0a9eb76ab5
Checkpoint; have old Dynamic Tile Renderers working
2021-11-18 16:23:44 -06:00
Lucas Scharenbroich
ba76b0047c
Checkpoint on dynamic tile blitters
2021-11-18 15:36:36 -06:00
Lucas Scharenbroich
9a6eb45b20
Add Masked Sprite Tile blitter and fix some minor issues with the macro
2021-11-15 21:23:15 -06:00
Lucas Scharenbroich
976ab3163b
Fix offset for filling wrap-around byte in BG1
2021-11-15 12:32:38 -06:00
Lucas Scharenbroich
dfd5549918
Sync up with current WIP
2021-11-15 12:23:38 -06:00
Lucas Scharenbroich
cc8e03e6d3
Add SCB binding infrastructure
2021-11-13 19:45:27 -06:00
Lucas Scharenbroich
b87e2a8d33
Fix register assignments for dynamic tile renderer
2021-11-13 19:44:30 -06:00
Lucas Scharenbroich
596777da8d
Enable non-sprite, solid dynamic tiles
2021-11-12 15:11:29 -06:00
Lucas Scharenbroich
bab57f6e43
Add VSYNC toggle
2021-11-12 11:27:43 -06:00
Lucas Scharenbroich
de5bdc6041
Rename tile blitters to match internal bit fields and add in the solid prioity blitter
2021-11-12 09:07:51 -06:00
Lucas Scharenbroich
673b97419a
Clear sprite flag when erasing sprite
2021-11-11 22:22:10 -06:00
Lucas Scharenbroich
dec9a3d106
Fix fast-path return value in PushDirtyTile and correct handling of TS_SPRITE_FLAG
2021-11-11 22:10:54 -06:00
Lucas Scharenbroich
678c9a0563
Initial shell of generalize sprite size support; just for marking the dirty tiles
2021-11-11 17:06:38 -06:00
Lucas Scharenbroich
bb5f4493d9
Fully integration simple (8x8) sprites into the render pipeline
2021-11-01 23:36:53 -05:00
Lucas Scharenbroich
631f40da23
Nearly complete integration of sprites into rendering function
2021-10-31 15:42:59 -05:00
Lucas Scharenbroich
2f73b9acf5
Small improvements to sprite prototype to fix dirty tiles getting out of sync
2021-10-30 19:24:23 -05:00
Lucas Scharenbroich
b4155dc751
Expose the ApplyTiles subroutine
2021-10-29 00:52:29 -05:00
Lucas Scharenbroich
9ecc262c58
First pass at validating erasing the sprite on update
2021-10-28 22:19:18 -05:00
Lucas Scharenbroich
0a7d9e15c7
Add external entry point to the erase function
2021-10-28 22:18:33 -05:00
Lucas Scharenbroich
7ec1b8bc29
Fix dumb initialization bug in sprite plane
2021-10-28 21:52:48 -05:00
Lucas Scharenbroich
4e46a6af85
WIP: manual sprite rendering showing on screen
2021-10-28 21:41:01 -05:00
Lucas Scharenbroich
2feb6f590b
Add address in sprite plane for tile rendering; use in tile dispatcher
2021-10-27 00:14:19 -05:00
Lucas Scharenbroich
cc18c67491
Expand tile blitter temp space
2021-10-27 00:11:13 -05:00
Lucas Scharenbroich
82c1a8e2e4
Remember to cacluate the tile address when adding to the dirty tile list
2021-10-26 21:34:38 -05:00
Lucas Scharenbroich
0366c1a0e0
Fix missing index in the dirty tile initializations
2021-10-26 21:21:08 -05:00
Lucas Scharenbroich
3b8bf652e1
Continued bug fixing
...
* Missed an XBA to swap tile command bits into a proper index range
* Explicitly track the BASE_ADDR
* Fix some register overwriting
* Add an UpdateSprite method
2021-10-23 22:31:38 -05:00
Lucas Scharenbroich
494673416b
Fix several incorrect uses of internal API; work toward functional demo
2021-10-22 00:56:12 -05:00
Lucas Scharenbroich
4e779e71d2
Tile rendering reorganization
...
This significantly simplifies the dispatch process by creating a
proper backing store for the tiles. Most values that were
calcualted on the fly are now stored as constants in the tile
store.
Also, all tile updated are run through the dirty tile list which
solved a checken-and-egg problem of which order to do sprites vs
new tiles and affords a lot of optimizations since tile rendering
is deferred and each tile is only drawn at most once per frame.
2021-10-21 08:50:07 -05:00
Lucas Scharenbroich
c4762888ed
Add brief readme to start documenting the internals of GTE
2021-10-21 08:47:17 -05:00
Lucas Scharenbroich
4d224a92d9
Fix pre-shift bug in the tile address calculation
2021-10-11 16:47:38 -05:00
Lucas Scharenbroich
4338b64338
First cut at a non-trivial overlay. Pallettes and tile indexes still to be fixed
2021-10-11 14:09:38 -05:00
Lucas Scharenbroich
2966b1052b
Add rendering path for masked dynamic tiles
2021-10-07 23:54:45 -05:00
Lucas Scharenbroich
d5421afdbd
Fix off-by-one issue in tile IDs and make the entry point consistent in the code field generator
2021-10-07 18:33:06 -05:00
Lucas Scharenbroich
4006f76c02
Fix bcc/bcs typo when initializing timers
2021-10-07 16:38:20 -05:00
Lucas Scharenbroich
87ded17e20
Initial Tiled tile animation export support
...
* Tiled tile animations read from TSX files
* Hooks for initialization generated by the tiled export tool
* Animated tiles implements with dynamic tiles backed by 2KB of direct
page space in Bank 00
* Animation resolution limited to 1/60th incremenents
TODO
* Fix crasher in the _DoScriptSequ timer callback
* Fix single-line of garbage on the top line of the dynamic tiles
2021-10-06 07:10:09 -05:00
Lucas Scharenbroich
a82c1248db
Add untested framework for handling fringe tile rendering
2021-08-30 22:14:04 -05:00
Lucas Scharenbroich
f55192436a
Final reorg; all projects build into a unified disk image for testing
2021-08-26 17:15:44 -05:00
Lucas Scharenbroich
dcf93892a7
Reorg some more files and tweak paths
2021-08-26 16:45:23 -05:00
Lucas Scharenbroich
2e11ba74ee
Rename memory init file
2021-08-26 16:43:14 -05:00
Lucas Scharenbroich
1263375095
Move test app into its own demo folder
2021-08-26 16:24:46 -05:00
Lucas Scharenbroich
69c6104742
Small initialization and jsr/jsl updates
2021-08-26 16:12:08 -05:00
Lucas Scharenbroich
4af66fa13a
Fix initialization order
2021-08-26 09:45:40 -05:00
Lucas Scharenbroich
fe18759759
Refactor original demo driver to use GTE Core; move functions around
2021-08-26 08:52:43 -05:00
Lucas Scharenbroich
7d5f7aa721
Refactor GTE Core to be included as an independent Segment in other projects
2021-08-25 09:38:02 -05:00
Lucas Scharenbroich
23f7e5b0fb
Fully flesh out Script execution implementation
2021-08-25 09:28:53 -05:00
Lucas Scharenbroich
740a0f260d
Fix bug that causes one-shot timers to loop forever
2021-08-24 15:58:36 -05:00
Lucas Scharenbroich
48bb361730
Early peek at the Timers/Scripting engine
2021-08-24 15:45:33 -05:00
Lucas Scharenbroich
238d2f0a6f
Fix banking bug and enable BG1 tile maps
2021-08-20 20:20:47 -05:00
Lucas Scharenbroich
e607612344
Add initial build-out of BG1 tile map support
2021-08-19 01:22:36 -05:00
Lucas Scharenbroich
4c5b090afe
Fix crashing bug when replacing BG1 tiles with BG0 tiles
2021-08-19 01:21:37 -05:00
Lucas Scharenbroich
07ac2b017f
Fix indexing error in Tiled export. Solid tiles are no longer marked as masked
2021-08-19 00:47:34 -05:00
Lucas Scharenbroich
4609b5c4b9
Identify tiles that should be masked from Tiled maps
2021-08-17 16:23:23 -05:00
Lucas Scharenbroich
55e15aa894
Restore full tile dispatcher code
2021-08-17 09:46:45 -05:00
Lucas Scharenbroich
b35a2c1e6e
Complete masked tile rendering implementation
...
The core data tables were reworked to pre-reverse all of the
entries to directly match the right-to-left ordering of the code
fields. This simplified some code but was required for register
reuse in the masked tile renderer.
Also fixed several offset calculation issues in the masked tile
renderer.
2021-08-17 09:33:27 -05:00
Lucas Scharenbroich
5ad95f4609
Use 8-bit accumulator to read softswitches
2021-08-15 09:25:42 -05:00
Lucas Scharenbroich
2540359f60
Fix plx/pla ordering in tile dispatcher
2021-08-14 21:56:08 -05:00
Lucas Scharenbroich
1492ac3b36
Map Tiled Horizontal and Vertical flip flags onto GTE equivalents
2021-08-14 21:22:21 -05:00
Lucas Scharenbroich
232f94d30e
Fix layer comparison function
2021-08-14 21:09:35 -05:00
Lucas Scharenbroich
d9133a2170
Switch to using exported Tiled project assets
2021-08-14 20:58:37 -05:00
Lucas Scharenbroich
ce51563913
Fix small code issues and sync up tool output with code changes. Maps render again with solid tiles
2021-08-13 11:57:41 -05:00
Lucas Scharenbroich
652729081e
Stub in more tile rendering functions; does not crash but renders incorrectly
2021-08-13 11:38:06 -05:00
Lucas Scharenbroich
90124b04bc
First draft of masked tile support
...
Need to have the called provide a copy of the base line address to the
masked drawing code and need to verify that the JTable entries are
ordered the same way as the byte offset so the same register can be used
to load the JMP addresses and patch in the LDA (DP),y instructions.
2021-08-13 10:05:28 -05:00
Lucas Scharenbroich
e3cb742626
Fix tile rendering
...
This is not quite correct yet. IT appears that two rows or columns are
drawn on the edges when only a single solumn or row is necessary. Also,
this code is based on the old GTE codebase, so the initial rectangle for
rendering tiles is width+1, height+1. This can be improved.
2021-08-10 07:59:14 -05:00
Lucas Scharenbroich
b9fced46cd
Debugging overlay to show variables on screen
2021-08-10 07:58:09 -05:00
Lucas Scharenbroich
97d05ee926
Fix wrong variable
2021-08-09 09:17:25 -05:00
Lucas Scharenbroich
d3b21a91b9
Fix full-screen tile refreshes; incremental tile drawing crashes
2021-08-09 06:08:09 -05:00
Lucas Scharenbroich
8d34da6c26
Add the old SMB keyboard read function to detect key-down instead of key-press
2021-08-07 21:22:37 -05:00
Lucas Scharenbroich
8d31720e1c
Add an extra column when coordinates are not tile-aligned
2021-08-07 21:21:28 -05:00
Lucas Scharenbroich
8ed851cb33
First pass at importing tilesets into GTE
2021-08-06 16:35:47 -05:00
Lucas Scharenbroich
b8d4ae780b
Fix crashing on horizontal tile map rendering; still some off-by-one errors
2021-08-06 15:57:03 -05:00
Lucas Scharenbroich
39639d54b5
Fix some small bugs with tile rendering; tiles display but crash after scrolling 8 bytes
2021-08-06 14:42:18 -05:00
Lucas Scharenbroich
d01791b440
Initialize more direct page variables and provide a flag to turn off sound
2021-08-06 14:41:23 -05:00
Lucas Scharenbroich
c6f6001e8f
Pull exported Tiled level data into the application; does not display anything yet
2021-08-05 21:19:43 -05:00
Lucas Scharenbroich
1d17b802ad
Add basic tilemap support back in
2021-08-05 08:20:38 -05:00
Lucas Scharenbroich
19070fa194
Reformat
2021-07-30 08:01:46 -05:00
Lucas Scharenbroich
56b5b69efa
Move rotation data to its own segment
2021-07-30 08:01:16 -05:00
Lucas Scharenbroich
1936a0898c
Sync up
2021-07-29 05:35:09 -05:00
Lucas Scharenbroich
65af5cbf26
Improve address generation
2021-07-27 16:28:18 -05:00
Lucas Scharenbroich
87e46d95f5
Rotation!
2021-07-24 09:00:52 -05:00
Lucas Scharenbroich
cede4c69b4
Add timer infrastructure and two small examples
2021-07-20 12:42:21 -05:00
Lucas Scharenbroich
1fcd4589f7
Add horizontal BG1 offset support; frame lock demo to 60 fps
2021-07-20 00:02:20 -05:00
Lucas Scharenbroich
9cdba9a537
Add routine to do horizontal displacement of BG1
2021-07-19 22:52:42 -05:00
Lucas Scharenbroich
c5eb84ea37
Get the PEI Slammer working for exposing shadowed writes
2021-07-19 22:42:51 -05:00
Lucas Scharenbroich
d9e3ee14e8
Add small header to converted image data
2021-07-19 14:18:02 -05:00
Lucas Scharenbroich
9d33ff3000
Add file information metadata for cadius to use when adding assets to the disk image
2021-07-18 15:11:16 -05:00
Lucas Scharenbroich
760580d733
Tweak file loading functions
2021-07-18 08:59:19 -05:00
Lucas Scharenbroich
160a9afafb
Add proper handling of wraparound in vertical positioning
2021-07-17 21:00:46 -05:00
Lucas Scharenbroich
4b390fef20
Fix extra push in mixed rendering
2021-07-17 20:38:07 -05:00
Lucas Scharenbroich
bdf885dafd
First implementation of BG0/BG1 mixed exception handling
2021-07-16 23:09:08 -05:00
Lucas Scharenbroich
6fc772ce78
Sorted out BG1 edge artifacts
2021-07-16 17:05:29 -05:00
Lucas Scharenbroich
f2d82f810d
Very simple asset pipeline to transform PNG impage into raw binary files to load in the engine
2021-07-16 13:09:16 -05:00
Lucas Scharenbroich
62233d4abc
Remove dead code and fix right edge of BG1 rendering
2021-07-16 08:38:14 -05:00
Lucas Scharenbroich
abfcde54c2
Initial addition of BG1 support
2021-07-16 00:34:58 -05:00
Lucas Scharenbroich
63bfe5e8e7
Resolve horizontal scrolling issue with PEA code
2021-07-15 21:00:35 -05:00
Lucas Scharenbroich
26e39e3bfd
Horizontal scrolling no longer crashes; still have incorrect edge rendering
2021-07-15 15:30:24 -05:00
Lucas Scharenbroich
b6fadedfc7
WIP of fixing horizontal scrolling
2021-07-15 13:53:53 -05:00
Lucas Scharenbroich
50f5da5608
WIP on BG0X positioning; fix tile horizonal calculation
2021-07-15 11:01:42 -05:00
Lucas Scharenbroich
be446589b0
Fix horizaontal ranges in actions
2021-07-14 15:23:49 -05:00
Lucas Scharenbroich
e14a8ec36f
Add a simple benchmark
2021-07-12 00:16:18 -05:00
Lucas Scharenbroich
e03859406e
Fix indexing issue with calculating a tile's top line
2021-07-10 20:46:32 -05:00
Lucas Scharenbroich
d1e59e81ac
Fix off-by-one error when rendering tiles
2021-07-10 20:43:55 -05:00
Lucas Scharenbroich
b5fa2d9266
Fix comment typos
2021-07-10 20:35:27 -05:00