<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl">
	<id>https://mirror.atariki.pl/w/index.php?action=history&amp;feed=atom&amp;title=FC_%28format_pliku%29</id>
	<title>FC (format pliku) - Historia wersji</title>
	<link rel="self" type="application/atom+xml" href="https://mirror.atariki.pl/w/index.php?action=history&amp;feed=atom&amp;title=FC_%28format_pliku%29"/>
	<link rel="alternate" type="text/html" href="https://mirror.atariki.pl/w/index.php?title=FC_(format_pliku)&amp;action=history"/>
	<updated>2026-10-02T07:29:45Z</updated>
	<subtitle>Historia wersji tej strony wiki</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://mirror.atariki.pl/w/index.php?title=FC_(format_pliku)&amp;diff=1352&amp;oldid=prev</id>
		<title>imported&gt;Atariki recovery: Reconstructed from archived HTML; see provenance manifest</title>
		<link rel="alternate" type="text/html" href="https://mirror.atariki.pl/w/index.php?title=FC_(format_pliku)&amp;diff=1352&amp;oldid=prev"/>
		<updated>2026-10-01T08:51:48Z</updated>

		<summary type="html">&lt;p&gt;Reconstructed from archived HTML; see provenance manifest&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nowa strona&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Format modułu muzycznego obsługiwany przez program [[FC|Future Composer]] w wersji 1.32 (mega).&lt;br /&gt;
&lt;br /&gt;
== Postać nieskompresowana ==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;offset&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;długość&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;opis&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| $0000&lt;br /&gt;
| $0002&lt;br /&gt;
| identyfikator: $26,$23&lt;br /&gt;
|-&lt;br /&gt;
| $0002&lt;br /&gt;
| $0001&lt;br /&gt;
| tempo&lt;br /&gt;
|-&lt;br /&gt;
| $0003&lt;br /&gt;
| $0100&lt;br /&gt;
| dane tracku 1&lt;br /&gt;
|-&lt;br /&gt;
| $0103&lt;br /&gt;
| $0100&lt;br /&gt;
| dane tracku 2&lt;br /&gt;
|-&lt;br /&gt;
| $0203&lt;br /&gt;
| $0100&lt;br /&gt;
| dane tracku 3&lt;br /&gt;
|-&lt;br /&gt;
| $0303&lt;br /&gt;
| $0080&lt;br /&gt;
| dane 32 instrumentów (każdy z nich składa się z 4 bajtów)&lt;br /&gt;
|-&lt;br /&gt;
| $0383&lt;br /&gt;
| ...&lt;br /&gt;
| dane 64 patternów&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| ...&lt;br /&gt;
| dane 32 obwiedni dźwięku&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Dane tracków ===&lt;br /&gt;
&lt;br /&gt;
Znaczenie poszczególnych poleceń:&lt;br /&gt;
&lt;br /&gt;
* $00..$3F - numer patternu,&lt;br /&gt;
* $40 xx - ustawia AUDCTL na wartość xx,&lt;br /&gt;
* $8x - ustawia transpozycję dla tracku (8 jest przyjmowane, jako transpozycja &amp;quot;zerowa&amp;quot;).&lt;br /&gt;
* $FE - koniec songu,&lt;br /&gt;
* $FF - zapętlenie songu.&lt;br /&gt;
&lt;br /&gt;
=== Dane patternów ===&lt;br /&gt;
&lt;br /&gt;
Znaczenie poszczególnych poleceń:&lt;br /&gt;
&lt;br /&gt;
* $00..$3F - zagranie nuty ($00 = C-1, $01 = C#1, ...),&lt;br /&gt;
* $40..$5f - odstęp między nutami (ilość definiują bity 0..4 - można w ten sposób zapisać odstęp o 32 pozycje patternu),&lt;br /&gt;
* $80..$9f - zmiana instrumentu (numer definiują bity 0..4),&lt;br /&gt;
* $FF - koniec patternu.&lt;br /&gt;
&lt;br /&gt;
=== Dane instrumentów ===&lt;br /&gt;
&lt;br /&gt;
Każdy instrument zdefiniowany jest za pomocą 4 bajtów:&lt;br /&gt;
&lt;br /&gt;
* $00: numer obwiedni ($00..$1F),&lt;br /&gt;
* $01: zniekształcenia wpisywane do AUDCx,&lt;br /&gt;
* $02: głębokość dwupunktowego arpeggio (naprzemienne granie dźwięku podstawowego i podniesionego o podaną ilość półtonów),&lt;br /&gt;
* $03: efekt specjalny ($00 - brak, bit 7 - 0=vibrato, 1=slide down).&lt;br /&gt;
&lt;br /&gt;
=== Dane obwiedni ===&lt;br /&gt;
&lt;br /&gt;
Znaczenie poszczególnych poleceń:&lt;br /&gt;
&lt;br /&gt;
* $00..$7F - dane są ORowane ze zniekształceniem instrumentu i wynik zapisywany jest do AUDCx,&lt;br /&gt;
* $80..$FE - dane są bezpośrednio zapisywane do AUDCx, a dodatkowo AUDFx ustawiany jest na 0,&lt;br /&gt;
* FF - koniec obwiedni.&lt;br /&gt;
&lt;br /&gt;
== Postać skompresowana ==&lt;br /&gt;
&lt;br /&gt;
Plik jest zgrywany bez żadnego nagłówka, jako zwykłe dane RAW, i łącznie z procedurą odtwarzającą.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;offset&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;długość&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;opis&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| $0000&lt;br /&gt;
| $0001&lt;br /&gt;
| pozycja startowa w tracku&lt;br /&gt;
|-&lt;br /&gt;
| $0001&lt;br /&gt;
| $0321&lt;br /&gt;
| program playera&lt;br /&gt;
|-&lt;br /&gt;
| $0322&lt;br /&gt;
| $0040&lt;br /&gt;
| tablica LSB adresów patternów&lt;br /&gt;
|-&lt;br /&gt;
| $0362&lt;br /&gt;
| $0020&lt;br /&gt;
| tablica LSB adresów obwiedni głośności instrumentów&lt;br /&gt;
|-&lt;br /&gt;
| $0382&lt;br /&gt;
| $0040&lt;br /&gt;
| tablica MSB adresów patternów&lt;br /&gt;
|-&lt;br /&gt;
| $03C2&lt;br /&gt;
| $0020&lt;br /&gt;
| tablica MSB adresów obwiedni głośności instrumentów&lt;br /&gt;
|-&lt;br /&gt;
| $03E2&lt;br /&gt;
| $0020&lt;br /&gt;
| tablica czasów trwania nut obliczona na podstawie tempa utworu (pierwszy bajt jest równoważny tempu)&lt;br /&gt;
|-&lt;br /&gt;
| $0402&lt;br /&gt;
| $0003&lt;br /&gt;
| tablica LSB adresów tracków&lt;br /&gt;
|-&lt;br /&gt;
| $0405&lt;br /&gt;
| $0003&lt;br /&gt;
| tablica MSB adresów tracków&lt;br /&gt;
|-&lt;br /&gt;
| $0408&lt;br /&gt;
| $0080&lt;br /&gt;
| dane 32 instrumentów&lt;br /&gt;
|-&lt;br /&gt;
| $0488&lt;br /&gt;
| ...&lt;br /&gt;
| dane 64 patternów&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| ...&lt;br /&gt;
| dane 32 obwiedni głośności dźwięku&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
| ...&lt;br /&gt;
| dane 3 tracków&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Na pozycji $0001 w pliku znajduje się rozkaz JSR INIT i na podstawie jego argumentu można odtworzyć adres, pod jaki skompilowano moduł playera i muzyki. Adres liczy się ze wzoru:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ADDR = msx[2] + $100 * msx[3] - $10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Track ===&lt;br /&gt;
&lt;br /&gt;
W tracku występują następujące rozkazy:&lt;br /&gt;
&lt;br /&gt;
* $00..$3F - numer patternu do odegrania,&lt;br /&gt;
* $40 xx - ustawia AUDCTL na wartość xx,&lt;br /&gt;
* $8x - transponuje dźwięk o x (8 jest uznawane za &amp;quot;poziom zerowy&amp;quot;),&lt;br /&gt;
* $FE - koniec odtwarzania,&lt;br /&gt;
* $FF - zapętlenie odtwarzania.&lt;br /&gt;
&lt;br /&gt;
=== Pattern ===&lt;br /&gt;
&lt;br /&gt;
W patternie występują następujące rozkazy:&lt;br /&gt;
&lt;br /&gt;
* $00..$3F - nuta,&lt;br /&gt;
* $40..$7F - czas trwania dźwięku (bity 0..4),&lt;br /&gt;
* $80..$9F - instrument (bity 0..4),&lt;br /&gt;
* $FF - koniec patternu.&lt;br /&gt;
&lt;br /&gt;
=== Instrument ===&lt;br /&gt;
&lt;br /&gt;
Instrument składa się z pól:&lt;br /&gt;
&lt;br /&gt;
* $00: numer obwiedni głośności,&lt;br /&gt;
* $01: zniekształcenie (AUDCx),&lt;br /&gt;
* $02: głębokość arpeggio,&lt;br /&gt;
* $03: efekt.&lt;br /&gt;
&lt;br /&gt;
=== Obwiednia głośności ===&lt;br /&gt;
&lt;br /&gt;
W obwiedni występują następujące rozkazy:&lt;br /&gt;
&lt;br /&gt;
* $00..$FE - dane obwiedni,&lt;br /&gt;
* $FF - koniec obwiedni.&lt;br /&gt;
&lt;br /&gt;
== Tricki przy zapisie songów ==&lt;br /&gt;
&lt;br /&gt;
Ponieważ format nie precyzuje, jak oznaczać subsongi, stosowane są dwie techniki:&lt;br /&gt;
&lt;br /&gt;
1. Na pozycji $0000 playera znajduje się komórka oznaczająca początek songu w trackach. Zmieniając jej wartość można spowodować odgrywanie songu od innego miejsca w trackach. Dzięki temu w jednym module można pomieścić kilka subsongów. Przykład z FLINSTON.FC:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;0000000:          83 00 00 17 17 00 fe 83 14 fe 83 12 fe&lt;br /&gt;
0000010: 00 00 00 83 0a 0b 0c 0c ff 00 00 00 00 00 00 00&lt;br /&gt;
0000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00&lt;br /&gt;
...&lt;br /&gt;
0000100: 00 00 00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;0000100:          88 00 18 18 18 19 fe 88 13 fe 88 10 11&lt;br /&gt;
0000110: fe 00 00 88 01 01 02 03 04 04 ff 00 00 00 00 00&lt;br /&gt;
0000120: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00&lt;br /&gt;
...&lt;br /&gt;
0000200: 00 00 00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;0000200:          88 15 16 15 16 19 fe 88 13 fe 88 0d 0e&lt;br /&gt;
0000210: 0d 0f fe 88 05 06 07 08 09 09 ff 00 00 00 00 00&lt;br /&gt;
0000220: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00&lt;br /&gt;
...&lt;br /&gt;
0000300: 00 00 00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ponieważ song w każdym tracku może zajmować różną ilość miejsca, pola znajdujące się za subsongiem są po prostu ignorowane i mogą zawierać śmieci(!).&lt;br /&gt;
&lt;br /&gt;
2. Ponieważ player zawiera tablicę adresów początków tracków (tablicę LSB ich adresów w $0402 oraz MSB adresów w $0405), można upakować wiele subsongów zmieniając adresy początków tracków w tej tablicy. Offset songu w tracku ($0000) się nie zmienia. Np.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;0000000:          88 02 02 02 02 02 02 02 02 08 08 08 08&lt;br /&gt;
0000010: 0b 08 08 08 08 0e 0e 11 12 ff 01 01 01 01 03 0a&lt;br /&gt;
0000020: 0c 0a 0f 0f 0f 14 ff 04 04 04 04 04 04 04 04 09&lt;br /&gt;
0000030: 09 09 09 0d 09 09 09 09 10 10 10 10 10 10 10 10&lt;br /&gt;
0000040: 10 10 10 10 13 ff 16 fe 15 ff 17 ff 18 fe ff 19&lt;br /&gt;
0000050: fe ff 1a fe ff 1b 1b 1b 1b 1e 1e 1e 1e ff 1c 1c&lt;br /&gt;
0000060: 1c 1c 1f 1f 1f 1f ff 1d 1d 20 20 ff 80 5f 08 ff&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;0000100:          81 01 01 01 01 03 0a 0c 0a 0f 0f 0f 14&lt;br /&gt;
0000110: ff 04 04 04 04 04 04 04 04 09 09 09 09 0d 09 09&lt;br /&gt;
0000120: 09 09 10 10 10 10 10 10 10 10 10 10 10 10 13 ff&lt;br /&gt;
0000130: 16 fe 15 ff 17 ff 18 fe ff 19 fe ff 1a fe ff 1b&lt;br /&gt;
0000140: 1b 1b 1b 1e 1e 1e 1e ff 1c 1c 1c 1c 1f 1f 1f 1f&lt;br /&gt;
0000150: ff 1d 1d 20 20 ff 80 5f 08 ff 82 41 27 20 28 20&lt;br /&gt;
0000160: 25 20 27 20 27 20 28 20 25 20 27 20 27 20 28 20&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;0000200:          81 04 04 04 04 04 04 04 04 09 09 09 09&lt;br /&gt;
0000210: 0d 09 09 09 09 10 10 10 10 10 10 10 10 10 10 10&lt;br /&gt;
0000220: 10 13 ff 16 fe 15 ff 17 ff 18 fe ff 19 fe ff 1a&lt;br /&gt;
0000230: fe ff 1b 1b 1b 1b 1e 1e 1e 1e ff 1c 1c 1c 1c 1f&lt;br /&gt;
0000240: 1f 1f 1f ff 1d 1d 20 20 ff 80 5f 08 ff 82 41 27&lt;br /&gt;
0000250: 20 28 20 25 20 27 20 27 20 28 20 25 20 27 20 27&lt;br /&gt;
0000260: 20 28 20 25 20 27 20 27 20 28 20 25 20 27 20 ff&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ten trick pozwala na znacznie gęstsze upakowanie subsongów w module niż sposób 1.&lt;br /&gt;
&lt;br /&gt;
[[Kategoria:Formaty plików]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;Atariki recovery</name></author>
	</entry>
</feed>