Bits lesen/setzen
-
Es wäre eigentlich schon wichtig, dass die Bits in dieser Reihenfolge ausgelesen werden können, da ich diese Funktionen wie gesagt in einer kleinen CPU-Emulation benutzen werde.
Die CPU arbeitet auch mit dieser Reihenfolge.
Was aber möglich wäre, irgendwie die Zahlen verändern, also z.B.:
7 -> 1
8 -> 0
6 -> 2
5 -> 3Dann könnte ich vor dem eigentlichen setBit oder getBit Aufruf die Zahl einfach verändern und diese dann auslesen lassen.
-
Spongy schrieb:
Was aber möglich wäre, irgendwie die Zahlen verändern, also z.B.:
7 -> 1
8 -> 0
6 -> 2
5 -> 3rechts = 8 - links
-
Spongy schrieb:
Die CPU arbeitet auch mit dieser Reihenfolge.
Ob wir Dir das glauben wollen? Nee, gell, besser nicht.
Schau mal auf Seite 36 von http://www.google.de/url?sa=t&rct=j&q=gameboy cpu instructions&source=web&cd=1&sqi=2&ved=0CBwQFjAA&url=http%3A%2F%2Fmarc.rawer.de%2FGameboy%2FDocs%2FGBCPUman.pdf&ei=PhKsToyfCoaSswbA0c3eDw&usg=AFQjCNFq8XS_4abuA0d4DDsLMAhiG70LHw&sig2=du35gRLnTzZ61QOcTsQ56A&cad=rja
(Die Google-Links werden auch immer schlechter)LD A,$20 <- bit 5 = $20
-
Spongy schrieb:
Die Beispiele die hier gepostet wurden haben nicht richtig funktioniert, was genau war habe ich in einem Post vor diesem geschrieben.
Die bits sind so durchnummeriert: 012345678
Also haben deine Bytes 9 Bits?
-
LD A,$20 LD ($FF00),A LD A,($FF00) LD A,($FF00) CPL AND $0F
Setzt kein einzelnes Bit.
Wenn $20 (Hex = 20h, Dezimal = 32) in den unteres Teil des AF Registers (A, Akkumulator) geschrieben wird steht darin 00100000.Was da mit Bit 5 = $20 gemeint ist versteh ich nicht so wirklich.
Der LD OpCode weist aber nur einem Register einen bestimmten Wert oder ein anderes Register zu (So ähnlich wie der mov Befehl im x86/x64 Assembler).
Die CPU selber besitzt auch glaube ich nur wenige OpCodes die gezielt ein Bit testen.
Ich brauche die Funktionen öfter wenn ich Flags im Flag-Register (F von AF) setzen muss.Nein, meine Bytes haben keine 9 Bits, ich meinte 12345678
-
Spongy schrieb:
LD A,$20 LD ($FF00),A LD A,($FF00) LD A,($FF00) CPL AND $0F
Setzt kein einzelnes Bit.
Wenn $20 (Hex = 20h, Dezimal = 32) in den unteres Teil des AF Registers (A, Akkumulator) geschrieben wird steht darin 00100000.Was da mit Bit 5 = $20 gemeint ist versteh ich nicht so wirklich.
Na, es klappr mit dieser Bitnummerierung und nicht anders.
76543210
00100000
LD A,$20 setzt genau ein Bit und zwar das Bit 5.Spongy schrieb:
Der LD OpCode weist aber nur einem Register einen bestimmten Wert oder ein anderes Register zu (So ähnlich wie der mov Befehl im x86/x64 Assembler).
Die CPU selber besitzt auch glaube ich nur wenige OpCodes die gezielt ein Bit testen.
Ich brauche die Funktionen öfter wenn ich Flags im Flag-Register (F von AF) setzen muss.Nein, meine Bytes haben keine 9 Bits, ich meinte 12345678
Mit der üblichen Bitnummerierung (76543210) würdest Du weniger Ärger haben, denn sowohl die Dokumentation von x86/x64 als auch die zum GameBoy benutzen diese Nummerierung.
Siehe auch Seiten die 99ff. Da wird oft von Bit 0 oder Bit 7 gesprochen und mit (76543210) ergibt das für mich am meisten Sinn.
-
Okay, ich werde dann die Funktionen von wikipedia benutzen und erstmal die Emulation soweit programmieren, dass ich diese Funktionen das erste mal brauche.
Wenn es dann noch fragen geben sollte eröffne ich ein neues Thread.
Danke für die Hilfe!
-
Es heißt "der Thread".
-
314159265358979 schrieb:
Es heißt "der Thread".
Unser SW-Chef sagt tatsächlich immer "die Thread" (und ignoriert bei der Aussprache völlig das 'h').
-
Unser Lehrer im Programmieren sagt immer "Sread".