lots of wip, tests, incoming redesign
This commit is contained in:
parent
9ae2f3d82f
commit
f6f5a64cab
Binary file not shown.
BIN
pcb/cart/sd2snes20.brd
Normal file
BIN
pcb/cart/sd2snes20.brd
Normal file
Binary file not shown.
BIN
pcb/cart/sd2snes20.sch
Normal file
BIN
pcb/cart/sd2snes20.sch
Normal file
Binary file not shown.
BIN
pcb/vfbga48breakout.brd
Normal file
BIN
pcb/vfbga48breakout.brd
Normal file
Binary file not shown.
BIN
pcb/vfbga48breakout.sch
Normal file
BIN
pcb/vfbga48breakout.sch
Normal file
Binary file not shown.
@ -33,7 +33,7 @@ BRK_8bit: BRK_16bit:
|
|||||||
COP_8bit: COP_16bit:
|
COP_8bit: COP_16bit:
|
||||||
IRQ_8bit:
|
IRQ_8bit:
|
||||||
NMI_8bit:
|
NMI_8bit:
|
||||||
- lda $ABCDEF : bra -
|
- wai: lda $ABCDEF : bra -
|
||||||
|
|
||||||
*= $C0FFB0
|
*= $C0FFB0
|
||||||
; Zero the area from $FFB0 - $FFFF
|
; Zero the area from $FFB0 - $FFFF
|
||||||
|
|||||||
@ -2,6 +2,9 @@
|
|||||||
#include "dma.i65"
|
#include "dma.i65"
|
||||||
|
|
||||||
GAME_MAIN:
|
GAME_MAIN:
|
||||||
|
sep #$20 : .as
|
||||||
|
lda #$01
|
||||||
|
sta $420d ; fast cpu
|
||||||
sep #$20 : .as
|
sep #$20 : .as
|
||||||
jsr snes_init
|
jsr snes_init
|
||||||
jsr setup_gfx
|
jsr setup_gfx
|
||||||
@ -17,6 +20,16 @@ GAME_MAIN:
|
|||||||
sta @AVR_PARAM+2
|
sta @AVR_PARAM+2
|
||||||
jsr menu_init
|
jsr menu_init
|
||||||
sep #$20 : .as
|
sep #$20 : .as
|
||||||
|
sep #$20 : .as
|
||||||
|
- lda @$C00000
|
||||||
|
lda @$D00000
|
||||||
|
lda @$E00000
|
||||||
|
lda @$F00000
|
||||||
|
lda @$400000
|
||||||
|
lda @$500000
|
||||||
|
lda @$600000
|
||||||
|
lda @$700000
|
||||||
|
; bra -
|
||||||
jsr menuloop
|
jsr menuloop
|
||||||
cli
|
cli
|
||||||
stz $4200
|
stz $4200
|
||||||
|
|||||||
@ -13,11 +13,13 @@ read_pad1_cont1
|
|||||||
eor pad1mem
|
eor pad1mem
|
||||||
and pad1mem
|
and pad1mem
|
||||||
sta pad1trig
|
sta pad1trig
|
||||||
lda #$0010
|
lda #$0001
|
||||||
|
; lda #$0010
|
||||||
cmp pad1delay
|
cmp pad1delay
|
||||||
bne read_pad1_cont2
|
bne read_pad1_cont2
|
||||||
stz pad1mem
|
stz pad1mem
|
||||||
lda #$000d
|
lda #$0000
|
||||||
|
; lda #$000d
|
||||||
sta pad1delay
|
sta pad1delay
|
||||||
read_pad1_cont2
|
read_pad1_cont2
|
||||||
;lda $4218
|
;lda $4218
|
||||||
|
|||||||
15
src/main.c
15
src/main.c
@ -264,7 +264,7 @@ restart:
|
|||||||
uart_putc('(');
|
uart_putc('(');
|
||||||
load_rom((uint8_t*)"/sd2snes/menu.bin", SRAM_MENU_ADDR);
|
load_rom((uint8_t*)"/sd2snes/menu.bin", SRAM_MENU_ADDR);
|
||||||
set_rom_mask(0x3fffff); // force mirroring off
|
set_rom_mask(0x3fffff); // force mirroring off
|
||||||
set_avr_mapper(0x7); // menu mapper
|
set_avr_mapper(0x7); // menu mapper XXX
|
||||||
uart_putc(')');
|
uart_putc(')');
|
||||||
uart_putcrlf();
|
uart_putcrlf();
|
||||||
// sram_hexdump(0x7ffff0, 0x10);
|
// sram_hexdump(0x7ffff0, 0x10);
|
||||||
@ -279,8 +279,17 @@ restart:
|
|||||||
_delay_ms(100);
|
_delay_ms(100);
|
||||||
uart_puts_P(PSTR("SNES GO!\r\n"));
|
uart_puts_P(PSTR("SNES GO!\r\n"));
|
||||||
snes_reset(0);
|
snes_reset(0);
|
||||||
|
// writetest();
|
||||||
|
// XXX
|
||||||
|
uart_putc(uart_getc());
|
||||||
|
/* snes_reset(1);
|
||||||
|
set_avr_ena(0);
|
||||||
|
led_std();
|
||||||
|
set_busy_led(1);
|
||||||
|
save_sram((uint8_t*)"/sd2snes/dump", 65536, SRAM_MENU_ADDR);
|
||||||
|
set_busy_led(0);
|
||||||
|
set_avr_ena(1);
|
||||||
|
snes_reset(0); */
|
||||||
uint8_t cmd = 0;
|
uint8_t cmd = 0;
|
||||||
|
|
||||||
while(!sram_reliable());
|
while(!sram_reliable());
|
||||||
|
|||||||
@ -192,3 +192,13 @@ NET "SPI_DMA_CTRL" PULLUP;
|
|||||||
NET "SPI_SCK" IOSTANDARD = LVCMOS33;
|
NET "SPI_SCK" IOSTANDARD = LVCMOS33;
|
||||||
NET "SPI_SCK" DRIVE = 16;
|
NET "SPI_SCK" DRIVE = 16;
|
||||||
NET "SPI_SCK" PULLUP;
|
NET "SPI_SCK" PULLUP;
|
||||||
|
NET "DBG_P44" LOC = P44;
|
||||||
|
NET "DBG_P44" IOSTANDARD = LVCMOS33;
|
||||||
|
NET "DBG_P46" LOC = P46;
|
||||||
|
NET "DBG_P46" IOSTANDARD = LVCMOS33;
|
||||||
|
NET "DBG_P47" LOC = P47;
|
||||||
|
NET "DBG_P47" IOSTANDARD = LVCMOS33;
|
||||||
|
NET "DBG_P52" LOC = P52;
|
||||||
|
NET "DBG_P52" IOSTANDARD = LVCMOS33;
|
||||||
|
NET "DBG_P53" LOC = P53;
|
||||||
|
NET "DBG_P53" IOSTANDARD = LVCMOS33;
|
||||||
|
|||||||
@ -56,7 +56,14 @@ module main(
|
|||||||
//output DCM_IN_STOPPED,
|
//output DCM_IN_STOPPED,
|
||||||
//output DCM_FX_STOPPED
|
//output DCM_FX_STOPPED
|
||||||
//input DCM_RST
|
//input DCM_RST
|
||||||
|
,
|
||||||
|
output DBG_P44,
|
||||||
|
output DBG_P46,
|
||||||
|
output DBG_P47,
|
||||||
|
output DBG_P52,
|
||||||
|
output DBG_P53
|
||||||
);
|
);
|
||||||
|
|
||||||
wire [7:0] spi_cmd_data;
|
wire [7:0] spi_cmd_data;
|
||||||
wire [7:0] spi_param_data;
|
wire [7:0] spi_param_data;
|
||||||
wire [7:0] spi_input_data;
|
wire [7:0] spi_input_data;
|
||||||
@ -197,7 +204,7 @@ wire SNES_WRITEs = (SNES_WRITEr == 2'b11);
|
|||||||
wire SNES_CSs = (SNES_CSr == 2'b11);
|
wire SNES_CSs = (SNES_CSr == 2'b11);
|
||||||
wire SNES_CPU_CLKs = SNES_CPU_CLK; // (SNES_CPU_CLKr == 2'b11);
|
wire SNES_CPU_CLKs = SNES_CPU_CLK; // (SNES_CPU_CLKr == 2'b11);
|
||||||
wire SNES_RW_start = (SNES_RWr == 6'b111110); // falling edge marks beginning of cycle
|
wire SNES_RW_start = (SNES_RWr == 6'b111110); // falling edge marks beginning of cycle
|
||||||
wire SNES_cycle_start = (SNES_CPU_CLKr == 6'b000001);
|
wire SNES_cycle_start = (SNES_CPU_CLKr == 6'b000011); // slight delay, RD/WR comes after CLK
|
||||||
wire SNES_ADDRCHG = (SNES_ADDRr != SNES_ADDR_PREVr);
|
wire SNES_ADDRCHG = (SNES_ADDRr != SNES_ADDR_PREVr);
|
||||||
wire SNES_addr_start = (SNES_ADDRCHGr[0] == 1'b1);
|
wire SNES_addr_start = (SNES_ADDRCHGr[0] == 1'b1);
|
||||||
|
|
||||||
@ -326,21 +333,34 @@ initial begin
|
|||||||
SRAM_WE_ARRAY[2'b10] = 13'b1_111111_000000;
|
SRAM_WE_ARRAY[2'b10] = 13'b1_111111_000000;
|
||||||
SRAM_WE_ARRAY[2'b11] = 13'b1_111111_111111;
|
SRAM_WE_ARRAY[2'b11] = 13'b1_111111_111111;
|
||||||
|
|
||||||
SRAM_OE_ARRAY[2'b00] = 13'b1_111111_111111;
|
SRAM_OE_ARRAY[2'b00] = 13'b0_111111_111111;
|
||||||
SRAM_OE_ARRAY[2'b01] = 13'b1_111111_000000;
|
SRAM_OE_ARRAY[2'b01] = 13'b0_111111_000000;
|
||||||
SRAM_OE_ARRAY[2'b10] = 13'b0_000000_111111;
|
SRAM_OE_ARRAY[2'b10] = 13'b0_000000_111111;
|
||||||
SRAM_OE_ARRAY[2'b11] = 13'b0_000000_000000;
|
SRAM_OE_ARRAY[2'b11] = 13'b0_000000_000000;
|
||||||
|
|
||||||
SNES_DATA_TO_MEM_ARRAY[1'b0] = 13'b0_001000_000000; // SNES write
|
|
||||||
/* 13'b0001000000000 */
|
|
||||||
SNES_DATA_TO_MEM_ARRAY[1'b1] = 13'b0_000000_000000; // SNES read
|
|
||||||
|
|
||||||
AVR_DATA_TO_MEM_ARRAY[1'b0] = 13'b1_111111_111111; // AVR write
|
// *************************************************************
|
||||||
// AVR_DATA_TO_MEM_ARRAY[1'b0] = 13'b0000000001000; // AVR write
|
// enable sequences for data path related operations. These
|
||||||
|
// control when to take a data value from SNES or AVR to the
|
||||||
|
// SRAM bus and vice versa.
|
||||||
|
// *************************************************************
|
||||||
|
// SNES write. Data cannot be latched earlier because data from
|
||||||
|
// the SNES is not valid before ~50ns after falling edge of /WR.
|
||||||
|
// This timing is *just* enough to satisfy SRAM's t_SD (Data Setup to
|
||||||
|
// write end) _and_ SNES's data valid delay.
|
||||||
|
SNES_DATA_TO_MEM_ARRAY[1'b0] = 13'b0_000100_000000;
|
||||||
|
// SNES read. No transfers to SRAM.
|
||||||
|
SNES_DATA_TO_MEM_ARRAY[1'b1] = 13'b0_000000_000000;
|
||||||
|
|
||||||
|
// AVR write. Data is buffered via the SPI module and has to be
|
||||||
|
// used at any given point.
|
||||||
|
AVR_DATA_TO_MEM_ARRAY[1'b0] = 13'b1_111111_111111; // AVR write
|
||||||
|
// AVR read. No transfers to SRAM.
|
||||||
AVR_DATA_TO_MEM_ARRAY[1'b1] = 13'b0_000000_000000; // AVR read
|
AVR_DATA_TO_MEM_ARRAY[1'b1] = 13'b0_000000_000000; // AVR read
|
||||||
|
|
||||||
|
// SNES write. No transfers from SRAM.
|
||||||
SRAM_DATA_TO_SNES_MEM_ARRAY[1'b0] = 13'b0_000000_000000; // SNES write
|
SRAM_DATA_TO_SNES_MEM_ARRAY[1'b0] = 13'b0_000000_000000; // SNES write
|
||||||
|
// SNES read. 000001 _should_ work but might get too close to the next edge of CE/BHE/ADDR???
|
||||||
SRAM_DATA_TO_SNES_MEM_ARRAY[1'b1] = 13'b0_000100_000000; // SNES read
|
SRAM_DATA_TO_SNES_MEM_ARRAY[1'b1] = 13'b0_000100_000000; // SNES read
|
||||||
/* 13'b0000100000000; */
|
/* 13'b0000100000000; */
|
||||||
|
|
||||||
@ -363,7 +383,7 @@ end
|
|||||||
always @(posedge CLK2) begin
|
always @(posedge CLK2) begin
|
||||||
AVR_READ_CYCLE <= AVR_READ;
|
AVR_READ_CYCLE <= AVR_READ;
|
||||||
AVR_WRITE_CYCLE <= AVR_WRITE;
|
AVR_WRITE_CYCLE <= AVR_WRITE;
|
||||||
if (SNES_RW_start) begin
|
if (SNES_cycle_start) begin
|
||||||
SNES_READ_CYCLE <= SNES_READ;
|
SNES_READ_CYCLE <= SNES_READ;
|
||||||
SNES_WRITE_CYCLE <= SNES_WRITE;
|
SNES_WRITE_CYCLE <= SNES_WRITE;
|
||||||
STATE <= STATE_0;
|
STATE <= STATE_0;
|
||||||
@ -473,11 +493,14 @@ assign SRAM_WE = !AVR_ENA ? AVR_WRITE
|
|||||||
assign SRAM_OE = !AVR_ENA ? AVR_READ
|
assign SRAM_OE = !AVR_ENA ? AVR_READ
|
||||||
: SRAM_OE_ARRAY[{SNES_WRITE_CYCLE, AVR_WRITE_CYCLE}][STATEIDX];
|
: SRAM_OE_ARRAY[{SNES_WRITE_CYCLE, AVR_WRITE_CYCLE}][STATEIDX];
|
||||||
|
|
||||||
assign SRAM_BHE = !SRAM_WE ? SRAM_ADDR0 : 1'b0;
|
|
||||||
assign SRAM_BLE = !SRAM_WE ? !SRAM_ADDR0 : 1'b0;
|
|
||||||
|
|
||||||
|
// This crashes after a couple million instructions under rare
|
||||||
|
// circumstances. I don't have the slightest.
|
||||||
//assign SRAM_BHE = SRAM_ADDR0;
|
//assign SRAM_BHE = SRAM_ADDR0;
|
||||||
//assign SRAM_BLE = ~SRAM_ADDR0;
|
//assign SRAM_BLE = ~SRAM_ADDR0;
|
||||||
|
// This works
|
||||||
|
assign SRAM_BHE = !SRAM_WE ? SRAM_ADDR0 : 1'b0;
|
||||||
|
assign SRAM_BLE = !SRAM_WE ? ~SRAM_ADDR0 : 1'b0;
|
||||||
|
|
||||||
// dumb version
|
// dumb version
|
||||||
//assign SRAM_OE = !AVR_ENA ? AVR_READ : SNES_READs;
|
//assign SRAM_OE = !AVR_ENA ? AVR_READ : SNES_READs;
|
||||||
@ -498,4 +521,15 @@ assign SNES_WRITE_CYCLEw = SNES_WRITE_CYCLE;
|
|||||||
assign IRQ_DIR = 1'b0;
|
assign IRQ_DIR = 1'b0;
|
||||||
assign SNES_IRQ = 1'bZ;
|
assign SNES_IRQ = 1'bZ;
|
||||||
|
|
||||||
|
|
||||||
|
// DEBUG
|
||||||
|
|
||||||
|
assign DBG_P44 = SRAM_DATA[0];
|
||||||
|
assign DBG_P46 = SRAM_DATA[1];
|
||||||
|
assign DBG_P47 = SRAM_DATA[2];
|
||||||
|
assign DBG_P52 = SRAM_OE;
|
||||||
|
assign DBG_P53 = SRAM_DATA_TO_SNES_MEM;
|
||||||
|
//SNES_ADDR==24'hC0F000 || SNES_ADDR==24'h40F000 || SNES_ADDR==24'h80F000 || SNES_ADDR==24'h00F000;
|
||||||
|
|
||||||
|
|
||||||
endmodule
|
endmodule
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user