[an error occurred while processing this directive]



; Библиотека ошибок системы
; данный файл блокирует ошибки системы
; и заменяет их текстовыми сообщениями

; Дата написания 16.08.94;

 chn fheader.asm
 chn fwords.asm
 
 org 0-¤4e

; Смещение и длина библиотеки
Start
 dw  0-Start
 dw  EndLib-BegLib

; Входы в словарь
 dw  0
 dw  0
 dw  0
 dw  0
 dw  0
 dw  Errlib
 dw  0
 dw  0
 dw  0
 dw  0
 dw  0
 dw  0
 dw  0
 dw  0
 dw  0
 dw  0
 dw  0
 dw  0
 dw  0
 dw  0
 dw  0
 dw  0
 dw  0
 dw  0
 dw  0
 dw  0
 dw  0
 dw  0
 dw  0
 dw  0
 dw  0
                 
; Объектные ссылки
 dw  l000
 dw  l001+1
 dw  l002+1
 dw  l003+1
 dw  l004
 dw  0

; Начало библиотеки
BegLib dfb ¤0     Этот байт необходим просто!!!

; Начальная инициализация
Errlib
 dfb ¤86
 asc "errliB"
 dw  0

errlib
 jsr lit
l000
  dw myerr
l001
 jsr nexterr
 jsr makemyerr

 jsr lit
l004
  dw errmessages
 jsr four

 jmp store

; Адрес следующего обработчика ошибки
nexterr
 jsr Var
 dw  0 
 
; Обработка на FORTH
myerr
l002
 jsr myerra
 jsr zbran
  dw notfounderr-*-2
 
 jsr lit
  dw ¤87
 jsr out
 jsr outs

 jsr isbuf
 jsr at
 jsr zbran
  dw tttt-*-2
 
 jsr space
 jsr offsetbuf
 jsr at
 jsr dot

tttt
 jsr cr
 
notfounderr
l003
 jsr nexterr
 jsr at

 jmp exec
    
; Моя обработка ошибок с текстовым сопровождением
myerra               
 jsr Pop
 sta Vrem   
 lda ¤4
 sta Vrem+2
 lda ¤5
 sta Vrem+3 
b002
 ldy #¤0
 lda (Vrem+2),y    Это наша ошибка?
 cmp #¤ff
 beq enderrlist
 cmp Vrem  
 bne nexterrlst

; Ура нашли нашу ошибку!!!
 inc Vrem+2
 bne b000
 inc Vrem+3
b000
 lda #TRUE
 tay
 jsr Push          Признак того, что ошибку мы опознали
 lda Vrem+2
 ldy Vrem+3  

 jsr Push          Выдадим на стек адрес строки для вывода

 jmp PushNext      Признак успешного завершения поиска

nexterrlst
 ldy #¤1
 lda (Vrem+2),y
 clc
 adc #¤2
 adc Vrem+2
 sta Vrem+2
 bcc b002
 inc Vrem+3
 bne b002

enderrlist
 inx
 inx
 lda #FALSE
 tay
 jmp PushNext      Мы не нашли нашу ошибку!!!
 

;                    11111111111111112222222
;     123456789abcdef0123456789abcdef0123456
errmessages
 dfb ¤0,¤f
 asc "Деление на ноль"
 dfb ¤1,¤22
 asc "Нехватка памяти или Неверный адрес"
 dfb ¤2,¤26
 asc "Некорр. ввод или Синтаксическая ошибка"
 dfb ¤3,¤12
 asc "Непарные операторы"
 dfb ¤4,¤14
 asc "Не восстановлен стек"
 dfb ¤5,¤15
 asc "Не при компилировании"
 dfb ¤6,¤15
 asc "Только при компиляции"
 dfb ¤7,¤10
 asc "Нет такого слова"
 dfb ¤8,¤13
 asc "Нельзя забыть слово"
 dfb ¤9,¤f
 asc "Нельзя пустой :"
 dfb ¤a,¤15
 asc "Идентификатор неверен"
 dfb ¤b,¤13
 asc "Оператор недоступен"
 dfb ¤10,¤18
 asc "Ошибка заголовка сектора"
 dfb ¤11,¤18
 asc "Ошибка при чтении данных"
 dfb ¤12,¤10
 asc "Нет такого файла"
 dfb ¤13,¤18
 asc "Фатальная ошибка системы"
 dfb ¤14,¤16
 asc "Нет активных устройств"
 dfb ¤15,¤10
 asc "Нет такого файла"
 dfb ¤16,¤11
 asc "Некорректный файл"
 dfb ¤17,¤f
 asc "Ошибка загрузки"
 dfb ¤18,¤17
 asc "Нет места на устройстве"
 dfb ¤ff

EndLib

[an error occurred while processing this directive]