Subversion Repositories svn.mios

Rev

Rev 1 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
44 tk 1
; $Id: cs_menu_leds.inc 44 2008-01-30 21:39:30Z tk $
1 tk 2
;
3
; SID Control Surface LED Handler
4
;
5
; ==========================================================================
6
;
7
;  Copyright 1998-2007 Thorsten Klose (tk@midibox.org)
8
;  Licensed for personal non-commercial use only.
9
;  All other rights reserved.
10
;
11
; ==========================================================================
12
 
13
;; --------------------------------------------------------------------------
14
;;  This function is called by the menu handler in cs_menu.inc
15
;;  when all LEDs should be updated
16
;;  The DOUT pin numbers are defined in cs_menu_io_tables.inc
17
;; --------------------------------------------------------------------------
18
CS_MENU_LED_Update
19
	;; get current CS_MENU_SID and base address
20
	call	CS_MENU_MS_GetSIDNumber
21
 
22
	;; copy the modulation matrix to CS_MENU_MATRIX
23
	;; this update is only required when CS_MENU_MODE_MATRIX_METER_DISP flag is not set
24
	;; (checked within function)
25
	rcall	CS_MENU_LED_Update_ModMatrix
26
 
27
	;; init temporary registers which hold some LED flags which are not saved anywhere else
28
	;; (see also CS_MENU_DOUT_TABLE)
29
	;; this quick & dirty method saves some memory...
30
 
31
	;; in bassline mode: selected OSC flag reflects L/R channel
32
	;; (it isn't used at all in this mode)
33
	movff	SID_EDIT_BUFFER + SID_Ix_ENGINE, WREG
34
	andlw	0x03
35
	xorlw	0x01
36
	bz	CS_MENU_LED_Update_OSC_B
37
	rgoto	CS_MENU_LED_Update_OSC_LDM
38
CS_MENU_LED_Update_OSC_B
39
	movf	CS_MENU_SELECTED_SID_LR, W
40
	movwf	CS_MENU_SELECTED_OSC_FLAGS
41
CS_MENU_LED_Update_OSC_LDM
42
 
43
	;; TMP1[2..0]: selected OSC layer
44
	movf	CS_MENU_SELECTED_OSC_CTRL, W
45
	call	MIOS_HLP_GetBitORMask
46
	andlw	0x07
47
	movwf	TMP1
48
 
49
	;; skip waveform/sync/ring in drum mode
50
	movff	SID_EDIT_BUFFER + SID_Ix_ENGINE, WREG
51
	andlw	0x03
52
	xorlw	0x02
53
	bz	CS_MENU_LED_Update_WSR_Skip
54
CS_MENU_LED_Update_WSR
55
	;; TMP1[7..4]: waveforms
56
	movlw	SID_Ix_Vx_WAVEFORM
57
	movwf	CS_MENU_PARAMETER_IX
58
	call	CS_MENU_FSR0_Voice
59
	swapf	INDF0, W
60
	andlw	0xf0
61
	btfsc	INDF0, 4; (voice off)
62
	movlw 0x00
63
	iorwf	TMP1, F
64
 
65
	;; TMP2[1..0]: sync/ring
66
	swapf	INDF0, W
67
	rrf	WREG, W
68
	andlw	0x03
69
CS_MENU_LED_Update_WSR_Skip
70
 
71
	;; TMP2[3..2]: matrix/meter mode
72
	btfss	CS_MENU_MODE, CS_MENU_MODE_MATRIX_METER
73
	iorlw 0x08
74
	btfsc	CS_MENU_MODE, CS_MENU_MODE_MATRIX_METER
75
	iorlw 0x04
76
	movwf	TMP2
77
 
78
	;; TMP2[4..5]: selected envelope
79
	;; in bassline/drum mode: L/R channel
80
	movff	SID_EDIT_BUFFER + SID_Ix_ENGINE, WREG
81
	andlw	0x03
82
	bz	CS_MENU_LED_Update_ENV_L
83
	xorlw	0x03
84
	bz	CS_MENU_LED_Update_ENV_M
85
CS_MENU_LED_Update_ENV_B
86
CS_MENU_LED_Update_ENV_D
87
	swapf	CS_MENU_SELECTED_SID_LR, W
88
	rgoto	CS_MENU_LED_Update_ENV_BD_Cont
89
CS_MENU_LED_Update_ENV_L
90
CS_MENU_LED_Update_ENV_M
91
	movf	CS_MENU_SELECTED_ENV, W
92
	call	MIOS_HLP_GetBitORMask
93
	swapf	WREG, W
94
CS_MENU_LED_Update_ENV_BD_Cont
95
	andlw	0x30
96
	iorwf	TMP2, F
97
 
98
	;; TMP2[6..7]: selected ENV Ctrl
99
	movf	CS_MENU_SELECTED_ENV_CTRL, W
100
	call	MIOS_HLP_GetBitORMask
101
	swapf	WREG, F
102
	rlf	WREG, F
103
	rlf	WREG, W
104
	andlw	0xc0
105
	iorwf	TMP2, F
106
 
107
	;; TMP3[7..0]: filter O[123E] and filter LP/BP/HP/3O
108
	movlw	SID_Ix_L_Fx_CHN_MODE
109
	movwf	CS_MENU_PARAMETER_IX
110
	call	CS_MENU_FSR0_Filter
111
	movff	INDF0, TMP3
112
 
113
	;; TMP4[5..0]: selected LFO
114
	movf	CS_MENU_SELECTED_LFO, W
115
	call	MIOS_HLP_GetBitORMask
116
	andlw	0x3f
117
	movwf	TMP4
118
 
119
	;; TMP4[7..6]: selected SID L/R (TMP4[7]=R, TMP4[6]=L)
120
	movf	CS_MENU_SELECTED_SID_LR, W
121
	swapf	WREG, F
122
	rlf	WREG, F
123
	rlf	WREG, W
124
	andlw	0xc0
125
	iorwf	TMP4, F
126
 
127
	;; TMP5[5..0]: LFO waveform
128
	movff	SID_EDIT_BUFFER + SID_Ix_ENGINE, WREG
129
	BRA_IFSET WREG, 1, ACCESS, CS_MENU_LED_Update_LFO_DM
130
CS_MENU_LED_Update_LFO_LB
131
	BRA_IFSET WREG, 0, ACCESS, CS_MENU_LED_Update_LFO_B
132
CS_MENU_LED_Update_LFO_L
133
	movlw	SID_Ix_LFOx_MODE
134
	rgoto	CS_MENU_LED_Update_LFO_L_Cont
135
CS_MENU_LED_Update_LFO_B
136
	movlw	SID_Ix_B_Vx_LFO1_MODE
137
	rgoto	CS_MENU_LED_Update_LFO_B_Cont
138
CS_MENU_LED_Update_LFO_DM
139
	BRA_IFSET WREG, 0, ACCESS, CS_MENU_LED_Update_LFO_M
140
CS_MENU_LED_Update_LFO_D
141
	movlw	0x00		; not used
142
	rgoto	CS_MENU_LED_Update_LFO_Cont
143
CS_MENU_LED_Update_LFO_M
144
	movlw	SID_Ix_M_Vx_LFO1_MODE
145
CS_MENU_LED_Update_LFO_L_Cont
146
CS_MENU_LED_Update_LFO_B_Cont
147
	movwf	CS_MENU_PARAMETER_IX
148
	call	CS_MENU_FSR0_LFO
149
	swapf	INDF0, W
150
	andlw	0x0f
151
	rcall	CS_MENU_LED_LFO_Wav_Pattern
152
	btfss	INDF0, 0
153
	movlw 0x00
154
	;; 	rgoto	CS_MENU_LED_Update_LFO_Cont
155
CS_MENU_LED_Update_LFO_Cont
156
	movwf	TMP5
157
 
158
 
159
	;; TMP5[6]: SID play state
160
	movf	TMP5, W
161
	andlw	0x3f
162
	btfsc	CS_STAT2, CS_STAT2_PLAY_SID1
163
	iorlw 0x40
164
	btfsc	CS_STAT2, CS_STAT2_PLAY_SID2
165
	iorlw 0x40
166
	btfsc	CS_STAT2, CS_STAT2_PLAY_SID3
167
	iorlw 0x40
168
	btfsc	CS_STAT2, CS_STAT2_PLAY_SID4
169
	iorlw 0x40
170
	movwf	TMP5
171
 
172
	;; TMP5[7]: Env Misc LED
173
	btfsc	CS_MENU_SELECTED_ENV_CTRL, 1
174
	bsf	TMP5, 7
175
 
176
	;; go through the DOUT map
177
	TABLE_ADDR CS_MENU_DOUT_TABLE
178
CS_MENU_LED_Update_Loop
179
	tblrd*+				; get low-byte of register address
180
	movf	TABLAT, W		; load it in WREG
181
	movwf	FSR0L			; and store it in FSR0L
182
	tblrd*+				; get high byte
183
	movff	TABLAT, FSR0H		; store it in FSR0H without touching WREG
184
	iorwf	TABLAT, W		; or the byte with WREG --- if both bytes are zero, the result will be zero
185
	bz	CS_MENU_LED_Update_End	; in this case jump to the end
186
 
187
	tblrd*+				; get flag-number
188
	movf	TABLAT, W
189
	call	MIOS_HLP_GetBitORMask	; get appr. OR mask (1 of 8)
190
	andwf	INDF0, W		; AND this with the register specified in the table
191
	skpz				; LED value: 0 if result zero, 1 if result != zero
192
	movlw	0x01
193
	movwf	MIOS_PARAMETER1		; store result in MIOS_PARAMETER1
194
	tblrd*+				; read pin number from table
195
	movf	TABLAT, W		; get pin number
196
	CALL_IFCLR TABLAT, 7, ACCESS, MIOS_DOUT_PinSet	; and finally set the pin of SR if bit #7 cleared
197
#if DEFAULT_SRM_LEDS_DOUT
198
	CALL_IFSET TABLAT, 7, ACCESS, CS_MENU_MATRIX_PinSet	; or pin of LED matrix if bit #7 set
199
#else
200
	CALL_IFSET TABLAT, 7, ACCESS, J5_DOUT_PinSet		; or pin of J5 if bit #7 set (SR #0 in cs_menu_io_tables.inc)
201
#endif
202
	rgoto	CS_MENU_LED_Update_Loop	; next entry
203
 
204
CS_MENU_LED_Update_End
205
	return
206
 
207
 
208
;; --------------------------------------------------------------------------
209
;; this function updates the modulation matrix when not in METER_DISP mode
210
;; --------------------------------------------------------------------------
211
CS_MENU_LED_Update_ModMatrix
212
	;; not in SID player mode (special handling in )
213
	btfsc	SID_STAT, SID_STAT_SIDPLAYER_CS_DISABLE
214
	return
215
 
216
	lfsr	FSR1, CS_MENU_MATRIX_BEGIN
217
 
218
	;; set LEDs of modulation matrix depending on selected engine
219
	movff	SID_EDIT_BUFFER + SID_Ix_ENGINE, WREG
220
	BRA_IFSET WREG, 1, ACCESS, CS_MENU_LED_Update_ModMatrix_DM
221
CS_MENU_LED_Update_ModMatrix_LB
222
	BRA_IFSET WREG, 0, ACCESS, CS_MENU_LED_Update_ModMatrix_B
223
CS_MENU_LED_Update_ModMatrix_L
224
	;; don't use level meters
225
	bcf	CS_STAT2, CS_STAT2_LEVEL_METERS
226
 
227
	;; exit if in MOD meter mode
228
	btfsc	CS_MENU_MODE, CS_MENU_MODE_MATRIX_METER_DISP
229
	return
230
 
231
	BRA_IFSET CS_MENU_SELECTED_SID_LR, 0, ACCESS, CS_MENU_LED_Update_ModMatrix_L_L
232
 
233
CS_MENU_LED_Update_ModMatrix_L_R
234
	movff	SID_EDIT_BUFFER + SID_Ix_L_MOD1_BASE + SID_Ix_MODx_TARG_R, POSTINC1
235
	movff	SID_EDIT_BUFFER + SID_Ix_L_MOD2_BASE + SID_Ix_MODx_TARG_R, POSTINC1
236
	movff	SID_EDIT_BUFFER + SID_Ix_L_MOD3_BASE + SID_Ix_MODx_TARG_R, POSTINC1
237
	movff	SID_EDIT_BUFFER + SID_Ix_L_MOD4_BASE + SID_Ix_MODx_TARG_R, POSTINC1
238
	movff	SID_EDIT_BUFFER + SID_Ix_L_MOD5_BASE + SID_Ix_MODx_TARG_R, POSTINC1
239
	movff	SID_EDIT_BUFFER + SID_Ix_L_MOD6_BASE + SID_Ix_MODx_TARG_R, POSTINC1
240
	movff	SID_EDIT_BUFFER + SID_Ix_L_MOD7_BASE + SID_Ix_MODx_TARG_R, POSTINC1
241
	movff	SID_EDIT_BUFFER + SID_Ix_L_MOD8_BASE + SID_Ix_MODx_TARG_R, POSTINC1
242
	return
243
 
244
CS_MENU_LED_Update_ModMatrix_L_L
245
	movff	SID_EDIT_BUFFER + SID_Ix_L_MOD1_BASE + SID_Ix_MODx_TARG_L, POSTINC1
246
	movff	SID_EDIT_BUFFER + SID_Ix_L_MOD2_BASE + SID_Ix_MODx_TARG_L, POSTINC1
247
	movff	SID_EDIT_BUFFER + SID_Ix_L_MOD3_BASE + SID_Ix_MODx_TARG_L, POSTINC1
248
	movff	SID_EDIT_BUFFER + SID_Ix_L_MOD4_BASE + SID_Ix_MODx_TARG_L, POSTINC1
249
	movff	SID_EDIT_BUFFER + SID_Ix_L_MOD5_BASE + SID_Ix_MODx_TARG_L, POSTINC1
250
	movff	SID_EDIT_BUFFER + SID_Ix_L_MOD6_BASE + SID_Ix_MODx_TARG_L, POSTINC1
251
	movff	SID_EDIT_BUFFER + SID_Ix_L_MOD7_BASE + SID_Ix_MODx_TARG_L, POSTINC1
252
	movff	SID_EDIT_BUFFER + SID_Ix_L_MOD8_BASE + SID_Ix_MODx_TARG_L, POSTINC1
253
	return
254
 
255
CS_MENU_LED_Update_ModMatrix_B
256
	;; exit if master is selected - realtime update done in SIDSE_B_CS_LM
257
	btfsc	CS_MENU_SELECTED_SID_FLAGS, 0
258
	return
259
 
260
	;; don't use level meters
261
	bcf	CS_STAT2, CS_STAT2_LEVEL_METERS
262
 
263
	;; clear matrix and meter values
264
	rcall	CS_MENU_LED_Update_Hlp_Clr
265
 
266
#if 0
267
	;; exit if meter node selected
268
	btfsc	CS_MENU_MODE, CS_MENU_MODE_MATRIX_METER_DISP
269
	return
270
#endif
271
 
272
	;; set sequencer position of left channel in horizontal line if sequencer enabled and valid pos
273
	SET_BSR	SID_EDIT_BUFFER
274
	BRA_IFCLR SID_EDIT_BUFFER + SID_Ix_B_S1V1_BASE + SID_Ix_B_Vx_FLAGS2, SID_I_B_V_FLAGS2_WT_ONLY, BANKED, CS_MENU_LED_Update_ModMatrix_BLD
275
	movf	SID_EDIT_BUFFER + SID_Ix_B_S1V1_BASE + SID_Ix_B_Vx_SEQ_NUM, W, BANKED
276
	andlw	0xf8
277
	bnz	CS_MENU_LED_Update_ModMatrix_BLD
278
CS_MENU_LED_Update_ModMatrix_BL
279
	movf	SID_EDIT_BUFFER + SID_Ix_B_S1V1_BASE + SID_Ix_B_Vx_SEQ_NUM, W, BANKED
280
	call	MIOS_HLP_GetBitORMask
281
	movwf	TMP2
282
 
283
	;; static bar
284
	lfsr	FSR1, CS_MENU_MATRIX_BEGIN
285
	movlw	8
286
	movwf	TMP1
287
CS_MENU_LED_Update_ModMatrix_BLL
288
	movff	TMP2, POSTINC1
289
	decfsz	TMP1, F
290
	rgoto	CS_MENU_LED_Update_ModMatrix_BLL
291
CS_MENU_LED_Update_ModMatrix_BLD
292
 
293
	;; set sequencer position of right channel in vertical line
294
	BRA_IFCLR SID_EDIT_BUFFER + SID_Ix_B_S2V1_BASE + SID_Ix_B_Vx_FLAGS2, SID_I_B_V_FLAGS2_WT_ONLY, BANKED, CS_MENU_LED_Update_ModMatrix_BRD
295
	movf	SID_EDIT_BUFFER + SID_Ix_B_S2V1_BASE + SID_Ix_B_Vx_SEQ_NUM, W, BANKED
296
	andlw	0xf8
297
	bnz	CS_MENU_LED_Update_ModMatrix_BRD
298
CS_MENU_LED_Update_ModMatrix_BR
299
	lfsr	FSR1, CS_MENU_MATRIX_BEGIN
300
	movf	SID_EDIT_BUFFER + SID_Ix_B_S2V1_BASE + SID_Ix_B_Vx_SEQ_NUM, W, BANKED
301
	andlw	0x07
302
	addwf	FSR1L, F
303
 
304
	;; static bar
305
	setf	INDF1
306
CS_MENU_LED_Update_ModMatrix_BRD
307
 
308
	return
309
 
310
 
311
 
312
CS_MENU_LED_Update_ModMatrix_DM
313
	BRA_IFSET WREG, 0, ACCESS, CS_MENU_LED_Update_ModMatrix_M
314
CS_MENU_LED_Update_ModMatrix_D
315
	;; exit if master is selected - realtime update done in SIDSE_D_CS_LM
316
	btfsc	CS_MENU_SELECTED_SID_FLAGS, 0
317
	return
318
 
319
	;; don't use level meters
320
	bcf	CS_STAT2, CS_STAT2_LEVEL_METERS
321
 
322
	;; clear matrix and meter values
323
	rcall	CS_MENU_LED_Update_Hlp_Clr
324
 
325
#if 0
326
	;; exit if meter node selected
327
	btfsc	CS_MENU_MODE, CS_MENU_MODE_MATRIX_METER_DISP
328
	return
329
#endif
330
 
331
	;; set sequencer position of left channel in horizontal line if sequencer enabled and valid pos
332
	SET_BSR	SID_EDIT_BUFFER
333
	BRA_IFCLR SID_EDIT_BUFFER + SID_Ix_D_SEQ_SPEED, SID_I_V_SEQ_ON, BANKED, CS_MENU_LED_Update_ModMatrix_DOf
334
	movf	SID_EDIT_BUFFER + SID_Ix_D_SEQ_NUM, W, BANKED
335
	andlw	0xf8
336
	bnz	CS_MENU_LED_Update_ModMatrix_DOf
337
CS_MENU_LED_Update_ModMatrix_DOn
338
	movf	SID_EDIT_BUFFER + SID_Ix_D_SEQ_NUM, W, BANKED
339
	call	MIOS_HLP_GetBitORMask
340
	movwf	TMP2
341
 
342
	;; static bar
343
	lfsr	FSR1, CS_MENU_MATRIX_BEGIN
344
	movlw	8
345
	movwf	TMP1
346
CS_MENU_LED_Update_ModMatrix_DL
347
	movff	TMP2, POSTINC1
348
	decfsz	TMP1, F
349
	rgoto	CS_MENU_LED_Update_ModMatrix_DL
350
CS_MENU_LED_Update_ModMatrix_DOf
351
 
352
	return
353
 
354
 
355
CS_MENU_LED_Update_ModMatrix_M
356
	;; exit if master is selected and we are in meter mote - realtime update done in SIDSE_M_CS_LM
357
	BRA_IFCLR CS_MENU_SELECTED_SID_FLAGS, 0, ACCESS, CS_MENU_LED_Update_ModMatrix_MOk
358
 
359
	;; clear matrix and meter values
360
	rcall	CS_MENU_LED_Update_Hlp_Clr
361
 
362
	btfsc	CS_MENU_MODE, CS_MENU_MODE_MATRIX_METER_DISP
363
	return
364
 
365
CS_MENU_LED_Update_ModMatrix_MOk
366
	;; don't use level meters
367
	bcf	CS_STAT2, CS_STAT2_LEVEL_METERS
368
 
369
	movf	CS_MENU_SELECTED_INS, W
370
	TABLE_ADDR_MUL_W CS_MENU_LED_MODMATRIX_NUMBERS, 8
371
 
372
	lfsr	FSR1, CS_MENU_MATRIX_BEGIN
373
	movlw	8		; copy 8 bytes
374
	movwf	PRODL
375
CS_MENU_LED_Update_ModMatrix_M_L
376
	tblrd*+
377
	movff	TABLAT, POSTINC1
378
	decfsz	PRODL, F
379
	rgoto	CS_MENU_LED_Update_ModMatrix_M_L
380
	return
381
 
382
 
383
	;; number 1-6 patterns
384
	;; (must be rotated by 90d)
385
	;; yes, this is based on the original C64 charset! :-)
386
CS_MENU_LED_MODMATRIX_NUMBERS
387
	;; ...**...
388
	;; ...**...
389
	;; ..***...
390
	;; ...**...
391
	;; ...**...
392
	;; ...**...
393
	;; .******.
394
	;; ........
395
	db	b'00000000', b'01000000', b'01000100', b'01111111', b'01111111', b'01000000', b'01000000', b'00000000'
396
 
397
	;; ..****..
398
	;; .**..**.
399
	;; .....**.
400
	;; ....**..
401
	;; ..**....
402
	;; .**.....
403
	;; .******.
404
	;; ........
405
	db	b'00000000', b'01100010', b'01110011', b'01010001', b'01001001', b'01001111', b'01000110', b'00000000'
406
 
407
	;; ..****..
408
	;; .**..**.
409
	;; .....**.
410
	;; ...***..
411
	;; .....**.
412
	;; .**..**.
413
	;; ..****..
414
	;; ........
415
	db	b'00000000', b'00100010', b'01100011', b'01001001', b'01001001', b'01111111', b'00110110', b'00000000'
416
 
417
	;; .....**.
418
	;; ....***.
419
	;; ...****.
420
	;; .**..**.
421
	;; .*******
422
	;; .....**.
423
	;; .....**.
424
	;; ........
425
	db	b'00000000', b'00011000', b'00011000', b'00010100', b'00010110', b'01111111', b'01111111', b'00010000'
426
 
427
	;; .******.
428
	;; .**.....
429
	;; .*****..
430
	;; .....**.
431
	;; .....**.
432
	;; .**..**.
433
	;; ..****..
434
	;; ........
435
	db	b'00000000', b'00100111', b'01100111', b'01000101', b'01000101', b'01111101', b'00111001', b'00000000'
436
 
437
	;; ..****..
438
	;; .**..**.
439
	;; .**.....
440
	;; .*****..
441
	;; .**..**.
442
	;; .**..**.
443
	;; ..****..
444
	;; ........
445
	db	b'00000000', b'00111110', b'01111111', b'01001001', b'01001001', b'01110011', b'00110010', b'00000000'
446
 
447
 
448
;; --------------------------------------------------------------------------
449
;; help function which clears the matrix/meter array
450
;; --------------------------------------------------------------------------
451
CS_MENU_LED_Update_Hlp_Clr
452
	lfsr	FSR1, CS_MENU_MATRIX_BEGIN
453
	lfsr	FSR2, METER_VALUES0
454
	clrf	PRODL
455
CS_MENU_LED_Update_Hlp_Clr_Loop
456
	clrf	POSTINC1
457
	clrf	POSTINC2
458
	incf	PRODL, F
459
	BRA_IFCLR PRODL, 3, ACCESS, CS_MENU_LED_Update_Hlp_Clr_Loop
460
	return
461
 
462
;; --------------------------------------------------------------------------
463
;; we have 5 LFO LEDs
464
;; this function maps the LFO waveform number to these LEDs
465
;; --------------------------------------------------------------------------
466
CS_MENU_LED_LFO_Wav_Pattern
467
	andlw	0x0f		; 16 entries
468
	JUMPTABLE_2BYTES_UNSECURE
469
	retlw	b'00000001'	; Sine
470
	retlw	b'00000010'	; Triangle
471
	retlw	b'00000100'	; Saw
472
	retlw	b'00001000'	; Pulse
473
	retlw	b'00010000'	; Random
474
#if DEFAULT_MB6582_CS
475
	retlw	b'00100001'	; Positive Sine
476
	retlw	b'00100010'	; Positive Triangle
477
	retlw	b'00100100'	; Positive Saw
478
	retlw	b'00101000'	; Positive Pulse
479
#else
480
	retlw	b'00010001'	; Positive Sine
481
	retlw	b'00010010'	; Positive Triangle
482
	retlw	b'00010100'	; Positive Saw
483
	retlw	b'00011000'	; Positive Pulse
484
#endif
485
	retlw	b'00011111'	; reserved
486
	retlw	b'00011111'	; reserved
487
	retlw	b'00011111'	; reserved
488
	retlw	b'00011111'	; reserved
489
	retlw	b'00011111'	; reserved
490
	retlw	b'00011111'	; reserved
491
	retlw	b'00011111'	; reserved