AlbertHallX
Aug 26th, 2025
67
0
Never
This is comment for paste Char Escape in Basic v2 for Commodore 64
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Try thia one:
  2.  
  3. 5 rem 'char escape' by f. nardella (kimono)
  4. 10 rem individua il primo carattere non-spazio sullo schermo,
  5. 15 rem lo trasforma in sprite, cancella il carattere,
  6. 20 rem posiziona lo sprite e lo fa muovere.
  7. 21 rem inizializzazione variabili
  8. 22 ? chr$(147)
  9. 23 ? " **** commodore 64 basic v2 ****"
  10. 24 ? ""
  11. 27 ? " 64k ram system 38911 basic bytes free"
  12. 28 ? ""
  13. 29 ? "ready."
  14.  
  15.  
  16. 30 rw=0:cl=0:of=0:cc=0:sd=704:tc=0:ms=0:tp=0
  17. 32 x=rnd(-ti):rem inizializza random con timer
  18. 35 gosub 100:rem cerca carattere non-spazio
  19. 40 rem determina direzione movimento
  20. 45 if cl<20 then dr=-1:goto55
  21. 50 dr=1
  22. 55 gosub 150:rem copia carattere in sprite
  23. 60 gosub 255:rem configura sprite
  24. 65 gosub 230:rem cancella carattere dallo schermo
  25. 70 gosub 330:rem muove sprite
  26. 75 goto35
  27. 80 rem programma terminato
  28. 85 print"end program"
  29. 90 end
  30. 95 rem sub: cerca carattere non-spazio
  31.  
  32. 95 rem sub: scegli carattere casuale non-spazio
  33. 100 for tr=1 to 500
  34. 105 rw=int(rnd(0)*25): cl=int(rnd(0)*40)
  35. 110 of=rw*40+cl
  36. 115 cc=peek(1024+of)
  37. 120 if cc<>32 then return
  38. 125 next tr
  39. 130 rem se non trova niente, fine
  40. 135 goto 85
  41. 140 return
  42.  
  43.  
  44.  
  45. 145 rem sub: copia carattere in sprite
  46. 150 ms=peek(1):mi=peek(56334):rem salva configurazione memoria
  47. 155 poke 56334,peek(56334)and254:rem disabilita interrupt
  48. 160 poke 1,peek(1)and251:rem abilita charset rom
  49. 165 rem azzera area sprite
  50. 170 for i=0 to 63:poke sd+i,0:next
  51. 175 rem calcola offset nel charset
  52. 180 co=cc*8
  53. 185 rem copia 8 righe del carattere
  54. 190 fori=0to7
  55. 195 tc=peek(53248+co+i):rem legge da charset rom
  56. 200 poke sd+i*3,tc:rem scrive solo prima colonna sprite
  57. 205 next
  58. 210 rem ripristina configurazione memoria
  59. 215 poke 1,ms:poke 56334,mi
  60. 220 return
  61. 225 rem sub: cancella carattere dallo schermo
  62. 230 of=rw*40+cl
  63. 235 poke 1024+of,32
  64. 240 return
  65. 245 rem sub: configura sprite
  66. 250 rem imposta puntatore sprite 0
  67. 255 poke 2040,11
  68. 260 rem abilita sprite 0
  69. 265 poke 53269,1
  70. 270 rem colore sprite 0 (bianco)
  71. 275 poke 53287,1
  72. 280 rem posizione iniziale x: 24 + col * 8
  73. 285 sx=24+cl*8
  74. 290 if sx>255 then poke53264,peek(53264)or1:sx=sx-256:goto300
  75. 295 poke 53264,peek(53264)and254
  76. 300 poke 53248,sx
  77. 305 rem posizione iniziale y: 50 + row * 8
  78. 310 sy=rw*8+50
  79. 315 poke 53249,sy
  80. 320 return
  81.  
  82. 325 rem sub: muove sprite con onda sinusoidale (dx/sx + su/giu)
  83. 330 rem calcola X a 10 bit e inizializza fase
  84. 332 x10=(peek(53264)and1)*256+peek(53248)
  85. 334 ax=0: ay=peek(53249)
  86.  
  87. 338 ax=ax+0.25
  88. 340 x10=x10+4*dr
  89. 342 sy=ay+16*sin(ax)
  90. 344 ms=int(x10/256)
  91. 346 poke 53264,(peek(53264)and254) or ms
  92. 348 poke 53248,x10-ms*256
  93. 350 if sy<50 then sy=50
  94. 352 if sy>245 then sy=245
  95. 354 poke 53249,int(sy)
  96. 356 if dr=-1 and x10<32 then gosub 380:return
  97. 358 if dr=1 and x10>480 then gosub 380:return
  98. 360 goto 338
  99.  
  100.  
  101. 365 if dr=1 and ms=1 and sx>80 then gosub380:return
  102. 370 goto340
  103. 375 rem sub: passa al prossimo carattere
  104. 380 cl=cl+1
  105. 385 if cl<40 then return
  106. 390 cl=0:rw=rw+1
  107. 395 return
  108.  
Advertisement
Add Comment
Please, Sign In to add comment