OpenCores
URL https://opencores.org/ocsvn/sqmusic/sqmusic/trunk

Subversion Repositories sqmusic

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 8 to Rev 9
    Reverse comparison

Rev 8 → Rev 9

/sqmusic/trunk/1942/1942.v
17,79 → 17,85
`timescale 1ns / 1ps
 
module sound1942;
// inputs to Z80
reg reset_n, clk, int_n, sound_clk;
parameter dump_text = 1; // set to 1 to dump data to use log2wav later
// inputs to Z80
reg reset_n, clk, int_n, sound_clk;
parameter dump_text = 1; // set to 1 to dump data to use log2wav later
parameter pwm_sound=1;
 
initial begin
initial begin
/* $dumpfile("dump.lxt");
$dumpvars(1,pwm0);
$dumpvars(1,pwm1);*/
$dumpvars(1,pwm0);
$dumpvars(1,pwm1);*/
// $dumpvars();
// $dumpon;
// $shm_open("1942.shm");
// $shm_probe( sound1942, "ACTFS" );
reset_n=0;
#1500 reset_n=1;
$display("1942 START");
// change finish time depending on song
//#0.1e9 $finish;
#7e9 $finish;
end
always begin // main clock
clk=0;
forever clk = #167 ~clk;
end
// $shm_probe( sound1942, "ACTFS" );
reset_n=0;
#1500 reset_n=1;
$display("1942 START");
// change finish time depending on song
//#3000 $finish;
#6e9 $finish;
end
 
always begin // sound clock
sound_clk=0;
forever sound_clk = #334 ~sound_clk;
end
always begin // main clock
clk=0;
forever clk = #167 ~clk;
end
 
parameter int_low_time=167*2*80;
always begin // sound clock
sound_clk=0;
forever sound_clk = #334 ~sound_clk;
end
 
always begin // interrupt clock
int_n=1;
forever begin
#(4166667-int_low_time) int_n=0; // 240Hz
//$display("IRQ request @ %t us",$time/1e6);
#(int_low_time) int_n=1;
parameter int_low_time=167*2*80;
 
always begin // interrupt clock
int_n=1;
forever begin
#(4166667-int_low_time) int_n=0; // 240Hz
//$display("IRQ request @ %t us",$time/1e6);
#(int_low_time) int_n=1;
end
end
 
 
wire [3:0] ay0_a, ay0_b, ay0_c, ay1_a, ay1_b, ay1_c;
computer_1942 #(0) game( .clk(clk), .sound_clk(sound_clk),
.int_n(int_n), .reset_n(reset_n),
.ay0_a(ay0_a), .ay0_b(ay0_b), .ay0_c(ay0_c),
.ay1_a(ay1_a), .ay1_b(ay1_b), .ay1_c(ay1_c) );
 
if ( pwm_sound ) begin // PWM OUTPUT
reg vhf_clk;
always begin
vhf_clk=0;
forever begin
if( vhf_clk && dump_text ) begin
$display("%d, %d, %d, %d, %d, %d",
pwm0_a, pwm0_b, pwm0_c, pwm1_a, pwm1_b, pwm1_c );
end
#10 vhf_clk <= ~vhf_clk; // 50MHz
end
end
end
 
wire [3:0] ay0_a, ay0_b, ay0_c, ay1_a, ay1_b, ay1_c;
computer_1942 #(0) game( .clk(clk), .sound_clk(sound_clk),
.int_n(int_n), .reset_n(reset_n),
.ay0_a(ay0_a), .ay0_b(ay0_b), .ay0_c(ay0_c),
.ay1_a(ay1_a), .ay1_b(ay1_b), .ay1_c(ay1_c) );
// sound amplifier:
/*
wire [15:0] amp0_y, amp1_y;
SQM_PWM_1 a0pwm( .clk(vhf_clk), .reset_n(reset_n), .din(ay0_a), .pwm(pwm0_a) );
SQM_PWM_1 b0pwm( .clk(vhf_clk), .reset_n(reset_n), .din(ay0_b), .pwm(pwm0_b) );
SQM_PWM_1 c0pwm( .clk(vhf_clk), .reset_n(reset_n), .din(ay0_c), .pwm(pwm0_c) );
 
SQM_PWM_1 a1pwm( .clk(vhf_clk), .reset_n(reset_n), .din(ay1_a), .pwm(pwm1_a) );
SQM_PWM_1 b1pwm( .clk(vhf_clk), .reset_n(reset_n), .din(ay1_b), .pwm(pwm1_b) );
SQM_PWM_1 c1pwm( .clk(vhf_clk), .reset_n(reset_n), .din(ay1_c), .pwm(pwm1_c) );
end
else begin // LINEAR OUTPUT
wire [15:0] amp0_y, amp1_y;
SQM_AMP amp0( .A(ay0_a), .B(ay0_b), .C(ay0_c), .Y( amp0_y ));
SQM_AMP amp1( .A(ay1_a), .B(ay1_b), .C(ay1_c), .Y( amp1_y ));
always #22676 $display("%d", amp0_y+amp1_y ); // 44.1kHz sample
*/
reg vhf_clk;
always begin
vhf_clk=0;
forever begin
if( vhf_clk && dump_text ) begin
$display("%d, %d, %d, %d, %d, %d",
pwm0_a, pwm0_b, pwm0_c, pwm1_a, pwm1_b, pwm1_c );
end
#10 vhf_clk <= ~vhf_clk; // 50MHz
end
always #22676 begin // 44.1kHz sample
$display("%d", amp0_y*10 );
$display("%d", amp1_y *10);
end
SQM_PWM_1 a0pwm( .clk(vhf_clk), .reset_n(reset_n), .din(ay0_a), .pwm(pwm0_a) );
SQM_PWM_1 b0pwm( .clk(vhf_clk), .reset_n(reset_n), .din(ay0_b), .pwm(pwm0_b) );
SQM_PWM_1 c0pwm( .clk(vhf_clk), .reset_n(reset_n), .din(ay0_c), .pwm(pwm0_c) );
 
SQM_PWM_1 a1pwm( .clk(vhf_clk), .reset_n(reset_n), .din(ay1_a), .pwm(pwm1_a) );
SQM_PWM_1 b1pwm( .clk(vhf_clk), .reset_n(reset_n), .din(ay1_b), .pwm(pwm1_b) );
SQM_PWM_1 c1pwm( .clk(vhf_clk), .reset_n(reset_n), .din(ay1_c), .pwm(pwm1_c) );
end
endmodule
 
 
/sqmusic/trunk/1942/log2wav.cc
30,7 → 30,10
string filename;
string outputfile;
bool stereo;
Args( int argc, char *argv[]) : skip(0), outputfile("out.wav"), stereo(false) {
const char *waitline;
Args( int argc, char *argv[]) :
skip(0), outputfile("out.wav"), stereo(false), waitline(NULL)
{
int k=1;
bool filename_known=false;
while( k < argc ) {
49,6 → 52,13
k++;
continue;
}
if( strcmp(argv[k],"--wait")==0 ) {
k++;
if( k >= argc ) throw "Expected output file name after --wait";
waitline = argv[k];
k++;
continue;
}
if( strcmp(argv[k],"-s")==0 ) { // stereo
k++;
stereo = true;
62,7 → 72,7
filename_known = true;
k++;
}
if( filename=="-" ) filename=string("/dev/stdin");
if( filename=="-" || !filename_known ) filename=string("/dev/stdin");
}
};
 
93,6 → 103,13
fin.getline( buffer, sizeof(buffer) );
//if( strcmp(buffer,"ncsim> run" )==0) break;
}
// wait for a given line in the output
buffer[0]=0;
if( ar.waitline )
while( !fin.eof() && strcmp( buffer, ar.waitline) )
fin.getline( buffer, sizeof(buffer) );
// start conversion
if( fin.eof() ) throw "Data not found";
fout.seekp(44);
signal( 2, sigint_handle ); // capture CTRL+C in order to save the

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.