OldComp.cz

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


Právě je 25.04.2024, 14:58

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




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 18 ]  Přejít na stránku 1, 2  Další
Autor Zpráva
PříspěvekNapsal: 12.02.2023, 18:22 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 09.10.2013, 19:04
Příspěvky: 1406
Has thanked: 130 times
Been thanked: 71 times
Mám otázku, že ako vytiahnuť rutinu z BASICu, tak, aby bola samostatne funkčná? Mám niekde disaassemblovaný BASIC, nieviem teraz presne, ktorý to je, či FD alebo QD. Osadenstvo fóra zrejme vie, o aký sa jedná, ale nie je to podstatné, keďže mi ide o rutinu pre príkaz MUSIC. Viem, že existuje tabuľka adries a viem si to podľa nej nájsť. Lenže MUSIC toho vyžaduje viac. Viem, že používa prerušenie pre prácu s čítačom 0, ktorý sa využíva na časovanie jednotlivých nôt a priebehu tónu. Má niekto nejaké znalosti, kde, čo vytiahnuť, aby som dostal čistý kód pre použitie? Použitie mám na mysli, napr., také, že si zoberiem OPENING DATA a miesto BASICu budem mať v pamäti moju rutinu a po zavolaní časti pre spustenie hudby to začne hrať. Myslím, že táto rutina je použitá preto, lebo umožňuje odohrať viac hudby naraz než len 255 znakov. Nejde mi síce len o MUSIC, ide mi o viac príkazov, takže by ma zaujímalo, na čo všetko si dať pozor a kde zhruba čo hľadať v kóde, aby mi nič nechýbalo. Pri grafických príkazoch mi je jasné, že treba mať inicializovanú grafiku, keďže BASIC beží v grafickom móde. Prípadne viete mi poradiť ďalšie tipy, na ktoré nezabudnúť? Je mi jasné, že nikto mi tu nedá rutinu MUSIC na tanieri, ja to ani nečakám. V podstate to ani nechcem. Skôr mi ide o to, čo všetko potrebujem a čo všetko BASIC upravuje, aby som sa na to mohol zamerať a v budúcnosti si zobrať hocijaký príkaz tak, aby bol plne funkčný. Hádam som to sformuloval dobre.

_________________
Sharp MZ-821
Milsa MZ-841


Nahoru
 Profil  
 
PříspěvekNapsal: 12.02.2023, 19:47 
Offline
Kecálek

Registrován: 04.02.2016, 10:21
Příspěvky: 91
Has thanked: 7 times
Been thanked: 18 times
Zkus si ten příkaz MUSIC odkrokovat v emulátoru debuggerem a uvidíš, kam to skáče a co použít.


Nahoru
 Profil  
 
PříspěvekNapsal: 12.02.2023, 19:51 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 09.10.2013, 19:04
Příspěvky: 1406
Has thanked: 130 times
Been thanked: 71 times
Tiež jedna z možností. Debugger mám v emulátore relatívne použiteľný. Skúsim aj to.

_________________
Sharp MZ-821
Milsa MZ-841


Nahoru
 Profil  
 
PříspěvekNapsal: 12.02.2023, 21:18 
Offline
Pan Štábní

Registrován: 11.11.2013, 10:29
Příspěvky: 1202
Has thanked: 367 times
Been thanked: 304 times
Tohle je typicky dotaz, jak se pomerne jednoduse zeptat na docela hodne komplexni otazku. Jednoducha odpoved by asi vydala na celou prednasku a pochybuji, ze to nekdo bude schopen dostatecne podrobne napsat.
Jestli mas disassemblovany BASIC, tak si najdi rutinu, ktera te zajima a uvidis hned, kde je potreba zavolat nejake dalsi podprogramy a co delaji. Take je potreba si nastavit tu cast prostredi, ktere se rutina tyka. Treba citace, promenne prostredi, stack, chybove rutiny, atd. To mas v disassembleru vsechno velice podrobne popsane. A pak uz jen ten cas, ktery tomu venujes ;-) Ja jsem takhle extrahoval rutinu na mluveni - VOICE nebo HCOPY a nakonec se ukazalo, ze to je docela jednoduche. Nobomi zase dodelal celou podporu pro SD kartu.
Jinak ciste filozoficky, na tvou vetu "Má niekto nejaké znalosti, kde, čo vytiahnuť, aby som dostal čistý kód pre použitie?". Odpoved na prvni cast otazky - ANO, na tu druhou cast NE. Nemuzu vedet, co potrebujes vytahnout. Nenapsal jsi treba takovou zakladni informaci, jestli budes mit ten BASIC po dobu behu tve rutiny v pameti nebo ne.
A jeste, pouziti emulatoru/debuggeru je asi nejrozumejsi napad, jak zjistit co dana rutina dela a jake vola dalsi rutiny. Tady ti opet nejvice pomuze zdrojovy kod BASICu.

Hodne stesti a hlavne to nevzdavat :-)

_________________
Sharp MZ-800++, MZ-1500++, MZ-2500++, SM-B-80T, MK-14_replica, HP-85, ZX-80+replica, ZX81, ZX-Spectrum+replica++, PMI-80+replica, SAM coupe++, PMD-85-2A+3, Didaktik-M, SORD-M5, TI-57, TI-59+PC-100, TI99/4A, ZetaV2+ppp, ZX-uno, Petr


Nahoru
 Profil  
 
PříspěvekNapsal: 13.02.2023, 11:20 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 09.10.2013, 19:04
Příspěvky: 1406
Has thanked: 130 times
Been thanked: 71 times
Mikes21 píše:
Nenapsal jsi treba takovou zakladni informaci, jestli budes mit ten BASIC po dobu behu tve rutiny v pameti nebo ne.

Myslíš? ;)
Citace:
Použitie mám na mysli, napr., také, že si zoberiem OPENING DATA a miesto BASICu budem mať v pamäti moju rutinu a po zavolaní časti pre spustenie hudby to začne hrať.

V každom prípade, ide mi o teóriu ako na to, takže si cením tvoju odpoveď. Konečne som sa dokopal k jednému môjmu projektu, hádam ho raz dokončím.

_________________
Sharp MZ-821
Milsa MZ-841


Nahoru
 Profil  
 
PříspěvekNapsal: 13.02.2023, 15:40 
Offline
Pan Štábní

Registrován: 11.11.2013, 10:29
Příspěvky: 1202
Has thanked: 367 times
Been thanked: 304 times
Ja jsem tim myslel, jestli tu rutinu zavedes do pameti z BASICu a pak ji spustis nebo ji budes mit v samostatnem programu. V prvnim pripade muze BASIC nastavit zakladni prostredi a v programu muzes volat jeho interni rutiny. A v druhem pripade si to musis pripravit sam.
Napriklad pri implementaci funkce HCOPY jsem ten prikaz presmeroval na svoji rutinu a v ni volam nektere funkce z BASICu (zjisti barvu bodu, vytiskni znak, atd.), ktery zustal v pameti. A pri chybe prikaz skoci zpet do BASICu a jede se dale v jeho rezii.
Mimochodem tahle rutina je 'vykradena' z EPROMky a je implementovana do BASICu. Podobne to bylo pri 'vykradeni' funkce VOICE z MZ-1500 a vlozeni do BASICU pro MZ-800.

_________________
Sharp MZ-800++, MZ-1500++, MZ-2500++, SM-B-80T, MK-14_replica, HP-85, ZX-80+replica, ZX81, ZX-Spectrum+replica++, PMI-80+replica, SAM coupe++, PMD-85-2A+3, Didaktik-M, SORD-M5, TI-57, TI-59+PC-100, TI99/4A, ZetaV2+ppp, ZX-uno, Petr


Nahoru
 Profil  
 
PříspěvekNapsal: 13.02.2023, 17:03 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 09.10.2013, 19:04
Příspěvky: 1406
Has thanked: 130 times
Been thanked: 71 times
Aha. Nie, môj úmysel je fungovať čisto bez BASICu. Mať vlastné rutiny. Vlastný strojový program bez obslužných rutín nevytvorím. U mňa je to tak, že musím radšej "vykradnúť" BASIC, než špekulovať nad tým, že ako s tým robiť. Až taký dobrý Z80 softvérista nie som.

_________________
Sharp MZ-821
Milsa MZ-841


Nahoru
 Profil  
 
PříspěvekNapsal: 13.02.2023, 19:41 
Offline
Pan Štábní

Registrován: 12.05.2013, 22:24
Příspěvky: 1524
Bydliště: u Prahy
Has thanked: 44 times
Been thanked: 386 times
To mi přijde úplně naopak.
Vyzobávat z Basicu snad nejkomplexnější věc, co tam je, závislou na mnoha faktorech a obsahu různých míst v paměti (obsluha přerušení, časovačů, tabulky tónů, analýza řetězcových proměnných), nebo si napsat vlastní jednoduché hradlo?


Nahoru
 Profil  
 
PříspěvekNapsal: 13.02.2023, 23:27 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 09.10.2013, 19:04
Příspěvky: 1406
Has thanked: 130 times
Been thanked: 71 times
Ak si myslíš, že je jednoduchšie naprogramovať príkaz MUSIC len tak, tak nevieš o čom je reč:
http://www.mz-800.scav.cz/upload/MZ-800 ... Manual.pdf
Strana 125-127. Čo na to hovoríš?

Doplnené: Pokiaľ by som chcel pípatko, tak je na to rutina v monitore a potom nie je o čom. Hľadať ju ale nechcem, lebo nespĺňa moje požiadavky. Moja predstava je hranie 3 kanálov naraz na pozadí vrátane tempa a tvaru tónu.

_________________
Sharp MZ-821
Milsa MZ-841


Nahoru
 Profil  
 
PříspěvekNapsal: 14.02.2023, 01:41 
Offline
Pan Generální
Uživatelský avatar

Registrován: 13.05.2013, 09:15
Příspěvky: 2290
Bydliště: Brno
Has thanked: 848 times
Been thanked: 318 times
Pár všeobecných úvah z mých zkušeností s assemblerem na Amize a tvorbou hudební rutiny.

V assembleru se zahraje tón tak se 4 řádky kódu. Vykrádat kvůli tomu rutinu by mi za to nestálo.

Těch skoků v paměti v rámci vykradnutí příkazu MUSIC snad nebude tolik.

Je důležité si určit nejkratší dobu 1 cyklu hudební rutiny. Přidáváním cyklů budeš hraní melodie zpomalovat.

Pokud počas každého tohohle nejkratšího cyklu si obsloužíš časem ostatní věci mimo hraní melodie, snad máš hotové přerušení, ale udělej tak v každý tenhle nejkratší cyklus tvé hudební rutiny určující tempo hraní skladby.

Nejvíce různých skoků v programu mám až v situaci odstavení mé hudební rutiny v části kódu pro psaní textu. Těch různých skoků z mé hudební rutiny na různé části kódu pro psaní textu je tak 10. Jen tím chci říci, že u mně je stav, kdy správné skoky do mého programu pro text jsou komplexnější, než v mé hudební rutině i když samotná hudební rutina je složitější než část kódu která vypisuje text.

Vše co jsem napsal funguje v mém programu v assembleru na počítači Amiga 1200 a ve tvém případě tomu tak nemusí být.

_________________
Amiga - PMD 85


Nahoru
 Profil  
 
PříspěvekNapsal: 14.02.2023, 03:43 
Offline
Pan Štábní

Registrován: 12.05.2013, 22:24
Příspěvky: 1524
Bydliště: u Prahy
Has thanked: 44 times
Been thanked: 386 times
Jenže právě příkaz MUSIC je psaný tak, že se díky přerušení nikde nic nezpomaluje bez ohledu na počet cyklů (pokud nepřesáhne nějakou kritickou, velmi teoretickou mez mezi přerušeními).
Skládá se z několika zdánlivě nesouvisejících částí, které spolu spolupracují.
Jednak je to systém pro vyhodnocování výrazů - parametry nemusí vypadat jako jednoduchý řetězec MUSIC "A1B1C1";"A2B2C2", ale třeba MUSIC a$+b$+RIGHT$(a$,INT (PI*4));"RR"+c$+"O2"+LEFT$(a$,10). Takže využívá i syntaktický analyzátor, práci s proměnnými a kalkulačku.
Druhak je to systém, který po zpracování těchto parametrů naplní buffery daty pro tři kanály (notami, hlasitostmi, obálkami a jejich frekvencemi, šumy, pomlkami).
Třeťak je to systém pracující v přerušení, který hlídá, zda jsou v bufferech ještě nějaká nepřehraná data, zda uplynula nastavená doba hraní, a pokud ano, vygeneruje z hudebních dat nových tónů (nebo pomlk) příkazy pro příslušné kanály zvukového čipu a pošle je na něj.
To je využití (MZ2Z046) minimálně oblasti před adresou 1000 (vektor) se související obsluhou přerušení, , 40FA..4539, 9BE6..9E4A, ale i rutiny na 5963.., v oblasti za adresou 0100...


Nahoru
 Profil  
 
PříspěvekNapsal: 14.02.2023, 06:32 
Offline
Pan Generální
Uživatelský avatar

Registrován: 13.05.2013, 09:15
Příspěvky: 2290
Bydliště: Brno
Has thanked: 848 times
Been thanked: 318 times
Důmyslné,

nicméně já to přidávání nejkratšího cyklu nepsal a nedělám z důvodu, že by se něco zpomalovalo ve smyslu nechtěného chování programu ale ve smyslu chtěného určování rychlosti hraní skladby. V trackerech se tomuhle nejkratšímu cyklu určující tempo hraní skladby říká perioda. Základní rychlostí tempa v MODu (počet period a tedy již zmiňovaných nejkratších cyklů hudební rutiny) jsou v rozsahu 1 až 32. Já používám 0 až 31 a tuhle hodnotu navyšují o 1, aby jsem se v hudebním formátu vlezl do 5 bitů. Jsou pak hudební formáty které pracují s tempem skladby jemněji, tam by již 5 bitů na určení tempa nestačilo. Nicméně sampl na Amize můžeš vždy přehrát
v rámci tempa skladby tou správnou rychlostí, aby si nebyl mimo možné tempo skladby (aby se ti sampl nepřehrál rychleji, nebo pomaleji v možném nastavení tempa skladby třeba mezi 2, nebo 3 nejkratšími cykly hudební rutiny) jen se musí správnou rychlostí nasamplovat. Pak ti vždy bude stačit standardní rozsah tempa 1 až 32 (1 až 32 nejkratších cyklů hudební rutiny)

Ale to co si napsal se mi líbí, je vidět že to má Sharp promakaný. Po technické stránce se Amiga chová když né stejně, tak alespoň podobně (alespoň na úrovni assembleru).

_________________
Amiga - PMD 85


Nahoru
 Profil  
 
PříspěvekNapsal: 14.02.2023, 07:09 
Offline
Pan Generální
Uživatelský avatar

Registrován: 13.05.2013, 09:15
Příspěvky: 2290
Bydliště: Brno
Has thanked: 848 times
Been thanked: 318 times
Jen ještě doplním pro přesnost a pro jistotu že v mé hudební rutině se ne vše vykonává nejkratším možným cyklem (periodou), ale pouze funkce které to vyžadují. Pokud by jsme ale použili více cyklů než 1 nejkratší, co je hodně pravděpodobné, protože pouze rychlost tempa 1 a tedy pouze 1 nejkratší cyklus hudební rutiny je extrémně rychlé nepoužitelné tempo hraní skladby. Pokud ovšem použijeme pomalejší tempo hraní skladby například 5 nejkratších cyklů hudební rutiny a v tempu těchto 5 cyklů by jsme chtěli dělat přerušení pro obsloužení jiných částí kódu jako například práci s grafikou, dostaneme se u Amigy na extrémně nízkou nepoužitelnou frekvenci vykonávání programu pro práci s grafikou. I samotný nejkratší možný cyklus hudební rutiny mi jen tak tak stačí pro práci s textem. Proto jsem to směřoval na práci programu mimo hudební rutinu (text, grafika) na frekvenci alespoň nejkratšího cyklu hudební rutiny. Délka trvání času nejkratšího cyklu by opravdu měla být stejná jako nejvyšší rychlost hraní (nejkratší cyklus) běžného hudebního trackeru / hudební rutiny na Sharpu.

Samozřejmě u Amigy je možné použít pro práci s grafikou i podstatně vyšší frekvence vykonávání programu než mi umožňuje nejkratší možný cyklus samotné hudební rutiny. Já jsem si na úrovni práci s textem vystačil i s touhle relativně malou frekvencí vykonávání programu.

_________________
Amiga - PMD 85


Nahoru
 Profil  
 
PříspěvekNapsal: 14.02.2023, 11:27 
Offline
Pan Generální
Uživatelský avatar

Registrován: 11.06.2013, 15:27
Příspěvky: 3064
Has thanked: 2208 times
Been thanked: 911 times
Pro představu a porovnání:
V příloze příklad "osamostatnění" příkazu PLAY ze spectráckého 128čkového BASICu.


Přílohy:
PLAY.7z [20.64 KiB]
72 krát

_________________
// na co myslím, když sedím u oldkompů: Durov
Nahoru
 Profil  
 
PříspěvekNapsal: 14.02.2023, 18:57 
Offline
Pan Štábní

Registrován: 11.11.2013, 10:29
Příspěvky: 1202
Has thanked: 367 times
Been thanked: 304 times
Tohle je super priklad, > 2000 radku kodu, je to zavisle na BASICu v pocitaci a v podstate to pridava dalsi prikaz (i kdyz pomoci esxDOS). Za me je to perfektni ukazka toho, jak jsem ja pochopil puvodni zamer, co chtel Milsa. Za me diky.
Ale at se Milsa vyjadri za sebe sam, jestli mu to pripadne pomohlo.

_________________
Sharp MZ-800++, MZ-1500++, MZ-2500++, SM-B-80T, MK-14_replica, HP-85, ZX-80+replica, ZX81, ZX-Spectrum+replica++, PMI-80+replica, SAM coupe++, PMD-85-2A+3, Didaktik-M, SORD-M5, TI-57, TI-59+PC-100, TI99/4A, ZetaV2+ppp, ZX-uno, Petr


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

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 13 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