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
|