La Place des Développeurs Les ROM Mapper les mieux supportés
ericb59
Membre non connecté
Conseiller Municipal
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 ?
aoineko
Membre non connecté
Conseiller Municipal
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 ?
Comment les datas sont intégrés? D’un seul bloc ou par segments de 8/16k ?
"Mégalomanie"
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.
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 ?
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 :
Edité par
Metalion
Le 10/01/2022 à 12h49
;-------------------------------------------------------------------------------
; 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
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
Metalion :
Assez simplement.
Dans la source, toutes les pages sont définies une par une, par segments correspondant à la taille des pages du mapper.
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 ?
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...
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