ITX-65C816
Jump to navigation
Jump to search
Contents
Features
- W65C816 CPU
- 3.3V
- Running at 8.33 MHz
- Native mode (65C816 extended code) and emulation mode (65C02 code)
- Native mode allows for 24-bit address space
- Installs into FPGA-ITX-01 backplane
CPU Internal Block Diagram
CPU Features
CPU Pinout
NOP Generator
- Validate connections between CPU and FPGA
- Address line count up
- Data lines send out NOP ($EA) opcode controlled by RWB and CPU Clock
- Control lines
- Clock to CPU (from clock divider)
- RWB from CPU
- Bus control lines
- VHDL code
-- CPU signals IO_CPU_DATA <= x"EA" when i_CPU_RWB = '1' else (others => 'Z'); CPUClkGen : entity work.counter generic map (n => 20) port map ( clock => w_cpuClk, clear => '0', count => '1', Q => w_CPUClkCount ); process (i_clk_50) begin if rising_edge(i_clk_50) then o_CPU_PHI2 <= w_CPUClkCount(4); end if; end process; o_CPU_RESB_n <= i_n_reset; o_CPU_IRQB_n <= '1'; o_CPU_NMIB_n <= '1'; o_CPU_ABORTB <= '1'; o_CPU_BE <= '1';
- Used scope and observed Address lines count up
- SignalTap capture of address lines at 0xFFFF to 0x0000 transition
Upper address bits latch
Timing
Connectors
Schematics
Pin List
U8 PIN | EP4CE15/55 | 5CEFA2 | 10C1006 | FUNCTION | U8 PIN | EP4CE15/55 | 5CEFA2 | 10C1006 | FUNCTION | |
---|---|---|---|---|---|---|---|---|---|---|
1 | GND | GND | GND | GND | 2 | GND | GND | GND | GND | |
3 | 3.3V | 3.3V | 3.3V | 3.3V | 4 | 3.3V | 3.3V | 3.3V | 3.3V | |
5 | GND | GND | GND | GND | 6 | GND | GND | GND | GND | |
7 | PIN_AA13 | PIN_AA14 | PIN_R9 | CPU_VPB | 8 | PIN_AB13 | PIN_AA13 | PIN_T9 | CPU_RESB* | |
9 | PIN_AA14 | PIN_AA15 | PIN_R10 | CPU_RDY | 10 | PIN_AB14 | PIN_AB15 | PIN_T10 | CPU_VDA | |
11 | PIN_AA15 | PIN_Y15 | PIN_R11 | CPU_ABORT | 12 | PIN_AB15 | PIN_Y14 | PIN_T11 | CPU_MX | |
13 | PIN_AA16 | PIN_AB18 | PIN_R12 | CPU_IRQB | 14 | PIN_AB16 | PIN_AB17 | PIN_T12 | CPU_PHI2 | |
15 | PIN_AA17 | PIN_Y17 | PIN_N9 | CPU_MLB | 16 | PIN_AB17 | PIN_Y16 | PIN_M9 | CPU_BE | |
17 | PIN_AA18 | PIN_AA18 | PIN_M10 | CPU_NMIB | 18 | PIN_AB18 | PIN_AA17 | PIN_P9 | CPU_E | |
19 | PIN_AA19 | PIN_AA20 | PIN_P11 | CPU_VPA | 20 | PIN_AB19 | PIN_AA19 | PIN_N11 | CPU_RWB | |
21 | PIN_AA20 | PIN_Y20 | PIN_R13 | CPU_A0 | 22 | PIN_AB20 | PIN_Y19 | PIN_T13 | CPU_D0 | |
23 | PIN_Y22 | PIN_AB21 | PIN_T15 | CPU_A1 | 24 | PIN_Y21 | PIN_AB20 | PIN_T14 | CPU_D1 | |
25 | PIN_W22 | PIN_AA22 | PIN_N12 | CPU_A2 | 26 | PIN_W21 | PIN_AB22 | PIN_M11 | CPU_D2 | |
27 | PIN_V22 | PIN_W22 | PIN_R14 | CPU_A3 | 28 | PIN_V21 | PIN_Y22 | PIN_N13 | CPU_D3 | |
29 | PIN_U22 | PIN_Y21 | PIN_N14 | CPU_A4 | 30 | PIN_U21 | PIN_W21 | PIN_P14 | CPU_D4 | |
31 | PIN_R22 | PIN_U22 | PIN_P16 | CPU_A5 | 32 | PIN_R21 | PIN_V21 | PIN_R16 | CPU_D5 | |
33 | PIN_P22 | PIN_V20 | PIN_N16 | CPU_A6 | 34 | PIN_P21 | PIN_W19 | PIN_N15 | CPU_D6 | |
35 | PIN_N22 | PIN_U21 | PIN_M16 | N/C | 36 | PIN_N21 | PIN_U20 | PIN_M15 | N/C | |
37 | PIN_M22 | PIN_R22 | PIN_L16 | CPU_A7 | 38 | PIN_M21 | PIN_T22 | PIN_L15 | CPU_D7 | |
39 | PIN_L22 | PIN_P22 | PIN_P15 | CPU_A8 | 40 | PIN_L21 | PIN_R21 | PIN_M12 | CPU_A15 | |
41 | PIN_K22 | PIN_T20 | PIN_L14 | CPU_A9 | 42 | PIN_K21 | PIN_T19 | PIN_L13 | CPU_A14 | |
43 | PIN_J22 | PIN_P16 | PIN_K16 | CPU_A10 | 44 | PIN_J21 | PIN_P17 | PIN_K15 | CPU_A13 | |
45 | PIN_H22 | PIN_N20 | PIN_K12 | CPU_A11 | 46 | PIN_H21 | PIN_N21 | PIN_J12 | CPU_A12 | |
47 | N/C | N/C | N/C | N/C | 48 | N/C | N/C | N/C | N/C | |
49 | N/C | N/C | N/C | N/C | 50 | N/C | N/C | N/C | N/C |
MultiComp Build
- GitHub repo
- 24-bit address (upper 8-bits latched in FPGA)
- 8.33 MHz operation
- Tested/Working
- Running OSI 6502
- Microsoft 8K BASIC "in ROM"
- VGA output
- 1MB SRAM
- PS/2 Keyboard
Pins 10CL006YU256C8G
set_global_assignment -name FAMILY "Cyclone 10 LP" set_global_assignment -name DEVICE 10CL006YU256C8G set_global_assignment -name TOP_LEVEL_ENTITY M6502_VGA set_global_assignment -name ORIGINAL_QUARTUS_VERSION "13.0 SP1" set_global_assignment -name PROJECT_CREATION_TIME_DATE "18:01:55 MARCH 31, 2019" set_global_assignment -name LAST_QUARTUS_VERSION "21.1.0 Lite Edition" set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0 set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85 set_global_assignment -name ERROR_CHECK_FREQUENCY_DIVISOR 1 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 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 STRATIX_DEVICE_IO_STANDARD "3.3-V LVTTL" set_global_assignment -name USE_CONFIGURATION_DEVICE OFF set_global_assignment -name CRC_ERROR_OPEN_DRAIN OFF set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -rise set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -fall set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -rise set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -fall set_global_assignment -name CYCLONEII_RESERVE_NCEO_AFTER_CONFIGURATION "USE AS REGULAR IO" # Clock, reset switch set_location_assignment PIN_E1 -to i_clk_50 set_location_assignment PIN_J6 -to i_n_reset set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to i_n_reset # PS/2 keyboard set_location_assignment PIN_C2 -to io_ps2Clk set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to io_ps2Clk set_location_assignment PIN_D1 -to io_ps2Data set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to io_ps2Data # Serial port with RTS/CTS set_location_assignment PIN_A15 -to i_n_cts set_location_assignment PIN_D14 -to i_rxd set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to i_rxd set_location_assignment PIN_B16 -to o_n_rts set_location_assignment PIN_C15 -to o_txd # Audio set_location_assignment PIN_G1 -to audioR set_location_assignment PIN_G2 -to audioL # Video set_location_assignment PIN_A10 -to o_vid_red[0] set_location_assignment PIN_B10 -to o_vid_red[1] set_location_assignment PIN_E11 -to o_vid_red[2] set_location_assignment PIN_A11 -to o_vid_grn[0] set_location_assignment PIN_D12 -to o_vid_grn[1] set_location_assignment PIN_D11 -to o_vid_grn[2] set_location_assignment PIN_A12 -to o_vid_blu[0] set_location_assignment PIN_B11 -to o_vid_blu[1] set_location_assignment PIN_B12 -to o_vid_hSync set_location_assignment PIN_A13 -to o_vid_vSync # SRAM set_location_assignment PIN_D4 -to o_n_sRamCS set_location_assignment PIN_A4 -to o_n_sRamOE set_location_assignment PIN_D8 -to o_n_sRamWE set_location_assignment PIN_C6 -to io_sramData[0] set_location_assignment PIN_B5 -to io_sramData[1] set_location_assignment PIN_B6 -to io_sramData[2] set_location_assignment PIN_B7 -to io_sramData[3] set_location_assignment PIN_A6 -to io_sramData[4] set_location_assignment PIN_A5 -to io_sramData[5] set_location_assignment PIN_D6 -to io_sramData[6] set_location_assignment PIN_E6 -to io_sramData[7] set_location_assignment PIN_E5 -to o_sramAddress[0] set_location_assignment PIN_B4 -to o_sramAddress[1] set_location_assignment PIN_B3 -to o_sramAddress[2] set_location_assignment PIN_D3 -to o_sramAddress[3] set_location_assignment PIN_B1 -to o_sramAddress[4] set_location_assignment PIN_F5 -to o_sramAddress[5] set_location_assignment PIN_C3 -to o_sramAddress[6] set_location_assignment PIN_A3 -to o_sramAddress[7] set_location_assignment PIN_A2 -to o_sramAddress[8] set_location_assignment PIN_A7 -to o_sramAddress[9] set_location_assignment PIN_C8 -to o_sramAddress[10] set_location_assignment PIN_C9 -to o_sramAddress[11] set_location_assignment PIN_A8 -to o_sramAddress[12] set_location_assignment PIN_A9 -to o_sramAddress[13] set_location_assignment PIN_E8 -to o_sramAddress[14] set_location_assignment PIN_E10 -to o_sramAddress[15] set_location_assignment PIN_E9 -to o_sramAddress[16] set_location_assignment PIN_B9 -to o_sramAddress[17] set_location_assignment PIN_B8 -to o_sramAddress[18] set_location_assignment PIN_D9 -to o_sramAddress[19] # SD Card set_location_assignment PIN_B13 -to sdCS set_location_assignment PIN_C14 -to sdMISO set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to sdMISO set_location_assignment PIN_A14 -to sdMOSI set_location_assignment PIN_B14 -to sdClock set_location_assignment PIN_C16 -to i_n_CardDet set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to i_n_CardDet set_location_assignment PIN_L9 -to driveLED # SDRAM set_location_assignment PIN_P2 -to sdRamClk set_location_assignment PIN_R1 -to sdRamClkEn set_location_assignment PIN_M7 -to n_sdRamCas set_location_assignment PIN_P8 -to n_sdRamCe set_location_assignment PIN_M8 -to n_sdRamRas set_location_assignment PIN_P6 -to n_sdRamWe set_location_assignment PIN_R7 -to sdRamAddr[0] set_location_assignment PIN_T7 -to sdRamAddr[1] set_location_assignment PIN_R8 -to sdRamAddr[2] set_location_assignment PIN_T8 -to sdRamAddr[3] set_location_assignment PIN_R6 -to sdRamAddr[4] set_location_assignment PIN_T5 -to sdRamAddr[5] set_location_assignment PIN_R5 -to sdRamAddr[6] set_location_assignment PIN_T4 -to sdRamAddr[7] set_location_assignment PIN_R4 -to sdRamAddr[8] set_location_assignment PIN_T3 -to sdRamAddr[9] set_location_assignment PIN_T6 -to sdRamAddr[10] set_location_assignment PIN_R3 -to sdRamAddr[11] set_location_assignment PIN_T2 -to sdRamAddr[12] set_location_assignment PIN_N8 -to sdRamAddr[13] set_location_assignment PIN_L8 -to sdRamAddr[14] set_location_assignment PIN_K5 -to sdRamData[0] set_location_assignment PIN_L3 -to sdRamData[1] set_location_assignment PIN_L4 -to sdRamData[2] set_location_assignment PIN_K6 -to sdRamData[3] set_location_assignment PIN_N3 -to sdRamData[4] set_location_assignment PIN_M6 -to sdRamData[5] set_location_assignment PIN_P3 -to sdRamData[6] set_location_assignment PIN_N5 -to sdRamData[7] set_location_assignment PIN_N2 -to sdRamData[8] set_location_assignment PIN_N1 -to sdRamData[9] set_location_assignment PIN_L1 -to sdRamData[10] set_location_assignment PIN_L2 -to sdRamData[11] set_location_assignment PIN_K1 -to sdRamData[12] set_location_assignment PIN_K2 -to sdRamData[13] set_location_assignment PIN_J1 -to sdRamData[14] set_location_assignment PIN_J2 -to sdRamData[15] # set_location_assignment PIN_J14 -to IO_PIN[47] set_location_assignment PIN_J13 -to IO_PIN[48] set_location_assignment PIN_K11 -to IO_PIN[49] set_location_assignment PIN_J11 -to IO_PIN[50] set_location_assignment PIN_G11 -to IO_PIN[51] set_location_assignment PIN_F11 -to IO_PIN[52] set_location_assignment PIN_F13 -to IO_PIN[53] set_location_assignment PIN_F14 -to IO_PIN[54] set_location_assignment PIN_F10 -to IO_PIN[55] set_location_assignment PIN_F9 -to IO_PIN[56] set_location_assignment PIN_E16 -to IO_PIN[57] set_location_assignment PIN_E15 -to IO_PIN[58] set_location_assignment PIN_D16 -to IO_PIN[59] set_location_assignment PIN_D15 -to IO_PIN[60] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to IO_PIN[60] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to IO_PIN[59] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to IO_PIN[56] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to IO_PIN[55] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to IO_PIN[54] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to IO_PIN[53] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to IO_PIN[52] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to IO_PIN[51] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to IO_PIN[50] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to IO_PIN[49] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to IO_PIN[48] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to IO_PIN[47] # set_global_assignment -name ENABLE_OCT_DONE OFF set_global_assignment -name ENABLE_CONFIGURATION_PINS OFF set_global_assignment -name ENABLE_BOOT_SEL_PIN OFF set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS ON set_global_assignment -name SMART_RECOMPILE ON set_global_assignment -name NUM_PARALLEL_PROCESSORS ALL set_location_assignment PIN_M12 -to i_CPU_ADDR[15] set_location_assignment PIN_L13 -to i_CPU_ADDR[14] set_location_assignment PIN_K15 -to i_CPU_ADDR[13] set_location_assignment PIN_J12 -to i_CPU_ADDR[12] set_location_assignment PIN_K12 -to i_CPU_ADDR[11] set_location_assignment PIN_K16 -to i_CPU_ADDR[10] set_location_assignment PIN_L14 -to i_CPU_ADDR[9] set_location_assignment PIN_P15 -to i_CPU_ADDR[8] set_location_assignment PIN_L16 -to i_CPU_ADDR[7] set_location_assignment PIN_N16 -to i_CPU_ADDR[6] set_location_assignment PIN_P16 -to i_CPU_ADDR[5] set_location_assignment PIN_N14 -to i_CPU_ADDR[4] set_location_assignment PIN_R14 -to i_CPU_ADDR[3] set_location_assignment PIN_N12 -to i_CPU_ADDR[2] set_location_assignment PIN_T15 -to i_CPU_ADDR[1] set_location_assignment PIN_R13 -to i_CPU_ADDR[0] set_location_assignment PIN_P9 -to I_CPU_E set_location_assignment PIN_N9 -to i_CPU_MLB set_location_assignment PIN_T11 -to i_CPU_MX set_location_assignment PIN_N11 -to i_CPU_RWB set_location_assignment PIN_T10 -to i_CPU_VDA set_location_assignment PIN_P11 -to i_CPU_VPA set_location_assignment PIN_R9 -to i_CPU_VPB set_location_assignment PIN_R11 -to o_CPU_ABORTB set_location_assignment PIN_M9 -to o_CPU_BE set_location_assignment PIN_R12 -to o_CPU_IRQB_n set_location_assignment PIN_M10 -to o_CPU_NMIB_n set_location_assignment PIN_T12 -to o_CPU_PHI2 set_location_assignment PIN_T9 -to o_CPU_RESB_n set_location_assignment PIN_R10 -to io_CPU_RDY set_location_assignment PIN_L15 -to IO_CPU_DATA[7] set_location_assignment PIN_N15 -to IO_CPU_DATA[6] set_location_assignment PIN_R16 -to IO_CPU_DATA[5] set_location_assignment PIN_P14 -to IO_CPU_DATA[4] set_location_assignment PIN_N13 -to IO_CPU_DATA[3] set_location_assignment PIN_M11 -to IO_CPU_DATA[2] set_location_assignment PIN_T14 -to IO_CPU_DATA[1] set_location_assignment PIN_T13 -to IO_CPU_DATA[0] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to i_CPU_ADDR[15] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to i_CPU_ADDR[14] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to i_CPU_ADDR[13] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to i_CPU_ADDR[12] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to i_CPU_ADDR[11] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to i_CPU_ADDR[10] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to i_CPU_ADDR[9] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to i_CPU_ADDR[8] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to i_CPU_ADDR[7] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to i_CPU_ADDR[6] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to i_CPU_ADDR[5] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to i_CPU_ADDR[4] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to i_CPU_ADDR[3] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to i_CPU_ADDR[2] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to i_CPU_ADDR[1] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to i_CPU_ADDR[0] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to i_CPU_ADDR set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to I_CPU_E set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to i_CPU_MLB set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to i_CPU_MX set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to i_CPU_RWB set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to i_CPU_VDA set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to i_CPU_VPA set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to i_CPU_VPB set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to i_n_cts set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to IO_CPU_DATA[7] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to IO_CPU_DATA[6] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to IO_CPU_DATA[5] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to IO_CPU_DATA[4] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to IO_CPU_DATA[3] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to IO_CPU_DATA[2] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to IO_CPU_DATA[1] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to IO_CPU_DATA[0] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to IO_CPU_DATA set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to io_CPU_RDY set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to io_sramData[7] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to io_sramData[6] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to io_sramData[5] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to io_sramData[4] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to io_sramData[3] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to io_sramData[2] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to io_sramData[1] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to io_sramData[0] set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to io_sramData
Resources
- Datasheet on Archive.org site
- The 6502/65C02/65C816 Instruction Set Decoded
- Programming the 65816
- Text version of the datasheet
- A 65816 Primer
- A 6502 Programmer's Introduction to the 65816
- INVESTIGATING 65C816 INTERRUPTS
Installed
- Installed on FPGA-ITX-01 card behind bus monitor