ZX Spectrum > PROGRAMOWANIE

kod 6502 na Z80 (adresowanie bezwgledne indexowane)

<< < (3/4) > >>

siudym:
Ja w sumie malo kiedy w swoich grach uzywam 16-bitow :) Moze kilka przypadkow gdy kopiowane sa jakies wieksze tablice :D


--- Kod: ---ld hl,$C000
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 ---

kurcze nie dziala, cokolwiek zaladuje w temp to pod adresem C000 mam 00

steev:
A, jednak się nie dogadaliśmy.
Czy zmienna pod adresem $c000 jest 8 czy 16-bit?
(sugeruję zapisywać problem w pseudokodzie, c, pascalu, basicu... łatwiej dotrze do ludzi nie łapiących 65xx :) )

siudym:

--- Cytat: steev w 2021.10.22, 22:40:37 ---A, jednak się nie dogadaliśmy.
Czy zmienna pod adresem $c000 jest 8 czy 16-bit?
(sugeruję zapisywać problem w pseudokodzie, c, pascalu, basicu... łatwiej dotrze do ludzi nie łapiących 65xx :) )

--- Koniec cytatu ---

EDIT. To ja tez ciala dalem, bo przeciez w taki sposob nie bede mial nic w komorce pamieci C000  :D Mozliwe kod jest ok, tylko jak teraz sprawdzic jaki adres ma w sobie HL? Musze jakos w debbugerze sprawdzic.

EDIT2: Ok wszystko gra, dzieki wielkie. Zapisalem sobie adres HL do innej komorki pamieci aby miec wizualizacje i widze jest ok :) Podglad wartosci rejestru HL takze pokazuje poprawnie wszystko. Sam sie zakrecilem... ;)


--- Kod: --- ld a,$20                      ;testowo wartosc 20
ld (temp),a

LD HL,$C000
ld a,(temp)
ld d,0
ld e,a   ; de = (temp)
add hl,de
add hl,de
add hl,de
add hl,de

ld ($C020),HL      ; sprawdzilem wynik i bylo w ram zapisane C080 wiec gra, zwiekszenie 8x mialem wynik C100 wiec HI zwiekszone takze

--- Koniec kodu ---

siudym:
Wracając do pytania z pierwszego postu - chyba powinno być ok, ale nie jest testowane (dzięki Dizzy9 za kod)


--- Kod: --- LD A,$20
LD D,0
LD E,A ; teraz w de bedzie $20 czyli wartosc jaka znajdować będzie sie na początku w Aku
ADD HL,DE
LD A,(HL)
LD D,E ;wrzucamy a do e, żeby mieć go w zapasie
LD HL,TileBits ;wrzucamy adres tablicy do hl
ADD HL,DE ;uzylismy de bo w d juz mamy zero z poprzedniego działania, oszczędzając cpu i rom
LD A,(HL) ;pobraliśmy bajt z tablicy TileBits

--- Koniec kodu ---

Pytanko jak w WLA-DX zdefiniować podobnie dzialajaca tablice "TileBits" zawierajaca zestaw STAŁYCH?

.define AirTile $00
.define SolidTile $01...
?

TileBits:
.byte AirTile
.byte SolidTile
.byte SolidTile...etc

steev:
<mode name="nokia-lumia">

Nie wiem jak w WLA_DX, ale w każdym w miarę normalnym assemblerze :


--- Kod: ---AirTile         equ $00
SolidTil        equ $01

TileBits:
    db  AirTile,AirTile,AirTile,SolidTil
    db  AirTile,SolidTil,SolidTil,AirTile
    db  AirTile,SolidTil,AirTile,SolidTil
    db  SolidTil,AirTile,AirTile,AirTile
    db  AirTile
    db  AirTile
    db  SolidTil
    db  AirTile
    db  AirTile
    db  SolidTil
    db  SolidTil

--- Koniec kodu ---

A w takim np. ZASM możesz nawet :


--- Kod: ---#define AirTile $00
#define SolidTile $01


TileBits:
.byte AirTile
.byte SolidTile
.byte SolidTile
--- Koniec kodu ---

</mode>

Nawigacja

[0] Indeks wiadomości

[#] Następna strona

[*] Poprzednia strona

Idź do wersji pełnej