OldComp.cz
http://oldcomp.cz/

Výpočet adresy video RAM podle souřadnic X,Y (PMD)
http://oldcomp.cz/viewtopic.php?f=50&t=2715
Stránka 11

Autor:  mmartinka [ 02.06.2015, 11:23 ]
Předmět příspěvku:  Výpočet adresy video RAM podle souřadnic X,Y (PMD)

Po čase jsem se zastavil u PMDčka a tak mě napadlo že si zkusím napsat výpočet video ram podle souřadnic X,Y. Vím že Libor Lasota na svých stránkách má ukázku výpočtu adresy video ram pomocí tabulek. Ale raději si to zkusím spočítat sám i když to nebude tak optimalizované, hlavně když tomu budu rozumět :).

Souřadnici Y jsem zvládl, hodnotu Y zadávám do DE a výsledná adresa je v HL. Ale s X bojuji. Ano, mohu vydělit X/6 a získám tím adresu. I když to dělení 6 je šíleně dlouhé a pak také nevím jak z toho získat bitovou masku :?: . Je ještě nějaký rozumný způsob, nebo použítí tabulky s předdefinovanou adresou je nejrozumější?
Kód:
   lxi       h,0xc000h      ; poèáteèní adresa videoram

   ; začátek výpočtu souřadnice Y
   mov      d,e            ;5T
   ;--- reg E
   mvi      a,0x03h        ;7T
   ana      e              ;4T
   rrc                     ;4T
   rrc                     ;4T
   mov      e,a            ;5T
   ;--- celkem 25T
   ;--- reg D
   mov      a,d            ;5T
   rar                     ;4T
   rar                     ;4T
   ani      0x3Fh          ;7T
   mov      d,a            ;5T
   ;--- celkem 25T
   dad      d               ; sečíst adresy
   ; konec výpočtu souřadnice Y

Autor:  Busy [ 02.06.2015, 12:04 ]
Předmět příspěvku:  Re: Výpočet adresy video RAM podle souřadnic X,Y (PMD)

mmartinka píše:
Ale s X bojuji. Ano, mohu vydělit X/6 a získám tím adresu. I když to dělení 6 je šíleně dlouhé a pak také nevím jak z toho získat bitovou masku :?:
Bitovu masku ziskas tak ze vezmes zvysok po deleni X/6 a tolkokrat zarotujes jednicku vlavo.
mmartinka píše:
Je ještě nějaký rozumný způsob, nebo použítí tabulky s předdefinovanou adresou je nejrozumější?
Zalezi od toho, za akym ucelom cely ten prevod robis.
Pokial chces cely prevod optimalizovat na dlzku kodu, a univerzalnu rutinku delenia uz mas niekde nejaku hotovu, tak je toto dobry sposob.
Pokial ale chces tento prevod optimalizovat na rychlost, tabulky su ta jedina spravna cesta :)

Autor:  rombor [ 02.06.2015, 20:29 ]
Předmět příspěvku:  Re: Výpočet adresy video RAM podle souřadnic X,Y (PMD)

mmartinka píše:
Po čase jsem se zastavil u PMDčka a tak mě napadlo že si zkusím napsat výpočet video ram podle souřadnic X,Y.
V Monitore PMD 85-2 je rutina POSPOINT (8C94h) pre výpočet adresy bodu vo VRAM. Je síce redukovaná na šírku 256 bodov, ale X/6 je vyriešené veľmi dômyselným spôsobom. Rozšírenie na plnú šírku 288 bodov by nebolo zložité, bolo by ale samozrejme časovo náročnejšie.

Autor:  Busy [ 03.06.2015, 07:27 ]
Předmět příspěvku:  Re: Výpočet adresy video RAM podle souřadnic X,Y (PMD)

rombor píše:
V Monitore PMD 85-2 je rutina POSPOINT (8C94h) pre výpočet adresy bodu vo VRAM. Je síce redukovaná na šírku 256 bodov, ale X/6 je vyriešené veľmi dômyselným spôsobom.
Tam je namiesto delenia siestimi pouzite nasobenie jednou sestinou (resp. tretinou #55/#100) - podla mna tiez skvely sposob, sam som ho vo svojich efektoch uz zoparkrat pouzil. Je to taky zaujimavy kompromis medzi kratkym ale pomalym poctivym delenim a dlhymi ale rychlymi tabulkami.

Ked uz o tom pisem - pokial nevadi, ze kod sa bude vykonavat pomaly (nepotrebujes kreslit v realnom case) a nemas (nechces robit) poctive delenie, mozes pouzit klasicke odcitavacie delenie. V kratkej slucke budes od X suradnice odcitavat hodnotu 6 - kolkokrat sa ju podari odcitat, taky bude offset adresy vo videoramke a zvysok co zostane bude pozicia bitu v bajte videoramky. Tymto sposobom vyjde najkratsi kod.

Autor:  mmartinka [ 03.06.2015, 10:36 ]
Předmět příspěvku:  Re: Výpočet adresy video RAM podle souřadnic X,Y (PMD)

Díky ra rady.
Zatím to nedělám k konkrétnímu úkolu, spíš jsem si to chtěl zkusit napsat takovou vlastní PLOT funkci. No a pak zkusit SIN, COS a nějaké ty kruhy :)....

Stránka 11 Všechny časy jsou v UTC + 1 hodina [ Letní čas ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/