atarionline.pl Omijanie RTS - 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.  
      Hej,
      Niby mi działa, ale wolę dopytać :)

      W specyficznym przypadku chcę powrócić z procedury nie do kodu, który ją wywołał, tylko do kodu, który wywołał kod ją wywołujący. Czyli jakby zrobić dwa RTS w jednym.

      Nie mogę zrobić RTS, które wróci do RTS, które wróci tam gdzie chcę, gdyż w wyniku działania procedury to drugie RTS znika.

      Przechodzę do pytania: Czy to, że w takim przypadku przed RTS wstawiam 2xPLA jest wystarczające?
      • 2: CommentAuthorwieczor
      • CommentTime12 Sep 2015 00:09 zmieniony
       
      Powinno, ale ja bym to zrobił inaczej; po prostu w specyficznym przypadku (kiedy chcesz wrócić do procedury nadrzędnej) skakał bym do tej podrzędnej przez JMP zamiast JSR :) Wtedy RTS wróci do nadrzędnej. Szybciej.

      Edit: teraz naszła mnie refleksja, że to można zrobić, jeśli wiesz, że specyficzny przypadek wystąpił przed wywołaniem procedury podrzędnej, bo jeśli wiesz to dopiero w środku, to faktycznie plapla trzeba zrobić :)
    2.  
      Właśnie wiem dopiero w środku, tam zapada decyzja, czy w pamięci jest właściwy kod, czy też trzeba doczytać go z dysku (i tym samym nadpisać wywoływacza).

      W takim razie zostaje "plapla" :)
      • 4: CommentAuthorgorgh
      • CommentTime12 Sep 2015 17:09
       
      pla
      pla
      rts
      • 5: CommentAuthorbob_er
      • CommentTime12 Sep 2015 17:09
       
      Czy to jest metoda elegancka to nie wiem.
      Ale w podobny sposób kiedyś zmieniałem punkt powrotu z przerwania.
      • 6: CommentAuthorxxl
      • CommentTime12 Sep 2015 18:09
       
      w xB obsluga bledow transmisji z tego korzysta.

      mozna tez rozwazyc uzycie tsx przed jrs a txs po decyzji gdzie wracamy... oszczednosc czasu pla/pla to 8 cykli tsx/txs to 4 cykle.
      • 7: CommentAuthor0xF
      • CommentTime12 Sep 2015 20:09
       
      pla
      pla
      rts
      to standardowe rozwiązanie tego problemu. Można je znaleźć nawet w Atari BASIC pod adresem $B66C.
      • 8: CommentAuthormono
      • CommentTime12 Sep 2015 22:09
       
      pla
      pla
      rts
      Metoda z tsx i wstawieniem adresu powrotu na bok jest wykorzystywana przez mechanizm wyjątków w SDX (U_SFAIL, U_FAIL, U_XFAIL).