MSX Village forum

La Place des Développeurs Comment passer d'une rom au basic

65c02 Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 24/06/2013 à 10h28

Messages: 27

Le 24/06/2013 à 11h06
Bonjour,

J'ai un petit projet d'application rom qui doit finir en allant directement sur le basic
On m'a filer un bout de code sensé me faire basculer sur le basic mais ça plante.
Je me dit que mon problème vient du dernier DEFW de mon header...

En simplifiant à mort mon code, ça donne ça :


ORG $8000

DEFB 'A','B' ; expansion ROM header
DEFW START ; start of the init code, 0 if no initcode
DEFW 0; pointer to CALL statement handler, 0 if no such handler
DEFW 0; pointer to expansion device handler, 0 if no such handler
DEFW 0 ; pointer to the start of a tokenized basicprogram, 0 if no basicprogram
DEFS 6,0 ; room reserved for future extensions

START:

; le bout de code qu'on m'a filé va de là jusqu'au jump

LD A,($FCC1) ; MNROM
LD HL,0
CALL $0024 ; NASLT bios en page 0

LD HL,$4000
CALL $0024 ; basic en page 1

JP $409B

Comme je débute en code MSX, je ne suis sûr de rien et j'ai une vision très flou de tout ce qui se passe.

Je me demande entre autres choses :

- Est ce que les call NASLT servent à remapper les adresses mémoires, comme dans du bankswitching ?
- Faut il mettre une adresse particulière dans le dernier DEFW du header de la rom pour passer au basic ? Edité par 65c02 Le 24/06/2013 à 11h07
   
GDX Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 17/01/2011 à 08h52

Messages: 3004

Le 24/06/2013 à 11h43
Bienvenu,

En premier, je te conseille un peu de lecture :

http://www.msxvillage.fr/forum/topic.php?id=1243

Lorsqu'on allume le MSX, il place forcément le BIOS et le BASIC (0000h ~ 4000h).
Le BIOS démarre à l'adresse 0000h. Les interruptions sont coupées.
Le programme du BIOS lit les 2 premiers octets de chaque Slot à 04000h et 8000h.
Si c'est 41h et 42h, il sélectionne le slot correspondant à l'adresse est indiqué par les 2 octets qui suivent 41h et 42h (START) et y fait un appel.
À ce moment là, le registre C contient le numéro de Slot de la ROM et DE contient l'adresse du programme.
Tu peux mettre un programme machine ici mais il faut auparavant sauvegarder les registres et les restituer avant un RET qui permettra à la routine d'initialisation de continuer afin qu'elle trouve l'adresse du pointeur du programme Basic que tu as indiqués dans l'entête de la ROM. (si tu mets le programme Basic en ROM bien sûr.)
Je ne l'ai jamais fait donc je ne peux pas être plus précis mais une chose est sûr, pas besoin de :

LD A,($FCC1) ; MNROM
LD HL,0
CALL $0024 ; NASLT bios en page 0

LD HL,$4000
CALL $0024 ; basic en page 1

JP $409B
Edité par GDX Le 07/12/2016 à 00h39
   
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10731

Le 24/06/2013 à 11h44
1er temps

procure toi pratique du MSX2 ( il existe en PDF )
l'étiquette est ENASLT ENAble SLot
ton exemple est a la page 27 ;)

2éme temps

ta cartouche contient t'elle un programme uniquement en language machine ?
il existe des cartouches qui démarrent un programme Basic en rom et d'autres qui ajoutent des fonctions CALL

il faut voir suivant ton besoin



:noel
Site web    
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10731

Le 24/06/2013 à 11h56
pratique du MSX2 est dans les telechargements du site ;)


:noel
Site web    
z80 Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 17/05/2013 à 22h52

Messages: 987

Le 24/06/2013 à 12h50
Je n'aurai pas mieux dit Jipe :)
Pratique du MSX2 c'est un incontournable en Français ;)
Sinon en Japonais, mais pour lire du code Z80 et des schéma on s'en moque ;) il y a MSX DATABOOK 1 et 2


TurboR GT (1Mo), CANON V20! ( en kit, modif 2+ en cours) :top
Pas encore retrouvés: V9990, Grafx9000, SUNRISE IDE 2x CF, SUNRISE MOONSOUND, FM PAC, MUSIC MODULE, NMS8280, SD SNATCHER,... :\'(
   
GDX Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 17/01/2011 à 08h52

Messages: 3004

Le 24/06/2013 à 13h11
Jipe :


procure toi pratique du MSX2 ( il existe en PDF )

l'étiquette est ENASLT ENAble SLot

ton exemple est a la page 27 ;)



Le PDF n'indique pas les numéros de page et ENASLT n'est utile que si le programme en ROM touche aux SLOT.

Et puis Pratique du MSX2 ne semble pas décrire l'entête d'une ROM.
   
65c02 Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 24/06/2013 à 10h28

Messages: 27

Le 24/06/2013 à 13h11
Merci pour vos réponses.

Ok, j'ai trouvé la pratique du msx2.
Je comprends mieux la notion de slot.
Je vais lire tout ça

Pour répondre à la question de Jipe :
mon programme est totalement en ASM. Je n'ai donc pas de cas pourri entre la ram et le basic.

GDX:
je ne comprend pas "l'adresse du pointeur du programme Basic "
tu parle du dernier vecteur du header ?
on peut mettre un programme basic en rom ?
   
z80 Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 17/05/2013 à 22h52

Messages: 987

Le 24/06/2013 à 13h17
GDX :
Jipe :


procure toi pratique du MSX2 ( il existe en PDF )

l'étiquette est ENASLT ENAble SLot

ton exemple est a la page 27 ;)



Le PDF n'indique pas les numéros de page et ENASLT n'est utile que si le programme en ROM touche aux SLOT.

Et puis Pratique du MSX2 ne semble pas décrire l'entête d'une ROM.




Même si pas simple à trouver je pense, le MSX DATABOOK c'est la bible du MSX. Vaudrait que je regarde pour le chercher quand je serai seul à la maison...

Le 6 juillet quoi ;)


TurboR GT (1Mo), CANON V20! ( en kit, modif 2+ en cours) :top
Pas encore retrouvés: V9990, Grafx9000, SUNRISE IDE 2x CF, SUNRISE MOONSOUND, FM PAC, MUSIC MODULE, NMS8280, SD SNATCHER,... :\'(
   
GDX Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 17/01/2011 à 08h52

Messages: 3004

Le 24/06/2013 à 13h22
En attendant, 65c02 peut déjà faire ce que je dis plus haut.

Citation :
je ne comprend pas "l'adresse du pointeur du programme Basic "

tu parle du dernier vecteur du header ?

on peut mettre un programme basic en rom ?


Le pointeur du Basic, dans ce cas, c'est l'adresse du premier octet du programme Basic.

Par défaut, c'est 8001H sur les MSX de 32 à 64Ko (à vérifier). Si tu veux mettre un programme en ROM, il faudra indiquer le pointeur dans l'entête de la ROM sinon ce n'est pas la peine. Edité par GDX Le 24/06/2013 à 13h33
   
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10731

Le 24/06/2013 à 14h03
moi je vais poser une question indiscréte : pourquoi veux tu revenir au basic aprés avoir lancé la ROM

aucun programme ne fait ça :heink


:noel
Site web    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1503

Le 24/06/2013 à 14h07
Oui, Jipe a raison, ça n'a pas grand intérêt. Soit tu localises ton programme en ROM et elle ne rend pas la main, soit tu localises ton programme en RAM et il reviendra au BASIC après la fin de l'appel par USR(x).


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

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 24/08/2010 à 20h55

Messages: 4833

Le 24/06/2013 à 17h24
Jipe :
moi je vais poser une question indiscréte : pourquoi veux tu revenir au basic aprés avoir lancé la ROM



aucun programme ne fait ça :heink




Si, certains firmware comme celui du Panasonic A1 chargent le basic qu'en on sort même si on a un support de stockage avec le DOS.

Le DOS n'est pourtant pas annulé, le disk basic est bien dispo et après un poke on peut quand même booter sous DOS.



Je ne vois pas ou est le problème si 65c02 veut rendre la main au basic à la fin de son programme :gne
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10731

Le 24/06/2013 à 18h19
pour tous les MSX munis d'un lecteur si le DOS n'est pas chargé on retourne au basic ( c'est transparent )

si une disquette DOS est présente c'est le DOS qui prend la main

la commande BASIC renvoi au basic

sur un CALL SYSTEM on retourne au DOS

POKE &HF346,1 permet le CALL SYSTEM sans charger le DOS

a part pour mettre un autre langage quel intérêt ?


:noel
Site web    
Fabf Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 24/08/2010 à 20h55

Messages: 4833

Le 24/06/2013 à 18h26
Je ne crois pas que ce soit une question d'intérêt mais juste une question de fonctionnement.

Ce n'est pas possible de démarrer le MSX avec un prog en ROM puis de terminer ce prog et lancant le basic :|
Sector28 Membre non connecté

Villageois

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 12/05/2018 à 23h00

Messages: 561

Le 24/06/2013 à 22h34
quelque chose ainsi:

ORG $8000

DEFB 'A','B' ; expansion ROM header
DEFW START ; start of the init code, 0 if no initcode
DEFW 0; pointer to CALL statement handler, 0 if no such handler
DEFW 0; pointer to expansion device handler, 0 if no such handler
DEFW $8010 ; pointer to the start of a tokenized basicprogram, 0 if no basicprogram
DEFS 6,0 ; room reserved for future extensions

ORG $BF00 ; (par exemple)
START:
...
...
RET

il faut reloger le basic avec
poke &HF676,&H11 : poke &h8010,0 : new


DONALD TRUMP IS FAST APPROACHING
NEMESIS ! RETURN IMMEDIATELY !
   
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie