p1es/main.asm.rb

79 lines
1.2 KiB
Ruby

# main.asm.rb
$gp0 = 0x1F801810
$gp1 = 0x1F801814
jmp l_start
nop
label :hello_world
string "ello wrld!\n"
label :printf
addiu r0, 0xa0, at # address of bios func
jr at
addiu r0, 0x3f, t1 # printf number
label :draw_line
# todo: draw line function, take args in a0 - a3
# tood: implement shift left so we can use that
lwi $gp0, t0
lwi 0x40_ffffff, t1 # monochrome line, color ffffff
sw t1, 0, t0
# lwi st, t1 # line vert 1
sw t1, 0, t0
# lwi en, t1 # line vert 2
sw t1, 0, t0
label :start
nop ; nop ; nop ; nop
# THIS IS NEEDED
lwi $gp1, t0
lwi 0x03_00_00_00, t1 # display enable
sw t1, 0, t0
lwi $gp0, t0
lwi 0xe1_000000 + 0b0_0_0_1_0_01_00_0_0000, t1
sw t1, 0, t0
# THIS IS NEEDED
lwi 0xe4_000000 + (640) + (480 << 10), t1 # Drawing Area bottom right
sw t1, 0, t0
def line(st, en)
lwi 0x40_ffffff, t1 # monochrome line, color ffffff
sw t1, 0, t0
lwi st, t1 # line vert 1
sw t1, 0, t0
lwi en, t1 # line vert 2
sw t1, 0, t0
end
line 0x0010_0010, 0x0030_0030
line 0x0030_0030, 0x0060_0000
line 0x0060_000a, 0x00f0_0060
lwi l_hello_world, a0
jal l_printf
addiu sp, -16, sp # delay slot
addiu sp, 16, sp
label :end_loop
lwi l_end_loop, t9
jr t9
nop