User Tools

Site Tools


base:acme_1x1_scroll

Differences

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

Link to this comparison view

base:acme_1x1_scroll [2015-04-17 04:30] (current)
Line 1: Line 1:
 +==== 1x1 Scrolling message inside IRQ interrupts ====
 +This routine shows you how to create a 1x1 smooth scrolling message inside an IRQ raster interrupt routine. Looking below you will see that this scroller uses 2 iterrupts. As we cut the raster positions into two parts. Most of the upper raster ramains as normal, while the bottom raster has a smooth scroll effect.
 +
 +Note: Source is programmed in ACME cross-assembler and it has been tested beforehand too.
 +<​code>​
 +;1x1 scrolling message inside IRQ by Richard Bayliss ​             ​
 +
 +smooth = $02      ;Control for smooth scroll
 +screenloc = $0798 ;This is the line for where the scroll is placed
 +
 +                 !to "​irqscroll.prg",​cbm
 +                 * = $4000
 +                 sei
 +                 jsr $ff81
 +                 lda #<​message
 +                 ldy #>​message
 +                 sta read+1
 +                 sty read+2
 +                 lda #<​interrupt1
 +                 ldx #>​interrupt1
 +                 ldy #$1b
 +                 sta $314
 +                 stx $315
 +                 sty $d011
 +                 lda #$7f
 +                 sta $dc0d
 +                 lda #$01
 +                 sta $d01a
 +                 cli
 +hold             jmp hold
 +interrupt1 ​      inc $d019
 +                 lda #$00 
 +                 sta $d012
 +                 lda smooth ;Scroll section
 +                 sta $d016
 +                 lda #<​interrupt2
 +                 ldx #>​interrupt2
 +                 sta $314
 +                 stx $315
 +                 jmp $ea7e
 +interrupt2 ​      inc $d019
 +                 lda #$e0
 +                 sta $d012
 +                 lda #$08 ;No scroll section here
 +                 sta $d016
 +                 lda #<​interrupt1
 +                 ldx #>​interrupt1
 +                 sta $314
 +                 stx $315
 +                 jsr scroll
 +                 jmp $ea7e
 +                 
 +scroll ​          lda smooth
 +                 sec
 +                 sbc #$01 ;Speed of scroll can be edited to how you want it, but don't go too mad :)
 +                 and #$07 ;We need this to make the variable smooth into something smooth :)
 +                 sta smooth
 +                 bcs endscroll ​
 +                 ldx #$00
 +wrapmessage ​     lda screenloc+1,​x
 +                 sta screenloc,x
 +                 inx
 +                 cpx #$28
 +                 bne wrapmessage
 +read             lda screenloc+$27
 +                 cmp #$00 ;Is byte 0 (@) read?
 +                 bne nowrap ;If not, goto label nowrap
 +                 lda #<​message
 +                 ldy #>​message
 +                 sta read+1
 +                 sty read+2
 +                 jmp read
 +nowrap ​          sta screenloc+$27
 +                 inc read+1
 +                 lda read+1
 +                 cmp #$00
 +                 bne endscroll
 +                 inc read+2
 +endscroll ​       rts
 +
 +message ​         !scr "hello folks. this is a 1x1 char message scroller"​
 +                 !scr " inside an IRQ interrupt, coded by richard bayliss"​
 +                 !scr " of the new dimension, in acme cross assembler ... "
 +                 !scr "we do hope you like it ;o)) ... hopefully you should"​
 +                 !scr "find the source code useful for future demos and stu"
 +                 !scr "ff if you want to learn to do scroll texts ...      "
 +                 !scr "wrap time!                                          "
 +                 !byte 0
 +                 
 +</​code>​
  
base/acme_1x1_scroll.txt ยท Last modified: 2015-04-17 04:30 (external edit)