#include <os.h>
main: .global main
@ setup
push {r4-r11, lr}
bl lcd_ingray
bl clrscr
mov r11, #0
keycheck:
ldr r10, =0xC0000010
ldr r10, [r10]
add r10, r11
@ check for keypresses
ldr r0, =0x900E0010
ldrh r1, [r0, #8]
@ a key
tst r1, #1 << 6
adrne r0, letter_a
bne draw
@ b key
tst r1, #1 << 5
adrne r0, letter_b
bne draw
@ c key
tst r1, #1 << 4
adrne r0, letter_c
bne draw
@ d key
tst r1, #1 << 2
adrne r0, letter_d
bne draw
@ e key
tst r1, #1 << 1
adrne r0, letter_e
bne draw
@ f key
tst r1, #1 << 0
adrne r0, letter_f
bne draw
ldrh r1, [r0, #6]
@ g key
tst r1, #1 << 6
adrne r0, letter_g
bne draw
@ h key
tst r1, #1 << 5
adrne r0, letter_h
bne draw
@ i key
tst r1, #1 << 4
adrne r0, letter_i
bne draw
@ j key
tst r1, #1 << 2
adrne r0, letter_j
bne draw
@ k key
tst r1, #1 << 1
adrne r0, letter_k
bne draw
@ l key
tst r1, #1 << 0
adrne r0, letter_l
bne draw
ldrh r1, [r0, #4]
@ m key
tst r1, #1 << 6
adrne r0, letter_m
bne draw
@ n key
tst r1, #1 << 5
adrne r0, letter_n
bne draw
@ o key
tst r1, #1 << 4
adrne r0, letter_o
bne draw
@ p key
tst r1, #1 << 2
adrne r0, letter_p
bne draw
@ q key
tst r1, #1 << 1
adrne r0, letter_q
bne draw
@ r key
tst r1, #1 << 0
adrne r0, letter_r
bne draw
ldrh r1, [r0, #2]
@ s key
tst r1, #1 << 6
adrne r0, letter_s
bne draw
@ t key
tst r1, #1 << 5
adrne r0, letter_t
bne draw
@ u key
tst r1, #1 << 4
adrne r0, letter_u
bne draw
@ v key
tst r1, #1 << 2
adrne r0, letter_v
bne draw
@ w key
tst r1, #1 << 1
adrne r0, letter_w
bne draw
@ x key
tst r1, #1 << 0
adrne r0, letter_x
bne draw
ldrh r1, [r0, #0]
@ y key
tst r1, #1 << 6
adrne r0, letter_y
bne draw
@ z key
tst r1, #1 << 5
adrne r0, letter_z
bne draw
@ special keys
@ space key
ldrh r1, [r0, #0]
tst r1, #1 << 4
bne spacekey
@ enter key
ldrh r1, [r0, #0]
tst r1, #1 << 1
bne enterkey
@ del key
ldrh r1, [r0, #10]
tst r1, #1 << 9
bne delkey
@bne keycheck
@ ctrl key
ldrh r1, [r0, #14]
tst r1, #1 << 9
bne ctrlkey
b keycheck
draw:
mov r2, #8
drawa:
ldr r1, [r0], #4
str r1, [r10], #SCREEN_WIDTH/2
subs r2, #1
bne drawa
adr r0, off
ldr r1, [r0]
add r1, #4
str r1, [r0]
add r11, #4
bl wait_key_pressed
b keycheck
@ handle special keys
spacekey:
adr r0, off
ldr r1, [r0]
add r1, #4
str r1, [r0]
add r11, #4
bl wait_key_pressed
b keycheck
delkey:
@ set the screen pointer back one step
sub r10, #4
sub r11, #4
@ set the offset back one step
adr r0, off
ldr r1, [r0]
cmp r1, #0
subne r1, #4
str r1, [r0]
@ store emptyness at the characters place
ldr r0, =0xFFFFFFFF
mov r1, #8
drawdel:
str r0, [r10]
add r10 ,#SCREEN_WIDTH/2
subs r1, #1
bne drawdel
bl wait_key_pressed
b keycheck
enterkey:
ldr r0, =SCREEN_WIDTH/2 * 9
ldr r1, off
sub r0, r1
add r11, r0
adr r0, off
mov r1, #0
str r1, [r0]
bl wait_key_pressed
b keycheck
ctrlkey:
b end
end:
mov r0, #0
pop {r4-r11, pc}
@ Sprites; pixels go lik 0x78563412 !!!!
@ for some reason letter_z only works if it is located above letter_y
letter_a: .word 0xFF0FF0FF, 0xFF0FF0FF, 0x0FF00FF0, 0x0FF00FF0, 0x0F0000F0, 0x0F0000F0, 0x0FF00FF0, 0x0FF00FF0
letter_b: .word 0x0F0000F0, 0x0F0000F0, 0x0FF00FF0, 0xFF0000F0, 0xFF0000F0, 0x0FF00FF0, 0x0F0000F0, 0x0F0000F0
letter_c: .word 0x0F0000FF, 0x0F0000F0, 0xFFFF0FF0, 0xFFFF0FF0, 0xFFFF0FF0, 0xFFFF0FF0, 0x0F0000F0, 0x0F0000FF
letter_d: .word 0xFF0F00F0, 0xFF0000F0, 0x0FF00FF0, 0x0FF00FF0, 0x0FF00FF0, 0x0FF00FF0, 0x0F0000F0, 0xFF0000F0
letter_e: .word 0x0F0000F0, 0x0F0000F0, 0xFFFF0FF0, 0xFF0000F0, 0xFF0000F0, 0xFFFF0FF0, 0x0F0000F0, 0x0F0000F0
letter_f: .word 0x0F0000F0, 0x0F0000F0, 0xFFFF0FF0, 0xFF0F00F0, 0xFF0F00F0, 0xFFFF0FF0, 0xFFFF0FF0, 0xFFFF0FF0
letter_g: .word 0x0F0000FF, 0x0F0000F0, 0xFFFF0FF0, 0xFFFF0FF0, 0x0F000FF0, 0x0F000FF0, 0x0FF00FF0, 0x0F0000FF
letter_h: .word 0x0FF00FF0, 0x0FF00FF0, 0x0FF00FF0, 0x0F0000F0, 0x0F0000F0, 0x0FF00FF0, 0x0FF00FF0, 0x0FF00FF0
letter_i: .word 0x0F0000F0, 0x0F0000F0, 0xFF0FF0FF, 0xFF0FF0FF, 0xFF0FF0FF, 0xFF0FF0FF, 0x0F0000F0, 0x0F0000F0
letter_j: .word 0x0F00F0FF, 0x0F00F0FF, 0x0FF0FFFF, 0x0FF0FFFF, 0x0FF0FFFF, 0x0FF00FF0, 0x0F0000F0, 0xFF0000FF
letter_k: .word 0x0FF00FF0, 0x0F000FF0, 0xFF000FF0, 0xFF0F00F0, 0xFF0F00F0, 0xFF000FF0, 0x0F000FF0, 0x0FF00FF0
letter_l: .word 0xFFFF0FF0, 0xFFFF0FF0, 0xFFFF0FF0, 0xFFFF0FF0, 0xFFFF0FF0, 0xFFFF0FF0, 0x0F0000F0, 0x0F0000F0
letter_m: .word 0x0FFFFFF0, 0x0FF00FF0, 0x0F0000F0, 0x0F0000F0, 0x0FF00FF0, 0x0FF00FF0, 0x0FF00FF0, 0x0FF00FF0
letter_n: .word 0x0FF00FF0, 0x0FF000F0, 0x0F0000F0, 0x0F000FF0, 0x0FF00FF0, 0x0FF00FF0, 0x0FF00FF0, 0x0FF00FF0
letter_o: .word 0xFF0000FF, 0x0F0000F0, 0x0FF00FF0, 0x0FF00FF0, 0x0FF00FF0, 0x0FF00FF0, 0x0F0000F0, 0xFF0000FF
letter_p: .word 0xFF0F00F0, 0x0F0000F0, 0x0FF00FF0, 0x0FF00FF0, 0x0F0000F0, 0xFF0F00F0, 0xFFFF0FF0, 0xFFFF0FF0
letter_q: .word 0xFF0000FF, 0x0F0000F0, 0x0FF00FF0, 0x0FF00FF0, 0x0FF000F0, 0x0F000FF0, 0xFF0000F0, 0x0F0F00FF
letter_r: .word 0xFF0000F0, 0x0F0000F0, 0x0FF00FF0, 0x0F0000F0, 0xFF0000F0, 0xFF000FF0, 0x0FF00FF0, 0x0FF00FF0
letter_s: .word 0x0F00F0FF, 0x0F0000F0, 0xFFFF0FF0, 0xFF0F00F0, 0x0F0000F0, 0x0FF0FFFF, 0x0F0000F0, 0x0F0000F0
letter_t: .word 0x0F0000F0, 0x0F0000F0, 0xFF0FF0FF, 0xFF0FF0FF, 0xFF0FF0FF, 0xFF0FF0FF, 0xFF0FF0FF, 0xFF0FF0FF
letter_u: .word 0x0FF00FF0, 0x0FF00FF0, 0x0FF00FF0, 0x0FF00FF0, 0x0FF00FF0, 0x0FF00FF0, 0x0F0000F0, 0x0F0000F0
letter_v: .word 0x0FF00FF0, 0x0FF00FF0, 0x0FF00FF0, 0x0FF00FF0, 0x0FF00FF0, 0x0FF00FF0, 0xFF0000FF, 0xFF0FF0FF
letter_w: .word 0x0FFFFFF0, 0x0FFFFFF0, 0x0FFFFFF0, 0x0FFFFFF0, 0x0F0FF0F0, 0x0F0FF0F0, 0x0FF00FF0, 0x0FF00FF0
letter_x: .word 0x0FF00FF0, 0x0FF00FF0, 0xFF0000FF, 0xFF0FF0FF, 0xFF0FF0FF, 0xFF0000FF, 0x0FF00FF0, 0x0FF00FF0
letter_y: .word 0x0FF00FF0, 0x0FF00FF0, 0xFFF00FFF, 0xFF0000FF, 0xFF00FFFF, 0xFF0FFFFF, 0xFF0F0FFF, 0xFFFF00FF
ALIGN letter_z: .word 0x0F0000F0, 0x0F00FFF0, 0xFF00FFF0, 0xFF00FFFF, 0xFF0FF0FF, 0x0FFF00FF, 0x0FFF00F0, 0x0F0000F0
off: .word 0