1

Napisalem sobie prostego scrolla. Polaczenie coarse i fine scrollingu... Dziala, ale nie do konca plynnie wiec chcialem wrzucic aktualizacje HSCROL do DLI w jakas dolna linie albo przynajmniej czekac na ramke przed aktualizacje tej wartosci. Jest plynniej, ale jest jakas sciema ze smieciami ktore mi sie w pewnym momencie pokazuja na ekranie... Efekt wystepuje wtedy gdy w kodzie odkomentuje procedure czekania na ramke - nawet bez jej wywolania.

Kod:

        org $4000   

        lda #0
        sta 559
    
        ldx <antic     
        ldy >antic     
        stx 560        
        sty 561   

        lda #%00100010
        sta 559      
      
        ; color setup
        ; text
        lda #$38
        sta COLOR1_SH
        lda #$38
        sta COLOR2_SH

COLOR1_SH equ $02C4
COLOR2_SH equ $02C5
INIT_LINE_PTR equ $00
HSCROL equ $D404
FS_COUNT equ $A000
CS_COUNT equ $A001

        lda LINE_PTR
        sta INIT_LINE_PTR
        
        lda #8
        sta FS_COUNT
        ;jsr frameWait
        sta HSCROL
        
scrollInit
        lda #100
        sta CS_COUNT

scrollCoarse
        jmp scrollFine
scrollFineRet
        
        ldy LINE_PTR
        iny
        sty LINE_PTR

        ldx CS_COUNT
        dex
        stx CS_COUNT

        beq endOfText
        jmp scrollCoarse

endOfText
        lda INIT_LINE_PTR
        sta LINE_PTR
        jmp scrollInit
    
scrollFine
    
        ldx FS_COUNT
        dex
        stx FS_COUNT
        ;jsr frameWait
        stx HSCROL

        jsr delay

        cpx #0
        bne scrollFine

        ldx #8
        stx FS_COUNT    
        ;jsr frameWait
        stx HSCROL
    
        jmp scrollFineRet
    
delay
        pha
        txa
        pha
        tya
        pha
        
        ldx #$0F
        ldy #$FF

xLoop        
yLoop        
        dey
        beq yOut 
        jmp yLoop
        
yOut    dex
        beq xOut
        jmp xLoop
    
xOut    
        pla
        tay
        pla
        tax
        pla

        rts

;frameWait
;      lda 20   
;      cmp 20
;      beq *-2
;      rts
        
antic dta b($70,$70,$70)
      dta b($00)
      dta b($06,$06,$06)
      LINE_PTR equ *+1  
      dta b($56),a(scrollText)
      dta b($46),a(emptyText)
      dta b($06,$06,$06)
      dta b($41),a(antic)  

scrollText dta d'                                          OTO MOJ SUPER SCROLL TEST 123 HALLO ATARI 123456789 !!!!!!'
emptyText dta d'                                                                                          '

Odomentujcie sobie procedurke frameWait. (wszystkie jej wywolania sa zakomentowane). Wtedy po jednym kolku linii scrolla na ekran wpadna smieci.
Any idea? Pewnie to jakis banal, ale jakos nie moge na to wpasc...

Maciek
--------
Atari 65XE + Ultimate 1MB + Stereo + SIO2SD | Atari 520STE + 4MB + UltraSatan | Atari Falcon 030 + CT60e + 14MB ST + 256MB TT + 68882  + CF + Netusbee | Amiga 500 + 1MB + Gotek | Amiga 600 + 2MB Chip + 8MB Fast + CF

2 Ostatnio edytowany przez Fox (2011-12-19 23:27:50)

Tekst scrolla przekracza wtedy granicę strony, a ty zmieniasz tylko młodszy bajt adresu. Zmień:

        ldy LINE_PTR
        iny
        sty LINE_PTR

na:

        inw LINE_PTR

oraz:

        lda INIT_LINE_PTR
        sta LINE_PTR

na:

        mwa #scrollText    LINE_PTR
https://www.youtube.com/watch?v=jofNR_WkoCE

3

Dzieki Fox,
Faktycznie zapomnialem o starszym bajcie... a gdy kod byl krotki to wszystko dzialalo w sumie przypadkiem;) Sprawdze Twoje patch'e wieczorem.
One question: gdybys mial updatowac HSCROL w takim przypadku jak moj to gdzie to lepiej robic? tzn czekajac na ramke tak jak teraz czy lepiej probowac jest podpiac w DLI w jakiejs linii nizej?

Maciek
--------
Atari 65XE + Ultimate 1MB + Stereo + SIO2SD | Atari 520STE + 4MB + UltraSatan | Atari Falcon 030 + CT60e + 14MB ST + 256MB TT + 68882  + CF + Netusbee | Amiga 500 + 1MB + Gotek | Amiga 600 + 2MB Chip + 8MB Fast + CF

4

Jeśli masz jednego skrola, to ja bym go obsłużył na VBLKI. Jeśli skroli będzie więcej, to na DLI. W głównym kodzie możesz dać jmp *.
Te $06 w Display Liście też mogą wyświetlać śmieci. Nie wyświetlają, jeśli pamięć jest czysta.

https://www.youtube.com/watch?v=jofNR_WkoCE