zum allgemeinen Verständnis für alle
bei $D600 sind die Zugriffe auf den Chip möglich. Dabei hat der verschiedene Register. Um ein Register zu lesen/beschreiben wird im X Register die Nummer des gewünschten Registers übergeben und nach $D600 geschrieben. Über den Akku wird nach $D601 geschrieben/gelesen - wo dann jeweils das gewünschte Register (Nr. aus X / $D600) eingeblendet ist.
Um das zu beschleunigen kann man für das Register No 31 auch direkt auf $CDCA springen. Da wird die #$1F direkt gesetzt und man kann sich ein LDX sparen.
Warum ist das so "seltsam" ? Der 128 Videochip kann so einen Art "MemoryTransfer" oder "BlockCopy" - von seinem private-RAM nach außen, aber nicht von allein (wäre wohl zuviel verlangt). Dazu wird eine Startadresse übergeben und dann kann durch wiederholtes Schreiben auf Register 31 ein weiters "Datum" (Byte) kopiert werden, wobei aber immerhin die Adresse (Start/Ziel) automatisch hochgezählt wird. Das ist nicht ganz schnell (echter Blitter), aber schneller als Selbermachen.
https://c128lib.github.io/Reference/Vdc#vdcinternalregister
(siehe (fast) ganz unten bei memory read/write)
.
Da Du schreibst, daß der Abbruch bei dem JSR $FF74 kommt und anscheinend ja Dein Rechner irgendwie nicht komplett abraucht (normalerweise sagt ein Videochip bei falschen Werten oder auch nur leicht vom zugelassenen abweichenden relativ schnell Bescheid - in Form komischer oder schwarzer Bildschirme), sollte man dem da folgenden mal nachgehen. Und der landet eben bei der FETCH Routine, von der man annehmen könnte, daß sie im 64er Mode gar nicht komplett funktioniert - weil sie das auch nicht muß und evtl. die benutzten Bereich im unteren RAM beim 64er schon für andere Sachen mißbraucht werden.