-
Notifications
You must be signed in to change notification settings - Fork 0
/
LIGNES.S
137 lines (100 loc) · 3.15 KB
/
LIGNES.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
; Manipuler des lignes horizontales en assembleur sur Atari ST
; Par Vretrocomputing, 2020.
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
; Copier le lecteur de CD tout en haut de l'écran
move.l #pi1+34+(160*89),a0 ;Source
move.l a3,a1 ;Destination
move.w #(172+1-89)*160/4-1,d0 ;Nombre de longs - 1
copie:
move.l (a0)+,(a1)+ ;Copier un long
dbf d0,copie
; Recopier le lecteur de CD en dessous, en mode miroir
move.l #pi1+34+(160*172),a0 ;Source
;Destination : a1 pointe déjà au bon endroit
;lea 160*84(a3),a1 ;Destination
move.w #(172+1-89)-1,d1 ; Compteur de lignes
copie_ligne:
move.w #160/4-1,d0 ;Nombre de longs - 1
copie2:
move.l (a0)+,(a1)+ ;Copier un long
dbf d0,copie2
;sub.l #160*2,a0 ;Ligne source précédente
lea -160*2(a0),a0 ;Ligne source précédente
dbf d1,copie_ligne
; Effacer le bas du framebuffer
moveq #0,d1 ; Données vides
move.w #160*(200-84*2)/4-1,d0
copie3:
move.l d1,(a1)+
dbf d0,copie3
; 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 lotus.pi1
;--------------------------------------------------------------------------
; Variables
;--------------------------------------------------------------------------
SECTION BSS
oldrez:
DS.W 1 ;Ancienne résolution
oldpal:
DS.W 16 ;Ancienne palette