Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; ============================================================
- ; FERRAGOSTO 2026 DEMO - COMMODORE 64
- ; per RetroProgramming Italia - RP Italia
- ; (A division of RetroCampus)
- ;
- ; by Kimono (F. Nardella)
- ; Assembler: 64tass ferragosto2026.asm -o ferragosto2026.prg
- ; ============================================================
- ; ----------------------
- ; --- BASIC RUNNER ---
- ; ----------------------
- * = $0801
- .word (+), 2026
- .null $9e, "2061" ; 2026 SYS 2061 ($080D)
- + .word 0
- ; COSTANTI
- VIC = $D000
- COL_MEM = $D800
- X_LOGO = 125
- Y_LOGO = 108
- ; VARIABILI in pagina zero
- DELTA = $FB ; differenza tra X_LOGO e X dello sprite a video
- OFFSET = $FC ; offset animazione
- STRING_ADR = $FD ; indirizzo stringa $fd = lo - $fe = hi
- STRING_POS = $03 ; posizione stringa (primo carattere)
- STRING_COL_MEM = $05
- STRING_COL = $2A ; colore stringa
- SCROLLER_OFF = $52 ; offset scroll orizzontale
- ; --------------------------
- ; --- ASSEMBLY PROGRAM ---
- ; --------------------------
- * = $080D
- ; **********************
- ; *** INIT SPRITES ***
- ; **********************
- ; puntatori sprite
- lda #$84
- sta $07F8
- lda #$85
- sta $07F9
- lda #$86
- sta $07FA
- lda #$87
- sta $07FB
- ; posizioni sprite (logo sole = 4 sprite espansi 2x2)
- lda #X_LOGO ; coord. x #0,2
- sta VIC
- sta VIC+4
- lda #Y_LOGO ; coord. y #0,1
- sta VIC+1
- sta VIC+3
- lda #X_LOGO + 42 ; coord. x #1,3
- sta VIC+2
- sta VIC+6
- lda #Y_LOGO + 42 ; coord. y #2,3
- sta VIC+5
- sta VIC+7
- ; colori sprite
- lda #7 ; sole giallo
- sta VIC+39
- sta VIC+40
- sta VIC+41
- sta VIC+42
- ; espansione x-y #0-3
- lda #%00001111
- sta VIC+23
- sta VIC+29
- ; sfondo e bordo neri
- lda #0
- sta VIC+32
- sta VIC+33
- ; abilita sprite #0-3
- lda #%00001111
- sta VIC+21
- ; ********************
- ; *** INIT VIDEO ***
- ; ********************
- ; pulisci schermo
- lda #15
- sta $0286
- jsr $E544
- ; colore agli angoli in basso (effetto per lo scroller)
- lda #11
- sta $DBC0
- sta $DBE5
- sta $DBE6
- lda #12
- sta $DBC1
- sta $DBE4
- ; modalita' 38 colonne
- lda $D016
- and #%11110111
- sta $D016
- ; valore iniziale scroll x
- lda #$07
- sta SCROLLER_OFF
- ; stampa stringa 1 (titolo)
- lda #<string_1
- sta STRING_ADR
- lda #>string_1
- sta STRING_ADR+1
- lda #$0C ; riga 0, colonna 12
- sta STRING_POS
- lda #$04
- sta STRING_POS+1
- lda #1 ; bianco
- sta STRING_COL
- jsr print_str
- ; stampa stringa 2 (gruppo)
- lda #<string_2
- sta STRING_ADR
- lda #>string_2
- sta STRING_ADR+1
- lda #$50 ; riga 2, colonna 1
- sta STRING_POS
- lda #$04
- sta STRING_POS+1
- lda #14 ; azzurro
- sta STRING_COL
- jsr print_str
- ; stampa stringa 3 (auguri)
- lda #<string_3
- sta STRING_ADR
- lda #>string_3
- sta STRING_ADR+1
- lda #$AE ; riga 4, colonna 14
- sta STRING_POS
- lda #$04
- sta STRING_POS+1
- lda #13 ; verde chiaro
- sta STRING_COL
- jsr print_str
- ; stampa stringa 4 (auguri)
- lda #<string_4
- sta STRING_ADR
- lda #>string_4
- sta STRING_ADR+1
- lda #$53 ; riga 21, colonna 11
- sta STRING_POS
- lda #$07
- sta STRING_POS+1
- lda #7 ; giallo
- sta STRING_COL
- jsr print_str
- ; puntatore iniziale del testo a scorrimento
- lda #<scroll_str
- sta STRING_POS
- lda #>scroll_str
- sta STRING_POS+1
- lda #0 ; subtune 0
- jsr $1000 ; INIT MUSICA
- jmp init_irq
- print_str
- lda STRING_POS
- sta STRING_COL_MEM
- lda STRING_POS+1
- clc
- adc #$D4
- sta STRING_COL_MEM+1
- ldy #$00
- _loop
- lda (STRING_ADR),y
- beq _end
- sta (STRING_POS),y
- lda STRING_COL
- sta (STRING_COL_MEM),y
- iny
- jmp _loop
- _end
- rts
- ; *****************************
- ; *** INIT RASTER IRQ ***
- ; *****************************
- init_irq
- sei ; sospendi gli interrupt durante l'init
- lda #$7f ; disabilita CIA
- sta $DC0D
- lda $D01A ; abilita raster interrupt
- ora #$01
- sta $D01A
- lda $D011 ; azzera il bit alto della linea raster
- and #$7f
- sta $D011
- lda #Y_LOGO ; primo interrupt sulla prima linea del logo
- sta $D012
- lda #<irq
- sta $0314
- lda #>irq
- sta $0315
- cli
- ; *******************
- ; *** MAIN LOOP ***
- ; *******************
- loop
- jmp loop
- ; ***********************************
- ; *** RASTER IRQ - LOGO ONDULATO ***
- ; ***********************************
- irq
- ldy DELTA
- lda sin_table,y
- lsr
- lsr
- lsr
- clc
- adc #X_LOGO
- sta VIC
- sta VIC+4
- adc #42
- sta VIC+2
- sta VIC+6
- ; sposta l'interrupt alla linea successiva
- lda $D012
- clc
- adc #$02
- cmp #Y_LOGO + 84 ; raggiunto il fondo del logo?
- bcc _next_line
- jmp _next_frame
- _next_line
- sta $D012 ; prossima linea di interrupt
- ; cicla DELTA tra 0-127
- inc DELTA
- lda DELTA
- and #%01111111
- sta DELTA
- jmp _end_irq
- _next_frame
- ; cicla l'offset del seno tra 0-127
- inc OFFSET
- lda OFFSET
- and #%01111111
- sta OFFSET
- sta DELTA
- ; prossimo interrupt: scroller
- lda #228
- sta $D012
- lda #<irq_scroll
- sta $0314
- lda #>irq_scroll
- sta $0315
- _end_irq
- asl $D019
- jmp $EA81
- ; **************************************
- ; *** RASTER IRQ - TESTO SCORREVOLE ***
- ; **************************************
- irq_scroll
- lda SCROLLER_OFF
- cmp #$07
- bne _no_newchar
- ; nuovo carattere: sposta il blocco di 40 caratteri
- ldy #0
- _next_char
- lda $07C1,y
- sta $07C0,y
- iny
- cpy #39
- bne _next_char
- ; scrivi il nuovo carattere a video
- ldy #0
- lda (STRING_POS),y
- bne _print_char
- lda #<scroll_str ; fine testo: ricomincia
- sta STRING_POS
- lda #>scroll_str
- sta STRING_POS+1
- lda (STRING_POS),y
- _print_char
- sta $07E7 ; ultimo carattere dello schermo
- inc STRING_POS
- bne _no_newchar
- inc STRING_POS+1
- _no_newchar
- ; imposta lo scroll x hardware
- lda $D016
- and #%11111000
- ora SCROLLER_OFF
- sta $D016
- ; charset minuscolo per la riga dello scroller
- lda $D018
- ora #%00000010
- sta $D018
- ; decrementa lo scroll x di 2 (cicla tra 0-7)
- dec SCROLLER_OFF
- dec SCROLLER_OFF
- lda SCROLLER_OFF
- and #%00000111
- sta SCROLLER_OFF
- ; prossimo interrupt: musica
- lda #252
- sta $D012
- lda #<irq_music
- sta $0314
- lda #>irq_music
- sta $0315
- asl $D019
- jmp $EA81
- ; ******************************
- ; *** RASTER IRQ - MUSICA ***
- ; ******************************
- irq_music
- ; ripristina lo scroll x hardware
- lda $D016
- ora #%00000111
- sta $D016
- ; charset maiuscolo per il resto dello schermo
- lda $D018
- and #%11111101
- sta $D018
- jsr $1003 ; PLAY MUSICA
- ; prossimo interrupt: cima dello schermo (logo ondulato)
- lda #Y_LOGO
- sta $D012
- lda #<irq
- sta $0314
- lda #>irq
- sta $0315
- asl $D019
- jmp $EA81
- ; -----------------
- ; --- STRINGHE ---
- ; -----------------
- ; Imposta l'encoding su screen
- .enc "screen"
- string_1
- .text "FERRAGOSTO 2026", 0
- string_2
- .text "'RETROPROGRAMMING ITALIA - RP ITALIA'", 0
- string_3
- .text "VI AUGURA", 0
- string_4
- .text "BUON FERRAGOSTO!", 0
- scroll_str
- .text "kimono (fELICE nARDELLA) PRESENTA: 'fERRAGOSTO 2026 dEMO'"
- .text " "
- .text "bUON fERRAGOSTO A TUTTI I RETROPROGRAMMATORI DEL gRUPPO fb "
- .text "'rETROpROGRAMMING iTALIA - rP iTALIA (a dIVISION OF rETROCAMPUS)'! "
- .text "sOLE, MARE E RASTER INTERRUPT: cOSA SI PUO' VOLERE DI PIU' "
- .text "DA UN 15 AGOSTO? iL GLORIOSO c64 NON VA MAI IN FERIE! "
- .text "uN RINGRAZIAMENTO A mANGANOID (zACK mAXIS) "
- .text "PER IL SUO sID 'katchi'. "
- .text "uN SALUTO SPECIALE AD aTTILIO cAPUOZZO, aNDRAS vAJDA, "
- .text "fABRIZIO lODI, jADER mONARI, tONINO sCAFFIDI "
- .text "E A TUTTI GLI ISCRITTI DI rp italia... "
- .text "bUONE VACANZE!"
- .text " "
- .text "kimono (fELICE nARDELLA) PRESENTS: 'fERRAGOSTO 2026 dEMO'"
- .text " "
- .text "gOOD mID-aUGUST TO ALL THE RETROPROGRAMMERS OF THE "
- .text "'rETROpROGRAMMING iTALIA - rP iTALIA (a dIVISION OF rETROCAMPUS)' fb gROUP! "
- .text "sUN, SEA, AND RASTER INTERRUPT: wHAT MORE COULD YOU WANT "
- .text "FROM AUGUST 15TH? tHE GLORIOUS c64 NEVER GOES ON VACATION! "
- .text "tHANKS TO mANGANOID (zACK mAXIS) "
- .text "FOR HIS sID 'katchi'. "
- .text "a SPECIAL GREETING TO aTTILIO cAPUOZZO, aNDRAS vAJDA, "
- .text "fABRIZIO lODI, jADER mONARI, tONINO sCAFFIDI "
- .text "AND TO ALL rp italia MEMBERS... "
- .text "hAPPY HOLIDAYS!"
- .text " ", 0
- ; Ripristina encoding di default
- .enc "none"
- ; -------------------------
- ; --- TABELLA DEL SENO ---
- ; -------------------------
- sin_table ; 128 valori - usata per il movimento degli sprite
- .byte $80, $86, $8C, $92, $98, $9F, $A5, $AB, $B0, $B6, $BC, $C1, $C7, $CC, $D1, $D5
- .byte $DA, $DE, $E2, $E6, $EA, $ED, $F0, $F3, $F6, $F8, $FA, $FC, $FD, $FE, $FF, $FF
- .byte $FF, $FF, $FF, $FE, $FD, $FC, $FA, $F8, $F6, $F3, $F0, $ED, $EA, $E6, $E2, $DE
- .byte $DA, $D5, $D1, $CC, $C7, $C1, $BC, $B6, $B0, $AB, $A5, $9F, $98, $92, $8C, $86
- .byte $80, $79, $73, $6D, $67, $60, $5A, $54, $4F, $49, $43, $3E, $38, $33, $2E, $2A
- .byte $25, $21, $1D, $19, $15, $12, $0F, $0C, $09, $07, $05, $03, $02, $01, $00, $00
- .byte $00, $00, $00, $01, $02, $03, $05, $07, $09, $0C, $0F, $12, $15, $19, $1D, $21
- .byte $25, $2A, $2E, $33, $38, $3E, $43, $49, $4F, $54, $5A, $60, $67, $6D, $73, $79
- ; ----------------------
- ; --- DATI SPRITE ---
- ; ----------------------
- * = $2100 ; puntatore = $84
- ; Sole TL
- .byte 0,0,192,0,0,224,0,0,224
- .byte 0,0,96,0,0,96,0,0,96
- .byte 1,192,96,1,224,0,0,240,31
- .byte 0,120,255,0,57,255,0,3,255
- .byte 0,7,255,0,15,255,0,31,255
- .byte 62,31,159,63,191,159,7,191,159
- .byte 0,63,159,0,63,255,0,63,255
- .byte 0
- ; Sole TR
- .byte 3,0,0,7,0,0,7,0,0
- .byte 6,0,0,6,0,0,6,0,0
- .byte 6,3,128,0,7,128,248,15,0
- .byte 255,30,0,255,156,0,255,192,0
- .byte 255,224,0,255,240,0,255,248,0
- .byte 249,248,124,249,253,252,249,253,224
- .byte 249,252,0,255,252,0,255,252,0
- .byte 0
- ; Sole BL
- .byte 0,63,191,0,63,191,0,63,223
- .byte 7,191,207,63,191,224,62,31,240
- .byte 0,31,255,0,15,255,0,7,255
- .byte 0,3,255,0,57,255,0,120,255
- .byte 0,240,31,1,224,0,1,192,96
- .byte 0,0,96,0,0,96,0,0,96
- .byte 0,0,224,0,0,224,0,0,192
- .byte 0
- ; Sole BR
- .byte 253,252,0,253,252,0,251,252,0
- .byte 243,253,224,7,253,252,15,248,124
- .byte 255,248,0,255,240,0,255,224,0
- .byte 255,192,0,255,156,0,255,30,0
- .byte 248,15,0,0,7,128,6,3,128
- .byte 6,0,0,6,0,0,6,0,0
- .byte 7,0,0,7,0,0,3,0,0
- .byte 0
- ; ------------------
- ; --- MUSICA ---
- ; ------------------
- ; "Katchi" - Zack Maxis (Manganoid) - 2024 Hokuto Force/TempesT
- ; PSID v2: init = $1000, play = $1003
- ; Download SID from: https://csdb.dk/release/?id=247070
- * = $1000
- .binary "Katchi.sid", $7e ; senza header PSID e senza load address
Advertisement
Add Comment
Please, Sign In to add comment