images | ||
old | ||
system | ||
.ccls | ||
.gitignore | ||
.rubocop.yml | ||
32x50 | ||
32x50_bun.c | ||
33x50 | ||
33x50_bun.c | ||
any_position | ||
any_position.c | ||
blitter_speed_test | ||
blitter_speed_test.c | ||
blitter_test | ||
blitter_test.c | ||
bun_test | ||
bun_test.c | ||
bun.c | ||
bun.h | ||
copper-colors | ||
demo.gif | ||
image_converter.rb | ||
images.s | ||
keyboard_interrupt | ||
keyboard_interrupt.c | ||
left_side | ||
left_side.c | ||
main | ||
main.c | ||
mask-bitplane | ||
README.md | ||
right_side | ||
right_side.c | ||
screen.c | ||
screen.h | ||
smakefile | ||
sprite-copperlist | ||
sprite-data | ||
topaz-bitplane | ||
topaz-narrow.png | ||
topaz.png | ||
types.h |
Cool Bun Demo
Built for The Obligatory Amiga Blitter Video.
Uses a bunch of C and Assembler code to drive the blitter, sprites, and copper to display high color Topaz art overtop of flying cool bun logos.
Running
Click the mouse to escape any demo.
main
: Main demo32x50
,33x50
,left_side
,right_side
: Rendering Cool Bun in various locations on screen.any_position
: Cool Bun flies around like a DVD player pause screen.keyboard_interrupt
: Tests usinginput.device
to access the keyboard.blitter_speed_test
: Get the speed of blitter vs. CPU memory operationsbun_test
: Run some unit tests (yes, really!)
This will get 50 fps on an 020, and 25 or lower on an 68EC020 and below.
Building
Vamos
You'll want Vamos, and SAS/C & GenAm from DevPac on Vamos's path:
# main
ruby ./image_converter.rb && touch images.s && vamos -- smake
# any others
vamos -- smake <other>
The image converter requires Ruby 3.2.4 and RMagick installed.
Performance
The best way I can think of to make this way faster is for a script in Ruby or Python to calculate every blitter register for every frame of data for bun renders and clears, store that in a list of words, and rip through those lists in Assembler, shotgunning the values directly into the registers without the C code needing to track bun positions and bun clears. That's a project for another day.