Может есть хороший форум на русском?

Everything you can't fit into other forums
user123
Posts: 11
Joined: Wed Jul 13, 2022 10:51 am

Re: Может есть хороший форум на русском?

Post by user123 »

. Спасибо, изучаю.
. По FASM (1.73.30) вопрос, наверное детский: не смог создать "16 bit COFF" с главной функцией программы. Как я понял, в "COFF" нет "segment", есть "section", а ключевое слово "entry" требует записи стартового адреса в виде "segmentName:labelName". В Интернете и во встроенном руководстве (FASM.TXT, examples) не нашёл... Подскажите, может кто знает?
. Я пытаюсь придерживаться древнего способа: компилирование, связывание (линковка) из "obj" и "lib".
. Нерабочий код (entry lStart - illegal instruction):

Code: Select all

use16

format COFF

entry lStart

section "" code
  org 0

  vComHeader rb 256
lStart:
  MOV  AX, 0x4C00
  INT   0x21
а затем отображается на виртуальный LFB_BASE = 0xFE000000 , который доступен для записи в том числе и
в ring3 - пользовательском режиме (лично мне такая беспечность непонятна : нормальный пользователь при "невменяемом" экране решить проблему может только кнопкой RESET)
. В "Debian Linux 6.0.10" я настраивал пользовательскую программу на ввод-вывод в хранилище кадра (frame buffer). И рисовал без "monsters graphic server" в 16 бит цвете (R5G6B5) окна (для управления промышленной установкой достаточно), картинки, слова. Вся программа заняла где-то 200 киБ код и 2 МеБ картинки без сжатия. Даже написал прозрачность путём нахождения среднего цвета. Так что нормальный подход, а если на экране мусор - нужно останавливать все программы например по "Alt+Ctrl+Ins", вызывать "task manager" и завершать ненормальную задачу. ... Лёгкое, быстрое ПО никто не оценил - работает, да и ладно, на "QT" была б та же реакция...
. Ещё мне кажется, что видеоплаты даже вида "S3 trio" умеют аппаратно очищать память без копирования 0 в каждую ячейку, закрашивать замкнутые обрасти заданным цветом, размещать окно заданного размера по заданным координатам с изображением из другой области видеоОЗУ и тому подобное. В моём проекте всем этим занимался "CPU".
Doczom
Posts: 116
Joined: Tue Nov 03, 2020 5:47 pm

Re: Может есть хороший форум на русском?

Post by Doczom »

Valery wrote: Sat Jul 30, 2022 11:52 am Насколько понимаю , физический адрес получается от BIOS (с некоторой настройкой)
, возможно его изменяет специализированный драйвер видео карты (таковые имеются ...)
а затем отображается на виртуальный LFB_BASE = 0xFE000000 , который доступен для записи в том числе и
в ring3 - пользовательском режиме (лично мне такая беспечность непонятна : нормальный пользователь при "невменяемом" экране решить проблему может только кнопкой RESET)
вот только этот адрес без селектора gs не доступен для пользовательских программ и любое обращение к нему без селектора приведёт к исключению, которое завершит прогу. А по поводу безопасности не думаю что это вообще есть в Колибри
Siemargl
Posts: 444
Joined: Tue Mar 08, 2016 11:00 pm

Re: Может есть хороший форум на русском?

Post by Siemargl »

Pathoswithin wrote: Wed Jul 20, 2022 3:44 pm Проще сказать, что на системном уровне память всегда выделяется страницами по 4 кб, и все ОС её так выдают. Более мелкая нарезка происходит на пользовательском уровне; а в библиотеке или в самом приложении — это уже не принципиально. Может даже лучше чтоб программист понимал, что при не правильном обращении к памяти в пределах 4 кб системной ошибки не будет.
Вообще то в ядре есть мелкоблочный аллокатор (забыл уже в каком файле), но наружу в АПИ не выведен.
Doczom
Posts: 116
Joined: Tue Nov 03, 2020 5:47 pm

Re: Может есть хороший форум на русском?

Post by Doczom »

этот аллокатор предназначен только для ядра и его структур, применение для программ почти невозможно, без некоторых доработок
user123
Posts: 11
Joined: Wed Jul 13, 2022 10:51 am

Re: Может есть хороший форум на русском?

Post by user123 »

Вы собираетесь разрабатывать что-то новое для 8086, 80386 real mode. 80386 protected mode .
А вас в стране наверное налажено производство аналогов этих процессоров по цене чуть большей avr для Arduino ...
. Я с ужасом думаю что случится когда мой "Penium-P54C" с "Windows 95" однажды не включится. Или высохнут конденсаторы, или p-n переход в микросборках состарится, или ещё чего. "Добра" типа "core i5,i7" на работе и у знакомых хватает, по мне только для игр пригодно. Этим системам пользователь вообще не нужен, ОС и аппаратура сами найдут чем заняться. Считаю "Pentium-pro" и последующие - ошибка, которую intel никогда не признает.
. AVR интересно, но именно "AVR processor", не контроллер, не встречал. И одного выполнителя мало. Нужен набор плат, микросборок, видеоЦАП с ОЗУ и тому подобное. Одному не справиться даже с написанием ПО.
Valery
Posts: 36
Joined: Tue Jul 19, 2022 11:41 am
Been thanked: 2 times

Re: Может есть хороший форум на русском?

Post by Valery »

Этим системам пользователь вообще не нужен, ОС и аппаратура сами найдут чем заняться.
По моему это проблема опреационной системы, а не "чипсета".
Я как раз пользуюсь Core-i3 прямо сейчас из GNU/Linux Debian , через пару часов (только проверю выполненные задания)
переключусь на том же компьютере в Windows XP и буде работать на секвенсоре ...
Да - память ест немеряно (600 MB GNU/Linux Debian stable, 200 MB MS Windows XP SP3), но работать можно
с моими 4 GB оперативной памяти. И я не представляю, как я бы записывал видео для конкурса
комбинируя звук профессинального диктофона и картинку Logitech Brio в реальном времени
(ибо обработка видео зарпещена) без Dell Latitude (а это Intel Core - i5)
Windows 10 (а я думаю 11 ещё хуже - без Била Гейтса компания совсем "с цепи сорвалась") конечно
совсем свихнутая OS . но если не давать её интернет от слова совсем, то можно стерпеть и её.
именно "AVR processor", не контроллер, не встречал.
А вот с этого места можно поподробнее ...
Вам не нравится, что создаются System on chip? Или у Вас в стране нельзя купить avr чип отдельно от чипсета (Arduino. например)?
Но у меня возникло подозрение, что мы по-разному понимаем слова "controller" (контроллер) и "processor" (процессор) ...

Для чего-то подобного Kolibri OS более адекватны будут чипсеты Raspberry Pi, но , что с HDMI имеют возможности Pentium 3, что чуть избылочно для Kolibri OS.
Чипсеты вроде Arduino (даже с полноценным mips32 процессором - вроде мне такой даже удалось приобрести), имеют до 1 Мб оперативной памяти и Гарвардскую архитектуру, что маловато для 250 потоков и GUI в духе Kolibri OS (нужно минимум 3 - 6 Мб, тогда можно задуматься о системе с минимальным разрешением экрана 640x480x16).
Last edited by Valery on Fri Aug 05, 2022 11:45 pm, edited 2 times in total.
User avatar
Pathoswithin
Mentor/Kernel Developer
Posts: 1295
Joined: Thu Mar 26, 2015 5:16 pm

Re: Может есть хороший форум на русском?

Post by Pathoswithin »

Это не Debian 600 MB ест, а графическая среда. У меня вот LXDE ест те же 200. По удалял все пакеты что пишут логи и система после загрузки не делает абсолютно ничего.
KPG
Posts: 43
Joined: Tue Dec 08, 2020 10:26 pm

Re: Может есть хороший форум на русском?

Post by KPG »

user123 wrote: Thu Aug 04, 2022 9:08 am . Спасибо, изучаю.
. По FASM (1.73.30
Forth (SPF4 для KolibriOS на Fasm)
Консольный тетрис в Колибри и Forth (проба Форта на Колибри)

Есть и такой топик FFire Demo Эффект огня

P.S.
Pathoswithin wrote: Fri Aug 05, 2022 6:06 pm Это не Debian 600 MB ест, а графическая среда. У меня вот LXDE ест те же 200. По удалял все пакеты что пишут логи и система после загрузки не делает абсолютно ничего.
Сам, в настоящий момент, использую Puppy Linux LiveCD в разных сборках (загружаю через Grub с внешнего USB-SSD) и думаю, что KolibriOS могла бы как то сближаться с идеей таких дисрибутивов.
Не нравится только тенденция, что софт для Linux, зачастую, собирается только для 64-х бит и может иметь какие то проблемы в рамках запуска 32-х бит после его сборки.

Из последних опробованных Puppy для Linux 64 Puppy_linux_jammypup64 (для запуска Бейсик среды MaxIDE NG с некоторым добавлением необходимых библиотек зависимости)
а, для Linux Puppy 32 в основе использую Xenial, но бывает и Tahr, хотя под тем же Bionic Pup бывает устанавливается софт из репозитория уже не доступный в этих сборках.Радует, что софт и из ScPup тоже запускается под ними. (к, примеру сборка Wine 7.4) Под Tahr pupy её штатным devx с небольшими правками процесса сборки получилось собрать в качестве пробы Wine 6.02, SeaMonkey (какой то версии) в рамках LiveCD с штатным Ram диском ~3.9Гб в системе при старте системы.
user123
Posts: 11
Joined: Wed Jul 13, 2022 10:51 am

Re: Может есть хороший форум на русском?

Post by user123 »

По моему это проблема опреационной системы, а не "чипсета".
. "Wintel" означает тесную связь: одни создают громоздкое ПО, вторые - микросборки того же уровня. И у тех и у тех сотни ошибок в изделиях. В "P55C" вроде была одна ошибка: 0xF00F... "LOCK XCHG ...". Про "Pentium-3 coppermine" ходили слухи, что редкое ПО изредка вылетало. Мне кажется главная цель "wintel" - отнюдь не качество. Из intel несколько раз уходили ведущие разработчики, недовольные внутренней политикой.
. "Pentium-2" 450 МГц на шине 100 МГц на пределе успевает сжимать на лету "704x576 MJPEG" 5 МБ/с. Причём когда сложность кадра падает и поток падает до 1 МБ/с нагрузка снижается до 33% . Что говорит о быстром выполнении матричного умножения при операциях дискретного косинус-преобразования 8x8 и квантования полученных чисел. Скорее всего узким местом становится шина до ОЗУ. При воспроизведении "DVD MPEG2" бесплатным "Media Player Classic" быстродействия не хватает, но с коммерческими проигрывателями (видимо лучше заточенными под MMX) всё нормально. "FullHD compressed by H.264" понятно недоступно (но если поставить плату расширения...).
Вам не нравится, что создаются System on chip?
. Я за научно-"techprogress". Если на одной микросборке можно разместить "CPU", "memory RAM, ROM, reprogrammableROM, videoDAC+framebuffer, audio DAC/ADC" я конечно же за. Но себе бы предпочёл "module computer" чтобы можно было подключать разные платы расширения, в том числе "ISA sound card".
. Можно купить готовую "system" на основе "Arduino/ARM/MIPS" подключить к ней клавиатуру и "display" и писать что-то хотя-бы на "assembler" забыв про обычный "PC"?
Но у меня возникло подозрение, что мы по-разному понимаем слова "controller" (контроллер) и "processor" (процессор) ...
. Контроллер не имеет средств "virtualization" памяти - программа пишется с абсолютной адресацией. Даже 8086 позволяет обращаться по относительным адресам. Может есть и "processor" с архитектурой "ARM" с защищённым режимом, я просто не знаю.
. Я против империализма. Когда создаётся стопковый совыполнитель 8087, а потом в "pentium-2" делаются попытки на лету распараллелить код. Например считаем функцию: "f() = a+0.5*v/m":

FLD [a]
FLD [@const0p5]
FMUL [v]
FDIV [m]
FADD
; ST(0) = f()

А теперь преобразовываем каждую команду в микрокоманды, вводим преобразования СОЗУ (ST(0) -> R00 , ...), изменяем порядок микрокоманд...
. ...Когда вводится стыковка ATA ("16 heads, 65536 cylinders, 255 sectors, summary ~130 GiB" - могу немного ошибаться), а "BIOS" при расчётах оперирует "256 heads, 1024 cylinders, 63 sectors" и виснет при подключении 40 ГиБ жёсткого диска (некоторые не виснут, но сообщают "500 MB HD found"). Однако если выставить что диска нет, загрузиться с другого, то через гавани (pots) контроллера можно спокойно работать с первым даже без поддержки "LBA" и ""DMA".
. ...Когда в "BIOS" можно запрограммировать вредоносное ПО и повесить его на "SMM ring-2".
. ...Когда выходит печка "Pentium-4", проигрывающая на равной тактовой частоте предыдущим и выигрывающая за счёт более быстрой шины и "SSE2" .
. ...Когда через день непрерывной работы в "Windows 10" отказывает часть функций "WinAPI" до перезагрузки и не ясно, то ли "CPU" выполнил недопустимую операцию, то ли ПО.
Last edited by user123 on Wed Aug 10, 2022 5:33 am, edited 9 times in total.
user123
Posts: 11
Joined: Wed Jul 13, 2022 10:51 am

Re: Может есть хороший форум на русском?

Post by user123 »

. "DOS EXE" заготовка, код рабочий:

Code: Select all

.8086

gData group _sDataInit, _sDataNoInit ; область данных - объединение из
                                     ; 2 бутафорских областей

_sCode segment para public ; настоящая область
  assume CS:_sCode
fMain:
  PUSH DS
  MOV  AX, gData ; вот с этим вопрос: областной адрес-то до загрузки
                 ; неизвестен, что в "AX"-то писать при компиляции...

  ; В файле "COFF OBJ" пишется "MOV  AX, 0", в файле "DOS EXE" - "MOV  AX, 2",
  ; после загрузки в ОЗУ - новое значение.

  MOV  DS, AX
  assume DS:gData
  POP  AX
  MOV  [vPspSegmAddr], AX ; здесь сборщик догадывается, что адрес нужно
                          ; посчитать относительно объединения "gData"

  MOV  AH, 009h
  MOV  DX, offset gData:vMess ; а вот оператор "offset" без переопределения
                              ; всегда возвращает адрес относительно начала
                              ; той бутафорской области, где
                              ; переменная определена
  INT  021h

  ; Переменной "vMess" хоть "offset vMess", хоть как выше - всё равно 0 , а вот
  ; "vPspSegmAddr" - нет. Поэтому лучше всегда указывать подробности.

  MOV  AX, 04C00h
  INT  021h
ends

_sDataInit segment para public ; бутафорская область
  vMess db "Hello, world!$"
ends

_sDataNoInit segment word public ; бутафорская область
  vPspSegmAddr dw ?
ends

_sStack segment para public stack ; настоящая область
  ; Если не объявить эту область, связыватель выдаст
  ; справедливое предупреждение.

  db 8192 dup (?)
ends

end fMain
. Скомпилированный файл:

Code: Select all


                    Файл на накопителе

    Все числа в 16-ричном виде.
    Адрес 0 - заголовок "DOS EXE":

----------------
 Адр.   Содерж.
----------------
 0000   4D5A
 0002   2E00
 0004   0200
 0006   0100
 0008   2000
 000A   0102
 000C   FFFF
 ...
 01FC   0000
 01FE   0000
----------------

    Адрес 200 - код:

------------------------------------------------------------------------------
 Адр.   Содерж.
------------------------------------------------------------------------------
 0200   1E       PUSH DS
 0201   B80200   MOV  AX, 0002 ; областой адрес-то бутафорский... очевидно
                               ; загрузчик правит код в загруженной из
                               ; файла ОЗУ
 0204   8ED8     MOV  DS, AX
 0206   58       POP  AX
 0207   A30E00   MOV  [000E], AX
 020A   B409     MOV  AH, 09
 020C   BA0000   MOV  DX, 0000
 020F   CD21     INT  21
 0211   B8004C   MOV  AX, 4C00
 0214   CD21     INT  21
 0216   0000     ; нули для выравнивания данных на 16 Б
 0218   0000
 ...
------------------------------------------------------------------------------

    В файле выравнивание можно было и не делать, но тогда в нём пришлость бы
искать области и загружать каждую по выровненному адресу. А так можно загрузить
как непрерывные данные с адреса 200 (десятич. 512) .
    Адрес 220 - данные:

--------------------
 Адр.   Содерж.
--------------------
 0220   4865     He
 0222   6C6C     ll
 0224   6F2C     o,
 0226   2077      w
 0228   6F72     or
 022A   6C64     ld
 022C   2124     !$
--------------------

    Конец файла, размер: 22E (все числа в 16-ричном виде, десят.: 558) Б из
которых 200 (по десят. 512) Б - заголовок.


                    Загруженный в ОЗУ файл

    Все числа в 16-ричном виде.
    Начальное содержимое СОЗУ:

CS=1560   IP=0000
DS=1550
SS=1563   SP=2000

    Начальное содержимое ОЗУ в области "CS":
------------------------------------------------------------------------------
 Адр.   Содерж.
------------------------------------------------------------------------------
 0000   1E       PUSH DS
 0001   B86215   MOV  AX, 1562 ; областной адрес поправлен загрузчиком
 0004   8ED8     MOV  DS, AX
 0006   58       POP  AX
 0007   A30E00   MOV  [000E], AX
 000A   B409     MOV  AH, 09
 000C   BA0000   MOV  DX, 0000
 000F   CD21     INT  21
 0011   B8004C   MOV  AX, 4C00
 0014   CD21     INT  21
 0016   0000     ; выравнивающие нули, если сюда по ошибке попадёт управление,
 0018   0000     ; то выполнитель исполнит "ADD [BX+SI], AL"
 ...
 0020   4865     He ; переменная vMess
 0022   6C6C     ll
 0024   6F2C     o,
 0026   2077      w
 0028   6F72     or
 002A   6C64     ld
 002C   2124     !$
 002E   XXXX     ; место под неинициализированную переменную "vPspSegmAddr"

 0030   XXXX     ; неинициализированная область стопки
 0032   XXXX
 ...
 202E   XXXX
------------------------------------------------------------------------------
user123
Posts: 11
Joined: Wed Jul 13, 2022 10:51 am

Re: Может есть хороший форум на русском?

Post by user123 »

. Создал первое "Windows 32" приложение с главной функцией на "assembler" , до этого писал на нём только второстепенные 32 б функции, вызываемые из С. Оказывается помимо "stack" есть ещё" heap" минимум 65 киБ каждый. Если не указывать явно или запросить 32 киБ - связыватель создаёт обычные 1 МеБ под "stack" и "heap". Куча вероятно для динамически создаваемых переменных. Пока не знаю, можно ли от неё отказаться.
. По мне на сборщике писать утомительно. А под "Си" нет компилятора, предоставляющего полную свободу действий. Из всех "С" мне больше понравился "GCC", который выдаёт предупреждения на неиспользуемые местные переменные не только в стопке, но и в области данных, предупреждения на затенение местных переменных, двойное объявление заголовков функций и так далее. Но вот данных вида "char" у "CPU" не бывает и "asm" вставки слишком заумные...

Code: Select all

static unsigned int vA;
unsigned int vB;

unsigned int _fMain_factorial(unsigned int v_value)
{
  if(v_value > 1)
  {
    return v_value*_fMain_factorial(v_value-1);
  }
  return 1;
}
Warning: "vA" is unused variable.
. "vB" - общая переменная в области данных, которая может быть использована в других файлах.
. Помечтаю немного:

Code: Select all

public unsigned byte vAlingm;
unsigned int vA;
public unsigned int vB;

public unsigned int _fMain_factorial(unsigned int v_value)
{
 ...
Warning: "vA" first misallingment.
Warning: "vA" is unused wariable.
Post Reply

Who is online

Users browsing this forum: Ahrefs [Bot] and 0 guests