-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCLAVIER.S
186 lines (136 loc) · 3.76 KB
/
CLAVIER.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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
; Réagir au clavier en assembleur sur Atari ST
; Par Vretrocomputing, 2022.
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
move.l a3,a4 ;Adresse des tourelles sur l'écran
redraw:
; 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 a4,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
wait:
move.w #8,-(sp) ;Cnecin
trap #1 ;GEMDOS
addq.l #2,sp
;Ici : d0.b = code ASCII
cmp.b #$1b,d0 ;Escape ?
beq exit
swap d0 ;Inverser scancode et code ASCII
cmp.b #$50,d0 ;Flèche Bas ?
beq down
cmp.b #$48,d0 ;Flèche Haut ?
beq up
cmp.b #$4b,d0 ;Flèche Gauche ?
beq left
cmp.b #$4d,d0 ;Flèche Droite ?
beq right
bra wait
down:
add.l #160,a4
bra redraw
up:
sub.l #160,a4
bra redraw
right:
add.l #8,a4
bra redraw
left:
sub.l #8,a4
bra redraw
exit:
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