1

Wiem ze to brzmi bardzo podobnie jak pytanie, ktore mialem rok temu http://www.atari.org.pl/forum/viewtopic.php?id=9560 ale mam nastepujacy problem, ktorego nie potrafie wytlumaczyc.

Mam trywialny kod:
setup antica
deklaracje zmiennych
400-500 lini kodu np. lda #0 - bez znaczenia
rysowaniu punktu
program antica

Niezaleznie gdzie poloze pamiec ekranu zawsza mam kilka paskow smieci na ekranie. Zmiana adresow pamieci ekranu nie wplywa na polozenie smieci, zmiana ilosci linii kodu przesuwa je w gore czy w dol.

szczegolowy kod:

    org $4000   
    
; antic setup      
      lda #0
      sta 559
    
      ldx <antic     
      ldy >antic     
      stx 560        
      sty 561   
  
      lda #%00100010
      sta 559      

      lda #$0F
      sta COLOR_SH
      
; vars      
GFX_MEM equ $8010
GFX_MEM_2 equ $9000
COLOR_SH equ $2c6

    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0
    lda #0

; rysuj
    lda #255
    sta GFX_MEM+20
    
foo
    jmp foo
    
antic dta b($70,$70,$70)
      dta b($00)
      dta b($4e),a(GFX_MEM)
      :101 dta b($e)
      dta b($4e),a(GFX_MEM_2)
      :89 dta b($e)
      dta b($41),a(antic)

Przez analogie to watku, ktory podlinkowalem szukam miejsca gdzie moglbym zgubic np starszy bajt adresu tak jak wtedy. Ale ja praktycznie w tym kodzie nic nie robie... setup antica ma oba bajty adresu pamieci ekranu. Program antica odwoluje sie do pelnych adresow. Pamiec ekranu i kod znajduja sie od siebie na tyle daleko, ze tez ze soba nie koliduja raczej. Jakies hint?

PS. oczywiscie orginalny kod wygladal inaczej, po prostu chcialem zrekonstruowac problem na czyms do bolu prostym...

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

program Antica umieść od początku strony pamięci, najlepiej na początku programu czyli $4000

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

3

Dziala, dzieki!
Czy masz na mysli ze program antica nie moze przekraczac granicy strony?
Wiedzialem, ze pamiec obrazu nie moze przekroczyc granicy strony w stosunku do raz zadeklarowanego adresu (bo licznik jest tylko 12bitowy). Tutaj zachodzi podobny mechanizm przy czytaniu programu antica w stosunku do jego poczatku?

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

program antica nie powinien przekraczac granicy 1 kb jesli musi to w programie antica nalezy umiescic rozkaz skoku (zeby przeladowac pc antica) do dalszej czesci programu.

http://atari.pl/hsc/ad.php?i=1.

5

polecam zapoznac sie z http://atariki.krap.pl/index.php/ANTIC_Display_List
skoro nie wiedziales o granicy 1kb, to pewnie tez nie wiesz o drugiej granicy - 4kb na dane obrazu.
art w atariki powinien wyjasnic i ta sprawe.

The UNIX Guru`s view of Sex:
unzip; strip; touch; finger; mount; fsck; more; yes; umount; sleep

6 Ostatnio edytowany przez mkm (2012-10-23 22:05:01)

Faktycznie, mapping the atari:
"The jump instructions are also used to skip across a 1K
boundary, since the DL itself cannot cross a 1K boundary without such
a jump"

Latwo to widac w praktyce na moim kodzie. Jesli przed program antica dam org $7000 to wszystko jest ok, a gdy dam org $6ff0 to juz nie. Dzieki za pomoc!

@jellonek o tej 4kb na dane akurat pamietalem;) jakos mi to zostalo w glowie z kursu assemblera na atari.area. Dzieki za link do atariki, temat jest tam widze dokladnie opisany.

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

7

Oczywiście jump w DL nie jest za darmo - tworzy od razu jedną pustą linię, więc przyda się tylko w niektórych przypadkach. tak jak napisał Tebe - należy pilnować aby DL nie przekraczała granicy 1kB przez (najlepiej) umieszczenie jej pod stałym adresem.

pomidor

8 Ostatnio edytowany przez pajero (2012-10-24 19:38:25)

no co Ty. chyba że dasz tylko

       dta 1 , a(skok)

zamiast

       dta 64+mode_GFX , a(adr)      ; mode_GFX=2-15

9 Ostatnio edytowany przez jellonek (2012-10-24 19:16:45)

pajero: nie mylisz lms (ustawienie pointera danych obrazu) z ustawieniem adresu kolejnej instrukcji dl (jmp/jvb)?
gdyby bylo jak piszesz - potrzeba by nowy rom do vbxe ;) (ale nie jest ;) )

The UNIX Guru`s view of Sex:
unzip; strip; touch; finger; mount; fsck; more; yes; umount; sleep

10

Tak sugeruje electron - że powstanie pusta linia = wtedy gdy dajemy jmp do innej instrukcji DL.

11

pajero, jellonek ma rację, pokiełbasił ci się rozkaz JMP (przeskok do innego miejsca DL) z LMS (przeskok do innego miejsca w pamięci obrazu). JMP generuje jedną pustą linię, jak pisze electron.

KMK
? HEX$(6670358)

12

pustej, w sensie jednej linii trybu 0xf antica, wypelnionej kolorem tla ztcp?

The UNIX Guru`s view of Sex:
unzip; strip; touch; finger; mount; fsck; more; yes; umount; sleep

13

W sensie tego, co generuje rozkaz $00 ANTIC-a (1 pusta linia).

KMK
? HEX$(6670358)

14

NO przecież piszę o tym.

Zamiast tego dajemy 64+mode_GFX i nie ma pustej linii.

Czy ja mam jaką pomroczność jasną czy co?

15

Nie masz, ale też LMS nie zawsze pozwala uniknąć JMP. Jeśli masz do połączenia dwie DL-ki (np. jak w przypadku TD.COM pod SDX, który łączy DL własną z ogólną), pusta linia się jak najbardziej przy tym pojawi. Oczywiście lekarstwem na ograniczenie 4k jest LMS a nie JMP.

KMK
? HEX$(6670358)

16

pajero napisał/a:

no co Ty. chyba że dasz tylko
       dta 1 , a(skok)
zamiast
       dta 64+mode_GFX , a(adr)      ; mode_GFX=2-15

chodzi o to ze danie lms zamiast jmp, przeladuje wskaznik pamieci danych, ale nie zmieni wskaznika kolejnej instrukcji DL.
lms sluzy do przeskakiwania granicy 4k przez dane.
jmp sluzy do przeskakiwania granicy 1k przez kod DL.

tak wiec nie da sie jednego stosowac zamiast drugiego.

The UNIX Guru`s view of Sex:
unzip; strip; touch; finger; mount; fsck; more; yes; umount; sleep