-
Notifications
You must be signed in to change notification settings - Fork 0
/
GROUPES.S
144 lines (107 loc) · 3.29 KB
/
GROUPES.S
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
; Manipuler des groupes de 16 pixels en assembleur sur Atari ST
; Par Vretrocomputing, 2021.
bsr savemode ;Sauvegarder le mode vidéo
clr.w -(sp) ;Basse résolution
move.l #-1,-(sp) ;Ne pas changer l'adresse physique
move.l #-1,-(sp) ;Ne pas changer l'adresse logique
move.w #5,-(sp) ;Setscreen
trap #14 ;XBIOS
add.l #12,sp
DC.W $a00a ;Line A 10 : Cacher la souris
move.l #pi1+2,-(sp) ;Nouvelle palette
move.w #6,-(sp) ;Setpalette
trap #14 ;XBIOS
addq.l #6,sp
move.w #3,-(sp) ;Logbase
trap #14 ;XBIOS
addq.l #2,sp
move.l d0,a3 ;Adresse de l'écran
; Effacer tout l'écran
move.l a3,a1 ;Destination
moveq #0,d1 ;Données vides
move.w #160*200/4-1,d0
copie3:
move.l d1,(a1)+
dbra d0,copie3
; Copier les tourelles tout en haut à gauche de l'écran
move.l #pi1+34+(124*160)+(32/2),a0 ;Source
move.l a3,a1 ;Destination
move.w #64-1,d1 ;Hauteur
copie_y:
move.w #176/2/4-1,d0 ;Largeur
copie_x:
move.l (a0)+,(a1)+ ;Copier un long
dbra d0,copie_x
add.l #(320-176)/2,a0 ;Ligne source suivante
add.l #(320-176)/2,a1 ;Ligne destination suivante
dbra d1,copie_y
; Copier le panneau Xenon par dessus
move.l #pi1+34+(56*160)+(240/2),a0 ;Source
;move.l a3,a1
;add.l #(40*160)+(96/2),a1 ;Destination
lea (40*160)+(96/2)(a3),a1 ;Destination
move.w #48-1,d1 ;Hauteur
copie_y2:
move.w #64/2/4-1,d0 ;Largeur
copie_x2:
move.l (a0)+,(a1)+ ;Copier un long
dbra d0,copie_x2
add.l #(320-64)/2,a0 ;Ligne source suivante
add.l #(320-64)/2,a1 ;Ligne destination suivante
dbra d1,copie_y2
; Attendre l'appui sur une touche
move.w #8,-(sp) ;Cnecin
trap #1 ;GEMDOS
addq.l #2,sp
bsr restoremode ;Restaurer le mode vidéo
clr.w -(sp) ;Pterm0
trap #1 ;GEMDOS
;--------------------------------------------------------------------------
; Sauvegarder le mode vidéo
;--------------------------------------------------------------------------
savemode:
move.w #4,-(sp) ;Getrez
trap #14 ;XBIOS
addq.l #2,sp
move.w d0,oldrez ;Sauvegarder l'ancienne résolution
move.l #oldpal,a3 ;Buffer pour ancienne palette
moveq #0,d3 ;Commencer avec la couleur 0
loopcol:
move.w #-1,-(sp) ;Lire la couleur
move.w d3,-(sp) ;Numéro de couleur
move.w #7,-(sp) ;Setcolor
trap #14 ;XBIOS
addq.l #6,sp
move.w d0,(a3)+ ;Sauvegarder la couleur
addq.w #1,d3 ;Couleur suivante
cmp.w #16,d3 ;A-t-on traité les 16 couleurs ?
blt loopcol ;Non
rts
;--------------------------------------------------------------------------
; Restaurer le mode vidéo
;--------------------------------------------------------------------------
restoremode:
move.w oldrez,-(sp) ;Restaurer l'ancienne résolution
move.l #-1,-(sp) ;Ne pas changer l'adresse physique
move.l #-1,-(sp) ;Ne pas changer l'adresse logique
move.w #5,-(sp) ;Setscreen
trap #14 ;XBIOS
add.l #12,sp
move.l #oldpal,-(sp) ;Restaurer l'ancienne palette
move.w #6,-(sp) ;Setpalette
trap #14 ;XBIOS
addq.l #6,sp
rts
;--------------------------------------------------------------------------
; Données
;--------------------------------------------------------------------------
pi1:
INCBIN xenon.pi1
;--------------------------------------------------------------------------
; Variables
;--------------------------------------------------------------------------
SECTION BSS
oldrez:
DS.W 1 ;Ancienne résolution
oldpal:
DS.W 16 ;Ancienne palette