User Tools

Site Tools


base:scrolltext_using_sprites

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

base:scrolltext_using_sprites [2015-04-17 04:33]
base:scrolltext_using_sprites [2015-04-17 04:33] (current)
Line 1: Line 1:
 +<code>
 + ; ----------------------------------------------------------------------------------------------------
 + ;
 + ; Sprite-Scroller Routine
 + ; ----------------------------
 + ;
 + ; coding: testicle/payday
 + ; logo: fabu/payday
 + ;
 + ;
 + ; contact and payday-releases:
 + ; ------------------------------------
 + ;
 + ; daniel@popelganda.de
 + ; www.popelganda.de
 + ;
 + ;
 + ; this source code is part of an intro, so many code is missing here,
 + ; while only the interesting parts for the sprite scroller are shown.
 + ; it shows how to use sprites for text scrolling, so the scroll text
 + ; can easily be placed above pictures.
 + ;
 + ; this sourcecode is best view with the font "tahoma", font size 9.
 + ; you can compile this code using the ACME crossassembler.
 + ;
 + ; the code was written with Relaunch64, the c64-crossassembler-tool
 + ; for windows-pc. grab it at www.popelganda.de!
 + ;
 + ; ----------------------------------------------------------------------------------------------------
  
 +
 +
 +;--------------------------------------------------
 +;----- Paragraph @Globale Variablen@ -----
 +;--------------------------------------------------
 +
 +spritexpos = 128
 +spriteypos = 140 ;sprite y-position
 +spritechar = $3300 ;here's the char located, that "rolls" into the spritescroller
 +text = $3a00
 +
 +
 +;--------------------------------------------------
 +;----- Paragraph @Includes@ -----
 +;--------------------------------------------------
 +
 +; init text pointer
 +
 + lda #<text
 + sta $50
 + lda #>text
 + sta $51
 +
 +;--------------------------------------------------
 +;----- Paragraph @clear sprite-memory@ -----
 +;--------------------------------------------------
 +
 + ldx #0
 + lda #$00
 +.loop4 sta $3800,x
 + inx
 + bne .loop4
 + ldx #0
 + lda #$00
 +.loop6 sta $3900,x
 + inx
 + cpx #64
 + bne .loop6
 +
 + ldx #7
 + lda #0
 +.loop5 sta spritechar,x
 + dex
 + bpl .loop5
 +
 + jsr sprscrollinit ;jump to subroutine to initialize sprite positions
 +
 + cli ;cli, for this is the end of the setup, which is missing here
 + ;(see comment on top for further information)
 +loading lda #0
 + beq loading ;endless branch, the "loading" pointer is changed
 + ;to a value of 1 when the user presses the space-bar
 + ;add something here to clear screen/move next demo part/whatever
 +
 +
 +;--------------------------------------------------
 +;
 +;----- Paragraph @init sprites above@ -----
 +;
 +;--------------------------------------------------
 +
 +!zone
 +sprscrollinit lda #spritexpos
 + sta $d000
 + lda #spritexpos+24
 + sta $d002
 + lda #spritexpos+48
 + sta $d004
 + lda #spritexpos+72
 + sta $d006
 + lda #spritexpos+96
 + sta $d008
 + lda #spriteypos
 + sta $d001
 + sta $d003
 + sta $d005
 + sta $d007
 + sta $d009
 +
 + lda #%00011111 ;switch on 5 sprites
 + sta $d015
 + lda #0
 + sta $d01b
 + sta $d01c
 + lda #11
 + sta $d027
 + sta $d028
 + sta $d029
 + sta $d02a
 + sta $d02b
 +
 +;--------------------------------------------------
 +; sprites at $3800
 +;--------------------------------------------------
 +
 + lda #224
 + sta $07f8
 + lda #225
 + sta $07f9
 + lda #226
 + sta $07fa
 + lda #227
 + sta $07fb
 + lda #228
 + sta $07fc
 + rts
 +
 +
 +;--------------------------------------------------
 +;
 +;----- Paragraph @Sub-Route: Spritescrolling@ -----
 +;
 +;--------------------------------------------------
 +
 + ;this is the main routine which is responsible for scrolling
 + ;a text through sprites
 +
 +!zone
 +spritescroll dec .cnt+1
 +.cnt lda #8 ;already 8 pixel moved?
 + beq .neuchar ;if yes, read in new char
 + jmp .softscroll ;else jump to the softscroller and return to the main routine
 +
 +.neuchar ldy #0 ;read new char
 + lda ($50),y ;this is the text-pointer
 + bne .undlos ;end-sign?
 +
 +;--------------------------------------------------
 +
 + lda #<next
 + sta jumper+1
 + lda #>next
 + sta jumper+2
 +
 +;--------------------------------------------------
 +
 + lda #0 ;if yes, reset text-vector
 + sta $50
 + lda #>text
 + sta $51
 + lda #$20
 +
 +.undlos clc ;clear carry-bit
 + rol ;char-value * 8
 + rol ;(this is the offset for the pixeldata of a char in the charset)
 + rol
 + sta .loop2+1
 + bcc .weiter
 + inc .loop2+2
 +
 +.weiter ldx #7 ;read 8 bytes (one char from the charset)
 +.loop2 lda $3000,x ;from charset-memory
 + sta spritechar,x ;and store to that memory-adress where the char is located,
 + dex ;that "roles" next into the spritescroll
 + bpl .loop2
 +
 + lda #0 ;reset adresses
 + sta .loop2+1
 + lda #$30
 + sta .loop2+2
 +
 + inc $50 ;increase scrolltext-counter
 + lda $50
 + bne .nixneu
 + inc $51
 +
 +.nixneu lda #8 ;reset scrolltext-counter
 + sta .cnt+1
 +
 +.softscroll ldy #0
 + ldx #0
 +
 +;--------------------------------------------------
 +; move chars in sprites
 +; to the left (soft-scrolling)
 +;--------------------------------------------------
 +
 +.loop1 clc
 +.origin rol spritechar ;"read" left bit of new sign
 + rol $3902,x ;move sprite-char - sprite5
 + rol $3901,x
 + rol $3900,x
 + rol $38c2,x ;move sprite-char - sprite4
 + rol $38c1,x
 + rol $38c0,x
 + rol $3882,x ;move sprite-char - sprite3
 + rol $3881,x
 + rol $3880,x
 + rol $3842,x ;move sprite-char - sprite2
 + rol $3841,x
 + rol $3840,x
 + rol $3802,x ;move sprite-char - sprite1
 + rol $3801,x
 + rol $3800,x
 + iny
 + inc .origin+1 ;increase counter and set to next "pixel-row" of that char
 + txa
 + clc:adc #3
 + tax
 + cpy #8
 + bne .loop1
 + lda #<spritechar ;restore original value
 + sta .origin+1
 + rts
 +
 +;--------------------------------------------------
 +;
 +;----- Paragraph @Scrolltext@ -----
 +;
 +;--------------------------------------------------
 +
 +*= text
 +
 +!ct scr
 +!tx "     out of the dark, into the blue... the symbol of our complex has been banned to bytes."
 +!tx "   now we in - payday - proudly present you some oldschool-stuff, codename: press space to continue."
 +!tx "   this marvellous piece of art has a name! it's called..."
 +
 +!tx "                    "
 +!byte 0
 +</code>
base/scrolltext_using_sprites.txt ยท Last modified: 2015-04-17 04:33 (external edit)