WRITING A MINI INTRO WITH PICTURE AND SID TUNE (C64) PART 2

Last Updated or created 2023-08-02

Adding a picture:
Most used is loading a koala picture.
Never done it like this before, luckily loads of retro lovers are posting code examples.
There are a lot of tools now available on PC. (Windows and Linux)

Acme : compiler i’ve used for this example
Retropixels : converting jpg into koala
Exomizer : packing/compressing the C64 prg (16k to 5.4k)
Sidreloc : relocator for SID files.

Exomizer command with effect:
(NOTE on linux you have to use single qoutes!)

retropixels -r 64 --format prg bottom.jpg ; for a prg (not used)
retropixels bottom.jpg ; for a koala picture

exomizer sfx 0x080d bottom.prg -x 'lda $fb eor #$01 sta $fb beq skip dec $d020 inc $d020 skip:'
# 0x080d is the starting address

Code

!to "bottomsm.prg",cbm
; start prg
* = $0801
; header for sys auto start
!byte $0b, $08, $00, $00, $9e, $32, $30, $36, $31, $00, $00, $00

PICTURE = $2000
BITMAP = PICTURE
VIDEO = PICTURE+$1f40
COLOR = PICTURE+$2328
BACKGROUND = PICTURE+$2710

* = $080d

	sei
	lda #<irq
	ldx #>irq
	sta $314
	stx $315
	lda #$1b
	ldx #$00
	ldy #$7f 
	sta $d011
	stx $d012
	sty $dc0d
	lda #$01
	sta $d01a
	sta $d019 ; ACK any raster IRQs
	lda #$00
	jsr $1000 ; Call music

	lda #$00
	sta $d020 ; Border Color
	lda BACKGROUND
	sta $d021 ; Screen Color

	; Transfer Video and Color
	ldx #$00
.LOOP
	; Transfers video data
	lda VIDEO,x
	sta $0400,x
	lda VIDEO+$100,x
	sta $0500,x
	lda VIDEO+$200,x
	sta $0600,x
	lda VIDEO+$2e8,x
	sta $06e8,x
	; Transfers color data
	lda COLOR,x
	sta $d800,x
	lda COLOR+$100,x
	sta $d900,x
	lda COLOR+$200,x
	sta $da00,x
	lda COLOR+$2e8,x
	sta $dae8,x
	inx
	bne .LOOP

	; Bitmap Mode On
	lda #$3b
	sta $d011

	; MultiColor On
	lda #$d8
	sta $d016
	; When bitmap adress is $2000 ; Screen at $0400 ; Value of $d018 is $18
	lda #$18
	sta $d018
	cli
	.MYLOOP
	jmp .MYLOOP

irq
	lda #$01
	sta $d019 ; ACK any raster IRQs
	jsr $1003 ;Play the music
	jmp $ea31
   
; Data parts with headers cut
	* = $1000
	!binary "bottom1000.sid" ,, $7c+2


	* = PICTURE
	!binary "bottom.kla",,2

Writing a mini intro with picture and sid tune (C64) part 1

Last Updated or created 2023-08-02

Started with a example from https://codebase64.org/

But that didnĀ“t work (see movie clip)

looking at the sid info:

Title Bottom
Author Richard Bayliss
Released 2011 The New Dimension
Load Address $8000
Init Address $8000
Play Address $8003
Number of tunes 1
Default tune 1
Speed $00000000
SID Model 8580
Clock PAL
File Format PSID
Format Version 2
BASIC false
PlaySID Specific false

I saw that I have to move the load/init/play address.

Luckily there is sidreloc !

wget https://hd0.linusakesson.net/files/sidreloc-1.0.tgz
tar xzvf sidreloc*
cd sidreloc
make

Using:

~/Downloads/sidreloc-1.0/sidreloc  -p 10 ~/projects/sidplaybottomdemo/bottom.sid ~/projects/sidplaybottomdemo/bottom1000.sid

I could successfully move the sid to $1000

Final code (for now, next time i’ll add a picture).
(Using ACME as compiler, and X64 (vice as emulator))

;https://codebase64.org/doku.php?id=base:simple_irq_music_player
             !to "bottom.prg",cbm

        * = $0801
			
sysline:	
        !byte $0b,$08,$01,$00,$9e,$32,$30,$36,$31,$00,$00,$00 ;= SYS 2061

        * = $080d 

             sei
             lda #<irq
             ldx #>irq
             sta $314
             stx $315
             lda #$1b
             ldx #$00
             ldy #$7f 
             sta $d011
             stx $d012
             sty $dc0d
             lda #$01
             sta $d01a
             sta $d019 ; ACK any raster IRQs
             lda #$00
             jsr $1000 
             cli
hold         jmp hold 
                      ; we could also RTS here, when also changing $ea81 to $ea31
irq
             lda #$01
             sta $d019 ; ACK any raster IRQs
             jsr $1003 ;Play the music
             jmp $ea31
            
            * = $1000
             !binary "bottom1000.sid" ,, $7c+2