Path: csiph.com!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Stefan Reuther Newsgroups: de.alt.folklore.computer Subject: Re: Warum Z80 so bei Arcade Video Spielen erfolgreich? Date: Fri, 1 Mar 2024 10:42:50 +0100 Lines: 35 Message-ID: References: <871qa024kw.fsf@usenet.ankman.de> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Trace: individual.net uP4bC0X5StNcauJgzSvcAgAEDMTjnW1NpxcOSHh225ar8HIyPy Cancel-Lock: sha1:qpt1iLX/MJsC73DOTVDaQdt+ddk= sha256:naF6P2JM3HDbR4Bv3uCQJX/ILR51rpySlgHRedkS3Mo= User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.12.1 Hamster/2.1.0.1538 In-Reply-To: Xref: csiph.com de.alt.folklore.computer:43971 Am 29.02.2024 um 20:48 schrieb Kay Martinen: [Z80 'LDIR'] >>>> War das unterbrechbar oder musste ein IRQ warten bis das >>>> durchgelaufen war? >>> Das Z80 Manual sagt dazu: >>> Interrupts are recognized and two refresh cycles are executed after >>> each data >>> transfer. > > Verstehe nicht was da das eine mit dem anderen zu tun hat. "Interrups > werden erfasst" und "nach jedem Datentransfer gibt es zwei > Refresh-zyklen" klingt nicht nach einem zwingenden Zusammenhang. Ich weiß jetzt nicht, wie *genau* das implementiert ist, aber würde ich diesen Befehlssatz umsetzen, würde ich LDIR einfach implementieren als "wenn BC = 0, verhalte dich wie NOP (=PC weiterschalten); wenn BC <> 0, verhalte dich wie LDI und setze den PC *nicht* weiter". Der gleiche Befehl wird also wiederholt ausgeführt und Interruptverarbeitung gibt's dann gratis. x86 hat ja mit REP MOVS im Wesentlichen den gleichen Befehl im Angebot. Im Namen der Performance wird der wohl heutzutage intern optimiert, um z.B. cacheline-weise zu kopieren, und wenn man sowas macht, muss man in der Tat ausdrücklich auf die Interrupts aufpassen. Aber bei Z80 wird das wohl eher kein Thema gewesen sein. Bei frühen 8086 gab's mal das Problem, dass der das nicht-weitersetzen des PC bei Interrupts versemmelt hat, aber das ist auch nur möglich, da REP und MOVS jeweils eigenständige Bedeutung haben, man die Instruktion also überhaupt erst in der Mitte durchsägen kann. Das trifft auf LDIR vs LDI aber nicht zu. Stefan