ZX Spectrum > PROGRAMOWANIE

kod 6502 na Z80 (adresowanie bezwgledne indexowane)

<< < (2/4) > >>

siudym:
Jeszcze mam taki problem - musze dodac do adresu wartosc zmiennej w temp 4x i zrobic to samo w kodzie Z80:


--- Kod: --- LDY #$04

TileCalc_Loop:

LDA <addrLO ; add the number of rows to the address 4 times
CLC
ADC <temp
STA <addrLO

LDA <addrHI
ADC #0
STA <addrHI

DEY
BNE TileCalc_Loop


--- Koniec kodu ---

dla Z80:


--- Kod: ---
LD HL,$C000
LD A,(temp)

ADD A,L ; A = A+L
LD L,A ; L = A+L
ADC A,H ; A = A+L+H+carry
SUB L ; A = H+carry
LD H,A ; H = H+carry

- nie wiem czy jest poprawnie teraz no i musze zrobic dodanie wartosci ze zmiennej temp do adresu w HL 4x (musi tak byc z pewnych wzgledow)

bo to chyba nie jest poprawnie?

ld a,(temp)
ld hl,$C000
add a,(hl)
add a,(hl)
add a,(hl)
add a,(hl)


--- Koniec kodu ---

trojacek:
Moim zdaniem lepiej (szybciej) jest wartość dodawaną najpierw przemnożyć przez 4, używając przesuwania bitowego.
Pytanie, jaki zakres ma mieć ta "zmienna", bo jak 0..255, to trzeba przesuwać na 16 bitach, by nic nie zgubić.

steev:
W sensie, dodajesz wartość zmiennej temp cztery razy do adresu w HL?
Nie bój się 16 bitów.

--- Kod: ---ld a,(temp)
ld d,0
ld e,a   ; de = (temp)
add hl,de
add hl,de
add hl,de
add hl,de  ; lame, ale proste do złapania

--- Koniec kodu ---

siudym:

--- Cytat: trojacek w 2021.10.22, 21:13:41 ---Moim zdaniem lepiej (szybciej) jest wartość dodawaną najpierw przemnożyć przez 4, używając przesuwania bitowego.
Pytanie, jaki zakres ma mieć ta "zmienna", bo jak 0..255, to trzeba przesuwać na 16 bitach, by nic nie zgubić.

--- Koniec cytatu ---

Dokladnie, jak przekroczy 255 to zwiekszy wyzszy bajt adresu. Jak w przykladzie 6502 - jak dodawanie przekroczy wartosc bajtu LO to zwiekszy HI o jeden.


--- Cytat: steev w 2021.10.22, 21:17:52 ---W sensie, dodajesz wartość zmiennej temp cztery razy do adresu w HL?
Nie bój się 16 bitów.

--- Koniec cytatu ---

Dokładnie, a gdy przekroczy LO zwieksza wyzszy bajt adresu o jeden. No wlasnie ja probuje ogarniac jakos te wyliczenia 16bitowe w Z80 ale na to trzeba czasu.

matofesi:

--- Cytat: siudym w 2021.10.22, 21:52:24 ---No wlasnie ja probuje ogarniac jakos te wyliczenia 16bitowe w Z80 ale na to trzeba czasu.

--- Koniec cytatu ---

Ja za to podziwiam ludzi robiących na 6502... Jak wy sobie radzicie bez normalnych 16bitowych rejestrów i arytmetyki na nich? To wszystko się nadrabia tymi dziwnymi trybami adresowania i faktem, że w zasadzie wszystkie rozkazy są szybkie jak skurczybyk? ;)

Chyba bym tak nie umiał ;)

Nawigacja

[0] Indeks wiadomości

[#] Następna strona

[*] Poprzednia strona

Idź do wersji pełnej