В грядущей версии Винды встроенный ИИ-ассистент (Windows Copilot) будет безостановочно делать скриншоты и анализировать ваши действия
Естественно под соусом "полезной" фичи "Реколл", которая позволит... вспомнить вам что вы делали на своем ПК?
Естественно под соусом "полезной" фичи "Реколл", которая позволит... вспомнить вам что вы делали на своем ПК?
Привет, пидоры и пидорессы! Начну с дисклеймера. Мне ебать сколько лет. Когда война началась, я уже в садик ходил. Но стариком я себя не считаю. Просто плохо разбираюсь в некоторых вещах вроде ноутбуков. И да, я умею пользоваться Гуглем. Просто не всегда умею находить искомое.
Суть проблемы, как вы уже поняли из тегов, в ОС Windows. У меня 10. И каждый раз, когда она тайком хочет обновиться, я готов разбить ноут об стену. Скажите, известен ли вам действенный способ остановить обновления Винды раз и навсегда?
Впрочем, судя по всему, такого способа не существует. А потому настоящий вопрос. Я люблю играть в игрушки. А ещё монтажить видео на досуге. В общем, ничего такого, что ограничивало бы меня одной ОС. Скажите, какую альтернативную (ИБЛЯТЬБЕЗОБНОВЛЕНИЙ!) операционную систему стоит выбрать на замену Windows 10? Всяк кулик своё болото хвалит, но никто из линуксоидов или альтернативно одарённых не думает о тех, кто никогда не пользовался ничем другим. Сможете подсказать? Вот вам печенька с предсказанием для хорошего настроения.
Пока Вентили банят пользователей семёрки в КС2; пока на реакторе спрашивают, как поставить десятку рядом с семёркой ради Стима; пока юзеры десятки не хотят пересаживаться на 11; пока саму 11 до сих пор лихорадит от обновлений и она не до конца допилена — мелкомягкие уже собираются выкатить Windows 12.
«2024 год должен стать хорошим годом для клиентов, особенно из-за обновления Windows. Мы по-прежнему считаем, что установочная база довольно старая и требует обновления. Мы думаем, что следующий год может стать его началом, учитывая катализатор от Windows», — сказал финансовый директор Intel Дэвид Зинснер на конференции аналитиков Citi.
Сами Штеуды уже делают процы под новые поколения винды, в том числе с сопроцессорами для Копайлота.
Между тем, чуть ранее была новость, что форточники хотят сделать аналог Хром ОС, которая будет работать только через сеть. Это заставляет задуматься о том, что 11, может стать последней полноценной Виндой.
И ещё, в будущем, это ставит у тех, кто живёт в РФ, классический выбор между двух стульев: либо сидеть на устаревших форточках, либо пересаживаться на линукс\фряху\гайку\реакт или даже темплось, лол. Почему, — думаю, никому объяснять не надо. Такой вот локальный Маздай может случиться. Но это так, мыслишки вслух. Основанные, к тому же, на домыслах.
Новость на Хабре: https://habr.com/ru/news/766268/
Новость про Хромоногую Винду: https://habr.com/ru/companies/ru_mts/articles/765364/
Всем привет! а есть ли среди реакторчан киберпидоры-линуксоиды? вопрос скорее к практикующим линуксомагам ибо теорию я задолбался курить, все что нашел на просторах инета испытал, но желаемого результата не получил. итак суть проблемы:
где то в начале года я решил на старый ноут накатить линукс ибо с виндой ему совсем тяжко было. не спрашивайте почему выбрал именно федору, на тот момент мне она показалась наиболее любопытной. и в общем то ноут после установки стал заметно живее, меня все устраивало за исключением одного: на ноуте злоебучая фишка от зеленых - Optimus, так называемая гибридная графика, позволяющая переключаться между встроенной интеловской и дискретной нвидиа в зависимости от задач. загвоздка в том, что никак не удается заставить работать дискретку.
наиболее подробно то, что я уже проделал и это не помогло, описано здесь.
как правило после перезагрузки появляется сообщение NVIDIA kernel module missing. Falling back to nouveau. то есть как я понимаю, система почему то не принимает ядро нвидиа, что с этим сделать больше нет идей. если кто то сталкивался с подобным или есть свежие мысли, делитесь, уважаемые пидоры. если это имеет значение, то железо такое:
00:02.0 VGA compatible controller: Intel Corporation 3rd Gen Core processor Graphics Controller (rev 09) (prog-if 00 [VGA controller])
01:00.0 VGA compatible controller: NVIDIA Corporation GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (rev a1) (prog-if 00 [VGA controller])
всем доброго дня и отличного настроения!
купон прилагается:Хочу пару-тройку дней попользоваться Linux, а поскольку я юзверь всю жизнь сидевший на Windows (и использовавший его максимально потребительски) вштали следующие вопросы:
1. Что ЕСТЬ Linux?
2. Что представляют собой дистрибутивы? Существует ли понятие "чистый Linux"? Что установить новичку?
3. Можно ли после установки Linux откатиться обратно на Windows?
Дисклеймер: эта серия постов не про UEFI. Это не значит, что я не знаю о существовании UEFI. Про UEFI будет отдельная серия постов. Почему я не пишу про UEFI прямо сейчас? Потому что UEFI - это уровень абстракции над железом, а мне интересно именно железо и работа с ним.
Продолжаем? Сейчас наш загрузчик второго уровня работает в "немом" режиме - без возможности подать сигнал об ошибке или выполнении операции. Это необходимо исправить. Самое очевидное решение - вывод информации на дисплей. Мы уже условились, что на нынешнем этапе для работы нашей ОС будет необходима VGA-совместимая карта и дисплей, так что вправе рассчитывать на их наличие.
Программирование VGA-контроллера - сложная штука. Однажды мы ею обязательно займёмся, но сейчас, раз уж мы всё ещё в Реальном режиме, есть вариант попроще: функции BIOS. Функции, связанные с работой дисплея, доступны через прерывание 10h. Мы уже пользовались им для вывода текста в первичном загрузчике, но так как теперь мы не ограничены в размере программы, функционал можно будет расширить.
Первое, что нам стоит сделать - установить нужный видеорежим на случай, если BIOS этого не сделала. Кроме того, понадобятся функции считывания положения курсора, прокрутки экрана и вывода строки. Весь код, связанный с вводом/выводом будет храниться в отдельном файле. У меня он называется io.inc. Мы ещё не использовали подключаемые файлы, но ничего сложного тут нет: в TASM они объявляются директивой include, после которой идёт путь и имя файла. Единственная тонкость тут в том, что подключенный файл не будет вынесен в какую-то изолированную область памяти, как это делается в языках высокого уровня, а окажется в исполняемом файле именно там, где был объявлен. Поэтому лучше объявлять подключаемые файлы где-нибудь в конце, за пределами основного кода.
VGA имеет набор стандартных режимов отображения, с которым можно ознакомиться тут:http://www.columbia.edu/~em36/wpdos/videomodes.txt
Нас интересует режим номер 3 - 80х25 символов, 16 цветов. Для его включения создадим в файле io.inc процедуру set_vmode3. Её полный текст будет выглядеть так:
set_vmode3 proc
push ax
push bx
pushf
xor ax,ax
mov ah,0Fh
int 10h
cmp al,03h
je @@exit_good
mov ax,0003h
int 10h
xor ax,ax
mov ah,0Fh
int 10h
cmp al,03h
jne @@exit_bad
@@exit_good: mov byte ptr vmode,al
mov byte ptr vcol,ah
mov byte ptr vrow,19h
mov byte ptr vpage,bh
popf
clc
pop bx
pop ax
ret
@@exit_bad: popf
stc
pop bx
pop ax
ret
set_vmode3 endp
Начинается процедура, как и почти всегда у меня, с сохранения состояния используемых регистров в стеке. Это нетипичный для ассемблера подход. Обычно, создавая низкоуровневый код, программист стремиться максимально оптимизировать использование инструкций, по возможности обходясь без обращений к памяти, использования стека и вызова процедур. К сожалению, при работе над большим проектом это невозможно, и я на горьком опыте выяснил, что лучше потратить лишние циклы на инкапсуляцию процедуры, чем потом мучительно отлавливать баг, который появился из-за того, что какой-то регистр внепланово изменил значение.
xor ax,ax mov ah,0Fh
int 10h
cmp al,03h
je @@exit_good
Этот блок нужен для того, чтобы остановить выполнение процедуры, если режим 3 уже установлен. Сначала регистр AX обнуляется, чтобы мы точно знали его значение. Функция 15 (0Fh) прерывания 10h возвращает в регистре AL номер установленного режима. Далее мы сравниваем результат с нужным значением (3), и если они равны, то переходим к завершению процедуры, метка @@exit_good. Если режим 3 не установлен, продолжаем.
mov ax,0003h int 10h
Здесь мы опять вызываем прерывание 10h со следующими параметрами: AH = 0(функция 0, установка видеорежима), AL = 3(номер режима). После этого снова идёт проверка режима. Если AL всё ещё не равен 0 - вероятно, возникла проблема, которую мы не сможем решить. Переходим к метке @@exit_bad. Если AL равен 3, продолжаем от @@exit_good. Первым делом - сохраняем в переменные параметры режима, которые вернуло прерывание 10h. В AL - номер режима; в AH - количество колонок символов; в BH - активную страницу видеопамяти (об этом позже). Параметр vrow не возвращается, потому что технически количество символьных строк ограничено только объёмом видеопамяти, а не размером дисплея. После этого восстанавливаем сохранённые в начале регистры, устанавливаем CF (флаг переноса) в нужное положение и завершаем процедуру.
Готово. Теперь в основной модуль после call read_BPB добавляем call set_vmode3 и после этого jc panic. JC - инструкция условного перехода. Переход выполняется при установленном флаге CF. То есть, если наша процедура set_vmode3 завершилась неудачно, программа продолжится от метки panic. Так как невозможность установить видеорежим говорит либо о серьёзных неполадках, либо о несовместимом оборудовании, продолжать выполнение смысла нет. После метки panic останавливаем программу инструкциями cli и hlt.
Далее стоит вывести какое-нибудь приветствие или заголовок, просто чтобы уведомить пользователя о том, что программа работает. Для этого первым делом стоит узнать положение курсора, ведь на экране скорее всего уже есть какой-то текст от BIOS. Это тоже можно сделать с помощью прерывания 10h. Добавьте в io.inc процедуру get_cursor_pos:
get_cursor_pos proc push ax
push bx
push cx
push dx
pushf
mov ah,03h
mov bh,byte ptr vpage
int 10h
mov byte ptr cursor_X,dl
mov byte ptr cursor_Y,dh
popf
pop dx
pop cx
pop bx
pop ax
ret
get_cursor_pos endp
Про сохранение/восстановление используемых регистров объяснять больше не буду, а в остальном тут всё просто: вызываем функцию 3 прерывания 10h, в BH передаём активную страницу видеопамяти. Прерывание возвращает в DL позицию курсора по X, а в DH - по Y. Сохраняем в переменных. Готово. Далее нам понадобится процедура для прокрутки содержимого дисплея. Тут чуть сложнее, добавьте в io.inc:
scroll_up proc push ax
push bx
push cx
push dx
pushf
mov ah,06h
mov bh,CS_DEFAULT
xor cx,cx
mov dl,byte ptr vcol
dec dl
mov dh,byte ptr vrow
dec dh
int 10h
popf
pop dx
pop cx
pop bx
pop ax
ret
scroll_up endp
Функция прокрутки экрана BIOS требует, во-первых, цветовую схему, которой будут заполнены очищенные строки, а во-вторых, координаты верхнего левого и правого нижнего углов сдвигаемой области. Цветовая схема передаётся в регистре BH и состоит из цвета фона и цвета символа. Мы ещё не объявляли константы, давайте посмотрим, как это делается. Константы в отличие от подключаемых файлов можно объявлять где угодно, так как они нужны только на этапе компиляции и не попадают в исполняемый файл. В TASM для объявления констант используется инструкция equ. Вся конструкция выглядит так: ИМЯ КОНСТАНТЫ equ ЗНАЧЕНИЕ КОНСТАНТЫ. Так как в стандартной палитре третьего режима всего 16 цветов, уместно будет определить их в виде констант. Добавьте в код такую запись:
;Цвета фона.BC_BLACK equ byte ptr 00h
BC_BLUE equ byte ptr 10h
BC_GREEN equ byte ptr 20h
BC_CYAN equ byte ptr 30h
BC_RED equ byte ptr 40h
BC_MAGENTA equ byte ptr 50h
BC_BROWN equ byte ptr 60h
BC_LIGHTGRAY equ byte ptr 70h
;Цвета символа.
SC_BLACK equ byte ptr 00h
SC_BLUE equ byte ptr 01h
SC_GREEN equ byte ptr 02h
SC_CYAN equ byte ptr 03h
SC_RED equ byte ptr 04h
SC_MAGENTA equ byte ptr 05h
SC_BROWN equ byte ptr 06h
SC_LIGHTGRAY equ byte ptr 07h
SC_DARKGRAY equ byte ptr 08h
SC_LIGHTBLUE equ byte ptr 09h
SC_LIGHTGREEN equ byte ptr 0Ah
SC_LIGHTCYAN equ byte ptr 0Bh
SC_LIGHTRED equ byte ptr 0Ch
SC_LIGHTMAGENTA equ byte ptr 0Dh
SC_LIGHTBROWN equ byte ptr 0Eh
SC_WHITE equ byte ptr 0Fh
;Несколько готовых цветовых схем.
CS_DEFAULT equ BC_BLACK or SC_CYAN
CS_CLASSIC equ BC_BLACK or SC_LIGHTGRAY
CS_DARK equ BC_BLACK or SC_DARKGRAY
CS_BLUE equ BC_BLUE or SC_LIGHTBLUE
CS_ALARM equ BC_BLACK or SC_RED
CS_DEBUG equ BC_BLUE or SC_WHITE
CS_INVERT equ BC_LIGHTGRAY or SC_BLACK
CS_PANIC equ BC_RED or SC_BLACK
Как видите, для передачи цвета фона/символа используется один байт. Нижние 4 бита отвечают за цвет символа, верхние - за цвет фона и некоторые другие эффекты (подчёркивание, мигание), которые нам сейчас не нужны. Теперь разберёмся с рабочей областью. Мы хотим сдвинуть вверх весь экран, поэтому верхняя левая точка будет в (0,0), а правая нижняя - в (число символов по X-1,число символов по Y-1). Первая передается в CX, вторая - в DX. Таким образом, код процедуры расшифровывается так:
AH=номер функции (6)BH=цветовая схема
CX=верхний левый угол рабочей области (0,0)
DX=правый нижний угол
Вызвать прерывание 10h
Процедура принимает число строк, на которое нужно прокрутить экран вверх, в AL. Добавьте после jc panic такой код:
call get_cursor_pos mov al,01h
call scroll_up
Последнее, что мы рассмотрим сегодня - вывод строки. Это функция 19 прерывания 10h. В качестве параметров она требует: сегмент и смещение строки в ES:BP; цветовую схему в BL; активную страницу видеопамяти в BH; позицию начала вывода по X в DL; позицию начала вывода по Y в DH; длину строки в CX; режим вывода в AL. Номер функции как всегда передаётся в AH.
Зная всё это, давайте подумаем, как организовать процедуру. В принципе тут всё почти однозначно, но что\ делать с длиной строки? Заносить в CX вручную перед каждым вызовом процедуры? Можно, но зачем раздувать код. Лучше включить эту информацию в саму строку. Например, приняв, что первые 16 бит строки будут содержать число символов в ней. У меня строка с заголовком загрузчика выглядит так:str_title dw 31 ;Длина строки. db '=== Tardigrada Loader v.1.1 ===' ;Строка. Теперь давайте напишем саму процедуру в io.inc. print_string proc push ax Наша процедура будет принимать два параметра: смещение строки в BP и цветовую схему в BL. Практически весь код - это заполнение регистров для вызова прерывания. В основном модуле после call scroll_up добавим: mov bl,CS_DEFAULT mov bp,offset str_title Этот код выведет заголовок и прокрутит экран ещё на одну строку вверх. Если всё сделано правильно, должно получиться что-то вроде этого:
push bx
push cx
push dx
push bp
push es
pushf
mov ax,0050h
mov es,ax
mov ax,1300h
mov bh,byte ptr vpage
mov cx,es:[bp]
mov dh,byte ptr cursor_Y
mov dl,byte ptr cursor_X
add bp,0002h
int 10h
popf
pop es
pop bp
pop dx
pop cx
pop bx
pop ax
ret
print_string endp
call print_string
mov al,01h
call scroll_up
Исходники: https://drive.google.com/file/d/144cHXVlBskSiKt9zTAR1V535UQCeUyBL/view?usp=sharing
Bochs: https://drive.google.com/file/d/16k2Gpr7oPSekq4rAhmtBV0IPnIteDLlE/view?usp=sharing
Отличный комментарий!