1

voila mon resultat

voici le resultat de la compilation d un exemple fournit

neocd001.JPG

l image disk soit a gravé soit pour le faire tourne sur un émulateur, perso moi sa marche que sur nebula 2.25B

http://turn-on.webs.com/neogeo%20CD/imagecd/test.nrg

si vous voulez des infos me faire signe car j avoue au premier abord cela n a pas été simple

2

salut

tu as réutilisé les éléments de la Démo de Fabrice Martinez ? tu as rajouter quoi ?
par contre je ne peux rien faire avec ton dossier .nrg, tu aurais pas un Iso sous la main
Merci
avatar
La Neo Geo CD à son site (en tout cas elle essaye...): http://neogeocdworld.info/
Le forum de la Neo Geo sur Yaronet: forums/264

Un petit site sur l'Atari Falcon avec plein de trucs bon pour votre poussin: http://falcon.ti-fr.com/

3

s est un exemple compiler issue du sdk NEODEV ou j ais trouver le lien sur ton site. Cette demo doit s inspire du travail de fabrice martinez.
la version en iso http://turn-on.webs.com/neogeo%20CD/imagecd/test.iso. non pour l instant je n ais pas encore modifier, j ais plus recherche des outils adapte a la neogeo et de la doc pour apprendre

4

ok dans ce cas cette demo est une démo de Fabrice martinez et elle se trouve déja en format Iso sur mon site (au meme endroit)

Comme ça tu t'es fait la main, maintenant on attend ton travail
avatar
La Neo Geo CD à son site (en tout cas elle essaye...): http://neogeocdworld.info/
Le forum de la Neo Geo sur Yaronet: forums/264

Un petit site sur l'Atari Falcon avec plein de trucs bon pour votre poussin: http://falcon.ti-fr.com/

5

quelqu'un aurait t il des infos pour la parti son car la s est le vide complet j ais vue pas mal de chose et il parle de driver pour le z80 qui ce charge dans le 64Ko mais rien de plus hors il y a le yamaha 2610 ainsi la la gestion de la lecture des plage audio cd. Si quelqu'un s est penche sur le sujet je suis preneur

6

aprés analyse de différente source j ais encore quelques inconnu. Donc la gestion du son est confie au z80 qui accouplé au yamaha 2610 tous sa pilote par la 68K. le z80 dispose de 64Ko de mémoire ou l on doit mettre de quoi - initialise le Z80 et le 2610. Puis faire les fonctions pour exploite les donnée qui sont les son en adpcm, fm, psg, cda (bas oui neogeo cd) et voir du streaming. ainsi que les fonction de base play, stop, répétition d une plage audio ou d un son ou a partir d un offset, etc ....

mais voila ou commence les probléme a mon niveau

Comment fonctionne le system de commande entre le 68K et z80 ..? (ex: le 68k demande au z80 de jouer adpcm blabla)

Comment ce fait la gestion du cdrom de la neogeo ..??

Est ce que l on peu le pilote le cdrom a partir du z80 comme le 68K?? si possible un exemple.

Comment recupére les fonctions cdrom si elle existe en native dans le bios ou comment faire pour les utilisés..??

merci d avance

7

Tout ce qui ressemble meme de prés a une ligne de calcul me parait indéchiffrable, alors le code n'en parlant pas, donc je programme pas, je code pas,

J'avais demander des eclercicement sur un topic sur la music sur Gamekult, mais ça restait assez basic

cette gestion ne doit pas etre si evidente que ça puisque les programmes amateurs n'ont pas de son... je pense que les programmeurs ont déja bien du mal a afficer ce qu'il veulent grin

essaye de contacter furrtek qui devais faire un dossier son sur la neogeo en passant par les fichiers MAME
http://furrtek.free.fr/index.php?p=crea&a=neogeo


avatar
La Neo Geo CD à son site (en tout cas elle essaye...): http://neogeocdworld.info/
Le forum de la Neo Geo sur Yaronet: forums/264

Un petit site sur l'Atari Falcon avec plein de trucs bon pour votre poussin: http://falcon.ti-fr.com/

8

j ais envoyé un mail furrtek mais rien.

Du coup je me suis bien retourne le cerveaux avec des sources alternative, ce qui en ressort s est que dans la ram du z80 est stocker de quoi gére le ym2610 ( processeur sonore FM, SSG, et adpcm A et B 4 ou 8 bit sa je n ais pas vraiment trouver) avec fonction diverse est varie streaming, lecture , répetion suivant des offset etc .... , configue de la parti fm avec load des instruments, et les ssg init attente des frequence et envelloppe etc ....

Déja cette parti la est quand meme déja un bon morceaux est ce code pour le z80 car s est lui qui chapote tous sa.

Après il faut remonte d un niveau quand s est le cpu centrale donc le 68K qui exécute et qui délègue le son au z80 par un systême de commande par le NMI

un exemple grossier 68k envoie la commande jouer son 1 ->Z80-> sound 1 type adpcm B, 8bit 44Khz -> YM2610-> traitement par unite adpcm B -> YM3016(DAC) -> HP

Pour ce qui est de la gestion du lecteur de cdrom j avoue que je coince encore

j ais trouver sa comme commande en assembleur

* void PlayAudio(DWORD Track);
* Only supports tracks 0-9 -->>> je vois pas pourquoi cette limitation et de plus la plage 0 est celle ou il y a les données..??

PlayAudio:
.set _ARGS, 4

* Get track
move.l _ARGS(a7), d0

bset #7, 0x10FD80
jsr 0xC0056A

rts

* void StopAudio();
StopAudio:
move.w #0x0400, d0

bset #7, 0x10FD80
jsr 0xC0056A

rts

si quelque pouvait m explique ou me transpose ce code de façon a mettre lisible cela serait cool


de plus voici un bou du code du bios

$C00552 - Load File (display 'Now Loading')
$C0055E - Exit to CD player
$C00564 - Load File (do not display 'Now Loading')

A0 - pointer to a block:
Filename\0 (Variable sized)
Bank number (Byte)
Pad byte (Variable)
Offset (Dword)

File type rules
PRG Non banked (loaded in PRG memory)
FIX Non banked, divide offset by 2 (loaded in FIX memory)
SPR 1 Mb Banks (loaded in SPR memory)
Z80 Non banked (loaded in Z80 PRG memory)
PAT Non banked (loaded in Z80 Ram) ----------------------------> PATERN ..??
PCM 512K Banks, divide offset by 2 (loaded in PCM memory)

$C0B040 - CDROM check (called from BIOS)

9

Furtek est un mec sympa, mais des gens qui ont une vie et de multiple intérêt ça existe grin mais il a promis de répondre
avatar
La Neo Geo CD à son site (en tout cas elle essaye...): http://neogeocdworld.info/
Le forum de la Neo Geo sur Yaronet: forums/264

Un petit site sur l'Atari Falcon avec plein de trucs bon pour votre poussin: http://falcon.ti-fr.com/

10

cool sa merci kuk

11

Bonjour,
Je m'excuse encore pour ma lenteur et mon manque d'organisation. Voici mon petit grain de sel quasi inutile concernant le son:
Le YM2610 est une belle bête, et j'ai du mal à comprendre le "routage" des opérateurs FM à l'intérieur avec le peu de docs qui traînent encore. Ce qui pourrait aider c'est de décompiler les roms M pour voir ce que le Z80 attend en entrée, et ce qu'il balance en sortie. J'avais cru comprendre avec le player de l'Unibios que le 68K se contentait d'envoyer un (voir deux) octets seulement au Z80 en parallèle, en balançant une NMI. J'imagine alors que les roms V contiennent aussi les paramètres des instruments, les longueurs et des pointeurs un peu partout vers les samples.
J'avais lu aussi qu'il n'y avait pas beaucoup de roms M différents ("drivers") et qu'on en retrouvait des parfaitement identiques entre les jeux de mêmes développeurs. Si je retrouve où j'ai lu ça, je penserais à vous.

Pour le bout de source pour la lecture CD, je comprend pas ce qu'ils font avec _ARGS(*). Je sais pas si c'est un tableau ou quoi... mais vu le nom, c'est peut être un pointeur vers le début des arguments nécessaires à l'appel d'une procédure du BIOS.

PlayAudio:
move.l _ARGS(a7), d0 // Met _ARGS(a7) dans d0, mais on sait pas ce qu'il doit y avoir dans _ARGS(a7)
bset #7, 0x10FD80 // Met le bit 7 de (0x10FD80) à 1.
jsr 0xC0056A // Continue à 0xC0056A (pas loin du Load File du BIOS)
rts // Fin de sous-routine

StopAudio:
move.w #0x0400, d0 // 0x0400 dans d0
bset #7, 0x10FD80 // Comme au dessus
jsr 0xC0056A // Pareil
rts

On dirait qu'il faut juste appeller 0xC0056A avec la piste audio dans d0 pour lire la piste audio qu'on veut. Et donner 0x0400 pour tout arrêter. Le BSET sur 0x10FD80 est surement juste un flag pour dire au moteur du jeu que la routine a bien été executée, puisque c'est une adresse en RAM.
avatar
Je fais des trucs. Des fois ça marche, des fois ça marche pas.

12

pour le programme du z80 regarde dans le cdrom neogeocd le fichier .z80 inclue le pseudo driver du z80, car tu as le code pour pilote le le ym2610 le code propre au z80 "fonction additionnel" et les instrument pour le SSG et la parti FM

13

bon j ais commence a écrire une driver pour le son a me basant des sources une peu du sdk de la md et les sources de mame mais j avoue que s est un peu compliquer et surtout que le fait de ne pas avoir de référence sur le hardware n aide pas beaucoup sad exemple pour la MD #define YM2612_BASEPORT 0xA04000

14

Sur MD tu passes par un port, c'est la façon de faire qu'a choisi Sega (on retrouve la même chose au niveau du VDP par exemple) mais c'est pas dit que ce soit pareil sur la Neo Geo. Peut être qu'il y a plusieurs registres mappés en mémoire par exemple. Je pense que sans doc tu vas être embêté à ce niveau...
(enfin tu peux t'en sortir avec les sources de mame)
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

15

oui j ais regardé par rapport au source de mame mais s est pas évident déjà faut séparer la parti émulation de la parti utilisation après faut capte ce qui ce passe car en plus après dans le source de mame tu n as pas que le ym2610 d émulé sad

16


static ADDRESS_MAP_START( auido_io_map, ADDRESS_SPACE_IO, 8 )
/*AM_RANGE(0x00, 0x00) AM_MIRROR(0xff00) AM_READWRITE(audio_command_r, audio_cpu_clear_nmi_w);*/ /* may not and NMI clear */
AM_RANGE(0x00, 0x00) AM_MIRROR(0xff00) AM_READ(audio_command_r)
AM_RANGE(0x04, 0x07) AM_MIRROR(0xff00) AM_DEVREADWRITE("ym", ym2610_r, ym2610_w)


Donc tu doit lui parler via le z80 sur le port d'io de l'address 0x04 a 0x07
Peace Unity Love et Having Fun!!!

17

j ais trouvé un source hélas en assembler qui est modplay.asm issue d un source de mvsplayer. Il donne un apercut de command fonctionne la parti song neogeo.

; -------------------------------------------------
;
; NMI - used for inter-processor comms
;
; -------------------------------------------------
NMI:
org 66h
push af

; read in command from 68000
in a, 0

; if the value is zero then end
or a
jr z, NMI_End

; if the msb is set then the value represents and FM command
or a
jp m, NMI_ProcessFM

; else it is an ADPCM command
jr NMI_ProcessADPCM
NMI_End:
out (0ch), a ; acknowledge?
pop af
retn

voici les commandes nmi qui lie le 68000 au z80. Mais quelques inconnus reste comme ce headers

Z80moddriver.h

const unsigned char Z80ModDriver[] = {
0xf3,0xc3,0x25,0x01,0x00,0xff,0xff,0xff,0x7a,0xd3,0x04,0x7b,
0xd3,0x05,0xc9,0xff,0x7a,0xd3,0x06,0x7b,0xd3,0x07,0xc9,0xff,
0xe5,0x21,0x00,0x00,0xcb,0x27,0xcb,0x27,0xcb,0x27,0x6f,0x29,
0x29,0xeb,0xe1,0xc9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf3,0xf5,0xd5,0xaf,
0xd3,0x0c,0x3a,0x0f,0xf8,0x3c,0x32,0x0f,0xf8,0x57,0x3a,0x10,
0xf8,0xba,0x20,0x07,0xaf,0x32,0x0f,0xf8,0xcd,0x06,0x03,0x11, ..................etc

qui contient je ne sais quoi

le source est ici http://www.neobitz.com/Pages/DevTools/MVSTracker.aspx

modplay-z80src.zip avis au amateur car moi et l asm sa fait 2

18

Bah si c'est juste l'ASM je peux te la traduire en C, mais je doute que ça t'aide bcp...
void NMI() {
    char result = readCommandFrom68k();
    if (result != 0) {
        if (result & 0x80)
            NMI_ProcessFM();
        else
            NMI_ProcessADPCM();
    }
    // Acknowledge?
    writeTo0ch(result);
}
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

19

Attention, le 0x00 et le 0x0C mentionnés sont des adresses de ports I/O, pas des adresses mémoire (c'est pour ça que les instructions utilisées sont IN et OUT), on ne peut donc pas utiliser des pointeurs.

L'accès au ports I/O et les gestionnaires d'interruption (NMI, ici) ne font pas partie du standard C , il faut donc que tu regardes dans la doc de ton compilateur quelles sont les instructions à utiliser.
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

20

Ha oui voilà pourquoi je comprenais pas d'où sortait ce 0ch, j'ai lu ld au lieu de out, je sais pas pourquoi triso
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

21

alors en compilateur bas dans neodev s est GCC et pour le Z80 j ais prid ZCC 0.96 "small C" helas je n ais pas encore trouver la réponse

22

L’interruption NMI provoque un empilage automatique du compteur ordinal PC et un bran-
chement `a l’adresse (fixe) 0066h, autrement dit les deux octets représentant cette adresse
sont déposés dans le compteur ordinal représentant le début de la routine de traitement des
interruptions non masquables. Le retour de la routine de gestion de l’interruption NMI est
assuré par une instruction spéciale appelée RETN (pour l’anglais RETurn from Non maskable
interrupt). Celle-ci restaure le contenu du compteur ordinal `a partir de la pile

j ais trouver cela aussi

4.4 16 Bit I/O ports
O±cially the Z80 has an 8 bit I/O port address space. When using the I/O ports, the 16 address
lines are used. And in fact, the high 8 bit do actually have some value, so you can use 65536
ports after all. IN r,(C), OUT (C),r, and the Block I/O instructions actually place the entire BC
register on the address bus. Similarly IN A,(n) and OUT (n),A put A £ 256 + n on the address
bus.
The INI/INIR/IND/INDR instructions use BC after decrementing B, and the OUTI/OTIR/OUTD/OTDR
instructions before.

23

Dans zcc096/test/hello.c, il y a des macros pour accéder aux ports d'entrée/sortie :
#define		inb(p)		asm("\tld\tbc,#" #p "\n\tin\ta,(c)\n")
#define		outb(p)		asm("\tld\tbc,#" #p "\n\tout\t(c),a\n")
#define		outpi(p,v)	asm("\tld\ta,#" #v "\n"); outb(p)

Donc, en réécrivant le code traduit par Brunni :
void NMI() { 
    char commande = inb(0x00); 
    if (commande != 0) { 
        if (commande & 0x80) 
            result = NMI_ProcessFM(commande); 
        else 
            result = NMI_ProcessADPCM(commande); 
    } 
    // Acknowledge? 
    outpi(0x0c, result); 
}

Reste à savoir comment on définit une NMI.
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

24

pas mal zerosquare moi qui me gratte la tête dans les .doc, oui s est une bonne question

25

USHORT nmiData;

inline void in(int r,int add)
{
if (add==0)
regs[r] = nmiData;
}

inline void out(int add,int v)
{
if (add!=0 && add!=0x0c)
YM2610Write(0,add,v);
}

void doNMI(USHORT i)
{
nmiData = i;
do_nmi = true;
}

mainAPI

void sendCommand(unsigned short Cmd)
{
doNMI(Cmd);
}


extrait du driver dans mame mais vue que le z80 est emule je pense pas que cela ne soit d un grand secours mur

26

Oui, ça c'est (un bout du) code qui émule le son, pas ce qui est exécuté par le Z80.

Il n'y a pas de programme amateur qui utilise du son pour avoir un exemple ?
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

27

bas s est la que le bas blesse s est qu il n y a rien a pas le le mvstracker (code asm) apres dans les demo je n ais rien vue car la plus part n on pas de son apres il y a bien les .z80 dans le neogeoCD qui est un binarie Z80 mais la faut le desassemble ce qui est hors de porte pour moi.


source fournit dans Frog Feast

sound.c

void InitSound()
{
send_sound_command(3);
}

void PlaySound(DWORD SoundID)
{
send_sound_command(SoundID + SOUND_ADPCM_FROG);
send_sound_command(SOUND_ADPCM_OFF);
}

sound.h

inline void send_sound_command(BYTE CommandNo)
{
(*((PBYTE)0x320000)) = CommandNo;
}

// FM Music commands
#define SOUND_FM_OFF (0xff)

// ADPCM Sample commands
#define SOUND_ADPCM_FROG (0x04)
#define SOUND_ADPCM_TONGUE (0x05)
#define SOUND_ADPCM_FLYGRAB (0x06)
#define SOUND_ADPCM_WATER (0x07)
#define SOUND_ADPCM_OFF (0x7f)


apres tu as comme j ais marque plus haut le listing modplayz80 en assembler et apres je n ais rien trouver d autre

28

Zerosquare (./23) :
Reste à savoir comment on définit une NMI.

Heu une NMI n'est pas lancée à la main non? Si?
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

29

Non en effet. Mais ce n'est pas une fonction ordinaire : il faut sauvegarder tous les registres, flags y compris, et terminer par une instruction RETN au lieu du RET (je crois) normal. Y'a pas de mot-clé standard en C pour ça ; en général, les compilos ont leur propre mot-clé spécifique pour déclarer ce genre de fonction.
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

30

Ouep je vois. En l'occurrence ça ne change pas grand chose des interruptions classiques, juste le RETI -> RETN. Sinon les interruptions doivent aussi avoir une bidouille du compilo déjà pour être à une adresse fixe.
=> Ca sera peut être plus facile si tu trouves déjà du code pour une interruption simple progfr wink
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741