bakervm 0.9.0

A virtual machine for building and running retro games
Documentation
jmp _std_graphics_draw_line

include! draw_point

.std.graphics.draw_line
  push $st, @9
  add $bp, $st

  mov $vi(20), $st    ; y1
  mov $vi(21), $st    ; x1

  mov $vi(22), $st    ; y0
  mov $vi(23), $st    ; x0

  mov $vi(24), $st    ; color

  dup $vi(20)
  dup $vi(22)
  sub $st, $st

  dup $vi(21)
  dup $vi(23)
  sub $st, $st

  mov $vi(25), $st    ; x01
  mov $vi(26), $st    ; y01

  dup $vi(25)
  dup $vi(25)
  mul $st, $st

  dup $vi(26)
  dup $vi(26)
  mul $st, $st

  add $st, $st

  call std.math.sqrt

  dup $st

  div $vi(25), $st  ; x01 normal
  div $vi(26), $st  ; y01 normal

  call std.graphics.draw_line__draw_point

  .std.graphics.draw_line__draw_loop
    dup $vi(25)
    add $vi(23), $st
    dup $vi(26)
    add $vi(22), $st
    call std.graphics.draw_line__draw_point

    dup $vi(23)
    cast $st, addr

    dup $vi(21)
    cast $st, addr
    cmp $st, $st
    mov $vi(19), $st
    mov $vi(19), $st
    jmpeq std.graphics.draw_line__equal_x
      jmp std.graphics.draw_line__draw_loop

    .std.graphics.draw_line__equal_x
    dup $vi(22)
    cast $st, addr

    dup $vi(20)
    cast $st, addr
    cmp $st, $st
    mov $vi(19), $st
    mov $vi(19), $st
    jmpeq std.graphics.draw_line__end
      jmp std.graphics.draw_line__draw_loop


  .std.graphics.draw_line__end
  push $st, @9
  sub $bp, $st
ret

.std.graphics.draw_line__draw_point
  dup $vi(24)
  dup $vi(23)
  cast $st, addr
  dup $vi(22)
  cast $st, addr
  call std.graphics.draw_point
ret

._std_graphics_draw_line