OldComp.cz

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

Reklama!

Právě je 13 pro 2018, 09:46

Všechny časy jsou v UTC + 1 hodina




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 50 ]  Přejít na stránku Předchozí  1, 2, 3, 4
Autor Zpráva
 Předmět příspěvku: Re: PROMETHEUS - zdrojový kód
PříspěvekNapsal: 03 pro 2018, 12:54 
Offline
Pan Generální

Registrován: 22 kvě 2013, 20:14
Příspěvky: 2041
Bydliště: Bratislava
Has thanked: 224 times
Been thanked: 378 times
rombor píše:
Pavel.Krivanek píše:
Docela by mě zajímalo, jakým způsobem tu tabulku pro tak rozsáhlý program zkonstruoval (přepočítávaných míst je asi 1200).
Neviem, ako to robil Universum, ale na CP/M sa to bežne robilo tak, že sa program preložil na dva krát od dvoch adries, obvykle vzdialených 0100h, a potom sa tieto dve binárky prehnali cez Program, ktorý hľadal práve tieto rozdiely, kde boli určite absolútne adresy a vytvoril tak relokačnú tabuľku.
Presne tak, staci program napisat uplne klasicky (s absolutnymi adresami), skompilovat dve verzie na dve rozne adresy, a potom uz len jedna kratka rutinka obe verzie porovna a zapise rozdiely, nuz a druha jednoducha rutinka, ktora bude so zoznamom zistenych rozdielov sucastou vysledneho kodu, len popripocita vhodnu konstantu vsade tam kam ukazuje zoznam rozdielov. A je to :) Vyhodou je, ze po takejto "instalacii" programu mozno rutinku aj so zoznamom rozdielov zahodit, lebo uz nie su potrebne a nimi zabratu pamet uvolnit.

Trosku mimo temu: Ja by som program prelozil na adresu nie vyssiu o #0100, ale napr. o #0201, a vsade kde by bol rozdiel 2, to by bol vyssi bajt, a vsade kde iba 1, to by bol nizsi bajt. Vychytalo by to aj rozne sposoby typu LD H,vyssi_bajt_adresy. Ale si tiez myslim, ze z cisto praktickeho hladiska uplne postaci moznost posuvania programu v pameti po #0100 bajtoch.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: PROMETHEUS - zdrojový kód
PříspěvekNapsal: 09 pro 2018, 22:36 
Offline
Prvnička

Registrován: 03 črc 2018, 22:06
Příspěvky: 18
Has thanked: 10 times
Been thanked: 12 times
Použil jsem data ze stávající rekokační tabulky k tomu, abych opravil nějaká místa v kódu, která před tím nebyla identifikována jako absolutní ukazatele či naopak jako ukazatelé byla identifikována chybně. Nyní jsem schopen pomocí dvojité kompilace s posunutím ORG vygenerovat relokační tabulky (jsou ve skutečnosti dvě) se stejným obsahem jako původní. Takže do budoucna budeme moci modifikovat Promethea při zachování jeho relokačních schopností.

Narazil jsem v jeho kódu na pár zajímavých míst. Třeba nastavení toho, jestli se písmena mají zobrazovat jako malá, velká či nezměněná, se řeší přímou modifikací kódu patřičné rutiny, což je samozřejmě pro běh nejrychlejší způsob. Na patřičné místo se jednoduše vlepí kód pro jednu z následujících možností (každá má 2 byty):

Kód:
caseModificationCodeOptions:
    and 0ffh  ; normal
    or 020h   ; lowercase
    and 0dfh  ; uppercase


Podobně se řeší to, jestli se fonty mají vykreslovat tučně. Nebo když chcete tisknout nějaký řetězec, umístí se literál s jeho obsahem přímo za volání tiskové rutiny (pomocí CALL). Ta si ze zásobníku vyzvedne adresu, která odpovídá začátku řetězce, a po vytištění skočí za jeho konec (JP, nikoliv RET), kde program vesele pokračuje.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: PROMETHEUS - zdrojový kód
PříspěvekNapsal: 10 pro 2018, 21:17 
Offline
Pan Štábní

Registrován: 29 čer 2013, 15:52
Příspěvky: 1455
Has thanked: 17 times
Been thanked: 241 times
Ja bych videl radeji Promethea upraveneho, aby pouzival zasobnik jen jako zasobnik, k nicemu jinemu. Tedy aby se nespolehal, ze jsou na zasobniku nejaka predpripravena data. Predpokladam, ze kazdy, kdo Promethea na ZX bude pouzivat, nejspis ho bude nahravat z Divide ci Divmmc (alespon ve vetsine pripadu). A da se logicky predpokladat, ze bude obcas uzivatel z Promika skakat do NMI menu ESXDOSu. A prave pri stisku NMI dochazi k prepsani zasobniku, coz by mohlo zpusobit poskozeni dat programu nebo zdrojaku. Nezkoumal jsem zdrojak a praci se zasobnikem, ale minimalne by stalo za to overit kdy a jak Promik pouziva registr SP. Kdyby nahodou opravdu zasobnik pouzival pro tabulky a podobne finty, u Divide/Divmmc je stale jeste moznost zablokovat docasne funkci tlacitka NMI, ci ho kdykoli podle potreby povolit.

_________________
http://velesoft.speccy.cz/


Nahoru
 Profil  
 
 Předmět příspěvku: Re: PROMETHEUS - zdrojový kód
PříspěvekNapsal: 11 pro 2018, 00:33 
Offline
Kecálek

Registrován: 18 říj 2014, 22:10
Příspěvky: 190
Has thanked: 12 times
Been thanked: 42 times
VELESOFT píše:
Ja bych videl radeji Promethea upraveneho, aby pouzival zasobnik jen jako zasobnik, k nicemu jinemu.
To si asi zle pochopil, aspoň v tomto prípade sa zásobník používa správne a nehrozí prepis od NMI. Podobne pracuje aj Calculator, za inštrukciou call, alebo rst sú data a tie si obslužná rutina vyberie z návratovej adresy, ktorá je uložená na zásobníku.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: PROMETHEUS - zdrojový kód
PříspěvekNapsal: 11 pro 2018, 10:57 
Offline
Pan Generální

Registrován: 22 kvě 2013, 20:14
Příspěvky: 2041
Bydliště: Bratislava
Has thanked: 224 times
Been thanked: 378 times
Pavel.Krivanek píše:
Nebo když chcete tisknout nějaký řetězec, umístí se literál s jeho obsahem přímo za volání tiskové rutiny (pomocí CALL). Ta si ze zásobníku vyzvedne adresu, která odpovídá začátku řetězce, a po vytištění skočí za jeho konec (JP, nikoliv RET), kde program vesele pokračuje.
VELESOFT píše:
Ja bych videl radeji Promethea upraveneho, aby pouzival zasobnik jen jako zasobnik, k nicemu jinemu. Tedy aby se nespolehal, ze jsou na zasobniku nejaka predpripravena data. ...
Pokial narazas na tie data za CALL, tak ako uz pisal Antony, v tomto pripade to nicomu nevadi a zasobnik sa stale pouziva korektne tak ako ma, takze ani prerusenie nerobi problem. Napriklad ZX romka tiez casto pouziva tuto koncepciu pristupu k datam a cele to v pohode a bez problemov bezi s povolenym prerusenim.


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ů: 50 ]  Přejít na stránku Předchozí  1, 2, 3, 4

Všechny časy jsou v UTC + 1 hodina


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 2 návštevní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