Vieux projet : AmigaGS ( AmigaOS3.x )

5 sujets de 1 à 5 (sur un total de 5)

  • AmiDARK

      #194912

      Salut,

      J’ai toujours les sources et la dernière version d’un projet que j’avais créee il y a plusieurs années en arrière pour Amiga OS 3 et AGA : Amiga Game Studio.

      Il s’agissait d’un pack de librairies qui s’auto-configurait pour permettre d’utiliser au mieux la machine présente pour créer des jeux vidéo.

      Le principe est simple.
      On ouvre 1 librairie principale qui elle va détecter le CPU, le FPU, la configuration mémoire et utiliser les composants liés (genre charger une library pour le C2P selon le CPU).
      L’objectif était de prémacher le travail du créateur de jeu en ayant au final un jeu d’appels de fonctions à utiliser sans se soucier de quelle librairie utiliser.

      Voici un exemple de programme (en assembleur 68020) qui utilisait le principe AmigaGS :

      ; **************************
      ; *                        *
      ; * AMIGA GAME STUDIO BETA *
      ; *                        *
      ; *------------------------*
      ; *                        *
      ; * Example de viewer pour *
      ; * des images iff/ilbm de *
      ; * 2 à 256 couleurs .     *
      ; *                        *
      ; **************************
      ;
      ; Fichier startup de AGS.
      	Include	"AmigaGS:AmigaGS-Startup.s"
      ;
      ;
      ; Mise en place du copper AGA.
      	LibCall		Display,Ags_Display
      ;
      ; On prend les valeurs IFF/ILBM
      	Lea.l		Ilbm,a0
      	LibCall		FxIlbm,IlbmXSize
      	SaveL		D0,X
      ;
      	Lea.l		Ilbm,a0
      	LibCall		FxIlbm,IlbmYSize
      	SaveL		D0,Y
      ;
      	Lea.l		Ilbm,a0
      	LibCall		FxIlbm,IlbmDepth
      	SaveL		D0,Depth
      ;
      ; Ouverture de l'ecran necessaire.
      	Lea.l		X,a0
      	Moveq.l		#0,d0			; Ecran 0
      	Movem.l		(a0)+,d1/d2/d3	; X,Y,Depth.
      	LibCall		Screens,Screen_Open
      
      ; On place l'ecran dans le display AmigaGS.
      	Moveq.l		#0,d0
      	LibCall		Screens,Screen_Base
      	LibCall		Display,Ags_Screen
      
      ; On va convertir l'image IFF/ILBM Dans l'ecran.
      	Moveq.l		#0,d0
      	LibCall		Screens,Screen_Base
      	Lea.l		Ilbm,a1
      	LibCall		FxIlbm,IlbmConvert
      
      ; Pour finir,On va placer la bonne palette de couleur.
      	Lea.l		Ilbm,a0
      	LibCall		FxIlbm,IlbmPalette	; ->A0=palette base
      	Lea.l		CMAP,a1
      	Move.l		a0,(a1)
      	LoadL		Depth,d0
      	Lsl.w		#1,d0	
      	Lea.l		DepthMask,a4
      	Add.w		d0,a4
      	Lea.l		Depth,a0
      	clr.l		(a0)
      ;
      ; On redéfinit ??? couleurs selon le déssin.
      	Lea.l		Depth,a1
      	LoadL		CMAP,a3
      	LoadL		Depth,d0
      	Add.l		#4,a3
      bcl2
      	Clr.l		d1
      	Move.b		(a3)+,d1	; D1=ROUGE.
      	Clr.l		d2
      	Move.b		(a3)+,d2	; D2=VERT.
      	Clr.l		d3
      	Move.b		(a3)+,d3	; D3=BLEU.
      	LibCall		Display,Ags_SetColor
      	Lea.l		Depth,a0
      	Addq.l		#1,(a0)
      	Move.l		(a0),d0		; D0=Prochaine couleur.
      	Cmp.w		(a4),d0
      	Blt.b		bcl2
      ;
      ; On attend l'appui sur le bouton gauche de la souris.
      wlc
      	LibCall		Joyport,Joy0Fire1State
      	Tst.b		d0
      	Beq.b		wlc
      
      ; On revient au workbench,on remet tout à 0 et on quitte.
      _Fin1:
      	LibCall		Display,WB_Display
      	ScreenClose	#0
      	Moveq.l	#0,d0
      	Rts
      
      ;
      ; Autres librairies définissables par l'utilisateur
      ;
      X:		Dc.l	0
      Y:		Dc.l	0
      Depth:	Dc.l	0
      CMAP:	Dc.l	0
      DepthMask:
      		Dc.w	0,2,4,8,16,32,64,128,256
      Ilbm:
      	Incbin	"AmigaGS:Samples/AmigaGS.lbm"
      

      Comme vous pouvez le voir, le système utilise des MACROS pré-définies.

      Exemple: LibCall Display,Ags_Display
      Qui appelle la library « Display » qui dépendra de votre chipset graphique. Sachant que toutes les library gérant les chipset graphiques auront une fonction interne Ags_Display qui activera l’affichage de l’AmigaGS sur le chipset approprié.

      Exemple: LibCall Display,WB_Display
      Qui appelle la fonction « WB_Display » de la library « Display » de votre chipset graphique pour rendre la visualisation au Workbench et ainsi fermer l’affichage de l’AmigaGS.

      Si certains sont intéréssés par le KIT dans son état actuel, je peux leur envoyer en message privé.

      Les fonctions/Macros actuellement disponibles sont les suivantes :

      Graphiques :
        InitDisplay
        CloseDisplay
        WaitVbl
        RefreshCopper
        SetColor
        ScreenOpen
        ScreenClose
        CurrentScreenBase
        MakeMosaic
      Memory :
        ReserveChip
        ReserveFast
        ReservePublic
        Reserve24BitDMA
        EraseBank
        EraseAllBanks
        CheckBankBase
      System
        Wait
        LibCall

      Fonctions Library utilisables via un LibCall :

      FileIO
        LoadFile
        SaveFile
        LoadCustomFile
      Joystick
        Joy0State
        Joy1State
        Joy0Fire1State
        Joy0Fire2State
        Joy0Fire3State
        Joy1Fire1State
        Joy1Fire2State
        Joy1Fire3State
        ArrowsKeysState
      Castle3DEngine
        --Not Documented--
      Graphics/Chunky
        Set_ChunkyBase
        Set_ScreenBase
        Set_ChunkySize
        Chunky_Convert
        Chunky_Plot
      Graphics/Display
        Ags_Display
        WB_Display
        Ags_WaitVbl
        Ags_Screen
        Ags_SetColor
        Ags_Copper
        Refresh_Copper
        Screen_Offset
        YDisplaySize
      Graphics/ILBM
        IlbmConvert
        IlbmXSize
        IlbmYSize
        IlbmDepth
        IlbmPalette
      Graphics/Mosaics
        Mosaic
      Graphics/Icons
        ReserveIcons
        EraseIcons
        GetIcon
        PasteIcon
        LoadIcons
        SaveIcons
        BaseIcons
      Graphics/Screen
        Screen_Open
        Screen_Close
        Screen_Base
        Screen
        CurrentBase
        ScreenClear
      Maths/FPMaths
        fmf_flt
        fmf_fix
        fmf_abs
        fmf_int
        fmf_add
        fmf_sub
        fmf_mul
        fmf_div
        fmf_cmp
        fmf_neg
        fmf_tst
      Memory/Banks
        ReserveAsChipData
        ReserveAsFastData
        ReserveAsPublicData
        ReserveAs24BitDMAData
        BankBase
        EraseBank
        EraseAllBanks
      Memory
        MemoryClear
        MemoryCopy
      System
        TasksOff
        TasksOn

      Voila.
      @+
      AmiDARK

      Anonyme

        #194956

        Super mec comme d’habitude !

         

        je reviens une heure après et comme d’hab il n’y a que moi que ça intéresse.

        On devrait faire un jeu Amiga tous les deux, sur lequel on ne serait que deux à jouer.

         

        sayasupacrew

          #195030

          c’est vrai, j’ai toujours que l’on vienne comme tu l’as fais Amidark, laissé le code sur le forum, sa m’intrigue au plus haut point, de voir du code de comprendre ne serais ce que 1 %, j’en serais le plus heureux.

           

          Sa me fascine.

          https://www.youtube.com/@sayasupa

          AmiDARK

            #195284

            Merci pour vos commentaires.*

            En fait, je pense peut-être reprendre ce projet en parallèle de l’AmiDARK Engine en le modifiant de façon à ce qu’il soit plus proche (niveaux fonctions & commandes) de l’AmiDARK Engine.

            Histoire que cela apporte aux Amiga Classics un nouveau SDK permettant de créer des jeux plus rapidement :p

            @+
            AmiDARK

            b0ris747

              #195290

              J’aime les SDK bien faits et biens documentés… Je te souhaite du courage et de la réussite 🙂

              35m2 == 35m3 de matos - Membre de l'ART

            5 sujets de 1 à 5 (sur un total de 5)

            • Vous devez être connecté pour répondre à ce sujet.

            Forums AmigaOS, MorphOS et AROS Développement Vieux projet : AmigaGS ( AmigaOS3.x )

            Amiga Impact