ZX Spectrum > PROGRAMOWANIE
Skopiowanie większej ilości danych do RAM
siudym:
Witam :) Jestem nowy w temacie Z80 i sprawia mi on sporo problemów...
Chciałbym skopiować pewną ilość bajtów do RAM, ale dosyć nietypowo bo muszą być skopiowane co drugie bajty. Plik binarny INCBIN ma rozmiar 2KB, ale w ram będzie zajmował 1KB czyli kopiowane będą tylko parzyste bajty licząc od pierwszego. Np. 00,02,04,06,08 itd itd.
Kombinuje i nic za bardzo nie działa, kopiowany jest tylko jeden bajt z incbin do ram.
Adres w pamieci np. D000 do D3FF czyli 1024bajty w RAM zajete.
--- Kod: ---CopyNT:
ld hl,NameTable ; Location of tile data
ld bc,NameTableSize ; Counter for number of bytes to write
CopyNT_Loop:
ld a,(hl) ; Get data byte
ld ($D000),a ; Wram address
inc hl ; Point to next tile
inc hl ; 2x inc hl to skip every other byte and copy to wram only every (even) first byte of the tile (1KB)
dec bc
dec bc
ld a,b
or c
jr nz,CopyNT_Loop
ret
NameTable: ; 2KB nametable binary
.incbin "nametable.bin" fsize NameTableSize
--- Koniec kodu ---
opcja 2, tez nie dziala:
--- Kod: ---copy:
ld hl,NameTable
ld bc,NameTableSize
ld de, $D000
copy_loop:
ldi
inc hl
inc hl
jp po,copy_loop
ret
--- Koniec kodu ---
steev:
Spróbuj :
--- Kod: --- org 32768
ld hl, 0 ; źródło
ld de, 16384 ; cel
ld bc, 2048 ; licznik
loop:
ldi
inc hl
ld a,b
or c
jr nz,loop
ret
--- Koniec kodu ---
siudym:
Dziala, dzieki! :) Sam system inny niz ZX Spectrum bo Sega Mark III.
--- Kod: ---
ld hl,NameTable ; źródło
ld de,$C000 ; cel
ld bc,NameTableSize ; licznik
loop:
ldi
inc hl
ld a,b
or c
jr nz,loop
--- Koniec kodu ---
Dalthon:
Mała podpowiedź czemu nie działa:
--- Cytuj --- ld a,(hl) ; Get data byte
ld ($D000),a
--- Koniec cytatu ---
Nie ma prawa zadziałać bo zapisujesz każdą pobraną wartość w jedno i to samo miejsce pamięci $d000
--- Cytuj ---copy_loop:
ldi
inc hl
inc hl
jp po,copy_loop
--- Koniec cytatu ---
Tutaj problemem jest to że warunkowy skok odnosi się do zwiększania HL - co też nie ma prawa zadziałać ;)
siudym:
Tak, już wcześniej przeanalizowałem kod :) Powoli ogarniam 16-bitowe rejestry, tylko trzeba szukać przykładów bo goła teoria jakoś słabo mi wchodzi.
Nawigacja
[#] Następna strona
Idź do wersji pełnej