مون کي مقناطيسي ٽيپ مان اڻڄاتل شڪل ۾ ڊيٽا ڪيئن حاصل ڪئي

prehistory

ريٽرو هارڊويئر جي عاشق هجڻ جي ڪري، مون هڪ دفعو خريد ڪيو ZX Spectrum+ يوڪي ۾ وڪرو ڪندڙ کان. پاڻ ڪمپيوٽر سان گڏ، مون راندين سان گڏ ڪيتريون ئي آڊيو ڪيسٽون حاصل ڪيون (اصل پيڪنگنگ ۾ هدايتون سان)، ۽ انهي سان گڏ ڪيسٽن تي رڪارڊ ٿيل پروگرامن کان سواء خاص نشانن جي. حيرت جي ڳالهه اها آهي ته 40 سالن جي ڪئسٽن مان ڊيٽا چڱيءَ طرح پڙهي سگهجي ٿي ۽ مان انهن مان لڳ ڀڳ سموريون رانديون ۽ پروگرام ڊائونلوڊ ڪرڻ جي قابل ٿي ويس.

مون کي مقناطيسي ٽيپ مان اڻڄاتل شڪل ۾ ڊيٽا ڪيئن حاصل ڪئي

بهرحال، ڪجهه ڪيسٽن تي مون کي رڪارڊنگ مليا جيڪي واضح طور تي ZX اسپيڪٽرم ڪمپيوٽر پاران نه ٺاهيا ويا هئا. اهي آواز مڪمل طور تي مختلف هئا ۽، ذڪر ڪيل ڪمپيوٽر جي رڪارڊنگ جي برعڪس، اهي هڪ مختصر BASIC بوٽ لوڊر سان شروع نه ٿيا، جيڪو عام طور تي سڀني پروگرامن ۽ راندين جي رڪارڊنگ ۾ موجود آهي.

ڪجهه وقت لاءِ هن مون کي پريشان ڪيو - مان واقعي اهو ڳولڻ چاهيان ٿو ته انهن ۾ ڇا لڪيل آهي. جيڪڏهن توهان بائيٽ جي ترتيب جي طور تي آڊيو سگنل پڙهي سگهو ٿا، توهان اکرن يا ڪنهن به شيء کي ڳولي سگهو ٿا جيڪو سگنل جي اصليت کي ظاهر ڪري ٿو. قديم آثارن جو هڪ قسم.

هاڻي جڏهن مان تمام گهڻو اڳتي نڪري چڪو آهيان ۽ پاڻ ڪيسٽن جا ليبل ڏسندو آهيان، ته مسڪرائي ويس

جواب صحيح منهنجي اکين جي سامهون هو
کاٻي پاسي واري ڪيسٽ جي ليبل تي TRS-80 ڪمپيوٽر جو نالو آهي، ۽ صرف ٺاهيندڙ جي نالي جي هيٺان: "ريڊيو شيڪ آمريڪا ۾ ٺاهيل"

(جيڪڏهن توهان سازش کي آخر تائين برقرار رکڻ چاهيو ٿا ته خراب ڪندڙ جي هيٺان نه وڃو)

آڊيو سگنلن جو مقابلو

سڀ کان پهريان، اچو ته آڊيو رڪارڊنگ کي ڊجيٽلائيز ڪريو. توهان ٻڌي سگهو ٿا ته اهو ڪهڙو آواز آهي:


۽ هميشه وانگر ZX Spectrum ڪمپيوٽر جي آوازن مان رڪارڊنگ:


ٻنهي صورتن ۾، رڪارڊنگ جي شروعات ۾ هڪ نامياري آهي پائلٽ ٽون - ساڳئي تعدد جو آواز (پهرين رڪارڊنگ ۾ اهو تمام ننڍو آهي <1 سيڪنڊ، پر ڌار ڌار آهي). پائلٽ ٽون ڪمپيوٽر کي ڊيٽا حاصل ڪرڻ لاءِ تيار ٿيڻ جو اشارو ڏئي ٿو. ضابطي جي طور تي، هر ڪمپيوٽر صرف ان جي "پنهنجي" پائلٽ سر کي سڃاڻي ٿو سگنل جي شڪل ۽ ان جي تعدد طرفان.

اهو ضروري آهي ته سگنل جي شڪل بابت ڪجهه چوڻ گهرجي. مثال طور، ZX Spectrum تي ان جي شڪل مستطيل آهي:

مون کي مقناطيسي ٽيپ مان اڻڄاتل شڪل ۾ ڊيٽا ڪيئن حاصل ڪئي

جڏهن هڪ پائلٽ ٽون معلوم ٿئي ٿو، ZX اسپيڪٽرم ڏيکاري ٿو متبادل ڳاڙهي ۽ نيري بارن کي اسڪرين جي بارڊر تي ظاهر ڪرڻ لاءِ ته سگنل تسليم ڪيو ويو آهي. پائلٽ ٽون ختم ٿئي ٿو synchro نبض، جيڪو ڪمپيوٽر کي ڊيٽا حاصل ڪرڻ شروع ڪرڻ لاءِ سگنل ڏئي ٿو. اهو مختصر مدت جي خاصيت آهي (پائلٽ ٽون ۽ بعد ۾ ڊيٽا جي مقابلي ۾) (ڏسو شڪل)

هم وقت سازي جي نبض حاصل ڪرڻ کان پوء، ڪمپيوٽر سگنل جي هر اڀار / زوال کي رڪارڊ ڪري ٿو، ان جي مدت کي ماپ ڪري ٿو. جيڪڏهن مدت هڪ خاص حد کان گهٽ آهي، بٽ 1 کي ميموري ڏانهن لکيو ويندو آهي، ٻي صورت ۾ 0. بٽ گڏ ڪيا ويندا آهن بائيٽ ۽ پروسيس کي ورجايو ويندو آهي جيستائين N بائيٽس حاصل نه ٿين. نمبر N عام طور تي ڊائون لوڊ ٿيل فائل جي هيڊر مان ورتو ويندو آهي. لوڊشيڊنگ جو سلسلو هن ريت آهي:

  1. پائلٽ ٽون
  2. هيڊر (مقرر ٿيل ڊگھائي)، ڊائون لوڊ ڪيل ڊيٽا جي سائيز تي مشتمل آهي (N)، فائل جو نالو ۽ قسم
  3. پائلٽ ٽون
  4. ڊيٽا پاڻ

انهي کي يقيني بڻائڻ ته ڊيٽا صحيح طور تي لوڊ ڪئي وئي آهي، ZX اسپيڪٽرم پڙهي ٿو جنهن کي سڏيو ويندو آهي برابري بائيٽ (parity byte)، جيڪو حساب ڪيو ويندو آهي جڏهن لکيل ڊيٽا جي سڀني بائيٽ کي XOR ڪندي فائل محفوظ ڪندي. فائل پڙهڻ دوران، ڪمپيوٽر وصول ڪيل ڊيٽا مان برابري بائيٽ کي حساب ڪري ٿو ۽، جيڪڏهن نتيجو محفوظ ڪيل هڪ کان مختلف آهي، غلطي پيغام ڏيکاري ٿو "R Tape loading error". سختي سان ڳالهائڻ، ڪمپيوٽر هن پيغام کي اڳ ۾ جاري ڪري سگهي ٿو، جڏهن، پڙهڻ دوران، اهو نبض کي سڃاڻي نٿو سگهي (مس يا ان جي مدت ڪجهه حدن سان مطابقت نه آهي)

تنهن ڪري، اچو ته هاڻي ڏسو ته هڪ اڻڄاتل سگنل جهڙو نظر اچي ٿو:

مون کي مقناطيسي ٽيپ مان اڻڄاتل شڪل ۾ ڊيٽا ڪيئن حاصل ڪئي

هي آهي پائلٽ ٽون. سگنل جي شڪل خاص طور تي مختلف آهي، پر اهو واضح آهي ته سگنل هڪ خاص تعدد جي مختصر دال کي ورجائڻ تي مشتمل آهي. 44100 Hz جي نموني جي تعدد تي، "چوٽي" جي وچ ۾ فاصلو لڳ ڀڳ 48 نمونن (جيڪو ~ 918 Hz جي فريڪوئنسي سان ملندو آهي). اچو ته هن انگن اکرن کي ياد رکون.

اچو ته هاڻي ڊيٽا جي ٽڪڙي کي ڏسو:

مون کي مقناطيسي ٽيپ مان اڻڄاتل شڪل ۾ ڊيٽا ڪيئن حاصل ڪئي

جيڪڏهن اسان انفرادي دالن جي وچ ۾ فاصلو ماپ ڪريون ٿا، اهو ظاهر ٿئي ٿو ته "ڊگهي" دالن جي وچ ۾ فاصلو اڃا تائين ~ 48 نمونو آهي، ۽ ننڍن جي وچ ۾ - ~ 24. ٿورو اڳتي ڏسندي، مان چوندس ته آخر ۾ اهو ظاهر ٿيو ته 918 هز جي فريڪوئنسي سان "حوالو" دال مسلسل، شروع کان آخر تائين فائل جي پيروي ڪندا آهن. اهو فرض ڪري سگهجي ٿو ته ڊيٽا کي منتقل ڪرڻ دوران، جيڪڏهن حوالن جي دال جي وچ ۾ هڪ اضافي نبض اچي ٿي، اسان ان کي بٽ 1 سمجهون ٿا، ٻي صورت ۾ 0.

هم وقت سازي جي نبض بابت ڇا؟ اچو ته ڊيٽا جي شروعات کي ڏسو:

مون کي مقناطيسي ٽيپ مان اڻڄاتل شڪل ۾ ڊيٽا ڪيئن حاصل ڪئي

پائلٽ ٽون ختم ٿئي ٿو ۽ ڊيٽا فوري طور تي شروع ٿئي ٿي. ٿوري دير کان پوء، ڪيترن ئي مختلف آڊيو رڪارڊنگ جو تجزيو ڪرڻ کان پوء، اسان کي دريافت ڪيو ويو ته ڊيٽا جي پهرين بائيٽ هميشه ساڳي آهي (10100101b، A5h). ڪمپيوٽر ان کي حاصل ڪرڻ کان پوء ڊيٽا پڙهڻ شروع ڪري سگھي ٿو.

توهان هم وقت سازي بائيٽ ۾ آخري 1st کان فوري طور تي پهرين ريفرنس پلس جي شفٽ تي ڌيان ڏئي سگهو ٿا. اهو گهڻو پوء دريافت ڪيو ويو ڊيٽا جي سڃاڻپ پروگرام جي ترقي جي عمل ۾، جڏهن فائل جي شروعات ۾ ڊيٽا کي مستحڪم طور تي پڙهي نه سگهيو.

هاڻي اچو ته هڪ الگورٿم بيان ڪرڻ جي ڪوشش ڪريون جيڪو هڪ آڊيو فائل کي پروسيس ڪندو ۽ ڊيٽا لوڊ ڪندو.

ڊيٽا لوڊ ڪندي

پهرين، اچو ته ڪجهه فرضن تي نظر رکون ته الگورتھم کي سادو رکڻ لاء:

  1. اسان صرف WAV فارميٽ ۾ فائلن تي غور ڪنداسين؛
  2. آڊيو فائل لازمي طور تي پائلٽ ٽون سان شروع ٿيڻ گهرجي ۽ شروع ۾ خاموشي تي مشتمل نه هجڻ گهرجي
  3. ماخذ فائل کي 44100 Hz جي نموني جي شرح هجڻ گهرجي. انهي صورت ۾، 48 نمونن جي حوالي سان دال جي وچ ۾ فاصلو اڳ ۾ ئي طئي ڪيو ويو آهي ۽ اسان کي ان کي پروگرام جي حساب سان حساب ڪرڻ جي ضرورت ناهي.
  4. نموني فارميٽ ڪا به ٿي سگهي ٿي (8/16 بِٽ/ فلوٽنگ پوائنٽ) - جڏهن ته پڙهڻ وقت اسان ان کي گهربل هڪ ۾ تبديل ڪري سگهون ٿا؛
  5. اسان فرض ڪريون ٿا ته ماخذ فائل طول و عرض جي ذريعي معمول ڪئي وئي آهي، جنهن جي نتيجي کي مستحڪم ڪرڻ گهرجي؛

پڙهڻ جو الگورتھم ھيٺ ڏنل ھوندو:

  1. اسان فائل کي ميموري ۾ پڙهون ٿا، ساڳئي وقت نموني فارميٽ کي 8 بٽ ۾ تبديل ڪريون؛
  2. آڊيو ڊيٽا ۾ پهرين نبض جي پوزيشن کي طئي ڪريو. هن کي ڪرڻ لاء، توهان کي حساب ڪرڻ جي ضرورت آهي نموني جو تعداد وڌ ۾ وڌ طول و عرض سان. سادگي لاءِ، اسان ان کي هڪ ڀيرو دستي طور حساب ڪنداسين. اچو ته ان کي محفوظ ڪريون متغير prev_pos؛
  3. آخري نبض جي پوزيشن ۾ 48 شامل ڪريو (pos:= prev_pos + 48)
  4. جيئن ته 48 جي پوزيشن کي وڌائڻ جي ضمانت نه آهي ته اسان کي ايندڙ ريفرنس پلس جي پوزيشن حاصل ڪنداسين (ٽيپ جي خرابين، ٽيپ ڊرائيو ميڪانيزم جي غير مستحڪم آپريشن، وغيره)، اسان کي پوزيشن پلس جي پوزيشن کي ترتيب ڏيڻ جي ضرورت آهي. هن کي ڪرڻ لاء، ڊيٽا جو هڪ ننڍڙو ٽڪرو وٺو (pos-8؛ pos + 8) ۽ ان تي وڌ ۾ وڌ طول و عرض جي قيمت ڳوليو. وڌ ۾ وڌ جي مطابق پوزيشن پوسٽ ۾ محفوظ ڪئي ويندي. هتي 8 = 48/6 هڪ تجرباتي طور تي حاصل ڪيل مستقل آهي، جيڪو ضمانت ڏئي ٿو ته اسان صحيح وڌ ۾ وڌ طئي ڪنداسين ۽ ٻين تسلسلن کي متاثر نه ڪنداسين جيڪي شايد ويجهي هوندا. تمام خراب حالتن ۾، جڏهن دال جي وچ ۾ فاصلو 48 کان تمام گهٽ يا وڌيڪ آهي، توهان پلس لاء زبردستي ڳولا لاڳو ڪري سگهو ٿا، پر آرٽيڪل جي دائري ۾ آئون ان کي الگورتھم ۾ بيان نه ڪندس؛
  5. پوئين قدم تي، اهو به چيڪ ڪرڻ ضروري آهي ته ريفرنس نبض سڀني کي ملي هئي. اهو آهي، جيڪڏهن توهان صرف وڌ ۾ وڌ ڳوليندا آهيو، اهو ضمانت نٿو ڏئي ته تسلسل هن حصي ۾ موجود آهي. پڙھڻ واري پروگرام جي منھنجي تازي عمل ۾، مان ھڪڙي ڀاڱي تي وڌ ۾ وڌ ۽ گھٽ ۾ گھٽ طول و عرض جي قدرن جي وچ ۾ فرق جي جانچ ڪريان ٿو، ۽ جيڪڏھن اھو ھڪڙي خاص حد کان وڌي وڃي، مان ھڪڙي تسلسل جي موجودگي کي ڳڻان ٿو. سوال اهو به آهي ته جيڪڏهن ريفرنس نبض نه ملي ته ڇا ڪجي. هتي 2 اختيار آهن: يا ته ڊيٽا ختم ٿي وئي آهي ۽ خاموشي پٺيان، يا اهو سمجهڻ گهرجي ته پڙهڻ جي غلطي. تنهن هوندي، اسان هن کي ڇڏي ڏينداسين الگورتھم کي آسان ڪرڻ لاء؛
  6. ايندڙ قدم تي، اسان کي ڊيٽا جي نبض جي موجودگي کي طئي ڪرڻ جي ضرورت آهي (bit 0 يا 1)، ان لاء اسان وٺون ٿا وچ واري حصي جي وچ ۾ (prev_pos؛ pos) Middle_pos برابر Middle_pos := (prev_pos+pos)/2 ۽ وچولي_پوز جي ڪجهه پاڙي ۾ حصي تي (middle_pos-8;middle_pos +8) اچو ته حساب ڪريون وڌ ۾ وڌ ۽ گھٽ ۾ گھٽ طول و عرض. جيڪڏهن انهن جي وچ ۾ فرق 10 کان وڌيڪ آهي، اسان نتيجو ۾ bit 1 لکندا آهيون، ٻي صورت ۾ 0. 10 مسلسل حاصل ڪيل تجرباتي طور تي.
  7. prev_pos ۾ موجوده پوزيشن محفوظ ڪريو (prev_pos := pos)
  8. ورجايو قدم 3 کان شروع ٿيڻ تائين جيستائين اسان پوري فائل کي نه پڙهون؛
  9. نتيجو بٽ صف کي بائيٽ جي سيٽ طور محفوظ ڪيو وڃي. جيئن ته اسان پڙهڻ دوران هم وقت سازي بائيٽ کي حساب ۾ نه ورتو آهي، بٽس جو تعداد 8 جو هڪ کان وڌيڪ نه هوندو، ۽ گهربل بٽ آفسيٽ پڻ اڻڄاتل آهي. الورورٿم جي پهرين عمل ۾، مون کي مطابقت پذير بائيٽ جي وجود جي باري ۾ نه ڄاڻ هئي ۽ ان ڪري صرف 8 فائلن کي محفوظ ڪيو ويو مختلف نمبرن سان آفسٽ بٽ. انهن مان هڪ صحيح ڊيٽا تي مشتمل آهي. فائنل الگورٿم ۾، مان صرف A5h تائين سڀني بٽس کي هٽائي ٿو، جيڪا مون کي فوري طور تي صحيح آئوٽ فائل حاصل ڪرڻ جي اجازت ڏئي ٿي.

روبي ۾ الگورتھم، دلچسپي وارن لاء
مون پروگرام لکڻ لاءِ روبي کي ٻولي طور چونڊيو، ڇاڪاڻ ته... مان گهڻو ڪري ان تي پروگرام ڪندو آهيان. اختيار اعلي ڪارڪردگي نه آهي، پر پڙهڻ جي رفتار کي ممڪن طور تي تيز ڪرڻ جو ڪم ان جي قابل ناهي.

# Используем gem 'wavefile'
require 'wavefile'

reader = WaveFile::Reader.new('input.wav')
samples = []
format = WaveFile::Format.new(:mono, :pcm_8, 44100)

# Читаем WAV файл, конвертируем в формат Mono, 8 bit 
# Массив samples будет состоять из байт со значениями 0-255
reader.each_buffer(10000) do |buffer|
  samples += buffer.convert(format).samples
end

# Позиция первого импульса (вместо 0)
prev_pos = 0
# Расстояние между импульсами
distance = 48
# Значение расстояния для окрестности поиска локального максимума
delta = (distance / 6).floor
# Биты будем сохранять в виде строки из "0" и "1"
bits = ""

loop do
  # Рассчитываем позицию следующего импульса
  pos = prev_pos + distance
  
  # Выходим из цикла если данные закончились 
  break if pos + delta >= samples.size

  # Корректируем позицию pos обнаружением максимума на отрезке [pos - delta;pos + delta]
  (pos - delta..pos + delta).each { |p| pos = p if samples[p] > samples[pos] }

  # Находим середину отрезка [prev_pos;pos]
  middle_pos = ((prev_pos + pos) / 2).floor

  # Берем окрестность в середине 
  sample = samples[middle_pos - delta..middle_pos + delta]

  # Определяем бит как "1" если разница между максимальным и минимальным значением на отрезке превышает 10
  bit = sample.max - sample.min > 10
  bits += bit ? "1" : "0"
end

# Определяем синхро-байт и заменяем все предшествующие биты на 256 бит нулей (согласно спецификации формата) 
bits.gsub! /^[01]*?10100101/, ("0" * 256) + "10100101"

# Сохраняем выходной файл, упаковывая биты в байты
File.write "output.cas", [bits].pack("B*")

نتيجي ۾

الورورٿم ۽ مستقل جي ڪيترن ئي قسمن جي ڪوشش ڪئي، مان خوش قسمت هوس ته ڪجهه انتهائي دلچسپ حاصل ڪرڻ لاء:

مون کي مقناطيسي ٽيپ مان اڻڄاتل شڪل ۾ ڊيٽا ڪيئن حاصل ڪئي

تنهن ڪري، ڪردار جي تارن سان فيصلو ڪندي، اسان وٽ هڪ پروگرام آهي گراف ٺاهڻ لاء. بهرحال، پروگرام جي متن ۾ ڪي به لفظ نه آهن. سڀئي لفظ انڪوڊ ٿيل آهن بائٽس (هر قدر > 80h). هاڻي اسان کي اهو معلوم ڪرڻو پوندو ته 80 واري ڏهاڪي کان ڪهڙي ڪمپيوٽر پروگرامن کي هن فارميٽ ۾ محفوظ ڪري سگهي ٿو.

حقيقت ۾، اهو هڪ بنيادي پروگرام وانگر تمام گهڻو آهي. ZX Spectrum ڪمپيوٽر پروگرامن کي تقريباً ساڳئي فارميٽ ۾ ميموري ۾ محفوظ ڪري ٿو ۽ پروگرامن کي ٽيپ ڪرڻ لاءِ محفوظ ڪري ٿو. بس صورت ۾، مون لفظن جي خلاف چيڪ ڪيو ٽيبل. بهرحال، نتيجو واضح طور تي منفي هو.

مون ان وقت جي مشهور اٽاري، ڪموڊور 64 ۽ ٻين ڪيترن ئي ڪمپيوٽرن جا بنيادي لفظ به چيڪ ڪيا، جن لاءِ مون دستاويز ڳولڻ جي قابل ٿيس، پر ڪاميابيءَ کان سواءِ - ريٽرو ڪمپيوٽرن جي قسمن بابت منهنجي ڄاڻ ايتري وسيع نه ٿي.

پوءِ مون وڃڻ جو فيصلو ڪيو فهرست۽ پوءِ منهنجي نظر ٺاهيندڙ ريڊيو شيڪ ۽ TRS-80 ڪمپيوٽر جي نالي تي ٿي. هي اهي نالا آهن، جيڪي منهنجي ٽيبل تي پيل ڪئسٽن جي ليبل تي لکيل هئا! مون کي انهن نالن جي اڳي خبر نه هئي ۽ نه ئي TRS-80 ڪمپيوٽر سان واقفيت هئي، ان ڪري مون کي ائين لڳي رهيو هو ته ريڊيو شيڪ هڪ آڊيو ڪيسٽ ٺاهيندڙ آهي جهڙوڪ BASF، سوني يا TDK، ۽ TRS-80 پلے بیک وقت هو. ڇو نه؟

ڪمپيوٽر ٽنڊي/ريڊيو شيڪ TRS-80

اهو تمام گهڻو امڪان آهي ته سوال ۾ آڊيو رڪارڊنگ، جنهن کي مون مضمون جي شروعات ۾ هڪ مثال طور ڏنو، ڪمپيوٽر تي هن طرح ٺاهيو ويو آهي:

مون کي مقناطيسي ٽيپ مان اڻڄاتل شڪل ۾ ڊيٽا ڪيئن حاصل ڪئي

اهو ظاهر ٿيو ته هي ڪمپيوٽر ۽ ان جي مختلف قسمن (ماڊل I / ماڊل III / ماڊل IV، وغيره) هڪ وقت ۾ تمام مشهور هئا (يقينا، روس ۾ نه). اهو قابل ذڪر آهي ته پروسيسر استعمال ڪيو ويو آهي Z80 پڻ. هن ڪمپيوٽر لاء توهان انٽرنيٽ تي ڳولي سگهو ٿا تمام گھڻي ڄاڻ. 80 جي ڏهاڪي ۾، ڪمپيوٽر جي معلومات ۾ ورهايو ويو رسالا. هن وقت ڪيترائي آهن emulators مختلف پليٽ فارمن لاء ڪمپيوٽر.

مون ايموليٽر ڊائون لوڊ ڪيو trs80gp ۽ پهريون ڀيرو مون کي ڏسڻ جي قابل ٿي ويو ته هي ڪمپيوٽر ڪيئن ڪم ڪيو. يقينن، ڪمپيوٽر رنگن جي پيداوار کي سپورٽ نه ڪيو؛ اسڪرين جي قرارداد صرف 128x48 پکسلز هئي، پر اتي ڪيتريون ئي واڌايون ۽ تبديليون هيون جيڪي اسڪرين جي قرارداد کي وڌائي سگھن ٿيون. هن ڪمپيوٽر لاءِ آپريٽنگ سسٽم جا به ڪيترائي آپشن هئا ۽ بنيادي ٻولي کي لاڳو ڪرڻ جا آپشن (جيڪا ZX اسپيڪٽرم جي برعڪس، ڪجهه ماڊلز ۾ روم ۾ ”فليش“ به نه هئي ۽ ڪنهن به آپشن کي فلاپي ڊسڪ مان لوڊ ڪري سگهجي ٿو، جيئن او ايس پاڻ)

مون کي به مليو افاديت آڊيو رڪارڊنگ کي CAS فارميٽ ۾ تبديل ڪرڻ لاءِ، جنهن کي ايموليٽرز جي مدد ملي ٿي، پر ڪجهه سببن ڪري انهن کي استعمال ڪندي منهنجي ڪئسٽن مان رڪارڊنگ پڙهڻ ممڪن نه هو.

CAS فائل فارميٽ کي معلوم ڪرڻ کان پوءِ (جيڪو ٽيپ مان ڊيٽا جي صرف هڪ بِٽ بِٽ ڪاپي ٿي سگهي ٿو جيڪا مون وٽ اڳ ۾ ئي هئي، سواءِ هيڊر جي هڪ هم وقت ساز بائيٽ جي موجودگي سان)، مون هڪ ٺاهيو. منهنجي پروگرام ۾ ڪجھ تبديليون ۽ هڪ ڪم ڪندڙ CAS فائل ڪڍڻ جي قابل هئي جيڪا ايموليٽر ۾ ڪم ڪيو (TRS-80 ماڊل III):

مون کي مقناطيسي ٽيپ مان اڻڄاتل شڪل ۾ ڊيٽا ڪيئن حاصل ڪئي

مون تبادلي جي يوٽيلٽي جو جديد نسخو ڊزائين ڪيو آھي پاڻمرادو طئي ڪرڻ سان پھرئين نبض ۽ ريفرنس دال جي وچ ۾ فاصلو GEM پيڪيج جي طور تي، سورس ڪوڊ موجود آھي GitHub.

ٿڪل

جيڪو رستو اسان سفر ڪيو آهي اهو ماضي ۾ هڪ دلچسپ سفر ثابت ٿيو، ۽ مان خوش آهيان ته آخر ۾ مون کي جواب مليو. ٻين شين مان، مان:

  • مون ZX اسپيڪٽرم ۾ ڊيٽا کي محفوظ ڪرڻ لاءِ فارميٽ معلوم ڪيو ۽ آڊيو ڪيسٽن مان ڊيٽا کي محفوظ ڪرڻ/پڙهڻ لاءِ تعمير ٿيل ROM روٽين جو اڀياس ڪيو.
  • مون کي TRS-80 ڪمپيوٽر ۽ ان جي مختلف قسمن سان واقفيت حاصل ڪئي، آپريٽنگ سسٽم جو اڀياس ڪيو، نموني پروگرامن کي ڏٺو ۽ جيتوڻيڪ مون کي مشين ڪوڊس ۾ ڊيبگنگ ڪرڻ جو موقعو مليو (آخرڪار، سڀ Z80 ميمونڪس مون کي واقف آهن)
  • آڊيو رڪارڊنگ کي CAS فارميٽ ۾ تبديل ڪرڻ لاءِ هڪ مڪمل افاديت لکي، جيڪا ڊيٽا پڙهي سگهي ٿي جيڪا ”سرڪاري“ يوٽيلٽي جي سڃاڻپ نه هجي.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو