La Place des Développeurs Comment passer d'une rom au basic
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
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
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
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
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
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
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
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)
Pas encore retrouvés: V9990, Grafx9000, SUNRISE IDE 2x CF, SUNRISE MOONSOUND, FM PAC, MUSIC MODULE, NMS8280, SD SNATCHER,...
Jipe :
procure toi pratique du MSX2 ( il existe en PDF )
l'étiquette est ENASLT ENAble SLot
ton exemple est a la page 27
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.
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 ?
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 ?
GDX :
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.
Jipe :
procure toi pratique du MSX2 ( il existe en PDF )
l'étiquette est ENASLT ENAble SLot
ton exemple est a la page 27
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)
Pas encore retrouvés: V9990, Grafx9000, SUNRISE IDE 2x CF, SUNRISE MOONSOUND, FM PAC, MUSIC MODULE, NMS8280, SD SNATCHER,...
En attendant, 65c02 peut déjà faire ce que je dis plus haut.
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
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 ?
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
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
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
aucun programme ne fait ça
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
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 ?
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 ?
Fabf
Membre non connecté
Conseiller Municipal
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
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
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
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