felixnardella

Ferragosto 2026 Demo

Aug 12th, 2026
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
6502 TASM/64TASS 13.10 KB | Source Code | 0 0
  1. ; ============================================================
  2. ;  FERRAGOSTO 2026 DEMO - COMMODORE 64
  3. ;  per RetroProgramming Italia - RP Italia
  4. ;  (A division of RetroCampus)
  5. ;
  6. ;  by Kimono (F. Nardella)
  7. ;  Assembler: 64tass ferragosto2026.asm -o ferragosto2026.prg
  8. ; ============================================================
  9.  
  10. ; ----------------------
  11. ; ---  BASIC RUNNER  ---
  12. ; ----------------------
  13.  
  14.         * = $0801
  15.  
  16.         .word (+), 2026
  17.         .null $9e, "2061"       ; 2026 SYS 2061 ($080D)
  18. +       .word 0
  19.  
  20.  
  21. ; COSTANTI
  22. VIC        = $D000
  23. COL_MEM    = $D800
  24. X_LOGO     = 125
  25. Y_LOGO     = 108
  26.  
  27. ; VARIABILI in pagina zero
  28. DELTA          = $FB        ; differenza tra X_LOGO e X dello sprite a video
  29. OFFSET         = $FC        ; offset animazione
  30. STRING_ADR     = $FD        ; indirizzo stringa  $fd = lo - $fe = hi
  31. STRING_POS     = $03        ; posizione stringa (primo carattere)
  32. STRING_COL_MEM = $05
  33. STRING_COL     = $2A        ; colore stringa
  34. SCROLLER_OFF   = $52        ; offset scroll orizzontale
  35.  
  36. ; --------------------------
  37. ; ---  ASSEMBLY PROGRAM  ---
  38. ; --------------------------
  39.         * = $080D
  40.  
  41.         ; **********************
  42.         ; ***  INIT SPRITES  ***
  43.         ; **********************
  44.  
  45.         ; puntatori sprite
  46.         lda #$84
  47.         sta $07F8
  48.         lda #$85
  49.         sta $07F9
  50.         lda #$86
  51.         sta $07FA
  52.         lda #$87
  53.         sta $07FB
  54.  
  55.         ; posizioni sprite (logo sole = 4 sprite espansi 2x2)
  56.         lda #X_LOGO        ; coord. x  #0,2
  57.         sta VIC
  58.         sta VIC+4
  59.         lda #Y_LOGO        ; coord. y  #0,1
  60.         sta VIC+1
  61.         sta VIC+3
  62.         lda #X_LOGO + 42   ; coord. x  #1,3
  63.         sta VIC+2
  64.         sta VIC+6
  65.         lda #Y_LOGO + 42   ; coord. y  #2,3
  66.         sta VIC+5
  67.         sta VIC+7
  68.  
  69.         ; colori sprite
  70.         lda #7             ; sole giallo
  71.         sta VIC+39
  72.         sta VIC+40
  73.         sta VIC+41
  74.         sta VIC+42
  75.  
  76.         ; espansione x-y  #0-3
  77.         lda #%00001111
  78.         sta VIC+23
  79.         sta VIC+29
  80.  
  81.         ; sfondo e bordo neri
  82.         lda #0
  83.         sta VIC+32
  84.         sta VIC+33
  85.  
  86.         ; abilita sprite #0-3
  87.         lda #%00001111
  88.         sta VIC+21
  89.  
  90. ; ********************
  91. ; ***  INIT VIDEO  ***
  92. ; ********************
  93.  
  94.         ; pulisci schermo
  95.         lda #15
  96.         sta $0286
  97.         jsr $E544
  98.        
  99.         ; colore agli angoli in basso (effetto per lo scroller)
  100.         lda #11
  101.         sta $DBC0
  102.         sta $DBE5
  103.         sta $DBE6
  104.         lda #12
  105.         sta $DBC1
  106.         sta $DBE4
  107.         ; modalita' 38 colonne
  108.         lda $D016
  109.         and #%11110111
  110.         sta $D016
  111.         ; valore iniziale scroll x
  112.         lda #$07
  113.         sta SCROLLER_OFF
  114.                
  115.     ; stampa stringa 1 (titolo)
  116.         lda #<string_1
  117.         sta STRING_ADR
  118.         lda #>string_1
  119.         sta STRING_ADR+1
  120.         lda #$0C           ; riga 0, colonna 12
  121.         sta STRING_POS
  122.         lda #$04
  123.         sta STRING_POS+1
  124.         lda #1             ; bianco
  125.         sta STRING_COL
  126.         jsr print_str
  127.  
  128.         ; stampa stringa 2 (gruppo)
  129.         lda #<string_2
  130.         sta STRING_ADR
  131.         lda #>string_2
  132.         sta STRING_ADR+1
  133.         lda #$50           ; riga 2, colonna 1
  134.         sta STRING_POS
  135.         lda #$04
  136.         sta STRING_POS+1
  137.         lda #14            ; azzurro
  138.         sta STRING_COL
  139.         jsr print_str
  140.  
  141.         ; stampa stringa 3 (auguri)
  142.         lda #<string_3
  143.         sta STRING_ADR
  144.         lda #>string_3
  145.         sta STRING_ADR+1
  146.         lda #$AE           ; riga 4, colonna 14
  147.         sta STRING_POS
  148.         lda #$04
  149.         sta STRING_POS+1
  150.         lda #13             ; verde chiaro
  151.         sta STRING_COL
  152.         jsr print_str
  153.  
  154.         ; stampa stringa 4 (auguri)
  155.         lda #<string_4
  156.         sta STRING_ADR
  157.         lda #>string_4
  158.         sta STRING_ADR+1
  159.         lda #$53           ; riga 21, colonna 11
  160.         sta STRING_POS
  161.         lda #$07
  162.         sta STRING_POS+1
  163.         lda #7             ; giallo
  164.         sta STRING_COL
  165.         jsr print_str
  166.  
  167.         ; puntatore iniziale del testo a scorrimento
  168.         lda #<scroll_str
  169.         sta STRING_POS
  170.         lda #>scroll_str
  171.         sta STRING_POS+1
  172.        
  173.     lda #0             ; subtune 0
  174.         jsr $1000          ; INIT MUSICA
  175.         jmp init_irq
  176.        
  177. print_str
  178.         lda STRING_POS
  179.         sta STRING_COL_MEM
  180.         lda STRING_POS+1
  181.         clc
  182.         adc #$D4
  183.         sta STRING_COL_MEM+1
  184.  
  185.         ldy #$00
  186. _loop
  187.         lda (STRING_ADR),y
  188.         beq _end
  189.         sta (STRING_POS),y
  190.         lda STRING_COL
  191.         sta (STRING_COL_MEM),y
  192.         iny
  193.         jmp _loop
  194. _end
  195.         rts
  196.  
  197.         ; *****************************
  198.         ; ***  INIT RASTER IRQ      ***
  199.         ; *****************************
  200.  
  201. init_irq
  202.         sei                ; sospendi gli interrupt durante l'init
  203.  
  204.         lda #$7f           ; disabilita CIA
  205.         sta $DC0D
  206.  
  207.         lda $D01A          ; abilita raster interrupt
  208.         ora #$01
  209.         sta $D01A
  210.  
  211.         lda $D011          ; azzera il bit alto della linea raster
  212.         and #$7f
  213.         sta $D011
  214.  
  215.         lda #Y_LOGO        ; primo interrupt sulla prima linea del logo
  216.         sta $D012
  217.  
  218.         lda #<irq
  219.         sta $0314
  220.         lda #>irq
  221.         sta $0315
  222.  
  223.         cli
  224.  
  225.         ; *******************
  226.         ; ***  MAIN LOOP  ***
  227.         ; *******************
  228. loop
  229.         jmp loop
  230.  
  231.         ; ***********************************
  232.         ; ***  RASTER IRQ - LOGO ONDULATO ***
  233.         ; ***********************************
  234.  
  235. irq
  236.         ldy DELTA
  237.         lda sin_table,y
  238.         lsr
  239.         lsr
  240.         lsr
  241.         clc
  242.         adc #X_LOGO
  243.         sta VIC
  244.         sta VIC+4
  245.         adc #42
  246.         sta VIC+2
  247.         sta VIC+6
  248.  
  249.         ; sposta l'interrupt alla linea successiva
  250.         lda $D012
  251.         clc
  252.         adc #$02
  253.         cmp #Y_LOGO + 84   ; raggiunto il fondo del logo?
  254.         bcc _next_line
  255.         jmp _next_frame
  256.  
  257. _next_line
  258.         sta $D012          ; prossima linea di interrupt
  259.  
  260.         ; cicla DELTA tra 0-127
  261.         inc DELTA
  262.         lda DELTA
  263.         and #%01111111
  264.         sta DELTA
  265.         jmp _end_irq
  266.  
  267. _next_frame
  268.         ; cicla l'offset del seno tra 0-127
  269.         inc OFFSET
  270.         lda OFFSET
  271.         and #%01111111
  272.         sta OFFSET
  273.         sta DELTA
  274.  
  275.         ; prossimo interrupt: scroller
  276.         lda #228
  277.         sta $D012
  278.         lda #<irq_scroll
  279.         sta $0314
  280.         lda #>irq_scroll
  281.         sta $0315
  282.  
  283. _end_irq
  284.         asl $D019
  285.         jmp $EA81
  286.  
  287.         ; **************************************
  288.         ; ***  RASTER IRQ - TESTO SCORREVOLE ***
  289.         ; **************************************
  290.  
  291. irq_scroll
  292.         lda SCROLLER_OFF
  293.         cmp #$07
  294.         bne _no_newchar
  295.         ; nuovo carattere: sposta il blocco di 40 caratteri
  296.         ldy #0
  297. _next_char
  298.         lda $07C1,y
  299.         sta $07C0,y
  300.         iny
  301.         cpy #39
  302.         bne _next_char
  303.         ; scrivi il nuovo carattere a video
  304.         ldy #0
  305.         lda (STRING_POS),y
  306.         bne _print_char
  307.         lda #<scroll_str   ; fine testo: ricomincia
  308.         sta STRING_POS
  309.         lda #>scroll_str
  310.         sta STRING_POS+1
  311.         lda (STRING_POS),y
  312. _print_char
  313.         sta $07E7          ; ultimo carattere dello schermo
  314.         inc STRING_POS
  315.         bne _no_newchar
  316.         inc STRING_POS+1
  317. _no_newchar
  318.         ; imposta lo scroll x hardware
  319.         lda $D016
  320.         and #%11111000
  321.         ora SCROLLER_OFF
  322.         sta $D016
  323.         ; charset minuscolo per la riga dello scroller
  324.         lda $D018
  325.         ora #%00000010
  326.         sta $D018
  327.         ; decrementa lo scroll x di 2 (cicla tra 0-7)
  328.         dec SCROLLER_OFF
  329.         dec SCROLLER_OFF
  330.         lda SCROLLER_OFF
  331.         and #%00000111
  332.         sta SCROLLER_OFF
  333.         ; prossimo interrupt: musica
  334.         lda #252
  335.         sta $D012
  336.         lda #<irq_music
  337.         sta $0314
  338.         lda #>irq_music
  339.         sta $0315
  340.  
  341.         asl $D019
  342.         jmp $EA81
  343.  
  344.         ; ******************************
  345.         ; ***  RASTER IRQ - MUSICA   ***
  346.         ; ******************************
  347.  
  348. irq_music
  349.         ; ripristina lo scroll x hardware
  350.         lda $D016
  351.         ora #%00000111
  352.         sta $D016
  353.         ; charset maiuscolo per il resto dello schermo
  354.         lda $D018
  355.         and #%11111101
  356.         sta $D018
  357.  
  358.         jsr $1003          ; PLAY MUSICA
  359.  
  360.         ; prossimo interrupt: cima dello schermo (logo ondulato)
  361.         lda #Y_LOGO
  362.         sta $D012
  363.         lda #<irq
  364.         sta $0314
  365.         lda #>irq
  366.         sta $0315
  367.  
  368.         asl $D019
  369.         jmp $EA81
  370.  
  371. ; -----------------
  372. ; ---  STRINGHE ---
  373. ; -----------------
  374. ; Imposta l'encoding su screen
  375. .enc "screen"
  376.  
  377. string_1
  378.         .text "FERRAGOSTO 2026", 0
  379.  
  380. string_2
  381.         .text "'RETROPROGRAMMING ITALIA - RP ITALIA'", 0
  382.  
  383. string_3
  384.         .text "VI AUGURA", 0
  385.  
  386. string_4
  387.         .text "BUON FERRAGOSTO!", 0
  388.  
  389. scroll_str
  390.         .text "kimono (fELICE nARDELLA) PRESENTA: 'fERRAGOSTO 2026 dEMO'"
  391.         .text "                 "
  392.         .text "bUON fERRAGOSTO A TUTTI I RETROPROGRAMMATORI DEL gRUPPO fb "
  393.         .text "'rETROpROGRAMMING iTALIA - rP iTALIA (a dIVISION OF rETROCAMPUS)'! "
  394.         .text "sOLE, MARE E RASTER INTERRUPT: cOSA SI PUO' VOLERE DI PIU' "
  395.         .text "DA UN 15 AGOSTO? iL GLORIOSO c64 NON VA MAI IN FERIE! "
  396.         .text "uN RINGRAZIAMENTO A mANGANOID (zACK mAXIS) "
  397.         .text "PER IL SUO sID 'katchi'. "
  398.         .text "uN SALUTO SPECIALE AD aTTILIO cAPUOZZO, aNDRAS vAJDA, "
  399.         .text "fABRIZIO lODI, jADER mONARI, tONINO sCAFFIDI "
  400.         .text "E A TUTTI GLI ISCRITTI DI rp italia... "
  401.         .text "bUONE VACANZE!"
  402.         .text "                                        "
  403.         .text "kimono (fELICE nARDELLA) PRESENTS: 'fERRAGOSTO 2026 dEMO'"
  404.         .text "                 "
  405.         .text "gOOD mID-aUGUST TO ALL THE RETROPROGRAMMERS OF THE "
  406.         .text "'rETROpROGRAMMING iTALIA - rP iTALIA (a dIVISION OF rETROCAMPUS)' fb gROUP! "
  407.         .text "sUN, SEA, AND RASTER INTERRUPT: wHAT MORE COULD YOU WANT "
  408.         .text "FROM AUGUST 15TH? tHE GLORIOUS c64 NEVER GOES ON VACATION! "
  409.         .text "tHANKS TO mANGANOID (zACK mAXIS) "
  410.         .text "FOR HIS sID 'katchi'. "
  411.         .text "a SPECIAL GREETING TO aTTILIO cAPUOZZO, aNDRAS vAJDA, "
  412.         .text "fABRIZIO lODI, jADER mONARI, tONINO sCAFFIDI "
  413.         .text "AND TO ALL rp italia MEMBERS... "
  414.         .text "hAPPY HOLIDAYS!"
  415.         .text "                                        ", 0
  416.  
  417. ; Ripristina encoding di default
  418. .enc "none"
  419.  
  420. ; -------------------------
  421. ; ---  TABELLA DEL SENO ---
  422. ; -------------------------
  423.  
  424. sin_table      ; 128 valori - usata per il movimento degli sprite
  425.  
  426.         .byte $80, $86, $8C, $92, $98, $9F, $A5, $AB, $B0, $B6, $BC, $C1, $C7, $CC, $D1, $D5
  427.         .byte $DA, $DE, $E2, $E6, $EA, $ED, $F0, $F3, $F6, $F8, $FA, $FC, $FD, $FE, $FF, $FF
  428.         .byte $FF, $FF, $FF, $FE, $FD, $FC, $FA, $F8, $F6, $F3, $F0, $ED, $EA, $E6, $E2, $DE
  429.         .byte $DA, $D5, $D1, $CC, $C7, $C1, $BC, $B6, $B0, $AB, $A5, $9F, $98, $92, $8C, $86
  430.         .byte $80, $79, $73, $6D, $67, $60, $5A, $54, $4F, $49, $43, $3E, $38, $33, $2E, $2A
  431.         .byte $25, $21, $1D, $19, $15, $12, $0F, $0C, $09, $07, $05, $03, $02, $01, $00, $00
  432.         .byte $00, $00, $00, $01, $02, $03, $05, $07, $09, $0C, $0F, $12, $15, $19, $1D, $21
  433.         .byte $25, $2A, $2E, $33, $38, $3E, $43, $49, $4F, $54, $5A, $60, $67, $6D, $73, $79
  434.  
  435. ; ----------------------
  436. ; ---  DATI SPRITE   ---
  437. ; ----------------------
  438.  
  439.         * = $2100   ; puntatore = $84
  440.  
  441. ; Sole TL
  442.         .byte 0,0,192,0,0,224,0,0,224
  443.         .byte 0,0,96,0,0,96,0,0,96
  444.         .byte 1,192,96,1,224,0,0,240,31
  445.         .byte 0,120,255,0,57,255,0,3,255
  446.         .byte 0,7,255,0,15,255,0,31,255
  447.         .byte 62,31,159,63,191,159,7,191,159
  448.         .byte 0,63,159,0,63,255,0,63,255
  449.         .byte 0
  450.  
  451. ; Sole TR
  452.         .byte 3,0,0,7,0,0,7,0,0
  453.         .byte 6,0,0,6,0,0,6,0,0
  454.         .byte 6,3,128,0,7,128,248,15,0
  455.         .byte 255,30,0,255,156,0,255,192,0
  456.         .byte 255,224,0,255,240,0,255,248,0
  457.         .byte 249,248,124,249,253,252,249,253,224
  458.         .byte 249,252,0,255,252,0,255,252,0
  459.         .byte 0
  460.  
  461. ; Sole BL
  462.         .byte 0,63,191,0,63,191,0,63,223
  463.         .byte 7,191,207,63,191,224,62,31,240
  464.         .byte 0,31,255,0,15,255,0,7,255
  465.         .byte 0,3,255,0,57,255,0,120,255
  466.         .byte 0,240,31,1,224,0,1,192,96
  467.         .byte 0,0,96,0,0,96,0,0,96
  468.         .byte 0,0,224,0,0,224,0,0,192
  469.         .byte 0
  470.  
  471. ; Sole BR
  472.         .byte 253,252,0,253,252,0,251,252,0
  473.         .byte 243,253,224,7,253,252,15,248,124
  474.         .byte 255,248,0,255,240,0,255,224,0
  475.         .byte 255,192,0,255,156,0,255,30,0
  476.         .byte 248,15,0,0,7,128,6,3,128
  477.         .byte 6,0,0,6,0,0,6,0,0
  478.         .byte 7,0,0,7,0,0,3,0,0
  479.         .byte 0
  480.  
  481. ; ------------------
  482. ; ---  MUSICA    ---
  483. ; ------------------
  484. ; "Katchi" - Zack Maxis (Manganoid) - 2024 Hokuto Force/TempesT
  485. ; PSID v2: init = $1000, play = $1003
  486. ; Download SID from: https://csdb.dk/release/?id=247070
  487.  
  488.         * = $1000
  489.  
  490.         .binary "Katchi.sid", $7e  ; senza header PSID e senza load address
Advertisement
Add Comment
Please, Sign In to add comment