Go to bottom
fastplasm256 by optimus
screenshot added by Optimonk on 2020-10-20 23:25:46
platform :
type :
release date : october 2020
  • rulez 16
  • is ok 2
  • sucks 0
popularity : 49%
  • rulez 0.89
alltime top: #13651
added on the 2020-10-20 23:25:46 by Optimonk Optimonk

popularity helper

increase the popularity of this prod by spreading this URL:

or via: facebook twitter pinterest tumblr


Sorry for the colors, it takes more effort (and maybe more than 256b) to design a good palette on Archimedes 8bpp with only 16 palette registers. Also, in this one I tried to compromise between size and speed and make it run smoothly at 50fps even on the slowest A3000 (at least on Arculator, hopefully in the real system too). I also have hoped for more interesting plasma movements and no pixel grain, but oh well..
added on the 2020-10-20 23:36:01 by Optimonk Optimonk
*orson welles clap*
rulez added on the 2020-10-20 23:44:44 by superogue superogue
also nice conversion of the x86 cpu sinus generation routine
added on the 2020-10-20 23:48:13 by superogue superogue
Yeaaah! 1 pixel, full screen and full framerate of a midschool plasma on the Archimedes A3000 @8MHz. The famous one when i had the Amiga 500 in some magazines and even on some scrolltexts :P ... And with all the 256b constraints. It amazed me, even if it's a "simple" fx. You know you got the cake Optimus! =]
BB Image
rulez added on the 2020-10-21 00:28:10 by Buckethead Buckethead
nice to see that ppl do tiny prods also on other platforms. yt pls. i have an idea for yet another platform.
rulez added on the 2020-10-21 01:03:21 by rudi rudi
Nice to see you're getting more into ARM coding !

...just from a short look at the code if you set r1 also to screen_addr_input before the OS_ReadVduVariables it will overwrite the block with the screen address result and you could use just ldr r0,screen_addr_input in the mainloop to get the screen address and remove the adr r0,... and the ldr r0,[r0].

May be you could also save one more instruction when using strb r4,[r0,r1] in the sine loop and later on using ldrb r3,[r1,r2] instead of ldrb r3,[r1,],#1 where you would replace the r1 with the sine base address kept from the sine loop (change the registers...). Finally also I can't see where you use r6 (mov r6,#0).

Can you check if that works ? Just lazy morning paper-coding here ;-)
rulez added on the 2020-10-21 08:54:33 by Kuemmel Kuemmel
Nice to see you're getting more into ARM coding !

Finally also I can't see where you use r6 (mov r6,#0).

Oh this is forgotten. Btw,. this part of code is extra example code, has nothing to do with the 256b size of the main. The sinegen is also contained in the main plasm256.asm. The sinegen.asm is an additional code to generate and visualize the curve so that you can change parameters and get different frequency or amplitude. So, that code is not as optimized just an example code.

I need to think about the rest. I remember in the past, I would do the call to swi OS_ReadVduVariables after setting r0 and r1 inside the mainloop (so one SWI every frame would be fine) so that I don't need to do again adr r1, screen_addr before ldr r1,[r1]. I think now, the sine loop goes away with setting r1 (number of sine bytes to generate) as r1 happens to be screen_addr before (which is &8014 so it generates a bit more than 32768 bytes). So,. if I move the whole swi in the main loop, I might lose that. I'll think about that anyway..
added on the 2020-10-21 09:25:59 by Optimonk Optimonk

You can save a few instructions using OS_WriteI instead of MOV r0, #; SWI OS_WriteC, ie SWI &116; SWI &10d for mode change.
rulez added on the 2020-10-21 11:57:10 by progen progen

You can save a few instructions using OS_WriteI instead of MOV r0, #; SWI OS_WriteC, ie SWI &116; SWI &10d for mode change.

That's great! Wish I knew this one before,. 16 bytes wasted on just mode setup seemed too much. I also saved 8 bytes on the palette code. I had more bytes to do the LDMIA/STDMIA operate on 8 regs and still keep at 256b, getting 60+fps on A3000 this time.
added on the 2020-10-21 13:07:59 by Optimonk Optimonk
Wow! This looks awesome! And good framerate btw..
rulez added on the 2020-10-21 14:20:30 by mad mad
rulez added on the 2020-10-21 20:40:14 by Sir Sir
Very cool. Great to see more folks making Acorn prods. Look forward to seeing what’s next. :)
rulez added on the 2020-10-21 21:11:40 by kieran kieran
rulez added on the 2020-10-21 22:38:01 by v3nom v3nom
rulez added on the 2020-10-21 23:38:16 by BiTL BiTL
rulez added on the 2020-10-22 00:09:52 by ham ham
Archimedes! <3
rulez added on the 2020-10-22 10:54:32 by baah baah
Nice little plasma on Acorn
rulez added on the 2020-10-22 17:13:07 by Queen_Luna Queen_Luna
Nice plasma, welcome to risc os sizecoding. :) There are always lots of optimizations to discover when trying out a new platform, and that's most of the fun.
rulez added on the 2020-10-29 22:12:43 by exoticorn exoticorn
I'm not that familiar with the Acorn computers - is this binary Acorn specific, or is it a generic RiscOS exe, that potentially could run on RiscOS on a Raspberry Pi for example?
added on the 2020-11-19 11:03:06 by Sdw Sdw
instant platform thumb!
rulez added on the 2020-11-30 14:11:32 by Asato Asato
rulez added on the 2021-01-24 23:13:28 by Blast! Blast!

lists containing this prod

submit changes

if this prod is a fake, some info is false or the download link is broken,

do not post about it in the comments, it will get lost.

instead, click here !

[previous edits]

add a comment

Go to top