OldComp.cz

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

Registrujte se zde!

Právě je 15 lis 2018, 15:47

Všechny časy jsou v UTC + 1 hodina




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 26 ]  Přejít na stránku Předchozí  1, 2
Autor Zpráva
PříspěvekNapsal: 10 lis 2013, 14:16 
Offline
Kecálek
Uživatelský avatar

Registrován: 18 kvě 2013, 10:46
Příspěvky: 136
Bydliště: Ústí nad Orlicí
Has thanked: 2 times
Been thanked: 31 times
Jak lze spolehlivě otestovat, zda spouštěný kód běží na Spectru 48K nebo 128K? Ať už se jedná o 128K/+2/+3 nehraje roli.

_________________
http://zx-spectrum.cz
http://maps.speccy.cz
http://www.zx-spectrum.cz/collection/
http://cs.speccy.cz


Nahoru
 Profil  
 
PříspěvekNapsal: 10 lis 2013, 16:26 
Offline
Kecálek

Registrován: 12 kvě 2013, 21:24
Příspěvky: 243
Has thanked: 0 time
Been thanked: 53 times
Závisí na tom, jak definuješ rozdíl.
Pokud jde o to, otestovat přítomnost stránkování, pak
1) předpokládejme aktuální stránku 0 (kdyžtak ji nastavme)
2) zapišme do ní bajt A, otestujme, zda se korektně zapsal
3) nastavme stránku jinou (třeba 1)
5) zapišme do ní na stejnou adresu bajt B různý od A, zkontrolujme, zda se korektně zapsal
6) nastavme zpět stránku 0, zkontrolujme, zda místo bajtu B máme opět bajt A


Nahoru
 Profil  
 
PříspěvekNapsal: 10 lis 2013, 19:08 
Online
Pan Generální

Registrován: 22 kvě 2013, 20:14
Příspěvky: 2015
Bydliště: Bratislava
Has thanked: 220 times
Been thanked: 373 times
A pokial potrebujes otestovat typ ZX Spektra aby si vedel vybrat ten spravne nacasovany multicolor, vhodne je otestovat frekvenciu hodin a spomalenie videoramky - pretoze to su prave hodnoty, na ktorych zavisi casovanie multicoloru. Dobre riesenie je vyuzit na to prerusenie - ked po halte spustis kratucku slucka typu loop: inc bc ; jr loop a nasledujucim prerusenim (im2) zistis aka hodnota sa napocitala do BC. Pokial tuto slucku spustis v rychlej pameti, odlisis od seba ZX 48k a vsetky 128. Pokial ale tuto slucku spustis v spomalenej videoramke, odlisis od seba nielen 48k, ale aj 128/+2 voci +2A/+3.


Nahoru
 Profil  
 
PříspěvekNapsal: 10 lis 2013, 20:36 
Offline
Kecálek

Registrován: 12 kvě 2013, 21:24
Příspěvky: 243
Has thanked: 0 time
Been thanked: 53 times
Program pro testování rychlosti konkrétního modelu Spectra byl zveřejněn v ZX Magazínu ještě za dob Proximy.

Stránkování ZX 128 bylo zase celkem dobře (i s obrázkem) popsáno ve Fifu.

Test přítomnosti rozšířené paměti ZX 128 by ale mohl v ZX Magazínu taky být.


Nahoru
 Profil  
 
PříspěvekNapsal: 10 lis 2013, 21:08 
Offline
Kecálek
Uživatelský avatar

Registrován: 18 kvě 2013, 10:46
Příspěvky: 136
Bydliště: Ústí nad Orlicí
Has thanked: 2 times
Been thanked: 31 times
Zatím mám pouze takové ambice, abych vytvořil loader, který na Spectru 48 K vypíše hlášku This game is 128K only a nebude pokračovat v nahrávání. Na to ten zápis dvou bajtů pokaždé do jiné stránky bude stačit.

ZX magazíny jsem procházel, o stránkování jsem pár článků našel, ale pak jsem se stejně na pár věcí musel zeptat tady, protože ty informace nebyly zrovna vyčerpávající. Ještě projdu ta FIFA, třeba objevím něco zajímavého.

_________________
http://zx-spectrum.cz
http://maps.speccy.cz
http://www.zx-spectrum.cz/collection/
http://cs.speccy.cz


Nahoru
 Profil  
 
PříspěvekNapsal: 25 lis 2013, 21:15 
Offline
Kecálek
Uživatelský avatar

Registrován: 18 kvě 2013, 10:46
Příspěvky: 136
Bydliště: Ústí nad Orlicí
Has thanked: 2 times
Been thanked: 31 times
Nyní se peru s AY hudbou, respektive rutinou na její obsluhu. Chápu to dobře, že AY data nejsou nic jiného než jednoduchá posloupnost, kde se neustále opakuje hodnota portu $fffd s hodnotou portu $bffd, takže mi stačí smyčka, kde budu neustále zapisovat hodnoty na tyto dva porty (třeba jako něco níže uvedeného)? A nebo je to všechno krapet složitější, pokud chci z AY čipu vyloudit něco "poslouchatelného a na úrovni"?

Kód:
play      ld hl,(play_byte)
      ld a,(hl)

      cp 18
      jr nz,play2
      ld hl,(play_start)
      ld (play_byte),hl      
      jr play

play2    ld bc,$fffd
      out (c),a
      inc hl
      ld a,(hl)
      ld bc,$bffd
      out (c),a
      inc hl
      ld (play_byte),hl
      jr play


play_start   defw $8d00
play_byte    defw $8d00
   
org $8D00
defb 06,00,07,07,08,16,09,16,10,16,12,50,13,01,18


_________________
http://zx-spectrum.cz
http://maps.speccy.cz
http://www.zx-spectrum.cz/collection/
http://cs.speccy.cz


Nahoru
 Profil  
 
PříspěvekNapsal: 25 lis 2013, 22:21 
Online
Pan Generální

Registrován: 22 kvě 2013, 20:14
Příspěvky: 2015
Bydliště: Bratislava
Has thanked: 220 times
Been thanked: 373 times
pavero píše:
Nyní se peru s AY hudbou, respektive rutinou na její obsluhu. Chápu to dobře, že AY data nejsou nic jiného než jednoduchá posloupnost, kde se neustále opakuje hodnota portu $fffd s hodnotou portu $bffd, takže mi stačí smyčka, kde budu neustále zapisovat hodnoty na tyto dva porty (třeba jako něco níže uvedeného)? A nebo je to všechno krapet složitější, pokud chci z AY čipu vyloudit něco "poslouchatelného a na úrovni"?
Uf, no, pisat hudbu priamo v datach posielanych na tie dva porty, to by som prirovnal k snahe napisat nejaky rozsiahlejsi program v strojaku tym ze budem jednotlive bity v pameti nastavovat na jednicky a nuly :shrug:

Pokial chces napisat nejaku hudbu pre AY, mas niekolko moznosti:

A) pouzit nejaky hudobny editor pre pisanie hudieb. V takom editore sa da pisat hudba velmi komfortne, mozes si "za behu" vypocut co si prave napisal, a ked je vsetko hotove, editor ti priamo skompiluje hudobnu rutinku s datami, ktoru len staci nahrat do pameti a volat pod prerusenim. Za velmi dobry hudobny editor (a asi aj najlepsi pre hudbu z prerusenia) povazujem SQ-Tracker s mborik-ovou upravou: http://blog.borik.net/2011/06/sq-tracker-editor-v111.html

B) pouzit niektore s mnohych hradiel (Fukove, Norove, moje...) a dopisat k nemu priamo hudbu v asembleri. Nie je to take pohodlne ako (A) a data, ktore pises, maju sice uz filozofiu programovacieho jazyka, ale stale su blizke rozmyslaniu hudobnika (noty, efekty...). Tato moznost vyzaduje znalost formatu dat pre dane hudobne hradlo.

C) napisat si nejake uplne vlastne hradlo od piky. Tato moznost je zdanlivo najtazsia, pretoze musis vediet ako sa AY programuje (vid nizsie).

D) napisat si hudbu v 128 basicovom prikaze PLAY a pouzit moj konvertor PLAYto50Hz ktory ti takto napisanu hudbu prevedie do podoby ktoru mozes prilinkovat do svojho programu a prehravat ju "na pozadi" (z prerusenia).

E) dohodnut sa s niektorym z miestnych hudobnikov, ze ti hudbu napisu oni (a tym padom budu spoluautormi tvojho programu) :)

Ale aby som odpovedal na tvoju otazku: Mas pravdu, AY sa ovlada pomocou dvoch portov - #FFFD a #BFFD. AY si mozes predstavit ako sadu 16-tich osembitovych registrov. Na port #FFFD najprv musis poslat cislo 0-15 s ktorym registrom chces pracovat, a nasledne na port #BFFD posles bajt ktory sa do takto vybrateho registra zapise. Takze typicka rutinka, hrajuca nejaku hudbu z prerusenia, vyzera tak, ze pri kazdom zavolani (z prerusenia) nastavi registre AY na pozadovane hodnoty, t.j. v slucke najprv na #FFFD posle cislo registra, nasledne na to na #BFFD posle data pre tento register, a toto zopakuje pre vsetky nastavovane registre. Pokial to takto chces robit nejakou vlastnou rutinkou - vid bod (C) - potrebujes vediet programatorsky model AY, ktory najdes napr. tu: http://cs.wikipedia.org/wiki/AY-3-8912.


Nahoru
 Profil  
 
PříspěvekNapsal: 25 lis 2013, 22:22 
Offline
Kecálek

Registrován: 12 kvě 2013, 21:24
Příspěvky: 243
Has thanked: 0 time
Been thanked: 53 times
Teoreticky tak nějak - zapíše se registr a pak jeho hodnota.
V praxi -
1) AY zní "furt", pokud mix (registr 7) nebo obálka zvuk nevypnou. Proto se do ní nezapisuje furtum furt, ale
2) pod přerušením (jednou za padesátinu) se zapíšou změny tónů.
3) Inicializace, aby byly známy hodnoty registrů (nulování), se provede na začátku.

Doporučuju prohlédnout si disassembling Fukova Amadea
http://bulba.untergrund.net/FXMPlayer.7z
nebo playeru ze SQ-Trackeru
http://bulba.untergrund.net/SQTPlayer.rar
(Zdroják Busyho inter s Norovou hudbou jsem nahonem nenašel.)


Nahoru
 Profil  
 
PříspěvekNapsal: 25 lis 2013, 22:23 
Offline
Kecálek

Registrován: 12 kvě 2013, 21:24
Příspěvky: 243
Has thanked: 0 time
Been thanked: 53 times
Eh, Busy byl zase rychlejší.


Nahoru
 Profil  
 
PříspěvekNapsal: 26 lis 2013, 09:27 
Offline
Pan Generální
Uživatelský avatar

Registrován: 18 čer 2013, 19:26
Příspěvky: 2220
Has thanked: 82 times
Been thanked: 314 times
Busy píše:
AY sa ovlada pomocou dvoch portov - #FFFD a #BFFD. AY si mozes predstavit ako sadu 16-tich osembitovych registrov. Na port #FFFD najprv musis poslat cislo 0-15 s ktorym registrom chces pracovat, a nasledne na port #BFFD posles bajt ktory sa do takto vybrateho registra zapise. Takze typicka rutinka, hrajuca nejaku hudbu z prerusenia, vyzera tak, ze pri kazdom zavolani (z prerusenia) nastavi registre AY na pozadovane hodnoty, t.j. v slucke najprv na #FFFD posle cislo registra, nasledne na to na #BFFD posle data pre tento register, a toto zopakuje pre vsetky nastavovane registre.

Předpokládám, že "všetky nastavované registre" znamená "pouze ty, jejichž nastavení je rozdílné od předchozího" - tedy pouze ty, jejichž nastavení se mění, je to tak?

Busy píše:
D) napisat si hudbu v 128 basicovom prikaze PLAY a pouzit moj konvertor PLAYto50Hz ktory ti takto napisanu hudbu prevedie do podoby ktoru mozes prilinkovat do svojho programu a prehravat ju "na pozadi" (z prerusenia).

Výstup z toho konvertoru je tenhle typ dat? Tedy změny po 1/50 sec. ?

_________________
www.zxsparrow.com


Nahoru
 Profil  
 
PříspěvekNapsal: 26 lis 2013, 10:21 
Online
Pan Generální

Registrován: 22 kvě 2013, 20:14
Příspěvky: 2015
Bydliště: Bratislava
Has thanked: 220 times
Been thanked: 373 times
Jiiira píše:
Busy píše:
AY sa ovlada pomocou dvoch portov - #FFFD a #BFFD. AY si mozes predstavit ako sadu 16-tich osembitovych registrov. Na port #FFFD najprv musis poslat cislo 0-15 s ktorym registrom chces pracovat, a nasledne na port #BFFD posles bajt ktory sa do takto vybrateho registra zapise. Takze typicka rutinka, hrajuca nejaku hudbu z prerusenia, vyzera tak, ze pri kazdom zavolani (z prerusenia) nastavi registre AY na pozadovane hodnoty, t.j. v slucke najprv na #FFFD posle cislo registra, nasledne na to na #BFFD posle data pre tento register, a toto zopakuje pre vsetky nastavovane registre.
Předpokládám, že "všetky nastavované registre" znamená "pouze ty, jejichž nastavení je rozdílné od předchozího" - tedy pouze ty, jejichž nastavení se mění, je to tak?
Neznamena :) Vecsina hudobnych rutiniek ma v sebe slucku, ktora proste defaultne nastavi vsetky registre (alebo aspon prvych 13) - nejake pole v pameti vzdy cele skopiruje do AY - je to jednoduchsie na implementaciu. Ale inak mas pravdu, vo vseobecnosti staci nastavit len tie registre, ktore treba zmenit, pretoze AY si hodnotu raz zapisanu do registra pameta.

Pre ilustraciu, takto nejak vyzera rutinka, posielajuca data do AY v mojom intre x3d1k:
Kód:
0648   831D 21 3F 83    senday  ld      hl,obal+1    ;; Odoslanie udajov do AY-3-8912
0649   8320 1E 0E               ld      e,#0E
0650   8322 1D          snd11   dec     e
0651   8323 2B                  dec     hl
0652   8324 01 FD FF            ld      bc,#fffd
0653   8327 ED 59               out     (c),e
0654   8329 06 BF               ld      b,#bf
0655   832B 7E                  ld      a,(hl)
0656   832C ED 79               out     (c),a
0657   832E 20 F2               jr      nz,snd11
0658   8330 C9                  ret
0659   8331             
0660   8331             ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
0661   8331             
0662   8331 00 00       freka   dw      0       ;; 0 Delicka pre kanal A   >> Buffer pre AY-3-8912 <<
0663   8333 00 00       frekb   dw      0       ;; 2 Delicka pre kanal B
0664   8335 00 00       frekc   dw      0       ;; 4 Delicka pre kanal C
0665   8337 00          sumx    db      0       ;; 6 Delicka pre sum
0666   8338 00          mixx    db      0       ;; 7 Mix register
0667   8339 10          vola    db      #10     ;; 8 Hlasitost kanalu A
0668   833A 10          volb    db      #10     ;; 9 Hlasitost kanalu B
0669   833B 10          volc    db      #10     ;; A Hlasitost kanalu C
0670   833C 00 00       freko   dw      0       ;; B Delicka pre obalku
0671   833E 08          obal    db      #08     ;; D Obalka: 0\__ ;; 8\\\ ;; A\/\/ ;; C/// ;; E/\/\
0672   833F
Funguje to tak, ze hudobne hradlo pocas svojej cinnosti zapisuje iba do pameti - buffera pre AY, a na zaver, ked su vsetky data pripravene, sa zavola rutinka senday ktora vsetko naraz odosle do AY.

Jiiira píše:
Busy píše:
D) napisat si hudbu v 128 basicovom prikaze PLAY a pouzit moj konvertor PLAYto50Hz ktory ti takto napisanu hudbu prevedie do podoby ktoru mozes prilinkovat do svojho programu a prehravat ju "na pozadi" (z prerusenia).
Výstup z toho konvertoru je tenhle typ dat? Tedy změny po 1/50 sec. ?
Ano, presne takto sa to da predstavit.


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ů: 26 ]  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 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