Dev GX4000 / CPC
+3
nemokantio
65c02
fanoplusplus64K
7 participants
Page 1 sur 1
Dev GX4000 / CPC
Je crée ce sujet pour ne pas aller charger trop le sujet AMSTRAD CPC Officiel.
Un petit exemple (en sjasm) pour créer directement le fichier cartouche pour la GX (.CPR)
Ici c'est pour une cartouche 128K mais c'est facilement adapatable pour plus gros en ajoutant vos roms.ça part du principe de chaque rom fait 16K.
Un petit exemple (en sjasm) pour créer directement le fichier cartouche pour la GX (.CPR)
Ici c'est pour une cartouche 128K mais c'est facilement adapatable pour plus gros en ajoutant vos roms.ça part du principe de chaque rom fait 16K.
- Code:
;boot code and cartrige configuration
output "bin/game.cpr"
org 0
;cartrige header
db "RIFF"
dd cart_size
cart_start
db "AMS!"
;bank 0 - boot strap
db "cb00"
dd 0x4000
incbin "bin/rom00.bin"
;bank 1
db "cb01"
dd 0x4000
incbin "bin/rom01.bin"
;bank 2
db "cb02"
dd 0x4000
incbin "bin/rom02.bin"
;bank 3
db "cb03"
dd 0x4000
incbin "bin/emptyrom.bin"
;bank 4
db "cb04"
dd 0x4000
incbin "bin/emptyrom.bin"
;bank 5
db "cb05"
dd 0x4000
incbin "bin/emptyrom.bin"
;bank 6
db "cb06"
dd 0x4000
incbin "bin/emptyrom.bin"
;bank 7
db "cb07"
dd 0x4000
incbin "bin/emptyrom.bin"
cart_size EQU $-cart_start
fanoplusplus64K- Patient contaminé
- Nombre de messages : 597
Age : 48
Date d'inscription : 16/01/2011
Re: Dev GX4000 / CPC
Cool,
super idée
La GX4000 c'est un Amstrad CPC+ sans clavier ou c'est différent ?
A l’exécution, c'est du bank switching comme sur un CPC classique ?
Le point d'entrée du code se fait sur quelle adresse ?
super idée
La GX4000 c'est un Amstrad CPC+ sans clavier ou c'est différent ?
A l’exécution, c'est du bank switching comme sur un CPC classique ?
Le point d'entrée du code se fait sur quelle adresse ?
Re: Dev GX4000 / CPC
C'est ça , un + sans clavier (enfin ,les 2 joysticks et la touche Pause sont connectés) ni FDD avec 64K de RAM.
C'est du bank switching un peu différent du CPC classique.ça utilise le même système de ROM sauf que tu peux les affecter différement.tu peux directement connecter les pages de la cartouche dans la partie haute (C000->FFFF) via DF00 avec slot+128 et sinon connecter les 8 premieres pages de la cartouche via RMR2 (0->3FFF).
Comme tu l'as deviné , chaque "slot" correspond à une page de 16K dans la cartouche avec 32 "slots" possibles soit 512K.
Au boot, le point d'entrée c'est 0 , avec la page 0 de la cartouche connectée en 0000 et la page 1 connectée en C000.
C'est du bank switching un peu différent du CPC classique.ça utilise le même système de ROM sauf que tu peux les affecter différement.tu peux directement connecter les pages de la cartouche dans la partie haute (C000->FFFF) via DF00 avec slot+128 et sinon connecter les 8 premieres pages de la cartouche via RMR2 (0->3FFF).
Comme tu l'as deviné , chaque "slot" correspond à une page de 16K dans la cartouche avec 32 "slots" possibles soit 512K.
Au boot, le point d'entrée c'est 0 , avec la page 0 de la cartouche connectée en 0000 et la page 1 connectée en C000.
fanoplusplus64K- Patient contaminé
- Nombre de messages : 597
Age : 48
Date d'inscription : 16/01/2011
Re: Dev GX4000 / CPC
Carrément mon pote ! même si elle a défauts majeurs la console permet quand même de belles choses.
Ce qui manquait c'est justement un hard comme le C4CPC pour vraiment pouvoir dévelloper dessus.
Après c'est juste qu'il faut du temps pour faire quelque chose de solide niveau réalisation, c'est ça qui manque le plus finalement.
Avec l'arrivée du C4CPC j'espère qu'on va voir fleurir les réalisations dans les années qui viennent, voire même des nouvelles sorties en format cartouche.
Ce qui manquait c'est justement un hard comme le C4CPC pour vraiment pouvoir dévelloper dessus.
Après c'est juste qu'il faut du temps pour faire quelque chose de solide niveau réalisation, c'est ça qui manque le plus finalement.
Avec l'arrivée du C4CPC j'espère qu'on va voir fleurir les réalisations dans les années qui viennent, voire même des nouvelles sorties en format cartouche.
fanoplusplus64K- Patient contaminé
- Nombre de messages : 597
Age : 48
Date d'inscription : 16/01/2011
Re: Dev GX4000 / CPC
Oui, ça fait du taf, déjà remapper les entrées clavier, convertir la partie floppy, etc. Mais ça ouvre des portes, héhé. Console fétiche du forum.
Invité- Invité
Re: Dev GX4000 / CPC
En portage depuis le CPC tu as déjà pas mal de jeux, après ce sont des jeux CPC donc ne profitant pas pour la plupart des capacités de la console : http://www.cpcwiki.eu/index.php/Converted_GX4000_Software
Dernière édition par fanoplusplus64K le Mar 20 Sep 2016 - 16:38, édité 1 fois
fanoplusplus64K- Patient contaminé
- Nombre de messages : 597
Age : 48
Date d'inscription : 16/01/2011
Re: Dev GX4000 / CPC
J'ajouterais que quand on veut exploiter les capacités de la console, il faut d'abord débloquer l'ASIC (une séquence de codes à envoyer sur un port).
Puis constamment jongler avec la page ASIC à mapper en ram (pour travailler avec les sprites, le scrolling etc...).
Et quand on vient du cpc, il faut arrêter de "penser disquette" et "penser cartouche", c'est pas évident.
Puis constamment jongler avec la page ASIC à mapper en ram (pour travailler avec les sprites, le scrolling etc...).
Et quand on vient du cpc, il faut arrêter de "penser disquette" et "penser cartouche", c'est pas évident.
nemokantio- Patient contaminé
- Nombre de messages : 345
Age : 48
Localisation : Delgastan
Date d'inscription : 23/01/2013
Re: Dev GX4000 / CPC
Ca a l'air chouette.
Quelque chose me dit qu'un de ces quatre vous aller nous faire des trucs incroyables
Quelque chose me dit qu'un de ces quatre vous aller nous faire des trucs incroyables
Re: Dev GX4000 / CPC
un CPC6128+ en 1986 aurait fait un malheur.
_______________________________________________________
Re: Dev GX4000 / CPC
Tout à fait. A la place du 6128 du coup.
TotOOntHeMooN- Docteur agrégé **
- Nombre de messages : 18142
Age : 54
Localisation : Terre I
Date d'inscription : 18/04/2013
Re: Dev GX4000 / CPC
ça aurait fait un C128drfloyd a écrit:un CPC6128+ en 1986 aurait fait un malheur.
Re: Dev GX4000 / CPC
Et pourtant, il y avait de super jeu sur CPC6128 !!
Je pense à l'excellent Gryzor ou Renegade ... Bon je ne suis pas objectif, c'était mon amour de jeunesse ...
Je salue l'initiative de ce post !
Si l'on pouvais y trouver d'autres informations pour aider quiconque voudrait se lancer dans l'élaboration d'un Homebrew sur ces 8 bits, ça serait vraiment super.
Merci encore !
Je pense à l'excellent Gryzor ou Renegade ... Bon je ne suis pas objectif, c'était mon amour de jeunesse ...
Je salue l'initiative de ce post !
Si l'on pouvais y trouver d'autres informations pour aider quiconque voudrait se lancer dans l'élaboration d'un Homebrew sur ces 8 bits, ça serait vraiment super.
Merci encore !
Invité- Invité
Re: Dev GX4000 / CPC
Je dois avouer que j'ai du mal à être objectif avec le CPC car j'adore ces machines, le 6128 et la GX sont mes préférées.
J'espère que le sujet va grandir et servir d'aide pour ceux qui auraient envie de ce tenter à ces machines, n'hésitez pas si vous avez des questions d'ordre technique, on pourra essayer d'y répondre
J'espère que le sujet va grandir et servir d'aide pour ceux qui auraient envie de ce tenter à ces machines, n'hésitez pas si vous avez des questions d'ordre technique, on pourra essayer d'y répondre
fanoplusplus64K- Patient contaminé
- Nombre de messages : 597
Age : 48
Date d'inscription : 16/01/2011
Re: Dev GX4000 / CPC
J'avoue que te voir faire donne fortement envie de s'y mettre.
Aurais tu des liens sur des tutos qui montrent à quoi doit ressembler une main loop ?
Un code asm de base d'une cartouche.
J'imagine qu'il faut régler les vecteurs d'interruptions et autres joyeuseté qu'on a directement bien propre sur un CPC au lancement.
Par exemple, les registres du CRTC: il faut les configurer au démarrage j'imagine, non ?
J'aimerai bien voir un code qui remplit l'écran, et affiche un sprite.
Aurais tu des liens sur des tutos qui montrent à quoi doit ressembler une main loop ?
Un code asm de base d'une cartouche.
J'imagine qu'il faut régler les vecteurs d'interruptions et autres joyeuseté qu'on a directement bien propre sur un CPC au lancement.
Par exemple, les registres du CRTC: il faut les configurer au démarrage j'imagine, non ?
J'aimerai bien voir un code qui remplit l'écran, et affiche un sprite.
Re: Dev GX4000 / CPC
Effectivement il faut configurer totalement la machine car en fait tu travailles sur une machine totalement nue au démarrage.Du coup, chacun gère la machine comme il veut.
Après, tu peux aller voir ici http://www.cpcwiki.eu/index.php/Source_Codes et là http://www.cpctech.org.uk/source.html
Après, un petit bout de code d'un bootstrap qui te configure le CRTC (attention là c'est en 200*192 wide pixel), delocke l'ASIC, setup les ROMs et déploie le kernel en RAM de 0 à 3FFF.C'est du WIP donc il n'y a pas la gestion des interruptions mais c'est assez simple sur le + , ou le Z80 est mode 1 (IM1) et tu as un vecteur d'interruption en 0x38 , ou tu est en mode 2 (IM) et I est l'adresse haute de ta table de vecteurs et il y a un registre dans l'ASIC pour préciser les autres bits.Le bit 0 est toujours à 0 , les bits 1 et 2 sont fournis par l'ASIC pour choisir le bon vecteur (PRI,DMA0/1/2) , sachant qu'il y a un bug sur le +, c'est qu'il y a parfois confusion entre les vecteurs PRI et DMA0 (donc n'utiliser qu'un des deux finalement mais pas les deux en même temps)
Après, tu peux aller voir ici http://www.cpcwiki.eu/index.php/Source_Codes et là http://www.cpctech.org.uk/source.html
Après, un petit bout de code d'un bootstrap qui te configure le CRTC (attention là c'est en 200*192 wide pixel), delocke l'ASIC, setup les ROMs et déploie le kernel en RAM de 0 à 3FFF.C'est du WIP donc il n'y a pas la gestion des interruptions mais c'est assez simple sur le + , ou le Z80 est mode 1 (IM1) et tu as un vecteur d'interruption en 0x38 , ou tu est en mode 2 (IM) et I est l'adresse haute de ta table de vecteurs et il y a un registre dans l'ASIC pour préciser les autres bits.Le bit 0 est toujours à 0 , les bits 1 et 2 sont fournis par l'ASIC pour choisir le bon vecteur (PRI,DMA0/1/2) , sachant qu'il y a un bug sur le +, c'est qu'il y a parfois confusion entre les vecteurs PRI et DMA0 (donc n'utiliser qu'un des deux finalement mais pas les deux en même temps)
- Code:
;CRTC configuration
module CRTC
;send a serialised configuration to CRTC
;HL = values to write to registers
;C = first register
;E = register count
Config
ld B,0xBC ;register select
.loop
out (C),C ;select register
inc B ;B=0xBD
ld A,(HL)
inc HL
out (C),A ;send data to register
inc C ;next register
dec B ;B=0xBC
dec E
jr nz,.loop
ret
endmodule
- Code:
;ASIC unlock code, used only once
module ASIC
Unlock
ld HL,.sequence
ld B,0xBC
ld A,.sequence_size
.loop
ld C,(HL)
out (C),C
inc HL
dec A
jr nz,.loop
ret
.sequence
db 0xff,0x00,0xff,0x77,0xb3,0x51,0xa8,0xd4,0x62,0x39,0x9c,0x46,0x2b,0x15,0x8a,0xcd,0xee
.sequence_size EQU $-.sequence
endmodule
- Code:
;boot code
output "bin/rom00.bin"
org 0xc000
include "code/macros.asm"
include "code/heap.asm"
;setup temporary stack here as we are sure there is no rom
di
ld SP,0xc000
;be sure to select cartrige ROM 0 (128+0)
ld BC,0x80
out (C),C
jp Entry
Entry
;setup RMR to unpage lower ROM
ld A,%10000100
ld B,0x7F
out (C),A
ld (HEAP.RMR),A ;setup default value for RMR
;setup new stack
ld SP,0x4000
;cleanup both screen
ld HL,0x4000
ld DE,0x4001
ld (HL),0
ld BC,0x7FFF
ldir
;setup grid
call SetupGridAddress
call ASIC.Unlock
ld HL,Setting
ld C,0
ld E,Setting.size
call CRTC.Config
;red border
ld BC,0x7F10
ld A,0x4C
out (C),C
out (C),A
;deploy kernel
ld HL,Kernel
ld DE,0
ld BC,Kernel.size
ldir
;startup
rst 0
SetupGridAddress
ld HL,0x3600
ld DE,64
ld B,32
ld IX,HEAP.GRID
.loop
ld (IX),L
ld (IX+1),H
inc IX
inc IX
add HL,DE
djnz .loop
ret
Setting
db 63 ;0 :standart 64µs screen
db 49 ;1 :48 visibles chars width + 1 masked by scrolling
db 50 ;2 :X centering
db 128+12 ;3 :minimum = 8 , R2+R3<R0
db 38 ;4 : 312 lines screen (50hz)
db 0 ;5 : no vertical adjust
db 24 ;6 : 24 char lines to display
db 30 ;7 : vertical centering
db 0 ;8 : interlaced mode (off)
db 7 ;9 : lines per char
.size EQU $-Setting
include "lib/asic_unlock.asm"
include "lib/crtc_config.asm"
Kernel
incbin "bin/kernel.bin"
.size EQU $-Kernel
align 0x4000
fanoplusplus64K- Patient contaminé
- Nombre de messages : 597
Age : 48
Date d'inscription : 16/01/2011
Re: Dev GX4000 / CPC
Bien sympa ce sujet.
Merci Fano, très bonne idée.
Vous pourrez aussi aller voir la:Programmation GX4000
Et la:Programmation sur CPC en général.
Si vous voulez vous y mettre
Merci Fano, très bonne idée.
Vous pourrez aussi aller voir la:Programmation GX4000
Et la:Programmation sur CPC en général.
Si vous voulez vous y mettre
BDCIron- Patient contaminé
- Nombre de messages : 417
Age : 44
Localisation : Normandie
Date d'inscription : 12/08/2015
Re: Dev GX4000 / CPC
Hello
Je vais suivre cela avec grand intérêt car je vais m'y remettre après le falcon, euh la megadrive... neogeo ?
Dans tous les cas l'amstrad est et restera ma machine de cœur et je me renseigne sur la C4CPC
Excellente initiative Fano et merci pour les liens BDCIron
Je vais suivre cela avec grand intérêt car je vais m'y remettre après le falcon, euh la megadrive... neogeo ?
Dans tous les cas l'amstrad est et restera ma machine de cœur et je me renseigne sur la C4CPC
Excellente initiative Fano et merci pour les liens BDCIron
Re: Dev GX4000 / CPC
Je vois que le sujet intéresse , c'est super !
Si vous butez sur quelque chose pour votre code (que ça soit technique ou sur l'optimisation car la machine est particulièrement souple malgré ses faiblesses évidentes), n'hésitez pas à poser les questions , je pense qu'il y aura quelqu'un ici pour vous répondre
Sinon , je radote mais le C4CPC est quelque chose d'absolument génial pour les GX/+, comme l'a été le HXC pour le CPC à son arrivée.
Si vous butez sur quelque chose pour votre code (que ça soit technique ou sur l'optimisation car la machine est particulièrement souple malgré ses faiblesses évidentes), n'hésitez pas à poser les questions , je pense qu'il y aura quelqu'un ici pour vous répondre
Sinon , je radote mais le C4CPC est quelque chose d'absolument génial pour les GX/+, comme l'a été le HXC pour le CPC à son arrivée.
fanoplusplus64K- Patient contaminé
- Nombre de messages : 597
Age : 48
Date d'inscription : 16/01/2011
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum