Subversion Repositories pentevo

Rev

Rev 668 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 668 Rev 826
Line 1... Line 1...
1
// ZX-Evo Base Configuration (c) NedoPC 2008,2009,2010,2011,2012,2013,2014
1
// ZX-Evo Base Configuration (c) NedoPC 2008,2009,2010,2011,2012,2013,2014,2019
2
//
2
//
3
// fpga SPI slave device -- AVR controlled.
3
// fpga SPI slave device -- AVR controlled.
4
 
4
 
5
/*
5
/*
6
    This file is part of ZX-Evo Base Configuration firmware.
6
    This file is part of ZX-Evo Base Configuration firmware.
Line 54... Line 54...
54
        input  wire        wait_rnw,
54
        input  wire        wait_rnw,
55
 
55
 
56
        output wire        wait_end,
56
        output wire        wait_end,
57
 
57
 
58
        output wire [ 7:0] config0, // config bits for overall system
58
        output wire [ 7:0] config0, // config bits for overall system
-
 
59
        output wire [ 7:0] config1, //
59
 
60
 
60
        output wire        genrst, // positive pulse, causes Z80 reset
61
        output wire        genrst, // positive pulse, causes Z80 reset
61
 
62
 
62
        output wire        sd_lock_out, // SDcard control iface
63
        output wire        sd_lock_out, // SDcard control iface
63
        input  wire        sd_lock_in,  //
64
        input  wire        sd_lock_in,  //
Line 107... Line 108...
107
 
108
 
108
 
109
 
109
 
110
 
110
        // register selectors
111
        // register selectors
111
        wire sel_kbdreg, sel_kbdstb, sel_musxcr, sel_musycr, sel_musbtn, sel_kj,
112
        wire sel_kbdreg, sel_kbdstb, sel_musxcr, sel_musycr, sel_musbtn, sel_kj,
112
             sel_rstreg, sel_waitreg, sel_gluadr, sel_comadr, sel_cfg0,
113
             sel_rstreg, sel_waitreg, sel_gluadr, sel_comadr, sel_cfg0, sel_cfg1,
113
             sel_sddata, sel_sdctrl;
114
             sel_sddata, sel_sdctrl;
114
 
115
 
115
        // keyboard register
116
        // keyboard register
116
        reg [39:0] kbd_reg;
117
        reg [39:0] kbd_reg;
117
 
118
 
Line 122... Line 123...
122
 
123
 
123
        // wait data out register
124
        // wait data out register
124
        reg [7:0] wait_reg;
125
        reg [7:0] wait_reg;
125
 
126
 
126
        //
127
        //
127
        reg [7:0] cfg0_reg_out; // one for shifting, second for storing values
128
        reg [7:0] cfg0_reg_out;
-
 
129
        reg [7:0] cfg1_reg_out;
128
 
130
 
129
 
131
 
130
        // SDcard access registers
132
        // SDcard access registers
131
        reg [7:0] sddata; // output to SDcard
133
        reg [7:0] sddata; // output to SDcard
132
        reg [1:0] sdctrl; // SDcard control (CS_n and lock)
134
        reg [1:0] sdctrl; // SDcard control (CS_n and lock)
Line 196... Line 198...
196
        //
198
        //
197
        assign sel_waitreg = ( (regnum[7:4]==4'h4) && (regnum[1:0]==2'b00) ); // $40
199
        assign sel_waitreg = ( (regnum[7:4]==4'h4) && (regnum[1:0]==2'b00) ); // $40
198
        assign sel_gluadr  = ( (regnum[7:4]==4'h4) && (regnum[1:0]==2'b01) ); // $41
200
        assign sel_gluadr  = ( (regnum[7:4]==4'h4) && (regnum[1:0]==2'b01) ); // $41
199
        assign sel_comadr  = ( (regnum[7:4]==4'h4) && (regnum[1:0]==2'b10) ); // $42
201
        assign sel_comadr  = ( (regnum[7:4]==4'h4) && (regnum[1:0]==2'b10) ); // $42
200
        //
202
        //
201
        assign sel_cfg0 = (regnum[7:4]==4'h5); // $50
203
        assign sel_cfg0 = (regnum[7:4]==4'h5 && regnum[0]==1'b0); // $50
-
 
204
        assign sel_cfg1 = (regnum[7:4]==4'h5 && regnum[0]==1'b1); // $51
202
        //
205
        //
203
        assign sel_sddata = ( (regnum[7:4]==4'h6) && !regnum[0] ); // $60
206
        assign sel_sddata = ( (regnum[7:4]==4'h6) && !regnum[0] ); // $60
204
        assign sel_sdctrl = ( (regnum[7:4]==4'h6) &&  regnum[0] ); // $61
207
        assign sel_sdctrl = ( (regnum[7:4]==4'h6) &&  regnum[0] ); // $61
205
 
208
 
206
 
209
 
Line 219... Line 222...
219
                // wait read data shift-in
222
                // wait read data shift-in
220
                if( !scs_n && sel_waitreg && sck_01 )
223
                if( !scs_n && sel_waitreg && sck_01 )
221
                        wait_reg[7:0] <= { sdo, wait_reg[7:1] };
224
                        wait_reg[7:0] <= { sdo, wait_reg[7:1] };
222
 
225
 
223
                // config shift-in
226
                // config shift-in
224
                if( !scs_n && sel_cfg0 && sck_01 )
227
                if( !scs_n && (sel_cfg0 || sel_cfg1) && sck_01 )
225
                        common_reg[7:0] <= { sdo, common_reg[7:1] };
228
                        common_reg[7:0] <= { sdo, common_reg[7:1] };
226
 
229
 
227
                // config output
230
                // config output
228
                if( scs_n_01 && sel_cfg0 )
231
                if( scs_n_01 && sel_cfg0 )
229
                        cfg0_reg_out <= common_reg;
232
                        cfg0_reg_out <= common_reg;
-
 
233
                if( scs_n_01 && sel_cfg1 )
-
 
234
                        cfg1_reg_out <= common_reg;
230
 
235
 
231
                // SD data shift-in
236
                // SD data shift-in
232
                if( !scs_n && sel_sddata && sck_01 )
237
                if( !scs_n && sel_sddata && sck_01 )
233
                        common_reg[7:0] <= { sdo, common_reg[7:1] };
238
                        common_reg[7:0] <= { sdo, common_reg[7:1] };
234
 
239
 
Line 262... Line 267...
262
 
267
 
263
        assign wait_read = wait_reg;
268
        assign wait_read = wait_reg;
264
        assign wait_end = sel_waitreg && scs_n_01;
269
        assign wait_end = sel_waitreg && scs_n_01;
265
 
270
 
266
        assign config0 = cfg0_reg_out;
271
        assign config0 = cfg0_reg_out;
-
 
272
        assign config1 = cfg1_reg_out;
267
 
273
 
268
 
274
 
269
 
275
 
270
        // SD control output
276
        // SD control output
271
        assign sd_lock_out = sdctrl[1];
277
        assign sd_lock_out = sdctrl[1];