MSX Village forum

La Place des Développeurs ROM 48K et slots

aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2699

Le 20/12/2021 à 01h09

Reprise du message précédent

Ricco59 :
Pour en revenir au CALSLT, c'est uniquement réservé aux appels BIOS ou je peux faire ma propre routine de transfert comme par ex


Ricco, je te conseille TRES fortement d'utiliser des defines pour tous les nombres magiques que tu utilises.
Ca rend le code tellement plus lisible ! :glass
Tu peux utiliser les defines du C dans ton code assembleur en ligne.

Pour ne revenir à 0x001C... heu, à CALSLT, ça permet d'appeler n'importe quel bout code dans n'importe quel slot.
Donc pas forcement le Bios.

D'ailleurs, c'était LA technique proposée sur MRC :
- Tu te créé une fonction de copie de tes données de la ROM vers la RAM en assembleur,
- Tu la place quelque part en page 0 (à ma connaissance c'est pas possible en C, mais tu peux mettre cette fonction dans ton ctr0 en le plaçant ou tu veux avec un .org ),
- Au moment de lire les 72 octets de ton tableau, tu mets les paramètres de ta fonction dans les registres qui vont bien (adresse source, destination et quantité à copier, ou juste l'index de ton tableau),
- ensuite tu mets le slot de ta cartouche dans IY (les 8-bits de poids forts), l'adresse de ta fonction dans IX, puis tu call CALSLT,
- Le BIOS va switcher la page 0 (ou se trouve ton code) vers le slot de ta cartouche et exécuter ta fonction,
- Après le .org de ta fonction, le BIOS va rétablir les slots comme il était avant l'appel à CALSLT et redonner la main à ton programme (en page 1 ou 2).

Et voilà, tu peux copier toutes tes données d'un coup.

Code ASM :
 
;== Dans ton crt0 ==
    .org 0x0000 ; faudrait mettre tes données plus loin pour pas écraser ce code
CopyFromRomPage0::
    ldir
    ret
 
;== Dans ton code C (en linge par ex.) ==
#define CALSLT 0x001C
 
ZeTransfert:
    ld HL, Source
    ld DE, Destination
    ld BC, Taille
    ld IY, CartoucheSlotID << 8 ; Sous la forme [X000SSPP] ou X=expend, S=slot secondaire, P=slot primaire
    ld IX, CopyFromRomPage0 ; l'adresse doit être entre 0x0000 et 0x3FFF pour que le BIOS switch la page 0
    call CALSLT 
 


Après, je l'ai jamais utilisé donc je suis pas sûr à 100% que les registres soient bien préservés, mais de ce que je comprends de la doc, c'est censé être le but.


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

Villageois

Rang

Avatar

Inscrit le : 02/01/2021 à 11h22

Messages: 248

Le 20/12/2021 à 09h41
Merci les zamis ;)

le bout de code était un simple exemple et donc ecrit 'au kilomètre' : c'est entre le pseudo-code et le code hihihihi.
Dans mon code, j'utilise les define :)

J'ai donc une belle piste de travail. Merci et belle journée à tous Edité par Ricco59 Le 20/12/2021 à 09h50


Tous mes travaux sont centralisés sur mon piti blog : https://ricco59.blogspot.com/
E-mail    
Ricco59 Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 02/01/2021 à 11h22

Messages: 248

Le 22/12/2021 à 00h52
Bon

J'ai eu quelques bugs avec CALSLT et j'ai préféré continuer à utiliser 0x000C euh.... RDSLT ;)

En Page0, j'ai donc mis tous les niveaux et les gfx n'étant affiché qu'une seule fois

Avant affichage du menu
transfert PATTERN de page0 vers buffer
depletterisation vers VRAM
transfert COLORS de page0 vers buffer
depletterisation vers VRAM
transfert NAME de page0 vers buffer
depletterisation vers VRAM
transfert SPATTERN de page0 vers buffer
depletterisation vers VRAM

et avant l'affichage du jeu, même topo

Ca marche mais, il y a toujours un mais, il faut que ça marche sur vraie machine....
Si, cela devait fonctionner (!), il me reste un peu plus de 10ko (10770 octets) pour une ou 2 ziks + player et donc trouver un musicien ;).
Dans le cas contraire...

Portez vous bien et à bientôt pour la suite ;)
Bonne semaine


Tous mes travaux sont centralisés sur mon piti blog : https://ricco59.blogspot.com/
E-mail    
KN2000 Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 08/06/2010 à 09h30

Messages: 209

Le 22/12/2021 à 13h13
Si tu changes la page 0, tu ne peux plus utiliser ENASLT. Puisqu'à cette adresse, le Z80 va trouver tes niveaux ou tes graphiques mais plus la ROM. Le retour va devoir se faire avec un OUT 0xA8h,"valeur de la configuration avant le CALL ENASLT".

- edit - j'ai retrouvé une partie de mes notes mais j'ai cru que c'était sur CALSLT...
En fait, comme le MSX se plantait lorsque j'utilisait CALSLT pour la page 3, je me suis converti à l'utilisation de ENASLT... valable dans tous les cas de figure, en faisant une exception lorsque la page 0 est commutée.

Tu n'oublies pas de rétablir les interruptions après ton appel à CALSLT ? Edité par KN2000 Le 22/12/2021 à 13h32


Nous sommes en 2010 aps JC, toute la Gaule est envahie. Ah ben non, apparement, un village résiste encore aux envahisseurs Personalcomputerum et autres Consoledessalum. Bienvenue dans l'antre du emessix !
   
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2699

Le 22/12/2021 à 13h38
KN2000 :
Si tu changes la page 0, tu ne peux plus utiliser ENASLT. Puisqu'à cette adresse, le Z80 va trouver tes niveaux ou tes graphiques mais plus la ROM. Le retour va devoir se faire avec un OUT 0xA8h,"valeur de la configuration avant le CALL ENASLT".


Même si le slot de la Main-ROM est étendu (ce qui est le cas du MSX turbo R par ex.), le OUT A8h suffit ?
Pas besoin de rétablir le slot étendu en FFFFh ?


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

Villageois

Rang

Avatar

Inscrit le : 08/06/2010 à 09h30

Messages: 209

Le 22/12/2021 à 14h12
A l'époque, je n'avais pas accès à un Turbo-R. J'avais testé sur MSX2 VG8235 (slot 3 étendu) et sur MSX FC200 (pas de slot étendu mais RAM en slot 2).

Pas besoin de rétablir le slot étendu d'après ce que tu as trouvé sur MRC,

SAUF si on a sélectionné un sous-slot du SLOT 0. C'est vrai que ça ne me semblait pas utile jusqu'à ce que je lise ta question. Je n'ai exploré que les slots 1, 2 et 3 (pour les jeux). Sur un Turbo-R, le slot 0 est déjà étendu. Seul le sous-slot 1 est complètement libre et en page 0, on va trouver quelque chose qu'en sous-slot 0. Mais c'est vrai qu'on peut envisager en avoir besoin...

Je vais noter ta remarque très pertinente pour quand j'aurais récupéré mes disquettes car ma routine ne doit pas être si universelle que ça.


Nous sommes en 2010 aps JC, toute la Gaule est envahie. Ah ben non, apparement, un village résiste encore aux envahisseurs Personalcomputerum et autres Consoledessalum. Bienvenue dans l'antre du emessix !
   
KN2000 Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 08/06/2010 à 09h30

Messages: 209

Le 22/12/2021 à 20h01
KN2000 :
Si tu changes la page 0, tu ne peux plus utiliser ENASLT. Puisqu'à cette adresse, le Z80 va trouver tes niveaux ou tes graphiques mais plus la ROM. Le retour va devoir se faire avec un OUT 0xA8h,"valeur de la configuration avant le CALL ENASLT".

Je laissais entendre qu'on pouvait utiliser ENASLT pour sélectionner une autre page 0. Mais comme Sector22 l'a signalé : il ne faut pas utiliser ENASLT avec la page 0.

Cette routine sélectionne d'abord le slot puis ensuite le slot secondaire. L'ennui est qu'à la sélection d'un slot autre que celui du Bios, le Z80 va perdre la suite de la routine et tenter d'exécuter les octets qu'il va trouver dans le nouveau slot comme si c'était du code mais ça peut être du texte, du graphisme...
Même si on reste dans le slot 0, le slot secondaire renseigné va bien être sélectionné mais au minimum, on loupe le RET qui permet de revenir à notre programme.

En continuant de trier, je m'aperçois que ça m'avait bien bloqué à l'époque (où il n'y avait que Standard MSX ou MSX Magazine). J'en ai testé des appels Bios (0x0136h, 0x13Bh, 0x159h) parce que ce n'était pas très détaillé dans CLefs du MSX.


Nous sommes en 2010 aps JC, toute la Gaule est envahie. Ah ben non, apparement, un village résiste encore aux envahisseurs Personalcomputerum et autres Consoledessalum. Bienvenue dans l'antre du emessix !
   
Sector28 Membre non connecté

Villageois

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 12/05/2018 à 23h00

Messages: 553

Le 22/12/2021 à 21h52
Par contre, il est possible d'utiliser le ENASLT du msxdos pour selectionner un slot en page 0. Ça permet d'utiliser le bios efficacement sous msxdos.

ORG $100
JP P1

...
...
ORG $4000
P1:
LD A,($FCC1)
LD H,0
CALL $24 ; Saut en $DE84
...
...


Toute matrice carrée sur un corps K, dont le polynôme caractéristique est scindé, est semblable à une matrice de Jordan. Cette réduction est unique à l'ordre des blocs près. De plus, toute matrice carrée nilpotente sur un corps K est semblable à une matrice de Jordan dont chaque bloc est associé à la valeur 0. Évidement, cette réduction est encore unique à l'ordre des blocs près...
:)
   
Sector28 Membre non connecté

Villageois

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 12/05/2018 à 23h00

Messages: 553

Le 22/12/2021 à 22h11
ORG $100
LD HL,$24
LD DE,ENASLT2
LD BC,5
LDIR
JP P1

...
...
ORG $4000
ENASLT2: DB $C9,$C9,$C9,$C9,$C9
P1:
LD A,($FCC1) ; Selectionne le BIOS
LD H,0
CALL ENASLT2
...
...
LD A,($F341) ; Replace la RAM
LD H,0
CALL ENASLT2
...


Toute matrice carrée sur un corps K, dont le polynôme caractéristique est scindé, est semblable à une matrice de Jordan. Cette réduction est unique à l'ordre des blocs près. De plus, toute matrice carrée nilpotente sur un corps K est semblable à une matrice de Jordan dont chaque bloc est associé à la valeur 0. Évidement, cette réduction est encore unique à l'ordre des blocs près...
:)
   
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2699

Le 23/12/2021 à 01h44
Pour ton jeu en tout cas, je vois que 3 solutions viables :
- Faire un RDSLT pour chacun de tes 72 octets. En dehors de la lenteur, c'est le plus simple car le BIOS s'occupe de tout. Il faut juste bien que tu récupères le SlotID de ta cartouche.
- Faire un CALSLT vers un programme de copie en assembleur que tu places en page 0 de ta cartouche (via le crt0) et tu laisses le BIOS gérer le changement de page (idem pour le SlotID).
- Embarquer dans ta cartouche (en page 1 ou 2) des fonctions de Get/Set de slot et faire un truc du genre :
Code :

...
slotROM = GetPageSlot(0)
slotCart = GetPageSlot(1)
DisableInterrupt()
SetPageSlot(0, slotCart)
~~~~~~ Plus de BIOS en page 0 ~~~~~~
Copier tes données en RAM sans utiliser le BIOS
SetPageSlot(0, slotROM)
~~~~~~ Le BIOS est à nouveau page 0 ~~~~~~
EnableInterrupt()
...


En aucun cas, ENASLT sera une solution pour toi vu que cette fonction est dans le BIOS et que si tu changes la page 0 vers ta cartouche, tu n'aura plus accès à ENASLT pour remettre la page 0 sur la Main-ROM.
Ou sinon, y a un truc qui m'échappe. :p


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

Villageois

Rang

Avatar

Inscrit le : 02/01/2021 à 11h22

Messages: 248

Le 23/12/2021 à 11h20
Salut et merci les zamis :)

Pour ce jeu, je vais rester avec RDSLOT.
Chacun des nouveaux essais m'éloigne un peu plus de la fin du jeu ce qui, j'ai peur, pourrait entrainer une démotivation. J'espère que vous me comprendrez ;) Ceci dit, quel plaisir de vous lire et comme disait 'je ne sais plus qui' : "la connaissance ne vaut que si elle est partagée" et vous êtes en plein dedans les potos ;)

Pour le prochain, j'y penserai :top

En ce moment j'essaie de suivre le tuto de Arkos Tracker pour essayer d'entendre une musique sur msx mais je bloque à la fin
@Aoineko, le player que tu utilises dans Final Smash gère la musique ET les bruitages ?


Belle journée à tous

Eric


ps : @KN2000, je pense qu'effectivement, le 'ei' a été oublié ;) Edité par Ricco59 Le 23/12/2021 à 11h41


Tous mes travaux sont centralisés sur mon piti blog : https://ricco59.blogspot.com/
E-mail    
TurboSEB Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 08/08/2010 à 20h57

Messages: 5794

Le 23/12/2021 à 11h50
Pour les musiques, moi je resterai sur du classique, il suffit de choisir la musique entraînante qu'il te faut. A voir si c'est du domaine publique ou pas.
https://www.bibamagazine.fr/lifestyle/psycho/20-musiques-classiques-qui-pourraient-faire-de-bonnes-bandes-son-de-nos-vies-39116.html
On doit pouvoir trouver les partitions facilement, même probablement adapter a une mélodie ressemblante, genre guitare.
Certaines sont des valeurs sûr, jouer a Parodius et vous verrez :tea
Y'a des supers musiciens au village, qui ont reproduit des musiques MSX en les sublimant, on les trouve dans le player de MRC. Bon après y z'ont peut être pas le temps :gne




MSX 1&2 + Moniteurs+divers (environ 0.70Tonnes)
   
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2699

Le 23/12/2021 à 11h51
J'ai essayé 2 fois d'intégrer Arkos, mais leur assembleur est un vrai casse-tête pour moi.

Dans ma lib, j'utilise PT3 pour la musique (Vortex Tracker) et AyFX pour les sons.
Les deux fonctionnent de concert. :siffle


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

Villageois

Rang

Avatar

Inscrit le : 24/10/2021 à 11h19

Messages: 514

Le 23/12/2021 à 14h00

Bonjour tout le monde,

Si on peut vous aider sur d'autres trucs (plutôt simples dans mon cas), n'hésitez pas, Tests ou autre. Annoncez vos besoins :)

Je compte acheter bientôt quelques jeux à la communauté histoire d'encourager le travail. Je trouve cela formidable ce que vous faites.



Rien ne se perd, tout doit se transformer.

E-mail    
Ricco59 Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 02/01/2021 à 11h22

Messages: 248

Le 23/12/2021 à 21h55
J'ai essayé cet aprèm et DTS fonctionne sur mon 8245, ce qui est motivant ;)

J'essaie le replay d'Aoineko, si tu le permets évidemment ;)

Tchao ;)


Tous mes travaux sont centralisés sur mon piti blog : https://ricco59.blogspot.com/
E-mail    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2699

Le 23/12/2021 à 22h18
Ricco59 :
J'essaie le replay d'Aoineko, si tu le permets évidemment ;)


C'est fait pour :top

Si tu es motivé, je vais même te vendre la concurrence. ^^
Y a l'utilisateur mvac7 qui a fait quelque chose que j'ai pas encore fini : généraliser l'utilisation du PSG pour un fonctionnement centralisé par les différents Replayer en C.
En gros, chaque Replayer (PT3, ayFX et WYZ) utilise la même base de code pour la gestion du PSG (j'ai commencé à le faire, mais je me suis perdu en route).
Le seul défaut de sa lib, c'est qu'elle est éparpillé sur plusieurs repo GitHUB (https://github.com/mvac7?tab=repositories).

Après, si tu veux juste jouer une musique au format PT3 et jouer des SFX par dessus, ma Lib t'ira très bien. :)
Par contre, autant le Replayer PT3 semble largement le plus répandu en C, autant j'ai pas l'impression que beaucoup de musiciens actuels l'utilisent.
Y a beaucoup de morceaux existants, mais si tu veux une musique originale, il faudra trouver quelqu'un d'assez motivé pour la créer avec Vortex Tracker (ou la convertir ?).
Les musiques que j'ai vu passer récemment (sur MRC et Youtube) sont généralement faite avec TriloTracker ou Arkos Tracker 2.


On est toujours ignorant avant de savoir.
Github    
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie