%import floats %import graphics %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) } repeat { } } } turtle { float xpos float ypos float angle bool pendown sub init() { xpos = 160.0 ypos = 100.0 angle = 0.0 pendown = true const uword SPRITE_MEMORY = $5800 const uword SPRITE_ADDR_POINTERS = (graphics.CHARS_ADDRESS & $fc00) + 1016 ; no longer the default location 2040! sys.memcopy(&turtlesprite, SPRITE_MEMORY, len(turtlesprite)) @(SPRITE_ADDR_POINTERS) = (SPRITE_MEMORY & $3fff) / 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 } ubyte[] turtlesprite = [ %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 ] }