Derniers sujets
» KRYSTAL WORLD 2
Aujourd'hui à 8:40 par Dom50

» Lecteur de sdcard (FAT32) et clé usb (FAT)
Aujourd'hui à 8:20 par Jede

» SDCARD/usb card reader : Liste de suivi des demandes
Mar 20 Juin 2017 - 13:52 par Jede

» Oric Atmos : problème de son
Mer 14 Juin 2017 - 6:49 par kenneth

» CEO-MAG 326
Lun 12 Juin 2017 - 20:00 par Symoon

» recherche de solution "Fantasy quest"
Lun 12 Juin 2017 - 15:43 par Invité

» Oric et lecteur SD Card
Ven 9 Juin 2017 - 6:33 par didierv

» visu Oricienne juin 2017
Dim 4 Juin 2017 - 7:58 par didierv

» Rubrique Librairie - Livre "Extensions pour Oric"
Lun 29 Mai 2017 - 13:17 par Jede

» CEO MAG 325
Jeu 25 Mai 2017 - 8:15 par Symoon

Qui est en ligne ?
Il y a en tout 1 utilisateur en ligne :: 0 Enregistré, 0 Invisible et 1 Invité

Aucun

Le record du nombre d'utilisateurs en ligne est de 29 le Mer 25 Fév 2015 - 14:01
Connexion

Récupérer mon mot de passe

Statistiques
Nous avons 120 membres enregistrés
L'utilisateur enregistré le plus récent est fbenard

Nos membres ont posté un total de 5381 messages dans 384 sujets
Portail ORIC




Calcul en langage machine [RESOLU]

Voir le sujet précédent Voir le sujet suivant Aller en bas

Calcul en langage machine [RESOLU]

Message  Sheld67 le Dim 15 Mar 2015 - 21:59

Salut la Communauté,

Pour les besoins d'un nouveau jeu en langage machine, je cherche le moyen de réaliser la division de deux entiers.

J'ai vainement tenté la programmation suivante:
lda #200
jsr $DF24 ; A --> ACC1
jsr $DEE8 ; ACC1 --> ACC2
lda 01 ; contient 1, 2, 4  ou 8 (selon le niveau choisi pour le jeu)
jsr $DF24
jsr $DDE7 ; ACC2/ACC1 --> ACC1
jsr $D922 ; ACC1 --> YA
sty 03 ; contient la valeur 'n' qui sert lors de la boucle d'attente principale du jeu (plus le niveau de jeu est élevé, plus la valeur 'n' est faible et plus le jeu est rapide).

Ce programme me retourne un ?ILLEGAL QUANTITY ERROR et refuse de placer le moindre résultat en 03.

Où ai-je fauté ?


Dernière édition par Sheld67 le Sam 30 Mai 2015 - 11:22, édité 1 fois
avatar
Sheld67

Messages : 40
Date d'inscription : 06/04/2014

Revenir en haut Aller en bas

Re: Calcul en langage machine [RESOLU]

Message  Dom50 le Lun 16 Mar 2015 - 8:24

bonjour,

Tu utilises un système sous Sedoric ?
Si c'est le cas, il faut faire attention de bien apeller les routines en ROM et non les routines Sedoric en RAM overlay.

Sinon, pour diviser un nombre inférieur à 255 par 2, 4 ou 8. Il y a plus simple et plus rapide.
Il suffit de décaler les bits vers la droite autant de fois que la puissance de 2 par laquelle on souhaite diviser Very Happy

LDA 02 (si 02 contient tempo maxi)
LSR
STA 03      divise par 2

LDA 02
LSR
LSR          divise par 4
STA 03

LDA 02
LSR
LSR
LSR         divise par 8
STA 03
avatar
Dom50

Messages : 632
Date d'inscription : 06/12/2012
Localisation : Normandie

Revenir en haut Aller en bas

Re: Calcul en langage machine [RESOLU]

Message  didierv le Lun 16 Mar 2015 - 13:45

Bonjour,

Et voici l'adresse de bonnes routines générales 6502 : www.6502.org
et plus spécifiquement une routine dédiée à la division http://6502.org/source/integers/ummodfix/ummodfix.htm

Une autre solution, si tu as besoin d'être plus rapide et que tes nombres ne sont pas trop grands est d'avoir des tables en memoire (mais il faut aussi ne pas avoir trop besoin de place Very Happy )
avatar
didierv

Messages : 442
Date d'inscription : 19/01/2014
Age : 54
Localisation : Nord de la France

http://www.dmacoco.fr

Revenir en haut Aller en bas

Re: Calcul en langage machine [RESOLU]

Message  laurentd75 le Lun 6 Avr 2015 - 17:05

Sheld67 a écrit:Salut la Communauté,

Pour les besoins d'un nouveau jeu en langage machine, je cherche le moyen de réaliser la division de deux entiers.
.../...
Ce programme me retourne un ?ILLEGAL QUANTITY ERROR et refuse de placer le moindre résultat en 03.

Où ai-je fauté ?
Bonjour,
Je ne comprends pas trop pourquoi tu fais des appels à des routines complexes de la ROM qui sont prévues pour traiter des nombres flottants pour ton besoin qui est simplement de diviser 2 entiers ?

Quoi qu'il ne soit, d'après la routine de la ROM en D922 (sur Oric Atmos), l'erreur que tu obtiens est due soit à un problème de signe négatif, soit à un problème d'exposant... Encore une fois, les routines de la ROM pour l'arithmétique des nombres flottants sont complexes, et d'ailleurs pas forcément très clairement expliquées dans "L'Oric à Nu", que tu as utilisé je pense comme référence pour trouver les adresses des routines que tu appelles... Il y a notamment des différences entre traitements/routines sur nombres signés et nombres non signés...

Bref, à ta place je suivrais le conseil de Didier et j'essaierais de réutiliser des routines standard 6502 de division d'entiers...

Bonne chance en tous cas, c'est vrai que le 6502 c'était pas facile, personnellement ça m'a fait drôle aussi d'y revenir, je me rappelais plus qu'effectivement il n'y avait même pas d'instruction de multiplication ou de division !

Laurent
avatar
laurentd75

Messages : 91
Date d'inscription : 09/08/2014
Age : 46
Localisation : Paris

Revenir en haut Aller en bas

Re: Calcul en langage machine [RESOLU]

Message  kenneth le Lun 6 Avr 2015 - 18:52

Bienvenue Laurent Wink
avatar
kenneth
Modérateur

Messages : 342
Date d'inscription : 13/01/2013
Age : 50
Localisation : 63

Revenir en haut Aller en bas

Re: Calcul en langage machine [RESOLU]

Message  laurentd75 le Lun 6 Avr 2015 - 18:59

Bonjour Kenneth,

Ah oui, j'ai du oublié de me présenter, désolé... Peut-être y-a-t-il un forum dédié pour les présentations que je n'ai pas vu ?

Quoi qu'il en soit... Je suis donc Laurent, tout nouvel inscrit au CEO, pas tout jeune puisqu'ayant eu un Oric Atmos en étant ado... Et toujours possesseur d'un Atmos et d'un Oric-1 qui sont au grenier et que j'aimerais bien ressortir si j'avais davantage de place dans mon 2 pièces parisien...

J'en profite pour remercier l'ensemble de la communauté Oric, les créateurs et administrateurs de oric.org, le CEO, defence-force.org.... C'est vraiment un plaisir de revivre ces années Oric grâce à vous!!
avatar
laurentd75

Messages : 91
Date d'inscription : 09/08/2014
Age : 46
Localisation : Paris

Revenir en haut Aller en bas

Re: Calcul en langage machine [RESOLU]

Message  Dr X7FFF le Sam 18 Avr 2015 - 0:39

Bienvenu Laurent
avatar
Dr X7FFF

Messages : 13
Date d'inscription : 15/11/2014

Revenir en haut Aller en bas

Calcul en langage machine [RESOLU]

Message  Sheld67 le Dim 26 Avr 2015 - 19:01

Merci à tous pour vos réponses.

Voici finalement le code utilisé pour les besoins du jeu "Black Mamba" :


LINIT_SPEED           lda #120 ; valeur de référence pour le niveau 1 du jeu (équivaut à 1,2 s d'attente)
                              ldy LEVEL ; le niveau du jeu est stocké en page zéro (entre 1 et 4)
LLOOP                    dey
                              beq LEND_INIT_SPEED ; si on a décrémenté jusqu'à avoir Y = 0 alors sortir
                              lsr a ; sinon diviser A par 2 (c'est là qu'est l'astuce...)
                              bne LLOOP ; reboucler
LEND_INIT_SPEED   sta GAME_SPEED ; sauver la nouvelle valeur de vitesse du jeu
                              rts


En d'autres termes, voici les temps d'attente correspondant à chaque niveau de jeu :
- Niveau 1 = 1,2 s
- Niveau 2 = 0,60 s
- Niveau 3 = 0,30 s
- Niveau 4 = 0,10 s (ça commence à être rapide)

Je considère le sujet comme résolu !
avatar
Sheld67

Messages : 40
Date d'inscription : 06/04/2014

Revenir en haut Aller en bas

Re: Calcul en langage machine [RESOLU]

Message  Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum