OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů


Právě je 28.03.2024, 23:23

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 5 ] 
Autor Zpráva
PříspěvekNapsal: 02.06.2015, 11:23 
Offline
Radil

Registrován: 21.10.2013, 09:25
Příspěvky: 286
Has thanked: 161 times
Been thanked: 116 times
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


Nahoru
 Profil  
 
PříspěvekNapsal: 02.06.2015, 12:04 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3642
Bydliště: Bratislava
Has thanked: 371 times
Been thanked: 788 times
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 :)


Nahoru
 Profil  
 
PříspěvekNapsal: 02.06.2015, 20:29 
Offline
Radil
Uživatelský avatar

Registrován: 13.05.2013, 17:48
Příspěvky: 529
Bydliště: Košice
Has thanked: 423 times
Been thanked: 265 times
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.

_________________
https://pmd85.borik.net - PMD 85 Emulátor, PMD 85, PMD 32-SD
https://pp01.borik.net - PP 01 Emulátor, PP 01, SD-ROM Modul


Nahoru
 Profil  
 
PříspěvekNapsal: 03.06.2015, 07:27 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3642
Bydliště: Bratislava
Has thanked: 371 times
Been thanked: 788 times
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.


Nahoru
 Profil  
 
PříspěvekNapsal: 03.06.2015, 10:36 
Offline
Radil

Registrován: 21.10.2013, 09:25
Příspěvky: 286
Has thanked: 161 times
Been thanked: 116 times
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 :)....


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 5 ] 

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 1 návštěvník


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz