{"id":228,"date":"2021-01-24T19:55:07","date_gmt":"2021-01-24T18:55:07","guid":{"rendered":"https:\/\/www.dev-tronic.de\/?p=228"},"modified":"2021-12-01T13:27:25","modified_gmt":"2021-12-01T12:27:25","slug":"warteschleife","status":"publish","type":"post","link":"https:\/\/www.dev-tronic.de\/?p=228","title":{"rendered":"Z80 &#8211; Warteschleife"},"content":{"rendered":"\n<p>Die Warteschleife ist zwar eine S\u00fcnde, da sie den Prozessor im Kreis herum schickt und wertvolle Rechenzeit vergeuden l\u00e4sst. Aber in vielen Situationen ist man auf eine Warteschleife angewiesen um das Timing f\u00fcr Signale zu erreichen oder um Geschehnisse beobachten zu k\u00f6nnen, die bei voller Geschwindigkeit nicht nachvollziehbar w\u00e4ren.<\/p>\n\n\n\n<p>Ausgehend von einem Prozessortakt von 4MHz sieht das wie folgt aus:<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:z80 decode:true \" title=\"Warteschleife\">                  ; *********************************************\n                  ; Pausenschleife\n                  ; *********************************************\n_pause:           push bc                          ;\n                  ld bc,0000H                      ; 2,5 \u00b5s\n                 \n_ploop:           dec bc                           ; 1,5 \u00b5s\n                  ld a,b                           ; 1 \u00b5s\n                  or c                             ; 1 \u00b5s\n                  ex (sp),hl                       ; 4,75 \u00b5s\n                  ex (sp),hl                       ; 4,75 \u00b5s\n                  ex (sp),hl                       ; 4,75 \u00b5s\n                  ex (sp),hl                       ; 4,75 \u00b5s\n                  ex (sp),hl                       ; 4,75 \u00b5s\n                  ex (sp),hl                       ; 4,75 \u00b5s\n                  jr nz, _ploop                    ; 3 \u00b5s bzw 1,5 \u00b5s, wenn fertig\n                 \n                  pop bc\n                  ret<\/pre><\/div>\n\n\n\n<p>Das macht im Beispiel 2,5 \u00b5s f\u00fcr das Laden des Registers BC.  Dann 35 \u00b5s pro Schleifendurchlauf. Die Anzahl der Durchl\u00e4ufe wird vom Inhalt des Registers BC bestimmt. Der letzte Durchlauf ben\u00f6tigt 1,5 \u00b5s weniger Zeit, da die Schleife verlassen wird. Die Wiederherstellung des Registers BC auf seinen urspr\u00fcnglichen Wert ben\u00f6tigt noch einmal 2,5 \u00b5s. Je nach Programmaufbau ist das aber evtl. nicht erforderlich. Und wenn die Schleife als Unterprogramm definiert ist, ben\u00f6tigt der Befehl RET auch noch einmal 2,5 \u00b5s.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Warteschleife ist zwar eine S\u00fcnde, da sie den Prozessor im Kreis herum schickt und wertvolle Rechenzeit vergeuden l\u00e4sst. Aber in vielen Situationen ist man auf eine Warteschleife angewiesen um das Timing f\u00fcr Signale zu erreichen oder um Geschehnisse beobachten zu k\u00f6nnen, die bei voller Geschwindigkeit nicht nachvollziehbar w\u00e4ren. Ausgehend von einem Prozessortakt von 4MHz sieht das wie folgt aus: Das macht im Beispiel 2,5 \u00b5s f\u00fcr das Laden des Registers BC. Dann 35 \u00b5s pro Schleifendurchlauf. Die Anzahl der<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20],"tags":[25,11,10],"class_list":["post-228","post","type-post","status-publish","format-standard","hentry","category-z80codeschnipsel","tag-8-bit","tag-z80","tag-z80ardu"],"_links":{"self":[{"href":"https:\/\/www.dev-tronic.de\/index.php?rest_route=\/wp\/v2\/posts\/228","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dev-tronic.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dev-tronic.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dev-tronic.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dev-tronic.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=228"}],"version-history":[{"count":5,"href":"https:\/\/www.dev-tronic.de\/index.php?rest_route=\/wp\/v2\/posts\/228\/revisions"}],"predecessor-version":[{"id":350,"href":"https:\/\/www.dev-tronic.de\/index.php?rest_route=\/wp\/v2\/posts\/228\/revisions\/350"}],"wp:attachment":[{"href":"https:\/\/www.dev-tronic.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=228"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dev-tronic.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=228"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dev-tronic.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=228"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}