Odczyt znaku z klawiatury (GET)

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 12:10, 10 mar 2006
KMK (Dyskusja | wkład)
(Wersja krótka, ale nieelegancka)
← Previous diff
Wersja z dnia 12:13, 10 mar 2006
KMK (Dyskusja | wkład)
(Wersja elegancka, ale długa)
Next diff →
Linia 31: Linia 31:
bmi error ;np. naciśnięto Break bmi error ;np. naciśnięto Break
- php 
pha pha
lda #$0c lda #$0c
jsr cioexe jsr cioexe
pla pla
- plp 
rts rts

Wersja z dnia 12:13, 10 mar 2006

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