atarionline.pl wstawka asm działa pod atari basic, nie działa pod TB - 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: CommentAuthorMaciek
    • CommentTime23 Sep 2011 zmieniony
     
    Po kilkugodzinnym debugowaniu mojego podprogramu w ASM (sporo iteracji, płakałem jak to robiłem) odkryłem przedziwną rzecz, otóż moja wstawka działa pod Atari Basic, a nie działa pod Turbo Basic XL. Udało mi się wyodrębić fragment kodu który powoduje freeza:

    pla
    zmienna equ 1536
    ldy zmienna
    tutaj dey
    bmi koniec
    jmp tutaj
    koniec rts



    O co chodzi? W TBXL dla zmiennej=0 program się wykona, dla zmiennej=1 mam freeza. Pod oryginalnym bazylem wykonuje się dla każdej wartości zmiennej (0-255).

    Pomożecie?
    Przepraszam, ale nie wiem jak sformatować tekst kodu żeby był bardziej czytelny.

    Właśnie próbowałem z "ldy #1" i wówczas w TBXL dstaję Error-9.
    • 2:
       
      CommentAuthorPecus
    • CommentTime23 Sep 2011
     
    Hm..
    A czy program jest w stałym miejscu pamięci ??
    Bo widzę, że nierelokowalny. TBasic ma bardziej skomplikowane zarzadzanie pamięcią i zmiennymi... ale nie wiedząc gdzie go trzymasz i jak wywołujesz ciężko się ustosunkować.
    zamiast bmi koniec daj bpl tutaj i wyrzuć jmp.... jeśli chodzi o czas wykoniania wstaw po dey pare NOPow dodatkowo i bedzie relokowalne.
    • 3: CommentAuthorMaciek
    • CommentTime23 Sep 2011
     
    No więc, wrzuciłem ten program za memhi, wrzuciłem na szóstą stronę i zawsze dostaję freeza. To jest oczywiście fragment dosyć długiego programu i sporo się dzieje między "bmi koniec", a "jmp tutaj", potrzebuję takiej struktury. Nie spałem ze dwie noce, żeby wyłuszczyć te kilka bajtów z całego kodu, które powodują freeza. Nie mam pojęcia czemu TBXL się tak zachowuje :(

    Spróbujcie sobie ten kod asemblować na szóstą stronę (od $601 bo $600 to zmianna) i uruchomić spod TBXL. Sprawdzałem na emulatorze i z różnymi wersjami TBXL. DUPA!
    • 4: CommentAuthorxxl
    • CommentTime23 Sep 2011
     
    daj zrzut z emulatora
    • 5: CommentAuthorMaciek
    • CommentTime23 Sep 2011
     
    tzn. co mam zrobić w Atari800Win Plus?
    Słabo się znam na emulatorach, nie widzę tam opcji zrzutu czegokolwiek :/
    • 6: CommentAuthorxxl
    • CommentTime23 Sep 2011
     
    w monitorze napisz write 600 6ff plik.mem
    i ten plik.mem podeslij lub menu file save state.
    • 7: CommentAuthorMaciek
    • CommentTime23 Sep 2011
     
    Załączam savestate'a
    zmienna jest w $600, program zaczyna się od $601
    dla 0 się wykona, dla 1 nie
    • 8: CommentAuthorxxl
    • CommentTime23 Sep 2011
     
    <code>
    0600 BRK ; 7cyc ; 00
    0601 PLA ; 4cyc ; 68
    0602 LDY $0600 ; 4cyc ; AC 00 06
    0605 DEY ; 2cyc ; 88
    0606 BMI $060B ; 2cyc ; 30 03
    0608 JMP $0004 ;RAMLO ; 3cyc ; 4C 04 00
    060B RTS ; 6cyc ; 60
    </code>

    widzisz juz problem?
    • 9: CommentAuthorMaciek
    • CommentTime23 Sep 2011 zmieniony
     
    nie
    (co to są te cyce :P ?)

    ten skok jest na w złe miejsce? QA źle wygenerował kod?
    • 10: CommentAuthorxxl
    • CommentTime23 Sep 2011
     
    0608 JMP $0004

    skaczesz w maliny
    • 11:
       
      CommentAuthorjhusak
    • CommentTime23 Sep 2011 zmieniony
     
    Z czego wynika, że kompilujesz np. bez org (ustalenie adresu początku kodu), a następnie wrzucasz, gdzie popadnie.

    Kod może być relokowalny (na 6502 trudne, ale wykonalne) i wtedy umieszczasz go gdzie bądź.

    Może też być nierelokowalny (działa tylko pod adresem, pod który został zassemblowany) - i wtedy jak go przeniesiesz choćby o bajt - wywali się na pierwszym skoku lub jsr do siebie.

    Assembler nie wybacza błędów, posłusznie i bez zająknięcia tworzy kod wynikowy ze źródłowego - to jego główna wada.
    • 12: CommentAuthorMaciek
    • CommentTime23 Sep 2011 zmieniony
     
    ok, dzięki za wyjaśnienie, faktycznie robiłem bez org
    • 13:
       
      CommentAuthorjhusak
    • CommentTime23 Sep 2011
     
    Ja tam się na QA nie znam (się znam ogólnie), więc tu nie pomogę. Ogólnie, jeśli już się używa optów, to trzeba doskonale wiedzieć, co się robi. Ja nie używam i jestem hepi.
    • 14:
       
      CommentAuthorjhusak
    • CommentTime23 Sep 2011 zmieniony
     
    ok, dzięki za wyjaśnienie, faktycznie robiłem bez org

    To kliknij "pomógł" :)
    • 15:
       
      CommentAuthorKaz
    • CommentTime8 Oct 2011 zmieniony
     
    Offtopic edukacyjny:

    Maciek:

    Przepraszam, ale nie wiem jak sformatować tekst kodu żeby był bardziej czytelny.


    Do prezentacji fragmentow kodu sluza:

    [ code ] [ /code ] pozwala wstawić listing dowolnego programu. Program wyświetlony w ramce, z użyciem odpowiedniej czcionki jest oczywiście czytelniejszy niż gdyby był wstawiony jako zwykły tekst. Nie ma podkolorowania słów kluczowych.

    [ code basic ] [ /code ] również przeznaczone do wstawiania listingów, ale tym razem dla programów w Atari Basic i Turbo Basic XL. Wszystkie słowa kluczowe obu tych języków oraz użyte cyfry są wyróżniane kolorem, co ogromnie zwiększa czytelność listingu.

    [ code php ] [ /code ] podobnie jak powyższe pary znaczników, do wstawiania listingów, ale w językach „pecetowskich“. Kolorami wyróżnione są poszczególne elementy listingu.

    Twoj kod wygladalby tak (i nizej jest mozliwosc zgrania go do pliku):

    pla         
    zmienna equ 1536
    ldy zmienna
    tutaj dey
    bmi koniec
    jmp tutaj
    koniec rts