AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Z80 Simulator

Ein Thema von simonko · begonnen am 18. Jan 2006 · letzter Beitrag vom 21. Jan 2006
Antwort Antwort
Seite 1 von 5  1 23     Letzte » 
simonko

Registriert seit: 2. Jun 2005
125 Beiträge
 
#1

Z80 Simulator

  Alt 18. Jan 2006, 20:34
Hi fellas,
ich muss ein z80 simulator schreiben. ich weiss aber nicht welche datenstruktur für die register nehmen soll. In z80 gibt es das B,C,D,E Register. (und noch andere das ist jetzt aber irrilevant)
Alle zu 8 bit. BC und DE können als 16 bit register gelesen werden. Nun wollte ich folgendes machen.


char reg8[4] // B,C,D,E register
short int *reg16[2] //BC DE

wenn nun reg16[0] auf reg8[0] zeigt dann liest er automatisch BC.
Nun hab ich aber ein PROBLEM da das ganze auch auf linux laufen soll. Und da ist char manchmal als 2 byte? short ist auch nicht immer 2 byte lang. Hab schon lange daran herumgeräzelt.
Ich wäre sehr dankbar wenn jemand einen Lösungsvorschlag hat.

MFG
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: Z80 Simulator

  Alt 18. Jan 2006, 22:03
Mach's so, dann kannst du dir die Pointer sparen:
Delphi-Quellcode:
type
  TZ80Regs = record
    case integer of
    0: ( reg8: array [0 .. 3] of byte; );
    1: ( reg16: array [0 .. 1] of word; );
  end;
Die Typen BYTE und WORD sind übrigens immer 8 bzw. 16 Bits lang.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
simonko

Registriert seit: 2. Jun 2005
125 Beiträge
 
#3

Re: Z80 Simulator

  Alt 18. Jan 2006, 22:31
ja ich muss das in C machen da gibts irgendwie kein byte und kein word :-/
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#4

Re: Z80 Simulator

  Alt 18. Jan 2006, 22:44
Zitat von simonko:
ja ich muss das in C machen da gibts irgendwie kein byte und kein word :-/
Richtig, weil es eine Architektur geben könnte, die gar keine Möglichkeit hat, 8bit nativ anzusprechen. Warum bleibst du nicht beim Char und ORst bei Gelegenheit mit 0xFF? Dann sind halt nur die 8 niederwertigsten Bits signifikant, der Rest ist Null.
Das verschließt einem zwar ziemlich viele Optimierungsmöglichkeiten, aber das ist der Preis für eine Komplette Prozessoremulation in einem *komplett* unterschiedlichem Prozessor. Was nicht da ist, muss eben emuliert werden. Du könntest ja mit IFDEFs arbeiten, wenn du die passenden Architekturen rausgefunden hast. Per makefile übergibst du je nach Zielplattform ein Preprocessor-Symbol und wenn es eine von dir als "tauglich" eingeschätzte Plattform ist, nimmst du optimierte Funktionen, die allerdings 8bit große chars benötigen, und in allen anderen Fällen nimmst du eine generische Implementierung, die dafür langsamer läuft.
  Mit Zitat antworten Zitat
simonko

Registriert seit: 2. Jun 2005
125 Beiträge
 
#5

Re: Z80 Simulator

  Alt 18. Jan 2006, 23:26
ich muss nur schauen dass es nicht über den bereich hinausgeht. also 255 ist das maximum dann soll es wieder von unten hochzählen..
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#6

Re: Z80 Simulator

  Alt 19. Jan 2006, 08:33
Zitat von simonko:
ja ich muss das in C machen da gibts irgendwie kein byte und kein word :-/
...und was ist dann "unsigned char" bzw. "unsigned short int"?
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#7

Re: Z80 Simulator

  Alt 19. Jan 2006, 09:15
Zitat von simonko:
Nun hab ich aber ein PROBLEM da das ganze auch auf linux laufen soll. Und da ist char manchmal als 2 byte?
Oder 4 (sehr selten). Wie auch immer, du wirst wahrscheinlich nicht umhin kommen, dir eigene Typen je nach Plattform zu definieren. Für die meisten würde es dann zum Beispiel so aussehen: typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned long uint32_t ... ( _t ist nur uralter C-Stil, kann man auch weglassen). Für die anderen Plattformen musste du dir dann die entsprechenden Deklarationen zusammensuchen - oder einen Header finden, in dem dies schon erledigt wird (die Header heißen oft typedef.h, inttypes.h, ...).
  Mit Zitat antworten Zitat
Benutzerbild von Der Jan
Der Jan

Registriert seit: 22. Dez 2005
289 Beiträge
 
Delphi XE7 Ultimate
 
#8

Re: Z80 Simulator

  Alt 19. Jan 2006, 09:17
Schau mal bei Sourceforge. Da gibts eine LibSidPlay, bei der ist eine 6502/6510-Emulation dabei (8-bit Proz, der z.B. im C64 zum Einsatz kam). Ist zwar nicht der Z80, kann man aber viel draus lernen. Bin mir nicht sicher, aber hab derletzt auch irgendwo eine OpenSource-KC85-Emulator gesehen (der ja den Z80 hatte), weiß aber nicht ob das bei SF war. Muscht mal googlen.
Gruß, Jan
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#9

Re: Z80 Simulator

  Alt 19. Jan 2006, 09:38
Zitat von Der Jan:
hab derletzt auch irgendwo eine OpenSource-KC85-Emulator gesehen (der ja den Z80 hatte), weiß aber nicht ob das bei SF war.
Meinste diesen: http://kcemu.sourceforge.net/ ?
(*seufz* da kommen alte Erinnerungen auf... )
  Mit Zitat antworten Zitat
Benutzerbild von Der Jan
Der Jan

Registriert seit: 22. Dez 2005
289 Beiträge
 
Delphi XE7 Ultimate
 
#10

Re: Z80 Simulator

  Alt 19. Jan 2006, 10:05
Zitat von NicoDE:
Meinste diesen: http://kcemu.sourceforge.net/ ?
(*seufz* da kommen alte Erinnerungen auf... )
Jaaa, das waren noch Zeiten
Gruß, Jan
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz