Z80 ASM , mein Plan geht nicht auf.

OP #7601588
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 ....... .......

#7601599
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
#7601633
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
OP #7601684
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 ..... ....

Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren