<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl">
	<id>https://mirror.atariki.pl/w/index.php?action=history&amp;feed=atom&amp;title=Obliczanie_adresu_danych_dla_podprogram%C3%B3w</id>
	<title>Obliczanie adresu danych dla podprogramów - Historia wersji</title>
	<link rel="self" type="application/atom+xml" href="https://mirror.atariki.pl/w/index.php?action=history&amp;feed=atom&amp;title=Obliczanie_adresu_danych_dla_podprogram%C3%B3w"/>
	<link rel="alternate" type="text/html" href="https://mirror.atariki.pl/w/index.php?title=Obliczanie_adresu_danych_dla_podprogram%C3%B3w&amp;action=history"/>
	<updated>2026-10-03T07:37:58Z</updated>
	<subtitle>Historia wersji tej strony wiki</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://mirror.atariki.pl/w/index.php?title=Obliczanie_adresu_danych_dla_podprogram%C3%B3w&amp;diff=3047&amp;oldid=prev</id>
		<title>imported&gt;Atariki recovery: Reconstructed from archived HTML; see provenance manifest</title>
		<link rel="alternate" type="text/html" href="https://mirror.atariki.pl/w/index.php?title=Obliczanie_adresu_danych_dla_podprogram%C3%B3w&amp;diff=3047&amp;oldid=prev"/>
		<updated>2026-10-01T08:51:48Z</updated>

		<summary type="html">&lt;p&gt;Reconstructed from archived HTML; see provenance manifest&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nowa strona&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Jeśli mamy często wywoływany podprogram, któremu trzeba przekazać parametry to robimy to zazwyczaj zapisując w wydzielonym obszarze na którym operuje podprogram adres danych i robimy JSR do procedury.&lt;br /&gt;
&lt;br /&gt;
Jeśli odpowiednio zorganizujemy nasz program możemy zaoszczędzić na każdorazowym zapisywaniu adresu danych dla podprogramów:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      JSR podprogram&lt;br /&gt;
      dta nasze dane&lt;br /&gt;
      ...&lt;br /&gt;
      dalsza część programu&lt;br /&gt;
      ...&lt;br /&gt;
      JSR podprogram&lt;br /&gt;
      dta nasze dane&lt;br /&gt;
      itd.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podprogram zdejmuje ze stosu adres, który można indeksować od 1 - tam znajdują się nasze dane.&lt;br /&gt;
&lt;br /&gt;
Aby powrócić z procedury należy do zdjętego ze stosu adresu dodać wartość zależną od ilości danych obsługiwanych przez podprogram i wykonać RTS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
podprogram&lt;br /&gt;
      pla&lt;br /&gt;
      sta PZER0&lt;br /&gt;
      pla&lt;br /&gt;
      sta PZER0+1&lt;br /&gt;
      ldy #$01&lt;br /&gt;
      lda (PZER0),y ; pierwszy parametr&lt;br /&gt;
      ...&lt;br /&gt;
      iny&lt;br /&gt;
      lda (PZER0),y ; drugi parametr&lt;br /&gt;
      ...&lt;br /&gt;
      itd.&lt;br /&gt;
&lt;br /&gt;
      lda PZER0&lt;br /&gt;
      clc&lt;br /&gt;
      adc #ilosc_parametrow&lt;br /&gt;
      tay&lt;br /&gt;
      bcc _1&lt;br /&gt;
      inc PZER0+1&lt;br /&gt;
_1    lda PZER0+1&lt;br /&gt;
      pha&lt;br /&gt;
      tya&lt;br /&gt;
      pha&lt;br /&gt;
      rts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Czym częściej wywołujemy podprogram z różnych miejsc tym więcej oszczędzamy - nie potrzeba:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;     lda &amp;amp;lt;adres_danych&lt;br /&gt;
     sta w_ciele_podprogramu_lub_strona_zero&lt;br /&gt;
     lda &amp;amp;gt;adres_danych&lt;br /&gt;
     sta w_ciele_podprogramu_lub_strona_zero&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
czyli ok 10 bajtów na wywołanie.&lt;br /&gt;
&lt;br /&gt;
Tak działa funkcja PRINTF w SpartaDOS X, na podobnej zasadzie można również zorganizować listę obsługiwanych obiektów w grach.&lt;br /&gt;
&lt;br /&gt;
Procedurę powrotu z podprogramu można skrócić i przyspieszyć kosztem czytelności:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     tya          ; ilość parametrów&lt;br /&gt;
     sec          ; +1&lt;br /&gt;
     adc PZER0&lt;br /&gt;
     sta PZER0&lt;br /&gt;
     bcc _1&lt;br /&gt;
     inc PZER0+1&lt;br /&gt;
_1   jmp (PZER0)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategoria:Niezbędnik kodera]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;Atariki recovery</name></author>
	</entry>
</feed>