     1              org 0h
     2  0000 020100 ljmp start
     3              org 03h
     4  0003 020139 ljmp increment_0
     5              org 013h
     6  0013 02014C ljmp increment_1
     7              org 0100h
     8              start:
     9  0100 7800     mov r0, #00h  ; zero initial pointers to both waveforms
    10  0102 7900     mov r1, #00h
    11  0104 C2B2     clr p3.2      ; enable keypad
    12                    ; TODO configure initial timers
    13                top:
    14  0106 75A885     mov ie, #085h ; enable both external interrupts
    15                  wait:
    16  0109 30B3FD       jnb p3.3, wait
    17  010C 75A800     mov ie, #000h ; disable interupts
    18  010F E590       mov a, p1     ; read in byte
    19  0111 FD         mov r5, a
    20  0112 5403       anl a, #03h   ; take column info
    21  0114 901010     mov dptr, #freq0l ; send low byte
    22  0117 93         movc a, @a+dptr
    23  0118 90000B     mov dptr, #timer0
    24  011B F0         movx @dptr, a
    25  011C 901020     mov dptr, #freq0h ; send high byte
    26  011F 93         movc a, @a+dptr
    27  0120 90000B     mov dptr, #timer0
    28  0123 F0         movx @dptr, a
    29  0124 ED         mov a, r5
    30  0125 540C       anl a, #0Ch   ; take row info
    31  0127 901030     mov dptr, #freq1l ; send low byte
    32  012A 93         movc a, @a+dptr
    33  012B 90001B     mov dptr, #timer1
    34  012E F0         movx @dptr, a
    35  012F 901040     mov dptr, #freq1h ; send high byte
    36  0132 93         movc a, @a+dptr
    37  0133 90001B     mov dptr, #timer1
    38  0136 F0         movx @dptr, a
    39  0137 80CD       sjmp top
    40                  
    41                  
    42              increment_0:
    43  0139 C2AF     clr ie.7 ; disable interrupts
    44  013B E8       mov a, r0
    45  013C 04       inc a    ; increment r0
    46  013D 5407     anl a, #07h
    47  013F F8       mov r0, a
    48  0140 901000   mov dptr, #tbl
    49  0143 93       movc a, @a+dptr ; increment table item
    50  0144 FA       mov r2, a ; store current item
    51  0145 2B       add a, r3 ; add other waveform
    52  0146 90FE10   mov dptr, #dac
    53  0149 F0       movx @dptr, a
    54  014A D2AF     setb ie.7 ; re-enable interupts
    55                  
    56              increment_1:
    57  014C C2AF     clr ie.7 ; disable interrupts
    58  014E E9       mov a, r1
    59  014F 04       inc a    ; increment r1
    60  0150 5407     anl a, #07h
    61  0152 F9       mov r1, a
    62  0153 901000   mov dptr, #tbl
    63  0156 93       movc a, @a+dptr ; increment table item
    64  0157 FB       mov r3, a ; store current item
    65  0158 2A       add a, r2 ; add other waveform
    66  0159 90FE10   mov dptr, #dac
    67  015C F0       movx @dptr, a
    68  015D D2AF     setb ie.7 ; re-enable interupts
    69                  
    70              tbl equ 01000h
    71              org tbl
    72  1000 00       db 00
    73  1001 13       db 19
    74  1002 40       db 64
    75  1003 6D       db 109
    76  1004 80       db 128
    77  1005 6D       db 109
    78  1006 40       db 64
    79  1007 13       db 19
    80                  
    81              freq0l equ 01010h
    82              org freq0l
    83  1010 3D       db 03Dh ; 1336 Hz
    84  1011 72       db 072h ; 1477 Hz
    85  1012 4F       db 04Fh ; 1209 Hz
    86  1013 EC       db 0ECh ; 1633 Hz
    87              freq0h equ 01020h
    88              org freq0h
    89  1020 1D       db 01Dh
    90  1021 1A       db 01Ah
    91  1022 20       db 020h
    92  1023 17       db 017h
    93                  
    94              freq1l equ 01030h
    95  1024 F5       db 0F5h ; 850 Hz
    96  1025 00     nop
    97  1026 00     nop
    98  1027 00     nop
    99  1028 87       db 087h ; 691 Hz
   100  1029 00     nop
   101  102A 00     nop
   102  102B 00     nop
   103  102C BB       db 0BBh ; 770 Hz
   104  102D 00     nop
   105  102E 00     nop
   106  102F 00     nop
   107  1030 83       db 083h ; 941 Hz
   108              freq1h equ 01040h
   109  1031 2D       db 02Dh
   110  1032 00     nop
   111  1033 00     nop
   112  1034 00     nop
   113  1035 38       db 038h
   114  1036 00     nop
   115  1037 00     nop
   116  1038 00     nop
   117  1039 32       db 032h
   118  103A 00     nop
   119  103B 00     nop
   120  103C 00     nop
   121  103D 29       db 029h
   122                  
   123              dac equ 0FE10h
   124              timer0 equ 0FE00h
   125              timer1 equ 0FE01h
   126              timerconf equ 0FE03h


