Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Z80 Simulator (https://www.delphipraxis.net/61246-z80-simulator.html)

simonko 18. Jan 2006 19:34


Z80 Simulator
 
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

Flocke 18. Jan 2006 21:03

Re: Z80 Simulator
 
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.

simonko 18. Jan 2006 21:31

Re: Z80 Simulator
 
ja ich muss das in C machen da gibts irgendwie kein byte und kein word :-/

tommie-lie 18. Jan 2006 21:44

Re: Z80 Simulator
 
Zitat:

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.

simonko 18. Jan 2006 22:26

Re: Z80 Simulator
 
ich muss nur schauen dass es nicht über den bereich hinausgeht. also 255 ist das maximum dann soll es wieder von unten hochzählen..

Robert Marquardt 19. Jan 2006 07:33

Re: Z80 Simulator
 
Zitat:

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"?

NicoDE 19. Jan 2006 08:15

Re: Z80 Simulator
 
Zitat:

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, ...).

Der Jan 19. Jan 2006 08:17

Re: Z80 Simulator
 
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.

NicoDE 19. Jan 2006 08:38

Re: Z80 Simulator
 
Zitat:

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... )

Der Jan 19. Jan 2006 09:05

Re: Z80 Simulator
 
Zitat:

Zitat von NicoDE
Meinste diesen: http://kcemu.sourceforge.net/ ?
(*seufz* da kommen alte Erinnerungen auf... )

Jaaa, das waren noch Zeiten :) :corky:

simonko 19. Jan 2006 18:42

Re: Z80 Simulator
 
ich habs folgendermasen gelöst. jedes register seh ich als unsigned char 8 bit register.
egal wenns auf welchen rechnern 2 byte haben könnte ich mach immer mod 256. wenn ich doppelregister lesen will dann les ich das erste shifte um 8 bit und zähle das 2 hinzu. so müsste es gehen.

Robert Marquardt 19. Jan 2006 18:59

Re: Z80 Simulator
 
Ich wuerde so ein Projekt ja nicht anfangen ohne vorher gut C programmieren zu koennen und die Details des Z80 Befehlssatzes zu kennen.
Einen halbwegs effizienten Interpreter zu schreiben ist eine Kunst.

simonko 19. Jan 2006 20:04

Re: Z80 Simulator
 
stfu. die befehle hab ich alle hier vor mir liegen und c programmier ich schon seit 3 jahren. und es gibt schwereres als ein simulator zu schreiben.

turboPASCAL 19. Jan 2006 22:40

Re: Z80 Simulator
 
please see www.z1013.de (LINKS)

alcaeus 19. Jan 2006 22:51

Re: Z80 Simulator
 
@simonko: bitte halte dich evtl. bei der wortwahl etwas zurueck. Robert's Einwand ist durchaus gerechtfertigt, und wenn er auf dich nicht zutrifft; umso besser.

Greetz
alcaeus

Robert Marquardt 20. Jan 2006 04:43

Re: Z80 Simulator
 
Ach da muss er noch ganz andere Worte gebrauchen bevor er mich aufregt :-)
Wer sich nicht mit signed und unsigned auskennt, der duerfte doch Schwierigkeiten haben.
Gerade die Behandlung von Zahlen speziell in Hinsicht auf die Prozessorflags ist sonst nicht korrekt hinzukriegen.

Das "nicht" hat gefehlt.

Der Jan 20. Jan 2006 09:26

Re: Z80 Simulator
 
Kleiner Tip noch: Schau dir mal die Include-Dateien limit.h bzw. _lim.h an. Dort sind ne Menge nützliche Defines, z.B. CHAR_BITS, CHAR_MAX usw. Diese Includes gibt es auf so ziemlich jedem System. Da kannst du dir mir ein paar IFs, IFDEFs etc. deine Typen so zusammenbasteln, daß z.B. ein t_uchar immer 8bit ist usw.

Der_Unwissende 20. Jan 2006 10:12

Re: Z80 Simulator
 
Mal ganz kurz,
du möchtest entweder 4 * 1 Byte einzeln oder 2 * 2 Byte ansprechen und kannst C. Bin nicht so der C Crack, aber gibt es bei dir kein Union?

Gruß Der Unwissende

tommie-lie 20. Jan 2006 13:27

Re: Z80 Simulator
 
Zitat:

Zitat von Der_Unwissende
du möchtest entweder 4 * 1 Byte einzeln oder 2 * 2 Byte ansprechen und kannst C. Bin nicht so der C Crack, aber gibt es bei dir kein Union?

Unions helfen hier nur bedingt.
Code:
union myunion {
  int reg16;
  struct two_regs {
    char reg81;
    char reg82
  } reg8s
}
Wenn char hier 8 Bit groß ist und int 16, funktioniert das prima. Ist aber char 16 Bit groß und int 32, wird es Probleme geben, denn Wenn man 8bit-Werte in reg8s.reg82 schreibt, schreibt man diese nicht an das zweite Byte von reg16, sondern an das dritte. Eine derartige Implementierung macht daher nur Sinn, wenn die Zielplattform native Datentypen mit 8 und 16 Bit kennt. Kennt die Zielplattform diese nicht, muss man einen solchen nativen Datentyp simulieren, also mit Bit-Operationen aus zwei 16bit-Werten, bei denen jeweils nur 8 verwendet werden, einen 16bit-Wert zusammenbasteln.

Robert Marquardt 20. Jan 2006 14:09

Re: Z80 Simulator
 
Man benutzt einfach "short int". Natuerlich kann short int 8 Bit lang sein, aber das trifft hoechstens auf C Compiler fuer Mikrocontroller zu.
Wer es ganz genau machen will, der kann ja mit einem test auf "sizeof(short int) == 2" eine Sicherheitsabfrage einbauen.
Ein C Compiler mit sizeof(char) != 1 ist mir noch nie begegnet. Auch eine CPU mit einem Byte das nicht 8 Bit hat ist heutzutage komplett ungewoehnlich.

simonko 20. Jan 2006 16:10

Re: Z80 Simulator
 
gerechtfertigt? das sinnlose kritisieren ohne argumente bringt hier niemanden weiter. man was haben denn einige für ein problem. kommt mit eurem leben klar

simonko 20. Jan 2006 16:17

Re: Z80 Simulator
 
Zitat:

Zitat von Robert Marquardt
Ein C Compiler mit sizeof(char) != 1 ist mir noch nie begegnet.

schon mal was von linux und unicode gehört?

Robert Marquardt 20. Jan 2006 17:01

Re: Z80 Simulator
 
Auch bei Linux ist der char 1 Byte gross. Ein Unicode char hat schon seit vielen Jahren den Typ wchar_t.
Ueblicherweise ist er als "typedef short int wchar_t;" deklariert. Moderne Compiler gehen dazu ueber wchar_t als Sprachbestandteil zu behandeln.

Du solltest vielleicht mal den Rahmen deiner Frage setzen, statt dich zu beklagen das unsere Vorschlaege nicht zu deiner Zufriedenheit sind.
Wenn du wirklich auf der Abstraktionsebene des ANSI-C-Sprachstandards implementieren willst, dann sage das doch bitte.
Compiler mit short int = 1 Byte und int = 2 Byte sind heutzutage nur noch im Mikrocontrollerumfeld anzutreffen. Du willst doch nicht ernsthaft darauf dann einen Z80-Emulator laufen lassen?

Du impliziert uebrigens in deinen Antworten das du firmer in C bist als ich.
Beantworte daher bitte die Frage was Trigraphen sind.


Edit: ein paar Schreibfehler

simonko 20. Jan 2006 17:15

Re: Z80 Simulator
 
blablabla... :thumb:

Khabarakh 20. Jan 2006 17:27

Re: Z80 Simulator
 
Zitat:

sinnloses kritisieren ohne argumente
Du bringst die Sache auf den Punkt. Aber musst du gleich mit Ausdrücken um dich werfen, wenn dir die Argumente ausgehen? Es ist ja nicht so, dass das dein erster Bash-Wenn-In-Die-Ecke-Getrieben-Thread ist, auch wenn du in diesem das Schlimmste wieder wegeditiert hast, weil es dir wohl selbst zu peinlich war.

simonko 20. Jan 2006 17:47

Re: Z80 Simulator
 
das wurde mir gelöscht. ich stehe zu meinen aussagen.
ich hab keine lust mehr mit solchen komischen leuten hier zu schreiben. ich bin hier hergekommen weil ich hilfe brauche und nicht um von solchen leuten mit komplexen die zeigen wollen dass sie was drauf haben beschimpft zu werden. die meisten hier sind einfach solche wannabes.

MFG
Darkstar

Neotracer64 20. Jan 2006 17:56

Re: Z80 Simulator
 
Versteh ich das gerade richtig, dass du kostenlose Hilfe haben möchtest, die 100% richtig und kompetent ist. Du bewertest Ungereimtheiten oder Kommentare und Hilfestellungen, die über das Gefragte hinausgehen als Angriff auf deine Person und zudem bist du auch nicht bereit dich in irgendeinerweise dankbar zu zeigen?

tommie-lie 20. Jan 2006 19:28

Re: Z80 Simulator
 
Zitat:

Zitat von Robert Marquardt
Man benutzt einfach "short int".

Das grundliegende PRoblem ist, daß nirgendwo im Standard geschrieben steht, daß ein char 8bit lang zu sein hat. Will man tatsächlich generischen Code aus welchen esoterischen Gründen auch immer, ist eine "manuelle" Maskierung notwendig. Er will das offensichtlich so, vielleicht weil sein Compiler das so will und er keinen anderen Compiler für Linux verwenden kann/darf (Compiler-spezifische Extensions?).
Daß man es für gänige Compiler auf gängigen Architekturen wunderbar mit den nativen Typen optimieren kann, weil man den ganzen Maskierungskrempel spart, habe ich oben schon geschrieben. IFDEFs wären hier eine Möglichkeit, das Binary klein zu halten, deine Abfrage über sizeof eine Möglichkeit, ein Fat Binary zu erhalten (ob das Sinn macht, bei Architekturen, die derartig inkompatibel sind, sei mal eine andere Frage).

Zitat:

Zitat von simonko
ich bin hier hergekommen weil ich hilfe brauche und nicht um von solchen leuten mit komplexen die zeigen wollen dass sie was drauf haben beschimpft zu werden. die meisten hier sind einfach solche wannabes.

Jetz' hör mal zu du Wicht. Du hast deine Frage so abstrakt und schwammig formuliert, daß es keine gemeingültige Antwort geben kann. Entweder du nutzt native Möglichkeiten, einen vernünftigen Compiler oder emulierst dir deinen Prozessor entsprechend ISO/ANSI-Standard mit voller Hardwareabstraktion. Diese Möglichkeiten hast du. Diese Möglichkeiten wurden dir von Robert und mir dargelegt. Wenn dir eine dieser Möglichkeiten nicht gefällt, dann solltest du nicht um Hilfe bitten, man sollte einfach keine Fragen stellen, wenn man die Antwort nicht hören will.
Und das ganz unabhängig von deinem vorhandenen oder nicht vorhandenen Wissen über C oder Linux oder sonstewas.

simonko 20. Jan 2006 21:36

Re: Z80 Simulator
 
иди на хуй

пока

Daniel G 20. Jan 2006 21:54

Re: Z80 Simulator
 
Zitat:

Zitat von simonko
иди на хуй

Oh, der werte Herr gedenkt zu fluchen....

Khabarakh 20. Jan 2006 21:57

Re: Z80 Simulator
 
Langweilig, hatten wir doch schon zweimal :mrgreen: .
Aber ich glaube nicht, dass aus diesem Thread noch etwas Produktives herauskommt :gruebel: .

Daniel G 20. Jan 2006 22:00

Re: Z80 Simulator
 
Zitat:

Zitat von Khabarakh
Aber ich glaube nicht, dass aus diesem Thread noch etwas Produktives herauskommt :gruebel: .

Denke ich auch... Schade aber auch...

tommie-lie 20. Jan 2006 22:01

Re: Z80 Simulator
 
Zitat:

Zitat von simonko
иди на хуй

пока

Code:
-------------------------------------------------------------
MERKBEFREIUNG - MERKBEFREIUNG - MERKBEFREIUNG - MERKBEFREIUNG


Die nachstehend eindeutig identifizierte Lebensform


Name                : Simon________________________________
        [_] egal

Vorname             : Sowieso______________________________
        [_] egal

Geburtsdatum        : leider_______________________________
Geburtsort          : leider auch__________________________
Usenet-Kennzeichen  : simonko______________________________


ist hiermit

        (_) für den Zeitraum von
            (_) 2 Sekunden
            (_) ___ Tagen
            (_) ___ Wochen
            (_) ___ Monaten
            (_) ___ Jahren
        (X) unbefristet

davon befreit, etwas zu merken, d.h. wesentliche
Verhaltensänderungen bei der Interaktion mit denkenden Wesen zu
zeigen. Die Einstufung der o.a. Person nach dem amtlichen Index
für Merkbefreiungen liegt bei dem Äquivalent von

        (_) einem Mensaessen vom Vortag
        (_) drei Hartkeksen (Werksverkauf Bahlsen) in löslichem
            Kaffee Hag
        (_) einem Quadratmeterstück Torfmoos während einer
            sechswöchigen Sommerdürre
        (_) einem Container erodiertem Sandstein [Streusandqualität]
        (X) einem Mitglied der Bundesregierung
        (_) einer Drucksache der Senats*planungs*kommission der
            Universität Oldenburg (Präsidiumsvorlage)
        (_) einem Kilo Watt (Schlickwatt, Jadebusen)
        (_) 5 AOL-CDs
        (_) einem Sommerreifen-Fahrer bei 20 cm Neuschnee
        (_) einem fehl*geschla*genen Experiment mit den Genen von
            Chiap Zap und Marco Desloovere
        (_) ______1____________________________

Die ausgesprochene Merkbefreiung erlischt mit

        (_) dem Ablauf der o.g. Frist, beginnend mit dem
            Zeitpunkt der Ausstellung
        (_) dem Ablauf des __.__.____
        (X) der vollständigen Erosion der körperlichen
            Bestandteile der o.a. Lebensform

und gilt, egal ob die o.a. Lebensform durch das nachstehende
Kennzeichen als merkbefreit zu identifizieren ist:

        (_) schwarze Hose, schwarze Schuhe, weiße Socken
        (_) eine umgedrehte Baseballkappe
        (_) olives Stoffstück mit weißem Rand, auf der Schulter
            zu tragen
        (X) eindeutig unbefristet merkbefreiter Gesichtsausdruck

Befund nach Prüfung durch das Bundesamt:

        [_] kurzzeitiger Aussetzer durch Übermüdung des Merkerit-
            deflektionsstudenten. Einstellung eines zweiten solchen
            wird empfohlen.
        (_) Hohe Konzentrationen an Trollium und Merkerit
        (X) Extrem hohe Konzentrationen an Trollium und Merkerit
        [X] Alle bekannten Therapien sind wirkungslos
        [_] Einstufung in die Gefahrenklasse
            [_] ELCH - A I
            [_] DAU - B II
            [_] TROLL - DO NOT FEED
            [_] KASPER - DANCE FASTER!
        [_] Paranoia naciformis, Analphabetia semantica
        [_] Microsoftititis

Die o.a. Lebensform ist durch den Erwerb dieses
Merkbefreiungsscheins automatisch für die folgenden Tätigkeiten
qualifiziert:

        [X] Markierungshütchen bei Ab*markierungs*arbeiten auf
            Bundesautobahnen
        [_] Pegellatte in Prielen und Sielen
        [X] Garderobenständer und Regenschirmständer in
            Restaurants bis zu, aber nicht eingeschlossen, 3
            Sterne
        [_] Regelstab in Schwer*wasser*reaktoren (Brennelemente
            britischer Herkunft eingeschlossen)
        [_] Markierungsstab für das Fahrwasser im Nationalpark
            Niedersächsisches Wattenmeer
        [_] Landschaftsmerkmal/Orientierungshilfe in der Wüste
            Gobi
        [_] Füllmaterial eines Salzstocks nach dortiger Endlagerung
            von gebrauchten Brennelementen
        [_] Müllschlucker für hausmüllähnliche Gewerbeabfälle
            in Betrieben des Deichbaus

Die Merkbefreiung für die o.a. Lebensform wurde in einem
öffentlichen Merk*befreiungs*verfahren ausgesprochen und ist nach
Ablauf der Einspruchsfrist von 17 Sekunden rechtskräftig.

Weitere Auflagen und Entscheidungen:

[X] *PLONK*                        [_] GEH WEG!
[_] *PLATSCH*                      [_] Get a life!
[_] *PATSCH*                       [_] Sie sind raus!
[_] *limmib*                       [X] Geh sterben.
[_] 42                             [_] _______________           
[_] Erlöse den menschlichen
    Genpool von dir

Weitere Betreuung durch:

[X] /dev/null - QUARANTÄNE
[_] Schwester Johanna
[_] Die Hilfspfleger

Es wird die/der

( ) vorläufige Aufbewahrung
( ) Zwischenlagerung
(X) Endlagerung
( ) Heilungsversuch

angeordnet.

Weitere Anordnungen:

[X] Froschpillenkur
    ( ) grüne Froschpillen
    ( ) rosa Froschpillen
    (X) gestreifte Froschpillen
    ( ) ___________ Froschpillen
[X] Einlauf
    [_] mit Kamillentee°
    [X] mit Froschpillen
[_] Tackern
[_] sonstige Behandlung nach Ermessen der Pfleger

[X] Die sofortige Vollziehbarkeit dieses Bescheids wird
    hiermit angeordnet.

Begründung:

(_) Notstandsmaßnahme
(X) andere
    [_] unmittelbare Gefahr für die geistige Gesundheit von
        Lesern
    [_] ROTFL
    [X] perfekte Ingoranz seiner Umwelt___

Hochachtungsvoll!

Das Bundesamt für die Verwaltung des Nutz-Netzes
Dezernat III - Abteilung für Troll-, DAU-, und FAQ-Sachbearbeitung

Datum          Unterschrift   Dienstsiegel

[Poststempel]  [unleserlich]  [Dienstsiegel]


Stirnabdruck des Merkbefreiten

 *PLATSCH*
(hm, so weich, die Birne...)


MERKBEFREIUNG - MERKBEFREIUNG - MERKBEFREIUNG - MERKBEFREIUNG
-------------------------------------------------------------

Wo ist hier das Killfile?

Daniel G 20. Jan 2006 22:03

Re: Z80 Simulator
 
Herrlichst :mrgreen:

simonko 20. Jan 2006 22:08

Re: Z80 Simulator
 
habt ihr nix zu tun im leben als mich psychadelic master hier zu beleidigen?

Dax 20. Jan 2006 22:13

Re: Z80 Simulator
 
Hm, ich kenn das bisher nur ein stück kürzer :) *gleich mal rauskopier und ausgefüllte stellen schwärz, äh, weiß*

@simonko: Wenn man keine Ahnung hat, einfach mal die Fresse halten!

Daniel G 20. Jan 2006 22:15

Re: Z80 Simulator
 
Zitat:

Zitat von simonko
habt ihr nix zu tun im leben als mich psychadelic master hier zu beleidigen?

hast du nix zu tun im leben als darauf zu reagieren?

simonko 20. Jan 2006 22:24

Re: Z80 Simulator
 
doch ich mach das aber nebenbei. das ist nicht mein einziger lebensinhalt wie bei manchen von euch :)

Daniel G 20. Jan 2006 22:32

Re: Z80 Simulator
 
Zitat:

Zitat von simonko
doch ich mach das aber nebenbei. das ist nicht mein einziger lebensinhalt wie bei manchen von euch :)

Is' schon ok. Ignoranz ist auch eine Art der Strafe...

Daniel 20. Jan 2006 23:05

Re: Z80 Simulator
 
Schluss jetzt!
:warn:

Fühlt Euch einen Eimer Wasser über den Kopf gekippt.


Wer außer Polemik und weiteren Sticheleien nichts zu dem Thema beizutragen hat, der möge seine Finger von der Tastatur nehmen. Ich sage das nur einmal.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:31 Uhr.
Seite 1 von 2  1 2      

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