000
11.04.2013, 21:15 Uhr
FL
|
Hallo Leute,
Gerrit Schulz aus Aschersleben (gerritsoft.de) und ich sind am KC85 dabei, ein Ladeprogramm für Headersave-Dateien (Z1013) zu schreiben. Dabei hatten wir folgendes Problem: Wenn wir diese Warteschleife irgendwo im IRM eines KC85/3 ausführen, stürzt das Programm ab:
Quellcode: | HLI: IN A,88H OUT 88H ;KC85/4 Quittung LD E,(IX+0) DEC E INC E JR Z,HLI ;wdh. falls E=0 |
Führt man die Schleife im RAM0 des selben Rechners aus, funktioniert das Programm. Der Fehler läßt sich auf keinem anderen System nachbilden. Weder im KC85/4, noch in einer KC85/3-Emulation.
Eigentlich soll unser Programm die erkannten Blockadressen anzeigen. Statt dessen erscheinen nur senkrechten Streifen.
Diese grau/schwarzen Streifen flackern im Rhythmus der Aufnahme. Nach dem Drücken von Reset kann man mit DISPLAY sehen, das der IRM-Inhalt teilweise zerstört wurde.

Das komische war, das nach Einfügen eines beliebigen Befehls (EI/DI oder z.B. NOP), oder nach entfernen des OUT-Befehls, der Fehler verschwunden war.
Wir konnten das auf 4 KC85/3 reproduzieren. Einen Hardwaredefekt schließe ich deshalb aus. Irgendwie muß der Fehler in der Warteschleife selbst liegen und mit deren Ausführungszeit zu tun haben. Ich fand weitere Schleifen, die ein ähnliches Fehlerbild haben. Zum Beispiel:
Quellcode: | M1: XOR A JP Z,M1 |
Quellcode: | M1: LD A,R XOR A RET NZ JR M1 |
oder einfach
Immer dann, wenn die Ausführungszeit der Schleife inklusive der WAIT's 4, 8 oder 16 Takte ist, sieht man nicht das typische KC85/3-Geflimmer, sondern es werden einzelne Textspalten ausgeblendet. Wenn man diese Schleifen einen Moment lang ausführt, enthält der IRM hinterher falsche Werte. Drückt man, während die Schleife ausgeführt wird eine Taste, erscheinen die senkrechten Streifen. Oder es kommen weitere hinzu.
Läßt sich der Bug auf weiteren KC's reproduzieren (vielleicht auch auf dem HC900 / KC85/2) ? Kann es sein, das hier der Speicherrefresh unterdrückt wird ?
Ich habe ein kurzes Testprogramm gebastelt: http://www.kc85emu.de/rt/kcbg.asm http://www.kc85emu.de/rt/kcbg.kcc
Nach dem Start werden jeweils 3 von 8 Bildschirmspalten ausgeblendet.

Wenn man jetzt einige Zeit wartet und dann Reset drückt sieht der IRM-Inhalt zum Beispiel so aus:

Gruß Frank. |