Inna grupa procedur to funkcj❎ obsuguj⇧ce b❎dy procedur SDX. Wiele¢ procedur lub programw zgasza b⇧d wykonywania poprzez skok do U_FAIL,¢ normalnie zawiera ona procedur❎ systemow⇧ obsugi b❎dw. Uəytkownik ma¢ jednak moəliwo③⑥ zmiany przebiegu tej procedury poprzez zakadanie wasnych¢ puapek (jak TRAP w BASICU).¢¢ Pierwsza procedura U_FAIL suəy do sygnalizowania b❎du systemowi. Numer¢ b❎du niesiony jest w Y. Na wyj③ci numer b❎du niesiony jest w Y i A.¢¢ org $A6BE User FAIL.¢¢¢ jext_off equ $7F4¢¢ U_FAIL tay Na pocz⇧tku numer b❎du przenoszony jest do A.¢ ldx erridx Teraz sprawdzany jest numer zaoəonych puapek.¢ beq eA6F0¢ dex Gdy jest co najmniej jedna, indeks zmniejsza si❎ o¢ stx erridx jeden (puapka zurzyta)¢¢ lda erral_t,x i ustawia si❎ adres procedury puapki.¢ sta erru_v¢ lda errah_t,x¢ sta erru_v+1¢¢ lda errstk_t,x Teraz procedura odkada na stos wska♪nik stosu dla¢ pha wywoania puapki.¢¢ lda errcei_t,x Nast❎pnie sprawdza jaka bya uəywana pami❎⇨.¢ cmp calext_i¢ beq eA6E9¢¢ sta calext_i Gdy stan pami❎ci jest inny niə by¢ inc calext_i zostaje on odtworzony.¢ jsr jext_off¢¢ eA6E9 pla Teraz ustawiony zostaje indeks stosu¢ tax¢ txs¢ tya i ponownie w a ustawiony zostaje numer b❎du¢¢ jmp (erru_v) po czym procedura skacze do funkcji uəytkownika.¢¢ eA6F0 jmp (errs_v) Gdy uəytkownik nie zaoəy puapki wywoana zostaje¢ puapka systemowa.¢¢ Procedura ustawiaj⇧ca puapk❎ dla SDX.¢¢ org $A6F3 User Set FAIL.¢¢ calext_i equ $A41¢ erridx equ $C85¢ erral_t equ $C86¢ errah_t equ $C90¢ errstk_t equ $C9A¢ errcei_t equ $CA4¢¢ U_SFAIL ldy erridx Na pocz⇧tku ustawiany w tablicy jest adres procedury¢ sta erral_t,y obsugi b❎du.¢ txa¢ eA6FA sta errah_t,y¢¢ lda calext_i Nast❎pnie zapami❎tywany jest stan ustalonej pami❎ci.¢ sta errcei_t,y¢ tsx A potem warto③⇨ wska♪nika stosu dla procedury¢ inx wywouj⇧cej funkcj❎.¢ inx¢ txa¢ sta errstk_t,y¢ eA70A inc erridx W ostatnim etapie funkcja zwi❎ksza indeks zaoəonych¢ rts puapek.¢¢ Procedura zdejmuj⇧ca wcze③niej zaoəon⇧ puapk❎.¢ Procedura nie zmienia rejestrw procesora.¢¢ org $A70E User eXit FAIL.¢¢ erridx equ $C85¢¢ U_XFAIL pha Na pocz⇧tku procedura zapami❎tuje A.¢ lda erridx Nast❎pnie sprawdza czy istnieje zaoəona puapka.¢ beq eA717¢ dec erridx Gdy tak jest zdejmuje j⇧.¢ eA717 pla Na koniec od③wierza A i koczy dziaanie.¢ rts¢¢ Ostatnia z tej grupy procedur powoduje wy③wietlenie komunikatu o b❎dzie.¢ Parametrem jest tu numer b❎du niesiony w A. Funkcja zachowuje ten rejestr.¢¢ org $B46D User ERROR message.¢¢ bufadr equ $15¢ temp1 equ $C38¢ errmsg equ $B4BC¢¢ PUTC equ $AB56¢ PRINTF equ $A926¢¢ U_ERROR sta temp1 Procedura zapami❎tuje numer b❎du.¢¢ jsr PRINTF Nast❎pnie drukuje pusty wiersz.¢ dta b($9B),b($00)¢¢ lda <errmsg Procedura ustawia wska♪nik do pierwszego¢ ldx >errmsg komunikatu o b❎dzie.¢¢ eB479 sta bufadr Teraz procedura ustala dany adres.¢ stx bufadr+1¢¢ ldy #$00 Najpierw procedura sprawdza tablica komunikatw¢ lda (bufadr),y si❎ koczy.¢ beq eB4A1¢¢ cmp temp1 Gdy tak nie jest porwnuje numery b❎dw.¢ beq eB496¢ eB488 iny i gdy s⇧ inne poszukuje nast❎pnego komunikatu.¢ lda (bufadr),y¢ bne eB488¢¢ sec Gdy zosta on odnaleziony jego dugo③⇨ zostaje¢ tya dodana do wska♪nika.¢ adc bufadr¢ bcc eB479¢ inx¢ bne eB479 Teraz p❎tla si❎ powtarza.¢¢ eB496 iny Gdy odnaleziono prawidowy komunikat jest on¢ lda (bufadr),y drukowany.¢ beq eB4B3¢ jsr PUTC¢ jmp eB496¢¢ eB4A1 jsr PRINTF W przeciwnym razie wy③wietlany jest oglny komunikat¢ dta c'Error - $%2x',b(0) b❎du.¢ dta a(temp1)¢¢ eB4B3 lda #$9B Na kocu procedura drukuje znak EOL i koczy¢ jsr PUTC dziaanie z¢ lda temp1 od③wierzeniem A.¢ rts¢¢ Tablica komunikatw o b❎dzie.¢¢ org $B4BC ERRor MesSaGe.¢¢ errmsg dta b($80),c'User break abort',b(0) ($B4BC)¢ dta b($81),c'File already open',b(0)¢ dta b($84),c'No device handler present',b(0)¢ dta b($8A),c'Drive not present',b(0)¢ dta b($8B),c'Drive NAK',b(0)¢ dta b($90),c'Write protect or bad sector',b(0)¢ dta b($92),c'No function in device handler',b(0)¢ dta b($94),c'Unrecognized diskette format',b(0)¢ dta b($96),c'Directory not found',b(0)¢ dta b($97),c'File exists',b(0)¢ dta b($98),c'Not binary file',b(0)¢ dta b($9A),c'Loader: Symbol not defined',b(0)¢ dta b($9C),c'Bad parameter',b(0)¢ dta b($9E),c'Out of memory',b(0)¢ dta b($A2),c'Disk full',b(0)¢ dta b($A3),c'Illegal wildcard in name',b(0)¢ dta b($A5),c'Bad filename',b(0)¢ dta b($A7),c'Can''t delete directory',b(0)¢ dta b($AA),c'File not found',b(0)¢ dta b($00)¢¢ end of doc.¢