!!!!!!! Kody Atari czytelnia Try2emu

Kody Atari

System operacyjny Atari (OS) używa dla określenia wartości znaków trzech różnych kodów: kodu ATASCII, kodu wewnętrznego (ICODE) oraz kodu klawiatury (KEYCODE).

System operacyjny Atari (OS) używa dla określenia wartości znaków trzech różnych kodów: kodu ATASCII, kodu wewnętrznego (ICODE) oraz kodu klawiatury (KEYCODE).
Każdy z nich ma określone zastosowanie i podczas pracy komputera wielokrotnie dokonywana jest konwersja z jednego kodu na inny. W celu przyśpieszenia pracy komputera lub zastosowania jakiegoś tricku w programie niezbędna jest znajomość tych kodów oraz ich zastosowania.

ATASCII

Jest to kod używany przez BASIC. Wszystkie znaki alfanumeryczne (litery i cyfry) oraz symbole są uporządkowane według standardu międzynarodowego kodu ASCII (American Standard Code for Information Interchange). Reszta kodu ATASCII (Atari ASCII) jest użyta do określenia znaków graficznych. Ponieważ kod ASCII określa tylko 128 znaków, to wszystkie znaki o kodach ATASCII większych od 127 są negatywami znaków o kodach mniejszych od 128. Na przykład litera A ma kod 65,a jej negatyw 65 + 128 = 193.

ICODE

Ten kod jest używany przez OS do umieszczania znaków na ekranie. Wartość kodu ICODE znaku określa jego położenie w zestawie znaków używanych przez komputer. Kod ICODE jest używany dwukrotnie. Najpierw OS pobiera z podanej instrukcji PRINT kod ATASCII, zamienia go na ICODE i umieszcza w pamięci ekranu. Następnie układ ANTIC przeszukujący pamięć ekranu 50 razy na sekundę odczytuje zawartą tam wartość ICODE i używa jej do odszukania znaku w zestawie. W tym celu mnoży ją przez 8 (ponieważ każdy znak ma 8 bajtów), dodaje adres początku zestawu (dokładniej jego starszy bajt) z rejestru CHARBASE i otrzymuje adres pierwszego bajtu znaku w pamięci komputera.

Prześledźmy to na przykładzie. Załóżmy, że wpisana została instrukcja PRINT „A". OS pobiera kod ATASCII A (65), zamienia go na ICODE (33) i umieszcza w pamięci ekranu. ANTIC znajduje go tam, mnoży przez 8 (33x8 = 264) i dodaje zawartość CHARBASE (224) jako starszy bajt. Ostatecznie otrzymujemy 264 + 256x224 = 57608 — jest to adres pierwszego bajtu wzoru litery A w zestawie znaków.

Można używać ICODE w taki sam sposób jak robi to OS — w celu umieszczenia znaku w pamięci ekranu przy pomocy instrukcji POKE.

KEYCODE

Jest to kod generowany przez układ obsługujący klawiaturę (POKEY), gdy zostanie naciśnięty jakiś klawisz lub kombinacja klawiszy. Kod ten jest zapisywany w rejestrze KBCODE (53769), a stamtąd przenoszony przez OS do rejestru KBCODE§(764). Następnie OS odczytuje wartość zawartą w rejestrze KBCODE§, przekształca ją na kod ATASCII i umieszcza w rejestrze ATASCICHR (763). Kod klawiatury nigdzie więcej nie jest używany,lecz można go stosować do różnych tricków. Np. POKE 764,255 informuje komputer, że nie został naciśnięty żaden klawisz, a więc powoduje „niezauważenie" przez OS użycia klawiatury. Naciśnięcie jakiegoś klawisza (dotyczy to także HELP)razem z SHIFT powoduje zwiększenie KEYCODE o 64, razem z CONTROL — o 128, a razem z SHIFT i CONTROL — o 192. Przy tej ostatniej kombinacji nie są odczytywane klawisze J, K, L, ;, +, *, Z, X, C, V, B i HELP.

TABELA KODÓW

Aby umożliwić korzystanie z opisanych kodów zamieszczamy tabelę kodów. Pokazane są w niej standardowe znaki Atari i odpowiadające im kody. Kolejne wpisy w tabeli oznaczają: ATASCII, ATASCII dla negatywu, ICODE, ICODE dla negatywu,KEYCODE, kombinację klawiszy.

0 128 64 160 160 CONTROL-,

1 129 65 193 191 CONTROL-A

2 130 66 194 149 CONTROL-B

3 131 67 195 146 CONTROL-C

4 132 68 196 186 CONTROL-D

5 133 69 197 170 CONTROL-E

6 134 70 198 184 CONTROL-F

7 135 71 199 189 CONTROL-G

8 136 72 200 185 CONTROL-H

9 137 73 201 141 CONTROL-I

10 138 74 202 129 CONTROL-J

11 139 75 203 133 CONTROL-K

12 140 76 204 128 CONTROL-L

13 141 77 205 165 CONTROL-M

14 142 79 206 163 CONTROL-N

15 143 79 207 136 CONTROL-O

16 144 8O 208 138 CONTROL-P

17 145 61 209 17S CONTROL-Q

18 146 82 210 168 CONTROL-R

19 147 83 211 190 CONTROL-S

20 148 84 212 173 CONTROL-T

21 149 85 213 139 CONTROL-U

22 130 6 214 144 CONTROL-V

23 1S1 87 215 174 CONTROL-W

24 152 88 216 150 COMTROL-X

25 153 89 217 171 CONTROL-Y

26 154 90 218 151 CONTROL-Z

27 155 91 219 28 ESC

28 156 92 220 142 CONTROL-

29 157 93 221 143 CONTROL-=

30 158 94 222 134 CONTROL-+

31 159 95 223 135 CONTROL-*

32 160 0 128 33 SPACE

! 33 161 1 129 95 SHIFT-1

" 34 162 2 130 94 SHIFT-2

# 35 163 3 131 90 SHIFT-3

$ 36 164 4 132 88 SHIFT-4

% 37 16S 5 133 93 SHIFT-5

& 38 166 6 134 91 SHIFT-6

' 39 167 7 135 115 SHIFT-7

( 40 168 8 136 112 SHIFT-9

) 41 169 9 137 114 SHIFT-0

* 42 170 10 138 7 *

+ 43 171 11 139 6 +

, 44 172 12 140 32 ,

45 173 13 141 14 -

. 46 174 14 142 34 .

/ 47 175 15 143 38 /

0 48 176 16 144 50 0

1 49 177 17 145 31 1

2 50 178 18 146 30 2

3 51 179 19 147 26 3

4 52 180 20 148 24 4

5 53 181 21 149 29 5

6 54 18Z 22 150 27 6

7 55 183 23 151 51 7

8 56 184 24 152 53 8

9 57 185 25 153 48 9

: 58 186 26 154 66 SHIFT-;

; 59 187 27 155 2 ;

< 60 188 28 156 54 <

= 61 189 29 157 15 =

> 62 190 30 158 55 >

? 63 191 31 159 102 SHIFT-/

@ 64 132 32 160 117 SHIFT-8

A 65 193 33 161 127 SHIFT-A

B 66 194 34 162 85 SHIFT-B

C 67 195 35 163 82 SHIFT-C

D 68 196 36 164 122 SHIFT-D

E 69 197 37 165 106 SHIFT-E

F 70 198 38 166 120 SHIFT-F

G 71 199 39 167 125 SHIFT-G

H 72 200 40 168 121 SHIFT-H

I 73 201 41 169 77 SHIFT-I

J 74 202 42 170 65 SHIFT-J

K 75 203 43 171 69 SHIFT-K

L 76 204 44 172 64 SHIFT-L

M 77 205 45 173 101 SHIFT-M

N 78 206 46 174 39 SHIFT-N

O 79 207 47 175 72 SHIFT-O

P 80 208 48 176 74 SHIFT-P

Q 81 209 49 177 111 SHIFT-Q

R 82 210 50 178 104 SHIFT-R

S 83 211 51 179 126 SHIFT-S

T 84 212 52 180 109 SHIFT-T

U 85 213 53 181 75 SHIFT-U

V 86 214 54 182 80 SHIFT-V

w 87 215 55 183 110 SHIFT-W

X 88 216 56 184 86 SHIFT-X

Y 89 217 57 185 107 SHIFT-Y

Z 90 218 58 186 87 SHIFT-Z

[ 91 219 59 187 96 SHIFT-,

92 220 60 188 70 SHIFT-+

] 93 221 61 189 98 SHIFT-.

^ 94 222 62 190 71 SHIFT-*

_ 95 223 63 191 78 SHIFT--

` 96 224 96 224 162 CONTROL-.

a 97 22S 97 225 63 A

b 98 226 98 226 21 B

c 99 227 99 227 18 C

d 100 228 100 228 58 D

e 101 229 101 229 42 E

f 102 238 102 230 56 F

g 103 231 103 231 61 G

h 104 232 104 232 57 H

i 105 233 105 233 13 I

j 106 234 106 234 1 J

k 107 236 107 235 6 K

l 108 236 108 236 8 L

m 109 237 109 237 37 M

n 110 238 110 238 35 M

o 111 239 111 239 8 O

p 112 240 112 240 10 P

q 113 241 113 241 47 Q

r 114 242 114 242 40 R

s 115 243 115 243 62 S

t 116 244 116 244 45 T

u 117 245 117 245 11 U

v 118 246 118 246 16 V

w 119 247 119 247 45 W

x 120 248 120 248 22 X

y 121 249 121 249 43 Y

z 122 258 122 250 23 Z

{ 123 251 123 251 130 CONTROL-;

| 124 252 124 252 79 SHIFT-.

} 125 253 125 253 118 SHIFT-<

~ 126 254 126 254 52 DELETE

127 255 127 255 44 TAB

 

Wojciech Zientara