OldComp.cz https://www.oldcomp.cz/ |
|
ZX ROM různé... https://www.oldcomp.cz/viewtopic.php?f=124&t=10571 |
Stránka 1 z 1 |
Autor: | zxcygnus [ 08.12.2021, 20:51 ] |
Předmět příspěvku: | ZX ROM různé... |
Co udělá toto volání? Kód: ld a,#fe Následuje tisk hlášky s číslem 0..3 - což je podle DE typ souboru. Vím, že #1601 je podprogram CHAN-OPEN, kterým se dá přepnout na kanál kam se bude vypisovat pomocí RST #10, takže pokud použiju call #1601 ; volání CHAN-OPEN ld (iy+#52),3 ; SCR_CT - počet řádků, po jejichž vytisknutí na obrazovku se objeví otázka scroll ... ld de,#9c0 call #c0a ; volání PO-MSG Kód: ld a,2 Tak tím inicializuji výpis na obrazovku shodný s příkazem PRINT v BASICu do oblasti řádků 0 až 21.call #1601 Ale není mi jasné to číslo kanálu #fe (tj. -2). |
Autor: | ub880d [ 08.12.2021, 22:27 ] |
Předmět příspěvku: | Re: ZX ROM různé... |
zxcygnus píše: Co udělá toto volání? Kód: ld a,#fe Následuje tisk hlášky s číslem 0..3 - což je podle DE typ souboru. Vím, že #1601 je podprogram CHAN-OPEN, kterým se dá přepnout na kanál kam se bude vypisovat pomocí RST #10, takže pokud použiju call #1601 ; volání CHAN-OPEN ld (iy+#52),3 ; SCR_CT - počet řádků, po jejichž vytisknutí na obrazovku se objeví otázka scroll ... ld de,#9c0 call #c0a ; volání PO-MSG Kód: ld a,2 Tak tím inicializuji výpis na obrazovku shodný s příkazem PRINT v BASICu do oblasti řádků 0 až 21.call #1601 Ale není mi jasné to číslo kanálu #fe (tj. -2). ako hovori spektracka biblia: "Na počátků existuje sedm proudů: od #FD do #03." (vid. komentovany vypis rom [zenitcentrum, pdf od souftouse] na adrese #15C6) mam za to ze -3 az -1 su streamy, ktore clovek nevie zavriet cez CLOSE # a tym je zabezpecene ze ich basic moze vzdy pouzit. EDIT: teraz pozeram ze ani 0-3 sa zavriet nedaju. sice nevyhodia pri pokuse o zavretie chybu, ale sa po zavreti automaticky otvoria s defaultnymi kanalmi, ale tie -3 az -1 nejde overridnut inou hodnotou, kdezto 0-3 ano, vid: Kód: OPEN #2,"k"
PRINT "hello world": PAUSE 0 |
Autor: | Busy [ 08.12.2021, 23:06 ] |
Předmět příspěvku: | Re: ZX ROM různé... |
Stream #FE alebo -2 je to iste co 2 ale je otvoreny na "s" (t.j. horna cast obrazovky) bez moznosti ho presmerovat a (ako napisal ub880d) zavriet. |
Autor: | zxcygnus [ 11.12.2021, 13:17 ] |
Předmět příspěvku: | Re: ZX ROM různé... |
Při zkoumání D-Textu jsem narazil na zajímavý způsob, jak předávat parametry programu ve strojáku z BASICu bez POKE a to rovnou trojici 16 bit čísel bez znaménka. Doufám, že jsem v tom při zjednodušování nenadělal chyby. Fungovalo mi to. Kód: 10 LET a = 111 Záleží na tom, aby sčítání a dělení bylo tak, jak je, jinak se hodnoty neuloží na zásobník správně.20 LET b = 222 30 LET c = 333 40 RANDOMIZE a+b/(c/USR 32768) Kód: cpu z80undoc Po zredukování na jeden parametr to pak vypadá takto:org 32768 call 7833 ; #1e99 FIND-INT2 vyzvedne poslední hodnotu INT ze zásobníku do BC push bc call 7833 ; #1e99 FIND-INT2 vyzvedne poslední hodnotu INT ze zásobníku do BC push bc call 7833 ; #1e99 FIND-INT2 vyzvedne poslední hodnotu INT ze zásobníku do BC pop de pop hl ld (PARAM_1),hl ; uloží obsah a ld (PARAM_2),de ; uloží obsah b ld (PARAM_3),bc ; uloží obsah c ; 3x call 11560 zajišťuje, aby se proměnné po návratu do v BASICu nezměnily call 11560 ; #2d28 STACK-A vytvoří z hodn. v reg. A hodn. ve floating p. a uloží na zásobník call 11560 ; #2d28 STACK-A vytvoří z hodn. v reg. A hodn. ve floating p. a uloží na zásobník call 11560 ; #2d28 STACK-A vytvoří z hodn. v reg. A hodn. ve floating p. a uloží na zásobník ret PARAM_1 dw 0 ; bude obsah a PARAM_2 dw 0 ; bude obsah b PARAM_3 dw 0 ; bude obsah c Kód: 10 LET a = 111 A k tomu minimalistický stroják.20 RANDOMIZE a/USR 32768 nebo 20 RANDOMIZE a/USR VAL "32768" Kód: cpu z80undoc Nedá se použít LET b = a/USR ..., protože po návratu by se provedlo dělení proměnné a. Bylo by nutné volat LET b = USR... samostatně a pak se do proměnné b přenese obsah BC.org 32768 call 7833 ; #1e99 FIND-INT2 vyzvedne poslední hodnotu INT ze zásobníku do BC ld (PARAM_1),bc ; tady s tím BC něco dělej call 11560 ; #2d28 STACK-A vytvoří z hodn. v reg. A hodn. ve floating p. a uloží na zásobník ret PARAM_1 dw 0 Kód: 10 LET b=USR 40000 a k tomu20 PRINT b Kód: cpu z80undoc org 40000 ld bc,12345 ret Není mi jasné, jak to je s nutností dát do BC nenulovou hodnotu, aby se nedělilo nulou. Zdá se, že to potřeba není. Ale co s tím udělá STK-STORE a FP-CALC za všech okolností jsem netrasoval. Jen se mi nepodařilo to dostat do stavu, že by se nula v BC objevila po návratu z STACK-A. |
Autor: | Busy [ 11.12.2021, 14:18 ] |
Předmět příspěvku: | Re: ZX ROM různé... |
Ano tento sposob je zaujimavy tym ze vyuziva typicke zasobnikove vyhodnocovanie vyrazov, pri ktorom sa argumenty a medzivysledky ukladaju na zasobnik a vyberaju podla potreby. Ohladom toho prveho RANDOMIZE a+b/(c/USR 32768) je dolezite len to, aby operacie medzi a,b,c,USR mali postupne vzrastajucu prioritu. Tym padom sa nebudu rovno vykonavat, ale hodnoty sa budu iba ukladat na zasobnik, pretoze ako prva sa musi vykonat operacia s najvyssou prioritou, co je v nasom pripade unarna funkcia USR. Takze kludne by to mohlo byt aj trebars aj RANDOMIZE a+b*c^USR 32768. V pripade iba jedneho parametra je najjednoduchsie napisat RANDOMIZE a OR USR 32768 a potom je uplne jedno co sa vrati v BC, do RANDOMIZE pojde bud 1 alebo hodnota ktora sa hodi na zasobnik na konci kodu, a ak to bude nejaky integer (z registra A alebo BC) tak potom nic nezhavaruje a program pobezi dalej bez chyby. Pokial chceme aby strojak vratil hodnotu v BC, mozeme napriklad napisat LET vystup=vstup+USR 32768 kde na zaciatku strojaku si nacitame hodnotu zo "vstup" ulozenu na zasobniku a na konci strojaku ulozime na zasobnik nulu. Operacia scitania potom hodnotu BC vratenu cez USR scita s touto nulou a vysledok celeho vyrazu bude nasa hodnota vlozena do BC. |
Autor: | rombor [ 11.12.2021, 15:33 ] |
Předmět příspěvku: | Re: ZX ROM různé... |
Zaujímavý spôsob. V tom prvom príklade má byť zrejme Kód: pop de
pop hl |
Autor: | zxcygnus [ 11.12.2021, 15:52 ] | ||
Předmět příspěvku: | Re: ZX ROM různé... | ||
rombor píše: Zaujímavý spôsob. Ano, určitě mělo být. Moje chyba. Muselo se to tam vloudit při přeformátovávání do fóra. Dodatečně opravuji, aby to nemátlo.V tom prvom príklade má byť zrejme Kód: pop de pop hl A ještě jednu chybu jsem v tom spáchal - hodnoty jsou v opačném pořadí, proměnná c bude v HL a proměnná a bude v BC. Hodnoty v paměti pak budou v pořadí 333 (PARAM_1), 222 (PARAM_2), 111 (PARAM_3). Viz screenshot.
|
Stránka 1 z 1 | Všechny časy jsou v UTC + 1 hodina [ Letní čas ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |