// ARMlite Plasma Ocean
MOV R0,#2
STR R0,.Resolution // hi-res + clear
Main:
LDR R8,.PixelAreaSize // total pixels
MOV R1,#.PixelScreen // frame buffer pointer
LDR R9,.InstructionCount // time base
LSR R9,R9,#6 // speed tweak
LSR R10,R9,#3 // slow phase for color cycling
MOV R7,#0 // pixel index n
PixelLoop:
AND R4,R7,#127 // x = n & 127
LSR R5,R7,#7 // y = n >> 7
EOR R6,R4,R5 // base pattern (x ^ y)
ADD R6,R6,R9 // + time
// v += x*2 (explicit shift then add)
LSL R0,R4,#1
ADD R6,R6,R0
// v += y*4
LSL R0,R5,#2
ADD R6,R6,R0
AND R6,R6,#255 // v = 0..255
// r = v + slow phase
ADD R2,R6,R10
AND R2,R2,#255
// g = v + (time >> 2)
LSR R0,R9,#2
ADD R3,R6,R0
AND R3,R3,#255
// b = time - v
SUB R0,R9,R6
AND R0,R0,#255
// pack 0xRRGGBB
LSL R11,R2,#16
LSL R12,R3,#8
ORR R11,R11,R12
ORR R11,R11,R0
STR R11,[R1] // write pixel
ADD R1,R1,#4
ADD R7,R7,#1
CMP R7,R8
BLT PixelLoop
B Main
HALT
Main
HALT
BLT PixelLoop
B Main
HALT