home *** CD-ROM | disk | FTP | other *** search
/ Syzygy Magazine 6 / Syzygy_Magazine_6_1999___pl_Disk_2_of_3_Side_B.atr / sparta1.arc / SPARTA08.DOC < prev    next >
Text File  |  1999-02-20  |  6KB  |  1 lines

  1.       Inna grupa procedur to funkcj❎ obs uguj⇧ce b ❎dy procedur SDX. Wiele¢  procedur lub programw zg asza b ⇧d wykonywania poprzez skok do U_FAIL,¢  normalnie zawiera ona procedur❎ systemow⇧ obs ugi b ❎dw. Uəytkownik ma¢  jednak moəliwo③⑥ zmiany przebiegu tej procedury poprzez zak adanie w asnych¢  pu apek (jak TRAP w BASICU).¢¢      Pierwsza procedura U_FAIL s uə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 za oəonych pu apek.¢           beq eA6F0¢           dex             Gdy jest co najmniej jedna, indeks zmniejsza si❎ o¢           stx erridx      jeden (pu apka zurzyta)¢¢           lda erral_t,x   i ustawia si❎ adres procedury pu apki.¢           sta erru_v¢           lda errah_t,x¢           sta erru_v+1¢¢           lda errstk_t,x  Teraz procedura odk ada na stos wska♪nik stosu dla¢           pha             wywo ania pu apki.¢¢           lda errcei_t,x  Nast❎pnie sprawdza jaka by a 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 za oəy  pu apki wywo ana zostaje¢                           pu apka systemowa.¢¢  Procedura ustawiaj⇧ca pu apk❎ 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   obs ugi 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             wywo uj⇧cej funkcj❎.¢           inx¢           txa¢           sta errstk_t,y¢  eA70A    inc erridx      W ostatnim etapie funkcja zwi❎ksza indeks za oəonych¢           rts             pu apek.¢¢  Procedura zdejmuj⇧ca wcze③niej za oəon⇧ pu apk❎.¢  Procedura nie zmienia rejestrw 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 za oəona pu apka.¢           beq eA717¢           dec erridx      Gdy tak jest zdejmuje j⇧.¢  eA717    pla             Na koniec od③wierza A i koczy dzia anie.¢           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 komunikatw¢           lda (bufadr),y  si❎ koczy.¢           beq eB4A1¢¢           cmp temp1       Gdy tak nie jest porwnuje numery b ❎dw.¢           beq eB496¢  eB488    iny             i gdy s⇧ inne poszukuje nast❎pnego komunikatu.¢           lda (bufadr),y¢           bne eB488¢¢           sec             Gdy zosta  on odnaleziony jego d ugo③⇨ zostaje¢           tya             dodana do wska♪nika.¢           adc bufadr¢           bcc eB479¢           inx¢           bne eB479       Teraz p❎tla si❎ powtarza.¢¢  eB496    iny             Gdy odnaleziono prawid owy komunikat jest on¢           lda (bufadr),y  drukowany.¢           beq eB4B3¢           jsr PUTC¢           jmp eB496¢¢  eB4A1    jsr PRINTF      W przeciwnym razie wy③wietlany jest oglny komunikat¢           dta c'Error - $%2x',b(0)    b ❎du.¢           dta a(temp1)¢¢  eB4B3    lda #$9B        Na kocu procedura drukuje znak EOL i koczy¢           jsr PUTC        dzia anie z¢           lda temp1       od③wierzeniem A.¢           rts¢¢      Tablica komunikatw 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.¢