atarionline.pl VBXE + Action! - Forum Atarum

    Jeśli chcesz wziąć udział w dyskusjach na forum - zaloguj się. Jeżeli nie masz loginu - poproś o członkostwo.

    • :
    • :

    Vanilla 1.1.4 jest produktem Lussumo. Więcej informacji: Dokumentacja, Forum.

      • 1: CommentAuthorgreblus
      • CommentTime18 Sep 2013 09:09 zmieniony
       
      Hej.

      Swego czasu Rybags na AAge wrzucił fajny przykład w Basicu ładujący obrazek w overlay VBXE. Od dwóch dni próbuje przepisać go w Action! i ni cholery. W SDX zmienia się kolor tekstu (na żółty) co chyba wynika z ustawienia bitu xcolor w VIDEO_CONTROL i nic się nie dzieje.

      set 14=$8000
      set $491=$8000
      include "H1:RUNTIME.ACT"
      proc CIO=$E456(byte areg, xreg)

      proc main()

      byte vc=$D640
      byte i, r, g, b, memcont=$D65E, membank=$D65F
      byte psel=$D645, csel=$D644, cr=$D646, cg=$D647, cb=$D648
      byte xdla0=$D641, xdla1=$D642, xdla2=$D643, portb=$D301

      byte iocb2cmd=$362
      card iocb2buf=$364, iocb2len=$368

      byte array xdl=[98 136 239 0 2 0 64 1 17 223]

      portb=$FF
      vc=2
      membank=128
      memcont=$48 ;memac-a na $4000, dostęp dla CPU
      moveblock($4000, xdl, 10)
      xdla0=0 xdla1=0 xdla2=0
      vc=3

      graphics(0)

      close(1) ;just in case
      open(1,"D1:EG1.PAL",4,0)
      psel=1 csel=0
      for i=0 to 255 do
      r=inputbd(1) g=inputbd(1) b=inputbd(1)
      cr=r cg=g cb=b
      od
      close(1)

      open(1,"D1:EG1.PIC",4,0)

      iocb2cmd=7
      iocb2buf=$4000
      iocb2len=$1000

      for i=2 to 18 do
      membank=128+i
      CIO(0,$20)
      od
      close(1)

      return


      Względem oryginału w Basicu, adres ustawiam na $8000, MEMAC-A $4000 i wielkość okna na $1000.

      Przypuszczam że CIO nie działa tak jakbym chciał (update: zawisa już na ładowaniu palety kolorów), albo robię SDX/OS-owi krzwdę umieszczając to wszystko źle w pamięci. W załączonym atr są wszystkie pliki (paleta, obrazek, przykład w basicu i Action!).

      Wszelkie wskazówki mile widziane :)
      • 2: CommentAuthorajcek
      • CommentTime18 Sep 2013 19:09
       
      Z góry mówię, że nie odpalałem tego, spojrzałem tylko w to co podesłałeś więc analiza jest na „sucho”.
      Za dokumentacją vbxe:

      „W przypadku gdy używamy okna leżącego w obszarze $4000-$7fff…… należy najpierw bezwzględnie wyłączyć rozszerzenie pamięci RAM przez zapis $FF lub $FE do POTRB”

      Jeśli ten przykład uruchamiasz pod SDX-em to nie ma pewności jaka aktualnie jest pamięć pod $4000.
      Proponuje przesunąć MEMAC w inne miejsce i wtedy szukać ewentualnych błędów.
      • 3:
         
        CommentAuthortdc
      • CommentTime18 Sep 2013 22:09 zmieniony
       
      Ja zadam jedno proste pytanie: jak się Tobie udało uruchomić cartridge Action! i SDX? bo tego emulatory nie obsługują.

      Oba te carty zostały tak pomyślane aby ze sobą współpracowały i na Atari 800XL tworzą fantastyczną wierzę, która faktycznie z wielu komputerów wystawała (w tym z mojego). Jednak to źródło które przedstawiłeś u góry będzie działać tylko z cartem Action! Jeśli przesunąłeś adresy kodu na $8000 to w wersji file, znajduje się tam Action! czyli tego się nie da skompilować :(

      Rozwiązanie: załaduj prawdziwy cart z Action! a następnie uruchom wersję sparty z pliku ATR (niestety wersje file Sparty podobnie jak Action! są niewiele warte, no ale coś działa).
      • 4:
         
        CommentAuthortdc
      • CommentTime18 Sep 2013 22:09 zmieniony
       
      Druga sprawa to używasz tutaj jakiegoś runtime, one niestety mają to do siebie że często uszkadzają Action! Przykładowo w opisie bugów w rt jest opisane że procedura graphics() której używasz ma poważny bug (błąd występuje w oficjalnej wersji rt, nie wiem jakiej używasz tutaj, może mieć ten błąd, ale nie musi).
      Rozwiązanie: nie korzystaj z graphics oraz w początkowej fazie spróbuj swój program uruchomić bez rt, aby być najpierw pewnym że kod jest poprawny.

      Update: no jednak używasz oficjalnego rt.
      • 5: CommentAuthormuffy
      • CommentTime18 Sep 2013 22:09
       
      Z branżą budowlaną miałem dużo wspólnego ale pierwszy raz mam styczność z "wierzami", to rzeczywiście twór rodem z fantastyki chyba :p

      Co do runtimów to całkiem dawno jak miewałem przebłysk szaleństwa by się zacząć doszkalać w A'n! to napotkałem na stronę, gdzie bodajże były poprawione przez kogoś biblioteki (duużo tego było).
      Na szczęście w porę się ocknąłem i wybrałem znacznie prostszy język programowania ;)
      • 6:
         
        CommentAuthorjhusak
      • CommentTime18 Sep 2013 23:09
       
      cc65?
      • 7: CommentAuthorxxl
      • CommentTime18 Sep 2013 23:09
       
      asembler
      • 8: CommentAuthormuffy
      • CommentTime18 Sep 2013 23:09
       
      jawol :)
      prosty = mało instrukcji
      • 9:
         
        CommentAuthortdc
      • CommentTime18 Sep 2013 23:09 zmieniony
       
      Wierzę że w informatyce są wierze a w budownictwie wieże :P
      W końcu wieże zbudowane z cartów to nie jest tak często spotykany widok;)

      @muffy, jak kiedyś będziesz miał okazję to zapodaj link zobaczymy co tam jest.
      • 10: CommentAuthormuffy
      • CommentTime19 Sep 2013 00:09
       
      google result w mniej niż 10 sek.
      ->link<-
      • 11:
         
        CommentAuthortdc
      • CommentTime19 Sep 2013 00:09
       
      Dzięki. Ja się domyślam że google da jakiś wynik, pytanie czy to jest to samo co czytałeś/sprawdzałeś, chodzi o to aby link jaki podałeś był wypełniony jakąś sensowną treścią dla kogoś zainteresowanego Action!
      • 12: CommentAuthorgreblus
      • CommentTime19 Sep 2013 08:09
       
      @tdc: Runtime są trzy: oryginalne, Petera Finzela/Carstena Strotmanna i Jeffa Reistera, używam z powodzeniem oryginalnego i tego poprawionego przez Carstena.

      Ogólnie rzecz biorąc miałem dwa podejścia:

      - z poziomu emulowanego carta Action! bez RT zamiast do D1: odwołuje się do H: (wg doców Altirry, można się do niego dobierać przez CIO).

      - z poziomu SDX uruchamiam skompilowaną binarkę (stąd to runtime). Dostęp do D1: z Actionowych programów działa prawidłowo.

      W powyższym kodzie powinno być jednak getd() zamiast inputbd(). Sprawdzałem wczoraj i w basicu GET też zwraca kod ascii, więc tak miało być, co nie zmienia faktu, że nie działa...

      W obu przypadkach zachowanie programu jest podobnie dziwne, co nie zmienia faktu, że w końcu dojdę w czym jest rzecz :). Jak dotąd zawsze wina leżała po mojej stronie...
      • 13: CommentAuthorgreblus
      • CommentTime19 Sep 2013 08:09
       
      @ajcek: widziałem to w docach no i wrzuciłem tam na początku portb=$FF
      • 14: CommentAuthorgreblus
      • CommentTime19 Sep 2013 09:09 zmieniony
       
      Jest dobrze, poniższy kod działa z poziomu emulowanego carta Action!

      Teraz tylko muszę dojść do tego, jak to skompilować żeby na prawdziwym sprzęcie odpalić:
      set 14=$8000
      set $491=$8000

      proc CIO=$E4DF(byte areg, xreg)

      proc main()

      byte vc=$D640
      int i byte memcont=$D65E, membank=$D65F
      byte psel=$D645, csel=$D644, cr=$D646, cg=$D647, cb=$D648
      byte xdla0=$D641, xdla1=$D642, xdla2=$D643, portb=$D301

      byte iocb1cmd=850
      card iocb1buf=852, iocb1len=856
      byte array xdl=[98 136 239 0 2 0 64 1 17 223]

      portb=$FF
      vc=2
      membank=128
      memcont=$48

      moveblock($4000, xdl, 10)

      xdla0=0 xdla1=0 xdla2=0
      vc=3

      graphics(0)

      close(1)
      open(1,"H1:EG1.PAL",4,0)
      psel=1 csel=0
      for i=0 to 255 do
      cr=getd(1) cg=getd(1) cb=getd(1)
      od
      close(1)

      open(1,"H1:EG1.PIC",4,0)

      iocb1cmd=7
      iocb1buf=$4000
      iocb1len=$1000

      for i=2 to 18 do
      membank=128+i
      CIO(0,$10)
      od

      close(1)

      return
      • 15: CommentAuthorgreblus
      • CommentTime19 Sep 2013 13:09 zmieniony
       
      No to jak to mówią amerykany "we're almost there".

      Działa w Altirze po kompilacji z RT Petera Finzela/Carstena Strotmanna, ale tylko jeśli wczytuje dane z H1: z D4: nie chce działać.

      W załączonym atr VBXE1.XEX powinno działać z D4: (ale nie chce) VBXE2.XEX wczytuje z H1:

      Systemowe CIO też zadziałało jak trzeba, po prostu skopiowałem ten kod bezmyślnie, ale Zientara mnie naprostował :)

      Sprawdzę dziś na prawdziwym Atari.
      • 16: CommentAuthorpin
      • CommentTime19 Sep 2013 19:09
       
      A mnie bardzo zainteresował przykład Rybagsa w oryginale (w sensie, że coś takiego jest). Gdzie to można na aage odnaleźć?
      • 17: CommentAuthorgreblus
      • CommentTime19 Sep 2013 19:09 zmieniony
       
      Tu jest wątek:

      ->link<-

      Co ciekawe, ten przykład na żywym Atari wygląda inaczej niż w Altirra: wyświetlają się śmieci, potem powoli pojawia się obraz, ale na górze trochę tych śmieci zostaje. A moje wypociny w Action z dysków SDX nie chcą działać. Działa toto tylko z H1: w Altirra.
      • 18: CommentAuthorpin
      • CommentTime19 Sep 2013 21:09
       
      ładne. Pod Turbo-Basic odpaliło, ładne kolorowe kwadraciki są ;)
      • 19: CommentAuthorajcek
      • CommentTime20 Sep 2013 10:09
       
      Jeśli masz SDX-a działającego w trybie banked to każde wywołanie funkcji I/O będzie powodowało zmianę konfiguracji w PORTB ponieważ w tym trybie duża część kodu SDX-a jest w pamięci rozszerzonej. U Ciebie w kodzie mamy tak, że okno vbxe wypada dokładnie tam gdzie jest okno exram-u. W tym przypadku odczyt do pamięci vbxe jest niemożliwy bo po wywołaniu np.: funkcji odczytu SDX przełączy banki w PORTB by dostać się do swojego kodu. Musi to zostać zrealizowane przez jakiś bufor pośredni lub należy przesunąć okno VBXE poza obszar $4000-$7fff.
      • 20: CommentAuthorgreblus
      • CommentTime20 Sep 2013 12:09 zmieniony
       
      Ajcek, dzięki! Szybki test (odpalenie SDX w Altirze z 64kb pamięci) i faktycznie, działa jak trzeba, nawet na oryginalnym RUNTIME.ACT.



      Nie mogę znaleźć wskazówek czym taką grafikę można przygotować. Kombinuje z grafx2 i Tile studio, ale ni cholery mi te pliki prawidłowo się nie ładują :). Zapisuje palete, zapisuje bitmapę w 256 kolorach (próbowałem też usuwać nagłówek z bmp) i wychodzi poszarpane coś, jak transmisja obcych z kolorowym echem mojego obrazka...
      • 21: CommentAuthorajcek
      • CommentTime21 Sep 2013 11:09
       
      Może mój konwerter będzie pomocny ? Zapisuje dane w 8bit chunk oraz definicje palety w formacie RGBRGBRGB… Niestety nie skonwertuje dobrze grafiki do trybu hires dla vbxe.
      • 22:
         
        CommentAuthorKaz
      • CommentTime21 Sep 2013 11:09
       

      grelbus:

      Nie mogę znaleźć wskazówek czym taką grafikę można przygotować.


      Ja do projektow VBXE uzywalem XnView i IrfanView, maja najwiecej mozliwosci manipulacji obrazem i zawartymi danymi.
      • 23: CommentAuthorgreblus
      • CommentTime21 Sep 2013 19:09 zmieniony
       
      Ajcek twój konwerter działa :). Zaprzyjaźniłem się też z grafx2 i paletami przez niego generowanymi, póki co konwertuje jasc do bin (jest takie narzędzie pal2bin, nawet ze źródłem w cpp, które kompiluje się bez warningów w g++).



      Żeby nie kombinować, bmp z grafx2 exportuje w gimpie do raw.
      • 24: CommentAuthorpin
      • CommentTime30 Dec 2013 21:12
       
      @Ajcek - no to w tym przykładzie w BASIC (w oryginale) okno jest z czego pamiętam tam, gdzie sparta rzuca bankami. To dlaczego w trybie banked ten programik u mnie działa prawidłowo?
      • 25: CommentAuthorajcek
      • CommentTime31 Dec 2013 11:12
       
      @Pin - w przykładzie Rybags-a okno jest od $8000.
      o tu:
      POKE MEMCONTROL,128+8:REM $8000, 4K, CPU ACCESS
      • 26: CommentAuthorpin
      • CommentTime31 Dec 2013 16:12
       
      to musiało mi się popier**** ;)- oblookam to jutro, bo testuje właśnie nowy soft do IDE i wszystko mam w proszku ;)