org 0h
ljmp start
org 03h
ljmp increment_0
org 013h
ljmp increment_1
org 0100h
start:
  mov r0, #00h  ; zero initial pointers to both waveforms
  mov r1, #00h
  clr p3.2      ; enable keypad
  mov dptr, #timerconf
  mov a, #032h
  mov @dptr, a
  mov a, #072h
  mov @dptr, a
  top:
    mov ie, #085h ; enable both external interrupts
    wait:
      jnb p3.3, wait
    mov ie, #000h ; disable interupts
    mov a, p1     ; read in byte
    mov r5, a
    anl a, #03h   ; take column info
    mov dptr, #freq0l ; send low byte
    movc a, @a+dptr
    mov dptr, #timer0
    movx @dptr, a
    mov dptr, #freq0h ; send high byte
    movc a, @a+dptr
    mov dptr, #timer0
    movx @dptr, a
    mov a, r5
    anl a, #0Ch   ; take row info
    mov dptr, #freq1l ; send low byte
    movc a, @a+dptr
    mov dptr, #timer1
    movx @dptr, a
    mov dptr, #freq1h ; send high byte
    movc a, @a+dptr
    mov dptr, #timer1
    movx @dptr, a
    sjmp top


increment_0:
  clr ie.7 ; disable interrupts
  mov a, r0
  inc a    ; increment r0
  anl a, #07h
  mov r0, a
  mov dptr, #tbl
  movc a, @a+dptr ; increment table item
  mov r2, a ; store current item
  add a, r3 ; add other waveform
  mov dptr, #dac
  movx @dptr, a
  setb ie.7 ; re-enable interupts

increment_1:
  clr ie.7 ; disable interrupts
  mov a, r1
  inc a    ; increment r1
  anl a, #07h
  mov r1, a
  mov dptr, #tbl
  movc a, @a+dptr ; increment table item
  mov r3, a ; store current item
  add a, r2 ; add other waveform
  mov dptr, #dac
  movx @dptr, a
  setb ie.7 ; re-enable interupts

tbl equ 01000h
org tbl
db 00
db 19
db 64
db 109
db 128
db 109
db 64
db 19

freq0l equ 01010h
org freq0l
db 03Dh ; 1336 Hz
db 072h ; 1477 Hz
db 04Fh ; 1209 Hz
db 0ECh ; 1633 Hz
freq0h equ 01020h
org freq0h
db 01Dh
db 01Ah
db 020h
db 017h

freq1l equ 01030h
db 0F5h ; 850 Hz
nop
nop
nop
db 087h ; 691 Hz
nop
nop
nop
db 0BBh ; 770 Hz
nop
nop
nop
db 083h ; 941 Hz
freq1h equ 01040h
db 02Dh
nop
nop
nop
db 038h
nop
nop
nop
db 032h
nop
nop
nop
db 029h

dac equ 0FE10h
timer0 equ 0FE00h
timer1 equ 0FE01h
timerconf equ 0FE03h
