OldComp.cz

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


Právě je 28.03.2024, 15:31

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




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 7 ] 
Autor Zpráva
 Předmět příspěvku: ZX ROM různé...
PříspěvekNapsal: 08.12.2021, 20:51 
Offline
Pan Generální
Uživatelský avatar

Registrován: 18.05.2013, 14:56
Příspěvky: 2331
Has thanked: 303 times
Been thanked: 637 times
Co udělá toto volání?
Kód:
ld      a,#fe
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
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
Kód:
ld      a,2
call    #1601
Tak tím inicializuji výpis na obrazovku shodný s příkazem PRINT v BASICu do oblasti řádků 0 až 21.

Ale není mi jasné to číslo kanálu #fe (tj. -2).

_________________
https://cygnus.speccy.cz ZX Spectrum 128k, Betadisk, DivIDE, ESXDOS


Nahoru
 Profil  
 
 Předmět příspěvku: Re: ZX ROM různé...
PříspěvekNapsal: 08.12.2021, 22:27 
Offline
Kecálek

Registrován: 10.07.2014, 01:57
Příspěvky: 168
Has thanked: 25 times
Been thanked: 225 times
zxcygnus píše:
Co udělá toto volání?
Kód:
ld      a,#fe
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
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
Kód:
ld      a,2
call    #1601
Tak tím inicializuji výpis na obrazovku shodný s příkazem PRINT v BASICu do oblasti řádků 0 až 21.

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


Nahoru
 Profil  
 
 Předmět příspěvku: Re: ZX ROM různé...
PříspěvekNapsal: 08.12.2021, 23:06 
Online
Óm Nejvyšší

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


Nahoru
 Profil  
 
 Předmět příspěvku: Re: ZX ROM různé...
PříspěvekNapsal: 11.12.2021, 13:17 
Offline
Pan Generální
Uživatelský avatar

Registrován: 18.05.2013, 14:56
Příspěvky: 2331
Has thanked: 303 times
Been thanked: 637 times
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
20 LET b = 222
30 LET c = 333
40 RANDOMIZE a+b/(c/USR 32768)
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ě.
Kód:
        cpu     z80undoc
        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
Po zredukování na jeden parametr to pak vypadá takto:
Kód:
10 LET a = 111
20 RANDOMIZE a/USR 32768
nebo
20 RANDOMIZE a/USR VAL "32768"
A k tomu minimalistický stroják.
Kód:
        cpu     z80undoc
        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
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.
Kód:
10 LET b=USR 40000
20 PRINT b
a k tomu
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.

_________________
https://cygnus.speccy.cz ZX Spectrum 128k, Betadisk, DivIDE, ESXDOS


Naposledy upravil zxcygnus dne 11.12.2021, 15:52, celkově upraveno 1

Nahoru
 Profil  
 
 Předmět příspěvku: Re: ZX ROM různé...
PříspěvekNapsal: 11.12.2021, 14:18 
Online
Óm Nejvyšší

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


Nahoru
 Profil  
 
 Předmět příspěvku: Re: ZX ROM různé...
PříspěvekNapsal: 11.12.2021, 15:33 
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
Zaujímavý spôsob.

V tom prvom príklade má byť zrejme
Kód:
        pop    de
        pop    hl

_________________
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ředmět příspěvku: Re: ZX ROM různé...
PříspěvekNapsal: 11.12.2021, 15:52 
Offline
Pan Generální
Uživatelský avatar

Registrován: 18.05.2013, 14:56
Příspěvky: 2331
Has thanked: 303 times
Been thanked: 637 times
rombor píše:
Zaujímavý spôsob.

V tom prvom príklade má byť zrejme
Kód:
        pop    de
        pop    hl
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.

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.


Přílohy:
screenshot_02.png
screenshot_02.png [ 15.73 KiB | Zobrazeno 4548 krát ]

_________________
https://cygnus.speccy.cz ZX Spectrum 128k, Betadisk, DivIDE, ESXDOS
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ů: 7 ] 

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