Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding
You last visited: Today at 05:15

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Code Verständniss Frage (z80/8080)

Discussion on Code Verständniss Frage (z80/8080) within the General Coding forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Jan 2010
Posts: 359
Received Thanks: 57
Code Verständniss Frage (z80/8080)

Hey,
Arbeite mich gerade in die Emulator Programmierung ein und hab hier ein Beispielcode vorliegen um etwas die Logik des Z80 Chips anzusehen
Jetzt habe ich hier allerdings eine verständnissfrage diesbezüglich weil ich diesen Vergleichsoperator noch nie benutzt & gesehen habe und nicht weiß was genau er tut

Code:
if(!(Z80._r.a & 255)) Z80._r.f |= 0x80;
1) Z80._r.f |= 0x80; <-- Lässt sich das so verstehen das er versucht 0x80 in z80._r.f zu packen, sofern nicht schon 0x80 drin steht? Oder wie darf man das verstehen

2) if(!(z80._r.a & 255){} Da habe ich nun wirklich relativ keine Ahnung davon.. Was genau wird hier getan? Ist es mit einem
Code:
if(z80._r.a != "" && z80._r.a != 255){
}
zu vergleichen? Oder wie genau lässt sich dies verstehen

lg
Cyb0r is offline  
Old 04/11/2012, 19:13   #2
 
xNopex's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
xNopex is offline  
Thanks
1 User
Old 04/11/2012, 19:39   #3
 
elite*gold: 0
Join Date: Jan 2010
Posts: 359
Received Thanks: 57
Also ich verstehe 1. nun so ->
WENN Flags in Binär NICHT "11111111" sind -> Zeroflag setzen (Z80._r.f |= 0x80)
Verstehe ich das richtig so?..

Mal Pseudocode..
Code:
ConvertDecToBin(Flag);
if(flag != 11111111){
SetZeroFlag(flag);
}
Müsste doch so stimmen..oder?
Cyb0r is offline  
Old 04/11/2012, 19:51   #4
 
xNopex's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
Nein. Wenn Z80._r.a gleich 00000000 ist, dann setze Z80._r.f zu 10000000.

false = 00000000;
255 = 11111111;
0x80 = 10000000;

Du kannst das so übersetzen:

Code:
if((Z80._r.a & 255) == false)
Also wenn (Z80._r.a & 255) false ist, also wenn (Z80._r.a & 255) == 00000000 ist. (Z80._r.a & 255) ist genau dann 00000000, wenn Z80._r.a == 00000000 ist. Denn AND ergibt 1, wenn beide 1 sind und 255 entspricht ja 11111111.
xNopex is offline  
Old 04/11/2012, 20:03   #5
 
elite*gold: 0
Join Date: Jan 2010
Posts: 359
Received Thanks: 57
Das Zeroflag ist ja 0x80, sprich wenn (z80._r.a & 255) = 00000000 ist, dann wird der Zeroflag gesetzt (0x80) was dann ja 10000000 entspricht. Okay ich glaube ich hab es einigermaßen verstanden. Vielen Dank


Edit:
So das habe ich nun verstanden, nun stellt sich mir jedoch nur eine Frage !
Wenn ich den Emulator Programmiere (z80/8080 Chip vom Gameboy) muss ich ja jede einzelne
Assembler Funktion nachprogrammieren.. und in diesen Funktionen muss ich immer jenach Funktion
einen Check machen, z.b auf Carryflag, Zeroflag usw - wo kann ich erkennen in welcher Funktion ich welche Checks machen muss? Steht dies irgendwo in einer Art Dokumentation,oder muss ich das selbst erkennen / rausfinden anhand der Funktion..?
Cyb0r is offline  
Old 04/12/2012, 01:18   #6
 
elite*gold: 115
Join Date: Oct 2007
Posts: 9,390
Received Thanks: 12,345
Code:
Z80._r.a & 255
Das hier führt dazu, dass nur die unteren 8 Bits von Z80._r.a betrachtet werden. Die If-Bedingung trifft also dann zu, wenn die unteren 8 Bits alle 0 sind.

Mit dem |=-Operator wird wie du schon bemerkt hast oft ein Bit gesetzt. Um den Quelltext übersichtlich zu halten schreibt man gerne sowas wie
Code:
Z80._r.f |= 0x80
als
Code:
Z80._r.f |= 1 << 7
Beides führt zu dem selben Ergebnis. Bei der letzteren Version sieht man allerdings auf den ersten Blick direkt, dass das 7. Bit gesetzt wird.

Quote:
Originally Posted by Cyb0r View Post
Edit:
So das habe ich nun verstanden, nun stellt sich mir jedoch nur eine Frage !
Wenn ich den Emulator Programmiere (z80/8080 Chip vom Gameboy) muss ich ja jede einzelne
Assembler Funktion nachprogrammieren.. und in diesen Funktionen muss ich immer jenach Funktion
einen Check machen, z.b auf Carryflag, Zeroflag usw - wo kann ich erkennen in welcher Funktion ich welche Checks machen muss? Steht dies irgendwo in einer Art Dokumentation,oder muss ich das selbst erkennen / rausfinden anhand der Funktion..?
Wenn man nach "Z80 Instruction Set" googlet findet man einiges zu diesem Thema.

ms​ is offline  
Old 04/12/2012, 01:27   #7
 
elite*gold: 0
Join Date: Jan 2010
Posts: 359
Received Thanks: 57
Gibts diese Flag-Infos zu jeder Anweisung auch etwas Informativer / Übersichtlicher?
Komme damit nicht richtig klar^^
Cyb0r is offline  
Reply

Tags
8080, emulator, operator, operatoren, z80


Similar Threads Similar Threads
Ein parr Verständniss Fragen. [AutoIT]
06/28/2011 - General Coding - 0 Replies
Grüße euch, undzwar wollte ich heute für ein Indie MMO ein Bot Enwickeln der Holz hacken geht. Dazu muss der Bot zu muss der Bot ja den Baum suchen , hinlaufen und einen Rechtsklick drauf machen. Baum finden + Rechtsklick macht man ja sicher mit PixelSearch. Wie mache ich das laufen jedoch? Ich dachte irgendwie ja an Coordinaten auslesen usw und im RAM rumschreiben usw. jedoch habe ich das Problem, wenn ich mit Cheatengine versuche eine Memory Adresse zu finden dass ich es nicht hin...
[Frage] Code
12/27/2010 - WarRock - 1 Replies
Hey Leute, Habe mal ne Frage^^. Gibt es wieder neue codes? Wie z.B. stayanonymouse^^ etc. Bitte Helft mir weiter will neue Waffen ;):handsdown::handsdown:
[Frage]VB2010 code frage
11/03/2010 - .NET Languages - 7 Replies
hi leute normaler weise birnge ich mir mein vb mit tuts und so selber bei und suche mir auch die dinge wo ich brauche selbst.nun aber mal ne frage zu nem code. und zwar will ich einen Programm starter machen.Es soll für die metin2 pserver section.also ein starter ohne patch finktion. und da hab ich ein problem ich will dort z.B.: die mc.exe oder metin2client.bin starten. aber sie sind ja nicht bei jedem im gleichen archiv. wie bekomme ich das hin das er sie aus dem ordner startet wo...
[Exclusive]No More Need For Port 80 Or 8080!
05/21/2010 - CO2 PServer Guides & Releases - 10 Replies
Ok here it is guys. I just found out a way to get people to see and register on my register page without them needing to go to my ip or even needing port 80 or 8080 open. First: Download opera at this link. Opera browser | Faster & safer internet | Free download Second: After installing opera run it and open the panel located at the bottum of opera on the left had side. http://i43.tinypic.com/2cofs40.png
119.70.40.102 Port: 8080 [Webzen Site ok?]
04/16/2010 - Archlord - 11 Replies
hi guys a friend gave me this ip to use on Firefox: 119.70.40.102 port: 8080 i went to another pc and i was able to open Webzen site. what im wondering if the plp that use that proxy can get hack his account for using it.



All times are GMT +1. The time now is 05:22.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.