
Shannon Birt
@birt_shannon • 2,496 subscribers
Retro Computer/Console enthusiast. Attempting to tick retro game developer off bucket list . Youtube https://t.co/Fy5wTfYgQI Discord Shazza#4474
Shorts
Videos

** Sega MD 3D engine update 7 ** Speed up rendering by another 15-20 % ! Massive unrolling of the line drawing hotpath has seen a good pickup in the rendering although further improvements are needed , particularly for small triangles as most of the overhead is not in the drawing ( more time in setup vs drawing ) . Added partial drawing of Quads , this was a major pain due to all the edge cases , as Quads are basically a triangle top (optional) - a middle trapezium and a bottom triangle (optional) and any part can be clipped or offscreen . Implemented a frame pacing algorithm for the camera so as Frame rate fluctuates with detail the forward Z rate is altered, its as bit janky still . Track control just snaps back to position after it runs through a short sequence. Work continues on Parodius and we have some cool things to show in a video soon . #SGDK #SegaGenesis #MegaDrive
Shannon Birt17,157 views • 1 month ago

** Sega Genesis 3D engine Update 5 ** Added support for Quads - quads are faster than triangles for drawing 4 sided objects ( vs 2 triangles ) as theres larger filling runs before edges. Made multiple enhancements to Triangle and Quad drawing for speed. 27% faster than last Video for triangle drawing. Changed back to Non linear frame buffer + DMA for speed of frame buffer (fb) transfer. The two buffer systems ( Linear FB + CPU blit Vs Non Linear FB + DMA transfer ) I have competing and porting optimisations back to either for the meantime. Triangle drawing vertex calculation done in Assembly . Triangle and Quad functions now loop in Assembly saving stack calls from C. Next tasks, H40 mode for Faster DMA with centered screen , more optimisations in setup , more optimisations in cullling and more detail in general. #SGDK #SegaGenesis #SegaMegadrive
Shannon Birt16,957 views • 1 month ago

** Sega Genesis 3D Engine Day 3 ** Blast Processing kicks In !! Converted the Line Drawing and Triangle drawing to 68k Assembly and gained 25% in the line drawing and 33% speedups in the triangle drawing vs C ( so far ) . The scheduler calculating the vertexs is still in C , just the drawing routines are now are in assembly . Possibly 5-10 % gains will come from the scheduler being in ASM also. The Line and Triangle drawing C code took some beating , it was surprising - particularly the line drawing to get a speed up over the C code in ASM. I guess its not too surprising as the C code was basically handling pointers and integers so I had to get exotic to find the speedups. Initially my ASM Line draw was 100% slower than the C code - the first pass conversion from C to ASM is always rough as its more about getting it working then refine later , but yeah 100% slower on first pass was brutal, after 4 hrs tweaking it was 25% faster than the C code so thats a good start - might get more yet. So added more squares and more triangles for load testing at the same frame rate. Its still not anything cohesive but right now focussing on performance in rendering to see how much can be pushed. As rendering will be the biggest cpu soak the faster that goes the better. The smaller triangles take about 1/3 the CPU time of the larger triangles at present so theres definately a fill rate limit vs the setup time to consider. The same would go for the squares been line framed - smaller ones would allow al lot more . #SGDK #SegaGenesis #SegaMegadrive
Shannon Birt18,957 views • 1 month ago

** Sega Genesis 3D engine update 4 ** Never can leave a good rabbit hole undug ! .. updates since last update : Changed frame buffer from a VDP tile friendly buffer to a linear buffer which needs CPU translation , which speedup drawing a LOT not having to worry about tile boundaries albiet slows buffer sending to VRAM. The interior filling of triangles now is running at 1.5c ( 68k cycles ) per pixel ! however sending the buffer is twice as slow per byte as we need the CPU to send the buffer to VRAM to write to the tile format the VDP needs, rather than DMA directly to VRAM . Overall speedup 25% + as the drawing speedup is much greater than the frame buffer slow down. Optimised Line drawing and Triangle filling -near optimal now for the linear frame buffer. Triangle drawing might get a little bit more yet. Quad drawing is next on the list as that will speedup drawing quads. Some gains will come from been smart about partial clearing of RAM buffers and partial sending to VRAM buffers, rather than send the whole buffer. Vertice rotation and projection needs a lot of optimising .. i expect good gains to come from this - this is all in C at present and all calced in real time. Line and Triangle drawing are in assembly but all vertex manipulation is in C. #SGDK #MegaDrive #SegaGenesis
Shannon Birt15,060 views • 1 month ago

** Sega Genesis 3D engine Day 2 ** Added solid filled triangles. Added colors ( full 15 color buffer ) . All code in C so far apart form the buffer clear and DMA buffer sending so should be some good speedups to come yet once line / triangle routines are ported to 68k Assembly. I've done basic filling optimisations in C such as where we can write longs eg fill 8 pixels at once for interior parts of the triangle the function will utilise that. Still using 3 divisions per triangle setup , I think i will see if I can use a cheaper reciprical multiplication instead. All rotations vertices are calculated live , in 2d space at present. #SGDK #SegaGenesis #SegaMegadrive
Shannon Birt17,329 views • 2 months ago

** MEGA Parodius Scaling Effects Part 2 ** Well - this is the BIG one - literally !! Huge thanks to my team Pyron & Vector Orbitex for their efforts. Pyron has provided all the source frames for Puyon and his spikes / explosion and a lot of analysis video on how the spikes behave / move which was really helpful. Pyron also used his CRT setup for this video as we felt an emulator video would not do it justice - running on 100% real MD hardware FTW. Vector has provided the catchy boss music and its sounding great - as always ! The coding on this has been a bit insane - things done since part 1 post previous: Implemented dual buffering - Last video was single buffered - so VRAM is very tight now , we only have about 40/2048 tiles free. For the longest time I didn't think it would fit - I found a vram jigsaw puzzle that made it work in the end. Double buffering has cleaned up the stability of the animation and matches the arcade scaling effect now albiet costing 2x more VRAM . Vertical Scaling Implemented - the vertical scaler was taken from Lufthoheit ( my other shooter ) and its heavily optimised to reduce cpu usage. During the scaling the vertical scaler partitions the 68k processor registers into 2 sets, 4 registers are allocated to feeding the fast horizontal interrupt (h-int) that drives the vertical scaling , remaining 12 registers are for the horizontal scaler running in the background. This setup is much faster than normal backup / restore register methods, as we do not need to backup / restore registers in the h-int which would double CPU costs. The catch is the momment any background routine tries to use the H-ints registers it would break things so it has to be carefully timed. Added the spike projectiles - this was very tricky to get close to the arcade, they are semi heat seeking missiles basically and hence needed code that worked out angle differences to player at speed theres no time for arc-tan or similar so it uses faster lookup tables to work out the angles . They speed up over time and get larger and whats more we can't keep all the scales in VRAM - we have room for 2 spike buffers only. Also what was a real pain was working out scaled coordinates for the circular launch of the spikes . Added Fish Damage - Shock frame and Explosion frames from Arcade . Very proud of the fact we have the full arcade quality explosion is which is fully scaled also. Added Temporal Masking - which is fancy wording for don't draw nothing to buffer if nothing is there already there for the scaling . So empty Corners and edges can be optimised out to lower cpu costs and rom costs. I had to make some scripting for this and work out what areas did not need drawing at all in the frame, which should be force cleared by cpu and which areas should just be copied from rom. This reduced rom size by 30 kb and with a bit more work we could extend that to 60 kb & get a bit more speedup even doing so. Added a frame limiter . In the last video update we let the 68k burn hot and just pump out frames as fast as it could - here we match the arcade animation rate which does leave the cpu idling at times , particularly in the smaller frames - even at large though we could be running the animation 25 % faster , issue is though that would speed up the game logic and make it less arcade accurate. We had some real bullet / Spike hell simulations going without the limiter but yeah we had to tone it down a bit. Maybe in a hardcore mode we could let it run wild though ! Code is 95% 68k assembly with about 5% C code (v-int as its cold path ) driving things . This sort of thing needs all the speed it can get !! Well now after all that I can return to finish off Level 1 haha - just a wee sidetrack there . No doubt we will polish stage 8 boss some more in time too !! #SegaMegadrive #SegaGenesis #Parodius #SGDK
Shannon Birt26,173 views • 3 months ago

** 3D Engine Update 6 ** New Buffer System. 15-20% Faster !! Using Planes A and B interleaved horizontally we can get the best of all worlds with a near continuous frame buffer for fast Triangle & Quad writes and still use DMA for fast sending of the RAM frame buffer to VRAM. Normally you get one benefit without the other leading to tradeoffs. There is a caveat ofcourse, I lose a spare plane , however thats not a large concern for what im trying to achieve, i still have the full sprite load if i need to simulate ground etc - we can also multiplex sprites if needed. So each plane is full of half fill tiles ( 4 pixels set in each tile row ) , which are then slightly offset to make the full image. Also changed to H40 mode for faster DMA albiet centered view , plenty of Hud options for side panels etc. What is quite cool is the layout in VRAM is very similar to what you see on screen just with some striping . VRAM layout to the right. Theres no more VRAM used verse a normal double buffer , the trick is here to send the buffer in one frame always as theres no room for a double buffer in vram. I have to implement partial ofscreen drawing yet hence the snapping from front to back you see still . #SGDK #SegaGenesis #SegaMegadrive
Shannon Birt12,030 views • 1 month ago

Sega Genesis Blast Processing MAXED OUT ??? Whats better than 660 sprites in 660 colors (prev demo) ??? 1013 sprites in 1013 colors !!! Demo starts at 117 sprites then adds 20 sprites per second every second until it reaches Max Blast Processing at ~ 46 seconds mark. Live Sprite/Color Counter top left , updates periodically. Thanks to Carsten666 for amazing artwork and CYBERDEOUS - Crouzet Laurent for pumping audio (a Lufthoheit team collaboration) - appreciate your support guys !! Snippets: 18 Hardware sprites multiplexed 56x each (max level) = 1008 sprites + 5 player ships = 1013. 4-5 colors changed by DMA every scanline. Repositioning 4.5 sprites every scanline - this is VDP maximum level for X&Y (more sprites onscreen with color change is not possible unless I find a miracle). Ran out of total palette colors near mid screen, Shadow & Highlight mode enabled to shadow more colors from that point. Shown on Hardware MD 1 VA 6 + PVM. Coding was a REAL headache, it uses ~ 97% of the cpu/dma time and timing is very tight. Took 3 days alone just to get the music to play - PCM was taking up too much cpu (little cpu to spare). XGM2 sound driver helped & lowered cpu cost, thanks Stephane Sprites are moved independently at 18 different speeds and their distribution was tricky. Background Planes A & B used for spinning Galaxies. #SGDK #SegaGenesis
Shannon Birt102,625 views • 2 years ago

** MEGA Parodius Scaling Effects Part 1 ** One of the big challenges with the Parodius Megadrive port is Stage 8's boss - The puffer-fish *Pooyan* with his full screen scaling effect. The goal is to be very close to the arcade (with extras on top ) so I thought lets tackle it head on to see how close we can get. I was also keen to jump into another scaling code rabit hole haha. Pyron pulled out all the stops and got me the source frames and reworked the BG tiles for this test - a big thankyou to him , Vector Orbitex is busy working on Stage 2 tracks so the team is working hard all round on this port. The MD has no sprite / background GFX scaling hardware , however the VDPs Vertical scroll can be updated per scanline to help vertical scaling on backgrounds, but there is a cpu cost to manage all the interupts so thats not free either. With the Horizontal scaling there is no help at all , apart from a semi-friendly packed pixel format for the cpu to work with, its not quite chunky format but better than planar format still for scaling. So its falls back to the 68k CPU to do all of the horizontal expansion which is the largest cpu cost. Basically drawing strips of either 1x, 2x, 3x or 4x wide columns at speed. So we are one week into this Boss's routine and you can see from the below video the horizontal scaling is implented ( vertical will be in the next update ) . We are scaling from 1x to 4x in the video below in 74 steps for testing . The column distributions are always a bit painfull to do - thankfully they are all worked out now. This is the third scaler I have built and the goal was with this one to make it really flexible for use in other projects also, sometimes when you optimise something to the last degree all the flexibility gets taken out of it. Currenty scaling at 12-25 FPS update here, I had some rules against some optimisations which I would use and some I wouldn't , thankfully we are a bit ahead of the Arcades animation frame rate here still and I may yet find optimisations that fit within the scope. We have vertical scaling and sprite spikes to add yet so Im hoping i can find a few more optimisations to offset things when they are implemented also. In a scale frame update we are processing close to 42000 pixels in ram before using DMA to send to VRAM . Using a 41x16 (656 tile scale buffer) - single buffered for now due to its size in VRAM. So thats nearly 21k in tiles ! I had to re-organise ram a bit to support a buffer of that size for the stage. The scaling function is written in 68k assembly , with a little C code handling the Vertical interupt code ( so the game logic can actually run & DMA updates etc ) . The DMA routines are in assembly also and customised for large chunk size ( big blocks of tiles ) which suits the scaler. I had some race conditions to sort out where the cpu was faster than DMA (sending tiles from RAM to VRAM ) and in some cases where it wasn't so it had to be balanced. We may be able to add more detail into the top and bottom of the background yet but its low priority for now until all the other bits are in !! #SGDK #SegaMegadrive #Genesis #Parodius
Shannon Birt25,470 views • 4 months ago

*** Mega Parodius Sega Megadrive Update *** Lately I've been having some fun seeing how far we can push the Parodius game engine . This is not arcade accurate - just for testing, decreased bullet timers and upped the bullet count to see what would happen re cpu usage when things are made a lot busier ! Maybe something like this could be insane mode in the options etc. Since last update we are a lot more optimised under the hood . The C based sprite engine, particularly visibility checking was speedup , overall 25 % faster. Then re-wrote the sprite engine completely in 68k assembly , 30% faster again. It took about 3 days and 1500 lines of assembly , thankfully the gains were worth it. All these gains will be back ported to S.O.T.A also as its using the same sprite engine. Usage is around 19% of cpu per frame with a full sprite load - 33 % cpu left in the busiest frame currently . Parodius is using a write the sprite list every frame type engine , so priority and meta-sprite objects can be handled with ease albiet its still a bit slower than static allocation sprite engines such as the one in lufthoheit but this is a bit easier to code for in the long run. All collision checks are been done , we are using a spatial grid system to get the collision checks done faster than a brute force approach . To get to maximum sprite count destruction is disabled in the video. We hit 80 sprites onscreen in this sequence , the sprite counter is one the Left side. We use about 16 sprites in the top hud and water line , about 21 for player attacks / missiles / shots / options . Up to 35 bullets + enemies . No lazer usage here as the Lazers use zero sprites thanks to the raster tricks , this video is all about the sprites ! Improved the water line when the Catboss is active , as he is Sprites + Forground we are doing some tile rotation tricks eg bit scrolling to give the impression of parrallax at that point . Vector Orbitex has updated the stage 1 music again and has made things even higher quality , hes mixed pcm and fm channels together to create higher quality orchestral hits for example . Pyron has started converting assets from stage 2/3 , some amazing work there . Hes well ahead of me at present which is a good thing. Still lots of incomplete animations missing logic etc , its slow going with RL getting in the way haha and 2 other projects !! Still its fun !! #SGDK #SegaMegadrive #SegaGenesis #Parodius
Shannon Birt16,084 views • 5 months ago

** Mega Parodius Update ** The team have been busy over last couple of weeks , implementing more of the games engine. WIP since last update : White Bell power up ( this is the text attack ) Blue Bell power up ( full screen explosion ) Catboss & animating Trees Updated Lazers to work on the BGB layer ( Plane A updated to 64x64 tilemap ) . Pyron has been doing excellent work on Blue bell Explosion, Whitebell power up text gfx - the slogans are great !! Arcade quality tree animations have been added. Feeding me a lot of videos so we can replicate the arcade port more accurately. Vector Orbitex has updated the music to mark IV for stage 1 making it smaller yet again , he's also added the Orchestra Hit in , potentially more samples can be added back in now also as the song now is a miniscule 57 kb. I keep telling him its 2025 - not 1990 for rom sizes haha , a professional is always a professional though !! The Blue Bell power up uses the static large sprite class I made for SOTA where it supports unlimited amount of sprites per object and detects all the reverses / flips & uses the same tile pointers where it can and crunches it down into single sprite object. We use up to 40 sprites in the Explosion but only 147 tiles needed in vram thanks to clever use of mirroring. The Catboss is easily the hardest enemy in the level for a few reasons - we also had to free up Plane A so the boss could shift upwards onscreen, so lazer effects were shifted to Plane B. The bit that caused me the most issues was when he sits in the water line between the two islands. He is quite wide and also has overlapping palettes and animating parts , to do it solely with sprites would have lead to severe dropout at times. At the waterline we have to simulate 3 background planes and sprites at that point and we only have 2 background planes. Luckily the MD sprite engine is very flexible and we were able to recreate the arcade look at this point with some sprite trickery, the water-line is now sprites . So we use Plane A + sprites to recreate him and use a lot of plane animation to reduce the amount of sprites needed. For example the face, the tail the propeller are all plane A animations . I analysed the SNES/PCE versions and we use less sprites than those versions for him so that will help reduce the chance of sprite dropout when attacking. The Catboss is only about 1/2 done , all damage states, the onboard penguin factory, bullets from Cannons yet to added etc. He wraps around at the end of the vid as theres no destruction routine in for him yet . No extra enemies in at this stage , tackling the hard parts first etc. We took the arcade GFX for the Trees that sway around under the Catboss, all the animations are in. There were some DMA bandwidth issues originally I had to sort out as the Catboss has several animating parts + swaying Trees was leading to overload so after some load balancing it all is playing nicely !! We still have loads of stuff to add , collisions are not in - normal enemy waves etc but yeah a lot of future issues were sorting out just getting this far. So the team is very happy with the progress !! #SGDK #Parodius #SegaGenesis #SegaMegadrive #indiegame
Shannon Birt19,194 views • 7 months ago

** Mega Parodius Update ( MegaDrive / Genesis ) ** 2 vid updates - In the first the Vic Viper players ship is heavily damaged .. only the bomb bay is operational ... so the viper goes on a bomb *blast* processing rampage !! ... This shows enemy destruction and some polishing of the bomb effect. The 2nd vid shows VRAM handling of objects with the tile viewer opened below the gameplay window. You can see objects load in , then as only the burning chests remain those animations are shifted live to maximise free object buffer. Progress since last progress vid : All collisions now implemented : Enemy to Player added , Bomb to Enemy added, Enemy Destruction added. Auto Defragging VRAM system implemented for Enemy Objects. Supports variable slot size also to maximise tile space . Fixed slot sizes wouldn't allow enough slots as they would need to be too large to cover all objects. Without defragging the VRAM would become like swiss cheese after a few screens of enemies also making larger slots difficult to allocate. Vram was getting tight due to things like the Blue Bell Bomb / White Bell text needing a reserved amount of vram ( as they can occur anywhere in the level via powerups ) . Theres also theres quite a bit of variety in Level 1 with warmup enemies , bottle enemies, chickens, crabs, orcas, chests, bees, penguin bathes, walking penguins, bouncing heads etc. We are also using all the arcade assets without trying to cut frames. It can't be loaded all at once so a dynamic system is needed. The enemy object buffer is 444 tiles presently for Level 1 , but the Catboss for example takes 308 when he's onscreen so things can get squeezed. For Mega versions of levels I wanted to ramp things up so that might mean we need more diversity in places than for the arcade accurate option , this system will help that also. The system can stream animation or utilise static animation if vram allows. Seems a mundane thing but sloppy vram management is the achiles heal of GFX diversity in a retro game . To help reduce the Bell effects VRAM buffer , Blue Bomb tiles required reduced to 120 tiles Max ( was 172 ) with no loss of quality . I've also reduced the sprite count by 6 sprites overall - down to 46 sprites used at max frame size. Lots more action / enemies to add yet but particularly the VRAM handling had to be improved before we can implement everything so glad thats in place now. Pyron and Vector Orbitex have been busy with upcoming GFX / Audion for the port , as always I'm very gratefull to have these Masters working with me on the port . #SGDK #Parodius #SegaMegadrive #SegaGenesis
Shannon Birt12,721 views • 5 months ago

** Mega Parodius Update ** Since last showing : Added HUD power up line. Added animating water layer. Added HUD Score / Hi Score & Lives top HUD. Added Missiles - the way they run on the ground and follow hills is pretty cool I think . Added Double shot . Added 2 Lazer segments per Ship / Option as per Arcade , also variable width lazers ( this was a major pain to get working ) - now they can be up to 256 pixel wide. The longer attack is pressed the longer the lazer segment. Still need to add Lazer collision detection with forground, Lazer coding is the gift that keeps giving it seems ! Stage 1 music is on its 3rd revision from Vector Orbitex , the Orchestral beat was added via the PSG chip since the last update . Its really a treat for the ears working with Vector !! Pyron has been feeding me lots of samples for the voices / SFX , also retouching a tonne of GFX from the arcade and early start on Level 2 artwork, which is looking superb ( as usual from Pyron ) even at this early stage. Speedup Horizontal Interupt Sorting routines by converting from C to Assembly for a 40-50 % speedup . Took 3 days but was worth it . Good thing is this will be backported to S.O.TA also. Using nested macros in Assembly for the lazer segments ( there are 10 of them ) I've been able to clean up the Lazer handling code and with the sorting routine speedup its helped as its now handling twice as many lazers segments. Using forground for game objects like we do here for the lazers is much more painfull that it should be due to the forground plane wrapping around. So every lazer segment has to check for plane wrapping boundaries etc. Worst case 10 lazers get split into 20 smaller segments to handle the plane wrapping . Benefit ofcourse is the massive coverage we have with no sprite overloading , I estimate its saving up to 40 sprites to use the FG for Lazers !! Hopefully get some enemies in the next update !! #SGDK #Parodius #SegaMegadrive #SegaGenesis
Shannon Birt17,584 views • 8 months ago

*** Parodius Update - LAZERS !! *** How many sprites do we have to use on the Sega Genesis to make 4 x 160 pixel wide lazers ?? 10 ? 20 ? ZERO !! Which is really great as when the options overlap all with Lazers using sprites would have lead to sprite severe overload / dropout otherwise. So yes we have some raster trickery going on . I think this might take the cake for the most exotic effect Ive added just for a power up type haha. Breaking down the effect. 1.) Lazer tile rows ( the tile rows the lazers are currently on ) are copied to an offscreen area of the plane . I used the DMA VRAM to VRAM copy mode for this. You can see these offscreen rows just above the Game Videos window in the Plane A tilemap view. 2.) Then a solid block of Lazer colored tiles is drawn at the position of the Lazer horizontally in the offscreen buffer we just copied too - these are 8x8 tiles. 3.) Then onscreen when as the display is being drawn we change to the Lazers row at the correct pixel line offset for exactly 1 scanline then change back to the normal screens next row. I'm using the Horizontal interupt system developed in SOTA for handling the interupts for this. The technique used has been done before on the NES ( Salamander tech demo ) , as usual some of the best techniques come from the 8 bit systems , still it presented challenges getting it working on the MD. These irregular spaced interupts on the Genesis are a little bit of a problem too . All the height sorting has to be done on the frame before. Whats very interesting about the VRAM to VRAM copy DMA (Copy DMA) is it runs asynchronous to the CPU. Normally ROM/RAM to VRAM write DMA (Write DMA) halts the CPU during the send operation but with a Copy DMA I can pipeline one Copy DMA setup while the previous one is copying still . So even though the Copy DMA is 1/2 the speed of a Write DMA with the pipelining and no stalling its probably on par or better in some cases , where a copy makes sense to use. Theres still need some fine tuning , might make smaller lazers with more breaks etc. The Lazers can be full screen width , or narrow as we want so bit of fine tuning here to come. Pyron Vector Orbitex #Parodius #SegaMegadrive #SegaGenesis #SGDK
Shannon Birt16,162 views • 9 months ago

** SEGA GENESIS - LUFTHOHEIT - Tunnel Stage Preview ** We are pleased to show an early preview of part of our Tunnel/ Vortex Stage. Big shout out to Carsten666 for his gorgeous Graphics, CYBERDEOUS - Crouzet Laurent for the amazingly well matched Audio to this level, Stephane for creating SGDK in the first place and being very supportive with new features in SGDK also. Technically this stage was a bit of a challenge, some notes below re this. To drive the rolling texture of the background - 40 horizontal interrupts are used, executing 120 scanlines of color change, changing 5 colors per line = 600 color changes per frame. Variable spaced interrupts are used for expansion / compression effect. Four stages of brightness used for every texture / pattern , darkest in the center of screen , brightest top & bottom. New colors created by alternating two similar colors at 60 hz, for seams between brightness regions to increase the blending between regions. Co-operative Multi-threading system used to reclaim huge amounts of CPU within the color change interrupts. For example all rolling Cannon & Cannon bullets and Debris are moved using this technique - up to 25% of total CPU can be reclaimed ( its normally wasted polling for rhs/hblank ). Heatseeking missiles, these need trajectory's recalculated frequently and doing that at speed can be tricky - lots of missiles launched at Mid video and its the heaviest CPU load in the demo ( these are not using the Multi-threading technique yet ). Variable rate collision checking, as bullets gets very close to player the checking is done at 60 fps, as they get further away the checking drops off rapidly - this saves cpu. Runs 60 FPS at all times, works on real HW also but captured on emulator as my phone doesnt take 60hz video without getting out of sync. Intro & Foreground effects are coming, currently no foreground is present as its not quite baked enough yet, we have some cool things we will do with the extra plane yet. Lots of good stuff to come !! #SGDK #SegaGenesis #SegaMegadrive
Shannon Birt23,873 views • 1 year ago

** Parodius Update ** The team - Pyron , Vector Orbitex and I have all been flatout busy .. still we have had time to do some wee bits on Parodius for Sega Genesis. Since last update : More colors !! the background now uses Interupt trickery to have 19 colors so far (from 16) . Just got it working today as the lazer interupts colliding with the color change interupts had to be sorted out. So there are more 3 more blues shades in the background. You can see index 0 and index 11 in the CRAM viewer re-using color indexes on the RHS as the screen draws. Theres about 9 interupts driving lazers and background updates now, the cpu sorting / setup is costing about 8 %cpu but I'll live with it for now. Stage 1 track reworked by Vector, reduced vgm size to 101 KB ! ( xgm2 further reduces this to 53kb ) And it also includes the choirs, recreated in FM and PSG sound. He promises further enhancements to come too. Vic Viper Shot and Lazer SFX added , Speed-Up , Lazer Announcer speed samples added . I'm very happy with how the voices turned out in particular , Pyron has supplied modified samples to get better volume levels. Background collisions for the standard shot implemented , next I'll do the lazer . More of the vic viper power ups and Power up bar hud / animating water to add yet. #SGDK #Parodius #SegaMegadrive #SegaGenesis
Shannon Birt13,075 views • 8 months ago

** SEGA GENESIS / MEGADRIVE Software Scaling + Rotation *** Sega Megadrive can't scale backgrounds and rotate sprites in software at the same time ?? - hold my beer !! After Scaling I've been tinkering with Rotating sprites in software and I think it looks pretty sweet ! In the video 4 * 32x32 sprites are rotated through 64 steps at 30 FPS in software, it could be 60 FPS and more rotating objects if we were not doing the scaling at the same time but even blast processing has its limits ;-) Rotation at 30 FPS is far smoother than you typcially see in even in pre-rendered rotations anyhow ( a 64 frame 32x32 rotation is 32kb - not small ). Challenges were make it fast : very fast as this needs to work at pixel level, not double pixel like scaling. The megadrives packed pixel format (2 pixels per byte) makes that a little bit tricky . When I started the algorithm was 3x slower than now. Make it sensible : has to be usable in game , had to present a rom size reduction over pre-rendered animation. Make it flexible : so we can rotate frames in the background using up idle cycles (end of frame) and store those frames to vram for very heavy cpu scenes, so we can still have very smooth rotation with very heavy cpu demands still. Thanks to my team Carsten666 for the GFX and CYBERDEOUS - Crouzet Laurent for the marvelous tune. #SegaGenesis #SegaMegadrive #SGDK
Shannon Birt19,378 views • 1 year ago

Warning : Blast processing overdrive !! Whats better than 440 sprites in 440 colors on Sega Genesis (eg last sprite multiplex demo) ? 660 sprites in 660 colors !! Did away with interupts and now fully racing the beam, Atari 2600 mode basically ! 3 sprites re-positioned and colored every raster line (a full sprite palette every 5 scanlines). Ran out of Total Palette 3/4 down screen, 512 colors total on Sega Genesis so enabled shadow and highlight mode to get extra colors from there on. Runs 60 FPS and have the full Vblank left too and dual backgrounds to play with yet !! GENESIS DOES !! #SGDK #SEGAGENESIS
Shannon Birt26,739 views • 2 years ago

*** Parodius Demo Update *** After seeing my good friend Pyron amazing Parodius artwork , I could not let that go to waste. Its a crying shame Konami's shooters did not make it to MD at the time , time to rectify that (in time). The video shows some of the progress so far. Stage 1 scrolling using the streaming scroller from lufthoheit to automatically manage the tile management for the scrolling rather than using different sets etc. Its great when I can grab bits of code and apply them to new projects, it speeds things up !! Lufthoheits new stage is coming along well also and has its first enemies in , hopefully show something of that soon. The VRAM view is to the right , we will have plenty of vram left for objects without resorting to much manual management it seems. ~ 1/2 vram left. It looks like the biggest challenge for this level is the Cat Ship mid boss - the end boss seems easier in comparison for a few reasons. I've analysed the way it was done on PCE and SNES and will come up with the best option for MD. More to come on that soon. At present we will target mainly assembly , so performance won't be an issue . I'm not sure we need a sprite multiplexor for > 80 sprites , but we will use one anyway just to not have regrets/changes later on and for the Hint color effects the multiplexor can do also. We have an A level musician volunteering also for those concerned about the audio side of things - it wont dissapoint I'm sure. As this is now my 3rd / 4th project it will be done as time permits so no gaurantees on timelines sorry - we are all hoping to do well by the community however. #SGDK #Konami #Parodius #MegaDrive #SegaGenesis
Shannon Birt12,526 views • 9 months ago

I was playing around with my scaling code and thought it would be cool to play the current Lufthoheit service screen on a CRT on the tripple bypassed MD2 i got recently. I've made the code a bit more efficient and added a whole scale factor so now it scales 320 pixels wide x 4 times ( source art width ) . So the ship here is scaled 4x larger than the one we scale at the entrance to the cave level . I'm working on 5x next . Scaler and Rotater are written in 68k assembly for speed . Finally I got the non-safe interupts (eg register allocation / seperation ) to work which yielded a big speed gain . Basically you reserve some of the 68ks registers only for use in the Horizontal Interupts (hints) and other code outside the Hints must not use them during the Hints that are occuring every line. The Hints are doing the vertical scaling work . Its a bit tricky to syncronise and protect but finally it worked. The MDs VDP is scaling vertically (its still not free) , the 68k cpu is scaling the ship horizontally . The 68k does the asteroid rotation . #SegaGenesis #SegaMegadrive CYBERDEOUS - Crouzet Laurent Carsten666
Shannon Birt11,606 views • 10 months ago