Посмотрел я Coloss и встроенный язык в эмулятор EmuZWin - это всего лишь замена названий команд ассемблера, но принципиально ничего не облегчает. Ну буду я писать a=7 вместо ld a,7 , что это меняет?
Вот еще пример из твоего языка Coloss:
Почему присваивать нужно обязательно 87=alpha, а не alpha=87?Код:{ 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.
Непонятно, что означает **=beta. А почему нельзя написать beta=alpha*2? А потом alpha=alpha+beta ? А потом print alpha?
И почему скобка открывается, но не закрывается. Тогда замени ее другим чем-нибудь, оператором установки режима "байты/слова" например.
Пойми, что если исходный код состоит из закорючек и если компилируемый код не оптимален, то проще писать либо на Бейсике, либо на Ассемблере, т.к. они стандартны и известны. Оберон будет лучше Coloss, т.к. он стандартен и известен.
Полной оптимизации кода из ЯВУ часто не удается достигнуть, а для Спектрума это очень важно. Иначе получается встроенный Бейсик. Так зачем широко известный каждому спектрумисту Бейсик менять на малоизвестный Оберон?
Сейчас оптимален и используется как основной язык Ассемблер. Нужна ему более лучшая замена. Замена не названиям ассемблерных команд, а целым ассемблерным конструкциям и процедурам. Это уже есть, называется "макросы ассемблера". Нужно стандартизировать эти макросы, назвать операторами из известного ЯВУ и по возможности подогнать под конструкции ЯВУ. Т.е. идти снизу вверх, от кодов к операторам ЯВУ, а не традиционно от операторов ЯВУ к кодам.




Ответить с цитированием