%import floats %import graphics %import test_stack %zeropage floatsafe main { sub start() { graphics.enable_bitmap_mode() turtle.init() ; turtle.pu() ; turtle.pos(150, 110) ; turtle.pd() ubyte i for i in 0 to 100 { turtle.fd(i+20) turtle.rt(94) } ; test_stack.test() repeat { } } } turtle { float xpos float ypos float angle bool pendown sub init() { xpos = 160.0 ypos = 100.0 angle = 0.0 pendown = true c64.SPRPTR[0] = $0d00 / 64 c64.SPENA = 1 c64.SP0COL = 5 update_turtle_sprite() } sub update_turtle_sprite() { uword xx = xpos as uword c64.SPXY[0] = lsb(xx) + 12 c64.MSIGX = msb(xx) > 0 c64.SPXY[1] = ypos as ubyte + 40 } sub pos(float x, float y) { if pendown { graphics.line(xpos as uword, ypos as ubyte, x as uword, y as ubyte) } xpos = x ypos = y update_turtle_sprite() } sub fd(uword length) { float flen = length as float float sx = xpos float sy = ypos xpos += flen * floats.sin(angle) ypos -= flen * floats.cos(angle) update_turtle_sprite() if pendown { graphics.line(sx as uword, sy as ubyte, xpos as uword, ypos as ubyte) } } sub rt(uword degrees) { angle += floats.rad(degrees as float) } sub lt(uword degrees) { angle -= floats.rad(degrees as float) } sub pu() { pendown = false } sub pd() { pendown = true } } spritedata $0d00 { ; this memory block contains the sprite data ; it must start on an address aligned to 64 bytes. %option force_output ; make sure the data in this block appears in the resulting program ubyte[] balloonsprite = [ %00000000,%00000000,%00000000, %00000000,%00000000,%00000000, %00000000,%00000000,%00000000, %00000000,%00000000,%00000000, %00000000,%00000000,%00000000, %00000000,%00000000,%00000000, %00000000,%00000000,%00000000, %00000000,%00000000,%00000000, %00000000,%01111110,%00000000, %00000000,%11000011,%00000000, %00000000,%11000011,%00000000, %00000000,%11000011,%00000000, %00000000,%01111110,%00000000, %00000000,%00000000,%00000000, %00000000,%00000000,%00000000, %00000000,%00000000,%00000000, %00000000,%00000000,%00000000, %00000000,%00000000,%00000000, %00000000,%00000000,%00000000, %00000000,%00000000,%00000000, %00000000,%00000000,%00000000 ] }