Hej,
Coś jest nie tak. Takie tricki nie są potrzebne. Aha, rozumiem, że chodzi o hscroll jak w tytule..... a nie vscroll jak na końcu posta, tak?
Wydaje mi się, że zapomniałeś o jednym małym ale przy aktualizacji rejestru $ffff8265. Jeżeli wrzucasz w niego coś innego niż 0 to shifter automatycznie będzie pobierać o 16px więcej z framebuffer'a.
Czyli jeśli Twoj framebuffer to 640px i robisz hscroll ste to przy przesunieciu PX = 0 (w rejestrze 8265) to szerokosc framebuffer'a ustawiasz na 640px, ale jeśli masz przesuniecie PX z zakresu 1-15 to musisz to skompensować i ustawić szerokość framebufffera na 640-16px. Pewnie tego nie zrobiłeś i dlatego przy przejsciu z zerowych na niezerowe warotości masz kaszanke.
Kod wyjęty z takeover (z boobswatch part):
boobs_hscroll_vbl:
movem.l d0-d2,-(a7)
move.l scr1,d0
add.l boobs_hscroll_byteOffset,d0
move.l d0,d1
lsr.l #8,d1
move.l d1,d2
lsr.w #8,d2
; video base
move.b d2,$ffff8201.w
move.b d1,$ffff8203.w
move.b d0,$ffff820d.w
; pixel offset
move.b boobs_hscroll_pixelOffset,$ffff8265.w
; line offset
tst.b boobs_hscroll_pixelOffset
beq.s boobs_hscroll_pxOffsetZero
move.b #76,$ffff820f.w
bra.s boobs_hscroll_afterPxOffset
boobs_hscroll_PxOffsetZero
move.b #80,$ffff820f.w
boobs_hscroll_afterPxOffset
; video counter
move.b d2,$FFFF8205.w
move.b d1,$FFFF8207.w
move.b d0,$FFFF8209.w
; dodajemy
add.b #1,boobs_hscroll_pixelOffset
cmp.b #15,boobs_hscroll_pixelOffset
ble.s boobs_hscroll_notIncByteOffset
add.l #8,boobs_hscroll_byteOffset
move.b #0,boobs_hscroll_pixelOffset
boobs_hscroll_notIncByteOffset
movem.l (a7)+,d0-d2
rts
Nie uzywałem tam nic więcej niz VBL i działało to ok. Chodzi o warunek ustawienia rejestru $ffff820f.w w zależności od ffff8265.
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