MSX Village forum

La Place des Développeurs MSX2 MEMORY MAPPER et ROM DE PLUS 32 Ko ???

6502man Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 19/08/2013 à 18h14

Messages: 815

Le 30/07/2018 à 17h17

Reprise du message précédent

Merci pour les infos ;)

Pour le code c'est pour un mapper Konami et j'ai fait plus simple :

Code :

Main
    DI
    LD A,$D4           ; SLOT Enable
    OUT ($A8),A        ; active la zone $8000-bfff 

    LD A,$01
    LD ($6000),A
    
    LD A,$02
    LD ($8000),A
    
    LD A,$03
    LD ($A000),A

    .....



Pour un mapper Ascii 8K je n'ai pas trouvé d'info concernant l'initialisation dont parle Jipe, mais j'ai une idée que je vais examiner ...


Site web    
6502man Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 19/08/2013 à 18h14

Messages: 815

Le 30/07/2018 à 17h36
Je viens de trouver comment générer un binaire .ROM ayant un mapper ASCII 8K.

Il suffit de mettre les 10 premiers octets de la ROM après l'entête "ABxx" à zéro et ca fonctionne correctement en tout cas sous bluemsx.

Ce qui est marrant c'est que si les premiers octets ne sont pas à zéro ca ne fonctionne pas sous bluemsx ???


Ce qui donnerais comme code exemple :

Code :

.org $4000
    .DB "AB"            ;    HEADER CARTDRIGE  =  AB + $LLMM  
    .DW Main            ;    EXEC ADRESS LSB
.org $4014
Main
    DI
    LD A,$D4           ; SLOT Enable
    OUT ($A8),A        ; active la zone $8000-bfff 
    LD A,$01
    LD ($6800),A
    
    LD A,$04
    LD ($7000),A
    
    LD A,$07
    LD ($7800),A
....




Pour information les valeurs $01,$04 et $07 sont arbitraires et servent uniquement pour vérifier si la commutation ce réalise correctement.
On peut tester avec toutes les valeurs entre 0 et 7 pour 64Ko ;)

Edité par 6502man Le 30/07/2018 à 17h47


Site web    
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10352

Le 30/07/2018 à 22h09
pourtant je t'avais parlé du header des roms et dit que ça commençait ainsi ;)

ok c'était en anglais donc voici une traduction google

Les 16 premiers octets de chaque cartouche ou mémoire ROM d'extension sont utilisés comme en-tête. Dans la plupart des cas (c'est-à-dire dans les cartouches de jeu), seules les deux premières entrées sont utilisées et les entrées restantes sont mises à zéro.

Adresse Nom Expl.
Code d'identification X000 ID (4241h = cartouche ROM, 4443h = SUBROM)
X002 Adresse de début INIT (peut être n'importe où 0000-BFFF)
X004 Statement Déclaration d'extension de routine d'extension. Pour créer de nouvelles
Instruction CALL (par exemple CALL MUSIC utilisée dans FM PAC)
X006 DEV Pour créer de nouveaux appareils (CAS :, MEM :, GRP :, etc ...)
X008 TEXT Pointer vers le programme BASIC en ROM, doit être au format 8000-BFFF.
X00A-F N / A Réservé (0)

Au démarrage, le BIOS analyse tous les SLOT pour les ROM de la cartouche (ID 4241h) aux adresses 4000h et 8000h, et pour les SUBROM (ID 4443h) à l'adresse 0000h.
La plupart des ROM de cartouche occupent la zone de 4000h-BFFFh, mais peuvent également utiliser (ou être en miroir) l'espace d'adressage complet de 0000h à FFFFh


:noel
Site web    
6502man Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 19/08/2013 à 18h14

Messages: 815

Le 30/07/2018 à 22h33
Oui c'est ce que tu m'avais dit et l'explication en Anglais ne détailais pas le cas des mapper Ascii 8K donc pourquoi perdre 10 octets ;)

Je reconnais que j'ai tendance à sortir des sentiers battus en programmant sur les 8 bits, mais avant tout j'adore découvrir de nouvelles choses en programmant sur de nouvelles machines et ca m'amuse :fou


Site web    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1487

Le 31/07/2018 à 10h53
6502man :
Oui c'est ce que tu m'avais dit et l'explication en Anglais ne détailais pas le cas des mapper Ascii 8K donc pourquoi perdre 10 octets

Sauf que ce que cite Jipe n'a rien à voir avec les mapper, c'est l'entête standard de toutes les cartouches dans le standard MSX.
A respecter, donc, sans se poser de questions.


MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
   
Visiteur

Vagabond

Rang

Avatar

Message : 0

Le 01/08/2018 à 11h25
Petite question pratique concernant le code assembleur pour les ROMs, comment gérez-vous les étiquettes pour les variables en RAM ?

Car si je finis le programme par :

Code TEXT :
       org 0C000h
 
VARIABLES:
       MAVAR1: DB   0 ; variable 1, 1 octet
       MAVAR2: DB   0 ; variable 2, 1 octet
       VAR16B1: DW   0  ; variable 3, 2 octets
       VAR16B2: DW   0  ; variable 4, 2 octets

alors j'obtiens une ROM de taille supérieure à l'attendu ; elle englobe les variables (RAM)

Et si j'utilise

Code TEXT :
MAVAR1: equ 0C000H
MAVAR2: equ 0C001H
VAR16B1: equ 0C002H
VAR16B2: equ 0C004H

C'est pas top de devoir mettre des adresses fixes...
   
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1487

Le 01/08/2018 à 12h27
Et tu ne peux pas limiter le nombre d'octets à la compilation ?
Ce qui te permettrai de ne pas inclure les variables ...

Sinon, moi j'utilise AsMSX, qui est un cross-compiler avec quelques macros prévues pour les roms et mégaroms.
Du coup, c'est assez simple :

Code :
.page 1
.rom
.start GO
...
.page 1
...
.page 2
...
.page 3
MAVAR1: DB   0 ; variable 1, 1 octet
MAVAR2: DB   0 ; variable 2, 1 octet
VAR16B1: DW   0  ; variable 3, 2 octets
VAR16B2: DW   0  ; variable 4, 2 octets


Et aucun souci à la compilation.

EDIT : au pire, tu peux aussi faire :

Code :
MAVAR1: equ 0C000H
MAVAR2: equ MAVAR1+1
VAR16B1: equ MAVAR1+2
VAR16B2: equ MAVAR1+4
Edité par Metalion Le 01/08/2018 à 12h30


MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
   
Visiteur

Vagabond

Rang

Avatar

Message : 0

Le 01/08/2018 à 12h35
Oui, effectivement avec AsMSX je n'avais pas ce problème.
J'utilise maintenant OpCode IDE qui intègre Z80 Glass compiler, un compilateur écrit en Java, et maintenant je tombe sur ce problème.
Je vais peut-être revenir avec AsMSX en compilateur externe...

Merci Metalion pour ta réponse :)
   
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie