Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 16.05.2017
Сообщений: 35

Вывод текста без WinAPI

24.12.2017, 13:20. Показов 2146. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Пишу OS на C++. Как мне создать функцию printf() без использования айостримов и т.д.?
Как создать функции ввода?

И все чтобы работало на чистом железе.

Заранее спасибо!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.12.2017, 13:20
Ответы с готовыми решениями:

Создание окна без WinAPI
Хотелось узнать, как создавать окна без использования WinAPI.

Перетаскивание окна за любую его точку без WinApi
Дело в том, что в апи я 0 даже как вставить туда пару строк я не знаю могу только в VCL Form Application что-то писать подскажите код...

Вывод изображения WinAPI
Здравствуйте! Нужно сделать что-то типа графического редоктора, который накладывает фильтры на изображения. С алгоритмами я знаком, на C#...

23
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
24.12.2017, 13:26
Если на чистом железе (т.е. без операционной системы) - смотри документацию к микроконтролеру, к которому пишешь, какие там регистры отвечают за передачу на дисплей и т.п.
0
0 / 0 / 0
Регистрация: 16.05.2017
Сообщений: 35
24.12.2017, 17:38  [ТС]
Цитата Сообщение от TRam_ Посмотреть сообщение
к микроконтролеру, к которому пишешь

Вы предлагаете написать по отдельности для каждой мамки?! Я вас правильно понял?
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
24.12.2017, 17:44
У каждой материнки есть как минимум биос, т.е. тоже изначально заложенная программа, к которой можно было бы как-то сделать вывод. Но в в вашем вопросе было "сделать всё с нуля", значит и сделано будет даже не для отдельной материнской платы, а для отдельной конфигурации оборудования. Если конечно за эту бессмысленную затею таки возьмётесь. Но предлагаю для начала потренироваться "на кошках", т.е. на оценочных платах каких-нибудь микроконтроллеров.
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
26.12.2017, 09:28
Kukushkha, можете ещё здесь спросить: https://www.cyberforum.ru/low-level/
0
0 / 0 / 0
Регистрация: 16.05.2017
Сообщений: 35
26.12.2017, 11:12  [ТС]
Цитата Сообщение от TRam_ Посмотреть сообщение
Но в в вашем вопросе было "сделать всё с нуля"
Дело в том, что в вопросе такого не было.

Цитата Сообщение от TRam_ Посмотреть сообщение
а для отдельной конфигурации оборудования
Вы намекаете на то, что на ASM это будет написать проще?

Ладно! Допустим, я посмотрел документацию к
Цитата Сообщение от TRam_ Посмотреть сообщение
микроконтролеру, к которому пишешь
.
И узнал что за это отвечают регистры AX и AH(Например). Тогда каким кодом мне произвести запись буквы Е в AX и буквы Б AH?
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
26.12.2017, 12:31
Цитата Сообщение от Kukushkha Посмотреть сообщение
каким кодом мне произвести запись буквы
В зависимости от кодировки. Например ANSII - совместимых кодировках латинская A записывается в виде числа 0x41

Добавлено через 1 минуту
Цитата Сообщение от Kukushkha Посмотреть сообщение
узнал что за это отвечают регистры AX и AH(Например)
Для отображения нужно разобраться с интерфейсом дисплея. Зная AX и AH сможешь только вычисления проводить, но не вывод на экран.
0
0 / 0 / 0
Регистрация: 16.05.2017
Сообщений: 35
26.12.2017, 16:46  [ТС]
Цитата Сообщение от TRam_ Посмотреть сообщение
Зная AX и AH сможешь только вычисления проводить
Я разве не написал: (Например)?

Цитата Сообщение от TRam_ Посмотреть сообщение
A записывается в виде числа 0x41
Я имею в виду код C++. Какой функцией.
0
Заклинатель змей
 Аватар для DobroAlex
705 / 560 / 219
Регистрация: 30.04.2016
Сообщений: 2,605
26.12.2017, 23:36
Kukushkha, а у вас есть компилятор С++ под вашу ОС?
1
0 / 0 / 0
Регистрация: 16.05.2017
Сообщений: 35
27.12.2017, 12:57  [ТС]
Цитата Сообщение от DobroAlex Посмотреть сообщение
а у вас есть компилятор С++ под вашу ОС?
Что за вопрос?!

Вы имеете ввиду OS которую пишу Я или ту, которая у меня сейчас на компе?
0
Заклинатель змей
 Аватар для DobroAlex
705 / 560 / 219
Регистрация: 30.04.2016
Сообщений: 2,605
27.12.2017, 13:16
Kukushkha, для той, на которую пишите. Это называется "Целевая платформа"
0
0 / 0 / 0
Регистрация: 16.05.2017
Сообщений: 35
27.12.2017, 14:27  [ТС]
Цитата Сообщение от DobroAlex Посмотреть сообщение
на которую пишите
Я пишу не приложение. А OS, которая работает БЕЗ всяких там, целевых платформ.... Опирается только на аппаратуру.

Вы хотите чтобы я искал компилятор C++ для BIOS?
0
Заклинатель змей
 Аватар для DobroAlex
705 / 560 / 219
Регистрация: 30.04.2016
Сообщений: 2,605
27.12.2017, 14:42
Kukushkha, а как вы будете запускать ваш С++ код или готовый исполнимый файл?

Добавлено через 2 минуты
Могу ещё предложить int 09h из старых добрых времён
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
28.12.2017, 07:26
Лучший ответ Сообщение было отмечено SatanaXIII как решение

Решение

Цитата Сообщение от DobroAlex Посмотреть сообщение
Могу ещё предложить int 09h из старых добрых времён
Это прерывание DOS'а, ТС же свою ОС пишет, у него нету int XX

На х86 архитектуре видепамять мапится на определенный адрес (на память не скажу, нужно гуглить), соответственно что бы напечатать текст на экран нужно скопировать твой текст в эту память. Можно задавать смещение на экране. Например base_address + 80 выведет тебе текст на второй строчке.
Конечно речь о real mode, если у тебя например protected или любой другой, то фукнция печати должна переводить процессор в real, копировать строку в видеопамять и возвращаться в исходный режим.
0
0 / 0 / 0
Регистрация: 16.05.2017
Сообщений: 35
28.12.2017, 11:17  [ТС]
Цитата Сообщение от Kastaneda Посмотреть сообщение
На х86 архитектуре видепамять мапится на определенный адрес (на память не скажу, нужно гуглить), соответственно что бы напечатать текст на экран нужно скопировать твой текст в эту память. Можно задавать смещение на экране. Например base_address + 80 выведет тебе текст на второй строчке.
Конечно речь о real mode, если у тебя например protected или любой другой, то фукнция печати должна переводить процессор в real, копировать строку в видеопамять и возвращаться в исходный режим.
Спасибо! Но я так и не понял какую
C++
1
write("AX", 0x41)
надо прописать чтобы произвести запись в регистр.

Или вы предлагаете написать это на ASM, а потом запускать функции на C++? Если да, то как?

Цитата Сообщение от DobroAlex Посмотреть сообщение
а как вы будете запускать ваш С++ код или готовый исполнимый файл?
А вот этого я не знаю... Может можно как с ассемблером, скомпайлить в bin, а потом через UltraISO образ смонтировать?
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
28.12.2017, 14:24
Цитата Сообщение от Kukushkha Посмотреть сообщение
надо прописать чтобы произвести запись в регистр.
Тебе не надо в регистр писать, писать надо в память. В каком режиме процессора работаешь?
0
Заклинатель змей
 Аватар для DobroAlex
705 / 560 / 219
Регистрация: 30.04.2016
Сообщений: 2,605
28.12.2017, 15:56
Kastaneda, прямое отображение в память, сейчас вообще можно так? (Я работал с асмом только в ДОС и не силён в его современных возможностях)
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
28.12.2017, 16:22
Цитата Сообщение от DobroAlex Посмотреть сообщение
Kastaneda, прямое отображение в память, сейчас вообще можно так?
Под DOS'ом можно конечно, там же real mode и (естественно) ring 0.
0
0 / 0 / 0
Регистрация: 16.05.2017
Сообщений: 35
02.01.2018, 15:41  [ТС]
Цитата Сообщение от Kastaneda Посмотреть сообщение
Тебе не надо в регистр писать, писать надо в память.
Ок. Но все же напишите, как это сделать.

Цитата Сообщение от Kastaneda Посмотреть сообщение
В каком режиме процессора работаешь?
В protected. Если записывать в память, надо сначала переходить в real, писать и обратно?

Не по теме:

Кстати, с новым годом!



Добавлено через 18 часов 21 минуту
Я тут хабр почитал... Узнал про архитектуру и формат ядра.
С архитектурой разобрался, но еще не решил: "экзо" или "гибридное" ядро. А формат, без понятия. Что такое "elf", "a.out", "coff"?
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
04.01.2018, 20:17
Лучший ответ Сообщение было отмечено DrOffset как решение

Решение

Цитата Сообщение от Kukushkha Посмотреть сообщение
Что такое "elf", "a.out", "coff"?
Ты где-то далеко от своей ОС Хотя если ты пишешь и постигаешь все с нуля то норм, узнаешь об этом когда дойдешь до исполнения программ.

Цитата Сообщение от Kukushkha Посмотреть сообщение
В protected. Если записывать в память, надо сначала переходить в real, писать и обратно?
Да, либо держать где-то адрес замапленой страницы (если работаешь в protected с включенной страничной адресацией). Короче твоя задача записать текст в определенный физический адрес памяти.

Добавлено через 5 минут
Советую http://wiki.osdev.org/Main_Page тонна полезного материла на эту тему. Скопипастил оттуда много кода в свой древний рабочий проект)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.01.2018, 20:17
Помогаю со студенческими работами здесь

Как создать winform в vs2012(3) быстро и без WinAPI, сохранив возможности С++
Здравствуйте, уважаемые форумчане. Всем откликнувшимся заранее большое спасибо. Вообщем ситуация вот какая. Я занимаюсь разработкой систем...

Вывод текста в WinAPI
Подскажите, пожалуйста, есть ли какие-то стандартные функции для вывода текста по вертикали? или например такой вариант - вывести по...

WinAPI и вывод текста
Очень тупой вопрос - как одной командой напечатать в заданном прямоугольнике "полужирный, курсив, перечеркнуто"? Не ...

Странный вывод текста в WinApi
Всем здравствуйте. У меня такой вопрос. Есть приложение WinApi, которое автоматически создается при создании проекта. Я нажимаю кнопку...

Вывод текста из файла в диалоговое окно winAPI
Доброго времени суток! Прошу помочь, не могу понять как сделать. Программа выводит окно с диалоговым окном,вводя текст в которое,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru