මම චුම්බක පටියකින් නොදන්නා ආකෘතියකින් දත්ත ලබා ගත් ආකාරය

මුදලටය

රෙට්රෝ දෘඪාංග වලට ඇලුම් කරන්නෙකු වූ මම වරක් එක්සත් රාජධානියේ විකුණුම්කරුවෙකුගෙන් ZX Spectrum+ එකක් මිලදී ගත්තෙමි. පරිගණකය සමඟම ඇතුළත් කර ඇති අතර, මට ක්‍රීඩා සහිත ශ්‍රව්‍ය කැසට් කිහිපයක් (උපදෙස් සහිත මුල් ඇසුරුම්වල) මෙන්ම විශේෂ සලකුණු නොමැතිව කැසට්වල පටිගත කරන ලද වැඩසටහන් ද ලැබුණි. පුදුමයට කරුණක් නම්, අවුරුදු 40 ක් පැරණි කැසට් පටවල දත්ත හොඳින් කියවිය හැකි වූ අතර ඒවායින් සියලුම ක්‍රීඩා සහ වැඩසටහන් බාගත කිරීමට මට හැකි විය.

මම චුම්බක පටියකින් නොදන්නා ආකෘතියකින් දත්ත ලබා ගත් ආකාරය

කෙසේ වෙතත්, සමහර කැසට් පටවල ZX Spectrum පරිගණකය මගින් පැහැදිලිවම සිදු නොකළ පටිගත කිරීම් මට හමු විය. ඒවා සම්පූර්ණයෙන්ම වෙනස් වූ අතර, සඳහන් කළ පරිගණකයෙන් පටිගත කිරීම් මෙන් නොව, ඒවා කෙටි මූලික ඇරඹුම් කාරකයකින් ආරම්භ නොකළ අතර, එය සාමාන්‍යයෙන් සියලුම වැඩසටහන් සහ ක්‍රීඩා වල පටිගත කිරීම් වල පවතී.

ටික වේලාවක් මෙය මා හොල්මන් කළේය - මට ඇත්තටම අවශ්‍ය වූයේ ඒවායේ සැඟවී ඇති දේ සොයා ගැනීමටය. ඔබට ශ්‍රව්‍ය සංඥාව බයිට් අනුපිළිවෙලක් ලෙස කියවිය හැකි නම්, ඔබට සංඥාවේ මූලාරම්භය දැක්වෙන අක්ෂර හෝ ඕනෑම දෙයක් සෙවිය හැක. එක්තරා ආකාරයක ප්‍රති-පුරාවිද්‍යාව.

දැන් මම හැම පැත්තකින්ම ගිහින් කැසට් වල ලේබල් දිහාම බලලා හිනා වෙනවා මොකද

පිළිතුර මගේ ඇස් ඉදිරිපිටම විය
වම් කැසට් පටයේ ලේබලයේ TRS-80 පරිගණකයේ නම සහ නිෂ්පාදකයාගේ නමට මදක් පහළින්: "ඇමරිකා එක්සත් ජනපදයේ රේඩියෝ ෂැක් විසින් නිෂ්පාදනය කරන ලදී"

(ඔබට කුමන්ත්‍රණය අවසානය දක්වා තබා ගැනීමට අවශ්‍ය නම්, ස්පොයිලර් යටට නොයන්න)

ශ්රව්ය සංඥා සංසන්දනය කිරීම

ඔක්කොටම කලින් ඕඩියෝ රෙකෝඩිං ඩිජිටලයිස් කරමු. ඔබට එය ඇසෙන දේට සවන් දිය හැකිය:


සුපුරුදු පරිදි ZX ස්පෙක්ට්‍රම් පරිගණකයෙන් පටිගත කිරීම ශබ්ද කරයි:


අවස්ථා දෙකේදීම, පටිගත කිරීමේ ආරම්භයේ දී ඊනියා ඇත නියමු ස්වරය - එකම සංඛ්‍යාතයේ ශබ්දයක් (පළමු පටිගත කිරීමේදී එය ඉතා කෙටි <1 තත්පර, නමුත් වෙන්කර හඳුනාගත හැකිය). නියමු ස්වරය පරිගණකය දත්ත ලබා ගැනීමට සූදානම් වන ලෙස සංඥා කරයි. රීතියක් ලෙස, සෑම පරිගණකයක්ම සංඥාවේ හැඩය සහ එහි සංඛ්යාතය මගින් එහි "තමන්ගේම" නියමු ස්වරය පමණක් හඳුනා ගනී.

සංඥා හැඩය ගැනම යමක් කිව යුතුය. උදාහරණයක් ලෙස, ZX වර්ණාවලියේ එහි හැඩය සෘජුකෝණාස්රාකාර වේ:

මම චුම්බක පටියකින් නොදන්නා ආකෘතියකින් දත්ත ලබා ගත් ආකාරය

නියමු ස්වරයක් අනාවරණය කරගත් විට, සංඥාව හඳුනාගෙන ඇති බව දැක්වීමට ZX වර්ණාවලිය තිරයේ මායිමේ රතු සහ නිල් තීරු මාරුවෙන් මාරුවට පෙන්වයි. නියමු ස්වරය අවසන් වේ සමමුහුර්ත ස්පන්දනය, දත්ත ලැබීම ආරම්භ කිරීමට පරිගණකයට සංඥා කරයි. එය කෙටි කාලසීමාවකින් සංලක්ෂිත වේ (නියමු තානය හා පසු දත්ත සමඟ සසඳන විට) (රූපය බලන්න)

සමමුහුර්ත ස්පන්දනය ලැබීමෙන් පසු, පරිගණකය සංඥාවේ එක් එක් නැගීම / වැටීම වාර්තා කරයි, එහි කාලසීමාව මැනීම. කාලසීමාව නිශ්චිත සීමාවකට වඩා අඩු නම්, බිට් 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 Hz සංඛ්‍යාතයක් සහිත “යොමු” ස්පන්දන ගොනුවේ ආරම්භයේ සිට අවසානය දක්වා අඛණ්ඩව අනුගමනය කරන බව මම කියමි. දත්ත සම්ප්‍රේෂණය කිරීමේදී, යොමු ස්පන්දන අතර අමතර ස්පන්දනයක් හමු වුවහොත්, අපි එය bit 1 ලෙසත්, එසේ නොමැතිනම් 0 ලෙසත් සලකමු යැයි උපකල්පනය කළ හැක.

සමමුහුර්ත ස්පන්දනය ගැන කුමක් කිව හැකිද? දත්තවල ආරම්භය දෙස බලමු:

මම චුම්බක පටියකින් නොදන්නා ආකෘතියකින් දත්ත ලබා ගත් ආකාරය

නියමු ස්වරය අවසන් වන අතර දත්ත වහාම ආරම්භ වේ. මඳ වේලාවකට පසු, විවිධ ශ්‍රව්‍ය පටිගත කිරීම් කිහිපයක් විශ්ලේෂණය කිරීමෙන් පසු, දත්තවල පළමු බයිටය සෑම විටම සමාන බව සොයා ගැනීමට අපට හැකි විය (10100101b, A5h). පරිගණකය දත්ත ලැබීමෙන් පසු කියවීම ආරම්භ කළ හැකිය.

සමමුහුර්ත බයිටයේ අවසාන 1 ට පසු වහාම පළමු යොමු ස්පන්දනය මාරු කිරීම කෙරෙහි ඔබට අවධානය යොමු කළ හැකිය. ගොනුවේ ආරම්භයේ ඇති දත්ත ස්ථායීව කියවීමට නොහැකි වූ විට, දත්ත හඳුනාගැනීමේ වැඩසටහනක් සංවර්ධනය කිරීමේ ක්රියාවලියේදී එය බොහෝ කලකට පසුව සොයා ගන්නා ලදී.

දැන් අපි ශ්‍රව්‍ය ගොනුවක් සකසා දත්ත පූරණය කරන ඇල්ගොරිතමයක් විස්තර කිරීමට උත්සාහ කරමු.

දත්ත පූරණය කරමින්

පළමුව, ඇල්ගොරිතම සරලව තබා ගැනීමට උපකල්පන කිහිපයක් බලමු:

  1. අපි WAV ආකෘතියේ ගොනු පමණක් සලකා බලමු;
  2. ශ්‍රව්‍ය ගොනුව නියමු ස්වරයකින් ආරම්භ විය යුතු අතර ආරම්භයේ නිශ්ශබ්දතාව අඩංගු නොවිය යුතුය
  3. මූලාශ්‍ර ගොනුවට 44100 Hz නියැදි අනුපාතයක් තිබිය යුතුය. මෙම අවස්ථාවෙහිදී, සාම්පල 48 ක යොමු ස්පන්දන අතර දුර දැනටමත් තීරණය කර ඇති අතර එය ක්රමලේඛනගතව ගණනය කිරීම අවශ්ය නොවේ;
  4. නියැදි ආකෘතිය ඕනෑම (බිටු 8/16/පාවෙන ලක්ෂ්‍යය) විය හැක - කියවන විට අපට එය අවශ්‍ය එකක් බවට පරිවර්තනය කළ හැකි බැවින්;
  5. ප්‍රභව ගොනුව විස්තාරය මගින් සාමාන්‍යකරණය කර ඇති බව අපි උපකල්පනය කරමු, එය ප්‍රති result ලය ස්ථාවර කළ යුතුය;

කියවීමේ ඇල්ගොරිතම පහත පරිදි වනු ඇත:

  1. අපි ගොනුව මතකයට කියවා, ඒ සමඟම නියැදි ආකෘතිය බිටු 8 බවට පරිවර්තනය කරමු;
  2. ශ්රව්ය දත්තවල පළමු ස්පන්දනයේ පිහිටීම තීරණය කරන්න. මෙය සිදු කිරීම සඳහා, ඔබ උපරිම විස්තාරය සහිත නියැදි සංඛ්යාව ගණනය කළ යුතුය. සරල බව සඳහා, අපි එය එක් වරක් අතින් ගණනය කරන්නෙමු. අපි එය prev_pos විචල්‍යයට සුරකිමු;
  3. අවසාන ස්පන්දනයේ ස්ථානයට 48 එකතු කරන්න (pos := prev_pos + 48)
  4. ස්ථානය 48 කින් වැඩි කිරීමෙන් අපි ඊළඟ යොමු ස්පන්දනයේ ස්ථානයට (ටේප් දෝෂ, ටේප් ඩ්‍රයිව් යාන්ත්‍රණයේ අස්ථායී ක්‍රියාකාරිත්වය යනාදිය) යන බවට සහතික නොවන බැවින්, අපි pos ස්පන්දනයේ පිහිටීම සකස් කළ යුතුය. මෙය සිදු කිරීම සඳහා, කුඩා දත්ත කැබැල්ලක් (pos-8;pos+8) ගෙන එය මත උපරිම විස්තාරය අගය සොයා ගන්න. උපරිමයට අනුරූප වන ස්ථානය pos හි ගබඩා කෙරේ. මෙහි 8 = 48/6 යනු පර්යේෂණාත්මකව ලබාගත් නියතයකි, එය අපි නිවැරදි උපරිමය තීරණය කරන බවට සහතික වන අතර අසල ඇති වෙනත් ආවේගවලට බලපාන්නේ නැත. ඉතා නරක අවස්ථාවලදී, ස්පන්දන අතර දුර ප්රමාණය 48 ට වඩා අඩු හෝ වැඩි වන විට, ඔබට ස්පන්දනයක් සඳහා බලහත්කාරයෙන් සෙවීමක් ක්රියාත්මක කළ හැකිය, නමුත් ලිපියේ විෂය පථය තුළ මම මෙය ඇල්ගොරිතමයේ විස්තර නොකරමි;
  5. පෙර පියවරේදී, යොමු ස්පන්දනය කිසිසේත්ම හමු වී ඇත්දැයි පරීක්ෂා කිරීමද අවශ්‍ය වේ. එනම්, ඔබ සරලව උපරිමය සොයන්නේ නම්, මෙම ආවේගය මෙම කොටසෙහි පවතින බව සහතික නොවේ. මගේ නවතම කියවීමේ වැඩසටහන ක්‍රියාත්මක කිරීමේදී, මම කොටසක උපරිම සහ අවම විස්තාර අගයන් අතර වෙනස පරීක්ෂා කරන අතර එය යම් සීමාවක් ඉක්මවා ගියහොත්, මම ආවේගයක් පවතින බව ගණන් කරමි. ප්‍රශ්නය වන්නේ යොමු ස්පන්දනය සොයාගත නොහැකි නම් කුමක් කළ යුතුද යන්නයි. විකල්ප 2 ක් ඇත: එක්කෝ දත්ත අවසන් වී ඇති අතර නිශ්ශබ්දතාවය අනුගමනය කරයි, නැතහොත් මෙය කියවීමේ දෝෂයක් ලෙස සැලකිය යුතුය. කෙසේ වෙතත්, ඇල්ගොරිතම සරල කිරීම සඳහා අපි මෙය අත්හැර දමමු;
  6. මීළඟ පියවරේදී, අපි දත්ත ස්පන්දනයක් (බිට් 0 හෝ 1) තිබේද යන්න තීරණය කළ යුතුය, මේ සඳහා අපි මැද_pos ට සමාන (prev_pos;pos) මැද_pos:= (prev_pos+pos)/2 සහ මැද_pos හි සමහර අසල්වැසි ප්‍රදේශයක (middle_pos-8;middle_pos +8) අපි උපරිම සහ අවම විස්තාරය ගණනය කරමු. ඒවා අතර වෙනස 10 ට වඩා වැඩි නම්, අපි ප්රතිඵලය තුලට bit 1 ලියන්නෙමු, එසේ නොමැතිනම් 0. 10 යනු පර්යේෂණාත්මකව ලබාගත් නියතයකි;
  7. වත්මන් ස්ථානය prev_pos හි සුරකින්න (prev_pos := pos)
  8. අපි සම්පූර්ණ ගොනුව කියවන තෙක් පියවර 3 සිට නැවත නැවත කරන්න;
  9. ප්‍රතිඵලයක් ලෙස ලැබෙන බිට් අරාව බයිට් කට්ටලයක් ලෙස සුරැකිය යුතුය. කියවීමේදී අපි සමමුහුර්ත බයිටය සැලකිල්ලට නොගත් නිසා, බිටු ගණන 8 ගුණාකාර නොවිය හැකි අතර, අවශ්‍ය බිට් ඕෆ්සෙට් ද නොදනී. ඇල්ගොරිතමයේ පළමු ක්‍රියාත්මක කිරීමේදී, සමමුහුර්ත බයිටයේ පැවැත්ම ගැන මම නොදැන සිටි අතර එබැවින් විවිධ ඕෆ්සෙට් බිටු සහිත ගොනු 8 ක් සරලව සුරකින ලදි. ඒවායින් එකක නිවැරදි දත්ත අඩංගු විය. අවසාන ඇල්ගොරිතමයේ, මම A5h දක්වා සියලුම බිටු ඉවත් කරමි, එමඟින් නිවැරදි ප්‍රතිදාන ගොනුව වහාම ලබා ගැනීමට මට ඉඩ සලසයි.

රුබී ඇල්ගොරිතම, උනන්දුවක් දක්වන අය සඳහා
මම වැඩසටහන ලිවීමේ භාෂාව ලෙස රූබි තෝරා ගත්තෙමි, මන්ද ... මම ඒක ගොඩක් වෙලාවට program කරනවා. විකල්පය ඉහළ කාර්ය සාධනයක් නොවේ, නමුත් කියවීමේ වේගය හැකි තරම් වේගවත් කිරීමේ කාර්යය එය වටින්නේ නැත.

# Используем 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 පරිගණකය ආසන්න වශයෙන් එකම ආකෘතියේ වැඩසටහන් මතකයේ ගබඩා කරන අතර වැඩසටහන් පටිගත කිරීමට සුරකියි. යම් අවස්ථාවක දී, මම මූල පද වලට එරෙහිව පරීක්ෂා කළෙමි වගුව. කෙසේ වෙතත්, ප්රතිඵලය පැහැදිලිවම ඍණාත්මක විය.

මම ජනප්‍රිය Atari, Commodore 64 සහ එවකට තිබූ තවත් පරිගණක කිහිපයක මූලික මූල පද ද පරීක්ෂා කළෙමි, ඒ සඳහා මට ලේඛන සොයා ගැනීමට හැකි වූ නමුත් සාර්ථක නොවීය - රෙට්රෝ පරිගණක වර්ග පිළිබඳ මගේ දැනුම එතරම් පුළුල් නොවීය.

ඊට පස්සේ මම යන්න තීරණය කළා ලැයිස්තුව, පසුව මගේ බැල්ම වැටුනේ නිෂ්පාදකයා වන රේඩියෝ ෂැක් සහ TRS-80 පරිගණකයේ නමටයි. මගේ මේසය මත වැතිර තිබූ කැසට් පටවල ලේබල්වල ලියා තිබූ නම් මේවාය! මම මීට පෙර මෙම නම් දැන නොසිටි අතර TRS-80 පරිගණකය හුරුපුරුදු නොවෙමි, එබැවින් මට පෙනුනේ Radio Shack යනු BASF, Sony හෝ TDK වැනි ශ්‍රව්‍ය කැසට් නිෂ්පාදකයෙකු බවත්, TRS-80 නැවත ධාවනය වන කාලය බවත්ය. ඇයි නැත්තේ?

Computer Tandy/Radio Shack TRS-80

ලිපියේ ආරම්භයේ දී මා උදාහරණයක් ලෙස දුන් අදාළ ශ්‍රව්‍ය පටිගත කිරීම මෙවැනි පරිගණකයකින් සාදන ලද්දක් විය හැකිය:

මම චුම්බක පටියකින් නොදන්නා ආකෘතියකින් දත්ත ලබා ගත් ආකාරය

මෙම පරිගණකය සහ එහි වර්ග (ආකෘතිය I / මාදිලිය III / IV ආකෘතිය, ආදිය) එක් කාලයකදී ඉතා ජනප්රිය විය (ඇත්ත වශයෙන්ම, රුසියාවේ නොවේ). ඔවුන් භාවිතා කළ ප්‍රොසෙසරයද Z80 වීම විශේෂත්වයකි. මෙම පරිගණකය සඳහා ඔබට අන්තර්ජාලයෙන් සොයාගත හැකිය තොරතුරු ගොඩක්. 80 ගණන්වල පරිගණක තොරතුරු බෙදා හරින ලදී සඟරා. මේ මොහොතේ කිහිපයක් තිබේ ඉමුලේටර් විවිධ වේදිකා සඳහා පරිගණක.

මම emulator එක බාගත්තා trs80gp සහ පළමු වතාවට මට මෙම පරිගණකය ක්‍රියා කරන ආකාරය දැක ගැනීමට හැකි විය. ඇත්ත වශයෙන්ම, පරිගණකය වර්ණ ප්‍රතිදානය සඳහා සහය නොදක්වයි; තිර විභේදනය පික්සල 128x48 ක් පමණි, නමුත් තිර විභේදනය වැඩි කළ හැකි බොහෝ දිගු සහ වෙනස් කිරීම් තිබුණි. මෙම පරිගණකය සඳහා මෙහෙයුම් පද්ධති සඳහා බොහෝ විකල්ප සහ මූලික භාෂාව ක්‍රියාත්මක කිරීම සඳහා විකල්ප රාශියක් තිබුණි (එය, ZX වර්ණාවලිය මෙන් නොව, සමහර මාදිලිවල ROM තුළට “ෆ්ලෑෂ්” කර නොතිබූ අතර ඕනෑම විකල්පයක් floppy disk එකකින් පූරණය කළ හැකිය. මෙහෙයුම් පද්ධතියම)

මටත් හම්බුනා උපයෝගීතාව ශ්‍රව්‍ය පටිගත කිරීම් CAS ආකෘතියට පරිවර්තනය කිරීමට, එය ඉමුලේටර මගින් සහය දක්වයි, නමුත් යම් හේතුවක් නිසා ඒවා භාවිතයෙන් මගේ කැසට් වලින් පටිගත කිරීම් කියවීමට නොහැකි විය.

CAS ගොනු ආකෘතිය හදුනාගත් පසු (එය සමමුහුර්ත බයිටයක් සහිත ශීර්ෂකය හැර, මා සතුව දැනටමත් ඇති ටේප් එකේ දත්තවල ටිකෙන් ටික පිටපතක් බවට පත් විය), මම මගේ වැඩසටහනේ වෙනස්කම් කිහිපයක් සහ ඉමුලේටරයේ (TRS-80 Model III) වැඩ කරන CAS ගොනුවක් ප්‍රතිදානය කිරීමට හැකි විය:

මම චුම්බක පටියකින් නොදන්නා ආකෘතියකින් දත්ත ලබා ගත් ආකාරය

GEM පැකේජයක් ලෙස පළමු ස්පන්දනය සහ යොමු ස්පන්දන අතර දුර ස්වයංක්‍රීයව නිර්ණය කිරීම සමඟින් මම පරිවර්තන උපයෝගීතාවයේ නවතම අනුවාදය නිර්මාණය කළෙමි, මූලාශ්‍ර කේතය ලබා ගත හැකිය Github.

නිගමනය

අප ගමන් කළ මාර්ගය අතීතයට ආකර්ශනීය ගමනක් බවට පත් වූ අතර අවසානයේ මම පිළිතුර සොයා ගැනීම ගැන මම සතුටු වෙමි. වෙනත් දේ අතර, මම:

  • මම ZX වර්ණාවලියේ දත්ත සුරැකීමේ ආකෘතිය සොයා ගත් අතර ශ්‍රව්‍ය කැසට් වලින් දත්ත සුරැකීම/කියවීම සඳහා ගොඩනඟන ලද ROM චර්යාවන් අධ්‍යයනය කළෙමි.
  • මම TRS-80 පරිගණකය සහ එහි ප්‍රභේද සමඟ දැන හඳුනා ගෙන, මෙහෙයුම් පද්ධතිය අධ්‍යයනය කර, නියැදි වැඩසටහන් දෙස බැලූ අතර යන්ත්‍ර කේත වල දෝෂහරණය කිරීමට පවා අවස්ථාව ලැබුණි (සියල්ලට පසු, සියලුම Z80 මතක සටහන් මට හුරුපුරුදුය)
  • "නිල" උපයෝගීතාවයෙන් හඳුනා නොගත් දත්ත කියවිය හැකි, CAS ආකෘතියට ශ්‍රව්‍ය පටිගත කිරීම් පරිවර්තනය කිරීම සඳහා සම්පූර්ණ උපයෝගීතාවයක් ලියා ඇත.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න