raphnet.net banner

SD-Cart JR: Lecteur de carte MMC/SD pour PCjr

twitter@raphnetlabs
Buy Me a Coffee at ko-fi.com
Contenu

Résumé

SD-Cart JR

SD-Cart JR

SD-Cart JR est un montage permettant à un PCjr fonctionnant sous DOS d'écrire et lire d'une carte MMC (ou compatible) via une des deux fentes pour cartouche à l'avant.

Performance actuelle: 44 ko/s, Écriture: 35 ko/s. Bien plus rapide que le lecteur de disquette (10 ko/s). La performance peut varier d'une carte à l'autre. Voir la section compatibilité et performance pour plus de détails.

goto top


L'électronique

Une bonne partie des signaux du BUS de mémoire du PCjr sont disponible sur le connecteur pour cartouche, mais il n'y a pas de signal d'écriture. Cela ne veut pas dire qu'on ne peut pas transmettre d'information vers la cartouche cependant, puisque l'adresse étant lue en elle même est de l'information sortante! J'ai divisé l'espace mémoire accédant à la cartouche en quelques zones dont certaines on un effet secondaire. (sélectionner la carte, charger une valeur à transmettre, etc).

Comme les cartes communiquent de manière sérielle (bus SPI), j'ai employé deux shift registers (un pour transmettre vers la carte, l'autre pour recevoir) afin d'échanger des octets complets avec le PCjr et possiblement obtenir une meilleure performance...

Le circuit est câblé au signal CS2 du port de cartouche et est donc visible de D0000 à D7FFF.


Schéma, page 1 - BUS PCjr, décodage d'adresse et ROM

Schema, page 1

Schéma, page 2 - Shift Registers, interface pour la carte (régulateur de tension et adaptation des niveaux)

Schema, page 2
Avant de concevoir un PCB, j'ai fait un montage sur un "breadboard", mais pas entièrement sans soudure. Pour l'accès aux signaux de la cartouche, j'ai soudé des fils entre un de mes circuits servant à fabriquer une cartouche PCjr EPROM et les composants DIP installés dans le breadboard. Pour la fente destinée à recevoir la carte, j'ai utilisé un petit module de Adafruit qui comportait un régulateur et des convertisseurs de niveaux de voltage.

Mon montage de test

Mon montage de test

Soudures

Soudures



Une fois que tout semblait fonctionner, j'ai conçu un PCB équivalent à mon montage de test, avec quelques changements.

D'abord, plutôt que d'utiliser le module Adafruit pour micro-sd, j'ai opté pour une fente acceptant les cartes MMC et les cartes SD de taille "ordinaire" plutôt que "micro". Considérant les limitations (surtout avec Dos 3.3) d'espace disque "raisonnable" (si on ne veut pas attendre 5 minutes la première fois qu'on tape "dir"), je tenais à pouvoir utiliser les vieilles cartes traînant dans mes fonds de tiroir plutôt que de "gaspiller" des cartes modernes.

Je tenais aussi à ce que le circuit puisse être installé dans un boîtier. J'ai donc utilisé des composants en montage en surface pour sauver de l'espace. Le circuit résultant peut donc être installé dans un boîtier, mais cela demande certains efforts (il faut couper du plastique ici et là...).

Et finalement, j'ai prévu un espace pour un ROM qui peut permettre de démarrer via la carte comme s'il s'agissait d'un disque dûr.

Montage final

Montage final


goto top


Le logiciel

Mes requis logiciels étaient:
  1. Pouvoir écrire et lire le contenu de la carte sous DOS comme on le fait avec une disquette ou un disque dûr. Autrement dit, accès par une lettre de lecteur, par exemple c:
  2. Pouvoir utiliser la carte sur un autre système (une machine moderne par exemple) afin d'échanger des fichiers avec le PCjr.
  3. Pouvoir démarrer avec une carte comme s'il s'agissait d'un disque dûr, sans utiliser de disquette.
Pour le requis 2 ci-dessus, c'était facile. Les cartes mémoire sont normalement partitionnés comme le sont les disque dûrs, avec une table de partitions dans le MBR, et renferment normalement une seule partition couvrant l'ensemble de l'espace disponible. De plus, cette partition contient normalement un système de fichier FAT (FAT12, FAT16 ou FAT32) selon l'espace disponible. Très standard et supporté par DOS, Linux, Windows, Mac OS... Il faut tout de même être attentif aux limitations de la version de DOS utilisée sur le PCjr. Par exemple, DOS 2.10 ne connait que FAT12, DOS 3.30 ne supporte pas FAT16B... Il peut donc être nécessaire d'utiliser une partition plus petite.


Pilote sdcart.sys

Exemple de config.sys

Exemple de config.sys

J'ai codé un pilote pour DOS qui permet d'accéder à la première partition d'une carte mémoire comme s'il s'agissait d'une disquette. L'installation est facile, il suffit d'ajouter DEVICE=SDCART.SYS dans le fichier config.sys.

La carte sera accessible via la première lettre de lecteur disponible à partir de c:. Il est possible de changer la carte mémoire sans redémarrer. Le pilote détecte que la carte a été retirée ou changée et en avise DOS.

Si vous avez déjà un disque dur, possiblement grâce à jrIDE, ou ne souhaitez pas pouvoir démarrer par la carte (requis 3), le pilote sdcart.sys est tout ce qu'il vous faut.

Si vous êtes prêts à échanger performance pour mémoire vive libre, SDCARTL.SYS est également disponible et n'utilise qu'environ 3kB au lieu de 9kB.

Boot ROM

PCjr démarré avec une carte MMC de 64Mo

PCjr démarré avec une carte MMC de 64Mo

J'ai également codé un "Boot ROM" pour PCjr qui remplace int 13h (le service d'accès aux disques/disquettes du BIOS) et rends le PCjr capable de démarrer sur une carte mémoire comme s'il s'agissait d'un disque dur. Lorsque ce ROM est utilisé, sdcart.sys n'est pas nécessaire, DOS prends la carte mémoire en charge comme un disque dur. Fdisk et format peuvent même être utilisés.

À l'heure actuelle, ce ROM est expérimental et pas tout à fait complet, mais tout de même fonctionnel. État actuel des choses:


Aussi, comme je n'ai pas la chance d'avoir un jrIDE, je ne suis pas certain si mon ROM coopère bien. Mais en théorie, le lecteur de carte s'installera comme deuxième disque (81h).



sdpart.com

Infos sur la carte via sdpart.com

Infos sur la carte via sdpart.com

Fdisk ne prends pas en charge les périphériques auxquels DOS accède via un pilote, comme sdcart.sys. Il n'est donc pas possible d'utiliser Fdisk pour afficher les partitions. De plus, les cartes mémoires comportent des registres (notamment les registres CSD et CID) qui contiennes certaines informations comme le fabricant, le modèle, le numéro de série...

L'outil sdpart permet d'afficher le contenu des registres de la carte et la table de partitions. Des fonctions de base pour effacer toutes les partitions existantes et créer une partition de 32 mo sont également offertes. Le nom "sdpart" implique que cet outil pourrait offrir davantages de fonctionalités se raprochant de celles de fdisk à long terme, si cela s'avère utile. Pour le moment toutefois, sdpart.com est un bon moyen pour vérifier si une carte fonctionne, et sinon, pour aider à comprendre pourquoi.

Tout comme fdisk, la commande format de DOS ne supporte pas les périphériques utilisant un pilote comme sdcart.sys. Je pense peut-être un jour créer un outil nommé sdformat, mais pour l'instant, il faudra formatter la carte à l'aide d'un autre système d'exploitation.

goto top


Téléchargement

Version v04
29 décembre 2020 (Mardi)
Amélioration de la compatibilité et correctifs.
  • sdpart.com / sdcart.sys : Réessaye en cas d'échec de lecture du MBR (rends certaines cartes fonctionelles)
  • sdcart.sys : Utilise CMD13 (Send Status) plutot que CMD10 (Read CID) pour détecter les changements de carte (Corrige des erreurs occasionelles avec certaines cartes)
  • sdpart.com : Tests d'erreurs supplémentaires, affiche les détails de la carte avant de lire le MBR, ainsi si la lecture échoue au moins certaines informations sont affichées.
  • BIOS : Lorsque la lecture d'un secteur échoue, réessaye une fois. (Cela corrige un problème où le lecteur C: n'existait pas avec certaines cartes)
Versions: sdpart.com v0.4, sdcart.sys v0.3, bios v0.30
Fichier(s):
sdcjr04.zip (14.5 KB)
Afficher les versions précédentes
Version v03
8 décembre 2020 (Mardi)
  • Support de l'adressage par blocs (pour les cartes de plus de 2 Go)
  • Support des partitions de plus de 32 Mo dans sdcart.sys
  • Ajout d'une version 'faible mémoire' de sdcart.sys (sdcartl.sys). Sacrifie un peu de vitesse pour n'occuper qu'environ 3ko au lieu de 9ko.
  • sdpart.com : Affiche les infos de la carte avant de lire le MBR
Versions: sdpart.com v0.3, sdcart.sys v0.2, bios v0.20
Fichier(s):
sdcjr03.zip (14.4 KB)
Version v02
30 novembre 2020 (Lundi)
  • Vitesse de lecture accrue de 33 ko/s à 43 ko/s, grace à des suggestions de Trixter et à l'utilisation de la commande 'lecture de blocs multiples' des cartes.
  • Vitesse d'écriture accrue grace au déroulement des boucles et l'utilisation de la commande 'écriture de blocs multiples' de la carte.
  • sdcart.sys : Affiche le type de carte détectée pendant l'opération 'media check'
  • sdpart.com : Affiche la géométrie que le BIOS SD-Cart utiliserait pour la carte.
  • sdpart.com : Lors du listing des partitions, affiche désormais les valeurs de début/fin en CHS, accompagnée par le numéro de secteur logique auquel elles correspondent selon la géométrie qui serait employée par le BIOS SD-Cart.
  • BIOS: La géométrie qui sera utilisée est maintenant déterminée en fonction de la taille de la carte.
Version: sdpart.com v0.2, sdcart.sys v0.10, bios v0.10
Fichier(s):
sdcjr02.zip (11.9 KB)
Version v01
17 novembre 2020 (Mardi)
  • Première publication
Fichier(s):
sdcjr01.zip (9.8 KB)
Ce projet est aussi disponible sur GitHub!
Pour suggérer de nouvelles fonctionnalités, signaler un problème ou contribuer au projet, vous pouvez m'écrire ou utiliser le dépôt GitHub:
https://github.com/raphnet/sdcartJR

goto top


Vous en voulez-un?

Des montages assemblés et testés, utilisant des pièces de haute qualité, sont disponibles dans mon magasin:
https://www.raphnet-tech.com/products/sdcartJR/

Côté composants

Côté composants

Côté soudures

Côté soudures



Encouragez-moi en achetant chez moi!

Mon magasin en ligne (raphnet-tech) est le seul endroit officiel pour vous procurer ce produit. Si vous décidez de vous procurer ce lecteur de cartes, merci de l'acheter chez moi pour m'encourager!

goto top


Compatibilité et performance

Voici une liste des cartes fonctionnelles, et la performance obtenue avec certaines.
LogicielType, modèle et marque de la carteLectureÉcriture
sdcart.sys v0.10MMC, Lexar, 64MB44.4 kB/s35.7 kB/s
sdcart.sys v0.10SD, Panasonic, 8MB44.4 kB/s34.3 kB/s
sdcart.sysSD, Toshiba, 2GB
sdcart.sys v0.2SD, SanDisk, 2GB
sdcart.sys v0.2SDHC, SanDisk, 4GB
sdcart.sys v0.2(Micro) SDHC, SanDisk, 16GB
La colonne indiquant le logiciel n'est que pour préciser les conditions dans lesquelles la mesure de performance a été faite. Ces cartes fonctionnent aussi bien avec le pilote sdcart.sys qu'avec le "boot ROM".

Les tests sont fait avec l'outil iotest.com faisant partie de ce projet. Cet outil chronomètre l'écriture et la lecture de 100 ko de données en comptant le nombre de cycles d'horloge système qui s'écoulent pendant ces opérations.

goto top


Limites

Boot ROM

Limite de 7.84 GiB

La version actuelle du boot ROM n'implémente que les fonctionalités int13h de base, c'est à dire celles où l'adressage des secteurs du disque est faite de manière géométrique, représentée par 3 numéros: Cylindre, tête (Head) et Secteur. CHS pour les intimes.

Ces concepts de tête, secteurs et cylindres ne représente plus la réalité des disques dûrs depuis de nombreuses années, et les cartes mémoires n'en ont que faire. Les cartes utilise de l'adressage LBA, c'est à dire que chaque bloc (l'équivalent d'un secteur) porte simplement un numéro. Le code du BIOS SD-Cart invente et utilise une géométrie qui dépends de la taille de la carte et fait une conversion.

Le compte maximal des différents éléments de l'adressage CHS sont les suivants: 1024 cylindres, 255 têtes et 63 secteurs par piste. Avec des secteurs de 512 octets, cela donne 1024 * 255 * 63 * 512 = 8422686720 (7.84 GiB)

(Note: Techniquement, 256 têtes seraient possible, mais cela n'est pas supporté par DOS et doit être évité)

La table de partitions dans le MBR contient des valeurs CHS et des valeurs LBA, et ces dernières occupant 32 bits permettent d'accéder jusqu'à 2 TB de données. Toutefois, les versions de DOS auxquelles on s'attends sur un PCjr ne regardent pas les valeurs LBA, et ces version de DOS ne supportent pas à ma conaissance les extensions à int13h (fonctions 41h et plus) qui permettent l'adressage en LBA. La limite set donc de 7.84 GiB.

sdcart.sys

Limites de DOS

La situation avec sdcart.sys est moins contraignante. D'abord, ce n'est pas DOS, mais plutôt sdcart.sys qui se charge de parcourir la table de partition, et cela est fait en utilisant l'adressage LBA. DOS accède ensuite au contenu avec un adressage logique, similiare à LBA, mais dont le bloc 0 corresponds au premier secteur de la partition. Comme les service int13h et l'adressage CHS ne sont aucunement impliqués, il serait possible en théorie d'avoir une partition commençant n'importe où dans la carte, même au delà de la limite de 7.84 GiB.

Pour le moment, sdcart.sys ne vérifie pas si la taille de la partition et le système de fichier (FAT12,16,32) qu'elle renferme sont valides pour la version de DOS en opération. Vérifiez le type de partition avec sdpart.com au besoin avant d'accéder au lecteur.

Taille des partitions

Ce projet n'impose pas de contrainte quant à la taille des partitions. En général, la taille maximale dépendra de la version de DOS utilisée. Les version de DOS typiquement utilisée sur PCjr ne supportent pas FAT32, et la limite avec FAT16B (supporté par DOS 5) est d'environ 2 gigaoctets. Sous DOS 3.30, le nombre de secteurs du système FAT16 ne peut pas dépasser 65536 (contrairement à FAT16B) alors la limit n'est alors que de 32 mega octets.


goto top


Préparation d'une carte avec DOS 5 amorçable

Si vous avez un montage SD-Cart JR avec le tout dernier BIOS d'installé, il suffit de démarrer à l'aide d'une disquette puis d'utiliser les outils fdisk et format /S comme si vous veniez d'installer un disque dûr.

Mais que faire si vous n'avez pas de disquette de démarrage? Dans ce cas, vous pouvez utiliser DOSBox et un ordinateur tournant sous Linux pour préparer une image de disque que vous écrirez dans votre carte. (Je suis certain que d'autres systèmes d'exploitation peuvent être utilisés, mais je ne sais que comment m'y prendre sous Linux)

Pour cet exemple, j'utilise DOS 5 car c'est un scénario compliqué, mais l'adaptation des instructions ici à d'autres versions de DOS devrait être facile. Il suffira d'utiliser fdisk et format plutôt que de vous remettre à l'installateur de DOS, et vous n'aurez pas à modifiéer votre boot sector


1. Création d'une image de disque

Insérez d'abord votre carte et démarrez votre PCjr. Notez la géometrie CHS que le BIOS SD-Cart affichera pour votre carte. Pour cet exemple, je me suis servi d'une carte MMC de 64MB et j'ai obtenu CHS=980,4,32

Maintenant dans un répertoire de travail, créez un fichier aussi volumineux que la carte. 980 * 4 * 32 = 125440, alors à l'aide de l'outil en ligne de commande dd sous Linux, il suffit de faire ceci:

dd if=/dev/zero of=card.img bs=512 count=125440

(notez bien le "block size" qui est de 512). Vous devriez obtenir un fichier dont la taille est de 125440 * 512 = 64225280 octets.


2. Préparation des disquettes de DOS et de jrconfig

Ajoutez dans votre répertoire de travail vos images de disquette DOS et jrconfig. Votre répertoire devrait contenir quelque-chose comme ceci:


3. Installez et configurez DOS

Démarrez DOSbox dans votre répertoire de travail, comme ceci. (note: Ne configurez pas le "machine type" de DOSBox à PCjr. Utilisez la machine par défaut).

dosbox -noautoexec -c "mount c ." -c "c:" -c "imgmount 2 card.img -size 512,32,4,980 -fs none" -c "boot Disk01.img Disk02.img Disk03.img Disk04.img Disk05.img"

Vous devez ajustez l'argument -size donné à imgmount. La première valeur est la taille des secteurs (512 octets) suivie par le nombre de secteurs par piste, le nombre de tête et de pistes. (L'ordre est contraire à ce que le BIOS de SD-Cart JR affiche)

Aussi, dans cet exemple, il y a 5 disquettes d'installation. Leurs noms de fichier sont passés dans l'ordre en argument à la commande boot. Lors de l'installation, pour insérer la prochaine disquette, il suffit de faire CTRL+F4.

Une fois l'installation terminée, quittez DOSBox.


4. Copiez des fichiers vers votre "disque dur" DOS 5

Démarrez DOSBox avec la commande qui suit. Ceci vous donnera un environnement ou votre lecteur D: correspond à votre répertoire de travail, et le lecteur C: à votre "disque dûr".

dosbox -noautoexec -c "mount d ." -c "d:" -c "imgmount c card.img -size 512,32,4,980"

Copiez les fichiers nécessaires, tels que JRCONFIG.NRD, et tout autre fichiers ou jeux que vous souhaitez avoir sur votre carte.

Exemple: COPY JRCONFIG.NRD C:

Une fois vos copies terminées, quittez DOSBox.


5. Démarrez DOS 5 et configurez le

Cette fois, démarrez DOSBox comme ceci:

dosbox -noautoexec -c "mount d ." -c "d:" -c "imgmount c card.img -size 512,32,4,980" -c "boot -l c"
Ceci fera démarrez DOS 5 à partir de votre "disque dûr". Editez alors config.sys afin que: Éditez également autoexec.bat au besoin, pour retirer DOSSHELL par exemple.

Ne quittez pas DOSBox. Passez à l'étape suivante.


5. Modification du "boot sector"

Toujours sous DOS 5 tournant dans votre session DOSBox, démarrez DEBUG.COM et suivez les instructions dans la discussion ci-dessous. (Dans ce cas spécifique, le drive number que vous utiliseriez est 2).

http://www.brutman.com/PCjr/docs/Patching_DOS_5_for_the_PCjr.pdf (Mike's PCjr Page)


6. Écriture de l'image de disque vers la carte

Sous Linux, insérez votre carte, découvrez quel block device y est assigné (par ex: sdh) et utilisez dd pour remplacer le contnu de la carte.

Exemple:
dd if=card.img of=/dev/sdX

Il est important de vous assurer d'écrire vers la racine du périphérique (par exemple, sdh) et pas vers une des partitions (comme sdh1, sdh2, etc).

La commande ci-dessus est l'équivalent de la commande rawrite qui permet de recréer une disquette depuis une image, mais la destination est une carte MMC/SD dans un lecteur USB. Je n'ai absolument aucune idée de comment faire cela sous Windows. Si vous savez comment, partagez cela avec moi et je le mentionnerai ici.

goto top


Dépannage du démarrage

Disons que vous prenez une carte au hasard, l'insérez dans votre SD-Cart JR, démarrez sur une disquette, créez une nouvelle partition DOS active à l'aide de fdisk, exécutez format /s et tentez de démarrer mais que le démarrage échoue.

Cela affiche "Booting from SD-Cart JR..." mais après, plus rien.

Il semblerait que fdisk et format /s s'efforcent de faire le moins de changements possibles au boot sector. En particulier, il semble que (je n'ai pas pris la peine de vérifier) le code de démarrage soit laissé tel quel. Qui sait ce que fait ce code sur cette carte pré-formattée (ou que vous avez formatté dans un vieux lecteur mp3) considérant que ce genre de carte n'est pas habituellement utilisé pour démarrer un système d'exploitation?

Selon mon expérience (et tel que confirmé par quelques utilisateurs) créer un nouveau boot sector règle ce genre de problème. Il y a deux manières de procéder:

  1. Si votre version de DOS est assez récente (par exemple, DOS 5) exécutez simplement FDISK /MBR. N'oubliez pas de repatcher le boot sector par après.
  2. À l'aide de sdpart.com, utilisez les commandes 'c' et ensuite 'w'. Cela crée un boot sector tout neuf et l'écrit dans la carte. Vos partitions, s'il y a lieu, seront perdues et vous devrez les créer à l'aide de fdisk par la suite.

Si vous n'arrivez toujours pas à démarrer, contactez moi ou venez en parler dans cette discussion: https://www.brutman.com/forums/viewtopic.php?f=1&t=1041


goto top


Boîtier

J'ai modélisé un boîtier pouvant être fabriqué avec une imprimante 3D.

Il s'agit d'une version modifiée de mon boîtier pour cartouche standard comportant une ouverture pour la carte, une ouverture pour le LED, et quelques petites modifications: Retrait de deux supports à l'avant assez inutiles et en conflit avec un condensateur, amincissement de la partie destinée à recevoir les vis, vis placées légèrement plus bas, afin d'éviter d'être en contact avec le circuit imprimé.




Voici les fichiers .STL pour les deux morceaux:
J'ai fait imprimer le boîtier par un service commercial, en nylon par procédé SLS. Le résultat est excellent et aucune retouches n'ont été nécessaires.


goto top


Références


goto top


Avertissement

Je ne saurais être tenu responsable pour les dommages que l'utilisation des informations ou la mise en œuvre des instructions présentées sur cette page pourrait causer à votre équipement, à vous-même ou à autrui. Aussi, je ne donne aucune garantie quant à l'exactitude des informations et à leur fonctionnement.

goto top


Les marques de commerce utilisées dans ce site appartiennent à leurs propriétaires respectifs.
Copyright © 2002-2021, Raphaël Assenat
Site codé avecSite codé avec vimDernière mise à jour: 5 février 2021 (Vendredi)