Tajemnice ATARI

SUPER KEYBOARD


   Program "Super Keyboard" wzbogaca klawiaturę ATARI o nowe, niedostępne dotąd funkcje.

1. Klawisze funkcyjne


  • SHIFT/CONTROL/5 - zimny start, może być stosowany zamiast wyłączania komputera i ponownego włączania go. Dla uniknięcia przypadkowego naciśnięcia wymaga poprzedzenia klawiszem ESC.
  • SHIFT/CONTROL/6 - przełącza zestaw znaków ze standardowego na międzynarodowy i z powrotem.
  • SHIFT/CONTROL/7 - włącza/wyłącza dźwięk towarzyszący operacjom we/wy.
  • SHIFT/CONTROL/8 - włącza/wyłącza dźwięk towarzyszący naciskaniu klawiszy.
  • SHIFT/CONTROL/9 -blokuje/uwalnia klawiaturę.
  • SHIFT/CONTROL/O -włącza/wyłącza wyświetlanie obrazu (służy do zwiększenia szybkości działania komputera).
  • SHIFT/CONTROL/ESC - włącza/wyłącza "tryb Spectrum".

    2. Tryb Spectrum


       Tryb ten polega na przyporządkowaniu pewnym klawiszom całych rozkazów Basicu. Aby otrzymać na ekranie tekst danego rozkazu, używamy stosownego klawisza z poniższego spisu, trzymając wciśnięty SHIFT:

    A - DOS        B - BYE       C - CLR
    D - DATA       E - END       F - FOR
    G - GOTO       U - GOSUB     I - INPUT
    J - GRAPHICS   K - POKE      L - LIST
    H - PEEK       N - NEXT      O - OPEN
    P - POSITION   Q - RESTORE   R - READ
    S - SETCOLOR   T - TRAP      U - USR(
    V - STEP       W - THEN      X - RETURN
    Y - SOUND      Z - CHR$

    Space - NEW    Return - RUN
    Caps - SAVE    Logo - LOAD

    (klawisz LOGO znany też jest jako poz./neg.)

       Ponieważ autor nadesłał do redakcji tekst programu w języku asemblera (format QA), przeto prezentuję go w tej formie i korzystając z okazji uzupełniam o kilka słów komentarza.

    *    Program   Super Keyboard 2.0
    *    Autor     Maciej Czarnota
    *    Data      1991-09-03
    
             opt   %100101
    
    *--- Etykiety
    
    keycl    equ   $f983
    putch    equ   $f2b0
    coldst   equ   $e477
    ciov     equ   $e456
    kbcode   equ   $d209
    prtext   equ   $c642
    kbcods   equ   $02fc
    rn       equ   $02f5
    chbas    equ   $02f4
    oldkbc   equ   $02f2
    dmasav   equ   $02dd
    nocl     equ   $02db
    escflg   equ   $02a2
    chsptr   equ   $026b
    keydis   equ   $026d
    dmactl   equ   $022f
    keyvec   equ   $0208
    iosnd    equ   $0041
    dosini   equ   $000c
    
    *--- Stale
    
    esc      equ   $dc
    sc0      equ   $f2
    sc9      equ   $f0
    sc8      equ   $f5
    sc7      equ   $f3
    sc6      equ   $db
    sc5      equ   $dd
    
    *--- Instalacja
    
             org   $9000
    
    pocz     ldx   #$01
    in1      lda   keyvec,x
             sta   jump+1,x
             lda   dosini,x
             sta   reju+1,x
             dex
             bpl   in1
             lda   #$ff
             sta   rn
             lda   beg
             sta   keyvec+1
             sta   keybuf+1
             lda   reset
             sta   dosini+1
             ldx   nagl
             jmp   prtext
    
    nagl     dta   c'Super Keyboard 2.0 '
             dta   c'by M.Czarnota',b($9b)
    
    *--- Klawisze F1-F6, SK ON/OFF
    
             org   $0500
    
    beg      txa
             pha
             tya
             pha
             lda   kbcode
             cmp   #sc0
             bne   q1
             lda   dmactl   s+c+0
             eor   #$22     poke 559,0/34
             sta   dmactl
    q1       cmp   #sc9
             bne   q2       s+c+9
             lda   keydis   poke k 255/0
             eor   #$ff
             sta   keydis
    q2       cmp   #sc8
             bne   q3       s+c+8
             lda   nocl     poke 731,0/1
             eor   #$01
             sta   nocl
    q3       cmp   #sc7
             bne   q4       s+c+7,
             lda   iosnd    poke 65,0/3
             eor   #$03
             sta   iosnd
    q4       cmp   #sc6
             bne   q5       s+c+6
             lda   chbas    poke 756,204/224
             ldx   chsptr
             sta   chsptr
             stx   chbas
    q5       cmp   #sc5
             bne   q6
             lda   escflg   s+c+5
             beq   q6       a=usr($e477)
             jmp   coldst
    q6       cmp   #esc     wylacznik
             bne   q7       trybu
             lda   rn       SPECTRUM
             eor   #$ff
             sta   rn
    q7       lda   rn
             bne   q8
             jmp   quit
    q8       jmp   start
    
    reset    ldx   #$01     Tu skacze
    re1      lda   keyvec,x RESET
             sta   jump+1,x
             lda   keybuf,x
             sta   keyvec,x
             dex
             bpl   re1
    reju     jmp   reju
    
    keybuf   dta   a($00)
    
    *--- Program glowny
    
             org   $600
    
    start    lda   kbcode   Odrzucenie
             bmi   quit       >= $80
             cmp   #$40     i <  $40
             bcc   quit
    
    *--- Obetnij bit 7 i 6
    
             and   #$3f
             tay
    
    *--- Wez z tablicy nr tekstu.0=brak
    
    newnum   lda   num,y
             beq   quit
             asl   @
             asl   @
    
    *--- Wydruk 4-bajtowego tekstu
    
             ldx   #$03
             tay
    l5       tya
             pha
             txa
             pha
    newtab   lda   tab,y
             jsr   putch
             pla
             tax
             pla
             tay
             iny
             dex
             bpl   l5
             jsr   keycl
    
    *--- Powrot z przerwania
    
    out      pla
             tay
             pla
             tax
             pla
             rti
    
    quit     pla
             tay
             pla
             tax
    jump     jmp  jump
    
    *--------------------------------
    *--- Dane dla klawiszy
    
    num      dta   d',*    +  / 05>) '
             dta   d'6 #   "8:       '
             dta   d' ; . - <2 %9 471'
             dta   d'       &($ =''3!'
    tab      dta   c'????DOS BYE CLR '
             dta   c'DATAEND FOR GOTO'
             dta   c'GOS.INP.GRA.POKE'
             dta   c'LISTPEEKNEXTOPEN'
             dta   c'POS.RES.READSET.'
             dta   c'TRAPUSR(STEPTHEN'
             dta   c'RET.SOU.CHR$NEW '
             dta   c'LOADSAVERUN '
    
    *--- Samouruchomienie
    
             org   $02e0
             dta   a(pocz)
    
             end
    
       Program jest napisany przejrzyście i dobrze skomentowany, a nazwy etykiet dobrane z rozmysłem w istotny sposób pomagają zrozumieć jego działanie. Pod tym względem może stanowić wzór do naśladowania. Wydaje mi się tylko, że dane dla klawiatury zostały zdefiniowane w niezbyt przejrzystej formie, co może utrudnić późniejszą ich modyfikację (lub znalezienie błędu). Osobiście preferuję dane tego typu w DTA B(...), a przy każdej liczbie powinien stać symbol odpowiadającego jej klawisza.

       Moją wątpliwość budzą też cztery pytajniki na początku tablicy rozkazów basicowych. Można je usunąć, zamieniając rozkaz opatrzony etykietą NEWTAB na LDA TAB-4, Y.

       Program zajmuje pamięć w obszarach: $500..$57F i $600..$6FF. Dzięki umiejętnemu włączeniu się w system przerwań i obsługę sekwencji RESET nie koliduje z większością programów użytkowych (np. współegzystuje przyjaźnie z XLFriendem).

       Obsługa RESET jest zrealizowana poprawnie, lecz brakuje opcji wyjścia (dezaktywizacji programu), co powodu je bezpowrotną utratę szóstej strony dla innych celów. Wydaje mi się, że tego typu programy powinny być umieszczane tuż nad DOS-em (lub COS-em) tak, jak to pokazano w cyklu "Programowanie procesora...". Nawiasem mówiąc, można ten program bez trudu przystosować do "Relocatora" i instalować go ponad DOS-em, pozostawiając stronę 6. do wykorzystania przez programy w Basicu.

       Niejasne są dla mnie podchody do słowa KEYBUF. Skoro nie zmienia się ono nigdy podczas działania programu, to można je zadeklarować od razu jako DTA A(BEG), a nie inicjować przez LDA i STA.

       W sumie znajduję w programie więcej zalet niż wad i z czystym sumieniem polecam go zarówno do wykorzystania jako narzędzie pomocne przy pracy z Basicem, jak i w charakterze pouczającego przykładu.

       Oto ten sam program w wersji Zgrywusa dla tych, którzy nie lubią lub nie mają Quick Assemblera. Należy połączyć go z programem Zgrywus+ z TA 6/91 (z poprawką z TA 8/91), uruchomić go i zapisać plik binarny zdatny do wykonania przez DOS lub COS.


    1000 REM *--------------------------*
    1002 REM :      Super Keyboard      :
    1004 REM :  autor: Maciej Czarnota  :
    1006 REM : (c) 1991 Tajemnice ATARI :
    1008 REM *--------------------------*
    1010 DATA FFFF00905490A201BD08029D36
    1020 DATA 06B50C9D7A05CA10F2A9FF8DF5
    1030 DATA 02A9008D08028D7C05A9058D09
    1040 DATA 028D7D05A968850CA905850DA2
    1050 DATA 34A0904C42C65375706572204B
    1060 DATA 6579626F61726420322E302062
    1070 DATA 79204D2E437A61726E6F74619B
    1080 DATA 00057D058A489848AD09D2C9F2
    1090 DATA D008AD2F0249228D2F02C9F0D0
    1100 DATA 08AD6D0249FF8D6D02C9F5D008
    1110 DATA ADDB0249018DDB02C9F3D006A5
    1120 DATA 4149038541C9DBD00CADF402AE
    1130 DATA 6B028D6B028EF402C9DDD008AD
    1140 DATA A202F0034C77E4C9DCD008ADF5
    1150 DATA 0249FF8DF502ADF502D0034C31
    1160 DATA 064C0006A201BD08029D3606BD
    1170 DATA 7C059D0802CA10F14C79050000
    1180 DATA 0006F306AD09D2302CC9409028
    1190 DATA 293FA8B93806F0200A0AA203A8
    1200 DATA 98488A48B9780620B0F268AA68
    1210 DATA A8C8CA10EE2083F968A868AA68
    1220 DATA 4068A868AA4C35060C0A000000
    1230 DATA 0B00000F0010151E0900001600
    1240 DATA 03000002181A00000000000000
    1250 DATA 00001B000E000D001C12000519
    1260 DATA 00141711000000000000000006
    1270 DATA 0804001D0713013F3F3F3F444F
    1280 DATA 532042594520434C5220444154
    1290 DATA 41454E4420464F5220474F544F
    1300 DATA 474F532E494E502E4752412E50
    1310 DATA 4F4B454C4953545045454B4E45
    1320 DATA 58544F50454E504F532E524553
    1330 DATA 2E524541445345542E54524150
    1340 DATA 55535228535445505448454E52
    1350 DATA 45542E534F552E434852244E45
    1360 DATA 57204C4F41445341564552554E
    1370 DATA 20E002E1020090
    

    Redaktor

  • Powrót na start | Powrót do spisu treści | Powrót na stronę główną

    Pixel 2001