User Tools

Site Tools


base:1x1_scroll

Simple 1×1 Scroller with variable speed and forward/backward scrolling. Turbo-Assembler syntax.

         *= $1000

         jsr scrinit

         sei
         lda #>irq
         sta $0315
         lda #<irq
         sta $0314
         lda #$1b
         sta $d011
         lda #$01
         sta $d01a
         lda #$7f
         sta $dc0d
         lda #$70
         sta $d012
         cli
         rts

irq
         lda scrpos
         sta $d016
         inc $d020

         lda #$80
lp       .var *
         cmp $d012
         bne lp

         inc $d020
         jsr scroll
         dec $d020
         dec $d020

         lda #$c8
         sta $d016

         inc $d019

         jmp $ea31

;---------------------------------------
;scroller v1 (w) gpz of hitmen
;---------------------------------------
;features : unlimited text-length
;           (end with $00)
;
;           8 different speeds
;           (select with $f8 to $ff)
;
;           ascii-text (enter in the
;           source-code !)
;
;           forward & backward-scroll !
;           (select with $f1/$f0)
;---------------------------------------
;$d016-val.  : in scrpos
;scroll-init : jsr scrinit
;irq-drive   : jsr scroll
;---------------------------------------

line     = $0540

;---------------------------------------

scrinit  lda #>scrtxt   ; textstart
         sta txtpos+2
         lda #<scrtxt
         sta txtpos+1
         lda #$01       ; speed 1
         sta fscrspd+1
         sta bscrspd+1
         lda #$07
         sta scrpos
         lda #$01       ; forward
         sta scrdir
         rts


scroll   lda scrdir
         cmp #$01       ; forward ?
         bne backward   ; no !

forward  lda scrpos
         sec
fscrspd  sbc #$01
         and #$07
         sta scrpos
         bcc fver
         rts

fver     ldx #$00
flp1     lda line+1,x
         sta line,x
         inx
         cpx #$27
         bne flp1

         jmp txtpos

backward lda scrpos
         and #$07
         clc
bscrspd  adc #$01
         tax
         and #$07
         sta scrpos
         txa
         adc #$f8
         bcs bver
         rts

bver     ldx #$26
blp1     lda line,x
         sta line+1,x
         dex
         cpx #$ff
         bne blp1

txtpos   lda $dead      ;
         cmp #$00       ; end of txt ?
         bne lp2        ; no !

         lda #>scrtxt
         sta txtpos+2
         lda #<scrtxt
         sta txtpos+1
         jmp txtpos

lp2      cmp #$f8       ; speedbyte ?
         bcc lp4        ; no !
         and #$07
         clc
         adc #$01
         sta fscrspd+1
         sta bscrspd+1
         jmp txtcount

lp4      cmp #$f1          ; dir. forw ?
         bcc lp6           ; no !
         ldx #$01
         stx scrdir
         jmp txtcount

lp6      cmp #$f0          ; dir. back ?
         bcc lp5           ; no !
         ldx #$00
         stx scrdir
         jmp txtcount

lp5      ldx scrdir
         cpx #$01          ; forward ?
         bne back          ; no !

         and #$3f
         sta line+$27
         lda scrpos
         clc
         adc #$08
         and #$07
         sta scrpos
         jmp txtcount

back     and #$3f
         sta line
         lda scrpos
         sec
         sbc #$08
         and #$07
         sta scrpos

txtcount inc txtpos+1
         bne lp3
         inc txtpos+2
lp3

ende     rts

scrdir   .byte $01
scrpos   .byte $07


scrtxt

         .byte $f1,$f8
         .text "speed 1                "
         .byte $f9
         .text "speed 2                "
         .byte $fa
         .text "speed 3                "
         .byte $fb
         .text "speed 4                "
         .byte $fc
         .text "speed 5                "
         .byte $fd
         .text "speed 6                "
         .byte $fe
         .text "speed 7                "
         .byte $ff
         .text "speed 8                "

         .byte $f0,$f8
         .text "1 deeps                "
         .byte $f9
         .text "2 deeps                "
         .byte $fa
         .text "3 deeps                "
         .byte $fb
         .text "4 deeps                "
         .byte $fc
         .text "5 deeps                "
         .byte $fd
         .text "6 deeps                "
         .byte $fe
         .text "7 deeps                "
         .byte $ff
         .text "8 deeps                "

         .byte $00
base/1x1_scroll.txt · Last modified: 2015-04-17 04:30 (external edit)