- Ce sujet contient 8 réponses, 4 participants et a été mis à jour pour la dernière fois par
Arnaud.68K, le il y a 2 années.
-
Sujet
-
Bonjour,
Je vous propose un petit défi en assembleur 68000.
Voici le contexte :
Il y a un peu plus de 30 ans j’avais codé un scroll rotatif 2D, malheureusement j’ai perdu la disquette et son code source. Je me suis dit que ce serait bien de le refaire.
Le source utilisait un bitmap 1c de lettres et chiffres 32×32 structuré de la façon suivante (réalisé avec Deluxe Paint) :
A-0°, … , Z-0°
A-15°, ….. , Z-15°
…
A-75°, ….., Z-75°
La première chose que faisait le code dans sa phase d’init, c’était de faire 3 rotations de 90° de chaque Tile 32×32 de façon à avoir toutes les lettres sur 360° par pas de 15°
Alors voilà le défi que je vous propose :
Faire le code qui opère 3 rotations de 90° et communiquer le nombre de cycles obtenus.
Pour cela je vous propose d’utiliser http://www.easy68k.com qui permet de compter les cycles.
J’ai préparé la base du code avec la lettre G en data (voir plus bas)
Ce code permet d’afficher les 4 tiles 0, 90°, 180° et 270°
Il permet d’afficher le résultat dans la fenêtre de sortie
Bien sûr, en lançant le code vous obtiendrez que le premier Tile (celui d’origine)
il ne reste plus qu’à coder l’opération de 3×90° ;)
Bien entendu le score du nombre de cycles à poster est sans l’affichage des tiles et sur la base du Tile fourni dans le source, pour cela passer la variable Afficher equ 0 et relevez vos nombre de cycles dans esay68k
En temps utile je posterai mon code. N’hésitez pas à poster vos scores et à la fin à poster vos sources.
N’hésitez pas non plus à mentionner que vous tentez le défi ou à poser des questions encore plus si vous débutez en assembleur. C est un petit exercice formateur
Bon défi.
Arnaud
`
*———————————————————–
* Title :
* Written by :
* Date :
* Description:
*———————————————————–
ORG $1000
START
Afficher equ 1
OffsetEntre2Rotations equ 32*4+4 ’tile + offsetTourner90Degres:****** VOTRE CODE ICI******* FIN DE VOTRE CODE
IFNE Afficher
jsr Afficher4Tiles
ENDCrts
Afficher4Tiles:
;affiche image origine
lea ImageSource(pc),a0
move.l #0,d5
bsr afficherGFX;affiche image 90°
lea ImageSource(pc),a0
add.l #OffsetEntre2Rotations, a0
move.l #64,d5
bsr afficherGFX;affiche image 180
lea ImageSource(pc),a0
add.l #2*OffsetEntre2Rotations, a0
move.l #128,d5
bsr afficherGFX;affiche image 270
lea ImageSource(pc),a0
add.l #3*OffsetEntre2Rotations, a0
move.l #192,d5
bsr afficherGFXrts
afficherGFX:
;a0 = adr de départ
;d5 = offset yadd.l #32*4,a0
moveq.l #31,d7
.loopY:
;d7=Y compteur de lignes
move.l -(a0),d3
moveq.l #31,d6
;d6=X compteur de colonnes
.loopX:
btst d6,d3
beq .FinTraitement;Pixel ON, on affiche
move.l #32,d1
sub.w d6,d1
move.w d7,d2
add.w d5,d2
MOVEQ #82,d0 * draw pixel d0=82, d1=x, d2=y
TRAP #15 * do draw.FinTraitement:
dbra d6,.loopX
dbra d7,.loopYrts
ImageSource:
dc.l %00000000000011111111000000000000
dc.l %00000000011111111111111000000000
dc.l %00000001111111111111111110000000
dc.l %00000011111111111111111111000000
dc.l %00000111111111111111111111100000
dc.l %00001111111111111111111111110000
dc.l %00011111111111111111111111111000
dc.l %00101111111110000000011111110100
dc.l %00101111111100000000001111100100
dc.l %01001111111100000000000000000010
dc.l %01001111111100000000000000000010
dc.l %01001111111100000000000000000010
dc.l %10001111111100000000000000000001
dc.l %10001111111100000000000000000001
dc.l %10001111111100000000000000000001
dc.l %10001111111100001111111111110001
dc.l %10001111111100001111111111110001
dc.l %10001111111100001111111111110001
dc.l %10001111111100001111111111110001
dc.l %10001111111100001111111111110001
dc.l %01001111111100000000011111110010
dc.l %01001111111100000000011111110010
dc.l %01001111111100000000011111110010
dc.l %00101111111100000000011111110100
dc.l %00101111111110000000011111110100
dc.l %00011111111111111111111111111000
dc.l %00001111111111111111111111110000
dc.l %00000111111111111111111111100000
dc.l %00000011111111111111111111000000
dc.l %00000001111111111111111110000000
dc.l %00000000011111111111111000000000
dc.l %00000000000011111111000000000000dc.l $FFFF ;données arbitraires entre 2 tiles
ImageDest:
;TILE 90°
dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
dc.l $FFFF ;données arbitraires entre 2 tiles
;TILE 180°
dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
dc.l $FFFF ;données arbitraires entre 2 tiles
;TILE 270°
dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
dc.l $FFFF ;données arbitraires entre 2 tiles;ds.l 32 ; remplit des 1 !!!
* Put program code here
SIMHALT ; halt simulator
* Put variables and constants here
END START ; last line of source
`
A500 + 512k, adepte du SM attention avec un A devant !
- Vous devez être connecté pour répondre à ce sujet.