

Manuel d'utilisation pour Kit 68000 ou kit 68010.
Connecter un kit a une station de travail:
Vous devez commencer par brancher le cable d'alimentation puis le cable
plat de liaison serie de la station la plus proche:
Connecter un kit68000 a une station de travail:
Connecter un kit68010 a une station de travail:
Mise sous-tension:
Un moniteur est resident dans la REPROM du kit. Il offre toutes les fonctionnalites
necessaire pour charger, lancer et debugger un programme en RAM. Pour etablir
la communication entre le kit et la station, vous devez lancer la commande
kit avec l'option 68000 ou 68010, en fonction du kit.
Ainsi tous les caracteres tapes au clavier seront envoyer apres chaque
Retour Chariot vers le kit via la liaison serie. Le moni- teur du kit interprete
alors ces caracteres comme des commandes. La liason
serie fonctionne egalement dans l'autre sens: tous les carateres emis par
le kit sont affiches dans la fenetre d'execu- tion de la commande kit.
Apres la mise sous-tension du kit le moniteur vous invite a en- trer une
commande en affichent son prompt.
Format des commandes:
Les commandes ont le format suivant: prompt> CO [ PARAMETRE(S) ] [ ;
OPTIONS ] <CR> prompt> Ce message est affiche' par le moniteur
en attente d'une commande. Pour un kit 68000 prompt = FORCEMON
2.2 > Pour un kit 68010 prompt = CAIM68010 1.1 > CO
Nom de la commande en 2 caracteres.
PARAMETRE(S) Sont le ou les
parametres de la commande. Un para- metre peut etre une expression ou une
adresse.
OPTIONS Options de la commande.
[ ] Precise que
Le text entre les crochets n'est pas obligatoire. Une valeur par defaut
sera prise.
<CR> Touche Retour Chariot (Return ou Enter), validation
de la commande. Les differents champs doivent etre separes par un espace.
Les Parametres:
Les prefixes permettent de definir le type du parametre: $ valeur
hexadecimale
& valeur decimale
@ valeur octale
%
valeur binaire
* valeur immediate
+ valeur positive (par
defaut)
- valeur negative Par defaut la valeur sera prise en hexadecimale
Une expression peut-etre une ou plusieurs valeurs numeriques separees par
les operateurs arithmetiques + ou -.
Liste des commandes du moniteur:
Les commandes pour la memoire:
La commande BF (block fill):
BF <=Adresse debut><=Adressefin><=Donnee><CR> Block
fill permet d'initialiser une zone de RAM a une valeur donnée. La
donnée doit être du type MOT et les adresses doivent en conséquence
être paires. La commande retourne le message suivant: adresse
mémoire = <=Adresse debut><=Adressefin>
La commande BM (block move):
BM <CR> BM <=Adresse debut><=Adressefin><=Donnee><CR>
Cette commande permet de dupliquer une zone de mémoire. Le bloc
origine est définir par ses deux adresses de début et de
fin; il est copie a partir de l'adresse destination.
La commande BS (block search):
BS <`Texte ASCII'><CR> BS <;taille><CR> Cette commande
permet de localiser dans la mémoire (RAM ou ROM) une chaîne
de caractères ASCII ou une valeur numérique. La recherche
se fait entre les bornes précisée par les deux premiers paramètres.
Si on cherche une chaîne, celle-ci doit-être placée
entre cotes. Lorsqu'on cherche une valeur numérique, on peux utiliser
un masque: dans ce cas, la recherche se fera en appliquant un ET logique
entre les données testées et le masque. Dans ce mode de recherche,
on peut aussi précisée la taille du mot a chercher, et le
type de la recherche (égalité ou inégalité)
: ;B Donne de type octet, recherche d'une égalité.
;-B
Donnée de type octet, recherche d'une inégalité.
;W
Donnée de type mot, recherche d'une inégalité.
;-W
Donnée de type mot, recherche d'une inégalité.
;L
Donnée de type mot long, recherche d'une égalité.
;-L
Donnée de type mot long, recherche d'une inégalité.
L'option par défaut est ;B (recherche d'une inégalité
sur un octet). La commande retourne les messages suivants: Adresse mémoire
= suivi des adresses mémoire ou la recherche est positive.
La commande BT (block test):
BT <CR> BT <,longueur><CR> Cette commande teste la
mémoire (de façon destructive) entre les bornes précisées.
Si le test se déroule sans erreur, toute la zone est positionnées
a zero. Sinon, un message est édité sur écran, donnant:
l'adresse de l'erreur, la valeur écrite, la valeur lue.
La commande MD (memory display):
MD <,longueur><;option><CR> Les options possibles sont:
DI
: avec désassemblage.
DIS : avec désassemblage et
édition des symboles.
P : édition d'une page écran.
Cette commande permet de visualiser une zone mémoire, sous deux
formats possibles: Au nombres d'octets désiré pour édition
en hexadécimal. Au nombre de lignes désassemblés pour
édition en source 68000/68010 La longueur par défaut est
16. Les lignes ne sont pas tronques: on prend le multiple de 16 le plus
proche par excès. Si aucune des 2 options DI ou DIS n'est précisée,
on est en édition hexadécimale; l'équivalent ASCII
de chaque octet est affiche en fin de ligne. Si un octet ne correspond
pas a un code ASCII affichable, on écrit un point. Si une des option
DI ou DIS est utilisée, et si on ne rencontre aucun code opératoire
indéfini, ce code sera désassemblé sous forme de constante
sur un mot (DC.W). La frappe de <CR> après l'exécution
de la commande permet de visualiser les adresses suivantes avec les mmes
options.
La commande MM (memory modify):
MM <Adresse><CR> Cette commande permet de visualiser un
ou plusieurs emplacement mémoire, avec ou sans désassemblage,
et éventuellement de les modifier. Attention: Si la modification
de données hexadécimales ne pose pas de problèmes,
il n'en va pas de mme pour la modification de programme désassemblé;
Si on remplace un code opératoire par un autre ne comportent pas
le mme nombre d'octets, la suite du programme sera perdu. Ce genre de modification
doit être fait de préférence par éditeur sur
le programme source. L'adresse et son contenu sont édites de la
façon suivantes: <=Donnee><CR> modification de la mémoire
et passage a l'adresse suivante. <=Donnee> ^ <CR> modification de
la mémoire et passage a l'adresse précédent. <=Donnee>
= <CR> modification de la mémoire et visualisation de la mme
adresse. <=Donnee> . <CR> modification de la mémoire et arrêt.
Si l'option DI a été choisie, il est nécessaire d'insérer
un espace avant la nouvelle instruction. Dans le cas ou une mauvaise instruction
est rentre, le caractère X est affiche, et la mme adresse est visualisée
vue d'une nouvelle modification.
La commande MS (memory set):
MS <=Adresse><=Donnee><CR> MS <=Adresse><='Texte
ASCII'><CR> Cette commande permet de modifier directement la mémoire.
la donnée peut être alphanumérique (Texte ASCII entre
cotes) ou numérique.
La commande .reg:
.reg <CR> .reg EXPRESSION <CR> Son rôle est de permettre
les opérations sur les registres. La commande non suivie d'une expression
numérique retourne le contenu du registre; sinon elle met le registre
a la valeur spécifiée.
la commande RD (pour 68010 register display)
La commande DF (pour 68000 registre display):
DF <CR> Elle édite tout simplement -en hexadécimal-
le contenu de tous les registres.
Les commandes pour l'Execution de programme.
La commande BR (breakpoints):
BR <CR> BR <Adresse><CR> BR <Adresse><;compteur><CR>
BR sans paramètre affiche les points d'arrêts déjà
positionnes en mémoire. BR suivie d'une adresse mémoire positionne
un point arrêt a cette adresse; A l'exécution, le programme
s'arrêtera a cette adresse en affichant le contenu des registres.
Si on ajoute a BR un compteur (sur 32 bits), le programme ne s'arrêtera
qu'après un nombre de passages déterminé par la valeur
du compteur. Le nombre de points d'arrêt est limite a 8. Apres le
passage par un breakpoint, le programme peut être relance par la
commande GO. Les points arrêt ne sont pas modifiées
par un RESET.
La commande NOBR (no breakpoints)
NOBR <CR> NOBR <Adresse><CR> Sans paramètres,
cette commande efface tous les points arrêt précédemment
positionnes. Suivi d'une adresse, elle supprime le breakpoint (s'il existe)
qui était associe a cette adresse.
La commande GD (go direct):
GD <CR> GD <Adresse><CR> Cette commande lance le programme
objet en mémoire, soit a l'adresse spécifiée dans
la commande, soit a l'adresse contenue dans le registre PC par défaut.
Cette commande ne positionne pas les points d'arrêts.
La commande GO (exécution du programme):
GO <CR> GO <Adresse><CR> Cette commande est identique
a la précédente, a ceci près qu'elle positionne les
points d'arrêts en mémoire.
La commande GT
GT <CR> GT <Adresse><CR> Cette commande est identique
a la précédente, a ceci près qu'elle positionne un
point d'arrêt temporaire, de plus, celui précise dans le texte
de la commande. Des qu'un point arrêt est rencontre, le programme
s'arête en supprimant le point arrêt temporaire.
La commande T
T <CR> Elle exécuté l'instruction pointée
par le compteur ordinal PC, édite le contenu des registres (cf commande
RD, affiche la prochaine instruction a exécuter, et s'arrête...
Un appui sur <CR> ``trace'' l'instruction suivante. T suivi d'un compteur
exécute le nombre d'instructions précise par la valeur du
compteur. Les points d'arrêt et les compteurs d'arrêts sont
opérants en mode TRACE. Il est a noter cependant que le mode TRACE
ne peut pas être utilisé dans un programme de traitement d'interruption
ou de traitement d'exception (TRAP).
La commande TT (trace to temporary breakpoint):
TT <CR> TT <Adresse><CR> Elle positionne les points
d'arrêts, et lance le programme en mode TRACE (en affichant le contenu
des registres a chaque instruction) et s'arrête sur un point arrêt
(en tenant compte des compteurs).
Edition d'un programme en assembleur
L'edition du programme se fait sous un editeur du reseau (ved, ed,
vuepad, emacs, vi, ...). ATTENTION votre nom de fichier doit avoir une
extension en .s (Source.s par exemple) Il est obligatoire de respecter
un certain nombre de regles au moment de l'edition:
-
Respecter les champs separes par des tabulations: Etiquette..........Mnemonique..........Operande..........Commentaires
Les commentaires en debut de ligne sont precedes d'une etoile *,
les commentaires situes apres l'operande sont precedes d'un point-virgule
;.
-
Toute valeur hexadecimale est suivie du suffixe H et est precede
d'un 0 si le premier chiffre est une lettre; exemple : MOVE.L 0FFB000H,D0
Suffixe hexadecimal : H Suffixe octal : Q Suffixe binaire
: B Un nombre sans suffixe est considere comme decimal. Donc le
nombre decimal 14 peut s'ecrire 0EH ou 16Q ou encore
1110B.
-
L'adressage immediat est indique par une diese #: MOVE.B #0C3H,D1
-
L'adressage indirect est symbolise par des parentheses ( ):
add (A5),D4 ; Le contenu pointe' par A5 est ajoute' au ;
registre D4
Generation de code
UNIQUEMENT sur les stations info13 a info36.
Pour une application ne comportant q'un source en langage
assembleur 680X0
Il suffit simplement d'utiliser la commande: assemblage [68000|68010]
Fichier (sans extension .s, l'option par defaut est 68000) Cette commande
genere 3 fichiers:
Fichier.lst Il contient le code machine + le
source + la table des symboles + les eventuelles erreurs. Fichier.o
est le fichier objet.
Fichier.s29 est le fichier a telecharger dans le kit.
Pour une application ne comportant qu'un source en langage
C
Il faut utiliser la commande de compilation: cckit [68000|68010|68030]
Fichier (sans extension .c, l'option par defaut est 68000) Cette commande
genere alors 4 fichiers: Fichier.lst contient le mnemonique assembleur
( en correspondance avec le source C ) + le code machine + la table des
symboles + les eventuelles erreurs. ). Fichier.map est le rapport
de l'edition des liens. Fichier.o est le fichier objet.
Fichier.s29
est le fichier a telecharger dans le kit. L'adresse d'implentation
dans la memoire du kit est fonction de l'option (68000|68010|68030) de
compilation.
cckit ajoute au debut de votre programme: - un programme
de startup qui initialise le kit puis appel la fonction main() pour enfin
redonner la main au moniteur du kit. Le code du startup commence en 800h
pour un kit68000 et ff9000h pour un kit68010. Le code de votre programme
est place juste derriere celui du startup. Vous pouvez le constater en
regardent le fichier .map. - et si necessaire elle ajoute le code des fonctions
d'entrees/sorties de la librairie iokit00 ou iokit10 en fonction du kit.
Pour une application comportant des modules en langages
C et assembleur 680X0
Soit une application comportant:
1 module main.c (programme principal en langage C). 1 module
ext.s (sous-programme en langage assembleur 68000).
TRADUCTIONS SEPAREES :a) Compilation des sources C avec la commande
c68 nomfichier :
info18 4: ls main.c info18 5: c68 main info18 6: ls
main.c main.lst main.o La commande c68 [68000|68010|68030] + liste de
fichier ne genere que les fichiers .o (pour une edition des liens)
de la liste des fichiers. L'option par defaut est le processeur cible
68000.
main.c source C du programme. main.o contient le code objet
de main.c ( creer si main.c est sans erreur). main.lst contient
la traduction du fichier source C main.c en mnemonique assembleur + le
code machine 68000.
b) Assemblage des sources assembleur avec la commande a68 nomfic :
info18 6: ls ext.s info18 7: a68 ext info18 8: ls
ext.s ext.lst ext.o La commande a68 [68000|68010|68030] + liste de fichier
ne genere que les fichiers .o (pour une edition des liens) de la liste
des fichiers. L'option par defaut est le processeur cible
68000.
ext.s source 68000, extension en .s obligatoire ! ext.o contient
le code objet de ext.s ext.lst contient le code machine 68000 +
la table des symboles + les eventuelles erreurs...
c) EDITION DES LIENS
La commande l68 [kit68000|kit68010] NomFichier permet une edition
des liens avec tous les fichiers objets (extension .o) presents dans le
repertoire courant. L'option kit68000 ou kit68010 permet de preciser le
kit cible et d'ajouter ainsi dans le code telechargable: - un programme
de startup qui initialise les registres de piles puis appel la fonction
main() pour enfin redonner la main au moniteur du kit. - si necessaire:
le code des fonctions d'entrees/sorties de la librairie iokit00 ou iokit10 suivant le kit cible. De plus le fichier genere est executable
a partir de l'adresse 800h avec l'option kit68000 et ff900h avec l'option
kit68010. (Regardez le fichier .map apres execution de l68 !) L'adresse
d'implentation du code de votre programme et du code des librai- ries dans
la memoire du kit est precisee dans un fichier de commande. Ce fichier
de commande est choisi en fonction de l'option (kit68000 ou kit68010).
Si vous voulez changer l'adresse d'implentation de votre programme ou ajouter
une autre librairie (par exemple iofischer00 pour piloter une maquette Fischer<) vous devrez ecrire vous meme ce fichier de commande linkcom.k. Si un tel fichier est present dans le repertoire
courant, l68 prendra en compte ce fichier quelque soit l'option ki68000
ou kit68010. info18 8: ls
ext.s ext.lst ext.o main.c main.lst main.o
info18 9: l68 appli info18 10: ls
ext.s ext.lst ext.o main.c main.lst main.o appli.map appli.s29
appli.s29 executable au format S de Montorola a sur le kit appli.map rapport de edition des liens et eventuellement
les erreurs.
Telechargement vers le kit :
Dans une fen^etre Xterm, placez vous (cd + chemin) dans votre repertoire
de travail. Lancez la commande kit + le nom du kit 68000, 68010
ou 68030. Attendez l'apparition du prompt. Vous pouvez alors entrer
la commande de telechargement: send Fichier (sans extension .s29)
Vous executez votre programme avec la commande : GO + l'adresse de debut du programme (en principe l'adresse de lancement est 800h sur kit68000 et ff9000h sur kit68010) Pour revenir sous UNIX tapez la commande quit ou Ctrl-c.
Plan memoire du kit 68000:
----------------------------------------- FFFFFF : NON : UTILISE
05CEF8 ----------------------------------------- 05CEF7 :
adresses des registres du PIA 05CEF1 -----------------------------------------
05CEF0 : NON : UTILISE 050044 -----------------------------------------
050043 : ACIA (host) 050041 -----------------------------------------
050042 : ACIA (terminal) 050040 -----------------------------------------
05003F : NON : UTILISE 04CF50 -----------------------------------------
04CF4F : adresses des registres du PTM 04CF41 -----------------------------------------
04CF40 : NON : UTILISE 030000 -----------------------------------------
02FFFF : EMPLACEMENT (E)PROM : UTILISATEUR 028000 -----------------------------------------
027FFF : EMPLACEMENT EPROM : du MONITEUR 020000 -----------------------------------------
01FFFF : espace pour les programmes de : l'utilisateur
000800 ----------------------------------------- 0007FF :
espace utilise par le moniteur 000400 -----------------------------------------
0003FF : tableau des vecteurs : d'interruptions 000008 -----------------------------------------
000007 : pour l'initialisation du 68000 000000 -----------------------------------------
Plan memoire du kit 68010:
----------------------------------------- FF FFFF : RAM : 32
Ko (detail) FF 8000 -----------------------------------------
FF 7FFF : NON : UTILISE 1 8000 -----------------------------------------
1 7FFF : BUS : d'extension 1 0000 -----------------------------------------
FFFF : DUART 8000 -----------------------------------------
7FFF : REPROM : 32 Ko (moniteur) 0000 -----------------------------------------
DETAIL DE LA ZONE RAM:
----------------------------------------- FFFF FFFF : zone pour
les : programmes de l'utilisateur FF 9000 -----------------------------------------
FFFF 8FFF : zone de travail du : moniteur FF 8400 -----------------------------------------
FFFF 83FF : Table des : vecteurs d'interruptions FFFF 8000
-----------------------------------------
Adresses des registres du PTM 6840
R = Acces en lecture
W = Acces en ecriture
Addresses Acces Description
04CF41 R Pas utilise
04CF41 W Control Register 3 (si
CR20 = 0)
04CF41 W Control Register 1 (si CR20 = 1) 04CF43
R Status Register
04CF43 W Control Register 2 04CF45 R Timer
1 Counter
04CF45 W MSB Buffer Register 04CF47 R LSB Buffer
Register
04CF47 W Timer 1 Latch 04CF49 R Timer 2 Counter
04CF49
W MSB Buffer Register 04CF4B R LSB Buffer Register
04CF4B
W Timer 2 Latch 04CF4D R Timer 3 Counter
04CF4D W MSB Buffer
Register 04CF4F R LSB Buffer Register
04CF4F W Timer 3 Latch
Adresses des registres du PIA 6821
R = Acces en lecture
W = Acces en ecriture
R/W = Acces en lecture ou en ecriture
Addresses Acces Description
05CEF1 R/W Data Direction Register A (CRA 2 = 0)
05CEF1
R/W Peripheral Register A (CRA 2 = 1) 05CEF5 R/W Data Direction
Register B (CRB 2 = 0)
05CEF5 R/W Peripheral Register B (CRB 2 =
1) 05CEF3 R/W Control Register A
05CEF7 R/W Control Register
B
La gestion des interruptions kit 68000
Les demandes d'interruptions sont effetuees en codent un niveau actif
sur les broches IPL0\, IPL1\ et IPL2\ (7 niveaux sont
possibles). L'interruption est alors pendante (en attente d'etre reconnue
par le processeur). La demande ne sera satisfaite qu'apres l'execution
de l'instruction en cours. Si le niveau de priorite de la demande est strictement
superieur au masque d'interruption du registre SR celle-ci sera acceptee
par le processeur. Une interruption de niveau 7 ne peut etre masquee:
elle sera toujours acceptee par le microprocesseur quelle que soit la valeur
du masque d'interruption. Lors de la reconnaissance d'interruption,
une copie interne du SR est effectuee, le processeur passe en mode superviseur,
le mode
trace est supprime, le masque d'interruption est mis au
niveau de l'interruption prise en compte (le processeur ne pourra alors
etre interrompu que par une interruption de niveau superieur). Le processeur
attends le numero de vecteur du circuit interrrompant en effectuant une
lecture: - Place la ligne R/W\ en lecutre - Place les lignes FC2,FC1
et FC0 a 1 1 1 - Place le niveau de l'interruption sur les lignes A3,
A2 et A1 - Active les lignes AS\, UDS\ et LDS\ Un ciruit de
decodage doit exploiter ces informations pour activer la ligne IACK\
du cicuit interrompant (cas d'un circuit peripherique 68xxx) pour que celui-ci
fournisse un numero de vecteur (de 64 a 255 sur les 8 bits de poids faible
du bus de donnees et d'avertir le processeur en activent le signal DTACK\:
c'est la vectorisation. Si le circuit interrompant ne peut pas fournir
un numero de vecteur (cas d'un circuit peripherique 68xx), une logique
externe devra activer le signal VPA\ pour demander la generation
interne du numero de vecteur: c'est l'autovectorisation. Si aucun des signaux
DTACK\ et VPA\ ne s'activent apres un certaint temps la logique
externe devra activer le signal BERR\ pour que le processeur genere
le vecteur d'interruption parasite. Lorsque le numero de vecteur est obtenu,
le processeur sauve les registres PC et SR sur la pile superviseur
(SSP). La valeur du PC empilee est l'adreese de l'instruction
qui aurait ete executee en l'absence d'interruption. Le processeur recherche
alors dans la table des vecteurs l'adresse du programme de traitement de
l'interruption. Les cicuits ACIA 6850, PTM 6840 et PIA
6821 du kit 68000 ne peuvent pas generer de numero de vecteur
lors de la phase de reconnaissance d'interruption. Le tableau si-dessous
montre les niveaux d'interruptions emis par les differents ciruits peripheriques
du kit 68000 ainsi que leur numero d'autovecteur. Designation Niveau
adresse Signal Provenance de l'interruption autovecteur de niveau 7
7 00007C ABORT Bouton poussoir ABORT autovecteur de niveau 6 6 000078 AC2IRQ
ACIA 6850 host autovecteur de niveau 5 5 000074 AC2IRQ ACIA 6850 terminal
autovecteur
de niveau 4 4 000070 IRQ PTM 6840 autovecteur de niveau 3 3 00006C
IRQA PIA 6821 autovecteur de niveau 2 2 000068 IRQB PIA 6821 autovecteur
de niveau 1 1 000064 -
Les adresses sont les adresses des auto-vecteurs, par exemple: lorsque
le signal d'interruption IRQ du PTM est active', le hardware
du kit genere alors un niveau 4 d'interruption vers le 68000.
Le PTM ne pouvant pas retourner de numero de vecteur d'interruption
c'est donc le mecanisme d'auto-vecteur qui est mis en oeuvre: Si le niveau
4 n'est pas masque' et qu'il n'y a pas d'interruption plus prioritaire
le 68000 executera le sous-programme d'exception a l'adresse trouvee en
000070
(adresse de l'auto-vecteur d'interruption deniveau4). Malheureusement
une erreur de conception dans la logique cable du kit 68000 fait que le
signal VPA\ ne s'active que pour des niveaux d'interruption superieure
ou egale a 4 lors de la phase de reconnaisance d'interruption du
microprocesseur( FC2=FC1=FC0=1). SI LE PIA EMET UNE INTERRUPTION (IRQA
OU IRQB) LE PROCESSEUR EN ATTENTE DE RECEPTION DE NUMERO DE VECTEUR NE
RECEVRA NI DE DTACK (interruption vectorisee) NI DE VPA (interruption autovectorisee).
MAIS DANS CE CAS UN BERR EST EMIS PAR LA LOGIQUE QUI SURVEILLE LES ACCES
BUS SUR LE KIT 68000: LE PROCESSEUR GENERE ALORS EN INTERNE LE NUMERO DE
L'INTERRUPTION PARASITE. Il est donc possible de faire fonctionner le pia
sous-interruption: il suffit de placer l'adresse du programme de traitement
des interruptions du PIA dans l'emplacement du vecteur d'it parasite (numero
24) de la table des vecteurs d'interruptions a l'adresse 60 hexa.
TABLE DES VECTEURS