Retour
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 codeKeyRaw reading
00V@0/7
01F@0/6
02R@0/5
03[\|/]@0/4
044@0/3
051@0/2
067@0/1
07B@1/7
08G@1/6
09T@1/5
0A[/|\]@1/4
0BP@1/3
0C,@1/2
0DN@2/7
0EH@2/6
0FY@2/5
Internal codeKeyRaw reading
10[<-]@2/4
11O@3/2
12M@3/7
13S@3/6
14U@3/5
15[->]@3/4
16[SPC]@4/7
17K@4/6
18I@4/5
19[ENTER]@5/7
1AL@5/6
1B0@6/7
1CZ#0/7
1DA#0/6
1EQ#0/5
1F[CAL]#0/4
Internal codeKeyRaw reading
205#0/3
212#0/2
228#0/1
23[+/-]#0/0
24X#1/7
25S#1/6
26W#1/5
27[BASIC]#1/4
286#1/3
293#1/2
2A9#1/1
2B.#1/0
2CC#2/7
2DD#2/6
2EE#2/5
2F[DEF]#2/4
Internal codeKeyRaw 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 codeKeyRaw 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
...