;-----------------------------------------------------------
;
;	Pitch Tracer : September 1998
;
;		MIDI = 1ch : Note Event
;
;		Input : smoothed wave <-- TIOCB-2
;			Envelope      <-- AN-0
;
;-----------------------------------------------------------

;##### Port Defines #####
smr	.equ	h'0fffb0
brr	.equ	h'0fffb1
scr	.equ	h'0fffb2
tdr	.equ	h'0fffb3
ssr	.equ	h'0fffb4
rdr	.equ	h'0fffb5
pbddr	.equ	h'0fffd4
pbdr	.equ	h'0fffd6
addrah	.equ	h'0fffe0
addrbh	.equ	h'0fffe2
addrch	.equ	h'0fffe4
addrdh	.equ	h'0fffe6
adcsr	.equ	h'0fffe8
adcr	.equ	h'0fffe9
iprb	.equ	h'0ffff8
tstr	.equ	h'0fff60
tsnc	.equ	h'0fff61
tmdr	.equ	h'0fff62
tfcr	.equ	h'0fff63
toer	.equ	h'0fff90
tocr	.equ	h'0fff91
TCR2	.equ	h'0fff78
TIOR2	.equ	h'0fff79
TIER2	.equ	h'0fff7A
TSR2	.equ	h'0fff7B
TCNT2	.equ	h'0fff7C
GRA2	.equ	h'0fff7E
GRB2	.equ	h'0fff80
dadr0	.equ	h'0fffdc
dadr1	.equ	h'0fffdd
dacr	.equ	h'0fffde
dastcr	.equ	h'0fff5c

;##### Vector Defines #####
	.section vector,data,locate=h'000000
	.data.l	start

;##### Work RAM Data Defines #####
	.section ram,data,locate=h'0fef10
timer1		.res.w	1
timer2		.res.w	1
timer3		.res.w	1
tx_top		.res.w	1
tx_end		.res.w	1
ad_data		.res.b	8
counter		.res.b	1
led		.res.b	1
	.org	h'0ff800
tx_fifo	.res.b	1024

;***** Constant Table Defines *****
	.section rom,data,locate=h'001000
table_p:
        .data   113,113,112,112,111,111,111,110,110,109,109,108,108,108,107,107    ; Data 020 - 02F
        .data   106,106,106,105,105,105,104,104,104,103,103,103,103,102,102,102    ; Data 030 - 03F
        .data   101,101,101,101,100,100,100,100,99,99,99,99,99,98,98,98            ; Data 040 - 04F
        .data   98,97,97,97,97,97,96,96,96,96,96,95,95,95,95,95                ; Data 050 - 05F
        .data   94,94,94,94,94,94,93,93,93,93,93,93,92,92,92,92                ; Data 060 - 06F
        .data   92,92,91,91,91,91,91,91,91,90,90,90,90,90,90,90                ; Data 070 - 07F
        .data   89,89,89,89,89,89,89,89,88,88,88,88,88,88,88,88                ; Data 080 - 08F
        .data   87,87,87,87,87,87,87,87,87,86,86,86,86,86,86,86                ; Data 090 - 09F
        .data   86,86,85,85,85,85,85,85,85,85,85,84,84,84,84,84                ; Data 0A0 - 0AF
        .data   84,84,84,84,84,83,83,83,83,83,83,83,83,83,83,83                ; Data 0B0 - 0BF
        .data   82,82,82,82,82,82,82,82,82,82,82,82,81,81,81,81                ; Data 0C0 - 0CF
        .data   81,81,81,81,81,81,81,81,80,80,80,80,80,80,80,80                ; Data 0D0 - 0DF
        .data   80,80,80,80,79,79,79,79,79,79,79,79,79,79,79,79                ; Data 0E0 - 0EF
        .data   79,79,78,78,78,78,78,78,78,78,78,78,78,78,78,78                ; Data 0F0 - 0FF
        .data   77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77                ; Data 100 - 10F
        .data   76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76                ; Data 110 - 11F
        .data   75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75                ; Data 120 - 12F
        .data   75,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74                ; Data 130 - 13F
        .data   74,74,74,73,73,73,73,73,73,73,73,73,73,73,73,73                ; Data 140 - 14F
        .data   73,73,73,73,73,73,72,72,72,72,72,72,72,72,72,72                ; Data 150 - 15F
        .data   72,72,72,72,72,72,72,72,72,72,71,71,71,71,71,71                ; Data 160 - 16F
        .data   71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71                ; Data 170 - 17F
        .data   70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70                ; Data 180 - 18F
        .data   70,70,70,70,70,70,70,69,69,69,69,69,69,69,69,69                ; Data 190 - 19F
        .data   69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,68                ; Data 1A0 - 1AF
        .data   68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68                ; Data 1B0 - 1BF
        .data   68,68,68,68,68,68,68,68,67,67,67,67,67,67,67,67                ; Data 1C0 - 1CF
        .data   67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67                ; Data 1D0 - 1DF
        .data   67,67,67,67,66,66,66,66,66,66,66,66,66,66,66,66                ; Data 1E0 - 1EF
        .data   66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66                ; Data 1F0 - 1FF
        .data   65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65                ; Data 200 - 20F
        .data   65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,64                ; Data 210 - 21F
        .data   64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64                ; Data 220 - 22F
        .data   64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,63                ; Data 230 - 23F
        .data   63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63                ; Data 240 - 24F
        .data   63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63                ; Data 250 - 25F
        .data   63,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62                ; Data 260 - 26F
        .data   62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62                ; Data 270 - 27F
        .data   62,62,62,62,62,61,61,61,61,61,61,61,61,61,61,61                ; Data 280 - 28F
        .data   61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61                ; Data 290 - 29F
        .data   61,61,61,61,61,61,61,61,61,61,61,61,60,60,60,60                ; Data 2A0 - 2AF
        .data   60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60                ; Data 2B0 - 2BF
        .data   60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60                ; Data 2C0 - 2CF
        .data   60,60,60,60,59,59,59,59,59,59,59,59,59,59,59,59                ; Data 2D0 - 2DF
        .data   59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59                ; Data 2E0 - 2EF
        .data   59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,58                ; Data 2F0 - 2FF
        .data   58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58                ; Data 300 - 30F
        .data   58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58                ; Data 310 - 31F
        .data   58,58,58,58,58,58,58,58,58,58,58,58,58,57,57,57                ; Data 320 - 32F
        .data   57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57                ; Data 330 - 33F
        .data   57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57                ; Data 340 - 34F
        .data   57,57,57,57,57,57,57,57,57,57,57,57,57,56,56,56                ; Data 350 - 35F
        .data   56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56                ; Data 360 - 36F
        .data   56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56                ; Data 370 - 37F
        .data   56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56                ; Data 380 - 38F
        .data   55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55                ; Data 390 - 39F
        .data   55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55                ; Data 3A0 - 3AF
        .data   55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55                ; Data 3B0 - 3BF
        .data   55,55,55,55,55,55,55,54,54,54,54,54,54,54,54,54                ; Data 3C0 - 3CF
        .data   54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54                ; Data 3D0 - 3DF
        .data   54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54                ; Data 3E0 - 3EF
        .data   54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54                ; Data 3F0 - 3FF
        .data   53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53                ; Data 400 - 40F
        .data   53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53                ; Data 410 - 41F
        .data   53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53                ; Data 420 - 42F
        .data   53,53,53,53,53,53,53,53,53,53,53,53,53,52,52,52                ; Data 430 - 43F
        .data   52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52                ; Data 440 - 44F
        .data   52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52                ; Data 450 - 45F
        .data   52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52                ; Data 460 - 46F
        .data   52,52,52,52,52,52,52,52,52,52,52,52,52,51,51,51                ; Data 470 - 47F
        .data   51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51                ; Data 480 - 48F
        .data   51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51                ; Data 490 - 49F
        .data   51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51                ; Data 4A0 - 4AF
        .data   51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51                ; Data 4B0 - 4BF
        .data   51,51,50,50,50,50,50,50,50,50,50,50,50,50,50,50                ; Data 4C0 - 4CF
        .data   50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50                ; Data 4D0 - 4DF
        .data   50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50                ; Data 4E0 - 4EF
        .data   50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50                ; Data 4F0 - 4FF
        .data   50,50,50,50,50,50,50,50,50,50,49,49,49,49,49,49                ; Data 500 - 50F
        .data   49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49                ; Data 510 - 51F
        .data   49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49                ; Data 520 - 52F
        .data   49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49                ; Data 530 - 53F
        .data   49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49                ; Data 540 - 54F
        .data   49,49,49,49,49,49,49,48,48,48,48,48,48,48,48,48                ; Data 550 - 55F
        .data   48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48                ; Data 560 - 56F
        .data   48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48                ; Data 570 - 57F
        .data   48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48                ; Data 580 - 58F
        .data   48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48                ; Data 590 - 59F
        .data   48,48,48,48,48,48,48,48,47,47,47,47,47,47,47,47                ; Data 5A0 - 5AF
        .data   47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47                ; Data 5B0 - 5BF
        .data   47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47                ; Data 5C0 - 5CF
        .data   47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47                ; Data 5D0 - 5DF
        .data   47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47                ; Data 5E0 - 5EF
        .data   47,47,47,47,47,47,47,47,47,47,47,47,47,47,46,46                ; Data 5F0 - 5FF
        .data   46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46                ; Data 600 - 60F
        .data   46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46                ; Data 610 - 61F
        .data   46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46                ; Data 620 - 62F
        .data   46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46                ; Data 630 - 63F
        .data   46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46                ; Data 640 - 64F
        .data   46,46,46,46,46,46,46,46,46,45,45,45,45,45,45,45                ; Data 650 - 65F
        .data   45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45                ; Data 660 - 66F
        .data   45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45                ; Data 670 - 67F
        .data   45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45                ; Data 680 - 68F
        .data   45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45                ; Data 690 - 69F
        .data   45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45                ; Data 6A0 - 6AF
        .data   45,45,45,45,45,45,45,45,45,45,44,44,44,44,44,44                ; Data 6B0 - 6BF
        .data   44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44                ; Data 6C0 - 6CF
        .data   44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44                ; Data 6D0 - 6DF
        .data   44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44                ; Data 6E0 - 6EF
        .data   44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44                ; Data 6F0 - 6FF
        .data   44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44                ; Data 700 - 70F
        .data   44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44                ; Data 710 - 71F
        .data   43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43                ; Data 720 - 72F
        .data   43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43                ; Data 730 - 73F
        .data   43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43                ; Data 740 - 74F
        .data   43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43                ; Data 750 - 75F
        .data   43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43                ; Data 760 - 76F
        .data   43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43                ; Data 770 - 77F
        .data   43,43,43,43,43,43,43,43,43,43,43,43,43,42,42,42                ; Data 780 - 78F
        .data   42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42                ; Data 790 - 79F
        .data   42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42                ; Data 7A0 - 7AF
        .data   42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42                ; Data 7B0 - 7BF
        .data   42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42                ; Data 7C0 - 7CF
        .data   42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42                ; Data 7D0 - 7DF
        .data   42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42                ; Data 7E0 - 7EF
        .data   42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42                ; Data 7F0 - 7FF
        .data   41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41                ; Data 800 - 80F
        .data   41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41                ; Data 810 - 81F
        .data   41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41                ; Data 820 - 82F
        .data   41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41                ; Data 830 - 83F
        .data   41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41                ; Data 840 - 84F
        .data   41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41                ; Data 850 - 85F
        .data   41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41                ; Data 860 - 86F
        .data   41,41,41,41,41,41,41,41,41,40,40,40,40,40,40,40                ; Data 870 - 87F
        .data   40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40                ; Data 880 - 88F
        .data   40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40                ; Data 890 - 89F
        .data   40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40                ; Data 8A0 - 8AF
        .data   40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40                ; Data 8B0 - 8BF
        .data   40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40                ; Data 8C0 - 8CF
        .data   40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40                ; Data 8D0 - 8DF
        .data   40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40                ; Data 8E0 - 8EF
        .data   40,40,40,40,40,40,40,40,40,40,39,39,39,39,39,39                ; Data 8F0 - 8FF
        .data   39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39                ; Data 900 - 90F
        .data   39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39                ; Data 910 - 91F
        .data   39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39                ; Data 920 - 92F
        .data   39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39                ; Data 930 - 93F
        .data   39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39                ; Data 940 - 94F
        .data   39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39                ; Data 950 - 95F
        .data   39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39                ; Data 960 - 96F
        .data   39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39                ; Data 970 - 97F
        .data   39,39,39,38,38,38,38,38,38,38,38,38,38,38,38,38                ; Data 980 - 98F
        .data   38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38                ; Data 990 - 99F
        .data   38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38                ; Data 9A0 - 9AF
        .data   38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38                ; Data 9B0 - 9BF
        .data   38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38                ; Data 9C0 - 9CF
        .data   38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38                ; Data 9D0 - 9DF
        .data   38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38                ; Data 9E0 - 9EF
        .data   38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38                ; Data 9F0 - 9FF
        .data   38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38                ; Data A00 - A0F
        .data   38,38,38,38,37,37,37,37,37,37,37,37,37,37,37,37                ; Data A10 - A1F
        .data   37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37                ; Data A20 - A2F
        .data   37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37                ; Data A30 - A3F
        .data   37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37                ; Data A40 - A4F
        .data   37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37                ; Data A50 - A5F
        .data   37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37                ; Data A60 - A6F
        .data   37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37                ; Data A70 - A7F
        .data   37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37                ; Data A80 - A8F
        .data   37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37                ; Data A90 - A9F
        .data   37,37,37,37,37,37,37,37,37,37,37,37,37,36,36,36                ; Data AA0 - AAF
        .data   36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36                ; Data AB0 - ABF
        .data   36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36                ; Data AC0 - ACF
        .data   36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36                ; Data AD0 - ADF
        .data   36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36                ; Data AE0 - AEF
        .data   36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36                ; Data AF0 - AFF
        .data   36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36                ; Data B00 - B0F
        .data   36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36                ; Data B10 - B1F
        .data   36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36                ; Data B20 - B2F
        .data   36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36                ; Data B30 - B3F
        .data   36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36                ; Data B40 - B4F
        .data   35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35                ; Data B50 - B5F
        .data   35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35                ; Data B60 - B6F
        .data   35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35                ; Data B70 - B7F
        .data   35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35                ; Data B80 - B8F
        .data   35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35                ; Data B90 - B9F
        .data   35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35                ; Data BA0 - BAF
        .data   35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35                ; Data BB0 - BBF
        .data   35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35                ; Data BC0 - BCF
        .data   35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35                ; Data BD0 - BDF
        .data   35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35                ; Data BE0 - BEF
        .data   35,35,35,35,35,35,35,35,35,35,35,35,34,34,34,34                ; Data BF0 - BFF
        .data   34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34                ; Data C00 - C0F
        .data   34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34                ; Data C10 - C1F
        .data   34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34                ; Data C20 - C2F
        .data   34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34                ; Data C30 - C3F
        .data   34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34                ; Data C40 - C4F
        .data   34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34                ; Data C50 - C5F
        .data   34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34                ; Data C60 - C6F
        .data   34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34                ; Data C70 - C7F
        .data   34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34                ; Data C80 - C8F
        .data   34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34                ; Data C90 - C9F
        .data   34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34                ; Data CA0 - CAF
        .data   34,34,33,33,33,33,33,33,33,33,33,33,33,33,33,33                ; Data CB0 - CBF
        .data   33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33                ; Data CC0 - CCF
        .data   33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33                ; Data CD0 - CDF
        .data   33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33                ; Data CE0 - CEF
        .data   33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33                ; Data CF0 - CFF
        .data   33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33                ; Data D00 - D0F
        .data   33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33                ; Data D10 - D1F
        .data   33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33                ; Data D20 - D2F
        .data   33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33                ; Data D30 - D3F
        .data   33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33                ; Data D40 - D4F
        .data   33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33                ; Data D50 - D5F
        .data   33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33                ; Data D60 - D6F
        .data   33,33,33,32,32,32,32,32,32,32,32,32,32,32,32,32                ; Data D70 - D7F
        .data   32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32                ; Data D80 - D8F
        .data   32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32                ; Data D90 - D9F
        .data   32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32                ; Data DA0 - DAF
        .data   32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32                ; Data DB0 - DBF
        .data   32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32                ; Data DC0 - DCF
        .data   32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32                ; Data DD0 - DDF
        .data   32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32                ; Data DE0 - DEF
        .data   32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32                ; Data DF0 - DFF
        .data   32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32                ; Data E00 - E0F
        .data   32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32                ; Data E10 - E1F
        .data   32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32                ; Data E20 - E2F
        .data   32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32                ; Data E30 - E3F
        .data   31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31                ; Data E40 - E4F
        .data   31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31                ; Data E50 - E5F
        .data   31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31                ; Data E60 - E6F
        .data   31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31                ; Data E70 - E7F
        .data   31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31                ; Data E80 - E8F
        .data   31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31                ; Data E90 - E9F
        .data   31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31                ; Data EA0 - EAF
        .data   31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31                ; Data EB0 - EBF
        .data   31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31                ; Data EC0 - ECF
        .data   31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31                ; Data ED0 - EDF
        .data   31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31                ; Data EE0 - EEF
        .data   31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31                ; Data EF0 - EFF
        .data   31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31                ; Data F00 - F0F
        .data   31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,30                ; Data F10 - F1F
        .data   30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30                ; Data F20 - F2F
        .data   30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30                ; Data F30 - F3F
        .data   30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30                ; Data F40 - F4F
        .data   30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30                ; Data F50 - F5F
        .data   30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30                ; Data F60 - F6F
        .data   30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30                ; Data F70 - F7F
        .data   30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30                ; Data F80 - F8F
        .data   30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30                ; Data F90 - F9F
        .data   30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30                ; Data FA0 - FAF
        .data   30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30                ; Data FB0 - FBF
        .data   30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30                ; Data FC0 - FCF
        .data   30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30                ; Data FD0 - FDF
        .data   30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30                ; Data FE0 - FEF
        .data   30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30                ; Data FF0 - FFF

;***** Reset --> Initialize --> Main Loop *****
	.section program,code,locate=h'002000
start:
	mov.l	#h'0fff0f,er7		; stack pointer set
	mov.l	#h'0fef10,er2
	mov.w	#h'0fe0,r1
	mov.b	#0,r0l
_ram_clear:
	mov.b	r0l,@er2
	inc.l	#1,er2
	dec.w	#1,r1
	bne	_ram_clear
	jsr	@sci0_init		; SCI0 initialize
	mov.b	#b'00001000,r0l
	mov.b	r0l,@adcsr		; A/D setting
	bclr.b	#7,@adcr		; TRGE = 0
	mov.b	#b'11111111,r0l
	mov.b	r0l,@pbddr		; set : Port[B] all output
	jsr	@wait_500msec
	bset.b	#5,@adcsr		; A/D start !
	mov.b	#b'01110000,r0l		; tx/rx start !
	mov.b	r0l,@scr
	mov.b	#b'01000011,r0l		; Initialize TCR2
	mov.b	r0l,@TCR2		; clock= 2MHz
	mov.b	#b'01000100,r0l		; Initialize TIOR2
	mov.b	r0l,@TIOR2		; 
	bset	#2,@tstr		; Start ITU ch2
loop:
	jsr	@ad_check
	jsr	@timer_check
	jsr	@tx_midi_check
	jmp	@loop

;***** SCI init, MIDI Transmit Routines *****
sci0_init:
	mov.b	#b'00000000,r0l
	mov.b	r0l,@scr
	mov.b	#b'00000000,r0l
	mov.b	r0l,@smr
	mov.b	#15,r0l
	mov.b	r0l,@brr
	mov.w	#500,r0
_sci0_wait:
	dec.w	#1,r0
	bne	_sci0_wait
	mov.b	@ssr,r0l		; (dummy read)
	mov.b	#0,r0l
	mov.b	r0l,@ssr
	rts

;***** Timer / Counter Routines *****
wait_500msec:
	mov.l	#500,er1
_wait_1:
	jsr	@wait_1msec
	sub.l	#1,er1
	bne	_wait_1
	rts
wait_1msec:
	mov.l	#2048,er2
_wait_2:
	sub.l	#1,er2
	bne	_wait_2
	rts
timer_check:
	mov.w	@timer1,r1
	inc.w	#1,r1
	mov.w	r1,@timer1
	beq	_timer_1
	rts
_timer_1:
	mov.w	@timer2,r1
	inc.w	#1,r1
	mov.w	r1,@timer2
	cmp.w	#80,r1
	bne	_timer_2
	mov.w	#0,r1
	mov.w	r1,@timer2
_timer_2:
	mov.b	@counter,r0l
	inc.b	r0l
	mov.b	r0l,@counter
	mov.b	@led,r0l
	bnot	#7,r0l
	mov.b	r0l,@led
	mov.b	r0l,@pbdr		; write to Port[B]
	rts
tx_midi_check:
	mov.w	@tx_top,r1
	mov.w	@tx_end,r6
	cmp.w	r1,r6
	bne	_tx_exist
	rts
_tx_exist:
	btst	#7,@ssr			; test TRDE
	bne	_tx_seq
	rts
_tx_seq:
	mov.w	#0,e6
	mov.b	@(tx_fifo,er6),r0l
	mov.b	r0l,@tdr
	bclr	#7,@ssr			; Transmit !
	inc.w	#1,r6
	bclr	#2,r6h
	mov.w	r6,@tx_end
	rts
tx_fifo_set:
	mov.w	@tx_top,r6
	mov.w	#0,e6
	mov.b	r0h,@(tx_fifo,er6)	; transmit data = [r0h]
	inc.w	#1,r6
	bclr	#2,r6h
	mov.w	r6,@tx_top
	rts

;***** A/D Check Routine *****
ad_check:
	mov.w	@timer3,r1
	inc.w	#1,r1
	mov.w	r1,@timer3
	cmp.w	#2000,r1
	beq	_ad_in
	rts
_ad_in:
	mov.w	#0,r1
	mov.w	r1,@timer3
	btst.b	#7,@adcsr		; A/D conv end ?
	bne	_ad_go
	rts
_ad_go:
	mov.b	@addrah,r3h		; Get A/D data
	bclr.b	#7,@adcsr		; ADF clear
	mov.b	#0,r0l
	mov.b	r0l,r4l			; [r4l] = Data channel
	mov.b	r0l,@adcsr		; A/D setting
	bset.b	#3,@adcsr		; speed
	bset.b	#5,@adcsr		; A/D start !
	extu.w	r4
	extu.l	er4
	shlr.b	r3h			; R3H = now
	mov.b	r3h,@(ad_data,er4)	; now -> old
	cmp.b	#64,r3h			; > 2.5V ?
	bpl	_ad_ok
	rts
_ad_ok:
	mov.w	@GRB2,r2
	cmp.w	#44444,r2		; < 45Hz ?
	bcs	_ad_next
	rts
_ad_next:
	cmp.w	#1333,r2		; >1500Hz ?
	bhi	_ad_pass
	rts
_ad_pass:
	mov.w	#4095,r3
	extu.l	er3
	mulxu.w	r2,er3			; r2 * er3 --> er3
	mov.w	#43252,r4
	divxu.w	r4,er3			; er3 / r4 --> er3
	mov.w	#0,e3
	and.b	#b'00001111,r3h
	mov.b	@(table_p,er3),r5h
	inc.b	r5h
	mov.b	#h'90,r0h
	jsr	@tx_fifo_set
	mov.b	r5h,r0h
	jsr	@tx_fifo_set
	mov.b	#h'64,r0h
	jsr	@tx_fifo_set
	mov.b	r5h,r0h
	jsr	@tx_fifo_set
	mov.b	#h'00,r0h
	jsr	@tx_fifo_set
	rts

	.end

