Dans un premier temps, il faut réaliser un prototype pour prouver que ça marche.
Le schéma :

- vg5000sd.png (1.54 Kio) Consulté 4317 fois
[Edit]
Attention, les signaux de lecture/écriture cassette ne sont pas RK7 et WK7, comme écrit par erreur ci-dessus, mais CMTIN et CMTOUT.
Le driver MO5 en assembleur 6809 à transposer pour le VG5000 en assembleur Z80 :
Code : Tout sélectionner
/**************************************************\
* M O 5 S D - B O O T *
* (c) 2012 - Daniel Coulom *
* http://dcmoto.free.fr/ *
* http://forum.system-cfg.com/ *
*--------------------------------------------------*
* Ce code est distribue gratuitement dans l'espoir *
* qu'il sera utile, mais sans aucune garantie et *
* sans engager la responsabilité de l'auteur. *
* Vous pouvez l' utiliser, le modifier et le *
* diffuser librement, en conservant cette licence *
* et les références de l'auteur dans toutes les *
* copies. L'exploitation commerciale est interdite.*
\**************************************************/
* Ce programme fait partie du projet MO5SD
* Il réalise les fonctions suivantes
* - initialisation de la carte SD ou SDHC
* - retour du type de carte (SD ou SDHC)
* - chargement du premier secteur en mémoire ecran
* - lancement de l'exécution en $0000
/**************************************************\
* Version 2012.05.24 *
\**************************************************/
* Historique
* 2012.05.24 ameliorations mineures
* 2012.05.23 integration de MO5BOOT1 et de MO5BOOT2
* 2012.04.23 appel de fonctions de mo5sd-boot1
* 2012.04.13 position de secteur de boot paramétrable
* 2012.04.10 améliorations mineures et ajout licence
* 2012.04.09 paramètres passés par des vecteurs en RAM
* 2012.04.08 première version compatible SD et SDHC
* 2012.03.28 première version opérationnelle (SD seule)
*------------------------------------------------------
* INITIALISATIONS
*------------------------------------------------------
ORG $5E00 chargement en $5E00
5E00 343E PSHS Y,X,DP,B,A empile les registres utilises
5E02 1AD0 ORCC #$D0 desactive les interruptions
5E04 86A7 LDA #$A7 valeur d'initialisation de DP
5E06 1F8B TFR A,DP initialisation de DP
5E08 D6C0 LDB <$C0 port A du PIA systeme
5E0A CA41 ORB #$41 set bits 0 et 6
5E0C D7C0 STB <$C0 video formes + DIN high
*------------------------------------------------------
* POWER ON
*------------------------------------------------------
POWER
5E0E 8E000A LDX #$000A compteur de boucle
POWER1
5E11 1700A9 LBSR RBYTE envoi de 8 tops d'horloge
5E14 301F LEAX -1,X decrementation compteur
5E16 26F9 BNE POWER1 boucle 10 fois
*------------------------------------------------------
* CMD0 = SOFTWARE RESET
*------------------------------------------------------
5E18 308D00E4 LEAX CMD0,PCR commande CMD0
5E1C 170083 LBSR EXCMD execution commande
5E1F 251F BCS ERROR retour erreur 6
*------------------------------------------------------
* CMD8 = SEND INTERFACE CONDITION
* reconnue uniquement par SDHC
*------------------------------------------------------
5E21 308D00E2 LEAX CMD8,PCR commande CMD8
5E25 8D7B BSR EXCMD execution commande
*------------------------------------------------------
* CMD55 + ACMD41 = INITIALISATION
*------------------------------------------------------
INIT
5E27 C620 LDB #$20 32 essais avant abandon
INIT1
5E29 3404 PSHS B
5E2B 308D00DF LEAX CMD55,PCR CMD55
5E2F 8D71 BSR EXCMD execution commande
5E31 308D00E0 LEAX AC41,PCR ACMD41
5E35 8D6B BSR EXCMD execution commande
5E37 3504 PULS B
5E39 A184 CMPA ,X controle code retour
5E3B 2708 BEQ TESTC pas d'erreur
5E3D 5A DECB decrementation compteur
5E3E 26E9 BNE INIT1 nouvel essai
*------------------------------------------------------
* RETOUR EN ERREUR
*------------------------------------------------------
ERROR
5E40 BF5EFA STX ERRID adresse commande en erreur
5E43 35BE PULS A,B,DP,X,Y,PC retour au Basic
*------------------------------------------------------
* TEST DU TYPE DE CARTE
*------------------------------------------------------
TESTC
5E45 308D00D3 LEAX CMD58,PCR commande CMD58
5E49 8D57 BSR EXCMD execution commande
5E4B 25F3 BCS ERROR retour erreur 34
5E4D 8D6E BSR RBYTE lecture OCR poids fort
5E4F 48 ASLA isole le type de carte
5E50 308D009E LEAX SDTYP,PCR adresse zone de travail ram
5E54 A780 STA ,X+ stockage type carte en $1FD6
5E56 8D65 BSR RBYTE lecture OCR 2eme octet
5E58 8D63 BSR RBYTE lecture OCR 3eme octet
5E5A 8D61 BSR RBYTE lecture OCR 4eme octet
*------------------------------------------------------
* LECTURE DE SECTEURS
*------------------------------------------------------
RSECT
5E5C 108E FDB $108E LDY
5E5E 0000 ADDR0 FDB $0000 adresse du buffer
RSECT1
5E60 308D008F LEAX CMD17,PCR adresse commande CMD17
5E64 8D3C BSR EXCMD execution commande
RSECT2
5E66 8D55 BSR RBYTE lecture octet
5E68 81FE CMPA #$FE comparaison avec $FE
5E6A 26FA BNE RSECT2 attente debut secteur
5E6C 8E0200 LDX #$0200 initialisation compteur
RSECT3
5E6F 8D4C BSR RBYTE lecture d'un octet
5E71 A7A0 STA ,Y+ stockage
5E73 301F LEAX -1,X decrementation compteur
5E75 26F8 BNE RSECT3 nouvelle lecture
5E77 8D44 BSR RBYTE lecture CRC1
5E79 8D42 BSR RBYTE lecture CRC2
5E7B 6D8D0073 TST SDTYP,PCR test du type de carte
5E7F 2B0D BMI RSECT4 carte SDHC
5E81 EC8D0070 LDD SECT2,PCR ancienne adresse
5E85 C30002 ADDD #$0002 secteur suivant
5E88 ED8D0069 STD SECT2,PCR nouvelle adresse
5E8C 200B BRA RSECT5 test de fin de lecture
RSECT4
5E8E EC8D0064 LDD SECT3,PCR ancienne adresse
5E92 C30001 ADDD #$0001 secteur suivant
5E95 ED8D005D STD SECT3,PCR nouvelle adresse
RSECT5
5E99 108C FDB $108C CMPY test adresse fin
5E9B 0000 ADDR1 FDB $0000 adresse de fin de chargement
5E9D 23C1 BLS RSECT1 lecture secteur suivant
*------------------------------------------------------
* LANCEMENT DE L'EXECUTION DU PROGRAMME CHARGE
*------------------------------------------------------
5E9F 7E FCB $7E JMP
5EA0 0000 ADDR2 FDB $0000 $0000 (adresse execution)
*------------------------------------------------------
* EXECUTION D'UNE COMMANDE
*------------------------------------------------------
EXCMD
5EA2 8D19 BSR RBYTE envoi de 8 tops d'horloge
5EA4 C606 LDB #$06 boucle sur 6 octets
5EA6 3404 PSHS B
EXCM1
5EA8 A680 LDA ,X+ chargement octet de commande
5EAA 8D22 BSR WBYTE ecriture de l'octet
5EAC 6AE4 DEC ,S
5EAE 26F8 BNE EXCM1
EXCM2
5EB0 8D0B BSR RBYTE lecture code de retour
5EB2 A184 CMPA ,X test code de retour
5EB4 2705 BEQ EXCM3 code bon
5EB6 6AE4 DEC ,S
5EB8 26F6 BNE EXCM2
5EBA 53 COMB carry set en erreur
EXCM3
5EBB 3584 PULS B,PC
*------------------------------------------------------
* LECTURE D'UN OCTET (REG A)
*------------------------------------------------------
RBYTE
5EBD 86FE LDA #$FE
RBYTE1
5EBF D6C0 LDB <$C0 read bit
5EC1 58 ASLB bit stocke dans C
5EC2 C63E LDB #$3E
5EC4 D7C2 STB <$C2 clock high
5EC6 C636 LDB #$36
5EC8 D7C2 STB <$C2 clock low
5ECA 49 ROLA store bit
5ECB 25F2 BCS RBYTE1
5ECD 39 RTS
*------------------------------------------------------
* ECRITURE D'UN OCTET (REG A)
*------------------------------------------------------
WBYTE
5ECE C608 LDB #$08 boucle sur 8 bits
5ED0 3404 PSHS B
WBYTE1
5ED2 D6C0 LDB <$C0
5ED4 48 ASLA store bit to C
5ED5 2403 BCC WBYTE2
5ED7 CA41 ORB #$41 b6=1, b0=1 (video forme)
5ED9 8C FCB $8C 8CC4BF CMPX #$C4BF
WBYTE2
5EDA C4BF ANDB #$BF b6=0, b0 inchangé
5EDC D7C0 STB <$C0 DIN
5EDE C63E LDB #$3E
5EE0 D7C2 STB <$C2 clock high
5EE2 C636 LDB #$36
5EE4 D7C2 STB <$C2 clock low
5EE6 6AE4 DEC ,S
5EE8 26E8 BNE WBYTE1
5EEA D6C0 LDB <$C0
5EEC CA41 ORB #$41
5EEE D7C0 STB <$C0 keep the DIN high
5EF0 3584 PULS B,PC
*------------------------------------------------------
* TYPE DE CARTE ET COMMANDE CMD17
*------------------------------------------------------
5EF2 80 SDTYP FCB $80 type carte $00=SD, $80=SDHC
5EF3 51 CMD17 FCB $51 read block
5EF4 00 SECT1 FCB $00 adresse octet 1
5EF5 00 SECT2 FCB $00 edresse octet 2
5EF6 00 SECT3 FCB $00 adresse octet 3
5EF7 00 SECT4 FCB $00 adresse octet 4
5EF8 FF00 CHECK FDB $FF00 checksum et code retour
5EFA 0000 ERRID FDB $0000 adresse de l'erreur
*------------------------------------------------------
* COMMANDES POUR L'INITIALISATION
*------------------------------------------------------
ORG $5F00
5F00 40 CMD0 FCB $40 go iddle state
5F01 0000 FDB $0000
5F03 0000 FDB $0000
5F05 9501 FDB $9501
5F07 48 CMD8 FCB $48 send interface condition
5F08 0000 FDB $0000
5F0A 01AA FDB $01AA
5F0C 8700 FDB $8700
5F0E 77 CMD55 FCB $77 application command
5F0F 0000 FDB $0000
5F11 0000 FDB $0000
5F13 6500 FDB $6500
5F15 69 AC41 FCB $69 activate card initialization
5F16 4000 FDB $4000
5F18 0000 FDB $0000
5F1A 7700 FDB $7700
5F1C 7A CMD58 FCB $7A read OCR
5F1D 0000 FDB $0000
5F1F 0000 FDB $0000
5F21 FD00 FCB $FD,$00
ORG $5FFF fin du programme de boot
5FFF 00 FCB $00
END
SYMBOL TABLE
AC41 02 5F15 ADDR0 02 5E5E ADDR1 02 5E9B ADDR2 02 5EA0
CHECK 02 5EF8 CMD0 02 5F00 CMD17 02 5EF3 CMD55 02 5F0E
CMD58 02 5F1C CMD8 02 5F07 ERRID 02 5EFA ERROR 02 5E40
EXCM1 02 5EA8 EXCM2 02 5EB0 EXCM3 02 5EBB EXCMD 02 5EA2
INIT 02 5E27 INIT1 02 5E29 POWER 02 5E0E POWER1 02 5E11
RBYTE 02 5EBD RBYTE1 02 5EBF RSECT 02 5E5C RSECT1 02 5E60
RSECT2 02 5E66 RSECT3 02 5E6F RSECT4 02 5E8E RSECT5 02 5E99
SDTYP 02 5EF2 SECT1 02 5EF4 SECT2 02 5EF5 SECT3 02 5EF6
SECT4 02 5EF7 TESTC 02 5E45 WBYTE 02 5ECE WBYTE1 02 5ED2
WBYTE2 02 5EDA
37 SYMBOLS
0 error(s), 0 warning(s)