Посмотрел я Coloss и встроенный язык в эмулятор EmuZWin - это всего лишь замена названий команд ассемблера, но принципиально ничего не облегчает. Ну буду я писать a=7 вместо ld a,7 , что это меняет?

Вот еще пример из твоего языка Coloss:
Код:
{ 87 = alpha               ‘ LD  A,87      ‘
                           ‘ LD  (alpha),A ‘
  ** = beta                ‘ ADD A         ‘
                           ‘ LD  (beta),A  ‘
alpha + beta               ‘ LD  A,(alpha) ‘
                           ‘ LD  HL,beta   ‘
                           ‘ ADD (HL)      ‘
             = alpha = !   ‘ LD  (alpha),A ‘
                           ‘ RST  10h      ‘
ret                        ‘ RET           ‘
## alpha , beta ;   ‘ alpha: DW 0          ‘
                    ‘ beta:  DW 0          ‘

Из всего написанного лично у меня наибольший внутренний протест вызывает вывод символа по RST 10h конструкцией “{ = !”
Была мысль сделать вывод с помощью потоков... не совсем удачная. Обратите внимание на скромную открывающуюся фигурную скобку в самом начале проги. Ей не соответствует закрывающая. И не должна. Вся эта программа написана в малом (байтовом) представлении. И если вдруг мы захотим работать не с байтами, а словами, и с HL вместо A, зачем писать не “alpha + beta”? Т.е. “{“  переход в байтовый формат; ”}”  соответственно в формат слов. Вещественной арифметики, встроенной в компилятор, к сожалению пока нет. Нужно писать быструю библиотеку, калькулятор Спека по RST 28h ОЧЕНЬ медленный.
Итак, во что превратится наша прожка, если изменить скобку:

} 87 = alpha               ‘ LD  HL,87      ‘
                           ‘ LD  (alpha),HL ‘
  ** = beta                ‘ ADD HL,HL      ‘
                           ‘ LD  (beta),HL  ‘
alpha + beta               ‘ LD  HL,(alpha) ‘
                           ‘ LD  DE,(beta)  ‘
                           ‘ ADD HL,DE      ‘
             = alpha = !   ‘ LD  (alpha),HL ‘
                           ‘ CALL WRITENUM  ‘
ret                        ‘ RET            ‘
## alpha , beta ;   ‘ alpha: DW 0           ‘
                    ‘ beta:  DW 0           ‘

В большом (словарном) представлении конструкция “} = !” уже выводит не символ по коду в A, а число, находящееся в HL. Вывод производится с помощью процедуры writenum, к-рая находится в стандартной библиотеке COLOSS.COL.
Почему присваивать нужно обязательно 87=alpha, а не alpha=87?
Непонятно, что означает **=beta. А почему нельзя написать beta=alpha*2? А потом alpha=alpha+beta ? А потом print alpha?
И почему скобка открывается, но не закрывается. Тогда замени ее другим чем-нибудь, оператором установки режима "байты/слова" например.

Пойми, что если исходный код состоит из закорючек и если компилируемый код не оптимален, то проще писать либо на Бейсике, либо на Ассемблере, т.к. они стандартны и известны. Оберон будет лучше Coloss, т.к. он стандартен и известен.
Полной оптимизации кода из ЯВУ часто не удается достигнуть, а для Спектрума это очень важно. Иначе получается встроенный Бейсик. Так зачем широко известный каждому спектрумисту Бейсик менять на малоизвестный Оберон?
Сейчас оптимален и используется как основной язык Ассемблер. Нужна ему более лучшая замена. Замена не названиям ассемблерных команд, а целым ассемблерным конструкциям и процедурам. Это уже есть, называется "макросы ассемблера". Нужно стандартизировать эти макросы, назвать операторами из известного ЯВУ и по возможности подогнать под конструкции ЯВУ. Т.е. идти снизу вверх, от кодов к операторам ЯВУ, а не традиционно от операторов ЯВУ к кодам.