Robotrontechnik-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Mitglieder || Home || Statistik || Kalender || Admins Willkommen Gast! RSS

Robotrontechnik-Forum » Technische Diskussionen » Bug im KC85/3-IRM ? » Themenansicht

Autor Thread - Seiten: -1-
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

Quellcode:
HALT

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.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
11.04.2013, 21:21 Uhr
Mobby5



Die Zugriffszeit beim IRM ist, laut Handbuch, länger als beim "normalen RAM", was natürlich bei Warteschleifen zur "Verlängerung" führt. Eventuell ist das im Emulator nicht berücksichtigt worden.
--
und ausserdem muss in Zeile 20 der Doppelpunkt durch ein Semikolon ersetzt werden
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
11.04.2013, 21:44 Uhr
HONI



Tritt der Fehler auch auf wenn ein anderes Betriebssystem für den KC85/3 genutzt wird (CAOS3.4i, PI/88)? Im Emulator ist das 3.4i hinterlegt.

MfG HONI!!
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
003
11.04.2013, 22:01 Uhr
Wusel_1




Zitat:
FL schrieb


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


Hm erst erniedrigst du E und dann erhöhst du es wieder. Wie willst du dann auf E=0 kommen, also das Z-Flag gesetzt werden soll?
--
Beste Grüße Andreas
______________________________________
DL9UNF ex Y22MF es Y35ZF
JO42VP - DOK: Y43 - LDK: CE

*** wer glaubt, hört auf zu denken ***

Dieser Beitrag wurde am 11.04.2013 um 22:11 Uhr von Wusel_1 editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
004
11.04.2013, 22:17 Uhr
FL



Am Betriebssystem scheint es nicht zu liegen. Einer der Rechner hat CAOS 3.4i, die
anderen CAOS3.1
Der Emulator bildet keine Refresh’s ab. Er diente als Vergleich ob der Code in Ordnung ist. Entscheidender ist, das der KC85/4-IRM auch diese WAIT’s hat. Dort läuft aber alles.

@Wusel:
Eigentlich ist HLI eine Endlosschleife. (IX+0) ist normaler Weise immer auf 0 gesetzt. Erst beim Eintreffen eines Interrupts, also in diesem Fall einer Halbwelle am TAPE-Eingang, wird (IX+0) von der ISR auf einen Wert ungleich 0 gesetzt.
Die Streifen treten mit dem ersten Ton auf.

Gruß Frank.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
005
11.04.2013, 22:22 Uhr
TTL-Grab



E wird geladen und mit inc e/dec e wird zero-Flag gesetzt, je nachden ob E=0 war oder nicht, ohne E zu verändern. Du hast wohl schon lange nicht Z80 programmiert, oder?
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
006
11.04.2013, 22:39 Uhr
FL



Solange (IX+0) = 0 ist, ist nach dem INC E das Zero-Flag gesetzt und die Schleife wird nicht verlassen. Die ISR gibt in (IX+0) einen Wert für die Länge der Halbwelle zurück. Das Zero-Flag wird gelöscht und das Ergebis in E zurückgegeben.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
007
26.05.2013, 12:50 Uhr
kaiOr

Avatar von kaiOr

Hallo,

der IRM bekommt normal keinen /RFSH vom U880, !eigentlich! wird er ja rund um die Uhr vom Video-Timing-Generator zur Darstellung ausgelesen. Jeder Lesezugriff auf eine Zeile im DRAM ersetzt automatisch auch einen Refresh dieser Zeile....

Jetzt ist es aber so, dass beim KC85/3 bei Prozessorzugriff das Auslesen für den Bildaufbau für eine Zeichenbreite unterbrochen wird und stattdessen ein abgeleitetes /CAS dargestellt wird, was die allseits bekannten Strichartefakte bewirkt. !Eigentlich! wird der Refresh an der Stelle durch den Zugriff des Prozessors aufrecht erhalten, ABER ein einzelner Prozessorzugriff erfolgt jeweils nur auf die Pixel- ODER Farbinformation im IRM. Ein Zugriff vom VTG dagegen liest Pixel- UND Farbinformation in einem Rutsch (doppeltes CAS nach RAS).

Wenn man es also schafft das die CPU sehr oft die selben Bytes im Bildpunktspeicher anspricht wird automatisch der Refresh der selben Zeilen im Farbspeicher dünn und andersrum.

Ich weiß nun nicht genau wie der IRM organisiert ist bzw. ob sich das mit den vertikalen Lücken deckt.

MfG

Dieser Beitrag wurde am 26.05.2013 um 12:56 Uhr von kaiOr editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
008
26.05.2013, 14:14 Uhr
kaiOr

Avatar von kaiOr


Zitat:
kaiOr schrieb
!Eigentlich! wird der Refresh an der Stelle durch den Zugriff des Prozessors aufrecht erhalten, ABER ein einzelner Prozessorzugriff erfolgt jeweils nur auf die Pixel- ODER Farbinformation im IRM.

Ach halt, der Prozessor greift ja auf eine beliebige Adresse im IRM zu. D.h. der Refresh eines Zeichens mit Pixel- UND Farbinformation fällt hier schon flach, wenn es nicht zufällig gerade das Gleiche ist. Also muss man es vom Timing her nur schaffen das die Abfrageschleife der CPU die VTG-Schleife immer an den selben Stellen blockiert.

Dieser Beitrag wurde am 26.05.2013 um 14:16 Uhr von kaiOr editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
Seiten: -1-     [ Technische Diskussionen ]  



Robotrontechnik-Forum

powered by ThWboard 3 Beta 2.84-php5
© by Paul Baecher & Felix Gonschorek