%import c64lib %import c64flt %import c64graphics %option enable_floats main { sub start() { graphics.enable_bitmap_mode() turtle.init() ubyte i for i in 0 to 255 { while c64.RASTER { } } for i in 0 to 100 { turtle.fd(i+20) turtle.rt(94) } forever { } } } turtle { float xpos float ypos float angle ubyte 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 turtlepos() } sub turtlepos() { uword xx = xpos as uword c64.SPXY[0] = lsb(xx) + 12 if msb(xx) c64.MSIGX = 1 else c64.MSIGX = 0 c64.SPXY[1] = lsb(ypos) + 40 } sub fd(uword length) { float flen = length as float float sx = xpos float sy = ypos xpos += flen * sin(angle) ypos -= flen * cos(angle) turtlepos() if pendown { graphics.line(sx as uword, lsb(sy), xpos as uword, lsb(ypos)) } } sub rt(uword degrees) { angle += rad(degrees as float) } sub lt(uword degrees) { angle -= 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 ] }