Odczyt znaku z klawiatury (GET)
From Atariki
Wersja z dnia 12:09, 10 mar 2006 KMK (Dyskusja | wkład) ← Previous diff |
Wersja z dnia 12:10, 10 mar 2006 KMK (Dyskusja | wkład) (→Wersja krótka, ale nieelegancka) Next diff → |
||
Linia 56: | Linia 56: | ||
</pre> | </pre> | ||
- | 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ć je gdzie indziej. | + | 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. | 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. | ||
[[Kategoria:Niezbędnik kodera]] | [[Kategoria:Niezbędnik kodera]] |
Wersja z dnia 12:10, 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 php pha lda #$0c jsr cioexe pla plp 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.