Loading video...

Video Failed to Load

Go Home

** 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...

17,494 views • 3 months ago •via X (Twitter)

0 Comments

No comments available

Comments from the original post will appear here

Related Videos

** 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 Birt

21,104 views • 3 months 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 Birt

25,545 views • 6 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 Birt

16,162 views • 10 months ago

** Sega Genesis 3D Engine Update 8 ** Significant improvements all round as you can see and hear from the last update !! Foremost - A huge thanks to Toni Gálvez - Megastyle - BG. who has joined the project to create a bit of 16bit low poly magic. Toni's an Amiga fan but also crazy about game dev in general, he's worked on GBC, GBA, PC, MD, PSP, C64, CPC, MSX... and others. Gaming titles include War Times, Metal Gear, Rocketman, Tintin & Asterix to name a few. He's provided the great new ship model you see on screen - new striped buildings, all the backgrounds / palettes etc. There's a lot of models he's given me which need to be added, also he will be planning a lot of the level design. Very happy to have him help me turn this into something more than a tech demo as I have my hands tied pushing the MD as far as it can go haha - there is no cpu cycle to be spared. Also many thanks to my good friend CYBERDEOUS - Crouzet Laurent for the Music for this showing , I wanted to have the music load occurring so we have a realistic benchmark for performance and he was only too obliging. If you're into MD chiptunes check him out !! Since last update : New player model , substantially more detailed than the Arwing. Last update had a 23 triangle Arwing , this update has a 39 triangle custom model from Toni. We had several to choose from , others will be used for enemies . 3D Buffer size increased 25% to 256x160. This was quite tricky as I'm close to the DMA limit even with an extended vblank . Spent a few days thinking of how to do this as like anything retro every solution has a drawback, finally got a workable solution. It makes a big difference to have a bit more vertical height . Z Rotation added ( the screen tilting left to right ) , small hit to vertex transform on cpu thanks to look up tables doing the heavy lifting, saving 4 multiplies per vertex. Multiple speed ups in rendering code. Onscreen paths with no range checking used until Z is close enough to cause clipping , partial onscreen drawing pathes that need to check boundaries, quad rendering completely rewritten - was very very painfull to get right . I found out the hard way that things are great when they are not rotating in the Z axis haha . Partial buffer draw optimisations - which have helped with the massive dma load , sending up to a 20kb buffer in a single frame needs a lot of optimisation. Min / Max tile lines are analysed and only sent if dirtied , reducing most buffer swaps substantially. Still some issues to sort out , at times you can see the flicker near top of screen when frames are near full height . I need to optimise that a bit. Due to the onscreen buffer system a full Sprite background had to be implemented almost Neo Geo style. This flips the usual MD rendering system on its head as it uses both foreground and background layers for a foreground 3d plane and sprites for the background. This presents a few issues, one is to get a tilt effect on the background by using narrow sprites (16x32) we run out of sprites when trying to cover the screen. Thankfully the MD is not limited to 80 sprites, to fix this a 114 sprite multiplexor is used to draw the background, its completely made up of 16x32 sprites ! Why do things this way ? speed . Its the interleaved foreground/background layers that allow a double buffered ram system writing to write to vram using dma in a completely linear fashion - virtually no tile translation needed. The negative is you have no planes for the background, that's where the sprites come in . Thanks to H40 mode we still have a few sprites we can use for effects in the forground also . Thankfully we can implement a fairly good tilt still for the background using sprites, in future updates this will be able to move horizontally also and a bit of vertical movement. XGM1 music driver in use to simulate music cpu load, XGM2 unfortunately with the massive DMA needed to shift the 3d buffers would slow down at times rendering it unusable, XGM1 plays at full speed - albiet with a bit more of a cpu hit. Together with the sprite multiplexor and the music driver active theres a 10 % hit to cpu so I've had to play around with draw distances / object heights and other optimisations to offset that. Not to mention the larger buffer takes more cpu to fill also. Everything is placeholder so will be changed with proper stage design. We are averaging 20 FPS in the current video, I'll push for more as always !! Progress continues on my other projects , updates soon on those - retirement can't come quick enough . #SGDK #SegaGenesis #SegaMegadrive

Shannon Birt

32,825 views • 11 days 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 Birt

16,084 views • 7 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 Birt

23,873 views • 1 year 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 Birt

19,284 views • 9 months ago

Where is the triangle? Alex O'Connor thinks consciousness is the one thing materialism can't explain away and he has a deceptively simple argument for it. Close your eyes. Picture a triangle. You can see it. The shape, the angles, maybe even the colour. It's right there, vivid and undeniable. Now ask yourself: where is that triangle? According to Alex, this single question cuts to the heart of one of philosophy's oldest problems. A strict materialist, someone who believes everything in the universe reduces to physical matter has to say that triangle exists somewhere in the neurons of your brain. But if a neurosurgeon cracked open your skull right now, they wouldn't find a triangle anywhere inside. "If everything you experience is reducible to the material when I close my eyes and see a triangle, there really is a triangle there. I can see it. It's there. And I think well, where is that triangle? The materialist has to say it's reducible to just somewhere in your brain. But if I cut open your brain I'm not going to find a triangle inside of it." He anticipates the obvious pushback. When he raised this on YouTube, commenters pointed to computers as a counter-example: if you cut open a computer, you won't find the triangle it's displaying on screen either. But the hardware is still producing a real image on a real screen. Alex's response is that this analogy doesn't hold because the mind has no screen. There is no separate interface between the brain's processing and the experience of seeing. The brain is the computer and the screen. Which only deepens the mystery: somehow, purely physical processes are generating a first-person, subjective experience: colours, shapes and images that can't be located anywhere in physical space. "It's as if the computer itself somehow had a triangle in the computer's own first-person subjective experience. Like where is that triangle that you can picture in your head? Where the hell is it?" For Alex, consciousness isn't just another interesting puzzle in the philosophy of mind. It's the big objection to materialism. The thing that, once you sit with it, seems to demand that there is something more going on than matter arranged in clever ways. He points to something as ordinary as dreaming as a case in point. Every night you produce vivid images full scenes, faces, colours without any external input. An entire visual world conjured from nowhere. Where does it come from? Where does it go? "Even just when you have an average dream, it's fascinating to think what's going on there. You've got images in your head, you can close your eyes and you can picture things, you can see colours, you can see shapes in your head. Like where are those shapes?" The triangle thought experiment has a way of making this undeniable. It's not abstract. You can do it right now. And when you do, you run headfirst into the hard problem of consciousness: the gap between the physical description of the brain and the felt quality of experience that no amount of neuroscience has yet bridged. Whether you find Alex's argument convincing or not, the question it raises is genuine: how does purely physical matter give rise to the inner world we each inhabit a world of colours, shapes, memories, and dreams that exists nowhere except in the first person?

Mateus — eu/acc 🇪🇺

12,267 views • 4 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 Birt

13,389 views • 6 months ago

*** SEGA GENESIS/MEGADRIVE - SCALING PART 2 *** Whats better on a Friday than seeing some scaling effects on the Megadrive ? .. nothing, so read on ... In the previous part we were software scaling in either axis by a given factor, but I couldn't change the scale factor per scanline on the same frame, so I couldn't skew the base image for tilting into screen eg Mode 7 type effects. - One issue was it was scaling column by column which got wrecked for performance trying per scanline adjustments. So I converted to a row scaler rather than column, this allowed expansions and contractions on a per scanline basis. - Speed up the code significantly , now running a sprite load + music + scaling on cpu with ~50% cpu free. Relied heavily on Python scripts I wrote to generate the 68k assembly for this as it was mind numbing labourious. In doing so I got the scripts competing with each other to come up with the fastest method for each scale , I'm starting to like python ;-) - Tried all sorts to speed up the horizontal interupt - handles vertical scaling, exotic methods eg unsafe interupts / racing the beam & updating the vertical scroll every X cpu cycles, in the end the Z80 cpu (audio) stealing the 68k cpu bus intermittendly just killed these ideas as it would only be 95% stable, ended up just doing smarter interupts that saved a lot of cpu instead. - The good and the bad, spent too long on this is the bad, the good is we will need it in Lufthoheit in a few places to make up for that !! Carsten666 CYBERDEOUS - Crouzet Laurent #SGDK #SegaMegadrive #SegaGenesis

Shannon Birt

11,070 views • 1 year ago