Schneider / Amstrad CPC Forum

Amstrad / Schneider CPC => Programmierung => Thema gestartet von: oobdoo am 17. Februar 2017, 20:20:49

Titel: Z80 ist doof! (Oder wie geht das??)
Beitrag von: oobdoo am 17. Februar 2017, 20:20:49
Ich überlege gerade wie man in Z80 ne Addition durchführt.  :motz:

Beispiel:

ld hl,1000
ld d,255
ld b,77

Wie bekommt man ein HL+D+B hin und zwar so das in HL 1332 steht?  :(
Titel: Z80 ist Geil! (Oder das geht ganz einfach!!!)
Beitrag von: TFM am 17. Februar 2017, 21:37:32
Ich überlege gerade wie man in Z80 ne Addition durchführt.  Beispiel:
ld hl,1000
ld d,255
ld b,77
Wie bekommt man ein HL+D+B hin und zwar so das in HL 1332 steht?  :(

LD HL,1000
LD DE,255
LD BC,77

ADD HL,DE
ADD HL,BC

In diesem Fall wird die 16 Bit Addition des Z80 benutzt. Das Ergebnis befindet sich in HL.  :)
Titel: Re: Z80 ist doof! (Oder wie geht das??)
Beitrag von: oobdoo am 17. Februar 2017, 22:29:58
Mein Problem ist immer noch das ganze mit High/Low Byte, Carry usw.

Habe es jetzt so gelöst:  :irre:

ld hl,1000

 ld d,0
 ld a,(XaltDurch8)
 ld e,a
 add hl,de

 ld d,0
 ld a,(YaltMal3)
 ld e,a
 add hl,de

Mit fehlt ein "ADD HL,wert" und ähnliches im Z80.
Titel: Z80 ist einfach nur Spass!
Beitrag von: TFM am 01. März 2017, 16:28:04
Es geht auch ein bischen schneller...


 ld hl,1000

 ld d,0
 ld a,(XaltDurch8)
 ld e,a
 add hl,de

 ld a,(YaltMal3)
 ld e,a
 add hl,de


Oder alternativ...


 xor a,a              ;A = 0 (doppelt so schnell wie ld a,0)

 ld  hl,1000

 ld  de,(XaltDurch8)
 ld  d,a              ;D = 0 setzen
 add hl,de

 ld  de,(YaltMal3)
 ld  d,a
 add hl,de
Titel: Re: Z80 ist doof! (Oder wie geht das??)
Beitrag von: oobdoo am 01. März 2017, 23:02:06
Danke, werde ich mir demnächst genauer anschauen.
Titel: Re: Z80 ist doof! (Oder wie geht das??)
Beitrag von: TFM am 30. April 2020, 16:17:46
Hier noch ein paar Optimierungen:

http://z80-heaven.wikidot.com/optimization