ZX Spectrum > PROGRAMOWANIE
kod 6502 na Z80 (adresowanie bezwgledne indexowane)
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
[#] Następna strona
Idź do wersji pełnej