முன்வரலாறு
ரெட்ரோ ஹார்டுவேரை விரும்புவதால், நான் ஒருமுறை இங்கிலாந்தில் உள்ள ஒரு விற்பனையாளரிடமிருந்து ZX ஸ்பெக்ட்ரம்+ ஐ வாங்கினேன். கணினியுடன் சேர்த்து, கேம்களுடன் கூடிய பல ஆடியோ கேசட்டுகளையும் (அசல் பேக்கேஜிங்கில் அறிவுறுத்தல்களுடன்), அத்துடன் சிறப்பு அடையாளங்கள் இல்லாமல் கேசட்டுகளில் பதிவுசெய்யப்பட்ட நிரல்களையும் பெற்றேன். ஆச்சரியப்படும் விதமாக, 40 வருடங்கள் பழமையான கேசட்டுகளின் தரவுகள் நன்றாகப் படிக்கக்கூடியதாக இருந்தன, மேலும் அவற்றிலிருந்து கிட்டத்தட்ட எல்லா கேம்களையும் புரோகிராம்களையும் பதிவிறக்கம் செய்ய முடிந்தது.
இருப்பினும், சில கேசட்டுகளில் ZX ஸ்பெக்ட்ரம் கம்ப்யூட்டரால் தெளிவாக செய்யப்படாத பதிவுகளை நான் கண்டேன். அவை முற்றிலும் வித்தியாசமாக ஒலித்தன, மேலும் குறிப்பிடப்பட்ட கணினியிலிருந்து பதிவுகளைப் போலல்லாமல், அவை ஒரு குறுகிய அடிப்படை துவக்க ஏற்றியுடன் தொடங்கவில்லை, இது பொதுவாக அனைத்து நிரல்கள் மற்றும் கேம்களின் பதிவுகளில் உள்ளது.
சில நேரம் இது என்னை வேட்டையாடியது - அவற்றில் என்ன மறைக்கப்பட்டுள்ளது என்பதை நான் கண்டுபிடிக்க விரும்பினேன். நீங்கள் ஆடியோ சிக்னலை பைட்டுகளின் வரிசையாகப் படிக்க முடிந்தால், சிக்னலின் தோற்றத்தைக் குறிக்கும் எழுத்துக்கள் அல்லது எதையும் நீங்கள் தேடலாம். ஒரு வகையான ரெட்ரோ தொல்லியல்.
இப்போது நான் எல்லா வழிகளிலும் சென்று கேசட்டுகளின் லேபிள்களைப் பார்க்கிறேன், ஏனென்றால் நான் புன்னகைக்கிறேன்
பதில் எல்லாம் என் கண் முன்னே இருந்தது
இடது கேசட்டின் லேபிளில் டிஆர்எஸ்-80 கணினியின் பெயரும், உற்பத்தியாளரின் பெயருக்குக் கீழேயும் உள்ளது: "அமெரிக்காவில் ரேடியோ ஷேக்கால் தயாரிக்கப்பட்டது"
(நீங்கள் கடைசி வரை சூழ்ச்சியை வைத்திருக்க விரும்பினால், ஸ்பாய்லரின் கீழ் செல்ல வேண்டாம்)
ஆடியோ சிக்னல்களின் ஒப்பீடு
முதலில் ஒலிப்பதிவுகளை டிஜிட்டல் மயமாக்குவோம். அது எப்படி ஒலிக்கிறது என்பதை நீங்கள் கேட்கலாம்:
வழக்கம் போல் ZX ஸ்பெக்ட்ரம் கணினியிலிருந்து பதிவு ஒலிக்கிறது:
இரண்டு சந்தர்ப்பங்களிலும், பதிவின் தொடக்கத்தில் ஒரு அழைக்கப்படும் பைலட் தொனி - அதே அதிர்வெண்ணின் ஒலி (முதல் பதிவில் இது மிகவும் குறுகியது <1 வினாடி, ஆனால் வேறுபடுத்தக்கூடியது). பைலட் டோன், தரவைப் பெறுவதற்குத் தயாராகும்படி கணினியை சமிக்ஞை செய்கிறது. ஒரு விதியாக, ஒவ்வொரு கணினியும் சிக்னலின் வடிவம் மற்றும் அதன் அதிர்வெண் மூலம் அதன் "சொந்த" பைலட் தொனியை மட்டுமே அங்கீகரிக்கிறது.
சமிக்ஞை வடிவத்தைப் பற்றி ஏதாவது சொல்ல வேண்டியது அவசியம். எடுத்துக்காட்டாக, ZX ஸ்பெக்ட்ரமில் அதன் வடிவம் செவ்வகமானது:
ஒரு பைலட் டோன் கண்டறியப்பட்டால், ZX ஸ்பெக்ட்ரம் சிக்னல் அங்கீகரிக்கப்பட்டதைக் குறிக்க திரையின் எல்லையில் மாறி மாறி சிவப்பு மற்றும் நீலக் கம்பிகளைக் காட்டுகிறது. பைலட் டோன் முடிகிறது ஒத்திசைவு துடிப்பு, இது தரவைப் பெறத் தொடங்குவதற்கு கணினியை சமிக்ஞை செய்கிறது. இது ஒரு குறுகிய காலத்தால் வகைப்படுத்தப்படுகிறது (பைலட் தொனி மற்றும் அடுத்தடுத்த தரவுகளுடன் ஒப்பிடும்போது) (படத்தைப் பார்க்கவும்)
ஒத்திசைவு துடிப்பு பெறப்பட்ட பிறகு, கணினி சிக்னலின் ஒவ்வொரு எழுச்சி / வீழ்ச்சியையும் பதிவு செய்கிறது, அதன் கால அளவை அளவிடுகிறது. கால அளவு ஒரு குறிப்பிட்ட வரம்பை விட குறைவாக இருந்தால், பிட் 1 நினைவகத்தில் எழுதப்படும், இல்லையெனில் 0. பிட்கள் பைட்டுகளாக சேகரிக்கப்பட்டு, N பைட்டுகள் பெறும் வரை செயல்முறை மீண்டும் செய்யப்படுகிறது. N எண் பொதுவாக பதிவிறக்கம் செய்யப்பட்ட கோப்பின் தலைப்பிலிருந்து எடுக்கப்படுகிறது. ஏற்றுதல் வரிசை பின்வருமாறு:
- பைலட் தொனி
- தலைப்பு (நிலையான நீளம்), பதிவிறக்கம் செய்யப்பட்ட தரவின் அளவு (N), கோப்பு பெயர் மற்றும் வகை ஆகியவற்றைக் கொண்டுள்ளது
- பைலட் தொனி
- தரவு தன்னை
தரவு சரியாக ஏற்றப்பட்டுள்ளதா என்பதை உறுதிப்படுத்த, ZX ஸ்பெக்ட்ரம் அழைக்கப்படுவதைப் படிக்கிறது சமநிலை பைட் (பாரிட்டி பைட்), இது எழுதப்பட்ட தரவின் அனைத்து பைட்டுகளையும் XOR செய்வதன் மூலம் கோப்பைச் சேமிக்கும் போது கணக்கிடப்படுகிறது. ஒரு கோப்பைப் படிக்கும் போது, கணினி பெறப்பட்ட தரவிலிருந்து சமநிலை பைட்டைக் கணக்கிடுகிறது, மேலும், சேமிக்கப்பட்டவற்றிலிருந்து முடிவு வேறுபட்டால், "R டேப் ஏற்றுதல் பிழை" என்ற பிழை செய்தியைக் காட்டுகிறது. சரியாகச் சொல்வதானால், படிக்கும் போது, ஒரு துடிப்பை அடையாளம் காண முடியவில்லை என்றால் (தவறிவிட்டது அல்லது அதன் கால அளவு குறிப்பிட்ட வரம்புகளுக்கு இணங்கவில்லை) கணினி இந்த செய்தியை முன்பே வெளியிடலாம்.
எனவே, அறியப்படாத சமிக்ஞை எப்படி இருக்கும் என்பதை இப்போது பார்ப்போம்:
இது பைலட் டோன். சமிக்ஞையின் வடிவம் கணிசமாக வேறுபட்டது, ஆனால் சமிக்ஞை ஒரு குறிப்பிட்ட அதிர்வெண்ணின் குறுகிய துடிப்புகளை மீண்டும் மீண்டும் கொண்டுள்ளது என்பது தெளிவாகிறது. 44100 ஹெர்ட்ஸ் மாதிரி அதிர்வெண்ணில், "சிகரங்களுக்கு" இடையே உள்ள தூரம் தோராயமாக 48 மாதிரிகள் (இது ~918 ஹெர்ட்ஸ் அதிர்வெண்ணுடன் தொடர்புடையது) இந்த எண்ணிக்கையை நினைவில் கொள்வோம்.
இப்போது தரவு பகுதியைப் பார்ப்போம்:
தனிப்பட்ட பருப்புகளுக்கு இடையிலான தூரத்தை நாம் அளந்தால், “நீண்ட” பருப்புகளுக்கு இடையிலான தூரம் இன்னும் ~ 48 மாதிரிகள் மற்றும் குறுகியவற்றுக்கு இடையே - ~ 24 என்று மாறிவிடும். சற்று முன்னோக்கிப் பார்த்தால், இறுதியில் 918 ஹெர்ட்ஸ் அதிர்வெண் கொண்ட “குறிப்பு” பருப்புகள் கோப்பின் தொடக்கத்திலிருந்து இறுதி வரை தொடர்ந்து பின்பற்றப்படுகின்றன என்று நான் கூறுவேன். தரவுகளை அனுப்பும் போது, குறிப்பு பருப்புகளுக்கு இடையில் கூடுதல் துடிப்பு ஏற்பட்டால், அதை பிட் 1 ஆகவும், இல்லையெனில் 0 ஆகவும் கருதுவோம்.
ஒத்திசைவு துடிப்பு பற்றி என்ன? தரவுகளின் தொடக்கத்தைப் பார்ப்போம்:
பைலட் டோன் முடிவடைகிறது மற்றும் தரவு உடனடியாகத் தொடங்குகிறது. சிறிது நேரம் கழித்து, பல்வேறு ஆடியோ பதிவுகளை பகுப்பாய்வு செய்த பிறகு, தரவுகளின் முதல் பைட் எப்போதும் ஒரே மாதிரியாக இருப்பதைக் கண்டறிய முடிந்தது (10100101b, A5h). கணினி அதைப் பெற்ற பிறகு தரவைப் படிக்கத் தொடங்கலாம்.
ஒத்திசைவு பைட்டில் கடைசி 1 ஆம் தேதிக்குப் பிறகு உடனடியாக முதல் குறிப்பு துடிப்பின் மாற்றத்திற்கும் நீங்கள் கவனம் செலுத்தலாம். கோப்பின் தொடக்கத்தில் உள்ள தரவை நிலையானதாக படிக்க முடியாதபோது, தரவு அங்கீகார நிரலை உருவாக்கும் செயல்பாட்டில் இது மிகவும் பின்னர் கண்டுபிடிக்கப்பட்டது.
இப்போது ஆடியோ கோப்பைச் செயலாக்கி தரவை ஏற்றும் அல்காரிதத்தை விவரிக்க முயற்சிப்போம்.
தரவை ஏற்றுகிறது
முதலில், அல்காரிதத்தை எளிமையாக வைத்திருக்க சில அனுமானங்களைப் பார்ப்போம்:
- WAV வடிவத்தில் உள்ள கோப்புகளை மட்டுமே நாங்கள் கருத்தில் கொள்வோம்;
- ஆடியோ கோப்பு பைலட் தொனியுடன் தொடங்க வேண்டும் மற்றும் ஆரம்பத்தில் அமைதியைக் கொண்டிருக்கக்கூடாது
- மூலக் கோப்பு 44100 ஹெர்ட்ஸ் மாதிரி விகிதத்தைக் கொண்டிருக்க வேண்டும். இந்த வழக்கில், 48 மாதிரிகளின் குறிப்பு பருப்புகளுக்கு இடையிலான தூரம் ஏற்கனவே தீர்மானிக்கப்பட்டுள்ளது மற்றும் அதை நிரல் ரீதியாக கணக்கிட வேண்டிய அவசியமில்லை;
- மாதிரி வடிவம் ஏதேனும் இருக்கலாம் (8/16 பிட்கள்/மிதக்கும் புள்ளி) - படிக்கும் போது அதை நாம் விரும்பியதாக மாற்றலாம்;
- மூலக் கோப்பு வீச்சு மூலம் இயல்பாக்கப்படுகிறது என்று நாங்கள் கருதுகிறோம், இது முடிவை உறுதிப்படுத்த வேண்டும்;
வாசிப்பு அல்காரிதம் பின்வருமாறு இருக்கும்:
- நாங்கள் கோப்பை நினைவகத்தில் படிக்கிறோம், அதே நேரத்தில் மாதிரி வடிவமைப்பை 8 பிட்களாக மாற்றுகிறோம்;
- ஆடியோ தரவில் முதல் துடிப்பின் நிலையைத் தீர்மானிக்கவும். இதைச் செய்ய, அதிகபட்ச அலைவீச்சுடன் மாதிரியின் எண்ணிக்கையை நீங்கள் கணக்கிட வேண்டும். எளிமைக்காக, அதை ஒருமுறை கைமுறையாக கணக்கிடுவோம். அதை prev_pos மாறியில் சேமிப்போம்;
- கடைசித் துடிப்பின் நிலையில் 48ஐச் சேர்க்கவும் (pos := prev_pos + 48)
- நிலையை 48 ஆல் அதிகரிப்பது அடுத்த குறிப்பு துடிப்பின் நிலைக்கு (டேப் குறைபாடுகள், டேப் டிரைவ் பொறிமுறையின் நிலையற்ற செயல்பாடு போன்றவை) நிலைக்கு வருவோம் என்று உத்தரவாதம் அளிக்காது என்பதால், போஸ் துடிப்பின் நிலையை சரிசெய்ய வேண்டும். இதைச் செய்ய, சிறிய அளவிலான தரவை (pos-8;pos+8) எடுத்து, அதன் அதிகபட்ச அலைவீச்சு மதிப்பைக் கண்டறியவும். அதிகபட்சம் தொடர்புடைய நிலை pos இல் சேமிக்கப்படும். இங்கே 8 = 48/6 என்பது சோதனை ரீதியாக பெறப்பட்ட மாறிலி ஆகும், இது சரியான அதிகபட்சத்தை நாங்கள் தீர்மானிப்போம் மற்றும் அருகிலுள்ள பிற தூண்டுதல்களை பாதிக்காது என்று உத்தரவாதம் அளிக்கிறது. மிகவும் மோசமான சந்தர்ப்பங்களில், பருப்புகளுக்கு இடையிலான தூரம் 48 ஐ விட மிகக் குறைவாகவோ அல்லது அதிகமாகவோ இருக்கும்போது, நீங்கள் ஒரு துடிப்புக்கான கட்டாய தேடலைச் செயல்படுத்தலாம், ஆனால் கட்டுரையின் எல்லைக்குள் நான் இதை அல்காரிதத்தில் விவரிக்க மாட்டேன்;
- முந்தைய கட்டத்தில், குறிப்பு துடிப்பு கண்டுபிடிக்கப்பட்டதா என்பதை சரிபார்க்கவும் அவசியம். அதாவது, நீங்கள் அதிகபட்சமாகத் தேடினால், இந்த உந்துவிசை இந்த பிரிவில் உள்ளது என்பதற்கு இது உத்தரவாதம் அளிக்காது. எனது சமீபத்திய வாசிப்புத் திட்டத்தின் செயலாக்கத்தில், ஒரு பிரிவில் அதிகபட்ச மற்றும் குறைந்தபட்ச அலைவீச்சு மதிப்புகளுக்கு இடையிலான வேறுபாட்டை நான் சரிபார்க்கிறேன், அது ஒரு குறிப்பிட்ட வரம்பை மீறினால், ஒரு உந்துவிசை இருப்பதை எண்ணுகிறேன். குறிப்பு துடிப்பு கிடைக்கவில்லை என்றால் என்ன செய்வது என்பதும் கேள்வி. 2 விருப்பங்கள் உள்ளன: தரவு முடிவடைந்து அமைதியாக உள்ளது, அல்லது இது வாசிப்புப் பிழையாகக் கருதப்பட வேண்டும். இருப்பினும், அல்காரிதத்தை எளிமைப்படுத்த இதைத் தவிர்ப்போம்;
- அடுத்த கட்டத்தில், தரவு துடிப்பு (பிட் 0 அல்லது 1) இருப்பதை நாம் தீர்மானிக்க வேண்டும், இதற்காக நாம் பிரிவின் நடுப்பகுதியை (prev_pos;pos) mid_pos க்கு சமமான நடுத்தர_pos := (prev_pos+pos)/2 மற்றும் பிரிவில் மிடில்_போஸின் சில சுற்றுப்புறங்களில் (மிடில்_போஸ்-8;மிடில்_போஸ் +8) அதிகபட்ச மற்றும் குறைந்தபட்ச வீச்சுகளைக் கணக்கிடுவோம். அவற்றுக்கிடையேயான வேறுபாடு 10 க்கு மேல் இருந்தால், முடிவில் பிட் 1 ஐ எழுதுகிறோம், இல்லையெனில் 0. 10 என்பது சோதனை ரீதியாக பெறப்பட்ட மாறிலி ஆகும்;
- தற்போதைய நிலையை prev_pos இல் சேமிக்கவும் (prev_pos := pos)
- படி 3 இலிருந்து முழு கோப்பையும் படிக்கும் வரை மீண்டும் செய்யவும்;
- இதன் விளைவாக வரும் பிட் அணிவரிசை பைட்டுகளின் தொகுப்பாக சேமிக்கப்பட வேண்டும். படிக்கும் போது ஒத்திசைவு பைட்டை நாங்கள் கணக்கில் எடுத்துக் கொள்ளாததால், பிட்களின் எண்ணிக்கை 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 ஸ்பெக்ட்ரம் கணினி நிரல்களை நினைவகத்தில் ஏறக்குறைய அதே வடிவத்தில் சேமித்து நிரல்களை டேப்பில் சேமிக்கிறது. ஒரு வேளை, நான் முக்கிய வார்த்தைகளுக்கு எதிராகச் சரிபார்த்தேன்
பிரபலமான அடாரி, கொமடோர் 64 மற்றும் அந்தக் காலத்தின் பல கணினிகளின் அடிப்படைச் சொற்களையும் நான் சரிபார்த்தேன், அதற்கான ஆவணங்களை என்னால் கண்டுபிடிக்க முடிந்தது, ஆனால் வெற்றியில்லாமல் - ரெட்ரோ கணினிகளின் வகைகளைப் பற்றிய எனது அறிவு அவ்வளவு பரந்ததாக இல்லை.
பின்னர் நான் செல்ல முடிவு செய்தேன்
கம்ப்யூட்டர் டேண்டி/ரேடியோ ஷேக் டிஆர்எஸ்-80
கட்டுரையின் தொடக்கத்தில் நான் உதாரணமாகக் கொடுத்த கேள்விக்குரிய ஒலிப்பதிவு இது போன்ற ஒரு கணினியில் செய்யப்பட்டது:
இந்த கணினி மற்றும் அதன் வகைகள் (மாடல் I / மாடல் III / மாடல் IV, முதலியன) ஒரு காலத்தில் மிகவும் பிரபலமாக இருந்தன (நிச்சயமாக, ரஷ்யாவில் இல்லை). அவர்கள் பயன்படுத்திய செயலியும் Z80 தான் என்பது குறிப்பிடத்தக்கது. இந்த கணினியை நீங்கள் இணையத்தில் காணலாம்
நான் முன்மாதிரியை பதிவிறக்கம் செய்தேன்
நானும் கண்டுபிடித்தேன்
CAS கோப்பு வடிவமைப்பைக் கண்டுபிடித்த பிறகு (இது ஏற்கனவே நான் கையில் வைத்திருந்த டேப்பில் இருந்து தரவுகளின் பிட்-பை-பிட் நகலாக மாறியது, ஒத்திசைவு பைட் உள்ள தலைப்பு தவிர), நான் ஒரு எனது திட்டத்தில் சில மாற்றங்கள் மற்றும் எமுலேட்டரில் (TRS-80 மாடல் III) வேலை செய்யும் CAS கோப்பை வெளியிட முடிந்தது:
முதல் துடிப்பு மற்றும் குறிப்பு பருப்புகளுக்கு இடையே உள்ள தூரத்தை GEM தொகுப்பாக தானாக நிர்ணயம் செய்து மாற்றும் பயன்பாட்டின் சமீபத்திய பதிப்பை வடிவமைத்துள்ளேன், மூல குறியீடு இங்கு கிடைக்கிறது
முடிவுக்கு
நாங்கள் பயணித்த பாதை கடந்த காலத்திற்கு ஒரு கண்கவர் பயணமாக மாறியது, இறுதியில் நான் பதிலைக் கண்டுபிடித்ததில் மகிழ்ச்சி அடைகிறேன். மற்றவற்றுடன், நான்:
- நான் ZX ஸ்பெக்ட்ரமில் தரவைச் சேமிப்பதற்கான வடிவமைப்பைக் கண்டுபிடித்தேன் மற்றும் ஆடியோ கேசட்டுகளில் இருந்து தரவைச் சேமிப்பதற்கான/படிப்பதற்கான உள்ளமைக்கப்பட்ட ROM நடைமுறைகளைப் படித்தேன்.
- நான் டிஆர்எஸ் -80 கணினி மற்றும் அதன் வகைகளுடன் பழகினேன், இயக்க முறைமையைப் படித்தேன், மாதிரி நிரல்களைப் பார்த்தேன் மற்றும் இயந்திரக் குறியீடுகளில் பிழைத்திருத்தம் செய்வதற்கான வாய்ப்பும் கிடைத்தது (எல்லாவற்றிற்கும் மேலாக, அனைத்து Z80 நினைவூட்டல்களும் எனக்கு நன்கு தெரிந்தவை)
- ஆடியோ பதிவுகளை CAS வடிவத்திற்கு மாற்றுவதற்கான முழு அளவிலான பயன்பாட்டை எழுதினார், இது "அதிகாரப்பூர்வ" பயன்பாட்டால் அங்கீகரிக்கப்படாத தரவைப் படிக்க முடியும்.
ஆதாரம்: www.habr.com