**Hayes buyruqlar toʻplami** (odatda **AT buyruqlar** deb ham ataladi) ilk bor 1981-yil Dennis Hayes tomonidan Hayes Smartmodem modemlari uchun ularni boshqarish uchun yaratilgan buyruqlar tilidir.

Ushbu qisqa soʻzlardan iborat buyruqlar yordamida modem orqali qoʻngʻiroq qilish va tugatish, bogʻlanishni boshqarish, modem sozlamalarini oʻzgartirish kabi amallarni bajarish mumkin. Toʻplamning ilk versiyasi 300 bit/s tezlikdagi modemlarga moʻljallangan. Keyinroq katta tezlikdagi va funksionalligi koʻp modemlar paydo boʻlishi bilan toʻplamni qoʻshimcha buyruqlar bilan boyitila boshlandi. Hozirda koʻplab modemlar ushbu toʻplamning asosiy buyruqlarini qoʻllab-quvvatlash bilan birga ishlab chiqaruvchilarning qurilmasiga xos qoʻshimcha buyruqlar bilan ham toʻldirilgan boʻladi.

Tarixi
------

### Muammo va yechimlar

Bulletin Board System (BBS) paydo boʻlmasidan oldin modemlar telefon liniyasi yordamida bir-biriga toʻgʻridan toʻgʻri raqam terishi orqali bogʻlanar edi. Ular faqat „joʻnatish" yoki „qabul qilish" rejimida ishlar va bir rejimdan ikkinchisiga oʻtishni qoʻlda bajarilardi. Yaʼni, chaqirishni amalga oshiruvchi foydalanuvchi oʻz modemini „joʻnatish" rejimiga qoʻyib, soʻng raqamni terar, ikkinchi tarafdagi „qabul qilish" rejimida turgan modemdan javob kelgach esa telefon goʻshagi qoʻyilib, maʼlumot uzatish boshlanardi. Aloqa to birinchi modem qoʻlda oʻchirilmaguncha davom etardi. Ushbu jarayonlarni avtomatlashtirish zarurati tugʻilganda baʼzi modemlarga u „qabul qilish" rejimida turgan holatida goʻshakni avtomat tarzda koʻtarish va chaqiruvchi taraf uzilganda esa liniyani tozalash funksiyalari qoʻshila boshlandi. Bu imkoniyat odatda „qabul qiluvchi" modemlarda qoʻllanila boshladi. Chaqiruvchi tarafni avtomatlashtirish u darajada koʻp uchramas, koʻpincha qoʻshimcha raqam teruvchi qurilma ulash evaziga bajarilar edi. Bunday qurilmalar kompyuterning alohida kiritish/chiqarish portlariga (koʻpincha RS-232) ulanib, alohida dasturlanardi.

Ushbu usul 1960-yillarda va 1970-yillar boshida ham qoniqarli ishlab kelayotgan edi. Chunki bu yillarda modemlar asosan faqat ikki tarafni, kompyuter terminallari (chaqiruvchi) va meynfreymlar (qabul qiluvchi)ni bogʻlash uchun ishlatilar edi xolos. Biroq 1970-yillardagi mikrokompyuterlar inqilobi arzon modemlarni paydo boʻlishiga olib keldi va faqat ikkita „nuqta-nuqta" turidagi bogʻlanishlar endi yetarli boʻlmay qoldi. Minglab foydalanuvchilar xohlagan paytida ixtiyoriy boshqa biriga bogʻlanishini amalga oshirishini taʼminlovchi yechimga zarurat tugʻila boshladi. Oʻsha paytda modemlarga qaysi raqamni terishni qoʻlda bajarilardi. Dasturiy taʼminot orqali raqam terishning bitta yoʻli — qoʻshimcha raqam teruvchi qurilma ulash bor edi. Ikkinchi usul mikrokompyuterda alohida port boʻlishini talab qilardi va buning doim ham imkoni yoʻq edi. Yana boshqa yechim esa modemlarda buyruqlarni qabul qilish va joʻnatish uchun alohida kontaktlar hamda kiruvchi maʼlumotlar buyruq ekanligini anglatuvchi alohida signal kontaktidan foydalanish edi. Lekin mikrokompyuterlarda RS-232 portining realizatsiyasi juda oddiyligi yoki koʻpincha ushbu kontaktlar kompyuter narxidan tejash maqsadida umuman olib tashlangani bois bu yechim ham universal emas edi.

### Hayesning yechimi

1981-yilda Hayes Communications oʻzining smart-modemida quyidagicha yechimni taklif qildi. Unda modem kontaktlariga hech qanday oʻzgartirish kiritmasdan, mavjud maʼlumot kontaktlaridan foydalanib modemning oʻzini ikki hil rejimdan biriga oʻtkazish mumkin edi:

1. **maʼlumotlar rejimida** modem oʻziga berilgan har qanday maʼlumotlarni maʼlumot sifatida koʻrib, telefon liniyasi orqali ikkinchi modemga uzatadi.
2. **buyruqlar rejimida** esa modem oʻziga berilayotgan har qanday maʼlumotni oʻzi uchun buyruq sifatida qabul qilib, uni bajaradi.

Odatdagi maʼlumotlar rejimidan buyruqlar rejimiga oʻtish uchun seanslar uchta plyus belgisidan („+++") iborat escape ketma-ketlikni uzatishdan va uning orqasidan tahminan 1 sekundlik kutishdan foydalaniladi. Ushbu kutishdan maqsad — yuqoridagi ketma-ketlik aynan rejimni oʻzgartiruvchi maxsus belgilar ekanligini, shunchaki oddiy maʼlumot emasligini bilish uchun edi (chunki modemdan modemga joʻnatilayotgan maʼlumotlar ichida uchta plyus belgisi ham uchrashi mumkin).

Endi modem buyruqlar rejimida ekan uni qaytib maʼlumotlar rejimiga oʻtkazish uchun „ATO" buyrugʻi berilardi.

### Buyruqlar toʻplami

Hayes buyruqlar toʻplami telefon liniyasi bilan turlicha amallarni bajaruvchi buyruqlardan iborat edi. Bular raqam terish, uzish, modem sozlamarini boshqaruvchi buyruqlardir boʻlib, bularga modem xotirasidagi turli yacheykalar qiymatini toʻgʻridan toʻgʻri oʻrnatuvchi registratsiya buyruqlari ham kirardi. Oʻsha paytdagi barcha 300 bodli modem ishlab chiqaruvchilar ushbu buyruqlarni shundayicha, registrlar qiymatlari bilan birga koʻchirib qoʻya qoladilar.

Modemlarni 1200 va 2400 bodli boʻlishi bilan buyruqlar toʻplamini biroz kengaytiriladi. Ulardan yangi funksiyalar uchun qoʻshilgan buyruqlar ampersand („&") prefiksi bilan ajratildi. Hayes ham tezkorlik bilan 1200 va 2400 bodli modemlarini chiqarib, vaqtdan yutish maqsadida buyruqlar toʻplamini shundayicha qoldiradi. Bu 1200 bodli modemga ega foydalanuvchilarga 2400 bodli modemni dasturiy taʼminotni oʻzgartirmasdan foydalanish imkonini yaratadi. Bu oʻz navbatida buyruqlar toʻplamining Hayes versiyasini keng tarqalishiga sabab boʻladi. Bir yildan soʻng Telecommunications Industry Association (TIA) va Electronic Industries Alliance 2400 bodli modemlar uchun „Maʼlumot uzatish qurilmalari va tizimlari — ketma-ket asinxron avtomatik tarzda raqam terish va boshqarish" (TIA/EIA-602) nomli buyruqlar toʻplami standartini joriy qiladilar.

Biroq Hayes Communications katta tezlikdagi modemlarini chiqarishga unchalik shoshilmadi. Bunda asosan uchta boshqa kompaniyalar — Microcom, U.S. Robotics va Telebit Hayes bilan raqobatchi edilar. Ushbu kompaniyalar Hayes oʻzining modemlarini chiqarishini va buyruqlar toʻplamini kengaytirishini kutib oʻtirishmadi va oʻzlari ishlab chiqargan modemlar uchun turlicha qoʻshimcha buyruqlar qoʻshib foydalana boshladilar. 1990-yillar boshida toʻrtta asosiy buyruqlar toʻplami va ularning bir nechta versiyalari hosil boʻldi. Sekin-sekin Hayesning „&" belgili buyruqlar bilan kengaytirilgan original toʻplami ommalasha boshladi va keyinchalik modemlar uchun asosiy buyruqlar toʻplamiga aylandi.

Buyruqlar sintaksisi
--------------------

Hayes buyruqlar toʻplami **AT buyruqlar** deb ham ataladi. Bunga sabab buyruqlar „AT" (ingl. attention soʻzidan) prefiksi bilan boshlanadi.

Buyruqlar toʻplamini toʻrtta guruhga boʻlish mumkin:

1. asosiy buyruqlar — harf unga qoʻshilgan raqamdan iborat. Masalan, M1.
2. kengaytirilgan buyruqlar — „&" (ampersand) belgisi, harf va raqamdan iborat. Masalan, &M1. Ushbu buyruq M1 dan farq qiladi. Bular kengaytirilgan buyruqlar deyiladi.
3. xususiy buyruqlar — odatda backslash („\") yoki foiz belgisi („%") bilan boshlanadi; bu buyruqlar modem ishlab chiqaruvchilar tomonidan keng qoʻllaniladi.
4. registr buyruqlari — Sr=n shaklida yozilib, bunda r oʻzgartiriladigan register raqami va n esa registrga beriladigan qiymat. Registr deb modemda joylashgan qandaydir xotira yacheykasiga aytiladi. Bu registrlar modemning qandaydir sozlamalari (masalan, transmissiya quvvati, modulyatsiya parametrlari)ni oʻzgartirish uchun ishlatiladi va turli modemlar uchun turlicha boʻlishi mumkin. Registr buyrugʻiga misol: S7=60, bu buyruq modemga „#7 raqamli registr qiymatini 60 ga oʻzgartir" degan buyruqni bildiradi.

Koʻp harf-raqam birikmali buyruqlarda nol raqami majburiy emas. Yaʼni, „L0" buyrugʻi oʻrniga „L" ning oʻzini ham yozish mumkin.

Oldin aytilganidek, modemning maʼlumotlar rejimidan buyruqlar rejimiga oʻtkazish uchta plyus („+++") belgisidan iborat escape ketma-ketlikni uzatish yordamida amalga oshirilishi mumkin. Bu ketma-ketlikdan soʻng qisqa muddatli tanaffus (bir sekundli pauza) ham muhim. Bu yuqoridagi ketma-ketlikni oddiy maʼlumot emas, modemni buyruqlar rejimiga oʻtkazuvchi maxsus ketma-ketlik ekanligini bilib olishga xizmat qiladi.

Buyruqni tugatish yoki berilgan buyruq natijasini koʻrsatishda `<CR>` (carriage return) va `<LF>` (line feed) belgilaridan foydalaniladi. Ushbu belgilar ASCII jadvaldagi 0 dan 255 gacha boʻlgan kodlardan biriga S3 va S4 registrlariga qiymat berish orqali oʻzgartirilishi mumkin. `<CR>` belgisi buyruqni tugashini bildiradi va uning odatiy qiymati 13 ga teng (ASCII jadvaldagi 13 kodli belgiga). `<LF>` esa modem batafsil natija kodlarini koʻrsatish rejimida boʻlsa (V1 sozlamasi orqali beriladi) natijalarda `<CR>` belgisidan keyin chiqariladi, aks holda raqamli natija kodlari rejimida (V0 sozlamasi orqali beriladi) turilganda esa `<CR>` belgisidan soʻng qoʻyilmaydi.

### Modem sessiyasiga misol

Quyida ikkita A va B kompyuterlari va ularga ulangan modemlarni terminal-emulyator dasturi orqali bogʻlanishi natijalari misol tariqasida koʻrsatilgan. (Terminal-emulyator dasturi foydalanuvchini modemga toʻgʻridan toʻgʻri buyruq berishini taʼminlovchi dasturiy taʼminotdir). Bu misolda A kompyuter modemidan B kompyuter modemi raqamiga qoʻngʻiroq qilish jarayoni koʻrsatilgan. 

| A modem | B modem | Izoh |
| --- | --- | --- |
| **ATDT998156665505** |  | A modem foydalanuvchisi raqam terish buyrugʻini beryapti: AT — prefiks, D — qoʻngʻiroq qilish buyrugʻi, T — Tone, 998156665505 — qoʻngʻiroq qilinadigan raqam. |
|  | *RING* | Qoʻngʻiroq qilinyapti. B modem telefon liniyasiga qoʻngʻiroq boʻlayotganligi haqida bildiryapti. |
|  | **ATA** | B modem qoʻngʻiroqni qabul qilyapti (goʻshakni koʻtarish) |
| *CONNECT* | *CONNECT* | Modemlar bir-biri bilan bogʻlandi, ikkala modem ham bu haqda bildiryapti. Amalda koʻp modemlab CONNECT — soʻzidan keyin bogʻlanishning tezligini ham bildirishi mumkin. Shuningdek ayni shu damda serial portda DCD yoki Data Carrier Detect signali ham yuzaga keladi. |
| **abcdef** | *abcdef* | Bogʻlanilgandan soʻng har qaysi modemdan joʻnatilgan maʼlumotlar ikkinchi tomonda koʻrina boshlaydi. Bu yerda A kompyuterdan joʻnatilgan abcdef soʻzi B modemga yetib bordi. (A kompyuterdagi foydalanuvchining oʻziga bu koʻrinmasligi mumkin, qachonki exo sozlamalari berilmagan boʻlsa). |
|  | **+++** | B kompyuterdagi foydalanuvchi maʼlumotlar rejimidan buyruqlar rejimiga oʻtish uchun maxsus ketma-ketlikni beryapti. |
|  | *OK* | modem buyruqlar rejimiga oʻtganligini bildirdi |
|  | **ATH** | B kompyuterdagi foydalanuvchi qoʻngʻiroqni tugatish buyrugʻini berdi (H — hangup). |
| *NO CARRIER* | *OK* | Ikkala modem ham qoʻngʻiroq tugaganligi xabarini bildirmoqda. B modem yuqoridagi ATH buyrugʻini muvaffaqiyatli bajarilganini „OK" bilan bildirsa, A modem NO CARRIER xabari orqali ikkinchi taraf aloqani uzganligini aytyapti. |

Havolalar
---------

* Hayes AT Command Set