почему в пентеве плохие 16-литровые банки

Postby fk0 » 19 Aug 2012, 23:36

lvd wrote:А я щитаю, что про 16к банки это демагогия. Всякие там трехадресные операции и проч. Вон в 51ых вообще дптр 1 шт, и всё в порядке с сикомпайлерами.


Ты не в курсе дела. В приличных x51 есть по 2 DPTR, например. Ибо это игольное ушко через которое доступ к фактически всем данным. Например, у infineon.

lvd wrote:Про технологию. Если так делать, это уже не ц будет, а какая-то шняга типа промежутночного языка. Почему бы просто не сделать указатели 3байтовыми?


Потому, что это потянет за собой:

1) изменения в компиляторе;
2) нужно в 2 раза больше регистров под такой указатель и 32-битная арифметика (ещё больше регистров...);
3) любое обращение к памяти не прямое, а через функцию...

Такой подход есть в проекте Z88. Бесперспективно и супер-медленно.

Я же говорю, что адресное пространство остаётся 16-битным. А фактически вводится понятие виртуальной памяти, примерно в том виде, как в win 3.11 или MacOS. http://pc.fk0.name/pub/books/os/os/node ... 0000000000
Обращение к выделенной памяти разумеется вручную. Но не побайтово (Z88), а поблочно, ввиду чего производительность не сильно страдает. Вместо банок можно было бы сделать swap-раздел на винте и скидывать туда блоки между обращениями -- это не важно.

lvd wrote:Как вызывать функцию по указателю, если 'прокси'?


Так и вызывать. Текст прокси располагается в сегменте постоянно доступного кода (ещё есть сегмент постоянно доступной памяти данных, включая стек, сегмент функций в банках, сегменты данных в банках).
Last edited by fk0 on 19 Aug 2012, 23:46, edited 1 time in total.
* Origin: зип файл! (2:5030/1559)
User avatar
fk0
 
Posts: 1535
Joined: 07 Apr 2007, 01:08
Group: Registered users

Postby fk0 » 19 Aug 2012, 23:44

DimkaM wrote:4к банки довольно интересно, было несколько случаев нехватки окон. Но если надо подключать довольно большой кусок ОЗУ(те же 16к), то упаришся, поэтому смотрим ниже...


Следует предусмотреть функции перекления не только одной, но двух и четырёх последовательно идущих банок (в последовательно идущие окна). Я где-то выше упоминал. Для больших массивов, до 16-Кбайт включительно. Ещё большие массивы -- адресация вручную.

DimkaM wrote:8битные порты тоже интересно. Но более интересно замапить порты в адресное пространство ОЗУ(в аврках помоему оно). Причём все порты, ну по возможности все.
Конечно 256 портов это просер куска адресного пространства в 256 единиц.


Я против памяти: программный сбой нередко ведёт и обращению по неверному указателю. В нашем случае это будет переключать банки и всё портить с фатальными глюками для других программ, для ОС и т.п.

Кстати, неплохо бы иметь возможность отдельные окна делать read-only: общий код, например, а то и код вообще -- по указанной выше причине.
* Origin: зип файл! (2:5030/1559)
User avatar
fk0
 
Posts: 1535
Joined: 07 Apr 2007, 01:08
Group: Registered users

Postby DimkaM » 21 Aug 2012, 09:28

to fk0,lvd чую общего решения тут не будет, пока не будет софта.
Нужно сделать экспериментальную прошивку, будет софт -> будут юзеры.
Просто так тратить альтерку,не вариант.
N>"Идите нахуй" со своей политикой...
DimkaM
 
Posts: 1011
Joined: 24 Mar 2010, 12:42
Location: г.Щёлково М.О.
Group: Registered users

Postby alone » 17 Oct 2013, 09:42

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

LD A,seg_SUBR
OUT (seg),A ;следующая команда включит заданный сегмент кода, а старый запомнит в защёлке порта
CALL SUBR
...
SUBR: ;в сегменте seg_SUBR
IN A,(seg) ;сегмент кода, откуда вызвали
PUSH AF
...

POP AF ;сегмент кода, откуда вызвали
OUT (seg),A ;следующая команда включит заданный сегмент кода
RET

Во время OUT (seg),A схема отрубает INT на время до следующей команды.

OUT (seg),A можно заменить на LD A,A (или другую бессмысленную 4-тактовую команду), а значение брать последнее промелькнувшее на ШД (для POP AF это A, для LD A,n это n). Но при этом должны быть выключены прерывания совсем.
User avatar
alone
 
Posts: 152
Joined: 04 Jun 2007, 20:04
Group: Registered users

Postby fk0 » 17 Oct 2013, 11:16

Вот эти команды, LD A, seg... OUT (), A, IN A, (...) -- их нужно кому-то генерировать, компилятору. А сейчас он это не делает. В моём же варианте дополнительный код тоже нужен, но не в месте вызова, а в отдельном сегменте. Поэтому нужно просто поправить таблицу символов, что проще, и добавить свой сегмент кода. А в твоем на уровне ассемблера подменять все call func на приведённую тобой последоватльность. А если вызов функции по указателю то вообще х.з. как быть. Вариант с "прокси", кстати широко используется в области микроконтроллеров на многих платформах. И в unix вызов библиотечных функций аналогично сделан, через PLT и GOT.
* Origin: зип файл! (2:5030/1559)
User avatar
fk0
 
Posts: 1535
Joined: 07 Apr 2007, 01:08
Group: Registered users

Postby DimkaM » 18 Oct 2013, 09:10

Почему сейчас в Еве нельзя всё это реализовать? Хотя бы 8битные порты, в шадовмоде.
N>"Идите нахуй" со своей политикой...
DimkaM
 
Posts: 1011
Joined: 24 Mar 2010, 12:42
Location: г.Щёлково М.О.
Group: Registered users

Postby alone » 18 Oct 2013, 22:04

Можно, но мы рискуем сделать неиспользуемую фичу (== просер ЛЕ), если не будет компилятора под это, а желательно и оси. Сейчас выбор оси имеет принципиальное значение, чтобы потом не пришлось переделывать софт. В TASiS проблема с размером юзерского пространства, ограничениями на длину файлов и вложенность каталогов (это не даёт поддержать FAT). В CP/M пугает длина файла в 128-байтных записях - есть ли версии, где она всё-таки задаётся с точностью до байта? Нужна совместимость с готовым софтом, хотя бы текстовыми редакторами и компиляторами.

Если система будет работать с FAT на SD искаропки, без всякого шаманства, то юзеры на неё перейдут и даже не заметят - будут всё так же запускать проги из ERS, только не трдшники, а экзешники. Зато можно будет реализовать настоящую многозадачность, кучу терминалов, редактирование немеренных файлов, деревья исходных текстов, игры больше мегабайта итд.
User avatar
alone
 
Posts: 152
Joined: 04 Jun 2007, 20:04
Group: Registered users

Postby fk0 » 25 Oct 2013, 13:59

Зачем всё это? Или linux бери, или мучайся с TR-DOS. Можно было бы в CP/M сделать, чтоб CP/M программы работали с TR-DOS. БОльше ничё не нужно.
* Origin: зип файл! (2:5030/1559)
User avatar
fk0
 
Posts: 1535
Joined: 07 Apr 2007, 01:08
Group: Registered users

Postby DimkaM » 25 Oct 2013, 15:04

alone wrote:В CP/M пугает длина файла в 128-байтных записях - есть ли версии, где она всё-таки задаётся с точностью до байта?
а зачем с точностью до байта, что это изменит?
N>"Идите нахуй" со своей политикой...
DimkaM
 
Posts: 1011
Joined: 24 Mar 2010, 12:42
Location: г.Щёлково М.О.
Group: Registered users

Postby alone » 08 Nov 2013, 08:22

Например, когда делаешь INCBIN в ассемблере, ожидаешь правильную длину вставленного файла. Или когда достаёшь файлы из архива, а потом кладёшь обратно.

Впрочем, в MSX-DOS 2 это всё решено за счёт дополнительного набора операций. Там длина файла любая.
User avatar
alone
 
Posts: 152
Joined: 04 Jun 2007, 20:04
Group: Registered users

PreviousNext

Return to ZX Spectrum

Who is online

Users browsing this forum: No registered users and 8 guests

cron