// 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