Sharp PC-1401 & PC-1402
La RAM vidéo
La
RAM vidéo des PC-1401/02 est composée de 2 zones :
|
Gauche de l'écran
|
Droite de l'écran
|
|
&6000 à &6027
|
&6067 à &6040
Et oui, la mémoire est inversée par rapport à
l'affichage
|
Attention : La mémoire vidéo est aussi utilisée
comme pile pour les calculs du BASIC, seule une petite partie de
l'affichage est réellement utilisable depuis le BASIC.
Les indicateurs sont stockés sur 3 « octets »
de 7 bits :
|
|
&603C
|
&603D
|
&607C
|
|
0
|
| BUSY
| Error
|
|
1
|
| DEF
| Memory
|
|
2
|
| SHIFT
| ()
|
|
3
| Stat
| HYP
| RAD
|
|
4
|
| PRO
| G
|
|
5
|
| RUN
| DE
|
|
6
|
| CAL
| PRINT
|
Scrutage du clavier (Keyboard)
Le clavier est scruté par la routine située en &48F. Le résultats se trouve dans l'accu. Si accune touche n'est appuillée A=&FF et C=1. Si plusieurs touches sont appuillées en même temps, A=&40.
The keyboard is read by &48F. The result is stored in the accumulator. A=&FF and C=1 if no key is pressed, and A=&4D is more than one key is pressed in the same time.
| Internal code | Key | Raw reading |
| 00 | V | @0/7 |
|---|
| 01 | F | @0/6 |
|---|
| 02 | R | @0/5 |
|---|
| 03 | [\|/] | @0/4 |
|---|
| 04 | 4 | @0/3 |
|---|
| 05 | 1 | @0/2 |
|---|
| 06 | 7 | @0/1 |
|---|
| 07 | B | @1/7 |
|---|
| 08 | G | @1/6 |
|---|
| 09 | T | @1/5 |
|---|
| 0A | [/|\] | @1/4 |
|---|
| 0B | P | @1/3 |
|---|
| 0C | , | @1/2 |
|---|
| 0D | N | @2/7 |
|---|
| 0E | H | @2/6 |
|---|
| 0F | Y | @2/5 |
|---|
|
| Internal code | Key | Raw reading |
| 10 | [<-] | @2/4 |
|---|
| 11 | O | @3/2 |
|---|
| 12 | M | @3/7 |
|---|
| 13 | S | @3/6 |
|---|
| 14 | U | @3/5 |
|---|
| 15 | [->] | @3/4 |
|---|
| 16 | [SPC] | @4/7 |
|---|
| 17 | K | @4/6 |
|---|
| 18 | I | @4/5 |
|---|
| 19 | [ENTER] | @5/7 |
|---|
| 1A | L | @5/6 |
|---|
| 1B | 0 | @6/7 |
|---|
| 1C | Z | #0/7 |
|---|
| 1D | A | #0/6 |
|---|
| 1E | Q | #0/5 |
|---|
| 1F | [CAL] | #0/4 |
|---|
|
| Internal code | Key | Raw reading |
| 20 | 5 | #0/3 |
|---|
| 21 | 2 | #0/2 |
|---|
| 22 | 8 | #0/1 |
|---|
| 23 | [+/-] | #0/0 |
|---|
| 24 | X | #1/7 |
|---|
| 25 | S | #1/6 |
|---|
| 26 | W | #1/5 |
|---|
| 27 | [BASIC] | #1/4 |
|---|
| 28 | 6 | #1/3 |
|---|
| 29 | 3 | #1/2 |
|---|
| 2A | 9 | #1/1 |
|---|
| 2B | . | #1/0 |
|---|
| 2C | C | #2/7 |
|---|
| 2D | D | #2/6 |
|---|
| 2E | E | #2/5 |
|---|
| 2F | [DEF] | #2/4 |
|---|
|
| Internal code | Key | Raw reading |
| 30 | * | #2/3 |
|---|
| 31 | - | #2/2 |
|---|
| 32 | / | #2/1 |
|---|
| 33 | + | #2/0 |
|---|
| 34 | = | #3/7 |
|---|
| 35 | [X->M] | #3/6 |
|---|
| 36 | [EXP] | #3/5 |
|---|
| 37 | [Y^X] | #3/4 |
|---|
| 38 | [SQR] | #3/3 |
|---|
| 39 | [X2] | #3/2 |
|---|
| 3A | ( | #3/1 |
|---|
| 3B | ) | #3/0 |
|---|
| 3C | [M+] | #4/7 |
|---|
| 3D | | ?#4/6? |
|---|
| 3E | [HEX] | #4/5 |
|---|
| 3F | [DEG] | #4/4 |
|---|
|
| Internal code | Key | Raw reading |
| 40 | [LN] | #4/3 |
|---|
| 41 | [LOG] | #4/2 |
|---|
| 42 | [1/X] | #4/1 |
|---|
| 43 | [STAT] | #4/0 |
|---|
| 44 | [RM] | #5/7 |
|---|
| 45 | [SHIFT] | #5/6 |
|---|
| 46 | [HYP] | #5/5 |
|---|
| 47 | [SIN] | #5/4 |
|---|
| 48 | [COS] | #5/3 |
|---|
| 49 | [TAN] | #5/2 |
|---|
| 4A | [F<->E] | #5/1 |
|---|
| 4B | [C-CE] | #5/0 |
|---|
| 4C | [BRK] | |
|---|
|
|
Si plusieurs touches peuvent être
appuyées en même temps (par exemple dans un jeu), il
faut lire le clavier directement en utilisant les ports.
Évidement, pour diminuer le
nombre de pattes nécessaire au scrutage du clavier, une sorte
de multiplexage est utilisé : le clavier est découpé
en zones que l'on sélectionnent en activant leur bit. Ce bit
est le premier chiffre de 'Raw reading'. Un '#'
indique que le port B est utilisé
pour faire se multiplexage. Si elle contient un '@', il faudra
utiliser le port A.
Une fois le latch initialisé, on
peut lire la valeur par un INA. Si la touche est appuyée,
le bit correspondant au second chiffre sera à 1.
|
If many keys can be pressed in the same time (for example, in a game), I/O ports must be used.
To reduce the number of input chanels, the keyboard is multipexed : it's splited in areas that can be selected but setting their bit to 1. This bit is the first number of 'Raw reading'. A '#' means to use the B Port and with '@', it's the A port.
After setting the latch, the value is read by INA. If the key is pressed, the bit numbered by the second value is set.
|
|
Testing [SPC] @4/7
|
LIA &10 ; = 2 ^ 4
LIP $5C ; Port A
EXAM
OUTA
NOPT
INA
TSIA &80 ; = 2 ^ 7
...
|
|
|
Testing [E] #2/5
|
LIA &04 ; = 2 ^ 2
LIP $5D ; Port B
EXAM
OUTA
NOPT
INA
TSIA &20 ; = 2 ^ 5
...
|
|