Schneider / Amstrad CPC Forum

Amstrad / Schneider CPC => Programmierung => Topic started by: oobdoo on 17. February 2017, 20:20:49

Title: Z80 ist doof! (Oder wie geht das??)
Post by: oobdoo on 17. February 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?  :(
Title: Z80 ist Geil! (Oder das geht ganz einfach!!!)
Post by: TFM on 17. February 2017, 21:37:32
Quote from: oobdoo on 17. February 2017, 20:20:49
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.  :)
Title: Re: Z80 ist doof! (Oder wie geht das??)
Post by: oobdoo on 17. February 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.
Title: Z80 ist einfach nur Spass!
Post by: TFM on 01. March 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

Title: Re: Z80 ist doof! (Oder wie geht das??)
Post by: oobdoo on 01. March 2017, 23:02:06
Danke, werde ich mir demnächst genauer anschauen.
Title: Re: Z80 ist doof! (Oder wie geht das??)
Post by: TFM on 30. April 2020, 16:17:46
Hier noch ein paar Optimierungen:

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