Stainless Steel
Registered: Mar 2003 Posts: 966 |
I'm really not an expert, but i took the liberty to modify your code a bit. how about this :
(ACME format. Rasterbar timingtable unfixed. Also this is is not the best way to do things but it works. Note for the wiseguys : yeah $d012 polling is slow and all but its an easier concept to grasp for beginners i think)
!TO "test.prg"
*=$0ffe
!BIN "tune.dat"
scrltxt = $5000
*= $4000
jsr $e544
sei
lda #$01
sta $d01a
lda #$7f
sta $dc0d
lda #<split1
sta $0314
lda #>split1
sta $0315
cli
ldx #$00
jsr $1000
jmp *
split1
lda #$00
cmp $d012
bne *-3
lda #$00
sta $d020
sta $d021
split2
lda #$7a
cmp $d012
bne *-3
lda #$15
sta $d018
lda smooth ; move the scroll
sta $d016 ; to the left dep.
; on the smooth-bit
jsr raster ; draw the rasterbar
split3
lda #$9d
cmp $d012
bne *-3
dec $d020 ;<- visualize rasterusage
jsr scroll2x2 ; print the
; scrolltext
inc $d020 ;<- visualize rasterusage
lda #$08 ; set normal
sta $d016 ; screen
split4
lda #$c0
cmp $d012
bne *-3
lda #$03
sta $d020
sta $d021
dec $d020 ;<- visualize rasterusage
jsr $1003
inc $d020 ;<- visualize rasterusage
inc $d019
jmp $ea31
; ======================================
scrspeed !byte $02 ; speed of scr.(1-8)
smooth !byte $07 ; smooth bit
half !byte $02
char !byte $00
scroll2x2
; ---------------------------
; Routine mostly from Ghouls
; Maskinkode Kursus as seen
; on CSDb (release id=8646)
; ---------------------------
lda smooth
sec
sbc scrspeed ; substract speed
and #$07 ; AND it with 7
; to get the
; smooth effect
sta smooth ; save the new
; smooth val
bcs quit ; quit the scroll
; if we dont need
; to update the
; screen
ldy #$00 ; black text color
ldx #$00
repeat1 lda $0401+(10*40),x ; move the
sta $0400+(10*40),x ; two lines
lda $0401+(11*40),x ; one to
sta $0400+(11*40),x ; the left
tya
sta $d800+(10*40),x ; set char
sta $d800+(11*40),x ; color
inx
cpx #39 ; move 39 chars
bne repeat1
; ---
; Only put a new char from the
; scrolltxt on the screen for
; every second frame/move
dec half
bne rolltxt ; jump to display
; a new char if
; we have ended
; the 2nd half of
; this char
lda #$02 ; reset the val
sta half ; that tells if
; this is the 2nd
; half of the
; char
lda char ; get the char
; that we are
; working on
ora #$40 ; shift it
sta $0400+(10*40)+39 ; and dis-
; play it
; on the
; 1st line
ora #$80 ; invert
sta $0400+(11*40)+39 ; it and
; display
; on 2nd
jmp quit
; ---
; Display a new char from the
; scrolltxt - it will only show
; the 1st half of the char
rolltxt lda scrltxt ; read next char
cmp #$00 ; stopchar? "@"
bne nextchar ; if not then jmp
lda #<scrltxt ; restart scroll
sta rolltxt+1
lda #>scrltxt
sta rolltxt+2
jmp rolltxt ; continue scroll
nextchar sta $0400+(10*40)+39 ; print
; the next char in the raster
; border (pos 39) on both lines
sta char ; set the working
; char
ora #$80 ; invert it
sta $0400+(11*40)+39
inc rolltxt+1 ; incr the scrtxt
; addr (low-byte)
bne quit
inc rolltxt+2 ; incr the scrtxt
; if it is longer
; than 256 bytes
quit rts ; return to my irq
; ======================================
raster
; Fine-tune raster position
; to avoid flickers
nop
nop
nop
nop
nop
ldx #0
loopcol lda colors,x
sta $d020
sta $d021
ldy delays,x
loopdel dey
bne loopdel
inx
cpx #numcols
bne loopcol
lda #$00
sta $d020
sta $d021
rts
; ----------------------------
indexcol !BYTE $00
numcols = 33
*= $5a00
colors
!BYTE $0a,$02,$0a,$0a,$0a,$07
!BYTE $0a,$00
!BYTE $07,$0a,$07,$07,$07,$0d
!BYTE $07,$00
!BYTE $0d,$07,$0d,$0d,$0d,$03
!BYTE $0d,$00
!BYTE $03,$0d,$03,$03,$03,$00
!BYTE $03,$00
!BYTE $00,$00,$00,$00,$00,$00
!BYTE $00,$00
!BYTE $00,$00,$00,$00,$00,$00
!BYTE $00,$00
!BYTE $01,$00,$00,$00,$00,$00
!BYTE $00,$00
!BYTE $00,$00,$01
*= $5b00
delays !BYTE $08,$08,$08,$08,$08,$08
!BYTE $08,$01
!BYTE $08,$08,$08,$08,$08,$08
!BYTE $08,$01
!BYTE $08,$08,$08,$08,$08,$08
!BYTE $08,$01
!BYTE $08,$08,$08,$08,$08,$08
!BYTE $08,$01
!BYTE $08,$08,$08,$08,$08,$08
!BYTE $08,$01
!BYTE $08,$08,$08,$08,$08,$08
!BYTE $08,$01
!BYTE $08,$08,$08,$08,$08,$08
!BYTE $08,$01
!BYTE $08,$08,$08
; ============================
scrolltext
*=$5000
!SCR "hi i am a scrolltext"
Oh yeah and you wont get the jitters away with this easily. Use delays where necessary to move them out of visual areas. |