|
|
Line 66: |
Line 66: |
| =Logic definitions= | | =Logic definitions= |
|
| |
|
| Use pin names instead of numbers ?
| | See https://github.com/neogeodev/SNKVerilog |
| | |
| ==NEO-257==
| |
| | |
| Verified: NO.
| |
| | |
| <syntaxhighlight lang="verilog">
| |
| // TODO: Reverse order of bits/pins
| |
| assign {8,9,11,12,23,24,27,28} = (35&~18) ? 17 ? {5,7,14,16,20,22,30,32} : {4,6,13,15,19,21,29,31} : 8'bzzzzzzzz;
| |
| assign {40,41,43,44,55,56,59,60} = (35&(~(33|34))) ? 17 ? {36,38,45,47,51,53,62,64} : {37,39,46,48,52,54,63,1} : 8'bzzzzzzzz;
| |
| </syntaxhighlight>
| |
| | |
| ==NEO-273==
| |
| | |
| Verified: NO.
| |
| | |
| <syntaxhighlight lang="verilog">
| |
| reg [19:0] C_LATCH;
| |
| reg [15:0] S_LATCH;
| |
| | |
| assign {46,45,44,43,41,40,39,38,14,13,12,11,9,8,7,6,33,32,1,64} = C_LATCH;
| |
| assign {37,36,35,34,18,17,16,15,5,4,3,2,51,50,49,48} = S_LATCH;
| |
| assign 47 = ~46;
| |
| | |
| always @(posedge 23)
| |
| C_LATCH <= {27,25,59,57,55,54,53,52,31,30,29,28,22,21,20,19,63,62,61,60};
| |
| | |
| always @(posedge 24)
| |
| S_LATCH <= {55,54,53,52,31,30,29,28,22,21,20,19,63,62,61,60};
| |
| </syntaxhighlight>
| |
| | |
| ==NEO-BUF==
| |
| | |
| Verified: NO.
| |
| | |
| <syntaxhighlight lang="verilog">
| |
| // A0~7 <= B0~7
| |
| assign {32,33,34,35,37,38,39,40} = (44|45) ? 8'bzzzzzzzz : {5,4,3,2,1,48,47,46};
| |
| // A8~15 <= B8~15
| |
| assign {22,23,24,26,27,28,29,30} = (44|45) ? 8'bzzzzzzzz : {16,15,14,13,10,9,8,7};
| |
| // B0~7 <= A0~7
| |
| assign {5,4,3,2,1,48,47,46} = (44|(~45)) ? 8'bzzzzzzzz : {32,33,34,35,37,38,39,40};
| |
| // B8~15 <= A8~15
| |
| assign {16,15,14,13,10,9,8,7} = (44|(~45)) ? 8'bzzzzzzzz : {22,23,24,26,27,28,29,30};
| |
| </syntaxhighlight>
| |
| | |
| ==NEO-C1==
| |
| | |
| Verified: Absolutely not.
| |
| | |
| <syntaxhighlight lang="verilog">
| |
| // Address decoding, is everything in sync with AS ?
| |
| assign ROMZONE = |{A23I,A22I,A21,A20}; // 000000 0FFFFF
| |
| assign WRAMZONE = |{A23I,A22I,A21,~A20}; // 100000 1FFFFF
| |
| assign PORTZONE = |{A23I,A22I,~A21,A20}; // 200000 2FFFFF
| |
| assign CTRL1ZONE = |{A23I,A22I,~A21,~A20,A19,A18,A17}; // 300000 31FFFF
| |
| assign ICOMZONE = |{A23I,A22I,~A21,~A20,A19,A18,~A17}; // 320000 33FFFF
| |
| assign CTRL2ZONE = |{A23I,A22I,~A21,~A20,A19,~A18}; // 340000 37FFFF not sure if A17 is used (up to 35FFFF only ?)
| |
| assign BITW0 = |{A23I,A22I,~A21,~A20,~A19,A18,A17}; // 380000 39FFFF ?
| |
| assign BITW1 = |{A23I,A22I,~A21,~A20,~A19,A18,~A17}; // 3A0000 3BFFFF ?
| |
| assign LSPCZONE = |{A23I,A22I,~A21,~A20,~A19,~A18}; // 3C0000 3DFFFF not sure if A17 is used (up to 3DFFFF only ?)
| |
| assign PAL = |{A23I,~A22I}; // 400000 7FFFFF
| |
| assign CARDZONE = |{~A23I,A22I}; // 800000 BFFFFF
| |
| assign SROMZONE = |{~A23I,~A22I,A21,A20}; // C00000 CFFFFF
| |
| assign SRAMZONE = |{~A23I,~A22I,A21,~A20}; // D00000 DFFFFF
| |
| | |
| assign WORDACCSS = LDS|UDS;
| |
| | |
| assign ROMOEL = ~RW | LDS | ROMZONE;
| |
| assign ROMOEU = ~RW | UDS | ROMZONE;
| |
| assign PORTOEL = ~RW | LDS | PORTZONE;
| |
| assign PORTOEU = ~RW | UDS | PORTZONE;
| |
| assign PORTWEL = RW | LDS | PORTZONE;
| |
| assign PORTWEU = RW | UDS | PORTZONE;
| |
| assign PADRS = PORTZONE;
| |
| assign WRL = ~RW | LDS | WRAMZONE;
| |
| assign WRU = ~RW | UDS | WRAMZONE;
| |
| assign WWL = RW | LDS | WRAMZONE;
| |
| assign WWU = RW | UDS | WRAMZONE;
| |
| assign SROMOEL = ~RW | LDS | SROMZONE;
| |
| assign SROMOEU = ~RW | UDS | SROMZONE;
| |
| assign SRAMOEL = ~RW | LDS | SRAMZONE;
| |
| assign SRAMOEU = ~RW | UDS | SRAMZONE;
| |
| assign SRAMWEL = RW | LDS | SRAMZONE;
| |
| assign SRAMWEU = RW | UDS | SRAMZONE;
| |
| | |
| assign DIPRD0 = ? // Asks NEO-F0 for dipswitches on D0~7 ?
| |
| | |
| // Not sure about word access, is it LDS|UDS or LDS&UDS or nothing at all ?
| |
| assign LSPOE = ~RW | WORDACCESS | LSPCZONE;
| |
| assign LSPWE = RW | WORDACCESS | LSPCZONE;
| |
| assign CRDO = ~RW | WORDACCESS | CARDZONE;
| |
| assign CRDW = RW | WORDACCESS | CARDZONE;
| |
| assign CRDC = CRDO & CRDC;
| |
| | |
| // Inter-CPU comm. | |
| // To do
| |
| | |
| // Inputs | |
| // To do
| |
| | |
| // Wait states
| |
| // To do
| |
| | |
| </syntaxhighlight>
| |
| | |
| ==NEO-D0==
| |
| | |
| Verified: NO.
| |
| | |
| <syntaxhighlight lang="verilog">
| |
| reg [1:0] CKDIV;
| |
| reg [2:0] SDIV;
| |
| reg 1MB;
| |
| reg [5:0] OUT;
| |
| reg [2:0] BNK;
| |
| | |
| assign XOUT = ~XIN;
| |
| assign 24M = XOUT;
| |
| assign 12M = CKDIV[0];
| |
| assign 6MB = ~CKDIV[1];
| |
|
| |
| // Guessing the clock divider is a counter ?
| |
| always @(posedge 24M)
| |
| begin
| |
| if (RESETP)
| |
| begin
| |
| 1MB <= 1;
| |
| SDIV <= 0;
| |
| CKDIV <= 0;
| |
| end
| |
| else
| |
| begin
| |
| if (SDIV == 5)
| |
| begin
| |
| 1MB <= ~1MB;
| |
| SDIV <= 0;
| |
| end
| |
| else
| |
| SDIV <= SDIV + 1;
| |
| CKDIV <= CKDIV + 1;
| |
| end
| |
| end
| |
| | |
| // Z80 address decode
| |
| // To do
| |
| | |
| assign {OUT6,OUT5,OUT4,OUT3,OUT2,OUT1} = RESETP ? OUT : 6'b000000;
| |
| assign {BNK2,BNK1,BNK0} = RESETP ? BNK : 3'b000;
| |
| | |
| always @(negedge BITWD0)
| |
| begin
| |
| if (!A4)
| |
| OUT <= D[5:0];
| |
| else
| |
| BNK <= D[2:0];
| |
| end
| |
| | |
| </syntaxhighlight>
| |
| | |
| ==NEO-E0==
| |
| | |
| Verified: NO.
| |
| | |
| <syntaxhighlight lang="verilog">
| |
| assign AND0 = ANI0 & ANI1;
| |
| assign {A23I,A22I} = A[23:22] ^ 2{~|{A[21:7],^A[23:22],VEC}};
| |
| | |
| // Memcard address stuff
| |
| // To do
| |
| </syntaxhighlight>
| |
| | |
| ==NEO-F0==
| |
| | |
| Verified: NO.
| |
| | |
| <syntaxhighlight lang="verilog">
| |
| assign SLOT_NB = {SLOTC,SLOTB,SLOTA};
| |
| | |
| // Not sure about the behavior if SLOT_NB > 5
| |
| assign {SLOT5,SLOT4,SLOT3,SLOT2,SLOT1,SLOT0} =
| |
| SYSTEMB ? 6'b111111 :
| |
| (SLOT_NB == 3'b000) ? 6'b111110 :
| |
| (SLOT_NB == 3'b001) ? 6'b111101 :
| |
| (SLOT_NB == 3'b010) ? 6'b111011 :
| |
| (SLOT_NB == 3'b011) ? 6'b110111 :
| |
| (SLOT_NB == 3'b100) ? 6'b101111 :
| |
| (SLOT_NB == 3'b101) ? 6'b011111 :
| |
| 8'b111111;
| |
| | |
| // Not sure about 6'b000000
| |
| assign D[7:0] = (DIPRD|~IN3) ? 8'bzzzzzzzz : A7 ? {IN01,IN00,6'b000000} : DIP[7:0];
| |
| | |
| // What is D5 ?
| |
| assign D[7:0] = (~DIPRD|IN3) ? 8'bzzzzzzzz : {CALDOUT,CALTP,1'b0,IN304,IN303,IN302,IN301,IN300};
| |
| | |
| </syntaxhighlight>
| |
| | |
| ==NEO-G0==
| |
| | |
| Verified: NO.
| |
| | |
| <syntaxhighlight lang="verilog">
| |
| // What happens when both /CE are low ? Chip auto-destructs ?
| |
| | |
| // A0~7 <= B0~7 or C0~7 (B has priority)
| |
| assign {18,17,16,15,5,4,3,2} = 40 ? 39 ? 51 ? 8'bzzzzzzzz : {14,13,12,11,9,8,7,6} : {24,23,22,21,1,64,63,62} : 8'bzzzzzzzz;
| |
| // A8~15 <= B8~15 or C8~15 (B has priority)
| |
| assign {50,49,48,47,34,33,32,31} = 52 ? 39 ? 51 ? 8'bzzzzzzzz : {46,45,44,43,30,29,28,27} : {56,55,54,53,38,37,36,35} : 8'bzzzzzzzz;
| |
| | |
| // B0~7 <= A0~7
| |
| assign {24,23,22,21,1,64,63,62} = 39 ? 8'bzzzzzzzz : 40 ? 8'bzzzzzzzz : {18,17,16,15,5,4,3,2};
| |
| // B8~15 <= A8~15
| |
| assign {56,55,54,53,38,37,36,35} = 39 ? 8'bzzzzzzzz : 52 ? 8'bzzzzzzzz : {50,49,48,47,34,33,32,31};
| |
| | |
| // C0~7 <= A0~7
| |
| assign {14,13,12,11,9,8,7,6} = 51 ? 8'bzzzzzzzz : 40 ? 8'bzzzzzzzz : {18,17,16,15,5,4,3,2};
| |
| // C8~15 <= A8~15
| |
| assign {46,45,44,43,30,29,28,27} = 51 ? 8'bzzzzzzzz : 52 ? 8'bzzzzzzzz : {50,49,48,47,34,33,32,31};
| |
| | |
| assign 41 = 40 | 39;
| |
| assign 59 = 60 & 61;
| |
| </syntaxhighlight>
| |
| | |
| ==NEO-I0==
| |
| | |
| Verified: NO.
| |
| | |
| <syntaxhighlight lang="verilog">
| |
| reg [15:0] S_LATCH;
| |
| | |
| assign {Q18,Q17,Q16,Q15,Q14,Q13,Q12,Q11,Q8,Q7,Q6,Q5,Q4,Q3,Q2,Q1} = S_LATCH;
| |
| | |
| always @(posedge PCK2B)
| |
| S_LATCH <= {55,54,53,52,31,30,29,28,22,21,20,19,63,62,61,60};
| |
| | |
| assign SYNCOUT = SYNCIN ^ SYNCREV;
| |
| | |
| assign ORO0 = ORI0 | ORI1;
| |
| | |
| assign ROMOE = ROMOEL & ROMOEU;
| |
| | |
| // More to do...
| |
| </syntaxhighlight>
| |
| | |
| ==NEO-ZMC==
| |
| | |
| See chip's page and MAME's source.
| |
| | |
| ==NEO-ZMC2==
| |
| | |
| Need NEO-ZMC + Kyuu's code on chip's page :)
| |
|
| |
|
| [[Category:Repairs]] | | [[Category:Repairs]] |
| [[Category:Chips]] | | [[Category:Chips]] |