module counter1

title 'digital tone sequencer'

counter1 device 'P26V12';

" Inputs: clk - 1.3824MHz from external prescaler
"         sa0, sa1, sb0, sb1, sc0, sc1, sr - tone selects / ring enable

clk pin 1;
sa0 pin 2;
sa1 pin 3;
sb0 pin 4;
sb1 pin 5;
sc0 pin 6;
sc1 pin 8;
sr pin 9;

p0 pin 15 istype 'buffer,reg_d';
p1 pin 16 istype 'buffer,reg_d';
a0 pin 17 istype 'buffer,reg_d';
a1 pin 18 istype 'buffer,reg_d';
a2 pin 19 istype 'buffer,reg_d';
a3 pin 20 istype 'buffer,reg_d';
a4 pin 22 istype 'buffer,reg_d';
a5 pin 23 istype 'buffer,reg_d';
lc pin 24 istype 'buffer,reg_d';
lb pin 25 istype 'buffer,reg_d';
la pin 26 istype 'buffer,reg_d';
lr pin 27 istype 'buffer,reg_d';

"
" definitions
"

c,z,x  =  .c.,.z.,.x. ;
h,l    =  1,0         ;

equations

p0.clk = clk;
p1.clk = clk;
a0.clk = clk;
a1.clk = clk;
a2.clk = clk;
a3.clk = clk;
a4.clk = clk;
a5.clk = clk;
la.clk = clk;
lb.clk = clk;
lc.clk = clk;
lr.clk = clk;

p0.d =   !p0;
p1.d =   p0 & !p1
       # !p0 & p1;
a0.d =   p0 & p1 & !a0
       # !p1 & a0
       # !p0 & a0;
a1.d =   p0 & p1 & a0 & !a1
       # !a0 & a1
       # !p1 & a1
       # !p0 & a1;
a2.d =   p0 & p1 & a0 & a1 & !a2
       # !a1 & a2
       # !a0 & a2
       # !p1 & a2
       # !p0 & a2;
a3.d =   p0 & p1 & a0 & a1 & a2 & !a3
       # !a2 & a3
       # !a1 & a3
       # !a0 & a3
       # !p1 & a3
       # !p0 & a3;
a4.d =   p0 & p1 & a0 & a1 & a2 & a3 & !a4
       # !a3 & a4
       # !a2 & a4
       # !a1 & a4
       # !a0 & a4
       # !p1 & a4
       # !p0 & a4;
a5.d =   p0 & p1 & a0 & a1 & a2 & a3 & a4 & !a5
       # !a4 & a5
       # !a3 & a5
       # !a2 & a5
       # !a1 & a5
       # !a0 & a5
       # !p1 & a5
       # !p0 & a5;
 
la.d =   !sa0 & !a0 &  sa1 &  a1 & !p1 & p0
       #  sa0 &  a0 & !sa1 & !a1 & !p1 & p0
       #  sa0 &  a0 &  sa1 &  a1 & !p1 & p0;
 
lb.d =   !sb0 & !a0 &  sb1 &  a1 & !p1 & p0
       #  sb0 &  a0 & !sb1 & !a1 & !p1 & p0
       #  sb0 &  a0 &  sb1 &  a1 & !p1 & p0;
 
lc.d =   !sc0 & !a0 &  sc1 &  a1 & !p1 & p0
       #  sc0 &  a0 & !sc1 & !a1 & !p1 & p0
       #  sc0 &  a0 &  sc1 &  a1 & !p1 & p0;
 
lr.d =   !a0 & !a1 & sr & !p1 & p0;
 
end counter1
Back