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 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
     
    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 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 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
     
    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
     
    cc65?
    • 7: CommentAuthorxxl
    • CommentTime18 Sep 2013
     
    asembler
    • 8: CommentAuthormuffy
    • CommentTime18 Sep 2013
     
    jawol :)
    prosty = mało instrukcji
    • 9:
       
      CommentAuthortdc
    • CommentTime18 Sep 2013 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
     
    google result w mniej niż 10 sek.
    ->link<-
    • 11:
       
      CommentAuthortdc
    • CommentTime19 Sep 2013
     
    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
     
    @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
     
    @ajcek: widziałem to w docach no i wrzuciłem tam na początku portb=$FF
    • 14: CommentAuthorgreblus
    • CommentTime19 Sep 2013 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 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
     
    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 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
     
    ładne. Pod Turbo-Basic odpaliło, ładne kolorowe kwadraciki są ;)
    • 19: CommentAuthorajcek
    • CommentTime20 Sep 2013
     
    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 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
     
    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
     

    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 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
     
    @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
     
    @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
     
    to musiało mi się popier**** ;)- oblookam to jutro, bo testuje właśnie nowy soft do IDE i wszystko mam w proszku ;)