Code: Select all
* = $0000 ; not needed but best to be explicit
.logical $8000
; bank 0 here
.WORD ColdStart ; ColdStart vector.
.WORD WarmStart ; WarmStart vector.
.BYTE $C3,$C2,$CD,$38,$30 ; "CBM8O" Autostart string.
;------------------
Screen = $0400
;------------------
ColdStart:
SEI
STX $D016
JSR $FDA3 ; Prepare IRQ.
JSR $FD50 ; Init Memory. Rewrite this routine to speed up boot process.
JSR $FD15 ; Init I/O.
JSR $FF5B ; Init Video.
CLI ; Disable Interrupts.
;------------------
WarmStart:
JSR Load_TileMap
LDA #$02
STA $D800 ; Color RAM $D800-$DBE7.
LDA #$01
STA $D801 ; Color RAM $D800-$DBE7.
LDA #$00
STA $D802 ; Color RAM $D800-$DBE7.
LDA #$08 ; #bordercolor
STA $D020
LDA #$06 ; #backgroundcolor
STA $D021
;-------
LDA #%11111111
STA $D015 ; Sprite Enable Registers.
LDA #%00000111
STA $D017 ; Sprite Vertical Expansion
STA $D01D ; Sprite Horizontal Expansion
LDA #%11111010
STA $D01C ; Sprite Multicolor Registers.
;-------
LDA #%10000000 ; 128x64= $2000
STA $7F8
LDA #%10000001 ; Sprite1 czyli 129x64=$2040.
STA $7F9
LDA #%10000010 ; Sprite2 czyli 130x64=$2080.
STA $7FA
;-------
LDA #$04 ; // sprite multicolor 1
STA $D025
LDA #$07 ; // sprite multicolor 2
STA $D026
LDA #$00 ; SPRITE0 KOLOR.
STA $D027
LDA #$01 ; SPRITE1 KOLOR.
STA $D028
LDA #$03 ; SPRITE2 KOLOR.
STA $D029
LDA #$01 ; SPRITE3 KOLOR.
STA $D02A
LDA #$01 ; SPRITE4 KOLOR.
STA $D02B
LDA #$01 ; SPRITE5 KOLOR.
STA $D02C
LDA #$01 ; SPRITE6 KOLOR.
STA $D02D
LDA #$01 ; SPRITE7 KOLOR.
STA $D02E
lda #$80
sta $D000
sta $D001
lda #$40
sta $D002
sta $D003
lda #$C0
sta $D004
sta $D005
JSR LoadSprite0
JSR LoadSprite1
JSR LoadSprite2
;------------------
Forever:
LDA #$FB ; Your Clear raster line to make stuff.
Wait:
CMP $D012
BNE Wait
;-------
JMP Forever
;------------------
LoadSprite0:
LDY #$00
LoadSprite0_Loop:
LDA Sprite0,y
STA $2000,y
INY
CPY #64
BNE LoadSprite0_Loop
RTS
;------------------
LoadSprite1:
LDY #$00
LoadSprite1_Loop:
LDA Sprite1,y
STA $2040,y
INY
CPY #64
BNE LoadSprite1_Loop
RTS
;------------------
LoadSprite2:
LDY #$00
LoadSprite2_Loop:
LDA Sprite1,y ; laduje sprite1 aby miec to samo do testow co sprite1
STA $2080,y
INY
CPY #64
BNE LoadSprite2_Loop
RTS
;------------------
Sprite0: ; Narysowany na stronie "https://www.spritemate.com/".
.byte %11111110,%00000111,%11110000
.byte %11111111,%10001111,%11110000
.byte %11110000,%11001000,%11110000
.byte %01100000,%01111000,%01110000
.byte %00100010,%00011000,%00010000
.byte %00110000,%00001100,%00100000
.byte %00011110,%00000100,%00100000
.byte %00111111,%00000001,%01111000
.byte %01000000,%00000000,%01101110
.byte %11000000,%00111100,%11000011
.byte %10000100,%01111100,%10000011
.byte %11000000,%01111100,%00000011
.byte %11000000,%01111000,%01000111
.byte %11100000,%00110000,%00000111
.byte %11110000,%00000110,%00011110
.byte %01111100,%00000011,%11111100
.byte %00111111,%10000011,%10000000
.byte %00000011,%00010011,%10000000
.byte %00000011,%00000111,%00000000
.byte %00000001,%00011111,%00000000
.byte %00000001,%11111110,%00000000
;------------------
Sprite1: ; / multicolor / color: $00.
.BYTE %00000010,%10101010,%10000000
.BYTE %00001110,%10101010,%10110000
.BYTE %00001110,%01101001,%10110000
.BYTE %00001110,%10101010,%10110000
.BYTE %00000010,%10101010,%10000000
.BYTE %00000000,%11101011,%00000000
.BYTE %11101010,%10101010,%10101011
.BYTE %10100000,%11101011,%00001010
.BYTE %10000010,%10101010,%10000010
.BYTE %10001110,%10010110,%10110010
.BYTE %10001010,%10101010,%10100010
.BYTE %10001010,%11010111,%10100010
.BYTE %11001010,%10101010,%10100011
.BYTE %00001010,%10010110,%10100000
.BYTE %00001110,%10101010,%10110000
.BYTE %00000011,%10101010,%11000000
.BYTE %00000000,%10111110,%00000000
.BYTE %00000011,%10000010,%11000000
.BYTE %00110010,%10000010,%10001100
.BYTE %00101110,%11000011,%10111000
.BYTE %00101010,%00000000,%10101000
;------------------
sprite2:
.BYTE %00000000,%00000000,%00000000
.BYTE %00000010,%00000000,%00000000
.BYTE %00011001,%00000000,%10011000
.BYTE %00100100,%10000001,%00100100
.BYTE %01001010,%01000001,%01010010
.BYTE %01001010,%01000001,%01010010
.BYTE %00100100,%01000001,%00100100
.BYTE %00011000,%01000001,%00011000
.BYTE %00000000,%00100001,%00000000
.BYTE %00000000,%00100010,%00000000
.BYTE %00000000,%00100010,%00000000
.BYTE %00010000,%01000010,%00000000
.BYTE %00010000,%01000010,%00000000
.BYTE %00100000,%00111100,%00001000
.BYTE %00100000,%00000000,%00000100
.BYTE %01000000,%00000000,%00000100
.BYTE %01000000,%00000000,%10000100
.BYTE %00100001,%00010000,%10011000
.BYTE %00011001,%00010011,%11100000
.BYTE %00000111,%11111100,%00000000
.BYTE %00000000,%00000000,%00000000
;------------------
Load_TileMap:
LDY #$00
Load_TileMap_Loop:
LDA TileMap,y
STA Screen,y
LDA TileMap+250,y
STA Screen+250,y
LDA TileMap+500,y
STA Screen+500,y
LDA TileMap+750,y
STA Screen+750,y
INY
CPY #250
BNE Load_TileMap_Loop
RTS
;------------------
TileMap:
.BYTE 35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35
.BYTE 35,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,35,32,32,32,32,32,32,32,35
.BYTE 35,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,35,32,32,32,32,32,32,32,35
.BYTE 35,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,35,32,35,32,32,32,35,32,35
.BYTE 35,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,35,32,35,32,32,32,35,32,35
.BYTE 35,32,32,32,32,32,32,32,32,35,35,35,35,35,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,35,32,32,32,32,32,32,32,35
.BYTE 35,32,32,32,32,32,32,32,32,35,32,32,32,35,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,35,32,32,32,32,32,32,32,35
.BYTE 35,32,32,32,32,32,32,32,32,35,32,32,32,35,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,35,32,32,32,32,32,32,32,35
.BYTE 35,32,32,32,32,32,32,32,32,35,32,32,32,35,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,35,32,32,32,32,32,32,32,35
.BYTE 35,32,32,32,32,32,32,32,32,35,32,32,32,35,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,35,32,32,32,32,32,32,32,35
.BYTE 35,32,32,32,32,32,32,32,32,35,35,35,35,35,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,35,32,32,32,32,32,32,32,35
.BYTE 35,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,35,32,32,32,32,32,32,32,35
.BYTE 35,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,35,32,32,32,32,32,32,32,35
.BYTE 35,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,35,32,32,32,32,32,32,32,35
.BYTE 35,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,35,32,32,32,32,32,32,32,35
.BYTE 35,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,35,32,32,32,32,32,32,32,35
.BYTE 35,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,35,32,32,32,32,32,32,32,35
.BYTE 35,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,35,32,32,32,32,32,32,32,35
.BYTE 35,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,35,32,32,32,32,32,32,32,35
.BYTE 35,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,35,32,32,32,32,32,32,32,35
.BYTE 35,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,35,32,32,32,32,32,32,32,35
.BYTE 35,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,35,32,32,32,32,32,32,32,35
.BYTE 35,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,35,32,32,32,32,32,32,32,35
.BYTE 35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35
.BYTE 35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35
;------------------
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
;------------------
.logical $8000
; bank 1 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
;------------------
.logical $8000
; bank 2 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
;------------------
.logical $8000
; bank 3 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
;-------------------
.logical $8000
; bank 4 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 5 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 6 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 7 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 8 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 9 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 10 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 11 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 12 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 13 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 14 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 15 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
;-------------------
.logical $8000
; bank 16 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 17 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 18 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 19 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 20 here
.byte 0
.cwarn * >= $C000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 21 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 22 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 23 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 24 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 25 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 26 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 27 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 28 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 29 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 30 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 31 here
.byte 0
;----------------------------
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 31 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 31 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 31 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 31 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 31 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 31 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 31 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 31 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 31 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 31 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 31 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 31 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 31 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 31 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 31 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 31 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 31 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 31 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 31 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 31 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 31 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 31 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 31 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 31 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 31 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 31 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 31 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 31 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 60 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 61 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 62 here
.byte 0
.cwarn * >= $A000, "bank overflow"
.here
.align 8192 ; make sure you fill the whole 8K.
.logical $8000
; bank 63 here
.byte 0
.cwarn * >= $A000, "bank overflow"
* = $9FFF
.byte 0
.here
By the way, I will ask about some simplest methods of obtaining sounds from SID. Unfortunately, I tried in various ways to write different values to the SID Registers to get some sounds, but nothing really worked out - I understand it's not as easy as with 2A03, where you can write a few random values to it to get SFX?