Forum: PC-Programmierung Z80 ASM , mein Plan geht nicht auf.


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Peter B. (funkheld)


Lesenswert?

Hallo, guten Tag.
Ich bekomme folgende Aufgabe nicht hin.

Ich möchte bitte 190x den Wert 255 an die aufsteigende Adressen 
übergeben von  M2Y. Die neue Adresse soll immer an scraddr übergeben 
werden und dann nach HL.

Wo ist bitten der Fehler?

Danke.

----------------------------
scr:

 ld hl,M2Y
 ld (scraddr),HL

 ld c,255
 ld a,0
mache:
 inc a
 cp 190
 ld hl,(scraddr)
 ld (hl),c

 inc HL
 inc hl
 ld (scraddr),hl
 jr nz,mache

ret

scraddr:
DW &0000

;M2 Y-Tabelle
M2Y:
DW &C000, &C800, &D000, &D800, &E000, &E800, &F000, &F800
DW &C050, &C850, &D050, &D850, &E050, &E850, &F050, &F850
DW &C0A0, &C8A0, &D0A0, &D8A0, &E0A0, &E8A0, &F0A0, &F8A0
DW &C0F0, &C8F0, &D0F0, &D8F0, &E0F0, &E8F0, &F0F0, &F8F0
DW &C140, &C940, &D140, &D940, &E140, &E940, &F140, &F940
DW &C190, &C990, &D190, &D990, &E190, &E990, &F190, &F990
.......
.......

von Mario M. (thelonging)


Lesenswert?

Die zweite Indirektion fehlt, d.h. Du musst erst die Adresse aus der 
Tabelle lesen und auf die gelesene Adresse das 0xFF schreiben. Obiges 
Programm überschreibt nur die Adresstabelle. Also ungefähr so:
1
mache:
2
 ld hl,(scraddr)
3
 ld e, (hl)
4
 inc hl
5
 ld d, (hl)
6
 inc hl
7
 ld (scraddr),hl
8
 ex hl, de
9
 ld (hl),c
10
 inc a
11
 cp 190
12
 jr nz,mache

: Bearbeitet durch User
von Peter B. (funkheld)


Lesenswert?

Danke funktioniert super.

Dieses habe ich noch umgestellt nach dem Z80-Buch ,weil es noch nicht 
lief.
ex hl, de  nach ex de,hl

Wie kann ich jetzt bitte bei einer beliebigen Adresse vom M2Y anfangen 
die ich als Anfang vorgebe?

Danke.

: Bearbeitet durch User
von Mario M. (thelonging)


Lesenswert?

Indem Du z.B. den Index an die Funktion übergibst.
1
; a = Index
2
scr:
3
 ld hl, M2Y
4
 ld e, a
5
 ld d, 0
6
 add hl, de
7
 add hl, de
8
 ld (scraddr), hl
9
10
mache:
11
 ld hl,(scraddr)
12
 ld e, (hl)
13
 inc hl
14
 ld d, (hl)
15
 inc hl
16
 ld (scraddr),hl
17
 ld l, e  ; statt ex de, hl
18
 ld h, d
19
 ld (hl),c
20
 inc a
21
 cp 190
22
 jr nz,mache
23
 ret

von Peter B. (funkheld)


Angehängte Dateien:

Lesenswert?

Du kennst dich Super aus.

Diese Tabelle ist für den CPC um die Linien untereinander zu Zeichnen.
Es wird senkrecht nach unten gezeichnet ab der Adresse &C000 , &c800 
usw.
Siehe Bild. Es sind 199 Byte nach unten bei X=0

In der x-Richtung sind es 80 Byte.
Um die x-Richtung zu ändern muss zu jeden Wert von der Tabelle die 
anzahl vom x festgelegt werden
Beim Wert &C000 + 79 wird in x-Richtung-79  das Byte ganz rechts 
gezeichnet.

x=45
Wie kann ich jetzt das Byte &c000 + 45 , &c800 + 45 festlegen.
Wie wird jetzt bitte der der Wert x=45 zu jeder Adresse zugerechnet bei 
deinem Beispiel?

Danke

---------------------------------
scr:

 ld hl,M2Y
 ld (scraddr),HL

 ld c,255
 ld a,0
mache:
 ld hl,(scraddr)
 ld e, (hl)
 inc hl
 ld d, (hl)
 inc hl
 ld (scraddr),hl
 ex de,hl
 ld (hl),c

 inc a
 cp 199

 jr nz,mache
ret

scraddr:
DW &0000

;M2 Y-Tabelle
M2Y:
DW &C000, &C800, &D000, &D800, &E000, &E800, &F000, &F800
DW &C050, &C850, &D050, &D850, &E050, &E850, &F050, &F850
DW &C0A0, &C8A0, &D0A0, &D8A0, &E0A0, &E8A0, &F0A0, &F8A0
DW &C0F0, &C8F0, &D0F0, &D8F0, &E0F0, &E8F0, &F0F0, &F8F0
DW &C140, &C940, &D140, &D940, &E140, &E940, &F140, &F940
DW &C190, &C990, &D190, &D990, &E190, &E990, &F190, &F990
DW &C1E0, &C9E0, &D1E0, &D9E0, &E1E0, &E9E0, &F1E0, &F9E0
DW &C230, &CA30, &D230, &DA30, &E230, &EA30, &F230, &FA30
DW &C280, &CA80, &D280, &DA80, &E280, &EA80, &F280, &FA80
DW &C2D0, &CAD0, &D2D0, &DAD0, &E2D0, &EAD0, &F2D0, &FAD0
.....
....
-------------------------

: Bearbeitet durch User
von Kurt (sommerwin)


Lesenswert?

Schon mit ldir probiert?
Das wär viel kürzer und schneller.

von Max M. (max_mueller)


Lesenswert?

woaaa, ein CPC:-)
Der steht hier neben mir der gute 6128:-)
Die CPC Gemeinde ist, denke ich, größer als die Linux Fanbase:-)
Der CPC macht einfach Spaß mit seinem hervorragenden Basic

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.