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:Как вызывать функцию по указателю, если 'прокси'?
Так и вызывать. Текст прокси располагается в сегменте постоянно доступного кода (ещё есть сегмент постоянно доступной памяти данных, включая стек, сегмент функций в банках, сегменты данных в банках).