LOAD

Материал из ПМК вики
Перейти к навигации Перейти к поиску

LOAD (загрузить) — стандартное слово Каллисто.

LOAD           ( c −− )                             Загрузить с диска и интерпретировать экран номер c.
Пример работы слова LOAD

Загружает экран с номером u (компилирует или исполняет).

Слово LOAD может вызываться из других слов, поэтому загружаемый блок не должен захламлять или сбрасывать стек данных.

Ввод слова LOAD[править]

В режиме ЛАТ последовательно нажмите четыре клавиши     5   ШГ←   K 

Важное примечание[править]

Загрузка экрана — не только самая мощная, но и самая медленная операция Каллисто. Загрузка сложного экрана может занять десятки минут. Поэтому перед исполнением команды LOAD убедитесь в наличии надёжного электропитания у ЭКВМ и заранее найдите себе занятие на время загрузки.

Обычно Каллисто загружает экран молча, но вы можете наблюдать за процессом, если заранее вставите в ключевых точках отладочный вывод на индикатор.

Сразу после загрузки экрана сохраните результат с помощью команды SAVE", ведь команда объектной загрузки LOAD" работает намного быстрее. Повторная компиляция необходима только в случае изменения исходного кода приложения или при переходе на новую версию Каллисто.

Для экономии времени можно компилировать экраны на эмуляторе, с последующей передачей файлов двоичного сохранения на ЭКВМ. При таком подходе важно использовать ту же самую версию Каллисто и на компьютере, и на ЭКВМ.

Экран, загружаемый словом LOAD, может привести к авосту.

LOAD в стандарте ANS Forth[править]

 7.6.1.1790   LOAD                                                         BLOCK
            ( i*x u -- j*x )
            Сохраняет текущую спецификацию входного источника. Записывает u в 
            BLK (таким образом делает блок u входным источником, и 
            устанавливает входной буфер в соответствии с его содержимым), 
            обнуляет >IN, и интерпретирует. Когда область анализа исчерпана, 
            восстанавливает предыдущую спецификацию входного источника. Другое 
            состояние стека из-за интерпретации слов с помощью LOAD.

            Неопределенная ситуация существует, если u нулевой или - не 
            допустимый номер блока.

        См.: 3.4 Интерпретатор текста Forth.

История[править]

В 1968 году Чак Мур работал в Mohasco Industries, Inc (Amsterdam NY, англ.). Первая версия интерпретатора, получившая название FORTH, заработала на миникомпьютере IBM 1130 с графическим дисплеем 2250 (16-битный процессор с ОЗУ 8К, дисководом, клавиатурой, принтером и ридером/панчером перфокарт). Первый FORTH знал слово LOAD под именем READ

Слово LOAD считывало исходный код из блока размером в 1024 символа.

В MMSFORTH слово LOADS позволяло загрузить сразу несколько последовательных блоков.

LOAD в предыдущем стандарте Forth-83 (англ.)[править]

     LOAD         u --                          M,79
          The contents of >IN and BLK , which locate the current input
          stream, are saved.  The input stream is then redirected to
          the beginning of screen u by setting >IN to zero and BLK to
          u.  The screen is then interpreted.  If interpretation from
          screen u is not terminated explicitly it will be terminated
          when the input stream is exhausted and then the contents of
          >IN and BLK will be restored.  An error condition exists if
          u is zero.  See:  >IN  BLK  BLOCK

LOAD в стандарте Forth-79 (англ.)[править]

LOAD           n --                          202
    Begin  interpretation  of  screen n by  making  it  the  input
    stream;  preserve  the  locators of the present  input  stream
    (from  >IN  and  BLK).   If interpretation is  not  terminated
    explicitly  it  will be terminated when the  input  stream  is
    exhausted.    Control   then  returns  to  the  input   stream
    containing  LOAD,  determined by the input stream locators >IN
    and BLK.

LOAD в fig-FORTH Release 1 glossary, май 1979 (англ.)[править]

LOAD          n  ---                            L0
       Begin interpretation of screen n.
       Loading will terminate at the end of the screen or at ;S. See ;S and
       -->.

Реализация[править]

3574 ;#LOAD
3575 ; LOAD             ( c −− )                             Загрузить с диска и интерпретировать экран номер c.
3576 LLOAD:          .DB     4
3577                 .TEXT   "LOAD"                  ; ( i∗x №блока −− j∗x)
3578                 .DW     LMESS                   ; Загрузить экран с номером u (компилирует или исполняет)
3579 LOAD:           .DW CALL, BLK,UAT,TOR, IN,UAT,TOR, IN,ZSTORE, BLK,STORE
3580                 .DW INTER, FROMR,IN,STORE, FROMR,BLK,STORE, EXIT

Советская реализация[править]

Юрий Семёнов приводит следующее определение слова LOAD (стр. 135):

 : LOAD   BLK @ >IN @        ( в стеке номер загружаемого экрана N,
                              старые значения переменных BLK и >IN)
          0 >IN !           ( обнуление указателя экранного буфера)
          ROT                                ( в стеке  BLK,>IN,N )
          BLK !                        ( BLK=N, в стеке  BLK, >IN )
          INTERPRET         ( загрузка и интерпретация текста блока
                              с номером BLK слово за словом)
          >IN !             ( восстановление прежнего значения >IN)
          BLK ! ;           ( восстановление прежнего значения BLK)

Там же на стр. 158 приводится более длинное определение, позволяющее описывать слова, размещённые на двух или более экранах:

 : LOAD   BLK @ >R >IN @ >R 0 >IN ! BLK ! INTERPRET R> >IN ! R> BLK ! ;

У Баранова-Ноздрунова определение слова LOAD выглядит так (стр. 80):

: LOAD  ( N:Номер ---> Интерпретировать экран)
  >IN  @  >R  BLK  @  >R  ( Сохранить текущий)
  BLK  !  0  >IN  !  ( Установить новый)
  INTERPRET  ( Проинтерпретировать его)
  R> BLK !  R> >IN ! ; ( Вернуться к прежнему)

Описание и определение слова LOAD в ядре ФОРТ-ЕС:

LOAD      +N-> ИНТЕРПРЕТИРОВАТЬ ЭКРАН С НОМЕРОМ +N              41

                    Экран номер 41
( 31.03.86  -TRAILING  ' ['] [COMPILE] LOAD THRU ;S  --> )

: LOAD ( N->  ИНТЕРПРЕТИРОВАТЬ БЛОК С НОМЕРОМ N)
     >IN @ >R BLK @ >R BLK ! >IN 0! INTERPRET R> BLK ! R> >IN ! ;

Определение слова LOAD в FORTH ИТЭФ:

             HEAD    204Q,'LOA',304Q,LOAD,$COL            ; LOAD
             DW  BLK,AT,IN,AT,ZERO,IN,STORE,ROT,BLK
             DW  STORE,INTER,IN,STORE,BLK,STORE,SEMI

colorForth (cf2019.nasm 2019 Sep 14)[править]


; convert block start address to cell address, add the RELOCATED colorForth system base
blockToCellAddress:  ; ( blk -- a' )   \ add the RELOCATED offset and convert to cell address
    add _TOS_, [ v_offset ]   ; add the RELOCATED block number offset
    shl _TOS_, 0x08           ; convert to cell address
    ret

cellAddressToBlock:   ; ( a -- blk )  \ convert cell address to block number and subtract the RELOCATED block number offset
    shr _TOS_, 0x08           ;  convert cell address to block number
    sub _TOS_, [ v_offset ]   ; subtract the block number of block 0
    ret

_load_:   ; ( blk -- )    \ load the given block number
    call blockToCellAddress   ; add the RELOCATED block number offset and convert to cell address
    push edi
    mov edi, _TOS_
    _DROP_
interpret:
    mov edx, [ ( edi * 4 ) + 0x00 ]
    inc edi
    and edx, byte 0x0F
    call [ ( edx * 4 ) + tokenActions ]
    jmp short interpret

Ссылки[править]


  Это заготовка статьи. Вы можете помочь проекту, дополнив её.