top of page

Qu'est-ce que Cpcdos ?

Cpcdos est un co-noyau 32 bits monolithique modulaire multitâche à ordonnancement préemtif pour ordinateur à processeurs ou émulateurs compatible x86.

 

Ce projet gratuit inclut principalement le langage de programmation CpcdosC+ pour simplifier la programmation d'un système d'exploitation et d'applications puis, le Lua, Python, C/C++ 98, 11, 14 et 17 pour les amateurs doués !

 

Le tout dans un style terminal/ligne de commandes et/ou avec une interface graphique. Votre choix!

​

FAQ : Pourquoi utilise t-il encore "FreeDOS" s'il est quasi-indépendant ?

​

1 - Interface visuelle

Vous pourrez créer votre propre interface graphique pouvant atteindre les résolutions suivantes :

- Standard 4:3 comme 800x600, 1024x768 ...
- Haut définition 16:9 ou 16:10 comme 1920x1080, 1600x1900 ...

- 4K .. à voir ;)


Et puis une profondeur de couleurs de :

- 16 bits (65 536 couleurs)
- 24 bits (16 777 216 couleurs)
- 32 bits (4 294 967 296 couleurs)

Petite aperçu de la 1ère version de la nouvelle GUI de Cpcdos 2017

Aperçu d'un rendu 3D GZE sous Cpcdos OSx

2 - Système

De manière approfondi, Cpcdos est capable de gérer une infinité de threads, leur temps d'exécution en micro-seconde selon leur priorités d'exécution pour chaque processus, et aussi exécuter du code natif "externe".

 

​

 

​

​

​

Comme vous avez dû comprendre, il la particularité d'inclure 2 langages de programmations différents (bientôt plus) pour concevoir votre système d'exploitation et aussi bien vos applications 32 bits :
 

  • Le CpcdosC+ étant un langage propre à Cpcdos, non typé, bientôt 100% orienté objet, particulièrement très simple et basique à comprendre. Il inclut également une double syntaxe hybride (Francophone et Anglophone). Ce langage a pour but de simplifier vos tâches, et "automatiser" les fonctions compliquées à utiliser, gérer ou a comprendre pour les jeunes développeurs. (Comme le graphisme, la 3D, la console, le réseau, ..).
    Ce langage peut être directement interprété sur une Console CpcdosC+ afin de gérer votre système plus aisément depuis vos doigts. A noter que l'automatisation n'affecte pas les performances.​
     

  • Le C/C++ étant un langage populaire, et très évolué, Cpcdos est capable d'exécuter du code compilé C++14 IR natif sous sa LLVM ou via un exécutable Windows 32 Bits PE pour développer votre OS ou vos applications, tout en vous proposant les fonctions de base du noyau (Graphique, 3D, console, réseau, mémoire..) afin de développer de manière plus approfondi.
    La seule condition pour l'exécutable LLVM c'est qu'il faut que votre code soit compilé via Clang C++ en un fichier de format .BC ou .LL avant de pouvoir être exécuté. Ce compilateur est disponible en version Windows, Linux, Mac.
    Et pour l'exécutable Windows, il est fortement conseillé d'utiliser le compilateur multi-plateforme CWC
     

  • Le Lua/Python, et encore ... pour 2018 !

​

Vous l'avez aussi compris, Cpcdos est capable d'exécuter des fichiers exécutables .exe Win32 format PE afin que votre application soit compatible Windows ET Cpcdos. Ceci est "~99% fonctionnel" avec du code indépendant. Surtout s'il est compilé avec CWave Collection. Car ce dernier rend compatible les fonctions NT<=>Cpcdos.

Concernant les fonctions dépendant du noyau NT de Microsoft Windows, la stabilité et sa compatibilité reste expérimental, plusieurs années sont requis pour que vos application Windows 32bits soient au moins à 100% compatible.

​

A ce jour, il fonctionne encore sur le kernel de FreeDos pour seulement 5 raisons.
--> Voir FAQ: Pourquoi utilise t-il encore DOS ?
 

Cpcdos est actuellement capable de gérer de manière autonome :

- L'interface visuelle au pixel près

- Rendu 3D via GZE Engine

- Curseur graphique

- Lecture des images bmp, jpg, png, gif

- Lecture et écriture des fichiers.

- Caractères UTF-8

- Polices d'écritures

- Ping ICMP

- Client/Serveur UDP/TCP, TELNET et HTTP

- Protocoles Client/Serveur HTTP, FTP (en cours)

- Langage CpcdosC+, POO, Fonction(), routines, variables, calculs, exécution de code

- Mémoire RAM

- "Garbage collector" (RAII)

- Gestionnaire des tâches

- LLVM (Low-Level-Virtual-Machine)

- Chargeur d'exécutable Win32 PE

- Mémoire virtuelle

- Multi-threading

- ISR

- etc....

​

​

​

​

​

​

​

​

​

​

​

​

​

​

​

​

Visualiser en format PDF zoomable
 

«Exécuter du code natif externe» voilà d'où viens la notion du «noyau modulaire». Cpcdos est capable de charger une infinité de bloc de code (des modules), venant de l'extérieur de Cpcdos. De manière dynamique, ça peut être des fonctions, des simples programmes EXE Windows, LLVM, ou bien des drivers. Des liaisons dynamiques entre modules sont alors créées.

3 - Mémoire

Étant un système 32 bits, Cpcdos est théoriquement capable de supporter maximum 4 Giga octets de RAM (Cela dépend aussi si vous avez une mémoire graphique dédié ou non). Ce qui suffit largement pour le moment. Le noyau en exécution consomme en moyenne 2 à 20 méga octets de RAM.

Finalement, 128 Mo de RAM, et un disque de stockage de 128Mo suffit pour démarrer le noyau seul.
C'est votre OS dont l'interface graphique qui prendra le plus de ressources. Dont au moins 64Mo (VRAM) de carte graphique si vous utilisez l'interface graphique.

​

Si vous compter créer un OS complet, cet à dire, avec interface une graphique de haute définition, des rendus 3D, traitements d'images, transparences, effets graphiques, jeux etc.. Prévoyez au moins 512 Mo de mémoire RAM.
 

4 - Réseau

Cpcdos est capable de communiquer avec l'extérieur en UDP/TCP avec d'autres machines (Windows, Linux, PS3, Routeurs, Android, Windows Phone, iPhone...).



Voici donc une liste de possibilités que vous pourrez imaginer :
 

* Créer votre propre serveur TCP en CpcdosC+ et/ou votre propre protocole très facilement pour accueillir des clients en local, ou bien du monde entier via l'internet. En 2 ou 3 lignes de codes.

​

* Gérer les clients connectés, les données réceptionnées, les données à envoyer grâce à un buffer intelligent.

​

* Créer un serveur d'administration à distance avec un accès utilisateur "sécurisé" vous permettant d'accéder tant qu'administrateur au SHELL CpcdosC+ du noyau ou au serveur TELNET, afin d'administrer votre OS & Noyau depuis un autre PC ou bien depuis votre téléphone & Tablette Android, Apple ou Microsoft.

​

* Créer votre propre client TCP en CpcdosC+, ceci vous permet de vous connecter à n’importe quel serveur dans le monde entier, même vous connecter en localhost pour tester votre propre serveur. Chaque clients/serveur Cpcdos ont leur threads accompagné de leur buffer, qui fonctionne de manière indépendant, vous pourrez également personnaliser la priorité d'exécution des serveurs/clients. CpcdosC+ vous donne tout les outils, à vous d'innover! ;)

​

​

Pilotes réseaux compatibles (NDIS2.0)
3Com, Accton, ADMtek, Adaptec, Agere, Allied Telesyn, AMD CNet, Atheros, Broadcom, CNet, Compaq, D-Link, Davicom, Digital, HP DeskDirect, IBM EtherJet, Intel, Linksys, Macronix, Marvell, NE2000, NE3000, Netgear, Nvidia, Olicom, ReadyLink, Realtek, SiS, SMCSurecom, SysKonnect, VIA, Xircom...

Le débit moyen le plus récurrent est de 100kbits/s.

​

Les cartes WiFI ne sont pour le moment pas prise en charge, mais vous pouvez trouver une alternative à la carte WiFi ici.

5 - Le CpcdosC+

Le CpcdosC+ version 4 (Accronymes : CpcdosCodePlus/CCP/CC+) est un langage de programmation "POO" avec le quel, il vous donnera les possibilités de créer votre propre système d'exploitation, vos applications, vos jeux et vos routines système de manière simplifié.

Il vous permet également coder avec 2 syntaxes, Anglo&Franco-phone (La conversion est possible), ce qui vous permet de coder avec des syntaxes françaises ET/OU anglaises, choisissiez votre préférence !. Le langage CpcdosC+ simplifie la programmation en automatisant beaucoup d'opérations que vous n'aurez pas à gérer comme :

L’ordonnancement, les threads, la mémoire & buffer, les types de variables, compilation à la volée, l'affichage, double buffering, le debuggage, découpage header WEB, ouverture sockets réseaux, etc...

​

Avantages​​

  • Moins de lignes de codes. Complexification possible

  • Langage non typé. Pas besoin de gérer les déclaration de type integer, double, string, long, etc ....

  • Langage orienté objet. Bientôt à 100%

  • Non sensible à la case. Avec ou sans majuscules

  • Exécution multi-thread "révolutionnaire", aucun "frize" processus en cas de boucle ou crash.

  • Syntaxe textuellement compréhensible, et commandes à l'infinitif.

  • Séquences d'exécutions des fonctions automatisés selon la commandes et les paramètres.

  • Pré-compilation/Optimisation à la volé. Optimise à +20 à 60% la vitesse d'exécution! Expérimentale!

  • Déboggeur, gestionnaire d'erreurs et de syntaxes, paramètres et autres erreurs du noyau.

Désavantages​​

  • Vitesse des boucles assez catastrophique. En cours d'amélioration!

  • 30% des commandes CpcdosC+ demandent d'utilisation de paramètres dans un ordre stricte.

  • Interruption matériel interdites sauf en administrateur. Problèmes de stabilité et sécurité.

​

EXEMPLE : Comparaisons C/C++ et CpcdosC+, avec un client réseau TCP

Le but du code étant de se connecter au serveur 192.168.1.4 avec le numéro de port 1234, envoyer un message, réceptionner un message et fermer la connexion.

​

Code C : client.c

 

Code CpcdosC+ : tcp_test.cpc

​

​

​

​

​

​

​

​

​

​

​

 

​

​

​

​

​

​

​

​

 

​

​

Vous constaterez qu'il y a de moins de lignes de codes et moins de choses protocolaire/strictes à gérer en CpcdosC+ qu'en C/C++. Dans cet exemple en CpcdosC+, les sockets réseaux, les instances, allocations mémoires, et les désallocations sont automatiquement géré par le moteur CpcdosC+. Ce qui simplifie le développement!

​

​

​

​

 

<En cours de rédaction>

Rem/ Connexion au serveur + récuperation du N°PID (N° processus associé au socket)​

@#PID_serveur client/  192.168.1.4:1234

​

si/ "%PID_Serveur%" > "0" alors:

    // Demander a l'utilisateur de taper un message

    Txt/ Please enter the message :

    fix/ /q Mon_Message

​

    // Envoyer le message grâce au PID connecté

    client/ /set:%PID_serveur% %Mon_Message%

​

    // Receptionner le message reçu via le PID connecté

    @#Reception client/ /get:%PID_serveur%

    txt/ %Reception%

 

    // Et fermer la connexion

    client/ /stop:%PID_serveur%

Sinon:

    // Ici, le PID est inférieur à 1, donc on affiche un message d'erreur

    txt/ !!! Erreur lors de la connexion au serveur !!!

fin/ si

nb : "PID" = Processus IDentification, il s'agit d'un simple numéro qui permet son identification

bottom of page