Papi Commando fait de ... L'assembleur 68000 !
+16
Hpman
ichigobankai
Urbinou
dub
grostonton
Spirale
vingazole
tetsuro
65c02
TotOOntHeMooN
F.L
tfdi
Ninja_SCX
vincent2105
pckid
drfloyd
20 participants
Page 8 sur 9
Page 8 sur 9 • 1, 2, 3, 4, 5, 6, 7, 8, 9
Re: Papi Commando fait de ... L'assembleur 68000 !
C'est bien placé, donc faut pas se priver ,et puis ce genre de troll,n'a jamais tué personne .
Invité- Invité
Re: Papi Commando fait de ... L'assembleur 68000 !
Concernant :
Var : ds.b 8
Testé, ça ne fonctionne pas.
J'ai TOUT testé sauf la solution a la "mano".
Var : ds.b 8
Testé, ça ne fonctionne pas.
J'ai TOUT testé sauf la solution a la "mano".
Invité- Invité
Re: Papi Commando fait de ... L'assembleur 68000 !
Ben tu fais alors un truc genre:
Lea $ff0000,a0
Et ca devrait être bon ...
Lea $ff0000,a0
Et ca devrait être bon ...
tfdi- Patient contaminé
- Nombre de messages : 550
Age : 52
Date d'inscription : 19/10/2010
Re: Papi Commando fait de ... L'assembleur 68000 !
Si à la mano c'est pareil, faudra attendre que stef passe par là
EDIT: la solution de tfdi est pas mal, en plus d'être simple (rien à déclarer) .
EDIT: la solution de tfdi est pas mal, en plus d'être simple (rien à déclarer) .
Invité- Invité
Re: Papi Commando fait de ... L'assembleur 68000 !
Oui je sais quoi faire maintenant.
Et arrêter de troller avec vos 16 bits a la noix là ...
Chacun sait que the Best c'est et ça restera l'Amstrad CPC.
D'ailleurs je reverai réaliser un jeu en Z80 sur ma machine de coeur ... Un Papi Commando version 8 bits CPC ...
Et arrêter de troller avec vos 16 bits a la noix là ...
Chacun sait que the Best c'est et ça restera l'Amstrad CPC.
D'ailleurs je reverai réaliser un jeu en Z80 sur ma machine de coeur ... Un Papi Commando version 8 bits CPC ...
Invité- Invité
Re: Papi Commando fait de ... L'assembleur 68000 !
Ah on retrouve le vrai Vetea là, des projets plein la têteVetea a écrit:
D'ailleurs je reverai réaliser un jeu en Z80 sur ma machine de coeur ... Un Papi Commando version 8 bits CPC ...
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: Papi Commando fait de ... L'assembleur 68000 !
Ba voila !Vetea a écrit:D'ailleurs je reverai réaliser un jeu en Z80 sur ma machine de coeur ... Un Papi Commando version 8 bits CPC ...
TotOOntHeMooN- Docteur agrégé **
- Nombre de messages : 18166
Age : 54
Localisation : Terre I
Date d'inscription : 18/04/2013
Re: Papi Commando fait de ... L'assembleur 68000 !
Oui mais je commence a peine le 68000 ... Hihi !
Le Z80 c'est différent ... Mais la MD possède un petit Z80 avec 8Ko de réservé ... De quoi s'entrainer un peu.
Le Z80 c'est différent ... Mais la MD possède un petit Z80 avec 8Ko de réservé ... De quoi s'entrainer un peu.
Invité- Invité
Re: Papi Commando fait de ... L'assembleur 68000 !
Si tu veux faire un Papi Commando sur CPC, tu ferais mieux de te mettre à l'électronique
vingazole- Infirmier
- Nombre de messages : 4522
Age : 50
Localisation : Midian
Date d'inscription : 05/01/2012
Re: Papi Commando fait de ... L'assembleur 68000 !
Vetea:Ne commençons pas à parler de "the Best" machine, ca va partir en vrille ... ... entre Touko et son A ... AM ... machin, toi et ton A ... AM .. bidule .. (tiens c'est pareil ?... ) ... ca va partir en sucette ..
Quand tu maitriseras le 68k, tu pourras apprendre le Z80, c'est toujours plus simple d'aborder un assembleur quand t'en connais au moins déjà un ...
Quand tu maitriseras le 68k, tu pourras apprendre le Z80, c'est toujours plus simple d'aborder un assembleur quand t'en connais au moins déjà un ...
tfdi- Patient contaminé
- Nombre de messages : 550
Age : 52
Date d'inscription : 19/10/2010
Re: Papi Commando fait de ... L'assembleur 68000 !
Pfff dés que tu parles Z80 (aka CPU qui sert à rien), t'as toute la clique (sms et consort )qui rapplique
Avec le ST même la boite est plus puissante que la machine . (bon c'est pas le topic pour troller là) .
EDIT: le doc tu devrais faire un petit ntp date sur ton serveur, parce que là il est à l'heure ousbèque .
Mauvaise langueVetea:Ne commençons pas à parler de "the Best" machine, ca va partir en vrille ... ... entre Touko et son A ... AM ... machin, toi et ton A ... AM .. bidule .. (tiens c'est pareil ?... ) ... ca va partir en sucette ..
Avec le ST même la boite est plus puissante que la machine . (bon c'est pas le topic pour troller là) .
EDIT: le doc tu devrais faire un petit ntp date sur ton serveur, parce que là il est à l'heure ousbèque .
Dernière édition par TOUKO le Lun 4 Juil 2016 - 19:01, édité 1 fois
Invité- Invité
Re: Papi Commando fait de ... L'assembleur 68000 !
@Vingazole : je bosse dans l'électronique.
Le CPC, c'est mon amour d'enfance ... Alors que la première machine sur laquelle j'ai vraiment pratiqué ( pendant les congés de Noël 1985 ), ce fut le Macintosh de mon père ...
Ahhhh quel putain de pied de découvrir ce monstre sacré de Jobs à 13 ans !! J'vous dit pas le cri que j'ai poussé quand mon père m'avait fait la surprise.
Le CPC, c'est mon amour d'enfance ... Alors que la première machine sur laquelle j'ai vraiment pratiqué ( pendant les congés de Noël 1985 ), ce fut le Macintosh de mon père ...
Ahhhh quel putain de pied de découvrir ce monstre sacré de Jobs à 13 ans !! J'vous dit pas le cri que j'ai poussé quand mon père m'avait fait la surprise.
Invité- Invité
Re: Papi Commando fait de ... L'assembleur 68000 !
TOUKO a écrit:EDIT: le doc tu devrais faire un petit ntp date sur ton serveur, parce que là il est à l'heure ousbèque .
Je me suis dit la même chose y a 2 jours ... .. mais en fait ca vient du forum, il faut régler ton profil en UTC+2 ....
tfdi- Patient contaminé
- Nombre de messages : 550
Age : 52
Date d'inscription : 19/10/2010
Re: Papi Commando fait de ... L'assembleur 68000 !
Oui en changeant de fuseau dans le profil ,on retrouve ses billes, mais bon le serveur(ou le forum) lui est pas sur le bon fuseau ..
Mais bon c'est bon je retrouve à nouveau une heure normale sur les posts
Mais bon c'est bon je retrouve à nouveau une heure normale sur les posts
Invité- Invité
Re: Papi Commando fait de ... L'assembleur 68000 !
tfdi a écrit:Oui c'est ça ... cherche pas.
Il faut alors taper en dur dans la Ram, en partant de $FF0000, et "réserver" manuellement chaque octet.
Bonjour le système de mer** .....
Ca ne concerne par contre que les variables dans lesquelles tu vas ecrire des données, pas les autres. Il vaut mieux que tu fasses alors une "table" de variables, genre :
var1 equ $ff0000 ; 2 octets
var2 equ $ff0002 ; 2 octets
buffer equ $ff0004 ; 8 octets
buffer equ $ff000c ; 2 octets
Attention aux adresses impaires !! .... les .W et les .L ne passeront pas, et t'auras un crash système avec une erreur de bus ...
Le truc bien chiant à gérer ...
Non c'est pas pire qu'autre chose si tu exploite bien l'asm.
Exemple sur AoF neo geo dont on a le source, tu as toutes les variables dans un fichier include work.inc (il appellent la ram CPU la work ram):
- Code:
************************************************************************
* *
* [[[ NOP ]]] WORK AREA *
* *
************************************************************************
COMMON WORK,,D
WORK_TOP:
; *** buffer etc. (100000H) ***
COLOR_BUFFER_0 DS.B 2000H
COLOR_BUFFER DS.B 2000H
BACK1_BUFFER DS.B 1000H
BACK2_BUFFER DS.B 1000H
BACK3_BUFFER DS.B 1000H
SOUND_BUFFER DS.B 100H
CARD_BUFFER DS.B 100H
TEXT_BUFFER DS.B 200H
RANDOM_BUFFER DS.B 100H
SORT_WORK DS.B 100H
ORDER_BUFFER DS.B 128*2
VPOS_BUFFER DS.W 180H
BACK_VRAM DS.W 64*2
CAL_MESS DS.B 100H
DS.B 1000H-(*-SOUND_BUFFER)
; *** system area (108000H) ***
A5_WORK DS.B 16
REG_D0 DS.B 4
REG_D1 DS.B 4
REG_D2 DS.B 4
REG_D3 DS.B 4
REG_D4 DS.B 4
REG_D5 DS.B 4
REG_D6 DS.B 4
REG_D7 DS.B 4
REG_A0 DS.B 4
REG_A1 DS.B 4
REG_A2 DS.B 4
REG_A3 DS.B 4
REG_A4 DS.B 4
REG_A5 DS.B 4
REG_A6 DS.B 4
REG_A7 DS.B 4
REG_STACK DS.B 4*16
MAIN_STEP DS.W 1 game main step
MAIN_STEP_STORE DS.W 1 game main step store
SUB_STEP DS.W 1 game sub step
SUB_STEP_STORE DS.W 1 game sub step store
SUB_SUB_STEP DS.W 1 spear step
STOP_STEP DS.W 1 game stop mode step
STOP_SUB_STEP DS.W 1 stop mode sub step
DS.W 1
LSPC_MODE_STORE DS.W 1 LSPC mode register output value
SOUND_CODE_W DS.W 1 send outer sound code
LSPC_TIMER1 DS.L 1
LSPC_TIMER2 DS.L 1
INT2_COUNT_BASE DS.W 1
INT2_COUNT DS.W 1
INT2_START DS.L 1
LSPC_MODE_STOP DS.W 1 LSPC mode register for pause
DS.B 100H-(*-A5_WORK)
STOPPER DS.B 1 1/60 sec wait stopper
LSPC_BUSY DS.B 1 LSPC access flag
START_FLAG2 DS.B 1 game start flag
FIRST_START DS.B 1 game start time
SD_IN_POINT DS.B 1 sound code input pointer
SD_OUT_POINT DS.B 1 sound code output pointer
RANDOM_SEED DS.B 1 system randomlist seed
MAKE_RANDOM DS.B 1 random make pointer
READ_RANDOM DS.B 1 random read pointer
ERROR_LEVER DS.B 1 system lever off
SECOND_VALUE DS.B 1 1sec v-int count
TEMP_ORDER DS.B 1 use order buffer number
TEMP_SPG DS.B 1
SPG_MODE DS.B 1
MASTER_LWORK DS.B 8 step master LWORK No
HIT_JUDGE_COUNT DS.B 2
PG_NUMBER DS.B 16
PAUSE_DI DS.B 1 !=0 pause disable
SOUND_TEST_CODE DS.B 2
TEST_PALETTE DS.B 2
TEST_COLOR DS.B 2
TEST_PG DS.B 2
TEST_R DS.B 2
TEST_G DS.B 2
TEST_B DS.B 2
STC20 DS.B 3
STC21 DS.B 3
DS.B 80H-(*-STOPPER)
RANDOM_COUNT DS.W 1 random make
MAIN_COUNT DS.L 1
INT1_COUNT DS.L 1
BGM_CODE DS.W 1 playing BGM code keep
COLOR_STATE DS.W 1
COLOR_FLAG DS.W 1
COLOR_TIMER DS.W 1
PAUSE_BUFFER DS.W 5
DS.B 80H-(*-RANDOM_COUNT)
;
; *** for sprite display ***
;
BACK_INFO DS.L 1
PAL_IND_INFO DS.L 1 nop tool infomation
PALETTE_INFO DS.L 1
OBJT_INFO DS.L 1
WINDOW_X DS.L 1
WINDOW_Y DS.L 1
OBJ_DIV_POINT DS.L 1
OBJ1_MAP DS.B 8
OBJ2_MAP DS.B 8
OBJ3_MAP DS.B 8
OBJ4_MAP DS.B 8
OBJ_START EQU 0
OBJ_SIZE EQU 2
OBJ_USE EQU 4
DB_TYPE EQU 6
TEMP_SPRITE DS.W 1
MAX_SPRITE DS.W 1
START_V_ADRS DS.W 1
START_V_VALUE DS.W 1
TEMP_BIG_X DS.W 1
TEMP_BIG_Y DS.W 1
TEMP_BIG_VALUE DS.W 1
TEMP_BIG_BIT DS.L 1
TEMP_PAL_COM DS.W 1
H_FLIP_FLAG DS.W 1
ERACE_CHARA DS.W 1
ERACE_16 DS.W 1
VPOS_POINT DS.L 1
CONV_TYPE DS.W 1
CONV_MARK DS.L 1
MASTER_PWORK DS.L 1
ACTION_STACK DS.L 1
TEMP_PAL_COM2 DS.W 1
TEMP_CONV_START DS.W 1
USE_COUNT DS.W 1
OBJ_MAP_POINT DS.L 1
DS.B 100H-(*-BACK_INFO)
MESS_OUT_POINT DS.L 1
MESS_COM_MODE DS.L 1
MESS_DATA_POINT DS.W 1
DS.B 400H-(*-A5_WORK)
;
; *** game original work ***
;
AREA_No DS.W 1
ROUND_No DS.W 1
MAX_ROUND DS.W 1
STAGE_TIME DS.W 1
WIN_PLAYER DS.L 1
WINNER_ROUND DS.W 1
SELECT_PLAYER DS.W 1 <**************
SEL_TIMER DS.W 1 <**************
SEL_CURSOLE1 DS.W 1
SEL_CURSOLE2 DS.W 1
MIN_DISTANCE DS.W 1
TEMP_DISTANCE DS.W 1
TEMP_DISTANCE2 DS.W 1
ACT_CHECK_MODE DS.W 1
PLAYING_TYPE DS.W 1
PHASE DS.W 1 game phase
HOME_CREDIT DS.W 1
DISP_CREDIT DS.W 1 for credit disp
STORY_PLAYER DS.W 1 story mode player
STORY_STAGE DS.W 1 story mode stage No
LEVEL_ORG DS.W 1 original level
LEVEL_ADD DS.W 1 level addition
LEVEL_TEMP DS.W 1 temp level
INSERT_POS DS.W 1 insert ... DISPLAY POSITION
FLAME_POS DS.W 1
FLAME_TYPE DS.W 1
FLAME_COUNT DS.W 1
FLAME_END DS.W 1
BONUS_No DS.W 1
BONUS_HERO DS.W 1
KING_MUNE DS.W 1
OLD_VS DS.W 1
ROUND_DISP_No DS.W 1
ATTACK_MUL DS.W 1
BONUS_RANK DS.W 1
HAOH_USE DS.W 1
BONUS3_NORMA DS.W 1
BONUS3_USE DS.W 1
SCORE_LIFE DS.L 1
SCORE_TIME DS.L 1
SCORE_PER DS.L 1
SCORE_TOTAL DS.L 1
ST_TD_RANK DS.W 1
ST_TL_RANK DS.W 1
VS_TD_RANK DS.W 1
VS_TL_RANK DS.W 1
NAMING_PLAYER DS.L 1
ST_IN_RANK DS.W 1
VS_IN_RANK DS.W 1
NAME_NAME_POS DS.W 1
BACK2_ST_BIG DS.W 1
ST_DEMO_MESSP DS.W 1
SELC_MODE DS.W 1
HOW_SPA_No DS.W 1
DS.B 700H-(*-A5_WORK)
LANGUAGE DS.B 1
NEXT_AREA_F DS.B 1
DEMO_OVER_FLAG DS.B 1
DRAW_FLAG DS.B 1
STAGE_END_FLAG DS.B 1
DEMO_FLAG DS.B 1
LP_MAIN_RUN DS.B 1
NON_CTRL DS.B 1
LANGUAGE_SD DS.B 1
MAKE_DEMO_CUT DS.B 1
STORY_LIFE DS.B 1
STORY_SPIRIT DS.B 1
IN_BONUS DS.B 1
BONUS_DI DS.B 1
BONUS_STATE_ON DS.B 1
BONUS_WIN DS.B 1
BONUS_TIMER DS.B 1
SLOW_CUT DS.B 1
HOW_TO_FLAG DS.B 1
ST_DEMO_ON DS.B 1
ST_BACK_FLAG DS.B 1
ST_DEMO_IN DS.B 1
TIME_UP_TIMER DS.B 1
DS.B 800H-(*-A5_WORK)
; *** backup area (108800H) ***
DEBUG_DIP1 DS.B 1
DEBUG_DIP2 DS.B 1
VERSION DS.W 1
COIN_COUNT DS.W 1 coin sound counter
DEMO_NUMBER DS.B 1
HOW_MESS_No DS.B 1
TODAY DS.L 1
HI_SCORE DS.L 1
RANK_TL_S DS.B 8*5
RANK_TD_S DS.B 8*5
RANK_TD_V DS.B 8*5
RANK_TL_V DS.B 8*5
DS.B 800H-(*-DEBUG_DIP1)
; *** logical & physical work (109000H) ***
PWORK_START:
PWORK10 DS.B 80H
LWORK_START:
LWORK11 DS.B 80H
DS.B 100H*(96-1)
PLAYER1 EQU LWORK11+0000H
PLAYER2 EQU LWORK11+0100H
HERO1 EQU LWORK11+0200H
HERO2 EQU LWORK11+0300H
HERO1S EQU LWORK11+0400H
HERO2S EQU LWORK11+0500H
BACK1 EQU LWORK11+0600H
BACK2 EQU LWORK11+0700H
TEXT1 EQU LWORK11+0800H
TEXT2 EQU LWORK11+0900H
RESERV1 EQU LWORK11+0A00H
RESERV2 EQU LWORK11+0B00H
RESERV3 EQU LWORK11+0C00H
RESERV4 EQU LWORK11+0D00H
RESERV5 EQU LWORK11+0E00H
RESERV6 EQU LWORK11+0F00H
MLWORK1 EQU RESERV5
MLWORK2 EQU RESERV6
HERO1_OBJ_START EQU (10H+0)*100H
HERO2_OBJ_START EQU (10H+10H)*100H
FREE_OBJ_START EQU (10H+20H)*100H
; *** flag buffer (10F000H) ***
BIT_FLAG DS.B 100H
BYTE_FLAG DS.B 100H
DS.B 0F300H-(*-WORK_TOP)
;
; *** NEO-GEO system work (10F300H) ***
;
SSP_END: ;supervisor stack
DS.B 900H
DS.B 180H
SYS_WORK0:
; user read area
SYSTEM_MODE DS.W 1 system working mode
MVS_FLAG DS.B 1 consumer or M.V.S
COUNTRY_CODE DS.B 1
GAME_DIP DS.B 16
INPUT_1 DS.B 6 I/O input value for player 1
; +0 controller type 0=non connect
; 1=nomal controller
; 2=expander
; 3=marjang
; 4=key board
; +1 before 1/60 sec real value (positive)
; +2 real value (positive)
; +3 edge (positiove)
; +4 edge or auto repeat (8/60 sec)
; +5 key repeat timer
INPUT_2 DS.B 6 I/O input value for player 2
INPUT_3 DS.B 6 I/O input value for player 3
INPUT_4 DS.B 6 I/O input value for player 4
INPUT_S DS.B 2 start & select button
; +0 real value (positive)
; +1 edge (positiove)
; bit (N-1)*2 player N start
; but (N-1)*2+1 player N select
USER_REQUEST DS.B 1 request code for user by system
; 0 power on initialize
; 1 eye catch
; 2 demo,game
USER_MODE DS.B 1 user job mode
; 0 power on initialize or eye catch
; 1 demo
; 2 in game
CREDIT_DEC DS.L 1 credit decrement number P1-P4 (BCD)
START_FLAG DS.W 1 player addtioin request or answer flag
PLAYER_MODE DS.B 8 player condition
; 0 not start
; 1 in game
; 2 continue time
; 3 game over
MESS_POINT DS.L 1 message buffer pointer
MESS_BUSY DS.W 1 message buffer busy flag
CARD_COMMAND DS.B 1 IC card acces command
CARD_MODE DS.B 1 IC card command error job mode
CARD_ANSWER DS.W 1 IC card command answer back
CARD_START DS.L 1 IC card buffer start address
CARD_SIZE DS.W 1 IC card buffer size
CARD_FCB DS.W 1 IC card FCB
CARD_SUB DS.W 1 IC card file sub No
DATE_TIME DS.B 8 presnt date & time
SELECT_TIMER DS.W 1
DS.W 1 START_TEST
DS.W 1 COIN_LEVER
DS.B 80H-(*-SYS_WORK0)
SYS_WORK1:
CREDIT DS.B 4
DS.L 1 SWITCH_STORE
DS.B 8 UNDER_CREDIT
DS.W 1 COIN1_CRD_NOR
DS.W 1 COIN2_CRD_NOR
DS.W 1 COIN1_CRD_CNT
DS.W 1 COIN2_CRD_CNT
DS.B 1 SELECT_FREE
DS.B 1 NON_LIMIT
DS.W 1 SELECT_LIMIT
DS.B 1 DEMO_SOUND
DS.B 1
DS.W 1 INIT_MARK
DS.W 1 SR_STORE
DS.L 1 VERSION_BASE
DS.B 2*16 GD_STORE
DS.B 80H-(*-SYS_WORK1)
SYS_WORK2:
POWER_ON_ID DS.B 8 power on id-code
SYS_INT1_TIMER DS.L 1 int 1 counter
SYS_STOPPER DS.B 1 system stopper
DS.B 1 Z80_BANK
DS.W 1 SYSTEM_MODE2
DS.W 1 CARD_TIMER
DS.L 1 CARD_START2
DS.W 1 CARD_SIZE2
DS.W 1 CARD_FCB2
DS.W 1 CARD_SUB2
DS.B 20 DIR_BUFFER
DS.W 5 DIR_NUMBER
DS.B 1 FIX_STORE_FLAG
DS.B 1 LED_OFF
DS.B 1 IN_TEST
DS.B 1 INST_MODE
DS.B 1 START_BUSY
DS.B 1 BACKUP_MODE
DS.L 1 INST_RAD
DS.B 1 INST_RCO
DS.B 1 TITLE_MODE
MESS_STACK DS.L 5
DS.B 1
DS.B 1
INPUT_SS DS.B 2
DS.B 2 INPUT_TT
DS.B 1 KYOUSEI_MODE
DS.B 1 SYS_STOP
DS.B 1 CS_REMAIN
DS.B 1 INT_OFF
DS.W 1 INT1_TIMER2
DS.B 1 MAJ_NOR
DS.B 1
INPUT_5 DS.B 6
INPUT_6 DS.B 6
DS.B 80H-(*-SYS_WORK2)
MESS_BUFFER DS.B 100H system message buffer
Ensuite l'astuce c'est de reserver un registre (A5) qui pointe sur A5_WORK judicieusement placé pile au milieu de la ram. Tu peux ensuite accéder à tout avec des BIDULE(A5).
La ram étant de 64Ko tout les deplacements sont en word et tu gagnes 4 cycles à chaque accès.
Hpman- Patient contaminé
- Nombre de messages : 679
Age : 47
Localisation : Lille
Date d'inscription : 22/08/2014
Re: Papi Commando fait de ... L'assembleur 68000 !
hpman:Oui évidemment, pas bien compliqué d'utiliser des labels dans un fichier, et de positionner un label pile au milieu des 64k pour rester sur un adressage en word et gagner 4 cycles, quand tu sais programmer en asm. Pas besoin de voir des sources pour penser à ça ... :)
Mais c'est pas le genre de chose auquel pensera un débutant, et c'est le style de truc qui rebutera encore plus un débutant, il n'y a qu'à voir le problème rencontré par Vetea.
Je disais que c'était chiant sous entendu quand tu débutes en asm, parce que justement quand tu débutes, ben tu n'exploites pas bien l'asm, c'est bien là la difficulté.
Mais c'est pas le genre de chose auquel pensera un débutant, et c'est le style de truc qui rebutera encore plus un débutant, il n'y a qu'à voir le problème rencontré par Vetea.
Je disais que c'était chiant sous entendu quand tu débutes en asm, parce que justement quand tu débutes, ben tu n'exploites pas bien l'asm, c'est bien là la difficulté.
tfdi- Patient contaminé
- Nombre de messages : 550
Age : 52
Date d'inscription : 19/10/2010
Re: Papi Commando fait de ... L'assembleur 68000 !
Tfdi a bien résumé ...
Je débute !
Alors mettez vous à la place d'un mec qui débute de ZERO avant toute chose. Merci.
Je débute !
Alors mettez vous à la place d'un mec qui débute de ZERO avant toute chose. Merci.
Invité- Invité
Re: Papi Commando fait de ... L'assembleur 68000 !
Bon, à peine arrivé chez moi, j'ai voulu tester direct les pistes soulevées durant nos discussions de l'après midi ...
CA MARCHE !!
Dans le fichier Variables.ASM ou je déclare mes variables principales, j'ai donc mise en place ma variable Buffer :
J'ai pris l'adresse de début $FF0000 ( à la base, c'est une type LONG sur 32 bits. )
Et ensuite, je lui associe un registre d'adresse a0 ...
Et après, on la routine principale :
Et roule ma poule !!
J'ai viré le "adda #8,a0" ainsi que le code d'origine pour un système "basique".
Mais merci de m'avoir fait découvrir un nouvel OPcode Tfdi !
J'imagine qu'avec "adda", on pourra faire des sauts dans un registre d'adresse pour déclarer des variables dans un tableau, ou un truc du genre.
Il me vient une autre question.
Je me retrouve dans mes deux routines d'écriture de texte, une "redondance" du code avec la routine de positionnement de Tile :
En Basic, on créer une procédure ou une fonction pour ce genre de chose ..
En ASM on peut aussi faire la même chose, mais cela a un cout en cycle ( l'appel BSR ou JSR puis le RTS ... )
Alors vaut il mieux réécrire ces même portions de code quitte à les recopier et rendre un code lourdingue, ou utiliser un système en mettant sous forme de "Procédure" ou "fonction" afin d'avoir un code plus lisible, clair et mieux construit ( ma philosophie personnellement ... )
Merci en tout cas de votre aide ! :)
CA MARCHE !!
Dans le fichier Variables.ASM ou je déclare mes variables principales, j'ai donc mise en place ma variable Buffer :
- Code:
;************************************
;*** Variables globales du projet ***
;************************************
- Code:
VDPControlPort: equ $C00004
VDPData: equ $C00000
WriteVDPTile: equ $40000000
WritePlaneA: equ $40000003
AdresseVRAM: equ $20
Buffer: equ $FF0000
J'ai pris l'adresse de début $FF0000 ( à la base, c'est une type LONG sur 32 bits. )
Et ensuite, je lui associe un registre d'adresse a0 ...
- Code:
;Chaine Alpha : On va compter le nombre de caractères à l'écran ! Registre de donnée d5.
lea Buffer,a0
moveq #1,d1
moveq #23,d3
moveq #1,d4
move.w #$0,d2
bsr WriteTextAlpha
Et après, on la routine principale :
- Code:
;///// Routine d'écriture de chaine alphanumérique //////
WriteTextAlpha:
move.l #WritePlaneA,d0
lsl.w #6,d1
add.w d3, d1
lsl.w #1,d1
swap d1
add.l d1,d0
move.l d0,(a5)
moveq #0,d1
conversion:
addi.w #1,d1 ;On compte le nombre de digits.
divu #10,d5 ;On divise par 10
swap d5 ;On va récupérer l'essentiel.
move.b d5,(a0)+ ;On le stocke dans la pile.
clr.w d5 ;On efface le résultat
swap d5 ;On récupère le résultat.
bne.s conversion ;On recommence jusqu'à la fin de la conversion.
subi.b #1,d1 ;On décrémente de 1 notre compteur.
Dec:
move.b -(a0),d5 ;On récupère le résultat de notre pile.
addi.b #16,d5 ;On associe d0 avec le Mapping VRAM ( Soit Contenu d5 + #16)
add.w d2,d5 ;On additionne son contenu avec d2, notre Mot de commande VDP.
move.w d5,(a6) ;On envoie le bazard au VDP
dbra d1,Dec ;... Jusqu'à la fin de notre digit.
Fini:
rts
Et roule ma poule !!
J'ai viré le "adda #8,a0" ainsi que le code d'origine pour un système "basique".
Mais merci de m'avoir fait découvrir un nouvel OPcode Tfdi !
J'imagine qu'avec "adda", on pourra faire des sauts dans un registre d'adresse pour déclarer des variables dans un tableau, ou un truc du genre.
Il me vient une autre question.
Je me retrouve dans mes deux routines d'écriture de texte, une "redondance" du code avec la routine de positionnement de Tile :
- Code:
move.l #WritePlaneA,d0
lsl.w #6,d1
add.w d3, d1
lsl.w #1,d1
swap d1
add.l d1,d0
move.l d0,(a5)
moveq #0,d1
En Basic, on créer une procédure ou une fonction pour ce genre de chose ..
En ASM on peut aussi faire la même chose, mais cela a un cout en cycle ( l'appel BSR ou JSR puis le RTS ... )
Alors vaut il mieux réécrire ces même portions de code quitte à les recopier et rendre un code lourdingue, ou utiliser un système en mettant sous forme de "Procédure" ou "fonction" afin d'avoir un code plus lisible, clair et mieux construit ( ma philosophie personnellement ... )
Merci en tout cas de votre aide ! :)
Invité- Invité
Re: Papi Commando fait de ... L'assembleur 68000 !
Tout dépend de ton programme dans sa globalité, certaines optimisations dépendent du contexte.
Tu vas tourner une condition dans un sens ou l'autre selon le sens le plus souvent emprunté.
En ce qui concerne les fonctions, c'est bien plus pratique à maintenir, et à mois d'appeler l'affichage de texte beaucoup de fois à chaque frame ça ne devrais pas changer grand chose globalement.
De toutes façons si tu veux vraiment optimiser une routine d'affichage de score, tu calcules pas l'adresse, vu que tu sais ou tu vas l'afficher.
Sinon en calculant comme ça:
Tu vas tourner une condition dans un sens ou l'autre selon le sens le plus souvent emprunté.
En ce qui concerne les fonctions, c'est bien plus pratique à maintenir, et à mois d'appeler l'affichage de texte beaucoup de fois à chaque frame ça ne devrais pas changer grand chose globalement.
De toutes façons si tu veux vraiment optimiser une routine d'affichage de score, tu calcules pas l'adresse, vu que tu sais ou tu vas l'afficher.
Sinon en calculant comme ça:
- Code:
lsl.w #7, d1
add.w d3, d1
add.w d3, d1
Hpman- Patient contaminé
- Nombre de messages : 679
Age : 47
Localisation : Lille
Date d'inscription : 22/08/2014
Re: Papi Commando fait de ... L'assembleur 68000 !
Je passe rapidement pour tenter de répondre au soucis rencontré sur la déclaration des variables...
En fait normalement il faut déclarer les sections dans lesquelles tu travailles à ton assembleur.
Si tu utilises directement les adresses absolues comme 0xFF0000, 0xFF0002... ça signifie que tu devras gérer toute ton allocation RAM de cette manière (et impossible à mixer avec du code C donc full asm obligé).
Normalement une manière plus élégante c'est de définir le memory map avec des sections .rodata (read only data = rom), .bss (uninitialized data = ram), .data (initialized data = ram)
Si tu veux mettre tes variables en ram tu mets donc :
et ensuite
Le truc c'est que j'ai aucune idée de comment ton assembleur gère ça, où tu définis ton memory map (dans GCC il y a un fichier .ld pour ça)... peut être que tu n'as pas le choix et doit directement référencé en absolue tes variables mais ça me parait pas génial :-/
En fait normalement il faut déclarer les sections dans lesquelles tu travailles à ton assembleur.
Si tu utilises directement les adresses absolues comme 0xFF0000, 0xFF0002... ça signifie que tu devras gérer toute ton allocation RAM de cette manière (et impossible à mixer avec du code C donc full asm obligé).
Normalement une manière plus élégante c'est de définir le memory map avec des sections .rodata (read only data = rom), .bss (uninitialized data = ram), .data (initialized data = ram)
Si tu veux mettre tes variables en ram tu mets donc :
- Code:
section .bss
var_byte db 0
var_word dw 0
...
et ensuite
- Code:
section .rodata
lea var_word, a0
....
Le truc c'est que j'ai aucune idée de comment ton assembleur gère ça, où tu définis ton memory map (dans GCC il y a un fichier .ld pour ça)... peut être que tu n'as pas le choix et doit directement référencé en absolue tes variables mais ça me parait pas génial :-/
Stef- Interne
- Nombre de messages : 5087
Age : 45
Localisation : Sevres
Date d'inscription : 04/04/2007
Re: Papi Commando fait de ... L'assembleur 68000 !
Merci Stef.
Pas de soucis, pour ce que j'ai a faire, ça va aller.
Je vais développer un utilitaire pour ça, ça va le faire.
Je sais quoi faire maintenant.
A bientôt.
Pas de soucis, pour ce que j'ai a faire, ça va aller.
Je vais développer un utilitaire pour ça, ça va le faire.
Je sais quoi faire maintenant.
A bientôt.
Invité- Invité
Re: Papi Commando fait de ... L'assembleur 68000 !
Stef:Je suis aussi sceptique sur le fait qu'on ne puisse pas "simplement" déclarer la section bss pour que l'asm le prenne directement en charge.
Vetea:
Sinon pour info, t'utilise quoi pour compiler ton code asm et le passer en .bin, je ne me souviens pas ?
Vetea:
Sinon pour info, t'utilise quoi pour compiler ton code asm et le passer en .bin, je ne me souviens pas ?
tfdi- Patient contaminé
- Nombre de messages : 550
Age : 52
Date d'inscription : 19/10/2010
Re: Papi Commando fait de ... L'assembleur 68000 !
Pour compiler le code, j'utilise : ASM68K
Super simple à utiliser ! Pour créer un .Bin -> Asm68K Main.asm,Main.Bin
Super simple à utiliser ! Pour créer un .Bin -> Asm68K Main.asm,Main.Bin
Invité- Invité
Re: Papi Commando fait de ... L'assembleur 68000 !
Je te l'avais dit que c'était un bug merdeuxMerci en tout cas de votre aide ! :)
Et tu crois que le basic il fait comment ??En Basic, on créer une procédure ou une fonction pour ce genre de chose ..
En ASM on peut aussi faire la même chose, mais cela a un cout en cycle ( l'appel BSR ou JSR puis le RTS ... )
Il utilise aussi du BSR/JSR !!
N'oublies pas que le basic,le C ou peu importe le langage de haut niveau, va te créer un fichier ASM d'abord, puis un bin .
C'est clairTu gagnes 2 cycles. C'est Byzance
Invité- Invité
Re: Papi Commando fait de ... L'assembleur 68000 !
Merci Touko ! :)
Oui je me doute que cela se passe comme ça en "interne" maintenant que tout devient un peu plus clair !
Prochaine étape :
- Charger un/des Sprite(s) en VRAM.
- Le(s) déclarer au VDP.
- Le(s) afficher.
- Gérer leur déplacement avec un PAD.
- Gestion d'une boucle principale.
- Gestion des interruptions & Vblank/Hblank.
Putain, si j'arrive à faire tout ça, j'aurai les premières bases pour réaliser un semblant de jeu en full ASM.
Oui je me doute que cela se passe comme ça en "interne" maintenant que tout devient un peu plus clair !
Prochaine étape :
- Charger un/des Sprite(s) en VRAM.
- Le(s) déclarer au VDP.
- Le(s) afficher.
- Gérer leur déplacement avec un PAD.
- Gestion d'une boucle principale.
- Gestion des interruptions & Vblank/Hblank.
Putain, si j'arrive à faire tout ça, j'aurai les premières bases pour réaliser un semblant de jeu en full ASM.
Invité- Invité
Re: Papi Commando fait de ... L'assembleur 68000 !
Bah oui ça vient, forcement BeX faisait le plus gros du job pour toi, là faut vraiment savoir comment marche la console, une fois que son archi est en tête ça ira bcp plus vite et surtout avec moins d'erreurs .
le vblank c'est juste un bit à tester sur le reg de contrôle du VDP .
Sur Md pour commencer, oublies le hblank, c'est peu utile vu que la hscroll table est là pour ça .- Gestion des interruptions & Vblank/Hblank.
le vblank c'est juste un bit à tester sur le reg de contrôle du VDP .
Invité- Invité
Re: Papi Commando fait de ... L'assembleur 68000 !
... et merci pour la petite optimisation :
lsl.w #7, d1
add.w d3, d1
add.w d3, d1
En effet, c'était tout con, mais il fallait y penser.
lsl.w #7, d1
add.w d3, d1
add.w d3, d1
En effet, c'était tout con, mais il fallait y penser.
Invité- Invité
Re: Papi Commando fait de ... L'assembleur 68000 !
D'après les infos trouvées là :
http://birg.cs.wright.edu/ceg320/simulator/help_page.shtml
Le link.exe génère un map file pour la section bss, en indiquant ou va être situé cette section en mémoire, ça rejoint ce que disais Stef. Il faut regarder ce qu'il y a dans ce map file, et éventuellement le modifier ?
http://birg.cs.wright.edu/ceg320/simulator/help_page.shtml
- Code:
SECTIONS:
SECTION name,type
; Defines a relocatable section of code or data.
The type can be: CODE
DATA
BSS ; uninitialized external data section
; The LINK.EXE program will generate a map file that shows were the
sections are located in memory.
XDEF symbol1,symbol2,.......
; Defines symbols that can be used outside of the current section (global).
XREF symbol1,symobl2,......
; Allows the section to access the specified symbols that are defined
outside of the current section.
Le link.exe génère un map file pour la section bss, en indiquant ou va être situé cette section en mémoire, ça rejoint ce que disais Stef. Il faut regarder ce qu'il y a dans ce map file, et éventuellement le modifier ?
tfdi- Patient contaminé
- Nombre de messages : 550
Age : 52
Date d'inscription : 19/10/2010
Re: Papi Commando fait de ... L'assembleur 68000 !
Et voila, j'ai crée un petit vaisseau spatial tout bête pour ma future démo de la mort qui tue !
Rien de bien folichon .. Un sprite de base et son ombre de 16x16.
J'utilise Sega Genesis Tile Designer, qui est une sorte de Paint Simplifié qui permet ensuite de sortir sous forme de Code les Assets ( divers langages sont supportés : C, Basic, Assembleur ... Top cool comme outil !! ). Je l'utilise très souvent.
Je me demande même si, par la suite en ASM, je ne pourrai pas déduire l'ombre du sprite directement en faisant un masque ou une astuce du genre ... Bref, on verra ça en temps voulu !
C'est le genre de truc qui me fait avancer ... D'abord créer quelques assets, réfléchir à la manière tout en les créant, emmagasiner des idées et de l'énergie pour ensuite passer au code.
Un code sans assets c'est un peu comme regarder Maria Whittaker en doudoune quoi ... Quoique.
Bon l'épreuve suivante, simple, charger les assets à la suite des Tileset de ma police principale. Je ne veux aucun gaspillage de ma VRAM, comme je le fais habituellement sous Bex.
A bientôt.
Rien de bien folichon .. Un sprite de base et son ombre de 16x16.
J'utilise Sega Genesis Tile Designer, qui est une sorte de Paint Simplifié qui permet ensuite de sortir sous forme de Code les Assets ( divers langages sont supportés : C, Basic, Assembleur ... Top cool comme outil !! ). Je l'utilise très souvent.
Je me demande même si, par la suite en ASM, je ne pourrai pas déduire l'ombre du sprite directement en faisant un masque ou une astuce du genre ... Bref, on verra ça en temps voulu !
C'est le genre de truc qui me fait avancer ... D'abord créer quelques assets, réfléchir à la manière tout en les créant, emmagasiner des idées et de l'énergie pour ensuite passer au code.
Un code sans assets c'est un peu comme regarder Maria Whittaker en doudoune quoi ... Quoique.
Bon l'épreuve suivante, simple, charger les assets à la suite des Tileset de ma police principale. Je ne veux aucun gaspillage de ma VRAM, comme je le fais habituellement sous Bex.
A bientôt.
Invité- Invité
Re: Papi Commando fait de ... L'assembleur 68000 !
J'ai trouvé ça, si ça peut t'aider:
http://www.mactech.com/articles/mactech/Vol.08/08.02/Efficient68000/index.html
http://www.mactech.com/articles/mactech/Vol.08/08.02/Efficient68000/index.html
Invité- Invité
Re: Papi Commando fait de ... L'assembleur 68000 !
Il est mignon ce petit vaisseau
(et bravo pour ton courage vetea avec l'assembleur !)
(et bravo pour ton courage vetea avec l'assembleur !)
Page 8 sur 9 • 1, 2, 3, 4, 5, 6, 7, 8, 9
Sujets similaires
» [VDS] Papi commando megadrive :)
» Super Papi Commando
» [SMS] Papi Commando In CPP Land
» Papi Commando - Arcade edition !
» Papi Commando sur Amstrad CPC+ / GX4000 !
» Super Papi Commando
» [SMS] Papi Commando In CPP Land
» Papi Commando - Arcade edition !
» Papi Commando sur Amstrad CPC+ / GX4000 !
Page 8 sur 9
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum