├── sim ├── ctrl │ └── nc │ │ └── run │ │ ├── ctrl.sv │ │ ├── ctrl2.sv │ │ ├── dir.lst │ │ ├── clean │ │ ├── sim.lst │ │ ├── lib.lst │ │ └── test.py ├── lcd │ └── nc │ │ └── run │ │ ├── lib.lst │ │ ├── dir.lst │ │ ├── rtl.lst │ │ ├── sim.lst │ │ ├── clean │ │ └── test.py ├── sdm │ └── nc │ │ └── run │ │ ├── lib.lst │ │ ├── dir.lst │ │ ├── clean │ │ ├── rtl.lst │ │ ├── sim.lst │ │ └── test.py ├── sram │ └── nc │ │ └── run │ │ ├── lib.lst │ │ ├── sram.sv │ │ ├── dir.lst │ │ ├── clean │ │ ├── rtl.lst │ │ ├── sim.lst │ │ └── test.py ├── uart │ └── nc │ │ └── run │ │ ├── lib.lst │ │ ├── dir.lst │ │ ├── sim.lst │ │ ├── clean │ │ ├── rtl.lst │ │ └── test.py ├── ps2mouse │ └── nc │ │ └── run │ │ ├── dir.lst │ │ ├── rtl.lst │ │ ├── clean │ │ ├── lib.lst │ │ ├── sim.lst │ │ └── test.py ├── cpu_cache_sdram │ └── nc │ │ └── run │ │ ├── dir.lst │ │ ├── clean │ │ ├── lib.lst │ │ ├── sim.lst │ │ ├── rtl.lst │ │ └── test.py ├── tg68 │ └── nc │ │ └── run │ │ ├── dir.lst │ │ ├── clean │ │ ├── rtl.lst │ │ ├── lib.lst │ │ ├── sim.lst │ │ └── test.py ├── tg68k │ └── nc │ │ └── run │ │ ├── dir.lst │ │ ├── clean │ │ ├── lib.lst │ │ ├── sim.lst │ │ ├── rtl.lst │ │ └── test.py ├── common │ └── clean ├── minimig │ └── nc │ │ └── run │ │ ├── clean │ │ ├── sim.lst │ │ ├── dir.lst │ │ ├── lib.lst │ │ └── test.py └── minimig_cpu │ └── nc │ └── run │ ├── clean │ ├── sim.lst │ ├── dir.lst │ ├── lib.lst │ └── test.py ├── sw ├── sdm │ ├── build.sh │ └── sdm.c ├── vasm │ ├── vasm.pdf │ └── vasmm68k_mot ├── dice_disk │ ├── Readme.txt │ └── mm_tc64.adf ├── dma-seq-test │ ├── dma-seq │ └── dma-seq.c ├── 68kedit │ ├── 68kedit5.1.exe │ ├── 68kEditPatch_5.1.2.80.exe │ └── File_id.diz ├── mkdrivesounds │ ├── Step1.raw │ ├── Step2.raw │ ├── Step3.raw │ ├── Step4.raw │ ├── DiskEject.raw │ ├── HDDStep1.raw │ ├── HDDStep2.raw │ ├── HDDStep3.raw │ ├── HDDStep4.raw │ ├── MotorLoop.raw │ ├── MotorStop.raw │ ├── drivesnd.bin │ ├── DiskInsert.raw │ ├── MotorStart.raw │ ├── Makefile │ └── mkdrivesounds.c ├── misc │ ├── Minimig2OnBlue_edit.png │ ├── makefont.py │ └── makelogo.py ├── AmigaUtils │ ├── build.sh │ ├── Poke.c │ ├── Peek.c │ └── SetNMI.s └── hex2mif │ └── hex2mif.py ├── doc ├── amiga │ ├── amiga_docs_links.txt │ ├── ahi │ │ ├── Aros_Developer_AHIDrivers - Wikibooks, open books for an open world_files │ │ │ ├── index.php │ │ │ ├── index(13).php │ │ │ ├── wikimedia-button.png │ │ │ ├── poweredby_mediawiki_88x31.png │ │ │ ├── index(9).php │ │ │ ├── index(5).php │ │ │ ├── index(2).php │ │ │ ├── index(7).php │ │ │ ├── index(10).php │ │ │ ├── index(8).php │ │ │ ├── index(11).php │ │ │ ├── index(1).php │ │ │ ├── index(15).php │ │ │ ├── index(14).php │ │ │ ├── index(6).php │ │ │ ├── index(12).php │ │ │ ├── index(4).php │ │ │ └── load(3).php │ │ ├── ahisrc.tar.gz │ │ ├── m68k-amigaos-ahidev.lha │ │ └── m68k-amigaos-ahiusr.lha │ └── aga │ │ ├── AGA.guide │ │ ├── RandyAGA.txt │ │ ├── aga_guide.lha │ │ ├── AGA Registers.pdf │ │ ├── Action's guide to AGA fixing software!.mht │ │ └── Mysterious Ways - How to Code the Amiga - AGA Chipset.mht ├── mist │ ├── pcb.pdf │ └── schematic.pdf ├── fpga │ ├── cyc2_cii5v1.pdf │ └── cyclone3_handbook.pdf ├── rtc │ ├── OKI MSM6242B.pdf │ ├── a1200clock_1_sm.jpg │ ├── ide64clock_port.pdf │ └── subway_sw_manual.pdf └── avnet-spartan3 │ ├── ADV7123.pdf │ ├── AT24C256W.pdf │ ├── DP83846A.pdf │ ├── CY7C1041V33.pdf │ ├── 48LC16M16A2-75.pdf │ ├── TE28F128J3C-150.pdf │ ├── avbus │ ├── sram_exp-ug.pdf │ ├── flash_exp-sch.pdf │ ├── flash_exp-ug.pdf │ ├── flash_exp.bom.pdf │ ├── sdram_exp-bom.pdf │ ├── sdram_exp-sch.pdf │ ├── sdram_exp-ug.pdf │ ├── sram_exp-bom.pdf │ ├── sram_exp-sch.pdf │ ├── communications_memory_module_schematic_112202F.pdf │ └── communications_memory_module_user_guide_112202.pdf │ ├── Xilinx Spartan-3 Evaluation Kit - BOM 021904F.pdf │ ├── Xilinx Spartan-3 Evaluation Kit - Schematics 021904F.pdf │ ├── Xilinx Spartan-3 Evaluation Kit - Terms & Conditions 0….pdf │ ├── Xilinx Spartan-3 Evaluation Kit - User's Guide 022304F.pdf │ └── Release Notes.txt ├── fw ├── romgen │ ├── Makefile │ ├── rom_prologue.vhd │ ├── rom_epilogue.vhd │ └── romgen.c ├── ctrl_832 │ ├── hexdump.h │ ├── audio.h │ ├── rtc.h │ ├── swap.h │ ├── startup_m68k-elf.s │ ├── small_printf.h │ ├── akiko.h │ ├── minimig_cfg.h │ ├── hexdump.c │ ├── osd_m68k-elf.ld │ ├── akiko.c │ ├── audio.c │ ├── fpga.h │ ├── uart.c │ ├── interrupts.c │ ├── errors.c │ ├── swap.c │ ├── printf.c │ ├── interrupts.h │ ├── spi.h │ ├── firmware.h │ ├── bincue.h │ ├── audiotrack.h │ ├── drivesounds.h │ ├── c64keys.h │ ├── rtc.c │ ├── errors.h │ ├── boot.h │ ├── rafile.h │ ├── fdd.h │ ├── Makefile.68k │ ├── osd_zpu-elf.ld │ └── bootcustominit.h ├── ctrl_boot_832 │ ├── hexdump.h │ ├── checksum.h │ ├── bootdiag.s │ ├── swap.h │ ├── bootdiag.h │ ├── small_printf.h │ ├── uart.c │ ├── uart.h │ ├── checksum.c │ ├── swap.c │ ├── hexdump.c │ ├── main.c │ ├── mkchecksum.c │ ├── rom_prologue.vhd │ ├── spi.h │ └── start68k.s ├── testbed │ ├── swap.h │ ├── bincue.h │ ├── setstack.asm │ ├── timer.h │ ├── uart.c │ ├── errors.c │ ├── swap.c │ ├── interrupts.c │ ├── interrupts.h │ ├── spi.h │ ├── audiotrack.h │ ├── errors.h │ ├── boot.h │ ├── rafile.h │ └── malloc.h ├── dhrystone_832 │ ├── debug │ ├── setstack.asm │ ├── timer.h │ └── uart.c └── amiga_boot │ └── Makefile ├── bench ├── cpu_cache_sdram_verilator │ ├── .gitignore │ ├── mt48lc16m16a2.v │ └── Makefile ├── cpu_cache_sdram │ ├── fw │ │ └── test.S │ └── tg68_ram.v ├── ps2mouse │ └── ps2mouse_tb.v ├── de1 │ └── de1_clk_rst.v └── lcd │ └── lcd_tb.v ├── lib ├── altera │ └── altera_mf.v ├── models │ └── mt48lc16m16a2.v └── io │ └── generic_output.v ├── pcb └── chaos-de1_ext2.zip ├── rtl ├── tg68 │ └── TG68_fast.vhd ├── mist │ ├── vidclkcntrl.qip │ ├── amigaclk_reconfig_pal.qip │ ├── amigaclk_pll_reconfig.qip │ ├── amigaclk_reconfig_ntsc.qip │ ├── amiga_clk_altera.qip │ └── amiga_clk_altera.ppf ├── de0_nano │ ├── amiga_clk_altera.qip │ └── amiga_clk_altera.ppf ├── soc │ ├── tg68.qip │ └── minimig_defines.vh ├── chameleonv1 │ ├── chameleonv1.qip │ ├── ChamelonV1CPLD.qud │ ├── amiga_clk_altera.qip │ ├── amiga_clk_altera.ppf │ └── chameleon_autofire.vhd ├── minimig │ ├── agnus_refresh.v │ ├── paula_audio_volume.v │ ├── agnus_blitter_fill.v │ ├── minimig_bankmapper.v │ ├── agnus_blitter_minterm.v │ └── minimig_syscontrol.v ├── de10-lite │ ├── amiga_clk_altera.qip │ └── amiga_clk_altera.ppf ├── chameleonv2 │ ├── amiga_clk_altera.qip │ ├── chameleonv2.qip │ ├── amiga_clk_altera.ppf │ └── amiga_clk_altera.cmp ├── sdram │ ├── tpram_inf_128x32.v │ ├── tpram_inf_be_512x16.v │ ├── dpram_inf_256x32.v │ ├── dpram_inf_generic.v │ ├── dpram_inf_be_1024x16.v │ ├── dpram_inf_be_2048x16.v │ ├── sdram.qip │ └── dpram_inf_be_1024x32.v ├── io │ ├── i_sync.v │ └── sseg_decode.v ├── host │ └── host.qip ├── chameleon │ └── chameleon.qip └── audio │ ├── AudioMix.vhd │ ├── audio_shifter.v │ └── audio_top.v ├── amiga_sw ├── MinimigUtils.adf ├── WavPlay │ ├── CompList │ ├── WavPlay │ ├── README.info │ ├── wav.c.info │ ├── Build68k.info │ ├── WavPlay.info │ ├── server.c.info │ ├── _Server.s.info │ ├── wavplay.c.info │ ├── minimigaudio.c.info │ ├── Build68k │ ├── wav.h │ ├── _Server.s │ ├── Server.c │ ├── README │ ├── wav.h.info │ └── minimigaudio.h ├── WheelDriver.adf ├── rtg │ ├── README.info │ ├── minimig.card │ ├── Makefile │ ├── P96CardStruct.i │ ├── P96ModeInfo.i │ └── README ├── WheelDriver │ ├── Main.c │ ├── CompList │ ├── WheelDriver │ ├── WheelDriver.info │ ├── Build68k │ ├── _Server.s │ ├── newmouse.h │ ├── WheelDriver.h │ ├── Cx.h │ └── Server.c └── boingball │ ├── minimig.art │ ├── minimig.bal │ └── minimig.cop ├── .gitmodules ├── paths.mk ├── debug ├── debugboot ├── misc └── 51-usbblaster.rules ├── .gitignore ├── fpga ├── de0_nano │ └── Makefile ├── mist │ ├── Makefile │ └── minimig_mist.qpf ├── virtual │ └── minimig_virtual.qpf ├── chameleonv1 │ ├── Makefile │ └── MinimigAGA_TC64V1.qpf ├── chameleonv2 │ ├── Makefile │ └── MinimigAGA_TC64V2.qpf └── de10_lite │ └── minimig_de10.qpf └── Makefile /sim/ctrl/nc/run/ctrl.sv: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /sim/lcd/nc/run/lib.lst: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /sim/sdm/nc/run/lib.lst: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /sim/sram/nc/run/lib.lst: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /sim/sram/nc/run/sram.sv: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /sim/uart/nc/run/lib.lst: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /sim/ctrl/nc/run/ctrl2.sv: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /sim/lcd/nc/run/dir.lst: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /sim/sdm/nc/run/dir.lst: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /sim/sram/nc/run/dir.lst: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /sim/uart/nc/run/dir.lst: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /sim/ps2mouse/nc/run/dir.lst: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /sim/ps2mouse/nc/run/rtl.lst: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /sim/cpu_cache_sdram/nc/run/dir.lst: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /sim/tg68/nc/run/dir.lst: -------------------------------------------------------------------------------- 1 | ../../../../rtl/tg68 2 | 3 | -------------------------------------------------------------------------------- /sim/ctrl/nc/run/dir.lst: -------------------------------------------------------------------------------- 1 | ../../../../rtl/or1200 2 | 3 | -------------------------------------------------------------------------------- /sim/lcd/nc/run/rtl.lst: -------------------------------------------------------------------------------- 1 | ../../../../rtl/lcd/lcd.v 2 | 3 | -------------------------------------------------------------------------------- /sim/lcd/nc/run/sim.lst: -------------------------------------------------------------------------------- 1 | ../../../../bench/lcd/lcd_tb.v 2 | -------------------------------------------------------------------------------- /sim/tg68k/nc/run/dir.lst: -------------------------------------------------------------------------------- 1 | ../../../../rtl/tg68k 2 | 3 | -------------------------------------------------------------------------------- /sim/common/clean: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | rm -rf ../out/ 4 | 5 | -------------------------------------------------------------------------------- /sim/lcd/nc/run/clean: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | rm -rf ../out/ 4 | 5 | -------------------------------------------------------------------------------- /sim/sdm/nc/run/clean: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | rm -rf ../out/ 4 | 5 | -------------------------------------------------------------------------------- /sim/sdm/nc/run/rtl.lst: -------------------------------------------------------------------------------- 1 | ../../../../bench/sdm/sdm.v 2 | 3 | -------------------------------------------------------------------------------- /sim/sdm/nc/run/sim.lst: -------------------------------------------------------------------------------- 1 | ../../../../bench/sdm/sdm_tb.v 2 | 3 | -------------------------------------------------------------------------------- /sim/uart/nc/run/sim.lst: -------------------------------------------------------------------------------- 1 | ../../../../bench/uart/uart_tb.v 2 | -------------------------------------------------------------------------------- /sim/ctrl/nc/run/clean: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | rm -rf ../out/ 4 | 5 | -------------------------------------------------------------------------------- /sim/ctrl/nc/run/sim.lst: -------------------------------------------------------------------------------- 1 | ../../../../bench/ctrl/ctrl_tb.v 2 | 3 | -------------------------------------------------------------------------------- /sim/minimig/nc/run/clean: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | rm -rf ../out/ 4 | 5 | -------------------------------------------------------------------------------- /sim/ps2mouse/nc/run/clean: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | rm -rf ../out/ 4 | 5 | -------------------------------------------------------------------------------- /sim/sram/nc/run/clean: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | rm -rf ../out/ 4 | 5 | -------------------------------------------------------------------------------- /sim/tg68/nc/run/clean: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | rm -rf ../out/ 4 | 5 | -------------------------------------------------------------------------------- /sim/tg68/nc/run/rtl.lst: -------------------------------------------------------------------------------- 1 | ../../../../rtl/tg68/TG68_fast.vhd 2 | 3 | -------------------------------------------------------------------------------- /sim/tg68k/nc/run/clean: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | rm -rf ../out/ 4 | 5 | -------------------------------------------------------------------------------- /sim/uart/nc/run/clean: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | rm -rf ../out/ 4 | 5 | -------------------------------------------------------------------------------- /sim/minimig/nc/run/sim.lst: -------------------------------------------------------------------------------- 1 | ../../../../bench/minimig/soc_tb.v 2 | 3 | -------------------------------------------------------------------------------- /sim/minimig_cpu/nc/run/clean: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | rm -rf ../out/ 4 | 5 | -------------------------------------------------------------------------------- /sim/ps2mouse/nc/run/lib.lst: -------------------------------------------------------------------------------- 1 | ../../../../lib/models/ps2mouse.v 2 | 3 | -------------------------------------------------------------------------------- /sim/tg68/nc/run/lib.lst: -------------------------------------------------------------------------------- 1 | ../../../../lib/models/IS61LV6416L.v 2 | 3 | -------------------------------------------------------------------------------- /sim/tg68/nc/run/sim.lst: -------------------------------------------------------------------------------- 1 | ../../../../bench/tg68/tg68_fast_tb.v 2 | 3 | -------------------------------------------------------------------------------- /sim/tg68k/nc/run/lib.lst: -------------------------------------------------------------------------------- 1 | ../../../../lib/models/IS61LV6416L.v 2 | 3 | -------------------------------------------------------------------------------- /sim/tg68k/nc/run/sim.lst: -------------------------------------------------------------------------------- 1 | ../../../../bench/tg68k/tg68k_fast_tb.v 2 | 3 | -------------------------------------------------------------------------------- /sw/sdm/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | gcc -Wall sdm.c -o sdm && ./sdm 3 | 4 | -------------------------------------------------------------------------------- /sim/cpu_cache_sdram/nc/run/clean: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | rm -rf ../out/ 4 | 5 | -------------------------------------------------------------------------------- /sim/minimig_cpu/nc/run/sim.lst: -------------------------------------------------------------------------------- 1 | ../../../../bench/minimig/soc_tb.v 2 | 3 | -------------------------------------------------------------------------------- /doc/amiga/amiga_docs_links.txt: -------------------------------------------------------------------------------- 1 | http://amiga.sourceforge.net/amigadevhelp/ 2 | 3 | -------------------------------------------------------------------------------- /doc/amiga/ahi/Aros_Developer_AHIDrivers - Wikibooks, open books for an open world_files/index.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /doc/mist/pcb.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/doc/mist/pcb.pdf -------------------------------------------------------------------------------- /fw/romgen/Makefile: -------------------------------------------------------------------------------- 1 | romgen: romgen.c 2 | gcc -o romgen romgen.c 3 | 4 | clean: 5 | rm romgen 6 | -------------------------------------------------------------------------------- /sw/vasm/vasm.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/sw/vasm/vasm.pdf -------------------------------------------------------------------------------- /doc/amiga/ahi/Aros_Developer_AHIDrivers - Wikibooks, open books for an open world_files/index(13).php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /sw/vasm/vasmm68k_mot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/sw/vasm/vasmm68k_mot -------------------------------------------------------------------------------- /bench/cpu_cache_sdram_verilator/.gitignore: -------------------------------------------------------------------------------- 1 | sdram.vcd 2 | sdram.sav 3 | obj_dir 4 | cpu_cache_sdram_tb 5 | -------------------------------------------------------------------------------- /doc/amiga/aga/AGA.guide: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/doc/amiga/aga/AGA.guide -------------------------------------------------------------------------------- /doc/mist/schematic.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/doc/mist/schematic.pdf -------------------------------------------------------------------------------- /lib/altera/altera_mf.v: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/lib/altera/altera_mf.v -------------------------------------------------------------------------------- /pcb/chaos-de1_ext2.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/pcb/chaos-de1_ext2.zip -------------------------------------------------------------------------------- /rtl/tg68/TG68_fast.vhd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/rtl/tg68/TG68_fast.vhd -------------------------------------------------------------------------------- /sim/sram/nc/run/rtl.lst: -------------------------------------------------------------------------------- 1 | ../../../../rtl/ctrl/qmem_sram.v 2 | ../../../../lib/models/IS61LV6416L.v 3 | 4 | -------------------------------------------------------------------------------- /sw/dice_disk/Readme.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/sw/dice_disk/Readme.txt -------------------------------------------------------------------------------- /sw/dma-seq-test/dma-seq: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/sw/dma-seq-test/dma-seq -------------------------------------------------------------------------------- /amiga_sw/MinimigUtils.adf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/amiga_sw/MinimigUtils.adf -------------------------------------------------------------------------------- /amiga_sw/WavPlay/CompList: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/amiga_sw/WavPlay/CompList -------------------------------------------------------------------------------- /amiga_sw/WavPlay/WavPlay: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/amiga_sw/WavPlay/WavPlay -------------------------------------------------------------------------------- /amiga_sw/WheelDriver.adf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/amiga_sw/WheelDriver.adf -------------------------------------------------------------------------------- /amiga_sw/rtg/README.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/amiga_sw/rtg/README.info -------------------------------------------------------------------------------- /amiga_sw/rtg/minimig.card: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/amiga_sw/rtg/minimig.card -------------------------------------------------------------------------------- /doc/fpga/cyc2_cii5v1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/doc/fpga/cyc2_cii5v1.pdf -------------------------------------------------------------------------------- /doc/rtc/OKI MSM6242B.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/doc/rtc/OKI MSM6242B.pdf -------------------------------------------------------------------------------- /sim/minimig/nc/run/dir.lst: -------------------------------------------------------------------------------- 1 | ../../../../rtl/soc/ 2 | ../../../../lib/altera/ 3 | ../../../../rtl/or1200/ 4 | 5 | -------------------------------------------------------------------------------- /sim/sram/nc/run/sim.lst: -------------------------------------------------------------------------------- 1 | ../../../../bench/sram/qmem_sram_tb.v 2 | ../../../../bench/sram/qmem_master.v 3 | 4 | -------------------------------------------------------------------------------- /sw/68kedit/68kedit5.1.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/sw/68kedit/68kedit5.1.exe -------------------------------------------------------------------------------- /sw/dice_disk/mm_tc64.adf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/sw/dice_disk/mm_tc64.adf -------------------------------------------------------------------------------- /amiga_sw/WavPlay/README.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/amiga_sw/WavPlay/README.info -------------------------------------------------------------------------------- /amiga_sw/WavPlay/wav.c.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/amiga_sw/WavPlay/wav.c.info -------------------------------------------------------------------------------- /amiga_sw/WheelDriver/Main.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/amiga_sw/WheelDriver/Main.c -------------------------------------------------------------------------------- /doc/amiga/aga/RandyAGA.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/doc/amiga/aga/RandyAGA.txt -------------------------------------------------------------------------------- /doc/amiga/aga/aga_guide.lha: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/doc/amiga/aga/aga_guide.lha -------------------------------------------------------------------------------- /doc/amiga/ahi/ahisrc.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/doc/amiga/ahi/ahisrc.tar.gz -------------------------------------------------------------------------------- /doc/rtc/a1200clock_1_sm.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/doc/rtc/a1200clock_1_sm.jpg -------------------------------------------------------------------------------- /doc/rtc/ide64clock_port.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/doc/rtc/ide64clock_port.pdf -------------------------------------------------------------------------------- /doc/rtc/subway_sw_manual.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/doc/rtc/subway_sw_manual.pdf -------------------------------------------------------------------------------- /lib/models/mt48lc16m16a2.v: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/lib/models/mt48lc16m16a2.v -------------------------------------------------------------------------------- /sim/minimig_cpu/nc/run/dir.lst: -------------------------------------------------------------------------------- 1 | ../../../../rtl/soc/ 2 | ../../../../lib/altera/ 3 | ../../../../rtl/or1200/ 4 | 5 | -------------------------------------------------------------------------------- /sw/mkdrivesounds/Step1.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/sw/mkdrivesounds/Step1.raw -------------------------------------------------------------------------------- /sw/mkdrivesounds/Step2.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/sw/mkdrivesounds/Step2.raw -------------------------------------------------------------------------------- /sw/mkdrivesounds/Step3.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/sw/mkdrivesounds/Step3.raw -------------------------------------------------------------------------------- /sw/mkdrivesounds/Step4.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/sw/mkdrivesounds/Step4.raw -------------------------------------------------------------------------------- /amiga_sw/WavPlay/Build68k.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/amiga_sw/WavPlay/Build68k.info -------------------------------------------------------------------------------- /amiga_sw/WavPlay/WavPlay.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/amiga_sw/WavPlay/WavPlay.info -------------------------------------------------------------------------------- /amiga_sw/WavPlay/server.c.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/amiga_sw/WavPlay/server.c.info -------------------------------------------------------------------------------- /amiga_sw/WheelDriver/CompList: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/amiga_sw/WheelDriver/CompList -------------------------------------------------------------------------------- /amiga_sw/boingball/minimig.art: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/amiga_sw/boingball/minimig.art -------------------------------------------------------------------------------- /amiga_sw/boingball/minimig.bal: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/amiga_sw/boingball/minimig.bal -------------------------------------------------------------------------------- /amiga_sw/boingball/minimig.cop: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/amiga_sw/boingball/minimig.cop -------------------------------------------------------------------------------- /doc/avnet-spartan3/ADV7123.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/doc/avnet-spartan3/ADV7123.pdf -------------------------------------------------------------------------------- /doc/fpga/cyclone3_handbook.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/doc/fpga/cyclone3_handbook.pdf -------------------------------------------------------------------------------- /sim/cpu_cache_sdram/nc/run/lib.lst: -------------------------------------------------------------------------------- 1 | ../../../../lib/models/IS61LV6416L.v 2 | ../../../../lib/models/mt48lc16m16a2.v 3 | 4 | -------------------------------------------------------------------------------- /sw/mkdrivesounds/DiskEject.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/sw/mkdrivesounds/DiskEject.raw -------------------------------------------------------------------------------- /sw/mkdrivesounds/HDDStep1.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/sw/mkdrivesounds/HDDStep1.raw -------------------------------------------------------------------------------- /sw/mkdrivesounds/HDDStep2.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/sw/mkdrivesounds/HDDStep2.raw -------------------------------------------------------------------------------- /sw/mkdrivesounds/HDDStep3.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/sw/mkdrivesounds/HDDStep3.raw -------------------------------------------------------------------------------- /sw/mkdrivesounds/HDDStep4.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/sw/mkdrivesounds/HDDStep4.raw -------------------------------------------------------------------------------- /sw/mkdrivesounds/MotorLoop.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/sw/mkdrivesounds/MotorLoop.raw -------------------------------------------------------------------------------- /sw/mkdrivesounds/MotorStop.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/sw/mkdrivesounds/MotorStop.raw -------------------------------------------------------------------------------- /sw/mkdrivesounds/drivesnd.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/sw/mkdrivesounds/drivesnd.bin -------------------------------------------------------------------------------- /amiga_sw/WavPlay/_Server.s.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/amiga_sw/WavPlay/_Server.s.info -------------------------------------------------------------------------------- /amiga_sw/WavPlay/wavplay.c.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/amiga_sw/WavPlay/wavplay.c.info -------------------------------------------------------------------------------- /amiga_sw/WheelDriver/WheelDriver: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/amiga_sw/WheelDriver/WheelDriver -------------------------------------------------------------------------------- /doc/amiga/aga/AGA Registers.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/doc/amiga/aga/AGA Registers.pdf -------------------------------------------------------------------------------- /doc/avnet-spartan3/AT24C256W.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/doc/avnet-spartan3/AT24C256W.pdf -------------------------------------------------------------------------------- /doc/avnet-spartan3/DP83846A.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/doc/avnet-spartan3/DP83846A.pdf -------------------------------------------------------------------------------- /fw/ctrl_832/hexdump.h: -------------------------------------------------------------------------------- 1 | #ifndef HEXDUMP_H 2 | #define HEXDUMP_H 3 | 4 | void hexdump(char *p,int l); 5 | 6 | #endif 7 | 8 | -------------------------------------------------------------------------------- /sim/ps2mouse/nc/run/sim.lst: -------------------------------------------------------------------------------- 1 | ../../../../bench/ps2mouse/ps2mouse_tb.v 2 | ../../../../bench/ps2mouse/ps2mouse_ctrl.v 3 | 4 | -------------------------------------------------------------------------------- /sw/misc/Minimig2OnBlue_edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/sw/misc/Minimig2OnBlue_edit.png -------------------------------------------------------------------------------- /sw/mkdrivesounds/DiskInsert.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/sw/mkdrivesounds/DiskInsert.raw -------------------------------------------------------------------------------- /sw/mkdrivesounds/MotorStart.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/sw/mkdrivesounds/MotorStart.raw -------------------------------------------------------------------------------- /doc/avnet-spartan3/CY7C1041V33.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/doc/avnet-spartan3/CY7C1041V33.pdf -------------------------------------------------------------------------------- /fw/ctrl_boot_832/hexdump.h: -------------------------------------------------------------------------------- 1 | #ifndef HEXDUMP_H 2 | #define HEXDUMP_H 3 | 4 | void hexdump(char *p,int l); 5 | 6 | #endif 7 | 8 | -------------------------------------------------------------------------------- /amiga_sw/WavPlay/minimigaudio.c.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/amiga_sw/WavPlay/minimigaudio.c.info -------------------------------------------------------------------------------- /amiga_sw/WheelDriver/WheelDriver.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/amiga_sw/WheelDriver/WheelDriver.info -------------------------------------------------------------------------------- /doc/amiga/ahi/m68k-amigaos-ahidev.lha: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/doc/amiga/ahi/m68k-amigaos-ahidev.lha -------------------------------------------------------------------------------- /doc/amiga/ahi/m68k-amigaos-ahiusr.lha: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/doc/amiga/ahi/m68k-amigaos-ahiusr.lha -------------------------------------------------------------------------------- /doc/avnet-spartan3/48LC16M16A2-75.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/doc/avnet-spartan3/48LC16M16A2-75.pdf -------------------------------------------------------------------------------- /doc/avnet-spartan3/TE28F128J3C-150.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/doc/avnet-spartan3/TE28F128J3C-150.pdf -------------------------------------------------------------------------------- /sw/68kedit/68kEditPatch_5.1.2.80.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/sw/68kedit/68kEditPatch_5.1.2.80.exe -------------------------------------------------------------------------------- /doc/avnet-spartan3/avbus/sram_exp-ug.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/doc/avnet-spartan3/avbus/sram_exp-ug.pdf -------------------------------------------------------------------------------- /doc/avnet-spartan3/avbus/flash_exp-sch.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/doc/avnet-spartan3/avbus/flash_exp-sch.pdf -------------------------------------------------------------------------------- /doc/avnet-spartan3/avbus/flash_exp-ug.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/doc/avnet-spartan3/avbus/flash_exp-ug.pdf -------------------------------------------------------------------------------- /doc/avnet-spartan3/avbus/flash_exp.bom.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/doc/avnet-spartan3/avbus/flash_exp.bom.pdf -------------------------------------------------------------------------------- /doc/avnet-spartan3/avbus/sdram_exp-bom.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/doc/avnet-spartan3/avbus/sdram_exp-bom.pdf -------------------------------------------------------------------------------- /doc/avnet-spartan3/avbus/sdram_exp-sch.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/doc/avnet-spartan3/avbus/sdram_exp-sch.pdf -------------------------------------------------------------------------------- /doc/avnet-spartan3/avbus/sdram_exp-ug.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/doc/avnet-spartan3/avbus/sdram_exp-ug.pdf -------------------------------------------------------------------------------- /doc/avnet-spartan3/avbus/sram_exp-bom.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/doc/avnet-spartan3/avbus/sram_exp-bom.pdf -------------------------------------------------------------------------------- /doc/avnet-spartan3/avbus/sram_exp-sch.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/doc/avnet-spartan3/avbus/sram_exp-sch.pdf -------------------------------------------------------------------------------- /sim/ctrl/nc/run/lib.lst: -------------------------------------------------------------------------------- 1 | ../../../../lib/models/IS61LV6416L.v 2 | ../../../../lib/models/s29al032d_00.v 3 | ../../../../lib/models/sd_card.v 4 | 5 | -------------------------------------------------------------------------------- /bench/cpu_cache_sdram_verilator/mt48lc16m16a2.v: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/bench/cpu_cache_sdram_verilator/mt48lc16m16a2.v -------------------------------------------------------------------------------- /fw/ctrl_boot_832/checksum.h: -------------------------------------------------------------------------------- 1 | #ifndef CHECKSUM_H 2 | #define CHECKSUM_H 3 | 4 | unsigned int checksum(const unsigned char *a,int l); 5 | 6 | #endif 7 | 8 | -------------------------------------------------------------------------------- /sim/tg68k/nc/run/rtl.lst: -------------------------------------------------------------------------------- 1 | ../../../../rtl/tg68k/TG68K_Pack.vhd 2 | ../../../../rtl/tg68k/TG68K_ALU.vhd 3 | ../../../../rtl/tg68k/TG68KdotC_Kernel.vhd 4 | 5 | -------------------------------------------------------------------------------- /fw/ctrl_boot_832/bootdiag.s: -------------------------------------------------------------------------------- 1 | org 0 2 | tag: 3 | dc.l 0 4 | dc.l 8 5 | start: 6 | move.w #$fff,$dff180 ; Just spam the colour register. 7 | bra.s start 8 | 9 | -------------------------------------------------------------------------------- /doc/amiga/aga/Action's guide to AGA fixing software!.mht: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/doc/amiga/aga/Action's guide to AGA fixing software!.mht -------------------------------------------------------------------------------- /sim/cpu_cache_sdram/nc/run/sim.lst: -------------------------------------------------------------------------------- 1 | ../../../../bench/cpu_cache_sdram/cpu_cache_sdram_tb.v 2 | ../../../../bench/de1/de1_clk_rst.v 3 | ../../../../bench/cpu_cache_sdram/tg68_ram.v 4 | 5 | -------------------------------------------------------------------------------- /doc/avnet-spartan3/Xilinx Spartan-3 Evaluation Kit - BOM 021904F.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/doc/avnet-spartan3/Xilinx Spartan-3 Evaluation Kit - BOM 021904F.pdf -------------------------------------------------------------------------------- /fw/ctrl_832/audio.h: -------------------------------------------------------------------------------- 1 | #ifndef AUDIO_H 2 | #define AUDIO_H 3 | 4 | int audio_busy(int buffer); 5 | void audio_start(); 6 | void audio_stop(); 7 | void audio_clear(); 8 | 9 | #endif 10 | 11 | -------------------------------------------------------------------------------- /sim/uart/nc/run/rtl.lst: -------------------------------------------------------------------------------- 1 | ../../../../rtl/tmp/uart_top.v 2 | ../../../../rtl/tmp/uart_old.v 3 | ../../../../rtl/tmp/uart_pkg.vhd 4 | ../../../../rtl/tmp/uart.vhd 5 | ../../../../rtl/tmp/uart_top.vhd 6 | 7 | -------------------------------------------------------------------------------- /doc/avnet-spartan3/Xilinx Spartan-3 Evaluation Kit - Schematics 021904F.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/doc/avnet-spartan3/Xilinx Spartan-3 Evaluation Kit - Schematics 021904F.pdf -------------------------------------------------------------------------------- /doc/avnet-spartan3/avbus/communications_memory_module_schematic_112202F.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/doc/avnet-spartan3/avbus/communications_memory_module_schematic_112202F.pdf -------------------------------------------------------------------------------- /doc/avnet-spartan3/avbus/communications_memory_module_user_guide_112202.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/doc/avnet-spartan3/avbus/communications_memory_module_user_guide_112202.pdf -------------------------------------------------------------------------------- /doc/avnet-spartan3/Xilinx Spartan-3 Evaluation Kit - Terms & Conditions 0….pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/doc/avnet-spartan3/Xilinx Spartan-3 Evaluation Kit - Terms & Conditions 0….pdf -------------------------------------------------------------------------------- /doc/avnet-spartan3/Xilinx Spartan-3 Evaluation Kit - User's Guide 022304F.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/doc/avnet-spartan3/Xilinx Spartan-3 Evaluation Kit - User's Guide 022304F.pdf -------------------------------------------------------------------------------- /fw/ctrl_832/rtc.h: -------------------------------------------------------------------------------- 1 | #ifndef RTC_H 2 | #define RTC_H 3 | 4 | 5 | #define RTCBASE 0x0fffff72 6 | #define HW_RTC(x) *(volatile unsigned short *)(RTCBASE+x) 7 | 8 | void HandleRTC(); 9 | 10 | #endif 11 | 12 | -------------------------------------------------------------------------------- /fw/ctrl_832/swap.h: -------------------------------------------------------------------------------- 1 | #ifndef SWAP_H 2 | #define SWAP_H 3 | 4 | unsigned long SwapBBBB(unsigned long i); 5 | unsigned int SwapBB(unsigned int i); 6 | unsigned long SwapWW(unsigned long i); 7 | 8 | #endif 9 | 10 | -------------------------------------------------------------------------------- /fw/ctrl_boot_832/swap.h: -------------------------------------------------------------------------------- 1 | #ifndef SWAP_H 2 | #define SWAP_H 3 | 4 | unsigned int SwapBBBB(unsigned int i); 5 | unsigned int SwapBB(unsigned int i); 6 | unsigned int SwapWW(unsigned int i); 7 | 8 | #endif 9 | 10 | -------------------------------------------------------------------------------- /fw/testbed/swap.h: -------------------------------------------------------------------------------- 1 | #ifndef SWAP_H 2 | #define SWAP_H 3 | 4 | unsigned long SwapBBBB(unsigned long i); 5 | unsigned int SwapBB(unsigned int i); 6 | unsigned long SwapWW(unsigned long i); 7 | 8 | #endif 9 | 10 | -------------------------------------------------------------------------------- /sw/AmigaUtils/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # build Peek & Poke 4 | vc Peek.c -o Peek 5 | vc Poke.c -o Poke 6 | 7 | # build SetNMI 8 | vasmm68k_mot -m68010 -Fhunkexe SetNMI.s -o SetNMI 9 | chmod +x SetNMI 10 | 11 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "rtl/tg68k"] 2 | path = rtl/tg68k 3 | url = https://github.com/TobiFlex/TG68K.C.git 4 | [submodule "EightThirtyTwo"] 5 | path = EightThirtyTwo 6 | url = https://github.com/robinsonb5/EightThirtyTwo 7 | -------------------------------------------------------------------------------- /fw/ctrl_boot_832/bootdiag.h: -------------------------------------------------------------------------------- 1 | unsigned char bootdiag_bin[] = { 2 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x33, 0xfc, 0x0f, 0xff, 3 | 0x00, 0xdf, 0xf1, 0x80, 0x60, 0xf6 4 | }; 5 | unsigned int bootdiag_bin_len = 18; 6 | -------------------------------------------------------------------------------- /paths.mk: -------------------------------------------------------------------------------- 1 | QUARTUS_PATH_CIII = 2 | QUARTUS_PATH_CIV = $(HOME)/intelFPGA_lite/18.1/quartus/bin/ 3 | QUARTUS_PATH_C10LP = $(HOME)/intelFPGA_lite/18.1/quartus/bin/ 4 | QUARTUS_PATH_MAX10 = $(HOME)/intelFPGA_lite/18.1/quartus/bin/ 5 | 6 | -------------------------------------------------------------------------------- /rtl/mist/vidclkcntrl.qip: -------------------------------------------------------------------------------- 1 | set_global_assignment -name IP_TOOL_NAME "ALTCLKCTRL" 2 | set_global_assignment -name IP_TOOL_VERSION "13.1" 3 | set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) "vidclkcntrl.v"] 4 | -------------------------------------------------------------------------------- /rtl/mist/amigaclk_reconfig_pal.qip: -------------------------------------------------------------------------------- 1 | set_global_assignment -name IP_TOOL_NAME "ROM: 1-PORT" 2 | set_global_assignment -name IP_TOOL_VERSION "13.1" 3 | set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) "amigaclk_reconfig_pal.v"] 4 | -------------------------------------------------------------------------------- /rtl/mist/amigaclk_pll_reconfig.qip: -------------------------------------------------------------------------------- 1 | set_global_assignment -name IP_TOOL_NAME "ALTPLL_RECONFIG" 2 | set_global_assignment -name IP_TOOL_VERSION "13.1" 3 | set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) "amigaclk_pll_reconfig.v"] 4 | -------------------------------------------------------------------------------- /rtl/mist/amigaclk_reconfig_ntsc.qip: -------------------------------------------------------------------------------- 1 | set_global_assignment -name IP_TOOL_NAME "ROM: 1-PORT" 2 | set_global_assignment -name IP_TOOL_VERSION "13.1" 3 | set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) "amigaclk_reconfig_ntsc.v"] 4 | -------------------------------------------------------------------------------- /fw/ctrl_832/startup_m68k-elf.s: -------------------------------------------------------------------------------- 1 | move.l #stack_top,%a7 2 | 3 | /* clear bss */ 4 | lea.l __s_bss,%a0 5 | move.l #__e_bss,%d0 6 | 1: cmp.l %d0,%a0 7 | beq.s 2f 8 | clr.b (%a0)+ 9 | bra.s 1b 10 | 2: 11 | jmp c_entry 12 | -------------------------------------------------------------------------------- /doc/amiga/ahi/Aros_Developer_AHIDrivers - Wikibooks, open books for an open world_files/wikimedia-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/doc/amiga/ahi/Aros_Developer_AHIDrivers - Wikibooks, open books for an open world_files/wikimedia-button.png -------------------------------------------------------------------------------- /fw/dhrystone_832/debug: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | quartus_stp -t ../../EightThirtyTwo/tcl/832bridge.tcl 2>/dev/null >/dev/null & 3 | while ! netstat -tna | grep 'LISTEN\>' | grep -q ':33581\>'; do 4 | sleep 1 5 | done 6 | ../../EightThirtyTwo/832ocd/832ocd -eb -m 832OSDAB.map 7 | kill $! 8 | -------------------------------------------------------------------------------- /debug: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | quartus_stp -t EightThirtyTwo/tcl/832bridge.tcl 2>/dev/null >/dev/null & 3 | while ! netstat -tna | grep 'LISTEN\>' | grep -q ':33581\>'; do 4 | sleep 1 5 | done 6 | EightThirtyTwo/832ocd/832ocd -eb -u fw/ctrl_832/832OSDAD.bin -m fw/ctrl_832/832OSDAD.map 7 | kill $! 8 | -------------------------------------------------------------------------------- /doc/amiga/ahi/Aros_Developer_AHIDrivers - Wikibooks, open books for an open world_files/poweredby_mediawiki_88x31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robinsonb5/MinimigAGA_TC64/HEAD/doc/amiga/ahi/Aros_Developer_AHIDrivers - Wikibooks, open books for an open world_files/poweredby_mediawiki_88x31.png -------------------------------------------------------------------------------- /debugboot: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | quartus_stp -t EightThirtyTwo/tcl/832bridge.tcl 2>/dev/null >/dev/null & 3 | while ! netstat -tna | grep 'LISTEN\>' | grep -q ':33581\>'; do 4 | sleep 1 5 | done 6 | EightThirtyTwo/832ocd/832ocd -eb -u fw/ctrl_boot_832/OSDBoot_832.bin -m fw/ctrl_boot_832/OSDBoot_832.map 7 | kill $! 8 | -------------------------------------------------------------------------------- /doc/amiga/ahi/Aros_Developer_AHIDrivers - Wikibooks, open books for an open world_files/index(9).php: -------------------------------------------------------------------------------- 1 | // Force short review box to be on its own line. 2 | 3 | $(document).ready( function($) { 4 | $('.flaggedrevs_short').wrap('
'); 5 | }); -------------------------------------------------------------------------------- /fw/ctrl_832/small_printf.h: -------------------------------------------------------------------------------- 1 | #ifndef SMALL_PRINTF_H 2 | #define SMALL_PRINTF_H 3 | 4 | #ifdef DISABLE_PRINTF 5 | #define small_printf(x,...) 6 | #define printf(x,...) 7 | #define puts(x) 8 | #else 9 | int small_printf(const char *fmt, ...); 10 | #define printf small_printf 11 | #endif 12 | 13 | #endif 14 | 15 | -------------------------------------------------------------------------------- /amiga_sw/WavPlay/Build68k: -------------------------------------------------------------------------------- 1 | stack 50000 2 | Echo "Building project - this may take a while!" 3 | Echo " " 4 | CompList >t:BScr vc +68000 -+ -c %s -o 68kobj/%s%s 5 | execute t:BScr 6 | Echo " " 7 | Echo "Linking..." 8 | vc +68000 -o WavPlay 68kobj/#?.o 9 | delete >nil: t:BScr 10 | Echo " " 11 | Echo "All done." 12 | 13 | -------------------------------------------------------------------------------- /amiga_sw/WheelDriver/Build68k: -------------------------------------------------------------------------------- 1 | stack 50000 2 | Echo "Building project - this may take a while!" 3 | Echo " " 4 | CompList >t:BScr vc +68000 -+ -c %s -o 68kobj/%s%s 5 | execute t:BScr 6 | Echo " " 7 | Echo "Linking..." 8 | vc +68000 -o WheelDriver 68kobj/#?.o 9 | delete >nil: t:BScr 10 | Echo " " 11 | Echo "All done." 12 | 13 | -------------------------------------------------------------------------------- /rtl/mist/amiga_clk_altera.qip: -------------------------------------------------------------------------------- 1 | set_global_assignment -name IP_TOOL_NAME "ALTPLL" 2 | set_global_assignment -name IP_TOOL_VERSION "13.1" 3 | set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) "amiga_clk_altera.v"] 4 | set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "amiga_clk_altera.ppf"] 5 | -------------------------------------------------------------------------------- /amiga_sw/WavPlay/wav.h: -------------------------------------------------------------------------------- 1 | #ifndef AUDIOTRACK_H 2 | #define AUDIOTRACK_H 3 | 4 | struct Wav 5 | { 6 | BPTR file; 7 | int length; 8 | }; 9 | 10 | 11 | int wav_read(struct Wav *wav,char *buf,int length); 12 | struct Wav *wav_open(const char *filename); 13 | void wav_close(struct Wav *wav); 14 | 15 | 16 | #endif 17 | 18 | -------------------------------------------------------------------------------- /rtl/de0_nano/amiga_clk_altera.qip: -------------------------------------------------------------------------------- 1 | set_global_assignment -name IP_TOOL_NAME "ALTPLL" 2 | set_global_assignment -name IP_TOOL_VERSION "13.0" 3 | set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) "amiga_clk_altera.v"] 4 | set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "amiga_clk_altera.ppf"] 5 | -------------------------------------------------------------------------------- /amiga_sw/WavPlay/_Server.s: -------------------------------------------------------------------------------- 1 | 2 | XDEF _Audio_ServerStub 3 | 4 | XREF _Audio_Server 5 | 6 | _Audio_ServerStub 7 | movem.l d2-d7/a2-a4,-(a7) 8 | move.l a1,-(a7) 9 | jsr _Audio_Server 10 | lea (4,a7),a7 11 | movem.l (a7)+,d2-d7/a2-a4 12 | move.l #0,d0 13 | rts 14 | 15 | 16 | -------------------------------------------------------------------------------- /fw/ctrl_832/akiko.h: -------------------------------------------------------------------------------- 1 | #ifndef AKIKO_H 2 | #define AKIKO_H 3 | 4 | 5 | #define AKIKOBASE 0x0fffff80 6 | #define HW_AKIKO(x) *(volatile unsigned short *)(AKIKOBASE+x) 7 | 8 | #define REG_AKIKO_ADDR 2 9 | #define REG_AKIKO_DATA 6 10 | 11 | #define AKIKO_REQ 0x8000 12 | #define AKIKO_WRITE 0x4000 13 | 14 | void akiko_inthandler(); 15 | 16 | #endif 17 | 18 | -------------------------------------------------------------------------------- /fw/ctrl_boot_832/small_printf.h: -------------------------------------------------------------------------------- 1 | #ifndef SMALL_PRINTF_H 2 | #define SMALL_PRINTF_H 3 | 4 | #ifdef DISABLE_PRINTF 5 | #define small_printf(x,...) 6 | #define printf(x,...) 7 | #define puts(x) 8 | #else 9 | #ifndef __EIGHTTHIRTYTWO__ 10 | int small_printf(const char *fmt, ...); 11 | #define printf small_printf 12 | #endif 13 | #endif 14 | 15 | #endif 16 | 17 | -------------------------------------------------------------------------------- /bench/cpu_cache_sdram/fw/test.S: -------------------------------------------------------------------------------- 1 | ; defines 2 | STACK equ $100 3 | 4 | ;init 5 | init_sp: 6 | dc.l STACK 7 | init_pc: 8 | dc.l START 9 | 10 | ;program 11 | ORG $10 12 | START: 13 | move.l #$200000,A0 14 | move.w #$dead,(A0)+ 15 | move.w #$beef,(A0)+ 16 | move.w #$0123,(A0)+ 17 | move.w #$4567,(A0)+ 18 | 19 | LOOP: 20 | jmp LOOP 21 | 22 | END START 23 | -------------------------------------------------------------------------------- /sim/minimig/nc/run/lib.lst: -------------------------------------------------------------------------------- 1 | ../../../../lib/altera/altera_mf.v 2 | ../../../../lib/altera/lpm_mult.v 3 | 4 | ../../../../lib/io/generic_input.v 5 | ../../../../lib/io/generic_output.v 6 | 7 | ../../../../lib/vga/vga_monitor.v 8 | 9 | ../../../../lib/models/sd_card.v 10 | ../../../../lib/models/mt48lc16m16a2.v 11 | ../../../../lib/models/IS61LV6416L.v 12 | 13 | -------------------------------------------------------------------------------- /sim/minimig_cpu/nc/run/lib.lst: -------------------------------------------------------------------------------- 1 | ../../../../lib/altera/altera_mf.v 2 | ../../../../lib/altera/lpm_mult.v 3 | 4 | ../../../../lib/io/generic_input.v 5 | ../../../../lib/io/generic_output.v 6 | 7 | ../../../../lib/vga/vga_monitor.v 8 | 9 | ../../../../lib/models/sd_card.v 10 | ../../../../lib/models/mt48lc16m16a2.v 11 | ../../../../lib/models/IS61LV6416L.v 12 | 13 | -------------------------------------------------------------------------------- /fw/ctrl_832/minimig_cfg.h: -------------------------------------------------------------------------------- 1 | // minimig_cfg.h 2 | 3 | 4 | #ifndef __MINIMIG_CFG_H__ 5 | #define __MINIMIG_CFG_H__ 6 | 7 | 8 | //// type definitions //// 9 | typedef struct { 10 | uint8_t kick1x_memory_detection_patch; 11 | } minimig_cfg_t; 12 | 13 | 14 | //// global variables //// 15 | extern minimig_cfg_t minimig_cfg; 16 | 17 | 18 | #endif // __MINIMIG_CFG_H__ 19 | -------------------------------------------------------------------------------- /sw/mkdrivesounds/Makefile: -------------------------------------------------------------------------------- 1 | SOUNDS=DiskInsert.raw DiskEject.raw MotorStart.raw MotorLoop.raw MotorStop.raw \ 2 | Step1.raw Step2.raw Step3.raw Step4.raw HDDStep1.raw HDDStep2.raw HDDStep3.raw HDDStep4.raw 3 | 4 | all: drivesnd.bin 5 | 6 | drivesnd.bin: mkdrivesounds 7 | ./mkdrivesounds $(SOUNDS) >$@ 8 | 9 | mkdrivesounds: mkdrivesounds.c 10 | gcc -o $@ $+ 11 | 12 | 13 | -------------------------------------------------------------------------------- /amiga_sw/WheelDriver/_Server.s: -------------------------------------------------------------------------------- 1 | 2 | XDEF _WheelDriver_ServerStub 3 | 4 | XREF _WheelDriver_Server 5 | 6 | _WheelDriver_ServerStub 7 | movem.l d2-d7/a2-a4,-(a7) 8 | move.l a1,-(a7) 9 | jsr _WheelDriver_Server 10 | lea (4,a7),a7 11 | movem.l (a7)+,d2-d7/a2-a4 12 | move.l #0,d0 13 | rts 14 | 15 | 16 | -------------------------------------------------------------------------------- /fw/ctrl_boot_832/uart.c: -------------------------------------------------------------------------------- 1 | #include "uart.h" 2 | 3 | int putchar(int c) 4 | { 5 | // while(!(HW_UART(REG_UART)&(1< 3 | 4 | #include "minimigaudio.h" 5 | 6 | 7 | void Audio_Server(struct AudioContext *ac) 8 | { 9 | short s=AUDIOHW; 10 | AUDIOHW=ac->Active ? AUDIOACTIVE|AUDIOINTACTIVE : 0; 11 | s&=1; 12 | if(ac->ActiveBuffer!=s) 13 | { 14 | ac->ActiveBuffer=s; 15 | Signal(ac->SigTask,ac->Signals); 16 | } 17 | } 18 | 19 | -------------------------------------------------------------------------------- /doc/amiga/ahi/Aros_Developer_AHIDrivers - Wikibooks, open books for an open world_files/index(5).php: -------------------------------------------------------------------------------- 1 | function change_displaytitle() 2 | { 3 | var text = $("#displaytitle").attr('title'), what; 4 | 5 | if ( text ) { 6 | what = $("#ca-nstab-" + ( mw.config.get('wgCanonicalNamespace').toLowerCase() || 'main' ) ); 7 | what.find('a').text(text); 8 | } 9 | } 10 | 11 | $(document).ready(change_displaytitle); -------------------------------------------------------------------------------- /rtl/chameleonv1/chameleonv1.qip: -------------------------------------------------------------------------------- 1 | set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) chameleon_buttons.vhd] 2 | set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) chameleon_io.vhd] 3 | set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) chameleon_toplevel.vhd] 4 | set_global_assignment -name QIP_FILE [file join $::quartus(qip_path) ../chameleon/chameleon.qip] 5 | 6 | -------------------------------------------------------------------------------- /fw/ctrl_boot_832/uart.h: -------------------------------------------------------------------------------- 1 | #ifndef UART_H 2 | #define UART_H 3 | 4 | /* Hardware registers for a supporting UART to the ZPUFlex project. */ 5 | 6 | #define UARTBASE 0xfffffff0 7 | #define HW_UART(x) *(volatile unsigned char *)(UARTBASE+x) 8 | 9 | #define REG_UART 0x03 10 | #define REG_UART_RXINT 9 11 | #define REG_UART_TXREADY 8 12 | 13 | int putchar(int c); 14 | int puts(const char *msg); 15 | 16 | #endif 17 | 18 | -------------------------------------------------------------------------------- /rtl/chameleonv1/ChamelonV1CPLD.qud: -------------------------------------------------------------------------------- 1 | /* Quartus II 64-Bit Version 13.0.1 Build 232 06/12/2013 Service Pack 1 SJ Web Edition */ 2 | JedecChain; 3 | FileRevision(JESD32A); 4 | DefaultMfr(6E); 5 | 6 | P ActionCode(Ign) 7 | Device PartName(CHAMELEONV1_CPLD) InstructionReg(8) MfrSpec(n_idcodes(1)JTAGId(59604093)mask(ffffffff)); 8 | 9 | ChainEnd; 10 | 11 | AlteraBegin; 12 | ChainType(User_part_list); 13 | AlteraEnd; 14 | -------------------------------------------------------------------------------- /rtl/chameleonv1/amiga_clk_altera.qip: -------------------------------------------------------------------------------- 1 | set_global_assignment -name IP_TOOL_NAME "ALTPLL" 2 | set_global_assignment -name IP_TOOL_VERSION "13.0" 3 | set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) "amiga_clk_altera.v"] 4 | set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "amiga_clk_altera_bb.v"] 5 | set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "amiga_clk_altera.ppf"] 6 | -------------------------------------------------------------------------------- /fw/testbed/bincue.h: -------------------------------------------------------------------------------- 1 | #ifndef BINCUE_H 2 | #define BINCUE_H 3 | 4 | enum cdimagetype {CD_INVALID,CD_BINARY,CD_WAVE}; 5 | 6 | struct cdimage 7 | { 8 | int tracks; 9 | int audiotracks; 10 | int currenttrack; 11 | int offset; 12 | int length; /* 0 for standalone WAV files. */ 13 | enum cdimagetype type; 14 | char filename[261]; 15 | }; 16 | 17 | int cd_gettrack(struct cdimage *cd, char *in,int track); 18 | 19 | #endif 20 | 21 | -------------------------------------------------------------------------------- /rtl/minimig/agnus_refresh.v: -------------------------------------------------------------------------------- 1 | // refresh dma channel (for compatibility) 2 | 3 | 4 | module agnus_refresh 5 | ( 6 | input [8:0] hpos, 7 | output reg dma 8 | ); 9 | 10 | //dma request 11 | always @(hpos) 12 | case (hpos) 13 | 9'b0000_0100_1 : dma = 1'b1; 14 | 9'b0000_0110_1 : dma = 1'b1; 15 | 9'b0000_1000_1 : dma = 1'b1; 16 | 9'b0000_1010_1 : dma = 1'b1; 17 | default : dma = 1'b0; 18 | endcase 19 | 20 | 21 | endmodule 22 | 23 | -------------------------------------------------------------------------------- /sw/misc/makefont.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import sys,os 4 | 5 | 6 | fin = "font.in" 7 | fon = "font_hor.c" 8 | 9 | 10 | with open(fon, 'w') as fo: 11 | fo.write( "/* font_hor.c */\n\n") 12 | fo.write( "const char font_hor [][] = {\n") 13 | with open(fin, 'r') as fi: 14 | for line in fi.readlines(): 15 | fo.write( " {%s},\n" % line.strip().replace("$", "0x").replace(",", ", ")) 16 | fo.write( "};\n\n") 17 | 18 | -------------------------------------------------------------------------------- /fw/ctrl_boot_832/checksum.c: -------------------------------------------------------------------------------- 1 | 2 | // Endian-neutral checksum of a memory region... 3 | 4 | unsigned int checksum(const unsigned char *a,int l) 5 | { 6 | unsigned int sum=0; 7 | unsigned int t; 8 | while(l>0) 9 | { 10 | t=*a++; 11 | 12 | t<<=8; 13 | --l; t|=l>0 ? *a++ : 0; 14 | 15 | t<<=8; 16 | --l; t|=l>0 ? *a++ : 0; 17 | 18 | t<<=8; 19 | --l; t|=l>0 ? *a++ : 0; 20 | 21 | sum+=t; 22 | --l; 23 | } 24 | return(sum); 25 | } 26 | 27 | -------------------------------------------------------------------------------- /misc/51-usbblaster.rules: -------------------------------------------------------------------------------- 1 | # USB-Blaster 2 | BUS=="usb", SYSFS{idVendor}=="09fb", SYSFS{idProduct}=="6001", MODE="0666" 3 | BUS=="usb", SYSFS{idVendor}=="09fb", SYSFS{idProduct}=="6002", MODE="0666" 4 | BUS=="usb", SYSFS{idVendor}=="09fb", SYSFS{idProduct}=="6003", MODE="0666" 5 | 6 | # USB-Blaster II 7 | 8 | BUS=="usb", SYSFS{idVendor}=="09fb", SYSFS{idProduct}=="6010", MODE="0666" 9 | BUS=="usb", SYSFS{idVendor}=="09fb", SYSFS{idProduct}=="6810", MODE="0666" 10 | 11 | -------------------------------------------------------------------------------- /rtl/de10-lite/amiga_clk_altera.qip: -------------------------------------------------------------------------------- 1 | set_global_assignment -name IP_TOOL_NAME "ALTPLL" 2 | set_global_assignment -name IP_TOOL_VERSION "18.1" 3 | set_global_assignment -name IP_GENERATED_DEVICE_FAMILY "{MAX 10}" 4 | set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) "amiga_clk_altera.v"] 5 | set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "amiga_clk_altera_bb.v"] 6 | set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "amiga_clk_altera.ppf"] 7 | -------------------------------------------------------------------------------- /fw/testbed/setstack.asm: -------------------------------------------------------------------------------- 1 | .section .text.setstack 2 | .global _setstack 3 | 4 | // Seed function - call this from main to have the appropriate code included. 5 | _setstack: 6 | mr r7 7 | 8 | __setstack: 9 | mr r0 10 | .liabs _STACKTOP 11 | exg r6 12 | stdec r6 13 | mt r0 14 | mr r7 15 | 16 | __restorestack: 17 | mr r0 18 | ldinc r6 19 | mr r6 20 | mt r0 21 | mr r7 22 | 23 | .ctor 200.setstack 24 | .ref __setstack 25 | 26 | .dtor 200.restorestack 27 | .ref __restorestack 28 | 29 | -------------------------------------------------------------------------------- /rtl/chameleonv2/amiga_clk_altera.qip: -------------------------------------------------------------------------------- 1 | set_global_assignment -name IP_TOOL_NAME "ALTPLL" 2 | set_global_assignment -name IP_TOOL_VERSION "18.1" 3 | set_global_assignment -name IP_GENERATED_DEVICE_FAMILY "{Cyclone 10 LP}" 4 | set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "amiga_clk_altera.vhd"] 5 | set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "amiga_clk_altera.cmp"] 6 | set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "amiga_clk_altera.ppf"] 7 | -------------------------------------------------------------------------------- /fw/dhrystone_832/setstack.asm: -------------------------------------------------------------------------------- 1 | .section .text.setstack 2 | .global _setstack 3 | 4 | // Seed function - call this from main to have the appropriate code included. 5 | _setstack: 6 | mr r7 7 | 8 | __setstack: 9 | mr r0 10 | .liabs _STACKTOP 11 | exg r6 12 | stdec r6 13 | mt r0 14 | mr r7 15 | 16 | __restorestack: 17 | mr r0 18 | ldinc r6 19 | mr r6 20 | mt r0 21 | mr r7 22 | 23 | .ctor 200.setstack 24 | .ref __setstack 25 | 26 | .dtor 200.restorestack 27 | .ref __restorestack 28 | 29 | -------------------------------------------------------------------------------- /fw/ctrl_832/hexdump.c: -------------------------------------------------------------------------------- 1 | 2 | char putchar(char c); 3 | 4 | void hexdump(unsigned char *p,unsigned int l) 5 | { 6 | unsigned int *p2=(unsigned int *)p; 7 | l=(l/4); 8 | while(l--) 9 | { 10 | int i; 11 | unsigned int t=*p2++; 12 | for(i=0;i<8;++i) 13 | { 14 | unsigned int t2=(t>>28); 15 | t2+='0'; 16 | if(t2>'9') 17 | t2+='@'-'9'; 18 | putchar(t2); 19 | t<<=4; 20 | } 21 | putchar(' '); 22 | if((l&3)==0) 23 | putchar('\n'); 24 | } 25 | putchar('\n'); 26 | } 27 | 28 | 29 | -------------------------------------------------------------------------------- /amiga_sw/rtg/Makefile: -------------------------------------------------------------------------------- 1 | AS=vasmm68k_mot 2 | INC_ASM=~/NDK_3.9/Include/include_i/ 3 | VASM_FLAGS := -quiet -nowarn=1012 -m68020 -Fhunkexe -kick1hunks -nosym -no-opt 4 | 5 | TARGET := minimig.card 6 | SOURCE := minimig.card.asm 7 | INCLUDES := P96BoardInfo.i P96CardStruct.i P96ModeInfo.i 8 | 9 | all: $(TARGET) 10 | @echo "" 11 | 12 | $(TARGET): Makefile 13 | $(TARGET): $(INCLUDES) 14 | $(TARGET): $(SOURCE) 15 | $(AS) $< -o $@ $(VASM_FLAGS) -I $(INC_ASM) 16 | 17 | clean: 18 | rm -rf $(TARGET) $(LISTFILE) 19 | 20 | -------------------------------------------------------------------------------- /fw/ctrl_832/osd_m68k-elf.ld: -------------------------------------------------------------------------------- 1 | SECTIONS 2 | { 3 | . = 0x2000; 4 | .code : { 5 | m68k-elf-build/startup_m68k-elf.o (.text) 6 | *(.text) 7 | *(.rodata) 8 | *(.rodata.*) 9 | *(.data) 10 | } 11 | .extra : { 12 | __s_bss = . ; 13 | *(.bss) 14 | __e_bss = . ; 15 | } 16 | .eh_frame : { 17 | *(.eh_frame) 18 | } 19 | heap_low = .; /* for _sbrk */ 20 | . = . + 0x1000; /* 64kB of heap memory */ 21 | heap_top = .; /* for _sbrk */ 22 | 23 | stack_top = 0x7fffc; /* for startup.s */ 24 | } 25 | -------------------------------------------------------------------------------- /fw/ctrl_boot_832/swap.c: -------------------------------------------------------------------------------- 1 | unsigned int SwapBBBB(unsigned int i) 2 | { 3 | unsigned int result=(i>>24)&0xff; 4 | result|=(i>>8)&0xff00; 5 | result|=(i<<8)&0xff0000; 6 | result|=(i<<24)&0xff000000; 7 | return(result); 8 | } 9 | 10 | unsigned int SwapBB(unsigned int i) 11 | { 12 | unsigned int result=(i>>8)&0xff; 13 | result|=(i<<8)&0xff00; 14 | return(result); 15 | } 16 | 17 | unsigned long SwapWW(unsigned long i) 18 | { 19 | unsigned int result=(i>>16)&0xffff; 20 | result|=(i<<16)&0xffff0000; 21 | return(result); 22 | } 23 | -------------------------------------------------------------------------------- /fw/testbed/timer.h: -------------------------------------------------------------------------------- 1 | #ifndef TIMER_H 2 | #define TIMER_H 3 | 4 | /* Hardware registers for a timer */ 5 | 6 | #define TIMERBASE 0x0FFFFFD2 7 | #define HW_TIMER(x) *(volatile unsigned short *)(TIMERBASE+x) 8 | 9 | #define REG_TIMER_ENABLE 0 10 | #define REG_TIMER_INDEX 4 11 | #define REG_TIMER_COUNTER 8 12 | 13 | /* Legacy millisecond counter, needed for the Dhrystone ZPU demo. 14 | FIXME - replace this with a TIMER_COUNTER read at some point */ 15 | 16 | #define REG_MILLISECONDS (0x0FFFFFD2-TIMERBASE) 17 | 18 | #endif 19 | 20 | -------------------------------------------------------------------------------- /sw/68kedit/File_id.diz: -------------------------------------------------------------------------------- 1 | ---[ 68K Editor & Front End Assembler + Simulator ]--- 2 | 3 | 68000 Editor, Assembler and Simulator lets you 4 | write and test assembly language programs for the 5 | Motorola 68000 processor. The program is designed 6 | to lets you edit, assemble and simulate 68000 programs 7 | in a Windows environment. 8 | 9 | 68000 Editor, Assembler and Simulator Home Page : 10 | http://welcome.to/68000 11 | 12 | ------------------------------------------------------- 13 | -------------------------------------------------------------------------------- /fw/dhrystone_832/timer.h: -------------------------------------------------------------------------------- 1 | #ifndef TIMER_H 2 | #define TIMER_H 3 | 4 | /* Hardware registers for a timer */ 5 | 6 | #define TIMERBASE 0x0FFFFFD2 7 | #define HW_TIMER(x) *(volatile unsigned short *)(TIMERBASE+x) 8 | 9 | #define REG_TIMER_ENABLE 0 10 | #define REG_TIMER_INDEX 4 11 | #define REG_TIMER_COUNTER 8 12 | 13 | /* Legacy millisecond counter, needed for the Dhrystone ZPU demo. 14 | FIXME - replace this with a TIMER_COUNTER read at some point */ 15 | 16 | #define REG_MILLISECONDS (0x0FFFFFD2-TIMERBASE) 17 | 18 | #endif 19 | 20 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # ignore backup files 2 | *~ 3 | 4 | # ignore vi swapfiles 5 | .*.swp 6 | 7 | # ignore compiled python 8 | *pyc 9 | 10 | # ignore some backup files 11 | *bak 12 | 13 | # ignore some c files 14 | *\.o 15 | *\.d 16 | 17 | # ignore dropbox files 18 | .dropbox.attr 19 | 20 | # ignore directories 21 | bin/ 22 | rel/ 23 | fpga/*/out/ 24 | fpga/*/db/ 25 | fpga/*/incremental_db/ 26 | greybox_tmp/ 27 | 28 | # build script shouldn't be in repo 29 | build.sh 30 | 31 | # ignore generated version file 32 | rtl/minimig/minimig_version.vh 33 | -------------------------------------------------------------------------------- /fw/ctrl_832/akiko.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include "interrupts.h" 4 | 5 | #include "akiko.h" 6 | 7 | void akiko_inthandler() 8 | { 9 | unsigned int aa; 10 | unsigned int ad; 11 | 12 | aa=HW_AKIKO(REG_AKIKO_ADDR); 13 | ad=HW_AKIKO(REG_AKIKO_DATA); 14 | if(aa&AKIKO_REQ) 15 | { 16 | if(aa&AKIKO_WRITE) 17 | printf("Akiko write: %x, %x\n",aa,ad); 18 | else 19 | printf("Akiko read: %x\n",aa); 20 | HW_AKIKO(REG_AKIKO_DATA)=0; 21 | } 22 | 23 | } 24 | 25 | __constructor(101.akiko) void akikoconstructor() 26 | { 27 | } 28 | 29 | -------------------------------------------------------------------------------- /fw/ctrl_boot_832/hexdump.c: -------------------------------------------------------------------------------- 1 | 2 | char putchar(char c); 3 | 4 | void hexdump(unsigned char *p,unsigned int l) 5 | { 6 | unsigned int *p2=(unsigned int *)p; 7 | int cursor=0; 8 | l=(l/4); 9 | while(l--) 10 | { 11 | int i; 12 | unsigned int t=*p2++; 13 | for(i=0;i<8;++i) 14 | { 15 | unsigned int t2=(t>>28); 16 | t2+='0'; 17 | if(t2>'9') 18 | t2+='@'-'9'; 19 | putchar(t2); 20 | t<<=4; 21 | } 22 | putchar(' '); 23 | if((l&3)==0) 24 | { 25 | putchar('\n'); 26 | } 27 | } 28 | putchar('\n'); 29 | } 30 | 31 | 32 | -------------------------------------------------------------------------------- /sim/cpu_cache_sdram/nc/run/rtl.lst: -------------------------------------------------------------------------------- 1 | ../../../../rtl/clock/amiga_clk.v 2 | 3 | ../../../../rtl/sdram/sdram_ctrl.v 4 | ../../../../rtl/sdram/cpu_cache.v 5 | ../../../../rtl/sdram/tpram_inf_128x32.v 6 | ../../../../rtl/sdram/tpram_inf_be_512x16.v 7 | 8 | ../../../../rtl/sdram/cpu_cache_new.v 9 | ../../../../rtl/sdram/dpram_inf_256x32.v 10 | ../../../../rtl/sdram/dpram_inf_be_1024x16.v 11 | 12 | ../../../../rtl/tg68k/TG68K.vhd 13 | ../../../../rtl/tg68k/TG68K_Pack.vhd 14 | ../../../../rtl/tg68k/TG68KdotC_Kernel.vhd 15 | ../../../../rtl/tg68k/TG68K_ALU.vhd 16 | 17 | -------------------------------------------------------------------------------- /sw/AmigaUtils/Poke.c: -------------------------------------------------------------------------------- 1 | /* 2 | // Poke.c 3 | // 2013, rok.krajnc@gmail.com 4 | // Sets memory location to data 5 | */ 6 | 7 | #include 8 | #include 9 | #include 10 | 11 | int main(int argc, char** argv) 12 | { 13 | unsigned int adr, dat; 14 | 15 | if (argc != 3) { 16 | fprintf(stderr, "Usage: %s address data\n", argv[0]); 17 | exit(EXIT_FAILURE); 18 | } 19 | 20 | adr = strtoul(argv[1], NULL, 0); 21 | dat = strtoul(argv[2], NULL, 0); 22 | 23 | *((unsigned int*)(adr)) = dat; 24 | 25 | exit(EXIT_SUCCESS); 26 | } 27 | 28 | -------------------------------------------------------------------------------- /sw/AmigaUtils/Peek.c: -------------------------------------------------------------------------------- 1 | /* 2 | // peek.c 3 | // 2013, rok.krajnc@gmail.com 4 | // Reads memory location 5 | */ 6 | 7 | #include 8 | #include 9 | #include 10 | 11 | int main(int argc, char** argv) 12 | { 13 | unsigned int adr, dat; 14 | 15 | if (argc != 2) { 16 | fprintf(stderr, "Usage: %s address\n", argv[0]); 17 | exit(EXIT_FAILURE); 18 | } 19 | 20 | adr = strtoul(argv[1], NULL, 0); 21 | dat = *((unsigned int*)(adr)); 22 | 23 | fprintf(stdout, "*(0x%08x) = 0x%08x\n", adr, dat); 24 | 25 | exit(EXIT_SUCCESS); 26 | } 27 | 28 | -------------------------------------------------------------------------------- /fw/ctrl_832/audio.c: -------------------------------------------------------------------------------- 1 | #include "audio.h" 2 | #include "hardware.h" 3 | 4 | 5 | int audio_busy(int buffer) 6 | { 7 | return((AUDIO&1)==buffer); 8 | } 9 | 10 | 11 | void audio_start() 12 | { 13 | AUDIO=AUDIOF_ENA; 14 | } 15 | 16 | 17 | void audio_stop() 18 | { 19 | AUDIO=AUDIOF_CLEAR; 20 | } 21 | 22 | void audio_clear() 23 | { 24 | unsigned char *p=AUDIO_BUFFER; 25 | int i; 26 | AUDIO=AUDIOF_CLEAR; 27 | for(i=0;i 5 | #include 6 | 7 | 8 | int main (int argc, char** argv) 9 | { 10 | int i; 11 | int a0; 12 | int a1; 13 | int step; 14 | int out; 15 | unsigned int n; 16 | 17 | a0 = 4; 18 | a1 = -4; 19 | step = a1 - a0; 20 | n=4; 21 | out = a0<>n); 26 | } 27 | printf("out>>n=%d\n", out>>n); 28 | 29 | exit(EXIT_SUCCESS); 30 | } 31 | 32 | -------------------------------------------------------------------------------- /amiga_sw/rtg/P96CardStruct.i: -------------------------------------------------------------------------------- 1 | ; 2 | ; WWW.FPGAArcade.COM 3 | ; 4 | ; REPLAY Retro Gaming Platform 5 | ; No Emulation No Compromise 6 | ; 7 | ; Replay.card - P96 RTG driver for the REPLAY Amiga core 8 | ; Copyright (C) FPGAArcade community 9 | ; 10 | ; Contributors : Jakub Bednarski, Mike Johnson, Jim Drew, Erik Hemming, Nicolas Hamel 11 | ; 12 | ; This software is licensed under LPGLv2.1 ; see LICENSE file 13 | ; 14 | ; 15 | 16 | CARD_FLAGS = $22 17 | CARD_EXECBASE = $24 18 | CARD_EXPANSIONBASE = $28 19 | CARD_SEGMENTLIST = $2C 20 | CARD_NAME = $30 21 | CARD_INTUITIONBASE = $34 22 | CARD_SIZEOF = $38 23 | 24 | -------------------------------------------------------------------------------- /rtl/chameleonv2/chameleonv2.qip: -------------------------------------------------------------------------------- 1 | set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) chameleon2_io_a.vhd] 2 | set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) chameleon2_io_e.vhd] 3 | set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) chameleon2_io_ps2iec.vhd] 4 | set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) chameleon2_io_shiftreg.vhd] 5 | set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) chameleon2_toplevel.vhd] 6 | set_global_assignment -name QIP_FILE [file join $::quartus(qip_path) ../chameleon/chameleon.qip] 7 | 8 | -------------------------------------------------------------------------------- /rtl/io/i_sync.v: -------------------------------------------------------------------------------- 1 | /* i_sync.v */ 2 | /* input synchronizer */ 3 | 4 | 5 | module i_sync #( 6 | parameter DW = 1, // signal width 7 | parameter RS = 1'b0 // power up state 8 | )( 9 | // system 10 | input wire clk, 11 | // input 12 | input wire [ DW-1:0] i, 13 | // output 14 | output wire [ DW-1:0] o 15 | ); 16 | 17 | 18 | reg [ DW-1:0] sync_0 = {DW{RS}}; 19 | reg [ DW-1:0] sync_1 = {DW{RS}}; 20 | 21 | 22 | always @ (posedge clk) begin 23 | sync_0 <= #1 i; 24 | sync_1 <= #1 sync_0; 25 | end 26 | 27 | 28 | assign o = sync_1; 29 | 30 | 31 | endmodule 32 | 33 | -------------------------------------------------------------------------------- /rtl/host/host.qip: -------------------------------------------------------------------------------- 1 | set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) hostcache.v] 2 | set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) cfide.vhd] 3 | set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) 832_bridge.vhd] 4 | set_global_assignment -name QIP_FILE [file join $::quartus(qip_path) ../../EightThirtyTwo/RTL/eightthirtytwo.qip] 5 | set_global_assignment -name QIP_FILE [file join $::quartus(qip_path) ../../EightThirtyTwo/RTL/debug_bridge_jtag.qip] 6 | set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) ../../fw/ctrl_boot_832/OSDBoot_832_ROM.vhd] 7 | 8 | -------------------------------------------------------------------------------- /doc/amiga/ahi/Aros_Developer_AHIDrivers - Wikibooks, open books for an open world_files/index(2).php: -------------------------------------------------------------------------------- 1 | (function(mw, $) { 2 | window.add_toolbox_link = function(action, name, id) { 3 | var $tools = $('#p-tb ul'); 4 | if ( !$tools.length ) return; 5 | if (typeof action === "string") { 6 | $tools.append('
  • ' + name + '
  • '); 7 | } else if (typeof action === "function") { 8 | $('
  • ' + name + '
  • ').appendTo($tools).click(action); 9 | } 10 | }; 11 | mw.hook('wikibooks.panels.tools').fire(mw, $); 12 | })(mediaWiki, jQuery); -------------------------------------------------------------------------------- /fw/ctrl_832/fpga.h: -------------------------------------------------------------------------------- 1 | #ifndef FPGA_H 2 | #define FPGA_H 3 | 4 | #include "rafile.h" 5 | 6 | void ShiftFpga(unsigned char data); 7 | unsigned char ConfigureFpga(void); 8 | void SendFileV2(RAFile* file, unsigned char* key, int keysize, int address, int size); 9 | void SendFileEncrypted(RAFile *file,unsigned char *key,int keysize); 10 | char BootPrint(const char *text); 11 | char PrepareBootUpload(unsigned char base, unsigned char size); 12 | void BootExit(void); 13 | void ClearMemory(unsigned long base, unsigned long size); 14 | unsigned char GetFPGAStatus(void); 15 | void fpga_init(); 16 | 17 | extern int checksum_pre; 18 | 19 | #endif 20 | 21 | -------------------------------------------------------------------------------- /doc/amiga/ahi/Aros_Developer_AHIDrivers - Wikibooks, open books for an open world_files/index(7).php: -------------------------------------------------------------------------------- 1 | jQuery( function() { 2 | var pagename = mw.config.get( 'wgPageName' ); 3 | // Main Page 4 | if ( pagename == 'Main_Page' || pagename == 'Talk:Main_Page' ) { 5 | $('#ca-nstab-main a').text( 'Main Page' ); 6 | // Wikijunior 7 | } else if ( pagename == 'Wikijunior' || pagename == 'Talk:Wikijunior' ) { 8 | $('#ca-nstab-main a').text( 'Wikijunior' ); 9 | // Cookbook:Table of Contents 10 | } else if ( pagename == 'Cookbook:Table_of_Contents' || pagename == 'Cookbook_talk:Table_of_Contents' ) { 11 | $('#ca-nstab-cookbook a').text( 'Cookbook' ); 12 | } 13 | }); -------------------------------------------------------------------------------- /fw/testbed/uart.c: -------------------------------------------------------------------------------- 1 | #include "hardware.h" 2 | 3 | int putchar(int c) 4 | { 5 | RS232(c); 6 | return(c); 7 | } 8 | 9 | 10 | int puts(const char *msg) 11 | { 12 | int c; 13 | int result=0; 14 | // Because we haven't implemented loadb from ROM yet, we can't use *++. 15 | // Therefore we read the source data in 32-bit chunks and shift-and-split accordingly. 16 | int *s2=(int*)msg; 17 | 18 | do 19 | { 20 | int i; 21 | int cs=*s2++; 22 | for(i=0;i<4;++i) 23 | { 24 | c=(cs>>24)&0xff; 25 | cs<<=8; 26 | if(c==0) 27 | return(result); 28 | putchar(c); 29 | ++result; 30 | } 31 | } 32 | while(c); 33 | return(result); 34 | } 35 | 36 | -------------------------------------------------------------------------------- /fw/ctrl_832/uart.c: -------------------------------------------------------------------------------- 1 | #include "hardware.h" 2 | 3 | int putchar(int c) 4 | { 5 | RS232(c); 6 | return(c); 7 | } 8 | 9 | 10 | int puts(const char *msg) 11 | { 12 | int c; 13 | int result=0; 14 | // Because we haven't implemented loadb from ROM yet, we can't use *++. 15 | // Therefore we read the source data in 32-bit chunks and shift-and-split accordingly. 16 | int *s2=(int*)msg; 17 | 18 | do 19 | { 20 | int i; 21 | int cs=*s2++; 22 | for(i=0;i<4;++i) 23 | { 24 | c=(cs>>24)&0xff; 25 | cs<<=8; 26 | if(c==0) 27 | return(result); 28 | putchar(c); 29 | ++result; 30 | } 31 | } 32 | while(c); 33 | return(result); 34 | } 35 | 36 | -------------------------------------------------------------------------------- /fw/dhrystone_832/uart.c: -------------------------------------------------------------------------------- 1 | #include "hardware.h" 2 | 3 | int putchar(int c) 4 | { 5 | RS232(c); 6 | return(c); 7 | } 8 | 9 | 10 | int puts(const char *msg) 11 | { 12 | int c; 13 | int result=0; 14 | // Because we haven't implemented loadb from ROM yet, we can't use *++. 15 | // Therefore we read the source data in 32-bit chunks and shift-and-split accordingly. 16 | int *s2=(int*)msg; 17 | 18 | do 19 | { 20 | int i; 21 | int cs=*s2++; 22 | for(i=0;i<4;++i) 23 | { 24 | c=(cs>>24)&0xff; 25 | cs<<=8; 26 | if(c==0) 27 | return(result); 28 | putchar(c); 29 | ++result; 30 | } 31 | } 32 | while(c); 33 | return(result); 34 | } 35 | 36 | -------------------------------------------------------------------------------- /doc/amiga/ahi/Aros_Developer_AHIDrivers - Wikibooks, open books for an open world_files/index(10).php: -------------------------------------------------------------------------------- 1 | /** 2 | * Hide prefix in category 3 | * 4 | * @source: http://www.mediawiki.org/wiki/Snippets/Hide_prefix_in_category 5 | * @rev: 2 6 | * @author: Krinkle 7 | */ 8 | 9 | mw.hook('wikipage.content').add(function($content) { 10 | var prefix = $content.find( '#mw-cat-hideprefix' ).text(); 11 | if ( $.trim( prefix ) === '' ) { 12 | prefix = mw.config.get( 'wgTitle' ) + '/'; 13 | } 14 | $content.find( '#mw-pages' ).add( '#mw-subcategories' ).find( 'a' ).text( function( i, val ) { 15 | return val.replace( new RegExp( '^' + $.escapeRE( prefix ) ), '' ); 16 | }); 17 | }); -------------------------------------------------------------------------------- /rtl/de10-lite/amiga_clk_altera.ppf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /rtl/de0_nano/amiga_clk_altera.ppf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /rtl/chameleonv1/amiga_clk_altera.ppf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /rtl/chameleonv2/amiga_clk_altera.ppf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /fw/ctrl_832/interrupts.c: -------------------------------------------------------------------------------- 1 | #include "uart.h" 2 | #include "interrupts.h" 3 | 4 | static void dummy_handler() 5 | { 6 | GetInterrupts(); 7 | } 8 | 9 | 10 | void SetIntHandler(void(*handler)()) 11 | { 12 | HW_INTERRUPT(REG_INTERRUPT_CTRL)=0; 13 | *(void **)13=(void *)handler; 14 | } 15 | 16 | __constructor(100.interrupts) void intconstructor() 17 | { 18 | SetIntHandler(dummy_handler); 19 | } 20 | 21 | 22 | volatile int GetInterrupts() 23 | { 24 | return(HW_INTERRUPT(REG_INTERRUPT_CTRL)); 25 | } 26 | 27 | 28 | void EnableInterrupts() 29 | { 30 | HW_INTERRUPT(REG_INTERRUPT_CTRL)=1; 31 | } 32 | 33 | 34 | void DisableInterrupts() 35 | { 36 | HW_INTERRUPT(REG_INTERRUPT_CTRL)=0; 37 | } 38 | 39 | -------------------------------------------------------------------------------- /fw/ctrl_832/errors.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include "errors.h" 4 | 5 | void ClearError(int category) 6 | { 7 | int i,a,b; 8 | ErrorFatal=0; 9 | if(category!=ERROR_ALL) 10 | { 11 | ErrorMask&=~(1< 2 | 3 | #include "errors.h" 4 | 5 | void ClearError(int category) 6 | { 7 | int i,a,b; 8 | ErrorFatal=0; 9 | if(category!=ERROR_ALL) 10 | { 11 | ErrorMask&=~(1<>24)&0xff; 16 | result|=(i>>8)&0xff00; 17 | result|=(i<<8)&0xff0000; 18 | result|=(i<<24)&0xff000000; 19 | return(result); 20 | #endif 21 | } 22 | 23 | unsigned int SwapBB(unsigned int i) 24 | { 25 | int result=(i>>8)&0xff; 26 | result|=(i<<8)&0xff00; 27 | return(result); 28 | } 29 | 30 | unsigned long SwapWW(unsigned long i) 31 | { 32 | int result=(i>>16)&0xffff; 33 | result|=(i<<16)&0xffff0000; 34 | return(result); 35 | } 36 | -------------------------------------------------------------------------------- /fw/testbed/swap.c: -------------------------------------------------------------------------------- 1 | unsigned long SwapBBBB(unsigned long i) 2 | { 3 | #ifdef _M68K 4 | asm volatile 5 | ( 6 | "rol.w #8,%0\n\t" 7 | "swap %0\n\t" 8 | "rol.w #8,%0\n\t" 9 | : "=r" (i) /* out */ 10 | : "r" (i) 11 | : /* no clobber */ 12 | ); 13 | return i; 14 | #else 15 | int result=(i>>24)&0xff; 16 | result|=(i>>8)&0xff00; 17 | result|=(i<<8)&0xff0000; 18 | result|=(i<<24)&0xff000000; 19 | return(result); 20 | #endif 21 | } 22 | 23 | unsigned int SwapBB(unsigned int i) 24 | { 25 | int result=(i>>8)&0xff; 26 | result|=(i<<8)&0xff00; 27 | return(result); 28 | } 29 | 30 | unsigned long SwapWW(unsigned long i) 31 | { 32 | int result=(i>>16)&0xffff; 33 | result|=(i<<16)&0xffff0000; 34 | return(result); 35 | } 36 | -------------------------------------------------------------------------------- /amiga_sw/WheelDriver/newmouse.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Include file for the NewMouse standard way of handling wheeled mice. 3 | * 4 | * Copyright (c) 1999 by Alessandro Zummo . All Rights Reserved. 5 | */ 6 | 7 | #ifndef NEWMOUSE_H 8 | #define NEWMOUSE_H 9 | 10 | #define NEWMOUSE_VERSION 1 11 | 12 | #define IECLASS_NEWMOUSE (0x16) /* IECLASS_MAX + 1 as of V40 */ 13 | 14 | /* These are issued both under IECLASS_NEWMOUSE and IECLASS_RAWKEY */ 15 | /* by the NewMouse driver */ 16 | 17 | #define NM_WHEEL_UP (0x7A) 18 | #define NM_WHEEL_DOWN (0x7B) 19 | #define NM_WHEEL_LEFT (0x7C) 20 | #define NM_WHEEL_RIGHT (0x7D) 21 | 22 | #define NM_BUTTON_FOURTH (0x7E) 23 | 24 | 25 | #endif /* NEWMOUSE_H */ 26 | 27 | -------------------------------------------------------------------------------- /fw/ctrl_boot_832/main.c: -------------------------------------------------------------------------------- 1 | 2 | #include "fpga.h" 3 | 4 | #if 0 5 | int puts(const char *msg) 6 | { 7 | int c; 8 | // int result=0; 9 | // Because we haven't implemented loadb from ROM yet, we can't use *++. 10 | // Therefore we read the source data in 32-bit chunks and shift-and-split accordingly. 11 | int *s2=(int*)msg; 12 | 13 | do 14 | { 15 | int i; 16 | int cs=*s2++; 17 | for(i=0;i<4;++i) 18 | { 19 | c=(cs>>24)&0xff; 20 | cs<<=8; 21 | if(c==0) 22 | return;//(result); 23 | putchar(c); 24 | // ++result; 25 | } 26 | } 27 | while(c); 28 | // return(result); 29 | } 30 | #endif 31 | 32 | int main(int argc,char**argv) 33 | { 34 | puts("Hello, world!\n"); 35 | while(1) 36 | ; 37 | } 38 | 39 | 40 | -------------------------------------------------------------------------------- /fw/testbed/interrupts.c: -------------------------------------------------------------------------------- 1 | #include "uart.h" 2 | #include "interrupts.h" 3 | 4 | static void dummy_handler() 5 | { 6 | GetInterrupts(); 7 | } 8 | 9 | 10 | void SetIntHandler(void(*handler)()) 11 | { 12 | HW_INTERRUPT(REG_INTERRUPT_CTRL)=0; 13 | *(void **)13=(void *)handler; 14 | puts("Set handler\n"); 15 | } 16 | 17 | __constructor(100.interrupts) void intconstructor() 18 | { 19 | puts("In interrupt constructor\n"); 20 | SetIntHandler(dummy_handler); 21 | } 22 | 23 | 24 | volatile int GetInterrupts() 25 | { 26 | return(HW_INTERRUPT(REG_INTERRUPT_CTRL)); 27 | } 28 | 29 | 30 | void EnableInterrupts() 31 | { 32 | HW_INTERRUPT(REG_INTERRUPT_CTRL)=1; 33 | } 34 | 35 | 36 | void DisableInterrupts() 37 | { 38 | HW_INTERRUPT(REG_INTERRUPT_CTRL)=0; 39 | } 40 | 41 | -------------------------------------------------------------------------------- /fpga/de0_nano/Makefile: -------------------------------------------------------------------------------- 1 | # MINIMIG-DE0_NANO 2 | # fpga makefile 3 | # 2012, rok.krajnc@gmail.com 4 | # 2015, Stefan Kristiansson 5 | 6 | 7 | ### programs ### 8 | MAP=quartus_map 9 | FIT=quartus_fit 10 | ASM=quartus_asm 11 | 12 | 13 | ### project ### 14 | PROJECT=minimig_de0_nano 15 | 16 | ### build rules ### 17 | 18 | # all 19 | all: 20 | @echo Making FPGA programming files ... 21 | @make map 22 | @make fit 23 | @make asm 24 | 25 | map: 26 | @echo Running mapper ... 27 | @$(MAP) $(PROJECT) 28 | 29 | fit: 30 | @echo Running fitter ... 31 | @$(FIT) $(PROJECT) 32 | 33 | asm: 34 | @echo Running assembler ... 35 | @$(ASM) $(PROJECT) 36 | 37 | 38 | # clean 39 | clean: 40 | @echo clean 41 | @rm -rf ./out/ 42 | @rm -rf ./db/ 43 | @rm -rf ./incremental_db/ 44 | -------------------------------------------------------------------------------- /fw/ctrl_832/printf.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | char buf[256]; 5 | 6 | #define TX ((volatile char *)0xda8001) 7 | 8 | int printf(const char *fmt,...) 9 | { 10 | int i; 11 | 12 | va_list ap; 13 | va_start(ap, fmt); 14 | int num = vsnprintf(buf, 256, fmt, ap); 15 | va_end(ap); 16 | 17 | for(i=0;i='A')&&(c<='Z')) { 44 | return c + 'a' - 'A'; 45 | } else { 46 | return c; 47 | } 48 | } -------------------------------------------------------------------------------- /rtl/minimig/paula_audio_volume.v: -------------------------------------------------------------------------------- 1 | //this module multiplies a signed 8 bit sample with an unsigned 6 bit volume setting 2 | //it produces a 14bit signed result 3 | 4 | 5 | module paula_audio_volume 6 | ( 7 | input [7:0] sample, //signed sample input 8 | input [5:0] volume, //unsigned volume input 9 | output [13:0] out //signed product out 10 | ); 11 | 12 | wire [13:0] sesample; //sign extended sample 13 | wire [13:0] sevolume; //sign extended volume 14 | 15 | //sign extend input parameters 16 | assign sesample[13:0] = {{6{sample[7]}},sample[7:0]}; 17 | assign sevolume[13:0] = {8'b00000000,volume[5:0]}; 18 | 19 | //multiply, synthesizer should infer multiplier here 20 | assign out[13:0] = {sesample[13:0] * sevolume[13:0]}; 21 | 22 | 23 | endmodule 24 | 25 | -------------------------------------------------------------------------------- /fw/ctrl_boot_832/mkchecksum.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include "checksum.h" 4 | 5 | unsigned char sector_buffer[512]; 6 | 7 | int main(int argc,char **argv) 8 | { 9 | if(argc==3) 10 | { 11 | int l; 12 | FILE *f=fopen(argv[1],"rb"); 13 | FILE *f2=fopen(argv[2],"wb"); 14 | if(f && f2) 15 | { 16 | while(l=fread(sector_buffer,1,512,f)) 17 | { 18 | if(l) 19 | { 20 | unsigned int cs=checksum(sector_buffer,l); 21 | unsigned char out[4]; 22 | out[0]=(cs>>24)&255; 23 | out[1]=(cs>>16)&255; 24 | out[2]=(cs>>8)&255; 25 | out[3]=cs&255; 26 | printf("%08x\n",cs); 27 | fwrite(out,4,1,f2); 28 | } 29 | } 30 | } 31 | fclose(f2); 32 | fclose(f); 33 | } 34 | else 35 | printf("Usage: mkchecksum infile outfile\n"); 36 | return(0); 37 | } 38 | -------------------------------------------------------------------------------- /doc/amiga/ahi/Aros_Developer_AHIDrivers - Wikibooks, open books for an open world_files/index(8).php: -------------------------------------------------------------------------------- 1 | // Move icons and navigation to top of content area, which should place them right below the page title 2 | 3 | mw.hook('wikipage.content').add(function($where) { 4 | var $content = mw.util.$content, $what = $where.find('.topicon').css('display', 'inline'); 5 | 6 | if ( $what.length ) { 7 | $content.find(':header').eq(0).wrapInner('').append( $('').append($what) ); 8 | } 9 | 10 | $what = $where.find('#top-navigation').remove().slice(0,1).addClass('subpages'); 11 | if ( $what.length ) { $content.find('.subpages').eq(0).replaceWith($what); } 12 | 13 | $what = $where.find('#bottom-navigation').remove().slice(0,1); 14 | if ( $what.length ) { $where.append($what); } 15 | }); -------------------------------------------------------------------------------- /fw/ctrl_832/interrupts.h: -------------------------------------------------------------------------------- 1 | #ifndef INTERRUPTS_H 2 | #define INTERRUPTS_H 3 | 4 | #define INTERRUPTBASE 0x0fffffa0 5 | #define HW_INTERRUPT(x) *(volatile unsigned int *)(INTERRUPTBASE+x) 6 | 7 | // Interrupt control register 8 | // Write a '1' to the low bit to enable interrupts, '0' to disable. 9 | // Reading current returns nothing but will return a set bit for each 10 | // interrupt that has been triggered since the last read, if we end up with 11 | // more than one interrupt, and also clears the register. 12 | 13 | #define REG_INTERRUPT_CTRL 0x0 14 | 15 | #ifdef __cplusplus 16 | extern "C" { 17 | #endif 18 | 19 | void SetIntHandler(void(*handler)()); 20 | void EnableInterrupts(); 21 | void DisableInterrupts(); 22 | volatile int GetInterrupts(); 23 | 24 | #ifdef __cplusplus 25 | } 26 | #endif 27 | 28 | #endif 29 | 30 | -------------------------------------------------------------------------------- /fw/testbed/interrupts.h: -------------------------------------------------------------------------------- 1 | #ifndef INTERRUPTS_H 2 | #define INTERRUPTS_H 3 | 4 | #define INTERRUPTBASE 0x0fffffa0 5 | #define HW_INTERRUPT(x) *(volatile unsigned int *)(INTERRUPTBASE+x) 6 | 7 | // Interrupt control register 8 | // Write a '1' to the low bit to enable interrupts, '0' to disable. 9 | // Reading current returns nothing but will return a set bit for each 10 | // interrupt that has been triggered since the last read, if we end up with 11 | // more than one interrupt, and also clears the register. 12 | 13 | #define REG_INTERRUPT_CTRL 0x0 14 | 15 | #ifdef __cplusplus 16 | extern "C" { 17 | #endif 18 | 19 | void SetIntHandler(void(*handler)()); 20 | void EnableInterrupts(); 21 | void DisableInterrupts(); 22 | volatile int GetInterrupts(); 23 | 24 | #ifdef __cplusplus 25 | } 26 | #endif 27 | 28 | #endif 29 | 30 | -------------------------------------------------------------------------------- /fpga/mist/Makefile: -------------------------------------------------------------------------------- 1 | # MINIMIG-DE1 2 | # fpga makefile 3 | # 2012, rok.krajnc@gmail.com 4 | 5 | 6 | ### programs ### 7 | MAP=quartus_map 8 | FIT=quartus_fit 9 | ASM=quartus_asm 10 | PGM=quartus_pgm 11 | 12 | ### project ### 13 | PROJECT=minimig_mist 14 | 15 | 16 | ### build rules ### 17 | 18 | # all 19 | all: 20 | @echo Making FPGA programming files ... 21 | @make map 22 | @make fit 23 | @make asm 24 | 25 | map: 26 | @echo Running mapper ... 27 | @$(MAP) $(PROJECT) 28 | 29 | fit: 30 | @echo Running fitter ... 31 | @$(FIT) $(PROJECT) 32 | 33 | asm: 34 | @echo Running assembler ... 35 | @$(ASM) $(PROJECT) 36 | 37 | run: 38 | @$(PGM) -c USB-Blaster -m jtag -o "p;./out/$(PROJECT).sof" 39 | 40 | # clean 41 | clean: 42 | @echo clean 43 | @rm -rf ./out/ 44 | @rm -rf ./db/ 45 | @rm -rf ./incremental_db/ 46 | 47 | -------------------------------------------------------------------------------- /amiga_sw/WavPlay/README: -------------------------------------------------------------------------------- 1 | 2 | Experimental 16-bit WAV player for Minimig. 3 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4 | By Alastair M. Robinson 5 | 6 | 7 | WavPlay can be run from the shell or from workbench. 8 | There is no user-interface - to play a file either 9 | type 10 | > wavplay path:to/file.wav 11 | on the shell, or set wavplay as the Default Tool in a Wave file's 12 | icon, and then double-click the Wav file, or click one on a Wav 13 | file's icon, hold shift and double-click on WavPlay. 14 | 15 | WavPlay will detect and terminate an already-running instance, so 16 | you can stop playback by running WavPlay with no arguments. 17 | 18 | Only one sample format is currently supported, namely 44.1Khz 16-bit 19 | stereo Little-endian. Don't attempt to play any other type of Wav file 20 | - your ears will thank you! 21 | 22 | -------------------------------------------------------------------------------- /doc/avnet-spartan3/Release Notes.txt: -------------------------------------------------------------------------------- 1 | # Spartan-3 Evaluation Kit 2 | 3 | # Release Notes - 2/26/2004 4 | 5 | If using the Spartan-3 Evaluation board in a PCI slot, remove the fuse labeled "F1" 6 | before applying power to the PC. The purpose of the fuse is to act as a high-current 7 | shunt to disconnect the on-board voltage regulator from the 3.3V rail when the PCI 8 | slot is powering the 3.3V rail. 9 | 10 | Spartan-3 1500 boards - 11 | No additional I/O are connected on the XC3S1500 device so references to the 400 device 12 | apply. The UCF file is the same for both the 400 and 1500 devices. The only difference 13 | between a 400 and a 1500 board has to do with the configuration PROMs. The 1500 board 14 | requires two serial platform flash devices, a XCF04S and a XCF01S (the 400 only requires 15 | one XCF02S device). -------------------------------------------------------------------------------- /rtl/sdram/tpram_inf_be_512x16.v: -------------------------------------------------------------------------------- 1 | // tpram_inf_be_512x16.v 2 | // 2013, rok.krajnc@gmail.com 3 | // inferrable two-port memory with byte-enables 4 | 5 | module tpram_inf_be_512x16 ( 6 | input wire clock, 7 | input wire [ 9-1:0] wraddress, 8 | input wire wren, 9 | input wire [ 2-1:0] byteena_a, 10 | input wire [ 16-1:0] data, 11 | input wire [ 9-1:0] rdaddress, 12 | output reg [ 16-1:0] q 13 | ); 14 | 15 | // memory 16 | reg [8-1:0] mem0 [0:512-1]; 17 | reg [8-1:0] mem1 [0:512-1]; 18 | 19 | // read / write 20 | always @ (posedge clock) begin 21 | if (wren && byteena_a[0]) mem0[wraddress] <= #1 data[ 8-1:0]; 22 | if (wren && byteena_a[1]) mem1[wraddress] <= #1 data[16-1:8]; 23 | q[ 8-1:0] <= #1 mem0[rdaddress]; 24 | q[16-1:8] <= #1 mem1[rdaddress]; 25 | end 26 | 27 | endmodule 28 | 29 | -------------------------------------------------------------------------------- /fw/ctrl_832/spi.h: -------------------------------------------------------------------------------- 1 | #ifndef SPI_H 2 | #define SPI_H 3 | 4 | #if 0 5 | volatile void EnableCard(); 6 | volatile void DisableCard(); 7 | volatile void EnableFpga(); 8 | volatile void DisableFpga(); 9 | volatile void EnableOsd(); 10 | volatile void DisableOsd(); 11 | volatile void EnableDMode(); 12 | volatile void DisableDMode(); 13 | 14 | void spi_osd_cmd_cont(unsigned char cmd); 15 | void spi_osd_cmd(unsigned char cmd); 16 | void spi_osd_cmd8_cont(unsigned char cmd, unsigned char parm); 17 | void spi_osd_cmd8(unsigned char cmd, unsigned char parm); 18 | void spi_osd_cmd32_cont(unsigned char cmd, unsigned long parm); 19 | void spi_osd_cmd32(unsigned char cmd, unsigned long parm); 20 | void spi_osd_cmd32le_cont(unsigned char cmd, unsigned long parm); 21 | void spi_osd_cmd32le(unsigned char cmd, unsigned long parm); 22 | #endif 23 | 24 | #endif 25 | 26 | -------------------------------------------------------------------------------- /fw/testbed/spi.h: -------------------------------------------------------------------------------- 1 | #ifndef SPI_H 2 | #define SPI_H 3 | 4 | #if 0 5 | volatile void EnableCard(); 6 | volatile void DisableCard(); 7 | volatile void EnableFpga(); 8 | volatile void DisableFpga(); 9 | volatile void EnableOsd(); 10 | volatile void DisableOsd(); 11 | volatile void EnableDMode(); 12 | volatile void DisableDMode(); 13 | 14 | void spi_osd_cmd_cont(unsigned char cmd); 15 | void spi_osd_cmd(unsigned char cmd); 16 | void spi_osd_cmd8_cont(unsigned char cmd, unsigned char parm); 17 | void spi_osd_cmd8(unsigned char cmd, unsigned char parm); 18 | void spi_osd_cmd32_cont(unsigned char cmd, unsigned long parm); 19 | void spi_osd_cmd32(unsigned char cmd, unsigned long parm); 20 | void spi_osd_cmd32le_cont(unsigned char cmd, unsigned long parm); 21 | void spi_osd_cmd32le(unsigned char cmd, unsigned long parm); 22 | #endif 23 | 24 | #endif 25 | 26 | -------------------------------------------------------------------------------- /fw/ctrl_832/firmware.h: -------------------------------------------------------------------------------- 1 | typedef struct 2 | { 3 | unsigned long flags; 4 | unsigned long base; 5 | unsigned long size; 6 | unsigned long crc; 7 | } romTYPE; 8 | 9 | typedef struct 10 | { 11 | unsigned char id[8]; 12 | unsigned char version[8]; 13 | romTYPE rom; 14 | unsigned long padding[119]; 15 | unsigned long crc; 16 | } UPGRADE; 17 | 18 | #define NVCONFIG 0x3FFFC 19 | #define NVCONFIG_SPIMODE 0x00000001 20 | #define SPIMODE_NORMAL 0 21 | #define SPIMODE_FAST 1 22 | 23 | #define true -1 24 | #define false 0 25 | 26 | unsigned long CalculateCRC32(unsigned long crc, unsigned char *pBuffer, unsigned long nSize); 27 | unsigned char CheckFirmware(fileTYPE *file, char *name); 28 | unsigned long WriteFirmware(fileTYPE *file); 29 | void SetSPIMode(unsigned long mode); 30 | unsigned long GetSPIMode(void); 31 | 32 | -------------------------------------------------------------------------------- /rtl/sdram/dpram_inf_256x32.v: -------------------------------------------------------------------------------- 1 | // dpram_inf_256x32.v 2 | // 2015, rok.krajnc@gmail.com 3 | // inferrable dual-port memory 4 | 5 | module dpram_inf_256x32 ( 6 | input wire clock, 7 | input wire wren_a, 8 | input wire [ 8-1:0] address_a, 9 | input wire [ 32-1:0] data_a, 10 | output reg [ 32-1:0] q_a, 11 | input wire wren_b, 12 | input wire [ 8-1:0] address_b, 13 | input wire [ 32-1:0] data_b, 14 | output reg [ 32-1:0] q_b 15 | ); 16 | 17 | // memory 18 | reg [32-1:0] mem [0:256-1]; 19 | 20 | // port a 21 | always @ (posedge clock) begin 22 | if (wren_a) mem[address_a] <= #1 data_a; 23 | q_a <= #1 mem[address_a]; 24 | end 25 | 26 | // port b 27 | always @ (posedge clock) begin 28 | if (wren_b) mem[address_b] <= #1 data_b; 29 | q_b <= #1 mem[address_b]; 30 | end 31 | 32 | endmodule 33 | 34 | -------------------------------------------------------------------------------- /amiga_sw/WavPlay/wav.h.info: -------------------------------------------------------------------------------- 1 | #ifndef WHEELDRIVER_H 2 | #define WHEELDRIVER_H 3 | 4 | #include 5 | #include 6 | #include 7 | 8 | struct WheelDriverContext 9 | { 10 | void (*Dispose)(struct WheelDriverContext *wdc); 11 | BOOL (*Handle)(struct WheelDriverContext *wdc,unsigned long Signals); 12 | void (*Enable)(struct WheelDriverContext *wdc); 13 | void (*Disable)(struct WheelDriverContext *wdc); 14 | void *Server; 15 | BOOL Active; 16 | long SigBit; 17 | long Signals; 18 | struct Task *SigTask; 19 | struct MsgPort *Port; 20 | long WheelCounter; 21 | long ButtonStatus; 22 | long PreviousButtons; 23 | struct IOStdReq *IOReq; 24 | struct InputEvent Event; 25 | struct Interrupt Interrupt; 26 | }; 27 | 28 | struct WheelDriverContext *WheelDriver_Create(); 29 | 30 | #endif 31 | 32 | -------------------------------------------------------------------------------- /doc/amiga/ahi/Aros_Developer_AHIDrivers - Wikibooks, open books for an open world_files/index(11).php: -------------------------------------------------------------------------------- 1 | /* 2 | * Load CSS and JS files temporarily through URL. 3 | * &use=File1.css|File2.css|File3.js 4 | */ 5 | (function () { 6 | var files = mw.util.getParamValue( 'use' ), user, FileRE, what, u, f, l; 7 | if ( !files ) { 8 | return; 9 | } 10 | files = files.split('|'); 11 | user = $.escapeRE( mw.config.get( 'wgUserName', '' ) ); 12 | FileRE = new RegExp( '^(?:MediaWiki:' + ( user ? '|User:' + user + '/' : '' ) + ').*\\.(js|css)$' ); 13 | for ( u = 0, f = $.trim( files[u] ), l = files.length; u < l; f = $.trim( files[++u] ) ) { 14 | what = FileRE.exec(f); 15 | if ( what == null ) { 16 | continue; 17 | } 18 | switch ( what[1] ) { 19 | case 'js': importScript(f); break; 20 | case 'css': importStylesheet(f); break; 21 | } 22 | } 23 | }()); -------------------------------------------------------------------------------- /fw/ctrl_832/bincue.h: -------------------------------------------------------------------------------- 1 | #ifndef BINCUE_H 2 | #define BINCUE_H 3 | 4 | #include "rafile.h" 5 | #include "audiotrack.h" 6 | 7 | enum cdimagetype {CD_INVALID,CD_BINARY,CD_WAVE}; 8 | enum cderror {CD_OK,CD_FILENOTFOUND,CD_TRACKNOTFOUND}; 9 | 10 | struct cdimage 11 | { 12 | enum cderror error; 13 | int tracks; 14 | int audiotracks; 15 | int currenttrack; 16 | int offset; 17 | int length; /* 0 for standalone WAV files. */ 18 | enum cdimagetype type; 19 | RAFile cuefile; 20 | struct audiotrack audio; 21 | char linebuffer[512]; 22 | char filename[261]; 23 | }; 24 | 25 | int cd_setcuefile(struct cdimage *cd,const char *filename); 26 | int cd_findtrack(struct cdimage *cd,int track); 27 | int cd_cueaudio(struct cdimage *cd,int track); 28 | int cd_playaudio(struct cdimage *cd,int track); 29 | void cd_continueaudio(struct cdimage *cd); 30 | 31 | #endif 32 | 33 | -------------------------------------------------------------------------------- /amiga_sw/WheelDriver/WheelDriver.h: -------------------------------------------------------------------------------- 1 | #ifndef WHEELDRIVER_H 2 | #define WHEELDRIVER_H 3 | 4 | #include 5 | #include 6 | #include 7 | 8 | struct WheelDriverContext 9 | { 10 | void (*Dispose)(struct WheelDriverContext *wdc); 11 | BOOL (*Handle)(struct WheelDriverContext *wdc,unsigned long Signals); 12 | void (*Enable)(struct WheelDriverContext *wdc); 13 | void (*Disable)(struct WheelDriverContext *wdc); 14 | void *Server; 15 | BOOL Active; 16 | long SigBit; 17 | long Signals; 18 | struct Task *SigTask; 19 | struct MsgPort *Port; 20 | long WheelCounter; 21 | long ButtonStatus; 22 | long PreviousButtons; 23 | struct IOStdReq *IOReq; 24 | struct InputEvent Event; 25 | struct Interrupt Interrupt; 26 | }; 27 | 28 | struct WheelDriverContext *WheelDriver_Create(); 29 | 30 | #endif 31 | 32 | -------------------------------------------------------------------------------- /fw/ctrl_832/audiotrack.h: -------------------------------------------------------------------------------- 1 | #ifndef AUDIOTRACK_H 2 | #define AUDIOTRACK_H 3 | 4 | #include "hardware.h" 5 | #include "rafile.h" 6 | 7 | #define AUDIOSEEK_STEP 2048 8 | 9 | struct audiotrack 10 | { 11 | RAFile file; 12 | int currentbuffer; 13 | int remain; 14 | int buffersize; 15 | int start; 16 | int length; 17 | unsigned char *buffer; 18 | }; 19 | 20 | 21 | int audiotrack_busy(struct audiotrack *track); 22 | void audiotrack_cue(struct audiotrack *track); 23 | void audiotrack_play(struct audiotrack *track); 24 | void audiotrack_fastforward(struct audiotrack *track); 25 | void audiotrack_rewind(struct audiotrack *track); 26 | void audiotrack_stop(struct audiotrack *track); 27 | void audiotrack_fill(struct audiotrack *track); 28 | int audiotrack_init(struct audiotrack *track, const char *filename,int offset,int length,unsigned char *buffer); 29 | 30 | #endif 31 | 32 | -------------------------------------------------------------------------------- /fw/ctrl_832/drivesounds.h: -------------------------------------------------------------------------------- 1 | #ifndef DRIVESOUNDS_H 2 | #define DRIVESOUNDS_H 3 | 4 | enum DriveSound_Type { 5 | DRIVESOUND_INSERT=0,DRIVESOUND_EJECT,DRIVESOUND_MOTORSTART,DRIVESOUND_MOTORLOOP,DRIVESOUND_MOTORSTOP, 6 | DRIVESOUND_STEP,DRIVESOUND_STEP2,DRIVESOUND_STEP3,DRIVESOUND_STEP4, 7 | DRIVESOUND_HDDSTEP,DRIVESOUND_HDDSTEP2,DRIVESOUND_HDDSTEP3,DRIVESOUND_HDDSTEP4 8 | }; 9 | #define DRIVESOUND_COUNT (DRIVESOUND_HDDSTEP4+1) 10 | 11 | #define DRIVESOUNDS_FLOPPY 1 12 | #define DRIVESOUNDS_HDD 2 13 | 14 | void drivesounds_enable(); 15 | void drivesounds_disable(); 16 | void drivesounds_on(); 17 | void drivesounds_off(); 18 | void drivesounds_queueevent(enum DriveSound_Type type); 19 | void drivesounds_stop(); 20 | void drivesounds_start(); 21 | int drivesounds_fill(); 22 | int drivesounds_init(const char *filename); 23 | int drivesounds_loaded(); 24 | 25 | #endif 26 | 27 | -------------------------------------------------------------------------------- /fw/testbed/audiotrack.h: -------------------------------------------------------------------------------- 1 | #ifndef AUDIOTRACK_H 2 | #define AUDIOTRACK_H 3 | 4 | #include "hardware.h" 5 | #include "rafile.h" 6 | 7 | #define AUDIOSEEK_STEP 2048 8 | 9 | struct audiotrack 10 | { 11 | RAFile file; 12 | int currentbuffer; 13 | int remain; 14 | int buffersize; 15 | int start; 16 | int length; 17 | unsigned char *buffer; 18 | }; 19 | 20 | 21 | int audiotrack_busy(struct audiotrack *track); 22 | void audiotrack_cue(struct audiotrack *track); 23 | void audiotrack_play(struct audiotrack *track); 24 | void audiotrack_fastforward(struct audiotrack *track); 25 | void audiotrack_rewind(struct audiotrack *track); 26 | void audiotrack_stop(struct audiotrack *track); 27 | void audiotrack_fill(struct audiotrack *track); 28 | int audiotrack_init(struct audiotrack *track, const char *filename,int offset,int length,unsigned char *buffer); 29 | 30 | #endif 31 | 32 | -------------------------------------------------------------------------------- /doc/amiga/aga/Mysterious Ways - How to Code the Amiga - AGA Chipset.mht: -------------------------------------------------------------------------------- 1 | Content-Type: multipart/related; start=; boundary=----------2j2qGH9q4v8wAUQ9DoGCTX 2 | Content-Location: http://www.mways.co.uk/amiga/howtocode/text/aga.php 3 | Subject: =?utf-8?Q?Mysterious=20Ways=20-=20How=20to=20Code=20the=20Amiga=20-=20AGA=20Chipset?= 4 | MIME-Version: 1.0 5 | 6 | ------------2j2qGH9q4v8wAUQ9DoGCTX 7 | Content-Disposition: inline; filename=aga.htm 8 | Content-Type: text/html; name=aga.htm 9 | Content-ID: 10 | Content-Location: http://www.mways.co.uk/amiga/howtocode/text/aga.php 11 | Content-Transfer-Encoding: 8bit 12 | 13 | MYSQL Error: Unable to query database
    Too many connections 14 | ------------2j2qGH9q4v8wAUQ9DoGCTX-- 15 | -------------------------------------------------------------------------------- /amiga_sw/WheelDriver/Cx.h: -------------------------------------------------------------------------------- 1 | #ifndef CXCONTEXT_H 2 | #define CXCONTEXT_H 3 | 4 | #include 5 | 6 | struct CxContext 7 | { 8 | void (*Dispose)(struct CxContext *cx); 9 | BOOL (*Handle)(struct CxContext *cx,unsigned long signals); 10 | BOOL (*SetHotKey)(struct CxContext *cx,char *hotkey); 11 | BOOL (*SetCustom)(struct CxContext *cx,void (*rout)(CxMsg *msg,CxObj *obj)); 12 | void (*ShowCallback)(void *userdata); 13 | void (*HideCallback)(void *userdata); 14 | void (*EnableCallback)(void *userdata); 15 | void (*DisableCallback)(void *userdata); 16 | void *UserData; /* Useful from within Callback functions */ 17 | struct MsgPort *Port; 18 | void *Broker; 19 | void *CustomObject; 20 | void *HotKey; 21 | unsigned long Signals; 22 | }; 23 | 24 | struct CxContext *CxContext_Create(char *name,char *title,char *descr); 25 | 26 | #endif 27 | -------------------------------------------------------------------------------- /fw/ctrl_832/c64keys.h: -------------------------------------------------------------------------------- 1 | #ifndef C64KEYS_H 2 | #define C64KEYS_H 3 | 4 | #define KEYBOARDBASE 0x0fffff90 5 | #define HW_KEYBOARD(x) *(volatile unsigned short *)(KEYBOARDBASE+x) 6 | 7 | #define REG_KEYBOARD_WORD0 2 8 | #define REG_KEYBOARD_WORD1 6 9 | #define REG_KEYBOARD_WORD2 0xa 10 | #define REG_KEYBOARD_WORD3 0xe 11 | 12 | #define REG_KEYBOARD_OUT 2 13 | 14 | #define C64KEY_RINGBUFFER_SIZE 16 15 | 16 | struct c64keyboard 17 | { 18 | int active; 19 | int frame; 20 | int layer; 21 | int qualifiers; 22 | unsigned short keys[12]; 23 | volatile int out_hw; 24 | volatile int out_cpu; 25 | unsigned int outbuf[C64KEY_RINGBUFFER_SIZE]; 26 | }; 27 | 28 | extern struct c64keyboard c64keys; 29 | 30 | void c64keyboard_init(struct c64keyboard *r); 31 | void c64keyboard_write(struct c64keyboard *r,int in); 32 | int c64keyboard_checkreset(); 33 | void c64keys_inthandler(); 34 | 35 | #endif 36 | -------------------------------------------------------------------------------- /fw/ctrl_832/rtc.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include "hardware.h" 4 | #include "version.h" 5 | #include "rtc.h" 6 | 7 | void HandleRTC() 8 | { 9 | static int c=0; 10 | if((c++&8191)==0) /* No need to update this every loop */ 11 | { 12 | int t1,t2,t3; 13 | // Communicate with RTC chip over SPI 14 | SPI_slow(); 15 | EnableRTC(); 16 | SPI(0x92); /* Read, Subaddress 001, start reading at register 0000 */ 17 | 18 | t1=SPI(0xff); /* Seconds */ 19 | t2=SPI(0xff); /* Minutes */ 20 | HW_RTC(0x0c)=t1 | (t2 << 8); 21 | 22 | t1=SPI(0xff); /* Hours */ 23 | t2=SPI(0xff); /* Day */ 24 | HW_RTC(0x08)=t1 | (t2 << 8); 25 | 26 | t3=SPI(0xff); /* Weekday */ 27 | 28 | t1=SPI(0xff); /* Month */ 29 | t2=SPI(0xff); /* Year */ 30 | HW_RTC(0x04)=t1 | (t2 << 8); 31 | 32 | HW_RTC(0x00)=0x4000 | t3; /* Flags + weekday */ 33 | DisableRTC(); 34 | SPI_fast(); 35 | } 36 | } 37 | 38 | -------------------------------------------------------------------------------- /rtl/sdram/dpram_inf_generic.v: -------------------------------------------------------------------------------- 1 | // dpram_inf_256x32.v 2 | // 2015, rok.krajnc@gmail.com 3 | // inferrable dual-port memory 4 | 5 | module dpram_inf_generic #(parameter depth = 8, parameter width = 32 ) ( 6 | input wire clock, 7 | input wire wren_a, 8 | input wire [ depth-1:0] address_a, 9 | input wire [ width-1:0] data_a, 10 | output reg [ width-1:0] q_a, 11 | input wire wren_b, 12 | input wire [ depth-1:0] address_b, 13 | input wire [ width-1:0] data_b, 14 | output reg [ width-1:0] q_b 15 | ); 16 | 17 | // memory 18 | reg [width-1:0] mem [0:(1< x"00" 2 | ); 3 | 4 | begin 5 | 6 | -- We use a dual-port RAM here - one port for the lower byte, one for the upper byte. This allows us to 7 | -- present a 16-bit interface while allowing byte writes. 8 | 9 | process (clk) 10 | begin 11 | if (clk'event and clk = '1') then 12 | if we_n = '0' and lds_n='0' then 13 | ram(to_integer(unsigned(addr(maxAddrBitBRAM downto 1)&'1'))) := d(7 downto 0); 14 | q(7 downto 0) <= d(7 downto 0); 15 | else 16 | q(7 downto 0) <= ram(to_integer(unsigned(addr(maxAddrBitBRAM downto 1)&'1'))); 17 | end if; 18 | end if; 19 | end process; 20 | 21 | process (clk) 22 | begin 23 | if (clk'event and clk = '1') then 24 | if we_n = '0' and uds_n='0' then 25 | ram(to_integer(unsigned(addr(maxAddrBitBRAM downto 1)&'0'))) := d(15 downto 8); 26 | q(15 downto 8) <= d(15 downto 8); 27 | else 28 | q(15 downto 8) <= ram(to_integer(unsigned(addr(maxAddrBitBRAM downto 1)&'0'))); 29 | end if; 30 | end if; 31 | end process; 32 | 33 | end arch; 34 | 35 | -------------------------------------------------------------------------------- /sw/misc/makelogo.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import sys,os 4 | from PIL import Image 5 | 6 | 7 | fin = "Minimig2OnBlue_edit.png" 8 | fon = "boot_logo.c" 9 | 10 | fi = Image.open(fin) 11 | di = fi.getdata() 12 | 13 | src_w = fi.size[0] 14 | src_h = fi.size[1] 15 | 16 | if (src_w % 8): 17 | sys.stderr.write("Input image width not a multiple of 8 pixels.\n") 18 | sys.exit(-1) 19 | 20 | with open(fon, 'w') as fo: 21 | fo.write( "/* %s */\n\n" % fon) 22 | fo.write( "const unsigned int logo_width = %s;\n" % (src_w/8)) 23 | fo.write( "const unsigned int logo_height = %d;\n" % src_h) 24 | fo.write( "\n") 25 | fo.write( "const char boot_logo[][] = {\n") 26 | for h in range(src_h): 27 | fo.write( " { ") 28 | for w in range(0,src_w,8): 29 | d = 0 30 | for p in range (8): 31 | d = d<<1 | (fi.getpixel((w+p,h)) & 0x1) 32 | fo.write( "0x%02x, " % d) 33 | fo.seek(-2,1) 34 | fo.write( " },\n") 35 | fo.seek(-2,1) 36 | fo.write( "\n};\n\n") 37 | 38 | -------------------------------------------------------------------------------- /fpga/virtual/minimig_virtual.qpf: -------------------------------------------------------------------------------- 1 | # Copyright (C) 1991-2007 Altera Corporation 2 | # Your use of Altera Corporation's design tools, logic functions 3 | # and other software and tools, and its AMPP partner logic 4 | # functions, and any output files from any of the foregoing 5 | # (including device programming or simulation files), and any 6 | # associated documentation or information are expressly subject 7 | # to the terms and conditions of the Altera Program License 8 | # Subscription Agreement, Altera MegaCore Function License 9 | # Agreement, or other applicable license agreement, including, 10 | # without limitation, that your use is for the sole purpose of 11 | # programming logic devices manufactured by Altera and sold by 12 | # Altera or its authorized distributors. Please refer to the 13 | # applicable agreement for further details. 14 | 15 | 16 | 17 | QUARTUS_VERSION = "7.2" 18 | DATE = "22:27:29 October 30, 2007" 19 | 20 | 21 | # Revisions 22 | 23 | PROJECT_REVISION = "minimig_virtual" 24 | -------------------------------------------------------------------------------- /bench/ps2mouse/ps2mouse_tb.v: -------------------------------------------------------------------------------- 1 | // ps2mouse_tb.v 2 | // 2014, rok.krajnc@gmail.com 3 | 4 | 5 | `default_nettype none 6 | `timescale 1ns/1ps 7 | 8 | 9 | module ps2mouse_tb(); 10 | 11 | reg CLK7=1; 12 | reg RST=1; 13 | 14 | tri1 mclk; 15 | tri1 mdat; 16 | 17 | 18 | // testbench 19 | initial begin 20 | #1; 21 | $display("BENCH : ps2mouse_tb BEGIN"); 22 | 23 | repeat (200000) @ (posedge CLK7); 24 | 25 | $display("BENCH : ps2mouse_tb END"); 26 | $finish(); 27 | end 28 | 29 | 30 | // clocks & async reset 31 | initial begin 32 | CLK7 = 1'b1; 33 | #1; 34 | forever #143 CLK7 = ~CLK7; 35 | end 36 | 37 | initial begin 38 | RST = 1'b1; 39 | #1; 40 | repeat(10) @ (posedge CLK7); 41 | RST = 1'b0; 42 | end 43 | 44 | 45 | // modules 46 | ps2mouse_ctrl ps2mouse_ctrl ( 47 | .clk (CLK7), 48 | .reset (RST), 49 | .mclk (mclk), 50 | .mdat (mdat) 51 | ); 52 | 53 | ps2mouse ps2mouse ( 54 | .clk (CLK7), 55 | .rst (RST), 56 | .mclk (mclk), 57 | .mdat (mdat) 58 | ); 59 | 60 | 61 | endmodule 62 | 63 | -------------------------------------------------------------------------------- /amiga_sw/WavPlay/minimigaudio.h: -------------------------------------------------------------------------------- 1 | #ifndef AUDIOTEST_H 2 | #define AUDIOTEST_H 3 | 4 | #include 5 | #include 6 | 7 | #define AUDIOHW (*(short *)0xb80200) 8 | 9 | #define AUDIOACTIVE 1 10 | #define AUDIOINTACTIVE 2 11 | 12 | #define AUDIOBUFFER ((char *)0xb00000) 13 | #define AUDIOBUFFERSIZE 32768 14 | 15 | 16 | struct AudioContext 17 | { 18 | void (*Dispose)(struct AudioContext *ac); 19 | BOOL (*Handle)(struct AudioContext *ac,unsigned long Signals); 20 | void (*Enable)(struct AudioContext *ac); 21 | void (*Disable)(struct AudioContext *ac); 22 | void (*SetFillFunction)(struct AudioContext *ac,int (*fillfunc)(void *,char *,int),void *userdata); 23 | void *Server; 24 | int (*FillFunction)(void *ud,char *buf,int len); 25 | void *FillUserData; 26 | BOOL Active; 27 | long SigBit; 28 | long Signals; 29 | struct Task *SigTask; 30 | struct MsgPort *Port; 31 | int ActiveBuffer; 32 | struct Interrupt Interrupt; 33 | }; 34 | 35 | struct AudioContext *Audio_Create(); 36 | 37 | #endif 38 | 39 | -------------------------------------------------------------------------------- /bench/de1/de1_clk_rst.v: -------------------------------------------------------------------------------- 1 | // DE1 external clocks and resets 2 | // 2013, rok.krajnc@gmail.com 3 | 4 | 5 | //// timescale //// 6 | `timescale 1ns/1ps 7 | 8 | 9 | //// clock defines //// 10 | `define HP_24 20.833 11 | `define HP_27 18.519 12 | `define HP_50 10.000 13 | `define HP_EXT 5.000 14 | 15 | 16 | //// module //// 17 | module de1_clk_rst ( 18 | output reg CLOCK24, 19 | output reg CLOCK27, 20 | output reg CLOCK50, 21 | output reg CLOCKEXT, 22 | output reg RST 23 | ); 24 | 25 | 26 | //// clocks & async reset //// 27 | initial begin 28 | CLOCK24 = 1'b1; 29 | #2; 30 | forever #`HP_24 CLOCK24 = ~CLOCK24; 31 | end 32 | 33 | initial begin 34 | CLOCK27 = 1'b1; 35 | #3; 36 | forever #`HP_27 CLOCK27 = ~CLOCK27; 37 | end 38 | 39 | initial begin 40 | CLOCK50 = 1'b1; 41 | #5; 42 | forever #`HP_50 CLOCK50 = ~CLOCK50; 43 | end 44 | 45 | initial begin 46 | CLOCKEXT = 1'b1; 47 | #7; 48 | forever #`HP_EXT CLOCKEXT = ~CLOCKEXT; 49 | end 50 | 51 | initial begin 52 | RST = 1'b1; 53 | #101; 54 | RST = 1'b0; 55 | end 56 | 57 | 58 | endmodule 59 | 60 | -------------------------------------------------------------------------------- /doc/amiga/ahi/Aros_Developer_AHIDrivers - Wikibooks, open books for an open world_files/index(1).php: -------------------------------------------------------------------------------- 1 | // This page is for keeping track of JavaScript that may no longer be useful/functional someday. 2 | 3 | mw.log.deprecate(window, 'addLoadEvent', function(fn) { 4 | jQuery.ready(fn); 5 | }, 'Use jQuery.ready instead.' ); 6 | 7 | window.import_script = function(name) { 8 | mw.loader.load( 9 | mw.config.get('wgServer') 10 | + mw.config.get('wgScript') 11 | + '?title=' + mw.util.wikiUrlencode(name) 12 | + '&action=raw&ctype=text/javascript' 13 | ); 14 | }; 15 | 16 | window.import_style = function(name) { 17 | mw.loader.load( 18 | mw.config.get('wgServer') 19 | + mw.config.get('wgScript') 20 | + '?title=' + mw.util.wikiUrlencode(name) 21 | + '&action=raw&ctype=text/css' 22 | ); 23 | }; 24 | 25 | // Removes the default no-license option for uploads. 26 | function remove_no_license() 27 | { 28 | if ( mw.config.get('wgCanonicalSpecialPageName') !== 'Upload' ) 29 | return; 30 | $('#wpLicense').find('option').eq(0).remove(); 31 | } 32 | 33 | $(document).ready(remove_no_license); -------------------------------------------------------------------------------- /rtl/mist/amiga_clk_altera.ppf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /fpga/chameleonv1/Makefile: -------------------------------------------------------------------------------- 1 | # MINIMIG 2 | # fpga makefile 3 | # 2012, rok.krajnc@gmail.com 4 | # 2020, AMR 5 | 6 | include ../../paths.mk 7 | 8 | ### programs ### 9 | MAP=$(QUARTUS_PATH_CIII)quartus_map 10 | FIT=$(QUARTUS_PATH_CIII)quartus_fit 11 | ASM=$(QUARTUS_PATH_CIII)quartus_asm 12 | PGM=$(QUARTUS_PATH_CIII)quartus_pgm 13 | STA=$(QUARTUS_PATH_CIII)quartus_sta 14 | 15 | ### project ### 16 | PROJECT=MinimigAGA_TC64V1 17 | 18 | 19 | ### build rules ### 20 | 21 | # all 22 | all: 23 | @echo Making FPGA programming files ... 24 | @make map 25 | @make fit 26 | @make asm 27 | @make sta 28 | 29 | map: 30 | @echo Running mapper ... 31 | @$(MAP) $(PROJECT) 32 | 33 | fit: 34 | @echo Running fitter ... 35 | @$(FIT) $(PROJECT) 36 | 37 | asm: 38 | @echo Running assembler ... 39 | @$(ASM) $(PROJECT) 40 | 41 | sta: 42 | @echo Running STA ... 43 | @$(STA) $(PROJECT) 44 | @grep Design-wide\ TNS $(PROJECT).sta.rpt 45 | 46 | run: 47 | @$(PGM) -c USB-Blaster -m jtag -o "p;./out/$(PROJECT).sof" 48 | 49 | # clean 50 | clean: 51 | @echo clean 52 | @rm -rf ./out/ 53 | @rm -rf ./db/ 54 | @rm -rf ./incremental_db/ 55 | 56 | -------------------------------------------------------------------------------- /fpga/chameleonv2/Makefile: -------------------------------------------------------------------------------- 1 | # MINIMIG 2 | # fpga makefile 3 | # 2012, rok.krajnc@gmail.com 4 | # 2020, AMR 5 | 6 | include ../../paths.mk 7 | 8 | ### programs ### 9 | MAP=$(QUARTUS_PATH_C10LP)quartus_map 10 | FIT=$(QUARTUS_PATH_C10LP)quartus_fit 11 | ASM=$(QUARTUS_PATH_C10LP)quartus_asm 12 | PGM=$(QUARTUS_PATH_C10LP)quartus_pgm 13 | STA=$(QUARTUS_PATH_C10LP)quartus_sta 14 | 15 | ### project ### 16 | PROJECT=MinimigAGA_TC64V2 17 | 18 | 19 | ### build rules ### 20 | 21 | # all 22 | all: 23 | @echo Making FPGA programming files ... 24 | @make map 25 | @make fit 26 | @make asm 27 | @make sta 28 | 29 | map: 30 | @echo Running mapper ... 31 | @$(MAP) $(PROJECT) 32 | 33 | fit: 34 | @echo Running fitter ... 35 | @$(FIT) $(PROJECT) 36 | 37 | asm: 38 | @echo Running assembler ... 39 | @$(ASM) $(PROJECT) 40 | 41 | sta: 42 | @echo Running STA ... 43 | @$(STA) $(PROJECT) 44 | @grep Design-wide\ TNS $(PROJECT).sta.rpt 45 | 46 | run: 47 | @$(PGM) -c USB-Blaster -m jtag -o "p;./out/$(PROJECT).sof" 48 | 49 | # clean 50 | clean: 51 | @echo clean 52 | @rm -rf ./out/ 53 | @rm -rf ./db/ 54 | @rm -rf ./incremental_db/ 55 | 56 | -------------------------------------------------------------------------------- /fw/ctrl_832/boot.h: -------------------------------------------------------------------------------- 1 | // boot.h 2 | // bootscreen functions 3 | // 2014, rok.krajnc@gmail.com 4 | 5 | 6 | #ifndef __BOOT_H__ 7 | #define __BOOT_H__ 8 | 9 | 10 | //// defines //// 11 | #define SCREEN_WIDTH 640 12 | #define SCREEN_HEIGHT 256 13 | #define SCREEN_SIZE SCREEN_WIDTH * SCREEN_HEIGHT 14 | #define SCREEN_MEM_SIZE 2*SCREEN_SIZE/8 15 | #define SCREEN_ADDRESS 0x80000 16 | #define SCREEN_BPL1 0x80000 17 | #define SCREEN_BPL2 0x85000 18 | 19 | 20 | #define LOGO_WIDTH 208 21 | #define LOGO_HEIGHT 32 22 | #define LOGO_OFFSET (64*SCREEN_WIDTH/8+24) 23 | #define LOGO_LSKIP (SCREEN_WIDTH-LOGO_WIDTH)/8 24 | #define LOGO_SIZE 0x680 25 | #define LOGO_FILE "MINIMIG ART" 26 | 27 | #define BALL_SIZE 0x4000 28 | #define BALL_ADDRESS 0x8a000 29 | #define BALL_FILE "MINIMIG BAL" 30 | 31 | #define COPPER_SIZE 0x35c 32 | #define COPPER_ADDRESS 0x8e680 33 | #define COPPER_FILE "MINIMIG COP" 34 | 35 | #define BLITS 64 36 | 37 | //// functions //// 38 | void BootInit(); 39 | void BootPrintEx(char * str); 40 | void BootHome(); 41 | 42 | #endif // __BOOT_H__ 43 | 44 | -------------------------------------------------------------------------------- /fw/testbed/boot.h: -------------------------------------------------------------------------------- 1 | // boot.h 2 | // bootscreen functions 3 | // 2014, rok.krajnc@gmail.com 4 | 5 | 6 | #ifndef __BOOT_H__ 7 | #define __BOOT_H__ 8 | 9 | 10 | //// defines //// 11 | #define SCREEN_WIDTH 640 12 | #define SCREEN_HEIGHT 256 13 | #define SCREEN_SIZE SCREEN_WIDTH * SCREEN_HEIGHT 14 | #define SCREEN_MEM_SIZE 2*SCREEN_SIZE/8 15 | #define SCREEN_ADDRESS 0x80000 16 | #define SCREEN_BPL1 0x80000 17 | #define SCREEN_BPL2 0x85000 18 | 19 | 20 | #define LOGO_WIDTH 208 21 | #define LOGO_HEIGHT 32 22 | #define LOGO_OFFSET (64*SCREEN_WIDTH/8+24) 23 | #define LOGO_LSKIP (SCREEN_WIDTH-LOGO_WIDTH)/8 24 | #define LOGO_SIZE 0x680 25 | #define LOGO_FILE "MINIMIG ART" 26 | 27 | #define BALL_SIZE 0x4000 28 | #define BALL_ADDRESS 0x8a000 29 | #define BALL_FILE "MINIMIG BAL" 30 | 31 | #define COPPER_SIZE 0x35c 32 | #define COPPER_ADDRESS 0x8e680 33 | #define COPPER_FILE "MINIMIG COP" 34 | 35 | #define BLITS 64 36 | 37 | //// functions //// 38 | void BootInit(); 39 | void BootPrintEx(char * str); 40 | void BootHome(); 41 | 42 | #endif // __BOOT_H__ 43 | 44 | -------------------------------------------------------------------------------- /sim/lcd/nc/run/test.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import sys, os, copy 4 | 5 | sys.path.append("../../../common/") 6 | import nc_run 7 | import lst_parse 8 | import logger 9 | 10 | 11 | # defines 12 | debug = True 13 | do_compile = True 14 | do_elaborate = True 15 | do_simulate = True 16 | do_lint = False 17 | do_coverage = False 18 | opt_waves = True 19 | opt_mems = False 20 | opt_tasks = False 21 | opt_funcs = False 22 | top_rtl = "lcd" 23 | top_sim = "lcd_tb" 24 | top_cov = "lcd" 25 | out_dir = "../out" 26 | rtl_list = "rtl.lst" 27 | lib_list = "lib.lst" 28 | sim_list = "sim.lst" 29 | dir_list = "dir.lst" 30 | 31 | # run test 32 | nc_run.nc_run(debug=debug, 33 | do_compile=do_compile, do_elaborate=do_elaborate, do_simulate=do_simulate, do_lint=do_lint, do_coverage=do_coverage, 34 | opt_waves=opt_waves, opt_mems=opt_mems, opt_tasks=opt_tasks, opt_funcs=opt_funcs, 35 | top_rtl=top_rtl, top_sim=top_sim, top_cov=top_cov, 36 | out_dir=out_dir, rtl_list=rtl_list, lib_list=lib_list, sim_list=sim_list, dir_list=dir_list) 37 | 38 | 39 | -------------------------------------------------------------------------------- /sim/sdm/nc/run/test.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import sys, os, copy 4 | 5 | sys.path.append("../../../common/") 6 | import nc_run 7 | import lst_parse 8 | import logger 9 | 10 | 11 | # defines 12 | debug = True 13 | do_compile = True 14 | do_elaborate = True 15 | do_simulate = True 16 | do_lint = False 17 | do_coverage = False 18 | opt_waves = True 19 | opt_mems = False 20 | opt_tasks = False 21 | opt_funcs = False 22 | top_rtl = "sdm" 23 | top_sim = "sdm_tb" 24 | top_cov = "sdm" 25 | out_dir = "../out" 26 | rtl_list = "rtl.lst" 27 | lib_list = "lib.lst" 28 | sim_list = "sim.lst" 29 | dir_list = "dir.lst" 30 | 31 | # run test 32 | nc_run.nc_run(debug=debug, 33 | do_compile=do_compile, do_elaborate=do_elaborate, do_simulate=do_simulate, do_lint=do_lint, do_coverage=do_coverage, 34 | opt_waves=opt_waves, opt_mems=opt_mems, opt_tasks=opt_tasks, opt_funcs=opt_funcs, 35 | top_rtl=top_rtl, top_sim=top_sim, top_cov=top_cov, 36 | out_dir=out_dir, rtl_list=rtl_list, lib_list=lib_list, sim_list=sim_list, dir_list=dir_list) 37 | 38 | 39 | -------------------------------------------------------------------------------- /sim/uart/nc/run/test.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import sys, os, copy 4 | 5 | sys.path.append("../../../common/") 6 | import nc_run 7 | import lst_parse 8 | import logger 9 | 10 | 11 | # defines 12 | debug = True 13 | do_compile = True 14 | do_elaborate = True 15 | do_simulate = True 16 | do_lint = False 17 | do_coverage = False 18 | opt_waves = True 19 | opt_mems = False 20 | opt_tasks = True 21 | opt_funcs = True 22 | top_rtl = "uart" 23 | top_sim = "uart_tb" 24 | top_cov = "uart" 25 | out_dir = "../out" 26 | rtl_list = "rtl.lst" 27 | lib_list = "lib.lst" 28 | sim_list = "sim.lst" 29 | dir_list = "dir.lst" 30 | 31 | # run test 32 | nc_run.nc_run(debug=debug, 33 | do_compile=do_compile, do_elaborate=do_elaborate, do_simulate=do_simulate, do_lint=do_lint, do_coverage=do_coverage, 34 | opt_waves=opt_waves, opt_mems=opt_mems, opt_tasks=opt_tasks, opt_funcs=opt_funcs, 35 | top_rtl=top_rtl, top_sim=top_sim, top_cov=top_cov, 36 | out_dir=out_dir, rtl_list=rtl_list, lib_list=lib_list, sim_list=sim_list, dir_list=dir_list) 37 | 38 | 39 | -------------------------------------------------------------------------------- /sim/ctrl/nc/run/test.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import sys, os, copy 4 | 5 | sys.path.append("../../../common/") 6 | import nc_run 7 | import lst_parse 8 | import logger 9 | 10 | 11 | # defines 12 | debug = True 13 | do_compile = True 14 | do_elaborate = True 15 | do_simulate = True 16 | do_lint = False 17 | do_coverage = False 18 | opt_waves = True 19 | opt_mems = True 20 | opt_tasks = False 21 | opt_funcs = False 22 | top_rtl = "ctrl_top" 23 | top_sim = "ctrl_tb" 24 | top_cov = "ctrl_top" 25 | out_dir = "../out" 26 | rtl_list = "rtl.lst" 27 | lib_list = "lib.lst" 28 | sim_list = "sim.lst" 29 | dir_list = "dir.lst" 30 | 31 | # run test 32 | nc_run.nc_run(debug=debug, 33 | do_compile=do_compile, do_elaborate=do_elaborate, do_simulate=do_simulate, do_lint=do_lint, do_coverage=do_coverage, 34 | opt_waves=opt_waves, opt_mems=opt_mems, opt_tasks=opt_tasks, opt_funcs=opt_funcs, 35 | top_rtl=top_rtl, top_sim=top_sim, top_cov=top_cov, 36 | out_dir=out_dir, rtl_list=rtl_list, lib_list=lib_list, sim_list=sim_list, dir_list=dir_list) 37 | 38 | 39 | -------------------------------------------------------------------------------- /rtl/chameleonv2/amiga_clk_altera.cmp: -------------------------------------------------------------------------------- 1 | --Copyright (C) 2018 Intel Corporation. All rights reserved. 2 | --Your use of Intel Corporation's design tools, logic functions 3 | --and other software and tools, and its AMPP partner logic 4 | --functions, and any output files from any of the foregoing 5 | --(including device programming or simulation files), and any 6 | --associated documentation or information are expressly subject 7 | --to the terms and conditions of the Intel Program License 8 | --Subscription Agreement, the Intel Quartus Prime License Agreement, 9 | --the Intel FPGA IP License Agreement, or other applicable license 10 | --agreement, including, without limitation, that your use is for 11 | --the sole purpose of programming logic devices manufactured by 12 | --Intel and sold by Intel or its authorized distributors. Please 13 | --refer to the applicable agreement for further details. 14 | 15 | 16 | component amiga_clk_altera 17 | PORT 18 | ( 19 | areset : IN STD_LOGIC := '0'; 20 | inclk0 : IN STD_LOGIC := '0'; 21 | c0 : OUT STD_LOGIC ; 22 | c1 : OUT STD_LOGIC ; 23 | c2 : OUT STD_LOGIC ; 24 | locked : OUT STD_LOGIC 25 | ); 26 | end component; 27 | -------------------------------------------------------------------------------- /sim/sram/nc/run/test.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import sys, os, copy 4 | 5 | sys.path.append("../../../common/") 6 | import nc_run 7 | import lst_parse 8 | import logger 9 | 10 | 11 | # defines 12 | debug = True 13 | do_compile = True 14 | do_elaborate = True 15 | do_simulate = True 16 | do_lint = False 17 | do_coverage = False 18 | opt_waves = True 19 | opt_mems = False 20 | opt_tasks = True 21 | opt_funcs = True 22 | top_rtl = "qmem_sram" 23 | top_sim = "qmem_sram_tb" 24 | top_cov = "qmem_sram" 25 | out_dir = "../out" 26 | rtl_list = "rtl.lst" 27 | lib_list = "lib.lst" 28 | sim_list = "sim.lst" 29 | dir_list = "dir.lst" 30 | 31 | # run test 32 | nc_run.nc_run(debug=debug, 33 | do_compile=do_compile, do_elaborate=do_elaborate, do_simulate=do_simulate, do_lint=do_lint, do_coverage=do_coverage, 34 | opt_waves=opt_waves, opt_mems=opt_mems, opt_tasks=opt_tasks, opt_funcs=opt_funcs, 35 | top_rtl=top_rtl, top_sim=top_sim, top_cov=top_cov, 36 | out_dir=out_dir, rtl_list=rtl_list, lib_list=lib_list, sim_list=sim_list, dir_list=dir_list) 37 | 38 | 39 | -------------------------------------------------------------------------------- /sim/tg68/nc/run/test.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import sys, os, copy 4 | 5 | sys.path.append("../../../common/") 6 | import nc_run 7 | import lst_parse 8 | import logger 9 | 10 | 11 | # defines 12 | debug = True 13 | do_compile = True 14 | do_elaborate = True 15 | do_simulate = True 16 | do_lint = False 17 | do_coverage = False 18 | opt_waves = True 19 | opt_mems = True 20 | opt_tasks = False 21 | opt_funcs = False 22 | top_rtl = "TG68_fast" 23 | top_sim = "tg68_fast_tb" 24 | top_cov = "TG68_fast" 25 | out_dir = "../out" 26 | rtl_list = "rtl.lst" 27 | lib_list = "lib.lst" 28 | sim_list = "sim.lst" 29 | dir_list = "dir.lst" 30 | 31 | # run test 32 | nc_run.nc_run(debug=debug, 33 | do_compile=do_compile, do_elaborate=do_elaborate, do_simulate=do_simulate, do_lint=do_lint, do_coverage=do_coverage, 34 | opt_waves=opt_waves, opt_mems=opt_mems, opt_tasks=opt_tasks, opt_funcs=opt_funcs, 35 | top_rtl=top_rtl, top_sim=top_sim, top_cov=top_cov, 36 | out_dir=out_dir, rtl_list=rtl_list, lib_list=lib_list, sim_list=sim_list, dir_list=dir_list) 37 | 38 | 39 | -------------------------------------------------------------------------------- /sim/tg68k/nc/run/test.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import sys, os, copy 4 | 5 | sys.path.append("../../../common/") 6 | import nc_run 7 | import lst_parse 8 | import logger 9 | 10 | 11 | # defines 12 | debug = True 13 | do_compile = True 14 | do_elaborate = True 15 | do_simulate = True 16 | do_lint = False 17 | do_coverage = False 18 | opt_waves = True 19 | opt_mems = True 20 | opt_tasks = False 21 | opt_funcs = False 22 | top_rtl = "TG68k_fast" 23 | top_sim = "tg68k_fast_tb" 24 | top_cov = "TG68k_fast" 25 | out_dir = "../out" 26 | rtl_list = "rtl.lst" 27 | lib_list = "lib.lst" 28 | sim_list = "sim.lst" 29 | dir_list = "dir.lst" 30 | 31 | # run test 32 | nc_run.nc_run(debug=debug, 33 | do_compile=do_compile, do_elaborate=do_elaborate, do_simulate=do_simulate, do_lint=do_lint, do_coverage=do_coverage, 34 | opt_waves=opt_waves, opt_mems=opt_mems, opt_tasks=opt_tasks, opt_funcs=opt_funcs, 35 | top_rtl=top_rtl, top_sim=top_sim, top_cov=top_cov, 36 | out_dir=out_dir, rtl_list=rtl_list, lib_list=lib_list, sim_list=sim_list, dir_list=dir_list) 37 | 38 | 39 | -------------------------------------------------------------------------------- /amiga_sw/rtg/P96ModeInfo.i: -------------------------------------------------------------------------------- 1 | ; 2 | ; WWW.FPGAArcade.COM 3 | ; 4 | ; REPLAY Retro Gaming Platform 5 | ; No Emulation No Compromise 6 | ; 7 | ; Replay.card - P96 RTG driver for the REPLAY Amiga core 8 | ; Copyright (C) FPGAArcade community 9 | ; 10 | ; Contributors : Jakub Bednarski, Mike Johnson, Jim Drew, Erik Hemming, Nicolas Hamel 11 | ; 12 | ; This software is licensed under LPGLv2.1 ; see LICENSE file 13 | ; 14 | ; 15 | 16 | PSSO_ModeInfo_OpenCount = 14 17 | PSSO_ModeInfo_Active = 16 18 | PSSO_ModeInfo_Width = 18 19 | PSSO_ModeInfo_Height = 20 20 | PSSO_ModeInfo_Depth = 22 21 | PSSO_ModeInfo_Flags = 23 22 | PSSO_ModeInfo_HorTotal = 24 23 | PSSO_ModeInfo_HorBlankSize = 26 24 | PSSO_ModeInfo_HorSyncStart = 28 25 | PSSO_ModeInfo_HorSyncSize = 30 26 | PSSO_ModeInfo_HorSyncSkew = 32 27 | PSSO_ModeInfo_HorEnableSkew = 33 28 | PSSO_ModeInfo_VerTotal = 34 29 | PSSO_ModeInfo_VerBlankSize = 36 30 | PSSO_ModeInfo_VerSyncStart = 38 31 | PSSO_ModeInfo_VerSyncSize = 40 32 | PSSO_ModeInfo_first_union = 42 33 | PSSO_ModeInfo_second_union = 43 34 | PSSO_ModeInfo_PixelClock = 44 35 | PSSO_ModeInfo_sizeof = 48 36 | 37 | GMB_HPOLARITY = 3 38 | GMF_HPOLARITY = 8 39 | GMB_VPOLARITY = 4 40 | GMF_VPOLARITY = 16 41 | -------------------------------------------------------------------------------- /sim/minimig/nc/run/test.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import sys, os, copy 4 | 5 | sys.path.append("../../../common/") 6 | import nc_run 7 | import lst_parse 8 | import logger 9 | 10 | 11 | # defines 12 | debug = True 13 | do_compile = True 14 | do_elaborate = True 15 | do_simulate = True 16 | do_lint = False 17 | do_coverage = False 18 | opt_waves = True 19 | opt_mems = False 20 | opt_tasks = False 21 | opt_funcs = False 22 | top_rtl = "minimig_de1_top" 23 | top_sim = "soc_tb" 24 | top_cov = "minimig_de1_top" 25 | out_dir = "../out" 26 | rtl_list = "rtl.lst" 27 | lib_list = "lib.lst" 28 | sim_list = "sim.lst" 29 | dir_list = "dir.lst" 30 | 31 | # run test 32 | nc_run.nc_run(debug=debug, 33 | do_compile=do_compile, do_elaborate=do_elaborate, do_simulate=do_simulate, do_lint=do_lint, do_coverage=do_coverage, 34 | opt_waves=opt_waves, opt_mems=opt_mems, opt_tasks=opt_tasks, opt_funcs=opt_funcs, 35 | top_rtl=top_rtl, top_sim=top_sim, top_cov=top_cov, 36 | out_dir=out_dir, rtl_list=rtl_list, lib_list=lib_list, sim_list=sim_list, dir_list=dir_list) 37 | 38 | 39 | -------------------------------------------------------------------------------- /sim/ps2mouse/nc/run/test.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import sys, os, copy 4 | 5 | sys.path.append("../../../common/") 6 | import nc_run 7 | import lst_parse 8 | import logger 9 | 10 | 11 | # defines 12 | debug = True 13 | do_compile = True 14 | do_elaborate = True 15 | do_simulate = True 16 | do_lint = False 17 | do_coverage = False 18 | opt_waves = True 19 | opt_mems = True 20 | opt_tasks = True 21 | opt_funcs = True 22 | top_rtl = "ps2mouse_ctrl" 23 | top_sim = "ps2mouse_tb" 24 | top_cov = "ps2mouse_ctrl" 25 | out_dir = "../out" 26 | rtl_list = "rtl.lst" 27 | lib_list = "lib.lst" 28 | sim_list = "sim.lst" 29 | dir_list = "dir.lst" 30 | 31 | # run test 32 | nc_run.nc_run(debug=debug, 33 | do_compile=do_compile, do_elaborate=do_elaborate, do_simulate=do_simulate, do_lint=do_lint, do_coverage=do_coverage, 34 | opt_waves=opt_waves, opt_mems=opt_mems, opt_tasks=opt_tasks, opt_funcs=opt_funcs, 35 | top_rtl=top_rtl, top_sim=top_sim, top_cov=top_cov, 36 | out_dir=out_dir, rtl_list=rtl_list, lib_list=lib_list, sim_list=sim_list, dir_list=dir_list) 37 | 38 | 39 | -------------------------------------------------------------------------------- /sim/minimig_cpu/nc/run/test.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import sys, os, copy 4 | 5 | sys.path.append("../../../common/") 6 | import nc_run 7 | import lst_parse 8 | import logger 9 | 10 | 11 | # defines 12 | debug = True 13 | do_compile = True 14 | do_elaborate = True 15 | do_simulate = True 16 | do_lint = False 17 | do_coverage = False 18 | opt_waves = True 19 | opt_mems = False 20 | opt_tasks = False 21 | opt_funcs = False 22 | top_rtl = "minimig_de1_top" 23 | top_sim = "soc_tb" 24 | top_cov = "minimig_de1_top" 25 | out_dir = "../out" 26 | rtl_list = "rtl.lst" 27 | lib_list = "lib.lst" 28 | sim_list = "sim.lst" 29 | dir_list = "dir.lst" 30 | 31 | # run test 32 | nc_run.nc_run(debug=debug, 33 | do_compile=do_compile, do_elaborate=do_elaborate, do_simulate=do_simulate, do_lint=do_lint, do_coverage=do_coverage, 34 | opt_waves=opt_waves, opt_mems=opt_mems, opt_tasks=opt_tasks, opt_funcs=opt_funcs, 35 | top_rtl=top_rtl, top_sim=top_sim, top_cov=top_cov, 36 | out_dir=out_dir, rtl_list=rtl_list, lib_list=lib_list, sim_list=sim_list, dir_list=dir_list) 37 | 38 | 39 | -------------------------------------------------------------------------------- /rtl/minimig/agnus_blitter_fill.v: -------------------------------------------------------------------------------- 1 | //Blitter fill logic 2 | //The fill logic module has 2 modes,inclusive fill and exclusive fill. 3 | //Both share the same xor operation but in inclusive fill mode, 4 | //the output of the xor-filler is or-ed with the input data. 5 | 6 | 7 | module agnus_blitter_fill 8 | ( 9 | input ife, //inclusive fill enable 10 | input efe, //exclusive fill enable 11 | input fci, //fill carry input 12 | output fco, //fill carry output 13 | input [15:0]in, //data in 14 | output reg [15:0]out //data out 15 | ); 16 | 17 | //local signals 18 | reg [15:0]carry; 19 | 20 | //generate all fill carry's 21 | integer j; 22 | always @(fci or in[0])//least significant bit 23 | carry[0] = fci ^ in[0]; 24 | always @(in or carry)//rest of bits 25 | for (j=1;j<=15;j=j+1) 26 | carry[j] = carry[j-1] ^ in[j]; 27 | 28 | //fill carry output 29 | assign fco = carry[15]; 30 | 31 | //fill data output 32 | always @(ife or efe or carry or in) 33 | if (efe)//exclusive fill 34 | out[15:0] = carry[15:0]; 35 | else if (ife)//inclusive fill 36 | out[15:0] = carry[15:0] | in[15:0]; 37 | else//bypass,no filling 38 | out[15:0] = in[15:0]; 39 | 40 | 41 | endmodule 42 | 43 | -------------------------------------------------------------------------------- /sim/cpu_cache_sdram/nc/run/test.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import sys, os, copy 4 | 5 | sys.path.append("../../../common/") 6 | import nc_run 7 | import lst_parse 8 | import logger 9 | 10 | 11 | # defines 12 | debug = True 13 | do_compile = True 14 | do_elaborate = True 15 | do_simulate = True 16 | do_lint = False 17 | do_coverage = False 18 | opt_waves = True 19 | opt_mems = True 20 | opt_tasks = True 21 | opt_funcs = True 22 | top_rtl = "cpu_cache_sdram_tb" 23 | top_sim = "cpu_cache_sdram_tb" 24 | top_cov = "cpu_cache_sdram_tb" 25 | out_dir = "../out" 26 | rtl_list = "rtl.lst" 27 | lib_list = "lib.lst" 28 | sim_list = "sim.lst" 29 | dir_list = "dir.lst" 30 | 31 | # run test 32 | nc_run.nc_run(debug=debug, 33 | do_compile=do_compile, do_elaborate=do_elaborate, do_simulate=do_simulate, do_lint=do_lint, do_coverage=do_coverage, 34 | opt_waves=opt_waves, opt_mems=opt_mems, opt_tasks=opt_tasks, opt_funcs=opt_funcs, 35 | top_rtl=top_rtl, top_sim=top_sim, top_cov=top_cov, 36 | out_dir=out_dir, rtl_list=rtl_list, lib_list=lib_list, sim_list=sim_list, dir_list=dir_list) 37 | 38 | 39 | -------------------------------------------------------------------------------- /doc/amiga/ahi/Aros_Developer_AHIDrivers - Wikibooks, open books for an open world_files/index(15).php: -------------------------------------------------------------------------------- 1 | (function($) { 2 | if ( $.inArray( mw.config.get( 'wgAction' ), ['edit','submit']) === -1 || $.fn.wikiEditor === undefined ) { 3 | return; 4 | } 5 | 6 | if ( window.mwCustomEditButtons === undefined ) { 7 | window.mwCustomEditButtons = []; 8 | } 9 | 10 | $(document).ready( function() { 11 | var $tb = $('#wpTextbox1'); 12 | $.each( mwCustomEditButtons, function(i) { 13 | var wikiOptions = { section: 'main', group: 'insert', tools: {}}, tool = this; 14 | wikiOptions.tools[ tool.name || 'mw-custom-edit-button-' + (i+1) ] = { 15 | label: tool.speedTip, 16 | type: 'button', 17 | icon: tool.imageFile, 18 | action: { 19 | type: 'callback', 20 | execute: function() { 21 | $tb.textSelection( 'encapsulateSelection', { 22 | pre: tool.tagOpen || '', 23 | peri: tool.sampleText || '', 24 | post: tool.tagClose || '' 25 | }); 26 | if ( $.isFunction( tool.callbackFunct ) ) { 27 | tool.callbackFunct.call( window ); 28 | } 29 | } 30 | } 31 | } 32 | $tb.wikiEditor( 'addToToolbar', wikiOptions ); 33 | }); 34 | }); 35 | })( jQuery ); -------------------------------------------------------------------------------- /doc/amiga/ahi/Aros_Developer_AHIDrivers - Wikibooks, open books for an open world_files/index(14).php: -------------------------------------------------------------------------------- 1 | $(document).ready( function() { 2 | var ns = mw.config.get( 'wgNamespaceNumber' ), 3 | path = '//commons.wikimedia.org/wiki/', 4 | file_ns = mw.config.get( 'wgFormattedNamespaces' )['6'], 5 | re = RegExp('^\/\/upload\.wikimedia\.org\/wikipedia\/commons\/'); 6 | 7 | if ( ns === 6 && !$('#ca-history').length && $('.sharedUploadNotice').length ) { 8 | var title = mw.util.wikiUrlencode( mw.config.get( 'wgTitle' ) ), 9 | lang = mw.config.get( 'wgUserLanguage' ); 10 | 11 | // Discussion link 12 | $('#ca-talk').filter('.new').find('a').attr('href', function(i, val) { 13 | return path + 'File_talk:' + title + '?uselang=' + lang; 14 | }); 15 | 16 | // Edit link 17 | $( document.getElementById('ca-edit') || document.getElementById('ca-viewsource') ) 18 | .find('a') 19 | .attr('href', function(i, val) { 20 | return path + 'File:' + title + '?uselang=' + lang + '&action=edit'; 21 | }); 22 | } 23 | 24 | $('a.image').attr('href', function(i, val) { 25 | if ( re.test( $(this).find('img').attr('src') ) ) { 26 | return val.replace('/wiki/' + file_ns + ':', path + 'File:'); 27 | } 28 | }); 29 | }); -------------------------------------------------------------------------------- /rtl/soc/minimig_defines.vh: -------------------------------------------------------------------------------- 1 | /* minimig_defines.v */ 2 | /* 2012, rok.krajnc@gmail.com */ 3 | 4 | // virtual 5 | `ifdef MINIMIG_VIRTUAL 6 | `define MINIMIG_TOPLEVEL_DITHER // Use our own dithering since target boards have 4 or 5 bits per gun 7 | `define MINIMIG_EXTRA_KEYBOARD 8 | `define MINIMIG_ALTERA 9 | `define MINIMIG_CYCLONE3 10 | `define MINIMIG_VIDEO_FILTER 11 | `define MINIMIG_PARALLEL_AUDIO // Use own sigma-delta for audio 12 | `define MINIMIG_PS2_KEYBOARD 13 | `define MINIMIG_PS2_MOUSE 14 | `define MINIMIG_HOST_DIRECT // The host can access memory directly, so doesn't need to upload over SPI 15 | `endif 16 | 17 | // minimig-de0_nano 18 | `ifdef MINIMIG_DE0_NANO 19 | `define MINIMIG_ALTERA 20 | `define MINIMIG_CYCLONE4 21 | `define MINIMIG_MOR1KX 22 | //`define MINIMIG_VIDEO_FILTER 23 | `define MINIMIG_SERIAL_AUDIO 24 | `define MINIMIG_PS2_KEYBOARD 25 | `define MINIMIG_PS2_MOUSE 26 | `endif 27 | 28 | // mist 29 | `ifdef MINIMIG_MIST 30 | `define MINIMIG_TOPLEVEL_OSD // mix the OSD to the video in the toplevel 31 | `define MINIMIG_ALTERA_PLL_RECONFIG 32 | `define MINIMIG_CYCLONE3 33 | `define MINIMIG_VIDEO_FILTER 34 | `define MINIMIG_PARALLEL_AUDIO // Use own sigma-delta for audio 35 | // `define MINIMIG_SERIAL_AUDIO 36 | `endif 37 | 38 | -------------------------------------------------------------------------------- /fw/ctrl_boot_832/rom_prologue.vhd: -------------------------------------------------------------------------------- 1 | library ieee; 2 | use ieee.std_logic_1164.all; 3 | use ieee.numeric_std.all; 4 | 5 | entity soc_firmware is 6 | generic 7 | ( 8 | maxAddrBitBRAM : integer := 15 -- Specify your actual ROM size to save LEs and unnecessary block RAM usage. 9 | ); 10 | port ( 11 | clk : in std_logic; 12 | reset_n : in std_logic := '1'; 13 | addr : in std_logic_vector(maxAddrBitBRAM-2 downto 0); 14 | q : out std_logic_vector(31 downto 0); 15 | -- Allow writes - defaults supplied to simplify projects that don't need to write. 16 | d : in std_logic_vector(31 downto 0) := X"00000000"; 17 | we : in std_logic := '0'; 18 | bytesel : in std_logic_vector(3 downto 0) := "1111"; 19 | -- Second port 20 | addr2 : in std_logic_vector(maxAddrBitBRAM-2 downto 0) := (others=>'0'); 21 | q2 : out std_logic_vector(31 downto 0); 22 | d2 : in std_logic_vector(31 downto 0) := X"00000000"; 23 | we2 : in std_logic := '0'; 24 | bytesel2 : in std_logic_vector(3 downto 0) := "1111" 25 | ); 26 | end soc_firmware; 27 | 28 | architecture arch of soc_firmware is 29 | 30 | type word_t is array (0 to 3) of std_logic_vector(7 downto 0); 31 | type ram_type is array (0 to 2 ** (maxAddrBitBRAM-1) - 1) of word_t; 32 | 33 | signal ram : ram_type := 34 | ( 35 | -------------------------------------------------------------------------------- /doc/amiga/ahi/Aros_Developer_AHIDrivers - Wikibooks, open books for an open world_files/index(6).php: -------------------------------------------------------------------------------- 1 | /* Per-book JavaScript. 2 | * Maintained by [[User:Darklama]] 3 | * Use book-specific stylesheet and JavaScript. 4 | * You can ask an administrator to add or update a global book specific Stylesheet or JavaScript. 5 | */ 6 | 7 | (function( mw ) { 8 | var ns = mw.config.get( 'wgNameSpaceNumber' ), 9 | user = mw.config.get( 'wgUserName', false ), 10 | book = mw.config.get( 'wgBookName' ); 11 | 12 | if ( ns === 8 || mw.config.get( 'wgIsArticle' ) === false ) { 13 | return; /* Disable in MediaWiki space and when not viewing book material */ 14 | } else if ( ns === 2 ) { 15 | /* Find correct book name in User space */ 16 | book = mw.config.get( 'wgPageName' ).split( '/', 2 )[1]; 17 | 18 | if ( book === 'per_book' ) { 19 | return; /* Disable within reserved spaces */ 20 | } 21 | } 22 | 23 | /* global styling */ 24 | importStylesheet( 'MediaWiki:Perbook/' + book + '.css' ); 25 | importScript( 'MediaWiki:Perbook/' + book + '.js' ); 26 | 27 | /* user styling */ 28 | if ( user ) { 29 | importStylesheet( 'User:' + user + '/per_book/' + book + '.css' ); 30 | importScript( 'User:' + user + '/per_book/' + book + '.js' ); 31 | } 32 | })( mediaWiki ); -------------------------------------------------------------------------------- /rtl/sdram/dpram_inf_be_1024x16.v: -------------------------------------------------------------------------------- 1 | // dpram_inf_be_1024x16.v 2 | // 2015, rok.krajnc@gmail.com 3 | // inferrable two-port memory with byte-enables 4 | 5 | module dpram_inf_be_1024x16 ( 6 | input wire clock, 7 | input wire wren_a, 8 | input wire [ 2-1:0] byteena_a, 9 | input wire [ 10-1:0] address_a, 10 | input wire [ 16-1:0] data_a, 11 | output reg [ 16-1:0] q_a, 12 | input wire wren_b, 13 | input wire [ 2-1:0] byteena_b, 14 | input wire [ 10-1:0] address_b, 15 | input wire [ 16-1:0] data_b, 16 | output reg [ 16-1:0] q_b 17 | ); 18 | 19 | // memory 20 | reg [8-1:0] mem0 [0:1024-1]; 21 | reg [8-1:0] mem1 [0:1024-1]; 22 | 23 | // port a 24 | always @ (posedge clock) begin 25 | if (wren_a && byteena_a[0]) mem0[address_a] <= #1 data_a[ 8-1:0]; 26 | if (wren_a && byteena_a[1]) mem1[address_a] <= #1 data_a[16-1:8]; 27 | q_a[ 8-1:0] <= #1 mem0[address_a]; 28 | q_a[16-1:8] <= #1 mem1[address_a]; 29 | end 30 | 31 | // port b 32 | always @ (posedge clock) begin 33 | if (wren_b && byteena_b[0]) mem0[address_b] <= #1 data_b[ 8-1:0]; 34 | if (wren_b && byteena_b[1]) mem1[address_b] <= #1 data_b[16-1:8]; 35 | q_b[ 8-1:0] <= #1 mem0[address_b]; 36 | q_b[16-1:8] <= #1 mem1[address_b]; 37 | end 38 | 39 | endmodule 40 | 41 | -------------------------------------------------------------------------------- /rtl/sdram/dpram_inf_be_2048x16.v: -------------------------------------------------------------------------------- 1 | // dpram_inf_be_2048x16.v 2 | // 2015, rok.krajnc@gmail.com 3 | // inferrable two-port memory with byte-enables 4 | 5 | module dpram_inf_be_2048x16 ( 6 | input wire clock, 7 | input wire wren_a, 8 | input wire [ 2-1:0] byteena_a, 9 | input wire [ 11-1:0] address_a, 10 | input wire [ 16-1:0] data_a, 11 | output reg [ 16-1:0] q_a, 12 | input wire wren_b, 13 | input wire [ 2-1:0] byteena_b, 14 | input wire [ 11-1:0] address_b, 15 | input wire [ 16-1:0] data_b, 16 | output reg [ 16-1:0] q_b 17 | ); 18 | 19 | // memory 20 | reg [8-1:0] mem0 [0:2048-1]; 21 | reg [8-1:0] mem1 [0:2048-1]; 22 | 23 | // port a 24 | always @ (posedge clock) begin 25 | if (wren_a && byteena_a[0]) mem0[address_a] <= #1 data_a[ 8-1:0]; 26 | if (wren_a && byteena_a[1]) mem1[address_a] <= #1 data_a[16-1:8]; 27 | q_a[ 8-1:0] <= #1 mem0[address_a]; 28 | q_a[16-1:8] <= #1 mem1[address_a]; 29 | end 30 | 31 | // port b 32 | always @ (posedge clock) begin 33 | if (wren_b && byteena_b[0]) mem0[address_b] <= #1 data_b[ 8-1:0]; 34 | if (wren_b && byteena_b[1]) mem1[address_b] <= #1 data_b[16-1:8]; 35 | q_b[ 8-1:0] <= #1 mem0[address_b]; 36 | q_b[16-1:8] <= #1 mem1[address_b]; 37 | end 38 | 39 | endmodule 40 | 41 | -------------------------------------------------------------------------------- /lib/io/generic_output.v: -------------------------------------------------------------------------------- 1 | /********************************************/ 2 | /* generic_output.v */ 3 | /* A generic implementation of outputs */ 4 | /* (LEDs, ...) */ 5 | /* */ 6 | /* 2012, rok.krajnc@gmail.com */ 7 | /********************************************/ 8 | 9 | 10 | module generic_output #( 11 | parameter OW = 1, // output width 12 | parameter DS = 1'b0, // default (off) state 13 | parameter DBG = 0 // debug output 14 | )( 15 | output wire [ OW-1:0] i 16 | ); 17 | 18 | 19 | 20 | //////////////////////////////////////// 21 | // logic // 22 | //////////////////////////////////////// 23 | 24 | reg [ OW-1:0] state_old = {OW{DS}}; 25 | 26 | always @ (i) begin 27 | if (i != state_old) begin 28 | if (DBG) $display ("BENCH : %M : %t : changing state from [%b] to [%b].", $time, state_old, i); 29 | state_old = #1 i; 30 | end 31 | end 32 | 33 | 34 | 35 | //////////////////////////////////////// 36 | // tasks // 37 | //////////////////////////////////////// 38 | 39 | //// read //// 40 | task read; 41 | output [ OW-1:0] data; 42 | begin 43 | data = state_old; 44 | end 45 | endtask 46 | 47 | 48 | 49 | endmodule 50 | 51 | -------------------------------------------------------------------------------- /amiga_sw/WheelDriver/Server.c: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | 4 | #include "WheelDriver.h" 5 | 6 | 7 | extern void AddLongAtomic(long *a,long v); 8 | 9 | 10 | void WheelDriver_Server(struct WheelDriverContext *wdc) 11 | { 12 | static long old_wheel = 0; 13 | long new_wheel = 0; 14 | long sum; 15 | int overflow = 0; 16 | 17 | 18 | /* Read wheel events, middle and fourth buttons from hardware here. */ 19 | new_wheel = *((volatile long *)(0xdff1f0)); 20 | sum = old_wheel + new_wheel; 21 | if (new_wheel < 0 ? sum > old_wheel : sum < old_wheel) overflow = 1; 22 | 23 | if (new_wheel > old_wheel) AddLongAtomic(&wdc->WheelCounter,-1); 24 | if (new_wheel < old_wheel) AddLongAtomic(&wdc->WheelCounter,1); 25 | 26 | old_wheel = new_wheel; 27 | 28 | /* 29 | if( middle button is pressed ) 30 | wdc->ButtonStatus|=1; should atomic; will be cleared with an "and" in the main task. 31 | if( fourth button is pressed ) 32 | wdc->ButtonStatus|=2; 33 | 34 | if( scroll up - or is it down? I can't remember now! ) 35 | AddLongAtomic(&wdc->WheelCounter,1); 36 | if( scroll the other way! ) 37 | AddLongAtomic(&wdc->WheelCounter,-1); 38 | */ 39 | 40 | if((wdc->ButtonStatus!=wdc->PreviousButtons)||(wdc->WheelCounter)) /* Is there anything we need to act upon? */ 41 | Signal(wdc->SigTask,wdc->Signals); 42 | } 43 | 44 | -------------------------------------------------------------------------------- /rtl/sdram/sdram.qip: -------------------------------------------------------------------------------- 1 | set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) sdram_ctrl.v] 2 | set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) cpu_cache_new.v] 3 | set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) cpu_cache.v] 4 | set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) dpram_inf_256x32.v] 5 | set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) dpram_inf_be_2048x16.v] 6 | set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) dpram_inf_be_1024x32.v] 7 | set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) dpram_256x32.v] 8 | set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) dpram_be_1024x16.v] 9 | set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) dpram_be_1024x32.v] 10 | set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) dpram_be_2048x16.v] 11 | set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) tpram_be_512x16.v] 12 | set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) tpram_inf_128x32.v] 13 | set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) tpram_inf_be_512x16.v] 14 | set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) tpram_128x32.v] 15 | 16 | -------------------------------------------------------------------------------- /fw/ctrl_boot_832/spi.h: -------------------------------------------------------------------------------- 1 | #ifndef SPI_H 2 | #define SPI_H 3 | 4 | #define SPIBASE 0xffffffe0 5 | #define HW_SPI(x) *(volatile unsigned char *)(SPIBASE+x) 6 | 7 | /* SPI registers */ 8 | #define HW_SPI_CS 0x07 9 | #define HW_SPI_DATA 0x03 /* Blocks on both reads and writes, making BUSY signal redundant. */ 10 | #define HW_SPI_SPEED 0x0b 11 | 12 | #define EnableOsd() HW_SPI(HW_SPI_CS)=0x20 13 | #define DisableOsd() HW_SPI(HW_SPI_CS)=0x21 14 | 15 | #define EnableCard() HW_SPI(HW_SPI_CS)=0x02 16 | #define DisableCard() HW_SPI(HW_SPI_CS)=0x03 17 | 18 | #define SPI_slow() HW_SPI(HW_SPI_SPEED)=0xef 19 | #define SPI_fast() HW_SPI(HW_SPI_SPEED)=0x07 20 | 21 | #define OSD_CMD_WR 0x1c 22 | 23 | #define OSD_CMD_RST 0x08 24 | 25 | #define SPI_RST_USR 0x1 26 | #define SPI_RST_CPU 0x2 27 | #define SPI_CPU_HLT 0x4 28 | 29 | 30 | #define OSD_CMD_CHIP 0x04 31 | 32 | #define CONFIG_TURBO 1 33 | #define CONFIG_NTSC 2 34 | #define CONFIG_A1000 4 35 | #define CONFIG_ECS 8 36 | #define CONFIG_AGA 16 37 | 38 | #define PLATFORM (*(volatile unsigned short *)0xffffffc2) 39 | #define PLATFORM_SCANDOUBLER 0 40 | 41 | 42 | 43 | int spi_init(); 44 | int sd_read_sector(unsigned long lba,unsigned char *buf); 45 | int sd_write_sector(unsigned long lba,unsigned char *buf); // FIXME - stub 46 | 47 | #endif 48 | -------------------------------------------------------------------------------- /amiga_sw/rtg/README: -------------------------------------------------------------------------------- 1 | 2 | Experimental P96 driver for the Minimig FPGA core. 3 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4 | By Alastair M. Robinson 5 | Huge thanks to the Replay team for releasing their own 6 | P96 driver as open-source - this driver is based heavily 7 | upon their work, and is thus under the same license - LGPL2.1. 8 | 9 | 10 | Installation 11 | ~~~~~~~~~~~~ 12 | 13 | * Install P96 using its installer. You'll be prompted to pick a card 14 | (any card!) - it shouldn't matter which you choose, but I'll 15 | assume for the rest of these instructions that you chose PicassoIV) 16 | 17 | The P96 installer will create a new monitor file in Devs:Monitors 18 | 19 | * Rename the newly-created "PicassoIV" monitor file to "Minimig" 20 | 21 | * Edit the monitor file's tooltypes, changing the BOARDTYPE tooltype 22 | to minimig then save the changes. 23 | 24 | * Copy the minimig.card file to libs:picasso96/ 25 | 26 | * Optionally, copy the Picasso96Settings file to Devs: 27 | (The Picasso96Settings file contains some pre-defined screenmodes 28 | which all work nicely on my Dell U2311H monitor - but may need 29 | tweaking, or just outright fail to work on other monitors.) 30 | 31 | * Reboot, and you should be able to run Picasso96Mode to try out the 32 | various screenmodes, or select them from within applications. 33 | 34 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # MINIMIG-MIST 2 | # top makefile 3 | # 2015, rok.krajnc@gmail.com 4 | # 2020, AMR 5 | 6 | ### boards ### 7 | BOARDS?=mist chameleonv1 chameleonv2 de10_lite de0_nano 8 | 9 | ### release ### 10 | RELEASE?=minimig-mist-test 11 | 12 | ### paths ### 13 | REL_DIR = rel 14 | FW_DIR = fw 15 | FPGA_DIR = fpga 16 | FW_SRC_DIR = $(FW_DIR) 17 | FPGA_SRC_DIR = $(FPGA_DIR) 18 | 19 | # all 20 | all: dirs 21 | @echo Building all ... 22 | @make fw 23 | @make fpga 24 | @echo DONE building all! 25 | 26 | # directories 27 | dirs: Makefile 28 | @echo Creating release dirs $(REL_DIR)/$(RELEASE) ... 29 | @mkdir -p $(REL_DIR) 30 | 31 | 32 | # fw 33 | fw: Makefile dirs 34 | @echo Building firmware in $(FW_SRC_DIR) ... 35 | @$(MAKE) -C $(FW_SRC_DIR) $(BUILD_OPT) 36 | 37 | 38 | # fpga 39 | fpga: Makefile dirs 40 | cd rtl/minimig; \ 41 | quartus_sh -t ../../tcl/build_id.tcl 42 | @for BOARD in ${BOARDS}; do \ 43 | echo "Building $(FPGA_SRC_DIR)/$$BOARD ..."; \ 44 | make -C fpga/$$BOARD; \ 45 | done 46 | @for BOARD in ${BOARDS}; do \ 47 | grep Design-wide\ TNS fpga/$$BOARD/*.sta.rpt;\ 48 | done 49 | # @$(MAKE) -C $(FPGA_SRC_DIR) $(BUILD_OPT) 50 | # @cp $(FPGA_BIN_FILES) $(FPGA_REL_DIR)/ 51 | 52 | 53 | # clean 54 | clean: 55 | @echo Clearing release dir ... 56 | @$(MAKE) -C $(FW_SRC_DIR) clean 57 | @$(MAKE) -C $(FPGA_SRC_DIR) clean 58 | 59 | -------------------------------------------------------------------------------- /fpga/chameleonv2/MinimigAGA_TC64V2.qpf: -------------------------------------------------------------------------------- 1 | # -------------------------------------------------------------------------- # 2 | # 3 | # Copyright (C) 1991-2009 Altera Corporation 4 | # Your use of Altera Corporation's design tools, logic functions 5 | # and other software and tools, and its AMPP partner logic 6 | # functions, and any output files from any of the foregoing 7 | # (including device programming or simulation files), and any 8 | # associated documentation or information are expressly subject 9 | # to the terms and conditions of the Altera Program License 10 | # Subscription Agreement, Altera MegaCore Function License 11 | # Agreement, or other applicable license agreement, including, 12 | # without limitation, that your use is for the sole purpose of 13 | # programming logic devices manufactured by Altera and sold by 14 | # Altera or its authorized distributors. Please refer to the 15 | # applicable agreement for further details. 16 | # 17 | # -------------------------------------------------------------------------- # 18 | # 19 | # Quartus II 20 | # Version 9.0 Build 184 04/29/2009 Service Pack 1 SJ Web Edition 21 | # Date created = 20:32:22 April 24, 2011 22 | # 23 | # -------------------------------------------------------------------------- # 24 | 25 | QUARTUS_VERSION = "9.0" 26 | DATE = "20:32:22 April 24, 2011" 27 | 28 | # Revisions 29 | 30 | PROJECT_REVISION = "MinimigAGA_TC64V2" 31 | -------------------------------------------------------------------------------- /fpga/mist/minimig_mist.qpf: -------------------------------------------------------------------------------- 1 | # -------------------------------------------------------------------------- # 2 | # 3 | # Copyright (C) 1991-2013 Altera Corporation 4 | # Your use of Altera Corporation's design tools, logic functions 5 | # and other software and tools, and its AMPP partner logic 6 | # functions, and any output files from any of the foregoing 7 | # (including device programming or simulation files), and any 8 | # associated documentation or information are expressly subject 9 | # to the terms and conditions of the Altera Program License 10 | # Subscription Agreement, Altera MegaCore Function License 11 | # Agreement, or other applicable license agreement, including, 12 | # without limitation, that your use is for the sole purpose of 13 | # programming logic devices manufactured by Altera and sold by 14 | # Altera or its authorized distributors. Please refer to the 15 | # applicable agreement for further details. 16 | # 17 | # -------------------------------------------------------------------------- # 18 | # 19 | # Quartus II 64-Bit 20 | # Version 13.0.1 Build 232 06/12/2013 Service Pack 1 SJ Web Edition 21 | # Date created = 20:05:12 September 12, 2020 22 | # 23 | # -------------------------------------------------------------------------- # 24 | 25 | QUARTUS_VERSION = "13.0" 26 | DATE = "20:05:12 September 12, 2020" 27 | 28 | # Revisions 29 | 30 | PROJECT_REVISION = "minimig_mist" 31 | -------------------------------------------------------------------------------- /doc/amiga/ahi/Aros_Developer_AHIDrivers - Wikibooks, open books for an open world_files/index(12).php: -------------------------------------------------------------------------------- 1 | $.fn.slideshow = ( function() { 2 | return this.each( function() { 3 | var $ss = $(this), $sl = $ss.children( '.slide' ), $actions; 4 | 5 | if ( $sl.length < 2 ) { 6 | return; 7 | } 8 | 9 | $sl.slice(1).hide(); 10 | $actions = $('
    '); 11 | $ss.data( 'slides', { 'at': 0, 'total': $sl.length }).append( $actions ).click( function(e) { 12 | var $where = $( e.target ), $ss, $sl, data; 13 | 14 | if ( $where.is( '.slide-prev' ) ) { 15 | e.stopPropagation(); 16 | $ss = $(this); $sl = $ss.children( '.slide' ); data = $ss.data( 'slides' ); 17 | if ( data.at > 0 ) { 18 | --data.at; 19 | $sl.eq( data.at + 1).fadeOut(1000).end().eq( data.at ).delay(1000).fadeIn(1000); 20 | $ss.data( 'slides', data ); 21 | } 22 | } else if ( $where.is( '.slide-next' ) ) { 23 | e.stopPropagation(); 24 | $ss = $(this); $sl = $ss.children( '.slide' ); data = $ss.data( 'slides' ); 25 | if ( data.at < data.total - 1 ) { 26 | ++data.at; 27 | $sl.eq( data.at - 1).fadeOut(1000).end().eq( data.at ).delay(1000).fadeIn(1000); 28 | $ss.data( 'slides', data ); 29 | } 30 | } 31 | }); 32 | }); 33 | }); 34 | 35 | $(document).ready( function() { $( '.slides' ).slideshow(); } ); -------------------------------------------------------------------------------- /fpga/de10_lite/minimig_de10.qpf: -------------------------------------------------------------------------------- 1 | # -------------------------------------------------------------------------- # 2 | # 3 | # Copyright (C) 1991-2012 Altera Corporation 4 | # Your use of Altera Corporation's design tools, logic functions 5 | # and other software and tools, and its AMPP partner logic 6 | # functions, and any output files from any of the foregoing 7 | # (including device programming or simulation files), and any 8 | # associated documentation or information are expressly subject 9 | # to the terms and conditions of the Altera Program License 10 | # Subscription Agreement, Altera MegaCore Function License 11 | # Agreement, or other applicable license agreement, including, 12 | # without limitation, that your use is for the sole purpose of 13 | # programming logic devices manufactured by Altera and sold by 14 | # Altera or its authorized distributors. Please refer to the 15 | # applicable agreement for further details. 16 | # 17 | # -------------------------------------------------------------------------- # 18 | # 19 | # Quartus II 32-bit 20 | # Version 12.0 Build 232 07/05/2012 Service Pack 1 SJ Web Edition 21 | # Date created = 20:34:50 September 08, 2012 22 | # 23 | # -------------------------------------------------------------------------- # 24 | 25 | QUARTUS_VERSION = "12.0" 26 | DATE = "20:34:50 September 08, 2012" 27 | 28 | # Revisions 29 | 30 | PROJECT_REVISION = "minimig_de10" 31 | -------------------------------------------------------------------------------- /fpga/chameleonv1/MinimigAGA_TC64V1.qpf: -------------------------------------------------------------------------------- 1 | # -------------------------------------------------------------------------- # 2 | # 3 | # Copyright (C) 1991-2013 Altera Corporation 4 | # Your use of Altera Corporation's design tools, logic functions 5 | # and other software and tools, and its AMPP partner logic 6 | # functions, and any output files from any of the foregoing 7 | # (including device programming or simulation files), and any 8 | # associated documentation or information are expressly subject 9 | # to the terms and conditions of the Altera Program License 10 | # Subscription Agreement, Altera MegaCore Function License 11 | # Agreement, or other applicable license agreement, including, 12 | # without limitation, that your use is for the sole purpose of 13 | # programming logic devices manufactured by Altera and sold by 14 | # Altera or its authorized distributors. Please refer to the 15 | # applicable agreement for further details. 16 | # 17 | # -------------------------------------------------------------------------- # 18 | # 19 | # Quartus II 64-Bit 20 | # Version 13.0.1 Build 232 06/12/2013 Service Pack 1 SJ Web Edition 21 | # Date created = 22:37:57 August 24, 2020 22 | # 23 | # -------------------------------------------------------------------------- # 24 | 25 | QUARTUS_VERSION = "13.0" 26 | DATE = "22:37:57 August 24, 2020" 27 | 28 | # Revisions 29 | 30 | PROJECT_REVISION = "MinimigAGA_TC64V1" 31 | -------------------------------------------------------------------------------- /fw/ctrl_832/rafile.h: -------------------------------------------------------------------------------- 1 | #ifndef RAFILE_H 2 | #define RAFILE_H 3 | 4 | /* Utility functions to provide the Minimig OSD code with file access 5 | at single-byte rather than 512-byte-block granularity. 6 | Copyright (c) 2012 by Alastair M. Robinson 7 | 8 | Contributed to the Minimig project, which is free software; 9 | you can redistribute it and/or modify it under the terms of 10 | the GNU General Public License as published by the Free Software Foundation; 11 | either version 3 of the License, or (at your option) any later version. 12 | 13 | Minimig is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | GNU General Public License for more details. 17 | 18 | You should have received a copy of the GNU General Public License 19 | along with this program. If not, see . 20 | */ 21 | 22 | #include "fat.h" 23 | 24 | typedef struct 25 | { 26 | fileTYPE file; 27 | unsigned long size; 28 | unsigned long ptr; 29 | unsigned char buffer[512]; // Each RandomAccessFile has its own sector_buffer 30 | } RAFile; 31 | 32 | int RARead(RAFile *file,unsigned char *pBuffer, unsigned long bytes); 33 | int RAReadLine(RAFile *file,unsigned char *pBuffer, unsigned long bytes); 34 | int RASeek(RAFile *file,unsigned long offset,unsigned long origin); 35 | int RAOpen(RAFile *file,const char *filename); 36 | #endif 37 | -------------------------------------------------------------------------------- /fw/testbed/rafile.h: -------------------------------------------------------------------------------- 1 | #ifndef RAFILE_H 2 | #define RAFILE_H 3 | 4 | /* Utility functions to provide the Minimig OSD code with file access 5 | at single-byte rather than 512-byte-block granularity. 6 | Copyright (c) 2012 by Alastair M. Robinson 7 | 8 | Contributed to the Minimig project, which is free software; 9 | you can redistribute it and/or modify it under the terms of 10 | the GNU General Public License as published by the Free Software Foundation; 11 | either version 3 of the License, or (at your option) any later version. 12 | 13 | Minimig is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | GNU General Public License for more details. 17 | 18 | You should have received a copy of the GNU General Public License 19 | along with this program. If not, see . 20 | */ 21 | 22 | #include "fat.h" 23 | 24 | typedef struct 25 | { 26 | fileTYPE file; 27 | unsigned long size; 28 | unsigned long ptr; 29 | unsigned char buffer[512]; // Each RandomAccessFile has its own sector_buffer 30 | } RAFile; 31 | 32 | int RARead(RAFile *file,unsigned char *pBuffer, unsigned long bytes); 33 | int RAReadLine(RAFile *file,unsigned char *pBuffer, unsigned long bytes); 34 | int RASeek(RAFile *file,unsigned long offset,unsigned long origin); 35 | int RAOpen(RAFile *file,const char *filename); 36 | #endif 37 | -------------------------------------------------------------------------------- /rtl/audio/AudioMix.vhd: -------------------------------------------------------------------------------- 1 | -- A dirty audio mixer which avoids attenuation by clipping extremities 2 | -- 3 | -- Copyright 2020 by Alastair M. Robinson 4 | 5 | library IEEE; 6 | use IEEE.STD_LOGIC_1164.ALL; 7 | use IEEE.numeric_std.ALL; 8 | 9 | entity AudioMix is 10 | port 11 | ( 12 | clk : in std_logic; 13 | reset_n : in std_logic; 14 | audio_in_l1 : in signed(15 downto 0); 15 | audio_in_l2 : in signed(15 downto 0); 16 | audio_in_r1 : in signed(15 downto 0); 17 | audio_in_r2 : in signed(15 downto 0); 18 | audio_l : out signed(15 downto 0); 19 | audio_r : out signed(15 downto 0) 20 | ); 21 | end entity; 22 | 23 | architecture rtl of AudioMix is 24 | 25 | signal in1 : signed(16 downto 0); 26 | signal in2 : signed(16 downto 0); 27 | signal sum : signed(16 downto 0); 28 | signal overflow : std_logic; 29 | signal clipped : signed(16 downto 0); 30 | signal toggle : std_logic; 31 | 32 | begin 33 | 34 | in1(16)<=in1(15); 35 | in2(16)<=in2(15); 36 | 37 | in1(15 downto 0)<=audio_in_l1 when toggle='0' else audio_in_r1; 38 | in2(15 downto 0)<=audio_in_l2 when toggle='0' else audio_in_r2; 39 | 40 | sum<=in1+in2; 41 | overflow<=sum(15) xor sum(16); 42 | 43 | clipped<=sum when overflow='0' else (others=>sum(16)); 44 | 45 | process(clk) 46 | begin 47 | if rising_edge(clk) then 48 | if toggle='0' then 49 | audio_l<=clipped(15 downto 0); 50 | else 51 | audio_r<=clipped(15 downto 0); 52 | end if; 53 | toggle<=not toggle; 54 | end if; 55 | end process; 56 | 57 | 58 | end architecture; -------------------------------------------------------------------------------- /fw/testbed/malloc.h: -------------------------------------------------------------------------------- 1 | #ifndef MALLOC_H 2 | #define MALLOC_H 3 | 4 | /* 5 | * malloc.h 6 | * 7 | * Internals for the memory allocator 8 | */ 9 | 10 | // #include 11 | #include 12 | 13 | #ifdef __cplusplus 14 | extern "C" { 15 | #endif 16 | 17 | /* 18 | * This structure should be a power of two. This becomes the 19 | * alignment unit. 20 | */ 21 | struct free_arena_header; 22 | 23 | struct arena_header { 24 | int type; 25 | size_t size; 26 | struct free_arena_header *next, *prev; 27 | }; 28 | 29 | #ifdef DEBUG_MALLOC 30 | #define ARENA_TYPE_USED 0x64e69c70 31 | #define ARENA_TYPE_FREE 0x012d610a 32 | #define ARENA_TYPE_HEAD 0x971676b5 33 | #define ARENA_TYPE_DEAD 0xeeeeeeee 34 | #else 35 | #define ARENA_TYPE_USED 0 36 | #define ARENA_TYPE_FREE 1 37 | #define ARENA_TYPE_HEAD 2 38 | #endif 39 | 40 | #define MALLOC_CHUNK_MASK 511 41 | 42 | #define ARENA_SIZE_MASK (~(sizeof(struct arena_header)-1)) 43 | 44 | /* 45 | * This structure should be no more than twice the size of the 46 | * previous structure. 47 | */ 48 | struct free_arena_header { 49 | struct arena_header a; 50 | struct free_arena_header *next_free, *prev_free; 51 | }; 52 | 53 | // extern char heap_low, heap_top; // Take the addresses of these. 54 | 55 | void malloc_add(void *p,size_t size); 56 | 57 | void *malloc(size_t); 58 | void *calloc(int nmemb,size_t size); 59 | void free(void *m); 60 | int availmem(); 61 | 62 | void malloc_dump(); 63 | 64 | #ifdef __cplusplus 65 | } 66 | #endif 67 | 68 | #endif 69 | -------------------------------------------------------------------------------- /fw/ctrl_832/fdd.h: -------------------------------------------------------------------------------- 1 | #ifndef FDD_H 2 | #define FDD_H 3 | 4 | // floppy disk interface defs 5 | #define CMD_RDTRK 0x01 6 | #define CMD_WRTRK 0x02 7 | 8 | // floppy status 9 | #define DSK_INSERTED 0x01 /*disk is inserted*/ 10 | #define DSK_WRITABLE 0x10 /*disk is writable*/ 11 | 12 | #define MAX_TRACKS (83*2) 13 | 14 | typedef struct 15 | { 16 | unsigned char status; /*status of floppy*/ 17 | unsigned char tracks; /*number of tracks*/ 18 | unsigned long cache[MAX_TRACKS]; /*cluster cache*/ 19 | unsigned long cluster_offset; /*cluster offset to handle tricky loaders*/ 20 | unsigned char sector_offset; /*sector offset to handle tricky loaders*/ 21 | unsigned char track; /*current track*/ 22 | unsigned char track_prev; /*previous track*/ 23 | unsigned char motor; 24 | char name[22]; /*floppy name*/ 25 | } adfTYPE; 26 | 27 | extern adfTYPE df[4]; // drive 0 information structure 28 | 29 | void SectorGapToFpga(void); 30 | void SectorHeaderToFpga(unsigned char n, unsigned char dsksynch, unsigned char dsksyncl); 31 | //unsigned short SectorToFpga(unsigned char sector, unsigned char track, unsigned char dsksynch, unsigned char dsksyncl); 32 | void ReadTrack(adfTYPE *drive); 33 | unsigned char FindSync(adfTYPE *drive); 34 | unsigned char GetHeader(unsigned int *pTrack, unsigned int *pSector); 35 | unsigned char GetData(void); 36 | void WriteTrack(adfTYPE *drive); 37 | void UpdateDriveStatus(void); 38 | void HandleFDD(unsigned char c1, unsigned char c2, unsigned char c3, unsigned char c4); 39 | 40 | #endif 41 | 42 | -------------------------------------------------------------------------------- /bench/lcd/lcd_tb.v: -------------------------------------------------------------------------------- 1 | /* lcd_tb.v */ 2 | 3 | 4 | `timescale 1ns/1ps 5 | 6 | 7 | module lcd_tb(); 8 | 9 | 10 | reg clk; 11 | reg rst; 12 | 13 | wire sof; 14 | wire [ 4-1:0] r; 15 | wire [ 4-1:0] g; 16 | wire [ 4-1:0] b; 17 | wire [ 16-1:0] lcd_dat; 18 | wire lcd_cs; 19 | wire lcd_rs; 20 | wire lcd_wr; 21 | wire lcd_rd; 22 | wire lcd_res; 23 | 24 | 25 | //// clock //// 26 | `define CLK_HP 17.857 27 | initial begin 28 | clk = 0; 29 | forever #`CLK_HP clk = ~clk; 30 | end 31 | 32 | 33 | //// reset //// 34 | initial begin 35 | rst = 1; 36 | repeat (10) @ (posedge clk); #1; 37 | rst = 0; 38 | end 39 | 40 | 41 | //// stop //// 42 | initial begin 43 | $display("LCD bench starting ..."); 44 | repeat(1000) @ (posedge clk); 45 | $display("LCD bench stopping ..."); 46 | $finish; 47 | end 48 | 49 | initial begin 50 | wait(lcd.init_cnt == 'd162); 51 | repeat(10) @ (posedge clk); #1; 52 | force sof = 1; 53 | @ (posedge clk); #1; 54 | release sof; 55 | end 56 | 57 | 58 | //// DUT //// 59 | lcd lcd( 60 | .clk (clk ), 61 | .rst (rst ), 62 | .sof (sof ), 63 | .r (r ), 64 | .g (g ), 65 | .b (b ), 66 | .lcd_dat (lcd_dat ), 67 | .lcd_cs (lcd_cs ), 68 | .lcd_rs (lcd_rs ), 69 | .lcd_wr (lcd_wr ), 70 | .lcd_rd (lcd_rd ), 71 | .lcd_res (lcd_res ) 72 | ); 73 | 74 | 75 | endmodule 76 | 77 | -------------------------------------------------------------------------------- /sw/hex2mif/hex2mif.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | 4 | import sys 5 | from optparse import OptionParser 6 | 7 | 8 | # get commandline options & arguments 9 | usage = "Usage: %prog [options] in.hex out.mif" 10 | parser = OptionParser(usage=usage) 11 | parser.add_option("-w", "--data-width", dest="dw", action="store", default="32", help="Force use of this many data bits") 12 | (options, args) = parser.parse_args() 13 | 14 | # parse args 15 | if (len(args) != 2) : parser.error("Invalid number of arguments.\n") 16 | fin = args[0] 17 | fon = args[1] 18 | 19 | 20 | # line counter 21 | line_cnt = 0 22 | 23 | # output 24 | out = "" 25 | 26 | # open input file 27 | with open(fin, 'r') as f: 28 | for line in f: 29 | line = line[0:len(line)-1] 30 | if (line != ""): 31 | #val = int(line, 0) 32 | out = out + " %x : %s;\n" % (line_cnt, line) 33 | line_cnt = line_cnt + 1 34 | 35 | 36 | # header 37 | header = "" 38 | header = header + "-- Memory Initialization File\n" 39 | header = header + "-- Generated by hex2mif.py\n" 40 | header = header + "-- From: %s\n\n" % fin 41 | header = header + "DEPTH = %d;\n" % line_cnt 42 | header = header + "WIDTH = %d;\n\n" % int(options.dw,0) 43 | header = header + "ADDRESS_RADIX = HEX;\n" 44 | header = header + "DATA_RADIX = HEX;\n\n" 45 | header = header + "CONTENT\n BEGIN\n" 46 | 47 | # footer 48 | footer = " END;\n" 49 | 50 | # add header + out + footer 51 | out = header + out + footer 52 | 53 | 54 | # write 55 | with open(fon, 'w') as f: 56 | f.write(out) 57 | 58 | 59 | # end 60 | 61 | -------------------------------------------------------------------------------- /doc/amiga/ahi/Aros_Developer_AHIDrivers - Wikibooks, open books for an open world_files/index(4).php: -------------------------------------------------------------------------------- 1 | // Navigate Tabs. Allows for lots of information to be displayed on a page in a more compact form. 2 | // Maintained by [[User:Darklama]] 3 | 4 | function Navigate_Tabs() 5 | { 6 | function clicked_tab( e ) 7 | { 8 | var $target = $( e.target ), id = e.target.hash; 9 | 10 | if ( !$target.is( 'a' ) || !id ) { 11 | return true; 12 | } 13 | 14 | $target = $(this).siblings( id ); 15 | 16 | if ( !$target.hasClass( 'contents' ) || !$target.parent().hasClass( 'navtabs' ) ) { 17 | return true; 18 | } 19 | 20 | e.preventDefault(); 21 | 22 | $target.parent().children( '.tabs' ).find( 'a' ).each( function() { 23 | if ( this.hash !== id ) { 24 | $(this).parent().addClass( 'inactive' ).removeClass( 'selected' ); 25 | } else { 26 | $(this).parent().addClass( 'selected' ).removeClass( 'inactive' ); 27 | } 28 | } ); 29 | 30 | $target.parent().children( '.contents' ).hide(); 31 | $target.show(); 32 | } 33 | 34 | mw.util.$content.find('.navtabs').each( function() { 35 | var $this = $(this), $p = $this.children( 'p' ), $tabs, $any; 36 | 37 | // remove any surrounding paragraph first 38 | $p.has( '.tabs' ).before( $p.children( '.tabs' ) ).remove(); 39 | 40 | // deal with clicks, and show default 41 | $tabs = $this.children( '.tabs' ).click( clicked_tab ); 42 | $any = $tabs.children( '.selected' ).find('a[href^="#"]').click(); 43 | 44 | if ( !$any.length ) { 45 | $tabs.children(':first-child').find('a[href^="#"]').click(); 46 | } 47 | } ); 48 | } 49 | 50 | $(document).ready(Navigate_Tabs); -------------------------------------------------------------------------------- /rtl/minimig/minimig_bankmapper.v: -------------------------------------------------------------------------------- 1 | //This module maps physical 512KB blocks of every memory chip to different memory ranges in Amiga 2 | 3 | 4 | module minimig_bankmapper 5 | ( 6 | input chip0, // chip ram select: 1st 512 KB block 7 | input chip1, // chip ram select: 2nd 512 KB block 8 | input chip2, // chip ram select: 3rd 512 KB block 9 | input chip3, // chip ram select: 4th 512 KB block 10 | input slow0, // slow ram select: 1st 512 KB block 11 | input slow1, // slow ram select: 2nd 512 KB block 12 | input slow2, // slow ram select: 3rd 512 KB block 13 | input kick, // Kickstart ROM address range select 14 | input kickext, // Kickstart extended ROM select 15 | input kick1mb, // 1MB Kickstart 'upper' half 16 | input cart, // Action Replay memory range select 17 | // input aron, // Action Replay enable 18 | input ecs, // ECS chipset enable 19 | input [3:0] memory_config, // memory configuration 20 | output reg [7:0] bank // bank select 21 | ); 22 | 23 | 24 | always @(*) 25 | begin 26 | bank[7:4] = { kick , kickext, chip3 | chip2 | chip1 | chip0, kick1mb | slow0 | slow1 | slow2 | cart }; 27 | case (memory_config[1:0]) 28 | 2'b00 : bank[3:0] = { 1'b0, 1'b0, 1'b0, chip3 | chip2 | chip1 | chip0 }; // 0.5M CHIP 29 | 2'b01 : bank[3:0] = { 1'b0, 1'b0, chip3 | chip1, chip2 | chip0 }; // 1.0M CHIP 30 | 2'b10 : bank[3:0] = { 1'b0, chip2, chip1, chip0 }; // 1.5M CHIP 31 | 2'b11 : bank[3:0] = { chip3, chip2, chip1, chip0 }; // 2.0M CHIP 32 | endcase 33 | end 34 | 35 | 36 | endmodule 37 | 38 | -------------------------------------------------------------------------------- /rtl/audio/audio_shifter.v: -------------------------------------------------------------------------------- 1 | /* audio_shifter.v */ 2 | 3 | 4 | module audio_shifter( 5 | input wire clk, //32MHz 6 | input wire nreset, 7 | input wire mix, 8 | input wire [ 15-1:0] rdata, 9 | input wire [ 15-1:0] ldata, 10 | input wire exchan, 11 | output wire aud_bclk, 12 | output wire aud_daclrck, 13 | output wire aud_dacdat, 14 | output wire aud_xck 15 | ); 16 | 17 | 18 | //// L-R mixer //// 19 | 20 | wire [ 16-1:0] rdata_mix; 21 | wire [ 16-1:0] ldata_mix; 22 | 23 | assign rdata_mix = {rdata[14], rdata} + {{2{ldata[14]}}, ldata[14:1]}; 24 | assign ldata_mix = {ldata[14], ldata} + {{2{rdata[14]}}, rdata[14:1]}; 25 | 26 | // data mux 27 | reg [16-1:0] rdata_mux; 28 | reg [16-1:0] ldata_mux; 29 | 30 | always @ (posedge clk) begin 31 | rdata_mux <= #1 (mix) ? rdata_mix : {rdata, rdata[13]}; 32 | ldata_mux <= #1 (mix) ? ldata_mix : {ldata, ldata[13]}; 33 | end 34 | 35 | 36 | //// audio output shifter //// 37 | 38 | reg [ 9-1:0] shiftcnt; 39 | reg [ 16-1:0] shift; 40 | 41 | always @(posedge clk, negedge nreset) begin 42 | if(~nreset) 43 | shiftcnt <= 9'd0; 44 | else 45 | shiftcnt <= shiftcnt - 9'd1; 46 | end 47 | 48 | always @ (posedge clk) begin 49 | if(~|shiftcnt[2:0]) begin 50 | if (~|shiftcnt[6:3]) 51 | shift <= #1 (exchan ^ shiftcnt[7]) ? ldata_mux : rdata_mux; 52 | else 53 | shift <= #1 {shift[14:0], 1'b0}; 54 | end 55 | end 56 | 57 | 58 | //// output //// 59 | assign aud_daclrck = shiftcnt[7]; 60 | assign aud_bclk = ~shiftcnt[2]; 61 | assign aud_xck = shiftcnt[0]; 62 | assign aud_dacdat = shift[15]; 63 | 64 | 65 | endmodule 66 | 67 | -------------------------------------------------------------------------------- /sw/mkdrivesounds/mkdrivesounds.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | enum DriveSound_Type { 4 | DRIVESOUND_INSERT=0,DRIVESOUND_EJECT,DRIVESOUND_MOTORSTART,DRIVESOUND_MOTORLOOP,DRIVESOUND_MOTORSTOP, 5 | DRIVESOUND_STEP1,DRIVESOUND_STEP2,DRIVESOUND_STEP3,DRIVESOUND_STEP4, 6 | DRIVESOUND_HDDSTEP1,DRIVESOUND_HDDSTEP2,DRIVESOUND_HDDSTEP3,DRIVESOUND_HDDSTEP4 7 | }; 8 | 9 | int gains[]= 10 | { 11 | 75,75,75,75,80,160,170,165,161,16,21,18,15 12 | }; 13 | 14 | 15 | void emit_longword_be(unsigned int v) 16 | { 17 | putchar((v>>24)&255); 18 | putchar((v>>16)&255); 19 | putchar((v>>8)&255); 20 | putchar(v&255); 21 | } 22 | 23 | unsigned char buffer[512]; 24 | 25 | // Convert little endian to big endian 26 | int bufferswap(unsigned char *b,int c,int gain) 27 | { 28 | while(c>0) 29 | { 30 | int a=b[0] | (b[1]<<8); 31 | if(a&0x8000) 32 | a=-(0x10000-a); 33 | // Apply gain 34 | a=(a*gain)>>8; 35 | // Re-encode as S16BE 36 | b[0]=a>>8; 37 | b[1]=a&0xff; 38 | b+=2; 39 | c-=2; 40 | } 41 | } 42 | 43 | 44 | int main(int argc,char **argv) 45 | { 46 | int i; 47 | printf("DRIVESND"); 48 | for(i=1;i0) 62 | { 63 | int r=fread(buffer,1,512,f); 64 | bufferswap(buffer,r,gains[i-1]); 65 | l-=r; 66 | fwrite(buffer,1,r,stdout); 67 | } 68 | } 69 | emit_longword_be(0); 70 | emit_longword_be(0); 71 | return(0); 72 | } 73 | 74 | -------------------------------------------------------------------------------- /fw/ctrl_832/Makefile.68k: -------------------------------------------------------------------------------- 1 | # Supply these as parameters from higher up. 2 | TARGET=m68k-elf 3 | ARCH=68000 4 | DEFS= 5 | ID=_CA 6 | 7 | C_SRC=fat.c fdd.c fpga.c hardware.c hdd.c main.c menu.c mmc.c osd.c printf.c swap.c config.c rafile.c hexdump.c # small_printf.c 8 | KLIBC_SRC=vsnprintf.c sprintf.c memcpy.c memcmp.c strcpy.c strcat.c strncat.c strncmp.c strlen.c memset.c strncpy.c strchr.c 9 | A_SRC=startup_$(TARGET).s 10 | 11 | BUILD_DIR=$(TARGET)-build 12 | C_OBJ=$(patsubst %.c,$(BUILD_DIR)/%.o,$(C_SRC)) 13 | LIBC_OBJ=$(patsubst %.c,$(BUILD_DIR)/%.o,$(KLIBC_SRC)) 14 | A_OBJ=$(patsubst %.s,$(BUILD_DIR)/%.o,$(A_SRC)) 15 | OBJ=$(C_OBJ) $(A_OBJ) 16 | 17 | CC=$(TARGET)-gcc 18 | AR=$(TARGET)-ar 19 | OBJCOPY=$(TARGET)-objcopy 20 | CFLAGS+=$(DEFS) -m$(ARCH) -Wall -Wno-char-subscripts -Os -fno-common -fomit-frame-pointer -I./include -DACTIONREPLAY_BROKEN 21 | LDFLAGS+=-m$(ARCH) -Xlinker -Map=menu.map -nostartfiles -nostdlib -lgcc -L$(BUILD_DIR) 22 | 23 | ELF=$(BUILD_DIR)/menu.elf 24 | OUTPUT=OSD$(ID)01.sys 25 | LINK_SCRIPT=osd_$(TARGET).ld 26 | LIBC_TARGET=$(BUILD_DIR)/libc.a 27 | 28 | all: $(BUILD_DIR) $(LIBC_TARGET) $(OUTPUT) 29 | 30 | clean: 31 | rm -rf $(BUILD_DIR) $(LIBC_TARGET) $(ELF) $(OUTPUT) 32 | 33 | $(LIBC_TARGET): $(LIBC_OBJ) 34 | $(AR) -r $(LIBC_TARGET) $(LIBC_OBJ) 35 | 36 | $(OUTPUT): $(ELF) 37 | $(OBJCOPY) -O binary $(ELF) $(OUTPUT) 38 | 39 | $(ELF): $(OBJ) $(LINK_SCRIPT) 40 | $(CC) -o $@ -T $(LINK_SCRIPT) $(OBJ) $(LIBC_OBJ) $(LDFLAGS) 41 | 42 | $(BUILD_DIR): 43 | mkdir $(BUILD_DIR) 44 | 45 | $(BUILD_DIR)/%.o: %.c 46 | $(CC) $(CFLAGS) -c -o $@ $< 47 | 48 | $(BUILD_DIR)/%.o: klibc/%.c 49 | $(CC) $(CFLAGS) -c -o $@ $< 50 | 51 | $(BUILD_DIR)/%.o: %.s 52 | $(CC) $(CFLAGS) -c -o $@ $< 53 | 54 | -------------------------------------------------------------------------------- /rtl/minimig/agnus_blitter_minterm.v: -------------------------------------------------------------------------------- 1 | //Blitter minterm function generator 2 | //The minterm function generator takes , and 3 | //and checks every logic combination against the LF control byte. 4 | //If a combination is marked as 1 in the LF byte,the ouput will 5 | //also be 1,else the output is 0. 6 | 7 | module agnus_blitter_minterm 8 | ( 9 | input [7:0] lf, //LF control byte 10 | input [15:0] ain, //A channel in 11 | input [15:0] bin, //B channel in 12 | input [15:0] cin, //C channel in 13 | output [15:0] out //function generator output 14 | ); 15 | 16 | reg [15:0] mt0; //minterm 0 17 | reg [15:0] mt1; //minterm 1 18 | reg [15:0] mt2; //minterm 2 19 | reg [15:0] mt3; //minterm 3 20 | reg [15:0] mt4; //minterm 4 21 | reg [15:0] mt5; //minterm 5 22 | reg [15:0] mt6; //minterm 6 23 | reg [15:0] mt7; //minterm 7 24 | 25 | //Minterm generator for each bit. The code inside the loop 26 | //describes one bit. The loop is 'unrolled' by the 27 | //synthesizer to cover all 16 bits in the word. 28 | integer j; 29 | always @(ain or bin or cin or lf) 30 | for (j=15; j>=0; j=j-1) 31 | begin 32 | mt0[j] = ~ain[j] & ~bin[j] & ~cin[j] & lf[0]; 33 | mt1[j] = ~ain[j] & ~bin[j] & cin[j] & lf[1]; 34 | mt2[j] = ~ain[j] & bin[j] & ~cin[j] & lf[2]; 35 | mt3[j] = ~ain[j] & bin[j] & cin[j] & lf[3]; 36 | mt4[j] = ain[j] & ~bin[j] & ~cin[j] & lf[4]; 37 | mt5[j] = ain[j] & ~bin[j] & cin[j] & lf[5]; 38 | mt6[j] = ain[j] & bin[j] & ~cin[j] & lf[6]; 39 | mt7[j] = ain[j] & bin[j] & cin[j] & lf[7]; 40 | end 41 | 42 | //Generate function generator output by or-ing all 43 | //minterms together. 44 | assign out = mt0 | mt1 | mt2 | mt3 | mt4 | mt5 | mt6 | mt7; 45 | 46 | 47 | endmodule 48 | 49 | -------------------------------------------------------------------------------- /fw/amiga_boot/Makefile: -------------------------------------------------------------------------------- 1 | # MINIMIG-DE1 2 | # amiga boot firmware 3 | # 2012, rok.krajnc@gmail.com 4 | 5 | 6 | ### paths ### 7 | # clear dir vars if these programs are in path 8 | VASM_DIR = ../../sw/vasm/ 9 | HEX2MEM_DIR = ../../sw/hex2mem/ 10 | HEX2MIF_DIR = ../../sw/hex2mif/ 11 | 12 | 13 | ### programs ### 14 | VASM = $(VASM_DIR)vasmm68k_mot 15 | XXD = xxd 16 | HEX2MEM = $(HEX2MEM_DIR)hex2mem.py 17 | HEX2MIF = $(HEX2MIF_DIR)hex2mif.py 18 | 19 | 20 | ### flags ### 21 | ASMFLAGS=-m68000 -showopt -Fbin 22 | XXDFLAGS=-ps -c 2 23 | HEXFLAGS=-a 8 -s 256 -w 4 24 | 25 | 26 | ### variables ### 27 | BUILD_USER=\"$(USER)\" 28 | BUILD_T=$$(date +%Y-%m-%d) 29 | BUILD_TIME=\"$(BUILD_T)\" 30 | BUILD_N=$$(cat build_num.txt) 31 | BUILD_NUM=\"$(BUILD_N)\" 32 | BUILD_R=$$(git rev-parse --verify HEAD) 33 | BUILD_REV=\"$(BUILD_R)\" 34 | 35 | BINDIR=bin 36 | OBJDIR=obj 37 | 38 | 39 | ### files ### 40 | 41 | # asm sources 42 | ASM_SOURCES=amiga_boot.asm 43 | 44 | 45 | ### build rules ### 46 | 47 | # all 48 | all: 49 | @echo Making amiga_boot firmware ... 50 | @make bin 51 | @make bin/amiga_boot.v 52 | @make bin/amiga_boot.mif 53 | 54 | bin: 55 | @echo $@ 56 | @mkdir -p $(BINDIR) 57 | 58 | bin/amiga_boot.bin : Makefile bin $(ASM_SOURCES) 59 | @echo $@ 60 | @$(VASM) $(ASMFLAGS) $(ASM_SOURCES) -o $@ 61 | 62 | bin/amiga_boot.hex : Makefile bin bin/amiga_boot.bin 63 | @echo $@ 64 | @$(XXD) $(XXDFLAGS) $(@:.hex=.bin) > $@ 65 | 66 | bin/amiga_boot.v : Makefile bin bin/amiga_boot.hex 67 | @echo $@ 68 | @$(HEX2MEM) $(HEXFLAGS) $(@:.v=.hex) $@ 69 | 70 | bin/amiga_boot.mif : bin/amiga_boot.hex 71 | @echo $@ 72 | @$(HEX2MIF) -w 16 $(@:.mif=.hex) $@ 73 | 74 | # clean 75 | clean: 76 | @echo clean 77 | @rm -rf ./$(BINDIR) 78 | 79 | -------------------------------------------------------------------------------- /doc/amiga/ahi/Aros_Developer_AHIDrivers - Wikibooks, open books for an open world_files/load(3).php: -------------------------------------------------------------------------------- 1 | mw.loader.using('mediawiki.util',function(){if(mw.config.get('wgArticleId')===0&&mw.config.get('wgNamespaceNumber')===2){var titleParts=mw.config.get('wgPageName').split('/',3);if(titleParts.length==2){var userSkinPage=titleParts[0]+'/'+mw.config.get('skin');if(titleParts[1]==='skin.js'){window.location.href=mw.util.getUrl(userSkinPage+'.js');}else if(titleParts[1]=='skin.css'){window.location.href=mw.util.getUrl(userSkinPage+'.css');}}}mw.config.set('wgBookName',(mw.config.get('wgPageName').split('/',1)[0]||'').split(':',2).join(':'));importStylesheet('MediaWiki:Common.css/'+mw.config.get('wgBookName'));importScript('MediaWiki:Common.js/w/'+mw.config.get('wgPageName'));importScript('MediaWiki:Common.js/Relics.js');importScript('MediaWiki:Common.js/ExtraTools.js');importScript('MediaWiki:Common.js/CollapseElements.js');importScript('MediaWiki:Common.js/NavigationTabs.js');importScript('MediaWiki:Common.js/Displaytitle.js');importScript('MediaWiki:Common.js/Perbook.js');importScript( 2 | 'MediaWiki:Common.js/tabs.js');importScript('MediaWiki:Common.js/top.js');importScript('MediaWiki:Common.js/review.js');importScript('MediaWiki:Common.js/Categories.js');importScript('MediaWiki:Common.js/use.js');importScript('MediaWiki:Common.js/Slideshows.js');if(mw.config.get('wgCanonicalSpecialPageName')==='Watchlist'){importScript('MediaWiki:Common.js/WatchlistNotice.js');}else if($.inArray(mw.config.get('wgAction'),['edit','submit','upload'])!==-1){importScript('MediaWiki:Common.js/Special_characters.js');importScript('MediaWiki:Common.js/Toolbox.js');}});mw.loader.state({"site":"ready"}); 3 | /* cache key: enwikibooks:resourceloader:filter:minify-js:7:e16978ddc3a5d40fd24d953a2509b7cd */ -------------------------------------------------------------------------------- /fw/romgen/romgen.c: -------------------------------------------------------------------------------- 1 | // zpuromgen.c 2 | // 3 | // Program to turn a binary file into a VHDL lookup table. 4 | // by Adam Pierce 5 | // 29-Feb-2008 6 | // 7 | // This software is free to use by anyone for any purpose. 8 | // 9 | // Modified by Alastair M. Robinson to output 8-bit data rather than 32 10 | 11 | #include 12 | #include 13 | 14 | typedef unsigned char BYTE; 15 | 16 | main(int argc, char **argv) 17 | { 18 | BYTE opcode[4]; 19 | int fd; 20 | int addr = 0; 21 | ssize_t s; 22 | 23 | // Check the user has given us an input file. 24 | if(argc < 2) 25 | { 26 | printf("Usage: %s \n\n", argv[0]); 27 | return 1; 28 | } 29 | 30 | // Open the input file. 31 | fd = open(argv[1], 0); 32 | if(fd == -1) 33 | { 34 | perror("File Open"); 35 | return 2; 36 | } 37 | 38 | while(1) 39 | { 40 | // Read 32 bits. 41 | // s = read(fd, opcode, 4); 42 | s = read(fd, opcode, 1); 43 | if(s == -1) 44 | { 45 | perror("File read"); 46 | return 3; 47 | } 48 | 49 | if(s == 0) 50 | break; // End of file. 51 | 52 | // Output to STDOUT. 53 | // printf("%6d => x\"%02x%02x%02x%02x\",\n", 54 | // addr++, opcode[0], opcode[1], 55 | // opcode[2], opcode[3]); 56 | printf("%6d => x\"%02x\",\n", 57 | addr++, opcode[0]); 58 | } 59 | 60 | close(fd); 61 | return 0; 62 | } 63 | 64 | -------------------------------------------------------------------------------- /rtl/minimig/minimig_syscontrol.v: -------------------------------------------------------------------------------- 1 | //syscontrol handles the startup of the FGPA, 2 | //after fpga config, it automatically does a global system reset and asserts boot. 3 | //the boot signal puts gary in a special mode so that the bootrom 4 | //is mapped into the system memory map. The firmware in the bootrom 5 | //then loads the kickstart via the diskcontroller into the kickstart ram area. 6 | //When kickstart has been loaded, the bootrom asserts bootdone by selecting both cia's at once. 7 | //This resets the system for a second time but it also de-asserts boot. 8 | //Thus, the system now boots as a regular amiga. 9 | //Subsequent resets by asserting mrst will not assert boot again. 10 | // 11 | // JB: 12 | // 2008-07-11 - reset to bootloader 13 | // 2009-03-13 - shorter reset 14 | // 2009-08-17 - reset generator modification 15 | 16 | 17 | module minimig_syscontrol 18 | ( 19 | input clk, //bus clock 20 | input clk7_en, 21 | input cnt, //pulses for counting 22 | input mrst, //master/user reset input 23 | output reset //global synchronous system reset 24 | ); 25 | 26 | //local signals 27 | reg smrst0, smrst1; //registered input 28 | reg [2:0] rst_cnt = 0; //reset timer SHOULD BE CLEARED BY CONFIG 29 | wire _rst; //local reset signal 30 | 31 | //asynchronous mrst input synchronizer 32 | always @(posedge clk) begin 33 | if (clk7_en) begin 34 | smrst0 <= mrst; 35 | smrst1 <= smrst0; 36 | end 37 | end 38 | 39 | //reset timer and mrst control 40 | always @(posedge clk) begin 41 | if (clk7_en) begin 42 | if (smrst1) 43 | rst_cnt <= 3'd0; 44 | else if (!_rst && cnt) 45 | rst_cnt <= rst_cnt + 3'd1; 46 | end 47 | end 48 | 49 | assign _rst = rst_cnt[2]; 50 | 51 | //global reset output 52 | assign reset = ~_rst; 53 | 54 | 55 | endmodule 56 | 57 | -------------------------------------------------------------------------------- /rtl/sdram/dpram_inf_be_1024x32.v: -------------------------------------------------------------------------------- 1 | // dpram_inf_be_1024x16.v 2 | // 2015, rok.krajnc@gmail.com 3 | // inferrable two-port memory with byte-enables 4 | 5 | module dpram_inf_be_1024x32 ( 6 | input wire clock, 7 | input wire wren_a, 8 | input wire [ 4-1:0] byteena_a, 9 | input wire [ 10-1:0] address_a, 10 | input wire [ 32-1:0] data_a, 11 | output reg [ 32-1:0] q_a, 12 | input wire wren_b, 13 | input wire [ 4-1:0] byteena_b, 14 | input wire [ 10-1:0] address_b, 15 | input wire [ 32-1:0] data_b, 16 | output reg [ 32-1:0] q_b 17 | ); 18 | 19 | // memory 20 | reg [8-1:0] mem0 [0:1024-1]; 21 | reg [8-1:0] mem1 [0:1024-1]; 22 | reg [8-1:0] mem2 [0:1024-1]; 23 | reg [8-1:0] mem3 [0:1024-1]; 24 | 25 | // port a 26 | always @ (posedge clock) begin 27 | if (wren_a && byteena_a[0]) mem0[address_a] <= #1 data_a[ 8-1: 0]; 28 | if (wren_a && byteena_a[1]) mem1[address_a] <= #1 data_a[16-1: 8]; 29 | if (wren_a && byteena_a[2]) mem2[address_a] <= #1 data_a[24-1:16]; 30 | if (wren_a && byteena_a[3]) mem3[address_a] <= #1 data_a[32-1:24]; 31 | q_a[ 8-1: 0] <= #1 mem0[address_a]; 32 | q_a[16-1: 8] <= #1 mem1[address_a]; 33 | q_a[24-1:16] <= #1 mem2[address_a]; 34 | q_a[32-1:24] <= #1 mem3[address_a]; 35 | end 36 | 37 | // port b 38 | always @ (posedge clock) begin 39 | if (wren_b && byteena_b[0]) mem0[address_b] <= #1 data_b[ 8-1: 0]; 40 | if (wren_b && byteena_b[1]) mem1[address_b] <= #1 data_b[16-1: 8]; 41 | if (wren_b && byteena_b[2]) mem2[address_b] <= #1 data_b[24-1:16]; 42 | if (wren_b && byteena_b[3]) mem3[address_b] <= #1 data_b[32-1:24]; 43 | q_b[ 8-1: 0] <= #1 mem0[address_b]; 44 | q_b[16-1: 8] <= #1 mem1[address_b]; 45 | q_b[24-1:16] <= #1 mem2[address_b]; 46 | q_b[32-1:24] <= #1 mem3[address_b]; 47 | end 48 | 49 | endmodule 50 | 51 | -------------------------------------------------------------------------------- /rtl/chameleonv1/chameleon_autofire.vhd: -------------------------------------------------------------------------------- 1 | -- ----------------------------------------------------------------------- 2 | -- 3 | -- Turbo Chameleon 4 | -- 5 | -- Multi purpose FPGA expansion for the Commodore 64 computer 6 | -- 7 | -- ----------------------------------------------------------------------- 8 | -- Copyright 2005-2010 by Peter Wendrich (pwsoft@syntiac.com) 9 | -- All Rights Reserved. 10 | -- 11 | -- http://www.syntiac.com/chameleon.html 12 | -- ----------------------------------------------------------------------- 13 | -- 14 | -- Joystick autofire logic 15 | -- 16 | -- ----------------------------------------------------------------------- 17 | 18 | library IEEE; 19 | use IEEE.STD_LOGIC_1164.ALL; 20 | use IEEE.numeric_std.all; 21 | 22 | -- ----------------------------------------------------------------------- 23 | 24 | entity chameleon_autofire is 25 | generic ( 26 | autofire_period : integer := 75000 27 | ); 28 | port ( 29 | clk : in std_logic; 30 | ena_1mhz : in std_logic; 31 | 32 | button_n : in std_logic; 33 | autofire_n : out std_logic 34 | ); 35 | end entity; 36 | 37 | -- ----------------------------------------------------------------------- 38 | 39 | architecture rtl of chameleon_autofire is 40 | signal counter : integer range 0 to autofire_period; 41 | signal autofire_reg : std_logic := '1'; 42 | begin 43 | autofire_n <= autofire_reg; 44 | 45 | process(clk) 46 | begin 47 | if rising_edge(clk) then 48 | if button_n = '1' then 49 | counter <= 0; 50 | autofire_reg <= '1'; 51 | elsif counter = 0 then 52 | counter <= autofire_period; 53 | autofire_reg <= not autofire_reg; 54 | elsif ena_1mhz = '1' then 55 | counter <= counter - 1; 56 | end if; 57 | end if; 58 | end process; 59 | end architecture; 60 | 61 | -------------------------------------------------------------------------------- /bench/cpu_cache_sdram/tg68_ram.v: -------------------------------------------------------------------------------- 1 | // simple ram 2 | // 2014, rok.krajnc@gmail.com 3 | 4 | 5 | module tg68_ram #( 6 | parameter MS = 512 7 | )( 8 | input wire clk, 9 | input wire tg68_as, 10 | input wire [ 32-1:0] tg68_adr, 11 | input wire tg68_rw, 12 | input wire tg68_lds, 13 | input wire tg68_uds, 14 | input wire [ 16-1:0] tg68_dat_out, 15 | output wire [ 16-1:0] tg68_dat_in, 16 | output wire tg68_dtack 17 | ); 18 | 19 | // memory 20 | reg [8-1:0] mem0 [0:MS-1]; 21 | reg [8-1:0] mem1 [0:MS-1]; 22 | 23 | // internal signals 24 | reg [16-1:0] mem_do = 0; 25 | reg trn = 1; 26 | reg ack = 1; 27 | 28 | // clear on start 29 | integer i; 30 | initial begin 31 | for (i=0; i 2 | #include 3 | #include 4 | 5 | int main() 6 | { 7 | unsigned int ddfseq; 8 | 9 | printf("old sequencer:\n"); 10 | printf("ddfseq shres hires lores\n"); 11 | for (ddfseq=0; ddfseq<8; ddfseq++) { 12 | unsigned int ddfseq_neg = (~ddfseq); 13 | unsigned int shres = (((ddfseq_neg&1)?1:0)<<0); 14 | unsigned int hires = (((ddfseq_neg&1)?1:0)<<1) | (((ddfseq_neg&2)?1:0)<<0); 15 | unsigned int lores = (((ddfseq_neg&1)?1:0)<<2) | (((ddfseq_neg&2)?1:0)<<1) | (((ddfseq_neg&4)?1:0)<<0); 16 | printf("%01d %01d %01d %01d\n", ddfseq, shres, hires, lores); 17 | } 18 | printf("\n"); 19 | 20 | printf("new sequencer:\n"); 21 | printf(" mode 1 = 2-fetch sequence (SHRES FMode = 0)\n"); 22 | printf(" mode 2 = 4-fetch sequence (HRES FMode = 0, SHRES FMode = 1)\n"); 23 | printf(" mode 3 = 8-fetch sequence (LRES FMode = 0, HRES FMode = 1, SHRES, FMode = 3)\n"); 24 | printf(" mode 4 = 8-fetch sequence followed by 8 free cycles (LRES FMode = 1, HRES FMode = 3)\n"); 25 | printf(" mode 5 = 8-fetch sequence followed by 24 free cycles (LRES FMode = 3)\n"); 26 | printf("ddfseq 01 02 03 04 05\n"); 27 | for (ddfseq=0; ddfseq<32; ddfseq++) { 28 | unsigned int ddfseq_neg = (~ddfseq); 29 | unsigned int m1 = (((ddfseq_neg&1)?1:0)<<0); 30 | unsigned int m2 = (((ddfseq_neg&1)?1:0)<<1) | (((ddfseq_neg&2)?1:0)<<0); 31 | unsigned int m3 = (((ddfseq_neg&1)?1:0)<<2) | (((ddfseq_neg&2)?1:0)<<1) | (((ddfseq_neg&4)?1:0)<<0); 32 | unsigned int m4 = (((ddfseq &8)?1:0)<<3) | (((ddfseq_neg&1)?1:0)<<2) | (((ddfseq_neg&2)?1:0)<<1) | (((ddfseq_neg&4)?1:0)<<0); 33 | unsigned int m5 = (((ddfseq &16)?1:0)<<4) | (((ddfseq &8)?1:0)<<3) | (((ddfseq_neg&1)?1:0)<<2) | (((ddfseq_neg&2)?1:0)<<1) | (((ddfseq_neg&4)?1:0)<<0); 34 | printf("%02d %02d %02d %02d %02d %02d\n", ddfseq, m1, m2, m3, m4, m5); 35 | } 36 | 37 | 38 | exit(EXIT_SUCCESS); 39 | } 40 | 41 | -------------------------------------------------------------------------------- /rtl/io/sseg_decode.v: -------------------------------------------------------------------------------- 1 | /************************************************/ 2 | /* sseg_decode */ 3 | /* 2011, rok.krajnc@gmail.com */ 4 | /* */ 5 | /* decodes 8-bit number to hexadecimal display */ 6 | /************************************************/ 7 | 8 | // bits 9 | // 0 10 | // ___ 11 | // | | 12 | // 5 |___| 1 13 | // | 6 | 14 | // 4 |___| 2 15 | // 3 16 | 17 | 18 | module sseg_decode #( 19 | parameter REG = 0, // register outputs 20 | parameter INV = 1 // invert outputs 21 | )( 22 | input wire clk, 23 | input wire rst, 24 | input wire [ 4-1:0] num, // input 25 | output wire [ 7-1:0] sseg // output 26 | ); 27 | 28 | 29 | reg [ 7-1:0] sseg_decode; 30 | 31 | 32 | always @ (*) 33 | begin 34 | case(num) 35 | 4'h0 : sseg_decode = 7'b0111111; 36 | 4'h1 : sseg_decode = 7'b0000110; 37 | 4'h2 : sseg_decode = 7'b1011011; 38 | 4'h3 : sseg_decode = 7'b1001111; 39 | 4'h4 : sseg_decode = 7'b1100110; 40 | 4'h5 : sseg_decode = 7'b1101101; 41 | 4'h6 : sseg_decode = 7'b1111101; 42 | 4'h7 : sseg_decode = 7'b0000111; 43 | 4'h8 : sseg_decode = 7'b1111111; 44 | 4'h9 : sseg_decode = 7'b1101111; 45 | 4'ha : sseg_decode = 7'b1110111; 46 | 4'hb : sseg_decode = 7'b1111100; 47 | 4'hc : sseg_decode = 7'b0111001; 48 | 4'hd : sseg_decode = 7'b1011110; 49 | 4'he : sseg_decode = 7'b1111001; 50 | 4'hf : sseg_decode = 7'b1110001; 51 | default : sseg_decode = 7'b0000000; 52 | endcase 53 | end 54 | 55 | 56 | generate if (REG == 1) begin 57 | reg [ 7-1:0] sseg_reg; 58 | always @ (posedge clk, posedge rst) begin 59 | if (rst) 60 | sseg_reg <= #1 7'h0; 61 | else 62 | sseg_reg <= #1 INV ? ~sseg_decode : sseg_decode; 63 | end 64 | assign sseg = sseg_reg; 65 | end else begin 66 | assign sseg = INV ? ~sseg_decode : sseg_decode; 67 | end 68 | endgenerate 69 | 70 | 71 | endmodule 72 | 73 | --------------------------------------------------------------------------------