[Apple 2] Faire un disque virtuel sur PC ?

Placez ici vos trucs et astuces, étalez sans retenue votre savoir-faire et votre science qui va nous permettre de redonner une apparence neuve et fonctionnelle à nos bouzes.

Modérateurs : Carl, Papy.G, fneck

jvernet
Messages : 1306
Enregistré le : 12 avr. 2007 10:59
Localisation : France 69

Re: [Apple 2] Faire un disque virtuel sur PC ?

Message par jvernet » 11 mai 2018 09:11

hlide a écrit :
10 mai 2018 14:55
? curieusement, il est aussi question d'un langage PLASMA avec compilateur... je n'ai pas cherché à comprendre pourquoi.
PLASMA? c'est un langage pour Apple II, avec un compilateur qui tourne sur Apple II

Avatar du membre
Eagle Protect II
Messages : 230
Enregistré le : 22 nov. 2017 22:17

Re: [Apple 2] Faire un disque virtuel sur PC ?

Message par Eagle Protect II » 16 mai 2018 22:46

6502man a écrit :
20 mars 2018 16:56
J'avais fait un programme pour DOS pour commander le robotarm sur port parallèle, ca peut être un début, mais ca ne fonctionneras pas sous XP (il me semble), je le recherche dans mes archives ...

EDIT:
Tu as de la chance je croyais pas l'avoir accessible, mais j'avais une sauvegarde sur mon serveur :)
Et du coup il y aussi un code pour windows 32bits que j'avais du récupéré quand je m'étais intéressé au Robotarm sur port parallèle :roll:
Si ca peut servir, c'est brut mais fonctionnel pour la version DOS en tout cas ;)
LPT en C DOS/Win32
Bonjour !

Après avoir appris les bases (vraiment les bases, hein !) du C, j'essaie ton petit utilitaire. Quelques petits soucis (petits, hein !) qui ne te prendront qu'un quart de seconde :

Code : Tout sélectionner

#include <iostream>
=> le compilateur ne trouve pas. Faut-il le télécharger et le mettre dans un répertoire particulier ?

Code : Tout sélectionner

using namespace std;
=> le compilateur ne comprend pas "using"

En attendant, j'ai remplacé les "cout" par des "printf" et j'ai supprimé la ligne "using", et le résultat donne ceci :

Essai01.png
Essai01.png (6.69 Kio) Vu 247 fois

Je m'attendais plutôt à ce que la dll ne se charge pas, mais apparemment si, et par contre l'appel à ses fonctions semble inactif...
Des idées sur ce problème ?

Merci !

__sam__
Messages : 3960
Enregistré le : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Apple 2] Faire un disque virtuel sur PC ?

Message par __sam__ » 16 mai 2018 22:49

<iostream> et les namespace ne sont pas du C, mais du C++. Beaucoup de gens confondent les deux, mais pourtant le C++ n'a plus vraiment de point commun avec le C.
Samuel.
A500 Vampire V2+, A1200(030@50mhz/fpu/64mb/cf 8go),
GVP530 (MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.
New Teo 1.8.4 8)

Avatar du membre
Eagle Protect II
Messages : 230
Enregistré le : 22 nov. 2017 22:17

Re: [Apple 2] Faire un disque virtuel sur PC ?

Message par Eagle Protect II » 17 mai 2018 22:15

__sam__ a écrit :
16 mai 2018 22:49
<iostream> et les namespace ne sont pas du C, mais du C++. Beaucoup de gens confondent les deux, mais pourtant le C++ n'a plus vraiment de point commun avec le C.
Ok, du coup j'ai bien fait de les enlever. Mais donc, la routine ne marche pas, malgré le chargement apparent de la dll.

Le code complet de 6502man (que j'ai modifié comme dit plus haut) est ici, est-il fonctionnel en C-tout-court ou dois-je impérativement trouver un compilateur C++ ?

Code : Tout sélectionner

#include <stdio.h>
#include <stdlib.h>
// #include <iostream>
#include <conio.h>
#include <windows.h>

// using namespace std;

typedef short _stdcall (*inpfuncPtr)(short portaddr);
typedef void _stdcall (*oupfuncPtr)(short portaddr, short datum);

int main(void)
{
    HINSTANCE hLib;
    inpfuncPtr inp32;
    oupfuncPtr oup32;

    short x;
    int i;

    hLib = LoadLibrary("inpout32.dll" );

    if (hLib == NULL)
    {
        printf("le chargement de la librairie a échoué\n");
        return -1;
    }
    printf( "librairie chargee\n" );

    inp32 = (inpfuncPtr) GetProcAddress(hLib, "Inp32" );
    if (inp32 == NULL)
    {
        printf( "inp32 existe\n" );
        return -1;
    }
    else
        printf( "inp32 n'existe pas\n" );

    oup32 = (oupfuncPtr) GetProcAddress(hLib, "Out32" );
    if (oup32 == NULL)
    {
        printf( "oup32 existe\n" );
        return -1;
    }
    else
        printf( "oup32 n'existe pas\n" );

    x = (inp32)(0x378);
    printf( "lu : %x\n", x );

    i=0x378;
    x=0xFF;
    (oup32)(i,x);

    FreeLibrary(hLib);
    return 0;
}

Avatar du membre
gleike
Messages : 462
Enregistré le : 16 oct. 2014 11:12
Localisation : Ludres (54710) Meurthe & Moselle

Re: [Apple 2] Faire un disque virtuel sur PC ?

Message par gleike » 18 mai 2018 10:40

Tu devrait essayer DEV C++, il est gratuit et simple d'utilisation.
https://sourceforge.net/projects/orwell ... rce=navbar

Avatar du membre
6502man
Messages : 8929
Enregistré le : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: [Apple 2] Faire un disque virtuel sur PC ?

Message par 6502man » 18 mai 2018 10:55

J'ai eu utilisé DEV C++ à une époque ainsi que codeBlocks, mais quand je vois "using namespace" c'est typiquement du C# avec Visual studio que j'utilise aussi, du coup je sais plus sur quel environnement je l'ai compilé :oops:
Désolé de te compliquer avec mon code :oops: :roll:

Je vais regarder de mon côté pour faire un code de test du port parallèle en C, je n'aurai peut être pas le temps aujourd'hui ...
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.

hlide
Messages : 348
Enregistré le : 29 nov. 2017 10:23

Re: [Apple 2] Faire un disque virtuel sur PC ?

Message par hlide » 20 mai 2018 13:07

En C, il me semble que les noms symboliques dans un fichier objet (i.e, après compilation du source) sont préfixés avec "_", genre "_Inp32" au lieu de "Inp32" mais je dis ça de mémoire très vague. Et comme tu cherches à importer une fonction venant d'un autre binaire (i.e, un objet exécutable), il te faut mettre le nom symbolique, soit "_Inp32" au lieu de "Inp32" dans la fonction qui importe depuis une dll.

@6502man, "using namespace std;" et "#include <iostream>" sont bien du C++. Encore que je découragerais d'utiliser "using namespace std;" pour pouvoir faire du "string" au lieu de "std::string" mais au risque de polluer l'espace de nommage global (si t'as une fonction qui s'appelle "string", tu distingues comment ?).
Modifié en dernier par hlide le 20 mai 2018 19:00, modifié 2 fois.

hlide
Messages : 348
Enregistré le : 29 nov. 2017 10:23

Re: [Apple 2] Faire un disque virtuel sur PC ?

Message par hlide » 20 mai 2018 13:29

Je viens de voir que les fonctions à importer sont de type "_stdcall" donc plus compliquées au nommage symbolique - d'ailleurs pourquoi en _stdcall plutôt que des fonctions C normaux ?

Pour commencer, le fichier source doit terminer avec le suffixe .c et non .cpp (ou quoique soit d'autre) pour s'assurer que c'est bien le compilateur C et non C++ qui est appelé - parce qu'autrement tu vas devoir composer avec le C++ Name mangling qui va te faire hurler d'horreur puis de douleur.

Une fois que t'es sûr d'utiliser le C, il reste le C Name mangling :

Code : Tout sélectionner

int _cdecl    f (int x) { return 0; }
int _stdcall  g (int y) { return 0; }
int _fastcall h (int z) { return 0; }
_cdecl c'est la convention par défaut des fonctions C (dont directive omissible).

Voilà ce que ça donne en nom symbolique au niveau objet :

Code : Tout sélectionner

_f
_g@4
@h@4
_name@X: X est le nombre d'octet en décimal que prend les arguments de la fonction. Par exemple, si j'ai : f(int a, int b) alors j'aurais _f@8 (car int = 4 octets et j'en ai 2). La raison est probablement liée au fait que cela permet de savoir combien d'arguments est empilé à l'appel et combien l'instruction RET n dépile au sortir de la fonction. Bref, retient que si tu peux redéfinir Inp32 et Out32 sans les _stdcall dans la dll, ça simplifiera.

En attendant, je peux les calculer pour toi : _Inp32@2 et _Out32@4. Encore que dans un environnement 32-bit, je m'attendrais qu'un short soit traduit en int pour l'empilement/dépilement des arguments : _Inp32@4 et _Out32@8.

Bon plaisir !

Avatar du membre
Eagle Protect II
Messages : 230
Enregistré le : 22 nov. 2017 22:17

Re: [Apple 2] Faire un disque virtuel sur PC ?

Message par Eagle Protect II » 21 mai 2018 15:51

Quand je dis que je n'aime pas le C... vous me comprenez maintenant ?

Bon alors suite au test fait avec le petit utilitaire de 6502man (le dernier) :

Sous DOS 6.22 (j'ai remonté un lecteur 3.25" exprès) : ça marche.
Et du coup j'ai essayé sous Windows XP : ça marche aussi.

Donc 1) côté matériel, ça marche, et 2) il est possible de faire un programme qui tourne sous XP et qui lit le port parallèle.

(je sens que 6502man va faire payer cher les informations dont il dispose !)
: dis, c'est quel langage et quel compilateur et quelles instructions, ton petit utilitaire ???

(Et bravo !)

__sam__
Messages : 3960
Enregistré le : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Apple 2] Faire un disque virtuel sur PC ?

Message par __sam__ » 21 mai 2018 19:49

Eagle Protect II a écrit :
21 mai 2018 15:51
Quand je dis que je n'aime pas le C... vous me comprenez maintenant ?
Ben c'est pas du C ça , c'est de l'ABI (interface binaire) windows. Le C sur les vraies OS a une ABI compatible avec lui, c'est à dire que c'est l’appelant qui dépile et empile les arguments sur la pile. Windows LUI n'a pas voulu faire comme les autres. Il en faut toujours un pour se faire remarquer, n'est-ce pas ?
Samuel.
A500 Vampire V2+, A1200(030@50mhz/fpu/64mb/cf 8go),
GVP530 (MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.
New Teo 1.8.4 8)

Avatar du membre
6502man
Messages : 8929
Enregistré le : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: [Apple 2] Faire un disque virtuel sur PC ?

Message par 6502man » 21 mai 2018 20:54

Eagle Protect II a écrit :
21 mai 2018 15:51
(je sens que 6502man va faire payer cher les informations dont il dispose !)[/size] : dis, c'est quel langage et quel compilateur et quelles instructions, ton petit utilitaire ???

(Et bravo !)
Je suis pas très réactif en ce moment cause boulot 7/7, et plusieurs projets en cours 8) c'est un peu de al folie :roll:

Donc comme je te le disais je te fournirai tous ce qui faut pour que tu arrives à programmer ton soft ;)

La première étape était de vérifier que l'on puisse créer un utilitaire qui accède directement au port parallèle en C, donc tu valides ce point.

le programme je l'ai fait sous turbo C/C++ 3 sous Win ME :shock: :lol:
Oui on ressort les classiques car la je suis sur et certains que ça fonctionne sous DOS, et j'ai utiliser les fonction du DOS IN et OUT au préalable configurer le port parallèle en entrée ...

Demain je prépare tous ca ...

Sous quel environnement tu vas développer ?
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.

hlide
Messages : 348
Enregistré le : 29 nov. 2017 10:23

Re: [Apple 2] Faire un disque virtuel sur PC ?

Message par hlide » 21 mai 2018 21:31

__sam__ a raison. Ce n'est pas lié au C mais à l'ABI choisi par le compilateur. Le C ne définit pas pas ce que doivent être les noms qui apparaissent dans un fichier objet. Je précise quand même que la directive _cdecl (celle par défaut quand non spécifié) fait exactement ça : l'appelant doit dépiler les arguments et ce même sous Windows.

Avatar du membre
Eagle Protect II
Messages : 230
Enregistré le : 22 nov. 2017 22:17

Re: [Apple 2] Faire un disque virtuel sur PC ?

Message par Eagle Protect II » 22 mai 2018 02:14

6502man a écrit : Sous quel environnement tu vas développer ?
Bonjour,

A priori sous Codeblocks... pour l'instant c'est le seul "compilateur" (je mets des guillemets) que j'ai pu installer avec succès.

Merci !

Avatar du membre
6502man
Messages : 8929
Enregistré le : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: [Apple 2] Faire un disque virtuel sur PC ?

Message par 6502man » 22 mai 2018 15:58

En fait je voulais dire sous quel OS :roll:
Mais c'est pas grave j'ai trouvé une solution pour tous les OS.

Ce que je te propose c'est de commencer par développer ton soft pour DOS/XP et par la suite l'adapter aux windows modernes ? (ça sera pas difficile à partir des sources C)

Donc je viens de te préparer un package complet, la seule solution que j'ai trouvé pour les OS récents et la plus pratique c'est DosBox, il a l'avantage d'être disponible pour Windows / MAC / LINUX / SOLARIS etc, etc, ..

Donc tu peux télécharger ce pack et j'ai crée un how to qui détaille ce qui doit être fait pour utiliser Turbo C, c'est vraiment très simple :wink:
https://www.6502man.com/Forum/TurboC_Wi ... DosBox.zip

Code : Tout sélectionner

/\_/\_/\_/\_/\_/\    HOW TO USE BORLAND TURBO C WITH DOSBOX  _/\_/\_/\_/\
_/\_/\_/\                                                      _/\_/\_/\_
/\_/\                                                               /\_/\
  /\                     (C) 2018  BY 6502MAN                         /\
/\_/\                                                               /\_/\
/\_/\_/\_/\_/\_/\/\_/\_/\_/\_/\_/\/\_/\_/\_/\_/\_/\/\_/\_/\_/\_/\/\_/\_/\



 1) INSTALL DOSBOX (WINDOWS or MAC or LINUX or OTHER)

 2) CREATE DIRECTORY "dosBox_partage" IN ROOT DIRECTORY ON
     THE REAL COMPUTER (WINDOWS or MAC or LINUX or OTHER)

 3) COPY ARCHIVE TO THIS DIRECTORY

 4) EDIT DOSBOX CONFIG AND ADD ON THE LAST LINE
    AFTER THIS TEXT :  "# You can put your MOUNT lines here." 
	
CLS
MOUNT C c:\dosBox_partage -freesize 100
PATH c:\turboc3\bin
C:
@echo Type  TC  for Turbo C

  5) EDIT PATH OF DIRECTORY ON LINE "MOUNT" TO CORRESPOND WITH
     THE DIRECTORY PREVIOUSLY CREATED

  6) SAVE CONFIG
  
  7) LAUNCH DOSBOX AND TYPE TC FOR USE BORLAND TURBO C
  
  
/\_/\_/\_/\_/\_/\/\_/\_/\_/\_/\_/\/\_/\_/\_/\_/\_/\/\_/\_/\_/\_/\/\_/\_/\  
J'ai inclus le source de l'utilitaire que je t'ai fait pour contrôler le port parallèle en lecture/écriture dans l'archive dans le répertoire "SOURCES".
Tu pourras facilement charger dans Turbo C le source (la souris fonctionne très bien sous DosBox).
Tu n'as rien à configurer il fonctionne directement et tu peux compiler, make, ... les fichier EXE créés se trouvent dans TURBOC3/SOURCE.


Les avantages de cette solution c'est que :
1) tu peux éditer le source sous ton OS favoris.
2) compiler en 3 secondes
3) et de plus les fichiers sources et EXE sont accessibles facilement
depuis ton OS favoris grâce au dossier partagé "dosBox_partage"

L’inconvénient c'est que le binaire produit fonctionne uniquement pour DOS.


A noter que je fais la même chose (Turbo C) dans une machine virtuelle Dos ou Win9x ou WinMe, mais moins pratique pour celui n'ayant pas déjà de machine virtuelle installé ;)

Par la suite il faudrait trouver un moyen de produire le soft pour les machines récentes (64 bits), mais le port parallèle n'est plus supporté ou très rarement, donc peut être utiliser une autre alternative ?


J'espère que cela pourra t'aider dans ton projet :D


Je le post ici comme ça si d'autres personnes veulent revivre les sensations du Borland Turbo C sous DOS :wink:
Que de souvenirs quand même, ça me rappelle lorsque sous Turbo C je "m'amusais" à créer des fenêtres de différentes couleurs avec des menus, maintenant mais qu'est ce que c'est kitsch :lol:
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.

Avatar du membre
Eagle Protect II
Messages : 230
Enregistré le : 22 nov. 2017 22:17

Re: [Apple 2] Faire un disque virtuel sur PC ?

Message par Eagle Protect II » 22 mai 2018 21:49

Super cool, merci !


Donc oui pour l'instant je vais le faire avec mon matériel : un PC de 2009 sous XP, et après on verra pour aller plus loin (il faut déjà que ça marche, n'est-ce pas !).

Pour des machines plus modernes, il n'y a pas de port parallèle, mais une carte PCI avec 2 ports COM et 1 LPT coûte une vingtaine d'euros. Ça dépasse un tout petit peu du cahier des charges initial (zéro achat de matériel), mais ça reste limité.

Et dans l'ordre :
1) faire un serveur qui marche sous Windows en ligne de commande (ça c'est mon boulot)
2) faire que ça marche sous n'importe quel Windows, en particulier 64 bits (celui qui voudra s'y collera, moi de toute façon je n'ai pas de machine 64 bits)
3) faire un joli machin avec des jolies fenêtres, des menus, les bruits du Disk II, du drag'n drop, bref, la même chose version "pratique", et là aussi, si quelqu'un s'y intéresse il le fera. Mais comme on est des geeks, on aime bien travailler en ligne de commande, n'est-ce pas ! (si quelqu'un me dit qu'il n'aime pas travailler en ligne de commande alors qu'il me vante le C, je le pile !)

Bon allez, c'est parti !

(si je ne suis pas de retour avant 6 mois, envoyez les équipes de secours...)

Répondre