Odczyt znaku z klawiatury (GET)

From Atariki

Revision as of 12:13, 10 mar 2006; view current revision
←Older revision | Newer revision→
Jump to: navigation, search

Procedura czeka, aż użytkownik naciśnie jakiś klawisz na klawiaturze, po czym zwraca odpowiedni kod ATASCII w akumulatorze.

Wersja elegancka, ale długa

kname .byte "K:",$9B

cioexe sta iccmd,x
       jmp jciomain

getkey jsr lookup
       bmi error

       lda #<kname
       sta icbufa,x
       lda #>kname
       sta icbufa+1,x
       lda #$04
       sta icax1,x
       lda #$00
       sta icax2,x
       lda #$03
       jsr cioexe
       bmi error            ;w dobrze zdebugowanym programie raczej nie wystąpi tu błąd

       lda #$00
       sta icbufl,x
       sta icbufl+1,x
       lda #$07
       jsr cioexe
       bmi error             ;np. naciśnięto Break

       pha
       lda #$0c
       jsr cioexe
       pla
       rts

error  ...

Procedura lookup jest do znalezienia tutaj. Reszta to etykiety systemowe.

Zaletą takiego sposobu odczytywania danych z klawiatury jest zgodność z każdym rodzajem klawiatury, byleby tylko był zainstalowany w systemie właściwy dlań sterownik "K:".

Wersja krótka, ale nieelegancka

getkey lda $e425
       pha
       lda $e424
       pha
       rts

Zaletą tego sposobu jest to, że procedura zajmuje tylko 9 bajtów; powinna też zawsze działać, gdyż korzysta z umieszczonego w ROM-ie wektora wskazującego procedurę odczytu bajtu z klawiatury, z którego to wektora korzysta też CIO. Niemniej jest to "półlegalna" metoda wywoływania systemu operacyjnego: te wektory nie są przeznaczone dla programów użytkownika, a to, że w każdej wersji OS-u są w tym samym miejscu wynika po prostu z faktu, że nie ma szczególnego powodu przenosić ich gdzie indziej.

Wadą tej metody jest to, że omija ona tablicę urządzeń HATABS - a więc ewentualny handler zainstalowany przez użytkownika nie zostanie wywołany.

Personal tools