From b27bee02c82e23798f76d9e7beb0707f0f30e71d Mon Sep 17 00:00:00 2001 From: Gregory Estrade Date: Wed, 13 Nov 2013 22:47:08 +0100 Subject: [PATCH] initial commit --- .gitattributes | 22 +++ .gitignore | 215 ++++++++++++++++++++++++++++ CM_VGA.brd | Bin 0 -> 36376 bytes CM_VGA.sch | Bin 0 -> 286636 bytes README | 8 ++ eagle.epf | 346 ++++++++++++++++++++++++++++++++++++++++++++ rgb_encoder.vhd | 139 ++++++++++++++++++ top.ucf | 27 ++++ top.vhd | 72 ++++++++++ vga_controller.vhd | 347 +++++++++++++++++++++++++++++++++++++++++++++ 10 files changed, 1176 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 CM_VGA.brd create mode 100644 CM_VGA.sch create mode 100644 README create mode 100644 eagle.epf create mode 100644 rgb_encoder.vhd create mode 100644 top.ucf create mode 100644 top.vhd create mode 100644 vga_controller.vhd diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..412eeda --- /dev/null +++ b/.gitattributes @@ -0,0 +1,22 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# Custom for Visual Studio +*.cs diff=csharp +*.sln merge=union +*.csproj merge=union +*.vbproj merge=union +*.fsproj merge=union +*.dbproj merge=union + +# Standard to msysgit +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.pdf diff=astextplain +*.PDF diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b9d6bd9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,215 @@ +################# +## Eclipse +################# + +*.pydevproject +.project +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.classpath +.settings/ +.loadpath + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# CDT-specific +.cproject + +# PDT-specific +.buildpath + + +################# +## Visual Studio +################# + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results + +[Dd]ebug/ +[Rr]elease/ +x64/ +build/ +[Bb]in/ +[Oo]bj/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +*_i.c +*_p.c +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.log +*.scc + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +*.ncrunch* +.*crunch*.local.xml + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.Publish.xml +*.pubxml + +# NuGet Packages Directory +## TODO: If you have NuGet Package Restore enabled, uncomment the next line +#packages/ + +# Windows Azure Build Output +csx +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Others +sql/ +*.Cache +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.[Pp]ublish.xml +*.pfx +*.publishsettings + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +App_Data/*.mdf +App_Data/*.ldf + +############# +## Windows detritus +############# + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Mac crap +.DS_Store + + +############# +## Python +############# + +*.py[co] + +# Packages +*.egg +*.egg-info +dist/ +build/ +eggs/ +parts/ +var/ +sdist/ +develop-eggs/ +.installed.cfg + +# Installer logs +pip-log.txt + +# Unit test / coverage reports +.coverage +.tox + +#Translations +*.mo + +#Mr Developer +.mr.developer.cfg diff --git a/CM_VGA.brd b/CM_VGA.brd new file mode 100644 index 0000000000000000000000000000000000000000..d42ff44580560351a55910b99e72d79319672a0f GIT binary patch literal 36376 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≫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�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 literal 0 HcmV?d00001 diff --git a/README b/README new file mode 100644 index 0000000..e6e9b0b --- /dev/null +++ b/README @@ -0,0 +1,8 @@ +Guimauve 2ooo - VGA output for Apple //c computers. + +Here are the schematics and VHDL code for this adapter. +The board itself is awfully designed. + +I'm releasing it for people that were interested in purchasing the board, as I don't plan to assemble new ones. +Feel free to contact me if you have some questions to ask about it. + diff --git a/eagle.epf b/eagle.epf new file mode 100644 index 0000000..36a54ec --- /dev/null +++ b/eagle.epf @@ -0,0 +1,346 @@ +[Eagle] +Version="05 04 00" +Platform="Windows" +Serial="62191E841E-LSR-WLM-1EL" +Globals="Globals" +Desktop="Desktop" + +[Globals] +AutoSaveProject=1 +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/19inch.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/40xx.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/41xx.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/45xx.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/74ac-logic.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/74ttl-din.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/74xx-eu.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/74xx-little-de.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/74xx-little-us.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/74xx-us.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/751xx.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/agilent-technologies.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/allegro.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/altera-cyclone-II.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/altera-cyclone-III.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/altera.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/am29-memory.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/amd-mach.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/amd.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/amis.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/analog-devices.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/ase.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/atmel.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/austriamicrosystems.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/axis.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/battery.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/burr-brown.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/busbar.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/buzzer.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/c-trimm.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/california-micro-devices.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/capacitor-wima.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/chipcard-siemens.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/cirrus-logic.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-3m.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-amp-champ.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-amp-micromatch.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-amp-mt.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-amp-mt6.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-amp-quick.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-amp.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-amphenol.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-avx.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-berg.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-bosch.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-chipcard-iso7816.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-coax.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-commcon.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-conrad.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-cpci.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-cui.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-cypressindustries.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-deutsch.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-dil.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-elco.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-erni.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-faston.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-fci.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-friwo.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-harting-h.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-harting-ml.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-harting-v.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-harting.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-hirose.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-hirschmann.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-jack.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-jae.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-jst.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-kycon.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-lemo.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-leotronics.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-lsta.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-lstb.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-lumberg.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-ml.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-molex.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-neutrik_ag.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-omron.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-panasonic.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-panduit.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-pc.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-pc104.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-phoenix-254.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-phoenix-3.81.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-phoenix-350.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-phoenix-500.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-phoenix-508.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-phoenix-me_max.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-phoenix-mkds_5.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-phoenix-smkdsp.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-ptr500.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-rib.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-samtec.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-shiua-chyuan.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-stewart.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-stocko.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-subd.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-sullinselectronics.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-thomas-betts.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-tyco.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-tycoelectronics.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-vg.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-wago-500.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-wago-508.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-wago.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-wago255.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-weidmueller-sl35.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/con-yamaichi.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/crystal.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/csr.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/cypress.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/dc-dc-converter.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/dimensions.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/diode.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/discrete.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/display-hp.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/display-kingbright.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/display-lcd.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/docu-dummy.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/ecl.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/etx-board.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/exar.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/fairchild-semic.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/farnell.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/fiber-optic-hp.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/fiber-optic-siemens.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/fifo.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/flexipanel.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/fox-electronics.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/frames.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/freescale.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/ftdichip.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/fuse.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/ground-junctions.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/heatsink.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/holes.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/ic-package.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/inductor-coilcraft.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/inductor-neosid.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/inductor-nkl.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/inductors.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/infineon-tricore.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/infineon.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/intersil.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/ir.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/isd.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/jump-0r-smd.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/jumper.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/lantronix.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/lattice.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/lc-filter.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/led-7-segment.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/led-citizen-electronics.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/led-lumiled.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/led.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/lem.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/linear-technology.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/linear.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/linx.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/lprs.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/lumiled.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/marks.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/maxim.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/maxstream.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/melexis.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/memory-hitachi.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/memory-idt.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/memory-micron.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/memory-motorola-dram.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/memory-nec.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/memory-samsung.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/memory-sram.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/memory.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/micrel.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/micro-fujitsu.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/micro-harris.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/micro-hitachi.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/micro-infineon.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/micro-intel.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/micro-mc68000.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/micro-motorola.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/micro-philips.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/micro-renesas.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/micro-samsung.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/micro-siemens.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/microchip.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/micron.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/micronas.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/microphon.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/microwave.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/midori-sensor.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/minicircuits.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/motorola-sensor-driver.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/murata-filter.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/murata-sensor.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/national-instruments.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/national-semiconductor.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/nec-lqfp100-pack.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/omnivision.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/on-semiconductor.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/opto-honeywell-3000.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/opto-honeywell-4000.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/opto-honeywell.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/opto-micro-linear.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/opto-trans-siemens.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/opto-transmittter-hp.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/opto-vishay.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/optocoupler.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/pal.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/photo-elements.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/piher.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/pinhead.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/plcc-socket.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/pld-intel.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/plxtech.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/pot-vitrohm.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/pot-xicor.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/pot.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/ptc-ntc.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/quantum-research-group.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/rcl.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/rectifier.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/ref-packages.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/relay.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/resistor-bourns.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/resistor-dil.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/resistor-net.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/resistor-power.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/resistor-ruf.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/resistor-shunt.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/resistor-sil.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/resistor.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/rf-micro-devices.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/rf-solutions.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/semicon-smd-ipc.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/sensor-heraeus.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/silabs.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/sipex.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/smd-ipc.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/smd-special.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/solomon-systech.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/solpad.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/special-drill.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/special-pad.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/special.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/st-microelectronics.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/supertex.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/supply-dummy.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/supply1.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/supply2.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/switch-alps.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/switch-dil.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/switch-misc.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/switch-omron.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/switch.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/telcom.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/telecontrolli.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/telefunken.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/testpad.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/texas.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/toshiba.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/traco-electronic.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/trafo-siemens.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/trafo-xicon.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/trafo.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/transistor-fet.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/transistor-neu-to92.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/transistor-npn.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/transistor-pnp.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/transistor-power.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/transistor-small-signal.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/transistor.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/triac.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/tripas.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/uln-udn.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/v-reg-micrel.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/v-reg.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/varistor.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/wafer-scale-psd.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/wirepad.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/wuerth-elektronik.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/xicor.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/xilinx-xcv.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/zetex.lbr" +UsedLibrary="C:/Program Files/EAGLE-5.4.0/lbr/zilog.lbr" + +[Win_1] +Type="Schematic Editor" +Loc="110 145 709 544" +State=1 +Number=1 +File="C:/Documents and Settings/greg/My Documents/eagle/THDL/THDL.sch" +View="-430782 -726039 2728760 964105" +WireWidths=" 0 3048 6096 8128 10160 12700 14224 16764 17780 19304 21844 25400 38100 64516 4064 1524" +PadDiameters=" 2540 3048 4064 6096 8128 10160 12700 14224 16764 17780 19304 21844 25400 38100 64516 0" +PadDrills=" 5000 6000 7000 9000 10000 11000 12000 13000 14000 15000 16000 20000 22000 28000 32000 8000" +ViaDiameters=" 2540 3048 4064 6096 8128 10160 12700 14224 16764 17780 19304 21844 25400 38100 64516 0" +ViaDrills=" 5000 7000 8000 9000 10000 11000 12000 13000 14000 15000 16000 20000 22000 28000 32000 6000" +HoleDrills=" 5000 7000 8000 9000 10000 11000 12000 13000 14000 15000 16000 20000 22000 28000 32000 6000" +TextSizes=" 2540 3048 4064 6096 8128 10160 12700 14224 16764 19304 21844 25400 38100 50800 64516 17780" +PolygonSpacings=" 2540 3048 4064 6096 8128 10160 14224 16764 17780 19304 21844 25400 38100 50800 64516 12700" +PolygonIsolates=" 2540 3048 4064 6096 8128 10160 12700 14224 16764 17780 19304 21844 25400 38100 64516 0" +MiterRadiuss=" 2540 3175 6350 12700 25400 10000 20000 25000 50000 75000 100000 0" +SmdSizes=" 3048 1524 4064 2032 6096 3048 8128 4064 10160 5080 12700 6604 14224 7112 16764 8128 17780 9144 19304 9652 21844 10668 25400 12700 38100 19304 50800 25400 64516 32512 12700 6350" +WireBend=0 +WireBendSet=31 +WireCap=1 +MiterStyle=0 +PadShape=0 +ViaShape=0 +PolygonPour=0 +PolygonRank=7 +PolygonThermals=1 +PolygonOrphans=0 +TextRatio=8 +PinDirection=3 +PinFunction=0 +PinLength=2 +PinVisible=3 +SwapLevel=0 +ArcDirection=0 +AddLevel=2 +PadsSameType=0 +Layer=91 +Views=" 1: -430782 -726039 2728760 964105" +Sheet=1 + +[Win_2] +Type="Control Panel" +Loc="540 283 1139 682" +State=1 +Number=0 + +[Desktop] +Screen="1680 1050" +Window="Win_1" +Window="Win_2" diff --git a/rgb_encoder.vhd b/rgb_encoder.vhd new file mode 100644 index 0000000..ff41235 --- /dev/null +++ b/rgb_encoder.vhd @@ -0,0 +1,139 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +---- Uncomment the following library declaration if instantiating +---- any Xilinx primitives in this code. +--library UNISIM; +--use UNISIM.VComponents.all; + +entity rgb_encoder is + port( + CLK14M : in std_logic; + CREF : in std_logic; + nSEROUT : in std_logic; + nSYNC : in std_logic; + TEXT : in std_logic; + GR : in std_logic; + + RED : out std_logic_vector(1 downto 0); + GREEN : out std_logic_vector(1 downto 0); + BLUE : out std_logic_vector(1 downto 0); + nSYNCOUT : out std_logic + ); +end rgb_encoder; + +architecture rtl of rgb_encoder is + +signal R : std_logic_vector(1 downto 0) := "00"; +signal G : std_logic_vector(1 downto 0) := "00"; +signal B : std_logic_vector(1 downto 0) := "00"; + +signal COLCLK : std_logic_vector(3 downto 0) := "1111"; +signal COLPAT : std_logic_vector(3 downto 0) := "1111"; + +begin + +RED <= R; +GREEN <= G; +BLUE <= B; +nSYNCOUT <= nSYNC; + +process(CLK14M, nSEROUT, CREF, GR) +variable COLPAT2 : std_logic_vector(3 downto 0); +begin + if falling_edge(CLK14M) then + COLCLK <= COLCLK(2 downto 0) & CREF; + COLPAT <= COLPAT(2 downto 0) & nSEROUT; + if GR = '1' then + if COLCLK = "0011" or COLCLK = "1100" then + if COLCLK = "0011" then + COLPAT2 := COLPAT; + else + COLPAT2 := COLPAT(1 downto 0) & COLPAT(3 downto 2); + end if; + + case COLPAT2 is + when "1011" => -- 1 - 0x90 17 40 + R <= "10"; + G <= "00"; + B <= "01"; + when "1101" => -- 2 - 0x40 2c a5 + R <= "01"; + G <= "00"; + B <= "10"; + when "1001" => -- 3 - 0xd0 43 e5 + R <= "11"; + G <= "01"; + B <= "11"; + when "1110" => -- 4 - 0x00 69 40 + R <= "00"; + G <= "01"; + B <= "01"; + when "1010" => -- 5 - 0x80 80 80 + R <= "10"; + G <= "10"; + B <= "10"; + when "1100" => -- 6 - 0x2f 95 e5 + R <= "00"; + G <= "10"; + B <= "11"; + when "1000" => -- 7 - 0xbf ab ff + R <= "11"; + G <= "10"; + B <= "11"; + when "0111" => -- 8 - 0x40 54 00 + R <= "01"; + G <= "01"; + B <= "00"; + when "0011" => -- 9 - 0xd0 6a 1a + R <= "11"; + G <= "01"; + B <= "00"; + when "0101" => -- 10 - 0x80 80 80 + R <= "01"; + G <= "01"; + B <= "01"; + when "0001" => -- 11 - 0xff 96 bf + R <= "11"; + G <= "10"; + B <= "11"; + when "0110" => -- 12 - 0x2f bc 1a + R <= "00"; + G <= "11"; + B <= "00"; + when "0010" => -- 13 - 0xbf d3 5a + R <= "11"; + G <= "11"; + B <= "01"; + when "0100" => -- 14 - 0x6f e8 bf + R <= "01"; + G <= "11"; + B <= "11"; + when "0000" => -- 15 - 0xff ff ff + R <= "11"; + G <= "11"; + B <= "11"; + when others => -- 0 - 0x00 00 00 + R <= "00"; + G <= "00"; + B <= "00"; + end case; + end if; + else + if COLPAT(3) = '1' then + R <= "00"; + G <= "00"; + B <= "00"; + else + R <= "11"; + G <= "11"; + B <= "11"; + end if; + end if; + end if; +end process; + +end rtl; + diff --git a/top.ucf b/top.ucf new file mode 100644 index 0000000..4ffbb93 --- /dev/null +++ b/top.ucf @@ -0,0 +1,27 @@ +NET "CLK14M" LOC = "C10" | CLOCK_DEDICATED_ROUTE = FALSE | IOSTANDARD = LVCMOS33; +NET "CREF" LOC = "T3" | IOSTANDARD = LVCMOS33; +NET "nPRAS" LOC = "E10" | IOSTANDARD = LVCMOS33; +NET "nLDPS" LOC = "N11" | IOSTANDARD = LVCMOS33; +NET "VIDD7" LOC = "C11" | IOSTANDARD = LVCMOS33; +NET "nSEROUT" LOC = "P10" | IOSTANDARD = LVCMOS33; +NET "nWNDW" LOC = "D11" | IOSTANDARD = LVCMOS33; +NET "nSYNC" LOC = "R10" | IOSTANDARD = LVCMOS33; +NET "TEXT" LOC = "C12" | IOSTANDARD = LVCMOS33; +NET "SEGB" LOC = "T7" | IOSTANDARD = LVCMOS33; +NET "GR" LOC = "D12" | IOSTANDARD = LVCMOS33; + +NET "nSYNCOUT" LOC = "E6" | IOSTANDARD = LVCMOS33; +NET "RED<0>" LOC = "D5" | IOSTANDARD = LVCMOS33; +NET "RED<1>" LOC = "C5" | IOSTANDARD = LVCMOS33; +NET "GREEN<0>" LOC = "D6" | IOSTANDARD = LVCMOS33; +NET "GREEN<1>" LOC = "C6" | IOSTANDARD = LVCMOS33; +NET "BLUE<0>" LOC = "E7" | IOSTANDARD = LVCMOS33; +NET "BLUE<1>" LOC = "C7" | IOSTANDARD = LVCMOS33; + +NET "VGA_R" LOC = "R12" | IOSTANDARD = LVCMOS33; +NET "VGA_G" LOC = "T12" | IOSTANDARD = LVCMOS33; +NET "VGA_B" LOC = "R11" | IOSTANDARD = LVCMOS33; +NET "VGA_HS" LOC = "R9" | IOSTANDARD = LVCMOS33; +NET "VGA_VS" LOC = "T10" | IOSTANDARD = LVCMOS33; +#NET "VGA_HS" LOC = "D8" | IOSTANDARD = LVCMOS33; +#NET "VGA_VS" LOC = "C9" | IOSTANDARD = LVCMOS33; diff --git a/top.vhd b/top.vhd new file mode 100644 index 0000000..e24f883 --- /dev/null +++ b/top.vhd @@ -0,0 +1,72 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +---- Uncomment the following library declaration if instantiating +---- any Xilinx primitives in this code. +--library UNISIM; +--use UNISIM.VComponents.all; + +entity top is + port( + CLK14M : in std_logic; + CREF : in std_logic; + nPRAS : in std_logic; + nLDPS : in std_logic; + VIDD7 : in std_logic; + nSEROUT : in std_logic; + nWNDW : in std_logic; + nSYNC : in std_logic; + TEXT : in std_logic; + SEGB : in std_logic; + GR : in std_logic; + + RED : out std_logic_vector(1 downto 0); + GREEN : out std_logic_vector(1 downto 0); + BLUE : out std_logic_vector(1 downto 0); + nSYNCOUT : out std_logic; + + VGA_HS : out std_logic; + VGA_VS : out std_logic; + VGA_R : out std_logic; + VGA_G : out std_logic; + VGA_B : out std_logic + ); +end top; + +architecture rtl of top is + +begin + +RGB : entity work.rgb_encoder + port map( + CLK14M => CLK14M, + CREF => CREF, + nSEROUT => nSEROUT, + nSYNC => nSYNC, + TEXT => TEXT, + GR => GR, + RED => RED, + GREEN => GREEN, + BLUE => BLUE, + nSYNCOUT => nSYNCOUT + ); + +VGA : entity work.vga_controller + port map( + CLK_14M => CLK14M, + nVIDEO => nSEROUT, + COLOR_LINE => GR, + CBL => nWNDW, + nLDPS => nLDPS, + + VGA_HS => VGA_HS, + VGA_VS => VGA_VS, + VGA_R => VGA_R, + VGA_G => VGA_G, + VGA_B => VGA_B + ); + +end rtl; + diff --git a/vga_controller.vhd b/vga_controller.vhd new file mode 100644 index 0000000..61134f1 --- /dev/null +++ b/vga_controller.vhd @@ -0,0 +1,347 @@ +------------------------------------------------------------------------------- +-- +-- A VGA line-doubler for an Apple ][ +-- +-- Stephen A. Edwards, sedwards.cs.columbia.edu +-- +-- The Apple ][ uses a 14.31818 MHz master clock. It outputs a new +-- horizontal line every 65 * 14 + 2 = 912 14M cycles. The extra two +-- are from the "extended cycle" used to keep the 3.579545 MHz +-- colorburst signal in sync. Of these, 40 * 14 = 560 are active video. +-- +-- In graphics mode, the Apple effectively generates 140 four-bit pixels +-- output serially (i.e., with 3.579545 MHz pixel clock). In text mode, +-- it generates 280 one-bit pixels (i.e., with a 7.15909 MHz pixel clock). +-- +-- We capture 140 four-bit nibbles for each line and interpret them in +-- one of the two modes. In graphics mode, each is displayed as a +-- single pixel of one of 16 colors. In text mode, each is displayed +-- as two black or white pixels. +-- +-- The VGA display is nominally 640 X 480, but we use a 14.31818 MHz +-- dot clock. To stay in sync with the Apple, we generate a new line +-- every 912 / 2 = 456 14M cycles= 31.8 us, a 31.4 kHz horizontal +-- refresh rate. Of these, 280 will be active video. +-- +-- One set of suggested VGA timings: +-- +-- ______________________ ________ +-- ________| VIDEO |________| VIDEO +-- |-C-|----------D-----------|-E-| +-- __ ______________________________ ___________ +-- |_| |_| +-- |B| +-- |---------------A----------------| +-- +-- A = 31.77 us Scanline time +-- B = 3.77 us Horizontal sync time +-- C = 1.89 us Back porch +-- D = 25.17 us Active video +-- E = 0.94 us Front porch +-- +-- We use A = 456 / 14.31818 MHz = 31.84 us +-- B = 54 / 14.31818 MHz = 3.77 us +-- C = 106 / 14.31818 MHz = 7.40 us +-- D = 280 / 14.31818 MHz = 19.56 us +-- E = 16 / 14.31818 MHz = 1.12 us +------------------------------------------------------------------------------- +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +entity vga_controller is + + port ( + CLK_14M : in std_logic; -- 14.31818 MHz master clock + nVIDEO : in std_logic; + COLOR_LINE : in std_logic; + CBL : in std_logic; + + SRAM_nWE : out std_logic; + SRAM_nOE : out std_logic; + SRAM_nCE : out std_logic; + SRAM_addr : out unsigned(8 downto 0); + SRAM_data : inout unsigned(3 downto 0); + + VGA_HS : out std_logic; -- Active low + VGA_VS : out std_logic; -- Active low + VGA_R : out std_logic_vector(1 downto 0); + VGA_G : out std_logic_vector(1 downto 0); + VGA_B : out std_logic_vector(1 downto 0); + + MODE : in std_logic + ); + +end vga_controller; + +architecture rtl of vga_controller is + +--GE +signal HBL : std_logic := '0'; +signal VBL : std_logic := '0'; + +signal SRAM_rd_data : unsigned(5 downto 0); +signal SRAM_wr_data : unsigned(3 downto 0); +signal SRAM_nWEi : std_logic; +signal SRAM_nOEi : std_logic; +signal SRAM_nCEi : std_logic; + +signal RCOL : std_logic_vector(1 downto 0) := "00"; +signal GCOL : std_logic_vector(1 downto 0) := "00"; +signal BCOL : std_logic_vector(1 downto 0) := "00"; + +signal R : std_logic_vector(1 downto 0); +signal G : std_logic_vector(1 downto 0); +signal B : std_logic_vector(1 downto 0); + +signal PIXPAT : unsigned(3 downto 0); +signal RAMPIXPAT : unsigned(5 downto 0); +signal COLPAT : unsigned(3 downto 0); +signal TEXT : std_logic; + + signal ram_write_addr : unsigned(8 downto 0); + signal ram_we : std_logic; + signal ram_read_addr : unsigned(8 downto 0); + + signal hcount : unsigned(9 downto 0); + signal hcount2 : unsigned(9 downto 0); + --GE signal vcount : unsigned(5 downto 0); + signal vcount : unsigned(6 downto 0); + + signal even_line : std_logic := '0'; + signal hactive : std_logic; + + constant VGA_SCANLINE : integer := 456; -- Must be 456 (set by the Apple) + + constant VGA_HSYNC : integer := 54; + constant VGA_BACK_PORCH : integer := 66; + constant VGA_ACTIVE : integer := 282; -- Must be 280 (set by the Apple) + constant VGA_FRONT_PORCH : integer := 54; + + -- VGA_HSYNC + VGA_BACK_PORCH + VGA_ACTIVE + VGA_FRONT_PORCH = VGA_SCANLINE + + --GE (org) constant VBL_TO_VSYNC : integer := 33; + --GE constant VBL_TO_VSYNC : integer := 80; + constant VBL_TO_VSYNC : integer := 55; + constant VGA_VSYNC_LINES : integer := 3; + + signal VGA_VS_I, VGA_HS_I : std_logic; + + signal video_active : std_logic; + signal vbl_delayed : std_logic; + signal color_line_delayed_1, color_line_delayed_2 : std_logic; + + --GE 10/02/2009 + signal cbl_last : std_logic; + signal cbl_count : unsigned(9 downto 0); + +begin + + --GE 10/02/2009 + blank_sep2 : process(CLK_14M, CBL, cbl_last, cbl_count) + begin + if falling_edge(CLK_14M) then + cbl_count <= cbl_count + 1; + cbl_last <= CBL; + if (cbl_last = '0' and CBL = '1') then + cbl_count <= "1000100101"; -- 549 + end if; + if (cbl_count = 911) then + cbl_count <= (others => '0'); + VBL <= CBL; + color_line_delayed_2 <= color_line_delayed_1; + color_line_delayed_1 <= COLOR_LINE; + vbl_delayed <= VBL; + if VBL = '1' then + even_line <= '0'; + vcount <= vcount + 1; + else + vcount <= (others => '0'); + even_line <= not even_line; + end if; + end if; + if (cbl_count >= 549) and (cbl_count <= 899) then + HBL <= '1'; + else + HBL <= '0'; + end if; + end if; + end process; + hcount <= cbl_count; + + hsync_gen : process (CLK_14M) + begin + if falling_edge(CLK_14M) then + if hcount = VGA_ACTIVE + VGA_FRONT_PORCH or + hcount = VGA_SCANLINE + VGA_ACTIVE + VGA_FRONT_PORCH then + VGA_HS_I <= '0'; + elsif hcount = VGA_ACTIVE + VGA_FRONT_PORCH + VGA_HSYNC or + hcount = VGA_SCANLINE + VGA_ACTIVE + VGA_FRONT_PORCH + VGA_HSYNC then + VGA_HS_I <= '1'; + end if; + + if hcount = VGA_SCANLINE - 1 or + hcount = VGA_SCANLINE + VGA_SCANLINE - 1 then + hactive <= '1'; + elsif hcount = VGA_ACTIVE or + hcount = VGA_ACTIVE + VGA_SCANLINE then + hactive <= '0'; + end if; + end if; + end process hsync_gen; + + VGA_HS <= VGA_HS_I; + + vsync_gen : process (CLK_14M) + begin + if falling_edge(CLK_14M) then + if vcount = VBL_TO_VSYNC then + VGA_VS_I <= '0'; + elsif vcount = VBL_TO_VSYNC + VGA_VSYNC_LINES then + VGA_VS_I <= '1'; + end if; + end if; + end process vsync_gen; + + VGA_VS <= VGA_VS_I; + + -- Shift in the incoming bits to reconstruct four-bit groups + input_shift_register : process (CLK_14M) + begin + if falling_edge(CLK_14M) then + PIXPAT <= PIXPAT(2 downto 0) & nVIDEO; + end if; + end process input_shift_register; + + hcount2 <= hcount - VGA_SCANLINE; + + ram_read_addr <= + even_line & hcount(8 downto 1) when hcount < VGA_SCANLINE else + even_line & hcount2(8 downto 1); + + ram_write_addr <= (not even_line) & hcount(9 downto 2); + ram_we <= '1' when hcount(1 downto 0) = "00" else '0'; + + video_active <= hactive and not vbl_delayed; + + -- RGB values from Linards Ticmanis, + -- http://newsgroups.derkeiler.com/Archive/Comp/comp.sys.apple2/2005-09/msg00534.html + +colorgen: process(COLPAT) +begin + case COLPAT is + when "1110" => -- 1 - 0x90 17 40 + RCOL <= "10"; + GCOL <= "00"; + BCOL <= "01"; + when "0111" => -- 2 - 0x40 2c a5 + RCOL <= "01"; + GCOL <= "00"; + BCOL <= "10"; + when "0110" => -- 3 - 0xd0 43 e5 + RCOL <= "11"; + GCOL <= "01"; + BCOL <= "11"; + when "1011" => -- 4 - 0x00 69 40 + RCOL <= "00"; + GCOL <= "01"; + BCOL <= "01"; + when "1010" => -- 5 - 0x80 80 80 + RCOL <= "10"; + GCOL <= "10"; + BCOL <= "10"; + when "0011" => -- 6 - 0x2f 95 e5 + RCOL <= "00"; + GCOL <= "10"; + BCOL <= "11"; + when "0010" => -- 7 - 0xbf ab ff + RCOL <= "11"; + GCOL <= "10"; + BCOL <= "11"; + when "1101" => -- 8 - 0x40 54 00 + RCOL <= "01"; + GCOL <= "01"; + BCOL <= "00"; + when "1100" => -- 9 - 0xd0 6a 1a + RCOL <= "11"; + GCOL <= "01"; + BCOL <= "00"; + when "0101" => -- 10 - 0x80 80 80 + RCOL <= "01"; + GCOL <= "01"; + BCOL <= "01"; + when "0100" => -- 11 - 0xff 96 bf + RCOL <= "11"; + GCOL <= "10"; + BCOL <= "11"; + when "1001" => -- 12 - 0x2f bc 1a + RCOL <= "00"; + GCOL <= "11"; + BCOL <= "00"; + when "1000" => -- 13 - 0xbf d3 5a + RCOL <= "11"; + GCOL <= "11"; + BCOL <= "01"; + when "0001" => -- 14 - 0x6f e8 bf + RCOL <= "01"; + GCOL <= "11"; + BCOL <= "11"; + when "0000" => -- 15 - 0xff ff ff + RCOL <= "11"; + GCOL <= "11"; + BCOL <= "11"; + when others => -- 0 - 0x00 00 00 + RCOL <= "00"; + GCOL <= "00"; + BCOL <= "00"; + end case; +end process; + +TEXT <= '1' when hcount(0) = '0' and CLK_14M = '0' and RAMPIXPAT(3) = '0' + else '1' when hcount(0) = '0' and CLK_14M = '1' and RAMPIXPAT(2) = '0' + else '1' when hcount(0) = '1' and CLK_14M = '0' and RAMPIXPAT(1) = '0' + else '1' when hcount(0) = '1' and CLK_14M = '1' and RAMPIXPAT(0) = '0' + else '0'; + +COLPAT <= RAMPIXPAT(3 downto 0) when hcount(0) = '1' + else RAMPIXPAT(3 downto 2) & RAMPIXPAT(5 downto 4); + +--GE +SRAM_addr <= ram_read_addr when hcount(0) = '1' else ram_write_addr; +SRAM_nWEi <= not ram_we; +SRAM_nOEi <= '0' when hcount(0) = '1' else '1'; +SRAM_nCEi <= CLK_14M; +process(CLK_14M) +begin + if rising_edge(CLK_14M) and SRAM_nOEi = '0' then + SRAM_rd_data <= SRAM_rd_data(1 downto 0) & SRAM_data; + end if; +end process; +process(CLK_14M) +begin + if falling_edge(CLK_14M) then + RAMPIXPAT <= SRAM_rd_data; + end if; +end process; + +SRAM_wr_data <= PIXPAT; +SRAM_data <= SRAM_wr_data when SRAM_nCEi = '0' and SRAM_nWEi = '0' else "ZZZZ"; + +SRAM_nCE <= SRAM_nCEi; +SRAM_nOE <= SRAM_nOEi; +SRAM_nWE <= SRAM_nWEi; + +R <= RCOL when video_active = '1' and color_line_delayed_2 = '1' + else TEXT & TEXT when video_active = '1' and color_line_delayed_2 = '0' + else "00"; +G <= GCOL when video_active = '1' and color_line_delayed_2 = '1' + else TEXT & TEXT when video_active = '1' and color_line_delayed_2 = '0' + else "00"; +B <= BCOL when video_active = '1' and color_line_delayed_2 = '1' + else TEXT & TEXT when video_active = '1' and color_line_delayed_2 = '0' + else "00"; +VGA_R <= R when MODE = '1' else "00"; +VGA_G <= G when MODE = '1' else TEXT & TEXT when video_active = '1' else "00"; +VGA_B <= B when MODE = '1' else "00"; + +end rtl;