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

  1. ¢      Procedura obs ugi urz⇧dze CON: i PRN: jest jedna, ma jednak dwa pocz⇧tki¢  dla ustawienia indeksu urz⇧dzenia, w tabeli adresowej sterownikw systemu¢  ATARI.¢¢           org $BE6    CON handler.¢¢  jcar_sw  equ $7FA¢  jcar_old equ $7FD¢  conprn_i_i equ $C11¢  conmain  equ $BD87¢¢  conhand  lda #$00¢           dta b($2C) bit¢¢           org $BE9    PRN handler.¢¢  prnhand  lda #$30        Ustawienie odpowiedniego indeksu dla CON:¢           sta conprn_i_i    Zapisanie wcze③niej ustawionego indeksu.¢¢           lda #$FF        W ⇧czenie banku 1 modu u.¢           jsr jcar_sw¢           jsr CONmain     Wywo anie sterownika.¢           jmp jcar_old    Wy ⇧czenie modu u i koniec procedury.¢¢¢     G wna procedura obs ugi urz⇧dze CON: i PRN: mie③ci si❎ w pierwszym banku¢  modu u rom.¢¢           org $BD87   CON and prn MAIN handler procedure.¢¢  icdnoz   equ $21¢  device   equ $761¢  cpcpioflg  equ $C10¢  icdno    equ $341¢  confunc  equ $BDB0¢  conadr   equ $BDB4¢¢  CONmain  lda #$00        Na pocz⇧tku procedura kasuje flag❎ odczyt-zapis.¢           sta cpcpioflg¢           lda device      Nast❎pnie ustawia numer urz⇧dzenia dla systemu ATARI¢           and #$0F        OS pobran⇧ z 4 m odszych bitw rejestru DEVICE.¢           sta icdno¢           sta icdnoz¢           tya¢           ldx #$03        Teraz numer funkcji (SDX kernel) porwnuje z numerem¢  eBD99    cmp confunc,x   z tabeli CONFUNC.¢           beq eBDA4¢           dex             Gdy operacja nie zosta a znaleziona w tabeli¢           bpl eBD99       procedura koczy si❎ b ❎dem nr.$92:¢           lda #$92        No function...¢           rts¢¢  eBDA4    txa             Gdy funkcja zosta a odnaleziona jej indeks z tabeli¢           asl @           CONFUNC zostaje przemnoəony przez dwa i uəyty jako¢           tax             indeks w tabeli adresw. Odpowiedni adres procedury¢           lda conadr+1,x  jest teraz przenoszony na stos w celu realizacji¢           pha             danego podprogramu sterownika.¢           lda conadr,x¢           pha¢           rts¢¢     Tablice numerw funkcji i adresw odpowiednich procedur :¢¢           org $BDB0 CON and prn functions.¢¢  confunc  dta b($00),b($01),b($09),b($07)¢¢           org $BDB4 CON and prn handlers ADRess table.¢¢  conget   equ $BDF4¢  conput   equ $BDEE¢  conopen  equ $BDBC¢  concls   equ $BDDC¢¢  conadr   dta a(conget-1)¢           dta a(conput-1)¢           dta a(conopen-1)¢           dta a(concls-1)¢¢      Poszczeglne podprogramy sterownika maj⇧ nast❎puj⇧c⇧ posta⇨:¢¢           org $BDBC   CON and prn OPEN.¢¢  devtab   equ $740¢  conprn_i_i equ $C11¢  atarihnd equ $BE50¢¢  conopen  lda conprn_i_i    Na wst❎pie procedura sprawdza o jakie urz⇧dzenie¢           beq eBDC7       chodzi i¢           jsr atarihnd    gdy jest to drukarka otwiera to urz⇧dzenie poprzez¢           tya             standardowy handler ATARI. Gdy wynik jest¢           bmi eBDDB       niepoprawny procedura si❎ koczy.¢¢  eBDC7    ldy #$00¢  eBDC9    lda devtab,y    Teraz przeszukiwana jest tablica DEVTAB w celu¢           bmi eBDD6       znalezienia wolnego kana u SDX IO.¢           iny¢           cpy #$10¢           bne eBDC9¢           lda #$A1        Gdy go brak wyst❎puje b ⇧d : Too meny...¢           rts¢¢  eBDD6    sty siocbidx    W przeciwnym razie zostaje on ustawiony jako zaj❎ty¢           lda #$01        i procedura koczy sie poprawnym wynikiem.¢  eBDDB    rts¢¢           org $BDDC   CON and prn CLoSe.¢¢  conprn_i_1 equ $C11¢  atarihnd equ $BE50¢¢  concls   ldx conprn_i_i    Na pocz⇧tku procedura sprawdza o jakie urz⇧dzenie¢           beq eBDEB       chodzi¢           inx             i gdy jest to drukarka zwi❎ksza indeks sterownika¢           inx¢           stx conprn_i_i    urz⇧dze ATARI o 2 (operacja close) i wywo uje¢           jsr atarihnd    sterownik.¢           tya             Procedura koczy si❎ przekazanym wynikiem.¢           rts¢¢  eBDEB    lda #$01        Dla CON kana  nie jest zamykany i procedura zawsze¢           rts             koczy si❎ poprawnie.¢¢     Procedura PUT i GET jest wsplna, inny jest tylko indeks sterownika, a¢  takəe flaga operacji.¢¢           org $BDEE   CON and prn PUT.¢¢¢  zbufa    equ $43¢  zdrva    equ $45¢  faux1    equ $782¢  faux4    equ $785¢  cpcpioflg  equ $C10¢  conprn_i_i equ $C11¢  atarihnd equ $BE50¢¢  conput   dec cpcpioflg     Na wst❎pie ustawiana jest flaga operacji pisania¢           lda #$06        i wzgl❎dy indeks sterownika.¢¢           dta b($2C) bit¢¢           org $BDF4   CON and prn GET.¢¢  conget   lda #$04        Dla operacji GET ustawiany jest tylko wzgl❎dy indeks¢           clc             starownika.¢           adc conprn_i_i    Teraz jest on dodawany do g wnego indeksu¢           sta conprn_i_i    urz⇧dze.¢¢           lda faux1       Nast❎pnie ustawiany jest adres buforu dla¢           sta zdrva       operacji i¢           lda faux1+1¢           sta zdrva+1¢¢           lda faux4       jego d ugo③⇨.¢           sta zbufa¢           lda faux4+1¢           sta zbufa+1¢¢           lda #$00        Teraz d ugo③⇨ danych jest kasowana.¢           sta faux4¢           sta faux4+1¢¢  eBE19    lda zbufa       Na kocu procedura sprawdza czy ilo③⇨ bajtw po¢           cmp faux4       operacji jest rwna d ugo③ci zak adanej.¢           bne eBE2A¢           lda zbufa+1¢           cmp faux4+1¢           bne eBE2A¢¢           lda #$01        Gdy tak jest procedura koczy si❎ poprawnym¢           rts             wynikiem.¢¢  eBE2A    ldy #$00        W przeciwnym razie pobierany z buforu jest bajt i¢           lda (zdrva),y¢           jsr atarihnd    wysy any przez standardowy¢           cpy #$00        sterownik ATARI. Nast❎pnie od③wierzany wynik¢           bmi eBE4E       operacji¢           bit cpcpioflg     i dla jej bezb ❎dnego przebiegu sprawdzana jest¢           bmi eBE3E       jest flaga zapisy.¢           ldy #$00        Gdy jest ona ustawiona to bajt zapisywany jest do¢           sta (zdrva),y   buforu.¢  eBE3E    inc zdrva       Teraz zwi❎kszany jest adres buforu i¢           bne eBE44¢           inc zdrva+1¢  eBE44    inc faux4       oraz liczba wys anych/pobranych bajtw.¢           bne eBE19¢           inc faux4+1¢           bne eBE19       W tym miejscu procedura si❎ zap❎tla.¢¢  eBE4E    tya             W przypadku b ❎du jego numer przenoszony jest do A¢           rts             i procedura si❎ koczy.¢¢      Procedury pomocnicze sterownika.¢¢           org $BE50   call ATARI HaNDler.¢¢  icax1z   equ $2A¢  cahand   equ $BE9¢  conprn_i_i equ $C11¢  cptmpa   equ $C12¢  portb    equ $D301¢¢  atarihnd ldx conprn_i_i    Najpierw procedura pobiera indeks sterownika.¢           tay             Nast❎pnie bajt wysy any przenoszony jest do Y.¢           lda #$0C        Teraz dla sterownikw ATARI ustawiany jest odczyt¢           sta icax1z      zapis.¢           lda portb       Nast❎pnie program zapami❎tuje stan PORTB i¢           pha¢           ora #$01        w ⇧cza ATARI OS.¢           sta portb¢           jsr cahand      Teraz wywo uje po③rednio w a③ciwy sterownik i¢           sta cptmpa      zapami❎tuje zwrcon⇧ warto③⇨.¢           pla¢           sta portb       W kocowym etapie ustawia ponownie PORTB i¢           lda cptmpa      od③wierza warto③⇨ zwrcon⇧ przez sterownik ATARI.¢           rts¢¢      Procedura wywo ywania sterownika ATARI OS mie③ci si❎ w j⇧drze systemu¢  SDX poniewaə wy ⇧cza ona modu  (operacje IO mog⇧ by⇨ deklarowane dla adresw¢  w ktrych tkwi modu ).¢¢           org $BE9    Call Atari HANDlers.¢¢  jcar_sw  equ $7FA¢  jcar_old equ $7FD¢  devhat   equ $E400¢¢  cahand   lda #$00        Na pocz⇧tku procedura wy ⇧cza modu .¢           jsr jcar_sw¢           jsr e0C04       Teraz wywo uje sterownik i¢           jmp jcar_old    na kocu w ⇧cza modu .¢¢  e0C04    lda devhat+1,x  W celu wywo ania sterownika ATARI procedura pobiera¢           pha             jego adres z systemowej tabeli wed ug ustalonego¢           lda devhat,x    indeksu.¢           pha¢           tya             Nast❎pnie bajt maj⇧cy by⇨ wys any (dla PUT) przeno-¢           ldx #$00        szony jest do A i indeks kana u IO ustawiany jest na¢           rts             zerowy, wreszcie sterownik jest wywo ywany.¢¢           end of doc.¢