Всем привет. Сейчас выложу описание формата ZE/ZL (ZX Executable/ZX Library) для новой ОС. Еще не закончено, некоторые моменты отсутствуют. Просьба комментировать, модифицировать и дополнять.
Всем привет. Сейчас выложу описание формата ZE/ZL (ZX Executable/ZX Library) для новой ОС. Еще не закончено, некоторые моменты отсутствуют. Просьба комментировать, модифицировать и дополнять.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Описание:
Не сделано: Import/Export.ZE/ZL (ZX Executable/ZX Library) structure (as defined for version 1.00):
02 'ZE' or 'ZL' signature
02 ZX Executable version (0112h means 1.12)
04 File length
02 Number of segments (A)
04*A Segment descriptors
02 Number of imported functions (B)
??*B Imported function descriptors
02 Number of code modifications (C)
??*C Code modifications
?? Segment data (sequential, by descriptors)
------------- ZL extensions begin
02 Number of exported functions (D)
??*D Exported function descriptors
Segment descriptor:
02 Segment length
01 Flags
0: 0 = code segment, 1 = data segment
1: for code: 0 = near segment (must be placed in the same page with
previous segment), 1 = far segment (may be placed anywhere)
for data: 0 = static segment (must be swapped to certain location),
1 = dynamic segment (may be located anywhere)
2: for code: 0 = frequent ISCs (active participant of intersegment
calls), 1 = rare ISCs (rarely called by intersegment call)
for data: 0 = swappable segment (may be swapped), 1 = must be
placed with previous segment)
3: 0 = normal segment, 1 = shared memory segment (in common RAM)
4: 0 = normal segment, 1 = empty segment (filled with 0s, no real
data in ZE image present)
5-6: alignment (00 = 1 byte; 01 = 16 bytes; 10 = 256 bytes; 11 =
4096 bytes)
7: reserved
Code modification:
01 Modification type
0: internal call/data access
1: intersegment call
2: intersegment data access
3: intersegment pagination (swap)
4: internal high byte
5: internal low byte
6: intersegment high byte
7: intersegment low byte
8: imported function (intersegment)
9: imported data (intersegment)
10: imported pagination (intersegment)
11: imported high byte (intersegment)
12: imported low byte (intersegment)
13: system call
14: system variable
15: two addresses difference
16: two addresses difference high byte
17: two addresses difference low byte
18-255: reserved
Modification 0:
02 Segment index
02 Internal address (+0/1: added to segment start)
Modification 1:
02 Segment index
02 Internal address (+0/1: replaced by call pointer,
+2/3: added with segment start)
Modification 2:
02 Segment index
02 Internal address (+0/1: added to segment start)
02 Target segment index
Modification 3:
02 Segment index
02 Internal address (+0/1: replaced by page number)
02 Target segment index
Modification 4:
02 Segment index
02 Internal address (+0: added to high result byte)
02 Target internal address
Modification 5:
02 Segment index
02 Internal address (+0: added to low result byte)
02 Target internal address
Modification 6:
02 Segment index
02 Internal address (+0: added to high result byte)
02 Target segment index
02 Target offset
Modification 7:
02 Segment index
02 Internal address (+0: added to low result byte)
02 Target segment index
02 Target offset
Modification 8:
02 Segment index
02 Internal address (+0/1: replaced by segment index (call ptr),
+2/3: added to offset or replaced by 2xNOP)
02 Imported function index
Modification 9:
02 Segment index
02 Internal address (+0/1: added to target address)
02 Imported function index
Modification 10:
02 Segment index
02 Internal address (+0/1: replaced by page number)
02 Imported function index
Modification 11:
02 Segment index
02 Internal address (+0: added to high byte of the target address)
02 Imported function index
Modification 12:
02 Segment index
02 Internal address (+0: added to low byte of the target address)
02 Imported function index
Modification 13:
02 Segment index
02 Internal address (+0/1: replaced by segment index (call ptr),
+2/3: added to offset or replaced by 2xNOP)
02 System call index
Modification 14:
02 Segment index
02 Internal address (+0/1: added to target address)
02 System variable index
Изменения: учел кое-какие пожелания из ответов ниже.
Последний раз редактировалось Alex/AT; 02.04.2005 в 14:52.
так, для информации =)
частично перевел, но простите - не все =( - времени не хватило =)
предлагаю делать Exported Function и в обычных EXE. Простейший пример start, autostart.
Стасик, разве ты не понял ещё? Тут пцшно-линухово-виндозный заговор, искусно организованный засланцами с пц =) Так что амижные идеи в спекооси не пройдут =))))Сообщение от acidrain
Да, вполне реально. EXE тоже сможет экспортить функции, которые, к тому же, могут быть подключены дочерними DLL. Обязательно учту при дальнейшем описании.предлагаю делать Exported Function и в обычных EXE. Простейший пример start, autostart.
Блин. Тут не то что амижные, тут вообще никакие не пройдут. Ибо адресное пространство у спека - всего лишь 16 бит... Вот поэтому приходится изголяться. А в доках по ханкам меня порадовала надпись "Неизвестная структура" =)Так что амижные идеи в спекооси не пройдут =))))
мля... вдарились в винду- подпихиваем линух. стали глядеть в сторону линукса- тоже не так, подавай амигу. а у многих она есть? я лично видел ее всего один раз в работе так что абсолютно ничего не знаю насчет принципов работы.Сообщение от lvd
а насчет доки. довольно интересно. Hunks == Chunks? они же секции в файлах PE-формата? всетаки надо стараться чтобы количестви лишней информации в бинарниках стремилось к минимуму- поэтому нет особого смысла в символьных названиях секций (насколько я понял, они присутствуют). если рассматривать то, что я до этого предлагал (модульную структуру), то можно также сказать, что она состоит из четырех ханков- таблица релокации, таблица символьных имен экспортируемых точек, таблица символьных имен импортируемых точек, код. в исполняемом файле можно оставить только первую и последнюю точки. для динамических библиотек еще нужна таблица экспортируемых точек, чтобы искать адреса во время исполнения. плюс к тому, структура таблицы релокации позволяет корректировать не только 16, но и 8-битные адреса (ld a,.metka:ld h,'font etc).
Принципы работы такие же, как у любого компа - процессор + периферия =)Сообщение от Vitamin
А вообще ничто не мешает взять winUAE и с некоторой помощью других амижников разобраться до любого уровня =)
Неа! =)а насчет доки. довольно интересно. Hunks == Chunks?
Они присутствуют, если это объектник. А если 'эхешник', то отсутствуют. Формат файлов остаётся таким же.всетаки надо стараться чтобы количестви лишней информации в бинарниках стремилось к минимуму- поэтому нет особого смысла в символьных названиях секций (насколько я понял, они присутствуют).
плюс к тому, структура таблицы релокации позволяет корректировать не только 16, но и 8-битные адреса (ld a,.metka:ld h,'font etc).Код:add a,a add a,a ld l,a ld h,'font/8 add hl,hl add hl,hl add hl,hl
Код:org #какой_попало ;some stuff ld h,'megatable ;more stuff org ($+255)&#FF00 megatable db #xx,#yy,... ;256 bytes
Всё подобное, как я понимаю, пойдёт на север? =)Код:ld h,'megatable ; stuff inc h ;stuff dec h ;etc. ;stuff ld a,'microtable-'megatable add a,h ld h,a
...если честно, я вообще с трудом представляю, что в результате того, что вы задумали, выйдет. Сможет ли там существовать приложение уровня аласма, например? С какой скоростью оно будет работать?...
ну да. и че гнать на закос под винду или юних- не понимаю. что есть, то и изучаем.Сообщение от lvd
каких других? у нас в городе ни одной амиги насколько я знаю нету.Сообщение от lvd
а похоже- как по названию, так и по смыслу %)Сообщение от lvd
ld h,'fontСообщение от lvd
srl h
srl h
srl h
другого варианта пока не вижу. это модули ис-доса могли в себе хранить выражения в ОПЗ. область применения не настолько высока чтоб изза них городить довольно сложную систему.
если орг по круглому адресу- нет проблем. а гарантировать такое для приложений- вполне реальноСообщение от lvd
__extern "diff",diffСообщение от lvd
ldh_ a,diff
;ldl_ a,diff
;somewhere in other module
__public "diff",constant,microtable-megatable
;__public "diff",constant,'microtable-'megatable
сказывается разница менталитета. для спектрумиста ассемблер- это неразлучная парочка компилятор+редактор. и для полной шведской семьи +отладчик %)Сообщение от lvd
кто мешает сделать компилятор через командную строку? он тебе может через системные функции или библиотеки в нижней памяти что угодно компилить.
что если вы собираетесь писать чтото новое (в частности ОСь) то вообще говоря прям счаз оно даст одни сплошные минусы:
- Скорость работы приложений отнесённая к чистой производительности процессора будет ниже
- Всё, что невозможно реализовать аппаратно будет реализовываться программно (читай - всё будет реализовано программно)
- Всё потенциальные и реальные плюсы будут для этой системы существовать только после достаточно продолжительного периода времени, когда будет написано много приложений, драйверов и произведена достаточная отладка
Исходя из этого мне непонятно, как вообще можно горить "это будет потреблять много ресурсов", если с самого начала все программные ресурсы будут отдаваться на откуп того, что в других системах реализовано аппаратно?
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)