Násobení čísel v Assembleru (by mike/ZT)
23. 4. 2019
RESET (by Mike/ZT)
23. 4. 2019

ATTR souřadnice (by Mike/ZT)

Povedlo se mi vyhrabat pár článků ze starého webu MB Maniax a vzhledem k tomu, že tam jsou občas články zajímavé je škoda se o ně nepodělit.
Určite ste vo svojich programoch prišli k zaujímavému problému, ako previesť 'atribútové' súradnice na pixelovú adresu vo videopamäti. Ale no tak, aspoň jeden z Vás určite áno. Keďže Spectrum nemá lineárne adresovanie videopamäti, treba skutočnú adresu vypočítať. V prvom rade si zožeňte tabuľku adries videopamäti. Nájdete ju v napríklad v ZXM č. 06/94 alebo v tabuľke videopamäti od Nairama. Ako je známe, tak videopamäť je rozdelená na tri tretiny. Najprv si všimnime vyšší bajt adries prvých riadkov v atribútoch. Pre prvú tretinu je to #40, pre druhú #48 a pre tretiu #50. Skúsme si tieto čísla zapísať pod seba v dvojkovej sústave:

  01000000
  01001000
  01010000

Ukážme si teraz, ako vyzerajú niektoré Y-súradnice z prvej, druhej a tretej tretiny. Zoberme si napríklad 3, 12 a 22.

  00000011
  00001100
  00010110

A vida, každá tretina je už zakódovaná, ako v Y-súradnici, tak v hornom bajte adresy. Povedzme, že naša rutinka na výpočet pixelovej adresy očakáva súradnicu X v registri C a súradnicu Y v registri B a nazvime si ju napríklad CHCU_PIXEL_ADRESU. Môžeme teda začať s prvým krokom:

CHCU_PIXEL_ADRESU ld   a,b
                  and  11000b
                  add  a,40h
                  ld   h,a

Tak, vyšší bajt máme za sebou a skúsme sa pozrieť na nižší. Vezmime si začiatočné adresy (s X súradnicou rovnou nule). Opakujú sa tam čísla #00, #20, #40, #60, #80, #A0, #C0 a #E0. Napíšme si ich teda znova pod seba v dvojkovej sústave.

  00000000
  00100000
  01000000
  01100000
  10000000
  10100000
  11000000
  11100000

Určite už radostne vykrikujete: "Aha, stačí rotovať Y súradnicu o 5 bitov doľava". Áno, určite máte pravdu, ale čo by sa stalo, keby sme ju rotovali o 3 bity doprava? Určite na správnu odpoveď príjdete aj sami. Pozor na nechcené bity, tie treba vynulovať dobre miereným andom. K takto pripravenej adrese ešte pričítame X súradnicu. Pozor na to, aby súradnica neprekročila rozmedzie 0-31. Skúsme teda doplniť náš program.

CHCU_PIXEL_ADRESU ld   a,b    ;vstup: reg.C - X, reg.B - Y
                  and  11000b ;výstup: HL - adresa vo videopamäti
                  add  a,40h
                  ld   h,a
                  ld   a,b
                  and  111b
                  rrca
                  rrca
                  rrca
                  add  a,c
                  ld   l,a
                  ret


Tak a to je všetko, čo by Vám malo stačiť ako odpoveď na Vašu otázku 'Ako získať pixelovú adresu z atribútových súradníc' a hanbili ste sa ma opýtať.

mikezt

1505total visits,1visits today

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *