Ke ile ka fumana data joang ka mokhoa o sa tsejoeng ho tloha theiping ea makenete

prehistory

Kaha ke ne ke rata lisebelisoa tsa retro, ke kile ka reka ZX Spectrum + ho morekisi oa UK. E kenyelelitsoe le k'homphieutha ka boeona, ke ile ka fumana lik'hasete tse 'maloa tsa molumo tse nang le lipapali (ka har'a sephutheloana sa pele se nang le litaelo), hammoho le mananeo a rekotiloeng lik'haseteng tse se nang matšoao a khethehileng. Ho makatsang ke hore lintlha tse tsoang lik'haseteng tsa lilemo tse 40 li ne li baloa hantle 'me ke khonne ho khoasolla hoo e batlang e le lipapali le mananeo ohle ho tsona.

Ke ile ka fumana data joang ka mokhoa o sa tsejoeng ho tloha theiping ea makenete

Leha ho le joalo, lik’haseteng tse ling ke ile ka fumana lirekoto tse neng li sa etsoa ka ho hlaka ke k’homphieutha ea ZX Spectrum. Li ne li utloahala li fapane ka ho feletseng 'me, ho fapana le lirekoto tse tsoang k'homphieutheng e boletsoeng, ha lia ka tsa qala ka bootloader e khutšoanyane ea BASIC, eo hangata e leng teng lirekotong tsa mananeo ohle le lipapali.

Ka nako e itseng sena se ile sa ntšoenya - ke ne ke hlile ke batla ho tseba hore na ho patiloe eng ho bona. Haeba u ne u ka bala lets'oao la molumo e le tatellano ea li-byte, u ka sheba litlhaku kapa eng kapa eng e bonts'ang tšimoloho ea lets'oao. Mofuta oa retro-archaeology.

Kaha joale ke tsamaile hohle 'me ke sheba lileibole tsa lik'hasete ka botsona, ke bososela hobane

karabo e ne e le ka pel'a mahlo a ka nako eohle
Leiboleng ea k'hasete e ka letsohong le letšehali ho na le lebitso la komporo ea TRS-80, 'me ka tlase ho lebitso la moetsi: "E entsoe ke Radio Shack USA"

(Haeba u batla ho boloka bolotsana ho fihlela qetellong, u se ke ua kena tlas'a mohatelli)

Papiso ya matshwao a medumo

Pele ho tsohle, a re ke re kenyeng lirekoto tsa molumo ka mokhoa oa digital. U ka mamela hore na e utloahala joang:


'Me joalo ka tloaelo ho rekota ho tsoa komporong ea ZX Spectrum ho utloahala:


Maemong ana ka bobeli, qalong ea ho rekota ho na le seo ho thoeng ke molumo oa sefofane - molumo oa maqhubu a tšoanang (ha ho rekota ha pele o khutšoanyane haholo <1 motsotsoana, empa o khetholloa). Mohala oa sefofane o bontša k'homphieutha hore e itokisetse ho amohela data. E le molao, k'homphieutha e 'ngoe le e' ngoe e lemoha molumo oa "mofofisi" oa eona feela ka sebōpeho sa pontšo le maqhubu a eona.

Hoa hlokahala ho bua ho hong ka sebopeho sa pontšo ka boeona. Mohlala, ho ZX Spectrum sebopeho sa eona se khutlonnetsepa:

Ke ile ka fumana data joang ka mokhoa o sa tsejoeng ho tloha theiping ea makenete

Ha molumo oa sefofane o fumanoa, ZX Spectrum e hlahisa mekoallo e khubelu le e putsoa moeling oa skrine ho bontša hore lets'oao le amohetsoe. Pilot tone e fela synchro pulse, e bontšang khomphuta hore e qale ho amohela data. E tšoauoa ka nako e khuts'oane (ha e bapisoa le molumo oa sefofane le data e latelang) (bona setšoantšo)

Ka mor'a hore ho amoheloe pulse ea sync, k'homphieutha e tlaleha ho phahama ho hong le ho hong ha letšoao, ho lekanya nako ea eona. Haeba nako e le ka tlase ho moeli o itseng, bit 1 e ngolloa mohopolong, ho seng joalo 0. Li-bits li bokelloa ka li-byte 'me ts'ebetso e phetoa ho fihlela N byte e amoheloa. Nomoro ea N hangata e nkuoa hloohong ea faele e jarollotsoeng. Tatelano ya loading ke e latelang:

  1. molumo oa sefofane
  2. hlooho (bolelele bo tsitsitseng), e na le boholo ba data e jarollotsoeng (N), lebitso la faele le mofuta
  3. molumo oa sefofane
  4. data ka boeona

Ho etsa bonnete ba hore data e laetsoe ka nepo, ZX Spectrum e bala seo ho thoeng ke parity byte (parity byte), e baloang ha u boloka faele ka XORing li-byte tsohle tsa data e ngotsoeng. Ha u bala faele, k'homphieutha e lekanya palo ea parity ho tloha ho data e amoheloang 'me, haeba sephetho se fapane le se bolokiloeng, se bontša molaetsa oa phoso "R Tape loading error". Ha e le hantle, k'homphieutha e ka fana ka molaetsa ona pejana haeba, ha e bala, e sitoa ho lemoha pulse (e hlolohetsoeng kapa nako ea eona ha e lumellane le meeli e itseng)

Kahoo, ha re boneng hore na lets'oao le sa tsejoeng le shebahala joang:

Ke ile ka fumana data joang ka mokhoa o sa tsejoeng ho tloha theiping ea makenete

Ena ke molumo oa sefofane. Sebopeho sa pontšo se fapane haholo, empa ho hlakile hore letšoao le na le ho pheta-pheta maqhubu a makhutšoane a maqhubu a itseng. Ka makhetlo a 44100 Hz, sebaka se pakeng tsa "litlhōrō" ke lisampole tse ka bang 48 (tse lumellanang le maqhubu a ~ 918 Hz). A re hopoleng palo ena.

Joale ha re shebeng sekhechana sa data:

Ke ile ka fumana data joang ka mokhoa o sa tsejoeng ho tloha theiping ea makenete

Haeba re lekanya sebaka se pakeng tsa maqhubu a motho ka mong, ho fumaneha hore sebaka se pakeng tsa "nako e telele" e ntse e le lisampole tse 48, 'me pakeng tsa tse khutšoanyane - ~ 24. Ha ke sheba pele, ke tla bolela hore qetellong ho ile ha fumaneha hore "referense" ea "referense" e nang le maqhubu a 918 Hz e ntse e tsoela pele, ho tloha qalong ho fihlela qetellong ea faele. Ho ka nahanoa hore ha o fetisetsa data, haeba ho kopana le pulse e eketsehileng pakeng tsa li-pulses tsa litšupiso, re e nka e le 1, ho seng joalo 0.

Ho thoe'ng ka sync pulse? Ha re shebeng qalong ea data:

Ke ile ka fumana data joang ka mokhoa o sa tsejoeng ho tloha theiping ea makenete

Pilot tone e fela mme data e qala hang-hang. Nakoana hamorao, ka mor'a ho hlahloba lirekoto tse fapaneng tse fapaneng, re ile ra khona ho fumana hore byte ea pele ea data e lula e tšoana (10100101b, A5h). Khomphuta e ka qala ho bala data ka mor'a hore e e fumane.

U ka boela ua ela hloko phetoho ea molumo oa pele oa litšupiso hang ka mor'a 1st ea ho qetela ho sync byte. E ile ea sibolloa hamorao haholo ha ho ntse ho etsoa lenaneo la ho lemoha data, ha data qalong ea faele e ke ke ea baloa ka mokhoa o tsitsitseng.

Joale a re lekeng ho hlalosa algorithm e tla sebetsana le faele ea molumo le ho kenya data.

Loading Data

Taba ea pele, a re shebeng mehopolo e 'maloa ho boloka algorithm e le bonolo:

  1. Re tla nahana feela ka lifaele ka sebopeho sa WAV;
  2. Faele ea molumo e tlameha ho qala ka molumo oa sefofane 'me ha ea lokela ho ba le khutso qalong
  3. Faele ea mohloli e tlameha ho ba le sekhahla sa sampole sa 44100 Hz. Tabeng ena, sebaka se pakeng tsa litšupiso tsa lisampole tse 48 se se se khethiloe 'me ha ho hlokahale hore re se bale ka mokhoa oa lenaneo;
  4. Sebopeho sa mohlala se ka ba leha e le sefe (8/16 bits/floating point) - ho tloha ha re bala re ka e fetolela ho eo ue batlang;
  5. Re nka hore faele ea mohloli e tloaelehile ka amplitude, e lokelang ho tsitsisa sephetho;

Algorithm ea ho bala e tla ba ka tsela e latelang:

  1. Re bala faele mohopolong, ka nako e ts'oanang re fetola sebopeho sa mohlala ho li-bits tse 8;
  2. Etsa qeto ea boemo ba molumo oa pele ho data ea molumo. Ho etsa sena, o hloka ho bala palo ea sampuli ka boholo ba amplitude. Ho nolofatsa, re tla e bala hang ka letsoho. Ha re e boloke ho e feto-fetohang prev_pos;
  3. Kenya 48 sebakeng sa molumo oa ho qetela (pos := prev_pos + 48)
  4. Ho tloha ha ho eketsa boemo ka 48 ha ho tiise hore re tla fihla boemong ba pululo e latelang ea litšupiso (litšitiso tsa tepi, ts'ebetso e sa tsitsang ea mochine oa koloi, joalo-joalo), re lokela ho lokisa boemo ba pulse pos. Ho etsa sena, nka karolo e nyane ea data (pos-8; pos +8) 'me u fumane boleng bo phahameng ba amplitude ho eona. Boemo bo lumellanang le boholo bo tla bolokoa ka pos. Mona 8 = 48/6 ke ntho e sa khaotseng e fumanoeng ka liteko, e tiisang hore re tla fumana boholo bo nepahetseng 'me re ke ke ra ama tšusumetso e meng e ka bang haufi. Maemong a mabe haholo, ha sebaka se pakeng tsa li-pulse se le tlase haholo kapa se le seholo ho feta 48, o ka kenya ts'ebetsong patlisiso e qobelloang bakeng sa pulse, empa ka har'a sebaka sa sehlooho seo nke ke ka se hlalosa ka algorithm;
  5. Mohatong o fetileng, ho tla hlokahala hape ho hlahloba hore na pulse ea litšupiso e fumanoe ho hang. Ke hore, haeba u batla feela boholo, sena ha se tiise hore tšusumetso e teng karolong ena. Ts'ebetsong ea ka ea morao-rao ea lenaneo la ho bala, ke hlahloba phapang pakeng tsa litekanyetso tse phahameng le tse fokolang tsa amplitude karolong, 'me haeba e feta moeli o itseng, ke bala boteng ba tšusumetso. Potso hape ke seo u lokelang ho se etsa haeba pulse ea referense e sa fumanoe. Ho na le likhetho tse 2: ebang data e felile 'me khutso e latela, kapa sena se lokela ho nkuoa e le phoso ea ho bala. Leha ho le joalo, re tla siea sena ho nolofatsa algorithm;
  6. Mothating o latelang, re hloka ho tseba hore na ho na le pulse ea data (bit 0 kapa 1), bakeng sa sena re nka bohareng ba karolo (prev_pos;pos) middle_pos e lekanang le middle_pos := (prev_pos+pos)/2 le sebakeng se seng sa mahareng_pos karolong (bohare_pos-8;bohare_pos +8) ha re bale boholo le bonyane ba amplitude. Haeba phapang pakeng tsa bona e feta 10, re ngola bit 1 ho sephetho, ho seng joalo 0. 10 ke ntho e sa khaotseng e fumanoang ka liteko;
  7. Boloka boemo ba hajoale ho prev_pos (prev_pos := pos)
  8. Pheta ho qala mohato oa 3 ho fihlela re bala faele eohle;
  9. Li-bit array tse hlahisoang li tlameha ho bolokoa joalo ka sehlopha sa li-byte. Kaha ha rea ​​ka ra ela hloko li-byte tsa sync ha re bala, palo ea li-bits e ka 'na ea se ke ea e-ba ngata ea 8,' me "bit offset" e hlokahalang le eona ha e tsejoe. Ts'ebetsong ea pele ea algorithm, ke ne ke sa tsebe ka boteng ba sync byte mme ka hona ke bolokile lifaele tse 8 tse nang le linomoro tse fapaneng tsa offset bits. E 'ngoe ea tsona e ne e na le data e nepahetseng. Ka algorithm ea ho qetela, ke tlosa likotoana tsohle ho fihla ho A5h, e leng se ntumellang hore hang-hang ke fumane faele e nepahetseng ea tlhahiso.

Algorithm ho Ruby, bakeng sa ba thahasellang
Ke khethile Ruby e le puo ea ho ngola lenaneo, hobane ... Ke lenaneo ka eona hangata. Khetho ha e na ts'ebetso e phahameng, empa mosebetsi oa ho etsa hore lebelo la ho bala kapele kamoo ho ka khonehang ha o tšoanelehe.

# Используем 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*")

sephetho

Kamora ho leka mefuta e mengata ea algorithm le li-constants, ke bile lehlohonolo ho fumana ho hong ho khahlisang haholo:

Ke ile ka fumana data joang ka mokhoa o sa tsejoeng ho tloha theiping ea makenete

Kahoo, ho ahlola ka likhoele tsa sebopeho, re na le lenaneo la ho rala li-graph. Leha ho le joalo, ha ho na mantsoe a sehlooho temaneng ea lenaneo. Mantsoe ohle a bohlokoa a kentsoe joalo ka li-byte (boleng bo bong le bo bong> 80h). Hona joale re hloka ho fumana hore na ke khomphuta efe ho tloha lilemong tsa bo-80 e ka bolokang mananeo ka mokhoa ona.

Ha e le hantle, e tšoana haholo le lenaneo la BASIC. Khomphutha ea ZX Spectrum e boloka mananeo ka mokhoa o tšoanang mohopolong mme e boloka mananeo ho theipi. Feela haeba ho ka etsahala, ke ile ka hlahloba mantsoe a sehlooho khahlanong le tafole. Leha ho le joalo, ho hlakile hore phello e ne e le mpe.

Ke ile ka boela ka hlahloba mantsoe a sehlooho a BASIC a Atari e tummeng, Commodore 64 le lik'homphieutha tse ling tse ngata tsa nako eo, tseo ke ileng ka khona ho li fumana, empa ntle le katleho - tsebo ea ka ea mefuta ea lik'homphieutha tsa retro e ne e se e pharaletseng haholo.

Eaba ke etsa qeto ea ho tsamaea lenane, 'me joale mahlo a ka a oela lebitsong la moetsi Radio Shack le k'homphieutha ea TRS-80. Ana ke mabitso a neng a ngotsoe mangolong a lik’hasete tse neng li le holim’a tafole ea ka! Ke ne ke sa tsebe mabitso ana pele mme ke ne ke sa tloaelane le komporo ea TRS-80, kahoo ho 'na ho ne ho bonahala eka Radio Shack e ne e le moetsi oa lik'hasete tsa audio tse kang BASF, Sony kapa TDK, 'me TRS-80 e ne e le nako ea ho bapala. Hobaneng ho se joalo?

Computer Tandy/Radio Shack TRS-80

Ho ka etsahala hore ebe rekoto e mameloang eo ho buuoang ka eona, eo ke faneng ka eona e le mohlala qalong ea sengoloa, e entsoe ka komporo e tjena:

Ke ile ka fumana data joang ka mokhoa o sa tsejoeng ho tloha theiping ea makenete

Ho ile ha fumaneha hore k'homphieutha ena le mefuta ea eona (Model I / Model III / Model IV, joalo-joalo) e ne e tumme haholo ka nako e le 'ngoe (ho hlakile, eseng Russia). Hoa hlokomeleha hore processor eo ba e sebelisitseng le eona e ne e le Z80. Bakeng sa komporo ena u ka e fumana Inthaneteng boitsebiso bo bongata. Lilemong tsa bo-80, boitsebiso ba k'homphieutha bo ne bo ajoa limakasine. Hajoale ho na le tse 'maloa emulators lik'homphieutha bakeng sa liforomo tse fapaneng.

Ke khoasolla emulator trs80gp 'me ka lekhetlo la pele ke khonne ho bona kamoo k'homphieutha ena e sebetsang kateng. Ehlile, komporo e ne e sa tšehetse tlhahiso ea mebala; qeto ea skrine e ne e le lipikselse tse 128x48 feela, empa ho ne ho e-na le likeketso le liphetoho tse ngata tse ka eketsang qeto ea skrineng. Ho ne ho boetse ho na le likhetho tse ngata bakeng sa lits'ebetso tsa komporo ena le likhetho tsa ho kenya tšebetsong puo ea BASIC (eo, ho fapana le ZX Spectrum, mefuteng e meng e ne e sa ka ea "khanya" ho ROM mme khetho efe kapa efe e ka kenngoa ho floppy disk, joalo ka OS ka boeona)

Ke boetse ke fumane thuso ho fetolela lirekoto tsa molumo hore e be sebopeho sa CAS, se tšehetsoang ke li-emulators, empa ka mabaka a itseng ho ne ho sa khonehe ho bala likhasete tsa ka ke li sebelisa.

Ha ke se ke fumane sebopeho sa faele sa CAS (seo e ileng ea e-ba kopi e fokolang ea data e tsoang teiping eo ke neng ke se ke ntse ke e-na le eona, ntle le hlooho e nang le boteng ba sync byte), ke entse liphetoho tse fokolang lenaneong la ka mme ke khonne ho hlahisa faele e sebetsang ea CAS e sebetsang ho emulator (TRS-80 Model III):

Ke ile ka fumana data joang ka mokhoa o sa tsejoeng ho tloha theiping ea makenete

Ke thehile mofuta oa morao-rao oa sesebelisoa sa ho fetolela ka boikemelo bo ikemetseng ba sekhahla sa pele le sebaka se pakeng tsa litšupiso tsa sephutheloana sa GEM, khoutu ea mohloli e fumaneha ho Github.

fihlela qeto e

Tsela eo re e tsamaileng e ile ea fetoha leeto le tsotehang la nakong e fetileng, ’me ke thabela hore ebe qetellong ke fumane karabo. Har'a tse ling, ke:

  • Ke ile ka fumana mokhoa oa ho boloka data ho ZX Spectrum mme ka ithuta mekhoa ea ROM e hahiloeng ka hare bakeng sa ho boloka / ho bala data ho tsoa lik'haseteng tsa molumo.
  • Ke ile ka tloaelana le k'homphieutha ea TRS-80 le mefuta ea eona, ke ithutile mokhoa oa ho sebetsa, ka sheba mananeo a mehlala, 'me ka ba le monyetla oa ho etsa debugging ka likhoutu tsa mochini (ka mor'a moo, li-mnemonics tsohle tsa Z80 ke li tseba)
  • O ngotse ts'ebeliso e felletseng ea ho fetolela lirekoto tsa audio ho fomete ea CAS, e ka balang data e sa amoheloeng ke ts'ebeliso ea "molao".

Source: www.habr.com

Eketsa ka tlhaloso