ZX Spectrum > PROGRAMOWANIE

Skopiowanie większej ilości danych do RAM

(1/14) > >>

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

[0] Indeks wiadomości

[#] Następna strona

Idź do wersji pełnej