source: thomson/code/3rdparty/sources2-hcl/SCROLL.ASM@ ceffc47

main
Last change on this file since ceffc47 was ceffc47, checked in by Adrien Destugues <pulkomandy@…>, 10 years ago

Add that collection of 3rdparty source I had lying on my disk for some time...

git-svn-id: svn://localhost/thomson@51 85ae3b6b-dc8f-4344-a89d-598714f2e4e5

  • Property mode set to 100644
File size: 4.0 KB
Line 
1****************************************
2* E A S Y S C R O L L E R *
3* (c) Doctor Lô of HCL for Micro-News *
4****************************************
5
6TEXTE EQU $DF30 Le début du texte
7SCREEN EQU $5E00 Position à l'écran
8VARPGE EQU $DF Page des variables
9FONT76 EQU $F4 Les 8 lignes de la
10FONT54 EQU $F6 lettre courante
11FONT32 EQU $F8 (lue à l'envers->
12FONT10 EQU $FA ligne 7 à ligne 0)
13NBPASS EQU $FC compteur passages
14SPEED EQU $FD vitesse (de 1 à 8)
15COLUMN EQU $FE compteur colonnes
16
17
18 ORG $DF30
19G PSHS U,Y,X,DP,B,A,CC Sauve regs
20 ORCC #80 Interruptions OFF
21 LDA $E7C3 Partie "points" de
22 ORA #1 la mémoire écran
23 STA $E7C3 sélectionnée
24 LDB #VARPGE Pour accès direct
25 TFR B,DP aux "variables"
26 LDY #TEXTE A faire défiler
27
28SYNCRO LDA $E7E7 Boucle tant que
29 BPL *-3 spot dans le bord
30 LDA $E7E7 Boucle tant que
31 BMI *-3 spot dans l'écran
32
33 LDB <SPEED Vitesse du scroll
34 STB <NBPASS ->nombre de passes
35SCROLL LDX #SCREEN+20 Position écran
36 LDU #VARPGE*256+FONT10+2 CHR$
37 LDA #8 Hauteur du scroll
38DOLINE ASL ,-U Décalage ds buffer
39 ROL 19,X Décalage à l'écran
40 ROL 18,X des 40 octets qui
41 ROL 17,X forment une ligne.
42 ROL 16,X Il est beaucoup
43 ROL 15,X plus rapide de
44 ROL 14,X faire comme ici 40
45 ROL 13,X décalages indexés
46 ROL 12,X par rapport au
47 ROL 11,X centre de la ligne
48 ROL 10,X courante, que de
49 ROL 9,X faire une boucle
50 ROL 8,X avec un compteur
51 ROL 7,X décrémenté 40 fois
52 ROL 6,X qui répéterait
53 ROL 5,X une instruction de
54 ROL 4,X décalage avec pré-
55 ROL 3,X décrémentation du
56 ROL 2,X registre d'index :
57 ROL 1,X { LDB #40
58 ROL ,X ROL ,-X
59 ROL -1,X DECB
60 ROL -2,X BNE *-3 }
61 ROL -3,X =562 microsecondes
62 ROL -4,X tandis que la
63 ROL -5,X méthode ci-contre
64 ROL -6,X n'utilise que
65 ROL -7,X 279 microsecondes!
66 ROL -8,X
67 ROL -9,X Evidemment,le code
68 ROL -10,X s'en trouve bien
69 ROL -11,X rallongé, mais ne
70 ROL -12,X sacrifierait-on
71 ROL -13,X pas volontiers
72 ROL -14,X quelques octets
73 ROL -15,X à une routine
74 ROL -16,X permettant une
75 ROL -17,X animation 2 fois
76 ROL -18,X plus rapide ?!
77 ROL -19,X - Oh YES!, Doc' !
78 ROL -20,X
79 LEAX 40,X Descend d'1 ligne
80 DECA 8 lignes décalées?
81 BNE DOLINE Non: on continue !
82
83
84 DEC <COLUMN 8 colonnes passées
85 BNE EOPASS Non: fin de passe
86 LDA #8 Ré-initialise le
87 STA <COLUMN compteur à 8 cols.
88NXTCHR LDB ,-Y Lettre suivante
89 BPL CHAROK >0: lettre normale
90 COMB <0: code=255-code
91 BNE NEWSPD >0: pas "The_End"
92 LDY #TEXTE Recommence au tout
93 BRA NXTCHR début du texte...
94
95NEWSPD STB <SPEED -> considère comme
96 BRA NXTCHR nouvelle vitesse !
97
98CHAROK MUL Offset=(ASC-32)*8
99 LDU >$60CF Début des fontes
100 LEAU D,U + offset du CHR$
101 PULU D,X Copie du graphisme
102 STD <FONT76 de notre lettre
103 STX <FONT54 dans le buffer,
104 PULU D,X où il sera décalé
105 STD <FONT32 huit fois vers la
106 STX <FONT10 gauche.
107
108
109EOPASS DEC <NBPASS Vitesse atteinte ?
110 LBNE SCROLL Non: autre passage
111 LDA $E7C8 touche frappée ?
112 LBEQ SYNCRO Non: continue...
113 PULS CC,A,B,DP,X,Y,U,PC *FIN*
114
115 ORG VARPGE*256+FONT76
116 FDB 0,0,0,0 lettre courante
117 FCB 0,6,1,0 *,vitesse,colonnes
118
119 END
Note: See TracBrowser for help on using the repository browser.