Udało mi się usunąć problem i zmieniam HSCROL na przerwaniach bez zwisu :)
Zła wiadomosc jest taka, ze mimo przeprowadzenia 23 testów wciąż nie wiem jednoznacznie co było przyczyną problemu.
XXL zasugerował ze moze to byc miejsce w pamieci gdzie są procedury przerwan. Jakub sugeruje zbyt długie albo zle skonstruowane przerwania. Seban - problem Antica z obsluga zapisu do HSCROL w przerwaniach. 
A mi wychodzi z testów ze to musi byc splot kilku z tych czynnikow, a do tego jeszcze jeden najważniejszy: konstrukcja DL (tryb, zmiany trybow, przerwania, scrolle).
Krótko: problem ustąpił kiedy dodalem dodatkowe przerwania linii specjalnie do wykonania w nich zmiany HSCROL, oraz usunąłem w DL z linii w której wywołuję przerwanie znacznika scrolla poziomego ($10).
Akurat moglem sobie pozwolic na te zmiany. I muszą byc obie zeby nie bylo smieci na real Atari.
A teraz wyjasniam, czemu pisalem, ze dalej nie wiem co bylo przyczyną. 
Używam trybów tekstowych (mieszanka $02 i $04). 
Mam kilka przerwań linii. Kazda linia ma swoja procedurę do obsługi. Wewnątrz procedury przerwania nastepuje przekierowanie wektora VDSLST na kolejną procedurę i tak w kółko. Nie są długie. Najdłuższa wyglądała mniej więcej tak:
dli_3
   php
   sta dli_uni2
   lda HSCROL_2
   sta WSYNC       ;wait__line
   sta HSCROL
   lda #KOL_1_tlo
   sta COLPF1
   lda #KOL_2
   sta COLPF2
   lda #>dli_1
   sta VDSLST+1
   lda #<dli_1
   sta VDSLST
   lda dli_uni2
   plp
   rti
W mojej grze muszę 2x zmienić HSCROL w czasie rysowania obrazu.
Jak powiedzialem dodalem dwa specjalne przerwania linii tylko dla tych zmian.
I z ostatniego testu wyszło mi coś dziwnego.
Jeśli fragment DL wygląda tak, to program działa poprawnie:
         dta $44+$10, a(pamiec_ekranu+40+88*3)
         dta $44+$80,a(pamiec_ekranu+40+88*4)  ;na tym przerwaniu jest tylko zapis do HSCROL
         dta $44+$10,a(pamiec_ekranu+40+88*5)
a jesli ten fragment wygląda tak, to juz grafika na ekranie się chrzani dokumentnie:
         dta $44+$10, a(pamiec_ekranu+40+88*3)
         dta $44+$10+$80,a(pamiec_ekranu+40+88*4)  ;na tym przerwaniu jest wylacznie zapis do HSCROL
         dta $44+$10,a(pamiec_ekranu+40+88*5)
Czyli jedyne co sie zmienilo to to czy w linii w ktorej jest przerwanie jest włączony scroll czy nie. Nie zmieniły sie ani procedury przerwań, ani ich położenie w pamięci, nic kompletnie oprocz jednego bitu :)
Ta procedura przerwania wywolywana w tej linii wyglada tak:
dli_11
   php
   sta dli_uni2
   lda HSCROL_1
   ;wait__line
   sta WSYNC  
   sta HSCROL
   mwa #dli_2 VDSLST
   lda dli_uni2
   plp
   rti
Trudno o cos prostszego.
A czemu napisalem ze to dziwne i niejednoznaczne? Bo drugie miejsce w DL gdzie zmieniam na przerwaniach HSCROL wygląda tak:
         dta $02+$10+$40+$80, dta a(linia_3)   ;na tym przerwaniu jest tylko zapis do HSCROL
         dta $42+$10+$80,a(pamiec_ekranu+40+88*8)  ;a na tym tylko zmiana 2 kolorow
I w tym wypadku zadne zmiany nie byly potrzebne! Ten kawałek działa niezaleznie czy w pierwszej linii jest włączony scroll (+$10) czy nie.
I dlatego wlasnie dalej nie wiem od czego dokladnie zalezy ze moj program na real Atari dziala :P