Опорные изображения
Модель
Материнская плата
Диаграмма
Краткое введение
Sega (и их телевизионная реклама) хочет, чтобы вы знали: Разработчики не смогут придумать достойные игры, если консоль не обеспечит более быструю графику и богатый звук.
Их новая система включает множество уже знакомых компонентов, готовых к программированию. Их новая система включает в себя множество уже знакомых компонентов, готовых к программированию. Это означает, что теоретически разработчикам нужно будет изучить только новый графический процессор Sega… верно?
Процессор
Эта консоль имеет два процессора общего назначения.
Ведущий
Во-первых, у нас есть Motorola 68000, работающий на частоте ~7,6 МГц, популярный процессор, уже присутствовавший во многих компьютерах того времени, таких как Amiga, (оригинальный) Macintosh, Atari ST… Любопытно, что каждый из этих компьютеров сменил своего “предшественника на 6502”, и хотя Master System (предшественник Mega Drive) не использовал процессор 6502, NES использовал (и в некотором роде целью Sega было завоевать потребителей Nintendo). В целом, можно увидеть некоторую корреляцию между эволюцией компьютеров и технологий игровых консолей.
Возвращаясь к теме, 68k отводится роль “основного” процессора, и он будет обрабатывать игровую логику, операции ввода-вывода и графические вычисления. Он обладает следующими возможностями [1]:
- 68000 ISA: Новый набор команд с большим количеством функций, включая набор кодов умножения и деления. Некоторые инструкции имеют длину 8 бит (называются “byte”), другие - 16 бит (называются “word”), а остальные - 32 бита (называются “long-word”).
- Восемь 32-битных регистров общего назначения: Это большой шаг, учитывая, что 6502 и Z80 имеют только 8-битные регистры.
- 16-битное ALU: Это означает, что ему требуются дополнительные циклы для вычисления арифметических операций над 32-битными числами, но он прекрасно справляется с 16-битными/8-битными.
- Внешняя 16-битная шина данных: Как видите, хотя этот процессор имеет некоторые “32-битные возможности”, он не был разработан как полноценная 32-битная машина. Ширина этой шины подразумевает лучшую производительность при перемещении 16-битных данных.
- Интересно, что за четыре года до выхода этой консоли компания Motorola выпустила полноценный 32-битный процессор 68020. Но я представляю, как резко возросли бы затраты, если бы Sega выбрала последний вариант.
- 24-битная адресная шина: Это означает, что возможен доступ до 16 МБ памяти. Внутри процессора адреса памяти по-прежнему кодируются 32-битными значениями (старший байт просто отбрасывается). При этом шина физически подключена к [2]:
- 64 КБ оперативной памяти общего назначения.
- ПЗУ картриджа (до 4 МБ).
- Два контроллера управления.
- Регистры и порты VDP (Video Display Processor) и DMA.
- Регистры материнской платы (идентифицирует консоль).
- Порты расширения (используются для “будущих” аксессуаров).
- Оперативная память второго процессора при посредничестве bus arbiter.
Если вам интересна причина, по которой используются 24-битные адреса в процессоре, способном обработать 32-битные слова, то немногое оборудование того времени могло работать с 4 ГБ памяти. Также учитывая, что внедрение неиспользуемых адресных линий дорогое с точки зрения производительности и стоимости, Motorola достигла разумного компромисса (24 адресные линии), который также подготовил разработчиков к будущему полностью 32-битному процессору 68020.
Интересный набор инструкций
До революции RISC в 80-х была другая волна, которая попыталась утвердить способ построения наборов инструкций. По сути, потребительские процессоры 70-х (такие, как 6502 или 8080) содержат инструкции, которые уже предопределили, как будет доступна память (это называется “режим адресации”). С 68000, Motorola отделила функцию инструкции (операционный код) от режима адресации, делая его просто ещё одним параметром (операндом). Таким образом, разработчики могут использовать одни и те же опкоды с наиболее оптимальным режимом адресации на основе их потребностей.
Этот принцип называется ортогональностью набора команд и он сильно повлиял на новое поколение процессоров конца 70-х, но быстро отошёл на второй план с появлением RISC, по сути переложившим всё самое сложное на компиляторы. В любом случае серия Motorola 68k пользовалась большим спросом в 80-х, и лишь к началу 90-х компании начали переключаться на другого поставщика.
Ведомый
В этой консоли установлен еще один процессор, Zilog Z80, работающий на частоте ~3,5 МГц. Это тот же самый процессор, который был анализирован в статье про Master System.
В основном Z80 используется для управления звуком. Таким образом, ее 16-битная шина адреса состоит из следующего [3]:
- 8 КБ ОЗУ.
- Два звуковых чипа.
- ОЗУ 68000 (опять же, обрабатывается арбитром шины).
Наконец, важно отметить, что оба процессора работают параллельно.
Доступная память
Основной процессор содержит 64 КБ выделенной оперативной памяти для хранения данных общего назначения, а Z80 содержит 8 КБ оперативной памяти для операций, связанных со звуком.
Взаимосвязь
Sega выбрала два независимых процессора, которые не знают друг о друге, так как же игры могут управлять обоими одновременно? Так, основная программа выполняется в 68000, и этот процессор может впоследствии записывать в оперативную память Z80. Потом, 68000 может отправить программу в оперативную память Z80 и дать команду Z80 загрузить ее (посылая сигнал сброса на Z80) [4]. Когда Z80 находится под контролем, его можно использовать для управления звуковой подсистемой и перемещения памяти с помощью ранее описанного метода, и все это в то время, когда 68000 занимается другими операциями.
Поскольку одному процессору придется задействовать процессорную шину другого, а оба не могут использовать ее одновременно, существует дополнительный компонент Bus arbiter, который должен быть активирован, чтобы затормозить любой из процессоров, так что память может быть записана без опасности.
Важно отметить, что данная конструкция может быть недостаточно эффективной, если ею не управлять должным образом, поэтому в играх придется уделять особое внимание арбитру шины и следить за тем, чтобы ни один из процессоров не простаивал дольше, чем нужно.
Графика
Ответ на это: Blast Processing! , что еще вам нужно знать?
Итак, если вы хотите знать реальный ответ: графические данные обрабатываются 68000 и выводятся на проприетарный чип под названием Video Display Processor (или сокращенно VDP), который затем отправляет полученный кадр (в виде линий развертки) на дисплей.
VDP работает на частоте ~13 МГц и поддерживает несколько режимов разрешения в зависимости от региона: до 320x224 пикселей в NTSC и до320x240 пикселей в PAL.
Несколько разрешений дисплея
Технически говоря, в VDP может поместиться либо 40, либо 32 колонки плиток на строку развертки, а количество рядов плиток зависит от региона (28 в NTSC или 30 в PAL) [5]. Хотя большинство PAL-игр не утруждают себя дополнительными плитками, разрешенными в PAL-системах (поскольку им, вероятно, нужно сохранить согласованность между двумя регионами, а NTSC - это общий знаменатель), поэтому они инструктируют VDP для рендеринга с 28 рядами (как они бы сделали в NTSC-системах). Таким образом, у VDP нет другого выбора, кроме как заполнить неиспользуемую область цветом фона (который также используется при оверсканировании).
Вы можете увидеть, какие игры PAL отображаются в режиме NTSC, проверив Mode Set Register #2
в эмуляторе с возможностью отладки (т.е. Exodus). Если четвертый бит справа равен 0
, то VDP работает в режиме NTSC [6].
Более того, существует дополнительный параметр, который можно установить на VDP, чтобы сложить две плитки для формирования 8x16 карт и затем рассматривать их как одну плитку. Следовательно, удваивается вертикальное разрешение. Однако это вдвое снижает частоту обновления, поскольку кадры теперь отображаются с чередованием (один кадр отображает четные линии развертки, следующий - нечетные, и так далее), поэтому он более ограничен в функциональности. Многопользовательский режим игры Sonic 2 является хорошим представлением этого режима [7].
Наконец, стоит отметить, что VDP автоматически заботится о добавлении отступов для области overscan, поэтому играм не нужно беспокоиться о том, в какие области безопасно рисовать графику (как это произошло с NES’s ‘danger zones’).
Организация контента
С точки зрения обработки графических данных, этот чип имеет два режима работы:
- Режим IV: унаследованный режим, который ведет себя как его предшественник.
- Это не означает, что на этой консоли можно сразу играть в игры Master System, поскольку для установки предыдущих картриджей на эту консоль требуется дополнительный аксессуар (Power Base Converter). Преобразователь также даст команду микросхеме ввода-вывода передать управление Z80.
- Режим V: Родной режим работы, мы сосредоточимся на нем.
Что касается режимов от 0 до III? Они относятся к еще более старой модели SG-1000, а Mega Drive их не поддерживает.
Интересно отметить, что бывший разработчик этой системы позже сказал мне, что структура команд режима V (используемого для управления VDP в игре) унаследовала дизайн от TMS9918 (знаменитого видеочипа, используемого в SG-1000) [8]. Это облегчило сторонним разработчикам использование Mode V без зависимости от официальной документации (и последующих затрат на лицензирование).
Доступная память
Графическое содержимое распределяется по трем областям памяти [9]:
- 64 КБ VRAM (Video RAM): Содержит большую часть графических данных.
- 80 B VSRAM (Vertical Scroll RAM): VDP поддерживает вертикальную и горизонтальную прокрутку, и значения V-прокрутки по какой-то причине хранятся в этом отдельном пространстве.
- 128 B CRAM (Colour RAM): Хранит четыре записи палитры с 16 цветами в каждой (включая прозрачный), система предоставляет 512 цветов на выбор. Кроме того, эффекты Highlight и Shadow могут быть применены к каждой палитре для достижения более широкого диапазона цветов на палитру.
Построение кадра
В следующем разделе объясняется, как VDP рисует каждый кадр, для демонстрации в качестве примера используется Sonic The Hedgehog. Перед началом работы я рекомендую ознакомиться с modus operandi его предшественника, поскольку здесь многое будет пересматриваться.
Тайлы
Как и PPU Nintendo, VDP - это движок на основе тайлов, и поэтому он использует тайлы (базовые битовые карты 8x8) для компоновки графических плоскостей. В случае VDP каждая плитка кодируется массивом длиной 4 байта, где каждая 4-битная запись соответствует пикселю, а ее значение соответствует записи цвета (указывающей на цветовую палитру).
Игровые картриджи хранят тайлы в ROM (находится в картридже), но они должны быть скопированы в VRAM, чтобы VDP мог их прочитать [10]. Традиционно это было возможно только в определенные временные рамки и выполнялось центральным процессором, к счастью, в данной консоли добавлена специальная схема для разгрузки этой задачи на VDP (подробности мы рассмотрим позже).
Тайлы используются для построения четырех плоскостей, которые, соединяясь вместе, образуют рамку, видимую на экране. Кроме того, тайлыпланов будут перекрывать друг друга, поэтому VDP будет решать, какая плитка будет видна, основываясь на типе плана и значении приоритета тайла.
Задний план (Background)
Фоновая плоскость, также известная как плоскость B - это прокручиваемая тайлмапа (набор тайлов), содержащая статические тайлы [11].
Эта плоскость может иметь шесть различных размеров: 256x256, 256x512, 256x1024, 512x256, 512x512, 1024x256. Программисты могут выбрать размер, который лучше соответствует типу прокрутки, которая будет необходима.
Каждая плитка может быть перевернута по горизонтали и/или вертикали и иметь приоритет.
На показанном примере вы заметите, что выделенная область для отображения не является квадратом… Это не обязательно так! VDP позволяет установить значения горизонтальной прокрутки для всего кадра, для каждой отдельной строки сканирования или для каждых восьми пикселей. Это означает, что разработчики могут придать выбранной области форму ромбоида и изменять ее углы по мере движения игрока, чтобы имитировать перспективные эффекты. Трюки, подобные этому, не повреждают плоскость, VDP получает каждую (выбранную) горизонтальную линию и строит из нее обычный кадр.
Передний план (Foreground)
Плоскость переднего плана, также известная как плоскость A [12], имеет те же свойства, что и плоскость фона, за исключением того, что эта плоскость имеет более высокий приоритет, поэтому плитки, отрисованные здесь, будут по своей природе находиться поверх плоскости фона.
Кроме того, эта плоскость позволяет разделять себя, образуя новую подплоскость: Оконная плоскость. Разница лишь в том, что последний не прокручивается.
В целом, вы можете видеть, что новые значения приоритетов и отдельные плоскости позволяют дизайнерам игр привнести новые типы пейзажей. Кроме того, используя разную скорость прокрутки на каждой плоскости, можно добиться параллакс-эффекта.
Спрайты
В этой плоскости плитки рассматриваются как спицы. Они располагаются на карте 512x512 пикселей, и только часть ее (выходное разрешение VDP) выбирается для отображения. Это удобно для скрытия ненужных спрайтов или подготовки других, которые будут показаны в будущем. VDP также предоставляет старую функцию обнаружения столкновений.
Спрайты формируются путем объединения плиток размером до 4x4 (карта 32x32 пикселя) и выбора до 16 цветов (включая прозрачный). Если нужен спрайт большего размера, то несколько спрайтов можно объединить в один.
На одну линию развертки может приходиться не более 20 спрайтов, а на один экран - не более 80 (превышение этого количества приведет к повреждению всего слоя).
Область в VRAM, где определяются спрайты, называется Sprite Attribute Table [13], и каждая запись содержит индекс плитки, координаты слоя (x и y), значение link
(управляет тем, какие спрайты рисуются первыми), приоритет (спрайт с наивысшим приоритетом отображается при наложении), индекс цветовой палитры и вертикальный и горизонтальный флип.
Результат
Во время рисования кадра система будет последовательно вызывать различные процедуры прерывания в зависимости от того, куда направлен луч ЭЛТ Как вы, вероятно, видели на предыдущих консолях, это позволяет процессору работать над следующим кадром (или изменять текущий).
Как правило, существует два типа прерываний, называемых: H-Blank (каждая горизонтальная линия) и V-Blank (каждый кадр).
H-Blank вызывается много раз, но ограничивается выполнением коротких рутин. Кроме того, доступны только CRAM и VSRAM, поэтому игры могут только обновлять свои цветовые палитры или вертикально прокручивать свои плоскости.
V-Blank позволяет использовать более длинные процедуры, но имеет недостаток - вызывается только 50 или 60 раз в секунду (в зависимости от региона консоли), но при этом имеет доступ ко всем участкам памяти.
Обратите внимание, что область вылета развёртки в примере имеет несколько случайных цветных точек в правом нижнем углу. Это широко известно как CRAM dots, и происходит это потому, что CPU обновляет палитры в CRAM в то же время, когда VDP транслирует оставшиеся линии сканирования (в примере это происходит во время оверскана). Этот конфликт заставляет VDP извлекать любое значение, которое CPU записывает в это время (в отличие от требуемого места в CRAM), поэтому изображение повреждается. Однако, поскольку в данном случае игра обновляет CRAM только при оверскане, эта аномалия остается незамеченной на традиционных ЭЛТ. Другие игры пытаются обновить палитры в середине кадра, чтобы добиться большего количества цветов, при этом приходится балансировать появление точек CRAM.
Отдельное устройство передачи данных
Всё это время мы обсуждали каким образом процессор может обновлять кадры, а что насчет VDP? Предоставляет ли она что-то более специализированное? Да, этот чип имеет функцию прямого доступа к памяти (сокращенно DMA), которая позволяет перемещать данные между ячейками памяти на более высокой скорости и без вмешательства центрального процессора.
DMA может быть активирован во время H-Blank, V-Blank или активного состояния (вне любого прерывания), и может использоваться для записи через VRAM, CRAM и/или VSRAM [14]. Кроме того, во время передачи данных в оперативную память процессора с помощью DMA шина процессора будет заблокирована, поэтому правильное планирование имеет решающее значение для достижения производительности.
Исключительное использование этих возможностей может обеспечить графику высокого разрешения, плавную параллакс-прокрутку и высокую частоту кадров. Более того, ваша игра может появиться в телевизионной рекламе с множеством надписей Blast Processing! .
Видеовыход
Первый дизайн этой консоли (обычно называемый “Модель 1”) имел тот же порт видеовыхода, что и Master System. В последующих моделях “Модель 2” и “Модель 3” вместо этого был использован порт mini-DIN.
Звук
Аудиовозможности этой консоли, мягко говоря, несколько нестандартны. С одной стороны, Mega Drive предоставляет существующую аудиотехнологию предыдущего поколения, с другой - добавляет новую (но сложную) технику синтеза поверх существующей. Так что, в некотором смысле, вы получаете оба поколения.
Учитывая это, в Mega Drive установлены два звуковых чипа: Yamaha YM2612 и Texas Instruments SN76489.
Функционал
Давайте теперь посмотрим, что предлагает каждый чип, поскольку каждый из них очень отличается.
Yamaha YM2612
Yamaha YM2612 - это FM-синтезатор [15], работающий на скорости 68000 и предоставляющий шесть FM-каналов, на которых можно воспроизводить PCM-сэмплы (с разрешением 8 бит и частотой дискретизации 32 кГц).
Частотная модуляция или “FM” синтез - это один из многих профессиональных методов синтеза звука, который значительно вырос в популярности в 80-е годы и дал дорогу совершенно новым звукам (многие из которых вы можете найти, прослушав поп-хиты той эпохи).
В невероятно упрощенном виде алгоритм FM берет одну форму волны (носитель) и изменяет ее частоту с помощью другой формы волны (модулятор). В результате получается новая форма волны с другим звучанием. Комбинация несущая-модулятор называется оператором, и несколько операторов могут быть соединены вместе для формирования конечной формы сигнала. Различные комбинации дают разные результаты. Этот чип позволяет использовать 4 оператора на канал.
По сравнению с традиционными синтезаторами PSG это было радикальным улучшением: Вы больше не зацикливались на заранее заданных формах волны.
Texas Instruments SN76489
Sonic The Hedgehog (1991).
Микросхема Texas Instruments SN76489 представляет собой PSG-чип, который может производить три импульсные волны и одну шумовую.
На самом деле это звуковой чип оригинальной Master System, который встроен в VDP. Он работает со скоростью Z80.
Обратите внимание, что канал ‘Pulse 3’ остается неиспользованным. Это происходит потому, что в игре используется режим для канала шума, который резервирует третий импульсный канал для модуляции [16], функция, которая была доступна и на Master System.
Микширование
Sonic The Hedgehog (1991).
Оба чипа могут выводить звук одновременно, тогда дополнительный компонент, называемый “аудиомикшером”, призван принимать оба сигнала и смешивать их.
Наконец, полученный аналоговый сигнал передается через аудиовыход.
Дирижёр
Теоретически, карта памяти Z80 предполагает, что Z80 является единственным процессором, способным управлять этими двумя чипами (что может быть облегчением для 68000, поскольку последний уже пресытился другими задачами). На практике, однако, Z80 можно отключить, чтобы 68000 имел доступ к YM2612 (но не к SN76489) [17]. Поэтому, для простоты, в этой статье мы будем считать, что звуковые задачи возложены на Z80.
Далее, Z80 является самостоятельным процессором, поэтому ему нужна собственная программа (хранящаяся в 8 КБ оперативной памяти), чтобы интерпретировать музыкальные данные, полученные от 68000, и эффективно манипулировать двумя звуковыми чипами соответствующим образом. Эта программа называется секвенсор или драйвер.
Взлом сэмплирования
Некоторые музыкальные композиторы могут решить сосредоточиться на канале PCM для воспроизведения более правдивых звуков, и для этого в играх придется непрерывно упорядочивать и транслировать свою музыку, используя остальную доступную оперативную память. Основное ограничение заключается в том, что для заполнения этой памяти главная шина должна быть заблокирована первой (поэтому никакие команды или сэмплы не могут быть отправлены на аудиочипы в течение этого промежутка времени). В противном случае могут появиться звуковые аномалии (приглушение звука, замороженные ноты, низкая частота дискретизации и т.д.).
По этой причине я решил посвятить этот раздел нескольким примерам игр, которые успешно справились с вышеупомянутым ограничением. Вместо того чтобы ограничиваться обычными ударными установками, некоторые игры нашли невероятные способы передачи более богатых сэмплов на этот единственный канал PCM, посмотрите эти примеры:
Toy Story (1995).
Это секвенция в реальном времени с помощью 68000 [18]. Очень интенсивное задание, то есть его можно было выполнять только в очень определенных точках игры (например, в главном меню).
Я знаю, что они и близко не стоят к CD-качеству (16 бит при 44,1 кГц), но имейте в виду, что эти звуки когда-то считались невозможными для воспроизведения на этой консоли, и я даже не подчеркиваю, насколько велик прогресс по сравнению с предыдущим поколением, так что они определенно заслуживают хоть какой-то заслуги!
Вспомогательная FM-композиция
Если программирование FM-синтезатора с помощью приборной панели Yamaha DX7 уже считалось сложным, представьте себе головную боль от сочинения музыки с помощью только 68k-ассемблера…
К счастью, позже Sega распространила программное обеспечение для ПК с MS-DOS под названием GEMS для облегчения создания (и отладки) музыки Mega Drive [19]. Это был очень полный инструмент, среди многих вещей он включал множество патчей (предварительно настроенных операторов на выбор), что также объясняет, почему некоторые игры имеют очень похожие звуки.
Более того, аудиоподсистема позволяла играм инстанцировать больше каналов, чем разрешено, и назначать каждому из них значение приоритета, после чего, когда консоль воспроизводила музыку, она динамически распределяла музыкальные каналы по доступным слотам на основе приоритетов. Кроме того, каналы с высоким приоритетом, но без музыки, могут быть автоматически пропущены.
Каналы также содержали некоторую логику, реализуя условия в своих данных, позволяя музыке “развиваться” в зависимости от того, как игрок продвигается в игре.
(Бонус) Звук Mega CD
Вот интересный факт: дополнение Mega CD предоставляло 2 дополнительных канала для CD Audio (среди прочего). Одна из самых известных игр компании, Sonic CD, имела очень впечатляющее качество музыки, но, как и все игры, она должна была зацикливаться. Проблема заключалась в том, что зацикливание музыки на 1x CD ридере приводило к заметным пробелам, поэтому в игру были включены заполнители цикла, которые выполнялись с другого PCM чипа, пока заголовок CD возвращался к началу.
Эти наполнители встречаются только в ранних бета-версиях игры, и они не попали в релиз, а в ремейке 2011 года они наконец-то появились. Это один из уровней игры:
Заметили ли вы пробел в версии Mega CD?
Игры
Игры в основном написаны на 68000 ассемблере, а звуковой драйвер реализован на Z80 ассеблере. Оба находятся в ПЗУ картриджа и могут иметь размер до 4 МБ без необходимости маппера.
Дополнительные функции
С точки зрения расширяемости, эта конструкция была не такой модульной, как NES или SNES. Следовательно, более поздние дополнения, такие как 32x (который включал новый чипсет, заменяющий 68k), должны были обходить VDP (отсюда и необходимость в “соединительном кабеле”).
Для картриджей производился только один пользовательский чип - Sega Virtua Processor [20] (ребрендинг Samsung SSP1601, 16-битного цифрового сигнального процессора), который производил полигоны, впоследствии закодированные в виде тайлов (чтобы VDP мог их прочитать). В любом случае, с ним поставлялась только одна игра, так как SVP оказался очень дорогим в производстве.
Ранние попытки создания сети
До того, как онлайновые сервисы получили широкое распространение (и стали стандартизированными), Sega попытала счастья с Sega Meganet, коммутируемым сервисом для использования игр. Meganet требовала от пользователей приобретения отдельного аксессуара под названием Sega Mega Modem, затем подключения его к задней части консоли (где находился разъем DE-9) и, наконец, подключения к телефонной линии. Тогда игры будут рассматривать модемный блок как еще один контроллер, с добавлением последовательного обмена данными [21] (в отличие от параллельного кодирования, используемого для контроллеров).
Как бы то ни было, эта функция просуществовала всего пару лет, после чего Sega убрала разъем DE-9 из последующих версий и полностью закрыла эту услугу.
Защита от пиратства и блокировка регионов
Чтобы блокировать импортные игры, Sega немного изменила форму гнезда для картриджа в разных регионах, но при этом сохранила одинаковые выводы. Игры также могут выполнять “блокировку региона”, проверяя значение регистра Version
(который выводит значение региона).
Есть два простых способа обойти это. Во-первых, купив один из конвертеров картриджей сторонних производителей. Или, во-вторых, разобрав консоль и перемкнув контакты на материнской плате, которые изменяют значение регистра Version
.
Когда дело доходило до программных мер по борьбе с пиратством, самой простой проверкой был размер SRAM: На бутлег-картриджах было больше места, чем требовалось для размещения любой игры, поэтому игры проверяли наличие ожидаемого размера при запуске. Программисты также могут реализовать дополнительные проверки контрольной суммы в случайных точках игры на случай, если хакеры удалят первоначальные проверки SRAM. Единственный способ победить это - утомительно найти все проверки и удалить их одну за другой…