ich habe hier ein Problem bei dem ich mit meinem Latein an Ende bin.
Ich schreibe gerade an einer Emulation einer Zilog Z180 MPU. Der Befehlssatz funktioniert schon prima und ich kann auch schon Progamme darauf laufen lassen.
Das ganze soll später soweit funktionieren das ein CP/M drauf läuft. Die zu emulierende Hardware existiert in echt, habe ich vor ca. 15Jahren selbst designt und zusammengelötet.
Bei der emulation der OnChip Componenten gibt es aber nun ein Problem:
Ich habe folgendes Record:
Code: Alles auswählen
TioSTAT0 = bitpacked record  // ASCI-Channel 0 Status
            case byte of
                0: (STAT0: byte);       // 8Bit Register Data
                1: (bitTIE: boolean;    // Transmit Interrupt Enable
                    bitTDRE: boolean;   // Transmit Data Register Empty
                    bitDCD0: boolean;   // Data Carrier Detect
                    bitRIE: boolean;    // Receive Interrupt Enable
                    bitFE: boolean;     // Framing Error
                    bitPE: boolean;     // Parity Error
                    bitOVRN: boolean;   // Overrun Error
                    bitRDRF: boolean);  // Receive Data Register Full
        end;
..
..
ioSTAT0: TioSTAT0;     // ASCI-Channel 0 StatusCode: Alles auswählen
if ((not ioSTAT0.bitRDRF) and asciRSR0F) then begin // ist RDR leer und liegen neue Daten im RSRAuch folgender Test:
Code: Alles auswählen
test1, test2, test3, test4: boolean;
..
..
test1 := False;
test2 := True;
test3 := False;
test4 := True;
..
..
test1 := not ioSTAT0.bitRDRF;
test2 := not ioSTAT0.bitRDRF;
test3 := ioSTAT0.bitRDRF;
test4 := ioSTAT0.bitRDRF;
 Seltsamerweise wird im Debug-Modus das Bit richtig ausgewertet.
Bei weiteren Test habe ich herausgefunden das die Bits 'TIE, TDRE, DCD0 und RIE' funktionieren, der Rest dann nicht.
Allerdings funktioniert dieses Record komplett fehlerfrei:
Code: Alles auswählen
TregAF = bitpacked record
            case byte of
                0: (value: word);     // 16Bit Register-Paar AF
                1: (F: byte;          // 8Bit Register F (lower 8Bit)
                    A: byte);         // 8Bit Register A (upper 8Bit)
                2: (Flag_C: boolean;  // 'Carry' Flag
                    Flag_N: boolean;  // 'Negative' Flag
                    Flag_PV: boolean; // 'Parity/Overflow' Flag
                    nv1: boolean;
                    Flag_H: boolean;  // 'Half-Carry' Flag
                    nv2: boolean;
                    Flag_Z: boolean;  // 'Zero' Flag
                    Flag_S: boolean); // 'Sign' Flag
        end;Vielleicht hat jemand von euch eine Idee woran der Fehler liegt.
Falls Ihr weitere Infos braucht, einfach kurz schreiben.
Vielen Dank und schöne Ostern,
HobbyProgrammer


 
  
 
  Verein
Verein 
 Links
Links Suche
Suche