¢ Procedura obsugi urz⇧dze CON: i PRN: jest jedna, ma jednak dwa pocz⇧tki¢ dla ustawienia indeksu urz⇧dzenia, w tabeli adresowej sterownikw 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 moduu.¢ jsr jcar_sw¢ jsr CONmain Wywoanie sterownika.¢ jmp jcar_old Wy⇧czenie moduu i koniec procedury.¢¢¢ Gwna procedura obsugi urz⇧dze CON: i PRN: mie③ci si❎ w pierwszym banku¢ moduu 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 modszych bitw rejestru DEVICE.¢ sta icdno¢ sta icdnoz¢ tya¢ ldx #$03 Teraz numer funkcji (SDX kernel) porwnuje z numerem¢ eBD99 cmp confunc,x z tabeli CONFUNC.¢ beq eBDA4¢ dex Gdy operacja nie zostaa znaleziona w tabeli¢ bpl eBD99 procedura koczy si❎ b❎dem nr.$92:¢ lda #$92 No function...¢ rts¢¢ eBDA4 txa Gdy funkcja zostaa odnaleziona jej indeks z tabeli¢ asl @ CONFUNC zostaje przemnoəony przez dwa i uəyty jako¢ tax indeks w tabeli adresw. 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 numerw funkcji i adresw 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)¢¢ Poszczeglne 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❎ koczy.¢¢ eBDC7 ldy #$00¢ eBDC9 lda devtab,y Teraz przeszukiwana jest tablica DEVTAB w celu¢ bmi eBDD6 znalezienia wolnego kanau 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 koczy 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 wywouje¢ jsr atarihnd sterownik.¢ tya Procedura koczy si❎ przekazanym wynikiem.¢ rts¢¢ eBDEB lda #$01 Dla CON kana nie jest zamykany i procedura zawsze¢ rts koczy si❎ poprawnie.¢¢ Procedura PUT i GET jest wsplna, 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 gwnego 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 dugo③⇨.¢ sta zbufa¢ lda faux4+1¢ sta zbufa+1¢¢ lda #$00 Teraz dugo③⇨ danych jest kasowana.¢ sta faux4¢ sta faux4+1¢¢ eBE19 lda zbufa Na kocu procedura sprawdza czy ilo③⇨ bajtw po¢ cmp faux4 operacji jest rwna dugo③ci zakadanej.¢ bne eBE2A¢ lda zbufa+1¢ cmp faux4+1¢ bne eBE2A¢¢ lda #$01 Gdy tak jest procedura koczy si❎ poprawnym¢ rts wynikiem.¢¢ eBE2A ldy #$00 W przeciwnym razie pobierany z buforu jest bajt i¢ lda (zdrva),y¢ jsr atarihnd wysyany 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 wysanych/pobranych bajtw.¢ 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❎ koczy.¢¢ 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 wysyany przenoszony jest do Y.¢ lda #$0C Teraz dla sterownikw 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 wywouje po③rednio wa③ciwy sterownik i¢ sta cptmpa zapami❎tuje zwrcon⇧ warto③⇨.¢ pla¢ sta portb W kocowym etapie ustawia ponownie PORTB i¢ lda cptmpa od③wierza warto③⇨ zwrcon⇧ przez sterownik ATARI.¢ rts¢¢ Procedura wywoywania sterownika ATARI OS mie③ci si❎ w j⇧drze systemu¢ SDX poniewaə wy⇧cza ona modu (operacje IO mog⇧ by⇨ deklarowane dla adresw¢ w ktrych 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 wywouje sterownik i¢ jmp jcar_old na kocu w⇧cza modu.¢¢ e0C04 lda devhat+1,x W celu wywoania sterownika ATARI procedura pobiera¢ pha jego adres z systemowej tabeli wedug ustalonego¢ lda devhat,x indeksu.¢ pha¢ tya Nast❎pnie bajt maj⇧cy by⇨ wysany (dla PUT) przeno-¢ ldx #$00 szony jest do A i indeks kanau IO ustawiany jest na¢ rts zerowy, wreszcie sterownik jest wywoywany.¢¢ end of doc.¢