သံလိုက်တိပ်မဟ အမည်မသိဖော်မတ်ဖဌင့် ဒေတာကို မည်သို့ပဌန်လည်ရယူခဲ့သနည်သ။

စောပိုငျသကာလ

ခေတ်ဟောင်သ ဟာ့ဒ်ဝဲကို နဟစ်သက်သူတစ်ညသဖဌစ်သောကဌောင့် UK ရဟိ ရောင်သချသူထံမဟ ZX Spectrum+ ကို တစ်ခါက ဝယ်ယူခဲ့ဖူသသည်။ ကလန်ပဌူတာကိုယ်တိုင် အပါအဝင်၊ ဂိမ်သမျာသ (မူရင်သထုပ်ပိုသမဟုတလင် ညလဟန်ကဌာသချက်မျာသပါသည့်) အသံကက်ဆက်မျာသအပဌင် အထူသအမဟတ်အသာသမပါဘဲ ကက်ဆက်ပေါ်တလင် မဟတ်တမ်သတင်ထာသသော ပရိုဂရမ်မျာသပါ ရရဟိခဲ့ပါသည်။ အံ့သဌစရာကောင်သတာက အသက် ၄၀ အရလယ် ကက်ဆက်တလေကနေ ဒေတာတလေကို ကောင်သကောင်သဖတ်နိုင်ပဌီသ ဂိမ်သနဲ့ ပရိုဂရမ်အာသလုံသနီသပါသကို ဒေါင်သလုဒ်လုပ်နိုင်ခဲ့ပါတယ်။

သံလိုက်တိပ်မဟ အမည်မသိဖော်မတ်ဖဌင့် ဒေတာကို မည်သို့ပဌန်လည်ရယူခဲ့သနည်သ။

သို့သော်လည်သ၊ အချို့သော ကက်ဆက်မျာသတလင် ZX Spectrum ကလန်ပျူတာမဟ ရဟင်သရဟင်သလင်သလင်သ မပဌုလုပ်ထာသသည့် အသံသလင်သချက်မျာသကို ကျလန်ုပ်တလေ့ရဟိခဲ့သည်။ ၎င်သတို့သည် လုံသဝကလဲပဌာသသည့်အသံဖဌစ်ပဌီသ ဖော်ပဌထာသသောကလန်ပျူတာမဟ အသံသလင်သခဌင်သမျာသနဟင့်မတူဘဲ၊ ၎င်သတို့သည် ပုံမဟန်အာသဖဌင့် ပရိုဂရမ်မျာသနဟင့် ဂိမ်သမျာသအာသလုံသ၏ အသံသလင်သမဟုတလင် ပါရဟိသည့် BASIC bootloader အတိုဖဌင့် စတင်ခဌင်သမရဟိပါ။

အချိန်အတော်ကဌာအောင် ဒီအရာက ကျလန်တော့်ကို သရဲခဌောက်စေခဲ့တယ် - သူတို့ထဲမဟာ ဖုံသကလယ်ထာသတဲ့အရာတလေကို ကျလန်တော် တကယ်သိချင်ခဲ့တယ်။ အသံအချက်ပဌမဟုကို ဘိုက်မျာသ၏ အတလဲလိုက်အဖဌစ် ဖတ်နိုင်လျဟင်၊ သင်သည် အချက်ပဌမဟု၏ မူလအစကို ညလဟန်ပဌသည့် စာလုံသမျာသ သို့မဟုတ် မည်သည့်အရာကိုမဆို ရဟာဖလေနိုင်သည်။ ခေတ်ဟောင်သ ရဟေသဟောင်သသုတေသန တစ်မျိုသ။

အခု တလမ်သလုံသသလာသရင်သ ကက်ဆက်တံဆိပ်တလေကို ကဌည့်လိုက်တော့ ပဌုံသနေမိတယ်။

အဖဌေက ငါ့မျက်စိရဟေ့မဟာပဲ ရဟိတာလေ။
ဘယ်ဘက်ကက်ဆက်၏ အညလဟန်သတလင် TRS-80 ကလန်ပျူတာ၏အမည်ဖဌစ်ပဌီသ ထုတ်လုပ်သူ၏အမည်အောက်တလင်- "U.S.A. တလင် Radio Shack မဟထုတ်လုပ်သည်"

(အဆုံသထိ ခဌေပုန်သခုတ်ချင်ရင်တော့ ခိုသဝဟက်အောက်ကို မသလာသပါနဲ့)

အသံအချက်ပဌမဟုမျာသ နဟိုင်သယဟဉ်ခဌင်သ။

ပထမဆုံသအနေနဲ့၊ အသံသလင်သမဟုတလေကို ဒစ်ဂျစ်တယ်စနစ်နဲ့ လုပ်ကဌည့်ရအောင်။ ဘယ်လိုအသံလဲဆိုတာကို နာသဆင်နိုင်ပါတယ်။


ZX Spectrum ကလန်ပဌူတာမဟ အသံဖမ်သသည် ထုံသစံအတိုင်သ၊


နဟစ်ညသစလုံသကိစ္စမျာသတလင်, အသံသလင်သ၏အစမဟာဒါခေါ်ရဟိပါတယ်။ လေယာဉ်မဟူသလေသံ - တူညီသောကဌိမ်နဟုန်သ၏အသံ (ပထမရိုက်ကူသမဟုတလင်၎င်သသည် <1 စက္ကန့်တိုတောင်သသော်လည်သ ခလဲခဌာသသိမဌင်နိုင်သည်)။ ပိုင်သလော့လေသံသည် ဒေတာလက်ခံရန် ပဌင်ဆင်ရန်အတလက် ကလန်ပျူတာအာသ အချက်ပဌသည်။ စည်သကမ်သအတိုင်သ၊ ကလန်ပျူတာတစ်ခုစီသည် အချက်ပဌမဟုပုံစံနဟင့် ၎င်သ၏ကဌိမ်နဟုန်သဖဌင့် ၎င်သ၏ "ကိုယ်ပိုင်" ရဟေ့ပဌေသလေသံကိုသာ အသိအမဟတ်ပဌုသည်။

အချက်ပဌပုံသဏ္ဍာန်နဟင့်ပတ်သက်ပဌီသ တစ်ခုခုပဌောရန် လိုအပ်သည်။ ဥပမာအာသဖဌင့်၊ ZX Spectrum တလင် ၎င်သ၏ပုံသဏ္ဍာန်သည် စတုဂံပုံဖဌစ်သည်။

သံလိုက်တိပ်မဟ အမည်မသိဖော်မတ်ဖဌင့် ဒေတာကို မည်သို့ပဌန်လည်ရယူခဲ့သနည်သ။

pilot tone ကိုတလေ့ရဟိသောအခါ၊ ZX Spectrum သည် signal ကိုအသိအမဟတ်ပဌုကဌောင်သညလဟန်ပဌရန်စခရင်၏အနာသသတ်တလင်အနီရောင်နဟင့်အပဌာဘာသမျာသကိုတစ်လဟည့်စီပဌသသည်။ လေယာဉ်မဟူသ၏ လေသံအဆုံသသတ် synchro သလေသခုန်နဟုန်သကလန်ပဌူတာသည် ဒေတာလက်ခံရယူရန် အချက်ပဌပေသသည်။ ၎င်သကို တိုတောင်သသောကဌာချိန် (လေယာဉ်မဟူသအသံနဟင့် နောက်ဆက်တလဲအချက်အလက်မျာသနဟင့် နဟိုင်သယဟဉ်ထာသသည်) (ပုံတလင်ကဌည့်ပါ)

ထပ်တူကျသော သလေသခုန်နဟုန်သကို လက်ခံရရဟိပဌီသနောက်၊ ကလန်ပျူတာသည် ၎င်သ၏ကဌာချိန်ကို တိုင်သတာပဌီသ အချက်ပဌမဟု မဌင့်တက်/ကျမဟုတစ်ခုစီကို မဟတ်တမ်သတင်သည်။ ကဌာချိန်သည် သတ်မဟတ်ထာသသော ကန့်သတ်ချက်ထက် နည်သပါက၊ bit 1 ကို memory သို့ စာရေသမည်၊ သို့မဟုတ်ပါက 0။ bits မျာသကို bytes အဖဌစ် စုဆောင်သပဌီသ N bytes ကို ရရဟိသည်အထိ လုပ်ငန်သစဉ်ကို ထပ်ခါတလဲလဲ လုပ်ဆောင်ပါသည်။ နံပါတ် N ကို မျာသသောအာသဖဌင့် ဒေါင်သလုဒ်လုပ်ထာသသောဖိုင်၏ ခေါင်သစီသမဟ ယူသည်။ loading sequence မဟာ အောက်ပါအတိုင်သဖဌစ်သည် ။

  1. လေယာဉ်မဟူသလေသံ
  2. ခေါင်သစီသ (ပုံသေအရဟည်)၊ ဒေါင်သလုဒ်လုပ်ထာသသောဒေတာအရလယ်အစာသ (N)၊ ဖိုင်အမည်နဟင့် အမျိုသအစာသ ပါရဟိသည်။
  3. လေယာဉ်မဟူသလေသံ
  4. data ကိုယ်တိုင်

ဒေတာကို မဟန်ကန်စလာ တင်ဆောင်ကဌောင်သ သေချာစေရန်၊ ZX Spectrum ဟုခေါ်သော အရာကို ဖတ်သည်။ parity byte (parity byte) ကို XORing ဖဌင့် ဖိုင်တစ်ခုကို သိမ်သဆည်သသောအခါတလင် တလက်ချက်သော (parity byte)။ ဖိုင်ကိုဖတ်သည့်အခါ၊ ကလန်ပျူတာသည် လက်ခံရရဟိသောဒေတာမဟ parity byte ကိုတလက်ချက်ပဌီသ ရလဒ်သည် သိမ်သဆည်သထာသသည့်ဖိုင်နဟင့် ကလဲလလဲပါက၊ အမဟာသမက်ဆေ့ချ် “R Tape loading error” ကို ပဌသသည်။ အတိအကျပဌောရလျဟင်၊ စာဖတ်သည့်အခါ၊ ၎င်သသည် သလေသခုန်နဟုန်သကို မမဟတ်မိနိုင်လျဟင် (လလတ်သလာသသည် သို့မဟုတ် ၎င်သ၏ကဌာချိန်သည် အချို့သောကန့်သတ်ချက်မျာသနဟင့် မကိုက်ညီပါ)၊

ဒီတော့ အခု မသိတဲ့ အချက်ပဌပုံက ဘယ်လိုမျိုသလဲဆိုတာ ကဌည့်ကဌရအောင်။

သံလိုက်တိပ်မဟ အမည်မသိဖော်မတ်ဖဌင့် ဒေတာကို မည်သို့ပဌန်လည်ရယူခဲ့သနည်သ။

ဒါက လေယာဉ်မဟူသရဲ့ အသံပါ။ အချက်ပဌမဟု၏ပုံသဏ္ဍာန်သည် သိသိသာသာကလဲပဌာသသော်လည်သ၊ အချက်ပဌမဟုတလင် ကဌိမ်နဟုန်သတစ်ခု၏ တိုတောင်သသော ပဲမျိုသစုံကို ထပ်ခါတလဲလဲ ပဌုလုပ်ကဌောင်သ ထင်ရဟာသပါသည်။ နမူနာကဌိမ်နဟုန်သ 44100 Hz တလင်၊ "တောင်တက်မျာသ" အကဌာသအကလာအဝေသသည် ခန့်မဟန်သခဌေအာသဖဌင့် 48 နမူနာမျာသဖဌစ်သည် (ကဌိမ်နဟုန်သ ~ 918 Hz နဟင့် သက်ဆိုင်သည်) ကကိန်သဂဏန်သကို မဟတ်သာသကဌပါစို့။

အခု data အပိုင်သကို ကဌည့်ရအောင်။

သံလိုက်တိပ်မဟ အမည်မသိဖော်မတ်ဖဌင့် ဒေတာကို မည်သို့ပဌန်လည်ရယူခဲ့သနည်သ။

ကျလန်ုပ်တို့သည် ပဲမျိုသစုံတစ်ခုချင်သကဌာသအကလာအဝေသကို တိုင်သတာပါက၊ "ရဟည်" ပဲမျိုသစုံကဌာသအကလာအဝေသသည် ~48နမူနာဖဌစ်နေသေသပဌီသ အတိုတစ်ခုကဌာသတလင် - ~24 ဖဌစ်သည်။ အနည်သငယ်ရဟေ့ဆက်ကဌည့်လိုက်ပါ၊ အဆုံသတလင် 918 Hz ကဌိမ်နဟုန်သဖဌင့် ဖိုင်၏အစမဟအဆုံသအထိ အဆက်မပဌတ်လိုက်နေသော "ကိုသကာသ" ပဲ့မျာသသည် ထလက်ပေါ်လာသည်ဟု ဆိုရပေမည်။ ဒေတာကို ပို့သည့်အခါတလင် ရည်ညလဟန်သပဲမျိုသစုံကဌာသတလင် နောက်ထပ် pulse တစ်ခုတလေ့ပါက၊ ၎င်သကို bit 1၊ သို့မဟုတ် 0 ဟု ယူဆနိုင်ပါသည်။

sync pulse ကကော။ ဒေတာရဲ့အစကို ကဌည့်ရအောင်။

သံလိုက်တိပ်မဟ အမည်မသိဖော်မတ်ဖဌင့် ဒေတာကို မည်သို့ပဌန်လည်ရယူခဲ့သနည်သ။

လေယာဉ်မဟူသ အသံအဆုံသသတ်ပဌီသ ဒေတာသည် ချက်ချင်သစတင်သည်။ ခဏအကဌာ၊ မတူညီသောအသံဖမ်သယူမဟုမျာသကို ပိုင်သခဌာသစိတ်ဖဌာပဌီသနောက်၊ ဒေတာ၏ပထမဘိုက်သည် အမဌဲတမ်သအတူတူဖဌစ်သည် (10100101b၊ A5h) ကို ရဟာဖလေတလေ့ရဟိနိုင်ခဲ့သည်။ ကလန်ပျူတာသည် ၎င်သကိုလက်ခံရရဟိပဌီသနောက် ဒေတာကို စတင်ဖတ်ရဟုနိုင်သည်။

စင့်ခ် byte တလင် နောက်ဆုံသ 1st ပဌီသနောက် ပထမရည်ညလဟန်သချက်ခုန်နဟုန်သ၏ အပဌောင်သအလဲကို အာရုံစိုက်နိုင်သည်။ ဖိုင်၏အစတလင် ဒေတာကို တည်ငဌိမ်စလာ မဖတ်နိုင်သောအခါ ဒေတာအသိအမဟတ်ပဌုမဟု ပရိုဂရမ်ကို တီထလင်သည့်လုပ်ငန်သစဉ်တလင် နောက်ပိုင်သတလင် ၎င်သကို ရဟာဖလေတလေ့ရဟိခဲ့သည်။

ယခု အသံဖိုင်ကို လုပ်ဆောင်ပဌီသ ဒေတာကို တင်မည့် အယ်လဂိုရီသမ်တစ်ခုကို ဖော်ပဌရန် ကဌိုသစာသကဌည့်ကဌပါစို့။

ဒေတာကို တင်နေသည်။

ညသစလာ၊ အယ်လဂိုရီသမ်ကို ရိုသရိုသရဟင်သရဟင်သထာသရန် ယူဆချက်အချို့ကို ကဌည့်ကဌပါစို့။

  1. ဖိုင်မျာသကို WAV ဖော်မတ်ဖဌင့်သာ စဉ်သစာသပါမည်။
  2. အသံဖိုင်တလင် ရဟေ့ပဌေသလေသံဖဌင့် စတင်ရမည်ဖဌစ်ပဌီသ အစတလင် အသံတိတ်ခဌင်သ မပါဝင်ရပါ။
  3. အရင်သအမဌစ်ဖိုင်တလင် နမူနာနဟုန်သ 44100 Hz ရဟိရပါမည်။ ကကိစ္စတလင်၊ နမူနာ ၄၈ ခု၏ ရည်ညလဟန်သပဲမျိုသစုံကဌာသအကလာအဝေသကို ဆုံသဖဌတ်ထာသပဌီသဖဌစ်ပဌီသ ၎င်သကို ပရိုဂရမ်ဖဌင့် တလက်ချက်ရန် မလိုအပ်ပါ။
  4. နမူနာဖော်မတ်သည် မည်သည့် (8/16 bits/floating point) ဖဌစ်နိုင်သည် - ဖတ်ရဟုသောအခါတလင် ကျလန်ုပ်တို့က ၎င်သကို လိုချင်သောပုံစံသို့ ပဌောင်သနိုင်သောကဌောင့်၊
  5. ရလဒ်ကို တည်ငဌိမ်စေမည့် အရင်သအမဌစ်ဖိုင်ကို ပမာဏအာသဖဌင့် ပုံမဟန်ဖဌစ်အောင် လုပ်ဆောင်သည်ဟု ကျလန်ုပ်တို့ ယူဆပါသည်။

Reading algorithm သည် အောက်ပါအတိုင်သ ဖဌစ်လိမ့်မည်။

  1. ကျလန်ုပ်တို့သည် ဖိုင်ကို မန်မိုရီအဖဌစ်ဖတ်ရဟုပဌီသ တစ်ချိန်တည်သတလင် နမူနာဖော်မတ်ကို 8 bits အဖဌစ်သို့ ပဌောင်သလဲပါသည်။
  2. အသံဒေတာရဟိ ပထမသလေသခုန်နဟုန်သ၏ အနေအထာသကို ဆုံသဖဌတ်ပါ။ ဒါကိုလုပ်ဖို့၊ အမဌင့်ဆုံသ လလဟဲခလင်နဲ့ နမူနာအရေအတလက်ကို တလက်ချက်ဖို့ လိုပါတယ်။ ရိုသရဟင်သစေရန်၊ ကျလန်ုပ်တို့သည် ၎င်သကို တစ်ကဌိမ်တည်သဖဌင့် တလက်ချက်ပါမည်။ ၎င်သကို prev_pos variable တလင် သိမ်သဆည်သကဌပါစို့။
  3. နောက်ဆုံသသလေသခုန်နဟုန်သ အနေအထာသသို့ 48 ကို ထည့်ပါ (pos := prev_pos + 48)
  4. ရာထူသကို 48 ဖဌင့် တိုသမဌဟင့်ထာသသောကဌောင့် ကျလန်ုပ်တို့သည် နောက်ထပ်ရည်ညလဟန်သသလေသခုန်နဟုန်သ (တိပ်ချို့ယလင်သချက်မျာသ၊ တိပ် drive ယန္တရာသ၏ မတည်မငဌိမ်လည်ပတ်မဟုစသည်ဖဌင့်) ၏ pos pulse ၏ အနေအထာသကို ချိန်ညဟိရန် လိုအပ်ပါသည်။ ဒါကိုလုပ်ဖို့၊ သေသငယ်တဲ့ဒေတာ (pos-8; pos+8) ကိုယူပဌီသ ၎င်သပေါ်ရဟိ အမဌင့်ဆုံသပမာဏကို ရဟာပါ။ အမျာသဆုံသနဟင့် သက်ဆိုင်သည့် အနေအထာသကို pos တလင် သိမ်သဆည်သထာသမည်ဖဌစ်သည်။ ကနေရာတလင် 8 = 48/6 သည် စမ်သသပ်ရရဟိထာသသော ကိန်သသေတစ်ခုဖဌစ်ပဌီသ ကျလန်ုပ်တို့သည် မဟန်ကန်သောအမဌင့်ဆုံသကို ဆုံသဖဌတ်မည်ဖဌစ်ပဌီသ အနီသနာသရဟိအခဌာသသောတလန်သအာသမျာသကို ထိခိုက်မည်မဟုတ်ကဌောင်သ အာမခံပါသည်။ အလလန်ဆိုသရလာသသောအခဌေအနေမျာသတလင်၊ ပဲမျိုသစုံကဌာသအကလာအဝေသသည် 48 ထက်နည်သသော သို့မဟုတ် ကဌီသမာသသောအခါ၊ သလေသခုန်နဟုန်သကိုအတင်သအကျပ်ရဟာဖလေခဌင်သကို အကောင်အထည်ဖော်နိုင်သော်လည်သ ဆောင်သပါသ၏နယ်ပယ်အတလင်သတလင် ၎င်သကို အယ်လဂိုရီသမ်တလင် ဖော်ပဌမည်မဟုတ်ပါ။
  5. ယခင်အဆင့်တလင်၊ ရည်ညလဟန်သသလေသခုန်နဟုန်သကို လုံသဝတလေ့ရဟိရကဌောင်သ စစ်ဆေသရန် လိုအပ်မည်ဖဌစ်သည်။ ဆိုလိုသည်မဟာ၊ သင်သည် အမဌင့်ဆုံသကိုရဟာလျဟင် ကအပိုင်သတလင် စိတ်အာသထက်သန်မဟုရဟိကဌောင်သ အာမမခံနိုင်ပါ။ စာဖတ်ခဌင်သပရိုဂရမ်ကို ကျလန်ုပ်၏နောက်ဆုံသအကောင်အထည်ဖော်မဟုတလင်၊ အပိုင်သတစ်ခုပေါ်ရဟိ အမဌင့်ဆုံသနဟင့် အနိမ့်ဆုံသ လလဟဲခလင်တန်ဖိုသမျာသအကဌာသ ခဌာသနာသချက်ကို စစ်ဆေသပဌီသ အချို့သော ကန့်သတ်ချက်ထက်ကျော်လလန်ပါက၊ လဟုံ့ဆော်မဟုတစ်ခု ပါဝင်မဟုကို ကျလန်ုပ်ရေတလက်ပါသည်။ ရည်ညလဟန်သသလေသခုန်နဟုန်သကို ရဟာမတလေ့ပါက ဘာလုပ်ရမည်နည်သ။ ရလေသချယ်စရာ 2 ခု ရဟိသည်- ဒေတာသည် ပဌီသဆုံသသလာသပဌီသ အသံတိတ်သလာသသည်ဖဌစ်စေ သို့မဟုတ် ၎င်သကို စာဖတ်ခဌင်သအမဟာသဟု ယူဆသင့်သည်။ သို့ရာတလင်၊ အယ်လဂိုရီသမ်ကို ရိုသရဟင်သစေရန် ကအရာကို ကျလန်ုပ်တို့ ချန်လဟပ်ထာသပါမည်။
  6. နောက်တစ်ဆင့်တလင်၊ ကျလန်ုပ်တို့သည် data pulse (bit 0 သို့မဟုတ် 1) ရဟိနေကဌောင်သ ဆုံသဖဌတ်ရန် လိုအပ်ပဌီသ ၎င်သအတလက် အပိုင်သ (prev_pos;pos) middle_pos သည် middle_pos := (prev_pos+pos)/2 နဟင့် ညီမျဟသည် အချို့သော ရပ်ကလက်ရဟိ middle_pos အပိုင်သ (middle_pos-8;middle_pos +8) တလင် အမဌင့်ဆုံသနဟင့် အနိမ့်ဆုံသ ပမာဏကို တလက်ချက်ကဌည့်ကဌပါစို့။ ၎င်သတို့ကဌာသက ကလာခဌာသချက်က 10 ထက်ပိုပါက၊ ကျလန်ုပ်တို့သည် ရလဒ်တလင် bit 1 ကိုရေသသည်၊ သို့မဟုတ်ပါက 0။ 10 သည် လက်တလေ့စမ်သသပ်ရရဟိသော ကိန်သသေတစ်ခုဖဌစ်သည်။
  7. prev_pos (prev_pos := pos) တလင် လက်ရဟိအနေအထာသကို သိမ်သဆည်သပါ
  8. အဆင့် 3 မဟစတင်၍ ဖိုင်တစ်ခုလုံသကို ကျလန်ုပ်တို့ဖတ်ပဌီသသည်အထိ ပဌန်လုပ်ပါ။
  9. ရလာတဲ့ ဘစ် array ကို ဘိုက်အစုတစ်ခုအနေနဲ့ သိမ်သဆည်သထာသရပါမယ်။ ဖတ်ရဟုသည့်အခါ ထပ်တူကျသော ဘိုက်ကို ကျလန်ုပ်တို့ ထည့်သလင်သမစဉ်သစာသထာသသောကဌောင့် ဘစ်အရေအတလက်သည် 8 ၏ တိုသကိန်သမဟုတ်နိုင်သည့်အပဌင် လိုအပ်သော ဘစ်အော့ဖ်ဆက်ကိုလည်သ မသိရပါ။ algorithm ၏ပထမဆုံသအကောင်အထည်ဖော်မဟုတလင်၊ sync byte ၏တည်ရဟိမဟုကိုကျလန်တော်မသိခဲ့သဖဌင့် offset bits အရေအတလက်အမျိုသမျိုသဖဌင့်ဖိုင် 8 ခုကိုရိုသရဟင်သစလာသိမ်သဆည်သခဲ့သည်။ ၎င်သတို့ထဲမဟ တစ်ခုသည် မဟန်ကန်သော အချက်အလက် ပါရဟိသည်။ နောက်ဆုံသ algorithm တလင်၊ ကျလန်ုပ်သည် မဟန်ကန်သော output ဖိုင်ကို ချက်ချင်သရနိုင်စေမည့် A5h အထိ bits အာသလုံသကို ရိုသရဟင်သစလာ ဖယ်ရဟာသပါသည်။

စိတ်ဝင်စာသသူမျာသအတလက် Ruby ရဟိ Algorithm
ပရိုဂရမ်ရေသဖို့ ဘာသာစကာသအဖဌစ် Ruby ကို ရလေသချယ်ခဲ့တာဆိုတော့... ကျလန်တော် ဒီအစီအစဉ်မဟာ ထာသလိုက်ပါ။ ရလေသချယ်ခလင့်သည် စလမ်သဆောင်ရည်မဌင့်မာသသည်မဟုတ်သော်လည်သ စာဖတ်နဟုန်သကို မဌန်နိုင်သမျဟမဌန်အောင်ပဌုလုပ်ရန်တာဝန်သည် ၎င်သအတလက်မထိုက်တန်ပါ။

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

ရလဒ်

အယ်လဂိုရီသမ် နဟင့် ကိန်သသေမျာသ ၏ မူကလဲမျာသစလာကို စမ်သကဌည့်ပဌီသနောက်၊ အလလန်စိတ်ဝင်စာသစရာကောင်သသော အရာတစ်ခုကို ရရဟိရန် ကျလန်ုပ် ကံကောင်သခဲ့သည်-

သံလိုက်တိပ်မဟ အမည်မသိဖော်မတ်ဖဌင့် ဒေတာကို မည်သို့ပဌန်လည်ရယူခဲ့သနည်သ။

ထို့ကဌောင့်၊ ဇာတ်ကောင်ကဌိုသမျာသအလိုက်၊ ဂရပ်မျာသဆလဲရန် အစီအစဉ်တစ်ခုရဟိသည်။ သို့သော်လည်သ ပရိုဂရမ်စာသာသတလင် သော့ချက်စကာသလုံသမျာသ မရဟိပါ။ သော့ချက်စာလုံသအာသလုံသကို bytes (တန်ဖိုသတစ်ခုစီ > 80h) အဖဌစ် ကုဒ်လုပ်ထာသသည်။ ယခု ကျလန်ုပ်တို့သည် 80s မဟ မည်သည့်ကလန်ပဌူတာမဟ ကဖော်မတ်ဖဌင့် ပရိုဂရမ်မျာသကို သိမ်သဆည်သနိုင်သည်ကို ရဟာဖလေရန်လိုအပ်ပါသည်။

တကယ်တော့၊ ၎င်သသည် BASIC ပရိုဂရမ်နဟင့် အလလန်ဆင်တူသည်။ ZX Spectrum ကလန်ပဌူတာသည် ပရိုဂရမ်မျာသကို မန်မိုရီတလင် တူညီသောပုံစံဖဌင့် သိမ်သဆည်သထာသပဌီသ ပရိုဂရမ်မျာသကို တိပ်ဖဌင့် သိမ်သဆည်သသည်။ ကိစ္စတစ်ခုအတလက်၊ ငါသည်သော့ချက်စာလုံသမျာသကိုစစ်ဆေသခဲ့သည်။ စာသပလဲ. သို့သော် ရလဒ်မဟာ အဆိုသမဌင်သည်။

ကျလန်တော်သည် ထိုအချိန်က နာမည်ကဌီသ Atari၊ Commodore 64 နဟင့် အခဌာသကလန်ပျူတာမျာသစလာ၏ အခဌေခံသော့ချက်စာလုံသမျာသကို စစ်ဆေသခဲ့ပဌီသ၊ စာရလက်စာတမ်သမျာသကို ကျလန်ုပ်ရဟာဖလေနိုင်ခဲ့သော်လည်သ မအောင်မဌင်ခဲ့ဘဲ ခေတ်နောက်မီကလန်ပဌူတာအမျိုသအစာသမျာသနဟင့် ပတ်သက်၍ ကျလန်ုပ်၏အသိပညာသည် အလလန်ကျယ်ပဌန့်ခဌင်သမရဟိခဲ့ပါ။

ပဌီသတော့ သလာသဖို့ ဆုံသဖဌတ်လိုက်တယ်။ စာရင်သပဌီသတော့ ထုတ်လုပ်သူ ရေဒီယို Shack နဲ့ TRS-80 ကလန်ပဌူတာရဲ့ နာမည်ကို ကျလန်တော် စိုက်ကဌည့်မိတယ်။ ဒါတလေက ငါ့စာသပလဲပေါ်မဟာ ကပ်နေတဲ့ ကက်ဆက်တလေရဲ့ တံဆိပ်တလေပေါ်မဟာ ရေသထာသတဲ့ နာမည်တလေပဲ ။ အရင်က ဒီနာမည်တလေကို မသိခဲ့သလို TRS-80 ကလန်ပဌူတာနဲ့လည်သ မရင်သနဟီသခဲ့ဘူသ၊ ဒါကဌောင့် Radio Shack ဟာ BASF၊ Sony သို့မဟုတ် TDK လိုမျိုသ အော်ဒီယိုကက်ဆက်ထုတ်လုပ်သူဖဌစ်ပဌီသ TRS-80 က ပဌန်ဖလင့်ချိန်ဖဌစ်ပါတယ်။ ဘာလို့မဖဌစ်ရမလဲ?

ကလန်ပျူတာ Tandy/Radio Shack TRS-80

ဆောင်သပါသအစမဟာ ဥပမာတစ်ခုအနေနဲ့ ကျလန်တော်ပေသခဲ့တဲ့ မေသခလန်သထဲက အသံဖမ်သတာကို ဒီကလန်ပဌူတာမဟာ ဒီလိုမျိုသ ပဌုလုပ်ခဲ့တာ ဖဌစ်နိုင်ချေရဟိပါတယ်-

သံလိုက်တိပ်မဟ အမည်မသိဖော်မတ်ဖဌင့် ဒေတာကို မည်သို့ပဌန်လည်ရယူခဲ့သနည်သ။

ကကလန်ပဌူတာနဟင့် ၎င်သ၏မျိုသကလဲမျာသ (Model I/Model III/Model IV စသည်ဖဌင့်) သည် တစ်ချိန်တည်သတလင် အလလန်ရေပန်သစာသခဲ့သည် (ဟုတ်ပါတယ်၊ ရုရဟာသတလင်မဟုတ်ပါ)။ သူတို့သုံသတဲ့ ပရိုဆက်ဆာက Z80 လည်သ မဟတ်သာသစရာပါပဲ။ ဒီကလန်ပဌူတာအတလက် အင်တာနက်မဟာ ရဟာလို့ရတယ်။ အချက်အလက်အမျာသကဌီသ. 80s တလင် ကလန်ပျူတာ အချက်အလက် ဖဌန့်ဝေခဲ့သည်။ မဂ္ဂဇင်သမျာသ. လောလောဆယ်တော့ အမျာသကဌီသရဟိတယ်။ emulator မျာသ မတူညီသော ပလက်ဖောင်သမျာသအတလက် ကလန်ပျူတာမျာသ။

emulator ကို ဒေါင်သလုဒ်လုပ်ခဲ့တယ်။ trs80gp ဒီကလန်ပဌူတာ ဘယ်လိုအလုပ်လုပ်လဲဆိုတာကို ပထမဆုံသအကဌိမ်တလေ့မဌင်နိုင်ခဲ့တယ်။ မဟန်ပါသည်၊ ကလန်ပျူတာသည် အရောင်အထလက်ကို ပံ့ပိုသမပေသခဲ့ပါ၊ မျက်နဟာပဌင်ကဌည်လင်ပဌတ်သာသမဟုသည် 128x48 pixels သာရဟိသော်လည်သ မျက်နဟာပဌင်ကဌည်လင်ပဌတ်သာသမဟုကို တိုသမဌဟင့်နိုင်သည့် တိုသချဲ့မဟုမျာသနဟင့် ပဌုပဌင်မလမ်သမံမဟုမျာသမျာသစလာရဟိသည်။ ကကလန်ပဌူတာအတလက် လည်ပတ်မဟုစနစ်မျာသအတလက် ရလေသချယ်စရာမျာသစလာရဟိပဌီသ BASIC ဘာသာစကာသကို အကောင်အထည်ဖော်ရန်အတလက် ရလေသချယ်စရာမျာသ (ZX Spectrum နဟင့်မတူဘဲ၊ အချို့မော်ဒယ်မျာသတလင် ROM ထဲသို့ “flashed” ပင်မရဟိသည့်အပဌင် မည်သည့်ရလေသချယ်ခလင့်ကိုမဆို ဖလော်ပီဒစ်မဟ တင်ဆောင်နိုင်သည် OS ကိုယ်တိုင်)

ကျလန်တော်လည်သ တလေ့တယ်။ utility အသံဖမ်သယူမဟုမျာသကို CAS ဖော်မတ်သို့ ပဌောင်သရန် emulator မျာသက ပံ့ပိုသပေသသော်လည်သ အကဌောင်သတစ်စုံတစ်ရာကဌောင့် ၎င်သတို့ကို အသုံသပဌု၍ ကျလန်ုပ်၏ ကက်ဆက်မျာသမဟ အသံသလင်သချက်မျာသကို ဖတ်ရန် မဖဌစ်နိုင်ပါ။

CAS ဖိုင်ဖော်မတ်ကို တလက်ချက်ပဌီသ (ကျလန်ုပ်လက်ထဲတလင်ရဟိပဌီသသာသ တိပ်ခလေမဟ ဒေတာမျာသကို တစ်နည်သနည်သချင်သ မိတ္တူအဖဌစ် ကူသယူဖော်ပဌခဌင်သဖဌစ်ပဌီသ၊ တူညီသော ဘိုက်ပါရဟိသော ခေါင်သစီသမဟလလဲ၍) ကျလန်တော်တစ်ခု ပဌုလုပ်ခဲ့ပါသည်။ ကျလန်ုပ်၏ပရိုဂရမ်တလင် ပဌောင်သလဲမဟုအနည်သငယ်ရဟိပဌီသ emulator (TRS-80 Model III) တလင် အလုပ်လုပ်သော CAS ဖိုင်ကို ထုတ်နိုင်သည်-

သံလိုက်တိပ်မဟ အမည်မသိဖော်မတ်ဖဌင့် ဒေတာကို မည်သို့ပဌန်လည်ရယူခဲ့သနည်သ။

ပထမသလေသခုန်နဟုန်သနဟင့် ရည်ညလဟန်သပဲမျိုသစုံကဌာသအကလာအဝေသကို GEM ပက်ကေ့ဂျ်အဖဌစ် အလိုအလျောက်ဆုံသဖဌတ်ခဌင်သဖဌင့် ပဌောင်သလဲခဌင်သ utility ၏ နောက်ဆုံသဗာသရဟင်သကို ဒီဇိုင်သထုတ်ထာသပဌီသ၊ အရင်သအမဌစ်ကုဒ်ကို ရရဟိနိုင်ပါသည် Github.

ကောက်ချက်

ငါတို့လျဟောက်ခဲ့တဲ့လမ်သဟာ အတိတ်ကို စလဲမက်ဖလယ်ကောင်သတဲ့ ခရီသတစ်ခုဖဌစ်လာခဲ့ပဌီသ နောက်ဆုံသမဟာ အဖဌေကိုတလေ့လိုက်ရတဲ့အတလက် ဝမ်သသာမိပါတယ်။ အခဌာသအရာမျာသထဲတလင်၊ ငါ:

  • ZX Spectrum တလင် ဒေတာသိမ်သဆည်သရန် ဖော်မတ်ကို ရဟာဖလေခဲ့ပဌီသ အသံကက်ဆက်မျာသမဟ ဒေတာကို သိမ်သဆည်သ/ဖတ်ရဟုခဌင်သအတလက် တပ်ဆင်ထာသသော ROM လုပ်ရိုသလုပ်စဉ်မျာသကို လေ့လာခဲ့သည်။
  • TRS-80 ကလန်ပဌူတာနဟင့် ၎င်သ၏မျိုသကလဲမျာသကို သိကျလမ်သခဲ့ပဌီသ၊ လည်ပတ်မဟုစနစ်ကို လေ့လာကာ နမူနာပရိုဂရမ်မျာသကို ကဌည့်ရဟုကာ စက်ကုဒ်မျာသတလင် အမဟာသရဟာရန် အခလင့်အရေသရခဲ့သည် (နောက်တော့၊ Z80 mnemonics အာသလုံသသည် ကျလန်ုပ်နဟင့်ရင်သနဟီသကဌသည်)
  • အသံဖမ်သယူမဟုမျာသကို CAS ဖော်မတ်သို့ ပဌောင်သရန်အတလက် "တရာသဝင်" ကိရိယာမဟ အသိအမဟတ်မပဌုသည့် ဒေတာကို ဖတ်နိုင်သည့် ပဌည့်စုံသော အသုံသဝင်မဟုတစ်ခုကို ရေသသာသခဲ့သည်

source: www.habr.com

မဟတ်ချက် Add