vendredi 12 août 2011

Transferts de disquettes Apple II sous ADT ou les arcanes du port serie

         Allez, je profite des congés pour ressortir mon bon vieil Apple //c et faire un petit tutorial pour les transferts d'images de disquettes. La méthode utilisée sera via port serie, en utilisant le logiciel ADT dans sa version PC Windows. Vous ne devriez pas trouver beaucoup de difference avec les versions Dos ou Mac ou la version ADT PRO qui est plus recente. Le principe et les réglages à faire restant sensiblement identiques.

Le but du bazard, pour ceux qui n'ont pas encore compris (passez votre chemin du coup) est bien de recreer des disquettes avec des logiciels Apple II de l'époque à partir de fichiers images, que l'on trouve en grande quantité sur le Net, sur notre PC, ou inversement d'ailleurs. Les fameux fichiers etant souvent au format .dsk et utilisables avec votre émulateur Apple II préféré. Nous en profiterons pour comprendre un peu mieux comment fonctionne le port serie du //c, et des Apple II en général.

Si vous n'avez toujours pas compris de quoi je parle alors ne vous pourrissez pas l'esprit avec tout cela et passez votre chemin.....

Heuuuuu, il reste du monde ? Ok alors on continue ...

  1. La base de chez base ...
Le principe est de connecter les 2 machines, via leur ports série respectifs, puis, en utilisant un logiciel serveur coté machine récente (PC ou Mac), et un logiciel client coté Apple II, de restaurer les images de disquette.

Pour commencer, il nous faut, en vrac :

    • Un PC sous Windows (ou Mac) avec un port serie (DB9 / 25 ou USB  fonctionnel !!)
    • Un cable serie croisé (null modem)
    • Un Apple II (+,e,c, gs, ..) avec 64Ko de Ram et un port serie (interne ou carte)
    • Le logiciel ADTWin 2004
    • Des connaissances Apple II
    • Des connaissances en communication par port serie
    • Un poil de patience

Un bon vieil Apple //c

     2.  les trucs rapides


Depuis votre PC sous Winwdows, téléchargez ADTwin 2004 via un coup de google et on en parle plus. Toujours histoire d'en terminer avec les trucs rapides, verifiez que votre port com (qu'il soit DB9, DB25 ou USB) fonctionne en lui collant un bon vieux modem au cul par exemple.

A cette étape nous devons donc avoir un PC sous Windows disposant, d'un port serie fonctionnel (com1 au format DB9 pour ma part) et du logiciel ADTwin 2004.

If "pas certain" goto "La base de chez base ...".

  1. Les trucs un poil plus compliqués
Coté Apple II, j'ai utilisé, pour le tutorial, un //c qui à l'avantage de disposer d'une carte serie intégrée. Seul inconvenient le port serie est au format Din 5 broches. Il faudra donc jouer un peu du fer à souder pour avoir notre cable null modem (croisé) DB9 <=> Din 5.

Il est cependant tout à fait possible d'utiliser un Apple II (+,e, ,,) classique mais il faudra lui adjoindre les services d'une carte serie (et de sa doc au passage), à mettre plutot dans le slot 2. En effet sur ces modeles la carte serie n'est pas intégrée. Le cable à utiliser sera un classique DB9 (ou DB 25 coté PC) <=> DB 25 (Apple II).

Pour terminer il est également possible d'utiliser un IIgs, qui dispose lui aussi d'une carte serie intégrée et facilement configurable via le panel du bios. Par contre prévoir un cable DB9 <=> mini-din 8 broches car coté Apple IIgs c'est ce format qui est utilisé. Je me suis déja servi d'un cordon PC <=>  MAC (68x00 des 90's ;) ) qui fonctionne trés bien pour cet usage.

Vous avez le choix des armes.

      1. Le câblage
Bon, la, on rentre dans le vif du sujet. Tout le principe de fonctionnement tournant autour des ports série et du cable. Attaquons par le hardware.

Coté cable il faut surtout savoir que 3 pins nous interressent particulierement RX (reception des données) , TX (transmissions des données) et la masse. Le principe du cable croisé (ou null modem) est de croiser RX avec TX entre les 2 machines, la masse ne changeant pas. Cela revient à dire je branche l'emission (du PC) sur la reception de l'Apple II, et vice versa. La masse servant pour le courant. Et oui !! Croiser les flux ce n'est pas toujours mal ;).

Comme je vous fais cela aux petits oignons , voici le brochage du port serie coté PC (DB 25 et DB9) et Apple II DB25 :







Apple II et PC -     connecteur DB 25
PC - connecteur DB 9

TXD
2
3
Transmitted Data
RXD
3
2
Received Data
RQS ou RTS
4
7
Request To Send
CTS
5
8
Clear To Send
DSR
6
6
Data Set Ready
SG
7
5
Masse du signal
DTR
20
4
Data Terminal Ready
CD
8
1
Carrier Detect
RI
22
9
    Ring Indicator



Nous utilisons les pins 2/3 et 5 ou 7, selon le type de connecteur coté PC et 2/3/7 coté Apple II avec carte série.

Coté Apple //c et Din 5 Broches, le site support (!) de la pomme (et oui les docs sont la !!) nous donne ces informations :

-----
Apple //c External Pinouts
Article : TA30794
Old article : 1419
Last Modified : 10/04/2008



Printer/Modem port
----------------

The serial ports on the Apple IIc are standard 5 pin DIN, however, they are not labeled as standard DIN. Therefore, when looking at the back of the Apple IIc, the pinouts are as follows:


5 Pin DIN Position Signal Name

1............ 4 O'Clock ... Data Terminal Ready
2............ 5 O'Clock ... Transmit Data
3............ 6 O'Clock ... Signal Ground
4............ 7 O'Clock ... Receive Data
5............ 8 O'Clock ... Data Set Ready


PINOUT EXPLANTION
Pin 1 (DTR) becomes active when the IIc is ready to go on line.

Pin 2 (TD) conveys serial data sent from the IIc.

Pin 3 (SG) is used to provide a common ground reference for the electronics in both the IIc and the device it is connected to.

Pin 4 (RD) receives serial data sent from the device to the IIc it is connected to.

Pin 5 (DSR) is asserted by the device the IIc is connected to when it is ready to go on line.

NOTE: The serial ports on an Apple IIc are essentially identical, the pin connections being the same on both. The main difference being that the printer port is pre-configured for 9600 baud and the communication port is preconfigured for 300 baud. The printer port appears to the software as slot 1, the communication port as slot 2. The settings of these ports can be changed with the Apple IIc System Utilities disk. Please see the System Utilities manual for precise details.

CHARACTERISTICS AT STARTUP
The Apple IIc's ports are configured with keyboard commands instead of DIP switches. After power-up, the IIc sets the printer port to the default configuration given below:

- 9600 baud
- 8 data bits and no parity
- 2 stop bits
- 80 chars per line
- LF after CR
- Command character is CTRL-I
- Hardware (DTR flow control protocol) handshake.
-----


Nous utiliserons les pins 2-3-4 coté Apple //c.


Trés concretement entre un DB9 coté PC et la Din 5 coté //c, le schéma de cablage sera le suivant :

   DB9                                DIN5
2 (RX)     <====>     2 (TX ou TD)
3 (TX)     <====>     4 (RX ou RD)
5 (GND)  <====>     3 (GND ou SG)


Voila je peux pas mieux faire maintenant à vous de jouer du fer à souder, à moins, que , coup de bol vous ayez tout sous la main .....

Attention pour les config Apple II et carte serie : Le brochage DB25 est idem à celui du PC (norme) et il y a trés certainement une position Modem ou Teminal sur votre carte. C'est le Jumper Block, un gros bloc avec une fleche qui pointe sur Terminal ou Modem à droite de la carte (vue de face).Ce dernier élément à un impact sur la cable. Oui, mon bon monsieur, faudra lire la doc de votre carte. Si vous etes en position Terminal il faut un cable "droit", cad RX sur RX et RX sur TX, si vous etes en mode Modem il faut un cable croisé ou null-modem comme décrit ici. Donc verifiez bien ce dernier point et mettez vous de preference en mode Modem (fleche vers le haut). Attention lorsque vous inversez le bloc, les petites papattes sont assez fragiles.

Allez voici quand meme une doc de la carte Super Serial (SSC) :
-----

Name: Apple SSC
Type: Super Serial Card
Short description:
The SSC gives the Apple ][ a serial port (RS232). Up to
19200 baud are possible. Full handshake is supported.
Installation:
The card plugs into Slot 1, 2 or 3 of the Apple. Slot 1 is
usually for a serial printer (Imagewriter), Slot 2 for a
modem and Slot 3 for a terminal.
The DB25 connector goes to the printer/modem/terminal line,
the 10-pin connector on the other side of the cable goes
into the cable socket at the rear side of the card.
Jumper settings:
The card has two jumpers and a additional jumper block.
The jumper block can be installed two ways:
1) Arrow pointing towards the word TERMINAL
2) Arrow pointing towards the word MODEM
Jumpered as MODEM, it will wire thru, jumpered as TERMINAL,
it will twist 2-3, 4-5 and 6-20 (called null modem).
The jumper switches are called SW1 and SW2, the switches
are numbered SW1-1 to SW1-7 and SW2-1 to SW2-7 from left
to right.
SW1-1 SW1-2 SW1-3 SW1-4
off off off off 19200 baud
off off off on 9600 baud
off off on off 7200 baud
off off on on 4800 baud
off on off off 3600 baud
off on off on 2400 baud
off on on off 1800 baud
off on on on 1200 baud
on off off off 600 baud
on off off on 300 baud
on off on off 150 baud
on off on on 135 baud
on on off off 110 baud
on on off on 75 baud
on on on off 50 baud
SW2-1 off 2 stopbits
SW2-1 on 1 stopbit
SW2-2 off no delay on carriage return
SW2-2 on 1/4 sec delay
SW2-3 SW2-4
off off 132 chars/line, apple screen off
off on 80 chars/line, apple screen off
on off 72 chars/line, apple screen off
on on 40 chars/line, apple screen on
SW2-5 off no line feed after carrigae return
SW2-5 on line feed
SW2-6 off ignore interrupts
SW2-6 on generate interrupts
SW1-7 on and SW2-7 off pin 4 or 20 (clear to send)
SW1-7 off and SW2-7 on in 19 (secondary clear to send)
DB-25 Pin assignment:
10-pin DB-25
header Connector Signal name
------ --------- ------------
1 1 Frame Ground
2 2 Transmit Data (TXD)
3 3 Receive Data (RXD)
4 4 Request to Send (RTS)
5 5 Clear to Send (CTS)
6 6 Data Set Ready (DSR)
7 19 Secondary Clear to Send (SCTS)
8 7 Signal Ground
9 20 Data Terminal Ready (DTR)
10 8 Data Carrier Detect (DCD)
Usage:
Register settings of the ACIA:
Memory locations used:
---------------------------------------------------------------------------
SUPER SERIAL CARD (SSC) SETUP SETTINGS
Recomended slots:
slot 1 for terminal use (e.g. printer)
slot 2 for communication use (e.g. modem)
Jumper Block:
for communication use label is upside down (arrow points up)
for terminal use label is right side up (arrow points down)
SW1 Dip Switch Settings:
Baud SW1-1 SW1-2 SW1-3 SW1-4 SW1-8
50 on on on off not used
75 on on off on "
110 on on off off "
135 on off on on "
150 on off on off "
300 on off off on "
600 on off off off "
1200 off on on on "
1800 off on on off "
2400 off on off on "
3600 off on off off "
4800 off off on on "
7200 off off on off "
9600 off off off on "
19200 off off off off "
Switch Settings For Communication mode:
SW1-5; SW1-6; SW1-7 are all set on
Data Parity Stop SW2-1 SW2-2 SW2-3 SW2-4
Bits Bits
7 none 1 on off off on
7 odd 1 on off on off
7 even 1 on off off off
7 none 2 off off off on
7 odd 2 off off on off
7 even 2 off off off off
8 none 1 on on off on
8 odd 1 on on on off
8 even 1 on on off off
8 none 2 off on off on
8 odd 2 off on on off
8 even 1 on on off off
8 none 2 off on off on
8 odd 2 off on on off
8 even 2 off on off off
Note: SW2-1 thru SW2-4 settings can be overridden by software.
SW2-5:
ON for linefeed out
OFF for no linefeed out
SW2-6:
ON for baud rates greater than 1199 baud
SW2-7:
OFF in communication mode
SW2-8:
Not used
Connector Pin Assignments
10-Pin DB-25
Header Connector Signal Name
________________________________________________________________________
1 1 Frame Ground
2 2 Transmit Data (TXD)
3 3 Receive Data (RXD)
4 4 Request To Send (RTS)
5 5 Clear To Send (CTS)
6 6 Data Set Ready (DSR)
7 19 Secondary Clear To Send (SCTS)
8 7 Signal Ground
9 20 Data Terminal Ready (DTR)
10 8 Data Carrier Detect (DCD)
-----


Coté Mini din (pour les IIgs ou Iic+) cela nous donnerait :


-----

8 Pin Mini-DIN Connector

1 NC Not Connected (de face en bas à gauche)
2 NC Not Connected (de face en bas à droite)
3/ TXD Transmit Data (Inverted}
4 GND Ground
5/ RXD Receive Data (inverted)
6 TXD Transmit Data
7 NC Not Connected
8 RXD Receive Data


-----

Donc :

 Apple
 MiniDIN8	                DB-9    ou   DB-25 
 ------------	                    -------	          --------
    5 <=====> 	3   ou 	2     TxD
    3 <=====> 	2   ou   	3     RxD
    4 <=====> 	5   ou      7     GND




Nous en avons terminé avec les différents câblages possibles.



  1. La config software

Maintenant que nous avons tout ce qu'il faut coté hardware passons sur les machines ... Bien entendu vous avez connecté votre cable serie sur le port com du PC (le 1 pour moi) et le port serie de l'Apple II (pour moi le port 2, celui avec le modem).

Coté PC nous allons lancer le vieil HyperTerminal, il a l'avantage d'être fourni avec Windows et il est relativement complet. Pour commencer nous allons lui donner comme config de base : 
Se connecter en utilisant COM1, dans les parametres du COM1, indiquer : 300 bits par seconde / 8 Bits de données / Aucune Parité / 1 Bit d'arret / Aucun controle de flux et on valide. Dans l'onglet parametres, modifier la configuration ASCII et cocher "envoyer les fins de lignes avec saut de ligne", cochez egalement "Reproduire localement les carateres entrés". Si besoin par la suite augmentez les delais de ligne et caractere.

En language clair : 300 8-N-1, "echo local" et "CR=CR+LF".

Pourquoi ces parametres ? Si vous lisez la doc plus haut vous constaterez que ce sont les reglages par defaut (à l'allumage) du port modem (2) du //c. L'echo local et la modification du CR servant à avoir un affichage optimal sur le PC.

Bien entendu si vous utilisez une carte serie type Apple Super Serial il faudra configurer les dips switches (et le pc) en conséquence. 

Pour le IIgs allez dans le control panel en appuyant sur les touches CTRL + Option + Reset puis le menu ad-hoc.

Une bonne config de base étant 9600 8-N-1 ou 19200 8-N-1.

Passons maintenant coté Apple IIc, apres le boot tapez un petit

] IN #2

en clavier QWERTY

ou

§ IN £2

en clavier AZERTY

Pour la suite du tutorial, nous nous mettrons en clavier QWERTY donc si vous utilisez le clavier AZERTY pensez à faire la correspondance (ou à vous mettre en QWERTY ;).

Pour le clavier US ou FR, regardez du coté de la touche Keyboard ..


A partir de ce moment, si vous tapez qq chose dans la console Hyperterminal, la meme chose doit s'afficher sur l'écran du //c.

Un tutorial complètement dingue !

Félicitation votre PC vient de se transformer en un terminal d'Apple //c !!!!!!!
Enfin, presque, car si vous lancez un catalogue du disk, la commande sera prise en compte sur le //c mais l'affichage se fera sur son écran et non pas dans l'Hyperterminal du PC.

Avant de continuer expliquons que la commande IN#  permet de recevoir des informations depuis le slot indiqué. Nous avons tapé IN #2 ce qui se traduit par accepte les informations en provenance du port N° 2. Le port N° 2 etant un port serie avec les bon reglages (vitesse / parité etc ...) l'Apple affiche ce qu'il reçoit comme si cela provenait de son clavier. La grande classe !!!

Petite digression : En cherchant bien avec un PR#2 (opération inverse du IN#2) pour rediriger la sortie écran vers le port serie, la bonne émulation de terminal coté PC, on doit arriver à faire qq chose de marrant......

Je vous aide ..

Dans l'onglet parametres de la connexion de l'hyperterminal, choisir type de terminal VT100, puis dans la config ASCII, cocher "Envoyer les fins de lignes avec saut de lignes", "ajout de saut de lignes à la fin des lignes entrantes", "forcer les données entrantes en 7 bits" et "retour automatique à la ligne".
Ne PAS cocher "Reproduire localement les caracteres entrés". En effet, comme nous avons redirigé la sortie ecran texte vers le port serie (PR#2), cela nous afficherait 2 fois les caracteres que nous tapons (1 fois l'émulateur de terminal si cette option est cochée et une fois l'Apple II).

Donc :

Boot Apple //c puis

] IN#2 ; authorise entrée signaux depuis le port serie 2
] PR#2 ; redirige sortie ecran texte vers port serie 2

Transforme votre Apple II en serveur serie. Attention seul le texte est redirigé vers le PC. Mais c'est quand meme magique !!


Apple //c en mode serveur série !

Fin de la digression (et pas de la digestion !!! ).... on se réveille !


Bon OK, revenons à nos moutons, 300 bauds, c'est bien mais c'est pas la lune non plus, surtout que si on regarde les specs de nos ports series on voit bien qu'on en a sous le pied (19200 bds). Et bien la magie continue .... en tapant CTRL + A (attention aux claviers FR/US) vous remarquerez que le cursueur se transforme en "?" (ou prompt "Apple SCC:" si vous utilisez une carte Apple Super Serial). A partir de ce moment notre petit Apple //c attend des commandes pour les réglages incroyable non ?

Les voici (toujours sur le site support d'Apple) :

-----
Apple IIc: Serial port interfacing
Last Modified: October 04, 2008
Article: TA38851
Old Article: 310

Setting up the printer port from within a program on the IIc is essentially the same as changing the settings on previous interface cards: after first directing output to the serial port (using PR#1 and PR#2 for Ports 1 and 2, respectively), the commands can then be sent to the serial port. Each command for Port 1 must be preceded by CTRL-I. The commands for Port 1 are:

Cmd -- Description

nnn -- Set line width( from 001 through 255): This command must be followed by an 'N' or a .
nnB -- Set baud rate to value corresponding to nn.

nn -- Rate
01 -- 50
02 -- 75
03 -- 110
04 -- 135
05 -- 150
06 -- 300
07 -- 600
08 -- 1200
09 -- 1800
10 -- 2400
11 -- 3600
12 -- 4800
13 -- 7200
14 -- 9600
15 -- 19200

nB -- Set Data Format to values corresponding to n.

n -- Format
0 -- 8 data 1 stop
1 -- 7 data 1 stop
2 -- 6 data 1 stop
3 -- 5 data 1 stop
4 -- 8 data 2 stop
5 -- 7 data 2 stop
6 -- 6 data 2 stop
7 -- 5 data 2 stop

I -- Echo output to screen.
K -- Disable after .
L -- Generate after .

nP -- Set Parity corresponding to n.

n -- Parity
0 -- none
1 -- odd
2 -- none
3 -- even
4 -- none
5 -- mark (1)
6 -- none
7 -- space (0)

R -- Reset Port 1 and exit from serial port 1 firmware.
S -- Send a 233 millisecond Break character
Z -- Zap (ignore) further command characters (until CTRL-Reset or PR#1). Do not format output or insert carriage returns into output stream.

Differences between ports:
Listed below are the differences between commands for Port 1 and Port 2 of the Apple IIc.

Port 2 uses the same commands, with the differences and additions listed below. Each command for Port 2 must be preceded by a CTRL-A.

nnn -- same
nnB -- same
nD -- same
I -- same
K -- same
L -- same
nP -- same
Q -- Quit Terminal Mode
R -- same
S -- same
T -- Enter Terminal Mode. Use this command after IN#2 only. If you follow this command by PR#2, the IIc will echo input to output. (NOTE: If the other device is also echoing input to output, entering the first character will cause an infinite loop. Use CTRL-RESET to get out.
Z -- same
CTRL-T -- When issued from a remote device, this command puts the IIc in terminal mode if IN#2 is already in effect. The command is the same as CTRL-T typed locally.
CTRL-R -- When issued from a remote device, this command undoes the terminal mode command. If IN#2 and PR#2 are in effect, the remote keyboard and display become the input and output devices of the local IIc. The command is the same as CTRL-A Q typed locally.

-----

Attention: selon que vous utilisiez le port 1 (port serie imprimante) ou 2 (port serie modem), lisez bien les docs "Apple //c External Pinouts" et "Apple IIc: Serial port interfacing" ci dessus, vous verrez que la config par defaut n'est pas la meme (9600 ou 300 bds, CTRL + I ou CTRL + A pour acceder au mode config, ...) et j'imagine l'utilisation d'un cable droit sur port imprimante et d'un croisé pour le port modem (cette derniere affirmation étant à confirmer ou pas).

Mais reprenons sur notre port modem n° 2 avec notre cable croisé :

] IN#2

Suivi de CTRL + A (le curseur devient un ? clignotant)

Taper un I, pour activer l'affichage local des caracteres (c'est toujours bien de voir ce que l'on tape), puis un 14B et dans la foulée (soit I14B) vous propulse à 9600 Bds , un 15B à 19200 Bds.......

De la meme maniere pour les autres parametres (parité, format,..) mais, hormis la vitesse, vous ne devriez pas avoir besoin de les changer. Le I ne sert qu'a afficher ce que vous tapez (cf doc plus haut) , vous pouvez entrer directement 14B ou 15B en aveugle.

On s'emballe, on s'emballe mais dans le feu de l'action, n'oubliez pas de changer la vitesse du port serie, de maniere identique, coté PC sinon cela ne fonctionnera pas.


Il est donc trés facile de transformer l'Apple //c en serveur serie (vu plus haut) et avec des vitesses comme 9600 ou 19200 bauds cela devient trés exploitable. Il est également possible d'imaginer d'autres applications comme transformer son Apple II en Terminal Unix (prévoir carte 80 colonnes si pas incluse) ou meme attaquer son Apple II en @IP, en passant par le PC et un petit programme qui redirige le port com du PC vers TCP/IP (type serial to ethernet), éditer des sources sur le PC et les envoyer sur l'Apple II, etc ... Les applications sont nombreuses.


Mais pour l'instant restons à 300 bds ....

Nos 2 machines arrivent à dialoguer comme il convient. Vous allez me dire que c'est trés bien tout ça mais, hormis en tapant le listing complet de "Choplifter", en dump hexadécimal, vous ne risquez pas encore d'y jouer. Et vous aurez complement raison tout en me donnant une excellente transistion.

  1. La magie du port serie ... et pas que ...

Maintenant que vous avez aperçu les fonctionnalités etendues des cartes series sur Apple II, et plus particulierement celle du //c, nous allons pouvoir les mettre en oeuvre avec, une autre merveille de cette machine, le moniteur. Mais non couillon, pas l'écran... mais voyons par nous meme.

L'Apple II integre un moniteur / desassembleur en rom. Le genre d'outil que bien d'autre micros auraient aimé avoir dans leur petites puces. Il permet d'afficher, modifier, executer, charger / sauvegarder etc.. le contenu de la mémoire. Bref tout ce que l'on peux attendre d'un moniteur digne de ce nom. Si son fonctionnement n'est pas hyper convivial, il est trés puissant et à grandement contribué au succés de la machine auprés des bidouilleurs.

Pour acceder au moniteur :

]CALL-151

Le curseur devient une *

D'une maniere générale les instructions sont du type (adresse mémoire)(instruction). Pour faire un listage assembleur de la mémoire on tape adresse de départ suivi de L.

Ex : *C600L vous affichera en assembleur (L) le programme de boot de la rom P5 du controlleur de disquette qui commence en $C600.

un L (L=List) continuera à dumper la mémoire ..

*C600D (D=Dump) vous affichera le dump en hexadécimal ....
*C600G (G= Go) executera le programme debutant en $C600 soit... ici,  un boot disquette ;) .

Pressez sur CTRL + B suivi de Entrée pour sortir sous le basic en remettant tout en ordre (mémoire et registres) alors que CTRL + C suivi de Entrée conserve les modifications effectuées.

Décidement je vous materne un peu trop ... Voila la liste de commandes :

-----

Summary of Apple II Monitor Commands 

Examining Memory.
{adrs}
Examines the value contained in one location.
{adrs1}.{adrs2}
Displays the values contained in all locations between {adrs1} and {adrs2}.
[RETURN]
Displays the values in up to eight locations following the last opened location.
Changing the Contents of Memory.
{adrs}:{val} {val} ...
Stores the values in consecutive memory locations starting at {adrs}.
:{val} {val}
Stores values in memory starting at the next changeable location.
Moving and Comparing.
{dest}<{start}.{end}M
Copies the values in the range {start}.{end} into the range beginning at {dest}. (M=move)
{dest}<{start}.{end}V
Compares the values in the range {start}.{end} to those in the range beginning at {dest}. (V=verify)
Saving and Loading via Cassette Tape.
{start}.{end}W
Writes the values in the memory range {start}.{end} onto tape, preceded by a ten­second leader.
{start}.{end}R
Reads values from tape, storing them in memory beginning at {start} and stopping at {end}. Prints "ERR" if an error occurs.
Running and Listing Programs.
{adrs}G
Transfers control to the machine language program beginning at {adrs}. (G=go)
{adrs}L
Disassembles and displays 20 instructions, starting at {adrs}. Subsequent L's will display 20 more instructions each. (L=list)
Miscellaneous.
{adrs}S
Disassemble, display, and execute the instruction at {adrs}, and display the contents of the 6502's internal registers. Subsequent S's will display and execute successive instructions. (S=step)
{adrs}T
Step infinitely. The TRACE command stops only when it executes a BRK instruction or when you press RESET. (T=trace)
Contrl­E
Displays the contents of the 6502's registers. (E=examine)
ISet Inverse display mode.
NSet Normal display mode. Also useful as a delimiter for putting multiple commands on one line.
Control­B
Enter the language currently installed in the Apple's ROM (cold start at $E000).
Control­C
Reenter the language currently installed in the Apple's ROM (warm start at $E003).
{val1}+{val2}
Add the two values and print the result.
{val2}­{val1}
Subtract the second value from the first and print the result.
{slot} Control­P
Divert output to the device whose interface card in in slot number {slot}. If {slot}=0, then route output to the Apple's screen.
{slot} Control­K
Accept input from the device whose interface card is in slot number {slot}. If {slot}=0, then accept input from the Apple's keyboard.
Control­Y
Jump to the machine language subroutine at location $03F8. This lets you add your own commands to the Monitor.
The Mini-Assembler.
F666G
Invoke the Mini-Assembler.
${command}
Execute a Monitor command from the Mini-Assembler.
FF69G
Leave the Mini-Assembler.

-----



      1. Les choses sérieuses commencent

Pourquoi ce bref passage par le moniteur de l'Apple II ? Vous allez comprendre. En effet nous avons maintenant besoin de charger un bout de code (un programme quoi) qui va nous permettre de mettre notre Apple II en mode client de notre machine récente (qui fera office de serveur).

Aprés s'etre bien assuré que le PC est connecté à l'Apple II en tapant une petite commande pour le faire réagir ... n'importe quoi juste histoire de provoquer au moins un "syntax error" nous allons charger via le PC notre programme client.

Comme l'auteur d'ADT est un gars bien, il a pensé à nous. Et comme il sait, également, que nous sommes de grosse feignasses, il nous a fourni les sources au format dump dans le package ADT.

Dans le répertoire ADT2004 vous trouverez 3 sous répertoires : ADTcc, ADTgs et ADTssc.

  • Le premier (ADTcc) correspond à la carte Serie Apple Communication Card et dérivés.
  • Le second (ADTgs) est pour le IIgs
  • Le troisieme (ADTssc) est pour la carte Super Serial (et compatibles comme le //c)

Dans chaque répertoire vous trouverez un fichier ADTXX.DMP correspond à la source de votre carte.

Allons dans le repertoire ADTssc et ouvrons le fichier ADT.DMP. Et, hoooooo, surprise (!), un joli ch'ti listing avec en 3eme ligne un appel au moniteur.

Petite explication de texte :

3D0G                                                      ; sert sur les anciennes machines à passer en mode basic

NEW                                                       ; efface la mémoire au cas ou ...

CALL-151                                              ; lance le moniteur

803:4C 0E 08 05 00                           ;début du programme en hexadécimal à l'adresse 803
:01 05 01 00 00 00 D8 20
:84 FE 20 2F FB 20 89 FE
:20 93 FE A9 00 85 08 8D
.......                                                         ; j'ai pas tout mis hein ....
:60 01 00 01 EF D8 00 00                   ;Fin du programme
:00 00 00 00 00 00 00
BSAVE ADT,A$803,L$A14,S6,D1   ; sauvegarde du disquette au format binaire
                                                               ; (BSAVE) avec le nom ADT, adresse de départ
                                                               ; mémoire A$803, Longueur L$A14 sur le slot 6 drive 1


Vous constaterez que pour les 3 1ere lignes, j'ai sauté une ligne entre chaque instructions (3D0G, NEW, CALL-151), c'est voulu, je me suis rendu compte que pour la suite cela fonctionnait mieux. Je vous conseille donc de faire de meme et de sauvegarder le fichier.
Si vous avez lancé votre Apple II sans systeme (Dos, Prodos etc ..) supprimez la derniere ligne (BSAVE ....). En effet elle sera sans interet, par contre notez bien l'adresse $803 qui est l'adresse de début du programme ADT en mémoire. Cela nous servira par la suite.

Ok et bien maintenant, le plus simplement du monde nous allons envoyer le fichier vers l'Apple //c en faisant, depuis l'HyperTerminal "Transfert / Autolargue" ...NON... Mais presque en fait !! "Transfert / envoyer un fichier texte". Selectionnez le fichier adtssc.dmp (attention au filtre .txt) et cliquez sur ouvrir.

Et la, tel Moise faisant s'ouvrir la mer rouge, le dump du programme se charge depuis le PC sur l'Apple. Comme nous sommes resté en 300 bauds cela va prendre qq minutes mais c'est toujours mieux que de se le palucher à la main non ?


Dump en cours du PC vers le //c

Si vous aviez booté depuis une disquette (et laissé le bsave a la fin du programme) il s'enregistre sur la disquette. Vous pourrez donc le relancer directement par la suite par un :

] BRUN ADT

tout simplement

si vous n'aviez pas booté depuis une disquette (et supprimé ou pas le BSAVE), il faudra transférer le fichier ADT122.DSK présent dans le répertoire. Sous peine d'avoir à refaire la manipulation de chargement à chaque fois.

A la fin du transfert et de retour sur le moniteur vous devez avoir quelque chose comme ceci :

:CF 00 D9 C5 D3 00 CE CF
:00 05 00 01 05 01 00 00
:00 01 60 01 00 00 00 0A
:12 00 20 00 00 01 00 FE
:60 01 00 01 EF D8 00 00
:00 00 00 00 00 00 00
BSAVE ADT,A$803,L$A14,S6,D1
*



Lançon ADT par un 803G. On a vu que le programme commence en $803 (cf bsave) donc nous allons dire au moniteur "execute le programme (G) à partir de l'adresse mémoire $803.

ADT est lancé sur l'Apple //c
et voila .. ADT se lance sur l'Apple II !!!






                        8. On termine en beauté

Lancez le "ADT.EXE" sur le PC en ayant pris le soin de sortir d'HyperTerminal avant.

Choisissez le bon port serie et cliquez sur connect.

Le reste n'est plus que routine ...
  • Configure :  permet de modifier la configuration des drives et du port serie (vitesse etc..).
  • Dir : affiche le contenu du repertoire dans lequel se trouve adt.exe.
  • Receive : permet de dire quel fichier .dsk on veut restaurer sur disquette.
  • Send : est l'inverse de receive et permet de generer un fichier dsk sur le PC à partir d'une disquette Apple II.

Par défaut la vitesse est réglé sur le //c et le PC à 19200 Bds ... Inutile de toucher ...

Le mieux pour commencer est de se lancer une restauration d'ADT, histoire de ne pas refaire tout le temps ces manipulations. Copiez le fichier "adt122.dsk" du répertoire "ADTssc" dans le repertoire ou se trouve "adt.exe" et faire un (R)eceive puis "adt122.dsk" en ayant pris soin de mettre une disquette vierge dans le drive.

La restauration se lance façon Locksmith.

Vous n'avez plus qu'a enchainer les disquettes :) la larme à l'oeil !!!

Notez que cette procedure fonctionne avec les version Dos et PRO d'ADT. Si vous avez compris le fonctionnement vous pouvez sans probleme adapter la machine recente (Dos / Windows / Linux / Mac ...). Le tout étant plutôt de comprendre le fonctionnement du port série Apple.

En esperant que cela vous aura donné envie d'aller plus loin dans les méandres du port serie et du moniteur. Décidément, l'Apple II est bien la machine des bidouilleurs !





PS du 18/09/11 : 

1) J'ai fais des essais avec ADT PRO 1.1.9,  Meme config que ci dessus, pensez à cocher cable Apple //c avec Imagewriter dans la config du port serie. Le 115 200 Bds fonctionne (!!) => Images disques restaurées en 45 secs.

2) Utilisez de préférence des disquettes double densité (DD) plutôt que des Hautes Densités (HD), vous aurez moins de problemes. Simple (SS) ou Double Face (DS) ...

3) Pensez à trouer l'autre coté de la disquette, vous pourrez ainsi utiliser les 2 faces de la disquette. ;) ..


3 commentaires:

  1. Si avec ça tu ne rebranches pas ton //c ou ton IIe ... ;)

    RépondreSupprimer
  2. Super site! Je sens que je m'en vais déballer mes sasfépus!

    Sinon CALL-151, tu peux me contacter, j'ai une ou deux questions à te poser! Merci!

    RépondreSupprimer
  3. Oups : laurent.fargues (at) gmail.com

    RépondreSupprimer