diff options
Diffstat (limited to 'test.s')
-rw-r--r-- | test.s | 159 |
1 files changed, 159 insertions, 0 deletions
@@ -0,0 +1,159 @@ +.syntax unified + +.cpu arm7tdmi + +.arm +b _start + +.byte 0x24,0xFF,0xAE,0x51 +.byte 0x69,0x9A,0xA2,0x21 +.byte 0x3D,0x84,0x82,0x0A +.byte 0x84,0xE4,0x09,0xAD +.byte 0x11,0x24,0x8B,0x98 +.byte 0xC0,0x81,0x7F,0x21 +.byte 0xA3,0x52,0xBE,0x19 +.byte 0x93,0x09,0xCE,0x20 +.byte 0x10,0x46,0x4A,0x4A +.byte 0xF8,0x27,0x31,0xEC +.byte 0x58,0xC7,0xE8,0x33 +.byte 0x82,0xE3,0xCE,0xBF +.byte 0x85,0xF4,0xDF,0x94 +.byte 0xCE,0x4B,0x09,0xC1 +.byte 0x94,0x56,0x8A,0xC0 +.byte 0x13,0x72,0xA7,0xFC +.byte 0x9F,0x84,0x4D,0x73 +.byte 0xA3,0xCA,0x9A,0x61 +.byte 0x58,0x97,0xA3,0x27 +.byte 0xFC,0x03,0x98,0x76 +.byte 0x23,0x1D,0xC7,0x61 +.byte 0x03,0x04,0xAE,0x56 +.byte 0xBF,0x38,0x84,0x00 +.byte 0x40,0xA7,0x0E,0xFD +.byte 0xFF,0x52,0xFE,0x03 +.byte 0x6F,0x95,0x30,0xF1 +.byte 0x97,0xFB,0xC0,0x85 +.byte 0x60,0xD6,0x80,0x25 +.byte 0xA9,0x63,0xBE,0x03 +.byte 0x01,0x4E,0x38,0xE2 +.byte 0xF9,0xA2,0x34,0xFF +.byte 0xBB,0x3E,0x03,0x44 +.byte 0x78,0x00,0x90,0xCB +.byte 0x88,0x11,0x3A,0x94 +.byte 0x65,0xC0,0x7C,0x63 +.byte 0x87,0xF0,0x3C,0xAF +.byte 0xD6,0x25,0xE4,0x8B +.byte 0x38,0x0A,0xAC,0x72 +.byte 0x21,0xD4,0xF8,0x07 + +.ascii "LUMA\x0\x0\x0\x0\x0\x0\x0\x0" + +.ascii "AMUL" + +.ascii "00" + +.byte 0x96 + +.byte 0x0 + +.byte 0x0 + +.fill 0x7,0x1,0x0 + +.byte 0x45 + +.byte 0x0 + +.fill 0x2,0x1,0x0 + +.arm +nop + +.byte 0x0 + +.byte 0x0 + +.fill 0x1A,0x1,0x0 + +.arm +nop + +.arm +.func +_start: + ldr lr, =start + bx lr +.endfunc + +.thumb +.func +.thumb_func +start: + @ Set up video mode: + ldr r0, .ioAddr + @ Already at DISPCNT. + ldr r1, .displayControl + strh r1, [r0] + + @ Set up palette: + ldr r0, .paletteAddr + ldr r1, .backgroundColour + strh r1, [r0] + ldr r1, .paletteIndex + lsls r1, 0x1 @ Multiply by two. + adds r0, r1 @ Apply index. + ldr r1, .foregroundColour + strh r1, [r0] + + @ Set up loop: + @ - r0 is the current pixel address. + @ - r1 is the palette value/index. + @ - r2 is the addend. + @ - r3 is the last pixel address. + ldr r0, .videoAddr + ldr r1, .paletteIndex + movs r2, 0x0 + movs r3, 0x4B + lsls r3, 0x9 + adds r3, r0 + + @ Plot pixels: +.loop: + strb r1, [r0] + adds r0, r2 + adds r2, 0x1 + cmp r0, r3 + bge .stop @ Stop if we've reached the end. + b .loop @ Repeat loop. + + @ Stop: +.stop: + b .stop +.endfunc + +.align +.ioAddr: + .word 0x04000000 + +.align +.displayControl: + .word 0x0404 + +.align +.paletteAddr: + .word 0x05000000 + +.align +.paletteIndex: + .word 0xFF + +.align +.backgroundColour: + .word 0b0000100001000010 + +.align +.foregroundColour: + .word 0b0001001010011110 + +.align +.videoAddr: + .word 0x06000000 |