clr p1.0
org 0h
ljmp start
;s_interrupt_vector:
;org 23h ; serial interrupt
;  mov p1, #00h
;  jbc ri, s_interrupt_jump
;  ret
  s_interrupt_jump:
    ljmp s_interrupt
  test:
    jb ri, s_interrupt_jump
    ret
org 100h
start:
  lcall s_init
  clr p1.0
  mov dptr, #sine
  mov r1, #01h
  mov r2, #001h
  mov r3, #0h
  mov r4, #010h

  loop:
    setb p1.0
    movx a, @dptr
    push dpl
    ;push dph
    mov b, r1
    div ab
    mov dptr, #0FE10h
    movx @dptr, a
    ;mov p1, a
    ;pop dph
    mov dph, r4
    pop dpl
    inc dpl
    ;mov a, dpl
    ;add a, #0Ah
    ;mov dpl, a
    ;mov a, r3
    ;addc a, #0h
    ;mov r3, a

    ;mov ie, #0FFh ; enable serial interrupt
    lcall test
    mov a, r2
    mov r0, a
    clr p1.1
    delay:
      djnz r0, delay
    setb p1.1
    ;mov ie, #000h ; disable serial interrupt
    sjmp loop

s_interrupt:
  lcall s_getchr
  mov p1, a
  cjne a, #030h, s_interrupt_2
    ;mov dptr, #sine
    mov r4, #010h
    ret
  s_interrupt_2:
  cjne a, #031h, s_interrupt_3
    ;mov dptr, #square
    mov r4, #011h
    ret
  s_interrupt_3:
  cjne a, #032h, s_interrupt_4
    mov r4, #012h
    ret
  s_interrupt_4:
  cjne a, #033h, s_interrupt_5
    mov r4, #020h
  s_interrupt_5:
    jb acc.5, s_interrupt_f
  s_interrupt_a: ; amplitude
    anl a, #0Fh
    mov r1, a
    mov a, #011
    clr c
    subb a, r1
    mov r1, a
    ret
  s_interrupt_f: ; frequency
    anl a, #0Fh
    ;mov b, #25
    ;mul ab
    mov r2, a
    ret

sine equ 1000h
square equ 1100h
triangle equ 1200h
table equ 2000h

#include serial.asm
#include sine.asm
#include square.asm
#include triangle.asm
