PDA

Просмотр полной версии : Техраздел UZIX



Error404
26.12.2014, 17:06
Здесь буду вести бложек по портированию UZIX (реализация UNIX близкая к клаcсической V7) - всякие промежуточные итоги и мысли фиксировать.

Инструментарий.

Для компиляции используется единственный по сею пору нормальный компилятор C для Z80 - HitеchC v3.09 (http://hi-tech.msx.click/en/index.php?title=Main_Page) образца 1987года: нативный CP/M компилятор, при желании всю сборку можно провести на самом Орионе. :).

В дополнение к нему чтобы комфортно разрабатывать под РС использую:

файловый эмулятор CP/M (http://zx-pk.ru/showpost.php?p=751217&postcount=5) под винду cpm.exe - он умеет возвращать винде код завершения HitechC, что нужно для make.
GNU make (http://lmgtfy.com/?q=GNU+make)для автоматизации (пакетной) сборки проекта. Или аналог.
ProgrammersNotepad (http://www.pnotepad.org/download/), где в проекте UZIX.pnproj (фактически - структурированном списке файлов) описал используемые файлы. На кнопку F8 можно настроить сборку по make (Tools->Options->Tools->Scheme C/C++ -> Add). Но чаще после внесения всех правок в PN, я просто запускаю make под cmd.
Для компиляции драйвера IDE/SD и эмулятора CP/M использую пакет макроассемблера M80/L80 от Микрософт, тоже 80-х годов прошлого столетия - поныне лучший макроассемблер для Z80/8080.


Комплект компилятора в сборе (без ProgrammersNotepad):
Размер: 3.24 Мб
Ссылка для скачивания: https://github.com/serge-404/HI-TECH-C-V3.09

На каталог куда вы распакуете файлы компилятора должны быть настроены переменные окружения PATH и CPMPATH

Концепция.
Ядро UZIX - это обычная CP/M-задача, которая будет "крутить" UNIX-процессы в расширенном ОЗУ. Архитектура будет такая:


CP/M 64k bank Subsequent 64k banks
FFFF +------------+ +------------+
Common | Common | | Common |+
F000 +------------+ +------------+|+
| CP/M | | |+|+
+------------+ | Process ||+|
Banked | Kernel | | Code |||+
| Code | | & Data ||||
| | | ||||
0100 +------------+ +------------+|||
| Reserved | | Reserved |+||
0000 +------------+ +------------+|+|
+------------+|+
+------------+|

В блоке общего ОЗУ COMMON размещаются части, которые должны быть общими у ядра и процессов (udata, стеки, некоторые переменные) и подпрограммы для межстраничного копирования, межстраничного JP/CALL/RET, вектор IM2 и начальный обработчик прерывания. Там же сидят порты (1к), и 2к ROM F800 в принципе ненужного для uzix, съедая 3к драгоценного ОЗУ, но так уж устроен Орион.

Ядро пока 29кб. Пишу для Орионовского клона CP/M АльтаирДОС (http://zx-pk.ru/showthread.php?t=18451) с TPA до 58 кб, т.е. хватит места и TCP/IP впилить, и поддержку ФС FAT.

В страницах процессов сразу "из коробки" есть недоэмулятор CP/M: эмулируется CP/M консоль (ввод-вывод на экран/с клавиатуры) - BDOS функции 1..12, BIOS функции 2..4, остальные функции BDOS (дисковые в-основном) возвращают FF-нет файла. Т.е. будет работать любое корректное ПО CP/M не лезущее в диски, например ASCII-игры, программы типа "hello world" и т.п. :) В планах полный эмулятор CP/M, уже внешний - загружаемый (сделано).

В качестве дисков используется IDE/SD через CP/M-овский драйвер "сырого доступа" IDEBDOS, схема MBR-партиций (поддерживаются только 4 основные партиции на двух физических приводах - итого 8 партиций, на двух RAW (от LBA0=MBR до LBAmax)) дисках: fd8{партиции fd0,fd2,fd4,fd6} и fd9{партиции fd1,fd3,fd5,fd7}, номер партиции передается в утилиты (проверяемая/копируемая/где создается файловая система) и в ядро (root-партиция, остальные через mount) как параметр командной строки.

Исходники размещены на GitHub (https://github.com/serge-404/U.Z.I.X.).
Из общего архива исходников собирается и ядро (idebdos.com, emu.com, uzix.com) и утилиты (набор BD.COM, FSCK.COM, MKFS.COM, UCP.COM; или отдельно fdisk.com). Сборка проходит за 15 секунд. :) Собирается так:

правим мakefile - изменяем так: "DEFINES = -DORI_UTIL", или так: "DEFINES = -DORI_UZIX", или так: "DEFINES = -DORI_FDISK", в зависимости от того утилиты, ядро или fdisk компилируются соответственно.
запускаем cmd, переходим (cd) в каталог где лежат исходники
cmd> make clean & REM удаляем объектники - их всегда(!) надо пересобирать
cmd> make kernel & REM или "make utils" или "make fdisk.com" - смотря что в DEFINES


ПРОЧЕЕ

Как компилировать приложения под UZIX описано тут (http://zx-pk.ru/threads/24501-tekhrazdel-uzix.html?p=977845&viewfull=1#post977845)

Oбраз диска тут:
http://zx-pk.ru/showpost.php?p=776311&postcount=38 - файл ohi-uzix.7z
Плюс более свежая версия:
https://drive.google.com/open?id=0B3S0wVWNPLrwLXgwZE9Ebnh6eHc

Пояснение по работе с WIN-утилитами смотрите тут:
http://zx-pk.ru/showthread.php?t=9589

Плагины TotatlCommander/DoubleCommander для работы с образами дисков:
https://zx-pk.ru/threads/24501-tekhrazdel-uzix.html?p=1013490&viewfull=1#post1013490

Утилиты Линукс для работы с файловыми системами UZIX:
https://github.com/marioaugustorama/UXU

ЧАВО:

как засунуть файлы в образ карты (файловую систему Юзикса) (http://zx-pk.ru/threads/24501-tekhrazdel-uzix.html?p=978378&viewfull=1#post978378)

Как запускать программы от CP/M в UZIX (http://zx-pk.ru/threads/24501-tekhrazdel-uzix.html?p=979461&viewfull=1#post979461)


Ранее:
20.09.2108: Причесал концепцию и код встроенного эмулятора CP/M. Читать тут (https://zx-pk.ru/threads/24501-tekhrazdel-uzix.html?p=979461&viewfull=1#post979461) и тут (https://zx-pk.ru/threads/24501-tekhrazdel-uzix.html?p=982080&viewfull=1#post982080)
05.09.2018: Выложил на GIT утилиты под Винду для работы с образами дисков UZIX (https://github.com/serge-404/U.Z.I.X./tree/master/WinUtils), как и имевшиеся у меня оригинальные исходники и образы дисков с MSX (https://github.com/serge-404/U.Z.I.X./tree/master/Original).
06.10.2016: Исходники ядра и утилит теперь на GitHub (https://github.com/serge-404/U.Z.I.X.) (полный пак с libc, app).
06.02.2015: Сделано все чтобы собиралась LIBC. Надо браться за приложения. Рабочие бинари от UZIX что работают без ошибок, пересобирать не планирую - интереснее наваять что-нибудь свое (или собрать недостающие бинари из исходников). Отчет о LIBC тут: http://zx-pk.ru/showpost.php?p=780032&postcount=61
23.01.2015: Сделано все что хотел и что было в ядре uzix 1.0, готовность ядра 99% Размер ядра - 30к.
19.01.2015: замедлитель ввода, полный пак файлов на одну большую партицию UZIX (более сотни команд + маны + ...)
17.01.2015: работосопособный многозадачный промежуточный ночной снапшот исходников, готовность ядра оцениваю в 90%
07.01.2015: получена работоспособная немногозадачная версия, готовность ядра оцениваю в 70%
24.11.2014: изначально несобиравшиеся исходники ядра доведены до компилируемости
хх.11.2014: подготовлена среда сборки (ProgrammersNotepad/HitechC/CpmEmu)

Error404
26.12.2014, 17:20
Распределение памяти в более широком (подробном) изложении:



== ORION AltairDos page 0 memory map
0000 ---------------------
| Screen0 - graphic
4000 ---------------------
| Screen1 - graphic
8000 ---------------------
| AltairDos ExtendedRAM: 4k segments 08,09,0a,0b - planned for shared libc in future
C000 ---------------------
| CP/M crt driver
| + base fonts (KOI8-R) LOCAL MEMORY (accessed driven by 0F9 port: pages port)
F000 ----------------------------------------------------------------------------------
| SEE BELOW COMMON MEMORY (accesed from any page)


== ORION AltairDos page 1 memory map
0000 ---------------------
| Screen0 - color attributes (16 color)
4000 ---------------------
| Screen1 - color attributes (16 color)
8000 ---------------------
| AltairDos ExtendedRAM: 4k segment 18 - planned for IDEBDOS driver
9000 ---------------------
| CP/M (AltairDOS) kernel LOCAL MEMORY (accessed driven by 0F9 port: pages port)
F000 ----------------------------------------------------------------------------------
| SEE BELOW COMMON MEMORY (accesed from any page)


== ORION UZIX kernel space map (page 2, e.i. CP/M TPA):
0000 ---------------------
| system vectors
0010 ---------------------
| reserved for CP/M
0100 ---------------------
| kernel code
E000 ---------------------
| kernel heap
Eхxx ---------------------
| kernel stack
E860 ---------------------
| CP/M (AltairDOS) BDOS (actually wrapper calling to page1 code)
E8D0 ---------------------
| CP/M (AltairDOS) BIOS (actually wrapper calling to page1 code)
ED80 ---------------------
| UZIX SRV_STACK (for ISR routine)
EDF9 ---------------------
| UZIX TEMPDBUF (for unplanned disk IO)
EFF8 ---------------------
| _OLDYINTVEC byte:word (3b) ^ ^ ^
| _PRCIMSTACK word | | |
| _BNKMARKER byte LOCAL MEMORY (accessed driven by 0F9 port: pages port)
F000 ----------------------------------------------------------------------------------
| SEE BELOW COMMON MEMORY (accesed from any page)


== ORION UZIX process space map (pages 3..15):
0000 ---------------------
| system vectors
0010 ---------------------
| reserved for CP/M emu
0100 ---------------------
| user process (TPA)
EBC0 ---------------------
| CP/M BDOS/BIOS console functions emulator (BDOS 1..12, BIOS 1..4 functions)
ECxx ---------------------
| kernel subroutines for getc/putc
EDxx ---------------------
| kernel subroutines for ssiz/scop (argv/env services)
EDxx ---------------------
| kernel subroutines for GoUnix/GoExit
EExx ---------------------
| kernel subroutines for swapin/swapout
EE80 ---------------------
| FSTACK_BCKP
EF80 ---------------------
| UDATA_STASH
EFF8 ---------------------
| _RETPAGE byte
| _GOSWAPSTACK word
| _GOUNIXSTACK word ^ ^ ^
| _PRCIMSTACK word | | |
| _BNKMARKER byte LOCAL MEMORY (accessed driven by 0F9 port: pages port)
F000 ----------------------------------------------------------------------------------
| FAREA_STACK COMMON MEMORY (accesed from any page)
F100 --------------------- | | |
| IDEBDOS routines \/ \/ \/
F120 ---------------------
| CP/M tty routines
F14x ---------------------
| CP/M tty buffer
F162 ---------------------
| dtsize byte
| _ret_page byte
| _ret_addr word
| _ret_sp word
| _switch_page byte
| U_DATA 120 bytes
F1E2 ---------------------
| CP/M crt routines
F201 ---------------------
| CP/M interbank routines: BLDIR, BJMP, BCALL, BRET, BLDB, BSTB
F2xx ---------------------
| CP/M int 50Hz ISRs: MINT, MDI, MEI; ISR_RET=0f2e3h, F3STACK=0F2B5h
F2FB ---------------------
| reserved int vector word
| TTY IM2 int vector word
| 50Hz IM2 int vector word
F301 ---------------------
| CP/M interbank vectors (page:addr, 3 bytes):
| YBDOS bank:addr=byte:word
| YBIOSWARM bank:addr=byte:word
| YBIOSCONST bank:addr=byte:word
| YBIOSCONIN bank:addr=byte:word
| YBIOSCONOUT bank:addr=byte:word
| YBIOSLSTOUT bank:addr=byte:word
| YBIOSAUXOUT bank:addr=byte:word
| YBIOSAUXIN bank:addr=byte:word
| YBIOSHOME bank:addr=byte:word
| YBIOSSELDISK bank:addr=byte:word
| YBIOSSELTRK bank:addr=byte:word
| YBIOSSELSEC bank:addr=byte:word
| YBIOSSETDMA bank:addr=byte:word
| YBIOSREAD bank:addr=byte:word
| YBIOSWRITE bank:addr=byte:word
| YBIOSLSTST bank:addr=byte:word
| intvec (INT 50Hz) byte:word
| intkey (ctrl+shft+key) byte:word
F334 ---------------------
| F3-stack (for interbank routines)
F3C0 ---------------------
| ROM-BIOS Monitor vectors, variables and constants
F400 ---------------------
F500 keyboard PPA 8255
F600 romdisk PPA 8255
| printer PPA 8255
F700 ---------------------
| user devices ports
F800 ---------------------
| ROM-BIOS Monitor code (ROM)
FFFF ---------------------



Ядро сейчас написано (все мысли уже перенесены в код), но пока много ошибок - в процессе отладки. И уже придумал изменения кое-где, надо внедрять. Но подает признаки жизни. Запускается само ядро, монтируется РУТ, создается процесс, в него читается образ INIT, передается управление INIT, из процесса идет вывод на экран (пока что из-за отсутствия либ, через call 5 - через эмулятор CP/M, но и он вобще-то идет "по взрослому" - через STDOUT функции ядра, а не напрямую). Готовность ядра оцениваю в 50%.
Надо делать либы и допиливать "межстраничную" обработку передаваемых данных из процессов в sys_* функции ядра (физически они в разном пространстве - разных 64к страницах, т.е. надо по необходимости делать пересылки туда и обратно после обработки).

Без пересылок не обойтись, т.к. основное ИМХО - выдавать процессору максимум "сплошного" ОЗУ (сейчас процессу дается 58,5к "чистого ОЗУ", пока без всяких диспетчеров по 16к - хотя и его позже задействую для shared libc, т.е. будет до 74,5к сугубо на процесс, а это очень прилично для Z80!), а пересылки можно компенсировать увеличением такта ЦПУ. В связи с этим я предлагаю реанимировать темку "быстрого CP/M-компутера на реальном Z80", и сделать его совместимым с маппером из первого поста (в одном из режимов приблизить к Ориону). Короче, вызываю в тему Евгения, Мика, Хардваремана, которые все подобные проекты начинали, но не помню выдали ли нагора результат хоть кто-нить. ;)
Также приветствуются проекты по разгону реальных Орионов-rev512 и Орионов-ПРО.
Также, могу поддержать в драйвере idebdos, т.е. и в UZIX, реальные (т.е. проверенные автром в железе и с минимальным кодом нижнего уровня - отлаживать это мне самому нет времени) проекты быстрого IDE (типа НЕМО) и SD (типа самотактируемого от Хардваремана) на россыпухе. Нынешние внедренные мной схемы IDE и SD хотя и простые, но медленные.

Ewgeny7
26.12.2014, 23:13
Нынешние внедренные мной схемы IDE и SD хотя и простые, но медленные.
Взять готовый Z-контроллер со спектрума. Тупо бросаешь ему байт в порт 0х57 и забываешь. На 28 Мгц клока пашет исправно.

Error404
27.12.2014, 11:35
Взять готовый Z-контроллер со спектрума. Тупо бросаешь ему байт в порт 0х57 и забываешь. На 28 Мгц клока пашет исправно.

А кинь ссылочку на где почитать про него? Из чего построен, что умеет.

Вообще, хотелось бы на россыпухе, типа чтобы атомный олдскул. Но особо цепляться за это не буду, тем более если можно будет готовую плату воткнуть. Кстати, воткнуть - куда? Слоты то везде разные, хоть на ревизии512, хоть на ПРО. Ёлку-переходник сделать к ZX-bus?

Ewgeny7
27.12.2014, 13:37
А кинь ссылочку на где почитать про него? Из чего построен, что умеет
К сожалению, он существует только на ПЛИС. Но это и облегчает ситуацию, мелкосхемка 1х1см с лапами с шагом 0,8мм легко паяется даже обычным паялом, а сам модуль состоит всего из одной детали. На "рассыпушном" компе ZXM-Phoenix уже давно внедрили этот контроллер как штатный.
Могу выслать почтой прошитые чипы.
Описание всего этого хозяйства можно почитать в журнале Абзац №32 (http://abzac.retropc.ru/files/32.zip), со страницы 67 и далее.

---------- Post added at 13:37 ---------- Previous post was at 13:34 ----------

И, собственно, поскольку модуль на ПЛИС, можно изменять интерфейс на более приемлемый. Например, заводить адреса на чип, пускай сам ловит свой порт, или заводить просто два готовых сигнала селекта портов.

Error404
28.12.2014, 12:12
На "рассыпушном" компе ZXM-Phoenix уже давно внедрили этот контроллер как штатный.
Могу выслать почтой прошитые чипы.
Описание всего этого хозяйства можно почитать в журнале Абзац №32 (http://abzac.retropc.ru/files/32.zip), со страницы 67 и далее.


Ну, в принципе - вариант, конечно. Раз уж заводить туда адреса/данные, то на этой же CPLD можно наверное и другие селекторы сделать - например для сетевой RTL8019 или для RS-232 под ATTiny (а может и весь RS-232 влезет прям в CPLD). А чего там Савелий писал про сбои в зависимости от "повышенной" частоты 7МГц, под который ему пришлось подбирать задержки? Нам то надо повышать гораздо выше чем до 7. Стабильно оно работает на Турбо/нетурбо?

Ewgeny7
28.12.2014, 20:57
А чего там Савелий писал про сбои в зависимости от "повышенной" частоты 7МГц, под который ему пришлось подбирать задержки?
Я не помню такого...
У меня оно работает на 7Мгц на Скорпионе, да и 14Мгц давно опробовано на u-Reverse. Вероятно, это имеются ввиду задержки на отправку-прием байта. При частоте модуля в 28Мгц ему все равно потребуется не менее 8 тактов на байт. Просто надо сигнал готовности вывести, его сейчас нету.

---------- Post added at 20:30 ---------- Previous post was at 20:28 ----------


то на этой же CPLD можно наверное и другие селекторы сделать - например для сетевой RTL8019 или для RS-232 под ATTiny (а может и весь RS-232 влезет прям в CPLD).
Не стоит, ИМХО. Такой колхоз потребует жирной CPLD, а она сложнее в монтаже, имея лапы TQFP-0.5*100.

---------- Post added at 20:57 ---------- Previous post was at 20:30 ----------

И еще вопрос. А что требуется, чтобы на Орионе запустить это "промежуточное изделие"? Есть девборда с ПЛИС, заточенная под Орион. Можно перелопатить под текущие нужды.

Error404
29.12.2014, 17:04
А что требуется, чтобы на Орионе запустить это "промежуточное изделие"? Есть девборда с ПЛИС, заточенная под Орион. Можно перелопатить под текущие нужды.

Хороший вопрос. Оставляя за скобками интересность наблюдения "hello world, I am init" (а больше пока ничего там не увидеть - under construction), я подумаю как это промежуточное изделие запускать кому-нить кроме меня. Т.к. сам я многое делаю "на коленке". Например образ рабочего диска где есть и партиция CP/M и партиция UZIX, я слепил тупо сконкатенировав ("склеив") командой "copy /b" какой-то образ HDD от CP/M и 720-кшный образ системной дискетки от USIX и поправив таблицу разделов редактором. :) Загружаюсь в эмуле с CP/M из ПЗУ (т.к. нужна Альтаир-DOS 3.5r), затем работаю с образом IDE (там более старая ОС на системных дорожках, ее бы переписать тупо Повером на ПЗУ-шную, да руки не доходят :) ). В-общем никуда не годится. Буду параллельно делать инструменты и методичку, на новогодних каникулах опубликую (раньше - вряд ли). Сейчас уже допилил и положил в исходники fdisk (поправил первый пост), но не все сразу - еще и работать надо - подкинули работы под занавес года. :(

Ewgeny7
29.12.2014, 21:05
Хороший вопрос
Дык старался, млин... :)
Скажем так, для чистоты процесса.
Как я понимаю, нам нужна будет просто голая машина с Z80 и максимумом памяти "по образу и подобию" Ориона. В ней будет запускаться СР/М, откуда будем уже прыгать в UZIX? Предварительная версия, так сказать...
Кстати, готовая связка "Монитор с автозапуском СР/М с ПЗУ" существует в природе? Чтобы сразу проскакивать стадию ОРДОСа.

Error404
30.12.2014, 01:50
Дык старался, млин... :)
Скажем так, для чистоты процесса.
Как я понимаю, нам нужна будет просто голая машина с Z80 и максимумом памяти "по образу и подобию" Ориона. В ней будет запускаться СР/М, откуда будем уже прыгать в UZIX?


Да, так и будет. И в финальной версии тоже, по крайней мере пока я все вкусное не переделаю и не захочется оптимизировать уже работающее. CP/M используется чтобы не писать отдельно драйвер вывода на экран VT52, менеджер расширенной памяти, менеджер прерываний, межбанковские процедуры, п\п доступа к IDE/SD - это все есть в АльтаирДОС.



Предварительная версия, так сказать...
Кстати, готовая связка "Монитор с автозапуском СР/М с ПЗУ" существует в природе? Чтобы сразу проскакивать стадию ОРДОСа.

Поскольку от раздела с CP/М (как и от самой её) на IDE/SD (да хоть на дисководе) мы все равно не уйдем, то проще тупо разместить нужную версию на системных дорожках и грузиться соответствующими Мониторами (http://zx-pk.ru/showpost.php?p=280074&postcount=2) минуя ОРДОС. Сделаю завтра образ для IDE/SD c v3.5r, это реально пара команд в POWER + одно действие в FDISK (http://zx-pk.ru/showpost.php?p=279991&postcount=1). :)

Error404
06.01.2015, 01:52
Некоторый отчет.
Выложил исходники проекта от 5 января.
Что имеем:

сделал интерфейс процесса с ядром такой, чтобы работали оригинальные Юзиксовые бинарники - т.к. неохота все пересобирать (к LIBC пока не прикасался). Впрочем, PS, RENICE, TOP все равно потом надо будет пересобрать - я для упрощения ASM кода кое-какие переменные переставил в структуре заголовка процесса.
Пока отлаживаюсь в некоммутируемом режиме (без многозадачности), хотя мысли для ее работы в коде оформлены, просто пока отключен и не проверялся сам диспетчер 50Hz в ISR service()
Запускается init, он запускает login (вводим root, ага :) ), затем запускается sash, все это как-то уже живет в разных страницах памяти, как-то туды-сюды переключаясь на засыпаниях процессов в очередях. sash прочитывает какие-то файлы из /etc/ и увисает на сигналах (а это межстраничные вызовы), надо разбираться. Трассировать С-шный код в ассемблере - это очень увлекательно. :( А деваться некуда - я переделываю плоскую (одностраничную) модель Юзикса в многостраничную, наошибаюсь - не без того.


Подскажите знающие люди: нафига приложения в диких количествах вызывают этот мутный непонятный sbrk() ?

b2m
06.01.2015, 11:08
Подскажите знающие люди: нафига приложения в диких количествах вызывают этот мутный непонятный sbrk() ?
Насколько я понимаю, это верхняя граница памяти процесса. Т.е. чтобы, например, перенести процесс в другую страницу, достаточно скопировать до этой границы. Выше этой границы процесс гарантированно не использует память. В этой функции ядра можно контролировать распределение страниц памяти для процесса.

Error404
06.01.2015, 12:51
Насколько я понимаю, это верхняя граница памяти процесса. Т.е. чтобы, например, перенести процесс в другую страницу, достаточно скопировать до этой границы. Выше этой границы процесс гарантированно не использует память. В этой функции ядра можно контролировать распределение страниц памяти для процесса.

Ну, где-то так я и предполагал. Дергается при каждом malloc/free
Но в целом там ничего сложного (хотя кое-что уже нашел и поправил, но не критично, не должно было влиять).
Значит, собака где-то в другом месте порылась, копаю дальше.

Error404
07.01.2015, 02:01
Остальное завтра: уже засыпаю...

impressed
07.01.2015, 16:00
Их два brk() и sbrk()


Вызов brk() и sbrk() изменяет расположение маркера окончания программы (program break), который определяет конец сегмента данных процесса (т.е., маркер окончания — это первая точка
после конца сегмента неинициализированных данных). Увеличение маркера окончания программы позволяет процессу выделить память; уменьшение маркера приводит к освобождению памяти.

brk() устанавливает конец сегмента данных в значение, указанное в аргументе addr, если это значение является приемлемым, система имеет достаточно памяти и процесс не достиг максимально
возможного размера своего сегмента данных (см. setrlimit(2)).

sbrk() увеличивает пространство данных программы на increment байт. Вызов sbrk() с increment равным 0 может быть использован для нахождения текущего местоположения маркера окончания
программы.


Вот что говорит man по этим функциям.
чаще всего используются для изменения размера кучи, при динамическом выделении памяти через malloc() / realloc() / calloc() и при освобождении выделенного через free()

В переносимых программах к использованию не рекомендуются, т.к поведение зависит от реализации VMM в ядре ОС, вместо них лучше пользоваться функциями для динамического выделения памяти из libc ( malloc/calloc/realloc/free).


Некоторый отчет.
Выложил исходники проекта от 5 января.
Что имеем:

сделал интерфейс процесса с ядром такой, чтобы работали оригинальные Юзиксовые бинарники - т.к. неохота все пересобирать (к LIBC пока не прикасался). Впрочем, PS, RENICE, TOP все равно потом надо будет пересобрать - я для упрощения ASM кода кое-какие переменные переставил в структуре заголовка процесса.
Пока отлаживаюсь в некоммутируемом режиме (без многозадачности), хотя мысли для ее работы в коде оформлены, просто пока отключен и не проверялся сам диспетчер 50Hz в ISR service()
Запускается init, он запускает login (вводим root, ага :) ), затем запускается sash, все это как-то уже живет в разных страницах памяти, как-то туды-сюды переключаясь на засыпаниях процессов в очередях. sash прочитывает какие-то файлы из /etc/ и увисает на сигналах (а это межстраничные вызовы), надо разбираться. Трассировать С-шный код в ассемблере - это очень увлекательно. :( А деваться некуда - я переделываю плоскую (одностраничную) модель Юзикса в многостраничную, наошибаюсь - не без того.


Подскажите знающие люди: нафига приложения в диких количествах вызывают этот мутный непонятный sbrk() ?

Error404
07.01.2015, 18:14
Ну в общем из-за этого странного механизма выделения памяти и был один из глюков. Сейчас собрал работоспособную (оптимистичненько?) немногозадачную версию Юзикса (т.е. контексты не переключаются по INT50Hz пока), свежий пак исходников в первом посте. Чисто народу для побаловаться, пока я многозадачность буду допиливать. :) Пишите багрепорты, а лучше сразу присылайте фиксы ошибок.

Здесь кладу образ для загрузки (tty-sd5.ohi - он одинаковый что для IDE, что для SD-card), поправленный плагин для записи CPM-файлов в образы HDD для TotalCommander/DoubleCommander/Far (старый плагин не работает! виснет если в образе есть не-CPM партиции), ПЗУ мониторов и MBOOT.ORD для загрузки сразу с SD по включению питания и через Ордос соответственно.

tty-sd5.zip из двух частей собирать так:
cmd> copy /b tty-sd5-001.zip + tty-sd5-002.zip tty-sd5.zip
и уже потом раззиповать tty-sd5.ohi.

Файлы копировать в/из файловые системы UZIX пока только через утилиту UCP.COM (она в user_3 CP/M-овской партиции tty-sd5.ohi - первой партиции) - в ней нажмете "?" - выведется подсказка (hint: использовать bput/bget как в ftp).

Всего в образе 3 партиции: CP/M, UZIX, UZIX.
Соответствие устройствам можно смотреть утилитой BD.COM (перед тем как выводить собственно HEX-дамп секторов указанной партиции, она покажет все партиции какие есть в табличке). Пример на картинке.

Обе партиции UZIX - системные, т.е. из CP/M ядро UZIX (бинарь UZIX.COM) можно запускать с параметром - любой из этих двух партиций:
uzix 2:
или
uzix 4:

а 0: - это партиция с CP/M

Отличие в том, что в последней партиции ( 4: ) я создал и метадевайсы /dev/fd2 .. /dev/fd7 (http://zx-pk.ru/showpost.php?p=769230&postcount=14) (картинка 4), а в партиции 2: есть только /dev/fd0 и /dev/fd1. Т.е. загрузившись в партиции 4: вы можете сделать "mount /dev/fd2 /mnt", а в 2: ничего такого сделать не можете пока аналогично не наковыряете через mknod соответствующие девайсы.

Почему такая система нумерации партиций.
У нас в общем случае 2 физических привода, на каждом в максимуме по 4 партиции - итого 8. Если это обычные флешки, то там по одной партиции, и удобно когда они /dev/fd0 (устройство 0, первая партиция) и /dev/fd1 (устройство 1, первая партиция). Продолжая (добавляя партиции), имеем:

/dev/fd2 (устройство 0, партиция 2), /dev/fd3 (устройство 1, партиция 2),
/dev/fd4 (устройство 0, партиция 3), /dev/fd5 (устройство 1, партиция 3),
/dev/fd6 (устройство 0, партиция 4), /dev/fd7 (устройство 1, партиция 4).

Еще поддерживаются
/dev/fd8 (устройство 0 целиком включая MBR), /dev/fd9 (устройство 1 целиком включая MBR). Файловые системы UZIX на них делать (MKFS.COM) нельзя - убьете MBR. Это устройства на будущее - для утилит типа fdisk в версии для uzix.

А еще планирую /dev/fd10 - электронный диск в "расширенной" памяти ОЗУ (сверх 1Мб) - если этого ОЗУ у вас более чем 1Мб (а первый мегабайт весь распределен под UZIX, что дает параллельно выполнять до 13 процессов, каждому из которых дается не меньше 58,5кб ОЗУ)

ЗЫ. Так забавно, там даже и man-ы есть :v2_dizzy_botan:

medvdv
08.01.2015, 02:25
Вот можете меня тапками забросать но причем тут уж тога орион

Можно легко сделать вот такую машину
http://searle.hostei.com/grant/cpm/index.html?mmskip=1

с RS232 - даже терминала не надо - юзай внешний на здоровье

но вместо 64 к памяти закатать там SRAM на 512 и пейджер постраничный

и портировать на нее - будет отличная машина для UZIX и ничего лишнего =)

Error404
08.01.2015, 11:21
Вот можете меня тапками забросать но причем тут уж тога орион

Можно легко сделать вот такую машину
http://searle.hostei.com/grant/cpm/index.html?mmskip=1

с RS232 - даже терминала не надо - юзай внешний на здоровье

но вместо 64 к памяти закатать там SRAM на 512 и пейджер постраничный

и портировать на нее - будет отличная машина для UZIX и ничего лишнего =)

Принципиально оно ничем от Ориона не отличается, т.к. юзает Z80 c его ограничениями, какой там терминал - уже дело десятое (RS-232 на Орионе кстати есть есколько реализаций, одну из них впилю в Юзикс). Можно конечно и туда запилить. Но к Ориону у меня незавершенный гештальт (http://www.live-and-learn.ru/catalog/article/nezavershyennyy-geshtalt-ili-rech-o-prolitom-moloke-/): я в 1997г. сильно обдумывал на тему многозадачной ОС для него, но ушел в армию а после армии люди немного меняются - перестают "заниматься фигней" (становятся тупыми овощами, но пригодными к взрослой жизни - жестче, впрочем и без армии таких полно, чоужтам). А под 40 опять накрыло. :) Так что буду доделывать и точка. На этом офтоп закрываю.

Vasily
08.01.2015, 11:23
Ага, только вы попробуйте дорисовать к той схеме:
1. работа с памятью более 64К
2. клавиатуру
3. видео
4. ну и еще пара портов ввода/вывода

на выходе по корпусам получится Орион или почти, на который к тому же софта 0 - все нужно портировать.

M80
08.01.2015, 13:37
Мужики, а как бы на обычную cp/m машинку uzix поставить? Это есть, это возможно?
Безо всяких там синклеров, ага? Извините, за глупый вопрос, ежели чё.

Error404
08.01.2015, 14:42
Мужики, а как бы на обычную cp/m машинку uzix поставить? Это есть, это возможно?
Безо всяких там синклеров, ага? Извините, за глупый вопрос, ежели чё.

Собственно этим я и занимаюсь, юзикс работает как CP/M приложение, вся тонкость в использовании расширенной памяти: это непросто реализуется, но если уж сделать, то переключение процессов будет с приемлимой скоростью за счет MMU (менеджера страниц памяти). Если у CP/M машины нет расширенной памяти, то остается только путь родной MSX1, где юзикс вытеснял CP/M (загружался в верхние 32к 64к-шной страницы памяти вместо СРМ), для процесса оставалось только 32к (что вроде бы всего в 2 раза меньше чем у меня сейчас 59к на Орионе, но насколько же падает функционал урезаемых по памяти процессов! Несравнимо, никак не вдвое!), при этом эти 32к-шные процессы не переключаются за "один хлоп", а постоянно выгружаются-загружаются на дисковое устройство (скорость соответствующая).

---------- Post added at 14:42 ---------- Previous post was at 13:52 ----------

Некоторые утилиты под Винду для работы с образами дисков UZIX и пара образов дискет:
http://zx-pk.ru/showthread.php?t=9589
Пост аж от 2009 года! :)

Скорее всего это престарелые утилиты, которые умеют работать только с образами дискеток. Позже проверю и по необходимости обновлю, сейчас у меня есть доработанные - для работы как с образом дискет, так и с образами HDD - но они на рабочем PC.

M80
08.01.2015, 15:18
Ну а ежели у меня диск или "дисковая память" шустренькая? Нафига мне завязываться на всякие там банки, страницы и т.п.? Понятно что это медленнее, зато мудрить ничё не надо, не?

Vasily
08.01.2015, 15:21
Даже дисковая память постороеная на RAM будет на несколько порядков медленнее страничной за счет накладных расходов. Нужно обслуживать файловую систему + ввод/вывод.

Error404
08.01.2015, 15:36
Ну а ежели у меня диск или "дисковая память" шустренькая? Нафига мне завязываться на всякие там банки, страницы и т.п.? Понятно что это медленнее, зато мудрить ничё не надо, не?

Если там используется DMA, работающий со скоростью сравнимой с LDIR, то делать многозадачность с выгрузкой на диск приемлимо, иначе много задачность теряет смысл (комп будет заниматься только выгрузкой-загрузкой). Но остается вариант с немногозадачным Юзиксом - вот как тем что я вчера выложил. CP/M же однозадачная тоже. По большому счету - те же яйца только в профиль, заниматься этим имеет смысл если будут интересные приложения именно для Юзикс, не работающие в CP/M.

M80
08.01.2015, 16:11
Конечно, однозадачность не интересна. Кстати, а для (вытесняющей) многозадачности ведь, как минимум, нужен таймер, или нет? В cp/m я такого не наблюдаю. Как это может решаться?

Error404
08.01.2015, 18:03
Конечно, однозадачность не интересна. Кстати, а для (вытесняющей) многозадачности ведь, как минимум, нужен таймер, или нет? В cp/m я такого не наблюдаю. Как это может решаться?

Да, нужен. Аппаратно это есть (как на большинстве 8-биток), в CPM 2.2 это никак не было прописано, обработка таймера прерываний я в BIOS-е CP/M сам доделывал - конечно ни с чем не совместимо, это ж был благословенный 95-й год, про MP/M в наших деревнях тогда информации не было. Вот этими особенностями Альтаир-ДОС (Орионовской CPM) сейчас и пользуюсь в Юзиксе.

Totem
09.01.2015, 23:14
http://p112.sourceforge.net/index.php?uzi180
осталось чуть чуть, найти силы выгнать голдящий дивичий табор из дома на пару дней и допилить, платки для 180:))

Error404
09.01.2015, 23:28
http://p112.sourceforge.net/index.php?uzi180
осталось чуть чуть, найти силы выгнать голдящий дивичий табор из дома на пару дней и допилить, платки для 180:))

Клево. Это чья страница, твоя? И что такое P112?

У народа прям пик интереса к UZI/UZIX/FUZIX :)

Как посмотреть environment?
Env, printenv, echo $VARIABLE - не работают.

Totem
10.01.2015, 00:15
Клево. Это чья страница, твоя? И что такое P112?

У народа прям пик интереса к UZI/UZIX/FUZIX :)

Как посмотреть environment?
Env, printenv, echo $VARIABLE - не работают.
этим железякам сто лет в обед, как и uzi180, у меня просто камней 6 штук
180 на 33Mгц и пара на 8, я озадачился их применением.:) тихонько железку свою ваяю на 180. Осталось вытравить и спаять. Подумываю чего по запускать. :) Почитываю профильные темы.
а тема у тебя действительно интересная.
UZI


Task switching consists of saving the current process status in the User
stack and data area, block moving the user data area and stacks to the
respective process area in the reserved top 4k (via DMA), restoring the
new task's data into common memory (also via DMA), changing the Bank Base
Register in the Z180 MMU to bring the new task in context, resetting the
new process' stack pointer, restoring processor status and continuing as
before. This results in relatively rapid response since the bulk of time
required is due to two 768-byte DMA transfers which consume 1536 * 6 T-
states or 9216 / 18,432,000 = .0005 Sec = 500 microseconds on a 18.432 MHz
P112 or YASBEC upgraded with the Z8S180, and double this time, or 1000
microseconds (1 millisecond) on a standard 9.216 MHz YASBEC. This ignores
any additional time due to insertion of memory wait states and the
relatively insignificant overhead associated with housekeeping.


таймеров 2, но полноценно можно использовать только 1.

Error404
17.01.2015, 02:09
Многозадачная версия ядра как-то заработала.
Не без вопросов конечно (какие-то моменты надо прояснять коллективным разумом - есть желающие? напишу где у меня затыки), но уже что-то.
Даже подогнал структуры чтобы бинарные MSX-ные ps, top заработали, чего сначала делать не собирался, но поскольку LIBC пока не готов (чтобы пересобрать своё), то пришлось выкручиваться так. :)
Ошибки попутно чищу, но думаю их там пока еще богато, плюс кое-что тупо надо доделать (редкоиспользуемое - типа прямого блочного чтения устройств: там к примеру пока заглушка PANIC, т.к. тут еще и IDEBDOS надо чуть допилить), а оптимизировать даже не начинал.

Вопрос такой - промежуточные работоспособные версии выкладывать? Кому-нить интересно их пробовать? А однозадачную недельной давности пробовали уже? А то я имею печальный опыт, когда в эмуляторе (где и отлаживаюсь) моё программирование на С работало, а на платке Орионе-2010 не работало.
Если выкладывать то исходники или имидж диска, или и то и то?

У кого-нить есть готовый libc.lib от Uzix 1.0? М.б. у sayman?

Как запускать много процессов в юзиксовом шелле sash? Максимум чего я пока добился это 3-4 процесса:
3 когда init+sh+process (просто команда под sash)
и 4 когда init+sh+process+piped_process (типа команды cat file | more ).

И кстати у кого есть бинарный sash в полной функциональности (он комплилируется на дефайнах в 3 варианта полноты)? Тот, что в моем образе, имеет только полдюжины встроенных команд: явно не самый полный. А памяти то вагон: 58 с гаком килобайт, не то что 32k на MSX, на Орионе можно было бы и пожирнее шелл пользовать.

Totem
17.01.2015, 04:53
мне жутко интересно
libc.lib, он вроде как свободно лежал на страничке проекта в архиве
у msх забавная архитектура, но она не мешает symb os?

impressed
17.01.2015, 14:23
Многозадачная версия ядра как-то заработала.
Не без вопросов конечно (какие-то моменты надо прояснять коллективным разумом - есть желающие? напишу где у меня затыки), но уже что-то.
Даже подогнал структуры чтобы бинарные MSX-ные ps, top заработали, чего сначала делать не собирался, но поскольку LIBC пока не готов (чтобы пересобрать своё), то пришлось выкручиваться так. :)
Ошибки попутно чищу, но думаю их там пока еще богато, плюс кое-что тупо надо доделать (редкоиспользуемое - типа прямого блочного чтения устройств: там к примеру пока заглушка PANIC, т.к. тут еще и IDEBDOS надо чуть допилить), а оптимизировать даже не начинал.

Вопрос такой - промежуточные работоспособные версии выкладывать? Кому-нить интересно их пробовать? А однозадачную недельной давности пробовали уже? А то я имею печальный опыт, когда в эмуляторе (где и отлаживаюсь) моё программирование на С работало, а на платке Орионе-2010 не работало.
Если выкладывать то исходники или имидж диска, или и то и то?

У кого-нить есть готовый libc.lib от Uzix 1.0? М.б. у sayman?

Как запускать много процессов в юзиксовом шелле sash? Максимум чего я пока добился это 3-4 процесса:
3 когда init+sh+process (просто команда под sash)
и 4 когда init+sh+process+piped_process (типа команды cat file | more ).

И кстати у кого есть бинарный sash в полной функциональности (он комплилируется на дефайнах в 3 варианта полноты)? Тот, что в моем образе, имеет только полдюжины встроенных команд: явно не самый полный. А памяти то вагон: 58 с гаком килобайт, не то что 32k на MSX, на Орионе можно было бы и пожирнее шелл пользовать.

Запуск фоновых процессов делается двумя способами:
1. При запуске жмем ^Z (Ctrl+Z) и приложению будет отправлен сигнал остановки с терминала, попутно оболочка выведет номер задания, под которым находится остановленный процесс. Далее берем этот номер и делаем команду bg <номер> процесс уйдет в фон. Но это для линуксов/фрях и другиг взрослых юниксов
2. После имени команды поставить амперсанд:
# long_running_task &
long_running_task заменить на свою команду соответственно

Но это опять же во возрослых юниксах

А в нашем случае скорее всего ни как, т.к README к sash говорит нам


* UZIX doesn't have the concept of background/foreground applications
controlled by user;
https://github.com/menelkir/uzix/blob/master/Source/README

Весьма куцая многозадачность получается, если сильно хочется -- придется пилить систему самому, чтобы в нее это добавить.

Error404
17.01.2015, 15:27
Запуск фоновых процессов делается двумя способами:
1. При запуске жмем ^Z (Ctrl+Z)
2. После имени команды поставить амперсанд:
Но это опять же во возрослых юниксах


Да, это понятно. Тут беда как sash заюзать. Наверное проще всего nohup спортировать.



А в нашем случае скорее всего ни как, т.к README к sash говорит нам


https://github.com/menelkir/uzix/blob/master/Source/README

Весьма куцая многозадачность получается, если сильно хочется -- придется пилить систему самому, чтобы в нее это добавить.

Вот за ссылку на github спасибо, покопаюсь - может найду чего-то что нет у меня (я в 2007-2008г.г. собрал все что тогда смог найти в инторнетах, но не факт что это все что было). LIBC там только исходники вроде (надо собирать), бинаря библиотеки вроде нет?

Кстати, в реадме пишут:
"The number of processes is limited only by the swap space
available, with a maximum of 31 processes (total of 1024k memory). As
mentioned, UZIX implements UNIX well enough to run the Bourne Shell in its
full functionality."

Про 31 процесс врут конечно (по крайней мере в Uzix 1.0 на MSХ их в максимуме 8 штук - это размер таблицы процессов), и дело не только в свапе, а еще и в том что ядро урезано в т.ч. и по массивам - чтобы влезать в верхние 32к (по факту, из-за МСХ-биос еще и меньше).

И кто бы портанул Bourne Shell - вот в нем то точно нормально все сделано. :)

---------- Post added at 15:27 ---------- Previous post was at 14:51 ----------

В ps и top тупенько сделано: размер процесса взяли константой в 32к. Типа сложно было с адреса 0009 (8: jp unix) взять высоту (адрес начала) ядра и посчитать сколько там ниже его для процесса. Поэтому несмотря на то, что я им из ядра возвращаю правльное количество общей памяти, они неправильно считают %% использования памяти процессами (у меня ж страницы процессов больше чем 32к). Так бы я их поправил и пересобрал, а тут еще наперво надо LIBC делать (что нифига не интересно).

impressed
17.01.2015, 15:33
И кто бы портанул Bourne Shell - вот в нем то точно нормально все сделано. :)


Борновский шелл (это тот который не bash, а просто sh) вроде должен собраться, если его подправить под целевой компилятор. Как минимум нужна поддержа C89, а лучше C99 в компиляторе + набор хедеров согласно POSIX.

Error404
17.01.2015, 17:33
Борновский шелл (это тот который не bash, а просто sh) вроде должен собраться, если его подправить под целевой компилятор. Как минимум нужна поддержа C89, а лучше C99 в компиляторе + набор хедеров согласно POSIX.

Да, я в курсе про sh и bash
Я и на sh и на ksh (Korn) вполне комфортно работаю, хотя bash поудобнее конечно.
Надо бы найти и портировать какой-нить старозаветный борн, чтобы он попроще современных был (а сервиса и там скорее всего будет уже с избытком).

Выкладываю исходники многозадачной версии в первом посте (http://zx-pk.ru/showthread.php?t=24501), и образ для загрузки на SD-card здесь. Как собрать образ из половинок, и утилиты - описаны тут:
http://zx-pk.ru/showpost.php?p=769417&postcount=16

Где у меня сейчас затыки.
- В md.c отключены строки 388..395 (в исходном родном Юзиксе они были, с ними будет чуть получше работать многозадачность, хотя и сейчас работает). Но когда они включены в моей адаптации, то все почему-то разваливается. Почему это происходит я пока что не понимаю. Кто решит эту проблему - тому пожизненный респект.
- Клавиатура на прерываниях (опрашивается в tty_poll() ) работает через чур быстро, замедлитель ввода пока не делал, на частотах до 10М мне ловкости ввести без повторных букв пока хватает. :)

UPD 19.01.2015: Таки сделал замедлитель ввода с клавы, теперь набирать команды комфортно. Также из всех дискеток UZIX что у меня были собрал полный пак наиболее свежих бинарников на одну большую партицию UZIX (всего их в образе две считая загрузочную CPM-овскую) - загрузочный образ во вложении (uzix.7z). Одних команд в /bin более сотни, а еще консолидировал маны, конфиги и т.п. Вот к примеру как оно делалось из пустого образа с ФС:

#ucp 2: @filfs.sub

cd /dev
success :end
mkdir /dev
failure exit
cd /dev
umask 0
# mknod -m 664 /dev/fd0 b 0 0
# mknod /dev/rfd0 c 0 0
# mknod -m 664 /dev/fd1 b 0 1
# mknod /dev/rfd1 c 0 1
# mknod -m 664 /dev/fd2 b 0 2
# mknod /dev/rfd2 c 0 2
# mknod -m 664 /dev/fd3 b 0 3
# mknod /dev/rfd3 c 0 3
# mknod -m 664 /dev/fd4 b 0 4
# mknod /dev/rfd4 c 0 4
# mknod -m 664 /dev/fd5 b 0 5
# mknod /dev/rfd5 c 0 5
# mknod -m 664 /dev/fd6 b 0 6
# mknod /dev/rfd6 c 0 6
# mknod -m 664 /dev/fd7 b 0 7
# mknod /dev/rfd7 c 0 7
# mknod -m 666 /dev/null c 1 0
# mknod -m 222 /dev/lpr c 2 0
# mknod -m 666 /dev/tty c 3 0
# mknod -m 666 /dev/tty0 c 3 0
# mknod -m 666 /dev/console c 3 0
# mknod -m 666 /dev/tty1 c 3 1
# mknod -m 666 /dev/tty2 c 3 2
# mknod -m 644 /dev/mem c 4 0
# mknod -m 600 /dev/kmem c 4 1

mknod fd0 060664 0 0
mknod rfd0 020644 0 0
mknod fd1 060664 0 1
mknod rfd1 020644 0 1
mknod fd2 060664 0 2
mknod rfd2 020644 0 2
mknod fd3 060664 0 3
mknod rfd3 020644 0 3
mknod fd4 060664 0 4
mknod rfd4 020644 0 4
mknod fd5 060664 0 5
mknod rfd5 020644 0 5
mknod fd6 060664 0 6
mknod rfd6 020644 0 6
mknod fd7 060664 0 7
mknod rfd7 020644 0 7
mknod null 020666 1 0
mknod lpr 020222 2 0
mknod tty 020666 3 0
mknod tty0 020666 3 0
mknod console 020666 3 0
mknod tty1 020666 3 1
mknod tty2 020666 3 2
mknod mem 020644 4 0
mknod kmem 020600 4 1

cd /
mkdir /tmp
chmod 040777 /tmp
umask 022

mkdir /bin
mkdir /etc
mkdir /usr
mkdir /mnt
mkdir /root
mkdir /home
mkdir /var

cd /usr
mkdir /usr/bin
mkdir /usr/lib
mkdir /usr/src
mkdir /usr/man
mkdir /usr/man/man1
mkdir /usr/man/man6
mkdir /usr/man/man8
mkdir /usr/spool
mkdir /usr/spool/lpd

cd /home
mkdir /home/user
mkdir /home/guest

cd /bin
failure exit
umask 022

bget aal
bget adduser
bget banner
bget basename
bget bogomips
bget cal
bget cat
bget cdiff
bget cgrep
bget chgcpu
bget chgrp
bget chmod
bget chown
bget cksum
bget clear
bget clone
bget cmp
bget cp
bget cpir
bget cr
bget crc
bget cron
bget date
bget dd
bget df
bget dhry
bget diff
bget dirname
bget diskusag
bget dosdel
bget dosdir
bget dosemu
bget dosread
bget doswrite
bget dtree
bget du
bget echo
bget ed
bget false
bget fgrep
bget file
bget find
bget fld
bget fortune
bget grep
bget gres
bget head
bget ic
bget id
bget init
bget inodes
bget key
bget kill
bget ln
bget login
bget lpd
bget lpr
bget ls
bget man
bget mkdir
bget mknod
bget more
bget mount
bget mv
bget ncheck
bget ncr
bget od
bget passwd
bget pathchk
bget pr
bget printenv
bget ps
bget pwd
bget readall
bget reboot
bget renice
bget rm
bget rmdir
bget roff
bget sash
bget setclock
bget sh
bget sort
bget split
bget su
bget sum
bget tail
bget tar
bget tee
bget termcap
bget tget
bget time
bget top
bget touch
bget tr
bget true
bget umount
bget uname
bget uniq
bget uudecode
bget uuencode
bget wc
bget which
bget whoami
bget yes


chmod 0755 aal
chmod 0700 adduser
chmod 0755 banner
chmod 0755 basename
chmod 0755 bogomips
chmod 0755 cal
chmod 0755 cat
chmod 0755 cdiff
chmod 0755 cgrep
chmod 0700 chgcpu
chmod 0755 chgrp
chmod 0755 chmod
chmod 0755 chown
chmod 0755 cksum
chmod 0755 clear
chmod 0755 clone
chmod 0755 cmp
chmod 0755 cp
chmod 0755 cpir
chmod 0755 cr
chmod 0755 crc
chmod 0755 cron
chmod 0755 date
chmod 0755 dd
chmod 4755 df
chmod 0755 dhry
chmod 0755 diff
chmod 0755 dirname
chmod 0755 diskusag
chmod 0755 dosdel
chmod 0755 dosdir
chmod 0755 dosemu
chmod 0755 dosread
chmod 0755 doswrite
chmod 0755 dtree
chmod 0755 du
chmod 0755 echo
chmod 0755 ed
chmod 0755 false
chmod 0755 fgrep
chmod 0755 file
chmod 0755 find
chmod 0755 fld
chmod 0755 fortune
chmod 0755 grep
chmod 0755 gres
chmod 0755 head
chmod 0755 ic
chmod 0755 id
chmod 0755 init
chmod 0755 inodes
chmod 0755 key
chmod 0755 kill
chmod 0755 ln
chmod 4755 login
chmod 0755 lpd
chmod 0755 lpr
chmod 0755 ls
chmod 0755 man
chmod 0755 mkdir
chmod 0755 mknod
chmod 0755 more
chmod 0755 mount
chmod 0755 mv
chmod 0755 ncheck
chmod 0755 ncr
chmod 0755 od
chmod 0700 passwd
chmod 0755 pathchk
chmod 0755 pr
chmod 0755 printenv
chmod 0755 ps
chmod 0755 pwd
chmod 0755 readall
chmod 0700 reboot
chmod 0755 renice
chmod 0755 rm
chmod 0755 rmdir
chmod 0755 roff
chmod 0755 sash
chmod 0755 setclock
chmod 0755 sh
chmod 0755 sort
chmod 0755 split
chmod 0755 su
chmod 0755 sum
chmod 0755 tail
chmod 0755 tar
chmod 0755 tee
chmod 0755 termcap
chmod 0755 tget
chmod 0755 time
chmod 0755 top
chmod 0755 touch
chmod 0755 tr
chmod 0755 true
chmod 0755 umount
chmod 0755 uname
chmod 0755 uniq
chmod 0755 uudecode
chmod 0755 uuencode
chmod 0755 wc
chmod 0755 which
chmod 0755 whoami
chmod 0755 yes


cd /etc
failure exit
umask 022
get group.etc group
get passwd.etc passwd
get termcap.etc termcap
chmod 0644 group
chmod 0644 passwd
chmod 0644 termcap

umask 0
cd /root
failure exit
get aliasrc.rot .aliasrc
get loginrc.rot .loginrc
get uzixlogo.rot .uzixlogo
chmod 0744 .loginrc

cd /usr/lib
failure exit
umask 022
get liberror.txt
get fortune.dat


cd /usr/man/man1
failure exit
umask 022

get basename.1
get bogomips.1
get cal.1
get cat.1
get cdiff.1
get cgrep.1
get chgrp.1
get chmod.1
get chown.1
get cksum.1
get clear.1
get cmp.1
get cp.1
get cpdir.1
get crc.1
get date.1
get dd.1
get df.1
get dhry.1
get diff.1
get dirname.1
get dosdel.1
get dosdir.1
get dosread.1
get doswrite.1
get du.1
get echo.1
get ed.1
get false.1
get fgrep.1
get file.1
get fld.1
get grep.1
get head.1
get kill.1
get ln.1
get login.1
get ls.1
get man.1
get mkdir.1
get mknod.1
get more.1
get mv.1
get passwd.1
get printenv.1
get ps.1
get pwd.1
get rm.1
get rmdir.1
get sash.1
get su.1
get sum.1
get tail.1
get tar.1
get tee.1
get time.1
get top.1
get touch.1
get tr.1
get true.1
get uname.1
get uniq.1
get wc.1
get whoami.1
get yes.1

cd /usr/man/man6
failure exit
umask 022
get banner.6
get fortune.6

cd /usr/man/man8
failure exit
umask 022
get adduser.8
get init.8
get mount.8
get reboot.8
get sync.8
get umount.8

:end

exit

bigmal
20.01.2015, 08:37
А то, что в сообщении #35 zip-архивы не открываются - так и должно быть?

Error404
20.01.2015, 10:10
А то, что в сообщении #35 zip-архивы не открываются - так и должно быть?

Потому что это на самом деле половинки одного архива, а не отдельные целые архивы. Я же пишу в том сообщении:


Как собрать образ из половинок, и утилиты - описаны тут:
http://zx-pk.ru/showpost.php?p=769417&postcount=16

И уже в том сообщении:
"tty-sd5.zip из двух частей собирать так:
cmd> copy /b tty-sd5-001.zip + tty-sd5-002.zip tty-sd5.zip
"

Изначально это были файлы *.zip.001 и .002, но форум не дает выкладывать файлы с таким расширением. Пришлось переименовать.

Я их пока не удаляю, т.к. в них дистро CP/M c базовым ПО, а вот UZIX в "половинках" менее интересен, он болеее полный в образе uzix.7z. И далее я буду использовать как базу тот дистриб, что в .7z.

CP/M в последнем *.7z минимальная, только чтобы запускать UZIX. (партиция CPM то там большая, но я записал туда мало файлов CPM для уменьшения веса архива - опять же у движка форума ограничение: вложение не более 640к)

---------- Post added at 10:10 ---------- Previous post was at 09:54 ----------

ЫЫЫ
df безбожно врет на большой партиции. :)
А на партиции в 720к не врало. Видимо во времена написания этой программы, дискеток в 28мб не было :)

Error404
23.01.2015, 10:45
Предрелиз.

Итого: я запилил/портировал все что хотел и что было в ядре uzix 1.0. Размер ядра имеем 30к (как и планировалось).
Из последних правок:

отлажена работа с системным временем (пришлось поправить CPM-овский driver.sys), теперь корректно работает отображение и установка системного времени - date / setclock
в образе ohi-uzix.7z заменен /bin/setclock - он был битый
допилена работа с прямым доступом к устройствам, теперь корретно работает dd if=/dev/rfd*
пришлось поправить CP/M-овский idebdos.com
попутно исправлен баг долго описывать какой
еще reboot заработал
добавил устройство /dev/zero :)


Дальше буду пилить LIBC.LIB чтобы можно было кодить приклад (т.к. libc для Uzix в природе есть только в исходниках, самой либы нет), в ядре будут только правки ошибок. Как обычно, исходники в первом посте, мой рабочий образ HDD (SD) во вложении этого сообщения

Error404
23.01.2015, 13:36
А на реале кто-нибудь пробовал?

А то я еще с ремонта коробки не распаковывал, в т.ч. и с Орионами, уже полгода как. :v2_dizzy_facepalm:

alx32
23.01.2015, 16:52
А под какой реал-то писАлось? Простой или ПРО?

Error404
23.01.2015, 17:30
А под какой реал-то писАлось? Простой или ПРО?

Простой, на Z80 с прерываниями, включаемыми портом 0FBh, и не менее 512кб памяти (по привычки написал Мб :) ). Т.е. примерно для Ориона-ревизии512.

Теоретически должно заработать и на Орионе-ПРО в режиме совместимости с 128 (на нем прерывания включаются тем же битом того же порта), если там будут и совместимые по портам дисковые контроллеры (IDE или SD).

alx32
23.01.2015, 19:16
Ещё вопрос, образ под SD или IDE?
В выходные хочу достать свой Орион-512 и потестить...

Error404
23.01.2015, 21:12
Ещё вопрос, образ под SD или IDE?
В выходные хочу достать свой Орион-512 и потестить...

Образ универсальный, заливать можно 1:1 хоть на IDE, хоть на SD (изменится только Монитор-загрузчик или пункт в MBOOT). От устройства IDE/SD зависит только как в CP/M должен запускаться драйвер idebdos (он запускается из autoexec.bat перед UZIX). Для IDE он запускается без параметров, для варианта SDCard он запускается с параметром SD.

Если параметр выставлен несоответствующим (т.е. выставлен в варианте для отсутствующего устройства), то просто IDEBDOS не загрузится резидентом и ЮЗИКС не стартанет тоже, останемся в промпте CPM.
Тогда можно будет ручками набрать
idebdos sd
uzix 2:
или
idebdos
uzix 2:

Если IDEBDOS загрузился но криво, его в CP/M можно грохнуть (выгрузить из памяти) командой
kill idebdos*

Также есть особенности монтирования устройств (см. команды ASSIGN в config.sys в user 0), но загрузится при любых настройках, - диск С: будет всегда

Error404
29.01.2015, 15:08
Начал ковырять исходники LIBC.
Первая проблема которую предстоит решить в том, что компилятор прогеры Юзикс на самом то деле использовали какой-то более продвинутый, чем используемая мной сохранившаяся в PublicDomain HitechC CP/M-версия 3.09 образца 1987 года, не понимающая оператор asm("operand") в C-коде, или вот такие ассемблерные конструкции в ASM-коде:


psect text,class=CODE
psect strings,class=CODE
psect const,class=CODE
psect data,class=DATA
psect bss,class=DATA
psect _bssend,class=DATA

или


global _access
signat _access,8250
global _exit
signat _exit,4152 ; arg in DE

Выделенное жирным, HitechC v3.09 образца 1987 года не понимает от слова совсем.

Собственно, это не новость, я с этим столкнулся еще в ядре. Но там этого встречалось мало и я тупо взял и переписал по смыслу. А тут надо будет обдумать и как передаются параметры (v3.09 образца 1987 года не умеет никак кроме как по стеку, а в исходника мы видим размещение в регистрах, причем несколько вариантов в зависимости от числа в signat), и как после С-компиляции сегменты в исполняемом бинаре лягут - надо чтобы в требуемом порядке. :v2_conf2:

Totem
29.01.2015, 18:26
Начал ковырять исходники LIBC.
Первая проблема которую предстоит решить в том, что компилятор прогеры Юзикс на самом то деле использовали какой-то более продвинутый, чем используемая мной сохранившаяся в PublicDomain HitechC CP/M-версия 3.09 образца 1987 года, не понимающая оператор asm("operand") в C-коде, или вот такие ассемблерные конструкции в ASM-коде:


psect text,class=CODE
psect strings,class=CODE
psect const,class=CODE
psect data,class=DATA
psect bss,class=DATA
psect _bssend,class=DATA

или


global _access
signat _access,8250
global _exit
signat _exit,4152 ; arg in DE

Выделенное жирным, HitechC v3.09 образца 1987 года не понимает от слова совсем.

Собственно, это не новость, я с этим столкнулся еще в ядре. Но там этого встречалось мало и я тупо взял и переписал по смыслу. А тут надо будет обдумать и как передаются параметры (v3.09 образца 1987 года не умеет никак кроме как по стеку, а в исходника мы видим размещение в регистрах, причем несколько вариантов в зависимости от числа в signat), и как после С-компиляции сегменты в исполняемом бинаре лягут - надо чтобы в требуемом порядке. :v2_conf2:
забавно UZI180 собрана им. а она вроде позже написана.
ты не смотрел ее исходники?

Error404
29.01.2015, 22:10
забавно UZI 180 собрана им. а она вроде позже написана.
ты не смотрел ее исходники?

Когда-то давно смотрел исходники первой UZI, которая для Z80. Там автор прямо писал, что использовал Codeworks C (который вообщето малоинтересен т.к. не ANSI и не умеет long). А так - да, про UZI Z180 пишут, что использовался HitechC (опять же не пишут какой версии, а про него известна версия 3,09 для Z80, 5.х мультиплатформенная древняя платная - подозреваю ею и компилировали MSX UZIX, и 7х современные платные):
https://groups.google.com/forum/#!topic/comp.os.cpm/xbcVQ8vt_TU

UZI для меня менее интересен чем UZIX, т.к. последний болеее развит, и имеет все исходники (ядро, приложения, libc), а для UZI сохранились только исходники ядра (по крайней мере начальной версии от Z80)

Как бы там ни было, придумал как все будет в LIBC со стареньким HitechC v3.09, осталась мелочь - начать да закончить. :)

Totem
29.01.2015, 22:27
Когда-то давно смотрел исходники первой UZI, которая для Z80. Там автор прямо писал, что использовал Codeworks C (который вообщето малоинтересен т.к. не ANSI и не умеет long). А так - да, про UZI Z180 пишут, что использовался HitechC (опять же не пишут какой версии, а про него известна версия 3,09 для Z80, 5.х мультиплатформенная древняя платная - подозреваю ею и компилировали MSX UZIX, и 7х современные платные):
https://groups.google.com/forum/#!topic/comp.os.cpm/xbcVQ8vt_TU

UZI для меня менее интересен чем UZIX, т.к. последний болеее развит, и имеет все исходники (ядро, приложения, libc), а для UZI сохранились только исходники ядра (по крайней мере начальной версии от Z80)

Как бы там ни было, придумал как все будет в LIBC со стареньким HitechC v3.09, осталась мелочь - начать да закончить. :)
да оно понятно, тебе скинуть исходники? там есть много чего,
может сгодится?
http://s017.radikal.ru/i425/1501/8b/6e81a8317a17.jpg

Error404
30.01.2015, 10:19
да оно понятно, тебе скинуть исходники? там есть много чего,
может сгодится?


Залей пожалуйста на какой-нибудь хостинг?
Погляжу, может что-то там допиливалось интересное.
Интересуют в первую очередь все исходники что есть, и описания.

Totem
30.01.2015, 10:51
Залей пожалуйста на какой-нибудь хостинг?
Погляжу, может что-то там допиливалось интересное.
Интересуют в первую очередь все исходники что есть, и описания.
Хорошо, вечером наверное, пока нашел вот такой интересный момент
по компилятору

#ifndef Hi_TECH_C
/* Speed and code length optimized for Q/C Compiler */
#define ifnull(e) if(e){}else
#define ifnot(e) if(e){}else
#define ifzero(e) if(e){}else
#else /* Define for Hi-Tech Compiler */
#define FALSE 0
#define ifnull(e) if ((e)==0)
#define ifnot(e) if ((e)==FALSE)
#define ifzero(e) if ((e)==NULL)
#endif


вот тут есть он
http://www.z80.eu/c-compiler.html

Error404
30.01.2015, 18:49
Вот кто мне может объяснить.

Имеем такие объявления:


#define S_IFMT 0170000 /* file type mask */
#define S_IFLNK 0110000 /* symbolic link */
#define S_IFREG 0100000 /* or just 000000, regular */
#define S_IFBLK 0060000 /* block special */
#define S_IFDIR 0040000 /* directory */
#define S_IFCHR 0020000 /* character special */
#define S_IFPIPE 0010000 /* pipe */

и в коде ядра всякую целочисленную арифметику (в основном арифметические & | и сравнения) между этими константами (казалось бы не влезающими в int16) и 16bit int.
За каким-то хреном в итоге в ASM:
S_IFREG=0100000 транслируется в 0x8000,
S_IFPIPE=0010000 транслируется в 0x1000
S_IFCHR=0020000 транслируется в 0x2000
и т.п.
Теряюсь в догадках. Какого хека?

shurik-ua
30.01.2015, 18:54
Теряюсь в догадках. Какого хека?
Восьмеричная система.

Error404
30.01.2015, 19:04
Т.е. оно восьмиричное.
А как отличать от десятичных констант, если записано теми же цифирьками.
С шестнадцатиричным префиксом "0x" понятно же, не то что тут...
Шиза с этим вашим С. :)

shurik-ua
30.01.2015, 19:12
А как отличать от десятичных констант
скорее всего во всех исходниках в пределах архива константы в восьмеричной системе - я думаю это перешло от компов pdp-11.

PPC
30.01.2015, 20:13
Отчего именно ТАК переполняется, надо смотреть как в компиляторе устроен алгоритм преобразования строки в int.
А приведение к long не помогает?
В стиле
#define S_IFMT ((long)0170000) /* file type mask */

---------- Post added at 12:13 ---------- Previous post was at 12:12 ----------

Возможно, лидирующие нули означают восьмиричное число. Я и забыл уже :)

Error404
30.01.2015, 20:47
Отчего именно ТАК переполняется, надо смотреть как в компиляторе устроен алгоритм преобразования строки в int.
А приведение к long не помогает?
В стиле
#define S_IFMT ((long)0170000) /* file type mask */

---------- Post added at 12:13 ---------- Previous post was at 12:12 ----------

Возможно, лидирующие нули означают восьмиричное число. Я и забыл уже :)

Не, меня то что С как-то сам с этим разбирается устраивает вполне. Просто я сейчас некоторые функции из LIBC на ассемблере переписал, а раньше они были на С. Соответственно начал с константами разбираться и по первости не сразу врубился, потому что там записано прям рядом такое:
#define S_IFCHR 0020000 /* character special */
#define S_IFPIPE 0010000 /* pipe */
и такое:
#define S_VAR1 8 /* something */
#define S_VAR2 9 /* something */
причем первое - восьмеричное, а второе десятичное. :)

shurik-ua
30.01.2015, 21:28
Подозреваю что в компиляторе где-то прописано(а возможно так сделано по умолчанию и не меняется) что число из восьми цифр считается восьмеричным, а любое другое десятичным.
неспроста там нули в начале. )

Q-Master
30.01.2015, 23:23
Подозреваю что в компиляторе где-то прописано(а возможно так сделано по умолчанию и не меняется) что число из восьми цифр считается восьмеричным, а любое другое десятичным.
неспроста там нули в начале. )

Ну каг-бэ: 0xЧисло - шестнадцатеричная, 0число - восьмеричная. И такое уже очень с давних времен тянется. Количество цифр не играет никакой роли в данном случае.

shurik-ua
30.01.2015, 23:35
0число - восьмеричная. И такое уже очень с давних времен тянется.
Для меня и не только это новость - спасибо )

Totem
30.01.2015, 23:47
uzi180, есть еще 1 сборка,
https://yadi.sk/d/O-fzoyOOeMZ2q

Error404
31.01.2015, 14:55
Переписал syscalls и C0U - это примерно 30% от всего объема работ с LIBC.
С остальным надо разбираться - опять у меня сомнения что взятые от Uzix "исходники LIBC" не в тех регистрах передают параметры в исходники на ASM (т.е. подозреваю что это исходники LIBC не от используемой мной HitechC v3.09, а от более новой). Не проще ли будет из имеющийся CP/M-овской LIBC от v3.09 выгрузить OBJ для стандартных метематических и mem* функций и затянуть в новую, а заново добавить, скомпилировав, только UZIX-зависимые функции (ну или которые в исходниках на pure С)?
Пока сделаю небольшой перерывчик на обдумывание.

Error404
06.02.2015, 19:32
В-общем, изрядно поседев над компилятором, собрал весь LIBC. Попробовал - hello world на этой либе компилируется и даже работает под орионовским ядром UZIX. :)

Во вложении все исходники требуемые для сборки как либы, так и приложений (т.е. + c0u.o) и командник как для сборки libc (makelibc.bat), так и для сборки исполняемого приложения (ucc.bat), т.е. полный инструмент в сборе, чего так не хватало.

После выходных попробую собрать что-то более сложное. :)

Все собирал из исходников для либы uzix 1.0, и реализация longint математики в версии libc-uzi отличается от CPM-овской libc почемуто, надо будет протестить long.

Если будете перепаковывать помните, что есть зависимости порядка размещения модулей в libc-uzi.lib

Error404
07.02.2015, 00:22
(т.к. libc для Uzix в природе есть только в исходниках, самой либы нет)


Кстати, по ходу собирания исходников, и бинарную LIBC от MSX-UZIX нашел в одном из архивов. Но теперь то уж надо запускать вариант из исходников раз он запустился, это дает более вариантов развития. Да и неохота разбираться в старом бинаре что там как передается в варианте от MSX по части параметров/стека/регисторв (есть опять же сомнения).

Error404
17.02.2015, 18:44
Скомпилировал дополнительно несколько бинарей, которых недоставало в общем паке, а именно:

FSCK
MKFS
SLEEP
SED
XARGS
UPD 18.02:
+TEST
+EXPR

Бинари и исходники во вложении. Первые 3 проверил - работают. Sed и xargs я в быту не использую, и поэтому не проверял.

Дальше буду пытаться запустить bourne shell и awk, оба непростые - ХЗ что получится.

UPD 18.02: перезалил архив, скомпилировал и добавил test и expr. Теперь есть бинари всего что когда-то было для UZIX (за исключением TCPIP-related и адаптаций от CP/M), дальше ваяем сами. :)

Error404
21.02.2015, 12:47
Нескучные обои к празднику
http://fixato.net/fixato.co.uk/images/wallpapers/msx/FiXato_Uzix_MelissaJoanHart.png

Чесслово, это не я рисовал. :)

Error404
24.02.2015, 23:55
Скомпилировал awk (OneTrueAWK, если точнее) самой современной версии (потому что ее нашел раньше), в бинаре получилось 84кб, и это со всеми оптимизациями, компилером Hitech C. Т.е. SDCC слепило бы и вообще более 100кб. Понятно, что запустить это невозможно, даже и с "shared libc" (84-16=68 > 58к). Жалко, неделя труда наскоками. :( Но есть и плюс: попутно скомпилировал из исходников библиотеку математики с плавающей точкой (выложу позже с каким-нить паком новых компиляций).

Буду искать awk более престарелых версий. А их есть, например тут:
http://zx-pk.ru/showpost.php?p=783693&postcount=327

Кстати, там же есть исходники и стареньких (а значит небольших) lex, yacc, make... Много чего. :)

Sayman
08.06.2016, 10:45
попытался запустить образ в эмуляторе (http://bashkiria-2m.narod.ru/index/files/0-11), но ни в одном из режимов не работает. В реждиме Orion-SD запускается altair-dos, но idebdos не находит sd. Дайте кто-нить глянуть эмуль на всё это безобразие))?!

Error404
08.06.2016, 13:10
Выложил здесь (https://drive.google.com/file/d/0B3S0wVWNPLrwTzhyejdoaXBXZlk/view?usp=sharing) эмулятор с образом диска с UZIX. Настроено на загрузку в CP/M. В ней когда все прогрузится, набрать "uzix-run"

Sayman
08.06.2016, 13:28
или у эмуля или у системной консоли явно проблемы с клавиатурой.
top делает перепечатку со сползанием по экрану, а не должен этого делать...

Error404
08.06.2016, 14:10
или у эмуля или у системной консоли явно проблемы с клавиатурой.


Телепаты в отпуске. :) Если ты имел в виду "дребезг" в uzix (иногда пробивается несколько символов), я про это знаю, примерно знаю как пофиксить (но оставлено "на потом"): надо отказываться от вызова п/п опроса клавиатуры Монитора-F800 Ориона внутри цикла прерывания (а UZIX только так и делает) ибо эти п/п Монитора не реентабельны, а их еще кроме Юзикса и сам консольный драйвер CP/M вызывает (через который UZIX и работает). Точнее, это в драйвере надо убирать, делать некий дополнительный режим "для Юзикса" - синхронизированный.



top делает перепечатку со сползанием по экрану, а не должен этого делать...
да и фиг с ним, возможно он код "курсор домой" использует не от VT52. Можно было бы посмотреть в исходнике, но и до более важных кусков руки пока не доходят.

b2m
08.06.2016, 22:38
попытался запустить образ в эмуляторе (http://bashkiria-2m.narod.ru/index/files/0-11), но ни в одном из режимов не работает
У Error404 то на F500 винт расположен, то на F600...
Если хочется именно в моём эмуляторе посмотреть, можешь скачать вот этот архив (http://bashkiria-2m.narod.ru/files/b2m_emu_uzix.zip), там только те файлы, которые для эмуляции uzix нужны.

С клавиатурой проблем вроде нет. top у меня один раз обновил экран, потом только допечатывать начал.

Error404
09.06.2016, 00:21
У b2m клава поплавнее как-то работает. В моем наверное частота проца повыше настроена? В-общем ХЗ. Реал допаяю - узнаем как оно там должно работать. :)

Sayman
09.06.2016, 06:52
Раскладка клавиатуры это, конечно, отдельная тема садомазо :v2_dizzy_wall: двоеточие я так и не нашол :v2_wacko:
в эмуле Еррора пробовал и на стоковой частоте и на 10мгц, дребезг клавиатуры жосткий...
переключение по tty видимо не работает пока?
интересный вывод df, показывает free 140%)))

Error404
09.06.2016, 10:06
Раскладка клавиатуры это, конечно, отдельная тема садомазо :v2_dizzy_wall: двоеточие я так и не нашол :v2_wacko:
в эмуле Еррора пробовал и на стоковой частоте и на 10мгц, дребезг клавиатуры жосткий...
переключение по tty видимо не работает пока?
интересный вывод df, показывает free 140%)))

146% же :)

Капризничаешь. :) В моем эмуле двоеточие на двоечии (на мей РС клаве там подписано "ж:;"), у b2m я находил в верхнем ряду (где цифры) что-то вроде на "плюсе" (в одном из регистров).

df правильно показывал на дискетках 720к, а тут у меня UZIX работает в разделе 32768к - ХЗ что там в школе по математике у авторов программы было.
Я даже наперед скажу - там утилиты отображающие занятость ОЗУ тоже врут, т.к. это неперекомпиленные бинарники с UZIX, в которых константно считают что ОЗУ процесса у них 32к, тогда как у меня процессу отдано 58к, а общий объем памяти (свободной и занятой) оно получает реальное значение функцией UZIX.



переключение по tty видимо не работает пока?

Что тут имеется в виду?

Sayman
09.06.2016, 10:35
ХЗ что там в школе по математике у авторов программы было.
в школе Чурова явно были отличниками)))
ФС 16ти битная, может быть до 65535 инодов. тип девайса тут не причём. явно косяк там где-то автор допустил.

Что тут имеется в виду?
ну типа как на пц, по альт+ф2 или альт+ф3 переключает консоли.

Error404
09.06.2016, 13:36
ну типа как на пц, по альт+ф2 или альт+ф3 переключает консоли.

не, эта задача еще ждет своего героя. Консолей вообще реализована пока только одна (/dev/tty0), но я планировал еще две (/dev/tty1, /dev/tty2) т.к. у Ориона есть еще несколько экранных областей (и экранный драйвер CP/M позволяет выводить в любую из них и отдельно от этого делать видимой любую из них).


в школе Чурова явно были отличниками)))
ФС 16ти битная, может быть до 65535 инодов. тип девайса тут не причём. явно косяк там где-то автор допустил.


там кстати, есть еще пара небольших раздельчиков UZIX для экспериментов (по 1mb) - например команду mount проверить. Кстати, на них возможно и df правильно покажет.

http://savepic.ru/10084373.gif

b2m
09.06.2016, 17:08
Раскладка клавиатуры это, конечно, отдельная тема садомазо
Всегда стоит вопрос: делать как на оригинальной клаве эмулируемого компьютера или чтобы знаки совпадали с писишной клавой.
Иногда в программах используется тот факт, что те или иные клавиши расположены рядом, а если их переместить в соответствии с писишной клавой, то программой пользоваться будет неудобно.


df правильно показывал на дискетках 720к, а тут у меня UZIX работает в разделе 32768к
Просто возмутительно, что флопик у тебя на 32Мб. Обычно такие размеры имеют /dev/hdx
Конечно, имя девайса не главное, но есть же какие-то стандарты :)


там кстати, есть еще пара небольших раздельчиков UZIX для экспериментов (по 1mb)
Э.. для информации, а таблица разделов на твоём винте - где? И где подсмотреть её структуру?

Error404
09.06.2016, 18:15
Просто возмутительно, что флопик у тебя на 32Мб. Обычно такие размеры имеют /dev/hdx
Конечно, имя девайса не главное, но есть же какие-то стандарты :)


"как вы яхту назовете..."(с)
Дело в том, что в UZIX были такие имена, а поскольку для начала я планировал использовать родные бинарники (так собственно и есть), то опасался что где-нить может быть привязка к подстроке "/dev/fd". Так то оно конечно легко фиксится при выполнении mknod (имя можно задать любое), но я пока оставил как в оригинале. Опять же, сколько я систем видел из *nix (AIX, Solaris, Linux) - у всех драйвы назывались по-разному, поэтому я пока не имею решения как оно должно бы быть.



Э.. для информации, а таблица разделов на твоём винте - где? И где подсмотреть её структуру?

Используется обычная схема MBR (4 основных раздела, информация о них в первом секторе после загрузчика - со смещением 446); постом выше (http://zx-pk.ru/threads/24501-tekhrazdel-uzix.html?p=873809&viewfull=1#post873809) в спойлере картинка как раз со структурой разделов и их маппингом на устройства /dev/fdX (утилита BD.COM с этого же диска выводит).

У меня отдельный драйвер IDEBDOS (не входящий в UZIX, а работающий под ДОС) обеспечивает блочную работу с IDE/SD (флоппи в UZIX я не внедрял) как расширенные функции BDOS: обслуживает всего 2 физ. устройства (IDE Master/Slave или SDCard) - /dev/fd8,/dev/fd9, по 4 MBR-партиции на каждом (итого 8) - /dev/fd0,/dev/fd2,/dev/fd4,/dev/fd6 и /dev/fd1,/dev/fd3,/dev/fd5,/dev/fd7 соответственно). Если драйвер не установлен или нет носителей IDE/SD, то UZIX не запускается. Параметром при запуске ядра (uzix.com) передается номер партиции с корневой файловой системой - "0:".."7:" (те же номера что в /dev/fdN , где N - номер от 0..7).

В самом Юзикс можно блочно обращаться как к разделам дисков "четного" и "нечетного" (/dev/fdN , где N - номер от 0..7), так и к обоим физическим дискам целиком - от MBR (LBA=0) до MAXLBA через устройства /dev/fd8 и /dev/fd9.
По аналогии с Линуксом это /dev/sdaN,/dev/sdbN (где N был бы номер от 0..3) и /dev/sda,/dev/sdb соответственно.

При этом ядро сохраняет параметры разделов и в низшем уровне проверяет при каждом обращении CRC строки таблицы раздела в памяти к которому идет обращение (чтобы при "пропиле памяти" ничего не порушить на диске) и границы разделов - верхнюю и нижнюю (из ПО никак не получится открыть устройство, затем сделать fseek "кудапопало" и писать за его пределами).

Sayman
09.06.2016, 19:14
вообще говоря наименование дисков у юзикса крайне отвратительное. есть целевое устройство, /dev/ad0. а есть таблица разделов на нём. Каждый диск с раздела образует логическое устройство, которое по гостам bsd именуются слайсами. таким образом имея, скажем, 2 первичных раздела они будут именовать ся как /dev/ad0s1, /dev/ad0s2, /dev/ad0s3 и т.д. А сейчас имея винт или карту с разделами, все они видны по тупому, как hd0, hd1, hd2 и т.д. (или fdX, не суть важно). Первичное устройство отсутствует. Вспоминаем. Можно прочитать весь винт использую dd, если обращаться читать из /dev/ad0, а можно каждый раздел в отдельности через /dev/ad0sX. Удобно. Но у юзикса всё в жутко отсталом виде. Сам по себе юзикс понятия не имеет про таблицы разделов. В коде нет ни строчки об этом. Даже uzi80 этого не умеет. От сюда и костыльные затычки в виде CRC и прочего. Зато, как я понял, это умеет fuzix (там где то был geom.c).
Опять таки, без разницы как девайс тут называется. Есть же суперблок, в нём все параметры. Есть полный размер девайса в блоках, есть кол-во свободных блоков. Значит общее кол-во это и есть 100%, а эта штука мне про 140% говорит))) бугага)))) При чём, версия для мсх тоже такому обучена пахоже)))
Да, и изначально при создании базового uzi автор применил аналогию с FFS или чем-то подобным от bsd2.11 (или старее даже), только в упрощённом виде.

Всегда стоит вопрос: делать как на оригинальной клаве эмулируемого компьютера или чтобы знаки совпадали с писишной клавой.
ПЦ клава существует в текущем виде довольно давно (не считая всяких кнопочек типа win и других подобных). ПЦ клава очень удобна. Лучше поменять раскладку. Естественно, что такие кнопки типа контрола должны играть свою роль, чтобы комбинации типа ctrl+Z давали ^Z и т.д.

Error404
09.06.2016, 19:45
А сейчас имея винт или карту с разделами, все они видны по тупому, как hd0, hd1, hd2 и т.д. (или fdX, не суть важно). Первичное устройство отсутствует. Вспоминаем. Можно прочитать весь винт использую dd, если обращаться читать из /dev/ad0, а можно каждый раздел в отдельности через /dev/ad0sX. Удобно. Но у юзикса всё в жутко отсталом виде. Сам по себе юзикс понятия не имеет про таблицы разделов. В коде нет ни строчки об этом. Даже uzi80 этого не умеет.


UZIX (тем паче UZI) писался для дисковода. Какие, такихперетак, разделы? :)
Тем не менее, для кого-то я постом выше написал, что конкретно в моей реализации можно обращаться к разделам, а можно к целым устройства. Как их при этом называть - дело десятое. Я назвал как мне на тот момент было проще, но если это так важно, ну назови fd8 fd9 как hd0 и hd1. Для этого есть команда mknod. Системе же вообще пофик как они называются, она по минорным и мажорным номерам работает, и по этим номерам чего ты в нижнем уровне выпишешь, то и будет - разделы, устройства, беспилотники бороздящие просторы Вселенной.



От сюда и костыльные затычки в виде CRC и прочего. Зато, как я понял, это умеет fuzix (там где то был geom.c).
Опять таки, без разницы как девайс тут называется. Есть же суперблок, в нём все параметры. Есть полный размер девайса в блоках, есть кол-во свободных блоков. Значит общее кол-во это и есть 100%, а эта штука мне про 140% говорит))) бугага)))) При чём, версия для мсх тоже такому обучена пахоже)))


Костыли типа CRC вставил конкретно я, предполагая, что однажды в систему полезут очумельцы, делающие выводы не читая чего для них расписано. :) Чтобы они не порушили чего-то от незнания.

Sayman
09.06.2016, 19:49
Error404, я потому и написал, что костыль в виде СRC. Т.е. система ни в одном глазу не видит тему геометрии. А когда писался uzi, согласен, пилили его под флоппики, хотя на pdp уже были винты. Опять таки, автор юзикса мог бы и расширить ему способности...
тем не менее, fuzix геометрии обучен, потому подобное там вряд ли произойдёт.
вообще, лучше чтобы он был как самостоятельная ОСь, а не задача для цпма. Но, ты сейчас занят, потому я не настаиваю)))

b2m
09.06.2016, 20:20
Используется обычная схема MBR (4 основных раздела,
Меня просто смутило, что их 10 и порядок несколько странный, но потом понял, что к чему.

OrionExt
09.06.2016, 20:25
Таки прикрутил Error404 UZIX к Орион-128. Хотя я скептически высказывался на эту затею в 2009 году.
И активно поддерживает:)

b2m
09.06.2016, 20:42
Таки прикрутил Error404 UZIX к Орион-128.
Орион-128 + Z80 Card II !

OrionExt
09.06.2016, 20:53
Да куда уж без Z80-карты. Главная и необходимая доработка Ориона, которая дала зеленый свет в мир...
Сори за флуд:)

Error404
09.06.2016, 21:19
Таки прикрутил Error404 UZIX к Орион-128. Хотя я скептически высказывался на эту затею в 2009 году.
И активно поддерживает:)

Ну как поддерживает. Пик энтузиазма был полтора года назад, и уже год я к нему не прикасался. :(
Вот с пайкой Ориона-ПРО закончу, и еще вернусь к программированию, в т.ч. и к Юзикс.

- - - Добавлено - - -


Меня просто смутило, что их 10 и порядок несколько странный, но потом понял, что к чему.

Там предыстория в том, что сначала я портировал в CP/M известную FatFS от ElmChan-а. Сначала в версии 0.3 (где она не знала про партиции и было в его нотации 2 целых диска - 0: и 1: ). Затем в версии 0.4 Чен сделал поддержку разделов, но чтобы нумерация была совместима с дотогошней "0: на первом приводе" и "1: на втором", четные разделы попали на первый привод, а нечетные на второй. Я к этому уже привык и в Юзикс (у которого как я справедливо предполагал будет один пользователь - я) оставил такую же, плюс два устройства для полного доступа. В будущем скорее всего переименую в sda(плюс sda0,sda1,sda2,sda3) и sdb(плюс sdb0,sdb1,sdb2,sdb3).

- - - Добавлено - - -



тем не менее, fuzix геометрии обучен, потому подобное там вряд ли произойдёт.


Предполагаю, там сделано то же самое в виде "теже яйца - вид сбоку". Ибо какая там нынче геометрия? Геометрия была в эпоху CHS, а сейчас тупо сквозная нумерация секторов (LBA): максимум это границы разделов (minLBA, maxLBA) проверить, что у меня и делается.



вообще, лучше чтобы он был как самостоятельная ОСь, а не задача для цпма. Но, ты сейчас занят, потому я не настаиваю)))

В принципе, это сделать можно. Но урывками как это нынче выходит - займет годы :)
Золотые 90-е, и время было и задор. :)

Ewgeny7
31.08.2018, 10:31
UZIX на Орион-2010

https://d.radikal.ru/d24/1808/7b/119e39a7b650.jpg (https://radikal.ru)

Error404
31.08.2018, 16:19
А дальше происходит что-нибудь? Например если ввести логин root ?
А то у меня в эмуляторе (где и писалось) работает прекрасно, а на реале почему-то улетало в обработчике прерываний, такое ощущение как при неподтянутой шине. Отключаешь провод int - и работает, хотя и однозадачно. И не понять толи дело в коде, то ли в реале в реализации int.

vlad
31.08.2018, 16:23
Скорее в таблице векторов и INTA.

Ewgeny7
31.08.2018, 18:45
А дальше происходит что-нибудь? Например если ввести логин root ?

https://b.radikal.ru/b09/1808/39/01712d1d18f2.jpg (https://radikal.ru)

Error404
31.08.2018, 22:05
Фигассе, работает. А прерывания ведь аппаратно реализованы и работают? Дальше вводи команды. :)
Они в /bin
Или в /usr/bin ?
Введи
uname -a
ls /bin
ls /usr/bin
ls -l /bin | more

Ewgeny7
31.08.2018, 22:29
Введи
uname -a
Вывело что-то там uzix 1.0 ORION вроде как. Забыл уже :)


ls /bin

https://c.radikal.ru/c34/1808/d5/517e60201c0f.jpg (https://radikal.ru)



А прерывания ведь аппаратно реализованы и работают?

Да, аппаратные. Настраивал по игрушкам со Спектрума.

- - - Добавлено - - -


ls -l /bin | more

Здесь пока облом. Я когда модуль клавиатуры ваял, счел что символ "|" вряд ли понадобится. Теперь придется его привинчивать. Пошел искать палку для символа.

- - - Добавлено - - -

Команда SED вызывает вместо редактора зависание. Мелочь а сильно неприятно.
Команда YES бесконечно выводит Y с переводом строки.
Команда REBOOT перезагружает систему, как и положено.
Остальные не смотрел.

Error404
31.08.2018, 22:54
SED и YES работают верно. Просто в отличие от СРМ, где например SED это экранный редактор, тут обе утилиты - консольные, получают данные от консоли и туда же выплевывают результат, поэтому редактор "висит" (на самом деле читает stdin где ты ничего не вводишь), а yes - это утилита для автоответа "y" на вопросы всяких программ. Одной программе можно отправлять вывод другой через "конвейер" - ту неприппянную тобой кнопку(символ). В этот момент все они работают в параллель. В общем, Юникс это очень интересно и круто. :)

- - - Добавлено - - -

В СРМ есть кстати штатный аналог - ED (однострочный редактор), очень похож по смыслу, и вообще один из первых редакторов

- - - Добавлено - - -

А у тебя есть Орион с физическим z80? Например Ревизия512 (ты вроде брал такую плату)? Можешь этот образ там попробовать?

Ewgeny7
31.08.2018, 23:29
А у тебя есть Орион с физическим z80? Например Ревизия512 (ты вроде брал такую плату)? Можешь этот образ там попробовать?
Есть... Надо уточнять его работоспособность. Да и SD-привод там на хомячковой тяге, N8M :)
Попробую завтра сделать.

- - - Добавлено - - -


В этот момент все они работают в параллель.
Нееее... в параллель работают процессы в ПЛИС, а тут они работают последовательно, один плюнул, другой утёрся :)

Error404
31.08.2018, 23:44
Очень меня демотивировало тогда что на железном Орионе я получил глюк. А так то в принципе, даже если только О-2010, то тоже вариант. Вот если бы ещё кто актуализировал тему - прошивки последние, howto, вот это вот всё. ;)

- - - Добавлено - - -

Команда date правильную дату показывает?

Ewgeny7
31.08.2018, 23:53
Насчет даты не скажу, не ставил ее.
А прошивка в общем-то одна для всех четырех плат. Как надоест ее рихтовать - можно и залить во все платы о-2010.
Верные часы не обещаю. Для этого надо иметь всем одинаковые внешние часы, чтобы поддержать их программно. Но у всех разные...

Sancho45
01.09.2018, 17:35
А дальше происходит что-нибудь? Например если ввести логин root ?
А то у меня в эмуляторе (где и писалось) работает прекрасно, а на реале почему-то улетало в обработчике прерываний, такое ощущение как при неподтянутой шине. Отключаешь провод int - и работает, хотя и однозадачно. И не понять толи дело в коде, то ли в реале в реализации int.


Дык у меня на железном орионе с z80 тоже работает без глюков вроде, команды выполняет. На плате Рябцова которой..........

Могу потестить что-то конкретное, если надо ........

- - - Добавлено - - -

дату показывает, часы идут ))

https://thumb.ibb.co/hOyFSz/20180901_200747.jpg (https://ibb.co/hOyFSz)

- - - Добавлено - - -

только год после времени показывает

Ewgeny7
01.09.2018, 20:45
https://a.radikal.ru/a25/1809/09/f89872712a3ft.jpg (https://a.radikal.ru/a25/1809/09/f89872712a3f.jpg)

Работает. Но, млин, SD-ридер нужно к чертовой матери переделывать на MSX, иначе уснуть можно, пока оно грузит файлы.

Error404
01.09.2018, 22:23
А ещё лучше допилить софт до третьего варианта схемы на 555ир24 (PVV) и использовать её как самую быструю из возможных реализаций. Но никак руки не доходят. И вообще, сапожник без сапог. Плату Павла тоже пока не запустил.

Ewgeny7
01.09.2018, 22:26
SD-ридер нужно к чертовой матери переделывать

https://d.radikal.ru/d40/1809/9c/51ba8c6a8086.png (https://radikal.ru)

Ня :)

- - - Добавлено - - -


А ещё лучше допилить софт до третьего варианта схемы на 555ир24 (PVV) и использовать её как самую быструю из возможных реализаций
несомненно лучше.

Error404
02.09.2018, 09:20
ПЛИС для любого варианта? Удобно и быстро, если какаянить 5вольтовая, хотя и не лампово. Я вот все эти ПЛИСы так и не освоил, просто уже в чердаке места нет. :)

Sayman
02.09.2018, 09:45
Даёшь игры под uzix!!!

Ewgeny7
02.09.2018, 10:28
Даёшь игры под uzix!!!
Вот кстати, а что вообще есть под ентоты ваши узиксы? Вопрос Сергею, разумеется.

- - - Добавлено - - -


ПЛИС для любого варианта?
Я под MSX заточил.
Просто некий третий вариант от PVV - я не знаю что это такое, не участвовал. Но не думаю, что будут проблемы с ним после ознакомления :)

Error404
02.09.2018, 13:22
Текстовые СРМ-игры должны работать прям искаропки, т.к. любому процессу юзикса при старте даётся окружение где есть недо-эмулятор консоли СРМ (эмулирует только в части экрана и клавиатуры, для полной эмуляции с файлами надо запускать дополнительный бинарь). Т.е. берём игру, под СРМ копируем её с дискетки в партицию(FS) юзикса утилитой UCP.COM, под юзиксом делаем chmod 777 game.com , вуаля, можно запускать. Недавно Максагор текстовые игры для vt52 рекламировал в теме АТМ.

Sancho45
03.09.2018, 06:04
под юзиксом делаем chmod 777 game.com , вуаля, можно запускать.

chmod второй параметр (имя файла) не принимает, пишет no such file or directory. Без разницы, указывать полный путь или относительный или просто имя файла, результат один. я так понял, авто подстановки тоже нет. Может синтаксис какой то др ?

andreil
03.09.2018, 08:09
chmod второй параметр (имя файла) не принимает, пишет no such file or directory. Без разницы, указывать полный путь или относительный или просто имя файла, результат один. я так понял, авто подстановки тоже нет. Может синтаксис какой то др ?
эм. Вообще-то надо указывать своё имя файла, для которого меняются аттрибуты. game.com - имя чисто для образца. У Вас пишет, что данный файл/директория не найден :)

Sancho45
03.09.2018, 08:27
эм. Вообще-то надо указывать своё имя файла, для которого меняются аттрибуты. game.com - имя чисто для образца. У Вас пишет, что данный файл/директория не найден :)

Я разве написАл, что вводил game.com?? Так то я знаю, что такое имя файла и что они отличются.
Улыбает )

Error404
03.09.2018, 09:06
Я пишу с пляжа по памяти как это было бы на современных юниксах. :) Наверняка что-то напутал относительно того как оно в юзиксе. Наберите
man chmod
- должна выйти подсказка по синтаксису. Смысл действия в команде chmod - надо добавить файлу атрибут "исполняемый" (x)

- - - Добавлено - - -

Кстати, изменить атрибуты и делать ещё всякое разное можно ещё и в самой ucp.com в CPM. Вот как например в файле команд отсюда:
https://github.com/serge-404/U.Z.I.X./blob/master/filfs.sub

Там почему-то первый параметр передается как 0777 (с ведущим нулем), файлы указываются без путей, но перед этим в каталог с файлами делается cd

ЗЫ. файл через bget копировали?

andreil
03.09.2018, 12:21
Я разве написАл, что вводил game.com?? Так то я знаю, что такое имя файла и что они отличются.
Улыбает )
Ну мало ли :)

- - - Добавлено - - -


Смысл действия в команде chmod - надо добавить файлу атрибут "исполняемый" (x)
По норме - достаточно выполнить "chmod +x game.com"

- - - Добавлено - - -



Там почему-то первый параметр передается как 0777 (с ведущим нулем), файлы указываются без путей, но перед этим в каталог с файлами делается cd
Ноль - показатель того, что число в восьмеричной СС - 0777 это именно в восьмеричной СС параметр.

- - - Добавлено - - -

А ошибку выдавало именно из-за того, что аттрибуты команда не находила в параметрах - "777" она считала именем файла.

Sancho45
03.09.2018, 16:54
Ноль - показатель того, что число в восьмеричной СС - 0777 это именно в восьмеричной СС параметр.

еще раз улыбнуло.
Если я напишу 0789, ноль тоже будут показателем восьмеричной системы счисления ?
Числа там в 8-ой сс, но 0 - не имеет никакого отношения к этому. Маны в помощь

- - - Добавлено - - -


man chmod
- должна выйти подсказка по синтаксису. Смысл действия в команде chmod - надо добавить файлу атрибут "исполняемый" (x)

там обычный ман,только урезанный, у меня убунта, там полный ман, но синтаксис такой же



ЗЫ. файл через bget копировали?

так и копировал.


Кстати, изменить атрибуты и делать ещё всякое разное можно ещё и в самой ucp.com в CPM.

тоже не полноценная, ошибок не выдает, когда они есть. C др юзеров не получилось закинуть, только с 0. В ней и закидывал в uzix. Время будет, покавыряю........

andreil
03.09.2018, 17:18
еще раз улыбнуло.
Если я напишу 0789, ноль тоже будут показателем восьмеричной системы счисления ?
Числа там в 8-ой сс, но 0 - не имеет никакого отношения к этому. Маны в помощь
Хм...
А как вы маны-то читали? Там везде указано "символьное или восьмеричное представление режима".
http://man7.org/linux/man-pages/man2/chmod.2.html
http://www.opennet.ru/man.shtml?topic=chmod&category=1&russian=2

A numeric mode is from one to four octal digits (0-7), derived by adding up the bits with values 4, 2, and 1. Any omitted digits are assumed to be leading zeros.
Так что 0 не обязателен, но цифры трактуются именно в восьмеричной СС - можете даже исходники глянуть, собственно ;)

Sancho45
03.09.2018, 18:24
andreil, Не пойму, вроде кириллицей пишу. Где вы прочитали, что я указывал на не 8-ую сс??? Это был ответ на нонсенс о том, что ноль должен быть, т.к. является признаком показателем 8-ой сс и из-за его отсутствия ошибка в определении файла.


Ноль - показатель того, что число в восьмеричной СС - 0777 это именно в восьмеричной СС параметр.А ошибку выдавало именно из-за того, что аттрибуты команда не находила в параметрах - "777" она считала именем файла.

Так что 0 не обязателен, но цифры трактуются именно в восьмеричной СС - можете даже исходники глянуть, собственно

Свои посты перечитай те.


Хм...
А как вы маны-то читали? Там везде указано "символьное или восьмеричное представление режима".

Это вообще к чему, я разве утверждал обратное ?

- - - Добавлено - - -

update)

Кстати, изменить атрибуты и делать ещё всякое разное можно ещё и в самой ucp.com в CPM

в самой UCP команда chmod работает, права меняются без шаманства, но в UZIXe никак не хочет.

Ewgeny7
04.09.2018, 21:10
ПЛИС для любого варианта? Удобно и быстро, если какаянить 5вольтовая, хотя и не лампово. Я вот все эти ПЛИСы так и не освоил, просто уже в чердаке места нет.

https://b.radikal.ru/b32/1809/66/d9f3b6f60f16t.jpg (https://b.radikal.ru/b32/1809/66/d9f3b6f60f16.jpg)

Трехвольтовая EPM3064ATC44. Хотел пятивольтовую, но нету. Придется с этой экспериментировать.
Прошивка уже готова (с Ориона-2010 перенес), надо привинчивать к реалу. Модуль использует сигналы с контроллера FDC - шину данных, селект 0xF76x с D14, А0, А1 с шины адреса, RD_n и WR_n с шины управления. Всё это есть на гребенке контроллера дисковода.
Если вдруг заработает - выложу файлы :)

Ewgeny7
05.09.2018, 11:48
Работает.
Как и ожидалось, самым большим тормозом является сам Орион, читалка же быстро гонит байты.

https://c.radikal.ru/c31/1809/b1/c52004e6f350t.jpg (https://c.radikal.ru/c31/1809/b1/c52004e6f350.jpg)

Eltaron
05.09.2018, 12:36
ноль должен быть, т.к. является признаком показателем 8-ой сс и из-за его отсутствия ошибка в определении файла.
Не знаю, как оно в юзиксе, но вообще в юниксах в 0777 ноль - не признак восьмеричной системы (там кроме восьмеричной больше ничего и использовать нельзя), а просто старший октет прав доступа. В нём хранятся признаки SUID, SGID и sticky bit.

Error404
05.09.2018, 14:54
Увы, отпуск закончился. Попробую включиться в траблшутинг (ловлю блох). :)



UCP.COM тоже не полноценная, ошибок не выдает, когда они есть. C др юзеров не получилось закинуть, только с 0. В ней и закидывал в uzix.

Тут надо помнить, что UCP (как и весь Юзикс) взят с MSX и тамошней MSX-DOS без глубокого анализа (не вникал я в мелочи, короче), поэтому некоторые фишки вида "перейти в каталог ДОС=lcd, посмотреть его содержимое=ldir" могут не работать, т.к. в поздних MSX-DOS были подкаталоги (и соответствующие доработки BDOS) которых нет в CP/M (то что есть в Альтаир-ДОС это только эмуляция каталогов, по сути это те же 15 юзеров с ярлычками-именами).

Тем не менее, работать с DOS-файлами в других юзерах (не тех откуда запустили UCP) можно - надо только указывать полное имя CPM-файла такого вида:
<НомерЮзера>:<БукваДиска>:<ИмяФайла.Тип>
Пример: 1:c:1read-me.koi - файл 1read-me.koi из юзера 1 диска С.

Такое поведение возможно благодаря тому что это реализовано в стандартном stdio HitechC

Sancho45
05.09.2018, 20:57
Не знаю, как оно в юзиксе, но вообще в юниксах в 0777 ноль - не признак восьмеричной системы (там кроме восьмеричной больше ничего и использовать нельзя), а просто старший октет прав доступа. В нём хранятся признаки SUID, SGID и sticky bit.

Это пост кому ?

Error404
05.09.2018, 23:09
Это пост кому ?

народ, хватит меряться :)

Добавил на GIT оригинальные исходники и образы дисков от UZIX как они были в MSX (https://github.com/serge-404/U.Z.I.X./tree/master/Original), а также портированные мной на Windows утилиты для работы с файлами в образах DSK и OHI (https://github.com/serge-404/U.Z.I.X./tree/master/WinUtils). А то что-то этого в репозитории не было.

Например, архив исходников приложений (команд) Юзикса теперь есть тут:
https://github.com/serge-404/U.Z.I.X./blob/master/Original/uzix1_0_appsrc.zip
и можно попробовать разобраться с chmod. :)


- - - Добавлено - - -

Чтобы cкомпилировать файлы-бинарники для UZIX (или сам Юзикс, или CPM-утилиты), надо на своем рабочем Windows (было аналогичное окружение и для Линукса, но быстро не найду) в некий каталог распаковать вот этот архив с компилятором+make+эмуляторCPM (https://github.com/serge-404/HI-TECH-C-V3.09), добавить его в переменную окружения PATH, плюс настроить на него (добавить) переменную окружения CPMPATH, и затем компилировать команды/бинарники с помощью коммандника "ucc.bat" (https://github.com/serge-404/U.Z.I.X./blob/master/app/src/ucc.bat) как я это делал с некоторыми из программ (которых изначально не было в виде бинарей, но были исходниками) вот в этом рабочем каталоге (https://github.com/serge-404/U.Z.I.X./tree/master/app/src) (в него еще потребуется добавить LIBC-UZI.LIB (https://github.com/serge-404/U.Z.I.X./blob/master/libc/LIBC-UZI.LIB) и C0U.O (https://github.com/serge-404/U.Z.I.X./blob/master/libc/C0U.O) которые для любителей пожестче тоже можно пересобрать в каталоге libc вот этим коммандником (https://github.com/serge-404/U.Z.I.X./blob/master/libc/Makelibc.bat)). Ядро и утилиты собираются так (https://github.com/serge-404/U.Z.I.X./blob/master/README.md) (или см. в первом посте).

- - - Добавлено - - -


Работает.
Как и ожидалось, самым большим тормозом является сам Орион, читалка же быстро гонит байты.


Байты же гонит Орион, а не читалка. :)
Так что таки да.

Ewgeny7
06.09.2018, 09:18
Байты же гонит Орион, а не читалка
Да ладно делать вид, что не понял :)
Просто соотношение чтение_карты/медитация_СР/М сильно не в пользу последнего.
Но на скорости псевдо-5МГц лучшего ждать и не стОит.
На ПЛИС-версии скорость процессора автоматом поднимается до 10МГц, и то медленно кажется.
Ты своего реала когда дособираешь? Хочу отправить тебе читалку, да только куда ее там пристегивать?

Error404
06.09.2018, 09:38
Да ладно делать вид, что не понял :)
Просто соотношение чтение_карты/медитация_СР/М сильно не в пользу последнего.
Но на скорости псевдо-5МГц лучшего ждать и не стОит.
На ПЛИС-версии скорость процессора автоматом поднимается до 10МГц, и то медленно кажется.


Обычная CP/M (непеределанная - авторская, ОрионСервиса от Бриджиди, лениградская CPM: они все близнецы с малоразличающимся кодом) примерно в полтора раза быстрее АльтаирДос за счет того, что не поддерживаются прерывания и всесь код работает в одной странице (у авторских еще и в одной странице с экраном и с мизерным TPA). Но я не готов на них вернуться, т.к. они не предоставляют привычных мне сервисов, не поддерживают ничего кроме дисковода, мало ОЗУ в ТРА и т.п. Кстати, отдельная тема - графический экран. Орион например при простотре текста большую часть времени рисует буковки или делает скроллинг. При том, схемы подключения карт N8VEM и MSXv1 заметно отличаются по скорости, значит схема от PVV (https://drive.google.com/open?id=15J2R1FDtMXX0mMkhuXdNoGOdYnSBRlA9) (которую я начал полгода назад паять и пока так и не доделал, очень медленно делаю всё железячное) будет еще заметно быстрее. Её тоже хотлось быть для варианта ПЛИС.

Вот кстати, может попробуешь запустить SDOS от PVV (это софт для чтения/записи файлов FAT16 в Ордос) c его схемой? Он где-то тут делал вариант для Ориона, поищу.



Ты своего реала когда дособираешь? Хочу отправить тебе читалку, да только куда ее там пристегивать?

Надо произвести ревизию. У меня есть две собранные платы О-рев.512 (лет 5 назад бывшие рабочими, там же есть контроллеры НГМД, тоже ни разу не проверенные куда можно припаяться), Орион-ПРО рабочий и недоделанная плата в корпус УКНЦ-v2 от Павла (на ней тоже есть контроллер НГМД).
Но пока заняться ревизией железок мешаются то отпуска, то дачно-огородный сезон и прочие отмазки. :) Пока все пробую только в эмуляторе.

Ewgeny7
06.09.2018, 10:45
Обычная CP/M (непеределанная - авторская, ОрионСервиса от Бриджиди, лениградская CPM: они все близнецы с малоразличающимся кодом) примерно в полтора раза быстрее АльтаирДос за счет того, что не поддерживаются прерывания и всесь код работает в одной странице (у авторских еще и в одной странице с экраном и с мизерным TPA).
Так оно делалось наверное только для запуска игрушек с дискеток. В этом случае смысла нет разворачивать ОСь во всю ширь. То есть, она тут выполняет роль той же TR-DOS на Спектруме, наверное :)


Кстати, отдельная тема - графический экран. Орион например при простотре текста большую часть времени рисует буковки или делает скроллинг.
Да, а вывод текстов в СР/М вообще отдельный страшшшшшшный тормоз. В ОРДОС графика летает по сравнению.


Вот кстати, может попробуешь запустить SDOS от PVV (это софт для чтения/записи файлов FAT16 в Ордос) c его схемой? Он где-то тут делал вариант для Ориона, поищу.
Попробую. Только минуту назад завернул последний шурупик в Орион, выдохнул и сказал - "Всё! Готово! Больше не разбирать!" :)

Error404
06.09.2018, 14:25
Попробую. Только минуту назад завернул последний шурупик в Орион, выдохнул и сказал - "Всё! Готово! Больше не разбирать!" :)

А разбирать же не надо, там же у тебя SD на ПЛИС (и останется на тех же адресах F762-F763), только схемную реализацию перепрошить другую.

HardWareMan
06.09.2018, 14:26
Error404, ВНЕЗАПНО выяснится, что JTAG не выведен наружу, да. :)

Ewgeny7
06.09.2018, 14:43
ВНЕЗАПНО выяснится, что JTAG не выведен наружу, да
Ну почему же внезапно....
ОНО НЕ ДОЛЖНО БЫЛО БОЛЬШЕ ПЕРЕШИВАТЬСЯ! :v2_dizzy_biggrin2:

Error404
06.09.2018, 17:27
chmod второй параметр (имя файла) не принимает, пишет no such file or directory. Без разницы, указывать полный путь или относительный или просто имя файла, результат один. я так понял, авто подстановки тоже нет. Может синтаксис какой то др ?

Таки была досадная мелкая ошибка в ядре (UZIX.COM) в модуле SC1.C в процедуре chany в ветке ORI_UZIX где делаются межстраничные пересылки (почему и не проявлялось в UCP - там всё в общем CPM приложении). Пофиксил, закоммитил на GITHUB. Заодно скомпилировал (по своей же инструкции страницей ранее) chmod из исходников - он отличается от старого бинаря (который взят с MSX без перекомпиляции как и большинство прочих) тем что умеет ставить права не только восьмирично, но и символьными параметрами (вот эти вот все o+x, g-w и т.п.). Поправленное ядро и новый chmod во вложении. Кому не лень - проверьте на реале пожалуйста.

Offtop. А уже пора валить с github на, к примеру, gitlab в свете покупки github Мелкомягкими? Как думаете? А то еще свежи в памяти впечатления от того как они жестко надругались над skype.

Sancho45
06.09.2018, 18:38
В командировке сейчас. Буду дома через пару дней, гляну.

Error404
07.09.2018, 16:27
Работают CPM-программы от Uzix-2.0 (https://github.com/serge-404/U.Z.I.X./blob/master/Original/IMAGES/uzix2.0extras.lha). Там бейсик, мультиплан (типа exсel :) ), архиваторы. Но не пробуйте запускать MED из этого пакета - это экранный редактор от MSX явно вызывающий что-то MSX-ное, на Орионе дающее завис.

Поигрался в бейсике (это микрософтовский MBASIC-80) в самописную бредопрограмму, работает, бейсик на диск пишет и читает. :) Есть какие-нить интересные бейсик-программы формата *.BAS для MBASIC? Просто никогда не интесовался васиком.

Пару слов о выполнении CPM-программ в UZIX.
Авторы UZIX сделали эмулятор BDOS+BIOS CP/M, работающий через вызовы UZIX, этот эмулятор не перемещаемый - рассчитан на работу в верхней части области процесса UZIX 2.0 (которая была размером в 48к, а в UZIX 1.0 вообще 32к), этот код прилинкован статически (оригинальный файл CP/M начинается с офсетом 4Ah от начала бинарного юзикс-файла), поэтому все эти "адаптированные" бинари размером под 47к :). В моей реализации UZIX 1.0 области процесса отводится 58к. И эмулятор я наверное переделаю - сделаю его перемещаемым (чтобы не делать гигантские файлы размером в 48-58к с нулями посередине как сделано сейчас) или вообще отдельной сущностью (например, запускаться будет эмулятор с параметром - именем CP/M-файла и его командной строкой - и сам перемещаться под верхушку ОЗУ)

Sancho45
10.09.2018, 07:13
Таки была досадная мелкая ошибка в ядре (UZIX.COM)
Пофиксил
Кому не лень - проверьте на реале пожалуйста.



Проверил. Работает.

Error404
10.09.2018, 16:50
Команда SED вызывает вместо редактора зависание. Мелочь а сильно неприятно.


Оно конечно мы ранее уже выяснили за православный юниксовый SED, но поскольку вот это вот "SED вместо редактирования зависает" очень обидно было, я слепил адаптацию SED.COM от CP/M (экранный редактор). Ну как слепил, тупо записал код SED.COM поверх MED (МСХ-ный редактор с интегрированныйм эмулем CP/М) c офсетом описанным постом ранее. :) И оно заработало, я сам в шоке.
Поскольку имя SED занято православной консольной STDIN/OUT утилитой, то гибрид, полученный в результате издевательста над MED и SED.COM, я обозвал как NANO :) (хелп к нему по-прежнему SED.HLP, и генерируемый файл состояния - SED.SYS). Прошу проверить.

ЗЫ. Конечно есть ложечка дегтя: почему-то CP/M эмуль не отрабатывает сочетание клавишь CTRL+D, а это ни что иное как "курсор вправо", что весьма раздражает (влево, вверх и вниз работают). Пока что для перемещения вправо использую CTRL+U (или можно CTRL+Q D). Кто выяснит почему не работает CTRL+D получит медаль "за взятие Юзикс".

Ewgeny7
10.09.2018, 17:28
я обозвал как NANO
Таки это пгекгасно, но Изя не видит способа, как засунуть кошерный НУНА в образ карты, тем более в дремучий лес какого-то Юзикса, колена Юниксова. :v2_dizzy_hello:

Error404
10.09.2018, 17:54
Есть такие способы:
1:
- закинуть из архива файлы nano , sed.hlp на любой CP/M носитель (предположим, это диск А юзер 8)
- загрузиться в CP/M c того образа где UZIX (т.к. там же в юзер 0 еще есть утилита UCP.COM для обмена с файловыми системам юзикса), выполнить:
idebdos (или "idebdos sd" тут у кого какой носитель)
ucp 2: (т.е. работаем со второй партицией - партиции для IDEmaster или SD: 0,2,4,6 ; партиции для IDEslave: 1, 3, 5, 7 )
UCP> cd /bin
UCP> bget 8:а:nano
UCP> bget 8:а:sed.hlp
UCP> chmod 0755 nano
UCP> exit
uzix 2: (запускаем юзикс, логинимся как root или еще как)


2: Под Виндой копируем файлы в образ сразу в юзиксовую партицию утилитой ucp.exe из набора утилит (https://github.com/serge-404/U.Z.I.X./tree/master/WinUtils) и далее делаем в ней такое же шаманство:

d:\0>ucp

UCP - UZIX filesystem Image filemanager V1.0. Command mode. Type ? for help.

UCP> ?
exit|quit
use [[partitionN:]d:\path\DriveImageFileName.ext]
root [d:]
ls [-l] [dirname[/filename]]
cd dirname
chmod mode name
get DosFilename [UzixFilename]
[b]put UzixFilename [DosFilename]
...
UCP>
UCP> use [B]1:d:\uzix.ohi

тут надо указать "1" т.к. в версии для Windows номер партиции UCP передается как порядковый считая с нуля. У нас в образе такие партиции:
CP/M (0) <- загрузочная и сервисная
UZIX (1) <- основная, где все файлы, ее и указываем !
UZIX (2) <- пустая для экспериментов
UZIX (3) <- пустая для экспериментов

UCP> use
fd0: 1:d:\uzix.ohi
fd1:
UCP> ls
error: root device not mounted
UCP>
UCP> root 0:
UCP> ls
./ ../ dev/ tmp/ bin/
etc/ usr/ mnt/ root/ home/
var/
UCP>
UCP> cd bin
UCP> bget nano
UCP> bget sed.hlp
UCP> chmod 0755 nano
UCP> exit

Пишем образ на диск, загружаемся с него, idebdos [sd], uzix 2:

:)


UPD 2019: Или использовать плагины TotalCommander/DoubleCommander (https://zx-pk.ru/threads/24501-tekhrazdel-uzix.html?p=1013490&viewfull=1#post1013490)

Ewgeny7
10.09.2018, 17:56
далее делаем в ней такое же шаманство:
дяденька, я теперь прекрасно понимаю, почему в финал вышел Билли Гей-тссс с его досом и виндой.
Я, как истинная домохозяйка и блондинка, понял из приведенной простыни только слово exit :)

Error404
10.09.2018, 18:01
дяденька, я теперь прекрасно понимаю, почему в финал вышел Билли Гей-тссс с его досом и виндой.
Я, как истинная домохозяйка и блондинка, понял из приведенной простыни только слово exit :)

Вот!
Вот так же я смотрю в ваши VHDL (хотя казалось бы, Паскаль то я прекрасно знаю). :)

- - - Добавлено - - -

Впрочем, я подумываю добавить работу c партициями Юзикс в свои плагины пофайловой работы с образами CPM (ODI/OHI) для ТоталКомандера (https://github.com/serge-404/OriZEmu/tree/master/UTILS/OdiWcx-OhiWcx) (т.е. и ДаблКомандера и Фар). Такое осваиваемо?

Ewgeny7
10.09.2018, 18:13
UCP> root 0:
Вот на этой сказке всё и кончается, окошко закрывается. Вылетаем.
Возможно, виновато то, что у меня файло лежит на диске С, в корне.
Соответственно, строка подключения выгдядит чуть иначе -
use 0:c:\uzix.ohi
use
fd0: 0:c:\uzix.ohi
fd1:

- - - Добавлено - - -


для ТоталКомандера (т.е. и ДаблКомандера и Фар
Я помню, что они там что-то могли когда-то. Типа .trd и .scl открывать, и вроде даже по .ohi лазить умудрялись.
Ну да дедушка тоже раньше много чего мог, а вот чичаз....
В общем, буду благодарен за тыкомордие в этом направлении (что скачать, где, куды засунуть и что нажать).

- - - Добавлено - - -


хотя казалось бы, Паскаль то я прекрасно знаю
Паскаль последователен в исполнении. А тут исполняется всё сразу!!! Это невероятная движуха, где всё влияет на всё! :)

- - - Добавлено - - -

Что странно, на микроконтроллерах я давно сижу на Си, и очень уютно. А вот verilog для ПЛИС ну никаке не войдет в мою жизнь, не лэзет.

Error404
10.09.2018, 18:28
Вот на этой сказке всё и кончается, окошко закрывается. Вылетаем.
Возможно, виновато то, что у меня файло лежит на диске С, в корне.
Соответственно, строка подключения выгдядит чуть иначе -
use 0:c:\uzix.ohi
use
fd0: 0:c:\uzix.ohi
fd1:


тут надо указать "1" как и в моем примере двумя постами ранее - 1:c:\uzix.ohi
В версии для Windows номер партиции для UCP.EXE (в командной строке при вызове или в команде USE) передается как порядковый считая с нуля. У нас в образе такие партиции:
CP/M (0) <- загрузочная и сервисная
UZIX (1) <- основная, где все файлы, ее и указываем !
UZIX (2) <- пустая для экспериментов
UZIX (3) <- пустая для экспериментов



Я помню, что они там что-то могли когда-то. Типа .trd и .scl открывать, и вроде даже по .ohi лазить умудрялись.
Ну да дедушка тоже раньше много чего мог, а вот чичаз....
В общем, буду благодарен за тыкомордие в этом направлении (что скачать, где, куды засунуть и что нажать).


Это направление дедушка еще планирует доделывать (тут главное понять надо ли кому, сам то я и с UCP справляюсь). :) Там пока только CPM поддерживается. Ты вообще как с двухпанельными коммандерами вообще и TotalCommander/DoubleCommander/Far - на короткой ноге? Когда-нибудь плагины в них использовал?

Sancho45
10.09.2018, 19:51
тут образ uzix включая исправленный uzix.com chmod nano и sed.hlp в юзере 0 (https://yadi.sk/d/FZgzaENrCqeiMw)

- загрузиться в CP/M c этого образа UZIX (т.к. там же в юзер 0 еще есть утилита UCP.COM для обмена с файловыми системам юзикса), выполнить:
idebdos (или "idebdos sd" тут у кого какой носитель)
ucp
root 2:
UCP> cd /bin
UCP> bget chmod
UCP> bget nano
UCP> bget sed.hlp
UCP> chmod 0755 nano
UCP> exit
uzix 2: (запускаем юзикс, логинимся как root или еще как)

- - - Добавлено - - -

у меня с мастер IDE загрузка, путь в bget не указываю, по умолчанию идет с user 0 в /bin

- - - Добавлено - - -

Только этот nano у меня пишет sed что - то там и load
потом подвисает

- - - Добавлено - - -

завтра буду поглядеть

- - - Добавлено - - -

Да,делал chmod 777 nano, без нуля :)

- - - Добавлено - - -

На всякий :)

Ewgeny7
10.09.2018, 20:36
тут главное понять надо ли кому, сам то я и с UCP справляюсь
Думаю, что лицемерить не стОит, пользоваться этим будут полтора человека. На волне интереса - два с половиной. Поэтому спроси у своей лени.



Ты вообще как с двухпанельными коммандерами вообще и TotalCommander/DoubleCommander/Far - на короткой ноге?
Нууууу.... ээээээ... даааа.... В общем, пользоваться нортоном я умею более-менее. Это одна из причин, почему я люблю Орион, а не РК. Как говорится, нюансы найдите сами :)
Я не считаю, что эти инструменты прям уж сильно удобны, Проводник мне нравится гораздо больше. Но пользоваться с горем пополам можно.



тут надо указать "1" как и в моем примере двумя постами ранее - 1:c:\uzix.ohi
Ага, пойду пробовать.
Я посчитал, что раз диск используется основной, "нулевой", то нужно ноль и указывать.

- - - Добавлено - - -

Сегодня Вин10 встала не с той ноги, отказывает в доступе на запись во флешку, даже из-под админа повершелла. Это у нее бывает, фаза Луны чуть сместится, и запись пойдет.

- - - Добавлено - - -

https://a.radikal.ru/a27/1809/30/3ff355d7aa71.png (https://radikal.ru)

Error404
10.09.2018, 21:59
Только этот nano у меня пишет sed что - то там и load
потом подвисает


А если указать параметр - имя редактируемого файла? Например так:
cd /bin
nano sed.hlp


Файл указать из текущего каталога, т.к. сомневаюсь что эмулятор CP/M переваривает пути (в оригинальной CP/M их же нет)

- - - Добавлено - - -


спроси у своей лени.


Да я давно спрашиваю. Там шибко дофига делать, поэтому лень все время отвечат "ну нафиг". Посмотрим по обстоятельствам.
На счет "проводник удобнее" это конечно вопрос вкусов, мне например удобнее делать дело с клавиатуры, где проводник вообще не конкурент 2-панельным командерам. И что самое главное, интегрировать дополнительные псевдо-ФС в проводник поседеешь (проще аналогичный проводник с нуля написать), а в панельники в виде плагинов гораздо проще, это есть почти у всех их.

Sancho45
11.09.2018, 18:32
А если указать параметр - имя редактируемого файла? Например так:
cd /bin
nano sed.hlp


Файл указать из текущего каталога, т.к. сомневаюсь что эмулятор CP/M переваривает пути (в оригинальной CP/M их же нет)


Да, если файл указать, то работает до поры. При редактировании,в конце строки, все зависло. Как будет время, разберусь что к чему ...

Ewgeny7
11.09.2018, 22:45
Error404, как астрологи и предсказывали, сегодня образ записался на карту.
Но там то ли олени не пржевальского, то ли ветер не с той стороны, но команда SED на реале... вешает комп намертво. Вероятно, шаманства с утилитой было недостаточно.

- - - Добавлено - - -

Так, понял, местная живность тут не при чем. Главный олень - это я.
cd /bin
nano
и всё работает.

- - - Добавлено - - -

LOAD: sed.hlp

https://d.radikal.ru/d04/1809/e8/f68b8bda1bcat.jpg (https://d.radikal.ru/d04/1809/e8/f68b8bda1bca.png)

Хоть спустя 8 лет, но почитать про команды редактора :)

- - - Добавлено - - -

клавишный ввод в юзиксе - это такой изощренный вид адского наказания, ебипетская казнь.

- - - Добавлено - - -


А если указать параметр - имя редактируемого файла? Например так:
cd /bin
nano sed.hlp
Ну надо же, вверху это уже расписано было :)

Error404
20.09.2018, 01:05
Оно конечно мы ранее уже выяснили за православный юниксовый SED, но поскольку вот это вот "SED вместо редактирования зависает" очень обидно было, я слепил адаптацию SED.COM от CP/M (экранный редактор). Ну как слепил, тупо записал код SED.COM поверх MED (МСХ-ный редактор с интегрированныйм эмулем CP/М) c офсетом описанным постом ранее. :) И оно заработало, я сам в шоке.
Поскольку имя SED занято православной консольной STDIN/OUT утилитой, то гибрид, полученный в результате издевательста над MED и SED.COM, я обозвал как NANO :) (хелп к нему по-прежнему SED.HLP, и генерируемый файл состояния - SED.SYS). Прошу проверить.

ЗЫ. Конечно есть ложечка дегтя: почему-то CP/M эмуль не отрабатывает сочетание клавишь CTRL+D, а это ни что иное как "курсор вправо", что весьма раздражает (влево, вверх и вниз работают). Пока что для перемещения вправо использую CTRL+U (или можно CTRL+Q D). Кто выяснит почему не работает CTRL+D получит медаль "за взятие Юзикс".

Как я уже говорил, в исходном Uzix CPM-эмулятор линковался к каждому CPM-файлу, причем неперемещаемо, отчего ВСЕ файлы были размером 47к. И что бы запустить еще какой-то новый CP/Mфайл, его надо было таким же образом слепить с эмулятором получив 47-килобайтный гибрид. Коряво, вы скажете, и будете правы! :) Поэтому я всё переделал. Теперь эмулятор отдельно, а котлеты{зачеркнуто} CP/M-файлы отдельно (и их вообще не меняем, достаточно их тупо скопировать на файловую систему Юзикса и дать права на исполнение).

Как всё работает:
при старте приложения (вызов execve() ) Юзикс проверяет атрибут "исполняемый файл", байт 0C3h в первом байте кода файла (для всех), и имя файла на наличие 3-символьного расширения. Исполняемые бинарные файлы с 3-символьным (строго 3) расширением считаются файлами эмулятора и одновременно с загрузкой исполняемого файла в озу процесса, ищется грузится и эмулятор /usr/lib/emu.* (у эмулятора расширение ставится такое же как у исполняемого файла этого типа!). Т.е. для исполняемых файлов CP/M (у которых расширение .com) это будет /usr/lib/emu.com.

Файл эмулятора в первых 6 байтах содержит:
- сигнатуру "E",0C9h (0C9h чтобы при попытке выполнить его самостоятельно {а не запуском файла с нужным расширением} сразу происходил RET)
- адрес загрузки в пространстве запускаемого процесса
- стартовый адрес куда передается управление после загрузки исполняемого бинарника и бинарника эмулятора (обычно этот адрес внутри эмулятора).

Эмуляторов (и эмулируемых окружений) может быть несколько и эмулятор указывать не надо, достаточно давать бинарям с других платформ соответствующие 3-символьные расширения в именах файлов (ну и конечно иметь нужный эмулятор в /usr/lib/).
Пример запуска:
sed.com text.txt # запустятся sed (на редактирование файла text.txt) и эмулятор CP/M /usr/lib/emu.com
game.spc # запустятся игра и эмулятор Специалиста /usr/lib/emu.spc

Поправленное - во вложении (и на GIT). Сегодня уже поигрался в King, Ladder ну и конечно же sed. Как добавить: ядро uzix.com кладем в образ в юзер0 вместо старого, остальное, предположим, в юзер 4 (диска С). А далее (внимательнее: первый get, затем все bget):

idebdos {или idebdos sd}
ucp 2:

UCP>
UCP> cd /usr/lib/
UCP> get 4:c:liberror.txt
UCP> bget 4:c:emu.com
UCP> chmod 744 emu.com
UCP> cd /bin
UCP> bget 4:c:king.com
UCP> bget 4:c:ladder.com
UCP> bget 4:c:ladder.dat
UCP> bget 4:c:sed.com
UCP> bget 4:c:sed.hlp
UCP> chmod 744 king.com
UCP> chmod 744 ladder.com
UCP> chmod 744 sed.com
UCP> exit

uzix 2:

- - - Добавлено - - -

А вот кстати вопрос. Какие интересные 8-битные платформы проца 8080/Z80, работающие через некую документированную керналь вызовов (т.н. "Монитор"), можно эмулировать в случае с Юзикс где свободное ОЗУ с 0000 (строго говоря с 0100H, но можно и с 0000) до 0E800h т.е. низшие 58кб? Вызовы в верхние 6кб недопустимы, т.е. отпадают РК-86 и Ордосовское от Ориона (т.к. эта недосистема не содержит в себе кернали для вывода на экран и ввода с клавиатуры, и всё ордосовское ПО лезет за этим прямо в МониторF800). Идеально получается CP/M (что уже сделано), и наверное Специалист с его ПЗУ Монитора с 0С000h (вроде) эмуляцию которого можно попробовать сделать. А что еще?

Error404
20.09.2018, 15:43
Тишина... Все в Кинга залипли что ли? :)

Ewgeny7
21.09.2018, 08:33
Тишина...
Аааааааааа!!!! Ты воистину крут, о Повелитель Юзикса! :)



Все в Кинга залипли что ли?
Кто такой Кинг? Стивен? Конг? Артур??? о_О
Только наткнулся на твой пост, будем осваивать.

Vasily
21.09.2018, 08:38
Добрый день.

У ЮТ-88 свободно до #E000, далее идет
#E000-#E7FF - видео-ОЗУ (2КБ),
#F400-#F7FF - ОЗУ монитора-F (1КБ),
#F800-#FFFF - ПЗУ монитор-F.

Спасибо.

Error404
21.09.2018, 12:37
Кто такой Кинг? Стивен? Конг? Артур??? о_О
Только наткнулся на твой пост, будем осваивать.

игра king в том архиве. Текстовая стратегия типа "президента", ну чуть попроще. Моего производства, на ТрубоПаскале, на базе исходника сокурсника со всякими доделками. К сожалению, исходники king утеряны (как и много другого что было вынесено на дискетах в сарай в конце 90х и спасено оттуда уже много позднее на волне интереса от данного сайта). Ladder из архива (текстовый Lode Runner) тоже работает. Еще попробовал Турбо-Паскаль (работает) и оригинальный MBаsic - Microsoft Basic (тоже работает, брал последнюю версию от 81 года).

Оригинальный MBаsic лучше того "со встроенным эмулятором" что я ранее тут размещал (как и любой оригинальный бинарник) тем, что отдельный эмулятор садится под самый верх ОЗУ процесса и CP/M-приложению остается максимум ОЗУ (TPA=56к как в лучших образцах Орионовских CP/M), это дает возможность выполнять программы максимального объема. А в "гибридных" 47к-шных версиях TPA лишь 45кб.

- - - Добавлено - - -


Добрый день.

У ЮТ-88 свободно до #E000, далее идет
#E000-#E7FF - видео-ОЗУ (2КБ),
#F400-#F7FF - ОЗУ монитора-F (1КБ),
#F800-#FFFF - ПЗУ монитор-F.

Спасибо.

К сожалению не получится внедрить. Тут фишка в чем: в коде выполняемого приложения не должно быть вызовов выше (условно) 0E000h, т.к. там уже код эмулятора и самого Юзикс. Т.е. все приложения напрямую лезущие в вызовы Монитора расположенного к примеру на F800 (как во многих советских ПК) будут выполнять криминальный код - все эти Мониторы нереентабельны, и/или не учитывают включенные прерывания, и/или нетолерантны к многостраничному коду (как в случае с Орионом где большинство подпрограмм можно вызывать только из страницы 0). Поэтому вызовы этого исполняемого кода должны попадать в эмулятор (который должен садиться по адресу тамошнего ROM-BIOS или RAM-BIOS т.е. ниже E800), который транслирует их в аналогичные вызовы ядра Unix. Или менять код программ подставляя туда вызовы BIOS на другие (эмулируемые) адреса, что делать категорически не хочется (ибо сложно).

Error404
21.09.2018, 17:52
Небольшой апдейт.
Добавлена возможность выходить из UZIX обратно в CP/M. Для этого поправлено ядро (UZIX.COM) и сделана команда halt (ее надо положить в /bin). Еще в ядре модифицирована обработка кода ctrl+D и теперь в sed.com (да и прочих в эмуле CPM) работает кнопка "вправо". Также что-то еще правил в эмуляторе CP/M emu.com, поэтому еще прикладываю и его (хотя возможно работает и вчерашний).

Также сегодня нарыл случайно такое: quatris.com - символьный тетрис. :) Аж 1989 года - новьё! В CP/M уже работает (я его настроил для VT-52 - ручками, предложенная автором утилита не умеет), в UZIX поначалу тоже работал, но потом я что-то сделал (то ли в UZIX, то ли в quatris.com, то ли в emu.com) и оно в UZIX работать перестало (вроде?), хотя в CP/M по-прежнему работает. Там код на Турбопаскале, а он зараза еще проверяет контрольную сумму той области где коды терминала (который я правил). Так что ХЗ, надо проверять. На всякий прикладываю исходный архив quatris.lbr (где изначально настроено под какой-то мутный терминал) и утилиту для распаковки LBR-архивов lt31.com.

UPD. Новая вводная по тетрису. В Юзикс с эмулятором CPM y QUATRIS.COM почему-то сваливается подгрузка файла таблицы рекордов (QUATRIS.SCO), достаточно выполнить его удаление (rm quatris.sco) и тетрис в UZIX снова начинает запускаться. Кстати, аналогично не работает подгрузка состояния и в KING.COM. А сохранение и там и там работает нормально. Обе программы на Турбопаскале написаны. А другие проги (sed.com, mbasic.com) загружают файлы нормально, и сохраняют нормально. Где-то недосмотр в эмуляторе, надо разбираться.

Error404
22.09.2018, 12:34
Небольшой апдейт.
Добавлена возможность выходить из UZIX обратно в CP/M. Для этого поправлено ядро (UZIX.COM) и сделана команда halt (ее надо положить в /bin).

Вобще, в перспективе надо написать (или скопипастить) скрипт shutdown который будет гасить сервисы, делать killall, umount (команды reboot и halt этого не делают), и вызывать reboot/halt в зависимости от переданных в shutdown параметров.

Error404
03.10.2018, 20:51
Скомпилировал расширенную версию команды ls - чтобы было плюс-минус как на современных Юниксах, плюс оно теперь собирается из исходников (они были, но были некомпилируемые, плюс я кое-что добавил/поправил по мелочи для удобства в функционировании). Список ключей выводится по "ls -h", они примерно такие же как на моем AIX (сравнил выборочно).
Добавлено на git (https://github.com/serge-404/U.Z.I.X./tree/master/app/src/ls)

PS. в шелле sash (дефолтном в том образе Юзикса) есть свой встроенный примитивный ls (hardcoded), чтобы вызывать навороченный внешний ls надо вызвать его явно (/bin/ls) или переименовать.

andreil
03.10.2018, 22:27
Error404, Завтра думаю сесть за сырцы, как закончу с платкой. Может что перетяну ещё из современных *NIX.

Error404
04.10.2018, 01:10
Для TS-Conf с Zifi и для ZX Next реально Uzix переделать, или даже ELKS: http://elks.sourceforge.net ?

Безотносительно ZIFI, запилить UZIX или FUZIX можно на любые разновидности ATM, в т.ч. и на TS-Conf. Или на другие клоны с Z80 где есть MMU, позволяющий переключение страницами более 32к (в страницах 16к как мы уже тут в соседней теме по FUZIX убедились не хватает места). В своё TODO я уже занес доработку по вынесению всей аппаратно-зависимой части (в основном это управление страницами и многостраничное выполнение кода, плюс также п.п. работы с носителем и консолью) в отдельный модуль на АСМ (он получится порядка 4-5кб), а С-ядро сделать полностью аппаратно независимым, работающим с ASM-модулем через стандартизированную керналь. От платформы к платформе будет меняться только этот ASM-модуль, а само ядро Юзикса и все его бинарники будут бинарно совместимые от платформы к платформе (как например в моей реализации работают почти все бинарники от Юзикса MSX без какой-либо перекомпиляции). Но это очень муторные работы, связанные с перепиливанием большого количества кода без моментального видимого эффекта, поэтому за них браться пока что лень. Поэтому я пока делаю что попроще и побыстрее, пока "прёт". :)

Что до поддержки сети, то например в FUZIX внедряют uIP, который у меня уже есть поправленный под HiTech C и скомпилированный под CP/M (https://github.com/serge-404/AltairDOS/tree/master/App/source/uIP), его можно было подумать как прикрутить, но он функционально неудобен, там нет BSD-сокетов (пока не вникал решили ли это как-то в FUZIX) и поэтому для него очень мало приложений (на него трудно портировать). И это не для ZIFI в чистом виде, а для простого сетевого адаптера вида "послал пакет - принял пакет" (в ZIFI такого функционала нет AFAIK {пилят в соседней теме но пока увы} - там нечто свое особенное более высокоуровневое и от того менее способное к прикручиванию в "куда угодно").

Вообще, FUZIX более мейнстримовая ветка, но там все сильно усложнено (у меня вызвало отторжение, т.к. есть с чем сравнивать - я еще с исходниками Брауна начинал {UZI}, на порядок более понятно организованными), и для сборки обязательно нужен РС. А я планирую в итоге чтобы Юзикс сам собирал Юзикс на Z80. :)

- - - Добавлено - - -


Error404, Завтра думаю сесть за сырцы, как закончу с платкой. Может что перетяну ещё из современных *NIX.

будут вопросы или косяки выплывут (например что-то не собирается) - пиши. Совместными усилиями победим.

andreil
04.10.2018, 08:36
Error404, Есть исходники компилятора и среды CP/M для ПК? А то в репах только виндовая бинарь =/

- - - Добавлено - - -

Или хотя бы компилятора исходники - а то всё приходится через Wine запускать :)

Error404
04.10.2018, 09:49
Error404, Есть исходники компилятора и среды CP/M для ПК? А то в репах только виндовая бинарь =/

- - - Добавлено - - -

Или хотя бы компилятора исходники - а то всё приходится через Wine запускать :)

Я использую эмулятор CP/M сэнсея Мураками (http://hp.vector.co.jp/authors/VA000084/)- архив cpm32_04.zip (http://ftp.vector.co.jp/57/78/2156/cpm32_04.zip), в том же архиве есть исходники на C (самого эмулятора) и ASM (кодового блока движка Z80/Z180). Версия для Win32 PC, но консольная, портануть на Линух думаю будет не сложно.

Сам компилятор С (Hitech C) - он нативный для Z80, от него исходников нет (только если дизассемблировать). Если бы и были, думаю портировать его на Линукс в виде из исходников было бы не просто, проще запускать под эмулем CP/M (в среде Z80).

Еще посмотри вот на этой странице (http://uzix.sourceforge.net/uzix1.0/index.php?page=down&lang=us) по подстроке "Linux" - там то что делали наши предшественники в плане среды сборки под Linux



Может что перетяну ещё из современных *NIX.

Могу предложить чего хотелось бы адаптировать (по ссылкам старенькое не переусложненное, примерно времён UNIX V7):
1. Bourne shell - one (https://github.com/serge-404/U.Z.I.X./tree/master/app/Extras/bourne) or two (https://github.com/EtchedPixels/FUZIX/tree/master/Applications/V7/cmd/sh) or three (https://github.com/serge-404/U.Z.I.X./tree/master/app/Extras/bourne-sh/sh) or ...
2. Vi editor- one (https://github.com/serge-404/U.Z.I.X./tree/master/app/Extras/SteVIe) or two (https://github.com/serge-404/U.Z.I.X./tree/master/app/Extras/VI-EX) or three (https://github.com/EtchedPixels/FUZIX/tree/master/Applications/levee) or four{stevie} (http://www.znode51.de/germany/uzi280/) or ...
3. ...

Error404
04.10.2018, 14:58
ЗЫ. флейм позже унесу в отдельную ветку.

Офтоп перенес сюда:
http://zx-pk.ru/threads/29581-dialogi-o-platformakh-protsessorakh-i-operatsionnykh-sistemakh-dlya-retrostroitelya.html

andreil
05.10.2018, 21:59
Я использую эмулятор CP/M сэнсея Мураками (http://hp.vector.co.jp/authors/VA000084/)- архив cpm32_04.zip (http://ftp.vector.co.jp/57/78/2156/cpm32_04.zip), в том же архиве есть исходники на C (самого эмулятора) и ASM (кодового блока движка Z80/Z180). Версия для Win32 PC, но консольная, портануть на Линух думаю будет не сложно.
Вся проблема в генерируемом АСМе - современный GCC его не понимает :(
Попробую ещё повозиться. А нет - буду на виртуалке собирать.

Error404
05.10.2018, 22:38
Вся проблема в генерируемом АСМе - современный GCC его не понимает :(
Попробую ещё повозиться. А нет - буду на виртуалке собирать.

Не понял. Какой именно АСМ ты скармливаешь GCC? Движка Z80?

andreil
05.10.2018, 23:37
Не понял. Какой именно АСМ ты скармливаешь GCC? Движка Z80?
(я про CPM32_04)
Там при сборке генерится файл em180.asm (если его не было). Вот там и .... самый форменный =/
Попробую найти АСМ, который скомпилит его...

mastermind
07.10.2018, 18:44
(я про CPM32_04)
Там при сборке генерится файл em180.asm (если его не было). Вот там и .... самый форменный =/
Попробую найти АСМ, который скомпилит его...
https://github.com/MockbaTheBorg/RunCPM - этот эмулятор не годится? Он уже кросплатформенный, ничего допиливать не надо.

andreil
07.10.2018, 22:04
https://github.com/MockbaTheBorg/RunCPM - этот эмулятор не годится? Он уже кросплатформенный, ничего допиливать не надо.
Хм, спасибо за наводку - делаю SUBMIT-файл для сборки UZIX в CP/M :) Пока что первые два этапа создания идут успешно, благо там всё просто ещё...

andreil
08.10.2018, 10:51
Хм, при сборке утилит проблема:

A0>c -x -DORI_UTILS bd.c utils.lib
HI-TECH C COMPILER (CP/M-80) V3.09
Copyright (C) 1984-87 HI-TECH SOFTWARE
unix.h: Cy=()
405: int (*dev_init) (uchar minor);
, expected ^
406: int (*dev_open) (uchar minor);
, expected ^
types.h:
25: typedef uchar bool_t;
, expected ^
26: typedef uint count_t;
, expected ^
30: typedef uint size_t;
, expected ^
47: uint t_time;
; expected ^
^ no identifier in declaration
unix.h: Cy=()
405: int (*dev_init) (uchar minor);
, expected ^
406: int (*dev_open) (uchar minor);
, expected ^
$CTMP1.$$$:
0: Can't open $CTMP3.$$$

Если делать чуть иначе (сперва скомпилировать bd.c, потом слинковать всё), то получаем такое вот:

A0>c -O -x -DORI_UTILS bd.obj md.obj fs.obj dmisc.obj dsk.obj dio.obj dfd.obj dtty.obj data.obj sc1.obj
HI-TECH C COMPILER (CP/M-80) V3.09
Copyright (C) 1984-87 HI-TECH SOFTWARE
MD.OBJ: 8: multiply defined symbol: _TEMPDBUF

Error404
08.10.2018, 13:02
MD.OBJ: 8: multiply defined symbol: _TEMPDBUF


Все верно. :) Я поправил ядро когда делал правки для halt (выход обратно в CP/M) - переназначил TEMPDBUF статически в общий файл machdep.orn (до того это назначение было в *.h через define на абсолютный адрес в дисковом буфере BIOS CP/M, который можно портить если не делается выход обратно в CP/M, а место в ОЗУ TPA при этом экономилось), а в утилитах забыл закомментить обособленные определения (занимался ядром, и не проверял как собираются после этого утилиты). :)

Надо в bd, mkfs, fsck, ucp сделать так:
/* char TEMPDBUF[BUFSIZE]; */

Поправил и закоммитил на GIT

andreil
08.10.2018, 13:26
Все верно. :) Я поправил ядро когда делал правки для halt (выход обратно в CP/M) - переназначил TEMPDBUF статически в общий файл machdep.orn (до того это назначение было в *.h через define на абсолютный адрес в дисковом буфере BIOS CP/M, который можно портить если не делается выход обратно в CP/M, а место в ОЗУ TPA при этом экономилось), а в утилитах забыл закомментить обособленные определения (занимался ядром, и не проверял как собираются после этого утилиты). :)

Надо в bd, mkfs, fsck, ucp сделать так:
/* char TEMPDBUF[BUFSIZE]; */

Поправил и закоммитил на GIT
Да, это я и сам уже исправил.
Идём дальше - FSCK, ошибка при компиляции:

A0>c -O -x -DORI_FDISK -x -c fdisk1.c fdisk2.c f_mkfs.c dsk.c
HI-TECH C COMPILER (CP/M-80) V3.09
Copyright (C) 1984-87 HI-TECH SOFTWARE
FDISK1.C
ctype.h:
53: extern int toupper __P((int));
, expected ^
) expected ^
54: extern int tolower __P((int));
, expected ^
) expected ^

Error404
08.10.2018, 14:31
Да, это я и сам уже исправил.
Идём дальше - FSCK, ошибка при компиляции:

A0>c -O -x -DORI_FDISK -x -c fdisk1.c fdisk2.c f_mkfs.c dsk.c
HI-TECH C COMPILER (CP/M-80) V3.09
Copyright (C) 1984-87 HI-TECH SOFTWARE
FDISK1.C
ctype.h:
53: extern int toupper __P((int));
, expected ^
) expected ^
54: extern int tolower __P((int));
, expected ^
) expected ^


FDISK же, не FSCK? __P задана в UZIX.H как #define __P(x) x
Т.е. "__P" просто выкидывается и никак не должно влиять.
UZIX.H есть? включается?

У меня собирается нормально:



c:\Borland\Delphi5\Projects\Work\U.Z.I.X>make clean
MAKE Version 5.2 Copyright (c) 1987, 1998 Inprise Corp.
rm md.obj fs.obj dmisc.obj dsk.obj dio.obj dfd.obj dtty.obj sc1.obj sc2.
obj sc3.obj pr1.obj pr2.obj swp.obj data.obj XFS.obj ucs.obj bd.obj fsck.obj mkf
s.obj ucp.obj uzix.obj F_MKFS.OBJ FDISK.OBJ FDISK1.OBJ FDISK2.OBJ
c:\UNIXUT~1\rm.exe: sc3.obj: No such file or directory
c:\UNIXUT~1\rm.exe: pr1.obj: No such file or directory
c:\UNIXUT~1\rm.exe: pr2.obj: No such file or directory
c:\UNIXUT~1\rm.exe: swp.obj: No such file or directory
c:\UNIXUT~1\rm.exe: uzix.obj: No such file or directory
c:\UNIXUT~1\rm.exe: F_MKFS.OBJ: No such file or directory
c:\UNIXUT~1\rm.exe: FDISK.OBJ: No such file or directory
c:\UNIXUT~1\rm.exe: FDISK1.OBJ: No such file or directory
c:\UNIXUT~1\rm.exe: FDISK2.OBJ: No such file or directory

** error 1 ** deleting clean

c:\Borland\Delphi5\Projects\Work\U.Z.I.X>
c:\Borland\Delphi5\Projects\Work\U.Z.I.X>
c:\Borland\Delphi5\Projects\Work\U.Z.I.X>make fdisk.com
MAKE Version 5.2 Copyright (c) 1987, 1998 Inprise Corp.
cpm -h c -O -x -DORI_FDISK -c fdisk2.c
HI-TECH C COMPILER (CP/M-80) V3.09
Copyright (C) 1984-87 HI-TECH SOFTWARE
cpm -h c -O -x -DORI_FDISK -c fdisk1.c
HI-TECH C COMPILER (CP/M-80) V3.09
Copyright (C) 1984-87 HI-TECH SOFTWARE
cpm -h c -O -x -DORI_FDISK -c f_mkfs.c
HI-TECH C COMPILER (CP/M-80) V3.09
Copyright (C) 1984-87 HI-TECH SOFTWARE
cpm -h c -O -x -DORI_FDISK -c dsk.c
HI-TECH C COMPILER (CP/M-80) V3.09
Copyright (C) 1984-87 HI-TECH SOFTWARE
cpm -h c -O -x fdisk.c fdisk2.obj fdisk1.obj f_mkfs.obj dsk.obj
HI-TECH C COMPILER (CP/M-80) V3.09
Copyright (C) 1984-87 HI-TECH SOFTWARE


c:\Borland\Delphi5\Projects\Work\U.Z.I.X>ls -l fdisk.com
-rwxrwxrwx 1 user group 39808 Oct 8 14:23 fdisk.com

c:\Borland\Delphi5\Projects\Work\U.Z.I.X>

andreil
08.10.2018, 15:27
FDISK же, не FSCK? __P задана в UZIX.H как #define __P(x) x
Т.е. "__P" просто выкидывается и никак не должно влиять.
UZIX.H есть? включается?
Если бы не было - ругнулось :)
Сейчас пробую с другим эмулятором совладать, но там пока на старте застрял =/

Error404
08.10.2018, 16:42
Если бы не было - ругнулось :)
Сейчас пробую с другим эмулятором совладать, но там пока на старте застрял =/

тут дело не в эмуляторе, наверное - не понимаю как может влиять эмулятор на то, что в твоем случае компилер ругается на неизвестную конструкцию "__P()".
А вот на что может влиять эмулятор, так это на высоту BDOS (т.е. размер ОЗУ ТПА доступного компилятору под буферы всяких структур). Это легко проверить по значению в ячейках ОЗУ по адресу 6-7 (0005: jp BDOS). У cpm.exe от Мураками это значение одно из самых максимальных - TPA 63,5кб из общих 64кб.

andreil
09.10.2018, 08:36
тут дело не в эмуляторе, наверное - не понимаю как может влиять эмулятор на то, что в твоем случае компилер ругается на неизвестную конструкцию "__P()".
А вот на что может влиять эмулятор, так это на высоту BDOS (т.е. размер ОЗУ ТПА доступного компилятору под буферы всяких структур). Это легко проверить по значению в ячейках ОЗУ по адресу 6-7 (0005: jp BDOS). У cpm.exe от Мураками это значение одно из самых максимальных - TPA 63,5кб из общих 64кб.
Вот что в данном эмуляторе (получил в отладочном режиме):

dump memory at: 0
0000 c3 00 fe 80 00 c3 06 fc - 76 76 76 76 76 76 76 76
64518 байт ТПА, вполне неплохо :)

Error404
09.10.2018, 10:00
Вот что в данном эмуляторе (получил в отладочном режиме):

dump memory at: 0
0000 c3 00 fe 80 00 c3 06 fc - 76 76 76 76 76 76 76 76
64518 байт ТПА, вполне неплохо :)

Ну, компиляция ядра покажет. Все же это значение на полкилобайта меньше чем у Мураками, а некоторые модули ядра уже компилируются "впритык" - добавишь туда процедуру и компилер ругается "мало ОЗУ", приходится переносить эти процедуры в другие модули. UZIX весьма крупный проект, самый большой из тех что я собирал нативным Z80 компилятором - что по количеству модулей, что по их размеру.

Так получается что-то или нет с FDISK? Если нет, на нем свет клином не сошелся, пробуй дальше - ядро.
А чего не используешь make? И мелкошаговую компиляцию (c.com это по сути надкоманда, вызывающая из себя препроцессор и компилеры первого и второго прохода и оптимизер, и этой c.com надо больше ОЗУ на себя, чем прочим модулям вызываемым последовательно по-отдельности). Посмотри makefile (https://github.com/serge-404/U.Z.I.X./blob/master/makefile) от UZIX, там видно как приходится компилить большие модули.

Кстати, в одно время я пробовал прикрутить в методику компиляции и gcc. :) Была идея использовать его препроцессор (а собственно сама компиляция далее уже нативным Hitech C). Это было нужно для сборки uIP 1.х где автор накрутил через чур много на дефайнах и инклюдах что не каждый компилер это съедал распутать.

andreil
09.10.2018, 17:19
Ну, компиляция ядра покажет. Все же это значение на полкилобайта меньше чем у Мураками, а некоторые модули ядра уже компилируются "впритык" - добавишь туда процедуру и компилер ругается "мало ОЗУ", приходится переносить эти процедуры в другие модули. UZIX весьма крупный проект, самый большой из тех что я собирал нативным Z80 компилятором - что по количеству модулей, что по их размеру.

Так получается что-то или нет с FDISK? Если нет, на нем свет клином не сошелся, пробуй дальше - ядро.
А чего не используешь make? И мелкошаговую компиляцию (c.com это по сути надкоманда, вызывающая из себя препроцессор и компилеры первого и второго прохода и оптимизер, и этой c.com надо больше ОЗУ на себя, чем прочим модулям вызываемым последовательно по-отдельности). Посмотри makefile (https://github.com/serge-404/U.Z.I.X./blob/master/makefile) от UZIX, там видно как приходится компилить большие модули.

Кстати, в одно время я пробовал прикрутить в методику компиляции и gcc. :) Была идея использовать его препроцессор (а собственно сама компиляция далее уже нативным Hitech C). Это было нужно для сборки uIP 1.х где автор накрутил через чур много на дефайнах и инклюдах что не каждый компилер это съедал распутать.
Да, сейчас я с Makefile собираю. И всю сборку унифицировал, упростив оный. Пока что эксперименты, потому форка нету с новым кодом. Пока что в текущем CP/M-эмуляторе наглухо зависает оптимизатор (OPTIM). По отладке смотрел - зависает внутри себя, возврат из BDOS-вызова происходит, потом глухо, приходится через htop убивать =/ Покручу завтра на других эмуляторах ещё.

PS: Времени капец как мало сейчас, на работе завал, дома с перепланировкой приходится возиться (мебель новую вместо старой на те же места не впихнуть, приходится играть в "тетрис" :) ).

Error404
09.10.2018, 18:05
Да, сейчас я с Makefile собираю. И всю сборку унифицировал, упростив оный. Пока что эксперименты, потому форка нету с новым кодом. Пока что в текущем CP/M-эмуляторе наглухо зависает оптимизатор (OPTIM). По отладке смотрел - зависает внутри себя, возврат из BDOS-вызова происходит, потом глухо, приходится через htop убивать =/ Покручу завтра на других эмуляторах ещё.


Оптимизатор вызывается ключами "-o -x". Если их не использовать, то он наверное и вызываться не будет? Ну, код будет побольше на 5-10%

andreil
09.10.2018, 18:10
Оптимизатор вызывается ключами "-o -x". Если их не использовать, то он наверное и вызываться не будет? Ну, код будет побольше на 5-10%
Я его вызываю вручную (параметры - из твоего Makefile). Для вызова через C.COM этот эмулятор чутка не допилен :( Но и это будет сделано.

andreil
10.10.2018, 11:00
Ради пробы сейчас запустил на всех эмуляторах (и под виндой, и под линем) - один фиг, везде виснет оптимизатор. Даже перезагрузил сырцы и компилятор - по фигу :(

Error404
10.10.2018, 12:55
Ради пробы сейчас запустил на всех эмуляторах (и под виндой, и под линем) - один фиг, везде виснет оптимизатор. Даже перезагрузил сырцы и компилятор - по фигу :(

на всех эмуляторах - это на каких?
и на каких исходных файлах виснет? не на всех же

andreil
10.10.2018, 13:06
на всех эмуляторах - это на каких?
и на каких исходных файлах виснет? не на всех же
Пробовал и тот, что у тебя в репе с компилятором.
И да - висит на всех абсолютно. Ещё дома попробую сегодня, может в окружении что-то сломал, поскольку ранее работало без проблем. Хотя, виндовый я запускал на виртуалке вообще =/

Error404
10.10.2018, 14:18
Также добавлю оптимизма: то что "компилируемость" приходится подбирать это нормально. И связано с тем, что до сих пор нет нормального компилятора для Z80 для сборки кода серьезнее HelloWorld. Тот же FUZIX полностью собирается только sdcc определенной версии с определенными немейстримовскими патчами (далеко не самой новой версией и далеко не всеми патчами, новые при сборке глючат каждая по-своему). Это просто надо преодолеть буквально "курочка по зернышку" - где-то подбирая опции компилера, где-то перетасовывая код (вынесешь крупную процедуру выше по модулю или в другой модуль, и опа - всё начинает собираться, какие-то структуры в памяти при компиляции по-другому легли и всё поместилось). У HitechC есть в этом смысле недостаток - оно если упрётся во что-то, то в 50% случаев тупо виснет, в 50% выдает "не хватило того-то". Вот зависы конечно нервируют. Но оно хотя бы работает в 64к, а вот когда глючит SDCC, работающий в 64Gb - вот это бесит дико.

- - - Добавлено - - -


Пробовал и тот, что у тебя в репе с компилятором.
И да - висит на всех абсолютно. Ещё дома попробую сегодня, может в окружении что-то сломал, поскольку ранее работало без проблем. Хотя, виндовый я запускал на виртуалке вообще =/

У меня дома нативная Винда7 64бит и на работе нативная Винда7 64бит. И там и там компилируется. Хотя последний апдейт я не загружал, компилирую то что у меня уже лежит локально. Но оно вроде же должно 100% соответствовать, git типа гарантирует. :)

- - - Добавлено - - -

Попробовал "начисто" качнуть с GIT С-компилятор (HITECH C 3.09 + cpm.exe Мураками) и UZIX - собралось всё.
Так что у меня зависы конкретно этого компилятора/эмулятора c конкретно этими исходниками не воcпроизводятся.

Error404
11.10.2018, 17:24
Ещё дома попробую сегодня, может в окружении что-то сломал, поскольку ранее работало без проблем.


В эмуляторе CP/M добавил небольшую фичу: если в параметрах командной строки указать юниксовый путь (определяется тупо по наличию слешей), то он во-первых вырезается из параметров, передаваемых CP/M программе (т.к. в CP/M программе пути не обрабатываются), и во вторых перед передачей управления СОМ-файлу осуществляется переход по вырезанному пути. Эффект в результате получается такой: можно находясь в каталоге ААА обработать CP/M-программой файлы из каталога BBB через параметры командной строки (например так: sed.com /home/guest/test.txt ).

И кстати, вопрос. Шикарные редакторы от CP/M хотят файлы с концами строк CR+LF, а в Юниксах только CR. Поэтому нормально ими текстовое редактирование ими не сделаешь. как выкрутиться?

PS. Сообщения про компиляторы отцепил в эту тему:
http://zx-pk.ru/threads/29581-dialogi-o-platformakh-kompilyatorakh-i-operatsionnykh-sistemakh-dlya-retrostroitelya.html

andreil
12.10.2018, 08:14
И кстати, вопрос. Шикарные редакторы от CP/M хотят файлы с концами строк CR+LF, а в Юниксах только CR. Поэтому нормально ими текстовое редактирование ими не сделаешь. как выкрутиться?
Не знай как в старых, но современные редакторы этого не замечают толком. NANO только показывает доп. символ на каждой строке и всё. Kate и прочие автоматом распознают перевод строки и используют его для каждого документа индивидуально. Notepad++ под Вин так же универсален.
Надо будет покопать старые редакторы, что есть. А пока на работе забит очень сильно :(

Error404
12.10.2018, 18:28
При помощи того же Hitech C и такой то матери скомпилировал редактор VI (в его реинкарниции LEVEE сдернутой из репов FUZIX). Как-то оно уже работает (я даже набрал HelloWorld, I am VI !!! и сохранил это в файл). Однако в связи с тем, что VT-52 на Орионе это немного отличающийся подвид VT-52, то неожиданно ведет себя например движение курсора от сканкодов считываемых с клавиатуры. И возможно еще надо что-то донастроить в globals.c где хранятся ESC-последовательности (и еще много чего). Короче, надо чуть отладить, но уже нет сил. :) Поэтому желающие помочь с этим - велком.
Вот как описывают правильный VT-52: https://en.wikipedia.org/wiki/VT52#VT52
А какой он в Орионе - см. в zip во вложении.
Cам VI с исходниками выложил на GIT.

Error404
14.10.2018, 13:38
Не знай как в старых, но современные редакторы этого не замечают толком. NANO только показывает доп. символ на каждой строке и всё. Kate и прочие автоматом распознают перевод строки и используют его для каждого документа индивидуально. Notepad++ под Вин так же универсален.
Надо будет покопать старые редакторы, что есть. А пока на работе забит очень сильно :(

Решил пока добивать VI. Правда не понял редактирует ли он файлы размером более доступного ОЗУ, тупо не смотрел пока. Написано там все заумно, пока интерфейс бы победить. Ну, почти победил, кстати, пользоваться вполне можно, кнопки все настроил (все как в оригинальном VI + управление курсором как в WordStar/TurboPascal - курсорные ctrl+S,E,D,X {они в орионовском драйвере замаплены на курсорные стрелки} ; PgUp=ctrl+R ; PgDn=ctrl+C). Работает всё примерно как vi на AIX, где редактирование (переход туда по кнопке I - от Insert) слегка чудное - например в режиме редактирования клавиша "забой"(BS) стирает символ слева от курсора в буфере, но не на экране (где просто сдвигает курсор влево), а 'x' в командном режиме стирает символ под курсором и в буфере и на экране.
А вот в vi на Linux кнопкой "забой"(BS) символ стирается и на экране и в буфере, и 'x' тоже стирает и там и там.

В общем пользоваться вполне можно. Надо допилить по мелочи - вот эти вот стирания символов, расширить отображение строки состояния (добавить отображение текущего режима cmd/edit - пока не понял откуда его взять: такой явной переменной не нашел пока) .

Все правки залил на GIT, и тут тоже положу.

Error404
14.10.2018, 21:28
Решил пока добивать VI. Правда не понял редактирует ли он файлы размером более доступного ОЗУ, тупо не смотрел пока.


В-общем, большие файлы оно не открывает. Пишет overflow. :) И строки более 80 символов не обрабатывает. Стыд-позор, ведь такое умеет почти любой редактор от CP/M размером в 10кб и менее (а не 39кб как вышел vi=leevee у меня или over 40к у FUZIX-оидов). Я несколько реализаций попроще vi видел до этого (в т.ч. и для PC) - там из исходника было видно что редактор берет "только что полезло в ОЗУ". Тут накручено было более заумно, где-то оно даже lseek по файлу зачем-то делало, и я понадеялся что может сделали нормально, но на выходе увы, опять туфта (в сущности как и почти все что смотрел в репах FUZIX, но зато накрутят мильон дефайнов, прям как у больших дядей - вот нафига тащить туда такое г.? лучше бы подобрали нормальный редактор от CP/M в исходниках чтобы добавить пути файлов и поправить обработку конца строк, зла не хватает).

Sayman
21.05.2019, 05:58
ВНЕЗАПНО! Нашёл ещё одно стороннее ядро аля uzix - umzix доя sharp mz800.
https://sourceforge.net/p/umzix/code/HEAD/tree/trunk/

Error404
21.05.2019, 09:56
ВНЕЗАПНО! Нашёл ещё одно стороннее ядро аля uzix - umzix доя sharp mz800.
https://sourceforge.net/p/umzix/code/HEAD/tree/trunk/

Прикольно. Они там на безрыбье даже SDCC осилили. Не понятно правда оно рабочее или нет?
Приложений правда мало, нечего сдернуть - всё из этого уже есть в моем дистре. :)
А я тут запилил плагин для TotalCommander/DoubleCommander/Far для работы с образами дисков UZIX. Надо кому? В GIT пока не выкладывал т.к. еще есть мысли что допилить в дополнение к базовым операциям.
69056

- - - Добавлено - - -






Сообщение от Error404
Я использую эмулятор CP/M сэнсея Мураками - архив cpm32_04.zip, в том же архиве есть исходники на C (самого эмулятора) и ASM (кодового блока движка Z80/Z180). Версия для Win32 PC, но консольная, портануть на Линух думаю будет не сложно.


Вся проблема в генерируемом АСМе - современный GCC его не понимает :(
Попробую ещё повозиться. А нет - буду на виртуалке собирать.

Я тут глянул в сорцы cpm32_04.zip, тамошний эмулятор легко заменится на любой другой написанный на С т.к. никак не зависит от C-кода. Выполнение идет по одной команде, всё управляется из корневого C-кода со связью через единственную структуру с регистрами процессора да массив 64к с "ОЗУ Z80". Задачка - начать да кончить. Когда займешься, andreil, завод запустили уже? :)

Sayman
21.05.2019, 10:15
Прикольно. Они там на безрыбье даже SDCC осилили. Не понятно правда оно рабочее или нет?
там есть образ с собранной системой, датируется аж 2012 годом. скачал эмулятор Шарпа. оно работает. Но команд там не хватает, конечно. Написано, прототип. Последние правки датируются 2014 годом. Мануала по сборке нет. по make файлу видно, что не хватает ещё тулз для сборки. ну, вероятно это всё должно собираться под линухом?! ну я скачал для истории и осмотра...


А я тут запилил плагин для TotalCommander/DoubleCommander/Far для работы с образами дисков UZIX. Надо кому? В GIT пока не выкладывал т.к. еще есть мысли что допилить в дополнение к базовым операциям.
дай (голосом чайки из Немо:))) )?!

Error404
21.05.2019, 22:11
там есть образ с собранной системой, датируется аж 2012 годом. скачал эмулятор Шарпа. оно работает. Но команд там не хватает, конечно. Написано, прототип. Последние правки датируются 2014 годом. Мануала по сборке нет. по make файлу видно, что не хватает ещё тулз для сборки. ну, вероятно это всё должно собираться под линухом?! ну я скачал для истории и осмотра...


наверное надо просто отдельно развернуть SDCC нужного релиза. make то уж наверное в нем есть? Если нет, можно make из cygwin или mingw использовать (я собственно так и и сделал для сборки UZIX)



дай (голосом чайки из Немо:))) )?!

вот тут образы что я использовал для теста (https://drive.google.com/file/d/1DVhfm9NximHbFb8N9d5zXE5ki7KDg08r/view?usp=sharing), исходники на Git (https://github.com/serge-404/U.Z.I.X./tree/master/WinUtils/UDI-WCX), бинарники во вложении этого сообщения (вместо хелпа смотри в исходники. :) Версия еще не окончательная, там еще будут правки).
OHI.WCX-для работы c образами HDD, аггрегирует ODI.WCX, UDI.WCX и FDI.WCX для их работы с offset MBR-разделов (Delphi5)
ODI.WCX-для работы c образами дискет СP/M (Delphi5)
FDI.WCX-для работы c образами дискет FAT (BCB5)
UDI.WCX-для работы c образами дискет UZIX (BCB5)

Всё 32-битное. Смысла в 64-битных файловых менеджерах не вижу, и сижу на DoubleCommander 32 бит.

В плагине OHI.WCX есть возможность инициализации образа (создать запись MBR), а также создание и удаление primary MBR партиций типа CPM, FAT и UZIX (партиции создаются уже инициализированные, т.е. вместе с файловой системой). Работа с партициями как с подкаталогами (создать-F7, удалить F8), при создании в качестве "имени каталога" указывается тип и размер партиции, например "UZIX 20M", "FAT 32768000" или "CPM 1500K". Т.е. не нужен fdisk - взяли любой подходящий файл (лучше зануленый - чтобы архивировался хорошо), переименовали в OHI, проинитили (просто войдя в этот "образ"), создали партиции по F7, в них создали структуру каталогов (в случае UZIX или FAT), накидали файлы. Всё.

В UDI.WCX (плагин для образов ФС UZIX) есть фича работы с bootsector и системными дорожками образа - запись/чтение кода бутсектора и кода ОС внутрь системных структур не повреждая исходного форматирования ФС через виртуальный подкаталог с виртуальными файлами boot.bin (может быть переименован в INI), system.bin (при последующей перезаписи если записываемый файл хотя бы на 32 байта меньше системной области, в системной области сохранится имя и дата записанного файла ядра). Фича необходимая, т.к. во всех репозиториях ЮЗИКСа что я видел, бутсектор и ядро ОС компилируются раздельно, и их после компиляциии как-то надо записывать на диск.

В CPM-разделах код бутсектора и ОС заливается одним общим файлом (т.к. в АльтаирДОС оно у меня компилируется в один общий файл - чтобы при крайней необходимости можно было тупо одной командой POWER.COM залить скомпилированное на системные треки в нативной CP/M, впрочем в АльтаирДОС это умеет и fdisk, причем более интеллектуально), это тоже обрабатывается через виртуальный файл, но уже соответственно в ODI.WCX.

Картинки:

1.
https://i.ibb.co/9b6t24p/UDI.jpg (https://ibb.co/rxYsMpQ)
2.
https://i.ibb.co/ZX296MX/OHI-UDI.jpg (https://ibb.co/NCTR6yC)
3.
https://i.ibb.co/ctpBLBX/udi.png (https://ibb.co/k0r7176)
4.
https://i.ibb.co/Fx0rMBN/udi1.png (https://ibb.co/Pm9Ln53)
.

Xrust
21.05.2019, 22:35
Какой-то позор
8- битникам грех жаловаться :)

andreil
21.05.2019, 22:50
Я тут глянул в сорцы cpm32_04.zip, тамошний эмулятор легко заменится на любой другой написанный на С т.к. никак не зависит от C-кода. Выполнение идет по одной команде, всё управляется из корневого C-кода со связью через единственную структуру с регистрами процессора да массив 64к с "ОЗУ Z80". Задачка - начать да кончить. Когда займешься, andreil, завод запустили уже? :)
Как писал выше - ассемблерный код написан для компилятора MSVC. То есть и основную программу надо для него же собирать.

PS: Тут я редко бываю - проще законтачить со мной через VK/Viber/WhatsApp ;)
И через 2 месяца я буду на другой работе...

Error404
22.05.2019, 00:44
Как писал выше - ассемблерный код написан для компилятора MSVC. То есть и основную программу надо для него же собирать.

PS: Тут я редко бываю - проще законтачить со мной через VK/Viber/WhatsApp ;)
И через 2 месяца я буду на другой работе...

Я про то, что ассеблерное вообще нафиг выкинуть и взять движок Z80 на C с другого эмулятора. Т.к. C и ASM части практически не завязаны друг на друга.

Sayman
22.05.2019, 07:11
наверное надо просто отдельно развернуть SDCC нужного релиза. make то уж наверное в нем есть? Если нет, можно make из cygwin или mingw использовать



вот тут образы что я использовал для теста (https://drive.google.com/file/d/1DVhfm9NximHbFb8N9d5zXE5ki7KDg08r/view?usp=sharing), исходники и бинарники во вложении этого сообщения (вместо хелпа смотри в исходники :) Версия еще не окончательная, там еще будут правки).
ODI.WCX-для работы c образами дискет СP/M (Delphi5)
UDI.WCX-для работы c образами дискет UZIX (BCB5)
OHI.WCX-для работы c образами HDD, аггрегирует ODI.WCX и UDI.WCX для их работы с offset MBR-разделов (Delphi5)

Всё 32-битное. Смысла в 64-битных файловых менеджерах не вижу, и сижу на DoubleCommander 32 бит.

PS. Какой-то позор с вложениями на форуме (я про объем как на файл так и общий), как будто не 21 веке живем.

печалька, но плугины не умеют открывать эти образы от Шарпа. причём я заголовок убрал (там какой то cpc формат образа), оставил только "сырые" данные (как в img файлах). плугины всё ровно не читают образ.

Error404
22.05.2019, 09:46
печалька, но плугины не умеют открывать эти образы от Шарпа. причём я заголовок убрал (там какой то cpc формат образа), оставил только "сырые" данные (как в img файлах). плугины всё ровно не читают образ.

Там если даже один лишний байт в структурах он где-то добавил, то всё поедет и открываться не станет.
А ты хотел именно шарповские расковырять, что надеешься там найти? Этот дистрибутив не производит впечатление того что он хоть каким-то боком более развитый чем оригинальный UZIX (под который мои плагины), скорее выглядит как сокращенная адаптация к той платформе, причем с правками от оригинала (довольно бессмысленными, типа для линуксовой пионерской красивости - хелперы там всякие и прочая туфта).

- - - Добавлено - - -

Кстати, С-компилятор может делать выравнивание структур по своим собственным соображениям (на что я натолкнулся в BCB5, эффект был такой же - не открывались образы из за несовпадающих структур FS) отчего они разъедутся от оригинала. И поэтому даже если не меняя исходников автор не изучая ключи компилера собрал что-то SDCC (в котором ключей вагон и тележка), который где-то что-то "подравнял", то бинарная совместимость с оригиналом пропадет как в образах, так и в перекомпилированных исполняемых файлах. Я же совместимости с оригиналом специально добивался, вот и не открываются шарпы.

Sayman
22.05.2019, 10:51
ну во1х, формат дискетных образов к эмулятору от cpc. оказалось там структура секторов прописана на протяжении всего образа, а не только в заголовке. Т.е. надо править исходник плагина, но я в паскале не бум бум...
во2х, собранный образ там за 2012й год. лежит в папке "прототип", что намекает на то, что это первая компиляция и при том весьма успешная. Комплект действительно мелковат, но для прототипа не плохо. последние исходники за 2014й год,/ но там тоже не весь комплект. что печально. Тем не менее я сравнил стабильность работы оригинала в blueMSX и этого порта под Шарп - шарп ни разу не баганул у меня, а оригинал просто пестрит багами, тормозами и крашами. хочется попробовать подсунуть уже собранные для оригинала бинарники. вроде должно взлететь...

п.с. всё думаю, а не запилить ли порт под спринтера?! но тут есть главный минус - бинарно собранные программки будут не совместимы. В первую очередь по причине точки размещения диспечера апи по адресу 8 (call 8). У спринтера по этому адреса диспечер выхода на апи bios завязан. чтобы переписать, нужно залезать в исходники биоса, что делать не очень хочется. Ближайшая точка для диспечера - адрес 16 (dec). ну и есть мысли сильно переписать на асме вместо си.

Error404
22.05.2019, 11:48
ну во1х, формат дискетных образов к эмулятору от cpc. оказалось там структура секторов прописана на протяжении всего образа, а не только в заголовке. Т.е. надо править исходник плагина,


Не, такое я точно делать не буду, как вариант сделай тупо шринкер (используя любой любимый компилятор) который тупо повырезает нафиг из образа все лишние служебные данные (которые как понял к FS UZIX не относятся?). Простая посекторная копия - это сегодня самый распространенный формат (т.к. простой), остальные маргинальные форматы поддерживать нет смысла.



образ там за 2012й год. лежит в папке "прототип", что намекает на то, что это первая компиляция и при том весьма успешная.


На успешность обычно намекает папка "релиз" :)



п.с. всё думаю, а не запилить ли порт под спринтера?! но тут есть главный минус - бинарно собранные программки будут не совместимы. В первую очередь по причине точки размещения диспечера апи по адресу 8 (call 8). У спринтера по этому адреса диспечер выхода на апи bios завязан. чтобы переписать, нужно залезать в исходники биоса, что делать не очень хочется. Ближайшая точка для диспечера - адрес 16 (dec). ну и есть мысли сильно переписать на асме вместо си.

Пора от дум переходить к действиям. :)
Вызов ядра надо оставить на 8h, просто накрыть служебные области BIOS Спринтера окном диспетчера. Там же есть диспетчер в окне с 0? Там ведь не только 8h, там еще и 0h..100h для эмулятора CP/M понадобится.
И есть идея оверлея для libc (типа шареной libc.so) которая переключается в этом же окне 0..3FFFh (т.е. один хрен окно нужно использовать) - это даст существенный прирост в размере кода приложения (т.к. десятки килобайт в любом большом приложении буду унесены в другую страницу ОЗУ, причем работать это будет без изменения исходников, процесса компиляции и компилятора - тупо единожды поделив libc на статически прилинковываемый в приложение маленький диспетчер и большой оверлей доп.страниц)

- - - Добавлено - - -

В отличие от не будем показывать пальцем способа SDCC с его самодеятельными спецвставками от компилятора по переключению страниц (типа специально объявляемые _far)

- - - Добавлено - - -


8- битникам грех жаловаться :)

форум и вставляемые картинки конвертирует во что-то нищенско 7-битное с клешингом. :)

Sayman
22.05.2019, 12:00
Простая посекторная копия - это сегодня самый распространенный формат (т.к. простой), остальные маргинальные форматы поддерживать нет смысла.
это не совсем маргинальный формат. обычный образ cpc/pcw. судя по всяким викиям - придумали для того, чтобы копировать всякие защищённые и не стандартные диски. почему в Шарпе его заюзали сам не знаю. ну и ладно...


На успешность обычно намекает папка "релиз"
я имел в виду то, что этот прототип уже сразу же работает и не глючит. хотя кой чего из оригинала явно не хватает...


Вызов ядра надо оставить на 8h, просто накрыть служебные области BIOS Спринтера окном диспетчера. Там же есть диспетчер в окне с 0? Там ведь не только 8h, там еще и 0h..100h для эмулятора CP/M понадобится.
это почти не реализуемо. по адресу 8h расположено переключение системного порта. при его включении на 0е окно накладывается область пзу. чтобы выключить её там же на адресе 8h в пзу отзеркалена та же процедура. если зайти в биос в обход этой процедуры, то выйти обратно... ещё надо подумать как тут станцевать...
хотяя.. кое какие мысли есть...
эмулятор ЦПМ не очень сильно нужен. за всё время эмулятром цпм под дос спринтера я так и не воспользовался. поэтому не очень сильно буду огорчён его отсутствием в юзихе.


Пора от дум переходить к действиям.
постоянно останавливает одна мысль - с практической точки зрения на спринтере и доса хватает. зачем там юзикс? только если интереса ради...
кстати, на чистом асме под юзикса пробовал писать?

опять таки - tcp/ip на спринтере не предвидится в виду отсутствия лишнего ком порта на которой можно было бы повешать нуль модем или esp8266.

Error404
22.05.2019, 12:12
это почти не реализуемо. по адресу 8h расположено переключение системного порта. при его включении на 0е окно накладывается область пзу. чтобы выключить её там же на адресе 8h в пзу отзеркалена та же процедура. если зайти в биос в обход этой процедуры, то выйти обратно... ещё надо подумать как тут станцевать...
хотяя.. кое какие мысли есть...


Не пойму - там какие-то аппаратные примочки замапированы на ОЗУ причем в начале ОЗУ? И совсем не отключаемо (оно же на CPLD собрано, убрать всю порнографию прошивкой)? И это в самом современном Спектруме, при том что уже на Кворуме в середине прошлого века caro всем показал как надо делать по нормальному?



эмулятор ЦПМ не очень сильно нужен. за всё время эмулятром цпм под дос спринтера я так и не воспользовался. поэтому не очень сильно буду огорчён его отсутствием в юзихе.
постоянно останавливает одна мысль - с практической точки зрения на спринтере и доса хватает. зачем там юзикс? только если интереса ради...
кстати, на чистом асме под юзикса пробовал писать?


Писал маленько на АСМе, в принципе ничем не отличается от написания кода под CP/M. Та же libc и есть в значительной степени код для UZIX, написанный на ASM (в приглядку в libc и писал). Вот только где ты возьмешь нормальный нативный АСМ? В Юзиксе своего нормального нету, есть только обрубок ЕМНИП что-то типа fudeasm. Я пользуюсь как раз таки CP/M-овским, в-общем то когда ползуешься любым нормальным софтом в ЮЗИКСе, софт оказывается CPM-овским. А остальное что - ls и cp? :)

- - - Добавлено - - -

Конечно, есть еще неспортивные способы с использованием АСМ на PC, но и там я использую M80/L80 под эмулем CPM - ничего лучше пока не встретил.

Sayman
22.05.2019, 12:32
Не пойму - там какие-то аппаратные примочки замапированы на ОЗУ причем в начале ОЗУ? И совсем не отключаемо (оно же на CPLD собрано, убрать всю порнографию прошивкой)?
нет. ничего такого. это программная фигня. просто исторически так сложилось, что авторы сделали обращение к апи биоса через адрес 8h. соответственно, в биосе выключалка. включалку можно воткнуть в любом месте озу.


;RST 08h, Вызов функций Биоса
push af
ld a,0 ; вкл. ПЗУ Биоса в 0-е окно
out (sys_port_on),a
pop af
ret
;в биосе по адресу 8
EXP_FNS_2_RET:
PUSH AF
LD A,D_ROM16OFF
OUT (SYS_PORT_OFF),A
POP AF
JR RST_18_1

и кстати не все адреса в 0..0x100 (точнее - 0..0xff) свободны. с адреса 0x80 аргументы запускаемого процесса (ком.строка).
в целом я изначально не собирался делать совместимость с оригиналом.
во1х, все бинары доступны в виде исходников. можно просто пересобрать. в виде исходников нет только fudebrowser и модуль tcp.
во2х, в оригинале ограничение на исполняемые файлы размеров в tpa. у спринтера даже сейчас нет такого ограничения и грузить exe файлы можно хоть в мегабайты размером. как раз примерно аналогично и хотел в юзиксе делать.
и в 3х, и самое главное и при этом печальное - драйвер fs в том виде как оно есть сейчас мне не нравится и хочется прикрутить аналог vfs, чтобы прозрачно можно было гонять ещё и fat. без фата там ловить нефиг. а с vfs я совсем не знаком.

в качестве асмов я пользуюся ужасмом под венду. кстати, ужасм, есть и под спринтера (под его дос), точнее говоря, его предок sjasm, который без plus. вроде даже были где то исходники, т.е. при их наличии можно довенуть до уровня современного ужасма...

Error404
22.05.2019, 14:31
во1х, все бинары доступны в виде исходников. можно просто пересобрать. в виде исходников нет только fudebrowser и модуль tcp.


Начнешь компилировать - откроешь много чудесного (в over 50% случаев там с первого тыка ничего не компилируется, надо править, что-то добавлять и т.п.), уже это проходил. Но конечно, ничего невозможного в этом нет.



во2х, в оригинале ограничение на исполняемые файлы размеров в tpa. у спринтера даже сейчас нет такого ограничения и грузить exe файлы можно хоть в мегабайты размером. как раз примерно аналогично и хотел в юзиксе делать.


Вот это будет довольно непросто сделать из-за того что у Z80 только 64к. У меня сейчас TPA(пользовательское пространство процесса) 58к из 60к орионовской страницы (т.е. при 64к можно получить ТРА 62к + выигрыш за счет libc.so порядка 15-30кб). Остальное (многостраничное выполнение в пределах одного процесса) потребует очень сильного перепиливания UZIX (там много мелких деталей о существовании которых узнается только в процессе), например совсем не понятно как для таких процессов делать обработку событий=сообщений ядра (а это основной функционал UNIX) - как ядру узнавать в какую страницу делать callback если их много (ведь это не вызываемая пользователем из TPA функция, по стеку не распутаешь).



и в 3х, и самое главное и при этом печальное - драйвер fs в том виде как оно есть сейчас мне не нравится и хочется прикрутить аналог vfs, чтобы прозрачно можно было гонять ещё и fat. без фата там ловить нефиг. а с vfs я совсем не знаком.


там сейчас нет абстрактного уровня FS, вообще нет, вызовы процедур идут отовсюду куда попало, поэтому по простому (без переписывания всего, ведь в UNIX всё делается через спецустройства FS) это не решаемо. Максимум что можно - это переделать inode и карты с 16 бит на 32 бит получив размер FS в 2Tb вместо 32Mb.



в качестве асмов я пользуюся ужасмом под венду. кстати, ужасм, есть и под спринтера (под его дос), точнее говоря, его предок sjasm, который без plus. вроде даже были где то исходники, т.е. при их наличии можно довенуть до уровня современного ужасма...

большинство ассемблеров рожденных на Спеке - ужасмы, как по мне. :)

- - - Добавлено - - -

Т.е. я к чему: начни делать, придет понимание как оно устроено, и многие из нереализуемых вещей отпадут сами собой, получится нечто более приземленное чем хотелось бы, но вполне юзабельное.

Sayman
22.05.2019, 14:52
Вот это будет довольно непросто сделать из-за того что у Z80 только 64к.
в досе на спринтере оно работает уже сейчас. например, инсталлер игрушки TITD - чуть больше метра монолитным exe файлом. первичный загрущик размещается на стороне системы. в случае если размер ехе файла не превышает размер доступного тпа, его более чем достаточно. если размер больше, чем тпа, тогда включается второй загрущик состоящий из двух частей. первая в системе, вторая в самом ехе файле и его нужно писать самому. был вариант третьего загрущика, но его так и не запилили. там была таблица блоков загрузки в заголовке файла. в целом - там и сейчас заголовок 512 байт. это можно в юзикс перенести попробовать.

Error404
22.05.2019, 15:47
в досе на спринтере оно работает уже сейчас. например, инсталлер игрушки TITD - чуть больше метра монолитным exe файлом. первичный загрущик размещается на стороне системы. в случае если размер ехе файла не превышает размер доступного тпа, его более чем достаточно. если размер больше, чем тпа, тогда включается второй загрущик состоящий из двух частей. первая в системе, вторая в самом ехе файле и его нужно писать самому. был вариант третьего загрущика, но его так и не запилили. там была таблица блоков загрузки в заголовке файла. в целом - там и сейчас заголовок 512 байт. это можно в юзикс перенести попробовать.

Ну, можно наверное и перенести, я просто о том, что если это выполняемый код в разных страницах ОЗУ, то в ядре нужны существенные изменения, не просто по описателю раскидать данные по страницам и отдать туда управление из расчета что процесс дальше сам знает что к чему (что ты и описываешь для DOS Спринтера). Т.к. в текущем виде страница обработчиков сигналов ядру известна (т.к. одна единственная на процесс), а при многостраничности - нет, надо допиливать. Вызов сигналов же делается не под управлением процесса, а асинхронно ядром, и ему надо знать в какую страницу передать управление на обработчик сигнала, т.е. ядро должно знать как там в раскиданном коде разместились процедуры по страницам ОЗУ. В такие приложения должен включаться некий код-диспетчер который всегда в первой (к примеру) странице и пишется уникальный для каждого такого приложения (что грустно), либо что-то еще придумывать (например ограничения на размещение процедур, за которыми желательно следил бы сам компилятор, или дополнительную расширенную регистрацию процедур в ядре - нестандартную).

Black Cat / Era CG
22.05.2019, 18:21
это не совсем маргинальный формат. обычный образ cpc/pcw.
Если в заголовке есть что-то типа "EXTENDED CPC" или "MV - CPCEMU", то посекторную копию выдернуть оттуда не сложно.

Sayman
22.05.2019, 20:54
Если в заголовке есть что-то типа "EXTENDED CPC" или "MV - CPCEMU", то посекторную копию выдернуть оттуда не сложно.

именно так и написано. но конвертилки dsk <-> img найти не смог, а ваять свою конвертилку вломы...

Black Cat / Era CG
22.05.2019, 21:00
Вот отсюда http://era-cg.su/steinblume/#downloads скачай Disk Image Analyzer. , поставь в нем обе галки и кинь на него образ. Если все пройдет удачно, получишь файл с расширение .xdi - это и будет посекторное содержимое. Можно ли конвертить обратно, я не помню.

Error404
23.05.2019, 00:12
Вот отсюда http://era-cg.su/steinblume/#downloads скачай Disk Image Analyzer. , поставь в нем обе галки и кинь на него образ. Если все пройдет удачно, получишь файл с расширение .xdi - это и будет посекторное содержимое. Можно ли конвертить обратно, я не помню.

Утилиты от UZIX получившийся после преобразования результат не понимают - не видят не только требуемые структуры инодов, но и даже сигнатуру принадлежности диска к известным Юзиксу. Также, XDI после ДискАнализера почему-то получается размером не 720кб, а 719.5кб

Black Cat / Era CG
23.05.2019, 08:10
А там надо посмотреть в логах. Возможно где-то не хватает секторов. Еще на эмуверс должна быть тулза от Пантеры (вроде). Она скорее всего более корректная.

Error404
24.05.2019, 20:18
Добавил в плагине OHI.WCX возможность инициализации образа (создать запись MBR), а также создание и удаление primary MBR партиций типа CPM и UZIX (создаются вместе с файловой системой). Работа как с подкаталогами (создать-F7, удалить F8), при создании в качестве "имени каталога" указывается тип и размер партиции, например "UZIX 20M" или "CPM 1500K". Т.е. не нужен fdisk - взяли любой подходящий файл (лучше зануленый - чтобы архивировался хорошо), переименовали в OHI, проинитили (просто войдя в этот образ), создали партиции, в них создали структуру каталогов (в случае UZIX), накидали файлы. Всё.

Всё залил на github.

Sayman
25.05.2019, 09:59
Добавил в плагине OHI.WCX возможность инициализации образа (создать запись MBR), а также создание и удаление primary MBR партиций типа CPM и UZIX (создаются вместе с файловой системой). Работа как с подкаталогами (создать-F7, удалить F8), при создании в качестве "имени каталога" указывается тип и размер партиции, например "UZIX 20M" или "CPM 1500K". Т.е. не нужен fdisk - взяли любой подходящий файл (лучше зануленый - чтобы архивировался хорошо), переименовали в OHI, проинитили (просто войдя в этот образ), создали партиции, в них создали структуру каталогов (в случае UZIX), накидали файлы. Всё.

Всё залил на github.

тогда уже надо сразу добавлять поддержку разделов fat. Заодно - в чём различие между форматами ohi и img/dd? Надо бы их тоже поддержать. полезная тогда тулза для развёртывания разделов в образах будет.
однако, утилиту mkfs нужно сильно переделывать. сильно багованная она. файловая система сломанная выходит после неё.

Error404
25.05.2019, 11:00
тогда уже надо сразу добавлять поддержку разделов fat. Заодно - в чём различие между форматами ohi и img/dd? Надо бы их тоже поддержать. полезная тогда тулза для развёртывания разделов в образах будет.


Да, планирую и FAT доделать.Например используя FATfs от Чена. В принципе, нет никаких отличий от образов, сделанных dd, там тоже простая посекторная копия.



однако, утилиту mkfs нужно сильно переделывать. сильно багованная она. файловая система сломанная выходит после неё.

А что именно не отрабатывает? Все образы UZIX, что мы пробовали на реале, сделаны этими консольными Win32 утилитами mkfs.exe и ucp.exe (кроме разметки партиций, в то время я это сделал в образе орионовским fdisk который только размечает разделы, fs UZIX-a не делает).

- - - Добавлено - - -

CPM-овские версии mkfs.exe и ucp.exe кстати тоже были работоспособны. Хотя понятно что длительно их никто не проверял.

Sayman
25.05.2019, 11:30
А что именно не отрабатывает? Все образы UZIX, что мы пробовали на реале, сделаны этими консольными Win32 утилитами mkfs.exe и ucp.exe (кроме разметки партиций, в то время я это сделал в образе орионовским fdisk который только размечает разделы, fs UZIX-a не делает).
дело не в том, что они не работают, а в том, что в ФС возникают ошибки сразу после создания. Во1х, есть мусор в блоках с инодами. Во2х, но это скорее не ошибка, а не доработка - свободные блоки почему то в таблицу пишутся с конца, а не
с начала. (имеется в виду, их номера, filesys_t, там 2 таблицы - s_free[FSFREEBLOCKS] и s_inode[FSFREEINODES]. хотя их назначение я так и не понял). Вообще, с этой структурой непонятка какая-то. при создании дискеты 720кб, туда влезает 200 инодов, а в эту табличку только 50. зачем она нужна, я не понял. в оригинальной UFS таких табличек нет. при чём при просмотре образа под winhex я заметил, что эти две таблички не заполняются самой mkfs в полном объёме. если сделать fsck, то они сразу исправляются, мусора по образу становится меньше, хотя утилита явно не весь мусор убирает. и этот баг есть как в оригинале, так и под виндой.

Error404
25.05.2019, 11:45
дело не в том, что они не работают, а в том, что в ФС возникают ошибки сразу после создания. Во1х, есть мусор в блоках с инодами. Во2х, но это скорее не ошибка, а не доработка - свободные блоки почему то в таблицу пишутся с конца, а не
с начала. (имеется в виду, их номера, filesys_t, там 2 таблицы - s_free[FSFREEBLOCKS] и s_inode[FSFREEINODES]. хотя их назначение я так и не понял). Вообще, с этой структурой непонятка какая-то. при создании дискеты 720кб, туда влезает 200 инодов, а в эту табличку только 50. зачем она нужна, я не понял. в оригинальной UFS таких табличек нет. при чём при просмотре образа под winhex я заметил, что эти две таблички не заполняются самой mkfs в полном объёме. если сделать fsck, то они сразу исправляются, мусора по образу становится меньше, хотя утилита явно не весь мусор убирает. и этот баг есть как в оригинале, так и под виндой.

В детали инициализируемых ею структур я не углублялся. Если разберешься и поправишь - тебе будет жирный плюс в карму.

Error404
04.06.2019, 19:37
тогда уже надо сразу добавлять поддержку разделов fat.

Добавил поддержку FAT в образах (на базе FATfs от Чена), теперь плагинами равнозначно обрабатываются (в т.ч. и создаются) разделы/файловые системы CPM, FAT, UZIX.
Описание в этом посте (т.к. на него ссылка с первого поста): https://zx-pk.ru/threads/24501-tekhrazdel-uzix.html?p=1013490&viewfull=1#post1013490
Исходники на GIT (впрочем как и бинарники), одним архивом бинарники в пост по ссылке выше прикреплю позже, чего-то пока не получается прицепить вложение (матерюсь).

Sayman
04.06.2019, 20:10
Error404, а можешь перевыложить актуальные исходники виндовых утилит?
посидел над исходниками mkfs и утилиты по запиливанию бутлоадера. не получается запиливать совместимость с оригиналом. суперблок у оригинала расположен не с 0го сектора, а с 1го. это если про дискету говорить. у Спринтера наоборот - бутлоадер на 1м секторе должен быть у дискеты. уже не совместимо. и биос при попытке грузить с дискеты лоадер будет искать свою сигнатуру. без неё дискета не загружаемая. это или просто формат фс поменять чутка или залезать в исходники биоса. пока снова отложил эту идею...

Vasil
04.06.2019, 20:40
у Спринтера наоборот - бутлоадер на 1м секторе должен быть у дискеты.

.... это или просто формат фс поменять чутка или залезать в исходники биоса

И эта странная фраза (применительно к данному случаю) - "залезть в исходники биоса".... Что, не терпится наплодить туеву кучу сущностей ?.
В Спринтере всё сделано правильно - с одной и той же дискеты можно одновременно грузиться на ПК (ms-dos) и на Спринтере (его дос), одно другому не мешает. Креативные манагеры, мля.....

Sayman
04.06.2019, 21:18
И эта странная фраза (применительно к данному случаю) - "залезть в исходники биоса".... Что, не терпится наплодить туеву кучу сущностей ?.
В Спринтере всё сделано правильно - с одной и той же дискеты можно одновременно грузиться на ПК (ms-dos) и на Спринтере (его дос), одно другому не мешает. Креативные манагеры, мля.....
строго говоря, не та тема (не профильная по Спринтеру), но моё мнение таково, что если винт/карта стоит в Спринтере в качестве загружаемой или если речь о дискете загружаемой, то плевать на загрузку на ПЦ. главное, чтобы под вендой дискета читалась и был доступ к разделам на винте.
но в целом, изначлаьно рассматривал вариант именно смены формата фс у юзикса, а не пложения сущностей в биосе. так что не pantin pro vi.

Error404
04.06.2019, 23:06
Error404, а можешь перевыложить актуальные исходники виндовых утилит?


На github актуальные. Вся кучка (mkfs, fsck, ucp, плагин UDI.WCX) компилируются из общих исходников (https://github.com/serge-404/U.Z.I.X./tree/master/WinUtils/UDI-WCX), только файл-проект (*.bpr) открывается соответствующий, ну и может в проекте один файл из десятка общих может быть уникальным от проекта к проекту. На моем "домашнем" компе структура каталогов другая (ужасно неудобная исторически через кучу /../../../ к ./KERNEL и /HEADER), в GIT я скопировал в общую кучку, так что возможно в настройках проекта что-то при первой попытке не найдется (хотя оно и есть - надо тупо поправить пути в настройках).

Плагин для FAT в отдельном подкаталоге (/fdi) т.к. в нем нет общих файлов с утилитами Юзикса.

makefile я не делал, т.к. всё время в дебугере в GUI обычно сижу. Borland C++ Builder 5 использую (да, знаю что древнючий, но он был под рукой).



посидел над исходниками mkfs и утилиты по запиливанию бутлоадера. не получается запиливать совместимость с оригиналом. суперблок у оригинала расположен не с 0го сектора, а с 1го. это если про дискету говорить. у Спринтера наоборот - бутлоадер на 1м секторе должен быть у дискеты. уже не совместимо. и биос при попытке грузить с дискеты лоадер будет искать свою сигнатуру. без неё дискета не загружаемая. это или просто формат фс поменять чутка или залезать в исходники биоса. пока снова отложил эту идею...

ИМХО проще сразу делать версию для HDD (там много разновидностей носителя - IDE, CF, SD) т.к. подход похожий (блочное устройство с доступом по номеру сектора сквозной нумерации), а объем и удобство несравнимое. Или у HDD Спринтера тоже размечена "двойная загрузка?".

PS. Бинарники плагинов в пост по ссылке из первого, залил.

Error404
05.06.2019, 12:42
И эта странная фраза (применительно к данному случаю) - "залезть в исходники биоса".... Что, не терпится наплодить туеву кучу сущностей ?.
В Спринтере всё сделано правильно - с одной и той же дискеты можно одновременно грузиться на ПК (ms-dos) и на Спринтере (его дос), одно другому не мешает. Креативные манагеры, мля.....

Т.е. получается что на одной и той же дискетке лежит сначала код загрузчика в опкодах x86, а затем код загрузчика в опкодах z80? Вот это действительно креатив. :)
Типа у тех у кого хватало денех на Спринтер (который и сейчас стОит неадекватно) не было денег на две разные системные дискетки - одну в РС пользовать (кто-то вообще работал в 98году на РС c загрузочной дискетки кроме как с repairdisk раз в пятилетку?), другую в Спринтере? При том что писать/читать для переноса данных можно любую и там и там.
Как по мне, очень спорное решение.

Sayman
05.06.2019, 20:35
который и сейчас стОит неадекватно
а что там не адекватного? цена собранной платы ни чем не дороже той же Эвы. Может даже дешевле.


Т.е. получается что на одной и той же дискетке лежит сначала код загрузчика в опкодах x86, а затем код загрузчика в опкодах z80?
код ПЦ загрузчика лежит как и положено в 0м секторе. Загрузчик Спринтера лежит следом. Для этого в заголовке у фатовой дискеты есть переменная - зарезервированно секторов. достаточно 1 или 2 сектора в резерв поставить и занять под загрузчик. поэтому дискета и на пц и на спринтере работает. на винтах код загрузчика спринтера лежит сразу за mbr.

Error404
05.06.2019, 22:01
а что там не адекватного? цена собранной платы ни чем не дороже той же Эвы. Может даже дешевле.

тоже сравнил. Эва как 3 Ориона стоит при впятеро меньшем количестве корпусов. Ну, примерно.



код ПЦ загрузчика лежит как и положено в 0м секторе. Загрузчик Спринтера лежит следом. Для этого в заголовке у фатовой дискеты есть переменная - зарезервированно секторов. достаточно 1 или 2 сектора в резерв поставить и занять под загрузчик. поэтому дискета и на пц и на спринтере работает. на винтах код загрузчика спринтера лежит сразу за mbr.

Дискета работает на пц и на спринтере не потому что там два загрузчика, а потому что и пц и на спринтер работают с одинаковым форматом дискеты.
Или расчет в году, когда дискет было как грязи, делался на то, что можно будет грузиться(!) с одной и той же дискеты в двух совсем разных архитектурах? Для этого пришлось бы (даже приняв шизофрению что в том году еще были в каких-то глухих деревнях люди, грузившиеся и работавшие на PC с дискетки, а не с винта) держать на этой дискете винигрет из экзешников обоих архитектур. Ведь загрузка это не только загрузчик, это еще файлы ОС, конфиги, транзитные программы и т.п. Т.е. кроме как загрузиться с этого диска - уже ничего (ибо место занято мусором другой платформы) и для работы надо второй (третий, ...). Что мешало просто сразу держать два диска - один для РС и один для Спринтера, с нормальным загрузчиком как у всех - в первом (ну или нулевом - как считать) секторе? От этого они не перестали бы читаться. Как читаются на PC диски от MSX DOS (и обратно) не смотря на то, что на MSX никто не страдал такими чудачествами как на Спринтере.

Error404
06.06.2019, 12:25
Error404, Завтра думаю сесть за сырцы, как закончу с платкой. Может что перетяну ещё из современных *NIX.

В помощь линуксистам - утилиты Линукс для работы с файловыми системами UZIX:
https://github.com/marioaugustorama/UXU

Error404
08.06.2019, 00:11
В UDI.WCX (плагин для образов ФС UZIX) добавил фичу работы с bootsector и системными дорожками образа - запись/чтение кода бутсектора и кода ОС внутрь системных структур не повреждая исходного форматирования ФС через виртуальный подкаталог с виртуальными файлами boot.bin (может быть переименован в INI), system.bin (при последующей перезаписи в системной области сохранится имя и дата записанного файла ядра, если записываемый файл хотя бы на 32 байта меньше системной области). Фича необходимая, т.к. без неё никак не могут начать работу другие разработчики UZIX - препятствует то, что во всех репозиториях ЮЗИКСа что я видел (например по ссылке постом ранее), бутсектор и ядро ОС компилируются раздельно, и их после компиляциии как-то надо записывать на диск.

А например в АльтаирДОС я сделал что код бутсектора и ОС заливается одним общим файлом (т.к. и компилируется в один общий файл - чтобы при крайней необходимости можно было тупо одной командой POWER.COM залить скомпилированное на системные треки в нативной CP/M, впрочем там это умеет и fdisk), это тоже обрабатывается через виртуальный файл, но уже соответственно в ODI.WCX.

Исходники и бинари залиты на GIT. Надо ли продолжать практику дублирования бинарников вложениями на форуме?

https://i.ibb.co/ctpBLBX/udi.png (https://ibb.co/k0r7176)

Error404
04.07.2019, 19:49
Да, сейчас я с Makefile собираю. И всю сборку унифицировал, упростив оный.

Скинь посмотреть твой Makefile, пож.

andreil
04.07.2019, 21:37
Скинь посмотреть твой Makefile, пож.
Где ты был неделю назад?.. Всё удалено, а архив побился :(
https://image.prntscr.com/image/Vs7CAai3QAuIWl7H8FvlqA.png

Error404
05.07.2019, 16:16
Где ты был неделю назад?.. Всё удалено, а архив побился :(


Печально, чо. Делайте бэкапы, коллеги!
У меня тоже дней десять назад SSD системный накернился (10 лет отпахал, Intel из первых MLC[), но что-то было забэкаплено, что-то на Гите, так что потери терпимые.
Оттого и тема с Linux поперла - поставил его во временное пользование, а вот на Винде теперь проверить сборку пока не могу. :)

Допилил makefile , заодно причесал чтобы не править ничего в его теле руками (переменные). Всё собирается "из коробки" по "make all" - Юзикс, утилиты. Эмулятор прекрасен, хотя и не быстр (ассемблерный движок же заменен на pure C) - сборка всего длится 2 минуты. На Гите актуальное.



user@lubuntu2:~/WORK/U.Z.I.X.$ make help

Usage: make [<mode>]
Available modes:
kernel - rebuild EMU.COM,IDEBDOS.COM,UZIX.COM with existing OBJs
ckernel - clean&rebuild OBJs, build uzix.com
fdisk - rebuild FDISK.COM with existing OBJs
cfdisk - clean&rebuild OBJs, build fdisk.com
utils - rebuild IDEBDOS.COM,BD.COM,FSCK.COM,MKFS.COM,UCP.COM
cutils - clean&rebuild OBJs, build BD.COM,FSCK.COM,MKFS.COM,UCP.COM
all - clean all OBJs and rebuild all the above COM files
clean - clean all OBJs and RELs

user@lubuntu2:~/WORK/U.Z.I.X.$


- - - Добавлено - - -

Заковыки были как обычно в регистрах файлов (подозревал, но но макака как-то не очевидно об этом отображает) и несколько хаков (ну, для меня по крайней мере оно по неопытности так выглядит) в make пришлось применить.