学研TVボーイ拡張カートリッジをマルチカート改造その3

TVボーイに32KB RAM&ROMカートリッジを作成して、自作プログラムをLILBUGから実行したい。

$0000-$003F MPU
$0080-$00FF INT RAM
$1000-$17FF VRAM
$4000-$BFFF EXT RAM
$F000-$FFFF 4K ROM x 16

HM6264をHM62256に変更します。GALのA14_nとHM62256のA14を結線します。(HM6264ではNC)

;
;
; TVBOY.EQN - TVBOY MULTICART
;

TITLE TVBOY MULTICART
PATTERN A
REVISION 1.0
AUTHOR TANAM1972
COMPANY PARALLEL COMPUTER INC
DATE 6/11/23

CHIP TVBOY GAL16V8D

NC NC A15 A14 A13 A12 NC NC NC GND
NC CS_n A13_n CE_n A14_n NC NC NC NC VCC

EQUATIONS

A14_n = /A14

CS_n = A15 * A14 + /A14 * /A15

A13_n = A13

CE_n = /A15 + /A14 + /A13 + /A12

TVBUG開発(DE0)その2

前回はMIKBUGに、MC6803とMC6847を実装したTVBUGをつくってみました。

https://tms9918.hatenablog.com/entry/2023/04/04/145617

ここからVDGとVRAMだけ残して、学研TVボーイにつなげてみます。

0000-00FF MC6803
1000-1FFF VRAM
F000-FFFF TVBOY

メリットはFPGAならではの、くっきりVGA出力と4KB VRAM拡張です。

att(6) <= D(7); -- AS
att(0) <= D(6); -- INV
att(5) <= VC(2); -- INT/EXT
att(2) <= VC(2); -- GM2
att(3) <= VC(0); -- GM1
att(4) <= VC(1); -- GM0
att(7) <= VC(4); -- AG
att(1) <= VC(5); -- CSS

DE0向けのVDG回路をUpdateしました。

# Copyright (C) 1991-2008 Altera Corporation
# Your use of Altera Corporation's design tools, logic functions 
# and other software and tools, and its AMPP partner logic 
# functions, and any output files from any of the foregoing 
# (including device programming or simulation files), and any 
# associated documentation or information are expressly subject 
# to the terms and conditions of the Altera Program License 
# Subscription Agreement, Altera MegaCore Function License 
# Agreement, or other applicable license agreement, including, 
# without limitation, that your use is for the sole purpose of 
# programming logic devices manufactured by Altera and sold by 
# Altera or its authorized distributors.  Please refer to the 
# applicable agreement for further details.


# The default values for assignments are stored in the file
#       DE0_VGA_assignment_defaults.qdf
# If this file doesn't exist, and for assignments not listed, see file
#       assignment_defaults.qdf

# Altera recommends that you do not modify this file. This
# file is updated automatically by the Quartus II software
# and any changes you make may be lost or overwritten.


set_global_assignment -name FAMILY "Cyclone III"
set_global_assignment -name DEVICE EP3C16F484C6
set_global_assignment -name TOP_LEVEL_ENTITY VDG
set_global_assignment -name LAST_QUARTUS_VERSION "13.0 SP1"
set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top
set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top
set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top

# Pin & Location Assignments
# ==========================
set_location_assignment PIN_F10 -to DRAM_D[15]
set_location_assignment PIN_E10 -to DRAM_D[14]
set_location_assignment PIN_A10 -to DRAM_D[13]
set_location_assignment PIN_B10 -to DRAM_D[12]
set_location_assignment PIN_C10 -to DRAM_D[11]
set_location_assignment PIN_A9 -to DRAM_D[10]
set_location_assignment PIN_B9 -to DRAM_D[9]
set_location_assignment PIN_A8 -to DRAM_D[8]
set_location_assignment PIN_F8 -to DRAM_D[7]
set_location_assignment PIN_H9 -to DRAM_D[6]
set_location_assignment PIN_G9 -to DRAM_D[5]
set_location_assignment PIN_F9 -to DRAM_D[4]
set_location_assignment PIN_E9 -to DRAM_D[3]
set_location_assignment PIN_H10 -to DRAM_D[2]
set_location_assignment PIN_G10 -to DRAM_D[1]
set_location_assignment PIN_D10 -to DRAM_D[0]
set_location_assignment PIN_C8 -to DRAM_A[12]
set_location_assignment PIN_A7 -to DRAM_A[11]
set_location_assignment PIN_B4 -to DRAM_A[10]
set_location_assignment PIN_B7 -to DRAM_A[9]
set_location_assignment PIN_C7 -to DRAM_A[8]
set_location_assignment PIN_A6 -to DRAM_A[7]
set_location_assignment PIN_B6 -to DRAM_A[6]
set_location_assignment PIN_C6 -to DRAM_A[5]
set_location_assignment PIN_A5 -to DRAM_A[4]
set_location_assignment PIN_C3 -to DRAM_A[3]
set_location_assignment PIN_B3 -to DRAM_A[2]
set_location_assignment PIN_A3 -to DRAM_A[1]
set_location_assignment PIN_C4 -to DRAM_A[0]
set_location_assignment PIN_E5 -to DRAM_CLK
set_location_assignment PIN_E6 -to DRAM_CKE
set_location_assignment PIN_E7 -to DRAM_LDQM
set_location_assignment PIN_B8 -to DRAM_UDQM
set_location_assignment PIN_D6 -to DRAM_WE_N
set_location_assignment PIN_G8 -to DRAM_CAS_N
set_location_assignment PIN_F7 -to DRAM_RAS_N
set_location_assignment PIN_G7 -to DRAM_CS_N
set_location_assignment PIN_A4 -to DRAM_BA_1
set_location_assignment PIN_B5 -to DRAM_BA_0
set_location_assignment PIN_Y2 -to FLASH_D15_AM1
set_location_assignment PIN_W2 -to FLASH_D[14]
set_location_assignment PIN_V4 -to FLASH_D[13]
set_location_assignment PIN_V1 -to FLASH_D[12]
set_location_assignment PIN_U2 -to FLASH_D[11]
set_location_assignment PIN_T4 -to FLASH_D[10]
set_location_assignment PIN_T7 -to FLASH_D[9]
set_location_assignment PIN_T5 -to FLASH_D[8]
set_location_assignment PIN_Y1 -to FLASH_D[7]
set_location_assignment PIN_W1 -to FLASH_D[6]
set_location_assignment PIN_V3 -to FLASH_D[5]
set_location_assignment PIN_V2 -to FLASH_D[4]
set_location_assignment PIN_U1 -to FLASH_D[3]
set_location_assignment PIN_R8 -to FLASH_D[2]
set_location_assignment PIN_P8 -to FLASH_D[1]
set_location_assignment PIN_R7 -to FLASH_D[0]
set_location_assignment PIN_R2 -to FLASH_A[21]
set_location_assignment PIN_P3 -to FLASH_A[20]
set_location_assignment PIN_P1 -to FLASH_A[19]
set_location_assignment PIN_M6 -to FLASH_A[18]
set_location_assignment PIN_M5 -to FLASH_A[17]
set_location_assignment PIN_AA2 -to FLASH_A[16]
set_location_assignment PIN_L6 -to FLASH_A[15]
set_location_assignment PIN_L7 -to FLASH_A[14]
set_location_assignment PIN_M1 -to FLASH_A[13]
set_location_assignment PIN_M2 -to FLASH_A[12]
set_location_assignment PIN_M3 -to FLASH_A[11]
set_location_assignment PIN_N1 -to FLASH_A[10]
set_location_assignment PIN_N2 -to FLASH_A[9]
set_location_assignment PIN_P2 -to FLASH_A[8]
set_location_assignment PIN_M4 -to FLASH_A[7]
set_location_assignment PIN_M8 -to FLASH_A[6]
set_location_assignment PIN_N6 -to FLASH_A[5]
set_location_assignment PIN_N5 -to FLASH_A[4]
set_location_assignment PIN_N7 -to FLASH_A[3]
set_location_assignment PIN_P6 -to FLASH_A[2]
set_location_assignment PIN_P5 -to FLASH_A[1]
set_location_assignment PIN_P7 -to FLASH_A[0]
set_location_assignment PIN_P4 -to FLASH_WE_N
set_location_assignment PIN_R1 -to FLASH_RESET_N
set_location_assignment PIN_T3 -to FLASH_WP_N
set_location_assignment PIN_M7 -to FLASH_RY
set_location_assignment PIN_N8 -to FLASH_CE_N
set_location_assignment PIN_R6 -to FLASH_OE_N
set_location_assignment PIN_AA1 -to FLASH_BYTE_N
set_location_assignment PIN_H21 -to VGA_R[3]
set_location_assignment PIN_H20 -to VGA_R[2]
set_location_assignment PIN_H17 -to VGA_R[1]
set_location_assignment PIN_H19 -to VGA_R[0]
set_location_assignment PIN_J21 -to VGA_G[3]
set_location_assignment PIN_K17 -to VGA_G[2]
set_location_assignment PIN_J17 -to VGA_G[1]
set_location_assignment PIN_H22 -to VGA_G[0]
set_location_assignment PIN_K18 -to VGA_B[3]
set_location_assignment PIN_J22 -to VGA_B[2]
set_location_assignment PIN_K21 -to VGA_B[1]
set_location_assignment PIN_K22 -to VGA_B[0]
set_location_assignment PIN_L21 -to VGA_HS
set_location_assignment PIN_L22 -to VGA_VS
set_location_assignment PIN_G15 -to HEX3_D[6]
set_location_assignment PIN_D19 -to HEX3_D[5]
set_location_assignment PIN_C19 -to HEX3_D[4]
set_location_assignment PIN_B19 -to HEX3_D[3]
set_location_assignment PIN_A19 -to HEX3_D[2]
set_location_assignment PIN_F15 -to HEX3_D[1]
set_location_assignment PIN_B18 -to HEX3_D[0]
set_location_assignment PIN_G16 -to HEX3_DP
set_location_assignment PIN_F14 -to HEX2_D[6]
set_location_assignment PIN_B17 -to HEX2_D[5]
set_location_assignment PIN_A17 -to HEX2_D[4]
set_location_assignment PIN_E15 -to HEX2_D[3]
set_location_assignment PIN_B16 -to HEX2_D[2]
set_location_assignment PIN_A16 -to HEX2_D[1]
set_location_assignment PIN_D15 -to HEX2_D[0]
set_location_assignment PIN_A18 -to HEX2_DP
set_location_assignment PIN_A15 -to HEX1_D[6]
set_location_assignment PIN_E14 -to HEX1_D[5]
set_location_assignment PIN_B14 -to HEX1_D[4]
set_location_assignment PIN_A14 -to HEX1_D[3]
set_location_assignment PIN_C13 -to HEX1_D[2]
set_location_assignment PIN_B13 -to HEX1_D[1]
set_location_assignment PIN_A13 -to HEX1_D[0]
set_location_assignment PIN_B15 -to HEX1_DP
set_location_assignment PIN_F13 -to HEX0_D[6]
set_location_assignment PIN_F12 -to HEX0_D[5]
set_location_assignment PIN_G12 -to HEX0_D[4]
set_location_assignment PIN_H13 -to HEX0_D[3]
set_location_assignment PIN_H12 -to HEX0_D[2]
set_location_assignment PIN_F11 -to HEX0_D[1]
set_location_assignment PIN_E11 -to HEX0_D[0]
set_location_assignment PIN_D13 -to HEX0_DP
set_location_assignment PIN_B1 -to LEDG[9]
set_location_assignment PIN_B2 -to LEDG[8]
set_location_assignment PIN_C2 -to LEDG[7]
set_location_assignment PIN_C1 -to LEDG[6]
set_location_assignment PIN_E1 -to LEDG[5]
set_location_assignment PIN_F2 -to LEDG[4]
set_location_assignment PIN_H1 -to LEDG[3]
set_location_assignment PIN_J3 -to LEDG[2]
set_location_assignment PIN_J2 -to LEDG[1]
set_location_assignment PIN_J1 -to LEDG[0]
set_location_assignment PIN_C20 -to LCD_D[7]
set_location_assignment PIN_D20 -to LCD_D[6]
set_location_assignment PIN_B21 -to LCD_D[5]
set_location_assignment PIN_B22 -to LCD_D[4]
set_location_assignment PIN_C21 -to LCD_D[3]
set_location_assignment PIN_C22 -to LCD_D[2]
set_location_assignment PIN_D21 -to LCD_D[1]
set_location_assignment PIN_D22 -to LCD_D[0]
set_location_assignment PIN_F21 -to LCD_BLON
set_location_assignment PIN_F22 -to LCD_RS
set_location_assignment PIN_E22 -to LCD_RW
set_location_assignment PIN_E21 -to LCD_EN
set_location_assignment PIN_G21 -to CLK50M1
set_location_assignment PIN_B12 -to CLK50M0
set_location_assignment PIN_U22 -to UART_RXD
set_location_assignment PIN_V22 -to UART_RTS
set_location_assignment PIN_U21 -to UART_TXD
set_location_assignment PIN_V21 -to UART_CTS
set_location_assignment PIN_P21 -to PS2_KBDAT
set_location_assignment PIN_P22 -to PS2_KBCLK
set_location_assignment PIN_R22 -to PS2_MSDAT
set_location_assignment PIN_R21 -to PS2_MSCLK
set_location_assignment PIN_F1 -to BUTTON[2]
set_location_assignment PIN_G3 -to BUTTON[1]
set_location_assignment PIN_H2 -to BUTTON[0]
set_location_assignment PIN_D2 -to SW[9]
set_location_assignment PIN_E4 -to SW[8]
set_location_assignment PIN_E3 -to SW[7]
set_location_assignment PIN_H7 -to SW[6]
set_location_assignment PIN_J7 -to SW[5]
set_location_assignment PIN_G5 -to SW[4]
set_location_assignment PIN_G4 -to SW[3]
set_location_assignment PIN_H6 -to SW[2]
set_location_assignment PIN_H5 -to SW[1]
set_location_assignment PIN_J6 -to SW[0]

set_location_assignment PIN_AA12 -to pSltWr_n
set_location_assignment PIN_AB14 -to pSltRd_n

set_location_assignment PIN_R10 -to pSltDat[7]
set_location_assignment PIN_Y10 -to pSltDat[6]
set_location_assignment PIN_T8 -to pSltDat[5]
set_location_assignment PIN_V11 -to pSltDat[4]
set_location_assignment PIN_W10 -to pSltDat[3]
set_location_assignment PIN_V8 -to pSltDat[2]
set_location_assignment PIN_W6 -to pSltDat[1]
set_location_assignment PIN_U7 -to pSltDat[0]

set_location_assignment PIN_AB10 -to pSltAdr[15]
set_location_assignment PIN_AB8 -to pSltAdr[14]
set_location_assignment PIN_AB5 -to pSltAdr[13]
set_location_assignment PIN_AB3 -to pSltAdr[12]
set_location_assignment PIN_AA3 -to pSltAdr[11]
set_location_assignment PIN_V14 -to pSltAdr[10]
set_location_assignment PIN_Y13 -to pSltAdr[9]
set_location_assignment PIN_U13 -to pSltAdr[8]
set_location_assignment PIN_AA10 -to pSltAdr[7]
set_location_assignment PIN_AA8 -to pSltAdr[6]
set_location_assignment PIN_AA5 -to pSltAdr[5]
set_location_assignment PIN_AB4 -to pSltAdr[4]
set_location_assignment PIN_AA4 -to pSltAdr[3]
set_location_assignment PIN_U14 -to pSltAdr[2]
set_location_assignment PIN_W13 -to pSltAdr[1]
set_location_assignment PIN_V12 -to pSltAdr[0]

#set_location_assignment PIN_W7 -to pSltWr_n
#set_location_assignment PIN_W10 -to pSltRd_n
#set_location_assignment PIN_Y10 -to pSltMerq_n
#set_location_assignment PIN_AB13 -to pSltDat[7]
#set_location_assignment PIN_AA14 -to pSltDat[6]
#set_location_assignment PIN_AA15 -to pSltDat[5]
#set_location_assignment PIN_AA13 -to pSltDat[4]
#set_location_assignment PIN_AB14 -to pSltDat[3]
#set_location_assignment PIN_AB15 -to pSltDat[2]
#set_location_assignment PIN_AA16 -to pSltDat[1]
#set_location_assignment PIN_AB16 -to pSltDat[0]
#set_location_assignment PIN_U13 -to pSltAdr[15]
#set_location_assignment PIN_Y13 -to pSltAdr[14]
#set_location_assignment PIN_V14 -to pSltAdr[13]
#set_location_assignment PIN_AA3 -to pSltAdr[12]
#set_location_assignment PIN_AB3 -to pSltAdr[11]
#set_location_assignment PIN_AB5 -to pSltAdr[10]
#set_location_assignment PIN_AB8 -to pSltAdr[9]
#set_location_assignment PIN_AB10 -to pSltAdr[8]
#set_location_assignment PIN_V12 -to pSltAdr[7]
#set_location_assignment PIN_W13 -to pSltAdr[6]
#set_location_assignment PIN_U14 -to pSltAdr[5]
#set_location_assignment PIN_AA4 -to pSltAdr[4]
#set_location_assignment PIN_AB4 -to pSltAdr[3]
#set_location_assignment PIN_AA5 -to pSltAdr[2]
#set_location_assignment PIN_AA8 -to pSltAdr[1]
#set_location_assignment PIN_AA10 -to pSltAdr[0]

set_location_assignment PIN_W21 -to SD_DAT[3]
set_location_assignment PIN_W22 -to SD_DAT[2]
set_location_assignment PIN_AA21 -to SD_DAT[1]
set_location_assignment PIN_AA22 -to SD_DAT[0]
set_location_assignment PIN_Y22 -to SD_CMD
set_location_assignment PIN_Y21 -to SD_CLK
set_location_assignment PIN_W20 -to SD_WP_N

set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_D*
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_A*
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_CLK
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_CKE
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_LDQM
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_UDQM
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_WE_N
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_CAS_N
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_RAS_N
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_CS_N
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_BA_1
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_BA_0
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to FLASH_D*
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to FLASH_A*
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to FLASH_WE_N
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to FLASH_RESET_N
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to FLASH_WP_N
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to FLASH_RY
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to FLASH_CE_N
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to FLASH_OE_N
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to FLASH_BYTE_N
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_R*
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_G*
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_B*
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_HS
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_VS
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX3_D*
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX2_D*
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX1_D*
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX0_D*
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LEDG*
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LCD_D*
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LCD_BLON
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LCD_RS
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LCD_RW
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LCD_EN
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to CLK50M1
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to CLK50M0
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to UART_RXD
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to UART_RTS
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to UART_TXD
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to UART_CTS
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to PS2_KBDAT
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to PS2_KBCLK
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to PS2_MSDAT
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to PS2_MSCLK
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to BUTTON*
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW*

set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SD_DAT*
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SD_CMD
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SD_CLK
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SD_WP_N

set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to DRAM_D*
set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to DRAM_A*
set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to DRAM_CLK
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to DRAM_CKE
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to DRAM_LDQM
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to DRAM_UDQM
set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to DRAM_WE_N
set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to DRAM_CAS_N
set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to DRAM_RAS_N
set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to DRAM_CS_N
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to DRAM_BA_1
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to DRAM_BA_0
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to FLASH_D*
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to FLASH_A*
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to FLASH_WE_N
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to FLASH_RESET_N
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to FLASH_WP_N
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to FLASH_CE_N
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to FLASH_OE_N
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to FLASH_BYTE_N
set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_R*
set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_G*
set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_B*
set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_HS
set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to VGA_VS
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to HEX3_D*
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to HEX2_D*
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to HEX1_D*
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to HEX0_D*
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to LEDG*
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to LCD_D*
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to LCD_BLON
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to LCD_RS
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to LCD_RW
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to LCD_EN
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to UART_TXD
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to UART_CTS
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to PS2_KBDAT
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to PS2_KBCLK
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to PS2_MSDAT
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to PS2_MSCLK

set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to SD_DAT*
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to SD_CMD
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to SD_CLK

set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to DRAM_D*
set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to FLASH_D*
set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to LCD_D*
set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to GPIO1_D
set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to GPIO0_D

set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to pSltMerq_n
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to pSltMerq_n
set_instance_assignment -name PCI_IO ON -to pSltMerq_n
#set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to pSltWr_n
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to pSltWr_n
set_instance_assignment -name PCI_IO ON -to pSltWr_n
set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to pSltRd_n
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to pSltRd_n
set_instance_assignment -name PCI_IO ON -to pSltRd_n
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to pSltAdr[0]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to pSltAdr[1]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to pSltAdr[2]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to pSltAdr[3]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to pSltAdr[4]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to pSltAdr[5]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to pSltAdr[6]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to pSltAdr[7]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to pSltAdr[8]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to pSltAdr[9]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to pSltAdr[10]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to pSltAdr[11]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to pSltAdr[12]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to pSltAdr[13]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to pSltAdr[14]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to pSltAdr[15]
set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to pSltDat[0]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to pSltDat[0]
set_instance_assignment -name PCI_IO ON -to pSltDat[0]
set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to pSltDat[1]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to pSltDat[1]
set_instance_assignment -name PCI_IO ON -to pSltDat[1]
set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to pSltDat[2]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to pSltDat[2]
set_instance_assignment -name PCI_IO ON -to pSltDat[2]
set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to pSltDat[3]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to pSltDat[3]
set_instance_assignment -name PCI_IO ON -to pSltDat[3]
set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to pSltDat[4]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to pSltDat[4]
set_instance_assignment -name PCI_IO ON -to pSltDat[4]
set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to pSltDat[5]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to pSltDat[5]
set_instance_assignment -name PCI_IO ON -to pSltDat[5]
set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to pSltDat[6]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to pSltDat[6]
set_instance_assignment -name PCI_IO ON -to pSltDat[6]
set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to pSltDat[7]
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to pSltDat[7]
set_instance_assignment -name PCI_IO ON -to pSltDat[7]

set_global_assignment -name RESERVE_ALL_UNUSED_PINS_WEAK_PULLUP "AS INPUT TRI-STATED WITH WEAK PULL-UP"
set_global_assignment -name RESERVE_FLASH_NCE_AFTER_CONFIGURATION "AS INPUT TRI-STATED"
set_global_assignment -name CYCLONEII_RESERVE_NCEO_AFTER_CONFIGURATION "USE AS REGULAR IO"
set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS ON
set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL ON
set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0
set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85
set_global_assignment -name POWER_PRESET_COOLING_SOLUTION "23 MM HEAT SINK WITH 200 LFPM AIRFLOW"
set_global_assignment -name POWER_BOARD_THERMAL_MODEL "NONE (CONSERVATIVE)"

set_global_assignment -name QIP_FILE ../src/MIKBUG.qip
set_global_assignment -name VHDL_FILE ../src/DPRAM_192W6B.vhd
set_global_assignment -name VHDL_FILE ../src/DPRAM_49152W6B.vhd
set_global_assignment -name VHDL_FILE ../src/bufferedUART.vhd
set_global_assignment -name VHDL_FILE ../src/PLL14M.vhd
set_global_assignment -name VHDL_FILE ../src/PLL16M.vhd
set_global_assignment -name VHDL_FILE ../src/PLL100M.vhd
set_global_assignment -name VHDL_FILE ../src/CGROM60S.vhd
set_global_assignment -name VHDL_FILE ../src/CLKGEN.vhd
set_global_assignment -name VHDL_FILE ../src/MC6847_TMGCNT.vhd
set_global_assignment -name VHDL_FILE ../src/MC6847_DISP.vhd
set_global_assignment -name VHDL_FILE ../src/MC6847.vhd
set_global_assignment -name VHDL_FILE ../src/VDGMEMCNT.vhd
set_global_assignment -name VHDL_FILE ../src/VGAOUT.vhd
set_global_assignment -name VHDL_FILE ../src/VDG.vhd
set_global_assignment -name QIP_FILE ../src/Ram8K.qip
set_global_assignment -name CDF_FILE Chain1.cdf
set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top

学研TVボーイ拡張カートリッジをマルチカート改造その2

前回メモリーマップを変更しましたが、

$0000-$00FF MPU
$0100-$0FFF 4K RAM
$1000-$17FF VRAM
$1800-$1FFF 2K RAM
$F000-$FFFF 4K ROM x 16

残念ながらVRAMは2KB($1000-$17FF)のままで、4KB($1000-$1FFF)を使用する事はできませんでした。学研TVボーイのMC6847を見ると、以下が結線されていないためです。

GM2
A11
A12

また市街戦200X年のMPUはHD6801V0Pで、内蔵RAM($80-$FF)は128bytesですが、それ以外のカートリッジはモトローラMPUであるSC930XXPとなっており、内蔵RAMの拡張($40-$7F)タイマ割り込みの追加などがされており、拡張カートリッジのMC6803では外部メモリ($40-$7F)を追加しても、フロッガーとスーパーコブラはうまく動きませんでした。(ロボタンウォーズも速すぎる)

なおMC6803のかわりに、モトローラのカスタムMPU(SC930XXP)を使うとフロッガー、スーパーコブラロボタンウォーズが正しく動きました。

学研TVボーイ拡張カートリッジをマルチカート改造その1

TVボーイにCPU、RAM、ROMを外付けして自作プログラムを実行するための基板が公開されています。マルチカートにするために、

inufuto.web.fc2.com

このメモリーマップを

$0000-$003F MPU
$0080-$00FF INT RAM
$1000-$17FF VRAM
$4000-$5FFF 8K RAM
$8000-$FFFF 32K ROM

こうしたい

$0000-$003F MPU
$0040-$007F EXT RAM
$0080-$00FF INT RAM
$0100-$0FFF EXT RAM
$1000-$17FF VRAM
$1800-$1FFF EXT RAM
$F000-$FFFF 4K ROM x 16

基板を改造してGALとジャンパーを追加します。

;
;
; TVBOY.EQN - TVBOY MULTICART
;

TITLE TVBOY MULTICART
PATTERN A
REVISION 1.0
AUTHOR TANAM1972
COMPANY PARALLEL COMPUTER INC
DATE 6/11/23

CHIP TVBOY GAL16V8B

NC NC A15 A14 A13 A12 A11 NC NC GND
NC CE1_n CE2 CE_n NC NC NC NC NC VCC

EQUATIONS

CE1_n = A15 + A14 + A13

CE2 = VCC

CE_n = /A15 + /A14 + /A13 + /A12

ジャンパーでA15、A14、A13、A12を設定してアドレスを変更する。

27C512(X000-XFFF)

0000:メモリーテスト
1000:エキサイトインベーダー
2000:ミスターボム
3000:ロボタンウォーズ
4000:地対空大作戦 - スーパーコブラの移植
5000:フロッガー
6000:市街戦200X年
7000:TODO
8000:TODO
9000:TODO
A000:TODO
B000:TODO
C000:TODO
D000:TODO
E000:TODO
F000:TODO

USBキーボードをMDにつなげてみた その4

メガドライブUSBキーボード基板セットを販売開始しました。

tms9918.booth.pm

今回は工作で注意するところを書いていきます。

メガドライブUSBキーボード基板には、お好みでICソケットやPINヘッダを実装してください。 Dサブ9P〜ソケット変換ケーブルはaitendoで入手しました。

Mini USB Host ShieldとArduino Pro Miniのピンヘッダの向きに注意してください。とくにMini USB Host Shieldは加工が必要なのと、裏返して基板に実装するので気を付けてください。

Arduino Pro Miniには、以下を参考にファームウェアを書き込んで組み立ててください。

tms9918.hatenablog.com

以下の部品セットを販売予定です。Mini USB Host ShieldとArduino Pro Mini 3.3Vは新品です。74HC08とGAL16V8Bは動作確認しています。ICソケット、PINヘッダ、Dサブ9P〜ソケット変換ケーブルは別途準備ください。

Arduino Pro Mini 3.3V
Mini USB Host Shield
74HC08
GAL16V8B

またMini USB Host Shieldはパターンカット加工が必要です。まずはMini USB Host ShieldとArduino Pro Mini 3.3Vで動作確認しましょう。

okiraku-camera.tokyo

カートリッジ基板の組み立てイメージは以下になります。27C4096はTL866CSで読み書きできました。

イメージファイルはROMライタで書き込む前に、エミュレータで実行できるrom.binを以下のコマンドでroms.binに変換する必要があります。

> srec_cat  rom.bin -binary -byte-swap 2 -o roms.bin -binary

USBキーボードをMDにつなげてみた その3

今回はUSBキーボードアダプタのハードウェアについて書きます。以下は参考の入手先です。

Arduino Pro Mini 3.3V 1480円(アマゾン)
Mini USB Host Shield 2398円(アマゾン)
74HC08 46円(オレンジピコ)
GAL16V8B 295円(オレンジピコ)

組み立て前に、Arduino Pro Miniには以下を書き込んでください。書き込み装置 (6ピン USB シリアル変換) が必要となります。 tms9918.hatenablog.com

GAL16V8Bには以下を書き込んでください。書き込み装置 (TL866CSなど) が必要となります。 tms9918.hatenablog.com

Mini USB Host Shieldは以下を参考に加工してください。 okiraku-camera.tokyo

ピンヘッダ、ICソケットなどはお好みで実装してください。Mini USB Host Shieldについては上記のサイトを参考にしてください。

MD Arduino 7408 GAL16

1:U   D4
2:D   D5
3:L       L
4:R       R   
5:5V  VCC  VCC  VCC
6:B          AB_n
7:SEL     SEL  SEL
8:GND GND  GND  GND
9:C          CS_n
    D6   L_n
    D7   R_n
    D8       A_n
    D14      B_n
    D15      C_n
    D16      S_n

メガドライブ側のソフトウェアは以下で公開しております。

tms9918.mydns.jp