| Accueil | Articles | Qui-suis-je | Archives | Palette |Collection |card flash|Revendeurs|Homebrew|Programmation|Annuaire | ||
|
Programmation de du en ASM
La page dédié à la programmation du MSX
Logiciel Compilateur/Assembleur VASM
Il existe plusieurs logiciel pour faire de l'asm en Z80 en cross dev. Je vous propose VASM mais je n'exclue pas de tester d'autre logiciel. Lien Télécharger la version adéquate de votre machine. Je suis sur windows donc ce tuto sera pour windows. A vous d'adapter ça. La préparation est simple. Vous avez téléchargé un dossier qui ce nomme vbcc. Dedans il y a trois dossier, un readme et trois pdf. Le fichier vasm.pdf est le mode d'emploie du compilateur/assembleur asm. Vasm permet d'assembler du code assembleur pour plusieurs type de processeur ce qui est cool. Le dossier config et targets osef. Le dossier bin est important dedans il y a les logiciel d'assemblage. Pour le max on à le droit à deuxlogiciel. vasmz80_oldstyle.exe vasmz80_std.exe Ce qui change c'est la façon écrire son code et de retrouver ou garder une portabilité avec du vieux code. Personnellement je vais rester sur oldstyle. Les MSX
Il existe 4 machines officiel MSX. (Enfin des standards).Le MSX 1 Le MSX 2 Le MSX 2+ Et le Turbo R Les 4 pages du MSX (ou Slot)
Le MSX 1 possède 4 pages de 16Ko ce qui fait 64ko de ram. Cela tombe bien le processeur Z80 peut voir que 64ko !!! A cause de son registre PC qui est sur 16 bits !Page 0 : Adresse $0 - $3FFF : C'est l'emplacement du Bios du MSX qui peut être désactivé pour récupéré de la ram si le MSX à de la ram en dessous !!! Page 1:$4000 - $7FFF : C'est la Rom Basic. Idem que la page 0. Elle peut être désactivé pour récupéré la Ram en dessous. Si cette ram existe !!! Ou de la Rom pour les cartouches : Page 2:$8000 - $BFFF : C'est la Ram (pour les machine 32ko ou plus je pense), Possibilité de slot pour de la Rom (32ko !) Page 3:$C000 - $FFFF : C'est la Ram pour les system 16ko ou plus. Attention en fin de ram il y a de la ram system ! Note pour les msx 8ko la ram débute en $E000 Header de cartouche
Pour faire une cartouche (16ko ou 32ko), il y a besoin d'un header. CE qui permet au MSX de detecter la cartouche.; *********************** ; * Header MSX * ; *********************** org $4000 ; adresse de début du programme sur msx ; ================== ; * Header Rom MSX * ; ================== db "AB" ; Signature obligatoire pour l'auto-demarrage dw INIT_MSX ; Adresse d'exécution du programme dw 0 ; CALL d'activation (0 = aucun) dw 0 ; Table des périphériques (0 = aucune) dw 0 ; Chaîne d'initialisation BASIC (0 = aucune) dw 0,0,0 ; Réservé / Remplissage Securiser la page 2 pour les cartouches 32ko
Pour les cartouches 32ko il faut je securiser la page 2. L'initier quoi. Bon la j'ai pas annalysé ce code, c'est l'ia Gemini qui me la pondu et ça fonctionne. Je cherche pas plus loin. Je vous donne ça aussi.
; -----------------------------------------
; CODE DE SÉCURISATION DE LA PAGE 2 ($8000)
; ----------------------------------------
call $138 ; Routine BIOS "RSLREG" : lit l'état des slots
rrca
rrca ; On décale pour obtenir le slot de la Page 1
and %00000011 ; On isole les 2 bits du slot principal
ld h, a ; On stocke le slot principal dans H
; Est-ce un slot étendu (sous-slot) ?
ld a, ($FCC1) ; Table du BIOS des slots étendus
ld l, a
ld a, h
ld b, 0
ld c, a
add hl, bc
ld a, (hl) ; On lit si ce slot est étendu
and $80
jr z, .not_expanded ; Si non étendu, on saute directement à l'activation
; Si le slot est étendu, on doit récupérer le sous-slot actuel
ld a, ($FFFF) ; Registre des sous-slots (lu inversé sur MSX)
cpl
rrca
rrca ; On décale pour s'aligner sur la Page 1
and %00000011 ; On isole les bits du sous-slot
; Remplacement des SHL : on décale de 2 bits vers la gauche avec ADD A,A
add a, a ; Décalage 1
add a, a ; Décalage 2
or h ; On fusionne avec le slot principal
or $80 ; On ajoute le flag "slot étendu"
ld h, a ; H contient maintenant l'ID complet (Slot + Sous-slot)
.not_expanded:
; Ici, H contient le slot exact de ta cartouche
ld a, h
ld h, $80 ; On dit à ENASLT qu'on veut cibler la Page 2 ($8000)
call $0024 ; Routine BIOS "ENASLT" -> La Page 2 est enfin active !
Forcer le mode Z80 sur un turbo R
C'est sympathique de penser aussi à cette machine ! Comme ça votre programme fonction sur beaucoup de MSX ! et le morceau de code est pas long.
; ---------------------------------- ; * Passage en Z80 pour le turbo R * ; ---------------------------------- ld A,($2d) ; Registre type MSX (3 pour turbo R) cp 3 jr NZ,END_TEST_TR xor A ; Valeur pour passer en mode z80 call $180 END_TEST_TR: Organisation de votre code header
A vous de voir comment organiser votre header. Ce n'est qu'un exemple :
; Code de detection de la cartouche qui pointe sur INIT_MSX Le Footer !!!
Il n'y as pas de pied de page a proprement parlé sur Z80. Mais il faut remplire les espace vide pour faire une cartouche 16 ou 32ko !
un petit
ORG $BFFFbyte 0 A la fin de votre code permet d'avoir un fichier binaire de 32ko et ORG $7FFF Pour une cartouche de 16ko |
||
| Site réalisé par Jean Monos | ||