Posts

Showing posts from July, 2020

Babylon 5 Starfury Model

Image
After two months, I have finally 'finished' the Starfury model. The painting is really untidy in places, and I really could not be bothered with the dozens of tiny water-slide transfers.  That said, I am still stamping this as DONE because it was getting really tedious towards the end. I love the Starfury design as a nod to Newtonian mechanics in sci-fi.  It is the most believable space fighter I've ever come across and I'm really glad I have finally got round to building this. The model design itself has many flaws.  Many of the pieces didn't fit snugly together, and the lower guns had to be literally chopped in half to get them stuck on.  They must have known of these flaws and just decided to ship it anyway.  After all, it's only fanboys like me that would buy it. I didn't have the right grey to paint it, so I mixed the colour from Vallejo's Cold Grey and some cheap white acrylic.  It's come out a little more blue than I wanted, but not badly eno

DOS Coding: Sound Blaster sound

SB Documentation link . BASE_PORT = the base I/O port the SB is listening on (most often 0x220, but see 'detecting the card' below) Single vs Auto mode: For single transfer playback, you don't really need the Interrupt Service Routine. I've shifted to auto-initialise mode because I was getting clicks between each transfer. For auto-initialise mode, you set up the DMA for the whole buffer, but tell the SB/DSP it's half the buffer size.  That way, once the first half is transferred, you get an interrupt to say you can overwrite the first half.  Then when the whole lot is transferred, you get another interrupt to say you can overwrite the second half.  (By that time the DMA has already auto-reset back and started transferring the first half of the buffer) Step 1: setting up sb_read() and sb_write() subroutines You should really check if the soundblaster is ready before reading or writing. Seeing as you need to write and read to detect/reset the card, these really come

Update: SilkWorm Tribute

Lots of trial, error and frustration has got me to this stage: This video was screen-grabbed from pcem running as a 386SX. 386s are SLOW AS ALL HELL, so I had to do some trickery for the parallax scroll: Use a 'trash buffer': I set up the VGA so there is 32px of invisible data to the left and right of the display (and also above it).  This means I don't have to worry about clipping my sprites.  If they're even partially on-screen, there's enough trash VRAM around the screen that it won't wrap round or corrupt other pixel data. Shrink game area: use a status display to shrink the rendered game area.  I did this with the VGA's Line Compare functionality, so that when it reaches pixel row 176, it will reset to render from VGA offset 0x0000.  (I also had to change the Pixel Panning Mode bit in the Attribute Mode Control Register because I use hardware panning). Solid colour blanking: this can be done with an asm rep stosb and a suitably large value in cx. 

July Monthly Projects

Last month's projects Physical make: Build a model Starfury I have had in the cupboard for literally decades . This is going fairly well but isn't finished.  I've had some delays waiting for supply deliveries but mostly I've been taking my time over it. The model has plenty of gaps where the pieces don't quite fit, and a glaring design-fail with the lower gun pieces.  I'm going to keep this one going this month and post photos once it's done. Coding make: Write a DOS Mode-X tribute to Silk Worm .  This has involved so much learning.  The sprite code took a huge amount of work, and now I'm writing tilemap code that is going to have to be really fast if it's going to be usable.  Most of the screen is going to have to be rendered every frame if it's going to look anything like the original.  So I'm keeping this one on for July as well.  I really want to get something recognisable and playable (even if it's not properly complete) before I