Ob das noch etwas geschmeidiger werden kann ? - Beim CBM 8000 wird es wohl nur Hardscroll werden, aber vielleicht kennt jemand einen Trick ? Dieser Abstand zwischen den einzelnen Zeilen nervt auch,
Code
- !to"gamescroll.prg",cbm
- t_lo = $0a
- t_hi = $0b
- s_lo = $0c
- s_hi = $0d
- speed = $0e
- steps = $0f
- txtpos = $0330
- *=$0401
- !by $0D,$04,$0A,$00,$9E,$28,$31,$30,$33,$39,$29,$00,$00,$00
- start:
- ; setups
- lda #$29 ; scroll speed
- sta speed
- lda #80 ; scroll columns
- sta steps
- ; scrolls (brute force, later table use)
- restart:
- lda #$00
- sta txtpos
- sta t_lo
- lda #$20
- sta t_hi
- jsr scrlscr
- lda #$90
- sta t_lo
- lda #$21
- sta t_hi
- lda #$00
- sta txtpos
- jsr scrlscr
- lda #$00
- sta txtpos
- sta t_lo
- lda #$20
- sta t_hi
- jsr scrlscr
- lda #$20
- sta t_lo
- lda #$23
- sta t_hi
- lda #$00
- sta txtpos
- jsr scrlscr
- jmp restart
- rts
- ; hardscroll routine
- scrlscr:
- - lda t_hi
- sta s_hi
- lda t_lo
- sta s_lo
- jsr getchar
- jsr scroll
- lda txtpos
- cmp steps
- bne -
- rts
- getchar:
- ldy txtpos
- inc txtpos
- lda (s_lo),y
- jsr parser
- sta $868f
- jsr nxt_line
- lda (s_lo),y
- jsr parser
- sta $868f+80
- jsr nxt_line
- lda (s_lo),y
- jsr parser
- sta $868f+160
- jsr nxt_line
- lda (s_lo),y
- jsr parser
- sta $868f+240
- jsr nxt_line
- lda (s_lo),y
- jsr parser
- sta $868f+320
- rts
- nxt_line:
- lda s_lo
- clc
- adc #$50
- sta s_lo
- bcc +
- inc s_hi
- + rts
- ; parse screen codes
- parser:
- cmp #16
- bne +
- asl
- bne ++
- + cmp #$20
- bne ++
- ora #$80
- ++ rts
- ; scroll area
- scroll:
- ldx #$00
- -- lda $8640+1,x
- sta $8640,x
- lda $8640+80+1,x
- sta $8640+80,x
- lda $8640+160+1,x
- sta $8640+160,x
- lda $8640+240+1,x
- sta $8640+240,x
- lda $8640+320+1,x
- sta $8640+320,x
- inx
- jsr delay
- cpx #$4f
- bne --
- rts
- ; scroll delay
- delay: tya
- pha
- -- ldy #$00
- - iny
- cpy speed
- bne -
- pla
- tay
- rts
- ; screen codes
- *=$2000
- level:
- !scr " pppppppp "
- !scr " pppppppp "
- !scr " pppp "
- !scr " "
- !scr " "
- !scr " p pppppppppp "
- !scr " p "
- !scr " p "
- !scr " "
- !scr " "
- !scr " pppp p pp "
- !scr " pp pp "
- !scr " "
- !scr " "
- !scr " "