Форум программистов, компьютерный форум, киберфорум
QBasic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.68/19: Рейтинг темы: голосов - 19, средняя оценка - 4.68
 Аватар для yevrowl
307 / 78 / 6
Регистрация: 27.04.2022
Сообщений: 243

Смена палитр CGA

20.06.2022, 22:58. Показов 5046. Ответов 40
Метки cga (Все метки)

Студворк — интернет-сервис помощи студентам
В CGA при разрешении 320 × 200 есть три палитры, ещё альтернативный графический режим 160 × 200 с 16 цветами, а также монохромный видео режим 640 × 200, в котором оба цвета можно менять. Вопрос в том, можно ли это делать средствами Q(uick)Basic, или без ассемблера ни разу не обойтись?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.06.2022, 22:58
Ответы с готовыми решениями:

анимация с помощью палитр средствами GDI(Win API) или Buildera
Необходимо сделать анимацию с помощью палитр средствами GDI(Win API) или Buildera, подскажите как это сделать, если можно с примерчиком или...

Подключить VGA монитор к EGA/CGA
Доброго всем времени суток. Уважаемые электронщики, очень нужна Ваша помощь. Есть промышл. аппарат с монитором. Монитор вышел из строя....

Разработать нерезидентный драйвер экрана с видеоадаптером CGA
Требуется реализовать программно нерезидентный драйвер экрана с видеоадаптером CGA. Кроме того, требуется разработать прикладную...

40
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
24.06.2022, 21:53
Студворк — интернет-сервис помощи студентам
И Bloatware это не всё, что мы под этим подразумеваем. Иначе можно сказануть так что мол
всё, что не уровня домосцены 95-го - это bloatware. А такого уровня нет сейчас нигде и чего?
Это бессмысленная пропаганда. Работает, ковыляет, и ладно и рантайм это не зло, если он вшит.
Вот когда ты что-то хочешь запустить а его нет, надо качать, трахаться епстись чтобы понять что
скачать, подойдёт ли оно и т.п. - вот это зло и дебилизм. Надо правильные вещи нести в массы,
а не задротство. Задротство есть, да, оставим ему небольшой клочок спецов и ладно.

Добавлено через 4 минуты
Цитата Сообщение от yevrowl Посмотреть сообщение
Quiet Snow, скомпилированная из бейсика программа в 244 байта — впечатлила.
Впечатлило что? Текст? В 256 байт люди укладывали 3D рейтрейс проги плавающие по рекурсивно созданной
фрактальной сцене.
1
 Аватар для yevrowl
307 / 78 / 6
Регистрация: 27.04.2022
Сообщений: 243
24.06.2022, 21:57  [ТС]
Цитата Сообщение от Quiet Snow Посмотреть сообщение
Впечатлило что? Текст? В 256 байт люди укладывали 3D рейтрейс проги плавающие по рекурсивно созданной фрактальной сцене.
То, что это компиляция программы на бейсике. Из известных мне компиляторов, разве что HotBasic умеет приближённо малые размеры делать, но не настолько.
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
24.06.2022, 22:13
Цитата Сообщение от yevrowl Посмотреть сообщение
То, что это компиляция программы на бейсике.
Это не бейсик, это GCC или что там в ретрансляторной части. Я вообще не хочу туда лезть.
Они(разрабы) уже кучу всего похерили за последние 10 лет. Было всё прекрасно и развивалось.
Разве что в хедеры гадили, но это поправимо было. А сейчас всё улетело просто в жопу.
Ни одна прога с версии 1.0 не скомпилится, все наработки комьюнити коту под жопу.
Просто дебилы, всё просрали. Это давно уже не бейсик и много раз говорил об этом,
настоящий нормальный бейсик не меняется насторлько, чтобы перестать компилировать свои же
исходники. Должно быть синтаксичекое строго оговоренное постоянство.
Если людям нравится это дерьмо и переписывать то, что и так работало - пусть используют и гордятся,
я буду строе испозовать что работает. Все преимущества высосаны из пальца и профи это видят.
1
 Аватар для yevrowl
307 / 78 / 6
Регистрация: 27.04.2022
Сообщений: 243
24.06.2022, 22:17  [ТС]
Quiet Snow, трудно не согласиться, форум у QB32/64 был весьма обстоятельный, и помогал даже в виде google-кэша.
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
24.06.2022, 22:22
Цитата Сообщение от yevrowl Посмотреть сообщение
форум у QB32/64 был весьма обстоятельный
Там было Wiki на которое ссылался, когда люди обращались с вопросами, теперь все ссылки подохли,
да и сайт у них то работает то сдохнет. Там нет саппорта давно уже. Идея возрождения не удалась,
бегун споткнулся на старте, задел барьер, сбил оператора и упал в яму.
1
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
24.06.2022, 22:59
Цитата Сообщение от Quiet Snow Посмотреть сообщение
такие вещи лучше делать на голом ассемблере
Во‐первых, на ассемблере неудобно.
Во‐вторых, на ассемблере каждый любой может делать ком‐файлы. А вот написать ком‐файл на бесике — нужно постараться.
В‐третьих, это не демосцена, где нужно каждый байт экономить. Если сравнивать размеры с екзешниками, то просто фантастика.

Добавлено через 28 минут
Цитата Сообщение от Quiet Snow Посмотреть сообщение
Это не бейсик, это GCC или что там в ретрансляторной части.
От подхода «программа знает все машинные коды, переводит операторы языка сразу в машинные коды и сама строит исполняемый файл» давно отказались по известным причинам. Даже программа‐ассемблер не создаёт исполняемый файл, она создаёт объектный файл, которые связывает линковщик воедино и получает исполняемый файл.

В современном мире пришли к идее, чтобы исходный код программы оттранслировался не сразу в машинные инструкции, а в некое промежуточное представление, что‐то вроде синтаксического дерева. Это промежуточное представление не зависит от конкретной платформы и процессора, поэтому его очень легко можно перевести ассемблерами в машинные коды конкретной платформы и конкретного процессора. А когда компилятор транслирует текст программы сразу в двоичные коды, вы не сможете эти двоичные коды применить к другому процессору или ОС — и исходный код программы становится непереносимым.

Ну и ещё: имея на руках уже разобранное синтаксическое дерево исходного кода, его легко можно оптимизировать и выдать уже оптимальный и быстрый вариант. А оптимизация машинных кодов — это та ещё задачка. Следствием является то, что компилятор больше не занимается оптимизацией, задача компилятора — это построить синтаксическое дерево и отдать его оптимизатору.

По умолчанию таким промежуточным представлением программы для FreeBASIC является код на языке си. В этом ничего плохого нет, компиляторы си достаточно хорошо оптимизируют код. Можно использовать кодогенерацию в промежуточное представление LLVM, там тоже хорошие оптимизаторы.
1
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
24.06.2022, 23:36
Цитата Сообщение от Замабувараев Посмотреть сообщение
Ну и ещё: имея на руках уже разобранное синтаксическое дерево исходного кода, его легко можно оптимизировать и выдать уже оптимальный и быстрый вариант.
Оптимальный и быстрый вариант - задача проектировщика ПО. Никакие трансляторы и тем паче ретрансляторы
не сделают ВСЁ быстро и круто, а где-то даже и наоброт запорят. Правильно спроектированная прога
написаннная даже средним программистом НЕ будет работать плохо, а скорее даже будет работать
в разы лучше плохо спроектирванной проги и какие бы там опции оптимизации не включались бы
- НЕ поможет.

Цитата Сообщение от Замабувараев Посмотреть сообщение
В этом ничего плохого нет
Разве что на диске надо держать несколько тысяч файлов компилятора и тратить в два, а то и три раза больше
времени на трансляцию.

Цитата Сообщение от Замабувараев Посмотреть сообщение
вы не сможете эти двоичные коды применить к другому процессору или ОС — и исходный код программы становится непереносимым.
Правильно написанная программа на ВУ языке всегда будет достатончо переносимой, чтобы это сделал
автор софта, при минимуме усилий, я свои проги на три тысячи строк за 2 часа портировал с пурика на FB,
99% - search\change и никакой магии.
А про средства "на все процессоры" - не надо. Во-первых это херня, в винде один пользователький подход,
в линуксе - другой, в андроиде - третий, на маке - четвёртый и т.п. Разные архитектурные особенности.
Можешь у Стаса спросить, недавно ковыряли консоли на три платформы, ой там сколько добра. А это всего
лишь ссаные консоли и всего лишь три платформы.

Цитата Сообщение от Замабувараев Посмотреть сообщение
От подхода «программа знает все машинные коды, переводит операторы языка сразу в машинные коды и сама строит исполняемый файл» давно отказались по известным причинам.
Опишу эти "известные" причины:
1) Глупость современных девелоперов (их неспособность написать софт качественнее предшественников)
Например кодогенератор того же VB был сделан прекрасно и Анатолий уже показывал нам как он оптимизирует.
2) Лень и нежелание развивать новые конкурентные разработки
3) Монополизация (слишком много работы, человекочасов и так или иначе денег вбухано в один конкретный
продукт, к которому стая решила "подвязаться") итог - стая не имеет независимости и её "трясёт" соразмерно
с тем как трясёт коренную технологию, а при переводе на эту технологию отлетае всё то, во что вкладывалась
работа десятков лет(это факт известный).

Добавлено через 7 минут
Цитата Сообщение от Замабувараев Посмотреть сообщение
А вот написать ком‐файл на бесике — нужно постараться.
Это на 100% бесполезная возьня в т.ч. с выпиливанием рантайма.
Ну сделали эту херню разрабы, что она сильно мешает? Ну 2 килобайта файл, не 250 байт
и чего? Дальше то код будет нормально укладываться. Я не вижу тут проблем, хеллоу ворлды мы не пишем
и сегмент нам - явно мало.

Добавлено через 7 минут
Цитата Сообщение от Замабувараев Посмотреть сообщение
В современном мире пришли к идее, чтобы исходный код программы оттранслировался не сразу в машинные инструкции
Пусть они уже придут к идее, чтобы всё основное было из коробки, включая их хвалёную оптимизацию
по размеру кода и скорости и чтобы код написаный сейчас работал спустя 10, 20, 30, 50 лет.
Чтобы людям не надо было перебирать пол сотни ключей компилятора.
Тогда это будет дело, а не тупость вида "создаём сейчас, чтобы создавать заново через 5 лет".
Пусть напишут IDE нормальную, достойную. И компилятор, который делает всё без преобразования ВУ в ВУ,
а по науке ВУ в НУ и НУ уже в машинные коды.
Все платформы на одном качественном уровне, всё равно не охватить, любая кроссплатформенность это
жертва по скорости выполнения СРАЗУ, большая жертва.
1
Эксперт по электронике
7216 / 3395 / 347
Регистрация: 28.10.2011
Сообщений: 13,359
Записей в блоге: 7
25.06.2022, 00:06
Цитата Сообщение от Замабувараев Посмотреть сообщение
Во‐вторых, на ассемблере каждый любой может делать ком‐файлы. А вот написать ком‐файл на бесике — нужно постараться.
Зачем писать приложения для DOS? В чем смысл?
На современной винде, линуксе, маке, андроиде и других платформах они не запускаются. Запускать в эмуляторе? Смысл?

Цитата Сообщение от Замабувараев Посмотреть сообщение
Если сравнивать размеры с екзешниками, то просто фантастика.
В исполняемых файлах PE формата присутствует определенная структура и секции выровнены по границе 512 байт. Только это значительно влияет на размер файла.

Цитата Сообщение от Замабувараев Посмотреть сообщение
А когда компилятор транслирует текст программы сразу в двоичные коды, вы не сможете эти двоичные коды применить к другому процессору или ОС — и исходный код программы становится непереносимым.
Одно с другим никак не связанно. Ничего не мешает транслировать исходный код в двоичные коды конкретной платформы. Тот же GCC вместе с as транслирует в машинный код (объектный файл) под конкретный проц. Но это никак не мешает кроссплатформенности на уровне исходника.

Цитата Сообщение от Замабувараев Посмотреть сообщение
По умолчанию таким промежуточным представлением программы для FreeBASIC является код на языке си.
Си это отдельный язык, а не специальный промежуточный для FB.
Например PB транслирует в асм (он платформозависимый), но это не мешает поддержки разных платформ и процев.

PS.
Очередная тема которую увели в оффтоп...
0
 Аватар для yevrowl
307 / 78 / 6
Регистрация: 27.04.2022
Сообщений: 243
25.06.2022, 10:47  [ТС]
В общем, есть возможность добраться до 3-й (т. н. недокументированной) палитры CGA в QBasic:

QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
SCREEN 1
OUT 984, 46
LET c = 0
FOR y = 0 TO 200 STEP 100
    FOR x = 0 TO 310 STEP 160
        LINE (x, y)-(x + 160, y + 100), c, BF
        LET c = c + 1
    NEXT x
NEXT y
Работает в DOSBox с эмуляцией видеорежима CGA.
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
25.06.2022, 14:29
Цитата Сообщение от locm Посмотреть сообщение
Зачем писать приложения для DOS? В чем смысл?
Смысл ограниченный, но он есть. Например тренироваться писать под 1 ядро. На мой взгляд не бесполезный скил,
заставляет работать на оптимизацию, плюс не везде можно параллелить.
Но конечно и под многопоток надо писать. В разных ситуациях применять разную синхронизацию.

Цитата Сообщение от locm Посмотреть сообщение
Например PB транслирует в асм (он платформозависимый), но это не мешает поддержки разных платформ и процев.
По сути для поддержки придётся добавить(переписать имеющееся) всё то же самое под другой асм(если сторонний).
Рутинная работа, но делается 1 раз и всё - поддержка есть. Для этого надо как бы знать целевой асм и знать так нехило.
От этого и зависит качество генерируемого по итогу кода.

Добавлено через 1 минуту
Цитата Сообщение от yevrowl Посмотреть сообщение
Работает в DOSBox с эмуляцией видеорежима CGA.
Любое манипулирование с CGA и EGA, НУЖНО(!) проверять и на железе. Уже писал что может быть ахтунг.

Добавлено через 15 минут
Цитата Сообщение от locm Посмотреть сообщение
Си это отдельный язык, а не специальный промежуточный для FB.
Ну да. Это такое же ВУ. Более того что-то я не заметил, чтобы мне дали выбор.
Pro_grammer тогда ещё сказал, все помнят, мол тебе дадут возможность оптимизировать без проблем,
т.е. компилируй разрабатывай быстро, а потом по финалу прогоняй через оптимизщирующий.
Что на деле: на деле выбора не дали, это раз(сишная ретрансляция там уже встроена).
А если будешь разрабатывать на старой версии допустим 1.0 - то потом лови тысячи не варнингов,
а уже эрроров и переписывай половину своего кода.
Вопрос ЗАЧЕМ нужно было долго долго разрабатывать идти до версии 1.0 которая типа 1.0, т.е.
законченная. Чтобы потом всех нае...ть? Зачем? Это интересная политика партии.
И сколько кода отвалится на PB, когда его переведут на тоже самое.

Добавлено через 56 минут
Кстати из всего этого читатели уже сами могут сделать вывод: мол на кой хрен внедрять столько языковых средств,
что их становится уже невозможно поддерживать и код начинает отваливаться.
1
Эксперт по электронике
7216 / 3395 / 347
Регистрация: 28.10.2011
Сообщений: 13,359
Записей в блоге: 7
25.06.2022, 15:03
Цитата Сообщение от Quiet Snow Посмотреть сообщение
Например тренироваться писать под 1 ядро.
Для этого вовсе не обязательно писать под DOS. Однопоточное приложение использует только одно ядро.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
По сути для поддержки придётся добавить(переписать имеющееся) всё то же самое под другой асм(если сторонний).
Это проблема разработчика компилятора, а не программиста, использующего ЯВУ.
В любом случае ЯВУ транслируется в машинный код.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
И сколько кода отвалится на PB, когда его переведут на тоже самое.
Уже перевели на Си (версия 6.00).
Отвалился в основном код с асм вставками. Трансляция в асм по прежнему есть (кроме ARM).
1
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
25.06.2022, 15:15
Цитата Сообщение от locm Посмотреть сообщение
Отвалился в основном код с асм вставками.
Один ассемблер привести к виду другого ассемблера думаю не проблема, команды то те же по сути.
А говно с константами не вылезает? Меня например на FB задрала уже константа d3dcolor чё-то там.
Вообще бенефиты какие-то есть от этого?
1
Эксперт по электронике
7216 / 3395 / 347
Регистрация: 28.10.2011
Сообщений: 13,359
Записей в блоге: 7
25.06.2022, 15:39
Цитата Сообщение от Quiet Snow Посмотреть сообщение
Один ассемблер привести к виду другого ассемблера думаю не проблема, команды то те же по сути.
Нужно асм в синтаксисе фасма привести к формату GCC. Синтаксис отличается.
А при трансляции из Intel в ARM, все еще сложнее. Проще асм вставку на PB переписать.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
А говно с константами не вылезает?
Нет.
Это же просто константы что с ними может быть не так? Они в Си не транслируются в виде констант, а подставляются значения в код.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
Вообще бенефиты какие-то есть от этого?
Появилась поддержка ARM. На данный момент малина (вероятно и другие микрокомпы на ARM, но нужно проверять) и Mac M1. В дальнейшем может еще что-то добавят.
Скорость работы приложений повысилась из-за лучшей оптимизации GCC, но время компиляции сильно увеличилось (из-за GCC, а PB).
1
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
25.06.2022, 16:38
Цитата Сообщение от locm Посмотреть сообщение
Нет.
Это же просто константы что с ними может быть не так?
В PB заголовки заизолированы от пользователя, WinAPI всмысле, в FB же это автоматически портированные с си заголовки,
туда если заглянуть можно сильно посмеяться. И вот шли годы, туда то добавят константу, то выпилят.
Часть констант я просто прописывал в исходнике без всяких IFNDEF (потом уже про него узнал).
Было всякое, то просто константы не было, то она была и выходит что если её нет то undefined ошибка(когда она в коде),
если есть, то duplicate ошибка, в куче разных исходников всё по разному, потому что менял версии компилятора.
И это не одна константа, их полно таких.

А что может быть не так. Так тоже известно, в принципе даже с заизолированными может быть говно,
в PB допустим есть одна константа, а в хедере том что MinGw(или что там) её нет. FB насколько я понял просто
транслирует имена оттуда сюда, т.е. из FB в си. Всплывёт не там, так тут. В PB что как-то по другому?
Там же фигова туча кода за 10 лет не перелопатить.
1
Эксперт по электронике
7216 / 3395 / 347
Регистрация: 28.10.2011
Сообщений: 13,359
Записей в блоге: 7
25.06.2022, 17:01
Цитата Сообщение от Quiet Snow Посмотреть сообщение
а в хедере том что MinGw(или что там) её нет.
PB не использует заголовочные файлы из Си. Этот код
PureBasic
1
2
#Const = 1234
x = #Const
транслируется в
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
// 
// PureBasic 6.00 LTS - C Backend (Windows - x86) generated code
// 
// (c) 2022 Fantaisie Software
// 
// The header must remain intact for Re-Assembly
// 
// :System
// 
#pragma warning(disable: 4024)
// 
typedef long long quad;
typedef int integer;
#define PB_INFINITY (1.0 / 0.0)
#define PB_NEG_INFINITY (-1.0 / 0.0)
typedef struct pb_array { void *a; } pb_array;
typedef struct pb_array2 { void *a; integer b[2]; } pb_array2;
typedef struct pb_array3 { void *a; integer b[3]; } pb_array3;
typedef struct pb_array4 { void *a; integer b[4]; } pb_array4;
typedef struct pb_array5 { void *a; integer b[5]; } pb_array5;
typedef struct pb_array6 { void *a; integer b[6]; } pb_array6;
typedef struct pb_array7 { void *a; integer b[7]; } pb_array7;
typedef struct pb_array8 { void *a; integer b[8]; } pb_array8;
typedef struct pb_array9 { void *a; integer b[9]; } pb_array9;
typedef struct pb_listitem { void *a; void *b; void *c;} pb_listitem;
typedef struct pb_list { void *a; pb_listitem *b; } pb_list;
typedef struct pb_mapitem { void *a; void *b; void *c;} pb_mapitem;
typedef struct pb_pbmap { pb_mapitem *a; } pb_pbmap;
typedef struct pb_map { pb_pbmap *a; } pb_map;
static integer s_s[]={0, -1};
#define M_SYSFUNCTION(a) a __stdcall
#define M_PBFUNCTION(a) a __stdcall
typedef struct pb_variant { int a; int b; int c; int d; } pb_variant;
#define M_CDECL
typedef void TCHAR;
static integer SYS_BankerRound    (double i) { return i >= 0 ? i+0.5 : i-0.5; }
static quad    SYS_BankerRoundQuad(double i) { return i >= 0 ? i+0.5 : i-0.5; }
integer __stdcall f_exitprocess_(integer) asm("_ExitProcess@4");
integer __stdcall f_heapcreate_(integer,integer,integer) asm("_HeapCreate@12");
integer __stdcall f_heapdestroy_(integer) asm("_HeapDestroy@4");
integer __stdcall f_getmodulehandle_(integer) asm("_GetModuleHandleW@4");
// 
static char *tls;
int PB_ExitCode=0;
integer PB_MemoryBase=0;
integer PB_Instance=0;
unsigned char *pb_datapointer;
// 
// 
// 
// 
void SYS_Quit();
M_SYSFUNCTION(void) SYS_InitPureBasic();
int PB_DEBUGGER_LineNumber=-1;
int PB_DEBUGGER_IncludedFiles=0;
char *PB_DEBUGGER_FileName=0;
// 
 
static integer ms_s[]={0,-1};
volatile integer v_x=0;
// 
// 
// 
char PB_OpenGLSubsystem=1;
int PB_Compiler_Unicode=1;
int PB_Compiler_Thread=0;
int PB_Compiler_Purifier=0;
int PB_Compiler_Debugger=0;
int PB_Compiler_DPIAware=0;
int PB_Compiler_XPSkins=1;
int PB_ExecutableType=0;
// 
void PB_EndFunctions() {
}
// 
int __stdcall WinMain(void *instance, void *prevInstance, void *cmdLine, int cmdShow) {
PB_Instance = f_getmodulehandle_(0);
PB_MemoryBase = f_heapcreate_(0,4096,0);
// #Const = 1234;
// x = #Const
v_x=1234;
SYS_Quit();
}
 
void SYS_Quit() {
PB_EndFunctions();
f_heapdestroy_(PB_MemoryBase);
f_exitprocess_(PB_ExitCode);
}
Никаких #Include нет. GCC используется только для создания объектного файла, т. е. как замена fasm.
1
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
25.06.2022, 19:16
Цитата Сообщение от locm Посмотреть сообщение
транслируется в
Вот это портянка!
Но ладно там декларации, на исполнение не виляют. Но тут вижу проблему: функция ExitProcess на самом деле не возвращает значений. То есть это Sub, и в си‐коде должна объявляться с типом void, а не integer.
Во‐вторых, зачем загружать винапи функции динамически? Почему не засунуть их в таблицу импорта?

Аналогичный код на фрибесике:
PureBasic
1
2
Const ConstName = 1234
Dim x As Integer = ConstName
Скромный промежуточный си‐код:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
typedef   signed char       int8;
typedef unsigned char      uint8;
typedef   signed short      int16;
typedef unsigned short     uint16;
typedef   signed int        int32;
typedef unsigned int       uint32;
typedef   signed long long  int64;
typedef unsigned long long uint64;
typedef struct { char *data; int64 len; int64 size; } FBSTRING;
typedef int8 boolean;
static void fb_ctor__HelloWorld( void ) __attribute__(( constructor ));
 
__attribute__(( constructor )) static void fb_ctor__HelloWorld( void )
{
    label$0:;
    int64 X$0;
    X$0 = 1234ll;
    label$1:;
}
1
Эксперт по электронике
7216 / 3395 / 347
Регистрация: 28.10.2011
Сообщений: 13,359
Записей в блоге: 7
25.06.2022, 20:11
Цитата Сообщение от Замабувараев Посмотреть сообщение
функция ExitProcess на самом деле не возвращает значений
На что это влияет?
По сути ни на что.

Цитата Сообщение от Замабувараев Посмотреть сообщение
зачем загружать винапи функции динамически?
Они статически линкуются.
Цитата Сообщение от Замабувараев Посмотреть сообщение
C
1
2
static void fb_ctor__HelloWorld( void ) __attribute__(( constructor ));
__attribute__(( constructor )) static void fb_ctor__HelloWorld( void )
Серьезно точка входа называется fb_ctor__HelloWorld? Кто из разработчиков FB это придумал?
Цитата Сообщение от Замабувараев Посмотреть сообщение
l
C
1
2
3
4
    label$0:;
    int64 X$0;
    X$0 = 1234ll;
    label$1:;
Зачем метки?
В PB все скромнее
C
1
v_x=1234;
1
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
25.06.2022, 20:44
Цитата Сообщение от locm Посмотреть сообщение
В PB все скромнее
При этом:
добавляет какие‐то лишние вызовы по созданию кучи. Почему бы не использовать кучу процесса по умолчанию? Зачем нужна вторая куча?
Зачем‐то вызывает f_getmodulehandle_ когда в параметре функции он уже есть в виде void *instance. Двойная работа.
1
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
26.06.2022, 09:26
Цитата Сообщение от locm Посмотреть сообщение
Серьезно точка входа называется fb_ctor__HelloWorld?
Функция main занята инициализацией рантайма, а это конструктор модуля.

Добавлено через 51 минуту
Цитата Сообщение от locm Посмотреть сообщение
Серьезно точка входа называется fb_ctor__HelloWorld?
Я неправильно компилирую, надо было: «fbc64.exe -R HelloWorld.bas». Промежуточный си‐файл такой:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
typedef   signed char       int8;
typedef unsigned char      uint8;
typedef   signed short      int16;
typedef unsigned short     uint16;
typedef   signed int        int32;
typedef unsigned int       uint32;
typedef   signed long long  int64;
typedef unsigned long long uint64;
typedef struct { char *data; int64 len; int64 size; } FBSTRING;
typedef int8 boolean;
void fb_Init( int32, uint8**, int32 );
void fb_End( int32 );
 
int32 main( int32 __FB_ARGC__$0, char** __FB_ARGV__$0 )
{
    int32 fb$result$0;
    __builtin_memset( &fb$result$0, 0, 4ll );
    fb_Init( __FB_ARGC__$0, (uint8**)__FB_ARGV__$0, 0 );
    label$0:;
    int64 X$0;
    X$0 = 1234ll;
    label$1:;
    fb_End( 0 );
    return fb$result$0;
}
1
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
26.06.2022, 16:38
Цитата Сообщение от Замабувараев Посмотреть сообщение
Промежуточный си‐файл такой:
Для посетителей этого раздела эта информация ничего не несёт, ты предлагаешь потратить
10 лет на изучение си чтобы разобраться в этих закорючках? Да нахер надо!

Более того это и самим сишникам бесполезно. Потому что они лучше на си напишут, аккуратно, чем будут рыть эти
кодогенераторы.

Добавлено через 11 минут
Вам, коллеги, вообще не кажется что вас нехило так обманывают, буквально недавно авторы софта,
например VirtualDub-а жаловались, что си генерирует говно и pb хвалились скоростью равной си компиляторам,
мол якобы это эталон, а буквально за несколько лет тут уже типа "прорыв и не догнать" и все полезли
в ретрансляцию? Хотя софт если сравнить старый софт, и новый, старый раскатет новьё просто в хлам.
И винду компилируют же на новом всём. Почему она работает как говно?
Поставьте на кор дуо десятку и XP? Разницу ощущаете?
Если компиляторы сделали рывок всё должно работать быстрее, а не медленнее? Не так ли? Почему картина
прямо обратная. Неужели нет осознания где надлом?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.06.2022, 16:38

Вывести изображение из массива 320×200 прямой записью в видеопамять видеорежима 4 (CGA)
Добрый день. Прошу помощи. Нужно вывести массив 320х200 в видеопамять в CGA адаптер. Есть пример кода где выводится этот массив в...

Смена ориентации страниц и смена колонтитулов при печати JavaScript
Можно ли с помощью JavaScript задать при печати ориентацию страницы и поменять колонтитулы?

Смена лицензии Битрикс, смена владельца сайта
Всем привет! Вопрос не тривиальный, но, возможно, кто-нибудь сталкивался. Ситуация такова, что когда-то сайт создавался силами...

Смена дизайна-смена позиций?
Влияет ли смена дизайна на позиции сайта?И существуют ли способы как-то его уменьшить. Есть сайт старичок,который много лет в ТОП-5 по...

Плавная смена цвета при наведении + смена цвета в зависимости от свойства Checked
Привет, хочу сделать чтобы когда IsChecked = false то при наведении кнопка плавно меняла цвет на Gray при увидении на Black, когда кнопка...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи. . . .
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru