Hishnik писал(а):
Вот! Откуда мы приходим к более общей формулировке стандарта - его цели. Сейчас получается стандарт на способ реализации системы - слова подобраны так, что становится понятным маршрут разработки. Другой подход, понятный пользователю - стандартизация функциональных возможностей.Можно заметить, что если, фактически, описан начальный загрузчик, то с точки зрения пользователя-программиста потом из этого начального загрузчика может получиться практически что угодно. Самодокументирование в данном случае не очень помогает писать практические программы, потому что для того же bare metal есть свой hello,world - мигание светодиода. И для него нужно иметь возможность организовать цикл, выводить в порт, задавать константы и т.п.
Код:
12345 CONSTANT LED_PORT
10000000 CONSTANT DELAY_CYCLES
: DELAY DELAY_CYCLES 0 DO LOOP ;
\ вариант, чтобы появилась арифметика: : DELAY DELAY_CYCLES BEGIN 1 - DUP 0 = UNTIL DROP ;
: MAIN
BEGIN
1 LED-PORT OUTPORT
DELAY
0 LED-PORT OUTPORT
DELAY
AGAIN
;
Так уже легче. Более предметный разговор.
Вот у Вас есть набросок программы. Из него видно ЧТО нам нужно.
Даже если бы не было наработано ничего, объем создаваемых слов весьма невелик. DELAY OUTPORT все равно надо будет реализовывать самостоятельно. Стандартные слова уже наработаны их можно брать и копипастить. Система же уже существует не только в виде ядра.
Пусть даже у нас есть только ядро под нужную платформу и нужно быстренько протестировать задумку.
HEADER LED_PORT ' HERE @ , 0x 3039 ,
HEADER DELAY_CYCLES ' HERE @ , 0x 989680 ,
HEADER 0 ' HERE @ , 0x 0 ,
HEADER 1 ' HERE @ , 0x 1 ,
HEADER DELAY HERE CELL+ ,
немного низкоуровневого кода
ALIGN
HEADER OUTPORT HERE CELL+ ,
вывод в порт низкоуровнев и платформозависим, не так ли?
ALIGN
HEADER MAIN interpret# , HERE CELL-
' 1 , ' LED-PORT , ' OUTPORT ,
' DELAY ,
' 0 , ' LED-PORT , ' OUTPORT ,
' DELAY ,
BRANCH ,
' EXIT ,
Да, придется еще сделать BRANCH.
Впрочем, такое написание сразу станет неудовлетворять и быстро будет создан CONSTANT, CODE: , Word: , BEGIN, AGAIN. Под них нужно сделать еще низкоуровневый COMPILE.
То-есть надстройка над ядром начнет развиваться, но в ней не будет "лишних" слов. Вместе с тем уже наработанное можно использовать в следующих проектах.
Честно говоря руки чешутся попробовать перетащить эту систему куда-то еще. Под Колибри я делал порт, довел до консоли. Но это все-равно x86. Хочется поковырять совсем иную платформу. Что может быть полезно? Совсем не ориентируюсь в embedded.