MSX Village forum

La Place des Développeurs Les ROM Mapper les mieux supportés

ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5481

Le 10/01/2022 à 08h22

Reprise du message précédent

Comment ça marche la création de mégalomanie avec un Assembleur ASM ?
Comment les datas sont intégrés? D’un seul bloc ou par segments de 8/16k ?


banniere-ericb59e
Site web    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2695

Le 10/01/2022 à 09h16
ericb59 :
Comment ça marche la création de mégalomanie avec un Assembleur ASM ?
Comment les datas sont intégrés? D’un seul bloc ou par segments de 8/16k ?


"Mégalomanie" :lol

Je suis pas sûr de comprendre la question.
Si tu parles d'ajouter à un programme C pour une ROM mappé, des segments qui eux sont en assembleur, y a aucun problème.
Actuellement, mon outil ne cherche que des .c pour les segments, mais en ajoutant un format assembleur (.s et/ou .asm) il compilerait et concatènerait les segments comme pour du code/data en C.
La grosse différence, c'est que là ou en C, on donne l'adresse de base de la compilation dans les options du compilateur, en assembleur, cette adresse est souvent directement en dans le code (avec le .org).
Dans ma nomenclature, le _bX qui sert à détecter dans quel bank sera visible le segment, ne sera pas utile pour les segments en assembleur.


On est toujours ignorant avant de savoir.
Github    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1484

Le 10/01/2022 à 12h45
ericb59 :
Comment ça marche la création de mégalomanie megarom avec un Assembleur ASM ?
Comment les datas sont intégrés? D’un seul bloc ou par segments de 8/16k ?


Assez simplement.
Dans la source, toutes les pages sont définies une par une, par segments correspondant à la taille des pages du mapper.

Ci-dessous un exemple pour une megaron 128Kb, utilisant le mapper ASCII8, avec l'assembleur Sjasm.
defpage et page sont seulement là pour définir une plage d'adresse pour le code qui suit, et sont donc équivalents à un org.

Code :
;-------------------------------------------------------------------------------
; page 1 : Code principal (2590 bytes free)
;-------------------------------------------------------------------------------
    defpage 1,6000h
    page    1
    include    "..\..\SFX\sfx.asm"
    include    "tables_compute.asm"
;-------------------------------------------------------------------------------
; page 2 : 0 bytes free
;-------------------------------------------------------------------------------
    defpage 2,0A000h
    page    2
    incbin "tables_384.bin",,8192
;-------------------------------------------------------------------------------
; page 3 : 2260 bytes free
;-------------------------------------------------------------------------------
    defpage 3,0C000h
    page    3
    incbin    "tables_384.bin",8192
;-------------------------------------------------------------------------------
; page 4
;-------------------------------------------------------------------------------
    defpage 4,08000h
    page    4
    include "zmap.asm"
;-------------------------------------------------------------------------------
; page 5 : 0 bytes free (v9938) | 5120 bytes free (v9990)
;-------------------------------------------------------------------------------
    defpage 5,08000h
    page    5
if VDP=9938
    incbin    "up_bar.sc5",7,2048
    incbin    "low_bar.sc5",7,2048
    incbin    "horizon_level1.sc5",7,4096
else
    incbin    "v9990.patterns.sc5",7,3*1024
endif
;-------------------------------------------------------------------------------
; page 6 : 7664 bytes free (v9938) | 0 bytes free (v9990)
;-------------------------------------------------------------------------------
    defpage 6,08000h
    page    6
if VDP=9938
    include    "spriteset.asm"
else
    incbin    "spritesheet.sc5",7,2048
endif
;-------------------------------------------------------------------------------
; page 7 : 5176 bytes free
;-------------------------------------------------------------------------------
    defpage 7,0C000h
    page    7
    incbin    "tables_hl5_hl11.bin"
;-------------------------------------------------------------------------------
; page 8 : 6144 bytes free
;-------------------------------------------------------------------------------
if VDP=9938
    defpage 8,08000h
    page    8
    incbin    "digits.sc5",7,2048
;-------------------------------------------------------------------------------
; page 9 : 0 bytes free
;-------------------------------------------------------------------------------
    defpage 9,08000h
    page    9
    incbin    "title_screen.sc5",7,8192
;-------------------------------------------------------------------------------
; page 10 : 5088 bytes free
;-------------------------------------------------------------------------------
    defpage 10,08000h
    page    10
    incbin    "title_screen.sc5",7+8192,128*88-8192
    incbin    "title_screen.sc5",7687h,32    ; 7687h: adresse de la palette
;-------------------------------------------------------------------------------
; page 11 : 473 bytes free
;-------------------------------------------------------------------------------
    defpage 11,08000h
    page    11
splash
    include    "..\Musique\splash_wave_part1.asm"
;-------------------------------------------------------------------------------
; page 12 : 79 bytes free
;-------------------------------------------------------------------------------
    defpage 12,0A000h
    page    12
    include    "..\Musique\splash_wave_part2.asm"
;-------------------------------------------------------------------------------
; pages vides
;-------------------------------------------------------------------------------
    defpage    13..15,08000h
    page    13..15
else
    defpage    8..15,08000h
    page    8..15
endif
Edité par Metalion Le 10/01/2022 à 12h49


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)
   
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5481

Le 10/01/2022 à 13h22
Metalion :
ericb59 :
Comment ça marche la création de mégalomanie megarom avec un Assembleur ASM ?
Comment les datas sont intégrés? D’un seul bloc ou par segments de 8/16k ?


Assez simplement.
Dans la source, toutes les pages sont définies une par une, par segments correspondant à la taille des pages du mapper.


Ok je vois. Donc pour chaque segment du mapper tu as un fichier binaire qui est préparé d'avance, et qui sera ajouté par le linker lors de la compilation...


banniere-ericb59e
Site web    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1484

Le 10/01/2022 à 13h47
ericb59 :
Ok je vois. Donc pour chaque segment du mapper tu as un fichier binaire qui est préparé d'avance, et qui sera ajouté par le linker lors de la compilation...

Oui, à la remarque près que la segmentation en fichiers séparés n'est pas obligatoire pour le code (fichiers .asm) car on pourrait très bien mettre le code directement sous les instructions defpage/page. Mais c'est plus confortable de travailler comme ça.


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)
   
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie