Odczyt znaku z klawiatury (GET)
From Atariki
| 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.
