1

Temat: Dlugosc kodu a smieci na ekranie

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

Odp: Dlugosc kodu a smieci na ekranie

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

Odp: Dlugosc kodu a smieci na ekranie

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

Odp: Dlugosc kodu a smieci na ekranie

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

Odp: Dlugosc kodu a smieci na ekranie

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

Odp: Dlugosc kodu a smieci na ekranie

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.

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

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

Odp: Dlugosc kodu a smieci na ekranie

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

Odp: Dlugosc kodu a smieci na ekranie

no co Ty. chyba że dasz tylko

       dta 1 , a(skok)

zamiast

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

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

9

Odp: Dlugosc kodu a smieci na ekranie

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 ;) )

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

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

10

Odp: Dlugosc kodu a smieci na ekranie

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

11

Odp: Dlugosc kodu a smieci na ekranie

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

Odp: Dlugosc kodu a smieci na ekranie

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

Odp: Dlugosc kodu a smieci na ekranie

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

KMK
? HEX$(6670358)

14

Odp: Dlugosc kodu a smieci na ekranie

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

Odp: Dlugosc kodu a smieci na ekranie

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

Odp: Dlugosc kodu a smieci na ekranie

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