MSX: na skróty z klawiszami funkcyjnymi

Na start cytat z MSX2 Technical Handbook, przyda się do rozwinięcia tematu.

3.3 Function Keys

MSX has ten function keys, which can be defined by the user at will. A 16 byte work area is allocated for the definition of each key. The following list shows their addresses.

  • FNKSTR (F87FH, 16): F1 key definition address
  • + 10H (F88FH, 16): F2 key definition address
  • + 20H (F89FH, 16): F3 key definition address
  • + 30H (F8AFH, 16): F4 key definition address
  • + 40H (F8BFH, 16): F5 key definition address
  • + 50H (F8CFH, 16): F6 key definition address
  • + 60H (F8DFH, 16): F7 key definition address
  • + 70H (F8EFH, 16): F8 key definition address
  • + 80H (F8FFH, 16): F9 key definition address
  • + 90H (F90FH, 16): F10 key definition address

Pressing a function key causes the string defined in that key to be stored in [KEYBUF]. The end of the string is indicated by 00H and a maximum of 15 keystrokes can be defined for one function key (definitions longer than 16 keystrokes are defined over more than one function key definition area). To restore the initial settings of the function keys, use the following BIOS routine.

INIFNK (003EH/MAIN) – initialize function keys

  • Input: —
  • Output: —
  • Function: restores the function key definition to the setting when BASIC starts.

O co chodzi? Są klawisze funkcyjne, MSX2 BASIC ma dla nich fajne zastosowanie, którego wyświetlanie na ekranie można włączyć, bądź ukryć.

Do czego ma to zastosowanie? Jeżeli np. będziemy sobie robić copyparty, to może warto sobie zautomatyzować pewne czynności właśnie skrótami. Dla przypomnienia co można z nimi zrobić w MSX2 BASIC:

KEY LIST

komenda ta wyświetli nam listę przyporządkowanych komend

KEY ON 
KEY OFF

powyższe komendy włączają bądź wyłączają wyświetlanie skrótów komend przypisanych klawiszom funkcyjnym na dole ekranu. Działa to tylko w trybach graficznych.

Wykonując komendę:

SET SCREEN

zapamiętamy w pamięci RTCLOCK aktualne ustawienie m.in. właśnie wyświetlania tych podpowiedzi.

Moje ulubione bindy to:

key1,"files"
key2,"?DSKF(0)"

Jak za dużo namieszamy to możemy cofnąć się do wersji zapisanej w BIOSie przez procedurę INIFNK (to jest ten moment, kiedy stwierdzacie “a to dlatego cytował manual na początku):

DEFUSR=&H3E : X=USR(0) : KEY ON

jak zrobić sobie taki zestaw komend bez modyfikacji ROMu (o tym będzie kiedy indziej)?

W systemach dyskowych wystarczy AUTOEXEC.BAS, trzeba tylko pamiętać, że nie wszystko będzie łatwe do zapisania składniowo. Poniżej kombo dwóch powyższych komend czyli – listing nośnika + podanie wolnej ilości bloków/clusterów.

5 A$="FILES"+CHR$(13)
10 KEY 1,A$+"?DSKF(0)"+CHR$(13)

Limitem przypisanej komendy jest 15 znaków (w sumie jest to 16 znaków, bo jak wskazuje cytowany opis każda komenda jest w pamięci zakończona wartością $00 – co prawda można zdefiniować dłuższe komendy, ale zaczynają się wtedy lekkie jazdy, bo nadpisujemy kolejną przestrzeń czyli przewidzianą dla następnego wpisu), jeżeli oczekujemy automatycznego wykonania takiej komendy to jak w powyższym przykładzie dodajemy “CHR$(13)” czyli znak przejścia do nowej linii/ENTER’a.

I ostatnia rzecz – jak widać na tytułowym screenie – w trybie 40 kolumn będzie wyświetlane tylko 7 pierwszych znaków komendy/przypisanego skrótu.