La Place des Développeurs MSX2 MEMORY MAPPER et ROM DE PLUS 32 Ko ???
Reprise du message précédent
Merci pour les infosPour 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 ...
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 :
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
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
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
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
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
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
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)
Visiteurs
Vagabond
Message : 0
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 :
alors j'obtiens une ROM de taille supérieure à l'attendu ; elle englobe les variables (RAM)
Et si j'utilise
C'est pas top de devoir mettre des adresses fixes...
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...
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 :
Et aucun souci à la compilation.
EDIT : au pire, tu peux aussi faire :
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 :
Edité par
Metalion
Le 01/08/2018 à 12h30
MAVAR1: equ 0C000H
MAVAR2: equ MAVAR1+1
VAR16B1: equ MAVAR1+2
VAR16B2: equ MAVAR1+4
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)
Visiteurs
Vagabond
Message : 0
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
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