OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů
Právě je 18 led 2018, 06:53

Všechny časy jsou v UTC + 1 hodina




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 21 ]  Přejít na stránku Předchozí  1, 2
Autor Zpráva
PříspěvekNapsal: 04 lis 2015, 21:02 
Offline
Radil

Registrován: 07 črc 2013, 23:28
Příspěvky: 439
Has thanked: 42 times
Been thanked: 61 times
Busy píše:
Pokial chces aby sa to po uspesne aktivovanom error handleri korektne vratilo z USR do basicu, je nutne pred navratom nastavit tienove HL na hodnotu #2758:
Kód:
ld  a,255    ; aby Ok,0:1
ld  (iy+0),a
ld  hl,#2758   <= toto je nove
exx            <= toto je nove
ret          ; navrat do Basicu
Pokial to tak nespravis, funkcia USR sa z toho psychicky zosype... :shrug:

No,... Zatím jsem se z toho psychicky zosypával tak nanejvýš já :-) Jak píšou na straně 202 Komentovaného výpisu ZX Rom, "Je zajímavé, že registrový pár IY je znovu nastaven na svou původní hodnotu po návratu přes STACK-BC, ale důležitý ukazatel na poslední literál, který je v H’L‘, obnoven není. Proto pro úspěšný návrat do BASICu musí zrcadlové HL obsahovat adresu instrukce "end-calc" v podprogramu SCANNING, která je na adrese #2758."
Inu, jak prosté...

Busy píše:
A este dva postrehy:
Kód:
ld  a,255    ; aby Ok,0:1
ld  (iy+0),a
Staci rovno napisat ld (iy+0),255

Kód:
call FP_TO_BC ; do BC vysledek
ret
A tu zase staci rovno napisat jp FP_TO_BC

Jj, normálně bych to udělal stejně, ale chtěl jsem mít zdrojáky křišťálově čisté ;-)


Nahoru
 Profil  
 
PříspěvekNapsal: 05 lis 2015, 08:19 
Offline
Pan Štábní

Registrován: 22 kvě 2013, 20:14
Příspěvky: 1755
Bydliště: Bratislava
Has thanked: 178 times
Been thanked: 315 times
tomascz píše:
Jak píšou na straně 202 Komentovaného výpisu ZX Rom, "Je zajímavé, že registrový pár IY je znovu nastaven na svou původní hodnotu po návratu přes STACK-BC, ale důležitý ukazatel na poslední literál, který je v H’L‘, obnoven není. Proto pro úspěšný návrat do BASICu musí zrcadlové HL obsahovat adresu instrukce "end-calc" v podprogramu SCANNING, která je na adrese #2758."
Ano, je to jedna z chyb v romke. Register IY sa pouziva na adresaciu systemoviek, preto musi byt nastaveny na #5C3A. Autori romky nezabudli na moznost ze ho uzivatel zmeni a nevrati nazad, preto hned ako uplne prva instrukcia v romke sa vykona prave to LD IY,#5C3A. Ale popritom uplne zabudli na HL' - asi ich nenapadlo, ze uzivatelsky program moze urobit aj EXX. :shrug:
tomascz píše:
Jj, normálně bych to udělal stejně, ale chtěl jsem mít zdrojáky křišťálově čisté ;-)
Ja si zase pod pojmom krystalovo cisty zdrojak predstavujem nieco kde nie su rozne do oci bijuce neefektivity tohto typu :poke: :lol:


Nahoru
 Profil  
 
PříspěvekNapsal: 05 lis 2015, 08:43 
Offline
Kecálek
Uživatelský avatar

Registrován: 19 črc 2013, 13:21
Příspěvky: 136
Bydliště: Košice
Has thanked: 45 times
Been thanked: 110 times
tomascz píše:
Busy píše:
Kód:
ld  a,255    ; aby Ok,0:1
ld  (iy+0),a
Staci rovno napisat ld (iy+0),255

Kód:
call FP_TO_BC ; do BC vysledek
ret
A tu zase staci rovno napisat jp FP_TO_BC

Jj, normálně bych to udělal stejně, ale chtěl jsem mít zdrojáky křišťálově čisté ;-)
To je nejaky zvlastny typ trollingu? :scratched:


Nahoru
 Profil  
 
PříspěvekNapsal: 05 lis 2015, 09:40 
Offline
Radil

Registrován: 07 črc 2013, 23:28
Příspěvky: 439
Has thanked: 42 times
Been thanked: 61 times
Busy píše:
tomascz píše:
Jj, normálně bych to udělal stejně, ale chtěl jsem mít zdrojáky křišťálově čisté ;-)
Ja si zase pod pojmom krystalovo cisty zdrojak predstavujem nieco kde nie su rozne do oci bijuce neefektivity tohto typu :poke: :lol:

mborik128 píše:
tomascz píše:
Jj, normálně bych to udělal stejně, ale chtěl jsem mít zdrojáky křišťálově čisté ;-)
To je nejaky zvlastny typ trollingu? :scratched:

Dobře, tak mohl jsem použít ozačení "zdroják jasný naprosto každému", ale grossův výrok mi přišel podobně vhodný, navíc i mírně vtipný :-)


Nahoru
 Profil  
 
PříspěvekNapsal: 05 lis 2015, 09:51 
Offline
Pan Štábní

Registrován: 22 kvě 2013, 20:14
Příspěvky: 1755
Bydliště: Bratislava
Has thanked: 178 times
Been thanked: 315 times
tomascz píše:
mborik128 píše:
tomascz píše:
Jj, normálně bych to udělal stejně, ale chtěl jsem mít zdrojáky křišťálově čisté ;-)
To je nejaky zvlastny typ trollingu? :scratched:
Dobře, tak mohl jsem použít ozačení "zdroják jasný naprosto každému", ale grossův výrok mi přišel podobně vhodný, navíc i mírně vtipný :-)
Existuje niekto, komu je jasne ld a,255 : ld (iy+0),a ale ma problem pochopit ld (iy+0),255 ??? :?: :shock:


Nahoru
 Profil  
 
PříspěvekNapsal: 05 lis 2015, 11:02 
Offline
Radil

Registrován: 07 črc 2013, 23:28
Příspěvky: 439
Has thanked: 42 times
Been thanked: 61 times
No, já už bych možná zbytečnou debatu ukončil a řeknu jen, že konkrétně u těchto dvou zmiňovaných instrukcí byl můj původní záměr opravdu mít hodnotu 255 jak na adrese (IY+0), tak v akumulátoru - jednoduše proto, že se mi nechtělo bádat, jestli rutina v ROMce testuje akumulátor nebo (IY+0). Proto tedy nebyla použita přímo instrukce "Ld (IY+N),M". Žel bohu pro získání "Ok, 0:1" nezabírala ani jedna varianta - až ta třetí s HL' a Exx...
Kombinace Call a Ret je samozřejmě jasně zdrcnutelná do JP, resp. JR. Protože ale se ptám v sekci "ZX Spectrum začátečníci", bral jsem ohled na to, že Ret na konci rutiny je pro každého jasnějším signálem jejího konce než JP.
Tím bych tedy debatu ukončil. Získání celého kladného čísla jsem nakonec vyrobil kombinací všech zde zmíněných postupů, tj. svého (filtrování kláves 0-9), busyho (buffrování vstupu) a Val (kalkulátor). Případ Val(""), který opět produkuje Nonsense, řeším tím, že jako prvním znakem v buffru je natvrdo znak nula a uživatelův ciferný text začíná až na pozici "Buffer+1" - příkaz Val(Buffer) tedy vždy vyhodnotí minimálně text "0" (signál nesmyslu v oboru celých kladných čísel). Mohl bych testovat rovnou, jestli délka vstupního řetězce je nulová, ale to je věcí konečné optimalizace - aktuálně řeším další věci.
Zpracování chyb (tj. odchytávání výjimek jak poradil busy) tedy momentálně nevyužívám - bude se ale hodit pro odchytávání výjimek produkovaných MDOSem v utilitě, na které teď dělám.


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

Všechny časy jsou v UTC + 1 hodina


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