@TopazRabbit@oldbytes.space
Via Topaz 🐇
Implemented Bresenham line drawing in assembler this morning for more assembler, math, and Amiga Intuition practice. #commodore #amiga
Here you’ll find regularly updated posts from the various places where The Industrious Rabbit happens – across the Fediverse, here on this blog, and in the various apps that support the project.
Implemented Bresenham line drawing in assembler this morning for more assembler, math, and Amiga Intuition practice. #commodore #amiga
There were many more machines and electronics doo-dads there that I didn't get photos of! #retrocomputing #sharp #ti99 #commodore #amiga #vectrex
Hardcore retro gaming. #retrogaming #retrocomputing #ibmpc #atari #pacman #commodore64
Peak computing. #retrocomputing #windows #zork #atari
I went down to a retro computing meetup @bluewizard@mastodon.sdf.org runs on Sunday! I brought my MiSTer and the current build of Bun Runner 2000, which was a big hit. Next few posts will have more pictures from the event. More details at https://www.bluewizard.net/pages/vintagecomputermeetup/.
#retrocomputing #commodore #amiga #acorn
slowaris
Big thanks to @TMBGdotLOVE for the great show this year! #tmbptmbg #tmbg #internetradio
Got a main menu working and got even more rabbit animation sprites in place! #commodore #amiga #indiegamedev
@TMBGdotLOVE I'm tuned in, doing what I did in the 90s: write games for the Commodore Amiga and listen to They Might Be Giants.
We have a main menu! It’s very simple, but it also forced me to restructure huge chunks of code in order to allow swapping out the menu and the game code.
This included asset loading code, and this restructuring caused me to find a bug that took a few hours to track down. Symptoms:
What it came down to was this line:
; D0 contains the address to the background art ADD.W #GAME_SCREEN_LAST_WORD_POSITION,D0
I was adding a value to an address and scoping to word boundaries, and it kinda worked, as long as I wasn’t wrapping around a 64k boundary when adding that value to the address. Changing how memory was allocated, as sprite memory was allocated before screen memory, would change the start address of screen memory and make this “work”.
But I have a menu now! Oh and some more animation! The rabbit will angle up and down depending on vertical velocity, and the jetpack has animation now, too!
Next will be changing up some game behaviors, and then on to some fun bits of the game.
They Might Be Playing They Might Be Giants is tomorrow! https://www.tmbg.love/
I'm making some more strides in getting comfortable with Amiga dev in assembler. I figured out how to structure files and code in a way that works for me, switched to BDebug, and am getting better at catching my common assembler pitfalls before I fall into them.
Another week of slow progress, but this is mainly due to some really heavy refactoring work. I wanted to use ptplayer for music, and that required having my code in a ready-to-link format. If I was going to do this, I was going to do it right, and so I restructured all of the code using all of the techniques I use when working with higher level languages:
My biggest problem holding me back was that MonAm did not like it as all when I gave it linked code:
Along with all the refactoring, I switched to using BDebug in the Barfly assembler package, and I haven’t looked back. Symbols, source code, proper OS 2.0 windows, full mouse support, command line arguments, and lots and lots of great options.
Along with reworking the game code in this way, I restructured my art compression tool to get more practice. I’ve gotten a lot better at restructing assembler code and figuring out the good places to divide up modules. Once I feel really confident that this is the way to go, I’ll write up an article detailing my approach, if you want to try it out yourself.
Oh, and music playback works!
Amiga runner game update: I have enough of the graphics rendering pipeline in place that I can start on the rest of the game! #commodore #amiga #retrocomputing #indiegamedev
Not as much progress this week, but some good code cleanups and performance enhancements:
Next will be getting the double buffering to happen independently between the front and back planes, which will allow for smooth backgrounds and foregrounds. Then I’ll work on externalizing some more of the game from the code, moving maps to separate files that can be loaded in and adding some other colors to the output.
Lots of progress this week!
I also fixed up some really stupid bugs and got the game working on my MiSTer and A1200:
Additionally, I tightened up the art pipeline so when I’m creating assets, it’s easy to get them into the game. I will need to figure out the best way to automate more of the XPK compression, too.
Next I’ll be getting the rest of the draw operations for the background into the game and spreading the writes to the double buffer over a few frames.
Going to write up a blog post every week with the progress of my finite-at-first runner for the Amiga. My goals:
I have no timeline to get a WIP out for testing because I’ve never worked in Assembler nor this deeply with the Amiga and AmigaOS before!
This week:
I also learned:
My sprite and XPK compression experimentation is complete! I cranked out a quick 16 color background in DPaint V and combined it all together with the sprite graphics into one archive, packing about 44kb down to 12kb. A little shuffling of memory allocations and Copperlist instructions and the 16 color rabbit is now running around over a 16 color background. I'm going to clean up the source code a little bit, and then get started on my next video. #commodore #amiga #assembly #retrocomputing
Not a terribly exciting update -- I managed to get XPK compression and decompression working for my small sprite exercise, so I can save and load compressed assets. This was mainly to see if I could interact with this library, and to sharpen my 68K assembler skills some more. #commodore #amiga
Code now has animation and a proper sprite color palette! #commodore #amiga
Current progress: false color DVD menu rabbit. This code is also the most advanced non-AMOS-extension-related 68k assembler I've written so far. #commodore #amiga #assembly
Current progress:
This is good enough to start turning into an Amiga sprite. #pixelart #animation #amiga #furryart
This animation is good enough. Now to turn it into a 32 pixel wide 15 color pixel art animation for use as Amiga sprites. #animation #mastoart #furry #furryart
The serial drawing tablet arrived and it works great on my Amiga! #retrocomputing #commodore #amiga
The A1200 is in a better state now. The last piece should be arriving later this week. #commodore #Amiga
It's time...time for a video on the Commodore Amiga Blitter! Topaz walks through the memory copy capabilities of this feature in the context of a small demo written to exercise the blitter, copper, and sprites.
Thanks to Tyrel (@tyrel@mastodon.social), corb0!
References
Code:
Documentation:
Credits
Music:
SFX:
It’s time…time for a video on the Commodore Amiga Blitter! Topaz walks through the memory copy capabilities of this feature in the context of a small demo written to exercise the blitter, copper, and sprites.
Thanks to Tyrel (@tyrel@mastodon.social), corb0!
Here's my Nandland Go Board (https://nandland.com/the-go-board/) running through some of the exercises from the creator's book and website:
I posted the Verilog source code that I reworked for these examples on my Gitea server: https://code.hackerbun.dev/john/go-board-code
The EGA and VGA video standards share some similarities with how the Amiga did graphics, but the similarities end when it comes to the 256 color graphics that defined 90s PC gaming. Topaz walks you through the basics of how those video modes worked, and what made them get so fast over time.
Thanks to Tyrel (@tyrel@mastodon.social)!
References
3d game source code:
Code on Hackerbun:
2d games and the EGA pipeline:
Why are, like, half these examples id Software games?:
Credits
Music:
The EGA and VGA video standards share some similarities with how the Amiga did graphics, but the similarities end when it comes to the 256 color graphics that defined 90s PC gaming. Topaz walks you through the basics of how those video modes worked, and what made them get so fast over time.
Thanks to Tyrel (@tyrel@mastodon.social)!
Version 1.1.4 of the AMOS Pro BSD Socket extension is out, and it’s a big one. Thanks to both an anonymous contributor and some improved M68K assembler debugging techniques, this version has multiple crash bugs fixed, as well as an issue that prevented the extension from working well on non-emulated Amigas. Upgrading is highly recommended!
Grab it from Hackerbun Gitea or Aminet:
(1.1.3 was an internal release and not published to the public)
Lots of great TV-related stuff in the InfoAge Radio Museum. #VCFEast #television #museum
SCIENCE! #VCFEast #TheSimpsons #museum
Lots of other fun stuff!
* A Nabu set up with a run'n'gun'n'fly game
* A Tandy Color Computer running FujiNet and showing Mastodon toots about Sonic the Hedgehog
* A SGI Personal Iris
* @paulrickards@mastodon.social was pen plotting away
#vcfeast #retrocomputing #nabu #fujinet #silicongraphics
I like little computers and I like BeOS (at least the idea of it and those cool yellow toolbars) so I had a good time at the @ActionRetro@bitbang.social table. #VCFEast #BeOS #HaikuOS #retrocomputing
Lots of Macs, including one I drew Topaz on last year as well! #VCFEast #Apple #Macintosh #retrocomputing #rabbit #furryart #mastoart
I made a joystick! It works on the Amiga and it's real weird. Let's try to play some games with it.
Hot on the heels of 1.1.1 comes even better fixes to string handling in the extension. The issue is that, while the strings returned from the functions were immediately usable, they weren’t being added correctly to the string space AMOS maintains, so you couldn’t do things like concatenate them. I documented the proper usage on the wiki. This fixes up all of the string returning functions in the extension, which means that Socket Recv$
should work as expected now.
Grab it from Hackerbun Gitea or Aminet:
I’ve released version 1.1.1 of my BSD Socket extension for AMOS Professional. It fixes two bugs in Socket Inet Ntoa$
, a crash bug and an issue where the null terminator in the original string was being copied into the AMOS string, causing issues. There was also an issue with the build script where the latest version of the library was appearing in the wrong place in the archive.
Grab it from Hackerbun Gitea or Aminet:
I put up the code and binary for a Smash TV/Robotron-like game I built for DOS and PCs with VGA graphics. It works well enough to be playable.
The code is up on Hackerbun Gitea. It has a bunch of code related to working with the PC and VGA card, and it’s the biggest program I’ve written in C so far. It also has unit tests using CuTest, inline assembler, and compiled sprites built using Ruby.
Take it for a spin if you like. Downloadable files are in the project’s Releases. If you have feedback, send it along. I’m not sure when I’ll get back to working on it because I have a video idea I want to do next, but who knows what the future will bring!
I’ve released version 1.1.0 of my BSD Socket extension for AMOS Professional. It fixes a bug in Dns Get Host Address By Name$
where I was incorrectly handling string termination from AMOS strings. It also adds Socket Herrno
to get error code information from the DNS resolver in the network stack.
Thanks to Allanon on Mastodon for finding the issue and testing out the fix!
Grab it from Hackerbun Gitea or Aminet:
Young Topaz has an IFF ILBM image he wants to show his dad, but his dad's on his PC. Learn about what it takes to write a simple IFF ILBM reader for DOS.
References
Source Code:
IFF Files:
PC Development:
Credits
Music:
Sound Effects:
Young Topaz has an IFF ILBM image he wants to show his dad, but his dad’s on his PC. Learn about what it takes to write a simple IFF ILBM reader for DOS.
For the fourth time I play through the Night in the Woods supplemental games, “Longest Night” and “Lost Constellation”, on the 2023 winter solstice.
For the fourth time I play through the Night in the Woods supplemental games, "Longest Night" and "Lost Constellation", on the 2023 winter solstice.
I play through a bunch of Hop to the Top: Bunny's Revenge and bounce between streaming providers while I get Owncast working. Now that my Twitch- and YouTube-free streaming setup is worked out, expect a full live stream of HttT:BR for realsies!
Download the game and see high scores here: https://rabbit.robsmithdev.co.uk/
RobSmithDev released Hop to the Top: Bunny’s Revenge and posted a video about some of the production process. I did some of the graphics for the game, as well as writing the code for the intro. For the graphics, I ended up writing some custom code to automate some of the process, and it was an opportunity to learn about a popular Amiga image format.
My typical process for making art for retro systems is:
In the case of the Amiga, I’ve used ArtPRO on the Amiga in the past to convert PNG images to whatever format I needed. With all the art I was making, and potentially remaking, I needed a faster process. ArtPRO is good, but clicking buttons on retro machine software to convert images was going to be too slow.
I was also running into an issue with GIMP not preserving the index order of the color map I had created for the game. I think I had Remove Unused and Duplicate Colors from Colormap enabled which was messing up the color indexes, so be sure to disable that if you’re using a similar process.
Due to this, the resulting color map on the output images was all over the place, so I needed to fix that issue.
I had two approaches I could take:
I chose the latter since I preferred separate image banks to start, over hard-wiring in sprite sheet locations, during initial development.
I decided to write a tool in Ruby that converts indexed color PNG images directly to IFF Interleaved Bitmap (ILBM) files, enforcing the order of the palette. It uses RMagick to load the image, and then implements IFF ILBM writer code to create the Amiga-ready files. It even supports run length encoding compression.
Here’s the source code. It drew heavily from the IFF ILBM reference found here, as well as from a lot of examining IFF ILBM files in hex editors. It only supports images up to 32 colors, so no Extra Half Brite or HAM images. If you end up using it, let me know!
I draw your requests on a Quantel Paintbox, specifically a Harriet from the early 90s. Due to streaming issues, I wasn't able to broadcast this live, but I did record the whole stream locally. I made it through three pieces: a rat holding a Quantel RAT (a mouse-like input device), a request from @imrustyok@meow.social for a TV show ad card recreation, and a request from @tyrel@social.tyrel.dev to draw his cat. I thought I was drawing his cat Henry, but it was actually Victor. Oops.
Learn more about the Quantel Paintbox:
Stream music by Nihilore: https://nihilore.com
I uploaded the full Quantel Paintbox live stream, edited a bit to trim out some stream issues and to correct some audio issues. This was my first time not only recording a Paintbox, but also recording away from home, so there were plenty of issues to work around!
Below are the three pieces I produced during the stream. They came out as Targa files from the Paintbox that I converted to JPEG.
Thanks again to Adrian Wilson for providing me access to the Paintbox and giving me lots on instruction on how to use it. Hopefully I’ll get a chance to paint on it again!
Stream music by Nihilore.
A cartoon rat holding a Quantel RAT, an input device for the Paintbox.
A parody of a TV ad card for a show called Mission Bunpossible. This was a request by Rusty Ralston.
A drawing of Tyrel's cat Victor. I thought it was Henry. Oops! Sorry, Victor.
Continued stream go here: https://makertube.net/w/7dyJqokqtdXYJFsURs6tgn
I've taken your requests, as well as a few of my own ideas, and will draw them on a Quantel Paintbox, a Harriet model from the early 90s. Watch and see how digital graphics were made on bespoke art computers long before Photoshop took over the digital art world.
I’ve been given access to a V-Series Quantel Paintbox and I want to draw your requests on it! I’ll be on the machine for a few hours, streaming the art production on my PeerTube channel and talking with the Paintbox’s owner, Adrian Wilson, while I draw. Send in your characters, ref sheets, and requests, and I’ll do my best to honor those on this dedicated art machine from the 90s! Don’t make me just draw Topaz and the Amiga custom chip characters over and over, because I will if you don’t send anything in.
Don’t know what a Paintbox is? Watch my latest video to learn more!
If you want to submit a drawing request, use the email instructions on the About page to send me your request. Attach or link to any reference images I might need. You must email me your request! Requests made on Mastodon will cause me to point you at these instructions instead.
The popular shorthand for digital photo editing is based on the name of software developed in the 90s. However, that activity was already being done by users of a bespoke art computer developed by a British company in the early 80s, and the public could see the output of this machine everywhere. So why is digital photo manipulation not called "being Paintboxed"?
Thanks to DextersTechLab for actual Paintbox footage and technical assistance, Adrian Wilson for lots of feedback and resources!
Chapters
00:00 - Introduction
00:36 - Digital Video History
01:23 - The Quantel Paintbox
02:33 - Music Videos
02:57 - Paintbox Machines
03:23 - Why is it not called being Paintboxed?
References
Quantel Paintbox Resources:
Credits
Music:
The popular shorthand for digital photo editing is based on the name of software developed in the 90s. However, that activity was already being done by users of a bespoke art computer developed by a British company in the early 80s, and the public could see the output of this machine everywhere. So why is digital photo manipulation not called “being Paintboxed”?
Thanks to DextersTechLab for actual Paintbox footage and technical assistance, Adrian Wilson for lots of feedback and resources!
I will no longer be publishing videos on YouTube, and will instead focus on publishing videos using PeerTube, the federated, community-driven video sharing platform. If you’ve never used PeerTube, it’s a lot like YouTube, except it respects you, your attention, and your data much more than Google does. This move fits in with trying to get ahead of what I’ve been experiencing on the Internet in the past few months:
I’ve changed all of the video embeds over to MakerTube, the current host for my videos. The Industrious Rabbit has a channel, just like it would on YouTube. I may start other channels for other projects. Whatever is currently on YouTube is all that will be there from now on, and those are not guaranteed to stick around, either.
One downside is that PeerTube does not have account export/import/migration yet, so if my current host goes down, reuploading everything becomes a very long, manual process, and I can’t bring along users. If you like what you see here, follow me on Mastodon just in case the worst case scanerio happens. Of course, YouTube is even worse since it has no official export or migration tools, and makes it very tough to get in touch with all channel subscribers directly! I’ll likely make one final post over there to let interested subscribers know where I’m going.
Check out the other videos MakerTube users have uploaded, and if you like what you see, be sure to donate to your instance admins.
See you on PeerTube!
My 2021 annual playthrough of the Night in the Woods supplemental games, "Longest Night" and "Lost Constellation".
Join me for my yearly play through of the Night in the Woods supplemental games, "Longest Night" and "Lost Constellation". Jump to 08:46 to skip past all my stream setup stuff.
I did it. I finished the animation. Working with this software is more challenging than I expected. It also didn't help that my tablet was having issues with Weylus after a while. I also learn just what Frisket does, and why it's important to Free the Frisket!
Skip to 2:23:54 if you want to see the finished animation playing!
I'll be taking a break from streaming while I focus on the next video, then I'll pick back up with either DeluxePaint V or True Brilliance as my next Amiga art tool to explore.
Stream music by Nihilore (CC-BY 4.0) - https://nihilore.com
Bamboo figures out how to get code he wrote 23 years ago on the Amiga to work for someone today, and it involves a lot of work with libraries.
Thanks to Piotr Kuchno for contacting me and working through debugging the code, and for the videos of the code in use on real Amiga computers! Thanks also to @ijimkoz on Twitter for valuable feedback!
Note: The project name and URL have changed! Go to theindustriousrabbit.com to learn more!
Resources
Intro:
http://aminet.net/package/dev/amos/BSDSocket - The code I wrote 23 years ago
https://en.wikipedia.org/wiki/AMOS_(programming_language) - AMOS BASIC
https://docs.freebsd.org/en/books/developers-handbook/sockets/ - BSD sockets in general
https://www.youtube.com/watch?v=EVr1AHJaGCk - The Copper Demo video, also written in AMOS, that exercises a bunch of Agnus's features
AMOS Extensions:
Amiga libraries:
Why was my server code not working?
Want to try out gaming on the classic Commodore Amiga computer? Topaz walks you through the basics of this retro computer's hardware, and the things you'll need to look for to get your own setup working.
I currently use these emulators:
If you're on Windows, you can run the venerable WinUAE (https://www.winuae.net/).
You can get Kickstart ROMs from Cloanto and their Amiga Forever pack (get at least the Plus Edition for the more modern Kickstarts) and/or from Hyperion if you want AmigaOS 3.2, a modern AmigaOS for applications.
I leave ADF and WHDLoad archive hunting to the viewer!
Thanks to Meredith, Tyrel, Dave!
Read more at https://theindustriousrabbit.com and subscribe to the channel and RSS feed for future updates!
Credits
I take Digital Creations True Brilliance 2.0 for a spin on my emulated Amiga 1200. I've never used this software before, and I discover it's actually not bad for painting, especially when using my Weylus and Galaxy Tab powered input setup.
Stream music by Nihilore (CC-BY 4.0) - https://nihilore.com
Having trouble getting MiSTerFS to work on the AO486 core? Topaz Rabbit walks you through a workaround you can do on the Linux side of the MiSTer, then describes how that workaround works.
Thanks to Tyrel (@tyrel@social.tyrel.dev), Jim (@ijimkoz@mastodon.social)!
References
Credits
Topaz Rabbit walks us through writing a pizza timer app in C on the Commodore Amiga. Follow along and learn about Intuition, GadTools, devices, message ports, IO, and even signals!
Thanks to Tyrel (@tyrel@social.tyrel.dev)!
Chapters
00:15 - Introduction
00:40 - Intuition
01:17 - Opening a Window
01:50 - GadTools
03:31 - setup and teardown
03:53 - Fonts
04:29 - Timer Logic
05:24 - Amiga code documentation
05:53 - Message Ports
06:34 - Intuition Direct Communication Message Port (IDCMP)
09:06 - Time & timer.device
10:01 - Synchronous & Asynchronous IO
11:40 - Alerting the user with DataTypes audio playback
12:43 - Signals
13:27 - Intuition menus
14:19 - The About window
14:45 - App testing with CodeWatcher and avail
15:25 - Conclusion
References
Amiga documentation and tools:
C tutorials:
Source code:
Credits
Music:
Sound Effects:
Topaz Rabbit walks through building a simple bsdsocket.library based server for the Commodore Amiga using the C programming language. You'll learn about development environment setup, waiting for socket connections & other signals, and reading and printing client data to the console.
Chapters
00:00 - Introduction
00:08 - Network socket basics on the Amiga
01:06 - Development environment setup
01:54 - Starting work on our server
02:20 - setup()/teardown()
02:53 - Control-C handling in SAS/C
03:24 - bind a socket to a port and interface and listen, and processor/networking endian-ness conversion
04:00 - Waiting for socket activity or Control-C using WaitSelect()
05:25 - Reading data from the client
05:56 - Amiga function names can be different from normal socket library function names
06:11 - setsockopt, TIME_WAIT, and SO_REUSEADDR
06:52 - Conclusion
References
Code:
Documentation:
Setup:
Credits
Music:
Introducing the BSD Socket Extension for AMOS Professional, the newest and easiest way to get your AMOS BASIC programs onto the Internet. Available now on Aminet and on the Hackerbun code repository.
This code finalizes the 25 year old project I started in 1998 to write a networking library for AMOS Professional. If you want to watch from the beginning, check out this playlist: https://www.youtube.com/watch?v=l4GNHJfYOUU&list=PLX_wfJQZe5SVK1D17NJpbmjyXI6dByOKl&pp=gAQB
Thanks to Piotr & Tyrel (@tyrel@social.tyrel.dev)!
References
Download:
API & Examples:
Extension Users:
Credits
Music:
Sound effects:
Rasterbars are a common special effect on early computer games and demos. The Commodore Amiga’s take on rasterbars are special due to the Copper, a special processor that synchronizes its activity to your monitor’s image rendering hardware.
Thanks to Tyrel (@tyrel@social.tyrel.dev)!