-
Notifications
You must be signed in to change notification settings - Fork 0
/
DISPLAY.asm
149 lines (136 loc) · 3.01 KB
/
DISPLAY.asm
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
DEF DSPINT,DSPENV
*
REF VDPADR,VDPWRT Ref from VDP
REF CURENV,HERTZ,CURMNU Ref from VAR
HEADER TEXT ' ENVELOPE DEMO'
CURRNT TEXT ' Envelope _ _0hz'
PRESS TEXT 'Press:'
PRESS0
MAIN1 TEXT '1) Change Song'
MAIN2 TEXT '2) Change Envelope'
MAIN3 TEXT '3) Swap 60hz vs. 50hz'
MAIN0
SONG1 TEXT 'A) The Merry Farmer'
SONG2 TEXT 'B) Turkey in the Straw'
SONG3 TEXT 'C) Old Folks At Home'
SONG4 TEXT 'D) Lasciate i monti'
SONG5 TEXT 'FCTN-9) Previous Menu'
SONG0
ENV1 TEXT 'A) Constant volume (no pause)'
ENV2 TEXT 'B) Constant volume (w/ pause)'
ENV3 TEXT 'C) Sustain, release'
ENV4 TEXT 'D) Attack, release'
ENV5 TEXT 'E) Attack, sustain, release'
ENV6 TEXT 'F) Attck, decay, sstin, rels'
ENV7 TEXT 'G) Repeated attacks'
ENV8 TEXT 'H) Tremolo 1 - 4 hz 8 Dbls'
ENV9 TEXT 'I) Tremolo 2 - 4 hz 8 Dbls'
ENV10 TEXT 'FCTN-9) Previous Menu'
ENV0
EVEN
* Header above each menu
MHEAD DATA HEADER,CURRNT,PRESS,PRESS
DATA PRESS,PRESS
MHEAD0 DATA PRESS0
* Main menu
MMAIN DATA MAIN1,MAIN2,MAIN3
MMAIN0 DATA MAIN0
* Sub menu for selecting song
MSONG DATA SONG1,SONG2,SONG3,SONG4,SONG5
MSONG0 DATA SONG0
* Sub menu for selecting envelope
MENV DATA ENV1,ENV2,ENV3,ENV4
DATA ENV5,ENV6,ENV7,ENV8
DATA ENV9,ENV10
MENV0 DATA ENV0
* Each menu indexed
MSTART DATA MMAIN,MSONG,MENV
* Each menu's end indexed
MEND DATA MMAIN0,MSONG0,MENV0
COPY 'CPUADR.asm'
*
* Public Method:
* Write key selections to screen
*
DSPINT
DECT R10
MOV R11,*R10
* Let R2 = List of lines to display
* Let R3 = End of list of lines
* Let R4 = position of next line on screen
LI R2,MHEAD
LI R3,MHEAD0
LI R4,2
BL @DSPMNU
* Clear lower screen
LI R0,>C2
BL @VDPADR
LI R1,>300->C2
LI R2,>2000
DSP1 MOVB R2,@VDPWD
DEC R1
JNE DSP1
* Let R2 = address of current menu
* Let R3 = address of end of menu
MOVB @CURMNU,R2
SRL R2,8-1
MOV R2,R3
AI R2,MSTART
AI R3,MEND
MOV *R2,R2
MOV *R3,R3
* Let R4 = position on screen
* Display it
LI R4,>C2
BL @DSPMNU
*
MOV *R10+,R11
RT
*
* Private Method:
* Display a menu or menu header
*
DSPMNU DECT R10
MOV R11,*R10
*
AI R4,->20
* Set next position
MSGLP AI R4,>20
MOV R4,R0
BL @VDPADR
* Write next message
MOV *R2+,R0
MOV *R2,R1
S R0,R1
BL @VDPWRT
* Did we reach end of menu?
C R2,R3
JL MSGLP
* Yes, return
MOV *R10+,R11
RT
*
* Public Method:
* Display current envelope
*
DSPENV
DECT R10
MOV R11,*R10
* Display key that corresponds to current envelope
LI R0,>30
BL @VDPADR
*
MOV @CURENV,R1
AI R1,'A'
SWPB R1
MOVB R1,@VDPWD
* Display current electrical hertz
LI R0,>34
BL @VDPADR
*
LI R1,'6'*>100
AB @HERTZ,R1
MOVB R1,@VDPWD
*
MOV *R10+,R11
RT