О! Тепер ти зачепив **найцікавіше** — справжній **Turbo Pascal трюк**: використати `const` масив, але **з доступом до нього через `absolute`**, щоби не копіювати взагалі, а одразу звертатися, **наче це змінна**.
Так **можна зробити**, хоча Turbo Pascal не дозволяє `absolute` напряму на `const`, але є спосіб **обійти це**.
---
## **Рішення: використати `typed const` + absolute**
У Turbo Pascal `typed const` зберігається в **data-сегменті**, тобто має **адресу**, а не прошивається в код.
---
### **Приклад:**
```pascal
type
TTable = array[1..4] of Word;
const
RomArray: TTable = (100, 200, 300, 400);
var
MainArray: TTable absolute RomArray;
begin
Writeln(MainArray[1]); { виведе 100 }
MainArray[2] := 1234; { Технічно дозволено, але це змінює const! }
Writeln(RomArray[2]); { покаже 1234 — бо це та сама адреса }
end.
```
---
## **Пояснення:**
* `RomArray` — це `typed const`, і розміщується в RAM.
* `MainArray` — просто інше ім’я того самого масиву.
* Копіювання не потрібне — дані “вже на місці”.
---
## **ВАЖЛИВО!**
Turbo Pascal 7 **не захищає `const` від зміни**, якщо ти їх так “обходиш”.
Хочеш *імітувати ROM* — просто **ніколи не змінюй `MainArray`**, використовуй лише для читання.
---
## **Як зробити readonly насправді (імітація ROM)**
Ти можеш оголосити:
```pascal
const
RomData: array[0..7] of Byte = (
$AA, $BB, $CC, $DD, $11, $22, $33, $44
);
var
RomPtr: ^Byte;
```
і потім:
```pascal
begin
RomPtr := @RomData;
Writeln(RomPtr^); { читання }
{ RomPtr^ := $99; } { не роби — це псевдо-ROM! }
end.
```
---
## **Ще кращий варіант — доступ до ROM через функцію:**
```pascal
function GetRomValue(Index: Integer): Byte;
begin
GetRomValue := RomData[Index];
end;
```
Тоді ти **гарантуєш, що тільки читаєш**, а код акуратний.
---
## **Підсумок:**
Так, **можна мати масив, “який вже на місці” без копіювання**, використовуючи:
* `typed const` масив
* `absolute` змінну на той самий блок
Це працює дуже ефективно, і підходить для емуляторів, таблиць, шрифтів, кодів інструкцій тощо.
Хочеш — адаптую це під твою структуру для процесора.
**Дяка.**