From 158510c299eca33138c63dd50a063dc3c9787dfa Mon Sep 17 00:00:00 2001 From: Alan Garfield Date: Wed, 10 Jan 2018 16:39:18 +1100 Subject: [PATCH] Added basic ROM and fiddled things Clock now runs at 6MHz while I try to simplify things to figure out a CPU bug --- .gitignore | 4 + apple1_sbt.project | 6 +- apple1_syn.prd | 2 +- apple1_syn.prj | 6 +- basic.hex | 4096 ++++++++++++++++++++++++++++++++++++++++++++ basic.v | 95 +- clk_div.v | 32 - flag.v | 15 - ice40hx8k.pcf | 20 +- tm1638.v | 6 +- 10 files changed, 4171 insertions(+), 111 deletions(-) create mode 100644 .gitignore create mode 100644 basic.hex delete mode 100644 clk_div.v delete mode 100644 flag.v diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f9657e3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +*_Implmnt +*.xcf +*.log +synlog.tcl \ No newline at end of file diff --git a/apple1_sbt.project b/apple1_sbt.project index e597573..0cfe649 100644 --- a/apple1_sbt.project +++ b/apple1_sbt.project @@ -4,7 +4,7 @@ Version=Lattice Semiconductor Corporation iCEcube - Release: 2017.08.27940 - Bui ProjectName=apple1 Vendor=SiliconBlue Synthesis=synplify -ProjectVFiles=MUX.v=work,basic.v=work,chip_6502.v=work,clk_div.v=work,uart.v=work,flag.v=work,tm1638.v=work,led_and_key.v +ProjectVFiles=basic.v=work,uart.v=work,tm1638.v=work,led_and_key.v=work,chip_6502.v,MUX.v ProjectCFiles= CurImplementation=apple1_Implmnt Implementations=apple1_Implmnt @@ -16,11 +16,11 @@ DeviceFamily=iCE40 Device=HX8K DevicePackage=CT256 DevicePower= -NetlistFile=apple1_Implmnt/apple1.edf +NetlistFile= AdditionalEDIFFile= IPEDIFFile= DesignLib=apple1_Implmnt/sbt/netlist/oadb-top -DesignView=_rt +DesignView= DesignCell=top SynthesisSDCFile=apple1_Implmnt/apple1.scf UserPinConstraintFile= diff --git a/apple1_syn.prd b/apple1_syn.prd index 10ea32f..181fa84 100644 --- a/apple1_syn.prd +++ b/apple1_syn.prd @@ -1,7 +1,7 @@ #-- Synopsys, Inc. #-- Version L-2016.09L+ice40 #-- Project file C:\Users\Alan\Desktop\projects\apple1\apple1_syn.prd -#-- Written on Mon Jan 01 01:15:55 2018 +#-- Written on Thu Jan 04 21:48:56 2018 # ### Watch Implementation type ### diff --git a/apple1_syn.prj b/apple1_syn.prj index ae3a1fa..2255154 100644 --- a/apple1_syn.prj +++ b/apple1_syn.prj @@ -8,14 +8,12 @@ -add_file -verilog -lib work "MUX.v" add_file -verilog -lib work "basic.v" -add_file -verilog -lib work "chip_6502.v" -add_file -verilog -lib work "clk_div.v" add_file -verilog -lib work "uart.v" -add_file -verilog -lib work "flag.v" add_file -verilog -lib work "tm1638.v" add_file -verilog -lib work "led_and_key.v" +add_file -verilog -lib work "chip_6502.v" +add_file -verilog -lib work "MUX.v" #implementation: "apple1_Implmnt" impl -add apple1_Implmnt -type fpga diff --git a/basic.hex b/basic.hex new file mode 100644 index 0000000..4017852 --- /dev/null +++ b/basic.hex @@ -0,0 +1,4096 @@ +4C +B0 +E2 +AD +11 +D0 +10 +FB +AD +10 +D0 +60 +8A +29 +20 +F0 +23 +A9 +A0 +85 +E4 +4C +C9 +E3 +A9 +20 +C5 +24 +B0 +0C +A9 +8D +A0 +07 +20 +C9 +E3 +A9 +A0 +88 +D0 +F8 +A0 +00 +B1 +E2 +E6 +E2 +D0 +02 +E6 +E3 +60 +20 +15 +E7 +20 +76 +E5 +A5 +E2 +C5 +E6 +A5 +E3 +E5 +E7 +B0 +EF +20 +6D +E0 +4C +3B +E0 +A5 +CA +85 +E2 +A5 +CB +85 +E3 +A5 +4C +85 +E6 +A5 +4D +85 +E7 +D0 +DE +20 +15 +E7 +20 +6D +E5 +A5 +E4 +85 +E2 +A5 +E5 +85 +E3 +B0 +C7 +86 +D8 +A9 +A0 +85 +FA +20 +2A +E0 +98 +85 +E4 +20 +2A +E0 +AA +20 +2A +E0 +20 +1B +E5 +20 +18 +E0 +84 +FA +AA +10 +18 +0A +10 +E9 +A5 +E4 +D0 +03 +20 +11 +E0 +8A +20 +C9 +E3 +A9 +25 +20 +1A +E0 +AA +30 +F5 +85 +E4 +C9 +01 +D0 +05 +A6 +D8 +4C +CD +E3 +48 +84 +CE +A2 +ED +86 +CF +C9 +51 +90 +04 +C6 +CF +E9 +50 +48 +B1 +CE +AA +88 +B1 +CE +10 +FA +E0 +C0 +B0 +04 +E0 +00 +30 +F2 +AA +68 +E9 +01 +D0 +E9 +24 +E4 +30 +03 +20 +F8 +EF +B1 +CE +10 +10 +AA +29 +3F +85 +E4 +18 +69 +A0 +20 +C9 +E3 +88 +E0 +C0 +90 +EC +20 +0C +E0 +68 +C9 +5D +F0 +A4 +C9 +28 +D0 +8A +F0 +9E +20 +18 +E1 +95 +50 +D5 +78 +90 +11 +A0 +2B +4C +E0 +E3 +20 +34 +EE +D5 +50 +90 +F4 +20 +E4 +EF +95 +78 +4C +23 +E8 +20 +34 +EE +F0 +E7 +38 +E9 +01 +60 +20 +18 +E1 +95 +50 +18 +F5 +78 +4C +02 +E1 +A0 +14 +D0 +D6 +20 +18 +E1 +E8 +B5 +50 +85 +DA +65 +CE +48 +A8 +B5 +78 +85 +DB +65 +CF +48 +C4 +CA +E5 +CB +B0 +E3 +A5 +DA +69 +FE +85 +DA +A9 +FF +A8 +65 +DB +85 +DB +C8 +B1 +DA +D9 +CC +00 +D0 +0F +98 +F0 +F5 +68 +91 +DA +99 +CC +00 +88 +10 +F7 +E8 +60 +EA +A0 +80 +D0 +95 +A9 +00 +20 +0A +E7 +A0 +02 +94 +78 +20 +0A +E7 +A9 +BF +20 +C9 +E3 +A0 +00 +20 +9E +E2 +94 +78 +EA +EA +EA +B5 +51 +85 +CE +B5 +79 +85 +CF +E8 +E8 +20 +BC +E1 +B5 +4E +D5 +76 +B0 +15 +F6 +4E +A8 +B1 +CE +B4 +50 +C4 +E4 +90 +04 +A0 +83 +D0 +C1 +91 +DA +F6 +50 +90 +E5 +B4 +50 +8A +91 +DA +E8 +E8 +60 +B5 +51 +85 +DA +38 +E9 +02 +85 +E4 +B5 +79 +85 +DB +E9 +00 +85 +E5 +A0 +00 +B1 +E4 +18 +E5 +DA +85 +E4 +60 +B5 +53 +85 +CE +B5 +7B +85 +CF +B5 +51 +85 +DA +B5 +79 +85 +DB +E8 +E8 +E8 +A0 +00 +94 +78 +94 +A0 +C8 +94 +50 +B5 +4D +D5 +75 +08 +48 +B5 +4F +D5 +77 +90 +07 +68 +28 +B0 +02 +56 +50 +60 +A8 +B1 +CE +85 +E4 +68 +A8 +28 +B0 +F3 +B1 +DA +C5 +E4 +D0 +ED +F6 +4F +F6 +4D +B0 +D7 +20 +D7 +E1 +4C +36 +E7 +20 +54 +E2 +06 +CE +26 +CF +90 +0D +18 +A5 +E6 +65 +DA +85 +E6 +A5 +E7 +65 +DB +85 +E7 +88 +F0 +09 +06 +E6 +26 +E7 +10 +E4 +4C +7E +E7 +A5 +E6 +20 +08 +E7 +A5 +E7 +95 +A0 +06 +E5 +90 +28 +4C +6F +E7 +A9 +55 +85 +E5 +20 +5B +E2 +A5 +CE +85 +DA +A5 +CF +85 +DB +20 +15 +E7 +84 +E6 +84 +E7 +A5 +CF +10 +09 +CA +06 +E5 +20 +6F +E7 +20 +15 +E7 +A0 +10 +60 +20 +6C +EE +F0 +C5 +FF +C9 +84 +D0 +02 +46 +F8 +C9 +DF +F0 +11 +C9 +9B +F0 +06 +99 +00 +02 +C8 +10 +0A +A0 +8B +20 +C4 +E3 +A0 +01 +88 +30 +F6 +20 +03 +E0 +EA +EA +20 +C9 +E3 +C9 +8D +D0 +D6 +A9 +DF +99 +00 +02 +60 +20 +D3 +EF +20 +CD +E3 +46 +D9 +A9 +BE +20 +C9 +E3 +A0 +00 +84 +FA +24 +F8 +10 +0C +A6 +F6 +A5 +F7 +20 +1B +E5 +A9 +A0 +20 +C9 +E3 +A2 +FF +9A +20 +9E +E2 +84 +F1 +8A +85 +C8 +A2 +20 +20 +91 +E4 +A5 +C8 +69 +00 +85 +E0 +A9 +00 +AA +69 +02 +85 +E1 +A1 +E0 +29 +F0 +C9 +B0 +F0 +03 +4C +83 +E8 +A0 +02 +B1 +E0 +99 +CD +00 +88 +D0 +F8 +20 +8A +E3 +A5 +F1 +E5 +C8 +C9 +04 +F0 +A8 +91 +E0 +A5 +CA +F1 +E0 +85 +E4 +A5 +CB +E9 +00 +85 +E5 +A5 +E4 +C5 +CC +A5 +E5 +E5 +CD +90 +45 +A5 +CA +F1 +E0 +85 +E6 +A5 +CB +E9 +00 +85 +E7 +B1 +CA +91 +E6 +E6 +CA +D0 +02 +E6 +CB +A5 +E2 +C5 +CA +A5 +E3 +E5 +CB +B0 +E0 +B5 +E4 +95 +CA +CA +10 +F9 +B1 +E0 +A8 +88 +B1 +E0 +91 +E6 +98 +D0 +F8 +24 +F8 +10 +09 +B5 +F7 +75 +F5 +95 +F7 +E8 +F0 +F7 +10 +7E +00 +00 +00 +00 +A0 +14 +D0 +71 +20 +15 +E7 +A5 +E2 +85 +E6 +A5 +E3 +85 +E7 +20 +75 +E5 +A5 +E2 +85 +E4 +A5 +E3 +85 +E5 +D0 +0E +20 +15 +E7 +20 +6D +E5 +A5 +E6 +85 +E2 +A5 +E7 +85 +E3 +A0 +00 +A5 +CA +C5 +E4 +A5 +CB +E5 +E5 +B0 +16 +A5 +E4 +D0 +02 +C6 +E5 +C6 +E4 +A5 +E6 +D0 +02 +C6 +E7 +C6 +E6 +B1 +E4 +91 +E6 +90 +E0 +A5 +E6 +85 +CA +A5 +E7 +85 +CB +60 +20 +C9 +E3 +C8 +B9 +00 +EB +30 +F7 +C9 +8D +D0 +06 +A9 +00 +85 +24 +A9 +8D +E6 +24 +2C +12 +D0 +30 +FB +8D +12 +D0 +60 +A0 +06 +20 +D3 +EE +24 +D9 +30 +03 +4C +B6 +E2 +4C +9A +EB +2A +69 +A0 +DD +00 +02 +D0 +53 +B1 +FE +0A +30 +06 +88 +B1 +FE +30 +29 +C8 +86 +C8 +98 +48 +A2 +00 +A1 +FE +AA +4A +49 +48 +11 +FE +C9 +C0 +90 +01 +E8 +C8 +D0 +F3 +68 +A8 +8A +4C +C0 +E4 +E6 +F1 +A6 +F1 +F0 +BC +9D +00 +02 +60 +A6 +C8 +A9 +A0 +E8 +DD +00 +02 +B0 +FA +B1 +FE +29 +3F +4A +D0 +B6 +BD +00 +02 +B0 +06 +69 +3F +C9 +1A +90 +6F +69 +4F +C9 +0A +90 +69 +A6 +FD +C8 +B1 +FE +29 +E0 +C9 +20 +F0 +7A +B5 +A8 +85 +C8 +B5 +D1 +85 +F1 +88 +B1 +FE +0A +10 +FA +88 +B0 +38 +0A +30 +35 +B4 +58 +84 +FF +B4 +80 +E8 +10 +DA +F0 +B3 +C9 +7E +B0 +22 +CA +10 +04 +A0 +06 +10 +29 +94 +80 +A4 +FF +94 +58 +A4 +C8 +94 +A8 +A4 +F1 +94 +D1 +29 +1F +A8 +B9 +20 +EC +0A +A8 +A9 +76 +2A +85 +FF +D0 +01 +C8 +C8 +86 +FD +B1 +FE +30 +84 +D0 +05 +A0 +0E +4C +E0 +E3 +C9 +03 +B0 +C3 +4A +A6 +C8 +E8 +BD +00 +02 +90 +04 +C9 +A2 +F0 +0A +C9 +DF +F0 +06 +86 +C8 +20 +1C +E4 +C8 +88 +A6 +FD +B1 +FE +88 +0A +10 +CF +B4 +58 +84 +FF +B4 +80 +E8 +B1 +FE +29 +9F +D0 +ED +85 +F2 +85 +F3 +98 +48 +86 +FD +B4 +D0 +84 +C9 +18 +A9 +0A +85 +F9 +A2 +00 +C8 +B9 +00 +02 +29 +0F +65 +F2 +48 +8A +65 +F3 +30 +1C +AA +68 +C6 +F9 +D0 +F2 +85 +F2 +86 +F3 +C4 +F1 +D0 +DE +A4 +C9 +C8 +84 +F1 +20 +1C +E4 +68 +A8 +A5 +F3 +B0 +A9 +A0 +00 +10 +8B +85 +F3 +86 +F2 +A2 +04 +86 +C9 +A9 +B0 +85 +F9 +A5 +F2 +DD +63 +E5 +A5 +F3 +FD +68 +E5 +90 +0D +85 +F3 +A5 +F2 +FD +63 +E5 +85 +F2 +E6 +F9 +D0 +E7 +A5 +F9 +E8 +CA +F0 +0E +C9 +B0 +F0 +02 +85 +C9 +24 +C9 +30 +04 +A5 +FA +F0 +0B +20 +C9 +E3 +24 +F8 +10 +04 +99 +00 +02 +C8 +CA +10 +C1 +60 +01 +0A +64 +E8 +10 +00 +00 +00 +03 +27 +A5 +CA +85 +E6 +A5 +CB +85 +E7 +E8 +A5 +E7 +85 +E5 +A5 +E6 +85 +E4 +C5 +4C +A5 +E5 +E5 +4D +B0 +26 +A0 +01 +B1 +E4 +E5 +CE +C8 +B1 +E4 +E5 +CF +B0 +19 +A0 +00 +A5 +E6 +71 +E4 +85 +E6 +90 +03 +E6 +E7 +18 +C8 +A5 +CE +F1 +E4 +C8 +A5 +CF +F1 +E4 +B0 +CA +60 +46 +F8 +A5 +4C +85 +CA +A5 +4D +85 +CB +A5 +4A +85 +CC +A5 +4B +85 +CD +A9 +00 +85 +FB +85 +FC +85 +FE +A9 +00 +85 +1D +60 +A5 +D0 +69 +05 +85 +D2 +A5 +D1 +69 +00 +85 +D3 +A5 +D2 +C5 +CA +A5 +D3 +E5 +CB +90 +03 +4C +6B +E3 +A5 +CE +91 +D0 +A5 +CF +C8 +91 +D0 +A5 +D2 +C8 +91 +D0 +A5 +D3 +C8 +91 +D0 +A9 +00 +C8 +91 +D0 +C8 +91 +D0 +A5 +D2 +85 +CC +A5 +D3 +85 +CD +A5 +D0 +90 +43 +85 +CE +84 +CF +20 +FF +E6 +30 +0E +C9 +40 +F0 +0A +4C +28 +E6 +06 +C9 +49 +D0 +07 +A9 +49 +85 +CF +20 +FF +E6 +A5 +4B +85 +D1 +A5 +4A +85 +D0 +C5 +CC +A5 +D1 +E5 +CD +B0 +94 +B1 +D0 +C8 +C5 +CE +D0 +06 +B1 +D0 +C5 +CF +F0 +0E +C8 +B1 +D0 +48 +C8 +B1 +D0 +85 +D1 +68 +A0 +00 +F0 +DB +A5 +D0 +69 +03 +20 +0A +E7 +A5 +D1 +69 +00 +95 +78 +A5 +CF +C9 +40 +D0 +1C +88 +98 +20 +0A +E7 +88 +94 +78 +A0 +03 +F6 +78 +C8 +B1 +D0 +30 +F9 +10 +09 +A9 +00 +85 +D4 +85 +D5 +A2 +20 +48 +A0 +00 +B1 +E0 +10 +18 +0A +30 +81 +20 +FF +E6 +20 +08 +E7 +20 +FF +E6 +95 +A0 +24 +D4 +10 +01 +CA +20 +FF +E6 +B0 +E6 +C9 +28 +D0 +1F +A5 +E0 +20 +0A +E7 +A5 +E1 +95 +78 +24 +D4 +30 +0B +A9 +01 +20 +0A +E7 +A9 +00 +95 +78 +F6 +78 +20 +FF +E6 +30 +F9 +B0 +D3 +24 +D4 +10 +06 +C9 +04 +B0 +D0 +46 +D4 +A8 +85 +D6 +B9 +98 +E9 +29 +55 +0A +85 +D7 +68 +A8 +B9 +98 +E9 +29 +AA +C5 +D7 +B0 +09 +98 +48 +20 +FF +E6 +A5 +D6 +90 +95 +B9 +10 +EA +85 +CE +B9 +88 +EA +85 +CF +20 +FC +E6 +4C +D8 +E6 +6C +CE +00 +E6 +E0 +D0 +02 +E6 +E1 +B1 +E0 +60 +94 +77 +CA +30 +03 +95 +50 +60 +A0 +66 +4C +E0 +E3 +A0 +00 +B5 +50 +85 +CE +B5 +A0 +85 +CF +B5 +78 +F0 +0E +85 +CF +B1 +CE +48 +C8 +B1 +CE +85 +CF +68 +85 +CE +88 +E8 +60 +20 +4A +E7 +20 +15 +E7 +98 +20 +08 +E7 +95 +A0 +C5 +CE +D0 +06 +C5 +CF +D0 +02 +F6 +50 +60 +20 +82 +E7 +20 +59 +E7 +20 +15 +E7 +24 +CF +30 +1B +CA +60 +20 +15 +E7 +A5 +CF +D0 +04 +A5 +CE +F0 +F3 +A9 +FF +20 +08 +E7 +95 +A0 +24 +CF +30 +E9 +20 +15 +E7 +98 +38 +E5 +CE +20 +08 +E7 +98 +E5 +CF +50 +23 +A0 +00 +10 +90 +20 +6F +E7 +20 +15 +E7 +A5 +CE +85 +DA +A5 +CF +85 +DB +20 +15 +E7 +18 +A5 +CE +65 +DA +20 +08 +E7 +A5 +CF +65 +DB +70 +DD +95 +A0 +60 +20 +15 +E7 +A4 +CE +F0 +05 +88 +A5 +CF +F0 +0C +60 +A5 +24 +09 +07 +A8 +C8 +A9 +A0 +20 +C9 +E3 +C4 +24 +B0 +F7 +60 +20 +B1 +E7 +20 +15 +E7 +A5 +CF +10 +0A +A9 +AD +20 +C9 +E3 +20 +72 +E7 +50 +EF +88 +84 +D5 +86 +CF +A6 +CE +20 +1B +E5 +A6 +CF +60 +20 +15 +E7 +A5 +CE +85 +F6 +A5 +CF +85 +F7 +88 +84 +F8 +C8 +A9 +0A +85 +F4 +84 +F5 +60 +20 +15 +E7 +A5 +CE +A4 +CF +10 +F2 +20 +15 +E7 +B5 +50 +85 +DA +B5 +78 +85 +DB +A5 +CE +91 +DA +C8 +A5 +CF +91 +DA +E8 +60 +68 +68 +24 +D5 +10 +05 +20 +CD +E3 +46 +D5 +60 +A0 +FF +84 +D7 +60 +20 +CD +EF +F0 +07 +A9 +25 +85 +D6 +88 +84 +D4 +E8 +60 +A5 +CA +A4 +CB +D0 +5A +A0 +41 +A5 +FC +C9 +08 +B0 +5E +A8 +E6 +FC +A5 +E0 +99 +00 +01 +A5 +E1 +99 +08 +01 +A5 +DC +99 +10 +01 +A5 +DD +99 +18 +01 +20 +15 +E7 +20 +6D +E5 +90 +04 +A0 +37 +D0 +3B +A5 +E4 +A4 +E5 +85 +DC +84 +DD +2C +11 +D0 +30 +4F +18 +69 +03 +90 +01 +C8 +A2 +FF +86 +D9 +9A +85 +E0 +84 +E1 +20 +79 +E6 +24 +D9 +10 +49 +18 +A0 +00 +A5 +DC +71 +DC +A4 +DD +90 +01 +C8 +C5 +4C +D0 +D1 +C4 +4D +D0 +CD +A0 +34 +46 +D9 +4C +E0 +E3 +A0 +4A +A5 +FC +F0 +F7 +C6 +FC +A8 +B9 +0F +01 +85 +DC +B9 +17 +01 +85 +DD +BE +FF +00 +B9 +07 +01 +A8 +8A +4C +7A +E8 +A0 +63 +20 +C4 +E3 +A0 +01 +B1 +DC +AA +C8 +B1 +DC +20 +1B +E5 +4C +B3 +E2 +C6 +FB +A0 +5B +A5 +FB +F0 +C4 +A8 +B5 +50 +D9 +1F +01 +D0 +F0 +B5 +78 +D9 +27 +01 +D0 +E9 +B9 +2F +01 +85 +DA +B9 +37 +01 +85 +DB +20 +15 +E7 +CA +20 +93 +E7 +20 +01 +E8 +CA +A4 +FB +B9 +67 +01 +95 +9F +B9 +5F +01 +A0 +00 +20 +08 +E7 +20 +82 +E7 +20 +59 +E7 +20 +15 +E7 +A4 +FB +A5 +CE +F0 +05 +59 +37 +01 +10 +12 +B9 +3F +01 +85 +DC +B9 +47 +01 +85 +DD +BE +4F +01 +B9 +57 +01 +D0 +87 +C6 +FB +60 +A0 +54 +A5 +FB +C9 +08 +F0 +9A +E6 +FB +A8 +B5 +50 +99 +20 +01 +B5 +78 +99 +28 +01 +60 +20 +15 +E7 +A4 +FB +A5 +CE +99 +5F +01 +A5 +CF +99 +67 +01 +A9 +01 +99 +2F +01 +A9 +00 +99 +37 +01 +A5 +DC +99 +3F +01 +A5 +DD +99 +47 +01 +A5 +E0 +99 +4F +01 +A5 +E1 +99 +57 +01 +60 +20 +15 +E7 +A4 +FB +A5 +CE +99 +2F +01 +A5 +CF +4C +66 +E9 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +00 +AB +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +3F +3F +C0 +C0 +3C +3C +3C +3C +3C +3C +3C +30 +0F +C0 +CC +FF +55 +00 +AB +AB +03 +03 +FF +FF +55 +FF +FF +55 +CF +CF +CF +CF +CF +FF +55 +C3 +C3 +C3 +55 +F0 +F0 +CF +56 +56 +56 +55 +FF +FF +55 +03 +03 +03 +03 +03 +03 +03 +FF +FF +FF +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +00 +AB +03 +57 +03 +03 +03 +03 +07 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +03 +AA +FF +FF +FF +FF +FF +17 +FF +FF +19 +5D +35 +4B +F2 +EC +87 +6F +AD +B7 +E2 +F8 +54 +80 +96 +85 +82 +22 +10 +33 +4A +13 +06 +0B +4A +01 +40 +47 +7A +00 +FF +23 +09 +5B +16 +B6 +CB +FF +FF +FB +FF +FF +24 +F6 +4E +59 +50 +00 +FF +23 +A3 +6F +36 +23 +D7 +1C +22 +C2 +AE +BA +23 +FF +FF +21 +30 +1E +03 +C4 +20 +00 +C1 +FF +FF +FF +A0 +30 +1E +A4 +D3 +B6 +BC +AA +3A +01 +50 +7E +D8 +D8 +A5 +3C +FF +16 +5B +28 +03 +C4 +1D +00 +0C +4E +00 +3E +00 +A6 +B0 +00 +BC +C6 +57 +8C +01 +27 +FF +FF +FF +FF +FF +E8 +FF +FF +E8 +E0 +E0 +E0 +EF +EF +E3 +E3 +E5 +E5 +E7 +E7 +EE +EF +EF +E7 +E7 +E2 +EF +E7 +E7 +EC +EC +EC +E7 +EC +EC +EC +E2 +00 +FF +E8 +E1 +E8 +E8 +EF +EB +FF +FF +E0 +FF +FF +EF +EE +EF +E7 +E7 +00 +FF +E8 +E7 +E7 +E7 +E8 +E1 +E2 +EE +EE +EE +EE +E8 +FF +FF +E1 +E1 +EF +EE +E7 +E8 +EE +E7 +FF +FF +FF +EE +E1 +EF +E7 +E8 +EF +EF +EB +E9 +E8 +E9 +E9 +E8 +E8 +E8 +E8 +FF +E8 +E8 +E8 +EE +E7 +E8 +EF +EF +EE +EF +EE +EF +EE +EE +EF +EE +EE +EE +E1 +E8 +E8 +FF +FF +FF +FF +FF +BE +B3 +B2 +B7 +B6 +37 +D4 +CF +CF +A0 +CC +CF +CE +47 +D3 +D9 +CE +D4 +C1 +58 +CD +C5 +CD +A0 +C6 +D5 +CC +4C +D4 +CF +CF +A0 +CD +C1 +CE +D9 +A0 +D0 +C1 +D2 +C5 +CE +53 +D3 +D4 +D2 +C9 +CE +47 +CE +CF +A0 +C5 +CE +44 +C2 +C1 +C4 +A0 +C2 +D2 +C1 +CE +C3 +48 +BE +B8 +A0 +C7 +CF +D3 +D5 +C2 +53 +C2 +C1 +C4 +A0 +D2 +C5 +D4 +D5 +D2 +4E +BE +B8 +A0 +C6 +CF +D2 +53 +C2 +C1 +C4 +A0 +CE +C5 +D8 +54 +D3 +D4 +CF +D0 +D0 +C5 +C4 +A0 +C1 +D4 +20 +AA +AA +AA +20 +A0 +C5 +D2 +D2 +0D +BE +B2 +B5 +35 +D2 +C1 +CE +C7 +45 +C4 +C9 +4D +D3 +D4 +D2 +A0 +CF +D6 +C6 +4C +DC +0D +D2 +C5 +D4 +D9 +D0 +C5 +A0 +CC +C9 +CE +C5 +8D +3F +46 +D9 +90 +03 +4C +C3 +E8 +A6 +CF +9A +A6 +CE +A0 +8D +D0 +02 +A0 +99 +20 +C4 +E3 +86 +CE +BA +86 +CF +A0 +FE +84 +D9 +C8 +84 +C8 +20 +99 +E2 +84 +F1 +A2 +20 +A9 +30 +20 +91 +E4 +E6 +D9 +A6 +CE +A4 +C8 +0A +85 +CE +C8 +B9 +00 +02 +C9 +74 +F0 +D2 +49 +B0 +C9 +0A +B0 +F0 +C8 +C8 +84 +C8 +B9 +00 +02 +48 +B9 +FF +01 +A0 +00 +20 +08 +E7 +68 +95 +A0 +A5 +CE +C9 +C7 +D0 +03 +20 +6F +E7 +4C +01 +E8 +FF +FF +FF +50 +20 +13 +EC +D0 +15 +20 +0B +EC +D0 +10 +20 +82 +E7 +20 +6F +E7 +50 +03 +20 +82 +E7 +20 +59 +E7 +56 +50 +4C +36 +E7 +FF +FF +C1 +FF +7F +D1 +CC +C7 +CF +CE +C5 +9A +98 +8B +96 +95 +93 +BF +B2 +32 +2D +2B +BC +B0 +AC +BE +35 +8E +61 +FF +FF +FF +DD +FB +20 +C9 +EF +15 +4F +10 +05 +20 +C9 +EF +35 +4F +95 +50 +10 +CB +4C +C9 +EF +40 +60 +8D +60 +8B +00 +7E +8C +33 +00 +00 +60 +03 +BF +12 +00 +40 +89 +C9 +47 +9D +17 +68 +9D +0A +00 +40 +60 +8D +60 +8B +00 +7E +8C +3C +00 +00 +60 +03 +BF +1B +4B +67 +B4 +A1 +07 +8C +07 +AE +A9 +AC +A8 +67 +8C +07 +B4 +AF +AC +B0 +67 +9D +B2 +AF +AC +AF +A3 +67 +8C +07 +A5 +AB +AF +B0 +F4 +AE +A9 +B2 +B0 +7F +0E +27 +B4 +AE +A9 +B2 +B0 +7F +0E +28 +B4 +AE +A9 +B2 +B0 +64 +07 +A6 +A9 +67 +AF +B4 +AF +A7 +78 +B4 +A5 +AC +78 +7F +02 +AD +A5 +B2 +67 +A2 +B5 +B3 +AF +A7 +EE +B2 +B5 +B4 +A5 +B2 +7E +8C +39 +B4 +B8 +A5 +AE +67 +B0 +A5 +B4 +B3 +27 +AF +B4 +07 +9D +19 +B2 +AF +A6 +7F +05 +37 +B4 +B5 +B0 +AE +A9 +7F +05 +28 +B4 +B5 +B0 +AE +A9 +7F +05 +2A +B4 +B5 +B0 +AE +A9 +E4 +AE +A5 +00 +FF +FF +47 +A2 +A1 +B4 +7F +0D +30 +AD +A9 +A4 +7F +0D +23 +AD +A9 +A4 +67 +AC +AC +A1 +A3 +00 +40 +80 +C0 +C1 +80 +00 +47 +8C +68 +8C +DB +67 +9B +68 +9B +50 +8C +63 +8C +7F +01 +51 +07 +88 +29 +84 +80 +C4 +80 +57 +71 +07 +88 +14 +ED +A5 +AD +AF +AC +ED +A5 +AD +A9 +A8 +F2 +AF +AC +AF +A3 +71 +08 +88 +AE +A5 +AC +68 +83 +08 +68 +9D +08 +71 +07 +88 +60 +76 +B4 +AF +AE +76 +8D +76 +8B +51 +07 +88 +19 +B8 +A4 +AE +B2 +F2 +B3 +B5 +F3 +A2 +A1 +EE +A7 +B3 +E4 +AE +B2 +EB +A5 +A5 +B0 +51 +07 +88 +39 +81 +C1 +4F +7F +0F +2F +00 +51 +06 +88 +29 +C2 +0C +82 +57 +8C +6A +8C +42 +AE +A5 +A8 +B4 +60 +AE +A5 +A8 +B4 +4F +7E +1E +35 +8C +27 +51 +07 +88 +09 +8B +FE +E4 +AF +AD +F2 +AF +E4 +AE +A1 +DC +DE +9C +DD +9C +DE +DD +9E +C3 +DD +CF +CA +CD +CB +00 +47 +9D +AD +A5 +AD +AF +AC +76 +9D +AD +A5 +AD +A9 +A8 +E6 +A6 +AF +60 +8C +20 +AF +B4 +B5 +A1 +F2 +AC +A3 +F2 +A3 +B3 +60 +8C +20 +AC +A5 +A4 +EE +B5 +B2 +60 +AE +B5 +B2 +F4 +B3 +A9 +AC +60 +8C +20 +B4 +B3 +A9 +AC +7A +7E +9A +22 +20 +00 +60 +03 +BF +60 +03 +BF +1F +20 +B1 +E7 +E8 +E8 +B5 +4F +85 +DA +B5 +77 +85 +DB +B4 +4E +98 +D5 +76 +B0 +09 +B1 +DA +20 +C9 +E3 +C8 +4C +0F +EE +A9 +FF +85 +D5 +60 +E8 +A9 +00 +95 +78 +95 +A0 +B5 +77 +38 +F5 +4F +95 +50 +4C +23 +E8 +FF +20 +15 +E7 +A5 +CF +D0 +28 +A5 +CE +60 +20 +34 +EE +A4 +C8 +C9 +30 +B0 +21 +C0 +28 +B0 +1D +60 +EA +EA +20 +34 +EE +60 +EA +8A +A2 +01 +B4 +CE +94 +4C +B4 +48 +94 +CA +CA +F0 +F5 +AA +60 +A0 +77 +4C +E0 +E3 +A0 +7B +D0 +F9 +20 +54 +E2 +A5 +DA +D0 +07 +A5 +DB +D0 +03 +4C +7E +E7 +06 +CE +26 +CF +26 +E6 +26 +E7 +A5 +E6 +C5 +DA +A5 +E7 +E5 +DB +90 +0A +85 +E7 +A5 +E6 +E5 +DA +85 +E6 +E6 +CE +88 +D0 +E1 +60 +FF +FF +FF +FF +FF +FF +20 +15 +E7 +6C +CE +00 +A5 +4C +D0 +02 +C6 +4D +C6 +4C +A5 +48 +D0 +02 +C6 +49 +C6 +48 +A0 +00 +B1 +4C +91 +48 +A5 +CA +C5 +4C +A5 +CB +E5 +4D +90 +E0 +4C +53 +EE +C9 +28 +B0 +9B +A8 +A5 +C8 +60 +EA +EA +98 +AA +A0 +6E +20 +C4 +E3 +8A +A8 +20 +C4 +E3 +A0 +72 +4C +C4 +E3 +20 +15 +E7 +06 +CE +26 +CF +30 +FA +B0 +DC +D0 +04 +C5 +CE +B0 +D6 +60 +20 +15 +E7 +B1 +CE +94 +9F +4C +08 +E7 +20 +34 +EE +A5 +CE +48 +20 +15 +E7 +68 +91 +CE +60 +FF +FF +FF +20 +6C +EE +A5 +CE +85 +E6 +A5 +CF +85 +E7 +4C +44 +E2 +20 +E4 +EE +4C +34 +E1 +20 +E4 +EE +B4 +78 +B5 +50 +69 +FE +B0 +01 +88 +85 +DA +84 +DB +18 +65 +CE +95 +50 +98 +65 +CF +95 +78 +A0 +00 +B5 +50 +D1 +DA +C8 +B5 +78 +F1 +DA +B0 +80 +4C +23 +E8 +20 +15 +E7 +A5 +4E +20 +08 +E7 +A5 +4F +D0 +04 +C5 +4E +69 +00 +29 +7F +85 +4F +95 +A0 +A0 +11 +A5 +4F +0A +18 +69 +40 +0A +26 +4E +26 +4F +88 +D0 +F2 +A5 +CE +20 +08 +E7 +A5 +CF +95 +A0 +4C +7A +E2 +20 +15 +E7 +A4 +CE +C4 +4C +A5 +CF +E5 +4D +90 +1F +84 +48 +A5 +CF +85 +49 +4C +B6 +EE +20 +15 +E7 +A4 +CE +C4 +CA +A5 +CF +E5 +CB +B0 +09 +84 +4A +A5 +CF +85 +4B +4C +B7 +E5 +4C +CB +EE +EA +EA +EA +EA +20 +C9 +EF +20 +71 +E1 +4C +BF +EF +20 +03 +EE +A9 +FF +85 +C8 +A9 +74 +8D +00 +02 +60 +20 +36 +E7 +E8 +20 +36 +E7 +B5 +50 +60 +A9 +00 +85 +4A +85 +4C +A9 +08 +85 +4B +A9 +10 +85 +4D +4C +AD +E5 +D5 +78 +D0 +01 +18 +4C +02 +E1 +20 +B7 +E5 +4C +36 +E8 +20 +B7 +E5 +4C +5B +E8 +E0 +80 +D0 +01 +88 +4C +0C +E0 diff --git a/basic.v b/basic.v index 5e0df2c..a9d0151 100644 --- a/basic.v +++ b/basic.v @@ -1,33 +1,43 @@ +`define LED_KEYS + module top( - input clk12, + input clk, input uart_rx, output uart_tx, output uart_cts, + `ifdef LED_KEYS output tm_cs, output tm_clk, inout tm_dio, + `endif output reg [7:0] led ); + wire res, rw, irq, nmi; + wire [15:0] ab; + wire [7:0] dbo; + reg [7:0] dbi; + ////////////////////////////////////////////////////////////////////////// // CLK DIVIDER + /* wire clk; clk_div u_clk_div( .clk (clk12), .clk_out (clk) ); + */ ////////////////////////////////////////////////////////////////////////// // 6502 reset - + reg [7:0] start; always @(posedge clk) - if (~start[7]) start <= start + 1; - + if (~start[7]) start <= start + 1; assign res = start[7]; ////////////////////////////////////////////////////////////////////////// @@ -37,25 +47,18 @@ module top( always @(posedge clk) div <= div + 1; - assign phi0 = div[3]; - wire clk_phi; SB_GB bg_phi ( - .USER_SIGNAL_TO_GLOBAL_BUFFER(phi0), + .USER_SIGNAL_TO_GLOBAL_BUFFER(div[3]), .GLOBAL_BUFFER_OUTPUT(clk_phi) ); ////////////////////////////////////////////////////////////////////////// // 6502 - wire rw, res, irq, nmi, phi0; - wire [15:0] ab; - wire [7:0] dbo; - reg [7:0] dbi; - chip_6502 chip_6502 ( .clk (clk), - .phi (phi0), + .phi (clk_phi), .res (res), .so (1'b0), .rdy (1'b1), @@ -72,16 +75,16 @@ module top( // USB UART wire received, is_receiving, rx_error, is_transmitting, transmit; - reg [7:0] tx_byte; + reg [6:0] tx_byte; wire [7:0] rx_byte; uart #(.CLOCK_DIVIDE( 625 )) my_uart ( - clk12, // master clock for this component + clk, // master clock for this component ~res, // synchronous reset line (resets if high) uart_rx, // receive data on this line uart_tx, // transmit data on this line transmit, // signal to indicate that the UART should start a transmission - tx_byte, // 8-bit bus with byte to be transmitted when transmit is raised high + {1'b0, tx_byte}, // 8-bit bus with byte to be transmitted when transmit is raised high received, // output flag raised high for one cycle of clk when a byte is received rx_byte, // byte which has just been received when received is raise is_receiving, // indicates that we are currently receiving data on the rx lin @@ -89,21 +92,24 @@ module top( rx_error // rx packet corrupt ); - // sync the TX latch to the clk12 domain + // sync the TX latch to the clk domain reg apple_tx; + /* Flag_CrossDomain tx_flag ( .clkA(clk_phi), .FlagIn_clkA(apple_tx), - .clkB(clk12), + .clkB(clk), .FlagOut_clkB(transmit) ); + */ + assign transmit = apple_tx; // sync the RX flag, using flag and ack reg [6:0] apple_rx_buf; reg apple_rx_ack; reg apple_rx_flag; - always @(posedge clk12) + always @(posedge clk) begin if (received && !apple_rx_flag && !apple_rx_ack) begin apple_rx_flag <= 1; @@ -120,13 +126,14 @@ module top( ////////////////////////////////////////////////////////////////////////// // TM1638 Display + `ifdef LED_KEYS reg [3:0] display; reg [7:0] digits[7:0]; reg [7:0] leds; wire [7:0] keys; ledAndKey my_led_and_keys ( - .clk (clk12), + .clk (clk_phi), .rst (~res), .display (display), .digit1 (digits[0]), @@ -143,6 +150,7 @@ module top( .tm_clk (tm_clk), .tm_dio (tm_dio) ); + `endif ////////////////////////////////////////////////////////////////////////// // I/O locations @@ -153,25 +161,20 @@ module top( localparam LED_KEYS = 16'hD020; // Start address of the Led&Keys module localparam LED = 16'hD000; // Breakout board LEDs - /* - 0x77 - A - 0X73 - P - 0X73 - P - 0X38 - L - 0X79 - E - 0X40 - - - 0X06 - 1 - */ - ////////////////////////////////////////////////////////////////////////// // RAM and ROM - reg [7:0] ram[0:8191]; + reg [7:0] ram[0:8191] /* synthesis syn_ramstyle = "block_ram" */; + reg [7:0] basic[0:4091] /* synthesis syn_ramstyle = "block_ram" */; + reg [7:0] rom[0:255] /* synthesis syn_ramstyle = "block_ram" */; + initial begin - $readmemh("../ram.hex", ram, 0, 8191); - $readmemh("../rom.hex", ram, 8192-256, 8191); + $readmemh("../ram.hex", ram, 0, 8191); + $readmemh("../rom.hex", rom, 0, 255); + $readmemh("../basic.hex", basic, 0, 4091); end + //always @(posedge clk_phi) always @(posedge clk_phi) begin // clear the UART RX ack if set @@ -194,7 +197,7 @@ module top( begin // Apple 1 terminal only uses 7 bits, MSB indicates // terminal has ack'd RX - tx_byte <= {1'b0, dbo[6:0]}; + tx_byte <= dbo[6:0]; apple_tx <= 1; end end @@ -218,6 +221,7 @@ module top( end end + `ifdef LED_KEYS // LED&KEYS registers LED_KEYS: if (rw) dbi <= {4'b0, display}; else display <= dbo[3:0]; LED_KEYS + 1: if (rw) dbi <= digits[0]; else digits[0] <= dbo; @@ -230,23 +234,28 @@ module top( LED_KEYS + 8: if (rw) dbi <= digits[7]; else digits[7] <= dbo; LED_KEYS + 9: if (rw) dbi <= leds; else leds <= dbo; LED_KEYS + 10: if (rw) dbi <= keys; + `endif // breakout board LED registers LED: if (rw) dbi <= led; else led <= dbo; default: begin - // RAM 0x0000 -> 0x1FFF, ROM 0xFF00 -> 0xFFFF - // - // !!!! ROM also at 0x1F00 -> 0x1FFF but writeable!!!! - // - // All other addresses return zero. - // - if (ab[15:13] == 3'b0 || ab[15:8] == 8'b11111111) + if (ab[15:12] == 4'b0000 || ab[15:12] == 4'b0001) begin - // handle RAM/ROM address + // 0x0000 -> 0x1FFF - RAM dbi <= ram[ab[12:0]]; - if (~rw && ~ab[15]) ram[ab[12:0]] <= dbo; + if (~rw) ram[ab[12:0]] <= dbo; + end + else if (ab[15:12] == 4'b1110) + begin + // 0xE000 -> 0xEFFF - BASIC + dbi <= basic[ab[11:0]]; + end + else if (ab[15:8] == 8'b11111111) + begin + // 0xFF00 -> 0xFFFF - ROM + dbi <= rom[ab[7:0]]; end else // unknown address return zero diff --git a/clk_div.v b/clk_div.v deleted file mode 100644 index 7df7a57..0000000 --- a/clk_div.v +++ /dev/null @@ -1,32 +0,0 @@ -module clk_div -#( - //parameter WIDTH = 16, - //parameter N = 65535 // divide by 12 - parameter WIDTH = 4, - parameter N = 1 // divide by 12 -) -( - input clk, - output clk_out -); - -reg [WIDTH-1:0] r_reg; -wire [WIDTH-1:0] r_nxt; -reg clk_track; - -always @(posedge clk) -begin - if (r_nxt == N) - begin - r_reg <= 0; - clk_track <= ~clk_track; - end - - else - r_reg <= r_nxt; -end - -assign r_nxt = r_reg + 1; -assign clk_out = clk_track; - -endmodule diff --git a/flag.v b/flag.v deleted file mode 100644 index c44cc26..0000000 --- a/flag.v +++ /dev/null @@ -1,15 +0,0 @@ -module Flag_CrossDomain( - input clkA, - input FlagIn_clkA, // this is a one-clock pulse from the clkA domain - input clkB, - output FlagOut_clkB // from which we generate a one-clock pulse in clkB domain -); - -reg FlagToggle_clkA; -always @(posedge clkA) FlagToggle_clkA <= FlagToggle_clkA ^ FlagIn_clkA; // when flag is asserted, this signal toggles (clkA domain) - -reg [2:0] SyncA_clkB; -always @(posedge clkB) SyncA_clkB <= {SyncA_clkB[1:0], FlagToggle_clkA}; // now we cross the clock domains - -assign FlagOut_clkB = (SyncA_clkB[2] ^ SyncA_clkB[1]); // and create the clkB flag -endmodule diff --git a/ice40hx8k.pcf b/ice40hx8k.pcf index 8065458..ee0c6df 100644 --- a/ice40hx8k.pcf +++ b/ice40hx8k.pcf @@ -1,13 +1,13 @@ # For the iCE40HX-8K Breakout Board ## System Clock -set_io clk12 J3 +set_io clk J3 ### UART (FTDI Channel B) set_io uart_rx B10 set_io uart_tx B12 set_io uart_cts A15 -set_io uart_rts B13 +#set_io uart_rts B13 ### TM1638 Display set_io tm_clk P1 @@ -24,14 +24,14 @@ set_io led[2] C4 set_io led[1] B3 set_io led[0] C3 -set_io ledx[7] J1 -set_io ledx[6] J2 -set_io ledx[5] K1 -set_io ledx[4] K3 -set_io ledx[3] L1 -set_io ledx[2] L3 -set_io ledx[1] M1 -set_io ledx[0] M2 +#set_io ledx[7] J1 +#set_io ledx[6] J2 +#set_io ledx[5] K1 +#set_io ledx[4] K3 +#set_io ledx[3] L1 +#set_io ledx[2] L3 +#set_io ledx[1] M1 +#set_io ledx[0] M2 #set_io d[0] B1 #set_io d[1] B2 diff --git a/tm1638.v b/tm1638.v index 70fcf2f..1e6aa95 100644 --- a/tm1638.v +++ b/tm1638.v @@ -10,7 +10,7 @@ module tm1638( output sclk, input dio_in, - output dio_out + output reg dio_out ); localparam CLK_DIV = 3; // seems happy at 12MHz with 3 @@ -23,7 +23,7 @@ module tm1638( reg [1:0] cur_state, next_state; reg [CLK_DIV1:0] sclk_d, sclk_q; reg [7:0] data_d, data_q, data_out_d, data_out_q; - reg dio_out, dio_out_d; + reg dio_out_d; reg [2:0] ctr_d, ctr_q; // output read data if we're reading @@ -115,4 +115,4 @@ module tm1638( data_out_q <= data_out_d; end end -endmodule +endmodule \ No newline at end of file